From de8bb336a676afa05466a17864ecf76cf492bcf6 Mon Sep 17 00:00:00 2001 From: Lee Stott Date: Fri, 29 Aug 2025 13:28:06 +0100 Subject: [PATCH] Add Translations --- .github/workflows/co-op-translator.yml | 101 +++++ .../1-intro-to-ML/translations/README.bn.md | 151 ------- .../1-intro-to-ML/translations/README.es.md | 113 ----- .../1-intro-to-ML/translations/README.fr.md | 109 ----- .../1-intro-to-ML/translations/README.id.md | 107 ----- .../1-intro-to-ML/translations/README.it.md | 108 ----- .../1-intro-to-ML/translations/README.ja.md | 105 ----- .../1-intro-to-ML/translations/README.ko.md | 113 ----- .../translations/README.pt-br.md | 113 ----- .../1-intro-to-ML/translations/README.ru.md | 149 ------- .../1-intro-to-ML/translations/README.tr.md | 114 ----- .../translations/README.zh-cn.md | 107 ----- .../translations/README.zh-tw.md | 103 ----- .../translations/assignment.es.md | 9 - .../translations/assignment.fr.md | 10 - .../translations/assignment.id.md | 9 - .../translations/assignment.it.md | 9 - .../translations/assignment.ja.md | 9 - .../translations/assignment.ko.md | 9 - .../translations/assignment.pt-br.md | 9 - .../translations/assignment.ru.md | 9 - .../translations/assignment.tr.md | 9 - .../translations/assignment.zh-cn.md | 9 - .../translations/assignment.zh-tw.md | 9 - .../2-history-of-ML/translations/README.es.md | 117 ----- .../2-history-of-ML/translations/README.fr.md | 117 ----- .../2-history-of-ML/translations/README.id.md | 116 ----- .../2-history-of-ML/translations/README.it.md | 118 ----- .../2-history-of-ML/translations/README.ja.md | 114 ----- .../2-history-of-ML/translations/README.ko.md | 118 ----- .../translations/README.pt-br.md | 118 ----- .../2-history-of-ML/translations/README.ru.md | 146 ------ .../2-history-of-ML/translations/README.tr.md | 117 ----- .../translations/README.zh-cn.md | 116 ----- .../translations/README.zh-tw.md | 110 ----- .../translations/assignment.es.md | 11 - .../translations/assignment.fr.md | 11 - .../translations/assignment.id.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ja.md | 11 - .../translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../translations/assignment.ru.md | 11 - .../translations/assignment.tr.md | 11 - .../translations/assignment.zh-cn.md | 11 - .../translations/assignment.zh-tw.md | 12 - .../3-fairness/translations/README.es.md | 0 .../3-fairness/translations/README.fr.md | 0 .../3-fairness/translations/README.id.md | 0 .../3-fairness/translations/README.it.md | 0 .../3-fairness/translations/README.ja.md | 0 .../3-fairness/translations/README.ko.md | 0 .../3-fairness/translations/README.pt-br.md | 0 .../3-fairness/translations/README.zh-cn.md | 0 .../3-fairness/translations/README.zh-tw.md | 0 .../3-fairness/translations/assignment.es.md | 0 .../3-fairness/translations/assignment.fr.md | 0 .../3-fairness/translations/assignment.id.md | 0 .../3-fairness/translations/assignment.it.md | 0 .../3-fairness/translations/assignment.ja.md | 0 .../3-fairness/translations/assignment.ko.md | 0 .../translations/assignment.pt-br.md | 0 .../translations/assignment.zh-cn.md | 0 .../translations/assignment.zh-tw.md | 0 .../translations/README.es.md | 112 ----- .../translations/README.id.md | 111 ----- .../translations/README.it.md | 114 ----- .../translations/README.ja.md | 114 ----- .../translations/README.ko.md | 114 ----- .../translations/README.pt-br.md | 114 ----- .../translations/README.zh-cn.md | 112 ----- .../translations/README.zh-tw.md | 111 ----- .../translations/assignment.es.md | 11 - .../translations/assignment.id.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ja.md | 11 - .../translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../translations/assignment.zh-cn.md | 11 - .../translations/assignment.zh-tw.md | 11 - 1-Introduction/translations/README.es.md | 23 - 1-Introduction/translations/README.fr.md | 22 - 1-Introduction/translations/README.hi.md | 28 -- 1-Introduction/translations/README.id.md | 23 - 1-Introduction/translations/README.it.md | 22 - 1-Introduction/translations/README.ja.md | 23 - 1-Introduction/translations/README.ko.md | 23 - 1-Introduction/translations/README.pt-br.md | 23 - 1-Introduction/translations/README.ru.md | 22 - 1-Introduction/translations/README.zh-cn.md | 22 - 1-Introduction/translations/README.zh-tw.md | 22 - .../1-Tools/translations/README.es.md | 206 --------- .../1-Tools/translations/README.id.md | 208 --------- .../1-Tools/translations/README.it.md | 211 --------- .../1-Tools/translations/README.ja.md | 218 --------- .../1-Tools/translations/README.ko.md | 213 --------- .../1-Tools/translations/README.pt-br.md | 213 --------- .../1-Tools/translations/README.pt.md | 214 --------- .../1-Tools/translations/README.tr.md | 210 --------- .../1-Tools/translations/README.zh-cn.md | 207 --------- .../1-Tools/translations/README.zh-tw.md | 208 --------- .../1-Tools/translations/assignment.es.md | 14 - .../1-Tools/translations/assignment.it.md | 13 - .../1-Tools/translations/assignment.ja.md | 13 - .../1-Tools/translations/assignment.ko.md | 13 - .../1-Tools/translations/assignment.pt-br.md | 13 - .../1-Tools/translations/assignment.pt.md | 13 - .../1-Tools/translations/assignment.tr.md | 13 - .../1-Tools/translations/assignment.zh-cn.md | 14 - .../1-Tools/translations/assignment.zh-tw.md | 14 - 2-Regression/2-Data/translations/README.es.md | 207 --------- 2-Regression/2-Data/translations/README.id.md | 202 --------- 2-Regression/2-Data/translations/README.it.md | 201 --------- 2-Regression/2-Data/translations/README.ja.md | 206 --------- 2-Regression/2-Data/translations/README.ko.md | 202 --------- .../2-Data/translations/README.pt-br.md | 208 --------- 2-Regression/2-Data/translations/README.pt.md | 207 --------- .../2-Data/translations/README.zh-cn.md | 203 --------- .../2-Data/translations/README.zh-tw.md | 203 --------- .../2-Data/translations/assignment.es.md | 9 - .../2-Data/translations/assignment.it.md | 9 - .../2-Data/translations/assignment.ja.md | 9 - .../2-Data/translations/assignment.ko.md | 11 - .../2-Data/translations/assignment.pt-br.md | 11 - .../2-Data/translations/assignment.pt.md | 9 - .../2-Data/translations/assignment.zh-cn.md | 9 - .../2-Data/translations/assignment.zh-tw.md | 9 - .../3-Linear/translations/README.es.md | 342 --------------- .../3-Linear/translations/README.id.md | 335 -------------- .../3-Linear/translations/README.it.md | 339 -------------- .../3-Linear/translations/README.ja.md | 334 -------------- .../3-Linear/translations/README.ko.md | 338 -------------- .../3-Linear/translations/README.pt-br.md | 342 --------------- .../3-Linear/translations/README.pt.md | 332 -------------- .../3-Linear/translations/README.zh-cn.md | 341 -------------- .../3-Linear/translations/README.zh-tw.md | 342 --------------- .../3-Linear/translations/assignment.es.md | 11 - .../3-Linear/translations/assignment.it.md | 11 - .../3-Linear/translations/assignment.ja.md | 11 - .../3-Linear/translations/assignment.ko.md | 11 - .../3-Linear/translations/assignment.pt-br.md | 11 - .../3-Linear/translations/assignment.pt.md | 11 - .../3-Linear/translations/assignment.zh-cn.md | 12 - .../3-Linear/translations/assignment.zh-tw.md | 11 - .../4-Logistic/translations/README.es.md | 313 ------------- .../4-Logistic/translations/README.id.md | 302 ------------- .../4-Logistic/translations/README.it.md | 295 ------------- .../4-Logistic/translations/README.ja.md | 310 ------------- .../4-Logistic/translations/README.ko.md | 311 ------------- .../4-Logistic/translations/README.pt-br.md | 311 ------------- .../4-Logistic/translations/README.pt.md | 302 ------------- .../4-Logistic/translations/README.zh-cn.md | 300 ------------- .../4-Logistic/translations/README.zh-tw.md | 301 ------------- .../4-Logistic/translations/assignment.es.md | 11 - .../4-Logistic/translations/assignment.it.md | 10 - .../4-Logistic/translations/assignment.ja.md | 11 - .../4-Logistic/translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../4-Logistic/translations/assignment.pt.md | 11 - .../translations/assignment.zh-cn.md | 11 - .../translations/assignment.zh-tw.md | 11 - 2-Regression/translations/README.es.md | 33 -- 2-Regression/translations/README.fr.md | 33 -- 2-Regression/translations/README.hi.md | 36 -- 2-Regression/translations/README.id.md | 33 -- 2-Regression/translations/README.it.md | 34 -- 2-Regression/translations/README.ja.md | 32 -- 2-Regression/translations/README.ko.md | 35 -- 2-Regression/translations/README.pt-br.md | 34 -- 2-Regression/translations/README.pt.md | 38 -- 2-Regression/translations/README.ru.md | 36 -- 2-Regression/translations/README.tr.md | 36 -- 2-Regression/translations/README.zh-cn.md | 34 -- 2-Regression/translations/README.zh-tw.md | 36 -- 3-Web-App/1-Web-App/translations/README.es.md | 346 --------------- 3-Web-App/1-Web-App/translations/README.it.md | 347 --------------- 3-Web-App/1-Web-App/translations/README.ja.md | 345 --------------- 3-Web-App/1-Web-App/translations/README.ko.md | 348 --------------- .../1-Web-App/translations/README.pt-br.md | 348 --------------- 3-Web-App/1-Web-App/translations/README.pt.md | 347 --------------- .../1-Web-App/translations/README.zh-cn.md | 347 --------------- .../1-Web-App/translations/README.zh-tw.md | 347 --------------- .../1-Web-App/translations/assignment.es.md | 11 - .../1-Web-App/translations/assignment.it.md | 11 - .../1-Web-App/translations/assignment.ja.md | 11 - .../1-Web-App/translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../1-Web-App/translations/assignment.pt.md | 11 - .../translations/assignment.zh-cn.md | 12 - .../translations/assignment.zh-tw.md | 12 - 3-Web-App/translations/README.es.md | 21 - 3-Web-App/translations/README.hi.md | 20 - 3-Web-App/translations/README.it.md | 22 - 3-Web-App/translations/README.ja.md | 21 - 3-Web-App/translations/README.ko.md | 22 - 3-Web-App/translations/README.pt-br.md | 21 - 3-Web-App/translations/README.pt.md | 21 - 3-Web-App/translations/README.ru.md | 21 - 3-Web-App/translations/README.zh-cn.md | 22 - 3-Web-App/translations/README.zh-tw.md | 22 - .../1-Introduction/translations/README.es.md | 299 ------------- .../1-Introduction/translations/README.it.md | 297 ------------- .../1-Introduction/translations/README.ko.md | 298 ------------- .../translations/README.pt-br.md | 299 ------------- .../1-Introduction/translations/README.tr.md | 298 ------------- .../translations/README.zh-cn.md | 291 ------------ .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../translations/assignment.tr.md | 11 - .../translations/assignment.zh-cn.md | 11 - .../2-Classifiers-1/translations/README.es.md | 245 ----------- .../2-Classifiers-1/translations/README.it.md | 241 ---------- .../2-Classifiers-1/translations/README.ko.md | 243 ---------- .../translations/README.pt-br.md | 243 ---------- .../2-Classifiers-1/translations/README.tr.md | 241 ---------- .../translations/README.zh-cn.md | 241 ---------- .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 10 - .../translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../translations/assignment.tr.md | 9 - .../translations/assignment.zh-cn.md | 11 - .../3-Classifiers-2/translations/README.es.md | 234 ---------- .../3-Classifiers-2/translations/README.it.md | 235 ---------- .../3-Classifiers-2/translations/README.ko.md | 235 ---------- .../translations/README.pt-br.md | 235 ---------- .../3-Classifiers-2/translations/README.tr.md | 235 ---------- .../translations/README.zh-cn.md | 235 ---------- .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../translations/assignment.tr.md | 11 - .../translations/assignment.zh-cn.md | 11 - .../4-Applied/translations/README.es.md | 316 ------------- .../4-Applied/translations/README.it.md | 336 -------------- .../4-Applied/translations/README.ko.md | 337 -------------- .../4-Applied/translations/README.pt-br.md | 337 -------------- .../4-Applied/translations/README.tr.md | 336 -------------- .../4-Applied/translations/README.zh-CN.md | 333 -------------- .../4-Applied/translations/assignment.es.md | 11 - .../4-Applied/translations/assignment.it.md | 11 - .../4-Applied/translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - .../4-Applied/translations/assignment.tr.md | 11 - .../translations/assignment.zh-CN.md | 11 - 4-Classification/translations/README.es.md | 27 -- 4-Classification/translations/README.hi.md | 28 -- 4-Classification/translations/README.it.md | 26 -- 4-Classification/translations/README.ko.md | 27 -- 4-Classification/translations/README.pt-br.md | 27 -- 4-Classification/translations/README.ru.md | 26 -- 4-Classification/translations/README.tr.md | 25 -- 4-Classification/translations/README.zh-cn.md | 27 -- .../1-Visualize/translations/README.es.md | 333 -------------- .../1-Visualize/translations/README.it.md | 332 -------------- .../1-Visualize/translations/README.ko.md | 335 -------------- .../1-Visualize/translations/README.zh-cn.md | 339 -------------- .../1-Visualize/translations/assignment.es.md | 11 - .../1-Visualize/translations/assignment.it.md | 11 - .../1-Visualize/translations/assignment.ko.md | 11 - .../translations/assignment.zh-cn.md | 13 - .../2-K-Means/translations/README.es.md | 251 ----------- .../2-K-Means/translations/README.it.md | 251 ----------- .../2-K-Means/translations/README.ko.md | 251 ----------- .../2-K-Means/translations/README.zh-cn.md | 253 ----------- .../2-K-Means/translations/assignment.es.md | 11 - .../2-K-Means/translations/assignment.it.md | 10 - .../2-K-Means/translations/assignment.ko.md | 11 - .../translations/assignment.zh-cn.md | 12 - 5-Clustering/translations/README.es.md | 29 -- 5-Clustering/translations/README.hi.md | 28 -- 5-Clustering/translations/README.it.md | 29 -- 5-Clustering/translations/README.ko.md | 28 -- 5-Clustering/translations/README.ru.md | 26 -- 5-Clustering/translations/README.zh-cn.md | 29 -- .../translations/README.es.md | 166 ------- .../translations/README.it.md | 165 ------- .../translations/README.ko.md | 165 ------- .../translations/README.pt-br.md | 173 -------- .../translations/README.zh-cn.md | 163 ------- .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ko.md | 11 - .../translations/assignment.pt-br.md | 11 - 6-NLP/2-Tasks/translations/README.es.md | 214 --------- 6-NLP/2-Tasks/translations/README.it.md | 214 --------- 6-NLP/2-Tasks/translations/README.ko.md | 214 --------- 6-NLP/2-Tasks/translations/README.pt-br.md | 220 ---------- 6-NLP/2-Tasks/translations/assignment.es.md | 11 - 6-NLP/2-Tasks/translations/assignment.it.md | 11 - 6-NLP/2-Tasks/translations/assignment.ko.md | 11 - .../2-Tasks/translations/assignment.pt-br.md | 11 - .../translations/README.es.md | 187 -------- .../translations/README.it.md | 187 -------- .../translations/README.ko.md | 188 -------- .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ko.md | 11 - .../translations/README.es.md | 415 ------------------ .../translations/README.it.md | 412 ----------------- .../translations/README.ko.md | 408 ----------------- .../translations/assignment.es.md | 5 - .../translations/assignment.it.md | 5 - .../translations/assignment.ko.md | 5 - .../translations/README.es.md | 376 ---------------- .../translations/README.it.md | 376 ---------------- .../translations/README.ko.md | 376 ---------------- .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ko.md | 11 - 6-NLP/translations/README.es.md | 24 - 6-NLP/translations/README.hi.md | 11 - 6-NLP/translations/README.it.md | 24 - 6-NLP/translations/README.ko.md | 24 - 6-NLP/translations/README.pt-br.md | 24 - 6-NLP/translations/README.ru.md | 24 - 6-NLP/translations/README.zh-cn.md | 24 - .../1-Introduction/translations/README.es.md | 186 -------- .../1-Introduction/translations/README.it.md | 185 -------- .../1-Introduction/translations/README.ko.md | 186 -------- .../translations/assignment.es.md | 11 - .../translations/assignment.it.md | 11 - .../translations/assignment.ko.md | 11 - .../2-ARIMA/translations/README.it.md | 394 ----------------- .../2-ARIMA/translations/README.ko.md | 394 ----------------- .../2-ARIMA/translations/assignment.es.md | 11 - .../2-ARIMA/translations/assignment.it.md | 11 - .../2-ARIMA/translations/assignment.ko.md | 11 - 7-TimeSeries/3-SVR/translations/README.md | 1 - .../3-SVR/translations/assignment.es.md | 13 - 7-TimeSeries/translations/README.es.md | 23 - 7-TimeSeries/translations/README.fr.md | 23 - 7-TimeSeries/translations/README.hi.md | 24 - 7-TimeSeries/translations/README.it.md | 22 - 7-TimeSeries/translations/README.ko.md | 22 - 7-TimeSeries/translations/README.ru.md | 22 - 7-TimeSeries/translations/README.zh-cn.md | 26 -- 8-Reinforcement/translations/README.it.md | 53 --- 8-Reinforcement/translations/README.ko.md | 54 --- 8-Reinforcement/translations/README.ru.md | 52 --- 8-Reinforcement/translations/README.tr.md | 52 --- 8-Reinforcement/translations/README.zh-cn.md | 53 --- .../1-Applications/translations/README.it.md | 162 ------- .../1-Applications/translations/README.ko.md | 163 ------- .../translations/assignment.es.md | 13 - .../translations/assignment.it.md | 13 - .../translations/assignment.ko.md | 13 - 9-Real-World/translations/README.es.md | 14 - 9-Real-World/translations/README.fr.md | 15 - 9-Real-World/translations/README.hi.md | 15 - 9-Real-World/translations/README.it.md | 15 - 9-Real-World/translations/README.ko.md | 15 - 9-Real-World/translations/README.pt.md | 13 - 9-Real-World/translations/README.ru.md | 14 - 9-Real-World/translations/README.tr.md | 20 - 9-Real-World/translations/README.zh-cn.md | 14 - README.md | 13 +- TRANSLATIONS.md | 34 -- translations/README.es.md | 133 ------ translations/README.hi.md | 129 ------ translations/README.it.md | 124 ------ translations/README.ja.md | 121 ----- translations/README.ko.md | 124 ------ translations/README.ms.md | 129 ------ translations/README.pt-br.md | 123 ------ translations/README.pt.md | 121 ----- translations/README.tr.md | 119 ----- translations/README.zh-cn.md | 119 ----- translations/Readme.ta.md | 132 ------ translations/de/TRANSLATIONS.md | 37 -- .../es/1-Introduction/1-intro-to-ML/README.md | 148 ------- .../1-intro-to-ML/assignment.md | 12 - .../1-Introduction/2-history-of-ML/README.md | 152 ------- .../2-history-of-ML/assignment.md | 14 - .../es/1-Introduction/3-fairness/README.md | 159 ------- .../1-Introduction/3-fairness/assignment.md | 14 - .../4-techniques-of-ML/README.md | 121 ----- .../4-techniques-of-ML/assignment.md | 14 - translations/es/1-Introduction/README.md | 25 -- .../es/2-Regression/1-Tools/README.md | 228 ---------- .../es/2-Regression/1-Tools/assignment.md | 16 - .../1-Tools/solution/Julia/README.md | 4 - translations/es/2-Regression/2-Data/README.md | 214 --------- .../es/2-Regression/2-Data/assignment.md | 11 - .../2-Data/solution/Julia/README.md | 4 - .../es/2-Regression/3-Linear/README.md | 370 ---------------- .../es/2-Regression/3-Linear/assignment.md | 14 - .../3-Linear/solution/Julia/README.md | 4 - .../es/2-Regression/4-Logistic/README.md | 381 ---------------- .../es/2-Regression/4-Logistic/assignment.md | 13 - .../4-Logistic/solution/Julia/README.md | 4 - translations/es/2-Regression/README.md | 43 -- translations/es/3-Web-App/1-Web-App/README.md | 348 --------------- .../es/3-Web-App/1-Web-App/assignment.md | 14 - translations/es/3-Web-App/README.md | 24 - .../4-Classification/1-Introduction/README.md | 302 ------------- .../1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 4 - .../2-Classifiers-1/README.md | 77 ---- .../2-Classifiers-1/assignment.md | 12 - .../2-Classifiers-1/solution/Julia/README.md | 4 - .../3-Classifiers-2/README.md | 238 ---------- .../3-Classifiers-2/assignment.md | 14 - .../3-Classifiers-2/solution/Julia/README.md | 4 - .../es/4-Classification/4-Applied/README.md | 318 -------------- .../4-Classification/4-Applied/assignment.md | 14 - translations/es/4-Classification/README.md | 30 -- .../es/5-Clustering/1-Visualize/README.md | 219 --------- .../es/5-Clustering/1-Visualize/assignment.md | 14 - .../1-Visualize/solution/Julia/README.md | 4 - .../es/5-Clustering/2-K-Means/README.md | 250 ----------- .../es/5-Clustering/2-K-Means/assignment.md | 13 - .../2-K-Means/solution/Julia/README.md | 4 - translations/es/5-Clustering/README.md | 31 -- .../es/6-NLP/1-Introduction-to-NLP/README.md | 168 ------- .../6-NLP/1-Introduction-to-NLP/assignment.md | 14 - translations/es/6-NLP/2-Tasks/README.md | 217 --------- translations/es/6-NLP/2-Tasks/assignment.md | 14 - .../6-NLP/3-Translation-Sentiment/README.md | 190 -------- .../3-Translation-Sentiment/assignment.md | 14 - .../solution/Julia/README.md | 4 - .../solution/R/README.md | 4 - .../es/6-NLP/4-Hotel-Reviews-1/README.md | 303 ------------- .../es/6-NLP/4-Hotel-Reviews-1/assignment.md | 8 - .../solution/Julia/README.md | 4 - .../4-Hotel-Reviews-1/solution/R/README.md | 4 - .../es/6-NLP/5-Hotel-Reviews-2/README.md | 377 ---------------- .../es/6-NLP/5-Hotel-Reviews-2/assignment.md | 14 - .../solution/Julia/README.md | 4 - .../5-Hotel-Reviews-2/solution/R/README.md | 4 - translations/es/6-NLP/README.md | 27 -- translations/es/6-NLP/data/README.md | 4 - .../es/7-TimeSeries/1-Introduction/README.md | 188 -------- .../7-TimeSeries/1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 4 - .../1-Introduction/solution/R/README.md | 4 - .../es/7-TimeSeries/2-ARIMA/README.md | 396 ----------------- .../es/7-TimeSeries/2-ARIMA/assignment.md | 14 - .../2-ARIMA/solution/Julia/README.md | 4 - .../7-TimeSeries/2-ARIMA/solution/R/README.md | 4 - translations/es/7-TimeSeries/3-SVR/README.md | 382 ---------------- .../es/7-TimeSeries/3-SVR/assignment.md | 16 - translations/es/7-TimeSeries/README.md | 26 -- .../es/8-Reinforcement/1-QLearning/README.md | 320 -------------- .../8-Reinforcement/1-QLearning/assignment.md | 30 -- .../1-QLearning/solution/Julia/README.md | 4 - .../1-QLearning/solution/R/README.md | 4 - .../es/8-Reinforcement/2-Gym/README.md | 342 --------------- .../es/8-Reinforcement/2-Gym/assignment.md | 43 -- .../2-Gym/solution/Julia/README.md | 4 - .../2-Gym/solution/R/README.md | 4 - translations/es/8-Reinforcement/README.md | 56 --- .../es/9-Real-World/1-Applications/README.md | 150 ------- .../9-Real-World/1-Applications/assignment.md | 16 - .../2-Debugging-ML-Models/README.md | 158 ------- .../2-Debugging-ML-Models/assignment.md | 14 - translations/es/9-Real-World/README.md | 21 - translations/es/CODE_OF_CONDUCT.md | 12 - translations/es/CONTRIBUTING.md | 14 - translations/es/README.md | 155 ------- translations/es/SECURITY.md | 40 -- translations/es/SUPPORT.md | 15 - translations/es/TRANSLATIONS.md | 37 -- translations/es/docs/_sidebar.md | 46 -- translations/es/for-teachers.md | 26 -- translations/es/quiz-app/README.md | 115 ----- translations/es/sketchnotes/LICENSE.md | 172 -------- translations/es/sketchnotes/README.md | 10 - .../fr/1-Introduction/1-intro-to-ML/README.md | 146 ------ .../1-intro-to-ML/assignment.md | 12 - .../1-Introduction/2-history-of-ML/README.md | 152 ------- .../2-history-of-ML/assignment.md | 14 - .../fr/1-Introduction/3-fairness/README.md | 159 ------- .../1-Introduction/3-fairness/assignment.md | 14 - .../4-techniques-of-ML/README.md | 121 ----- .../4-techniques-of-ML/assignment.md | 14 - translations/fr/1-Introduction/README.md | 25 -- .../fr/2-Regression/1-Tools/README.md | 228 ---------- .../fr/2-Regression/1-Tools/assignment.md | 16 - .../1-Tools/solution/Julia/README.md | 6 - translations/fr/2-Regression/2-Data/README.md | 215 --------- .../fr/2-Regression/2-Data/assignment.md | 11 - .../2-Data/solution/Julia/README.md | 6 - .../fr/2-Regression/3-Linear/README.md | 370 ---------------- .../fr/2-Regression/3-Linear/assignment.md | 14 - .../3-Linear/solution/Julia/README.md | 6 - .../fr/2-Regression/4-Logistic/README.md | 370 ---------------- .../fr/2-Regression/4-Logistic/assignment.md | 14 - .../4-Logistic/solution/Julia/README.md | 6 - translations/fr/2-Regression/README.md | 43 -- translations/fr/3-Web-App/1-Web-App/README.md | 348 --------------- .../fr/3-Web-App/1-Web-App/assignment.md | 14 - translations/fr/3-Web-App/README.md | 24 - .../4-Classification/1-Introduction/README.md | 302 ------------- .../1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 4 - .../2-Classifiers-1/README.md | 75 ---- .../2-Classifiers-1/assignment.md | 12 - .../2-Classifiers-1/solution/Julia/README.md | 6 - .../3-Classifiers-2/README.md | 238 ---------- .../3-Classifiers-2/assignment.md | 14 - .../3-Classifiers-2/solution/Julia/README.md | 6 - .../fr/4-Classification/4-Applied/README.md | 317 ------------- .../4-Classification/4-Applied/assignment.md | 14 - translations/fr/4-Classification/README.md | 30 -- .../fr/5-Clustering/1-Visualize/README.md | 219 --------- .../fr/5-Clustering/1-Visualize/assignment.md | 14 - .../1-Visualize/solution/Julia/README.md | 6 - .../fr/5-Clustering/2-K-Means/README.md | 250 ----------- .../fr/5-Clustering/2-K-Means/assignment.md | 14 - .../2-K-Means/solution/Julia/README.md | 6 - translations/fr/5-Clustering/README.md | 31 -- .../fr/6-NLP/1-Introduction-to-NLP/README.md | 168 ------- .../6-NLP/1-Introduction-to-NLP/assignment.md | 14 - translations/fr/6-NLP/2-Tasks/README.md | 217 --------- translations/fr/6-NLP/2-Tasks/assignment.md | 14 - .../6-NLP/3-Translation-Sentiment/README.md | 190 -------- .../3-Translation-Sentiment/assignment.md | 14 - .../solution/Julia/README.md | 6 - .../solution/R/README.md | 6 - .../fr/6-NLP/4-Hotel-Reviews-1/README.md | 296 ------------- .../fr/6-NLP/4-Hotel-Reviews-1/assignment.md | 8 - .../solution/Julia/README.md | 6 - .../4-Hotel-Reviews-1/solution/R/README.md | 6 - .../fr/6-NLP/5-Hotel-Reviews-2/README.md | 377 ---------------- .../fr/6-NLP/5-Hotel-Reviews-2/assignment.md | 14 - .../solution/Julia/README.md | 6 - .../5-Hotel-Reviews-2/solution/R/README.md | 6 - translations/fr/6-NLP/README.md | 27 -- translations/fr/6-NLP/data/README.md | 6 - .../fr/7-TimeSeries/1-Introduction/README.md | 188 -------- .../7-TimeSeries/1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 6 - .../1-Introduction/solution/R/README.md | 4 - .../fr/7-TimeSeries/2-ARIMA/README.md | 396 ----------------- .../fr/7-TimeSeries/2-ARIMA/assignment.md | 14 - .../2-ARIMA/solution/Julia/README.md | 6 - .../7-TimeSeries/2-ARIMA/solution/R/README.md | 6 - translations/fr/7-TimeSeries/3-SVR/README.md | 382 ---------------- .../fr/7-TimeSeries/3-SVR/assignment.md | 16 - translations/fr/7-TimeSeries/README.md | 26 -- .../fr/8-Reinforcement/1-QLearning/README.md | 59 --- .../8-Reinforcement/1-QLearning/assignment.md | 28 -- .../1-QLearning/solution/Julia/README.md | 6 - .../1-QLearning/solution/R/README.md | 6 - .../fr/8-Reinforcement/2-Gym/README.md | 342 --------------- .../fr/8-Reinforcement/2-Gym/assignment.md | 47 -- .../2-Gym/solution/Julia/README.md | 6 - .../2-Gym/solution/R/README.md | 6 - translations/fr/8-Reinforcement/README.md | 56 --- .../fr/9-Real-World/1-Applications/README.md | 149 ------- .../9-Real-World/1-Applications/assignment.md | 16 - .../2-Debugging-ML-Models/README.md | 134 ------ .../2-Debugging-ML-Models/assignment.md | 14 - translations/fr/9-Real-World/README.md | 21 - translations/fr/CODE_OF_CONDUCT.md | 12 - translations/fr/CONTRIBUTING.md | 12 - translations/fr/README.md | 155 ------- translations/fr/SECURITY.md | 40 -- translations/fr/SUPPORT.md | 13 - translations/fr/TRANSLATIONS.md | 37 -- translations/fr/docs/_sidebar.md | 46 -- translations/fr/for-teachers.md | 26 -- translations/fr/quiz-app/README.md | 115 ----- translations/fr/sketchnotes/LICENSE.md | 150 ------- translations/fr/sketchnotes/README.md | 10 - .../hi/1-Introduction/1-intro-to-ML/README.md | 148 ------- .../1-intro-to-ML/assignment.md | 12 - .../1-Introduction/2-history-of-ML/README.md | 152 ------- .../2-history-of-ML/assignment.md | 14 - .../hi/1-Introduction/3-fairness/README.md | 131 ------ .../1-Introduction/3-fairness/assignment.md | 14 - .../4-techniques-of-ML/README.md | 121 ----- .../4-techniques-of-ML/assignment.md | 14 - translations/hi/1-Introduction/README.md | 26 -- .../hi/2-Regression/1-Tools/README.md | 228 ---------- .../hi/2-Regression/1-Tools/assignment.md | 16 - .../1-Tools/solution/Julia/README.md | 4 - translations/hi/2-Regression/2-Data/README.md | 215 --------- .../hi/2-Regression/2-Data/assignment.md | 11 - .../2-Data/solution/Julia/README.md | 4 - .../hi/2-Regression/3-Linear/README.md | 349 --------------- .../hi/2-Regression/3-Linear/assignment.md | 14 - .../3-Linear/solution/Julia/README.md | 4 - .../hi/2-Regression/4-Logistic/README.md | 314 ------------- .../hi/2-Regression/4-Logistic/assignment.md | 14 - .../4-Logistic/solution/Julia/README.md | 4 - translations/hi/2-Regression/README.md | 43 -- translations/hi/3-Web-App/1-Web-App/README.md | 348 --------------- .../hi/3-Web-App/1-Web-App/assignment.md | 14 - translations/hi/3-Web-App/README.md | 24 - .../4-Classification/1-Introduction/README.md | 302 ------------- .../1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 4 - .../2-Classifiers-1/README.md | 77 ---- .../2-Classifiers-1/assignment.md | 12 - .../2-Classifiers-1/solution/Julia/README.md | 4 - .../3-Classifiers-2/README.md | 238 ---------- .../3-Classifiers-2/assignment.md | 14 - .../3-Classifiers-2/solution/Julia/README.md | 4 - .../hi/4-Classification/4-Applied/README.md | 317 ------------- .../4-Classification/4-Applied/assignment.md | 14 - translations/hi/4-Classification/README.md | 30 -- .../hi/5-Clustering/1-Visualize/README.md | 140 ------ .../hi/5-Clustering/1-Visualize/assignment.md | 14 - .../1-Visualize/solution/Julia/README.md | 4 - .../hi/5-Clustering/2-K-Means/README.md | 250 ----------- .../hi/5-Clustering/2-K-Means/assignment.md | 14 - .../2-K-Means/solution/Julia/README.md | 4 - translations/hi/5-Clustering/README.md | 31 -- .../hi/6-NLP/1-Introduction-to-NLP/README.md | 168 ------- .../6-NLP/1-Introduction-to-NLP/assignment.md | 14 - translations/hi/6-NLP/2-Tasks/README.md | 217 --------- translations/hi/6-NLP/2-Tasks/assignment.md | 14 - .../6-NLP/3-Translation-Sentiment/README.md | 190 -------- .../3-Translation-Sentiment/assignment.md | 14 - .../solution/Julia/README.md | 4 - .../solution/R/README.md | 4 - .../hi/6-NLP/4-Hotel-Reviews-1/README.md | 264 ----------- .../hi/6-NLP/4-Hotel-Reviews-1/assignment.md | 8 - .../solution/Julia/README.md | 4 - .../4-Hotel-Reviews-1/solution/R/README.md | 4 - .../hi/6-NLP/5-Hotel-Reviews-2/README.md | 377 ---------------- .../hi/6-NLP/5-Hotel-Reviews-2/assignment.md | 14 - .../solution/Julia/README.md | 4 - .../5-Hotel-Reviews-2/solution/R/README.md | 4 - translations/hi/6-NLP/README.md | 27 -- translations/hi/6-NLP/data/README.md | 4 - .../hi/7-TimeSeries/1-Introduction/README.md | 188 -------- .../7-TimeSeries/1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 4 - .../1-Introduction/solution/R/README.md | 4 - .../hi/7-TimeSeries/2-ARIMA/README.md | 397 ----------------- .../hi/7-TimeSeries/2-ARIMA/assignment.md | 14 - .../2-ARIMA/solution/Julia/README.md | 4 - .../7-TimeSeries/2-ARIMA/solution/R/README.md | 4 - translations/hi/7-TimeSeries/3-SVR/README.md | 382 ---------------- .../hi/7-TimeSeries/3-SVR/assignment.md | 16 - translations/hi/7-TimeSeries/README.md | 26 -- .../hi/8-Reinforcement/1-QLearning/README.md | 59 --- .../8-Reinforcement/1-QLearning/assignment.md | 30 -- .../1-QLearning/solution/Julia/README.md | 4 - .../1-QLearning/solution/R/README.md | 4 - .../hi/8-Reinforcement/2-Gym/README.md | 342 --------------- .../hi/8-Reinforcement/2-Gym/assignment.md | 43 -- .../2-Gym/solution/Julia/README.md | 4 - .../2-Gym/solution/R/README.md | 4 - translations/hi/8-Reinforcement/README.md | 56 --- .../hi/9-Real-World/1-Applications/README.md | 149 ------- .../9-Real-World/1-Applications/assignment.md | 16 - .../2-Debugging-ML-Models/README.md | 114 ----- .../2-Debugging-ML-Models/assignment.md | 14 - translations/hi/9-Real-World/README.md | 21 - translations/hi/CODE_OF_CONDUCT.md | 12 - translations/hi/CONTRIBUTING.md | 14 - translations/hi/README.md | 156 ------- translations/hi/SECURITY.md | 40 -- translations/hi/SUPPORT.md | 13 - translations/hi/TRANSLATIONS.md | 37 -- translations/hi/docs/_sidebar.md | 46 -- translations/hi/for-teachers.md | 26 -- translations/hi/quiz-app/README.md | 115 ----- translations/hi/sketchnotes/LICENSE.md | 139 ------ translations/hi/sketchnotes/README.md | 10 - .../it/1-Introduction/1-intro-to-ML/README.md | 148 ------- .../1-intro-to-ML/assignment.md | 12 - .../1-Introduction/2-history-of-ML/README.md | 152 ------- .../2-history-of-ML/assignment.md | 14 - .../it/1-Introduction/3-fairness/README.md | 151 ------- .../1-Introduction/3-fairness/assignment.md | 14 - .../4-techniques-of-ML/README.md | 121 ----- .../4-techniques-of-ML/assignment.md | 14 - translations/it/1-Introduction/README.md | 25 -- .../it/2-Regression/1-Tools/README.md | 228 ---------- .../it/2-Regression/1-Tools/assignment.md | 16 - .../1-Tools/solution/Julia/README.md | 4 - translations/it/2-Regression/2-Data/README.md | 215 --------- .../it/2-Regression/2-Data/assignment.md | 11 - .../2-Data/solution/Julia/README.md | 4 - .../it/2-Regression/3-Linear/README.md | 370 ---------------- .../it/2-Regression/3-Linear/assignment.md | 14 - .../3-Linear/solution/Julia/README.md | 4 - .../it/2-Regression/4-Logistic/README.md | 371 ---------------- .../it/2-Regression/4-Logistic/assignment.md | 13 - .../4-Logistic/solution/Julia/README.md | 4 - translations/it/2-Regression/README.md | 43 -- translations/it/3-Web-App/1-Web-App/README.md | 348 --------------- .../it/3-Web-App/1-Web-App/assignment.md | 14 - translations/it/3-Web-App/README.md | 24 - .../4-Classification/1-Introduction/README.md | 302 ------------- .../1-Introduction/assignment.md | 14 - .../1-Introduction/solution/Julia/README.md | 4 - .../2-Classifiers-1/README.md | 77 ---- .../2-Classifiers-1/assignment.md | 12 - .../2-Classifiers-1/solution/Julia/README.md | 4 - .../3-Classifiers-2/README.md | 238 ---------- .../3-Classifiers-2/assignment.md | 14 - .../3-Classifiers-2/solution/Julia/README.md | 4 - .../it/4-Classification/4-Applied/README.md | 317 ------------- .../4-Classification/4-Applied/assignment.md | 14 - translations/it/4-Classification/README.md | 30 -- .../it/5-Clustering/1-Visualize/README.md | 215 --------- .../it/5-Clustering/1-Visualize/assignment.md | 14 - .../1-Visualize/solution/Julia/README.md | 4 - .../it/5-Clustering/2-K-Means/README.md | 250 ----------- .../it/5-Clustering/2-K-Means/assignment.md | 13 - .../2-K-Means/solution/Julia/README.md | 4 - translations/it/5-Clustering/README.md | 31 -- .../it/6-NLP/1-Introduction-to-NLP/README.md | 168 ------- .../6-NLP/1-Introduction-to-NLP/assignment.md | 14 - 713 files changed, 110 insertions(+), 63935 deletions(-) create mode 100644 .github/workflows/co-op-translator.yml delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.bn.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.es.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.fr.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.id.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.it.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.ja.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.ko.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.pt-br.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.ru.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.tr.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.zh-cn.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/README.zh-tw.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.es.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.fr.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.id.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.it.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.ja.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.ko.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.pt-br.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.ru.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.tr.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.zh-cn.md delete mode 100644 1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md delete mode 100755 1-Introduction/2-history-of-ML/translations/README.es.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.fr.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.id.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.it.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.ja.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.ko.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.pt-br.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.ru.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.tr.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.zh-cn.md delete mode 100644 1-Introduction/2-history-of-ML/translations/README.zh-tw.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.es.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.fr.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.id.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.it.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.ja.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.ko.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.pt-br.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.ru.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.tr.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.zh-cn.md delete mode 100644 1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md delete mode 100644 1-Introduction/3-fairness/translations/README.es.md delete mode 100644 1-Introduction/3-fairness/translations/README.fr.md delete mode 100644 1-Introduction/3-fairness/translations/README.id.md delete mode 100644 1-Introduction/3-fairness/translations/README.it.md delete mode 100644 1-Introduction/3-fairness/translations/README.ja.md delete mode 100644 1-Introduction/3-fairness/translations/README.ko.md delete mode 100644 1-Introduction/3-fairness/translations/README.pt-br.md delete mode 100644 1-Introduction/3-fairness/translations/README.zh-cn.md delete mode 100644 1-Introduction/3-fairness/translations/README.zh-tw.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.es.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.fr.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.id.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.it.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.ja.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.ko.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.pt-br.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.zh-cn.md delete mode 100644 1-Introduction/3-fairness/translations/assignment.zh-tw.md delete mode 100755 1-Introduction/4-techniques-of-ML/translations/README.es.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.id.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.it.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.ja.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.ko.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.pt-br.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.zh-cn.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.es.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.id.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.it.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.ja.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.ko.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.pt-br.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.zh-cn.md delete mode 100644 1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md delete mode 100644 1-Introduction/translations/README.es.md delete mode 100644 1-Introduction/translations/README.fr.md delete mode 100644 1-Introduction/translations/README.hi.md delete mode 100644 1-Introduction/translations/README.id.md delete mode 100644 1-Introduction/translations/README.it.md delete mode 100644 1-Introduction/translations/README.ja.md delete mode 100644 1-Introduction/translations/README.ko.md delete mode 100644 1-Introduction/translations/README.pt-br.md delete mode 100644 1-Introduction/translations/README.ru.md delete mode 100644 1-Introduction/translations/README.zh-cn.md delete mode 100644 1-Introduction/translations/README.zh-tw.md delete mode 100755 2-Regression/1-Tools/translations/README.es.md delete mode 100644 2-Regression/1-Tools/translations/README.id.md delete mode 100644 2-Regression/1-Tools/translations/README.it.md delete mode 100644 2-Regression/1-Tools/translations/README.ja.md delete mode 100644 2-Regression/1-Tools/translations/README.ko.md delete mode 100644 2-Regression/1-Tools/translations/README.pt-br.md delete mode 100644 2-Regression/1-Tools/translations/README.pt.md delete mode 100644 2-Regression/1-Tools/translations/README.tr.md delete mode 100644 2-Regression/1-Tools/translations/README.zh-cn.md delete mode 100644 2-Regression/1-Tools/translations/README.zh-tw.md delete mode 100644 2-Regression/1-Tools/translations/assignment.es.md delete mode 100644 2-Regression/1-Tools/translations/assignment.it.md delete mode 100644 2-Regression/1-Tools/translations/assignment.ja.md delete mode 100644 2-Regression/1-Tools/translations/assignment.ko.md delete mode 100644 2-Regression/1-Tools/translations/assignment.pt-br.md delete mode 100644 2-Regression/1-Tools/translations/assignment.pt.md delete mode 100644 2-Regression/1-Tools/translations/assignment.tr.md delete mode 100644 2-Regression/1-Tools/translations/assignment.zh-cn.md delete mode 100644 2-Regression/1-Tools/translations/assignment.zh-tw.md delete mode 100644 2-Regression/2-Data/translations/README.es.md delete mode 100644 2-Regression/2-Data/translations/README.id.md delete mode 100644 2-Regression/2-Data/translations/README.it.md delete mode 100644 2-Regression/2-Data/translations/README.ja.md delete mode 100644 2-Regression/2-Data/translations/README.ko.md delete mode 100644 2-Regression/2-Data/translations/README.pt-br.md delete mode 100644 2-Regression/2-Data/translations/README.pt.md delete mode 100644 2-Regression/2-Data/translations/README.zh-cn.md delete mode 100644 2-Regression/2-Data/translations/README.zh-tw.md delete mode 100644 2-Regression/2-Data/translations/assignment.es.md delete mode 100644 2-Regression/2-Data/translations/assignment.it.md delete mode 100644 2-Regression/2-Data/translations/assignment.ja.md delete mode 100644 2-Regression/2-Data/translations/assignment.ko.md delete mode 100644 2-Regression/2-Data/translations/assignment.pt-br.md delete mode 100644 2-Regression/2-Data/translations/assignment.pt.md delete mode 100644 2-Regression/2-Data/translations/assignment.zh-cn.md delete mode 100644 2-Regression/2-Data/translations/assignment.zh-tw.md delete mode 100644 2-Regression/3-Linear/translations/README.es.md delete mode 100644 2-Regression/3-Linear/translations/README.id.md delete mode 100644 2-Regression/3-Linear/translations/README.it.md delete mode 100644 2-Regression/3-Linear/translations/README.ja.md delete mode 100644 2-Regression/3-Linear/translations/README.ko.md delete mode 100644 2-Regression/3-Linear/translations/README.pt-br.md delete mode 100644 2-Regression/3-Linear/translations/README.pt.md delete mode 100644 2-Regression/3-Linear/translations/README.zh-cn.md delete mode 100644 2-Regression/3-Linear/translations/README.zh-tw.md delete mode 100644 2-Regression/3-Linear/translations/assignment.es.md delete mode 100644 2-Regression/3-Linear/translations/assignment.it.md delete mode 100644 2-Regression/3-Linear/translations/assignment.ja.md delete mode 100644 2-Regression/3-Linear/translations/assignment.ko.md delete mode 100644 2-Regression/3-Linear/translations/assignment.pt-br.md delete mode 100644 2-Regression/3-Linear/translations/assignment.pt.md delete mode 100644 2-Regression/3-Linear/translations/assignment.zh-cn.md delete mode 100644 2-Regression/3-Linear/translations/assignment.zh-tw.md delete mode 100644 2-Regression/4-Logistic/translations/README.es.md delete mode 100644 2-Regression/4-Logistic/translations/README.id.md delete mode 100644 2-Regression/4-Logistic/translations/README.it.md delete mode 100644 2-Regression/4-Logistic/translations/README.ja.md delete mode 100644 2-Regression/4-Logistic/translations/README.ko.md delete mode 100644 2-Regression/4-Logistic/translations/README.pt-br.md delete mode 100644 2-Regression/4-Logistic/translations/README.pt.md delete mode 100644 2-Regression/4-Logistic/translations/README.zh-cn.md delete mode 100644 2-Regression/4-Logistic/translations/README.zh-tw.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.es.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.it.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.ja.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.ko.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.pt-br.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.pt.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.zh-cn.md delete mode 100644 2-Regression/4-Logistic/translations/assignment.zh-tw.md delete mode 100644 2-Regression/translations/README.es.md delete mode 100644 2-Regression/translations/README.fr.md delete mode 100644 2-Regression/translations/README.hi.md delete mode 100644 2-Regression/translations/README.id.md delete mode 100644 2-Regression/translations/README.it.md delete mode 100644 2-Regression/translations/README.ja.md delete mode 100644 2-Regression/translations/README.ko.md delete mode 100644 2-Regression/translations/README.pt-br.md delete mode 100644 2-Regression/translations/README.pt.md delete mode 100644 2-Regression/translations/README.ru.md delete mode 100644 2-Regression/translations/README.tr.md delete mode 100644 2-Regression/translations/README.zh-cn.md delete mode 100644 2-Regression/translations/README.zh-tw.md delete mode 100644 3-Web-App/1-Web-App/translations/README.es.md delete mode 100644 3-Web-App/1-Web-App/translations/README.it.md delete mode 100644 3-Web-App/1-Web-App/translations/README.ja.md delete mode 100644 3-Web-App/1-Web-App/translations/README.ko.md delete mode 100644 3-Web-App/1-Web-App/translations/README.pt-br.md delete mode 100644 3-Web-App/1-Web-App/translations/README.pt.md delete mode 100644 3-Web-App/1-Web-App/translations/README.zh-cn.md delete mode 100644 3-Web-App/1-Web-App/translations/README.zh-tw.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.es.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.it.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.ja.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.ko.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.pt-br.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.pt.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.zh-cn.md delete mode 100644 3-Web-App/1-Web-App/translations/assignment.zh-tw.md delete mode 100644 3-Web-App/translations/README.es.md delete mode 100644 3-Web-App/translations/README.hi.md delete mode 100644 3-Web-App/translations/README.it.md delete mode 100644 3-Web-App/translations/README.ja.md delete mode 100644 3-Web-App/translations/README.ko.md delete mode 100644 3-Web-App/translations/README.pt-br.md delete mode 100644 3-Web-App/translations/README.pt.md delete mode 100644 3-Web-App/translations/README.ru.md delete mode 100644 3-Web-App/translations/README.zh-cn.md delete mode 100644 3-Web-App/translations/README.zh-tw.md delete mode 100644 4-Classification/1-Introduction/translations/README.es.md delete mode 100644 4-Classification/1-Introduction/translations/README.it.md delete mode 100644 4-Classification/1-Introduction/translations/README.ko.md delete mode 100644 4-Classification/1-Introduction/translations/README.pt-br.md delete mode 100644 4-Classification/1-Introduction/translations/README.tr.md delete mode 100644 4-Classification/1-Introduction/translations/README.zh-cn.md delete mode 100644 4-Classification/1-Introduction/translations/assignment.es.md delete mode 100644 4-Classification/1-Introduction/translations/assignment.it.md delete mode 100644 4-Classification/1-Introduction/translations/assignment.ko.md delete mode 100644 4-Classification/1-Introduction/translations/assignment.pt-br.md delete mode 100644 4-Classification/1-Introduction/translations/assignment.tr.md delete mode 100644 4-Classification/1-Introduction/translations/assignment.zh-cn.md delete mode 100644 4-Classification/2-Classifiers-1/translations/README.es.md delete mode 100644 4-Classification/2-Classifiers-1/translations/README.it.md delete mode 100644 4-Classification/2-Classifiers-1/translations/README.ko.md delete mode 100644 4-Classification/2-Classifiers-1/translations/README.pt-br.md delete mode 100644 4-Classification/2-Classifiers-1/translations/README.tr.md delete mode 100644 4-Classification/2-Classifiers-1/translations/README.zh-cn.md delete mode 100644 4-Classification/2-Classifiers-1/translations/assignment.es.md delete mode 100644 4-Classification/2-Classifiers-1/translations/assignment.it.md delete mode 100644 4-Classification/2-Classifiers-1/translations/assignment.ko.md delete mode 100644 4-Classification/2-Classifiers-1/translations/assignment.pt-br.md delete mode 100644 4-Classification/2-Classifiers-1/translations/assignment.tr.md delete mode 100644 4-Classification/2-Classifiers-1/translations/assignment.zh-cn.md delete mode 100644 4-Classification/3-Classifiers-2/translations/README.es.md delete mode 100644 4-Classification/3-Classifiers-2/translations/README.it.md delete mode 100644 4-Classification/3-Classifiers-2/translations/README.ko.md delete mode 100644 4-Classification/3-Classifiers-2/translations/README.pt-br.md delete mode 100644 4-Classification/3-Classifiers-2/translations/README.tr.md delete mode 100644 4-Classification/3-Classifiers-2/translations/README.zh-cn.md delete mode 100644 4-Classification/3-Classifiers-2/translations/assignment.es.md delete mode 100644 4-Classification/3-Classifiers-2/translations/assignment.it.md delete mode 100644 4-Classification/3-Classifiers-2/translations/assignment.ko.md delete mode 100644 4-Classification/3-Classifiers-2/translations/assignment.pt-br.md delete mode 100644 4-Classification/3-Classifiers-2/translations/assignment.tr.md delete mode 100644 4-Classification/3-Classifiers-2/translations/assignment.zh-cn.md delete mode 100644 4-Classification/4-Applied/translations/README.es.md delete mode 100644 4-Classification/4-Applied/translations/README.it.md delete mode 100644 4-Classification/4-Applied/translations/README.ko.md delete mode 100644 4-Classification/4-Applied/translations/README.pt-br.md delete mode 100644 4-Classification/4-Applied/translations/README.tr.md delete mode 100644 4-Classification/4-Applied/translations/README.zh-CN.md delete mode 100644 4-Classification/4-Applied/translations/assignment.es.md delete mode 100644 4-Classification/4-Applied/translations/assignment.it.md delete mode 100644 4-Classification/4-Applied/translations/assignment.ko.md delete mode 100644 4-Classification/4-Applied/translations/assignment.pt-br.md delete mode 100644 4-Classification/4-Applied/translations/assignment.tr.md delete mode 100644 4-Classification/4-Applied/translations/assignment.zh-CN.md delete mode 100644 4-Classification/translations/README.es.md delete mode 100644 4-Classification/translations/README.hi.md delete mode 100644 4-Classification/translations/README.it.md delete mode 100644 4-Classification/translations/README.ko.md delete mode 100644 4-Classification/translations/README.pt-br.md delete mode 100644 4-Classification/translations/README.ru.md delete mode 100644 4-Classification/translations/README.tr.md delete mode 100644 4-Classification/translations/README.zh-cn.md delete mode 100644 5-Clustering/1-Visualize/translations/README.es.md delete mode 100644 5-Clustering/1-Visualize/translations/README.it.md delete mode 100644 5-Clustering/1-Visualize/translations/README.ko.md delete mode 100644 5-Clustering/1-Visualize/translations/README.zh-cn.md delete mode 100644 5-Clustering/1-Visualize/translations/assignment.es.md delete mode 100644 5-Clustering/1-Visualize/translations/assignment.it.md delete mode 100644 5-Clustering/1-Visualize/translations/assignment.ko.md delete mode 100644 5-Clustering/1-Visualize/translations/assignment.zh-cn.md delete mode 100644 5-Clustering/2-K-Means/translations/README.es.md delete mode 100644 5-Clustering/2-K-Means/translations/README.it.md delete mode 100644 5-Clustering/2-K-Means/translations/README.ko.md delete mode 100644 5-Clustering/2-K-Means/translations/README.zh-cn.md delete mode 100644 5-Clustering/2-K-Means/translations/assignment.es.md delete mode 100644 5-Clustering/2-K-Means/translations/assignment.it.md delete mode 100644 5-Clustering/2-K-Means/translations/assignment.ko.md delete mode 100644 5-Clustering/2-K-Means/translations/assignment.zh-cn.md delete mode 100644 5-Clustering/translations/README.es.md delete mode 100644 5-Clustering/translations/README.hi.md delete mode 100644 5-Clustering/translations/README.it.md delete mode 100644 5-Clustering/translations/README.ko.md delete mode 100644 5-Clustering/translations/README.ru.md delete mode 100644 5-Clustering/translations/README.zh-cn.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/README.es.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/README.it.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/README.ko.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/README.pt-br.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/README.zh-cn.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/assignment.es.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/assignment.it.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/assignment.ko.md delete mode 100644 6-NLP/1-Introduction-to-NLP/translations/assignment.pt-br.md delete mode 100644 6-NLP/2-Tasks/translations/README.es.md delete mode 100644 6-NLP/2-Tasks/translations/README.it.md delete mode 100644 6-NLP/2-Tasks/translations/README.ko.md delete mode 100644 6-NLP/2-Tasks/translations/README.pt-br.md delete mode 100644 6-NLP/2-Tasks/translations/assignment.es.md delete mode 100644 6-NLP/2-Tasks/translations/assignment.it.md delete mode 100644 6-NLP/2-Tasks/translations/assignment.ko.md delete mode 100644 6-NLP/2-Tasks/translations/assignment.pt-br.md delete mode 100644 6-NLP/3-Translation-Sentiment/translations/README.es.md delete mode 100644 6-NLP/3-Translation-Sentiment/translations/README.it.md delete mode 100644 6-NLP/3-Translation-Sentiment/translations/README.ko.md delete mode 100644 6-NLP/3-Translation-Sentiment/translations/assignment.es.md delete mode 100644 6-NLP/3-Translation-Sentiment/translations/assignment.it.md delete mode 100644 6-NLP/3-Translation-Sentiment/translations/assignment.ko.md delete mode 100644 6-NLP/4-Hotel-Reviews-1/translations/README.es.md delete mode 100644 6-NLP/4-Hotel-Reviews-1/translations/README.it.md delete mode 100644 6-NLP/4-Hotel-Reviews-1/translations/README.ko.md delete mode 100644 6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md delete mode 100644 6-NLP/4-Hotel-Reviews-1/translations/assignment.it.md delete mode 100644 6-NLP/4-Hotel-Reviews-1/translations/assignment.ko.md delete mode 100644 6-NLP/5-Hotel-Reviews-2/translations/README.es.md delete mode 100644 6-NLP/5-Hotel-Reviews-2/translations/README.it.md delete mode 100644 6-NLP/5-Hotel-Reviews-2/translations/README.ko.md delete mode 100644 6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md delete mode 100644 6-NLP/5-Hotel-Reviews-2/translations/assignment.it.md delete mode 100644 6-NLP/5-Hotel-Reviews-2/translations/assignment.ko.md delete mode 100644 6-NLP/translations/README.es.md delete mode 100644 6-NLP/translations/README.hi.md delete mode 100644 6-NLP/translations/README.it.md delete mode 100644 6-NLP/translations/README.ko.md delete mode 100644 6-NLP/translations/README.pt-br.md delete mode 100644 6-NLP/translations/README.ru.md delete mode 100644 6-NLP/translations/README.zh-cn.md delete mode 100644 7-TimeSeries/1-Introduction/translations/README.es.md delete mode 100644 7-TimeSeries/1-Introduction/translations/README.it.md delete mode 100644 7-TimeSeries/1-Introduction/translations/README.ko.md delete mode 100644 7-TimeSeries/1-Introduction/translations/assignment.es.md delete mode 100644 7-TimeSeries/1-Introduction/translations/assignment.it.md delete mode 100644 7-TimeSeries/1-Introduction/translations/assignment.ko.md delete mode 100644 7-TimeSeries/2-ARIMA/translations/README.it.md delete mode 100644 7-TimeSeries/2-ARIMA/translations/README.ko.md delete mode 100644 7-TimeSeries/2-ARIMA/translations/assignment.es.md delete mode 100644 7-TimeSeries/2-ARIMA/translations/assignment.it.md delete mode 100644 7-TimeSeries/2-ARIMA/translations/assignment.ko.md delete mode 100644 7-TimeSeries/3-SVR/translations/README.md delete mode 100644 7-TimeSeries/3-SVR/translations/assignment.es.md delete mode 100644 7-TimeSeries/translations/README.es.md delete mode 100644 7-TimeSeries/translations/README.fr.md delete mode 100644 7-TimeSeries/translations/README.hi.md delete mode 100644 7-TimeSeries/translations/README.it.md delete mode 100644 7-TimeSeries/translations/README.ko.md delete mode 100644 7-TimeSeries/translations/README.ru.md delete mode 100644 7-TimeSeries/translations/README.zh-cn.md delete mode 100644 8-Reinforcement/translations/README.it.md delete mode 100644 8-Reinforcement/translations/README.ko.md delete mode 100644 8-Reinforcement/translations/README.ru.md delete mode 100644 8-Reinforcement/translations/README.tr.md delete mode 100644 8-Reinforcement/translations/README.zh-cn.md delete mode 100644 9-Real-World/1-Applications/translations/README.it.md delete mode 100644 9-Real-World/1-Applications/translations/README.ko.md delete mode 100644 9-Real-World/1-Applications/translations/assignment.es.md delete mode 100644 9-Real-World/1-Applications/translations/assignment.it.md delete mode 100644 9-Real-World/1-Applications/translations/assignment.ko.md delete mode 100644 9-Real-World/translations/README.es.md delete mode 100644 9-Real-World/translations/README.fr.md delete mode 100644 9-Real-World/translations/README.hi.md delete mode 100644 9-Real-World/translations/README.it.md delete mode 100644 9-Real-World/translations/README.ko.md delete mode 100644 9-Real-World/translations/README.pt.md delete mode 100644 9-Real-World/translations/README.ru.md delete mode 100644 9-Real-World/translations/README.tr.md delete mode 100644 9-Real-World/translations/README.zh-cn.md delete mode 100644 TRANSLATIONS.md delete mode 100644 translations/README.es.md delete mode 100644 translations/README.hi.md delete mode 100644 translations/README.it.md delete mode 100644 translations/README.ja.md delete mode 100644 translations/README.ko.md delete mode 100644 translations/README.ms.md delete mode 100644 translations/README.pt-br.md delete mode 100644 translations/README.pt.md delete mode 100644 translations/README.tr.md delete mode 100644 translations/README.zh-cn.md delete mode 100644 translations/Readme.ta.md delete mode 100644 translations/de/TRANSLATIONS.md delete mode 100644 translations/es/1-Introduction/1-intro-to-ML/README.md delete mode 100644 translations/es/1-Introduction/1-intro-to-ML/assignment.md delete mode 100644 translations/es/1-Introduction/2-history-of-ML/README.md delete mode 100644 translations/es/1-Introduction/2-history-of-ML/assignment.md delete mode 100644 translations/es/1-Introduction/3-fairness/README.md delete mode 100644 translations/es/1-Introduction/3-fairness/assignment.md delete mode 100644 translations/es/1-Introduction/4-techniques-of-ML/README.md delete mode 100644 translations/es/1-Introduction/4-techniques-of-ML/assignment.md delete mode 100644 translations/es/1-Introduction/README.md delete mode 100644 translations/es/2-Regression/1-Tools/README.md delete mode 100644 translations/es/2-Regression/1-Tools/assignment.md delete mode 100644 translations/es/2-Regression/1-Tools/solution/Julia/README.md delete mode 100644 translations/es/2-Regression/2-Data/README.md delete mode 100644 translations/es/2-Regression/2-Data/assignment.md delete mode 100644 translations/es/2-Regression/2-Data/solution/Julia/README.md delete mode 100644 translations/es/2-Regression/3-Linear/README.md delete mode 100644 translations/es/2-Regression/3-Linear/assignment.md delete mode 100644 translations/es/2-Regression/3-Linear/solution/Julia/README.md delete mode 100644 translations/es/2-Regression/4-Logistic/README.md delete mode 100644 translations/es/2-Regression/4-Logistic/assignment.md delete mode 100644 translations/es/2-Regression/4-Logistic/solution/Julia/README.md delete mode 100644 translations/es/2-Regression/README.md delete mode 100644 translations/es/3-Web-App/1-Web-App/README.md delete mode 100644 translations/es/3-Web-App/1-Web-App/assignment.md delete mode 100644 translations/es/3-Web-App/README.md delete mode 100644 translations/es/4-Classification/1-Introduction/README.md delete mode 100644 translations/es/4-Classification/1-Introduction/assignment.md delete mode 100644 translations/es/4-Classification/1-Introduction/solution/Julia/README.md delete mode 100644 translations/es/4-Classification/2-Classifiers-1/README.md delete mode 100644 translations/es/4-Classification/2-Classifiers-1/assignment.md delete mode 100644 translations/es/4-Classification/2-Classifiers-1/solution/Julia/README.md delete mode 100644 translations/es/4-Classification/3-Classifiers-2/README.md delete mode 100644 translations/es/4-Classification/3-Classifiers-2/assignment.md delete mode 100644 translations/es/4-Classification/3-Classifiers-2/solution/Julia/README.md delete mode 100644 translations/es/4-Classification/4-Applied/README.md delete mode 100644 translations/es/4-Classification/4-Applied/assignment.md delete mode 100644 translations/es/4-Classification/README.md delete mode 100644 translations/es/5-Clustering/1-Visualize/README.md delete mode 100644 translations/es/5-Clustering/1-Visualize/assignment.md delete mode 100644 translations/es/5-Clustering/1-Visualize/solution/Julia/README.md delete mode 100644 translations/es/5-Clustering/2-K-Means/README.md delete mode 100644 translations/es/5-Clustering/2-K-Means/assignment.md delete mode 100644 translations/es/5-Clustering/2-K-Means/solution/Julia/README.md delete mode 100644 translations/es/5-Clustering/README.md delete mode 100644 translations/es/6-NLP/1-Introduction-to-NLP/README.md delete mode 100644 translations/es/6-NLP/1-Introduction-to-NLP/assignment.md delete mode 100644 translations/es/6-NLP/2-Tasks/README.md delete mode 100644 translations/es/6-NLP/2-Tasks/assignment.md delete mode 100644 translations/es/6-NLP/3-Translation-Sentiment/README.md delete mode 100644 translations/es/6-NLP/3-Translation-Sentiment/assignment.md delete mode 100644 translations/es/6-NLP/3-Translation-Sentiment/solution/Julia/README.md delete mode 100644 translations/es/6-NLP/3-Translation-Sentiment/solution/R/README.md delete mode 100644 translations/es/6-NLP/4-Hotel-Reviews-1/README.md delete mode 100644 translations/es/6-NLP/4-Hotel-Reviews-1/assignment.md delete mode 100644 translations/es/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md delete mode 100644 translations/es/6-NLP/4-Hotel-Reviews-1/solution/R/README.md delete mode 100644 translations/es/6-NLP/5-Hotel-Reviews-2/README.md delete mode 100644 translations/es/6-NLP/5-Hotel-Reviews-2/assignment.md delete mode 100644 translations/es/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md delete mode 100644 translations/es/6-NLP/5-Hotel-Reviews-2/solution/R/README.md delete mode 100644 translations/es/6-NLP/README.md delete mode 100644 translations/es/6-NLP/data/README.md delete mode 100644 translations/es/7-TimeSeries/1-Introduction/README.md delete mode 100644 translations/es/7-TimeSeries/1-Introduction/assignment.md delete mode 100644 translations/es/7-TimeSeries/1-Introduction/solution/Julia/README.md delete mode 100644 translations/es/7-TimeSeries/1-Introduction/solution/R/README.md delete mode 100644 translations/es/7-TimeSeries/2-ARIMA/README.md delete mode 100644 translations/es/7-TimeSeries/2-ARIMA/assignment.md delete mode 100644 translations/es/7-TimeSeries/2-ARIMA/solution/Julia/README.md delete mode 100644 translations/es/7-TimeSeries/2-ARIMA/solution/R/README.md delete mode 100644 translations/es/7-TimeSeries/3-SVR/README.md delete mode 100644 translations/es/7-TimeSeries/3-SVR/assignment.md delete mode 100644 translations/es/7-TimeSeries/README.md delete mode 100644 translations/es/8-Reinforcement/1-QLearning/README.md delete mode 100644 translations/es/8-Reinforcement/1-QLearning/assignment.md delete mode 100644 translations/es/8-Reinforcement/1-QLearning/solution/Julia/README.md delete mode 100644 translations/es/8-Reinforcement/1-QLearning/solution/R/README.md delete mode 100644 translations/es/8-Reinforcement/2-Gym/README.md delete mode 100644 translations/es/8-Reinforcement/2-Gym/assignment.md delete mode 100644 translations/es/8-Reinforcement/2-Gym/solution/Julia/README.md delete mode 100644 translations/es/8-Reinforcement/2-Gym/solution/R/README.md delete mode 100644 translations/es/8-Reinforcement/README.md delete mode 100644 translations/es/9-Real-World/1-Applications/README.md delete mode 100644 translations/es/9-Real-World/1-Applications/assignment.md delete mode 100644 translations/es/9-Real-World/2-Debugging-ML-Models/README.md delete mode 100644 translations/es/9-Real-World/2-Debugging-ML-Models/assignment.md delete mode 100644 translations/es/9-Real-World/README.md delete mode 100644 translations/es/CODE_OF_CONDUCT.md delete mode 100644 translations/es/CONTRIBUTING.md delete mode 100644 translations/es/README.md delete mode 100644 translations/es/SECURITY.md delete mode 100644 translations/es/SUPPORT.md delete mode 100644 translations/es/TRANSLATIONS.md delete mode 100644 translations/es/docs/_sidebar.md delete mode 100644 translations/es/for-teachers.md delete mode 100644 translations/es/quiz-app/README.md delete mode 100644 translations/es/sketchnotes/LICENSE.md delete mode 100644 translations/es/sketchnotes/README.md delete mode 100644 translations/fr/1-Introduction/1-intro-to-ML/README.md delete mode 100644 translations/fr/1-Introduction/1-intro-to-ML/assignment.md delete mode 100644 translations/fr/1-Introduction/2-history-of-ML/README.md delete mode 100644 translations/fr/1-Introduction/2-history-of-ML/assignment.md delete mode 100644 translations/fr/1-Introduction/3-fairness/README.md delete mode 100644 translations/fr/1-Introduction/3-fairness/assignment.md delete mode 100644 translations/fr/1-Introduction/4-techniques-of-ML/README.md delete mode 100644 translations/fr/1-Introduction/4-techniques-of-ML/assignment.md delete mode 100644 translations/fr/1-Introduction/README.md delete mode 100644 translations/fr/2-Regression/1-Tools/README.md delete mode 100644 translations/fr/2-Regression/1-Tools/assignment.md delete mode 100644 translations/fr/2-Regression/1-Tools/solution/Julia/README.md delete mode 100644 translations/fr/2-Regression/2-Data/README.md delete mode 100644 translations/fr/2-Regression/2-Data/assignment.md delete mode 100644 translations/fr/2-Regression/2-Data/solution/Julia/README.md delete mode 100644 translations/fr/2-Regression/3-Linear/README.md delete mode 100644 translations/fr/2-Regression/3-Linear/assignment.md delete mode 100644 translations/fr/2-Regression/3-Linear/solution/Julia/README.md delete mode 100644 translations/fr/2-Regression/4-Logistic/README.md delete mode 100644 translations/fr/2-Regression/4-Logistic/assignment.md delete mode 100644 translations/fr/2-Regression/4-Logistic/solution/Julia/README.md delete mode 100644 translations/fr/2-Regression/README.md delete mode 100644 translations/fr/3-Web-App/1-Web-App/README.md delete mode 100644 translations/fr/3-Web-App/1-Web-App/assignment.md delete mode 100644 translations/fr/3-Web-App/README.md delete mode 100644 translations/fr/4-Classification/1-Introduction/README.md delete mode 100644 translations/fr/4-Classification/1-Introduction/assignment.md delete mode 100644 translations/fr/4-Classification/1-Introduction/solution/Julia/README.md delete mode 100644 translations/fr/4-Classification/2-Classifiers-1/README.md delete mode 100644 translations/fr/4-Classification/2-Classifiers-1/assignment.md delete mode 100644 translations/fr/4-Classification/2-Classifiers-1/solution/Julia/README.md delete mode 100644 translations/fr/4-Classification/3-Classifiers-2/README.md delete mode 100644 translations/fr/4-Classification/3-Classifiers-2/assignment.md delete mode 100644 translations/fr/4-Classification/3-Classifiers-2/solution/Julia/README.md delete mode 100644 translations/fr/4-Classification/4-Applied/README.md delete mode 100644 translations/fr/4-Classification/4-Applied/assignment.md delete mode 100644 translations/fr/4-Classification/README.md delete mode 100644 translations/fr/5-Clustering/1-Visualize/README.md delete mode 100644 translations/fr/5-Clustering/1-Visualize/assignment.md delete mode 100644 translations/fr/5-Clustering/1-Visualize/solution/Julia/README.md delete mode 100644 translations/fr/5-Clustering/2-K-Means/README.md delete mode 100644 translations/fr/5-Clustering/2-K-Means/assignment.md delete mode 100644 translations/fr/5-Clustering/2-K-Means/solution/Julia/README.md delete mode 100644 translations/fr/5-Clustering/README.md delete mode 100644 translations/fr/6-NLP/1-Introduction-to-NLP/README.md delete mode 100644 translations/fr/6-NLP/1-Introduction-to-NLP/assignment.md delete mode 100644 translations/fr/6-NLP/2-Tasks/README.md delete mode 100644 translations/fr/6-NLP/2-Tasks/assignment.md delete mode 100644 translations/fr/6-NLP/3-Translation-Sentiment/README.md delete mode 100644 translations/fr/6-NLP/3-Translation-Sentiment/assignment.md delete mode 100644 translations/fr/6-NLP/3-Translation-Sentiment/solution/Julia/README.md delete mode 100644 translations/fr/6-NLP/3-Translation-Sentiment/solution/R/README.md delete mode 100644 translations/fr/6-NLP/4-Hotel-Reviews-1/README.md delete mode 100644 translations/fr/6-NLP/4-Hotel-Reviews-1/assignment.md delete mode 100644 translations/fr/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md delete mode 100644 translations/fr/6-NLP/4-Hotel-Reviews-1/solution/R/README.md delete mode 100644 translations/fr/6-NLP/5-Hotel-Reviews-2/README.md delete mode 100644 translations/fr/6-NLP/5-Hotel-Reviews-2/assignment.md delete mode 100644 translations/fr/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md delete mode 100644 translations/fr/6-NLP/5-Hotel-Reviews-2/solution/R/README.md delete mode 100644 translations/fr/6-NLP/README.md delete mode 100644 translations/fr/6-NLP/data/README.md delete mode 100644 translations/fr/7-TimeSeries/1-Introduction/README.md delete mode 100644 translations/fr/7-TimeSeries/1-Introduction/assignment.md delete mode 100644 translations/fr/7-TimeSeries/1-Introduction/solution/Julia/README.md delete mode 100644 translations/fr/7-TimeSeries/1-Introduction/solution/R/README.md delete mode 100644 translations/fr/7-TimeSeries/2-ARIMA/README.md delete mode 100644 translations/fr/7-TimeSeries/2-ARIMA/assignment.md delete mode 100644 translations/fr/7-TimeSeries/2-ARIMA/solution/Julia/README.md delete mode 100644 translations/fr/7-TimeSeries/2-ARIMA/solution/R/README.md delete mode 100644 translations/fr/7-TimeSeries/3-SVR/README.md delete mode 100644 translations/fr/7-TimeSeries/3-SVR/assignment.md delete mode 100644 translations/fr/7-TimeSeries/README.md delete mode 100644 translations/fr/8-Reinforcement/1-QLearning/README.md delete mode 100644 translations/fr/8-Reinforcement/1-QLearning/assignment.md delete mode 100644 translations/fr/8-Reinforcement/1-QLearning/solution/Julia/README.md delete mode 100644 translations/fr/8-Reinforcement/1-QLearning/solution/R/README.md delete mode 100644 translations/fr/8-Reinforcement/2-Gym/README.md delete mode 100644 translations/fr/8-Reinforcement/2-Gym/assignment.md delete mode 100644 translations/fr/8-Reinforcement/2-Gym/solution/Julia/README.md delete mode 100644 translations/fr/8-Reinforcement/2-Gym/solution/R/README.md delete mode 100644 translations/fr/8-Reinforcement/README.md delete mode 100644 translations/fr/9-Real-World/1-Applications/README.md delete mode 100644 translations/fr/9-Real-World/1-Applications/assignment.md delete mode 100644 translations/fr/9-Real-World/2-Debugging-ML-Models/README.md delete mode 100644 translations/fr/9-Real-World/2-Debugging-ML-Models/assignment.md delete mode 100644 translations/fr/9-Real-World/README.md delete mode 100644 translations/fr/CODE_OF_CONDUCT.md delete mode 100644 translations/fr/CONTRIBUTING.md delete mode 100644 translations/fr/README.md delete mode 100644 translations/fr/SECURITY.md delete mode 100644 translations/fr/SUPPORT.md delete mode 100644 translations/fr/TRANSLATIONS.md delete mode 100644 translations/fr/docs/_sidebar.md delete mode 100644 translations/fr/for-teachers.md delete mode 100644 translations/fr/quiz-app/README.md delete mode 100644 translations/fr/sketchnotes/LICENSE.md delete mode 100644 translations/fr/sketchnotes/README.md delete mode 100644 translations/hi/1-Introduction/1-intro-to-ML/README.md delete mode 100644 translations/hi/1-Introduction/1-intro-to-ML/assignment.md delete mode 100644 translations/hi/1-Introduction/2-history-of-ML/README.md delete mode 100644 translations/hi/1-Introduction/2-history-of-ML/assignment.md delete mode 100644 translations/hi/1-Introduction/3-fairness/README.md delete mode 100644 translations/hi/1-Introduction/3-fairness/assignment.md delete mode 100644 translations/hi/1-Introduction/4-techniques-of-ML/README.md delete mode 100644 translations/hi/1-Introduction/4-techniques-of-ML/assignment.md delete mode 100644 translations/hi/1-Introduction/README.md delete mode 100644 translations/hi/2-Regression/1-Tools/README.md delete mode 100644 translations/hi/2-Regression/1-Tools/assignment.md delete mode 100644 translations/hi/2-Regression/1-Tools/solution/Julia/README.md delete mode 100644 translations/hi/2-Regression/2-Data/README.md delete mode 100644 translations/hi/2-Regression/2-Data/assignment.md delete mode 100644 translations/hi/2-Regression/2-Data/solution/Julia/README.md delete mode 100644 translations/hi/2-Regression/3-Linear/README.md delete mode 100644 translations/hi/2-Regression/3-Linear/assignment.md delete mode 100644 translations/hi/2-Regression/3-Linear/solution/Julia/README.md delete mode 100644 translations/hi/2-Regression/4-Logistic/README.md delete mode 100644 translations/hi/2-Regression/4-Logistic/assignment.md delete mode 100644 translations/hi/2-Regression/4-Logistic/solution/Julia/README.md delete mode 100644 translations/hi/2-Regression/README.md delete mode 100644 translations/hi/3-Web-App/1-Web-App/README.md delete mode 100644 translations/hi/3-Web-App/1-Web-App/assignment.md delete mode 100644 translations/hi/3-Web-App/README.md delete mode 100644 translations/hi/4-Classification/1-Introduction/README.md delete mode 100644 translations/hi/4-Classification/1-Introduction/assignment.md delete mode 100644 translations/hi/4-Classification/1-Introduction/solution/Julia/README.md delete mode 100644 translations/hi/4-Classification/2-Classifiers-1/README.md delete mode 100644 translations/hi/4-Classification/2-Classifiers-1/assignment.md delete mode 100644 translations/hi/4-Classification/2-Classifiers-1/solution/Julia/README.md delete mode 100644 translations/hi/4-Classification/3-Classifiers-2/README.md delete mode 100644 translations/hi/4-Classification/3-Classifiers-2/assignment.md delete mode 100644 translations/hi/4-Classification/3-Classifiers-2/solution/Julia/README.md delete mode 100644 translations/hi/4-Classification/4-Applied/README.md delete mode 100644 translations/hi/4-Classification/4-Applied/assignment.md delete mode 100644 translations/hi/4-Classification/README.md delete mode 100644 translations/hi/5-Clustering/1-Visualize/README.md delete mode 100644 translations/hi/5-Clustering/1-Visualize/assignment.md delete mode 100644 translations/hi/5-Clustering/1-Visualize/solution/Julia/README.md delete mode 100644 translations/hi/5-Clustering/2-K-Means/README.md delete mode 100644 translations/hi/5-Clustering/2-K-Means/assignment.md delete mode 100644 translations/hi/5-Clustering/2-K-Means/solution/Julia/README.md delete mode 100644 translations/hi/5-Clustering/README.md delete mode 100644 translations/hi/6-NLP/1-Introduction-to-NLP/README.md delete mode 100644 translations/hi/6-NLP/1-Introduction-to-NLP/assignment.md delete mode 100644 translations/hi/6-NLP/2-Tasks/README.md delete mode 100644 translations/hi/6-NLP/2-Tasks/assignment.md delete mode 100644 translations/hi/6-NLP/3-Translation-Sentiment/README.md delete mode 100644 translations/hi/6-NLP/3-Translation-Sentiment/assignment.md delete mode 100644 translations/hi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md delete mode 100644 translations/hi/6-NLP/3-Translation-Sentiment/solution/R/README.md delete mode 100644 translations/hi/6-NLP/4-Hotel-Reviews-1/README.md delete mode 100644 translations/hi/6-NLP/4-Hotel-Reviews-1/assignment.md delete mode 100644 translations/hi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md delete mode 100644 translations/hi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md delete mode 100644 translations/hi/6-NLP/5-Hotel-Reviews-2/README.md delete mode 100644 translations/hi/6-NLP/5-Hotel-Reviews-2/assignment.md delete mode 100644 translations/hi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md delete mode 100644 translations/hi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md delete mode 100644 translations/hi/6-NLP/README.md delete mode 100644 translations/hi/6-NLP/data/README.md delete mode 100644 translations/hi/7-TimeSeries/1-Introduction/README.md delete mode 100644 translations/hi/7-TimeSeries/1-Introduction/assignment.md delete mode 100644 translations/hi/7-TimeSeries/1-Introduction/solution/Julia/README.md delete mode 100644 translations/hi/7-TimeSeries/1-Introduction/solution/R/README.md delete mode 100644 translations/hi/7-TimeSeries/2-ARIMA/README.md delete mode 100644 translations/hi/7-TimeSeries/2-ARIMA/assignment.md delete mode 100644 translations/hi/7-TimeSeries/2-ARIMA/solution/Julia/README.md delete mode 100644 translations/hi/7-TimeSeries/2-ARIMA/solution/R/README.md delete mode 100644 translations/hi/7-TimeSeries/3-SVR/README.md delete mode 100644 translations/hi/7-TimeSeries/3-SVR/assignment.md delete mode 100644 translations/hi/7-TimeSeries/README.md delete mode 100644 translations/hi/8-Reinforcement/1-QLearning/README.md delete mode 100644 translations/hi/8-Reinforcement/1-QLearning/assignment.md delete mode 100644 translations/hi/8-Reinforcement/1-QLearning/solution/Julia/README.md delete mode 100644 translations/hi/8-Reinforcement/1-QLearning/solution/R/README.md delete mode 100644 translations/hi/8-Reinforcement/2-Gym/README.md delete mode 100644 translations/hi/8-Reinforcement/2-Gym/assignment.md delete mode 100644 translations/hi/8-Reinforcement/2-Gym/solution/Julia/README.md delete mode 100644 translations/hi/8-Reinforcement/2-Gym/solution/R/README.md delete mode 100644 translations/hi/8-Reinforcement/README.md delete mode 100644 translations/hi/9-Real-World/1-Applications/README.md delete mode 100644 translations/hi/9-Real-World/1-Applications/assignment.md delete mode 100644 translations/hi/9-Real-World/2-Debugging-ML-Models/README.md delete mode 100644 translations/hi/9-Real-World/2-Debugging-ML-Models/assignment.md delete mode 100644 translations/hi/9-Real-World/README.md delete mode 100644 translations/hi/CODE_OF_CONDUCT.md delete mode 100644 translations/hi/CONTRIBUTING.md delete mode 100644 translations/hi/README.md delete mode 100644 translations/hi/SECURITY.md delete mode 100644 translations/hi/SUPPORT.md delete mode 100644 translations/hi/TRANSLATIONS.md delete mode 100644 translations/hi/docs/_sidebar.md delete mode 100644 translations/hi/for-teachers.md delete mode 100644 translations/hi/quiz-app/README.md delete mode 100644 translations/hi/sketchnotes/LICENSE.md delete mode 100644 translations/hi/sketchnotes/README.md delete mode 100644 translations/it/1-Introduction/1-intro-to-ML/README.md delete mode 100644 translations/it/1-Introduction/1-intro-to-ML/assignment.md delete mode 100644 translations/it/1-Introduction/2-history-of-ML/README.md delete mode 100644 translations/it/1-Introduction/2-history-of-ML/assignment.md delete mode 100644 translations/it/1-Introduction/3-fairness/README.md delete mode 100644 translations/it/1-Introduction/3-fairness/assignment.md delete mode 100644 translations/it/1-Introduction/4-techniques-of-ML/README.md delete mode 100644 translations/it/1-Introduction/4-techniques-of-ML/assignment.md delete mode 100644 translations/it/1-Introduction/README.md delete mode 100644 translations/it/2-Regression/1-Tools/README.md delete mode 100644 translations/it/2-Regression/1-Tools/assignment.md delete mode 100644 translations/it/2-Regression/1-Tools/solution/Julia/README.md delete mode 100644 translations/it/2-Regression/2-Data/README.md delete mode 100644 translations/it/2-Regression/2-Data/assignment.md delete mode 100644 translations/it/2-Regression/2-Data/solution/Julia/README.md delete mode 100644 translations/it/2-Regression/3-Linear/README.md delete mode 100644 translations/it/2-Regression/3-Linear/assignment.md delete mode 100644 translations/it/2-Regression/3-Linear/solution/Julia/README.md delete mode 100644 translations/it/2-Regression/4-Logistic/README.md delete mode 100644 translations/it/2-Regression/4-Logistic/assignment.md delete mode 100644 translations/it/2-Regression/4-Logistic/solution/Julia/README.md delete mode 100644 translations/it/2-Regression/README.md delete mode 100644 translations/it/3-Web-App/1-Web-App/README.md delete mode 100644 translations/it/3-Web-App/1-Web-App/assignment.md delete mode 100644 translations/it/3-Web-App/README.md delete mode 100644 translations/it/4-Classification/1-Introduction/README.md delete mode 100644 translations/it/4-Classification/1-Introduction/assignment.md delete mode 100644 translations/it/4-Classification/1-Introduction/solution/Julia/README.md delete mode 100644 translations/it/4-Classification/2-Classifiers-1/README.md delete mode 100644 translations/it/4-Classification/2-Classifiers-1/assignment.md delete mode 100644 translations/it/4-Classification/2-Classifiers-1/solution/Julia/README.md delete mode 100644 translations/it/4-Classification/3-Classifiers-2/README.md delete mode 100644 translations/it/4-Classification/3-Classifiers-2/assignment.md delete mode 100644 translations/it/4-Classification/3-Classifiers-2/solution/Julia/README.md delete mode 100644 translations/it/4-Classification/4-Applied/README.md delete mode 100644 translations/it/4-Classification/4-Applied/assignment.md delete mode 100644 translations/it/4-Classification/README.md delete mode 100644 translations/it/5-Clustering/1-Visualize/README.md delete mode 100644 translations/it/5-Clustering/1-Visualize/assignment.md delete mode 100644 translations/it/5-Clustering/1-Visualize/solution/Julia/README.md delete mode 100644 translations/it/5-Clustering/2-K-Means/README.md delete mode 100644 translations/it/5-Clustering/2-K-Means/assignment.md delete mode 100644 translations/it/5-Clustering/2-K-Means/solution/Julia/README.md delete mode 100644 translations/it/5-Clustering/README.md delete mode 100644 translations/it/6-NLP/1-Introduction-to-NLP/README.md delete mode 100644 translations/it/6-NLP/1-Introduction-to-NLP/assignment.md diff --git a/.github/workflows/co-op-translator.yml b/.github/workflows/co-op-translator.yml new file mode 100644 index 00000000..65ee1494 --- /dev/null +++ b/.github/workflows/co-op-translator.yml @@ -0,0 +1,101 @@ +name: Co-op Translator + +on: + push: + branches: + - main + +jobs: + co-op-translator: + runs-on: ubuntu-latest + + permissions: + contents: write + pull-requests: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Set up Python + uses: actions/setup-python@v4 + with: + python-version: '3.10' + + - name: Install Co-op Translator + run: | + python -m pip install --upgrade pip + pip install co-op-translator + + - name: Run Co-op Translator + env: + PYTHONIOENCODING: utf-8 + # Azure AI Service Credentials + AZURE_AI_SERVICE_API_KEY: ${{ secrets.AZURE_AI_SERVICE_API_KEY }} + AZURE_AI_SERVICE_ENDPOINT: ${{ secrets.AZURE_AI_SERVICE_ENDPOINT }} + + # Azure OpenAI Credentials + AZURE_OPENAI_API_KEY: ${{ secrets.AZURE_OPENAI_API_KEY }} + AZURE_OPENAI_ENDPOINT: ${{ secrets.AZURE_OPENAI_ENDPOINT }} + AZURE_OPENAI_MODEL_NAME: ${{ secrets.AZURE_OPENAI_MODEL_NAME }} + AZURE_OPENAI_CHAT_DEPLOYMENT_NAME: ${{ secrets.AZURE_OPENAI_CHAT_DEPLOYMENT_NAME }} + AZURE_OPENAI_API_VERSION: ${{ secrets.AZURE_OPENAI_API_VERSION }} + + # OpenAI Credentials + OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }} + OPENAI_ORG_ID: ${{ secrets.OPENAI_ORG_ID }} + OPENAI_CHAT_MODEL_ID: ${{ secrets.OPENAI_CHAT_MODEL_ID }} + OPENAI_BASE_URL: ${{ secrets.OPENAI_BASE_URL }} + run: | + # ===================================================================== + # IMPORTANT: Set your target languages here (REQUIRED CONFIGURATION) + # ===================================================================== + # Example: Translate to Spanish, French, German. Add -y to auto-confirm. + # translate -l "all" -y # <--- MODIFY THIS LINE with your desired languages + # Recommendation for large batches over 29 files run them in batches maximum github runner time is 6 hours + translate -l "ar ur tl mr ne pa" -y + # translate -l "mr ne pa" -y + # translate -l "bn ru mo br it tr" -y + # translate -l "br it tr" -y + # translate -l "el th sv da no" -y + # translate -l "sv da no" -y + # translate -l "fi nl he vi id ms" -y + # translate -l "vi id ms" -y + # translate -l "sw hu cs sk ro bg" -y + # translate -l "sk ro bg" -y + # translate -l "sr hr sl ja uk my" -y + # translate -l "ja uk my" -y + + - name: Authenticate GitHub App + id: generate_token + uses: tibdex/github-app-token@v1 + with: + app_id: ${{ secrets.GH_APP_ID }} + private_key: ${{ secrets.GH_APP_PRIVATE_KEY }} + + - name: Create Pull Request with translations + uses: peter-evans/create-pull-request@v5 + with: + token: ${{ steps.generate_token.outputs.token }} + commit-message: "🌐 Update translations via Co-op Translator" + title: "🌐 Update translations via Co-op Translator" + body: | + This PR updates translations for recent changes merged into the `main` branch. + + ### 📋 Summary of Changes + - Translated markdown content has been added under the `translations/` directory + - Translated images (if applicable) have been generated in the `translated_images/` directory + + 🔁 Co-op Translator ensures that changes in links, structure, or inline elements in the original content are automatically reflected in all translated files. + + --- + 🌐 This pull request was automatically generated by [Co-op Translator](https://github.com/Azure/co-op-translator), powered by Azure AI. + + branch: update-translations + base: main + delete-branch: true + add-paths: | + translations/ + translated_images/ diff --git a/1-Introduction/1-intro-to-ML/translations/README.bn.md b/1-Introduction/1-intro-to-ML/translations/README.bn.md deleted file mode 100644 index 5d1ac4dc..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.bn.md +++ /dev/null @@ -1,151 +0,0 @@ -# মেশিন লার্নিং এর সূচনা - - -[![ML, AI, deep learning - What's the difference?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning - What's the difference?") - -> 🎥 মেশিন লার্নিং, এআই(আর্টিফিশিয়াল ইন্টিলিজেন্স) এবং ডিপ লার্নিং এর মধ্যে পার্থক্য এর আলোচনা জানতে উপরের ছবিটিতে ক্লিক করে ভিডিওটি দেখুন। - -## [প্রি-লেকচার-কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - ---- -বিগিনারদের জন্য ক্লাসিক্যাল মেশিন লার্নিং কোর্স এ আপনাকে স্বাগতম!আপনি হয় এই বিষয়ে সম্পূর্ণ নতুন অথবা মেশিন লার্নিং এ নিজের অনুশীলনকে আরও উন্নত করতে চান, আপনি আমাদের সাথে যোগদান করতে পেরে আমরা খুশি! আমরা আপনার ML অধ্যয়নের জন্য একটি বন্ধুত্বপূর্ণ লঞ্চিং স্পট তৈরি করতে চাই এবং আপনার মূল্যায়ন, প্রতিক্রিয়া,[ফিডব্যাক](https://github.com/microsoft/ML-For-Beginners/discussions). জানাতে এবং অন্তর্ভুক্ত করতে পেরে খুশি হব । - - -[![Introduction to ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction to ML") - - -> 🎥 ভিডিওটি দেখার জন্য উপরের ছবিতে ক্লিক করুন -MIT এর জন গাটেং মেশিন লার্নিং এর পরিচিতি করাচ্ছেন। - ---- -## মেশিন লার্নিং এর শুরু - -এই ক্যারিকুলাম শুরুর করার পূর্বে, নোটবুক রান করার জন্য নোটবুক সেটআপ থাকতে হবে। - - -- **আপনার মেশিন কে কনফিগার করুন এই ভিডিও দেখে**. শিখার জন্য এই লিংকটি ব্যবহার করুন [কিভাবে পাইথন ইন্সটল করতে হয়](https://youtu.be/CXZYvNRIAKM) এবং [সেটআপ এ ইডিটর](https://youtu.be/EU8eayHWoZg) . -- **পাইথন শিখুন**. [পাইথন](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) এর ব্যাসিক নলেজ জানা থাকা জরুরী। এই কোর্সের প্রোগ্রামিং ল্যাঙ্গুয়েজ ডেটা সাইন্সটিস্ট এর জন্য খুবই গুরুত্বপূর্ণ। -- **Node.js এবং JavaScript শিখুন**.ওয়েব অ্যাপস তৈরির জন্য এই কোর্সে আমরা জাবাস্ক্রিপট ব্যাবহার করব। তাই, আপনার [নোড](https://nodejs.org) এবং [npm](https://www.npmjs.com/) ইন্সটল থাকতে হবে। অন্যদিকে, পাইথন এবং জাভাস্ক্রিপট ডেভেলাপমেন্টের জন্য [ভিজুয়াল স্টুডিও](https://code.visualstudio.com/) কোড এ দুটুই আছে। -- **একটি গিটহাব অ্যাকাউন্ট তৈরি করুন**. যেহেতু আপনি আমাদের কে [গিটহাব](https://github.com) এ পেয়েছেন, তারমানে আপনার ইতিমধ্যেই একাউন্ট আছে। তবে যদি না থাকে, একটি একাউন্ট তৈরি করুন এবং পরে ফর্ক করে আপনার বানিয়ে নিন। (স্টার দিতে ভুলে যাবেন না,😊 ) -- **ঘুরিয়ে আসেন Scikit-learn**. নিজেকে পরিচিত করুন [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) এর সাথে, মেশিন লার্নিং লাইব্রেরি সেট যা আমরা এই কোর্সে উল্লেখ করে থাকব - ---- -## মেশিন লার্নিং কি? -'মেশিন লার্নিং' শব্দটি বর্তমান সময়ের সবচেয়ে জনপ্রিয় এবং প্রায়ই ব্যবহৃত একটি শব্দ। আপনি যে ডোমেইনে কাজ করেন না কেন প্রযুক্তির সাথে আপনার পরিচিতি থাকলে অন্তত একবার এই শব্দটি শুনেছেন এমন একটি অপ্রয়োজনীয় সম্ভাবনা রয়েছে। মেশিন লার্নিং এর মেকানিক্স, যাইহোক, বেশিরভাগ মানুষের কাছে এটি একটি রহস্য। একজন মেশিন লার্নিং নতুনদের জন্য, বিষয়টি কখনও কখনও অপ্রতিরোধ্য মনে হতে পারে। অতএব, মেশিন লার্নিং আসলে কী তা বোঝা গুরুত্বপূর্ণ এবং বাস্তব উদাহরণের মাধ্যমে ধাপে ধাপে এটি সম্পর্কে শিখতে হবে। - ---- -## হাইফ কার্ভ - -![ml hype curve](../images/hype.png) - -> Google Trends এ 'মেশিন লার্নিং' শব্দটির সাম্প্রতিক 'হাইপ কার্ভ'। - ---- -## এক রহস্যময় মহাবিশ্ব - -আমরা রহস্যে ভরপুর একটি আকর্ষনীয় মহাবিশ্বে বাস করি। স্টিফেন হকিং, আলবার্ট আইনস্টাইন এবং আরও অনেকের মতো মহান বিজ্ঞানীরা আমাদের চারপাশের বিশ্বের রহস্য উন্মোচন করে এমন অর্থপূর্ণ তথ্য অনুসন্ধানে তাদের জীবন উৎসর্গ করেছেন।এটি মানুষের শেখার একটি অবস্থা: একটি মানব শিশু নতুন জিনিস শিখে এবং বছরের পর বছর তাদের বিশ্বের গঠন উন্মোচন করে যখন তারা প্রাপ্তবয়স্ক হয়ে ওঠে। - ---- - -## শিশুদের মস্তিষ্ক -একটি শিশুর মস্তিষ্ক এবং ইন্দ্রিয়গুলি তাদের আশেপাশের ঘটনাগুলি উপলব্ধি করে এবং ধীরে ধীরে জীবনের লুকানো নিদর্শনগুলি শিখে যা শিশুকে শেখা নিদর্শনগুলি সনাক্ত করার জন্য যৌক্তিক নিয়ম তৈরি করতে সহায়তা করে। এই প্রথিবীতে মানুষের মস্তিষ্কের শেখার প্রক্রিয়া অন্যান্য প্রাণি থেকে খুবই অত্যাধুনিক। ক্রমাগত শেখা এবং লুকানো প্যাটার্নগুলি আবিষ্কার করে এবং তারপর সেই প্যাটার্নগুলিতে উদ্ভাবন করে আমাদের সারা জীবন জুড়ে নিজেদের আরও ভালো এবং উন্নত করতে সক্ষম করে। এই শেখার ক্ষমতা ও বিকশিত হওয়ার সক্ষমতা কে বলে [ব্রেইন প্লাস্টিসিটি](https://www.simplypsychology.org/brain-plasticity.html)। বাহ্যিকভাবে, আমরা মানব মস্তিষ্কের শেখার প্রক্রিয়া এবং মেশিন লার্নিং ধারণার মধ্যে কিছু অনুপ্রেরণামূলক মিল আঁকতে পারি। - ---- -## মানুষের মস্তিষ্ক - -[মানুষের মস্তিষ্ক]((https://www.livescience.com/29365-human-brain.html)) বাস্তব জগত থেকে জিনিসগুলি উপলব্ধি করে, অনুভূত তথ্য প্রক্রিয়া করে, যৌক্তিক সিদ্ধান্ত নেয় এবং পরিস্থিতির উপর ভিত্তি করে কিছু ক্রিয়া সম্পাদন করে। এটাকেই আমরা বলি বুদ্ধিমত্তার সাথে আচরণ করা। যখন আমরা একটি মেশিনে বুদ্ধিমান আচরণগত প্রক্রিয়ার একটি প্রতিকৃতি প্রোগ্রাম করি, তখন এটিকে কৃত্রিম বুদ্ধিমত্তা (AI) বলা হয়। - ---- -## কিছু পরিভাষা - -যদিও এটা বিভ্রান্তকর হতে পারে, মেশিন লার্নিং (এম. এল) আর্টিফিশিয়াল ইন্টিলিজেন্স এর একটি অংশ। **ML অর্থপূর্ণ তথ্য উন্মোচন করার জন্য বিশেষ অ্যালগরিদম ব্যবহার করে এবং যুক্তিসঙ্গত সিদ্ধান্ত গ্রহণের প্রক্রিয়াটিকে সমর্থন করার জন্য অনুভূত ডেটা থেকে লুকানো নিদর্শনগুলি খুঁজে বের করার সাথে সম্পর্কিত।** - ---- -## এ আই, এম এল, মেশিন লার্নিং - -![এ আই, এম এল, মেশিন লার্নিং, ডেটা সাইন্স](../images/ai-ml-ds.png) - -> ডায়াগ্রামটি এআই,এমএল, ডিপ লার্নিং এবং ডেটা সাইন্স এর মধ্যে সম্পর্ক বুঝাচ্ছে। ইনফোগ্রাফিক করেছেন [জেন লুপার](https://twitter.com/jenlooper) এবং [এই গ্রাফিক](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) থেকে অনুপ্রাণিত হয়েছেন। - ---- -## কভার-ধারণা - -এই কারিকুলামে,আমরা শুধু মেশিন লার্নিং এর মুল ধারনা গুলো আলোচনা করব যা একজন নতুন শিক্ষার্থীর জানা প্রয়োজন। আমরা যাকে 'ক্লাসিক্যাল মেশিন লার্নিং' বলি তা আমরা প্রাথমিকভাবে Scikit-learn ব্যবহার করে কভার করি, একটি চমৎকার লাইব্রেরি যা অনেক শিক্ষার্থী মৌলিক বিষয়গুলি শিখতে ব্যবহার করে। কৃত্রিম বুদ্ধিমত্তা বা গভীর শিক্ষার বিস্তৃত ধারণা বোঝার জন্য, মেশিন লার্নিংয়ের একটি শক্তিশালী মৌলিক জ্ঞান অপরিহার্য, এবং তাই আমরা এটি এখানে অফার করতে চাই। - ---- -## এই কোর্স থেকে আপনি শিখবেন: - -- মেশিন লার্নিং এর মুল ধারণা -- মেশিন লার্নিং এর ইতিহাস -- মেশিন লার্নিং এবং ভয় -- রিগ্রেশন এম এল (মেশিন লার্নিং) টেকনিকস -- ক্লাসিফিকেশন এম এল (মেশিন লার্নিং) টেকনিকস -- ক্লাস্টারিং এম এল (মেশিন লার্নিং) টেকনিকস -- ন্যাচেরাল লেঙ্গুয়েজ প্রসেসিং এম এল (মেশিন লার্নিং) টেকনিকস -- টাইম সিরিজ ফরকাস্টিং এম এল (মেশিন লার্নিং) টেকনিকস -- রিএনফোর্সমেন্ট লার্নিং -- মেশিন লার্নিং এর জন্য বাস্তব জগতের অ্যাপলিকেশন। - ---- -## কি শিখানো হবে না: - -- ডিপ লার্নিং -- নিউরাল নেটওয়ার্কস -- এ আই (আর্টিফিশিয়াল ইন্টিলিজেন্স) - - -আরও ভালো শিখার অভিজ্ঞতা তৈরি করার জন্য, আমরা নিউরাল নেটওয়ার্ক এবং 'ডিপ লার্নিং'এর জটিলতাগুলি এড়াব - নিউরাল নেটওয়ার্ক ব্যবহার করে বহু-স্তর বিশিষ্ট মডেল-বিল্ডিং - এবং এআই, যা আমরা একটি ভিন্ন পাঠ্যক্রমে আলোচনা করব। আমরা এই বৃহত্তর প্লাটফর্মটির দিকের উপর ফোকাস করার জন্য একটি আসন্ন ডেটা সায়েন্স পাঠ্যক্রমও অফার করব। - ---- -## কেন মেশিন লার্নিং? - -মেশিন লার্নিং, একটি সিস্টেমের দৃষ্টিকোণ থেকে, স্বয়ংক্রিয় সিস্টেমের সৃষ্টি হিসাবে সংজ্ঞায়িত করা হয় যা বুদ্ধিমান সিদ্ধান্ত নিতে সহায়তা করার জন্য ডেটা থেকে লুকানো প্যাটার্নগুলি শিখতে পারে। - -এই অনুপ্রেরণাটি ঢিলেঢালাভাবে অনুপ্রাণিত হয় কিভাবে মানুষের মস্তিষ্ক বাইরের জগত থেকে প্রাপ্ত তথ্যের ভিত্তিতে কিছু জিনিস শিখে। - -✅ এক মিনিটের জন্য চিন্তা করুন কেন একটি ব্যবসা ’মেশিন লার্নিং’ কৌশল ব্যবহার করতে চায় যেখানে একটি হার্ড-কোডেড নিয়ম-ভিত্তিক ইঞ্জিন তৈরি করা যায় । - ---- -## মেশিন লার্নিং এর অ্যাপ্লিকেশন - -মেশিন লার্নিং এর অ্যাপ্লিকেশন এখন প্রায় সবখানে, এবং আমাদের সমাজের চারপাশে প্রচলিত ডেটার মতই সর্বব্যাপী, আমাদের স্মার্ট ফোন, সংযুক্ত ডিভাইস এবং অন্যান্য সিস্টেম দ্বারা উত্পন্ন। অত্যাধুনিক মেশিন লার্নিং অ্যালগরিদমের অপার সম্ভাবনার কথা বিবেচনা করে, গবেষকরা বহুমাত্রিক এবং বহু-বিষয়ক বাস্তব-জীবনের সমস্যার সমাধান করার জন্য তাদের সক্ষমতা অন্বেষণ করে চলেছেন যার মাধ্যমে বড় ইতিবাচক ফলাফল পাওয়া যাবে। - ---- -## ব্যবহৃত মেশিন লার্নিং এর উদাহরণ - -**আপনি মেশিন লার্নিং বিভিন্ন মাধ্যমে ব্যবহার করতে পারবেন**: - -- রোগীর চিকিৎসার রিপোর্ট থেকে রোগের সম্ভাবনা অনুমান করা। -- দিতে আবহাওয়ার ডেটা ব্যবহার করে আবহাওয়া এর পূর্বাভাস দেওয়া -- একটি পাঠ্যের অনুভূতি বোঝার জন্য। -- অপপ্রচার বন্ধ করতে ভুয়া খবর শনাক্ত করা। - -অর্থ, অর্থনীতি, আর্থ সায়েন্স, স্পেস এক্সপ্লোরেশন, বায়োমেডিকেল ইঞ্জিনিয়ারিং, জ্ঞানীয় বিজ্ঞান এবং এমনকি মানবিক ক্ষেত্রগুলি তাদের ডোমেনের কঠিন, ডেটা-প্রসেসিং ভারী সমস্যাগুলি সমাধান করার জন্য মেশিন লার্নিংকে ব্যবহার করেছে। - ---- -## উপসংহার - -মেশিন লার্নিং বাস্তব-বিশ্ব বা উৎপন্ন ডেটা থেকে অর্থপূর্ণ অন্তর্দৃষ্টি খোঁজার মাধ্যমে প্যাটার্ন-আবিষ্কারের প্রক্রিয়াটিকে স্বয়ংক্রিয় করে। এটি অন্যদের মধ্যে ব্যবসা, স্বাস্থ্য এবং আর্থিক অ্যাপ্লিকেশনগুলিতে অত্যন্ত মূল্যবান বলে প্রমাণিত হয়েছে। - -অদূর ভবিষ্যতে, মেশিন লার্নিংয়ের বুনিয়াদিগুলি বোঝা যে কোনও ডোমেনের লোকেদের জন্য এটির ব্যাপক গ্রহণের কারণে অপরিহার্য হতে চলেছে। - ---- -# 🚀 Challenge - -স্কেচ, কাগজে বা একটি অনলাইন অ্যাপ ব্যবহার করে [এক্সালিড্র](https://excalidraw.com/) AI, ML, ডিপ লার্নিং এবং ডেটা সায়েন্সের মধ্যে পার্থক্য সম্পর্কে। - -# [লেকচার-কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - ---- -# পর্যালোচনা ও সেল্ফ স্টাডি - -আপনি কিভাবে ক্লাউডে এমএল অ্যালগরিদম দিয়ে কাজ করতে পারেন সে সম্পর্কে আরও জানতে, এটি অনুসরণ করুন [লার্নিং পাথ](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott)। - -এম এল বেসিক জানুন [লার্নিং পাথ](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) - ---- -# এসাইন্টমেন্ট - -[চলুন শুরু করি](assignment.md) \ No newline at end of file diff --git a/1-Introduction/1-intro-to-ML/translations/README.es.md b/1-Introduction/1-intro-to-ML/translations/README.es.md deleted file mode 100644 index 024dc814..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.es.md +++ /dev/null @@ -1,113 +0,0 @@ -# Introducción al machine learning - -[![ML, IA, deep learning - ¿Cuál es la diferencia?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, IA, deep learning - ¿Cuál es la diferencia?") - -> 🎥 Haz clic en la imagen de arriba para ver un video donde se discuten las diferencias entre el machine learning, la inteligencia artificial, y el deep learning. - -## [Cuestionario previo a la conferencia](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=es) - -### Introducción - -¡Te damos la bienvenida a este curso acerca del machine learning (ML) clásico para principiantes! Así se trate de tu primer contacto con este tema, o cuentes con amplia experiencia en el ML y busques refrescar tus conocimientos en un área específica, ¡nos alegramos de que te nos unas! Queremos crear un punto de lanzamiento amigable para tus estudios de ML y nos encantaría evaluar, responder, e incorporar tu [retroalimentación](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introducción al ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introducción al ML") - -> Haz clic en la imagen de arriba para ver el video: John Guttag del MIT presenta el machine learning - -### Empezando con el machine learning - -Antes de comenzar con este currículum, debes tener tu computadora configurada y lista para ejecutar los notebooks localmente. - -- **Configura tu equipo con estos videos**. Aprende más acerca de como configurar tu equipo con [estos videos](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6). -- **Aprende Python**. También se recomienda que tengas un entendimiento básico de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un lenguaje de programación útil para practicantes de la ciencia de datos, y que se utiliza en este curso. -- **Aprende Node.js y JavaScript**. También usamos JavaScript unas cuantas veces en este curso cuando creamos aplicaciones web, así que necesitarás tener [node](https://nodejs.org) y [npm](https://www.npmjs.com/) instalados, así como [Visual Studio Code](https://code.visualstudio.com/) listo para el desarrollo con Python y JavaScript. -- **Crea una cuenta de GitHub**. Como nos encontraste aquí en [GitHub](https://github.com), puede que ya tengas una cuenta, pero si no, créate una y después haz un fork de este curriculum para usarlo en tu computadora personal. (Siéntete libre de darnos una estrella 😊) -- **Explora Scikit-learn**. Familiarízate con [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), un conjunto de bibliotecas de ML que referenciamos en estas lecciones. - -### ¿Qué es el machine learning? - -El término "machine learning" es uno de los términos más frecuentemente usados y populares hoy en día. Es muy probable que hayas escuchado este término al menos una vez si tienes algún tipo de familiaridad con la tecnología, no importa el sector en que trabajes. Aún así, las mecánicas del machine learning son un misterio para la mayoría de la gente. Para un principiante en machine learning, el tema puede parecer intimidante. Es por esto que es importante entender lo que realmente es el machine learning y aprender sobre el tema poco a poco, a través de ejemplos prácticos. - -![curva de interés en ml](../images/hype.png) - -> Google Trends nos muestra la "curva de interés" más reciente para el término "machine learning" - -Vivimos en un universo lleno de misterios fascinantes. Grandes científicos como Stephen Hawking, Albert Einstein, y muchos más han dedicado sus vidas a la búsqueda de información significativa que revela los misterios del mundo a nuestro alrededor. Esta es la condición humana del aprendizaje: un niño humano aprende cosas nuevas y descubre la estructura de su mundo año tras año a medida que se convierten en adultos. - -El cerebro y los sentidos de un niño perciben sus alrededores y van aprendiendo gradualmente los patrones escondidos de la vida, lo que le ayuda al niño a crear reglas lógicas para identificar los patrones aprendidos. El proceso de aprendizaje del cerebro humano nos hace las criaturas más sofisticadas del planeta. Aprender de forma continua al descubrir patrones ocultos e innovar sobre esos patrones nos permite seguir mejorando a lo largo de nuestras vidas. Esta capacidad de aprendizaje y la capacidad de evolución están relacionadas a un concepto llamado [plasticidad cerebral o neuroplasticidad](https://www.simplypsychology.org/brain-plasticity.html). Podemos trazar algunas similitudes superficiales en cuanto a la motivación entre el proceso de aprendizaje del cerebro humano y los conceptos de machine learning. - -El [cerebro humano](https://www.livescience.com/29365-human-brain.html) percibe cosas del mundo real, procesa la información percibida, toma decisiones racionales, y realiza ciertas acciones basadas en las circunstancias. Esto es a lo que se le conoce como el comportamiento inteligente. Cuando programamos un facsímil (copia) del proceso del comportamiento inteligente, se le llama inteligencia artificial (IA). - -Aunque los términos se suelen confundir, machine learning (ML) es una parte importante de la inteligencia artificial. **El objetivo del ML es utilizar algoritmos especializados para descubrir información significativa y encontrar patrones ocultos de los datos percibidos para corroborar el proceso relacional de la toma de decisiones**. - -![IA, ML, deep learning, ciencia de los datos](../images/ai-ml-ds.png) - -> El diagrama muestra la relación entre IA, ML, deep learning y la ciencia de los datos. Infografía hecha por [Jen Looper](https://twitter.com/jenlooper) inspirada en [esta gráfica](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining). - -## Lo que aprenderás en el curso - -En este currículum, vamos a cubrir solo los conceptos clave de machine learning que un principiante debería conocer. Cubrimos algo a lo que le llamamos "machine learning clásico" usando principalmente Scikit-learn, una biblioteca excelente que muchos estudiantes utilizan para aprender las bases. Para entender conceptos más amplios de la inteligencia artificial o deep learning, es indispensable tener un fuerte conocimiento de los fundamentos, y eso es lo que nos gustaría ofrecerte aquí. - -En este curso aprenderás: - -- conceptos clave del machine learning -- la historia del ML -- la justicia y el ML -- técnicas de regresión en ML -- técnicas de clasificación en ML -- técnicas de agrupamiento en ML -- técnicas de procesamiento del lenguaje natural en ML -- técnicas de previsión de series temporales en ML -- reforzamiento del aprendizaje -- ML aplicada al mundo real - -## Lo que no cubriremos - -- deep learning -- redes neuronales -- inteligencia artificial (IA) - -Para tener una mejor experiencia de aprendizaje, vamos a evitar las complejidades de las redes neuronales, "deep learning" (construcción de modelos de muchas capas utilizando las redes neuronales) e inteligencia artificial, que se discutirá en un currículum diferente. En un futuro también ofreceremos un currículum acerca de la ciencia de datos para enfocarnos en ese aspecto de ese campo. - -## ¿Por qué estudiar machine learning? - -El Machine learning, desde una perspectiva de los sistemas, se define como la creación de sistemas automáticos que pueden aprender patrones ocultos a partir de datos para ayudar en tomar decisiones inteligentes. - -Esta motivación está algo inspirada por como el cerebro humano aprende ciertas cosas basadas en los datos que percibe en el mundo real. - -✅ Piensa por un minuto en porqué querría un negocio intentar implementar estrategias de machine learning en lugar de programar un motor basado en reglas programadas de forma rígida. - -### Aplicaciones del machine learning - -Las aplicaciones del machine learning hoy en día están casi en todas partes, y son tan ubicuas como los datos que fluyen alrededor de nuestras sociedades, generados por nuestros teléfonos inteligentes, dispositivos conectados a internet, y otros sistemas. Considerando el inmenso potencial de los algoritmos punteros de machine learning, los investigadores han estado explorando su capacidad de resolver problemas multidimensionales y multidisciplinarios de la vida real con resultados muy positivos. - -**Tú puedes utilizar machine learning de muchas formas**: - -- Para predecir la probabilidad de enfermedad a partir del historial médico o reportes de un paciente. -- Para aprovechar datos del clima y predecir eventos climatológicos. -- Para entender la intención de un texto. -- Para detectar noticias falsas y evitar la propagación de propaganda. - -Finanzas, economía, ciencias de la Tierra, exploración espacial, ingeniería biomédica, ciencia cognitiva, e incluso campos en las humanidades han adaptado machine learning para solucionar algunos de los problemas más arduos y pesados en cuanto al procesamiento de datos de cada una de estas ramas. - -Machine learning automatiza el proceso del descubrimiento de patrones al encontrar perspectivas significativas de datos provenientes del mundo real o generados. Machine learning ha demostrado ser muy valioso en las aplicaciones del sector de la salud, de negocios y finanzas, entre otros. - -En el futuro próximo, entender las bases de machine learning va a ser una necesidad para la gente en cualquier sector debido a su adopción tan extendida. - ---- - -## 🚀 Desafío - -Dibuja, en papel o usando una aplicación como [Excalidraw](https://excalidraw.com/), cómo entiendes las diferencias entre inteligencia artificial, ML, deep learning, y la ciencia de datos. Agrega algunas ideas de problemas que cada una de estas técnicas son buenas en resolver. - -## [Cuestionario después de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2?loc=es) - -## Revisión y autoestudio - -Para aprender más sobre como puedes trabajar con algoritmos de ML en la nube, sigue esta [Ruta de Aprendizaje](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -Toma esta [Ruta de Aprendizaje](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sobre las bases de ML. - -## Tarea - -[Ponte en marcha](assignment.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.fr.md b/1-Introduction/1-intro-to-ML/translations/README.fr.md deleted file mode 100644 index 03159b10..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.fr.md +++ /dev/null @@ -1,109 +0,0 @@ -# Introduction au machine learning - -[![ML, AI, deep learning - Quelle est la différence ?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning - What's the difference?") - -> 🎥 Cliquer sur l'image ci-dessus afin de regarder une vidéo expliquant la différence entre machine learning, AI et deep learning. - -## [Quiz préalable](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=fr) - -### Introduction - -Bienvenue à ce cours sur le machine learning classique pour débutant ! Que vous soyez complètement nouveau sur ce sujet ou que vous soyez un professionnel du ML expérimenté cherchant à peaufiner vos connaissances, nous sommes heureux de vous avoir avec nous ! Nous voulons créer un tremplin chaleureux pour vos études en ML et serions ravis d'évaluer, de répondre et d'apprendre de vos retours d'[expériences](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introduction au ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction to ML") - -> 🎥 Cliquer sur l'image ci-dessus afin de regarder une vidéo: John Guttag du MIT introduit le machine learning -### Débuter avec le machine learning - -Avant de commencer avec ce cours, vous aurez besoin d'un ordinateur configuré et prêt à faire tourner des notebooks (jupyter) localement. - -- **Configurer votre ordinateur avec ces vidéos**. Apprendre comment configurer votre ordinateur avec cette [série de vidéos](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6). -- **Apprendre Python**. Il est aussi recommandé d'avoir une connaissance basique de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un langage de programmaton utile pour les data scientist que nous utilisons tout au long de ce cours. -- **Apprendre Node.js et Javascript**. Nous utilisons aussi Javascript par moment dans ce cours afin de construire des applications WEB, vous aurez donc besoin de [node](https://nodejs.org) et [npm](https://www.npmjs.com/) installé, ainsi que de [Visual Studio Code](https://code.visualstudio.com/) pour développer en Python et Javascript. -- **Créer un compte GitHub**. Comme vous nous avez trouvé sur [GitHub](https://github.com), vous y avez sûrement un compte, mais si non, créez en un et répliquez ce cours afin de l'utiliser à votre grés. (N'oublier pas de nous donner une étoile aussi 😊) -- **Explorer Scikit-learn**. Familiariser vous avec [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), un ensemble de librairies ML que nous mentionnons dans nos leçons. - -### Qu'est-ce que le machine learning - -Le terme `machine learning` est un des mots les plus populaire et le plus utilisé ces derniers temps. Il y a une probabilité accrue que vous l'ayez entendu au moins une fois si vous avez une appétence pour la technologie indépendamment du domaine dans lequel vous travaillez. Le fonctionnement du machine learning, cependant, reste un mystère pour la plupart des personnes. Pour un débutant en machine learning, le sujet peut nous submerger. Ainsi, il est important de comprendre ce qu'est le machine learning et de l'apprendre petit à petit au travers d'exemples pratiques. - -![ml hype curve](../images/hype.png) - -> Google Trends montre la récente 'courbe de popularité' pour le mot 'machine learning' - -Nous vivons dans un univers rempli de mystères fascinants. De grands scientifiques comme Stephen Hawking, Albert Einstein et pleins d'autres ont dévoués leur vie à la recherche d'informations utiles afin de dévoiler les mystères qui nous entourent. C'est la condition humaine pour apprendre : un enfant apprend de nouvelles choses et découvre la structure du monde année après année jusqu'à qu'ils deviennent adultes. - -Le cerveau d'un enfant et ses sens perçoivent l'environnement qui les entourent et apprennent graduellement des schémas non observés de la vie qui vont l'aider à fabriquer des règles logiques afin d'identifier les schémas appris. Le processus d'apprentissage du cerveau humain est ce que rend les hommes comme la créature la plus sophistiquée du monde vivant. Apprendre continuellement par la découverte de schémas non observés et ensuite innover sur ces schémas nous permet de nous améliorer tout au long de notre vie. Cette capacité d'apprendre et d'évoluer est liée au concept de [plasticité neuronale](https://www.simplypsychology.org/brain-plasticity.html), nous pouvons tirer quelques motivations similaires entre le processus d'apprentissage du cerveau humain et le concept de machine learning. - -Le [cerveau humain](https://www.livescience.com/29365-human-brain.html) perçoit des choses du monde réel, assimile les informations perçues, fait des décisions rationnelles et entreprend certaines actions selon le contexte. C'est ce que l'on appelle se comporter intelligemment. Lorsque nous programmons une reproduction du processus de ce comportement à une machine, c'est ce que l'on appelle intelligence artificielle (IA). - -Bien que le terme puisse être confus, le machine learning (ML) est un important sous-ensemble de l'intelligence artificielle. **Le ML consiste à utiliser des algorithmes spécialisés afin de découvrir des informations utiles et de trouver des schémas non observés depuis des données perçues pour corroborer un processus de décision rationnel**. - -![AI, ML, deep learning, data science](../images/ai-ml-ds.png) - -> Un diagramme montrant les relations entre AI, ML, deep learning et data science. Infographie par [Jen Looper](https://twitter.com/jenlooper) et inspiré par [ce graphique](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - -## Ce que vous allez apprendre dans ce cours - -Dans ce cours, nous allons nous concentrer sur les concepts clés du machine learning qu'un débutant se doit de connaître. Nous parlerons de ce que l'on appelle le 'machine learning classique' en utilisant principalement Scikit-learn, une excellente librairie que beaucoup d'étudiants utilisent afin d'apprendre les bases. Afin de comprendre les concepts plus larges de l'intelligence artificielle ou du deep learning, une profonde connaissance en machine learning est indispensable, et c'est ce que nous aimerions fournir ici. - -Dans ce cours, vous allez apprendre : - -- Les concepts clés du machine learning -- L'histoire du ML -- ML et équité (fairness) -- Les techniques de régression ML -- Les techniques de classification ML -- Les techniques de regroupement (clustering) ML -- Les techniques du traitement automatique des langues (NLP) ML -- Les techniques de prédictions à partir de séries chronologiques ML -- Apprentissage renforcé -- D'applications réels du ML - -## Ce que nous ne couvrirons pas - -- Deep learning -- Neural networks -- IA - -Afin d'avoir la meilleure expérience d'apprentissage, nous éviterons les complexités des réseaux neuronaux, du 'deep learning' (construire un modèle utilisant plusieurs couches de réseaux neuronaux) et IA, dont nous parlerons dans un cours différent. Nous offirons aussi un cours à venir sur la data science pour nous concentrer sur cet aspect de champs très large. - -## Pourquoi étudier le machine learning ? - -Le machine learning, depuis une perspective systémique, est défini comme la création de systèmes automatiques pouvant apprendre des schémas non observés depuis des données afin d'aider à prendre des décisions intelligentes. - -Ce but est faiblement inspiré de la manière dont le cerveau humain apprend certaines choses depuis les données qu'il perçoit du monde extérieur. - -✅ Pensez une minute aux raisons qu'une entreprise aurait d'essayer d'utiliser des stratégies de machine learning au lieu de créer des règles codés en dur. - -### Les applications du machine learning - -Les applications du machine learning sont maintenant pratiquement partout, et sont aussi omniprésentes que les données qui circulent autour de notre société (générées par nos smartphones, appareils connectés ou autres systèmes). En prenant en considération l'immense potentiel des algorithmes dernier cri de machine learning, les chercheurs ont pu exploiter leurs capacités afin de résoudre des problèmes multidimensionnels et interdisciplinaires de la vie avec d'important retours positifs. - -**Vous pouvez utiliser le machine learning de plusieurs manières** : - -- Afin de prédire la possibilité d'avoir une maladie à partir des données médicales d'un patient. -- Pour tirer parti des données météorologiques afin de prédire les événements météorologiques. -- Afin de comprendre le sentiment d'un texte. -- Afin de détecter les fake news pour stopper la propagation de la propagande. - -La finance, l'économie, les sciences de la terre, l'exploration spatiale, le génie biomédical, les sciences cognitives et même les domaines des sciences humaines ont adapté le machine learning pour résoudre les problèmes ardus et lourds de traitement des données dans leur domaine respectif. - -Le machine learning automatise le processus de découverte de modèles en trouvant des informations significatives à partir de données réelles ou générées. Il s'est avéré très utile dans les applications commerciales, de santé et financières, entre autres. - -Dans un avenir proche, comprendre les bases du machine learning sera indispensable pour les personnes de tous les domaines en raison de son adoption généralisée. - ---- -## 🚀 Challenge - -Esquisser, sur papier ou à l'aide d'une application en ligne comme [Excalidraw](https://excalidraw.com/), votre compréhension des différences entre l'IA, le ML, le deep learning et la data science. Ajouter quelques idées de problèmes que chacune de ces techniques est bonne à résoudre. - -## [Quiz de validation des connaissances](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2?loc=fr) - -## Révision et auto-apprentissage - -Pour en savoir plus sur la façon dont vous pouvez utiliser les algorithmes de ML dans le cloud, suivez ce [Parcours d'apprentissage](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -## Devoir - -[Être opérationnel](assignment.fr.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.id.md b/1-Introduction/1-intro-to-ML/translations/README.id.md deleted file mode 100644 index 230bddfb..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.id.md +++ /dev/null @@ -1,107 +0,0 @@ -# Pengantar Machine Learning - -[![ML, AI, deep learning - Apa perbedaannya?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning - Apa perbedaannya?") - -> 🎥 Klik gambar diatas untuk menonton video yang mendiskusikan perbedaan antara Machine Learning, AI, dan Deep Learning. - -## [Quiz Pra-Pelajaran](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - -### Pengantar - -Selamat datang di pelajaran Machine Learning klasik untuk pemula! Baik kamu yang masih benar-benar baru, atau seorang praktisi ML berpengalaman yang ingin meningkatkan kemampuan kamu, kami senang kamu ikut bersama kami! Kami ingin membuat sebuah titik mulai yang ramah untuk pembelajaran ML kamu dan akan sangat senang untuk mengevaluasi, merespon, dan memasukkan [umpan balik](https://github.com/microsoft/ML-For-Beginners/discussions) kamu. - -[![Pengantar Machine Learning](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Pengantar Machine Learning") - -> 🎥 Klik gambar diatas untuk menonton video: John Guttag dari MIT yang memberikan pengantar Machine Learning. -### Memulai Machine Learning - -Sebelum memulai kurikulum ini, kamu perlu memastikan komputer kamu sudah dipersiapkan untuk menjalankan *notebook* secara lokal. - -- **Konfigurasi komputer kamu dengan video ini**. Pelajari bagaimana menyiapkan komputer kamu dalam [video-video](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6) ini. -- **Belajar Python**. Disarankan juga untuk memiliki pemahaman dasar dari [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), sebuah bahasa pemrograman yang digunakan oleh data scientist yang juga akan kita gunakan dalam pelajaran ini. -- **Belajar Node.js dan JavaScript**. Kita juga menggunakan JavaScript beberapa kali dalam pelajaran ini ketika membangun aplikasi web, jadi kamu perlu menginstal [node](https://nodejs.org) dan [npm](https://www.npmjs.com/), serta [Visual Studio Code](https://code.visualstudio.com/) yang tersedia untuk pengembangan Python dan JavaScript. -- **Buat akun GitHub**. Karena kamu menemukan kami di [GitHub](https://github.com), kamu mungkin sudah punya akun, tapi jika belum, silakan buat akun baru kemudian *fork* kurikulum ini untuk kamu pergunakan sendiri. (Jangan ragu untuk memberikan kami bintang juga 😊) -- **Jelajahi Scikit-learn**. Buat diri kamu familiar dengan [Scikit-learn]([https://scikit-learn.org/stable/user_guide.html), seperangkat *library* ML yang kita acu dalam pelajaran-pelajaran ini. - -### Apa itu Machine Learning? - -Istilah 'Machine Learning' merupakan salah satu istilah yang paling populer dan paling sering digunakan saat ini. Ada kemungkinan kamu pernah mendengar istilah ini paling tidak sekali jika kamu familiar dengan teknologi. Tetapi untuk mekanisme Machine Learning sendiri, merupakan sebuah misteri bagi sebagian besar orang. Karena itu, penting untuk memahami sebenarnya apa itu Machine Learning, dan mempelajarinya langkah demi langkah melalui contoh praktis. - -![kurva tren ml](../images/hype.png) - -> Google Trends memperlihatkan 'kurva tren' dari istilah 'Machine Learning' belakangan ini. - -Kita hidup di sebuah alam semesta yang penuh dengan misteri yang menarik. Ilmuwan-ilmuwan besar seperti Stephen Hawking, Albert Einstein, dan banyak lagi telah mengabdikan hidup mereka untuk mencari informasi yang berarti yang mengungkap misteri dari dunia disekitar kita. Ini adalah kondisi belajar manusia: seorang anak manusia belajar hal-hal baru dan mengungkap struktur dari dunianya tahun demi tahun saat mereka tumbuh dewasa. - -Otak dan indera seorang anak memahami fakta-fakta di sekitarnya dan secara bertahap mempelajari pola-pola kehidupan yang tersembunyi yang membantu anak untuk menyusun aturan-aturan logis untuk mengidentifikasi pola-pola yang dipelajari. Proses pembelajaran otak manusia ini menjadikan manusia sebagai makhluk hidup paling canggih di dunia ini. Belajar terus menerus dengan menemukan pola-pola tersembunyi dan kemudian berinovasi pada pola-pola itu memungkinkan kita untuk terus menjadikan diri kita lebih baik sepanjang hidup. Kapasitas belajar dan kemampuan berkembang ini terkait dengan konsep yang disebut dengan *[brain plasticity](https://www.simplypsychology.org/brain-plasticity.html)*. Secara sempit, kita dapat menarik beberapa kesamaan motivasi antara proses pembelajaran otak manusia dan konsep Machine Learning. - -[Otak manusia](https://www.livescience.com/29365-human-brain.html) menerima banyak hal dari dunia nyata, memproses informasi yang diterima, membuat keputusan rasional, dan melakukan aksi-aksi tertentu berdasarkan keadaan. Inilah yang kita sebut dengan berperilaku cerdas. Ketika kita memprogram sebuah salinan dari proses perilaku cerdas ke sebuah mesin, ini dinamakan kecerdasan buatan atau Artificial Intelligence (AI). - -Meskipun istilah-stilahnya bisa membingungkan, Machine Learning (ML) adalah bagian penting dari Artificial Intelligence. **ML berkaitan dengan menggunakan algoritma-algoritma terspesialisasi untuk mengungkap informasi yang berarti dan mencari pola-pola tersembunyi dari data yang diterima untuk mendukung proses pembuatan keputusan rasional**. - -![AI, ML, deep learning, data science](../images/ai-ml-ds.png) - -> Sebuah diagram yang memperlihatkan hubungan antara AI, ML, Deep Learning, dan Data Science. Infografis oleh [Jen Looper](https://twitter.com/jenlooper) terinspirasi dari [infografis ini](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - -## Apa yang akan kamu pelajari - -Dalam kurikulum ini, kita hanya akan membahas konsep inti dari Machine Learning yang harus diketahui oleh seorang pemula. Kita membahas apa yang kami sebut sebagai 'Machine Learning klasik' utamanya menggunakan Scikit-learn, sebuah *library* luar biasa yang banyak digunakan para siswa untuk belajar dasarnya. Untuk memahami konsep Artificial Intelligence atau Deep Learning yang lebih luas, pengetahuan dasar yang kuat tentang Machine Learning sangat diperlukan, itulah yang ingin kami tawarkan di sini. - -Kamu akan belajar: - -- Konsep inti ML -- Sejarah dari ML -- Keadilan dan ML -- Teknik regresi ML -- Teknik klasifikasi ML -- Teknik *clustering* ML -- Teknik *natural language processing* ML -- Teknik *time series forecasting* ML -- *Reinforcement learning* -- Penerapan nyata dari ML -## Yang tidak akan kita bahas - -- *deep learning* -- *neural networks* -- AI - -Untuk membuat pengalaman belajar yang lebih baik, kita akan menghindari kerumitan dari *neural network*, *deep learning* - membangun *many-layered model* menggunakan *neural network* - dan AI, yang mana akan kita bahas dalam kurikulum yang berbeda. Kami juga akan menawarkan kurikulum *data science* yang berfokus pada aspek bidang tersebut. -## Kenapa belajar Machine Learning? - -Machine Learning, dari perspektif sistem, didefinisikan sebagai pembuatan sistem otomatis yang dapat mempelajari pola-pola tersembunyi dari data untuk membantu membuat keputusan cerdas. - -Motivasi ini secara bebas terinspirasi dari bagaimana otak manusia mempelajari hal-hal tertentu berdasarkan data yang diterimanya dari dunia luar. - -✅ Pikirkan sejenak mengapa sebuah bisnis ingin mencoba menggunakan strategi Machine Learning dibandingkan membuat sebuah mesin berbasis aturan yang tertanam (*hard-coded*). - -### Penerapan Machine Learning - -Penerapan Machine Learning saat ini hampir ada di mana-mana, seperti data yang mengalir di sekitar kita, yang dihasilkan oleh ponsel pintar, perangkat yang terhubung, dan sistem lainnya. Mempertimbangkan potensi besar dari algoritma Machine Learning terkini, para peneliti telah mengeksplorasi kemampuan Machine Learning untuk memecahkan masalah kehidupan nyata multi-dimensi dan multi-disiplin dengan hasil positif yang luar biasa. - -**Kamu bisa menggunakan Machine Learning dalam banyak hal**: - -- Untuk memprediksi kemungkinan penyakit berdasarkan riwayat atau laporan medis pasien. -- Untuk memanfaatkan data cuaca untuk memprediksi peristiwa cuaca. -- Untuk memahami sentimen sebuah teks. -- Untuk mendeteksi berita palsu untuk menghentikan penyebaran propaganda. - -Keuangan, ekonomi, geosains, eksplorasi ruang angkasa, teknik biomedis, ilmu kognitif, dan bahkan bidang humaniora telah mengadaptasi Machine Learning untuk memecahkan masalah sulit pemrosesan data di bidang mereka. - -Machine Learning mengotomatiskan proses penemuan pola dengan menemukan wawasan yang berarti dari dunia nyata atau dari data yang dihasilkan. Machine Learning terbukti sangat berharga dalam penerapannya di berbagai bidang, diantaranya adalah bidang bisnis, kesehatan, dan keuangan. - -Dalam waktu dekat, memahami dasar-dasar Machine Learning akan menjadi suatu keharusan bagi orang-orang dari bidang apa pun karena adopsinya yang luas. - ---- -## 🚀 Tantangan - -Buat sketsa di atas kertas atau menggunakan aplikasi seperti [Excalidraw](https://excalidraw.com/), mengenai pemahaman kamu tentang perbedaan antara AI, ML, Deep Learning, dan Data Science. Tambahkan beberapa ide masalah yang cocok diselesaikan masing-masing teknik. - -## [Quiz Pasca-Pelajaran](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - -## Ulasan & Belajar Mandiri - -Untuk mempelajari lebih lanjut tentang bagaimana kamu dapat menggunakan algoritma ML di cloud, ikuti [Jalur Belajar](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) ini. - -## Tugas - -[Persiapan](assignment.id.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.it.md b/1-Introduction/1-intro-to-ML/translations/README.it.md deleted file mode 100644 index 37b23a0a..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.it.md +++ /dev/null @@ -1,108 +0,0 @@ -# Introduzione a machine learning - -[![ML, AI, deep learning: qual è la differenza?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning: qual è la differenza?") - -> 🎥 Fare clic sull'immagine sopra per un video che illustra la differenza tra machine learning, intelligenza artificiale (AI) e deep learning. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/?loc=it) - -### Introduzione - -Benvenuti in questo corso su machine learning classico per principianti! Che si sia completamente nuovo su questo argomento, o un professionista esperto di ML che cerca di rispolverare un'area, è un piacere avervi con noi! Si vuole creare un punto di partenza amichevole per lo studio di ML e saremo lieti di valutare, rispondere e incorporare il vostro [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introduzione a ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 " Introduzione a ML") - -> 🎥 Fare clic sull'immagine sopra per un video: John Guttag del MIT introduce machine learning - -### Iniziare con machine learning - -Prima di iniziare con questo programma di studi, è necessario che il computer sia configurato e pronto per eseguire i notebook in locale. - -- **Si configuri la propria macchina con l'aiuto di questi video**. Si scopra di più su come configurare la propria macchina in questa [serie di video](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6). -- **Imparare Python**. Si consiglia inoltre di avere una conoscenza di base di [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un linguaggio di programmazione utile per i data scientist che si utilizzerà in questo corso. -- **Imparare Node.js e JavaScript**. Talvolta in questo corso si usa anche JavaScript durante la creazione di app web, quindi sarà necessario disporre di [node](https://nodejs.org) e [npm](https://www.npmjs.com/) installati, oltre a [Visual Studio Code](https://code.visualstudio.com/) disponibile sia per lo sviluppo Python che JavaScript. -- **Creare un account GitHub**. E' probabile che si [](https://github.com)disponga già di un account GitHub, ma in caso contrario occorre crearne uno e poi eseguire il fork di questo programma di studi per utilizzarlo autonomamente. (Sentitevi liberi di darci anche una stella 😊) -- **Esplorare Scikit-learn**. Familiarizzare con Scikit-learn,[]([https://scikit-learn.org/stable/user_guide.html) un insieme di librerie ML a cui si farà riferimento in queste lezioni. - -### Che cos'è machine learning? - -Il termine "machine learning" è uno dei termini più popolari e usati di oggi. C'è una buona possibilità che si abbia sentito questo termine almeno una volta se si ha una sorta di familiarità con la tecnologia, indipendentemente dal campo in cui si lavora. I meccanismi di machine learning, tuttavia, sono un mistero per la maggior parte delle persone. Per un principiante di machine learning l'argomento a volte può sembrare soffocante. Pertanto, è importante capire cos'è effettivamente machine learning e impararlo passo dopo passo, attraverso esempi pratici. - -![ml curva di hype](../images/hype.png) - -> Google Trends mostra la recente "curva di hype" del termine "machine learning" - -Si vive in un universo pieno di misteri affascinanti. Grandi scienziati come Stephen Hawking, Albert Einstein e molti altri hanno dedicato la loro vita alla ricerca di informazioni significative che svelino i misteri del mondo circostante. Questa è la condizione umana dell'apprendimento: un bambino impara cose nuove e scopre la struttura del suo mondo anno dopo anno mentre cresce fino all'età adulta. - -Il cervello e i sensi di un bambino percepiscono i fatti dell'ambiente circostante e apprendono gradualmente i modelli di vita nascosti che aiutano il bambino a creare regole logiche per identificare i modelli appresi. Il processo di apprendimento del cervello umano rende l'essere umano la creatura vivente più sofisticata di questo mondo. Imparare continuamente scoprendo schemi nascosti e poi innovare su questi schemi ci consente di migliorarsi sempre di più per tutta la vita. Questa capacità di apprendimento e capacità di evoluzione è correlata a un concetto chiamato [plasticità cerebrale](https://www.simplypsychology.org/brain-plasticity.html). Superficialmente, si possono tracciare alcune somiglianze motivazionali tra il processo di apprendimento del cervello umano e i concetti di machine learning. - -Il [cervello umano](https://www.livescience.com/29365-human-brain.html) percepisce le cose dal mondo reale, elabora le informazioni percepite, prende decisioni razionali ed esegue determinate azioni in base alle circostanze. Questo è ciò che viene chiamato comportarsi in modo intelligente. Quando si programma un facsimile del processo comportamentale intelligente su una macchina, si parla di intelligenza artificiale (AI). - -Sebbene i termini possano essere confusi, machine learning (ML) è un importante sottoinsieme dell'intelligenza artificiale. **Machine learning si occupa di utilizzare algoritmi specializzati per scoprire informazioni significative e trovare modelli nascosti dai dati percepiti per corroborare il processo decisionale razionale**. - -![AI, machine learning, deep learning, data science](../images/ai-ml-ds.png) - -> Un diagramma che mostra le relazioni tra intelligenza artificiale (AI), machine learning, deep learning e data science. Infografica di [Jen Looper](https://twitter.com/jenlooper) ispirata a [questa grafica](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - -## Ecco cosa si imparerà in questo corso - -In questo programma di studi, saranno tratteti solo i concetti fondamentali di machine learning che un principiante deve conoscere. Si tratterà di ciò che viene chiamato "machine learning classico" principalmente utilizzando Scikit-learn, una eccellente libreria che molti studenti usano per apprendere le basi. Per comprendere concetti più ampi di intelligenza artificiale o deep learning, è indispensabile una forte conoscenza fondamentale di machine learning, e quindi la si vorrebbe offrire qui. - -In questo corso si imparerà: - -- concetti fondamentali di machine learning -- la storia di ML -- ML e correttezza -- tecniche di regressione ML -- tecniche di classificazione ML -- tecniche di clustering ML -- tecniche di elaborazione del linguaggio naturale ML -- tecniche ML di previsione delle serie temporali -- reinforcement learning -- applicazioni del mondo reale per ML -## Cosa non verrà trattato - -- deep learning -- reti neurali -- AI (intelligenza artificiale) - -Per rendere l'esperienza di apprendimento migliore, si eviteranno le complessità delle reti neurali, del "deep learning" (costruzione di modelli a più livelli utilizzando le reti neurali) e dell'AI, di cui si tratterà in un altro programma di studi. Si offrirà anche un prossimo programma di studi di data science per concentrarsi su quell'aspetto di questo campo più ampio. -## Perché studiare machine learning? - -Machine learning, dal punto di vista dei sistemi, è definito come la creazione di sistemi automatizzati in grado di apprendere modelli nascosti dai dati per aiutare a prendere decisioni intelligenti. - -Questa motivazione è vagamente ispirata dal modo in cui il cervello umano apprende determinate cose in base ai dati che percepisce dal mondo esterno. - -✅ Si pensi per un minuto al motivo per cui un'azienda dovrebbe provare a utilizzare strategie di machine learning rispetto alla creazione di un motore cablato a codice basato su regole codificate. - -### Applicazioni di machine learning - -Le applicazioni di machine learning sono ormai quasi ovunque e sono onnipresenti come i dati che circolano nelle società, generati dagli smartphone, dispositivi connessi e altri sistemi. Considerando l'immenso potenziale degli algoritmi di machine learning all'avanguardia, i ricercatori hanno esplorato la loro capacità di risolvere problemi multidimensionali e multidisciplinari della vita reale con grandi risultati positivi. - -**Si può utilizzare machine learning in molti modi**: - -- Per prevedere la probabilità di malattia dall'anamnesi o dai rapporti di un paziente. -- Per sfruttare i dati meteorologici per prevedere gli eventi meteorologici. -- Per comprendere il sentimento di un testo. -- Per rilevare notizie false per fermare la diffusione della propaganda. - -La finanza, l'economia, le scienze della terra, l'esplorazione spaziale, l'ingegneria biomedica, le scienze cognitive e persino i campi delle scienze umanistiche hanno adattato machine learning per risolvere gli ardui problemi di elaborazione dati del proprio campo. - -Machine learning automatizza il processo di individuazione dei modelli trovando approfondimenti significativi dal mondo reale o dai dati generati. Si è dimostrato di grande valore in applicazioni aziendali, sanitarie e finanziarie, tra le altre. - -Nel prossimo futuro, comprendere le basi di machine learning sarà un must per le persone in qualsiasi campo a causa della sua adozione diffusa. - ---- -## 🚀 Sfida - -Disegnare, su carta o utilizzando un'app online come [Excalidraw](https://excalidraw.com/), la propria comprensione delle differenze tra AI, ML, deep learning e data science. Aggiungere alcune idee sui problemi che ciascuna di queste tecniche è in grado di risolvere. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/?loc=it) - -## Revisione e Auto Apprendimento - -Per saperne di più su come si può lavorare con gli algoritmi ML nel cloud, si segua questo [percorso di apprendimento](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -## Compito - -[Tempi di apprendimento brevi](assignment.it.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.ja.md b/1-Introduction/1-intro-to-ML/translations/README.ja.md deleted file mode 100644 index db0ed50d..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.ja.md +++ /dev/null @@ -1,105 +0,0 @@ -# 機械学習への導入 - -[![ML, AI, deep learning - 違いは何か?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning - 違いは何か?") - -> 🎥 上の画像をクリックすると、機械学習、AI、深層学習の違いについて説明した動画が表示されます。 - -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=ja) - -### イントロダクション - -初心者のための古典的な機械学習のコースへようこそ! このテーマに全く触れたことのない方も、この分野をブラッシュアップしたい経験豊富な方も、ぜひご参加ください。私たちは、あなたのMLの学習についての親しみやすいスタート地点を作りたいと考えています。あなたの[フィードバック](https://github.com/microsoft/ML-For-Beginners/discussions)を評価し、対応し、取り入れることができれば幸いです。 -[![機械学習への導入](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "機械学習への導入") - -> 🎥 上の画像をクリックすると、MITのJohn Guttagが機械学習を紹介する動画が表示されます。 -### 機械学習を始めるにあたって - -このカリキュラムを始める前に、コンピュータを設定し、ノートブックをローカルで実行できるようにする必要があります。 - -- **こちらのビデオでマシンの設定を行ってください。** マシンの設定方法については、[これらのビデオ](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6)をご覧ください。 -- **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)に慣れ親しんでください。 - -### 機械学習とは何か? - -"機械学習(Machine Learning)"という言葉は、現在最も人気があり、頻繁に使用されている言葉の一つです。どんな分野の技術者であっても、多少なりとも技術に精通していれば、一度はこの言葉を耳にしたことがある可能性は少なくありません。しかし、機械学習の仕組みは、ほとんどの人にとって謎に包まれており、機械学習の初心者にとって、このテーマは時に圧倒されるように感じられます。そのため、機械学習とは何かを実際に理解し、実践的な例を通して段階的に学んでいくことが重要です。 - -![機械学習の人気を示すグラフ](../images/hype.png) - -> Google Trendsによる、「機械学習」という言葉の最近の盛り上がりを示すグラフ。 - -私たちは、魅力的な謎に満ちた宇宙に住んでいます。ホーキング博士やアインシュタイン博士をはじめとする偉大な科学者たちは、私たちを取り巻く世界の謎を解き明かす意味のある情報を探すことに人生を捧げてきました。人間の子供は、大人になるまでの間に、年々新しいことを学び、自分の世界の構造を明らかにしていきます。 - -子供の脳と感覚は、周囲の事実を認識し、徐々に人生の隠れたパターンを学び、学習したパターンを識別するための論理的なルールを作るのに役立ちます。こういった学習プロセスは、人間をこの世で最も洗練された生物にしています。隠れたパターンを発見することで継続的に学習し、そのパターンに基づいて革新を行うことで、私たちは生涯を通じて自分自身をより良くしていくことができます。この学習能力と進化能力は、[「脳の可塑性」](https://www.simplypsychology.org/brain-plasticity.html)と呼ばれる概念に関連しています。表面的には、人間の脳の学習プロセスと機械学習のコンセプトには、モチベーションの面でいくつかの共通点があります。 - -[人間の脳](https://www.livescience.com/29365-human-brain.html)は、現実世界の物事を知覚し、知覚した情報を処理し、合理的な判断を下し、状況に応じてある行動をします。これは知的行動と呼ばれます。この知的行動のプロセスを機械にプログラムすることを人工知能(AI)といいます。 - -この言葉は混同されることがありますが、機械学習(ML)は人工知能の重要なサブセットです。**MLは、特殊なアルゴリズムを使用して、意味のある情報を発見し、知覚されたデータから隠れたパターンを見つけて、合理的な意思決定プロセスを裏付けることに関係しています。** - -![AI, ML, ディープラーニング、データサイエンス](../images/ai-ml-ds.png) - - ->[このグラフ](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining)に触発された[Jen Looper](https://twitter.com/jenlooper)氏によるインフォグラフィック - -## このコースで学ぶこと - -このカリキュラムでは、初心者が知っておかなければならない機械学習のコアな概念のみを取り上げます。私たちが「古典的な機械学習」と呼ぶものを、多くの学生が基礎を学ぶために使用する優れたライブラリであるScikit-learnを主に使ってカバーします。人工知能や深層学習などのより広い概念を理解するためには、機械学習の強力な基礎知識が不可欠ですので、ここで提供します。 - -- 機械学習の核となるコンセプト -- MLの歴史 -- MLと公平性 -- MLによる回帰の手法 -- MLによる分類技術 -- MLによるクラスタリング -- MLによる自然言語処理の技術 -- MLによる時系列予測の技術 -- 強化学習 -- MLの現実世界への応用 -## このコースで扱わないこと - -- ディープラーニング -- ニューラルネットワーク -- AI - -ニューラルネットワークやディープラーニング(ニューラルネットワークを用いた多層的なモデル構築)、AIなどの複雑な分野は、より良い学習環境を提供するために避けていますが、これらは別のカリキュラムで取り上げます。また、それらの大きな分野の中でも特にデータサイエンスに焦点を当てたカリキュラムを提供する予定です。 -## なぜ機械学習を学ぶのか - -機械学習とは、システムの観点から、データから隠れたパターンを学習し、知的な意思決定を支援する自動化されたシステムを構築することと定義されます。 - -この動機は、人間の脳が外界から認識したデータに基づいて特定の事柄を学習する仕組みに、ゆるやかにインスパイアされています。 - -✅ なぜビジネスでは、ハードコードされたルールベースのエンジンを作るのではなく、機械学習戦略を使ってみようと思うのか、ちょっと考えてみてください。 - - -### 機械学習の応用 - -機械学習のアプリケーションは、今やほとんどどこにでもあり、スマートフォンやコネクテッドデバイス、その他のシステムから生成され、私たちの社会に流れているデータと同様にありふれたものとなっています。最先端の機械学習アルゴリズムの計り知れない可能性を考慮して、研究者たちは、多次元的・多分野的な現実の問題を解決するためにその能力を探求し、非常に良い結果を得ています。 - -**機械学習は様々な形で利用できます**: - -- 患者の病歴や報告書から病気の可能性を予測する。 -- 気象データを活用して気象現象を予測する。 -- 文章の感情を理解する。 -- プロパガンダの拡散を防ぐためにフェイクニュースを検出する。 - -金融、経済、地球科学、宇宙開発、生物医学工学、認知科学、さらには文科系の分野でも、それぞれの分野のデータ処理に伴う困難な問題を解決するために、機械学習が採用されています。 - -機械学習は、実世界のデータや生成されたデータから意味のある洞察を見出し、パターンを発見するプロセスを自動化します。機械学習は、ビジネス、健康、金融などの分野で非常に有用であることが証明されています。 - -近い将来、機械学習の基礎を理解することは、機械学習の普及に伴い、あらゆる分野の人々にとって必須のものとなるでしょう。 - ---- -## 🚀 Challenge -AI、ML、深層学習、データサイエンスの違いについて理解していることを、紙や[Excalidraw](https://excalidraw.com/)などのオンラインアプリを使ってスケッチしてください。また、それぞれの技術が得意とする問題のアイデアを加えてみてください。 - -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2?loc=ja) - -## 振り返りと自習 - -クラウド上でMLアルゴリズムをどのように扱うことができるかについては、この[ラーニングパス](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott)に従ってください。 - -## 課題 - -[稼働させる](assignment.ja.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.ko.md b/1-Introduction/1-intro-to-ML/translations/README.ko.md deleted file mode 100644 index eb9757d3..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.ko.md +++ /dev/null @@ -1,113 +0,0 @@ -# 머신러닝 소개 - -[![ML, AI, deep learning - What's the difference?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning - What's the difference?") - -> 🎥 머신러닝, AI 그리고 딥러닝의 차이를 설명하는 영상을 보려면 위 이미지를 클릭합니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - -### 소개 - -입문자를 위한 classical 머신러닝 코스에 오신 것을 환영합니다! 이 토픽에 완벽하게 새로 접해보거나, 한 분야에 완벽해지고 싶어하는 ML 실무자도 저희와 함께하게 되면 좋습니다! ML 연구를 위한 친숙한 시작점을 만들고 싶고, 당신의 [feedback](https://github.com/microsoft/ML-For-Beginners/discussions)을 평가, 응답하고 반영하겠습니다. - -[![Introduction to ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction to ML") - -> 🎥 동영상을 보려면 위 이미지 클릭: MIT의 John Guttag가 머신러닝을 소개합니다. -### 머신러닝 시작하기 - -이 커리큘럼을 시작하기 전, 컴퓨터를 세팅하고 노트북을 로컬에서 실행할 수 있게 준비해야 합니다. - -- **이 영상으로 컴퓨터 세팅하기**. [영상 플레이리스트](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6)에서 컴퓨터를 세팅하는 방법에 대하여 자세히 알아봅니다. -- **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) 계정이 혹시 없다면, 계정을 만든 뒤에 이 커리큘럼을 포크해서 개인에 맞게 쓸 수 있습니다. (star 하셔도 됩니다 😊) -- **Scikit-learn 찾아보기**. 이 강의에서 참조하고 있는 ML 라이브러리 셋인 [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)을 숙지합니다. - -### 머신러닝은 무엇인가요? - -'머신러닝'은 최근 가장 인기있고 자주 언급되는 용어입니다. 어떤 분야든 기술에 어느 정도 익숙해지면 이러한 용어를 한 번즈음 들어본 적이 있었을 것입니다. 그러나, 머신러닝의 구조는 대부분의 사람들에겐 미스테리입니다. 머신러닝 입문자에겐 주제가 때때로 숨막힐 수 있습니다. 때문에 머신러닝이 실제로 어떤지 이해하고 실제 적용된 예시로 단계별 학습을 진행하는 것이 중요합니다. - -![ml hype curve](../images/hype.png) - -> Google Trends의 '머신러닝' 용어의 최근 'hype curve' 입니다. - -우리는 매우 신비한 우주에 살고 있습니다. Stephen Hawking, Albert Einstein과 같은 위대한 과학자들은 주변 세계의 신비를 밝혀낼 의미있는 정보를 찾는 데 일생을 바쳤습니다. 이건 사람의 학습 조건이죠. 아이는 성인이 되면서 해마다 새로운 것을 배우고 세계의 구조들을 발견합니다. - -아이의 뇌와 감각은 주변 환경의 사실들을 인지하고 학습된 패턴을 식별하기 위한 논리적인 규칙을 만드는 패턴을 점차적으로 배웁니다. 인간의 두뇌의 학습 과정은 인간을 세상에서 가장 정교한 생명체로 만듭니다. 숨겨진 패턴을 발견하고 그 패턴을 혁신함으로써 지속적으로 학습하는 것은 우리가 일생 동안 점점 더 나은 자신을 만들 수 있게 해줍니다. 이러한 학습 능력과 발전하는 능력은 [brain plasticity 뇌의 가소성](https://www.simplypsychology.org/brain-plasticity.html)이라고 불리는 개념과 관련이 있습니다. 피상적으로, 우리는 인간의 두뇌의 학습 과정과 기계 학습의 개념 사이에 동기부여의 유사성을 끌어낼 수 있습니다. - -[인간의 뇌](https://www.livescience.com/29365-human-brain.html)는 현실 세계의 것들을 인식하고, 인식된 정보를 처리하고, 합리적인 결정을 내리고, 상황에 따라 특정한 행동을 합니다. 이것이 우리가 지적 행동이라고 부르는 것입니다. 우리가 지능적인 행동 과정의 팩시밀리를 기계에 프로그래밍 할 때, 그것은 인공지능(AI)이라고 불립니다. - -용어가 헷갈릴 수 있지만, 머신러닝(ML)은 중요한 인공 지능의 한 부분입니다. **ML은 특수한 알고리즘을 써서 의미있는 정보를 찾고 인식한 데이터에서 숨겨진 패턴을 찾아 합리적으로 판단할 프로세스를 확실하게 수행하는 것에 집중하고 있다고 할 수 있습니다**. - -![AI, ML, deep learning, data science](../images/ai-ml-ds.png) - -> AI, ML, 딥러닝, 그리고 데이터 사이언티스 간의 관계를 보여주는 다이어그램. [이곳](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining)에서 영감을 받은 [Jen Looper](https://twitter.com/jenlooper)의 인포그래픽 - -## 이 코스에서 배울 컨셉들 - -이 커리큘럼에서는 입문자가 반드시 알아야 할 머신러닝의 핵심적인 개념만 다룰 것입니다. 많은 학생들이 기초를 배우기 위해 사용하는 훌륭한 라이브러리인, Scikit-learn으로 'classical machine learning'이라고 부르는 것을 다룹니다. 인공 지능 또는 딥러닝의 대략적인 개념을 이해하려면 머신러닝에 대한 강력한 기초 지식이 꼭 필요하므로, 해당 내용을 본 강의에서 제공하고자 합니다. - -## 이 코스에서 다루는 것: - -- 머신러닝의 핵심 컨셉 -- ML 의 역사 -- ML 과 공정성 -- regression ML 기술 -- classification ML 기술 -- clustering ML 기술 -- natural language processing ML 기술 -- time series forecasting ML 기술 -- 강화 학습 -- real-world 애플리케이션 for ML - -## 다루지 않는 것: - -- 딥러닝 -- 신경망 -- AI - -우리는 더 나은 학습 경험을 만들기 위해 본 코스에서는 신경망, 신경망을 이용한 다층 모델 구축인 '딥러닝', 그리고 AI는 논의하지 않을 것입니다. 또한, 더 큰 필드에 초점을 맞추기 위하여 향후 데이터 사이언스 커리큘럼을 제공할 예정입니다. - -## 왜 머신러닝을 배우나요? - -시스템 관점에서 머신러닝은 데이터의 숨겨진 패턴을 학습하여 현명한 의사결정을 지원하는 자동화된 시스템을 만드는 것으로 정의됩니다. - -이것은 인간의 두뇌가 외부로부터 인지하는 데이터를 바탕으로 어떻게 특정한 것들을 배우는지에 의해 어느 정도 영감을 받았습니다. - -✅ 하드 코딩된 규칙 기반 엔진을 만드는 것보다 기계 학습 전략을 사용하는 이유를 잠시 생각해 봅시다. - -### 머신러닝의 애플리케이션 - -머신러닝의 응용은 이제 거의 모든 곳에 있으며, 우리의 스마트폰, 연결된 기기, 그리고 다른 시스템들에 의해 생성된 우리 사회의 방대한 데이터만큼 어디에나 존재합니다. 최첨단 머신러닝 알고리즘의 엄청난 잠재력을 고려하여 연구원들은 다차원적이고 다분야적인 실제 문제를 큰 긍정적인 결과로 해결할 수 있는 능력을 탐구하고 있습니다. - -**다양한 방식으로 머신러닝을 사용할 수 있습니다**: - -- 환자의 병력이나 보고서를 기반으로 질병 가능성을 예측합니다. -- 날씨 데이터로 계절 이벤트를 예측합니다. -- 문장의 감정을 이해합니다. -- 가짜 뉴스를 감지하고 선동을 막습니다. - -금융, 경제학, 지구 과학, 우주 탐험, 생물 공학, 인지 과학, 그리고 인문학까지 머신러닝을 적용하여 어렵고, 데이터 처리가 버거운 이슈를 해결했습니다. - -**결론**: - -머신러닝은 실제 또는 생성된 데이터에서 의미 있는 패턴을 찾는 프로세스를 자동화합니다. 무엇보다도 비즈니스, 건강 및 재무 애플리케이션에서 높은 가치를 지닌다는 것이 입증되었습니다. - -가까운 미래에, 머신러닝의 광범위한 채택으로 모든 분야의 사람들이 머신러닝의 기본을 이해하는 것이 필수적이 될 것입니다. - ---- -## 🚀 도전 - -종이에 그리거나, [Excalidraw](https://excalidraw.com/)처럼 온라인 앱을 이용하여 AI, ML, 딥러닝, 그리고 데이터 사이언스의 차이를 이해합시다. 각 기술들이 잘 해결할 수 있는 문제에 대해 아이디어를 합쳐보세요. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - -## 리뷰 & 자기주도 학습 - -클라우드에서 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)를 봅니다. - -## 과제 - -[Get up and running](../assignment.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.pt-br.md b/1-Introduction/1-intro-to-ML/translations/README.pt-br.md deleted file mode 100644 index 9b5f94c0..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.pt-br.md +++ /dev/null @@ -1,113 +0,0 @@ -# Introdução ao machine learning - -[![ML, AI, deep learning - Qual é a diferença?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, deep learning - Qual é a diferença?") - -> 🎥 Clique na imagem acima para assistir um vídeo que ilustra a diferença entre machine learning, AI, e deep learning. - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=ptbr) - -### Introdução - -Nossas boas vindas a este curso de machine learning clássico para iniciantes! Quer você seja completamente novo neste tópico, ou um praticante de ML experiente que esteja procurando se atualizar em uma área, estamos felizes por você se juntar a nós! Queremos criar um ponto de lançamento amigável para seu estudo de ML e ficaríamos felizes em avaliar, responder e incorporar o seu [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introdução ao ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introdução ao ML") - -> 🎥 Clique na imagem acima para assistir: John Guttag, do MIT, apresenta o machine learning. - -### Primeiros passos com machine learning - -Antes de iniciar este curso, você precisa ter seu computador configurado e pronto para executar notebooks localmente. - -- **Configure sua máquina com estes vídeos**. Use os links a seguir para aprender [como instalar o Python](https://youtu.be/CXZYvNRIAKM) em seu sistema e [configurar um editor de texto](https://youtu.be/EU8eayHWoZg) para desenvolvimento. -- **Aprenda Python**. Também é recomendável ter um conhecimento básico de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), uma linguagem de programação útil para cientistas de dados (data scientists) que usamos neste curso. -- **Aprenda Node.js e JavaScript**. Também usamos JavaScript algumas vezes neste curso para criar aplicativos web, então você precisará ter [node](https://nodejs.org) e [npm](https://www.npmjs.com/) instalado, assim como o [Visual Studio Code](https://code.visualstudio.com/) disponível para desenvolvimento em Python e JavaScript. -- **Crie uma conta no GitHub**. Como você nos encontrou aqui no [GitHub](https://github.com),talvez você já tenha uma conta, mas se não, crie uma e faça um fork deste curso para usar por conta própria. (Sinta-se à vontade para nos dar uma estrela também 😊). -- **Explore o Scikit-learn**. Familiarize-se com o [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), um conjunto de bibliotecas de ML referenciadas nestas lições. - -### O que é machine learning? - -O termo 'machine learning' é um dos termos mais populares e usados ​​atualmente. Há uma boa chance de você já ter ouvido esse termo pelo menos uma vez se estiver familiarizado com tecnologia, independentemente do campo em que trabalha. A mecânica do aprendizado de máquina (machine learning), entretanto, é um mistério para a maioria das pessoas. Para um iniciante em machine learning, o assunto às vezes pode parecer opressor. Portanto, é importante entender o que realmente é o machine learning e aprender sobre isso passo a passo, por meio de exemplos práticos. - -![curva de hype de ml](../images/hype.png) - -> Google Trends mostra a recente 'curva de hype' do termo 'machine learning'. - -Vivemos em um universo cheio de mistérios fascinantes. Grandes cientistas como Stephen Hawking, Albert Einstein e muitos outros dedicaram suas vidas à busca de informações significativas que desvendam os mistérios do mundo ao nosso redor. Esta é a condição humana de aprendizagem: uma criança humana aprende coisas novas e descobre a estrutura de seu mundo ano a ano à medida que chega à idade adulta. - -O cérebro e os sentidos de uma criança percebem os fatos ao seu redor e gradualmente aprendem os padrões ocultos de vida que ajudam a criança a criar regras lógicas para identificar os padrões aprendidos. O processo de aprendizagem do cérebro humano torna os humanos a criatura viva mais sofisticada deste mundo. Aprender continuamente, descobrindo padrões ocultos e, em seguida, inovar nesses padrões permite que nos tornemos cada vez melhores ao longo de nossa vida. Esta capacidade de aprendizagem e capacidade de evolução está relacionada a um conceito chamado [plasticidade cerebral](https://www.simplypsychology.org/brain-plasticity.html). Superficialmente, podemos traçar algumas semelhanças motivacionais entre o processo de aprendizado do cérebro humano e os conceitos de aprendizado de máquina. - -O [cérebro humano](https://www.livescience.com/29365-human-brain.html) percebe coisas do mundo real, processa as informações percebidas, toma decisões racionais e executa certas ações com base nas circunstâncias. Isso é o que chamamos de comportamento inteligente. Quando programamos um fac-símile do processo comportamental inteligente para uma máquina, isso é chamado de inteligência artificial (AI). - -Embora os termos possam ser confundidos, o machine learning (ML) é um subconjunto importante da inteligência artificial. **ML se preocupa em usar algoritmos especializados para descobrir informações significativas e encontrar padrões ocultos de dados percebidos para corroborar o processo de tomada de decisão racional**. - -![AI, ML, deep learning, data science](../images/ai-ml-ds.png) - -> Um diagrama que mostra as relações entre AI, ML, deep learning, and data science. Infográfico de [Jen Looper](https://twitter.com/jenlooper) inspirado [neste gráfico](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - -## O que você aprenderá neste curso - -Nesta seção, vamos cobrir apenas os conceitos básicos de machine learning que um iniciante deve conhecer. Abordamos o que chamamos de 'machine learning clássico' principalmente usando o Scikit-learn, uma excelente biblioteca que muitos alunos usam para aprender o básico. Para compreender conceitos mais amplos de inteligência artificial ou deep learning, é indispensável um forte conhecimento fundamental de machine learning e, por isso, gostaríamos de oferecê-lo aqui. - -Neste curso você aprenderá: - -- conceitos fundamentais de machine learning -- a história do ML -- ML e justiça -- técnicas de regressão de ML -- técnicas de classificação com ML -- técnicas de agrupamento de ML -- técnicas de processamento de linguagem natural de ML -- técnicas de ML de previsão de séries temporais -- aprendizagem por reforço -- aplicativos do mundo real para ML - -## O que não cobriremos - -- deep learning -- redes neurais (neural networks) -- AI - -Para tornar essa experiência de aprendizado melhor, evitaremos as complexidades das redes neurais, 'deep learning' - construção de modelos em várias camadas usando redes neurais - e AI, que discutiremos em um currículo diferente. Também ofereceremos um futuro currículo de ciência de dados para consolidar esse aspecto desse campo mais amplo. - -## Por que estudar machine learning? - -O machine learning, de uma perspectiva de sistemas, é definido como a criação de sistemas automatizados que podem aprender padrões ocultos de dados para ajudar na tomada de decisões inteligentes. - -Essa motivação é vagamente inspirada em como o cérebro humano aprende certas coisas com base nos dados que percebe do mundo exterior. - -✅ Pense por um minuto por que uma empresa iria querer tentar usar estratégias de machine learning em vez de criar um mecanismo baseado em regras embutido. - -### Aplicações do machine learning - -Os aplicativos de machine learning agora estão em quase todos os lugares e são tão onipresentes quanto os dados que fluem em nossas sociedades, gerados por nossos smartphones, dispositivos conectados e outros sistemas. Considerando o imenso potencial dos algoritmos de aprendizado de máquina (machine learning) de última geração, os pesquisadores têm explorado sua capacidade de resolver problemas multidimensionais e multidisciplinares da vida real com excelentes resultados positivos. - -**Você pode usar o machine learning de várias maneiras**: - -- Para prever a probabilidade de doença a partir do histórico médico ou relatórios de um paciente. -- Para aproveitar os dados meteorológicos para prever eventos meteorológicos. -- Para entender o sentimento de um texto. -- Para detectar notícias falsas (fake news) e impedir a propagação de propaganda. - -Finanças, economia, ciências da terra, exploração espacial, engenharia biomédica, ciências cognitivas e até mesmo campos das humanidades adaptaram o machine learning para resolver os árduos e pesados problemas de processamento de dados de seu domínio. - -O machine learning automatiza o processo de descoberta de padrões, encontrando insights significativos do mundo real ou dados gerados. Ele provou ser altamente valioso em aplicações comerciais, de saúde e financeiras, entre outras. - -Em um futuro próximo, compreender os fundamentos do machine learning será uma obrigação para pessoas de qualquer domínio devido à sua ampla adoção. - ---- - -## 🚀 Desafio - -Esboce, no papel ou usando um aplicativo online como [Excalidraw](https://excalidraw.com/), sua compreensão das diferenças entre AI, ML, deep learning e data science. Adicione algumas idéias de problemas que cada uma dessas técnicas é boa para resolver. - -## [Questionário pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2?loc=ptbr) - -## Revisão e autoestudo - -Para saber mais sobre como você pode trabalhar com algoritmos de ML na nuvem, siga este [Caminho de aprendizagem](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -Faça o [Caminho de aprendizagem](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sobre os fundamentos do ML. - -## Tarefa - -[Comece a trabalhar](assignment.pt-br.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.ru.md b/1-Introduction/1-intro-to-ML/translations/README.ru.md deleted file mode 100644 index e7a19915..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.ru.md +++ /dev/null @@ -1,149 +0,0 @@ -# Введение в машинное обучение - - - -[![ML, AI, глубокое обучение - в чем разница?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, глубокое обучение - в чем разница?") - -> 🎥 Нажмите на изображение выше, чтобы просмотреть видео, в котором обсуждается разница между машинным обучением, искусственным интеллектом и глубоким обучением. - -## [Тест перед лекцией](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - ---- - -Добро пожаловать на курс классического машинного обучения для начинающих! Если вы новичок в этой теме или опытный специалист по машинному обучению, желающий освежить свои знания в какой-либо области, мы рады, что вы присоединились к нам! Мы хотим создать удобную стартовую площадку для вашего изучения машинного обучения и будем рады ответить и учесть ваши [отзывы](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Введение в ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Введение в ML") - -> 🎥 Нажмите на изображение выше, чтобы просмотреть видео: Джон Гуттаг из Массачусетского технологического института представляет машинное обучение - ---- -## Начало работы с машинным обучением - -Перед тем, как приступить к изучению этой учебной программы, вам необходимо настроить компьютер и подготовить его для работы с ноутбуками локально. - -- **Настройте свою машину с помощью этих видео**. Воспользуйтесь следующими ссылками, чтобы узнать [как установить 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/), а также [Visual Studio Code](https://code.visualstudio.com/), доступный для разработки как на Python, так и на JavaScript. -- **Создайте учетную запись GitHub**. Поскольку вы нашли нас на [GitHub](https://github.com), возможно, у вас уже есть учетная запись, но если нет, создайте ее, а затем создайте форк этой учебной программы, чтобы использовать ее самостоятельно. (Не стесняйтесь поставить звезду этому репозиторию 😊) -- **Ознакомьтесь со Scikit-learn**. Ознакомьтесь со [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), набором библиотек для машинного обучения, на которые мы ссылаемся в этих уроках. - ---- -## Что такое машинное обучение? - -Термин "машинное обучение" - один из самых популярных и часто используемых сегодня терминов. Очень вероятно, что вы слышали этот термин хотя бы раз, если вы хоть немного знакомы с технологиями, независимо от того, в какой области вы работаете. Однако механика машинного обучения остается загадкой для большинства людей. Для новичка в машинном обучении эта тема иногда может показаться сложной. Поэтому важно понимать, что такое машинное обучение на самом деле, и изучать его шаг за шагом на практических примерах. - ---- -## Кривая хайпа - -![кривая хайпа ML](../images/hype.png) - -> Google Trends показывает недавнюю "кривую хайпа" термина "машинное обучение". - ---- -## Загадочная вселенная - -Мы живем во вселенной, полной завораживающих загадок. Великие ученые, такие как Стивен Хокинг, Альберт Эйнштейн и многие другие, посвятили свою жизнь поиску значимой информации, раскрывающей тайны окружающего нас мира. Это условие обучения: ребенок из года в год узнает новое и раскрывает структуру окружающего мира по мере взросления. - ---- -## Мозг ребенка - -Мозг и органы чувств ребенка воспринимают факты из своего окружения и постепенно изучают скрытые закономерности жизни, которые помогают ребенку выработать логические правила для определения усвоенных закономерностей. Процесс обучения человеческого мозга делает людей самыми изощренными живыми существами в этом мире. Постоянное обучение, обнаружение скрытых закономерностей и последующее внедрение инноваций, позволяет нам становиться лучше и лучше на протяжении всей жизни. Эта способность к обучению и способность к развитию связаны с концепцией, называемой [пластичность мозга](https://www.simplypsychology.org/brain-plasticity.html). На первый взгляд, мы можем выявить некоторые мотивационные сходства между процессом обучения человеческого мозга и концепциями машинного обучения. - ---- -## Человеческий мозг - -[Человеческий мозг](https://www.livescience.com/29365-human-brain.html) воспринимает вещи из реального мира, обрабатывает воспринимаемую информацию, принимает рациональные решения и выполняет определенные действия в зависимости от обстоятельств. Это то, что мы называем разумным поведением. Когда мы программируем копию интеллектуального поведенческого процесса на компьютере, это называется искусственным интеллектом (ИИ). - ---- -## Немного терминологии - -Хотя термины могут запутать, машинное обучение (ML) является важным подмножеством искусственного интеллекта. **Машинное обучение занимается использованием специализированных алгоритмов для раскрытия значимой информации и поиска скрытых закономерностей из воспринимаемых данных для подтверждения рационального процесса принятия решений**. - ---- -## AI, ML, глубокое обучение - -![AI, ML, глубокое обучение, наука о данных](../images/ai-ml-ds.png) - -> Диаграмма, показывающая взаимосвязь между ИИ, машинным обучением, глубоким обучением и наукой о данных. Инфографика [Jen Looper](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 и равнодоступность -- методы регрессионного машинного обучения -- классификация методов машинного обучения -- методы кластеризации машинного обучения -- методы машинного обучения обработки естественного языка -- методы машинного обучения прогнозирования временных рядов -- обучение с подкреплением -- реальные приложения для машинного обучения - ---- -## Что мы не будем рассказывать - -- глубокое обучение -- нейронные сети -- AI - -Чтобы улучшить процесс изучения, мы будем избегать сложностей нейронных сетей, «глубокого обучения» - многоуровневого построения моделей с использованием нейронных сетей - и искусственного интеллекта, которые мы обсудим в другой учебной программе. Мы также представим учебную программу по науке о данных, чтобы сосредоточиться на этом аспекте этой более широкой области. - ---- -## Зачем изучать машинное обучение? - -Машинное обучение с системной точки зрения определяется как создание автоматизированных систем, которые могут изучать скрытые закономерности из данных, чтобы помочь в принятии разумных решений. - -Эта мотивация во многом основана на том, как человеческий мозг учится определенным вещам на основе данных, которые он воспринимает из внешнего мира. - -✅ Задумайтесь на минутку, почему компания может попытаться использовать стратегии машинного обучения вместо создания жестко запрограммированного механизма на основе правил. - ---- -## Приложения машинного обучения - -Приложения машинного обучения сейчас есть почти повсюду, и они столь же повсеместны, как и данные, которые присутствующие в нашем обществе, генерируемые нашими смартфонами, подключенными к сети устройствами и другими системами. Учитывая огромный потенциал современных алгоритмов машинного обучения, исследователи изучали их способность решать многомерные и междисциплинарные проблемы реальной жизни с отличными положительными результатами. - ---- -## Примеры применяемого ML - -**Машинное обучение можно использовать разными способами**: - -- Предсказать вероятность заболевания на основании истории болезни пациента или отчетов. -- Использование данных о погоде для прогнозирования погодных явлений. -- Чтобы понять тональность текста. -- Для обнаружения фейковых новостей, чтобы остановить распространение пропаганды. - -Финансы, экономика, науки о Земле, освоение космоса, биомедицинская инженерия, когнитивистика и даже области гуманитарных наук адаптировали машинное обучение для решения сложных задач обработки данных в своей области. - ---- -## Заключение - -Машинное обучение автоматизирует процесс обнаружения шаблонов, находя важные закономерности из реальных или сгенерированных данных. Оно зарекомендовало себя, среди прочего, как очень ценный инструмент для бизнеса, здравоохранения и финансов. - -В ближайшем будущем понимание основ машинного обучения станет обязательным для людей из любой области из-за его широкого распространения. - ---- -# 🚀 Вызов - -Набросайте на бумаге или с помощью онлайн-приложения, такого как [Excalidraw](https://excalidraw.com/), ваше понимание различий между AI, ML, глубоким обучением и наукой о данных. Добавьте несколько идей о проблемах, которые может решить каждый из этих методов. - -# [Тест после лекции](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - ---- -# Обзор и самообучение - -Чтобы узнать больше о том, как вы можете работать с алгоритмами машинного обучения в облаке, следуйте курсу [Learning Path](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -Пройдите курс [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) по основам машинного обучения. - ---- -# Задание - -[Подготовьте среду разработки](assignment.ru.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.tr.md b/1-Introduction/1-intro-to-ML/translations/README.tr.md deleted file mode 100644 index 79744c52..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.tr.md +++ /dev/null @@ -1,114 +0,0 @@ -# Makine Öğrenimine Giriş - -[![ML, AI, Derin öğrenme - Farkları nelerdir?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "ML, AI, Derin öğrenme - Farkları nelerdir?") - -> 🎥 Makine öğrenimi, yapay zeka ve derin öğrenme arasındaki farkı tartışan bir video için yukarıdaki resme tıklayın. - -## [Ders öncesi sınav](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=tr) - -### Introduction - -Yeni başlayanlar için klasik makine öğrenimi üzerine olan bu kursa hoş geldiniz! İster bu konuda tamamen yeni olun, ister belli bir alandaki bilgilerini tazelemek isteyen deneyimli bir makine öğrenimi uygulayıcısı olun, aramıza katılmanızdan mutluluk duyarız! Makine öğrenimi çalışmanız için samimi bir başlangıç ​​noktası oluşturmak istiyoruz ve [geri bildiriminizi](https://github.com/microsoft/ML-For-Beginners/discussions) değerlendirmekten, yanıtlamaktan ve hayata geçirmekten memnuniyet duyarız. - -[![Makine Öğrenimine Giriş](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Makine Öğrenimine Giriş") - -> 🎥 Video için yukarıdaki resme tıklayın: MIT'den John Guttag, makine öğrenimini tanıtıyor -### Makine Öğrenimine Başlamak - -Bu müfredata başlamadan önce, bilgisayarınızın yerel olarak (Jupyter) not defterlerini çalıştırmak için hazır olması gerekir. - -- **Makinenizi bu videolar rehberliğinde yapılandırın**. Bu [video setinde](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6) makinenizi nasıl kuracağınız hakkında daha fazla bilgi edinin. -- **Python öğrenin**. Ayrıca, veri bilimciler için faydalı bir programlama dili olan ve bu derslerde kullandığımız [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) programlama dili hakkında temel bilgilere sahip olmanız da önerilir. -- **Node.js ve JavaScript'i öğrenin**. Web uygulamaları oluştururken de bu kursta JavaScript'i birkaç kez kullanıyoruz, bu nedenle [node](https://nodejs.org), [npm](https://www.npmjs.com/) ve ayrıca hem Python hem de JavaScript geliştirme için kullanılabilen [Visual Studio Code](https://code.visualstudio.com/) yüklü olmalıdır. -- **GitHub hesabı oluşturun**. Bizi burada [GitHub](https://github.com) üzerinde bulduğunuza göre, zaten bir hesabınız olabilir, ancak mevcut değilse, bir tane hesap oluşturun ve ardından bu müfredatı kendi başınıza kullanmak için çatallayın (fork). (Bize de yıldız vermekten çekinmeyin 😊) -- **Scikit-learn'ü keşfedin**. Bu derslerde referans verdiğimiz, bir dizi ML kütüphanesinden oluşan [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) hakkında bilgi edinin. - -### Makine öğrenimi nedir? - -'Makine öğrenimi' terimi, günümüzün en popüler ve sık kullanılan terimlerinden biridir. Hangi alanda çalışırsanız çalışın, teknolojiyle ilgili bir tür aşinalığınız varsa, bu terimi en az bir kez duymuş olma ihtimaliniz yüksektir. Bununla birlikte, makine öğreniminin mekanikleri, yani çalışma prensipleri, çoğu insan için bir gizemdir. Makine öğrenimine yeni başlayan biri için konu bazen bunaltıcı gelebilir. Bu nedenle, makine öğreniminin gerçekte ne olduğunu anlamak ve pratik örnekler üzerinden adım adım öğrenmek önemlidir. - -![ML heyecan eğrisi](../images/hype.png) - -> Google Trendler, 'makine öğrenimi' teriminin son 'heyecan eğrisini' gösteriyor - -Büyüleyici gizemlerle dolu bir evrende yaşıyoruz. Stephen Hawking, Albert Einstein ve daha pek çoğu gibi büyük bilim adamları, hayatlarını çevremizdeki dünyanın gizemlerini ortaya çıkaran anlamlı bilgiler aramaya adadılar. Öğrenmenin insani yönü de budur: insan evladı yeni şeyler öğrenir ve yetişkinliğe doğru büyüdükçe her yıl kendi dünyasının yapısını ortaya çıkarır. - -Bir çocuğun beyni ve duyuları, çevrelerindeki gerçekleri algılar ve çocuğun, öğrenilen kalıpları tanımlamak için mantıksal kurallar oluşturmasına yardımcı olan gizli yaşam kalıplarını yavaş yavaş öğrenir. İnsan beyninin öğrenme süreci, insanı bu dünyanın en gelişmiş canlısı yapar. Gizli kalıpları keşfederek sürekli öğrenmek ve sonra bu kalıplar üzerinde yenilik yapmak, yaşamımız boyunca kendimizi giderek daha iyi hale getirmemizi sağlar. Bu öğrenme kapasitesi ve gelişen kabiliyet, [beyin plastisitesi](https://www.simplypsychology.org/brain-plasticity.html) adı verilen bir kavramla ilgilidir. Yüzeysel olarak, insan beyninin öğrenme süreci ile makine öğrenimi kavramları arasında bazı motivasyonel benzerlikler çizebiliriz. - -[İnsan beyni](https://www.livescience.com/29365-human-brain.html) gerçek dünyadaki şeyleri algılar, algılanan bilgileri işler, mantıksal kararlar verir ve koşullara göre belirli eylemler gerçekleştirir. Akıllıca davranmak dediğimiz şey buydu işte. Bir makineye akıllı davranış sürecinin bir kopyasını programladığımızda buna yapay zeka (İngilizce haliyle artificial intelligence, kısaca **AI**) denir. - -Terimler karıştırılabilse de, makine öğrenimi (İngilizce haliyle machine learning, kısaca **ML**), yapay zekanın önemli bir alt kümesidir. **ML, mantıklı karar verme sürecini desteklemek için anlamlı bilgileri ortaya çıkarmak ve algılanan verilerden gizli kalıpları bulmak için özel algoritmalar kullanmakla ilgilenir**. - -![AI, ML, derin öğrenme, veri bilimi](../images/ai-ml-ds.png) - -> Yapay zeka, makine öğrenimi, derin öğrenme ve veri bilimi arasındaki ilişkileri gösteren bir diyagram. Bu infografik, [şu grafikten](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-) ilham alan [Jen Looper](https://twitter.com/jenlooper) tarafından hazırlanmıştır. - -> AI (Artificial Intelligence): Yapay zekâ -> ML(Machine Learning): Makine öğrenimi -> Deep Learning: Derin Öğrenme -> Data Science: Veri bilimi - -## Bu kursta neler öğreneceksiniz - -Bu müfredatta, yalnızca yeni başlayanların bilmesi gereken makine öğreniminin temel kavramlarını ele alacağız. 'Klasik makine öğrenimi' dediğimiz şeyi, öncelikle birçok öğrencinin temel bilgileri öğrenmek için kullandığı mükemmel bir kütüphane olan Scikit-learn'ü kullanarak ele alıyoruz. Daha geniş yapay zeka veya derin öğrenme kavramlarını anlamak için, güçlü bir temel makine öğrenimi bilgisi vazgeçilmezdir ve bu yüzden onu burada sunmak istiyoruz. - -Bu kursta şunları öğreneceksiniz: - -- makine öğreniminin temel kavramları -- ML'nin tarihi -- ML ve adillik -- regresyon ML teknikleri -- sınıflandırma ML teknikleri -- kümeleme ML teknikleri -- doğal dil işleme ML teknikleri -- zaman serisi tahmini ML teknikleri -- pekiştirmeli öğrenme -- ML için gerçek-dünya uygulamaları - -## Neyi kapsamayacağız - -- derin öğrenme -- sinir ağları -- yapay zeka - -Daha iyi bir öğrenme deneyimi sağlamak için, farklı bir müfredatta tartışacağımız sinir ağları, 'derin öğrenme' (sinir ağlarını kullanarak çok katmanlı modeller oluşturma) ve yapay zekânın karmaşıklıklarından kaçınacağız. Ayrıca, bu daha geniş alanın bu yönüne odaklanmak için yakında çıkacak bir veri bilimi müfredatı sunacağız. - -## Neden makine öğrenimi üzerinde çalışmalısınız? - -Sistemler perspektifinden makine öğrenimi, akıllı kararlar almaya yardımcı olmak için verilerden gizli kalıpları öğrenebilen otomatik sistemlerin oluşturulması olarak tanımlanır. - -Bu motivasyon, insan beyninin dış dünyadan algıladığı verilere dayanarak belirli şeyleri nasıl öğrendiğinden bir miktar esinlenmiştir. - -✅ Bir işletmenin, sabit kurallara dayalı bir karar aracı oluşturmak yerine neden makine öğrenimi stratejilerini kullanmayı denemek isteyebileceklerini bir an için düşünün. - -### Makine öğrenimi uygulamaları - -Makine öğrenimi uygulamaları artık neredeyse her yerde ve akıllı telefonlarımız, internete bağlı cihazlarımız ve diğer sistemlerimiz tarafından üretilen, toplumlarımızda akan veriler kadar yaygın hale gelmiş durumda. Son teknoloji makine öğrenimi algoritmalarının muazzam potansiyelini göz önünde bulunduran araştırmacılar, bu algoritmaların çok boyutlu ve çok disiplinli gerçek hayat problemlerini çözme yeteneklerini araştırıyorlar ve oldukça olumlu sonuçlar alıyorlar. - -**Makine öğrenimini birçok şekilde kullanabilirsiniz**: - -- Bir hastanın tıbbi geçmişinden veya raporlarından hastalık olasılığını tahmin etmek -- Hava olaylarını tahmin etmek için hava durumu verilerini kullanmak -- Bir metnin duygu durumunu anlamak -- Propagandanın yayılmasını durdurmak için sahte haberleri tespit etmek - -Finans, ekonomi, yer bilimi, uzay araştırmaları, biyomedikal mühendislik, bilişsel bilim ve hatta beşeri bilimlerdeki alanlar, kendi alanlarının zorlu ve ağır veri işleme sorunlarını çözmek için makine öğrenimini tekniklerini kullanmaya başladılar. - -Makine öğrenimi, gerçek dünyadan veya oluşturulan verilerden anlamlı içgörüler bularak örüntü bulma sürecini otomatikleştirir. Diğerlerinin yanı sıra iş, sağlık ve finansal uygulamalarda son derece değerli olduğunu kanıtlamıştır. - -Yakın gelecekte, yaygın olarak benimsenmesi nedeniyle makine öğreniminin temellerini anlamak, tüm alanlardan insanlar için bir zorunluluk olacak. - ---- -## 🚀 Meydan Okuma - -Kağıt üzerinde veya [Excalidraw](https://excalidraw.com/) gibi çevrimiçi bir uygulama kullanarak AI, makine öğrenimi, derin öğrenme ve veri bilimi arasındaki farkları anladığınızdan emin olun. Bu tekniklerin her birinin çözmede iyi olduğu bazı problem fikirleri ekleyin. - -## [Ders sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2?loc=tr) - -## İnceleme ve Bireysel Çalışma - -Bulutta makine öğrenimi algoritmalarıyla nasıl çalışabileceğiniz hakkında daha fazla bilgi edinmek için bu [Eğitim Patikasını](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) izleyin. - -## Ödev - -[Haydi başlayalım!](assignment.tr.md) \ No newline at end of file diff --git a/1-Introduction/1-intro-to-ML/translations/README.zh-cn.md b/1-Introduction/1-intro-to-ML/translations/README.zh-cn.md deleted file mode 100644 index e919ff02..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.zh-cn.md +++ /dev/null @@ -1,107 +0,0 @@ -# 机器学习介绍 - -[![机器学习,人工智能,深度学习-有什么区别?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "机器学习,人工智能,深度学习-有什么区别?") - -> 🎥 点击上面的图片观看讨论机器学习、人工智能和深度学习之间区别的视频。 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - -### 介绍 - -欢迎来到这个经典机器学习的初学者课程!无论你是这个主题的新手,还是一个有经验的 ML 从业者,我们都很高兴你能加入我们!我们希望为你的 ML 研究创建一个好的开始,并很乐意评估、回应和接受你的[反馈](https://github.com/microsoft/ML-For-Beginners/discussions)。 - -[![机器学习简介](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction to ML") - -> 🎥 单击上图观看视频:麻省理工学院的 John Guttag 介绍机器学习 -### 机器学习入门 - -在开始本课程之前,你需要设置计算机能在本地运行 Jupyter Notebooks。 - -- **按照这些视频里的讲解配置你的计算机**。了解有关如何在此[视频集](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6)中设置计算机的更多信息。 -- **学习 Python**。 还建议你对 [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) 有一个基本的了解。这是我们在本课程中使用的一种对数据科学家有用的编程语言。 -- **学习 Node.js 和 JavaScript**。在本课程中,我们在构建 web 应用程序时也使用过几次 JavaScript,因此你需要有 [Node.js](https://nodejs.org) 和 [npm](https://www.npmjs.com/) 以及 [Visual Studio Code](https://code.visualstudio.com/) 用于 Python 和 JavaScript 开发。 -- **创建 GitHub 帐户**。既然你在 [GitHub](https://github.com) 上找到我们,你可能已经有了一个帐户,但如果没有,请创建一个帐户,然后 fork 此课程自己使用(也给我们一颗星星吧😊) -- **探索 Scikit-learn**. 熟悉 [Scikit-learn]([https://scikit-learn.org/stable/user_guide.html),我们在这些课程中引用的一组 ML 库。 - -### 什么是机器学习? - -术语“机器学习”是当今最流行和最常用的术语之一。 如果你对科技有某种程度的熟悉,那么很可能你至少听说过这个术语一次,无论你在哪个领域工作。然而,机器学习的机制对大多数人来说是一个谜。 对于机器学习初学者来说,这个主题有时会让人感到不知所措。 因此,了解机器学习的实质是什么,并通过实例一步一步地了解机器学习是很重要的。 - -![机器学习趋势曲线](../images/hype.png) - -> 谷歌趋势显示了“机器学习”一词最近的“趋势曲线” - -我们生活在一个充满迷人奥秘的宇宙中。像史蒂芬·霍金、阿尔伯特·爱因斯坦等伟大的科学家,以及更多的人,都致力于寻找有意义的信息,揭示我们周围世界的奥秘。这就是人类学习的条件:一个人类的孩子在长大成人的过程中,一年又一年地学习新事物并揭示世界的结构。 - -孩子的大脑和感官感知到周围的事实,并逐渐学习隐藏的生活模式,这有助于孩子制定逻辑规则来识别学习模式。人类大脑的学习过程使人类成为世界上最复杂的生物。不断地学习,通过发现隐藏的模式,然后对这些模式进行创新,使我们能够使自己在一生中变得越来越好。这种学习能力和进化能力与一个叫做[大脑可塑性](https://www.simplypsychology.org/brain-plasticity.html)的概念有关。从表面上看,我们可以在人脑的学习过程和机器学习的概念之间找到一些动机上的相似之处。 - -[人脑](https://www.livescience.com/29365-human-brain.html) 从现实世界中感知事物,处理感知到的信息,做出理性的决定,并根据环境执行某些行动。这就是我们所说的智能行为。当我们将智能行为过程的复制品编程到计算机上时,它被称为人工智能 (AI)。 - -尽管这些术语可能会混淆,但机器学习 (ML) 是人工智能的一个重要子集。 **机器学习关注使用专门的算法来发现有意义的信息,并从感知数据中找到隐藏的模式,以证实理性的决策过程**。 - -![人工智能、机器学习、深度学习、数据科学](../images/ai-ml-ds.png) - -> 显示 AI、ML、深度学习和数据科学之间关系的图表。图片作者 [Jen Looper](https://twitter.com/jenlooper),灵感来自[这张图](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - -## 你将在本课程中学到什么 - -在本课程中,我们将仅涵盖初学者必须了解的机器学习的核心概念。 我们主要使用 Scikit-learn 来介绍我们所谓的“经典机器学习”,这是一个许多学生用来学习基础知识的优秀库。要理解更广泛的人工智能或深度学习的概念,机器学习的基础知识是必不可少的,所以我们想在这里提供它。 - -在本课程中,你将学习: - -- 机器学习的核心概念 -- 机器学习的历史 -- 机器学习和公平性 -- 回归 -- 分类 -- 聚类 -- 自然语言处理 -- 时序预测 -- 强化学习 -- 机器学习的实际应用 -## 我们不会涵盖的内容 - -- 深度学习 -- 神经网络 -- AI - -为了获得更好的学习体验,我们将避免神经网络、“深度学习”(使用神经网络的多层模型构建)和人工智能的复杂性,我们将在不同的课程中讨论这些问题。 我们还将提供即将推出的数据科学课程,以专注于这个更大领域的这一方面。 -## 为什么要学习机器学习? - -从系统的角度来看,机器学习被定义为创建可以从数据中学习隐藏模式以帮助做出智能决策的自动化系统。 - -这种动机大致是受人脑如何根据它从外部世界感知到的数据来学习某些东西的启发。 - -✅ 想一想为什么企业想要尝试使用机器学习策略而不是创建基于硬编码的规则引擎。 - -### 机器学习的应用 - -机器学习的应用现在几乎无处不在,就像我们的智能手机、互联设备和其他系统产生的数据一样无处不在。考虑到最先进的机器学习算法的巨大潜力,研究人员一直在探索其解决多维多学科现实问题的能力,并取得了巨大的积极成果。 - -**你可以在很多方面使用机器学习**: - -- 根据病人的病史或报告来预测患病的可能性。 -- 利用天气数据预测天气。 -- 理解文本的情感。 -- 检测假新闻以阻止其传播。 - -金融、经济学、地球科学、太空探索、生物医学工程、认知科学,甚至人文学科领域都采用机器学习来解决其领域中艰巨的、数据处理繁重的问题。 - -机器学习通过从真实世界或生成的数据中发现有意义的见解,自动化了模式发现的过程。事实证明,它在商业、健康和金融应用等方面具有很高的价值。 - -在不久的将来,由于机器学习的广泛应用,了解机器学习的基础知识将成为任何领域的人们的必修课。 - ---- -## 🚀 挑战 - -在纸上或使用 [Excalidraw](https://excalidraw.com/) 等在线应用程序绘制草图,了解你对 AI、ML、深度学习和数据科学之间差异的理解。添加一些关于这些技术擅长解决的问题的想法。 - -## [阅读后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - -## 复习与自学 - -要了解有关如何在云中使用 ML 算法的更多信息,请遵循以下[学习路径](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott)。 - -## 任务 - -[启动并运行](assignment.zh-cn.md) diff --git a/1-Introduction/1-intro-to-ML/translations/README.zh-tw.md b/1-Introduction/1-intro-to-ML/translations/README.zh-tw.md deleted file mode 100644 index bac84df3..00000000 --- a/1-Introduction/1-intro-to-ML/translations/README.zh-tw.md +++ /dev/null @@ -1,103 +0,0 @@ -# 機器學習介紹 - -[![機器學習,人工智能,深度學習-有什麽區別?](https://img.youtube.com/vi/lTd9RSxS9ZE/0.jpg)](https://youtu.be/lTd9RSxS9ZE "機器學習,人工智能,深度學習-有什麽區別?") - -> 🎥 點擊上面的圖片觀看討論機器學習、人工智能和深度學習之間區別的視頻。 -## [課前測驗](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - -### 介紹 - -歡迎來到這個經典機器學習的初學者課程!無論你是這個主題的新手,還是一個有經驗的 ML 從業者,我們都很高興你能加入我們!我們希望為你的 ML 研究創建一個好的開始,並很樂意評估、回應和接受你的[反饋](https://github.com/microsoft/ML-For-Beginners/discussions)。 - -[![機器學習簡介](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction to ML") - -> 🎥 單擊上圖觀看視頻:麻省理工學院的 John Guttag 介紹機器學習 -### 機器學習入門 -在開始本課程之前,你需要設置計算機能在本地運行 Jupyter Notebooks。 - -- **按照這些視頻裏的講解配置你的計算機**。了解有關如何在此[視頻集](https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6)中設置計算機的更多信息。 -- **學習 Python**。 還建議你對 [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) 有一個基本的了解。這是我們在本課程中使用的一種對數據科學家有用的編程語言。 -- **學習 Node.js 和 JavaScript**。在本課程中,我們在構建 web 應用程序時也使用過幾次 JavaScript,因此你需要有 [Node.js](https://nodejs.org) 和 [npm](https://www.npmjs.com/) 以及 [Visual Studio Code](https://code.visualstudio.com/) 用於 Python 和 JavaScript 開發。 -- **創建 GitHub 帳戶**。既然你在 [GitHub](https://github.com) 上找到我們,你可能已經有了一個帳戶,但如果沒有,請創建一個帳戶,然後 fork 此課程自己使用(也給我們一顆星星吧😊) -- **探索 Scikit-learn**. 熟悉 [Scikit-learn]([https://scikit-learn.org/stable/user_guide.html),我們在這些課程中引用的一組 ML 庫。 - -### 什麽是機器學習? - -術語「機器學習」是當今最流行和最常用的術語之一。 如果你對科技有某種程度的熟悉,那麽很可能你至少聽說過這個術語一次,無論你在哪個領域工作。然而,機器學習的機製對大多數人來說是一個謎。 對於機器學習初學者來說,這個主題有時會讓人感到不知所措。 因此,了解機器學習的實質是什麽,並通過實例一步一步地了解機器學習是很重要的。 - -![機器學習趨勢曲線](../images/hype.png) - -> 谷歌趨勢顯示了「機器學習」一詞最近的「趨勢曲線」 -我們生活在一個充滿迷人奧秘的宇宙中。像史蒂芬·霍金、阿爾伯特·愛因斯坦等偉大的科學家,以及更多的人,都致力於尋找有意義的信息,揭示我們周圍世界的奧秘。這就是人類學習的條件:一個人類的孩子在長大成人的過程中,一年又一年地學習新事物並揭示世界的結構。 - -孩子的大腦和感官感知到周圍的事實,並逐漸學習隱藏的生活模式,這有助於孩子製定邏輯規則來識別學習模式。人類大腦的學習過程使人類成為世界上最復雜的生物。不斷地學習,通過發現隱藏的模式,然後對這些模式進行創新,使我們能夠使自己在一生中變得越來越好。這種學習能力和進化能力與一個叫做[大腦可塑性](https://www.simplypsychology.org/brain-plasticity.html)的概念有關。從表面上看,我們可以在人腦的學習過程和機器學習的概念之間找到一些動機上的相似之處。 - -[人腦](https://www.livescience.com/29365-human-brain.html) 從現實世界中感知事物,處理感知到的信息,做出理性的決定,並根據環境執行某些行動。這就是我們所說的智能行為。當我們將智能行為過程的復製品編程到計算機上時,它被稱為人工智能 (AI)。 - -盡管這些術語可能會混淆,但機器學習 (ML) 是人工智能的一個重要子集。 **機器學習關註使用專門的算法來發現有意義的信息,並從感知數據中找到隱藏的模式,以證實理性的決策過程**。 - -![人工智能、機器學習、深度學習、數據科學](../images/ai-ml-ds.png) - -> 顯示 AI、ML、深度學習和數據科學之間關系的圖表。圖片作者 [Jen Looper](https://twitter.com/jenlooper),靈感來自[這張圖](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) -## 你將在本課程中學到什麽 - -在本課程中,我們將僅涵蓋初學者必須了解的機器學習的核心概念。 我們主要使用 Scikit-learn 來介紹我們所謂的「經典機器學習」,這是一個許多學生用來學習基礎知識的優秀庫。要理解更廣泛的人工智能或深度學習的概念,機器學習的基礎知識是必不可少的,所以我們想在這裏提供它。 - -在本課程中,你將學習: - -- 機器學習的核心概念 -- 機器學習的歷史 -- 機器學習和公平性 -- 回歸 -- 分類 -- 聚類 -- 自然語言處理 -- 時序預測 -- 強化學習 -- 機器學習的實際應用 -## 我們不會涵蓋的內容 - -- 深度學習 -- 神經網絡 -- AI - -為了獲得更好的學習體驗,我們將避免神經網絡、「深度學習」(使用神經網絡的多層模型構建)和人工智能的復雜性,我們將在不同的課程中討論這些問題。 我們還將提供即將推出的數據科學課程,以專註於這個更大領域的這一方面。 -## 為什麽要學習機器學習? - -從系統的角度來看,機器學習被定義為創建可以從數據中學習隱藏模式以幫助做出智能決策的自動化系統。 - -這種動機大致是受人腦如何根據它從外部世界感知到的數據來學習某些東西的啟發。 - -✅ 想一想為什麽企業想要嘗試使用機器學習策略而不是創建基於硬編碼的規則引擎。 - -### 機器學習的應用 - -機器學習的應用現在幾乎無處不在,就像我們的智能手機、互聯設備和其他系統產生的數據一樣無處不在。考慮到最先進的機器學習算法的巨大潛力,研究人員一直在探索其解決多維多學科現實問題的能力,並取得了巨大的積極成果。 - -**你可以在很多方面使用機器學習**: - -- 根據病人的病史或報告來預測患病的可能性。 -- 利用天氣數據預測天氣。 -- 理解文本的情感。 -- 檢測假新聞以阻止其傳播。 - -金融、經濟學、地球科學、太空探索、生物醫學工程、認知科學,甚至人文學科領域都采用機器學習來解決其領域中艱巨的、數據處理繁重的問題。 - -機器學習通過從真實世界或生成的數據中發現有意義的見解,自動化了模式發現的過程。事實證明,它在商業、健康和金融應用等方面具有很高的價值。 - -在不久的將來,由於機器學習的廣泛應用,了解機器學習的基礎知識將成為任何領域的人們的必修課。 - ---- -## 🚀 挑戰 - -在紙上或使用 [Excalidraw](https://excalidraw.com/) 等在線應用程序繪製草圖,了解你對 AI、ML、深度學習和數據科學之間差異的理解。添加一些關於這些技術擅長解決的問題的想法。 - -## [閱讀後測驗](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - -## 復習與自學 - -要了解有關如何在雲中使用 ML 算法的更多信息,請遵循以下[學習路徑](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott)。 - -## 任務 - -[啟動並運行](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.es.md b/1-Introduction/1-intro-to-ML/translations/assignment.es.md deleted file mode 100644 index 5b428135..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.es.md +++ /dev/null @@ -1,9 +0,0 @@ -# Lévantate y corre - -## Instrucciones - -En esta tarea no calificada, debe repasar Python y hacer que su entorno esté en funcionamiento y sea capaz de ejecutar cuadernos. - -Tome esta [Ruta de aprendizaje de Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), y luego configure sus sistemas con estos videos introductorios: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.fr.md b/1-Introduction/1-intro-to-ML/translations/assignment.fr.md deleted file mode 100644 index b8513048..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.fr.md +++ /dev/null @@ -1,10 +0,0 @@ -# Être opérationnel - - -## Instructions - -Dans ce devoir non noté, vous devez vous familiariser avec Python et rendre votre environnement opérationnel et capable d'exécuter des notebook. - -Suivez ce [parcours d'apprentissage Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), puis configurez votre système en parcourant ces vidéos introductives : - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.id.md b/1-Introduction/1-intro-to-ML/translations/assignment.id.md deleted file mode 100644 index a22848f4..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.id.md +++ /dev/null @@ -1,9 +0,0 @@ -# Persiapan - -## Instruksi - -Dalam tugas yang tidak dinilai ini, kamu akan mempelajari Python dan mempersiapkan *environment* kamu sehingga dapat digunakan untuk menjalankan *notebook*. - -Ambil [Jalur Belajar Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) ini, kemudian persiapkan sistem kamu dengan menonton video-video pengantar ini: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.it.md b/1-Introduction/1-intro-to-ML/translations/assignment.it.md deleted file mode 100644 index 15c41f29..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.it.md +++ /dev/null @@ -1,9 +0,0 @@ -# Tempi di apprendimento brevi - -## Istruzioni - -In questo compito senza valutazione, si dovrebbe rispolverare Python e rendere il proprio ambiente attivo e funzionante, in grado di eseguire notebook. - -Si segua questo [percorso di apprendimento di Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) e quindi si configurino i propri sistemi seguendo questi video introduttivi: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.ja.md b/1-Introduction/1-intro-to-ML/translations/assignment.ja.md deleted file mode 100644 index 4c427561..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.ja.md +++ /dev/null @@ -1,9 +0,0 @@ -# 稼働させる - -## 指示 - -この評価のない課題では、Pythonについて復習し、環境を稼働させてノートブックを実行できるようにする必要があります。 - -この[Pythonラーニングパス](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott)を受講し、次の入門用ビデオに従ってシステムをセットアップしてください。 - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.ko.md b/1-Introduction/1-intro-to-ML/translations/assignment.ko.md deleted file mode 100644 index 2b8e72a8..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.ko.md +++ /dev/null @@ -1,9 +0,0 @@ -# 시작해 봅시다 - -## 설명 - -이 미채점 과제에서는 파이썬(Python)을 복습하고 Python 실행 환경 설정 및 노트북(Jupyter Notebook) 실행 방법까지 숙지해 보시길 바랍니다. - -다음 [Python Learning Path](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott)를 이수하시고, 아래 Python 입문 강좌를 통해 Python 설치 및 실행 환경을 설정해 보세요: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.pt-br.md b/1-Introduction/1-intro-to-ML/translations/assignment.pt-br.md deleted file mode 100644 index 983d930f..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.pt-br.md +++ /dev/null @@ -1,9 +0,0 @@ -# Comece a Trabalhar - -## Instruções - -Nesta tarefa não corrigida, você deve se aprimorar em Python e colocar seu ambiente em funcionamento e capaz de executar notebooks. - -Faça o [Caminho de aprendizagem do Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), e, em seguida, faça a configuração de seus sistemas analisando estes vídeos introdutórios: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.ru.md b/1-Introduction/1-intro-to-ML/translations/assignment.ru.md deleted file mode 100644 index 8a06eedb..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.ru.md +++ /dev/null @@ -1,9 +0,0 @@ -# Настройте среду разработки - -## Инструкции - -Это задание не оценивается. Вы должны освежить в памяти Python и настроить свою среду, чтобы она могла запускать ноутбуки. - -Воспользуйтесь этим курсом [Python Learning Path](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), а затем настройте свою систему, просмотрев эти вводные видео: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.tr.md b/1-Introduction/1-intro-to-ML/translations/assignment.tr.md deleted file mode 100644 index ed70c424..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.tr.md +++ /dev/null @@ -1,9 +0,0 @@ -# Haydi Başlayalım - -## Talimatlar - -Bu not-verilmeyen ödevde, Python bilgilerinizi tazelemeli, geliştirme ortamınızı çalışır duruma getirmeli ve not defterlerini çalıştırabilmelisiniz. - -Bu [Python Eğitim Patikasını](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) bitirin ve ardından bu tanıtım videolarını izleyerek sistem kurulumunuzu yapın : - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 \ No newline at end of file diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.zh-cn.md b/1-Introduction/1-intro-to-ML/translations/assignment.zh-cn.md deleted file mode 100644 index 9aa0dd28..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.zh-cn.md +++ /dev/null @@ -1,9 +0,0 @@ -# 启动和运行 - -## 说明 - -在这个不评分的作业中,你应该温习一下 Python,将 Python 环境能够运行起来,并且可以运行 notebooks。 - -学习这个 [Python 学习路径](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott),然后通过这些介绍性的视频将你的系统环境设置好: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md b/1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md deleted file mode 100644 index fa913b28..00000000 --- a/1-Introduction/1-intro-to-ML/translations/assignment.zh-tw.md +++ /dev/null @@ -1,9 +0,0 @@ -# 啟動和運行 - -## 說明 - -在這個不評分的作業中,你應該溫習一下 Python,將 Python 環境能夠運行起來,並且可以運行 notebooks。 - -學習這個 [Python 學習路徑](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott),然後通過這些介紹性的視頻將你的系統環境設置好: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 diff --git a/1-Introduction/2-history-of-ML/translations/README.es.md b/1-Introduction/2-history-of-ML/translations/README.es.md deleted file mode 100755 index 116cc7e4..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.es.md +++ /dev/null @@ -1,117 +0,0 @@ -# Historia del machine learning - -![Resumen de la historia del machine learning en un boceto](../../sketchnotes/ml-history.png) -> Boceto por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Cuestionario previo a la conferencia](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3?loc=es) - -En esta lección, analizaremos los principales hitos en la historia del machine learning y la inteligencia artificial. - -La historia de la inteligencia artificial (AI) como campo está entrelazada con la historia del machine learning, ya que los algoritmos y avances computacionales que sustentan el ML ayudaron al desarrollo de la inteligencia artificial. Es útil recordar que, si bien estos campos comenzaron a cristalizar en la década de 1950 como áreas distintas de investigación, importantes [descubrimientos algorítmicos, estadísticos, matemáticos, computacionales y técnicos](https://wikipedia.org/wiki/Timeline_of_machine_learning) fueron predecesores y contemporáneos a esta era. De hecho, las personas han estado pensando en estas preguntas durante [cientos de años](https://wikipedia.org/wiki/History_of_artificial_intelligence): este artículo analiza los fundamentos intelectuales históricos de la idea de una 'máquina pensante.' - -## Descubrimientos notables - -- 1763, 1812 [Teorema de Bayes](https://es.wikipedia.org/wiki/Teorema_de_Bayes) y sus predecesores. Este teorema y sus aplicaciones son la base de la inferencia, describiendo la probabilidad de que ocurra un evento basado en el conocimiento previo. -- 1805 [Teoría de mínimos cuadrados](https://es.wikipedia.org/wiki/M%C3%ADnimos_cuadrados) por el matemático francés Adrien-Marie Legendre. Esta teoría, sobre la que aprenderemos en nuestra unidad de Regresión, ayuda al ajustar los modelos a los datos. -- 1913 [Cadenas de Markov](https://es.wikipedia.org/wiki/Cadena_de_M%C3%A1rkov) el nombre del matemático ruso Andrey Markov es utilizado para describir una secuencia de posibles eventos basados en su estado anterior. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) es un tipo de clasificador lineal inventado por el psicólogo Frank Rosenblatt que subyace a los avances en el deep learning. -- 1967 [Nearest Neighbor (Vecino más cercano)](https://es.wikipedia.org/wiki/K_vecinos_m%C3%A1s_pr%C3%B3ximos) es un algoritmo diseñado originalmente para trazar rutas. En un contexto de ML, se utiliza para detectar patrones. -- 1970 [Retropropagación](https://es.wikipedia.org/wiki/Propagaci%C3%B3n_hacia_atr%C3%A1s): es usada para entrenar [redes neuronales prealimentadas](https://es.wikipedia.org/wiki/Red_neuronal_prealimentada). -- 1982 [Redes neuronales recurrentes](https://es.wikipedia.org/wiki/Red_neuronal_recurrente) son redes neuronales artificiales derivadas de redes neuronales prealimentadas que crean grafos temporales. - -✅ Investigue un poco. ¿Qué otras fechas se destacan como fundamentales en la historia del machine learning (ML) y la inteligencia artificial (AI)? -## 1950: Máquinas que piensan - -Alan Turing, una persona verdaderamente notable que fue votada [por el público en 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) como el científico más grande del siglo XX, a quien se le atribuye haber ayudado a sentar las bases del concepto de una 'máquina que puede pensar.' Lidió con los detractores y con su propia necesidad de evidencia empírica de este concepto en parte mediante la creación de la [prueba de Turing](https://www.bbc.com/news/technology-18475646), que explorarás en nuestras lecciones de procesamiento de lenguaje natural (NLP, por sus siglas en inglés). - -## 1956: Dartmouth Summer Research Project - -"The Dartmouth Summer Research Project sobre inteligencia artificial fue un evento fundamental para la inteligencia artificial como campo" y fue aquí donde se acuñó el término 'inteligencia artificial' ([fuente](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - - -> Todos los aspectos del aprendizaje y cualquier otra característica de la inteligencia pueden, en principio, describirse con tanta precisión que se puede hacer una máquina para simularlos. - -El investigador principal, el profesor de matemáticas John McCarthy, esperaba "proceder sobre las bases de la conjetura de que cada aspecto del aprendizaje o cualquier otra característica de la inteligencia pueden, en principio, describirse con tanta precisión que se puede hacer una máquina para simularlos." Los participantes, incluyeron otro gran experto en el campo, Marvin Minsky. - -El taller tiene el mérito de haber iniciado y alentado varias discusiones que incluyen "el surgimiento de métodos simbólicos, sistemas en dominios limitados (primeros sistemas expertos), y sistemas deductivos contra sistemas inductivos." ([fuente](https://es.wikipedia.org/wiki/Conferencia_de_Dartmouth)). - -## 1956 - 1974: "Los años dorados" - -Desde la década de 1950, hasta mediados de la de 1970, el optimismo se elevó con la esperanza de que la AI pudiera resolver muchos problemas. En 1967, Marvin Minsky declaró con seguridad que "dentro de una generación ... el problema de crear 'inteligencia artificial' estará resuelto en gran medida." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -La investigación del procesamiento del lenguaje natural floreció, la búsqueda se refinó y se hizo más poderosa, y el concepto de 'micro-mundos' fue creado, donde se completaban tareas simples utilizando instrucciones en lenguaje sencillo. - -La investigación estuvo bien financiada por agencias gubernamentales, se realizaron avances en computación y algoritmos, y se construyeron prototipos de máquinas inteligentes. Algunas de esta máquinas incluyen: - -* [Shakey la robot](https://wikipedia.org/wiki/Shakey_the_robot), que podría maniobrar y decidir cómo realizar las tareas de forma 'inteligente'. - - ![Shakey, un robot inteligente](images/shakey.jpg) - > Shakey en 1972 - -* Eliza, unas de las primeras 'chatterbot', podía conversar con las personas y actuar como un 'terapeuta' primitivo. Aprenderá más sobre Eliza en las lecciones de NLP. - - ![Eliza, un bot](images/eliza.png) - > Una versión de Eliza, un chatbot - -* "Blocks world" era un ejemplo de micro-world donde los bloques se podían apilar y ordenar, y se podían probar experimentos en máquinas de enseñanza para tomar decisiones. Los avances creados con librerías como [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ayudaron a inpulsar el procesamiento del lenguaje natural. - - [![blocks world con SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world con SHRDLU") - - > 🎥 Haga clic en la imagen de arriba para ver un video: Blocks world con SHRDLU - -## 1974 - 1980: "Invierno de la AI" - -A mediados de la década de 1970, se hizo evidente que la complejidad de la fabricación de 'máquinas inteligentes' se había subestimado y que su promesa, dado la potencia computacional disponible, había sido exagerada. La financiación se agotó y la confianza en el campo se ralentizó. Algunos problemas que impactaron la confianza incluyeron: - -- **Limitaciones**. La potencia computacional era demasiado limitada. -- **Explosión combinatoria**. La cantidad de parámetros necesitados para entrenar creció exponencialmente a medida que se pedía más a las computadoras sin una evolución paralela de la potencia y la capacidad de cómputo. -- **Escasez de datos**. Hubo una escasez de datos que obstaculizó el proceso de pruebas, desarrollo y refinamiento de algoritmos. -- **¿Estamos haciendo las preguntas correctas?**. Las mismas preguntas que se estaban formulando comenzaron a cuestionarse. Los investigadores comenzaron a criticar sus métodos: - - Las pruebas de Turing se cuestionaron por medio, entre otras ideas, de la 'teoría de la habitación china' que postulaba que "programar una computadora digital puede hacerse que parezca que entiende el lenguaje, pero no puede producir una comprensión real" ([fuente](https://plato.stanford.edu/entries/chinese-room/)) - - Se cuestionó la ética de introducir inteligencias artificiales como la "terapeuta" Eliza en la sociedad. - -Al mismo tiempo, comenzaron a formarse varias escuelas de pensamiento de AI. Se estableció una dicotomía entre las prácticas ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). _Scruffy_ labs modificó los programas durante horas hasta que obtuvieron los objetivos deseados. _Neat_ labs "centrados en la lógica y la resolución de problemas formales". ELIZA y SHRDLU eran sistemas _scruffy_ muy conocidos. En la década de 1980, cuando surgió la demanda para hacer que los sistemas de aprendizaje fueran reproducibles, el enfoque _neat_ gradualmente tomó la vanguardia a medida que sus resultados eran más explicables. - -## Systemas expertos de la década de 1980 - -A medida que el campo creció, su beneficio para las empresas se hizo más claro, y en la década de 1980 también lo hizo la proliferación de 'sistemas expertos'. "Los sistemas expertos estuvieron entre las primeras formas verdaderamente exitosas de software de inteligencia artificial (IA)." ([fuente](https://wikipedia.org/wiki/Expert_system)). - -Este tipo de sistemas es en realidad _híbrido_, que consta parcialmente de un motor de reglas que define los requisitos comerciales, y un motor de inferencia que aprovechó el sistema de reglas para deducir nuevos hechos. - -En esta era también se prestó mayor atención a las redes neuronales. - -## 1987 - 1993: AI 'Chill' - -La proliferación de hardware de sistemas expertos especializados tuvo el desafortunado efecto de volverse demasiado especializado. El auge de las computadoras personales también compitió con estos grandes sistemas centralizados especializados. La democratización de la informática había comenzado, y finalmente, allanó el camino para la explosión moderna del big data. - -## 1993 - 2011 - -Esta época vió una nueva era para el ML y la IA para poder resolver problemas que anteriormente provenían de la falta de datos y de poder de cómputo. La cantidad de datos comenzó a aumentar rápidamente y a estar más disponible, para bien o para mal, especialmente con la llegada del smartphone alrededor del 2007. El poder computacional se expandió exponencialmente y los algoritmos evolucionaron al mismo tiempo. El campo comenzó a ganar madurez a medida que los días libres del pasado comenzaron a cristalizar en una verdadera disciplina. - -## Ahora - -Hoy en día, machine learning y la inteligencia artificial tocan casi todos los aspectos de nuestras vidas. Esta era requiere de una comprensión cuidadosa de los riesgos y los efectos potenciales de estos algoritmos en las vidas humanas. Como ha dicho Brad Smith de Microsoft, "La tecnología de la información plantea problemas que van al corazón de las protecciones fundamentales de los derechos humanos, como la privacidad y la libertad de expresión. Esos problemas aumentan las responsabilidades de las empresas de tecnología que crean estos productos. En nuestra opinión, también exige regulación gubernamental reflexiva y el desarrollo de normas sobre usos aceptables" ([fuente](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - -Queda por ver qué depara el futuro, pero es importante entender estos sistemas informáticos y el software y los algoritmos que ejecutan. Esperamos que este plan de estudios le ayude a comprender mejor para que pueda decidir por si mismo. - -[![La historia del deep learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "The history of deep learning") -> 🎥 Haga clic en la imagen de arriba para ver un video: Yann LeCun analiza la historia del deep learning en esta conferencia - ---- -## 🚀Desafío - -Sumérjase dentro de unos de estos momentos históricos y aprenda más sobre las personas detrás de ellos. Hay personajes fascinantes y nunca ocurrió ningún descubrimiento científico en un vacío cultural. ¿Qué descubres? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4?loc=es) - -## Revisión y autoestudio - -Aquí hay elementos para ver y escuchar: - -[Este podcast donde Amy Boyd habla sobre la evolución de la IA](http://runasradio.com/Shows/Show/739) - -[![La historia de la IA por Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "La historia de la IA por Amy Boyd") - -## Tarea - -[Crea un timeline](assignment.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.fr.md b/1-Introduction/2-history-of-ML/translations/README.fr.md deleted file mode 100644 index d9ecad4f..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.fr.md +++ /dev/null @@ -1,117 +0,0 @@ -# Histoire du Machine Learning (apprentissage automatique) - -![Résumé de l'histoire du machine learning dans un sketchnote](../../../sketchnotes/ml-history.png) -> Sketchnote de [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quizz préalable](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3?loc=fr) - -Dans cette leçon, nous allons parcourir les principales étapes de l'histoire du machine learning et de l'intelligence artificielle. - -L'histoire de l'intelligence artificielle, l'IA, en tant que domaine est étroitement liée à l'histoire du machine learning, car les algorithmes et les avancées informatiques qui sous-tendent le ML alimentent le développement de l'IA. Bien que ces domaines en tant que domaines de recherches distincts ont commencé à se cristalliser dans les années 1950, il est important de rappeler que les [découvertes algorithmiques, statistiques, mathématiques, informatiques et techniques](https://wikipedia.org/wiki/Timeline_of_machine_learning) ont précédé et chevauchait cette époque. En fait, le monde réfléchit à ces questions depuis [des centaines d'années](https://fr.wikipedia.org/wiki/Histoire_de_l%27intelligence_artificielle) : cet article traite des fondements intellectuels historiques de l'idée d'une « machine qui pense ». - -## Découvertes notables - -- 1763, 1812 [théorème de Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) et ses prédécesseurs. Ce théorème et ses applications sous-tendent l'inférence, décrivant la probabilité qu'un événement se produise sur la base de connaissances antérieures. -- 1805 [Théorie des moindres carrés](https://wikipedia.org/wiki/Least_squares) par le mathématicien français Adrien-Marie Legendre. Cette théorie, que vous découvrirez dans notre unité Régression, aide à l'ajustement des données. -- 1913 [Chaînes de Markov](https://wikipedia.org/wiki/Markov_chain) du nom du mathématicien russe Andrey Markov sont utilisées pour décrire une séquence d'événements possibles basée sur un état antérieur. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) est un type de classificateur linéaire inventé par le psychologue américain Frank Rosenblatt qui sous-tend les progrès de l'apprentissage en profondeur. -- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) est un algorithme conçu à l'origine pour cartographier les itinéraires. Dans un contexte ML, il est utilisé pour détecter des modèles. -- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) est utilisé pour former des [réseaux de neurones feedforward (propagation avant)](https://fr.wikipedia.org/wiki/R%C3%A9seau_de_neurones_%C3%A0_propagation_avant). -- 1982 [Réseaux de neurones récurrents](https://wikipedia.org/wiki/Recurrent_neural_network) sont des réseaux de neurones artificiels dérivés de réseaux de neurones à réaction qui créent des graphes temporels. - -✅ Faites une petite recherche. Quelles autres dates sont marquantes dans l'histoire du ML et de l'IA ? - -## 1950 : Des machines qui pensent - -Alan Turing, une personne vraiment remarquable qui a été élue [par le public en 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) comme le plus grand scientifique du 20e siècle, est reconnu pour avoir aidé à jeter les bases du concept d'une "machine qui peut penser". Il a lutté avec ses opposants et son propre besoin de preuves empiriques de sa théorie en créant le [Test de Turing] (https://www.bbc.com/news/technology-18475646), que vous explorerez dans nos leçons de NLP (TALN en français). - -## 1956 : Projet de recherche d'été à Dartmouth - -« Le projet de recherche d'été de Dartmouth sur l'intelligence artificielle a été un événement fondateur pour l'intelligence artificielle en tant que domaine », et c'est ici que le terme « intelligence artificielle » a été inventé ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Chaque aspect de l'apprentissage ou toute autre caractéristique de l'intelligence peut en principe être décrit si précisément qu'une machine peut être conçue pour les simuler. - -Le chercheur en tête, le professeur de mathématiques John McCarthy, espérait « procéder sur la base de la conjecture selon laquelle chaque aspect de l'apprentissage ou toute autre caractéristique de l'intelligence peut en principe être décrit avec une telle précision qu'une machine peut être conçue pour les simuler ». Les participants comprenaient une autre sommité dans le domaine, Marvin Minsky. - -L'atelier est crédité d'avoir initié et encouragé plusieurs discussions, notamment « l'essor des méthodes symboliques, des systèmes spécialisés sur des domaines limités (premiers systèmes experts) et des systèmes déductifs par rapport aux systèmes inductifs ». ([source](https://fr.wikipedia.org/wiki/Conf%C3%A9rence_de_Dartmouth)). - -## 1956 - 1974 : "Les années d'or" - -Des années 50 au milieu des années 70, l'optimisme était au rendez-vous en espérant que l'IA puisse résoudre de nombreux problèmes. En 1967, Marvin Minsky a déclaré avec assurance que « Dans une génération... le problème de la création d'"intelligence artificielle" sera substantiellement résolu. » (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -La recherche sur le Natural Language Processing (traitement du langage naturel en français) a prospéré, la recherche a été affinée et rendue plus puissante, et le concept de « micro-mondes » a été créé, où des tâches simples ont été effectuées en utilisant des instructions en langue naturelle. - -La recherche a été bien financée par les agences gouvernementales, des progrès ont été réalisés dans le calcul et les algorithmes, et des prototypes de machines intelligentes ont été construits. Certaines de ces machines incluent : - -* [Shakey le robot](https://fr.wikipedia.org/wiki/Shakey_le_robot), qui pouvait manœuvrer et décider comment effectuer des tâches « intelligemment ». - - ![Shakey, un robot intelligent](../images/shakey.jpg) - > Shaky en 1972 - -* Eliza, une des premières « chatbot », pouvait converser avec les gens et agir comme une « thérapeute » primitive. Vous en apprendrez plus sur Eliza dans les leçons de NLP. - - ![Eliza, un bot](../images/eliza.png) - > Une version d'Eliza, un chatbot - -* Le « monde des blocs » était un exemple de micro-monde où les blocs pouvaient être empilés et triés, et où des expériences d'apprentissages sur des machines, dans le but qu'elles prennent des décisions, pouvaient être testées. Les avancées réalisées avec des bibliothèques telles que [SHRDLU](https://fr.wikipedia.org/wiki/SHRDLU) ont contribué à faire avancer le natural language processing. - - [![Monde de blocs avec SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "Monde de blocs avec SHRDLU" ) - - > 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Blocks world with SHRDLU - -## 1974 - 1980 : « l'hiver de l'IA » - -Au milieu des années 1970, il était devenu évident que la complexité de la fabrication de « machines intelligentes » avait été sous-estimée et que sa promesse, compte tenu de la puissance de calcul disponible, avait été exagérée. Les financements se sont taris et la confiance dans le domaine s'est ralentie. Parmi les problèmes qui ont eu un impact sur la confiance, citons : - -- **Restrictions**. La puissance de calcul était trop limitée. -- **Explosion combinatoire**. Le nombre de paramètres à former augmentait de façon exponentielle à mesure que l'on en demandait davantage aux ordinateurs, sans évolution parallèle de la puissance et de la capacité de calcul. -- **Pénurie de données**. Il y avait un manque de données qui a entravé le processus de test, de développement et de raffinement des algorithmes. -- **Posions-nous les bonnes questions ?**. Les questions mêmes, qui étaient posées, ont commencé à être remises en question. Les chercheurs ont commencé à émettre des critiques sur leurs approches : - - Les tests de Turing ont été remis en question au moyen, entre autres, de la « théorie de la chambre chinoise » qui postulait que « la programmation d'un ordinateur numérique peut faire croire qu'il comprend le langage mais ne peut pas produire une compréhension réelle ». ([source](https://plato.stanford.edu/entries/chinese-room/)) - - L'éthique de l'introduction d'intelligences artificielles telles que la "thérapeute" ELIZA dans la société a été remise en cause. - -Dans le même temps, diverses écoles de pensée sur l'IA ont commencé à se former. Une dichotomie a été établie entre les pratiques IA ["scruffy" et "neat"](https://wikipedia.org/wiki/Neats_and_scruffies). Les laboratoires _Scruffy_ peaufinaient leurs programmes pendant des heures jusqu'à ce qu'ils obtiennent les résultats souhaités. Les laboratoires _Neat_ "se concentraient sur la logique et la résolution formelle de problèmes". ELIZA et SHRDLU étaient des systèmes _scruffy_ bien connus. Dans les années 1980, alors qu'émergeait la demande de rendre les systèmes ML reproductibles, l'approche _neat_ a progressivement pris le devant de la scène car ses résultats sont plus explicables. - -## 1980 : Systèmes experts - -Au fur et à mesure que le domaine s'est développé, ses avantages pour les entreprises sont devenus plus clairs, particulièrement via les « systèmes experts » dans les années 1980. "Les systèmes experts ont été parmi les premières formes vraiment réussies de logiciels d'intelligence artificielle (IA)." ([source](https://fr.wikipedia.org/wiki/Syst%C3%A8me_expert)). - -Ce type de système est en fait _hybride_, composé en partie d'un moteur de règles définissant les exigences métier et d'un moteur d'inférence qui exploite le système de règles pour déduire de nouveaux faits. - -Cette époque a également vu une attention croissante accordée aux réseaux de neurones. - -## 1987 - 1993 : IA « Chill » - -La prolifération du matériel spécialisé des systèmes experts a eu pour effet malheureux de devenir trop spécialisée. L'essor des ordinateurs personnels a également concurrencé ces grands systèmes spécialisés et centralisés. La démocratisation de l'informatique a commencé et a finalement ouvert la voie à l'explosion des mégadonnées. - -## 1993 - 2011 - -Cette époque a vu naître une nouvelle ère pour le ML et l'IA afin de résoudre certains des problèmes qui n'avaient pu l'être plus tôt par le manque de données et de puissance de calcul. La quantité de données a commencé à augmenter rapidement et à devenir plus largement disponibles, pour le meilleur et pour le pire, en particulier avec l'avènement du smartphone vers 2007. La puissance de calcul a augmenté de façon exponentielle et les algorithmes ont évolué parallèlement. Le domaine a commencé à gagner en maturité alors que l'ingéniosité a commencé à se cristalliser en une véritable discipline. - -## À présent - -Aujourd'hui, le machine learning et l'IA touchent presque tous les aspects de notre vie. Cette ère nécessite une compréhension approfondie des risques et des effets potentiels de ces algorithmes sur les vies humaines. Comme l'a déclaré Brad Smith de Microsoft, « les technologies de l'information soulèvent des problèmes qui vont au cœur des protections fondamentales des droits de l'homme comme la vie privée et la liberté d'expression. Ces problèmes accroissent la responsabilité des entreprises technologiques qui créent ces produits. À notre avis, ils appellent également à une réglementation gouvernementale réfléchie et au développement de normes autour des utilisations acceptables" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - -Reste à savoir ce que l'avenir nous réserve, mais il est important de comprendre ces systèmes informatiques ainsi que les logiciels et algorithmes qu'ils exécutent. Nous espérons que ce programme vous aidera à mieux les comprendre afin que vous puissiez décider par vous-même. - -[![L'histoire du Deep Learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "L'histoire du Deep Learning") -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Yann LeCun discute de l'histoire du deep learning dans cette conférence - ---- -## 🚀Challenge - -Plongez dans l'un de ces moments historiques et apprenez-en plus sur les personnes derrière ceux-ci. Il y a des personnalités fascinantes, et aucune découverte scientifique n'a jamais été créée avec un vide culturel. Que découvrez-vous ? - -## [Quiz de validation des connaissances](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4?loc=fr) - -## Révision et auto-apprentissage - -Voici quelques articles à regarder et à écouter : - -[Ce podcast où Amy Boyd discute de l'évolution de l'IA](http://runasradio.com/Shows/Show/739) - -[![L'histoire de l'IA par Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "L'histoire de l'IA par Amy Boyd") - -## Devoir - -[Créer une frise chronologique](assignment.fr.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.id.md b/1-Introduction/2-history-of-ML/translations/README.id.md deleted file mode 100644 index 351dd17d..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.id.md +++ /dev/null @@ -1,116 +0,0 @@ -# Sejarah Machine Learning - -![Ringkasan dari Sejarah Machine Learning dalam sebuah catatan sketsa](../../../sketchnotes/ml-history.png) -> Catatan sketsa oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz Pra-Pelajaran](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - -Dalam pelajaran ini, kita akan membahas tonggak utama dalam sejarah Machine Learning dan Artificial Intelligence. - -Sejarah Artifical Intelligence, AI, sebagai bidang terkait dengan sejarah Machine Learning, karena algoritma dan kemajuan komputasi yang mendukung ML dimasukkan ke dalam pengembangan AI. Penting untuk diingat bahwa, meski bidang-bidang ini sebagai bidang-bidang penelitian yang berbeda mulai terbentuk pada 1950-an, [algoritmik, statistik, matematik, komputasi dan penemuan teknis](https://wikipedia.org/wiki/Timeline_of_machine_learning) penting sudah ada sebelumnya, dan saling tumpang tindih di era ini. Faktanya, orang-orang telah memikirkan pertanyaan-pertanyaan ini selama [ratusan tahun](https://wikipedia.org/wiki/History_of_artificial_intelligence): artikel ini membahas dasar-dasar intelektual historis dari gagasan 'mesin yang berpikir'. - -## Penemuan penting - -- 1763, 1812 [Bayes Theorem](https://wikipedia.org/wiki/Bayes%27_theorem) dan para pendahulu. Teorema ini dan penerapannya mendasari inferensi, mendeskripsikan kemungkinan suatu peristiwa terjadi berdasarkan pengetahuan sebelumnya. -- 1805 [Least Square Theory](https://wikipedia.org/wiki/Least_squares) oleh matematikawan Perancis Adrien-Marie Legendre. Teori ini yang akan kamu pelajari di unit Regresi, ini membantu dalam *data fitting*. -- 1913 [Markov Chains](https://wikipedia.org/wiki/Markov_chain) dinamai dengan nama matematikawan Rusia, Andrey Markov, digunakan untuk mendeskripsikan sebuah urutan dari kejadian-kejadian yang mungkin terjadi berdasarkan kondisi sebelumnya. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) adalah sebuah tipe dari *linear classifier* yang ditemukan oleh psikolog Amerika, Frank Rosenblatt, yang mendasari kemajuan dalam *Deep Learning*. -- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) adalah sebuah algoritma yang pada awalnya didesain untuk memetakan rute. Dalam konteks ML, ini digunakan untuk mendeteksi berbagai pola. -- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) digunakan untuk melatih [feedforward neural networks](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network) adalah *artificial neural networks* yang berasal dari *feedforward neural networks* yang membuat grafik sementara. - -✅ Lakukan sebuah riset kecil. Tanggal berapa lagi yang merupakan tanggal penting dalam sejarah ML dan AI? -## 1950: Mesin yang berpikir - -Alan Turing, merupakan orang luar biasa yang terpilih oleh [publik di tahun 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) sebagai ilmuwan terhebat di abad 20, diberikan penghargaan karena membantu membuat fondasi dari sebuah konsep 'mesin yang bisa berpikir', Dia berjuang menghadapi orang-orang yang menentangnya dan keperluannya sendiri untuk bukti empiris dari konsep ini dengan membuat [Turing Test](https://www.bbc.com/news/technology-18475646), yang mana akan kamu jelajahi di pelajaran NLP kami. - -## 1956: Proyek Riset Musim Panas Dartmouth - -"Proyek Riset Musim Panas Dartmouth pada *artificial intelligence* merupakan sebuah acara penemuan untuk *artificial intelligence* sebagai sebuah bidang," dan dari sinilah istilah '*artificial intelligence*' diciptakan ([sumber](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Setiap aspek pembelajaran atau fitur kecerdasan lainnya pada prinsipnya dapat dideskripsikan dengan sangat tepat sehingga sebuah mesin dapat dibuat untuk mensimulasikannya. - -Ketua peneliti, profesor matematika John McCarthy, berharap "untuk meneruskan dasar dari dugaan bahwa setiap aspek pembelajaran atau fitur kecerdasan lainnya pada prinsipnya dapat dideskripsikan dengan sangat tepat sehingga mesin dapat dibuat untuk mensimulasikannya." Marvin Minsky, seorang tokoh terkenal di bidang ini juga termasuk sebagai peserta penelitian. - -Workshop ini dipuji karena telah memprakarsai dan mendorong beberapa diskusi termasuk "munculnya metode simbolik, sistem yang berfokus pada domain terbatas (sistem pakar awal), dan sistem deduktif versus sistem induktif." ([sumber](https://wikipedia.org/wiki/Dartmouth_workshop)). - -## 1956 - 1974: "Tahun-tahun Emas" - -Dari tahun 1950-an hingga pertengahan 70-an, optimisme memuncak dengan harapan bahwa AI dapat memecahkan banyak masalah. Pada tahun 1967, Marvin Minsky dengan yakin menyatakan bahwa "Dalam satu generasi ... masalah menciptakan '*artificial intelligence*' akan terpecahkan secara substansial." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -Penelitian *natural language processing* berkembang, pencarian disempurnakan dan dibuat lebih *powerful*, dan konsep '*micro-worlds*' diciptakan, di mana tugas-tugas sederhana diselesaikan menggunakan instruksi bahasa sederhana. - -Penelitian didanai dengan baik oleh lembaga pemerintah, banyak kemajuan dibuat dalam komputasi dan algoritma, dan prototipe mesin cerdas dibangun. Beberapa mesin tersebut antara lain: - -* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), yang bisa bermanuver dan memutuskan bagaimana melakukan tugas-tugas secara 'cerdas'. - - ![Shakey, an intelligent robot](../images/shakey.jpg) - > Shakey pada 1972 - -* Eliza, sebuah 'chatterbot' awal, dapat mengobrol dengan orang-orang dan bertindak sebagai 'terapis' primitif. Kamu akan belajar lebih banyak tentang Eliza dalam pelajaran NLP. - - ![Eliza, a bot](../images/eliza.png) - > Sebuah versi dari Eliza, sebuah *chatbot* - -* "Blocks world" adalah contoh sebuah *micro-world* dimana balok dapat ditumpuk dan diurutkan, dan pengujian eksperimen mesin pengajaran untuk membuat keputusan dapat dilakukan. Kemajuan yang dibuat dengan *library-library* seperti [SHRDLU](https://wikipedia.org/wiki/SHRDLU) membantu mendorong kemajuan pemrosesan bahasa. - - [![blocks world dengan SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world dengan SHRDLU") - - > 🎥 Klik gambar diatas untuk menonton video: Blocks world with SHRDLU - -## 1974 - 1980: "Musim Dingin AI" - -Pada pertengahan 1970-an, semakin jelas bahwa kompleksitas pembuatan 'mesin cerdas' telah diremehkan dan janjinya, mengingat kekuatan komputasi yang tersedia, telah dilebih-lebihkan. Pendanaan telah habis dan kepercayaan dalam bidang ini menurun. Beberapa masalah yang memengaruhi kepercayaan diri termasuk: - -- **Keterbatasan**. Kekuatan komputasi terlalu terbatas. -- **Ledakan kombinatorial**. Jumlah parameter yang perlu dilatih bertambah secara eksponensial karena lebih banyak hal yang diminta dari komputer, tanpa evolusi paralel dari kekuatan dan kemampuan komputasi. -- **Kekurangan data**. Adanya kekurangan data yang menghalangi proses pengujian, pengembangan, dan penyempurnaan algoritma. -- **Apakah kita menanyakan pertanyaan yang tepat?**. Pertanyaan-pertanyaan yang diajukan pun mulai dipertanyakan kembali. Para peneliti mulai melontarkan kritik tentang pendekatan mereka - - Tes Turing mulai dipertanyakan, di antara ide-ide lain, dari 'teori ruang Cina' yang mengemukakan bahwa, "memprogram komputer digital mungkin membuatnya tampak memahami bahasa tetapi tidak dapat menghasilkan pemahaman yang sebenarnya." ([sumber](https://plato.stanford.edu/entries/chinese-room/)) - - Tantangan etika ketika memperkenalkan kecerdasan buatan seperti si "terapis" ELIZA ke dalam masyarakat. - -Pada saat yang sama, berbagai aliran pemikiran AI mulai terbentuk. Sebuah dikotomi didirikan antara praktik ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). Lab _Scruffy_ mengubah program selama berjam-jam sampai mendapat hasil yang diinginkan. Lab _Neat_ "berfokus pada logika dan penyelesaian masalah formal". ELIZA dan SHRDLU adalah sistem _scruffy_ yang terkenal. Pada tahun 1980-an, karena perkembangan permintaan untuk membuat sistem ML yang dapat direproduksi, pendekatan _neat_ secara bertahap menjadi yang terdepan karena hasilnya lebih dapat dijelaskan. - -## 1980s Sistem Pakar - -Seiring berkembangnya bidang ini, manfaatnya bagi bisnis menjadi lebih jelas, dan begitu pula dengan menjamurnya 'sistem pakar' pada tahun 1980-an. "Sistem pakar adalah salah satu bentuk perangkat lunak artificial intelligence (AI) pertama yang benar-benar sukses." ([sumber](https://wikipedia.org/wiki/Expert_system)). - -Tipe sistem ini sebenarnya adalah _hybrid_, sebagian terdiri dari mesin aturan yang mendefinisikan kebutuhan bisnis, dan mesin inferensi yang memanfaatkan sistem aturan untuk menyimpulkan fakta baru. - -Pada era ini juga terlihat adanya peningkatan perhatian pada jaringan saraf. - -## 1987 - 1993: AI 'Chill' - -Perkembangan perangkat keras sistem pakar terspesialisasi memiliki efek yang tidak menguntungkan karena menjadi terlalu terspesialiasasi. Munculnya komputer pribadi juga bersaing dengan sistem yang besar, terspesialisasi, dan terpusat ini. Demokratisasi komputasi telah dimulai, dan pada akhirnya membuka jalan untuk ledakan modern dari *big data*. - -## 1993 - 2011 - -Pada zaman ini memperlihatkan era baru bagi ML dan AI untuk dapat menyelesaikan beberapa masalah yang sebelumnya disebabkan oleh kurangnya data dan daya komputasi. Jumlah data mulai meningkat dengan cepat dan tersedia secara luas, terlepas dari baik dan buruknya, terutama dengan munculnya *smartphone* sekitar tahun 2007. Daya komputasi berkembang secara eksponensial, dan algoritma juga berkembang saat itu. Bidang ini mulai mengalami kedewasaan karena hari-hari yang tidak beraturan di masa lalu mulai terbentuk menjadi disiplin yang sebenarnya. - -## Sekarang - -Saat ini, *machine learning* dan AI hampir ada di setiap bagian dari kehidupan kita. Era ini menuntut pemahaman yang cermat tentang risiko dan efek potensi dari berbagai algoritma yang ada pada kehidupan manusia. Seperti yang telah dinyatakan oleh Brad Smith dari Microsoft, "Teknologi informasi mengangkat isu-isu yang menjadi inti dari perlindungan hak asasi manusia yang mendasar seperti privasi dan kebebasan berekspresi. Masalah-masalah ini meningkatkan tanggung jawab bagi perusahaan teknologi yang menciptakan produk-produk ini. Dalam pandangan kami, mereka juga menyerukan peraturan pemerintah yang bijaksana dan untuk pengembangan norma-norma seputar penggunaan yang wajar" ([sumber](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - -Kita masih belum tahu apa yang akan terjadi di masa depan, tetapi penting untuk memahami sistem komputer dan perangkat lunak serta algoritma yang dijalankannya. Kami berharap kurikulum ini akan membantu kamu untuk mendapatkan pemahaman yang lebih baik sehingga kamu dapat memutuskan sendiri. - -[![Sejarah Deep Learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Sejarah Deep Learning") -> 🎥 Klik gambar diatas untuk menonton video: Yann LeCun mendiskusikan sejarah dari Deep Learning dalam pelajaran ini - ---- -## 🚀Tantangan - -Gali salah satu momen bersejarah ini dan pelajari lebih lanjut tentang orang-orang di baliknya. Ada karakter yang menarik, dan tidak ada penemuan ilmiah yang pernah dibuat dalam kekosongan budaya. Apa yang kamu temukan? - -## [Quiz Pasca-Pelajaran](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - -## Ulasan & Belajar Mandiri - -Berikut adalah item untuk ditonton dan didengarkan: - -[Podcast dimana Amy Boyd mendiskusikan evolusi dari AI](http://runasradio.com/Shows/Show/739) - -[![Sejarah AI oleh Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Sejarah AI oleh Amy Boyd") - -## Tugas - -[Membuat sebuah *timeline*](assignment.id.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.it.md b/1-Introduction/2-history-of-ML/translations/README.it.md deleted file mode 100644 index f95b542c..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.it.md +++ /dev/null @@ -1,118 +0,0 @@ -# Storia di machine learning - -![Riepilogo della storia di machine learning in uno sketchnote](../../../sketchnotes/ml-history.png) -> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/?loc=it) - -In questa lezione, si camminerà attraverso le principali pietre miliari nella storia di machine learning e dell'intelligenza artificiale. - -La storia dell'intelligenza artificiale, AI, come campo è intrecciata con la storia di machine learning, poiché gli algoritmi e i progressi computazionali alla base di machine learning hanno contribuito allo sviluppo dell'intelligenza artificiale. È utile ricordare che, mentre questi campi come distinte aree di indagine hanno cominciato a cristallizzarsi negli anni '50, importanti [scoperte algoritmiche, statistiche, matematiche, computazionali e tecniche](https://wikipedia.org/wiki/Timeline_of_machine_learning) hanno preceduto e si sono sovrapposte a questa era. In effetti, le persone hanno riflettuto su queste domande per [centinaia di anni](https://wikipedia.org/wiki/History_of_artificial_intelligence); questo articolo discute le basi intellettuali storiche dell'idea di una "macchina pensante". - -## Scoperte rilevanti - -- 1763, 1812 [Teorema di Bayes](https://it.wikipedia.org/wiki/Teorema_di_Bayes) e suoi predecessori. Questo teorema e le sue applicazioni sono alla base dell'inferenza, descrivendo la probabilità che un evento si verifichi in base alla conoscenza precedente. -- 1805 [Metodo dei Minimi Quadrati](https://it.wikipedia.org/wiki/Metodo_dei_minimi_quadrati) del matematico francese Adrien-Marie Legendre. Questa teoria, che verrà trattata nell'unità Regressione, aiuta nell'adattamento dei dati. -- 1913 [Processo Markoviano](https://it.wikipedia.org/wiki/Processo_markoviano) dal nome del matematico russo Andrey Markov è usato per descrivere una sequenza di possibili eventi basati su uno stato precedente. -- 1957 [Percettrone](https://it.wikipedia.org/wiki/Percettrone) è un tipo di classificatore lineare inventato dallo psicologo americano Frank Rosenblatt che sta alla base dei progressi nel deep learning. -- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) è un algoritmo originariamente progettato per mappare i percorsi. In un contesto ML viene utilizzato per rilevare i modelli. -- 1970 [La Retropropagazione dell'Errore](https://it.wikipedia.org/wiki/Retropropagazione_dell'errore) viene utilizzata per addestrare [le reti neurali feed-forward](https://it.wikipedia.org/wiki/Rete_neurale_feed-forward). -- Le [Reti Neurali Ricorrenti](https://it.wikipedia.org/wiki/Rete_neurale_ricorrente) del 1982 sono reti neurali artificiali derivate da reti neurali feedforward che creano grafici temporali. - -✅ Fare una piccola ricerca. Quali altre date si distinguono come fondamentali nella storia del machine learning e dell'intelligenza artificiale? -## 1950: Macchine che pensano - -Alan Turing, una persona davvero notevole che è stata votata [dal pubblico nel 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) come il più grande scienziato del XX secolo, è accreditato per aver contribuito a gettare le basi per il concetto di "macchina in grado di pensare". Ha affrontato gli oppositori e il suo stesso bisogno di prove empiriche di questo concetto in parte creando il [Test di Turing](https://www.bbc.com/news/technology-18475646), che verrà esplorato nelle lezioni di NLP (elaborazione del linguaggio naturale). - -## 1956: Progetto di Ricerca Estivo Dartmouth - -"Il Dartmouth Summer Research Project sull'intelligenza artificiale è stato un evento seminale per l'intelligenza artificiale come campo", qui è stato coniato il termine "intelligenza artificiale" ([fonte](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> In linea di principio, ogni aspetto dell'apprendimento o qualsiasi altra caratteristica dell'intelligenza può essere descritto in modo così preciso che si può costruire una macchina per simularlo. - -Il ricercatore capo, il professore di matematica John McCarthy, sperava "di procedere sulla base della congettura che ogni aspetto dell'apprendimento o qualsiasi altra caratteristica dell'intelligenza possa in linea di principio essere descritta in modo così preciso che si possa costruire una macchina per simularlo". I partecipanti includevano un altro luminare nel campo, Marvin Minsky. - -Il workshop è accreditato di aver avviato e incoraggiato diverse discussioni tra cui "l'ascesa di metodi simbolici, sistemi focalizzati su domini limitati (primi sistemi esperti) e sistemi deduttivi contro sistemi induttivi". ([fonte](https://wikipedia.org/wiki/Dartmouth_workshop)). - -## 1956 - 1974: "Gli anni d'oro" - -Dagli anni '50 fino alla metà degli anni '70, l'ottimismo era alto nella speranza che l'AI potesse risolvere molti problemi. Nel 1967, Marvin Minsky dichiarò con sicurezza che "Entro una generazione... il problema della creazione di 'intelligenza artificiale' sarà sostanzialmente risolto". (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -La ricerca sull'elaborazione del linguaggio naturale è fiorita, la ricerca è stata perfezionata e resa più potente ed è stato creato il concetto di "micro-mondi", in cui compiti semplici sono stati completati utilizzando istruzioni in linguaggio semplice. - -La ricerca è stata ben finanziata dalle agenzie governative, sono stati fatti progressi nel calcolo e negli algoritmi e sono stati costruiti prototipi di macchine intelligenti. Alcune di queste macchine includono: - -* [Shakey il robot](https://wikipedia.org/wiki/Shakey_the_robot), che poteva manovrare e decidere come eseguire i compiti "intelligentemente". - - ![Shakey, un robot intelligente](../images/shakey.jpg) - > Shakey nel 1972 - -* Eliza, una delle prime "chatterbot", poteva conversare con le persone e agire come una "terapeuta" primitiva. Si Imparerà di più su Eliza nelle lezioni di NLP. - - ![Eliza, un bot](../images/eliza.png) - > Una versione di Eliza, un chatbot - -* Il "mondo dei blocchi" era un esempio di un micromondo in cui i blocchi potevano essere impilati e ordinati e si potevano testare esperimenti su macchine per insegnare a prendere decisioni. I progressi realizzati con librerie come [SHRDLU](https://it.wikipedia.org/wiki/SHRDLU) hanno contribuito a far progredire l'elaborazione del linguaggio. - - [![Il mondo dei blocchi con SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "Il mondo dei blocchi con SHRDLU") - - > 🎥 Fare clic sull'immagine sopra per un video: Blocks world con SHRDLU - -## 1974 - 1980: "L'inverno dell'AI" - -Verso la metà degli anni '70, era diventato evidente che la complessità della creazione di "macchine intelligenti" era stata sottovalutata e che la sua promessa, data la potenza di calcolo disponibile, era stata esagerata. I finanziamenti si sono prosciugati e la fiducia nel settore è rallentata. Alcuni problemi che hanno influito sulla fiducia includono: - -- **Limitazioni**. La potenza di calcolo era troppo limitata. -- **Esplosione combinatoria**. La quantità di parametri necessari per essere addestrati è cresciuta in modo esponenziale man mano che veniva chiesto di più ai computer, senza un'evoluzione parallela della potenza e delle capacità di calcolo. -- **Scarsità di dati**. C'era una scarsità di dati che ostacolava il processo di test, sviluppo e perfezionamento degli algoritmi. -- **Stiamo facendo le domande giuste?**. Le stesse domande che venivano poste cominciarono ad essere messe in discussione. I ricercatori hanno iniziato a criticare i loro approcci: - - I test di Turing furono messi in discussione attraverso, tra le altre idee, la "teoria della stanza cinese" che postulava che "la programmazione di un computer digitale può far sembrare che capisca il linguaggio ma non potrebbe produrre una vera comprensione". ([fonte](https://plato.stanford.edu/entries/chinese-room/)) - - L'etica dell'introduzione di intelligenze artificiali come la "terapeuta" ELIZA nella società è stata messa in discussione. - -Allo stesso tempo, iniziarono a formarsi varie scuole di pensiero sull'AI. È stata stabilita una dicotomia tra pratiche ["scruffy" contro "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). I laboratori _scruffy_ ottimizzavano i programmi per ore fino a quando non ottenevano i risultati desiderati. I laboratori _Neat_ "si focalizzavano sulla logica e sulla risoluzione formale dei problemi". ELIZA e SHRDLU erano ben noti _sistemi scruffy_. Negli anni '80, quando è emersa la richiesta di rendere riproducibili i sistemi ML, l'_approccio neat_ ha gradualmente preso il sopravvento in quanto i suoi risultati sono più spiegabili. - -## Sistemi esperti degli anni '80 - -Man mano che il settore cresceva, i suoi vantaggi per le imprese diventavano più chiari e negli anni '80 lo stesso accadeva con la proliferazione di "sistemi esperti". "I sistemi esperti sono stati tra le prime forme di software di intelligenza artificiale (AI) di vero successo". ([fonte](https://wikipedia.org/wiki/Expert_system)). - -Questo tipo di sistema è in realtà _ibrido_, costituito in parte da un motore di regole che definisce i requisiti aziendali e un motore di inferenza che sfrutta il sistema di regole per dedurre nuovi fatti. - -Questa era ha visto anche una crescente attenzione rivolta alle reti neurali. - -## 1987 - 1993: AI 'Chill' - -La proliferazione di hardware specializzato per sistemi esperti ha avuto lo sfortunato effetto di diventare troppo specializzato. L'ascesa dei personal computer ha anche gareggiato con questi grandi sistemi centralizzati specializzati. La democratizzazione dell'informatica era iniziata e alla fine ha spianato la strada alla moderna esplosione dei big data. - -## 1993 - 2011 - -Questa epoca ha visto una nuova era per ML e AI per essere in grado di risolvere alcuni dei problemi che erano stati causati in precedenza dalla mancanza di dati e potenza di calcolo. La quantità di dati ha iniziato ad aumentare rapidamente e a diventare più ampiamente disponibile, nel bene e nel male, soprattutto con l'avvento degli smartphone intorno al 2007. La potenza di calcolo si è ampliata in modo esponenziale e gli algoritmi si sono evoluti di pari passo. Il campo ha iniziato a maturare quando i giorni a ruota libera del passato hanno iniziato a cristallizzarsi in una vera disciplina. - -## Adesso - -Oggi, machine learning e intelligenza artificiale toccano quasi ogni parte della nostra vita. Questa era richiede un'attenta comprensione dei rischi e dei potenziali effetti di questi algoritmi sulle vite umane. Come ha affermato Brad Smith di Microsoft, "La tecnologia dell'informazione solleva questioni che vanno al cuore delle protezioni fondamentali dei diritti umani come la privacy e la libertà di espressione. Questi problemi aumentano la responsabilità delle aziende tecnologiche che creano questi prodotti. A nostro avviso, richiedono anche un'attenta regolamentazione del governo e lo sviluppo di norme sugli usi accettabili" ([fonte](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - -Resta da vedere cosa riserva il futuro, ma è importante capire questi sistemi informatici e il software e gli algoritmi che eseguono. Ci si augura che questo programma di studi aiuti ad acquisire una migliore comprensione in modo che si possa decidere in autonomia. - -[![La storia del deeplearningLa](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 " storia del deep learning") -> 🎥 Fare clic sull'immagine sopra per un video: Yann LeCun discute la storia del deep learning in questa lezione - ---- - -## 🚀 Sfida - -Approfondire uno di questi momenti storici e scoprire - di più sulle persone che stanno dietro ad essi. Ci sono personaggi affascinanti e nessuna scoperta scientifica è mai stata creata in un vuoto culturale. Cosa si è scoperto? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/?loc=it) - -## Revisione e Auto Apprendimento - -Ecco gli elementi da guardare e ascoltare: - -[Questo podcast in cui Amy Boyd discute l'evoluzione dell'AI](http://runasradio.com/Shows/Show/739) - -[![La storia dell'AI di Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "La storia dell'AI di Amy Boyd") - -## Compito - -[Creare una sequenza temporale](assignment.it.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.ja.md b/1-Introduction/2-history-of-ML/translations/README.ja.md deleted file mode 100644 index 780b1f85..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.ja.md +++ /dev/null @@ -1,114 +0,0 @@ -# 機械学習の歴史 - -![機械学習の歴史をまとめたスケッチ](../../../sketchnotes/ml-history.png) -> [Tomomi Imura](https://www.twitter.com/girlie_mac)によるスケッチ - -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3?loc=ja) - -この授業では、機械学習と人工知能の歴史における主要な出来事を紹介します。 - -人工知能(AI)の歴史は、機械学習の歴史と密接に関係しています。なぜならば、機械学習を支えるアルゴリズムと計算の進歩が、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)を作成することで戦いました。 - -## 1956: ダートマス・サマー・リサーチ・プロジェクト -ダートマス・サマー・リサーチ・プロジェクトは、分野としての人工知能にとって重要な出来事であり、ここで「人工知能」という言葉が作られました([出典](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)) - -> 学習やその他の知能のあらゆる側面は、原理的に非常に正確に記述することができるので、それをシミュレートする機械を作ることができる。 - -主任研究者である数学のジョン・マッカーシー教授は、「学習のあらゆる側面や知能のその他の特徴は、原理的に非常に正確に記述することができるので、それをシミュレートする機械を作ることができるという推測に基づいて進めていきたい」と考えていました。参加者の中には、この分野の著名人であるマービン・ミンスキーもいました。 - -このワークショップでは、「記号的手法の台頭、限定された領域に焦点を当てたシステム(初期のエキスパートシステム)、演繹的システムと帰納的システムの比較」などの議論が開始され、促進されたと評価されています。([出典](https://wikipedia.org/wiki/Dartmouth_workshop)) - -## 1956 - 1974: 黄金期 - -1950年代から70年代半ばまでは、AIがさまざまな問題を解決してくれるのではないかという楽観的な見方が広がっていました。1967年、マービン・ミンスキーは「一世代のうちに...『人工知能』を作るという問題は実質的に解決されるだろう」と自信を持って述べている。(Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -自然言語処理の研究が盛んになり、検索が洗練されてより強力になり、平易な言語による指示で簡単な作業をこなす「マイクロワールド」という概念が生まれた。 - -研究は政府機関から潤沢な資金が提供され、計算とアルゴリズムが進歩し、知的機械のプロトタイプが作られた。その中には次のようなものがある。 - -* 移動したり、タスクを実行する方法を「知的に」決定することができるロボット[「Shakey」](https://wikipedia.org/wiki/Shakey_the_robot) - - ![知的なロボットであるShakey](../images/shakey.jpg) - > 1972のShakey - -* 初期の「おしゃべりロボット」であるElizaは、人と会話することができ、原始的な「セラピスト」の役割を果たした。エリザについては、NLPのレッスンで詳しく説明します。 - - ![BotであるEliza](../images/eliza.png) - > チャットボットEliza - -* 「Blocks world」は、ブロックを積み上げたり並べ替えたりするマイクロワールドの一例で、機械に判断力を身につけさせる実験を行った。[SHRDLU](https://wikipedia.org/wiki/SHRDLU)をはじめとするライブラリの進歩は、言語処理の発展に大きく貢献した。 - - [![SHRDLUを用いたblocks world](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "SHRDLUを用いたblocks world") - - > 🎥 上の画像をクリックすると動画が見られます:"SHRDLUを用いたblocks world" - -## 1974 - 1980: AIの冬 - -1970年代半ばになると、「知的な機械」を作ることの複雑さが過小評価されていたことや、利用可能な計算能力を考慮すると、その将来性が過大評価されていたことが明らかになりました。資金が枯渇し、この分野への信頼が低下した。信頼性に影響を与えた問題には以下のようなものがある。: - -- **限界**. 計算能力の限界 -- **組み合わせの爆発**. 学習に必要なパラメータの量は、コンピュータに要求されることが多くなるにつれて指数関数的に増加しましたが、コンピュータの性能や能力は並行して進化しませんでした。 -- **データの少なさ**. データが不足していたため、アルゴリズムのテスト、開発、改良のプロセスが妨げられた。 -- **正しい質問をしているのかどうか**. 問いかけていた質問そのものが疑問視され始めた。研究者たちは、自分たちのアプローチに批判的な意見を持つようになった。 - - チューリングテストは、「コンピュータをプログラミングすることで、言語を理解しているように見せかけることはできるが、本当の意味での理解はできない」とする「チャイニーズルーム理論」などによって、疑問視されるようになった。([出典](https://plato.stanford.edu/entries/chinese-room/)) - - セラピストとしてELIZAのような人工知能を社会に導入することの倫理性が問われた。 -それと同時に、さまざまなAIの流派が形成され始めました。一つは、["Scruffy"と "Neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies)という二分法である。Scruffyな研究室では、目的の結果が得られるまで何時間もプログラムをいじっていた一方、neatな研究室では、論理と形式的な問題解決を重視する。ELIZAやSHRDLUなどが有名なScruffyであるシステムである。1980年代に入って、MLシステムの再現性が求められるようになると、結果が説明可能であることから、次第にneatなアプローチが主流になっていきました。 - -## 1980s エキスパートシステム - -分野が発展するにつれ、ビジネスへの貢献が明確になり、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 "ディープラーニングの歴史") -> 🎥 上の画像をクリックすると動画が見られます:このレクチャーではYann LeCunがディープラーニングの歴史について議論しています。 - ---- -## 🚀Challenge - -これらの歴史的瞬間の1つを掘り下げて、その背後にいる人々について学びましょう。魅力的な人々がいますし、文化的に空白の状態で科学的発見がなされたことはありません。どういったことが見つかるでしょうか? - -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4?loc=ja) - -## 振り返りと自習 - -視聴するべき教材は以下になります: - -[Amy BoydがAIの進化について述べているポッドキャスト](http://runasradio.com/Shows/Show/739) - -[![Amy BoydによるAIの歴史](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy BoydによるAIの歴史") - -## 課題 - -[年表を作成する](./assignment.ja.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.ko.md b/1-Introduction/2-history-of-ML/translations/README.ko.md deleted file mode 100644 index cf0a1dae..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.ko.md +++ /dev/null @@ -1,118 +0,0 @@ -# 머신러닝의 역사 - -![Summary of History of machine learning in a sketchnote](../../../sketchnotes/ml-history.png) -> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - -이 강의에서, 머신러닝과 인공 지능의 역사에서 주요 마일스톤을 살펴보려 합니다. - -인공 지능, AI의 역사는 머신러닝의 역사와 서로 엮여 있으며, ML을 받쳐주는 알고리즘과 계산 기술이 AI의 개발에 기여했습니다. 독특한 탐구 영역으로 이런 분야는 1950년에 구체적으로 시작했지만, 중요한 [algorithmical, statistical, mathematical, computational and technical discoveries](https://wikipedia.org/wiki/Timeline_of_machine_learning)로 이 시대를 오버랩했다고 생각하는 게 유용합니다. 실제로, 사람들은 [hundreds of years](https://wikipedia.org/wiki/History_of_artificial_intelligence)동안 이 질문을 생각해왔습니다: 이 아티클은 'thinking machine'라는 개념의 역사적 지적 토대에 대하여 이야기 합니다. - -## 주목할 발견 - -- 1763, 1812 [Bayes Theorem](https://wikipedia.org/wiki/Bayes%27_theorem)과 전임자. 이 정리와 적용은 사전지식 기반으로 이벤트가 발생할 확률을 설명할 추론의 기초가 됩니다. -- 1805 [Least Square Theory](https://wikipedia.org/wiki/Least_squares) by 프랑스 수학자 Adrien-Marie Legendre. Regression 단위에서 배울 이 이론은, 데이터 피팅에 도움이 됩니다. -- 1913 러시아 수학자 Andrey Markov의 이름에서 유래된 [Markov Chains](https://wikipedia.org/wiki/Markov_chain)는 이전 상태를 기반으로 가능한 이벤트의 시퀀스를 설명하는 데 사용됩니다. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron)은 미국 심리학자 Frank Rosenblatt이 개발한 linear classifier의 한 타입으로 딥러닝 발전을 뒷받칩니다. -- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor)는 원래 경로를 맵핑하기 위한 알고리즘입니다. ML context에서 패턴을 감지할 때 사용합니다. -- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation)은 [feedforward neural networks](https://wikipedia.org/wiki/Feedforward_neural_network)를 학습할 때 사용합니다. -- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network)는 시간 그래프를 생성하는 feedforward neural networks에서 파생한 인공 신경망입니다. - -✅ 조금 조사해보세요. ML과 AI의 역사에서 중요한 다른 날짜는 언제인가요? - -## 1950: 생각하는 기계 - -20세기의 최고 과학자로 [by the public in 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century)에 선택된, Alan Turing은, 'machine that can think.'라는 개념의 기반을 구축하는 데에 기여한 것으로 평가되고 있습니다. -NLP 강의에서 살필 [Turing Test](https://www.bbc.com/news/technology-18475646)를 만들어서 부분적으로 이 개념에 대한 경험적인 반대하는 사람들과 대립했습니다. - -## 1956: Dartmouth 여름 연구 프로젝트 - -"The Dartmouth Summer Research Project on artificial intelligence was a seminal event for artificial intelligence as a field," ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth))에서 "인공 지능"이라는 용어가 만들어졌습니다. - -> 학습의 모든 측면이나 지능의 다른 기능은 원칙적으로 정확하게 서술할 수 있어서 이를 따라 할 기계를 만들 수 있습니다. - -수석 연구원인, 수학 교수 John McCarthy는, "to proceed on the basis of the conjecture that every aspect of learning or any other feature of intelligence can in principle be so precisely described that a machine can be made to simulate it."이라고 희망했습니다. 참가한 사람들 중에서는 Marvin Minsky도 있었습니다. - -이 워크숍은 "the rise of symbolic methods, systems focussed on limited domains (early expert systems), and deductive systems versus inductive systems." ([source](https://wikipedia.org/wiki/Dartmouth_workshop))을 포함해서 여러 토론을 시작하고 장려한 것으로 평가됩니다. - -## 1956 - 1974: "The golden years" - -1950년대부터 70년대 중순까지 AI로 많은 문제를 해결할 수 있다고 믿은 낙관주의가 커졌습니다. 1967년 Marvin Minsky는 "Within a generation ... the problem of creating 'artificial intelligence' will substantially be solved." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall)이라고 자신있게 말했습니다. - -natural language processing 연구가 발전하고, 검색이 개선되어 더 강력해졌으며, 단순한 언어 지침으로 간단한 작업을 완료하는 'micro-worlds'라는 개념이 생겼습니다. - -정부 지원을 받으며 연구했으며, 계산과 알고리즘이 발전하면서, 지능적 기계의 프로토 타입이 만들어졌습니다. 이런 기계 중에 일부는 아래와 같습니다: - -* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), '지능적'으로 작업하는 방법을 조종하고 결정할 수 있습니다. - - ![Shakey, an intelligent robot](../images/shakey.jpg) - > Shakey in 1972 - -* 초기 'chatterbot'인, Eliza는, 사람들과 이야기하고 원시적 '치료사' 역할을 할 수 있었습니다. NLP 강의에서 Eliza에 대하여 자세히 알아봅시다. - - ![Eliza, a bot](../images/eliza.png) - > A version of Eliza, a chatbot - -* "Blocks world"는 블록을 쌓고 분류할 수 있는 마이크로-월드의 예시이며, 결정하는 기계를 가르칠 실험을 테스트할 수 있었습니다. [SHRDLU](https://wikipedia.org/wiki/SHRDLU)와 같은 라이브러리로 만들어진 발명은 language processing를 발전시키는 데 도움이 되었습니다. - - [![blocks world with SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world with SHRDLU") - - > 🎥 영상을 보려면 이미지 클릭: Blocks world with SHRDLU - -## 1974 - 1980: "AI Winter" - -1970년 중순에, '인공 기계'를 만드는 복잡도가 과소 평가되면서, 주어진 컴퓨터 파워를 고려해보니, 그 약속은 과장된 것이 분명해졌습니다. 자금이 고갈되고 현장에 대한 자신감도 느려졌습니다. 신뢰에 영향을 준 이슈는 아래에 있습니다: - -- **제한**. 컴퓨터 성능이 너무 제한되었습니다. -- **결합 파열**. 훈련에 필요한 파라미터의 양이 컴퓨터 성능, 기능과 별개로 컴퓨터의 요청에 따라 늘어났습니다. -- **데이터 부족**. 알고리즘을 테스트, 개발, 그리고 개선할 수 없게 데이터가 부족했습니다. -- **올바른 질문인가요?**. 질문받은 그 질문에 바로 물었습니다. 연구원들은 그 접근 방식에 비판했습니다: - - 튜링 테스트는 "programming a digital computer may make it appear to understand language but could not produce real understanding." ([source](https://plato.stanford.edu/entries/chinese-room/))하다고 가정한, 'chinese room theory'의 다른 아이디어에 의해 의문이 생겼습니다. - - "치료사" ELIZA와 같은 인공 지능을 사회에 도입하며 윤리에 도전했습니다. - -동 시간대에, 다양한 AI 학교가 형성되기 시작했습니다. ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) 사이에 이분법이 확립되었습니다. _Scruffy_ 연구실은 원하는 결과를 얻을 때까지 몇 시간 동안 프로그램을 트윅했습니다. _Neat_ 연구실은 논리와 공식적 문제를 해결하는 데에 초점을 맞추었습니다. ELIZA와 SHRDLU는 잘 알려진 _scruffy_ 시스템입니다. 1980년대에, ML 시스템을 재현할 수 있어야 된다는 요구사항이 생겼고, _neat_ 방식이 더 결과를 설명할 수 있어서 점차 선두를 차지했습니다. - -## 1980s 전문가 시스템 - -이 분야가 성장하며, 비즈니스에 대한 이점이 명확해졌고, 1980년대에 '전문가 시스템'이 확산되었습니다. "Expert systems were among the first truly successful forms of artificial intelligence (AI) software." ([source](https://wikipedia.org/wiki/Expert_system)). - -이 시스템의 타입은, 실제로 비즈니스 요구사항을 정의하는 룰 엔진과 새로운 사실 추론하는 룰 시스템을 활용한 추론 엔진으로 부분적 구성된 _hybrid_ 입니다. - -이런 시대에도 neural networks에 대한 관심이 늘어났습니다. - -## 1987 - 1993: AI 'Chill' - -전문화된 전문가 시스템 하드웨어의 확산은 너무나도 고차원되는 불운한 결과를 가져왔습니다. 개인용 컴퓨터의 부상은 크고, 전문화된, 중앙화 시스템과 경쟁했습니다. 컴퓨팅의 민주화가 시작되었고, 결국 현대의 빅 데이터 폭발을 위한 길을 열었습니다. - -## 1993 - 2011 - -이 시대에는 ML과 AI가 과거 데이터와 컴퓨터 파워 부족으로 인해 발생했던 문제 중 일부 해결할 수 있는 새로운 시대가 열렸습니다. 데이터의 양은 급격히 늘어나기 시작했고, 2007년에 스마트폰이 나오면서 좋든 나쁘든 더 넓게 사용할 수 있게 되었습니다. 컴퓨터 파워는 크게 확장되었고, 알고리즘도 함께 발전했습니다. 과거 자유롭던 시대에서 진정한 규율로 이 분야는 성숙해지기 시작했습니다. - -## 현재 - -오늘 날, 머신러닝과 AI는 인생의 대부분에 영향을 미칩니다. 이 시대에는 이러한 알고리즘이 인간의 인생에 미치는 위험과 잠재적인 영향에 대한 주의깊은 이해도가 요구됩니다. Microsoft의 Brad Smith가 언급합니다 "Information technology raises issues that go to the heart of fundamental human-rights protections like privacy and freedom of expression. These issues heighten responsibility for tech companies that create these products. In our view, they also call for thoughtful government regulation and for the development of norms around acceptable uses" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - -미래가 어떻게 변할지 알 수 없지만, 컴퓨터 시스템과 이를 실행하는 소프트웨어와 알고리즘을 이해하는 것은 중요합니다. 이 커리큘럼으로 더 잘 이해하고 스스로 결정할 수 있게 되기를 바랍니다. - -[![The history of deep learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "The history of deep learning") -> 🎥 영상 보려면 위 이미지 클릭: Yann LeCun이 강의에서 딥러닝의 역사를 이야기 합니다. - ---- -## 🚀 도전 - -역사적인 순간에 사람들 뒤에서 한 가지를 집중적으로 파고 있는 자를 자세히 알아보세요. 매력있는 캐릭터가 있으며, 문화가 사라진 곳에서는 과학적인 발견을 하지 못합니다. 당신은 어떤 발견을 해보았나요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - -## 검토 & 자기주도 학습 - -보고 들을 수 있는 항목은 아래와 같습니다: - -[This podcast where Amy Boyd discusses the evolution of AI](http://runasradio.com/Shows/Show/739) - -[![The history of AI by Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "The history of AI by Amy Boyd") - -## 과제 - -[Create a timeline](../assignment.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.pt-br.md b/1-Introduction/2-history-of-ML/translations/README.pt-br.md deleted file mode 100644 index 815c8722..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.pt-br.md +++ /dev/null @@ -1,118 +0,0 @@ -# História do machine learning - -![Resumo da história do machine learning no sketchnote](../../../sketchnotes/ml-history.png) -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Teste pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3?loc=ptbr) - -Nesta lição, veremos os principais marcos da história do machine learning e da artificial intelligence. - -A história da inteligência artificial, IA, como um campo está entrelaçada com a história do machine learning, pois os algoritmos e os avanços computacionais por trás do machine learning contribuíram para o desenvolvimento da inteligência artificial. É útil lembrar que, embora esses campos como áreas distintas de investigação tenham começado a se cristalizar na década de 1950, importantes [descobertas algorítmicas, estatísticas, matemáticas, computacionais e técnicas](https://wikipedia.org/wiki/Timeline_of_machine_learning) -precederam e se sobrepuseram com esta época. Na verdade, as pessoas têm refletido sobre essas questões por [centenas de anos](https://wikipedia.org/wiki/History_of_artificial_intelligence): este artigo discute a base intelectual histórica da ideia de uma 'máquina pensante'. - -## Descobertas notáveis - -- 1763, 1812 [Teorema de Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) e seus predecessores. Este teorema e suas aplicações fundamentam a inferência, descrevendo a probabilidade de um evento ocorrer com base em conhecimento prévio. -- 1805 [Teoria dos Mínimos Quadrados](https://wikipedia.org/wiki/Least_squares) pelo matemático francês Adrien-Marie Legendre. Esta teoria, que você aprenderá em nossa unidade de regressão, ajuda no ajuste de dados. -- 1913 [Cadeias de Markov](https://wikipedia.org/wiki/Markov_chain) com o nome do matemático russo Andrey Markov é usado para descrever uma sequência de eventos possíveis com base em um estado anterior. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) é um tipo de classificador linear inventado pelo psicólogo americano Frank Rosenblatt que fundamenta os avanços no aprendizado profundo. -- 1967 [Vizinho mais próximo](https://wikipedia.org/wiki/Nearest_neighbor) é um algoritmo originalmente projetado para mapear rotas. Em um contexto de ML, ele é usado para detectar padrões. -- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) é usado para treinar [redes neurais feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Redes Neurais Recorrentes](https://wikipedia.org/wiki/Recurrent_neural_network) são redes neurais artificiais derivadas de redes neurais feedforward que criam gráficos temporais. - -✅ Faça uma pequena pesquisa. Que outras datas se destacam como fundamentais na história do ML e da AI? - -## 1950: Máquinas que pensam - -Alan Turing, uma pessoa verdadeiramente notável que foi eleita [pelo público em 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) como o maior cientista do século 20, é creditado por ajudar a lançar as bases para o conceito de uma 'máquina que pode pensar'. Ele lutou contra os pessimistas e sua própria necessidade de evidências empíricas desse conceito, em parte criando o [Teste de Turing](https://www.bbc.com/news/technology-18475646), que você explorará em nossas lições de NPL. - -## 1956: Projeto de Pesquisa de Verão de Dartmouth - -"O Projeto de Pesquisa de Verão de Dartmouth sobre inteligência artificial foi um evento seminal para a inteligência artificial como um campo", e foi aqui que o termo 'inteligência artificial (AI)' foi cunhado ([fonte](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Cada aspecto da aprendizagem ou qualquer outra característica da inteligência pode, em princípio, ser descrito com tanta precisão que uma máquina pode ser feita para simulá-lo. - -O pesquisador principal, professor de matemática John McCarthy, esperava "proceder com base na conjectura de que cada aspecto do aprendizado ou qualquer outra característica da inteligência pode, em princípio, ser descrito de forma tão precisa que uma máquina pode ser feita para simulá-lo". Os participantes incluíram outro luminar da área, Marvin Minsky. - -O workshop é creditado por ter iniciado e encorajado várias discussões, incluindo "o surgimento de métodos simbólicos, sistemas focados em domínios limitados (primeiros sistemas especialistas) e sistemas dedutivos versus sistemas indutivos." ([fonte](https://wikipedia.org/wiki/Dartmouth_workshop)). - -## 1956 - 1974: "Os anos dourados" - -Dos anos 1950 até meados dos anos 1970, o otimismo era alto na esperança de que a IA pudesse resolver muitos problemas. Em 1967, Marvin Minsky afirmou com segurança que "dentro de uma geração ... o problema de criar 'inteligência artificial' será substancialmente resolvido." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -A pesquisa em processamento de linguagem natural floresceu, a pesquisa foi refinada e tornada mais poderosa, e o conceito de "micro-mundos" foi criado, no qual tarefas simples são concluídas usando instruções de linguagem simples. - -A pesquisa foi bem financiada por agências governamentais, avanços foram feitos em computação e algoritmos e protótipos de máquinas inteligentes foram construídos. Algumas dessas máquinas incluem: - -* [Shakey o robô](https://wikipedia.org/wiki/Shakey_the_robot), quem poderia manobrar e decidir como realizar as tarefas de forma 'inteligente'. - - ![Shakey, o robô inteligente](../images/shakey.jpg) - > Shakey em 1972 - -* Eliza, um dos primeiros 'chatterbot', podia conversar com as pessoas e agir como uma 'terapeuta' primitiva. Você aprenderá mais sobre Eliza nas lições de NPL. - - ![Eliza, a bot](../images/eliza.png) - > Uma versão de Eliza, um chatbot - -* O "mundo dos blocos" era um exemplo de micro-mundo onde os blocos podiam ser empilhados e classificados, e experimentos em máquinas de ensino para tomar decisões podiam ser testados. Avanços construídos com bibliotecas como [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ajudaram a impulsionar o processamento de linguagem. - - [![mundo dos blocos com SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "mundo dos blocos com SHRDLU") - - > 🎥 Clique na imagem acima para ver um vídeo: Mundo dos blocos com SHRDLU - -## 1974 - 1980: "O inverno da AI" - -Em meados da década de 1970, ficou claro que a complexidade de criar 'máquinas inteligentes' havia sido subestimada e que sua promessa, dado o poder de computação disponível, havia sido exagerada. O financiamento secou e a confiança no setor desacelerou. Alguns problemas que afetaram a confiança incluem: - -- **Limitações**. O poder de computação era muito limitado. -- **Explosão combinatória**. A quantidade de parâmetros que precisavam ser treinados cresceu exponencialmente à medida que mais computadores eram exigidos, sem uma evolução paralela no poder e nas capacidades de computação. -- **Falta de dados**. Havia uma escassez de dados que dificultou o processo de teste, desenvolvimento e refinamento dos algoritmos. -- **Estamos fazendo as perguntas certas?**. As próprias perguntas que estavam sendo feitas começaram a ser questionadas. Os pesquisadores começaram a criticar suas abordagens: - - Os testes de Turing foram desafiados através, entre outras ideias, da 'teoria da sala chinesa' que postulava que "programar um computador digital pode fazer com que pareça compreender a linguagem, mas não pode produzir uma compreensão verdadeira". ([fonte](https://plato.stanford.edu/entries/chinese-room/)) - - A ética da introdução de inteligências artificiais como o "terapeuta" de ELIZA na sociedade tem sido questionada. - -Ao mesmo tempo, várias escolas de pensamento de IA começaram a se formar. Uma dicotomia foi estabelecida entre as práticas ["scruffy" versus "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). O laboratório do _Scruffy_ otimizou os programas por horas até obter os resultados desejados. O laboratório do _Neat_ "focava na solução de problemas lógicos e formais". ELIZA e SHRDLU eram sistemas desalinhados bem conhecidos. Na década de 1980, quando surgiu a demanda para tornar os sistemas de ML reproduzíveis, a abordagem _neat_ gradualmente assumiu o controle, à medida que seus resultados eram mais explicáveis. - -## Sistemas especialistas de 1980 - -À medida que o campo cresceu, seus benefícios para os negócios tornaram-se mais claros e, na década de 1980, o mesmo aconteceu com a proliferação de 'sistemas especialistas'. "Os sistemas especialistas estavam entre as primeiras formas verdadeiramente bem-sucedidas de software de inteligência artificial (AI)." ([fonte](https://wikipedia.org/wiki/Expert_system)). - -Na verdade, esse tipo de sistema é _híbrido_, consistindo parcialmente em um mecanismo de regras que define os requisitos de negócios e um mecanismo de inferência que potencializa o sistema de regras para deduzir novos fatos. - -Essa era também viu uma crescente atenção dada às redes neurais. - -## 1987 - 1993: AI 'Chill' - -A proliferação de hardware de sistemas especialistas especializados teve o infeliz efeito de se tornar muito especializado. A ascensão dos computadores pessoais também competiu com esses sistemas grandes, especializados e centralizados. A democratização da computação havia começado e, por fim, pavimentou o caminho para a explosão moderna de big data. - -## 1993 - 2011 - -Essa época viu uma nova era para o ML e a AI serem capazes de resolver alguns dos problemas que eram causados anteriormente pela falta de dados e capacidade de computação. A quantidade de dados começou a aumentar rapidamente e se tornar mais amplamente disponível, para melhor e para pior, especialmente com o advento do smartphone por volta de 2007. O poder de computação se expandiu exponencialmente e os algoritmos evoluíram junto. O campo começou a ganhar maturidade à medida que os dias livres do passado começaram a se cristalizar em uma verdadeira disciplina. - -## Agora - -Hoje, o machine learning e a inteligência artificial afetam quase todas as partes de nossa vida. Esta era requer uma compreensão cuidadosa dos riscos e efeitos potenciais desses algoritmos em vidas humanas. Como disse Brad Smith, da Microsoft, "a tecnologia da informação levanta questões que vão ao cerne das proteções fundamentais dos direitos humanos, como privacidade e liberdade de expressão. Essas questões aumentam a responsabilidade das empresas de tecnologia que criam esses produtos. Observe, elas também exigem um governo cuidadoso regulamentação e o desenvolvimento de padrões sobre usos aceitáveis​​" ([fonte](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - -Resta saber o que o futuro reserva, mas é importante entender esses sistemas de computador e o software e algoritmos que eles executam. Esperamos que este curso lhe ajude a obter um melhor entendimento para que você possa decidir por si mesmo. - -[![A história do deep learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "A história do deep learning") -> 🎥 Clique na imagem acima para ver um vídeo: Yann LeCun discute a história do deep learning nesta palestra - ---- -## 🚀Desafio - -Explore um desses momentos históricos e aprenda mais sobre as pessoas por trás deles. Existem personagens fascinantes e nenhuma descoberta científica foi criada em um vácuo cultural. O que você descobriu? - -## [Questionário pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4?loc=ptbr) - -## Revisão e Autoestudo - -Aqui estão os itens para assistir e ouvir: - -[Este podcast em que Amy Boyd discute a evolução da AI](http://runasradio.com/Shows/Show/739) - -[![A história da AI ​​por Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "A história da AI ​​por Amy Boyd") - -## Tarefa - -[Crie uma linha do tempo](assignment.pt-br.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.ru.md b/1-Introduction/2-history-of-ML/translations/README.ru.md deleted file mode 100644 index 013cf9cb..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.ru.md +++ /dev/null @@ -1,146 +0,0 @@ -# История машинного обучения - -![Краткое изложение истории машинного обучения в заметке](../../../sketchnotes/ml-history.png) -> Заметка [Томоми Имура](https://www.twitter.com/girlie_mac) - -## [Тест перед лекцией](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - ---- - -На этом уроке мы рассмотрим основные вехи в истории машинного обучения и искусственного интеллекта. - -История искусственного интеллекта (ИИ) как области переплетается с историей машинного обучения (machine learning, ML), поскольку алгоритмы и вычислительные достижения, лежащие в основе ML, способствовали развитию ИИ. Полезно помнить, что, хотя эти области как начали выделяться в отдельные в 1950-х годах, важные [алгоритмические, статистические, математические, вычислительные и технические открытия](https://wikipedia.org/wiki/Timeline_of_machine_learning) предшествовали и происходили в эту эпоху. На самом деле, люди думали об этих вопросах в течение [сотен лет](https://ru.wikipedia.org/wiki/%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F_%D0%B8%D1%81%D0%BA%D1%83%D1%81%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%BD%D1%82%D0%B5%D0%BB%D0%BB%D0%B5%D0%BA%D1%82%D0%B0): в этой статье рассматриваются исторические интеллектуальные основы идеи "мыслящей машины". - ---- -## Заметные открытия - -- 1763, 1812 [Теорема Байеса](https://ru.wikipedia.org/wiki/%D0%A2%D0%B5%D0%BE%D1%80%D0%B5%D0%BC%D0%B0_%D0%91%D0%B0%D0%B9%D0%B5%D1%81%D0%B0) и ее предшественники. Эта теорема и ее приложения лежат в основе вывода, описывающего вероятность события, происходящего на основе предварительных знаний. -- 1805 [Теория наименьших квадратов](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BD%D0%B0%D0%B8%D0%BC%D0%B5%D0%BD%D1%8C%D1%88%D0%B8%D1%85_%D0%BA%D0%B2%D0%B0%D0%B4%D1%80%D0%B0%D1%82%D0%BE%D0%B2) французского математика Адриена-Мари Лежандра. Эта теория, о которой вы узнаете в нашем блоке регрессии, помогает в аппроксимации данных. -- 1913 [Цепи Маркова](https://ru.wikipedia.org/wiki/%D0%A6%D0%B5%D0%BF%D1%8C_%D0%9C%D0%B0%D1%80%D0%BA%D0%BE%D0%B2%D0%B0), названный в честь русского математика Андрея Маркова, используется для описания последовательности возможных событий на основе предыдущего состояния. -- 1957 [Персептрон](https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%80%D1%86%D0%B5%D0%BF%D1%82%D1%80%D0%BE%D0%BD) - это тип линейного классификатора, изобретенный американским психологом Фрэнком Розенблаттом, который лежит в основе достижений в области глубокого обучения. - ---- - -- 1967 [Метод ближайшего соседа](https://ru.wikipedia.org/wiki/%D0%91%D0%BB%D0%B8%D0%B6%D0%B0%D0%B9%D1%88%D0%B8%D0%B9_%D1%81%D0%BE%D1%81%D0%B5%D0%B4) - это алгоритм, изначально разработанный для отображения маршрутов. В контексте ML он используется для обнаружения закономерностей. -- 1970 [Обратное распространение ошибки](https://ru.wikipedia.org/wiki/%D0%9C%D0%B5%D1%82%D0%BE%D0%B4_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%B3%D0%BE_%D1%80%D0%B0%D1%81%D0%BF%D1%80%D0%BE%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B8) используется для обучения [нейронных сетей с прямой связью](https://ru.wikipedia.org/wiki/%D0%9D%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C_%D1%81_%D0%BF%D1%80%D1%8F%D0%BC%D0%BE%D0%B9_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C%D1%8E). -- 1982 [Рекуррентные нейронные сети](https://ru.wikipedia.org/wiki/%D0%A0%D0%B5%D0%BA%D1%83%D1%80%D1%80%D0%B5%D0%BD%D1%82%D0%BD%D0%B0%D1%8F_%D0%BD%D0%B5%D0%B9%D1%80%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%81%D0%B5%D1%82%D1%8C) являются искусственными нейронными сетями, полученными из нейронных сетей прямой связи, которые создают временные графики. - -✅ Проведите небольшое исследование. Какие еще даты являются ключевыми в истории ML и ИИ? - ---- -## 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://ru.wikipedia.org/wiki/%D0%94%D0%B0%D1%80%D1%82%D0%BC%D1%83%D1%82%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%B5%D0%BC%D0%B8%D0%BD%D0%B0%D1%80)). - ---- -## 1956 - 1974: "Золотые годы" - -С 1950-х до середины 70-х годов оптимизм рос в надежде, что ИИ сможет решить многие проблемы. В 1967 году Марвин Мински уверенно заявил, что "В течение одного поколения... проблема создания "искусственного интеллекта" будет в значительной степени решена". (Мински, Марвин (1967), Вычисления: Конечные и бесконечные машины, Энглвуд-Клиффс, Нью-Джерси: Прентис-Холл) - -Исследования в области обработки естественного языка процветали, поиск был усовершенствован и стал более мощным, и была создана концепция "микромиров", где простые задачи выполнялись с использованием простых языковых инструкций. - ---- - -Исследования хорошо финансировались правительственными учреждениями, были достигнуты успехи в вычислениях и алгоритмах, были созданы прототипы интеллектуальных машин. Некоторые из этих машин включают: - -* [Робот Shakey](https://ru.wikipedia.org/wiki/Shakey), который мог маневрировать и решать, как "разумно" выполнять задачи. - - ![Shakey, умный робот](../images/shakey.jpg) - > Shakey в 1972 году - ---- - -* Элиза, ранний "чат-бот", могла общаться с людьми и действовать как примитивный "терапевт". Вы узнаете больше об Элизе на уроках NLP. - - ![Элиза, бот](../images/eliza.png) - > Версия Элизы, чат-бота - ---- - -* "Мир блоков" был примером микромира, в котором блоки можно было складывать и сортировать, а также проводить эксперименты по обучению машин принятию решений. Достижения, созданные с помощью библиотек, таких как [SHRDLU](https://ru.wikipedia.org/wiki/SHRDLU) помогло продвинуть обработку языка вперед. - - [![мир блоков SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "мир блоков SHRDLU") - - > 🎥 Нажмите на изображение выше для просмотра видео: Мир блоков SHRDLU - ---- -## 1974-1980: "Зима искусственного интеллекта" - -К середине 1970-х годов стало очевидно, что сложность создания "интеллектуальных машин" была занижена и что ее перспективы, учитывая доступные вычислительные мощности, были преувеличены. Финансирование иссякло, и доверие к этой области снизилось. Некоторые проблемы, повлиявшие на доверие, включали: ---- -- **Ограничения**. Вычислительная мощность была слишком ограничена. -- **Комбинаторный взрыв**. Количество параметров, необходимых для обучения, росло экспоненциально по мере того, как усложнялись задачи для компьютеров, без параллельной эволюции вычислительной мощности и возможностей. -- **Нехватка данных**. Нехватка данных затрудняла процесс тестирования, разработки и совершенствования алгоритмов. -- **Задаем ли мы правильные вопросы?**. Сами вопросы, которые задавались, начали подвергаться сомнению. Исследователи начали подвергать критике свои подходы: - - Тесты Тьюринга были поставлены под сомнение, среди прочего, с помощью "теории китайской комнаты", которая утверждала, что "программирование цифрового компьютера может создать впечатление, что он понимает язык, но не может обеспечить реальное понимание". ([источник](https://plato.stanford.edu/entries/chinese-room/)) - - Этика внедрения в общество искусственного интеллекта, такого как "терапевт" ЭЛИЗА, была поставлена под сомнение. - ---- - -В то же время начали формироваться различные школы ИИ. Произошло разделение на подходы ["неряшливого" и "чистого" ИИ](https://wikipedia.org/wiki/Neats_and_scruffies). Приверженцы _неряшливого ИИ_ часами корректировали программы, пока не получали желаемых результатов. Приверженцы _Чистого ИИ_ были "сосредоточены на логике и решении формальных задач". ЭЛИЗА и SHRDLU были хорошо известными _неряшливыми_ системами. В 1980-х годах, когда возник спрос на то, чтобы сделать системы машинного обучения воспроизводимыми, _Чистый_ подход постепенно вышел на передний план, поскольку его результаты более объяснимы. - ---- -## Экспертные системы 1980-х годов - -По мере роста отрасли ее преимущества для бизнеса становились все более очевидными, а в 1980-х годах - и распространение "экспертных систем". "Экспертные системы были одними из первых по-настоящему успешных форм программного обеспечения искусственного интеллекта (ИИ)". ([источник](https://ru.wikipedia.org/wiki/%D0%AD%D0%BA%D1%81%D0%BF%D0%B5%D1%80%D1%82%D0%BD%D0%B0%D1%8F_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B0)). - -Этот тип системы на самом деле был _гибридным_, частично состоящим из механизма правил, определяющего бизнес-требования, и механизма вывода, который использует систему правил для вывода новых фактов. - -В эту эпоху также все большее внимания уделялось нейронным сетям. - ---- -## 1987 - 1993: 'Охлаждение' к ИИ - -Распространение специализированного оборудования экспертных систем привело к печальному результату - оно стало слишком специализированным. Появление персональных компьютеров конкурировало с этими крупными специализированными централизованными системами. Началась демократизация вычислительной техники, и в конечном итоге она проложила путь к современному взрыву больших данных. - ---- -## 1993 - 2011 - -Эта эпоха ознаменовала новую эру для ML и ИИ, которые смогли решить некоторые проблемы, возникавшие ранее из-за нехватки данных и вычислительных мощностей. Объем данных начал быстро увеличиваться и становиться все более доступным, и к лучшему и к худшему, особенно с появлением смартфона примерно в 2007 году. Вычислительная мощность росла экспоненциально, и вместе с ней развивались алгоритмы. Эта область начала набирать зрелость по мере того, как свободные дни прошлого начали превращаться в настоящую дисциплину. - ---- -## Сейчас - -Сегодня машинное обучение и искусственный интеллект затрагивают практически все сферы нашей жизни. Текущая эпоха требует тщательного понимания рисков и потенциальных последствий этих алгоритмов для человеческих жизней. Как заявил Брэд Смит из Microsoft, "Информационные технологии поднимают проблемы, которые лежат в основе защиты основных прав человека, таких как конфиденциальность и свобода выражения мнений. Эти проблемы повышают ответственность технологических компаний, которые создают эти продукты. На наш взгляд, они также требуют продуманного государственного регулирования и разработки норм, касающихся приемлемых видов использования" ([источник](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 "История глубокого обучения") -> 🎥 Нажмите на изображение выше, чтобы посмотреть видео: Yann LeCun обсуждает историю глубокого обучения в этой лекции - ---- -## 🚀Вызов - -Погрузитесь в один из этих исторических моментов и узнайте больше о людях, стоящих за ними. Есть увлекательные персонажи, и ни одно научное открытие никогда не создавалось в культурном вакууме. Что вы обнаружите? - -## [Тест после лекции](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - ---- -## Обзор и самообучение - -Вот что можно посмотреть и послушать: - -[Этот подкаст, в котором Эми Бойд обсуждает эволюцию ИИ](http://runasradio.com/Shows/Show/739) - -[![История искусственного интеллекта от Эми Бойд](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "История искусственного интеллекта от Эми Бойд") - ---- - -## Задание - -[Создайте временную шкалу](assignment.ru.md) \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/README.tr.md b/1-Introduction/2-history-of-ML/translations/README.tr.md deleted file mode 100644 index 4145f666..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.tr.md +++ /dev/null @@ -1,117 +0,0 @@ -# Makine öğreniminin tarihi - -![Bir taslak-notta makine öğrenimi geçmişinin özeti](../../../sketchnotes/ml-history.png) -> [Tomomi Imura](https://www.twitter.com/girlie_mac) tarafından hazırlanan taslak-not - -## [Ders öncesi test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3?loc=tr) - -Bu derste, makine öğrenimi ve yapay zeka tarihindeki önemli kilometre taşlarını inceleyeceğiz. - -Bir alan olarak yapay zekanın (AI) tarihi, makine öğreniminin tarihi ile iç içedir, çünkü makine öğrenimini destekleyen algoritmalar ve bilgi-işlem kapasitesindeki ilerlemeler, yapay zekanın gelişimini beslemektedir. Ayrı bilim alanlanları olarak bu alanlar 1950'lerde belirginleşmeye başlarken, önemli [algoritmik, istatistiksel, matematiksel, hesaplamalı ve teknik keşiflerin](https://wikipedia.org/wiki/Timeline_of_machine_learning) bir kısmı bu dönemden önce gelmiş ve bir kısmı da bu dönem ile örtüşmüştür. Aslında, insanlar [yüzlerce yıldır](https://wikipedia.org/wiki/History_of_artificial_intelligence) bu soruları düşünüyorlar: bu makale bir 'düşünen makine' fikrinin tarihsel entelektüel temellerini tartışıyor. - -## Önemli keşifler - -- 1763, 1812 - [Bayes Teoremi](https://tr.wikipedia.org/wiki/Bayes_teoremi) ve öncülleri. Bu teorem ve uygulamaları, önceki bilgilere dayalı olarak meydana gelen bir olayın olasılığını tanımlayan çıkarımın temelini oluşturur. -- 1805 - [En Küçük Kareler Teorisi](https://tr.wikipedia.org/wiki/En_k%C3%BC%C3%A7%C3%BCk_kareler_y%C3%B6ntemi), Fransız matematikçi Adrien-Marie Legendre tarafından bulunmuştur. Regresyon ünitemizde öğreneceğiniz bu teori, makine öğrenimi modelini veriye uydurmada yardımcı olur. -- 1913 - Rus matematikçi Andrey Markov'un adını taşıyan [Markov Zincirleri](https://tr.wikipedia.org/wiki/Markov_zinciri), önceki bir duruma dayalı olası olaylar dizisini tanımlamak için kullanılır. -- 1957 - [Algılayıcı (Perceptron)](https://tr.wikipedia.org/wiki/Perceptron), derin öğrenmedeki ilerlemelerin temelini oluşturan Amerikalı psikolog Frank Rosenblatt tarafından icat edilen bir tür doğrusal sınıflandırıcıdır. -- 1967 - [En Yakın Komşu](https://wikipedia.org/wiki/Nearest_neighbor), orijinal olarak rotaları haritalamak için tasarlanmış bir algoritmadır. Bir ML bağlamında kalıpları tespit etmek için kullanılır. -- 1970 - [Geri Yayılım](https://wikipedia.org/wiki/Backpropagation), [ileri beslemeli sinir ağlarını](https://wikipedia.org/wiki/Feedforward_neural_network) eğitmek için kullanılır. -- 1982 - [Tekrarlayan Sinir Ağları](https://wikipedia.org/wiki/Recurrent_neural_network), zamansal grafikler oluşturan ileri beslemeli sinir ağlarından türetilen yapay sinir ağlarıdır. - -✅ Biraz araştırma yapın. Makine öğrenimi ve yapay zeka tarihinde önemli olan başka hangi tarihler öne çıkıyor? - -## 1950: Düşünen makineler - -[2019'da halk tarafından](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 20. yüzyılın en büyük bilim adamı seçilen gerçekten dikkate değer bir kişi olan Alan Turing'in, 'düşünebilen makine' kavramının temellerini attığı kabul edilir. Kendisine karşı çıkanlara yanıt olması için ve bu kavramın deneysel kanıtlarını bulma ihtiyacı sebebiyle, NLP derslerimizde keşfedeceğiniz [Turing Testi'ni](https://www.bbc.com/news/technology-18475646) oluşturdu. - -## 1956: Dartmouth Yaz Araştırma Projesi - -"Yapay zeka üzerine Dartmouth Yaz Araştırma Projesi", bir alan olarak yapay zeka için çığır açan bir olaydı ve burada 'yapay zeka' terimi ortaya çıktı ([kaynak](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Öğrenmenin her yönü veya zekanın diğer herhangi bir özelliği, prensipte o kadar kesin bir şekilde tanımlanabilir ki, onu simüle etmek için bir makine yapılabilir. - -Baş araştırmacı, matematik profesörü John McCarthy, "öğrenmenin her yönünün veya zekanın diğer herhangi bir özelliğinin prensipte oldukça kesin bir şekilde tanımlanabileceği varsayımına dayanarak, onu simüle etmek için bir makine yapılabileceği" varsayımının doğru olmasını umarak ilerliyordu. Katılımcılar arasında bu alanın bir diğer önderi olan Marvin Minsky de vardı. - -Çalıştay, "sembolik yöntemlerin yükselişi, sınırlı alanlara odaklanan sistemler (ilk uzman sistemler) ve tümdengelimli sistemlere karşı tümevarımlı sistemler" dahil olmak üzere çeşitli tartışmaları başlatmış ve teşvik etmiştir. ([kaynak](https://tr.wikipedia.org/wiki/Dartmouth_Konferans%C4%B1)). - -## 1956 - 1974: "Altın yıllar" - -1950'lerden 70'lerin ortalarına kadar, yapay zekanın birçok sorunu çözebileceği umuduyla iyimserlik arttı. 1967'de Marvin Minsky kendinden emin bir şekilde "Bir nesil içinde... 'yapay zeka' yaratma sorunu büyük ölçüde çözülecek" dedi. (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -Doğal dil işleme araştırmaları gelişti, aramalar iyileştirildi ve daha güçlü hale getirildi, ve basit görevlerin sade dil talimatları kullanılarak tamamlandığı 'mikro dünyalar' kavramı yaratıldı. - -Araştırmalar, devlet kurumları tarafından iyi finanse edildi, hesaplamalar ve algoritmalarda ilerlemeler kaydedildi ve akıllı makinelerin prototipleri yapıldı. Bu makinelerden bazıları şunlardır: - -* [Robot Shakey](https://wikipedia.org/wiki/Shakey_the_robot), manevra yapabilir ve görevleri 'akıllıca' nasıl yerine getireceğine karar verebilir. - - ![Shakey, akıllı bir robot](../images/shakey.jpg) - > 1972'de Shakey - -* Erken bir 'sohbet botu' olan Eliza, insanlarla sohbet edebilir ve ilkel bir 'terapist' gibi davranabilirdi. NLP derslerinde Eliza hakkında daha fazla bilgi edineceksiniz. - - ![Eliza, bir bot](../images/eliza.png) - > Bir sohbet robotu olan Eliza'nın bir versiyonu - -* "Dünya Blokları", blokların üst üste koyulabilecekleri, sıralanabilecekleri ve karar vermeyi öğreten makinelerdeki deneylerin test edilebileceği bir mikro dünyaya örnekti. [SHRDLU](https://wikipedia.org/wiki/SHRDLU) gibi kütüphanelerle oluşturulan gelişmeler, dil işlemeyi ilerletmeye yardımcı oldu. - - [![SHRDLU ile Dünya Blokları](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "SHRDLU ile Dünya Blokları" ) - - > 🎥 Video için yukarıdaki resme tıklayın: SHRDLU ile Dünya Blokları - -## 1974 - 1980: "Yapay Zekâ Kışı" - -1970'lerin ortalarına gelindiğinde, 'akıllı makineler' yapmanın karmaşıklığının hafife alındığı ve mevcut hesaplama gücü göz önüne alındığında, verilen vaatlerin abartıldığı ortaya çıktı. Finansman kurudu ve alana olan güven azaldı. Güveni etkileyen bazı sorunlar şunlardı: - -- **Kısıtlıklar**. Hesaplama gücü çok sınırlıydı. -- **Kombinasyonel patlama**. Hesaplama gücü ve yeteneğinde paralel bir evrim olmaksızın, bilgisayarlardan daha fazla soru istendikçe, eğitilmesi gereken parametre miktarı katlanarak arttı. -- **Veri eksikliği**. Algoritmaları test etme, geliştirme ve iyileştirme sürecini engelleyen bir veri kıtlığı vardı. -- **Doğru soruları mı soruyoruz?**. Sorulan sorular sorgulanmaya başlandı. Araştırmacılar mevcut yaklaşımları eleştirmeye başladı: - - Turing testleri, diğer fikirlerin yanı sıra, "Çin odası teorisi" aracılığıyla sorgulanmaya başlandı. Bu teori, "dijital bir bilgisayar, programlanarak dili anlıyormuş gibi gösterilebilir fakat gerçek bir dil anlayışı elde edilemez" savını öne sürmektedir. ([kaynak](https://plato.stanford.edu/entries/chinese-room/) - - "Terapist" ELIZA gibi yapay zekaların topluma tanıtılmasının etiğine meydan okundu. - -Aynı zamanda, çeşitli yapay zekâ düşünce okulları oluşmaya başladı. ["dağınık" ile "düzenli AI"](https://wikipedia.org/wiki/Neats_and_scruffies) uygulamaları arasında bir ikilem kuruldu. _Dağınık_ laboratuvarlar, istenen sonuçları elde edene kadar programlar üzerinde saatlerce ince ayar yaptı. _Düzenli_ laboratuvarlar "mantık ve biçimsel problem çözmeye odaklandı". ELIZA ve SHRDLU, iyi bilinen _dağınık_ sistemlerdi. 1980'lerde, ML sistemlerinin sonuçlarını tekrarlanabilir hale getirmek için talep ortaya çıktıkça, sonuçları daha açıklanabilir olduğu için _düzenli_ yaklaşım yavaş yavaş ön plana çıktı. - -## 1980'ler: Uzman sistemler - -Alan büyüdükçe, şirketlere olan faydası daha net hale geldi ve 1980'lerde 'uzman sistemlerin' yaygınlaşması da bu şekilde meydana geldi. "Uzman sistemler, yapay zeka (AI) yazılımlarının gerçek anlamda başarılı olan ilk formları arasındaydı." ([kaynak](https://tr.wikipedia.org/wiki/Uzman_sistemler)). - -Bu sistem türü aslında kısmen iş gereksinimlerini tanımlayan bir kural aracından ve yeni gerçekleri çıkarmak için kurallar sisteminden yararlanan bir çıkarım aracından oluşan bir _melezdir_. - -Bu çağda aynı zamanda sinir ağlarına artan ilgi de görülmüştür. - -## 1987 - 1993: Yapay Zeka 'Soğuması' - -Özelleşmiş uzman sistem donanımının yaygınlaşması, talihsiz bir şekilde bunları aşırı özelleşmiş hale getirdi. Kişisel bilgisayarların yükselişi de bu büyük, özelleşmiş, merkezi sistemlerle rekabet etti. Bilgisayarın demokratikleşmesi başlamıştı ve sonunda modern büyük veri patlamasının yolunu açtı. - -## 1993 - 2011 - -Bu çağ, daha önce veri ve hesaplama gücü eksikliğinden kaynaklanan bazı sorunları çözebilmek için ML ve AI için yeni bir dönemi getirdi. Veri miktarı hızla artmaya başladı ve özellikle 2007'de akıllı telefonun ortaya çıkmasıyla birlikte iyisiyle kötüsüyle daha yaygın bir şekilde ulaşılabilir hale geldi. Hesaplama gücü katlanarak arttı ve algoritmalar da onunla birlikte gelişti. Geçmişin başıboş günleri gitmiş, yerine giderek olgunlaşan gerçek bir disipline dönüşüm başlamıştı. - -## Şimdi - -Günümüzde makine öğrenimi ve yapay zeka hayatımızın neredeyse her alanına dokunuyor. Bu çağ, bu algoritmaların insan yaşamı üzerindeki risklerinin ve potansiyel etkilerinin dikkatli bir şekilde anlaşılmasını gerektirmektedir. Microsoft'tan Brad Smith'in belirttiği gibi, "Bilgi teknolojisi, gizlilik ve ifade özgürlüğü gibi temel insan hakları korumalarının kalbine giden sorunları gündeme getiriyor. Bu sorunlar, bu ürünleri yaratan teknoloji şirketlerinin sorumluluğunu artırıyor. Bizim açımızdan bakıldığında, düşünceli hükümet düzenlemeleri ve kabul edilebilir kullanımlar etrafında normların geliştirilmesi için de bir çağrı niteliği taşıyor." ([kaynak](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/) )). - -Geleceğin neler getireceğini birlikte göreceğiz, ancak bu bilgisayar sistemlerini ve çalıştırdıkları yazılım ve algoritmaları anlamak önemlidir. Bu müfredatın, kendi kararlarınızı verebilmeniz için daha iyi bir anlayış kazanmanıza yardımcı olacağını umuyoruz. - -[![Derin öğrenmenin tarihi](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Derin öğrenmenin tarihi") -> 🎥 Video için yukarıdaki resme tıklayın: Yann LeCun bu derste derin öğrenmenin tarihini tartışıyor - ---- -## 🚀Meydan okuma - -Bu tarihi anlardan birine girin ve arkasındaki insanlar hakkında daha fazla bilgi edinin. Büyüleyici karakterler var ve kültürel bir boşlukta hiçbir bilimsel keşif yaratılmadı. Ne keşfedersiniz? - -## [Ders sonrası test](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4?loc=tr) - -## İnceleme ve Bireysel Çalışma - -İşte izlenmesi ve dinlenmesi gerekenler: - -[Amy Boyd'un yapay zekanın evrimini tartıştığı bu podcast](http://runasradio.com/Shows/Show/739) - -[![Amy Boyd ile Yapay Zekâ'nın tarihi](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy Boyd ile Yapay Zekâ'nın tarihi") - -## Ödev - -[Bir zaman çizelgesi oluşturun](assignment.tr.md) \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/README.zh-cn.md b/1-Introduction/2-history-of-ML/translations/README.zh-cn.md deleted file mode 100644 index ddd2430d..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.zh-cn.md +++ /dev/null @@ -1,116 +0,0 @@ -# 机器学习的历史 - -![机器学习历史概述](../../../sketchnotes/ml-history.png) -> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - -在本课中,我们将走过机器学习和人工智能历史上的主要里程碑。 - -人工智能(AI)作为一个领域的历史与机器学习的历史交织在一起,因为支持机器学习的算法和计算能力的进步推动了AI的发展。记住,虽然这些领域作为不同研究领域在 20 世纪 50 年代才开始具体化,但重要的[算法、统计、数学、计算和技术发现](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)由法国数学家 Adrien-Marie Legendre 提出。 你将在我们的回归单元中了解这一理论,它有助于数据拟合。 -- 1913 [马尔可夫链](https://wikipedia.org/wiki/Markov_chain)以俄罗斯数学家 Andrey Markov 的名字命名,用于描述基于先前状态的一系列可能事件。 -- 1957 [感知器](https://wikipedia.org/wiki/Perceptron)是美国心理学家 Frank Rosenblatt 发明的一种线性分类器,是深度学习发展的基础。 -- 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: 会思考的机器 - -Alan Turing,一个真正杰出的人,[在 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))。 - -> 原则上,学习的每个方面或智能的任何其他特征都可以被精确地描述,以至于可以用机器来模拟它。 - -首席研究员、数学教授 John McCarthy 希望“基于这样一种猜想,即学习的每个方面或智能的任何其他特征原则上都可以如此精确地描述,以至于可以制造出一台机器来模拟它。” 参与者包括该领域的另一位杰出人物 Marvin Minsky。 - -研讨会被认为发起并鼓励了一些讨论,包括“符号方法的兴起、专注于有限领域的系统(早期专家系统),以及演绎系统与归纳系统的对比。”([来源](https://wikipedia.org/wiki/Dartmouth_workshop))。 - -## 1956 - 1974: “黄金岁月” - -从 20 世纪 50 年代到 70 年代中期,乐观情绪高涨,希望人工智能能够解决许多问题。1967 年,Marvin Minsky 自信地说,“一代人之内...创造‘人工智能’的问题将得到实质性的解决。”(Minsky,Marvin(1967),《计算:有限和无限机器》,新泽西州恩格伍德克利夫斯:Prentice Hall) - -自然语言处理研究蓬勃发展,搜索被提炼并变得更加强大,创造了“微观世界”的概念,在这个概念中,简单的任务是用简单的语言指令完成的。 - -这项研究得到了政府机构的充分资助,在计算和算法方面取得了进展,并建造了智能机器的原型。其中一些机器包括: - -* [机器人 Shakey](https://wikipedia.org/wiki/Shakey_the_robot),他们可以“聪明地”操纵和决定如何执行任务。 - - ![Shakey, 智能机器人](../images/shakey.jpg) - > 1972 年的 Shakey - -* Eliza,一个早期的“聊天机器人”,可以与人交谈并充当原始的“治疗师”。 你将在 NLP 课程中了解有关 Eliza 的更多信息。 - - ![Eliza, 机器人](../images/eliza.png) - > Eliza 的一个版本,一个聊天机器人 - -* “积木世界”是一个微观世界的例子,在那里积木可以堆叠和分类,并且可以测试教机器做出决策的实验。 使用 [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 的寒冬 - -到了 20 世纪 70 年代中期,很明显制造“智能机器”的复杂性被低估了,而且考虑到可用的计算能力,它的前景被夸大了。资金枯竭,市场信心放缓。影响信心的一些问题包括: - -- **限制**。计算能力太有限了 -- **组合爆炸**。随着对计算机的要求越来越高,需要训练的参数数量呈指数级增长,而计算能力却没有平行发展。 -- **缺乏数据**。 缺乏数据阻碍了测试、开发和改进算法的过程。 -- **我们是否在问正确的问题?**。 被问到的问题也开始受到质疑。 研究人员开始对他们的方法提出批评: - - 图灵测试受到质疑的方法之一是“中国房间理论”,该理论认为,“对数字计算机进行编程可能使其看起来能理解语言,但不能产生真正的理解。” ([来源](https://plato.stanford.edu/entries/chinese-room/)) - - 将“治疗师”ELIZA 这样的人工智能引入社会的伦理受到了挑战。 - -与此同时,各种人工智能学派开始形成。 在 [“scruffy” 与 “neat AI”](https://wikipedia.org/wiki/Neats_and_scruffies) 之间建立了二分法。 _Scruffy_ 实验室对程序进行了数小时的调整,直到获得所需的结果。 _Neat_ 实验室“专注于逻辑和形式问题的解决”。 ELIZA 和 SHRDLU 是众所周知的 _scruffy_ 系统。 在 1980 年代,随着使 ML 系统可重现的需求出现,_neat_ 方法逐渐走上前沿,因为其结果更易于解释。 - -## 1980s 专家系统 - -随着这个领域的发展,它对商业的好处变得越来越明显,在 20 世纪 80 年代,‘专家系统’也开始广泛流行起来。“专家系统是首批真正成功的人工智能 (AI) 软件形式之一。” ([来源](https://wikipedia.org/wiki/Expert_system))。 - -这种类型的系统实际上是混合系统,部分由定义业务需求的规则引擎和利用规则系统推断新事实的推理引擎组成。 - -在这个时代,神经网络也越来越受到重视。 - -## 1987 - 1993: AI 的冷静期 - -专业的专家系统硬件的激增造成了过于专业化的不幸后果。个人电脑的兴起也与这些大型、专业化、集中化系统展开了竞争。计算机的平民化已经开始,它最终为大数据的现代爆炸铺平了道路。 - -## 1993 - 2011 - -这个时代见证了一个新的时代,ML 和 AI 能够解决早期由于缺乏数据和计算能力而导致的一些问题。数据量开始迅速增加,变得越来越广泛,无论好坏,尤其是 2007 年左右智能手机的出现,计算能力呈指数级增长,算法也随之发展。这个领域开始变得成熟,因为过去那些随心所欲的日子开始具体化为一种真正的纪律。 - -## 现在 - -今天,机器学习和人工智能几乎触及我们生活的每一个部分。这个时代要求仔细了解这些算法对人类生活的风险和潜在影响。正如微软的 Brad Smith 所言,“信息技术引发的问题触及隐私和言论自由等基本人权保护的核心。这些问题加重了制造这些产品的科技公司的责任。在我们看来,它们还呼吁政府进行深思熟虑的监管,并围绕可接受的用途制定规范”([来源](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 "深度学习的历史") -> 🎥 点击上图观看视频:Yann LeCun 在本次讲座中讨论深度学习的历史 - ---- -## 🚀挑战 - -深入了解这些历史时刻之一,并更多地了解它们背后的人。这里有许多引人入胜的人物,没有一项科学发现是在文化真空中创造出来的。你发现了什么? - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - -## 复习与自学 - -以下是要观看和收听的节目: - -[这是 Amy Boyd 讨论人工智能进化的播客](http://runasradio.com/Shows/Show/739) - -[![Amy Boyd的《人工智能史》](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy Boyd的《人工智能史》") - -## 任务 - -[创建时间线](assignment.zh-cn.md) diff --git a/1-Introduction/2-history-of-ML/translations/README.zh-tw.md b/1-Introduction/2-history-of-ML/translations/README.zh-tw.md deleted file mode 100644 index 7c88c2ee..00000000 --- a/1-Introduction/2-history-of-ML/translations/README.zh-tw.md +++ /dev/null @@ -1,110 +0,0 @@ -# 機器學習的歷史 - -![機器學習歷史概述](../../../sketchnotes/ml-history.png) -> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [課前測驗](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - -在本課中,我們將走過機器學習和人工智能歷史上的主要裏程碑。 - -人工智能(AI)作為一個領域的歷史與機器學習的歷史交織在一起,因為支持機器學習的算法和計算能力的進步推動了AI的發展。記住,雖然這些領域作為不同研究領域在 20 世紀 50 年代才開始具體化,但重要的[算法、統計、數學、計算和技術發現](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)由法國數學家 Adrien-Marie Legendre 提出。 你將在我們的回歸單元中了解這一理論,它有助於數據擬合。 -- 1913 [馬爾可夫鏈](https://wikipedia.org/wiki/Markov_chain)以俄羅斯數學家 Andrey Markov 的名字命名,用於描述基於先前狀態的一系列可能事件。 -- 1957 [感知器](https://wikipedia.org/wiki/Perceptron)是美國心理學家 Frank Rosenblatt 發明的一種線性分類器,是深度學習發展的基礎。 -- 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: 會思考的機器 - -Alan Turing,一個真正傑出的人,[在 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))。 - -> 原則上,學習的每個方面或智能的任何其他特征都可以被精確地描述,以至於可以用機器來模擬它。 -首席研究員、數學教授 John McCarthy 希望「基於這樣一種猜想,即學習的每個方面或智能的任何其他特征原則上都可以如此精確地描述,以至於可以製造出一臺機器來模擬它。」 參與者包括該領域的另一位傑出人物 Marvin Minsky。 - -研討會被認為發起並鼓勵了一些討論,包括「符號方法的興起、專註於有限領域的系統(早期專家系統),以及演繹系統與歸納系統的對比。」([來源](https://wikipedia.org/wiki/Dartmouth_workshop))。 - -## 1956 - 1974: 「黃金歲月」 - -從 20 世紀 50 年代到 70 年代中期,樂觀情緒高漲,希望人工智能能夠解決許多問題。1967 年,Marvin Minsky 自信地說,「一代人之內...創造『人工智能』的問題將得到實質性的解決。」(Minsky,Marvin(1967),《計算:有限和無限機器》,新澤西州恩格伍德克利夫斯:Prentice Hall) - -自然語言處理研究蓬勃發展,搜索被提煉並變得更加強大,創造了「微觀世界」的概念,在這個概念中,簡單的任務是用簡單的語言指令完成的。 - -這項研究得到了政府機構的充分資助,在計算和算法方面取得了進展,並建造了智能機器的原型。其中一些機器包括: - -* [機器人 Shakey](https://wikipedia.org/wiki/Shakey_the_robot),他們可以「聰明地」操縱和決定如何執行任務。 - - ![Shakey, 智能機器人](../images/shakey.jpg) - > 1972 年的 Shakey -* Eliza,一個早期的「聊天機器人」,可以與人交談並充當原始的「治療師」。 你將在 NLP 課程中了解有關 Eliza 的更多信息。 - - ![Eliza, 機器人](../images/eliza.png) - > Eliza 的一個版本,一個聊天機器人 -* 「積木世界」是一個微觀世界的例子,在那裏積木可以堆疊和分類,並且可以測試教機器做出決策的實驗。 使用 [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 的寒冬 - -到了 20 世紀 70 年代中期,很明顯製造「智能機器」的復雜性被低估了,而且考慮到可用的計算能力,它的前景被誇大了。資金枯竭,市場信心放緩。影響信心的一些問題包括: - -- **限製**。計算能力太有限了 -- **組合爆炸**。隨著對計算機的要求越來越高,需要訓練的參數數量呈指數級增長,而計算能力卻沒有平行發展。 -- **缺乏數據**。 缺乏數據阻礙了測試、開發和改進算法的過程。 -- **我們是否在問正確的問題?**。 被問到的問題也開始受到質疑。 研究人員開始對他們的方法提出批評: - - 圖靈測試受到質疑的方法之一是「中國房間理論」,該理論認為,「對數字計算機進行編程可能使其看起來能理解語言,但不能產生真正的理解。」 ([來源](https://plato.stanford.edu/entries/chinese-room/)) - - 將「治療師」ELIZA 這樣的人工智能引入社會的倫理受到了挑戰。 - -與此同時,各種人工智能學派開始形成。 在 [「scruffy」 與 「neat AI」](https://wikipedia.org/wiki/Neats_and_scruffies) 之間建立了二分法。 _Scruffy_ 實驗室對程序進行了數小時的調整,直到獲得所需的結果。 _Neat_ 實驗室「專註於邏輯和形式問題的解決」。 ELIZA 和 SHRDLU 是眾所周知的 _scruffy_ 系統。 在 1980 年代,隨著使 ML 系統可重現的需求出現,_neat_ 方法逐漸走上前沿,因為其結果更易於解釋。 - -## 1980s 專家系統 - -隨著這個領域的發展,它對商業的好處變得越來越明顯,在 20 世紀 80 年代,『專家系統』也開始廣泛流行起來。「專家系統是首批真正成功的人工智能 (AI) 軟件形式之一。」 ([來源](https://wikipedia.org/wiki/Expert_system))。 - -這種類型的系統實際上是混合系統,部分由定義業務需求的規則引擎和利用規則系統推斷新事實的推理引擎組成。 - -在這個時代,神經網絡也越來越受到重視。 - -## 1987 - 1993: AI 的冷靜期 - -專業的專家系統硬件的激增造成了過於專業化的不幸後果。個人電腦的興起也與這些大型、專業化、集中化系統展開了競爭。計算機的平民化已經開始,它最終為大數據的現代爆炸鋪平了道路。 - -## 1993 - 2011 - -這個時代見證了一個新的時代,ML 和 AI 能夠解決早期由於缺乏數據和計算能力而導致的一些問題。數據量開始迅速增加,變得越來越廣泛,無論好壞,尤其是 2007 年左右智能手機的出現,計算能力呈指數級增長,算法也隨之發展。這個領域開始變得成熟,因為過去那些隨心所欲的日子開始具體化為一種真正的紀律。 - -## 現在 - -今天,機器學習和人工智能幾乎觸及我們生活的每一個部分。這個時代要求仔細了解這些算法對人類生活的風險和潛在影響。正如微軟的 Brad Smith 所言,「信息技術引發的問題觸及隱私和言論自由等基本人權保護的核心。這些問題加重了製造這些產品的科技公司的責任。在我們看來,它們還呼籲政府進行深思熟慮的監管,並圍繞可接受的用途製定規範」([來源](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 "深度學習的歷史") -> 🎥 點擊上圖觀看視頻:Yann LeCun 在本次講座中討論深度學習的歷史 ---- -## 🚀挑戰 - -深入了解這些歷史時刻之一,並更多地了解它們背後的人。這裏有許多引人入勝的人物,沒有一項科學發現是在文化真空中創造出來的。你發現了什麽? - -## [課後測驗](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - -## 復習與自學 - -以下是要觀看和收聽的節目: - -[這是 Amy Boyd 討論人工智能進化的播客](http://runasradio.com/Shows/Show/739) - -[![Amy Boyd的《人工智能史》](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy Boyd的《人工智能史》") - -## 任務 - -[創建時間線](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/assignment.es.md b/1-Introduction/2-history-of-ML/translations/assignment.es.md deleted file mode 100644 index 504796e7..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Crea una línea de tiempo - -## Instrucciones - -Usando [este repositorio](https://github.com/Digital-Humanities-Toolkit/timeline-builder), crea una línea temporal de algunos aspectos de la historia de los algoritmos, matemáticas, estadística, Inteligencia Artificial (AI), Aprendizaje Automático (ML), o una combinación de todos estos. Te puedes enfocar en una persona, una idea o período largo de tiempo de pensamiento. Asegúrate de agregar elementos multimedia. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | Una línea de tiempo desplegada es representada como una página de Github | El código está incompleto y no fue desplegado | La línea del tiempo está incompleta, sin buena investigación y sin desplegar | diff --git a/1-Introduction/2-history-of-ML/translations/assignment.fr.md b/1-Introduction/2-history-of-ML/translations/assignment.fr.md deleted file mode 100644 index c562516e..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.fr.md +++ /dev/null @@ -1,11 +0,0 @@ -# Créer une frise chronologique - -## Instructions - -Utiliser [ce repo](https://github.com/Digital-Humanities-Toolkit/timeline-builder), créer une frise chronologique de certains aspects de l'histoire des algorithmes, des mathématiques, des statistiques, de l'IA ou du machine learning, ou une combinaison de ceux-ci. Vous pouvez vous concentrer sur une personne, une idée ou une longue période d'innovations. Assurez-vous d'ajouter des éléments multimédias. - -## Rubrique - -| Critères | Exemplaire | Adéquate | A améliorer | -| -------- | ---------------------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------ | -| | Une chronologie déployée est présentée sous forme de page GitHub | Le code est incomplet et non déployé | La chronologie est incomplète, pas bien recherchée et pas déployée | diff --git a/1-Introduction/2-history-of-ML/translations/assignment.id.md b/1-Introduction/2-history-of-ML/translations/assignment.id.md deleted file mode 100644 index 0ee7c009..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.id.md +++ /dev/null @@ -1,11 +0,0 @@ -# Membuat sebuah *timeline* - -## Instruksi - -Menggunakan [repo ini](https://github.com/Digital-Humanities-Toolkit/timeline-builder), buatlah sebuah *timeline* dari beberapa aspek sejarah algoritma, matematika, statistik, AI, atau ML, atau kombinasi dari semuanya. Kamu dapat fokus pada satu orang, satu ide, atau rentang waktu pemikiran yang panjang. Pastikan untuk menambahkan elemen multimedia. - -## Rubrik - -| Kriteria | Sangat Bagus | Cukup | Perlu Peningkatan | -| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | *Timeline* yang dideploy disajikan sebagai halaman GitHub | Kode belum lengkap dan belum dideploy | *Timeline* belum lengkap, belum diriset dengan baik dan belum dideploy | \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/assignment.it.md b/1-Introduction/2-history-of-ML/translations/assignment.it.md deleted file mode 100644 index 4de7ed14..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Creare una sequenza temporale - -## Istruzioni - -Usando [questo repository](https://github.com/Digital-Humanities-Toolkit/timeline-builder), si crei una sequenza temporale di alcuni aspetti della storia di algoritmi, matematica, statistica, AI o ML, o una combinazione di questi. Ci si può concentrare su una persona, un'idea o un lungo lasso di tempo di pensiero. Ci si assicuri di aggiungere elementi multimediali. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | Una sequenza temporale distribuita viene presentata come una pagina GitHub | Il codice è incompleto e non è stato distribuito | La sequenza temporale è incompleta, non ben studiata e non implementata | diff --git a/1-Introduction/2-history-of-ML/translations/assignment.ja.md b/1-Introduction/2-history-of-ML/translations/assignment.ja.md deleted file mode 100644 index f5f78799..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.ja.md +++ /dev/null @@ -1,11 +0,0 @@ -# 年表を作成する - -## 指示 - -[このリポジトリ](https://github.com/Digital-Humanities-Toolkit/timeline-builder) を使って、アルゴリズム・数学・統計学・人工知能・機械学習、またはこれらの組み合わせに対して、歴史のひとつの側面に関する年表を作成してください。焦点を当てるのは、ひとりの人物・ひとつのアイディア・長期間にわたる思想のいずれのものでも構いません。マルチメディアの要素を必ず加えるようにしてください。 - -## 評価基準 - -| 基準 | 模範的 | 十分 | 要改善 | -| ---- | -------------------------------------- | ------------------------------------ | ------------------------------------------------------------ | -| | GitHub page に年表がデプロイされている | コードが未完成でデプロイされていない | 年表が未完成で、十分に調査されておらず、デプロイされていない | diff --git a/1-Introduction/2-history-of-ML/translations/assignment.ko.md b/1-Introduction/2-history-of-ML/translations/assignment.ko.md deleted file mode 100644 index 7d3d2fa7..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 타임라인을 만들어 봅시다 - -## 설명 - -이 [저장소(repository)](https://github.com/Digital-Humanities-Toolkit/timeline-builder)를 사용해 알고리즘, 수학, 통계, 인공지능 또는 머신러닝 중 한 가지 이상의 연혁사를 조합하여 타임라인을 만들어 보세요. 한 명의 인물 또는 한 가지 아이디어를 집중적으로 다루셔도 되고, 여러 세기에 걸친 긴 연혁사를 다루시는 것도 좋습니다. 각 사건과 관련된 멀티미디어도 타임라인에 추가해 보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ----------------------------------------- | -------------------- | --------------------------------- | -| | 깃허브(GitHub) 페이지에 완성된 타임라인 공개 | 코드 미완성 및 미배포 | 타임라인 조사 미흡, 미완성 및 미배포 | diff --git a/1-Introduction/2-history-of-ML/translations/assignment.pt-br.md b/1-Introduction/2-history-of-ML/translations/assignment.pt-br.md deleted file mode 100644 index 9e1e6ce1..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Crie uma linha do tempo - -## Instruções - -Usando [este repositório](https://github.com/Digital-Humanities-Toolkit/timeline-builder), crie uma linha do tempo de algum aspecto da história de algoritmos, matemática, estatística, AI ou ML, ou uma combinação de esses. Você pode se concentrar em uma pessoa, uma ideia ou um longo período de pensamento. Certifique-se de adicionar elementos de multimídia. - -## Rubrica - -| Critérios | Exemplar | Adequado | Precisa Melhorar | -| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | Um cronograma implantado é apresentado como uma página do GitHub (GitHub Page) | O código está incompleto e não implementado | O cronograma está incompleto, não foi bem pesquisado e não implantado | \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/assignment.ru.md b/1-Introduction/2-history-of-ML/translations/assignment.ru.md deleted file mode 100644 index 7ee1b620..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.ru.md +++ /dev/null @@ -1,11 +0,0 @@ -# Создайте временную шкалу - -## Инструкции - -Используя [этот репозиторий](https://github.com/Digital-Humanities-Toolkit/timeline-builder), создайте временную шкалу какого-либо аспекта истории алгоритмов, математики, статистики, искусственного интеллекта или ML или их комбинации. Вы можете сосредоточиться на одном человеке, одной идее или на длительном промежутке времени. Обязательно добавьте мультимедийные элементы. - -## Рубрика - -| Критерии | Образцовый | Адекватный | Нуждается в улучшении | -| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | Развернутая временная шкала представлена в виде страницы GitHub | Код неполон и не развернут | Временная шкала неполная, недостаточно изучена и не развернута | \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/assignment.tr.md b/1-Introduction/2-history-of-ML/translations/assignment.tr.md deleted file mode 100644 index f0e87763..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.tr.md +++ /dev/null @@ -1,11 +0,0 @@ -# Bir zaman çizelgesi oluşturun - -## Talimatlar - -[Bu repoyu](https://github.com/Digital-Humanities-Toolkit/timeline-builder) kullanarak; algoritmaların, matematiğin, istatistiğin, AI veya ML'in veya bunların bir kombinasyonunun tarihinin bazı yönlerinin bir zaman çizelgesini oluşturun. Bir kişiye, bir fikre veya bir düşüncenin uzun bir zamanına odaklanabilirsiniz. Multimedya öğeleri eklediğinizden emin olun. - -## Değerlendirme Listesi - -| | Takdir edilesi | Yeterli | İyileştirilmesi Lazım | -| -------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| Kriterler | Zaman çizelgesi bir GitHub sayfası olarak yayınlanmış | Kod eksik ve henüz yayınlanmamış | Zaman çizelgesi eksik, iyi araştırılmamış ve yayınlanmamış | \ No newline at end of file diff --git a/1-Introduction/2-history-of-ML/translations/assignment.zh-cn.md b/1-Introduction/2-history-of-ML/translations/assignment.zh-cn.md deleted file mode 100644 index adf3ee15..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.zh-cn.md +++ /dev/null @@ -1,11 +0,0 @@ -# 建立一个时间轴 - -## 说明 - -使用这个 [仓库](https://github.com/Digital-Humanities-Toolkit/timeline-builder),创建一个关于算法、数学、统计学、人工智能、机器学习的某个方面或者可以综合多个以上学科来讲。你可以着重介绍某个人,某个想法,或者一个经久不衰的思想。请确保添加了多媒体元素在你的时间线中。 - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| ------------ | ---------------------------------- | ---------------------- | ------------------------------------------ | -| | 有一个用 GitHub page 展示的 timeline | 代码还不完整并且没有部署 | 时间线不完整,没有经过充分的研究,并且没有部署 | diff --git a/1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md b/1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md deleted file mode 100644 index f372e6ae..00000000 --- a/1-Introduction/2-history-of-ML/translations/assignment.zh-tw.md +++ /dev/null @@ -1,12 +0,0 @@ - -# 建立一個時間軸 - -## 說明 - -使用這個 [倉庫](https://github.com/Digital-Humanities-Toolkit/timeline-builder),創建一個關於算法、數學、統計學、人工智能、機器學習的某個方面或者可以綜合多個以上學科來講。你可以著重介紹某個人,某個想法,或者一個經久不衰的思想。請確保添加了多媒體元素在你的時間線中。 - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| ------------ | ---------------------------------- | ---------------------- | ------------------------------------------ | -| | 有一個用 GitHub page 展示的 timeline | 代碼還不完整並且沒有部署 | 時間線不完整,沒有經過充分的研究,並且沒有部署 | \ No newline at end of file diff --git a/1-Introduction/3-fairness/translations/README.es.md b/1-Introduction/3-fairness/translations/README.es.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.fr.md b/1-Introduction/3-fairness/translations/README.fr.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.id.md b/1-Introduction/3-fairness/translations/README.id.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.it.md b/1-Introduction/3-fairness/translations/README.it.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.ja.md b/1-Introduction/3-fairness/translations/README.ja.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.ko.md b/1-Introduction/3-fairness/translations/README.ko.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.pt-br.md b/1-Introduction/3-fairness/translations/README.pt-br.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.zh-cn.md b/1-Introduction/3-fairness/translations/README.zh-cn.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/README.zh-tw.md b/1-Introduction/3-fairness/translations/README.zh-tw.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.es.md b/1-Introduction/3-fairness/translations/assignment.es.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.fr.md b/1-Introduction/3-fairness/translations/assignment.fr.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.id.md b/1-Introduction/3-fairness/translations/assignment.id.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.it.md b/1-Introduction/3-fairness/translations/assignment.it.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.ja.md b/1-Introduction/3-fairness/translations/assignment.ja.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.ko.md b/1-Introduction/3-fairness/translations/assignment.ko.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.pt-br.md b/1-Introduction/3-fairness/translations/assignment.pt-br.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.zh-cn.md b/1-Introduction/3-fairness/translations/assignment.zh-cn.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/3-fairness/translations/assignment.zh-tw.md b/1-Introduction/3-fairness/translations/assignment.zh-tw.md deleted file mode 100644 index e69de29b..00000000 diff --git a/1-Introduction/4-techniques-of-ML/translations/README.es.md b/1-Introduction/4-techniques-of-ML/translations/README.es.md deleted file mode 100755 index 75828793..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.es.md +++ /dev/null @@ -1,112 +0,0 @@ -# Técnicas de Machine Learning - -El proceso de creación, uso y mantenimiento de modelos de machine learning, y los datos que se utilizan, es un proceso muy diferente de muchos otros flujos de trabajo de desarrollo. En esta lección, demistificaremos el proceso y describiremos las principales técnicas que necesita saber. Vas a: - -- Comprender los procesos que sustentan el machine learning a un alto nivel. -- Explorar conceptos básicos como 'modelos', 'predicciones', y 'datos de entrenamiento' - - -## [Cuestionario previo a la conferencia](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7?loc=es) -## Introducción - -A un alto nivel, el arte de crear procesos de machine learning (ML) se compone de una serie de pasos: - -1. **Decidir sobre la pregunta**. La mayoría de los procesos de ML, comienzan por hacer una pregunta que no puede ser respondida por un simple programa condicional o un motor basado en reglas. Esas preguntas a menudo giran en torno a predicciones basadas en una recopilación de datos. -2. **Recopile y prepare datos**. Para poder responder a su pregunta, necesita datos. La calidad y, a veces, cantidad de sus datos determinarán que tan bien puede responder a su pregunta inicial. La visualización de datos es un aspecto importante de esta fase. Esta fase también incluye dividir los datos en un grupo de entrenamiento y pruebas para construir un modelo. -3. **Elige un método de entrenamiento**. Dependiendo de su pregunta y la naturaleza de sus datos, debe elegir cómo desea entrenar un modelo para reflejar mejor sus datos y hacer predicciones precisas contra ellos. Esta es la parte de su proceso de ML que requiere experiencia específica y, a menudo, una cantidad considerable de experimentación. -4. **Entrena el modelo**. Usando sus datos de entrenamiento, usará varios algoritmos para entrenar un modelo para reconocer patrones en los datos. El modelo puede aprovechar las ponderaciones internas que se pueden ajustar para privilegiar ciertas partes de los datos sobre otras para construir un modelo mejor. -5. **Evaluar el modelo**. Utiliza datos nunca antes vistos (sus datos de prueba) de su conjunto recopilado para ver cómo se está desempeñando el modelo. -6. **Ajuste de parámetros**. Según el rendimiento de su modelo, puede rehacer el proceso utilizando diferentes parámetros, o variables, que controlan el comportamiento de los algoritmos utilizados para entrenar el modelo. -7. **Predecir**. Utilice nuevas entradas para probar la precisión de su modelo. - -## Qué preguntas hacer - -Las computadoras son particularmente hábiles para descubrir patrones ocultos en los datos. Esta utlidad es muy útil para los investigadores que tienen preguntas sobre un dominio determinado que no pueden responderse fácilmente mediante la creación de un motor de reglas basadas en condicionales. Dada una tarea actuarial, por ejemplo, un científico de datos podría construir reglas creadas manualmente sobre la mortalidad de los fumadores frente a los no fumadores. - -Sin embargo, cuando se incorporan muchas otras variables a la ecuación, un modelo de ML podría resultar más eficiente para predecir las tasas de mortalidad futuras en función de los antecedentes de salud. Un ejemplo más alegre podría hacer predicciones meteorológicas para el mes de abril en una ubicación determinada que incluya latitud, longitud, cambio climático, proximidad al océano, patrones de la corriente en chorro, y más. - -✅ Esta [presentación de diapositivas](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sobre modelos meteorológicos ofrece una perspectiva histórica del uso de ML en el análisis meteorológico. - -## Tarea previas a la construcción - -Antes de comenzar a construir su modelo, hay varias tareas que debe completar. Para examinar su pregunta y formar una hipótesis basada en las predicciones de su modelo, debe identificar y configurar varios elementos. - -### Datos - -Para poder responder su pregunta con algún tipo de certeza, necesita una buena cantidad de datos del tipo correcto. -Hay dos cosas que debe hacer en este punto: - -- **Recolectar datos**. Teniendo en cuenta la lección anterior sobre la equidad en el análisis de datos, recopile sus datos con cuidado. Tenga en cuenta la fuente de estos datos, cualquier sesgo inherente que pueda tener y documente su origen. -- **Preparar datos**. Hay varios pasos en el proceso de preparación de datos. Podría necesitar recopilar datos y normalizarlos si provienen de diversas fuentes. Puede mejorar la calidad y cantidad de los datos mediante varios métodos, como convertir strings en números (como hacemos en [Clustering](../../5-Clustering/1-Visualize/README.md)). También puede generar nuevos datos, basados en los originales (como hacemos en [Clasificación](../../4-Classification/1-Introduction/README.md)). Puede limpiar y editar los datos (como lo haremos antes de la lección [Web App](../../3-Web-App/README.md)). Por último, es posible que también deba aleatorizarlo y mezclarlo, según sus técnicas de entrenamiento. - -✅ Despúes de recopilar y procesar sus datos, tómese un momento para ver si su forma le permitirá responder a su pregunta. ¡Puede ser que los datos no funcionen bien en su tarea dada, como descubriremos en nuestras lecciones de[Clustering](../../5-Clustering/1-Visualize/README.md)! - -### Características y destino - -Una característica es una propiedad medible de los datos. En muchos conjuntos de datos se expresa como un encabezado de columna como 'date' 'size' o 'color'. La variable de entidad, normalmente representada como `X` en el código, representa la variable de entrada que se utilizará para entrenar el modelo. - -Un objetivo es una cosa que está tratando de predecir. Target generalmente representado como `y` en el código, representa la respuesta a la pregunta que está tratando de hacer de sus datos: en diciembre, ¿qué color de calabazas serán más baratas?; en San Francisco, ¿qué barrios tendrán el mejor precio de bienes raíces? A veces, target también se conoce como atributo label. - -### Seleccionando su variable característica - -🎓 **Selección y extracción de características** ¿Cómo sabe que variable elegir al construir un modelo? Probablemente pasará por un proceso de selección o extracción de características para elegir las variables correctas para un mayor rendimiento del modelo. Sin embargo, no son lo mismo: "La extracción de características crea nuevas características a partir de funciones de las características originales, mientras que la selección de características devuelve un subconjunto de las características." ([fuente](https://wikipedia.org/wiki/Feature_selection)) - -### Visualiza tus datos - -Un aspecto importante del conjunto de herramientas del científico de datos es el poder de visualizar datos utilizando varias bibliotecas excelentes como Seaborn o MatPlotLib. Representar sus datos visualmente puede permitirle descubrir correlaciones ocultas que puede aprovechar. Sus visualizaciones también pueden ayudarlo a descubrir sesgos o datos desequilibrados. (como descubrimos en [Clasificación](../../4-Classification/2-Classifiers-1/README.md)). - -### Divide tu conjunto de datos - -Antes del entrenamiento, debe dividir su conjunto de datos en dos o más partes de tamaño desigual pero que representen bien los datos. - -- **Entrenamiento**. Esta parte del conjunto de datos se ajusta a su modelo para entrenarlo. Este conjunto constituye la mayor parte del conjunto de datos original. -- **Pruebas**. Un conjunto de datos de pruebas es un grupo independiente de datos, a menudo recopilado a partir de los datos originales, que se utiliza para confirmar el rendimiento del modelo construido. -- **Validación**. Un conjunto de validación es un pequeño grupo independiente de ejemplos que se usa para ajustar los hiperparámetros o la arquitectura del modelo para mejorar el modelo. Dependiendo del tamaño de su conjunto de datos y de la pregunta que se está haciendo, es posible que no necesite crear este tercer conjunto (como notamos en [Pronóstico se series de tiempo](../../7-TimeSeries/1-Introduction/README.md)). - -## Contruye un modelo - -Usando sus datos de entrenamiento, su objetivo es construir un modelo, o una representación estadística de sus datos, utilizando varios algoritmos para **entrenarlo**. El entrenamiento de un modelo lo expone a los datos y le permite hacer suposiciones sobre los patrones percibidos que descubre, valida y rechaza. - -### Decide un método de entrenamiento - -Dependiendo de su pregunta y la naturaleza de sus datos, elegirá un método para entrenarlos. Echando un vistazo a la [documentación de Scikit-learn ](https://scikit-learn.org/stable/user_guide.html) - que usamos en este curso - puede explorar muchas formas de entrenar un modelo. Dependiendo de su experiencia, es posible que deba probar varios métodos diferentes para construir el mejor modelo. Es probable que pase por un proceso en el que los científicos de datos evalúan el rendimiento de un modelo alimentándolo con datos no vistos anteriormente por el modelo, verificando la precisión, el sesgo, y otros problemas que degradan la calidad, y seleccionando el método de entrenamieto más apropiado para la tarea en cuestión. -### Entrena un modelo - -Armado con sus datos de entrenamiento, está listo para "ajustarlo" para crear un modelo. Notará que en muchas bibliotecas de ML encontrará un método de la forma 'model.fit' - es en este momento que envía su variable de característica como una matriz de valores (generalmente `X`) y una variable de destino (generalmente `y`). - -### Evaluar el modelo - -Una vez que se completa el proceso de entrenamiento (puede tomar muchas iteraciones, o 'épocas', entrenar un modelo de gran tamaño), podrá evaluar la calidad del modelo utilizando datos de prueba para medir su rendimiento. Estos datos son un subconjunto de los datos originales que el modelo no ha analizado previamente. Puede imprimir una tabla de métricas sobre la calidad de su modelo. - -🎓 **Ajuste del modelo (Model fitting)** - -En el contexto del machine learning, el ajuste del modelo se refiere a la precisión de la función subyacente del modelo cuando intenta analizar datos con los que no está familiarizado. - -🎓 **Ajuste insuficiente (Underfitting)** y **sobreajuste (overfitting)** son problemas comunes que degradan la calidad del modelo, ya que el modelo no encaja suficientemente bien, o encaja demasiado bien. Esto hace que el modelo haga predicciones demasiado estrechamente alineadas o demasiado poco alineadas con sus datos de entrenamiento. Un modelo sobreajustado (overfitting) predice demasiado bien los datos de entrenamiento porque ha aprendido demasiado bien los detalles de los datos y el ruido. Un modelo insuficientemente ajustado (Underfitting) es impreciso, ya que ni puede analizar con precisión sus datos de entrenamiento ni los datos que aún no ha 'visto'. - -![Sobreajuste de un modelo](images/overfitting.png) -> Infografía de [Jen Looper](https://twitter.com/jenlooper) - -## Ajuste de parámetros - -Una vez que haya completado su entrenamiento inicial, observe la calidad del modelo y considere mejorarlo ajustando sus 'hiperparámetros'. Lea más sobre el proceso [en la documentación](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Predicción - -Este es el momento en el que puede usar datos completamente nuevos para probar la precisión de su modelo. En una configuración de ML aplicado, donde está creando activos web para usar el modelo en producción, este proceso puede implicar la recopilación de la entrada del usuario (presionar un botón, por ejemplo) para establecer una variable y enviarla al modelo para la inferencia o evaluación. -En estas lecciones, descubrirá cómo utilizar estos pasos para preparar, construir, probar, evaluar, y predecir - todos los gestos de un científico de datos y más, a medida que avanza en su viaje para convertirse en un ingeniero de machine learning 'full stack'. ---- - -## 🚀Desafío - -Dibuje un diagrama de flujos que refleje los pasos de practicante de ML. ¿Dónde te ves ahora mismo en el proceso? ¿Dónde predice que encontrará dificultades? ¿Qué te parece fácil? - -## [Cuestionario posterior a la conferencia](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8?loc=es) - -## Revisión & Autoestudio - -Busque entrevistas en línea con científicos de datos que analicen su trabajo diario. Aquí está [uno](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Asignación - -[Entrevistar a un científico de datos](assignment.md) diff --git a/1-Introduction/4-techniques-of-ML/translations/README.id.md b/1-Introduction/4-techniques-of-ML/translations/README.id.md deleted file mode 100644 index e745955f..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.id.md +++ /dev/null @@ -1,111 +0,0 @@ -# Teknik-teknik Machine Learning - -Proses membangun, menggunakan, dan memelihara model machine learning dan data yang digunakan adalah proses yang sangat berbeda dari banyak alur kerja pengembangan lainnya. Dalam pelajaran ini, kita akan mengungkap prosesnya dan menguraikan teknik utama yang perlu Kamu ketahui. Kamu akan: - -- Memahami gambaran dari proses yang mendasari machine learning. -- Menjelajahi konsep dasar seperti '*models*', '*predictions*', dan '*training data*'. - -## [Quiz Pra-Pelajaran](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) -## Pengantar - -Gambaran membuat proses machine learning (ML) terdiri dari sejumlah langkah: - -1. **Menentukan pertanyaan**. Sebagian besar proses ML dimulai dengan mengajukan pertanyaan yang tidak dapat dijawab oleh program kondisional sederhana atau mesin berbasis aturan (*rules-based engine*). Pertanyaan-pertanyaan ini sering berkisar seputar prediksi berdasarkan kumpulan data. -2. **Mengumpulkan dan menyiapkan data**. Untuk dapat menjawab pertanyaanmu, Kamu memerlukan data. Bagaimana kualitas dan terkadang kuantitas data kamu akan menentukan seberapa baik kamu dapat menjawab pertanyaan awal kamu. Memvisualisasikan data merupakan aspek penting dari fase ini. Fase ini juga mencakup pemisahan data menjadi kelompok *training* dan *testing* untuk membangun model. -3. **Memilih metode training**. Tergantung dari pertanyaan dan sifat datamu, Kamu perlu memilih bagaimana kamu ingin men-training sebuah model untuk mencerminkan data kamu dengan baik dan membuat prediksi yang akurat terhadapnya. Ini adalah bagian dari proses ML yang membutuhkan keahlian khusus dan seringkali perlu banyak eksperimen. -4. **Melatih model**. Dengan menggunakan data *training*, kamu akan menggunakan berbagai algoritma untuk melatih model guna mengenali pola dalam data. Modelnya mungkin bisa memanfaatkan *internal weight* yang dapat disesuaikan untuk memberi hak istimewa pada bagian tertentu dari data dibandingkan bagian lainnya untuk membangun model yang lebih baik. -5. **Mengevaluasi model**. Gunakan data yang belum pernah dilihat sebelumnya (data *testing*) untuk melihat bagaimana kinerja model. -6. **Parameter tuning**. Berdasarkan kinerja modelmu, Kamu dapat mengulang prosesnya menggunakan parameter atau variabel yang berbeda, yang mengontrol perilaku algoritma yang digunakan untuk melatih model. -7. **Prediksi**. Gunakan input baru untuk menguji keakuratan model kamu. - -## Pertanyaan apa yang harus ditanyakan? - -Komputer sangat ahli dalam menemukan pola tersembunyi dalam data. Hal ini sangat membantu peneliti yang memiliki pertanyaan tentang domain tertentu yang tidak dapat dijawab dengan mudah dari hanya membuat mesin berbasis aturan kondisional (*conditionally-based rules engine*). Untuk tugas aktuaria misalnya, seorang data scientist mungkin dapat membuat aturan secara manual seputar mortalitas perokok vs non-perokok. - -Namun, ketika banyak variabel lain dimasukkan ke dalam persamaan, model ML mungkin terbukti lebih efisien untuk memprediksi tingkat mortalitas di masa depan berdasarkan riwayat kesehatan masa lalu. Contoh yang lebih menyenangkan mungkin membuat prediksi cuaca untuk bulan April di lokasi tertentu berdasarkan data yang mencakup garis lintang, garis bujur, perubahan iklim, kedekatan dengan laut, pola aliran udara (Jet Stream), dan banyak lagi. - -✅ [Slide deck](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) ini menawarkan perspektif historis pada model cuaca dengan menggunakan ML dalam analisis cuaca. - -## Tugas Pra-Pembuatan - -Sebelum mulai membangun model kamu, ada beberapa tugas yang harus kamu selesaikan. Untuk menguji pertanyaan kamu dan membentuk hipotesis berdasarkan prediksi model, Kamu perlu mengidentifikasi dan mengonfigurasi beberapa elemen. - -### Data - -Untuk dapat menjawab pertanyaan kamu dengan kepastian, Kamu memerlukan sejumlah besar data dengan jenis yang tepat. Ada dua hal yang perlu kamu lakukan pada saat ini: - -- **Mengumpulkan data**. Ingat pelajaran sebelumnya tentang keadilan dalam analisis data, kumpulkan data kamu dengan hati-hati. Waspadai sumber datanya, bias bawaan apa pun yang mungkin dimiliki, dan dokumentasikan asalnya. -- **Menyiapkan data**. Ada beberapa langkah dalam proses persiapan data. Kamu mungkin perlu menyusun data dan melakukan normalisasi jika berasal dari berbagai sumber. Kamu dapat meningkatkan kualitas dan kuantitas data melalui berbagai metode seperti mengonversi string menjadi angka (seperti yang kita lakukan di [Clustering](../../5-Clustering/1-Visualize/translations/README.id.md)). Kamu mungkin juga bisa membuat data baru berdasarkan data yang asli (seperti yang kita lakukan di [Classification](../../4-Classification/1-Introduction/translations/README.id.md)). Kamu bisa membersihkan dan mengubah data (seperti yang kita lakukan sebelum pelajaran [Web App](../3-Web-App/translations/README.id.md)). Terakhir, Kamu mungkin juga perlu mengacaknya dan mengubah urutannya, tergantung pada teknik *training* kamu. - -✅ Setelah mengumpulkan dan memproses data kamu, luangkan waktu sejenak untuk melihat apakah bentuknya memungkinkan kamu untuk menjawab pertanyaan yang kamu maksudkan. Mungkin data tidak akan berkinerja baik dalam tugas yang kamu berikan, seperti yang kita temukan dalam pelajaran [Clustering](../../5-Clustering/1-Visualize/translations/README.id.md). - -### Fitur dan Target - -Fitur adalah properti terukur dari data Anda. Dalam banyak set data, data tersebut dinyatakan sebagai judul kolom seperti 'date' 'size' atau 'color'. Variabel fitur Anda, biasanya direpresentasikan sebagai `X` dalam kode, mewakili variabel input yang akan digunakan untuk melatih model. - -A target is a thing you are trying to predict. Target usually represented as `y` in code, represents the answer to the question you are trying to ask of your data: in December, what color pumpkins will be cheapest? in San Francisco, what neighborhoods will have the best real estate price? Sometimes target is also referred as label attribute. - -### Memilih variabel fiturmu - -🎓 **Feature Selection dan Feature Extraction** Bagaimana kamu tahu variabel mana yang harus dipilih saat membangun model? Kamu mungkin akan melalui proses pemilihan fitur (*Feature Selection*) atau ekstraksi fitur (*Feature Extraction*) untuk memilih variabel yang tepat untuk membuat model yang berkinerja paling baik. Namun, keduanya tidak sama: "Ekstraksi fitur membuat fitur baru dari fungsi fitur asli, sedangkan pemilihan fitur mengembalikan subset fitur." ([sumber](https://wikipedia.org/wiki/Feature_selection)) -### Visualisasikan datamu - -Aspek penting dari toolkit data scientist adalah kemampuan untuk memvisualisasikan data menggunakan beberapa *library* seperti Seaborn atau MatPlotLib. Merepresentasikan data kamu secara visual memungkinkan kamu mengungkap korelasi tersembunyi yang dapat kamu manfaatkan. Visualisasimu mungkin juga membantu kamu mengungkap data yang bias atau tidak seimbang (seperti yang kita temukan dalam [Classification](../../4-Classification/2-Classifiers-1/translations/README.id.md)). -### Membagi dataset - -Sebelum memulai *training*, Kamu perlu membagi dataset menjadi dua atau lebih bagian dengan ukuran yang tidak sama tapi masih mewakili data dengan baik. - -- **Training**. Bagian dataset ini digunakan untuk men-training model kamu. Bagian dataset ini merupakan mayoritas dari dataset asli. -- **Testing**. Sebuah dataset tes adalah kelompok data independen, seringkali dikumpulkan dari data yang asli yang akan digunakan untuk mengkonfirmasi kinerja dari model yang dibuat. -- **Validating**. Dataset validasi adalah kumpulan contoh mandiri yang lebih kecil yang kamu gunakan untuk menyetel hyperparameter atau arsitektur model untuk meningkatkan model. Tergantung dari ukuran data dan pertanyaan yang kamu ajukan, Kamu mungkin tidak perlu membuat dataset ketiga ini (seperti yang kita catat dalam [Time Series Forecasting](../7-TimeSeries/1-Introduction/translations/README.id.md)). - -## Membuat sebuah model - -Dengan menggunakan data *training*, tujuan kamu adalah membuat model atau representasi statistik data kamu menggunakan berbagai algoritma untuk **melatihnya**. Melatih model berarti mengeksposnya dengan data dan mengizinkannya membuat asumsi tentang pola yang ditemukan, divalidasi, dan diterima atau ditolak. - -### Tentukan metode training - -Tergantung dari pertanyaan dan sifat datamu, Kamu akan memilih metode untuk melatihnya. Buka dokumentasi [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) yang kita gunakan dalam pelajaran ini, kamu bisa menjelajahi banyak cara untuk melatih sebuah model. Tergantung dari pengalamanmu, kamu mungkin perlu mencoba beberapa metode yang berbeda untuk membuat model yang terbaik. Kemungkinan kamu akan melalui proses di mana data scientist mengevaluasi kinerja model dengan memasukkan data yang belum pernah dilihat, memeriksa akurasi, bias, dan masalah penurunan kualitas lainnya, dan memilih metode training yang paling tepat untuk tugas yang ada. - -### Melatih sebuah model - -Berbekan dengan data pelatihan Anda, Anda siap untuk 'menyesuaikan' untuk membuat model. Anda akan melihat bahwa di banyak perpustakaan ML Anda akan menemukan kode 'model.fit' - saat inilah Anda mengirim variabel fitur Anda sebagai array nilai (biasanya `X`) dan variabel target (biasanya `y`). - -### Mengevaluasi model - -Setelah proses *training* selesai (ini mungkin membutuhkan banyak iterasi, atau 'epoch', untuk melatih model besar), Kamu akan dapat mengevaluasi kualitas model dengan menggunakan data tes untuk mengukur kinerjanya. Data ini merupakan subset dari data asli yang modelnya belum pernah dianalisis sebelumnya. Kamu dapat mencetak tabel metrik tentang kualitas model kamu. - -🎓 **Model fitting** - -Dalam konteks machine learning, *model fitting* mengacu pada keakuratan dari fungsi yang mendasari model saat mencoba menganalisis data yang tidak familiar. - -🎓 **Underfitting** dan **overfitting** adalah masalah umum yang menurunkan kualitas model, karena model tidak cukup akurat atau terlalu akurat. Hal ini menyebabkan model membuat prediksi yang terlalu selaras atau tidak cukup selaras dengan data trainingnya. Model overfit memprediksi data *training* terlalu baik karena telah mempelajari detail dan noise data dengan terlalu baik. Model underfit tidak akurat karena tidak dapat menganalisis data *training* atau data yang belum pernah dilihat sebelumnya secara akurat. - -![overfitting model](../images/overfitting.png) -> Infografis oleh [Jen Looper](https://twitter.com/jenlooper) - -## Parameter tuning - -Setelah *training* awal selesai, amati kualitas model dan pertimbangkan untuk meningkatkannya dengan mengubah 'hyperparameter' nya. Baca lebih lanjut tentang prosesnya [di dalam dokumentasi](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Prediksi - -Ini adalah saat di mana Kamu dapat menggunakan data yang sama sekali baru untuk menguji akurasi model kamu. Dalam setelan ML 'terapan', di mana kamu membangun aset web untuk menggunakan modelnya dalam produksi, proses ini mungkin melibatkan pengumpulan input pengguna (misalnya menekan tombol) untuk menyetel variabel dan mengirimkannya ke model untuk inferensi, atau evaluasi. - -Dalam pelajaran ini, Kamu akan menemukan cara untuk menggunakan langkah-langkah ini untuk mempersiapkan, membangun, menguji, mengevaluasi, dan memprediksi - semua gestur data scientist dan banyak lagi, seiring kemajuanmu dalam perjalanan menjadi 'full stack' ML engineer. - ---- - -## 🚀Tantangan - -Gambarlah sebuah flow chart yang mencerminkan langkah-langkah seorang praktisi ML. Di mana kamu melihat diri kamu saat ini dalam prosesnya? Di mana kamu memprediksi kamu akan menemukan kesulitan? Apa yang tampak mudah bagi kamu? - -## [Quiz Pra-Pelajaran](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## Ulasan & Belajar Mandiri - -Cari di Internet mengenai wawancara dengan data scientist yang mendiskusikan pekerjaan sehari-hari mereka. Ini [salah satunya](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Tugas - -[Wawancara dengan data scientist](assignment.id.md) diff --git a/1-Introduction/4-techniques-of-ML/translations/README.it.md b/1-Introduction/4-techniques-of-ML/translations/README.it.md deleted file mode 100644 index d43f3b52..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.it.md +++ /dev/null @@ -1,114 +0,0 @@ -# Tecniche di Machine Learning - -Il processo di creazione, utilizzo e mantenimento dei modelli di machine learning e dei dati che utilizzano è un processo molto diverso da molti altri flussi di lavoro di sviluppo. In questa lezione si demistifica il processo, e si delineano le principali tecniche che occorre conoscere. Si dovrà: - -- Comprendere i processi ad alto livello alla base di machine learning. -- Esplorare concetti di base come "modelli", "previsioni" e "dati di addestramento". - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/?loc=it) - -## Introduzione - -Ad alto livello, il mestiere di creare processi di apprendimento automatico (ML) comprende una serie di passaggi: - -1. **Decidere circa la domanda**. La maggior parte dei processi ML inizia ponendo una domanda alla quale non è possibile ottenere risposta da un semplice programma condizionale o da un motore basato su regole. Queste domande spesso ruotano attorno a previsioni basate su una raccolta di dati. -2. **Raccogliere e preparare i dati**. Per poter rispondere alla domanda, servono dati. La qualità e, a volte, la quantità dei dati determineranno quanto bene sarà possibile rispondere alla domanda iniziale. La visualizzazione dei dati è un aspetto importante di questa fase. Questa fase include anche la suddivisione dei dati in un gruppo di addestramento (training) e test per costruire un modello. -3. **Scegliere un metodo di addestramento**. A seconda della domanda e della natura dei dati, è necessario scegliere come si desidera addestrare un modello per riflettere al meglio i dati e fare previsioni accurate su di essi. Questa è la parte del processo di ML che richiede competenze specifiche e, spesso, una notevole quantità di sperimentazione. -4. **Addestrare il modello**. Usando i dati di addestramento, si utilizzeranno vari algoritmi per addestrare un modello a riconoscere modelli nei dati. Il modello potrebbe sfruttare pesi interni che possono essere regolati per privilegiare alcune parti dei dati rispetto ad altre per costruire un modello migliore. -5. **Valutare il modello**. Si utilizzano dati mai visti prima (i dati di test) da quelli raccolti per osservare le prestazioni del modello. -6. **Regolazione dei parametri**. In base alle prestazioni del modello, si può ripetere il processo utilizzando parametri differenti, o variabili, che controllano il comportamento degli algoritmi utilizzati per addestrare il modello. -7. **Prevedere**. Usare nuovi input per testare la precisione del modello. - -## Che domanda fare - -I computer sono particolarmente abili nello scoprire modelli nascosti nei dati. Questa caratteristica è molto utile per i ricercatori che hanno domande su un determinato campo a cui non è possibile rispondere facilmente creando un motore di regole basato su condizioni. Dato un compito attuariale, ad esempio, un data scientist potrebbe essere in grado di costruire manualmente regole sulla mortalità dei fumatori rispetto ai non fumatori. - -Quando molte altre variabili vengono introdotte nell'equazione, tuttavia, un modello ML potrebbe rivelarsi più efficiente per prevedere i tassi di mortalità futuri in base alla storia sanitaria passata. Un esempio più allegro potrebbe essere fare previsioni meteorologiche per il mese di aprile in una determinata località sulla base di dati che includono latitudine, longitudine, cambiamento climatico, vicinanza all'oceano, modelli della corrente a getto e altro ancora. - -✅ Questa [presentazione](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sui modelli meteorologici offre una prospettiva storica per l'utilizzo di ML nell'analisi meteorologica. - -## Attività di pre-costruzione - -Prima di iniziare a costruire il proprio modello, ci sono diverse attività da completare. Per testare la domanda e formare un'ipotesi basata sulle previsioni di un modello, occorre identificare e configurare diversi elementi. - -### Dati - -Per poter rispondere con sicurezza alla domanda, serve una buona quantità di dati del tipo giusto. Ci sono due cose da fare a questo punto: - -- **Raccogliere dati**. Tenendo presente la lezione precedente sull'equità nell'analisi dei dati, si raccolgano i dati con cura. Ci sia consapevolezza delle fonti di questi dati, di eventuali pregiudizi intrinseci che potrebbero avere e si documenti la loro origine. -- **Preparare i dati**. Ci sono diversi passaggi nel processo di preparazione dei dati. Potrebbe essere necessario raccogliere i dati e normalizzarli se provengono da fonti diverse. Si può migliorare la qualità e la quantità dei dati attraverso vari metodi come la conversione di stringhe in numeri (come si fa in [Clustering](../../../5-Clustering/1-Visualize/transaltions/README.it.md)). Si potrebbero anche generare nuovi dati, basati sull'originale (come si fa in [Classificazione](../../../4-Classification/1-Introduction/translations/README.it.md)). Si possono pulire e modificare i dati (come verrà fatto prima della lezione sull'[app Web](../../../3-Web-App/translations/README.it.md) ). Infine, si potrebbe anche aver bisogno di renderli casuali e mescolarli, a seconda delle proprie tecniche di addestramento. - -✅ Dopo aver raccolto ed elaborato i propri dati, si prenda un momento per vedere se la loro forma consentirà di rispondere alla domanda prevista. Potrebbe essere che i dati non funzionino bene nello svolgere il compito assegnato, come si scopre nelle lezioni di [Clustering](../../../5-Clustering/1-Visualize/translations/README.it.md)! - -### Caratteristiche e destinazione - -Una caratteristica è una proprietà misurabile dei dati. In molti set di dati è espresso come intestazione di colonna come 'date' 'size' o 'color'. La variabile di caratteristica, solitamente rappresentata come `X` nel codice, rappresenta la variabile di input che verrà utilizzata per il training del modello. - -Un obiettivo è una cosa che stai cercando di prevedere. Target solitamente rappresentato come `y` nel codice, rappresenta la risposta alla domanda che stai cercando di porre dei tuoi dati: a dicembre, di che colore saranno le zucche più economiche? a San Francisco, quali quartieri avranno il miglior prezzo immobiliare? A volte la destinazione viene anche definita attributo label. - -### Selezione della variabile caratteristica - -🎓 **Selezione ed estrazione della caratteristica** Come si fa a sapere quale variabile scegliere quando si costruisce un modello? Probabilmente si dovrà passare attraverso un processo di selezione o estrazione delle caratteristiche per scegliere le variabili giuste per il modello più efficace. Tuttavia, non è la stessa cosa: "L'estrazione delle caratteristiche crea nuove caratteristiche dalle funzioni delle caratteristiche originali, mentre la selezione delle caratteristiche restituisce un sottoinsieme delle caratteristiche". ([fonte](https://it.wikipedia.org/wiki/Selezione_delle_caratteristiche)) - -### Visualizzare i dati - -Un aspetto importante del bagaglio del data scientist è la capacità di visualizzare i dati utilizzando diverse eccellenti librerie come Seaborn o MatPlotLib. Rappresentare visivamente i propri dati potrebbe consentire di scoprire correlazioni nascoste che si possono sfruttare. Le visualizzazioni potrebbero anche aiutare a scoprire pregiudizi o dati sbilanciati (come si scopre in [Classificazione](../../../4-Classification/2-Classifiers-1/translations/README.it.md)). - -### Dividere l'insieme di dati - -Prima dell'addestramento, è necessario dividere l'insieme di dati in due o più parti di dimensioni diverse che rappresentano comunque bene i dati. - -- **Addestramento**. Questa parte dell'insieme di dati è adatta al proprio modello per addestrarlo. Questo insieme costituisce la maggior parte dell'insieme di dati originale. -- **Test**. Un insieme di dati di test è un gruppo indipendente di dati, spesso raccolti dai dati originali, che si utilizzano per confermare le prestazioni del modello creato. -- **Convalida**. Un insieme di convalida è un gruppo indipendente più piccolo di esempi da usare per ottimizzare gli iperparametri, o architettura, del modello per migliorarlo. A seconda delle dimensioni dei propri dati e della domanda che si sta ponendo, si potrebbe non aver bisogno di creare questo terzo insieme (come si nota in [Previsione delle Serie Temporali](../../../7-TimeSeries/1-Introduction/translations/README.it.md)). - -## Costruire un modello - -Utilizzando i dati di addestramento, l'obiettivo è costruire un modello o una rappresentazione statistica dei propri dati, utilizzando vari algoritmi per **addestrarlo** . L'addestramento di un modello lo espone ai dati e consente di formulare ipotesi sui modelli percepiti che scopre, convalida e accetta o rifiuta. - -### Decidere un metodo di addestramento - -A seconda della domanda e della natura dei dati, si sceglierà un metodo per addestrarlo. Passando attraverso [la documentazione di Scikit-learn](https://scikit-learn.org/stable/user_guide.html), che si usa in questo corso, si possono esplorare molti modi per addestrare un modello. A seconda della propria esperienza, si potrebbe dover provare diversi metodi per creare il modello migliore. È probabile che si attraversi un processo in cui i data scientist valutano le prestazioni di un modello fornendogli dati non visti, verificandone l'accuratezza, i pregiudizi e altri problemi che degradano la qualità e selezionando il metodo di addestramento più appropriato per l'attività da svolgere. - -### Allenare un modello - -Armati dei tuoi dati di allenamento, sei pronto a "adattarlo" per creare un modello. Noterai che in molte librerie ML troverai il codice "model.fit" - è in questo momento che invii la tua variabile di funzionalità come matrice di valori (in genere `X`) e una variabile di destinazione (di solito `y`). - -### Valutare il modello - -Una volta completato il processo di addestramento (potrebbero essere necessarie molte iterazioni, o "epoche", per addestrare un modello di grandi dimensioni), si sarà in grado di valutare la qualità del modello utilizzando i dati di test per valutarne le prestazioni. Questi dati sono un sottoinsieme dei dati originali che il modello non ha analizzato in precedenza. Si può stampare una tabella di metriche sulla qualità del proprio modello. - -🎓 **Adattamento del modello** - -Nel contesto di machine learning, l'adattamento del modello si riferisce all'accuratezza della funzione sottostante del modello mentre tenta di analizzare dati con cui non ha familiarità. - -🎓 **Inadeguatezza** o **sovraadattamento** sono problemi comuni che degradano la qualità del modello, poiché il modello non si adatta abbastanza bene o troppo bene. Ciò fa sì che il modello esegua previsioni troppo allineate o troppo poco allineate con i suoi dati di addestramento. Un modello overfit (sovraaddestrato) prevede troppo bene i dati di addestramento perché ha appreso troppo bene i dettagli e il rumore dei dati. Un modello underfit (inadeguato) non è accurato in quanto non può né analizzare accuratamente i suoi dati di allenamento né i dati che non ha ancora "visto". - -![modello sovraaddestrato](../images/overfitting.png) -> Infografica di [Jen Looper](https://twitter.com/jenlooper) - -## Sintonia dei parametri - -Una volta completato l'addestramento iniziale, si osservi la qualità del modello e si valuti di migliorarlo modificando i suoi "iperparametri". Maggiori informazioni sul processo [nella documentazione](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Previsione - -Questo è il momento in cui si possono utilizzare dati completamente nuovi per testare l'accuratezza del proprio modello. In un'impostazione ML "applicata", in cui si creano risorse Web per utilizzare il modello in produzione, questo processo potrebbe comportare la raccolta dell'input dell'utente (ad esempio, la pressione di un pulsante) per impostare una variabile e inviarla al modello per l'inferenza, oppure valutazione. - -In queste lezioni si scoprirà come utilizzare questi passaggi per preparare, costruire, testare, valutare e prevedere - tutti gesti di un data scientist e altro ancora, mentre si avanza nel proprio viaggio per diventare un ingegnere ML "full stack". - ---- - -## 🚀 Sfida - -Disegnare un diagramma di flusso che rifletta i passaggi di un professionista di ML. Dove ci si vede in questo momento nel processo? Dove si prevede che sorgeranno difficoltà? Cosa sembra facile? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/?loc=it) - -## Revisione e Auto Apprendimento - -Cercare online le interviste con i data scientist che discutono del loro lavoro quotidiano. Eccone [una](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Compito - -[Intervista a un data scientist](assignment.it.md) diff --git a/1-Introduction/4-techniques-of-ML/translations/README.ja.md b/1-Introduction/4-techniques-of-ML/translations/README.ja.md deleted file mode 100644 index d326dc6c..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.ja.md +++ /dev/null @@ -1,114 +0,0 @@ -# 機械学習の手法 - -機械学習モデルやそのモデルが使用するデータを構築・使用・管理するプロセスは、他の多くの開発ワークフローとは全く異なるものです。このレッスンでは、このプロセスを明快にして、知っておくべき主な手法の概要をまとめます。あなたは、 - -- 機械学習を支えるプロセスを高い水準で理解します。 -- 「モデル」「予測」「訓練データ」などの基本的な概念を調べます。 - -## [講義前の小テスト](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7?loc=ja) - -## 導入 - -大まかに言うと、機械学習 (Machine Learning: ML) プロセスを作成する技術はいくつかのステップで構成されています。 - -1. **質問を決める**。ほとんどの機械学習プロセスは、単純な条件のプログラムやルールベースのエンジンでは答えられないような質問をすることから始まります。このような質問は、データの集合を使った予測を中心にされることが多いです。 -2. **データを集めて準備する**。質問に答えるためにはデータが必要です。データの質と、ときには量が、最初の質問にどれだけうまく答えられるかを決めます。データの可視化がこのフェーズの重要な側面です。モデルを構築するためにデータを訓練グループとテストグループに分けることもこのフェーズに含みます。 -3. **学習方法を選ぶ**。質問の内容やデータの性質に応じて、データを最も良く反映して正確に予測できるモデルを、どのように学習するかを選ぶ必要があります。これは機械学習プロセスの中でも、特定の専門知識と、多くの場合はかなりの試行回数が必要になる部分です。 -4. **モデルを学習する**。データのパターンを認識するモデルを学習するために、訓練データと様々なアルゴリズムを使います。モデルはより良いモデルを構築するために、データの特定の部分を優先するように調整できる内部の重みを活用するかもしれません。 -5. **モデルを評価する**。モデルがどのように動作しているかを確認するために、集めたデータの中からまだ見たことのないもの(テストデータ)を使います。 -6. **パラメータチューニング**。モデルの性能によっては、モデルを学習するために使われる、各アルゴリズムの挙動を制御するパラメータや変数を変更してプロセスをやり直すこともできます。 -7. **予測する**。モデルの精度をテストするために新しい入力を使います。 - -## どのような質問をすれば良いか - -コンピュータはデータの中に隠れているパターンを見つけることがとても得意です。この有用性は、条件ベースのルールエンジンを作っても簡単には答えられないような、特定の領域に関する質問を持っている研究者にとって非常に役立ちます。たとえば、ある保険数理の問題があったとして、データサイエンティストは喫煙者と非喫煙者の死亡率に関する法則を自分の手だけでも作れるかもしれません。 - -しかし、他にも多くの変数が方程式に含まれる場合、過去の健康状態から将来の死亡率を予測する機械学習モデルの方が効率的かもしれません。もっと明るいテーマの例としては、緯度、経度、気候変動、海への近さ、ジェット気流のパターンなどのデータに基づいて、特定の場所における4月の天気を予測することができます。 - -✅ 気象モデルに関するこの [スライド](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) は、気象解析に機械学習を使う際の歴史的な考え方を示しています。 - -## 構築前のタスク - -モデルの構築を始める前に、いくつかのタスクを完了させる必要があります。質問をテストしたりモデルの予測に基づいた仮説を立てたりするためには、いくつかの要素を特定して設定する必要があります。 - -### データ - -質問に確実に答えるためには、適切な種類のデータが大量に必要になります。ここではやるべきことが2つあります。 - -- **データを集める**。データ解析における公平性に関する前回の講義を思い出しながら、慎重にデータを集めてください。特定のバイアスを持っているかもしれないデータのソースに注意し、それを記録しておいてください。 -- **データを準備する**。データを準備するプロセスにはいくつかのステップがあります。異なるソースからデータを集めた場合、照合と正規化が必要になるかもしれません。([クラスタリング](../../../5-Clustering/1-Visualize/README.md) で行っているように、)文字列を数値に変換するなどの様々な方法でデータの質と量を向上させることができます。([分類](../../../4-Classification/1-Introduction/README.md) で行っているように、)元のデータから新しいデータを生成することもできます。([Webアプリ](../../../3-Web-App/README.md) の講義の前に行うように、)データをクリーニングしたり編集したりすることができます。最後に、学習の手法によっては、ランダムにしたりシャッフルしたりする必要もあるかもしれません。 - -✅ データを集めて処理した後は、その形で意図した質問に対応できるかどうかを確認してみましょう。[クラスタリング](../../../5-Clustering/1-Visualize/README.md) の講義でわかるように、データは与えられたタスクに対して上手く機能しないかもしれません! - -### 機能とターゲット - -フィーチャは、データの測定可能なプロパティです。多くのデータセットでは、'日付' 'サイズ' や '色' のような列見出しとして表現されます。通常、コードでは `X` として表されるフィーチャ変数は、モデルのトレーニングに使用される入力変数を表します - -ターゲットは、予測しようとしているものです。ターゲットは通常、コードで`y`として表され、あなたのデータを尋ねようとしている質問に対する答えを表します:12月に、どの色のカボチャが最も安くなりますか?サンフランシスコでは、どの地域が最高の不動産価格を持つでしょうか?ターゲットはラベル属性とも呼ばれることもあります。 - -### 特徴量の選択 - -🎓 **特徴選択と特徴抽出** モデルを構築する際にどの変数を選ぶべきかは、どうすればわかるでしょうか?最も性能の高いモデルのためには、適した変数を選択する特徴選択や特徴抽出のプロセスをたどることになるでしょう。しかし、これらは同じものではありません。「特徴抽出は元の特徴の機能から新しい特徴を作成するのに対し、特徴選択は特徴の一部を返すものです。」 ([出典](https://wikipedia.org/wiki/Feature_selection)) - -### データを可視化する - -データサイエンティストの道具に関する重要な側面は、Seaborn や MatPlotLib などの優れたライブラリを使ってデータを可視化する力です。データを視覚的に表現することで、隠れた相関関係を見つけて活用できるかもしれません。また、([分類](../../../4-Classification/2-Classifiers-1/README.md) でわかるように、)視覚化することで、バイアスやバランシングされていないデータを見つけられるかもしれません。 - -### データセットを分割する - -学習の前にデータセットを2つ以上に分割して、それぞれがデータを表すのに十分かつ不均等な大きさにする必要があります。 - -- **学習**。データセットのこの部分は、モデルを学習するために適合させます。これは元のデータセットの大部分を占めます。 -- **テスト**。テストデータセットとは、構築したモデルの性能を確認するために使用する独立したデータグループのことで、多くの場合は元のデータから集められます。 -- **検証**。検証セットとは、さらに小さくて独立したサンプルの集合のことで、モデルを改善するためにハイパーパラメータや構造を調整する際に使用されます。([時系列予測](../../../7-TimeSeries/1-Introduction/README.md) に記載しているように、)データの大きさや質問の内容によっては、この3つ目のセットを作る必要はありません。 - -## モデルの構築 - -訓練データと様々なアルゴリズムを使った **学習** によって、モデルもしくはデータの統計的な表現を構築することが目標です。モデルを学習することで、データを扱えるようになったり、発見、検証、肯定または否定したパターンに関する仮説を立てることができたりします。 - -### 学習方法を決める - -質問の内容やデータの性質に応じて、モデルを学習する方法を選択します。このコースで使用する [Scikit-learn のドキュメント](https://scikit-learn.org/stable/user_guide.html) を見ると、モデルを学習する様々な方法を調べられます。経験次第では、最適なモデルを構築するためにいくつかの異なる方法を試す必要があるかもしれません。また、モデルが見たことのないデータを与えたり、質を下げている問題、精度、バイアスについて調べたり、タスクに対して最適な学習方法を選んだりすることで、データサイエンティストが行っている、モデルの性能を評価するプロセスを踏むことになるでしょう。 - -### モデルを学習する - -トレーニングデータを使用して、モデルを作成するために「フィット」する準備が整いました。多くの ML ライブラリでは、コード 'model.fit' が見つかります - この時点で、値の配列 (通常は `X`) とターゲット変数 (通常は `y`) として機能変数を送信します。 - -### モデルを評価する - -(大きなモデルを学習するには多くの反復(エポック)が必要になりますが、)学習プロセスが完了したら、テストデータを使ってモデルの質を評価することができます。このデータは元のデータのうち、モデルがそれまでに分析していないものです。モデルの質を表す指標の表を出力することができます。 - -🎓 **モデルフィッティング** - -機械学習におけるモデルフィッティングは、モデルがまだ知らないデータを分析する際の根本的な機能の精度を参照します。 - -🎓 **未学習** と **過学習** はモデルの質を下げる一般的な問題で、モデルが十分に適合していないか、または適合しすぎています。これによってモデルは訓練データに近すぎたり遠すぎたりする予測を行います。過学習モデルは、データの詳細やノイズもよく学習しているため、訓練データを上手く予測しすぎてしまいます。未学習モデルは、訓練データやまだ「見たことのない」データを正確に分析することができないため、精度が高くないです。 - -![過学習モデル](../images/overfitting.png) -> [Jen Looper](https://twitter.com/jenlooper) さんによる解説画像 - -## パラメータチューニング - -最初のトレーニングが完了したら、モデルの質を観察して、「ハイパーパラメータ」の調整によるモデルの改善を検討しましょう。このプロセスについては [ドキュメント](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) を読んでください。 - -## 予測 - -全く新しいデータを使ってモデルの精度をテストする瞬間です。本番環境でモデルを使用するためにWebアセットを構築するよう「適用された」機械学習の設定においては、推論や評価のためにモデルに渡したり、変数を設定したりするためにユーザの入力(ボタンの押下など)を収集することがこのプロセスに含まれるかもしれません。 - -この講義では、「フルスタック」の機械学習エンジニアになるための旅をしながら、準備・構築・テスト・評価・予測などのデータサイエンティストが行うすべてのステップの使い方を学びます。 - ---- - -## 🚀チャレンジ - -機械学習の学習者のステップを反映したフローチャートを描いてください。今の自分はこのプロセスのどこにいると思いますか?どこに困難があると予想しますか?あなたにとって簡単そうなことは何ですか? - -## [講義後の小テスト](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8?loc=ja) - -## 振り返りと自主学習 - -データサイエンティストが日々の仕事について話しているインタビューをネットで検索してみましょう。ひとつは [これ](https://www.youtube.com/watch?v=Z3IjgbbCEfs) です。 - -## 課題 - -[データサイエンティストにインタビューする](assignment.ja.md) diff --git a/1-Introduction/4-techniques-of-ML/translations/README.ko.md b/1-Introduction/4-techniques-of-ML/translations/README.ko.md deleted file mode 100644 index 5b67f6ad..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.ko.md +++ /dev/null @@ -1,114 +0,0 @@ -# 머신러닝의 기술 - -머신러닝 모델과 이를 사용하는 데이터를 구축, 사용, 그리고 관리하는 프로세스는 많은 타 개발 워크플로우와 매우 다른 프로세스입니다. 이 강의에서, 프로세스를 이해하고, 알아야 할 주요 기술을 간단히 설명합니다: - -- 머신러닝을 받쳐주는 프로세스를 고수준에서 이해합니다. -- 'models', 'predictions', 그리고 'training data'와 같은 기초 개념을 탐색합니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) - -## 소개 - -고수준에서, 머신러닝 (ML) 프로세스를 만드는 기술은 여러 단계로 구성됩니다: - -1. **질문 결정하기**. 대부분 ML 프로세스는 간단 조건 프로그램 또는 룰-베이스 엔진으로 대답할 수 없는 질문을 하는 것으로 시작합니다. 이 질문은 가끔 데이터 셋을 기반으로 한 예측을 중심으로 진행됩니다. -2. **데이터 수집 및 준비하기**. 질문에 대답하려면, 데이터가 필요합니다. 데이터의 품질과, 때때로, 양에 따라 초기 질문에 잘 대답할 수 있는 지 결정됩니다. 데이터 시각화는 이 측면에서 중요합니다. 이 단계에서 데이터를 훈련과 테스트 그룹으로 분할하여 모델을 구축하는 게 포함됩니다. -3. **학습 방식 선택하기**. 질문과 데이터의 특성에 따라, 데이터를 가장 잘 반영하고 정확한 예측을 할 수 있게 훈련하는 방법을 선택해야 합니다. 특정 전문 지식과, 지속적으로, 많은 실험이 필요한 ML 프로세스의 일부분입니다. -4. **모델 학습하기**. 학습 데이터로, 다양한 알고리즘을 사용하여 데이터의 패턴을 인식하게 모델을 학습시킵니다. 모델을 더 좋게 만들기 위하여 데이터의 특정 부분을 타 부분보다 먼저 하도록 조정할 수 있도록 내부 가중치를 활용할 수 있습니다. -5. **모델 평가하기**. 수집한 셋에서 이전에 본 적 없는 데이터 (테스트 데이터)로 모델의 성능을 확인합니다. -6. **파라미터 튜닝하기**. 모델의 성능을 기반해서, 모델 학습으로 알고리즘의 동작을 컨트롤하는 다른 파라미터, 또는 변수를, 사용해서 프로세스를 다시 실행할 수 있습니다. -7. **예측하기**. 모델의 정확성을 새로운 입력으로 테스트합니다. - -## 물어볼 질문하기 - -컴퓨터는 데이터에서 숨겨진 패턴 찾는 것을 잘합니다. 유틸리티는 조건-기반 룰 엔진을 만들어서 쉽게 답할 수 없는 도메인에 대해 질문하는 연구원에게 매우 도움이 됩니다. 예를 들어서, actuarial 작업이 주어지면, 데이터 사이언티스트는 흡연자와 비흡연자의 사망률에 대하여 수작업 룰을 작성할 수 있습니다. - -많은 다른 변수가 방정식에 포함되면, ML 모델이 과거 건강기록을 기반으로 미래 사망률을 예측하는 데에 효율적이라고 검증할 수 있습니다. 유쾌한 예시로 위도, 경도, 기후 변화, proximity to the ocean, 제트 기류의 패턴을 포함한 데이터 기반으로 주어진 위치에서 4월의 날씨를 예측하는 것입니다. - -✅ 날씨 모델에 대한 [slide deck](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) 강의에서 본 것처럼, 데이터가 주어진 작업에서 잘 수행하지 못할 수 있습니다! - -### Features와 타겟 - -feature는 데이터의 측정할 수 있는 속성입니다. 많은 데이터셋에서 'date' 'size' 또는 'color'처럼 열 제목으로 표현합니다. 일반적으로 코드에서 X로 보여지는 feature 변수는, 모델을 훈련할 때 사용되는 입력 변수로 나타냅니다. - -타겟은 예측하려고 시도한 것입니다. 코드에서 X로 표시하는 보통 타겟은, 데이터에 물어보려는 질문의 대답을 나타냅니다: 12월에, 어떤 색의 호박이 가장 쌀까요? San Francisco 근처의 좋은 토지 실제 거래가는 어디인가요? 가끔은 타겟을 라벨 속성이라고 부르기도 합니다. - -### feature 변수 선택하기 - -🎓 **Feature Selection과 Feature Extraction** 모델을 만들 때 선택할 변수를 어떻게 알 수 있을까요? 가장 성능이 좋은 모델에 올바른 변수를 선택하기 위하여 Feature Selection 또는 Feature Extraction 프로세스를 거치게 됩니다. 그러나, 같은 내용이 아닙니다: "Feature extraction creates new features from functions of the original features, whereas feature selection returns a subset of the features." ([source](https://wikipedia.org/wiki/Feature_selection)) - -### 데이터 시각화하기 - -데이터 사이언티스트의 툴킷에서 중요한 측면은 Seaborn 또는 MatPlotLib과 같이 여러가지 뛰어난 라이브러리로 데이터 시각화하는 파워입니다. 데이터를 시각화로 보여주면 숨겨진 correlations를 찾아서 활용할 수 있습니다. ([Classification](../../../4-Classification/2-Classifiers-1/README.md)에서 발견한대로) 시각화는 편향적이거나 균형적이지 않은 데이터를 찾는 데 도움이 될 수 있습니다. - -### 데이터셋 나누기 - -훈련하기 전, 데이터를 잘 나타낼 크기로 2개 이상의 데이터 셋을 나눌 필요가 있습니다. - -- **학습**. 데이터셋의 파트는 모델을 학습할 때 적당합니다. 이 셋은 본 데이터셋의 대부분을 차지합니다. -- **테스트**. 테스트 데이터셋은 독립적인 데이터의 그룹이지만, 미리 만들어진 모델의 성능을 확인할 때에, 가끔 본 데이터에서도 수집됩니다. -- **검증**. 검증 셋은 모델을 개선하며 모델의 hyperparameters, 또는 architecture를 튜닝할 때, 사용하는 작은 독립된 예시 그룹입니다. ([Time Series Forecasting](../../../7-TimeSeries/1-Introduction/README.md)에서 언급하듯) 데이터의 크기와 질문에 따라서 세번째 셋을 만들 이유가 없습니다. - -## 모델 구축하기 - -훈련하고 있는 데이터를 사용하여, **학습**할 다양한 알고리즘으로, 모델 또는, 데이터의 통계적 표현을 만드는 게 목표입니다. 모델을 학습하면서 데이터에 노출되면 발견, 검증, 그리고 승인하거나 거부되는 perceived patterns에 대하여 가설을 세울 수 있습니다. - -### 학습 방식 결정하기 - -질문과 데이터의 특성에 따라서, 어떻게 학습할 지 선택합니다. [Scikit-learn's documentation](https://scikit-learn.org/stable/user_guide.html)을 - 이 코스에서 - 단계별로 보면 모델이 학습하는 많은 방식을 찾을 수 있습니다. 숙련도에 따라서, 최고의 모델을 만들기 위하여 다른 방식을 해볼 수 있습니다. 데이터 사이언티스트가 볼 수 없는 데이터를 주고 정확도, 편향적, 품질-저하 이슈를 점검해서, 현재 작업에 가장 적당한 학습 방식을 선택하여 모델의 성능을 평가하는 프로세스를 거치게 될 예정입니다. - -### 모델 학습하기 - -훈련 데이터로 감싸면, 모델을 만들 'fit'이 준비 되었습니다. 많은 ML 라이브러리에서 'model.fit' 코드를 찾을 수 있습니다. - 이 순간에 값의 배열 (보통 'X')과 feature 변수 (보통 'y')로 데이터를 보내게 됩니다. - -### 모델 평가하기 - -훈련 프로세스가 완료되면 (큰 모델을 훈련하기 위해서 많이 반복하거나 'epochs'가 요구), 테스트 데이터로 모델의 성능을 측정해서 품질을 평가할 수 있습니다. 데이터는 모델이 이전에 분석하지 않았던 본 데이터의 서브셋입니다. 모델의 품질에 대한 지표 테이블을 출력할 수 있습니다. - -🎓 **모델 피팅** - -머신러닝의 컨텍스트에서, 모델 피팅은 친근하지 않은 데이터를 분석하려고 시도하는 순간에 모델 기본 기능의 정확도를 보입니다. - -🎓 **Underfitting** 과 **overfitting**은 모델 핏이 충분하지 않거나 너무 많을 때, 모델의 품질이 낮아지는 일반적인 이슈입니다. 이러한 이유는 모델이 훈련 데이터와 너무 근접하게 얼라인되거나 너무 느슨하게 얼라인된 예측을 합니다. overfit 모델은 데이터의 디테일과 노이즈를 너무 잘 배웠기에 훈련 데이터로 너무나 잘 예측합니다. underfit 모델은 훈련 데이터 또는 아직 볼 수 없던 데이터를 잘 분석할 수 없으므로 정확하지 않습니다. - -![overfitting model](../images/overfitting.png) -> Infographic by [Jen Looper](https://twitter.com/jenlooper) - -## 파라미터 튜닝 - -초반 훈련이 마무리 될 때, 모델의 품질을 살펴보고 'hyperparameters'를 트윅해서 개선하는 것을 고려합니다. [in the documentation](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott) 프로세스에 대하여 알아봅니다. - -## 예측 - -완전히 새 데이터로 모델의 정확도를 테스트할 수 있는 순간입니다. 프로덕션에서 모델을 쓰기 위해서 웹 어셋을 만들며, '적용한' ML 세팅에, 프로세스는 변수를 설정하고 추론하거나, 평가하고자 사용자 입력(예를 들면, 버튼 입력)을 수집해 모델로 보낼 수 있습니다. - -이 강의에서는, 'full stack' ML 엔지니어가 되기 위하여 여행을 떠나는 과정이며, 이 단계에 - 데이터 사이언티스트의 모든 제스쳐가 있으며 준비, 빌드, 테스트, 평가와 예측 방식을 보게 됩니다. - ---- - -## 🚀 도전 - -ML 실무자의 단계를 반영한 플로우를 그려보세요. 프로세스에서 지금 어디에 있는 지 보이나요? 어려운 내용을 예상할 수 있나요? 어떤게 쉬울까요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## 검토 & 자기주도 학습 - -일상 업무를 이야기하는 데이터 사이언티스트 인터뷰를 온라인으로 검색합니다. 여기 [one](https://www.youtube.com/watch?v=Z3IjgbbCEfs) 있습니다. - -## 과제 - -[Interview a data scientist](../assignment.md) diff --git a/1-Introduction/4-techniques-of-ML/translations/README.pt-br.md b/1-Introduction/4-techniques-of-ML/translations/README.pt-br.md deleted file mode 100644 index 8b3af3cc..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.pt-br.md +++ /dev/null @@ -1,114 +0,0 @@ -# Técnicas de Machine Learning - -O processo de construção, uso e manutenção de modelos de machine learning e os dados que eles usam é um processo muito diferente de muitos outros fluxos de trabalho de desenvolvimento. Nesta lição, vamos desmistificar o processo e delinear as principais técnicas que você precisa saber. Você irá: - -- Compreender os processos que sustentam o aprendizado de máquina em alto nível. -- Explorar conceitos básicos como 'modelos', 'previsões' e 'dados de treinamento'.. - -## [Questionário pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7?loc=ptbr) - -## Introdução - -Em um alto nível, a arte de criar processos de machine learning (ML) é composta por uma série de etapas: - -1. **Decida sobre a questão**. A maioria dos processos de ML começa fazendo uma pergunta que não pode ser respondida por um simples programa condicional ou mecanismo baseado em regras. Essas questões geralmente giram em torno de previsões baseadas em uma coleção de dados. -2. **Colete e prepare dados**. Para responder à sua pergunta, você precisa de dados. A qualidade e, às vezes, a quantidade de seus dados determinarão o quão bem você pode responder à sua pergunta inicial. A visualização de dados é um aspecto importante desta fase. Esta fase também inclui a divisão dos dados em um grupo de treinamento e teste para construir um modelo. -3. **Escolha um método de treinamento**. Dependendo da sua pergunta e da natureza dos seus dados, você precisa escolher como deseja treinar um modelo para melhor refletir seus dados e fazer previsões precisas em relação a eles. Esta é a parte do seu processo de ML que requer conhecimentos específicos e, muitas vezes, uma quantidade considerável de experimentação. -4. **Treine o modelo**. Usando seus dados de treinamento, você usará vários algoritmos para treinar um modelo para reconhecer padrões nos dados. O modelo pode alavancar pesos internos que podem ser ajustados para privilegiar certas partes dos dados sobre outras para construir um modelo melhor. -5. **Avalie o modelo**. Você usa dados nunca antes vistos (seus dados de teste) de seu conjunto coletado para ver como o modelo está se saindo. -6. **Ajuste de parâmetros**. Com base no desempenho do seu modelo, você pode refazer o processo usando diferentes parâmetros, ou variáveis, que controlam o comportamento dos algoritmos usados para treinar o modelo. -7. **Preveja**. Use novas entradas para testar a precisão do seu modelo. - -## Que pergunta fazer - -Os computadores são particularmente adeptos da descoberta de padrões ocultos nos dados. Esse recurso é muito útil para pesquisadores que têm dúvidas sobre um determinado campo que não podem ser respondidas facilmente criando um mecanismo de regras baseado em condições. Dada uma tarefa atuarial, por exemplo, um cientista de dados pode ser capaz de construir manualmente regras sobre a mortalidade de fumantes versus não fumantes. - -Quando muitas outras variáveis ​​são introduzidas na equação, no entanto, um modelo de ML pode ser mais eficiente para prever as taxas de mortalidade futuras com base no histórico de saúde anterior. Um exemplo mais alegre seria fazer previsões do tempo de abril para um determinado local com base em dados que incluem latitude, longitude, mudança climática, proximidade do oceano, padrões de fluxo de jato e muito mais. - -✅ Esta [apresentação](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sobre modelos meteorológicos oferece uma perspectiva histórica do uso do ML na análise meteorológica. - -## Tarefas de pré-construção - -Antes de começar a construir seu modelo, há várias tarefas que você precisa concluir. Para testar sua pergunta e formar uma hipótese com base nas previsões de um modelo, você precisa identificar e configurar vários elementos. - -### Dados - -Para poder responder à sua pergunta com qualquer tipo de certeza, você precisa de uma boa quantidade de dados do tipo certo. Há duas coisas que você precisa fazer neste momento: - -- **Coletar dados**. Tendo em mente a lição anterior sobre justiça na análise de dados, colete seus dados com cuidado. Esteja ciente das fontes desses dados, de quaisquer tendências inerentes que possam ter e documente sua origem. -- **Prepare os dados**. Existem várias etapas no processo de preparação de dados. Pode ser necessário agrupar dados e normalizá-los se vierem de fontes diversas. Você pode melhorar a qualidade e a quantidade dos dados por meio de vários métodos, como a conversão de strings em números (como fazemos em [Clustering](../../../5-Clustering/1-Visualize/README.md)). Você também pode gerar novos dados, com base no original (como fazemos em [Classificação](../../../4-Classification/1-Introduction/README.md)). Você pode limpar e editar os dados (como faremos antes da lição[Web App](../../../3-Web-App/README.md)). Finalmente, você também pode precisar randomizá-lo e embaralhá-lo, dependendo de suas técnicas de treinamento. - -✅ Depois de coletar e processar seus dados, reserve um momento para ver se o formato permitirá que você responda à pergunta pretendida. Pode ser que os dados não funcionem bem em sua tarefa, como descobrimos em nossas lições de [Clustering](../../../5-Clustering/1-Visualize/README.md)! - -### Recursos e Alvo - -Um [recurso](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) é uma propriedade mensurável de seus dados. Em muitos conjuntos de dados, é expresso como um cabeçalho de coluna como 'data', 'tamanho' ou 'cor'. Sua variável de recurso, geralmente representada como `X` no código, representa a variável de entrada que será usada para treinar o modelo. - -Um alvo é algo que você está tentando prever. Alvo geralmente representado como `y` no código, representa a resposta à pergunta que você está tentando fazer sobre seus dados: em Dezembro, quais abóboras de **cor**serão mais baratas? em São Francisco, quais bairros terão o melhor **preço** imobiliário? Às vezes, o destino também é conhecido como atributo de rótulo. - -### Selecionando sua variável de característica - -🎓 **Seleção e extração de recursos** Como você sabe qual variável escolher ao construir um modelo? Você provavelmente passará por um processo de seleção ou extração de recursos para escolher as variáveis certas para o modelo de melhor desempenho. Eles não são a mesma coisa, no entanto: "A extração de recursos cria novos recursos a partir de funções dos recursos originais, enquanto a seleção de recursos retorna um subconjunto dos recursos." ([fonte](https://wikipedia.org/wiki/Feature_selection)) - -### Visualize seus dados - -Um aspecto importante do kit de ferramentas de uma pessoa cientista de dados é o poder de visualizar dados usando várias bibliotecas excelentes, como Seaborn ou MatPlotLib. A representação visual de seus dados pode permitir que você descubra correlações ocultas que você pode explorar. As visualizações também podem ajudar a descobrir distorções ou dados desequilibrados (como encontrado em[Classificação](../../../4-Classification/2-Classifiers-1/README.md)). - -### Divida seu conjunto de dados - -Antes do treinamento, você precisa dividir seu conjunto de dados em duas ou mais partes de tamanhos desiguais que ainda representam bem os dados. - -- **Treinamento**. Esta parte do conjunto de dados é adequada ao seu modelo para treiná-lo. Este conjunto constitui a maior parte do conjunto de dados original. -- **Teste**. Um conjunto de dados de teste é um grupo independente de dados, geralmente coletado dos dados originais, que você usa para confirmar o desempenho do modelo construído. -- **Validando**. Um conjunto de validação é um grupo menor independente de exemplos que você usa para ajustar os hiperparâmetros do modelo, ou arquitetura, para melhorar o modelo. Dependendo do tamanho dos seus dados e da pergunta que você está fazendo, pode não ser necessário construir este terceiro conjunto (como observamos em [Previsão de série temporal](../../../7-TimeSeries/1-Introduction/README.md)). - -## Construindo um modelo - -Usando seus dados de treinamento, sua meta é construir um modelo, ou uma representação estatística de seus dados, usando vários algoritmos para **treiná-los**. O treinamento de um modelo o expõe aos dados e permite que ele faça suposições sobre os padrões percebidos que descobre, valida e aceita ou rejeita. - -### Decidir sobre um método de treinamento - -Desvendando da sua pergunta e da natureza dos seus dados, você escolherá um método para treiná-los. Percorrendo a [documentação do Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - que usamos neste curso - você pode explorar muitas maneiras de treinar um modelo. Dependendo da sua experiência, pode ser necessário tentar vários métodos diferentes para construir o melhor modelo. É provável que você passe por um processo pelo qual os cientistas de dados avaliam o desempenho de um modelo, alimentando-o com dados invisíveis, verificando a precisão, o viés e outros problemas que degradam a qualidade e selecionando o método de treinamento mais apropriado para a tarefa em questão. - -### Treine um modelo - -Armado com seus dados de treinamento, você está pronto para 'ajustá-los' para criar um modelo. Você notará que em muitas bibliotecas de ML você encontrará o código 'model.fit' - é neste momento que você envia sua variável de recurso como uma matriz de valores (geralmente 'X') e uma variável de destino (geralmente 'y'). - -### Avalie o modelo - -Assim que o processo de treinamento for concluído (pode levar muitas iterações, ou 'epochs', para treinar um modelo grande), você poderá avaliar a qualidade do modelo usando dados de teste para avaliar seu desempenho. Esses dados são um subconjunto dos dados originais que o modelo não analisou anteriormente. Você pode imprimir uma tabela de métricas sobre a qualidade do seu modelo. - -🎓 **Adaptação do modelo** - -No contexto do machine learning, o ajuste do modelo refere-se à precisão da função subjacente do modelo à medida que tenta analisar dados com os quais não está familiarizado. - -🎓 **Underfitting** e **overfitting** são problemas comuns que degradam a qualidade do modelo, pois o modelo não se ajusta bem o suficiente ou se ajusta muito bem. Isso faz com que o modelo faça previsões muito alinhadas ou muito vagamente alinhadas com seus dados de treinamento. Um modelo de ajuste excessivo prevê os dados de treinamento muito bem porque aprendeu os detalhes e o ruído dos dados muito bem. Um modelo insuficiente não é preciso, pois não pode analisar com precisão seus dados de treinamento, nem os dados que ainda não foram 'visto'. - -![modelo de overfitting](../images/overfitting.png) -> Infográfico por [Jen Looper](https://twitter.com/jenlooper) - -## Ajuste de parâmetro - -Quando o treinamento inicial estiver concluído, observe a qualidade do modelo e considere melhorá-lo ajustando seus 'hiperparâmetros'. Leia mais sobre o processo [na documentação](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Predição - -Este é o momento em que você pode usar dados completamente novos para testar a precisão do seu modelo. Em uma configuração de ML 'aplicada', onde você está construindo ativos da web para usar o modelo na produção, este processo pode envolver a coleta de entrada do usuário (um pressionamento de botão, por exemplo) para definir uma variável e enviá-la ao modelo para inferência, ou avaliação. - -Nessas lições, você descobrirá como usar essas etapas para preparar, criar, testar, avaliar e prever - todos os gestos de uma pessoa cientista de dados e muito mais, conforme você avança em sua jornada para se tornar um engenheiro de ML de 'full stack'. - ---- - -## 🚀Desafio - -Desenhe um fluxograma refletindo as etapas de um praticante de ML. Onde você se vê agora no processo? Onde você prevê que encontrará dificuldade? O que parece fácil para você? - -## [Questionário pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8?loc=ptbr) - -## Revisão e Autoestudo - -Procure por entrevistas online com pessoas cientistas de dados que discutem seu trabalho diário. Aqui está [uma](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Tarefa - -[Entreviste uma pessoa cientista de dados](assignment.pt-br.md) \ No newline at end of file diff --git a/1-Introduction/4-techniques-of-ML/translations/README.zh-cn.md b/1-Introduction/4-techniques-of-ML/translations/README.zh-cn.md deleted file mode 100644 index d135b596..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.zh-cn.md +++ /dev/null @@ -1,112 +0,0 @@ - -# 机器学习技术 - -构建、使用和维护机器学习模型及其使用的数据的过程与许多其他开发工作流程截然不同。 在本课中,我们将揭开该过程的神秘面纱,并概述你需要了解的主要技术。 你会: - -- 在高层次上理解支持机器学习的过程。 -- 探索基本概念,例如“模型”、“预测”和“训练数据”。 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) -## 介绍 - -在较高的层次上,创建机器学习(ML)过程的工艺包括许多步骤: - -1. **决定问题**。 大多数机器学习过程都是从提出一个简单的条件程序或基于规则的引擎无法回答的问题开始的。 这些问题通常围绕基于数据集合的预测展开。 -2. **收集和准备数据**。为了能够回答你的问题,你需要数据。数据的质量(有时是数量)将决定你回答最初问题的能力。可视化数据是这个阶段的一个重要方面。此阶段还包括将数据拆分为训练和测试组以构建模型。 -3. **选择一种训练方法**。根据你的问题和数据的性质,你需要选择如何训练模型以最好地反映你的数据并对其进行准确预测。这是你的ML过程的一部分,需要特定的专业知识,并且通常需要大量的实验。 -4. **训练模型**。使用你的训练数据,你将使用各种算法来训练模型以识别数据中的模式。该模型可能会利用可以调整的内部权重来使数据的某些部分优于其他部分,从而构建更好的模型。 -5. **评估模型**。你使用收集到的集合中从未见过的数据(你的测试数据)来查看模型的性能。 -6. **参数调整**。根据模型的性能,你可以使用不同的参数或变量重做该过程,这些参数或变量控制用于训练模型的算法的行为。 -7. **预测**。使用新输入来测试模型的准确性。 - -## 要问什么问题 - -计算机特别擅长发现数据中的隐藏模式。此实用程序对于对给定领域有疑问的研究人员非常有帮助,这些问题无法通过创建基于条件的规则引擎来轻松回答。例如,给定一项精算任务,数据科学家可能能够围绕吸烟者与非吸烟者的死亡率构建手工规则。 - -然而,当将许多其他变量纳入等式时,ML模型可能会更有效地根据过去的健康史预测未来的死亡率。一个更令人愉快的例子可能是根据包括纬度、经度、气候变化、与海洋的接近程度、急流模式等在内的数据对给定位置的4月份进行天气预报。 - -✅ 这个关于天气模型的[幻灯片](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf)为在天气分析中使用机器学习提供了一个历史视角。 - -## 预构建任务 - -在开始构建模型之前,你需要完成多项任务。要测试你的问题并根据模型的预测形成假设,你需要识别和配置多个元素。 - -### Data - -为了能够确定地回答你的问题,你需要大量正确类型的数据。 此时你需要做两件事: - -- **收集数据**。记住之前关于数据分析公平性的课程,小心收集数据。请注意此数据的来源、它可能具有的任何固有偏见,并记录其来源。 -- **准备数据**。数据准备过程有几个步骤。如果数据来自不同的来源,你可能需要整理数据并对其进行标准化。你可以通过各种方法提高数据的质量和数量,例如将字符串转换为数字(就像我们在[聚类](../../../5-Clustering/1-Visualize/README.md)中所做的那样)。你还可以根据原始数据生成新数据(正如我们在[分类](../../../4-Classification/1-Introduction/README.md)中所做的那样)。你可以清理和编辑数据(就像我们在 [Web App](../../3-Web-App/README.md)课程之前所做的那样)。最后,你可能还需要对其进行随机化和打乱,具体取决于你的训练技术。 - -✅ 在收集和处理你的数据后,花点时间看看它的形状是否能让你解决你的预期问题。正如我们在[聚类](../../../5-Clustering/1-Visualize/README.md)课程中发现的那样,数据可能在你的给定任务中表现不佳! - -### 功能和目标 - -功能是数据的可测量属性。在许多数据集中,它表示为标题为"日期""大小"或"颜色"的列。您的功能变量(通常在代码中表示为 `X`)表示用于训练模型的输入变量。 - -目标就是你试图预测的事情。目标通常表示为代码中的 `y`,代表您试图询问数据的问题的答案:在 12 月,什么颜色的南瓜最便宜?在旧金山,哪些街区的房地产价格最好?有时目标也称为标签属性。 - -### 选择特征变量 - -🎓 **特征选择和特征提取** 构建模型时如何知道选择哪个变量?你可能会经历一个特征选择或特征提取的过程,以便为性能最好的模型选择正确的变量。然而,它们不是一回事:“特征提取是从基于原始特征的函数中创建新特征,而特征选择返回特征的一个子集。”([来源](https://wikipedia.org/wiki/Feature_selection)) -### 可视化数据 - -数据科学家工具包的一个重要方面是能够使用多个优秀的库(例如 Seaborn 或 MatPlotLib)将数据可视化。直观地表示你的数据可能会让你发现可以利用的隐藏关联。 你的可视化还可以帮助你发现偏见或不平衡的数据(正如我们在 [分类](../../../4-Classification/2-Classifiers-1/README.md)中发现的那样)。 -### 拆分数据集 - -在训练之前,你需要将数据集拆分为两个或多个大小不等但仍能很好地代表数据的部分。 - -- **训练**。这部分数据集适合你的模型进行训练。这个集合构成了原始数据集的大部分。 -- **测试**。测试数据集是一组独立的数据,通常从原始数据中收集,用于确认构建模型的性能。 -- **验证**。验证集是一个较小的独立示例组,用于调整模型的超参数或架构,以改进模型。根据你的数据大小和你提出的问题,你可能不需要构建第三组(正如我们在[时间序列预测](../../../7-TimeSeries/1-Introduction/README.md)中所述)。 - -## 建立模型 - -使用你的训练数据,你的目标是构建模型或数据的统计表示,并使用各种算法对其进行**训练**。训练模型将其暴露给数据,并允许它对其发现、验证和接受或拒绝的感知模式做出假设。 - -### 决定一种训练方法 - -根据你的问题和数据的性质,你将选择一种方法来训练它。逐步完成 [Scikit-learn的文档](https://scikit-learn.org/stable/user_guide.html) - 我们在本课程中使用 - 你可以探索多种训练模型的方法。 根据你的经验,你可能需要尝试多种不同的方法来构建最佳模型。你可能会经历一个过程,在该过程中,数据科学家通过提供未见过的数据来评估模型的性能,检查准确性、偏差和其他降低质量的问题,并为手头的任务选择最合适的训练方法。 - -### 训练模型 - -有了您的培训数据,您就可以"适应"它来创建模型。您会注意到,在许多 ML 库中,您会发现代码"model.fit"-此时,您将功能变量作为一系列值(通常是`X`)和目标变量(通常是`y`)发送。 - -### 评估模型 - -训练过程完成后(训练大型模型可能需要多次迭代或“时期”),你将能够通过使用测试数据来衡量模型的性能来评估模型的质量。此数据是模型先前未分析的原始数据的子集。 你可以打印出有关模型质量的指标表。 - -🎓 **模型拟合** - -在机器学习的背景下,模型拟合是指模型在尝试分析不熟悉的数据时其底层功能的准确性。 - -🎓 **欠拟合**和**过拟合**是降低模型质量的常见问题,因为模型拟合得不够好或太好。这会导致模型做出与其训练数据过于紧密对齐或过于松散对齐的预测。 过拟合模型对训练数据的预测太好,因为它已经很好地了解了数据的细节和噪声。欠拟合模型并不准确,因为它既不能准确分析其训练数据,也不能准确分析尚未“看到”的数据。 - -![过拟合模型 ](../images/overfitting.png) -> 作者 [Jen Looper](https://twitter.com/jenlooper) - -## 参数调优 - -初始训练完成后,观察模型的质量并考虑通过调整其“超参数”来改进它。[在此文档中](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)阅读有关该过程的更多信息。 - -## 预测 - -这是你可以使用全新数据来测试模型准确性的时刻。在“应用”ML设置中,你正在构建Web资源以在生产中使用模型,此过程可能涉及收集用户输入(例如按下按钮)以设置变量并将其发送到模型进行推理,或者评估。 - -在这些课程中,你将了解如何使用这些步骤来准备、构建、测试、评估和预测—所有这些都是数据科学家的姿态,而且随着你在成为一名“全栈”ML工程师的旅程中取得进展,你将了解更多。 - ---- - -## 🚀挑战 - -画一个流程图,反映ML的步骤。在这个过程中,你认为自己现在在哪里?你预测你在哪里会遇到困难?什么对你来说很容易? - -## [阅读后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## 复习与自学 - -在线搜索对讨论日常工作的数据科学家的采访。 这是[其中之一](https://www.youtube.com/watch?v=Z3IjgbbCEfs)。 - -## 任务 - -[采访一名数据科学家](assignment.zh-cn.md) diff --git a/1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md b/1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md deleted file mode 100644 index 38d56d56..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/README.zh-tw.md +++ /dev/null @@ -1,111 +0,0 @@ - -# 機器學習技術 - -構建、使用和維護機器學習模型及其使用的數據的過程與許多其他開發工作流程截然不同。 在本課中,我們將揭開該過程的神秘面紗,並概述你需要了解的主要技術。 你會: - -- 在高層次上理解支持機器學習的過程。 -- 探索基本概念,例如「模型」、「預測」和「訓練數據」。 - -## [課前測驗](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) -## 介紹 - -在較高的層次上,創建機器學習(ML)過程的工藝包括許多步驟: - -1. **決定問題**。 大多數機器學習過程都是從提出一個簡單的條件程序或基於規則的引擎無法回答的問題開始的。 這些問題通常圍繞基於數據集合的預測展開。 -2. **收集和準備數據**。為了能夠回答你的問題,你需要數據。數據的質量(有時是數量)將決定你回答最初問題的能力。可視化數據是這個階段的一個重要方面。此階段還包括將數據拆分為訓練和測試組以構建模型。 -3. **選擇一種訓練方法**。根據你的問題和數據的性質,你需要選擇如何訓練模型以最好地反映你的數據並對其進行準確預測。這是你的ML過程的一部分,需要特定的專業知識,並且通常需要大量的實驗。 -4. **訓練模型**。使用你的訓練數據,你將使用各種算法來訓練模型以識別數據中的模式。該模型可能會利用可以調整的內部權重來使數據的某些部分優於其他部分,從而構建更好的模型。 -5. **評估模型**。你使用收集到的集合中從未見過的數據(你的測試數據)來查看模型的性能。 -6. **參數調整**。根據模型的性能,你可以使用不同的參數或變量重做該過程,這些參數或變量控製用於訓練模型的算法的行為。 -7. **預測**。使用新輸入來測試模型的準確性。 - -## 要問什麽問題 - -計算機特別擅長發現數據中的隱藏模式。此實用程序對於對給定領域有疑問的研究人員非常有幫助,這些問題無法通過創建基於條件的規則引擎來輕松回答。例如,給定一項精算任務,數據科學家可能能夠圍繞吸煙者與非吸煙者的死亡率構建手工規則。 - -然而,當將許多其他變量納入等式時,ML模型可能會更有效地根據過去的健康史預測未來的死亡率。一個更令人愉快的例子可能是根據包括緯度、經度、氣候變化、與海洋的接近程度、急流模式等在內的數據對給定位置的4月份進行天氣預報。 - -✅ 這個關於天氣模型的[幻燈片](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf)為在天氣分析中使用機器學習提供了一個歷史視角。 - -## 預構建任務 - -在開始構建模型之前,你需要完成多項任務。要測試你的問題並根據模型的預測形成假設,你需要識別和配置多個元素。 - -### Data - -為了能夠確定地回答你的問題,你需要大量正確類型的數據。 此時你需要做兩件事: - -- **收集數據**。記住之前關於數據分析公平性的課程,小心收集數據。請註意此數據的來源、它可能具有的任何固有偏見,並記錄其來源。 -- **準備數據**。數據準備過程有幾個步驟。如果數據來自不同的來源,你可能需要整理數據並對其進行標準化。你可以通過各種方法提高數據的質量和數量,例如將字符串轉換為數字(就像我們在[聚類](../../../5-Clustering/1-Visualize/README.md)中所做的那樣)。你還可以根據原始數據生成新數據(正如我們在[分類](../../../4-Classification/1-Introduction/README.md)中所做的那樣)。你可以清理和編輯數據(就像我們在 [Web App](../../3-Web-App/README.md)課程之前所做的那樣)。最後,你可能還需要對其進行隨機化和打亂,具體取決於你的訓練技術。 - -✅ 在收集和處理你的數據後,花點時間看看它的形狀是否能讓你解決你的預期問題。正如我們在[聚類](../../../5-Clustering/1-Visualize/README.md)課程中發現的那樣,數據可能在你的給定任務中表現不佳! - -### 功能和目標 - -功能是數據的可測量屬性。在許多數據集中,它表示為標題為"日期""大小"或"顏色"的列。您的功能變量(通常在代碼中表示為 `X`)表示用於訓練模型的輸入變量。 - -目標就是你試圖預測的事情。目標通常表示為代碼中的 `y`,代表您試圖詢問數據的問題的答案:在 12 月,什麽顏色的南瓜最便宜?在舊金山,哪些街區的房地產價格最好?有時目標也稱為標簽屬性。 - -### 選擇特征變量 - -🎓 **特征選擇和特征提取** 構建模型時如何知道選擇哪個變量?你可能會經歷一個特征選擇或特征提取的過程,以便為性能最好的模型選擇正確的變量。然而,它們不是一回事:「特征提取是從基於原始特征的函數中創建新特征,而特征選擇返回特征的一個子集。」([來源](https://wikipedia.org/wiki/Feature_selection)) -### 可視化數據 - -數據科學家工具包的一個重要方面是能夠使用多個優秀的庫(例如 Seaborn 或 MatPlotLib)將數據可視化。直觀地表示你的數據可能會讓你發現可以利用的隱藏關聯。 你的可視化還可以幫助你發現偏見或不平衡的數據(正如我們在 [分類](../../../4-Classification/2-Classifiers-1/README.md)中發現的那樣)。 -### 拆分數據集 - -在訓練之前,你需要將數據集拆分為兩個或多個大小不等但仍能很好地代表數據的部分。 - -- **訓練**。這部分數據集適合你的模型進行訓練。這個集合構成了原始數據集的大部分。 -- **測試**。測試數據集是一組獨立的數據,通常從原始數據中收集,用於確認構建模型的性能。 -- **驗證**。驗證集是一個較小的獨立示例組,用於調整模型的超參數或架構,以改進模型。根據你的數據大小和你提出的問題,你可能不需要構建第三組(正如我們在[時間序列預測](../../../7-TimeSeries/1-Introduction/README.md)中所述)。 - -## 建立模型 - -使用你的訓練數據,你的目標是構建模型或數據的統計表示,並使用各種算法對其進行**訓練**。訓練模型將其暴露給數據,並允許它對其發現、驗證和接受或拒絕的感知模式做出假設。 - -### 決定一種訓練方法 - -根據你的問題和數據的性質,你將選擇一種方法來訓練它。逐步完成 [Scikit-learn的文檔](https://scikit-learn.org/stable/user_guide.html) - 我們在本課程中使用 - 你可以探索多種訓練模型的方法。 根據你的經驗,你可能需要嘗試多種不同的方法來構建最佳模型。你可能會經歷一個過程,在該過程中,數據科學家通過提供未見過的數據來評估模型的性能,檢查準確性、偏差和其他降低質量的問題,並為手頭的任務選擇最合適的訓練方法。 - -### 訓練模型 - -有了您的培訓數據,您就可以"適應"它來創建模型。您會註意到,在許多 ML 庫中,您會發現代碼"model.fit"-此時,您將功能變量作為一系列值(通常是`X`)和目標變量(通常是`y`)發送。 - -### 評估模型 - -訓練過程完成後(訓練大型模型可能需要多次叠代或「時期」),你將能夠通過使用測試數據來衡量模型的性能來評估模型的質量。此數據是模型先前未分析的原始數據的子集。 你可以打印出有關模型質量的指標表。 - -🎓 **模型擬合** - -在機器學習的背景下,模型擬合是指模型在嘗試分析不熟悉的數據時其底層功能的準確性。 - -🎓 **欠擬合**和**過擬合**是降低模型質量的常見問題,因為模型擬合得不夠好或太好。這會導致模型做出與其訓練數據過於緊密對齊或過於松散對齊的預測。 過擬合模型對訓練數據的預測太好,因為它已經很好地了解了數據的細節和噪聲。欠擬合模型並不準確,因為它既不能準確分析其訓練數據,也不能準確分析尚未「看到」的數據。 - -![過擬合模型 ](../images/overfitting.png) -> 作者 [Jen Looper](https://twitter.com/jenlooper) -## 參數調優 - -初始訓練完成後,觀察模型的質量並考慮通過調整其「超參數」來改進它。[在此文檔中](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)閱讀有關該過程的更多信息。 - -## 預測 - -這是你可以使用全新數據來測試模型準確性的時刻。在「應用」ML設置中,你正在構建Web資源以在生產中使用模型,此過程可能涉及收集用戶輸入(例如按下按鈕)以設置變量並將其發送到模型進行推理,或者評估。 - -在這些課程中,你將了解如何使用這些步驟來準備、構建、測試、評估和預測—所有這些都是數據科學家的姿態,而且隨著你在成為一名「全棧」ML工程師的旅程中取得進展,你將了解更多。 - ---- - -## 🚀挑戰 - -畫一個流程圖,反映ML的步驟。在這個過程中,你認為自己現在在哪裏?你預測你在哪裏會遇到困難?什麽對你來說很容易? - -## [閱讀後測驗](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## 復習與自學 - -在線搜索對討論日常工作的數據科學家的采訪。 這是[其中之一](https://www.youtube.com/watch?v=Z3IjgbbCEfs)。 - -## 任務 - -[采訪一名數據科學家](assignment.zh-tw.md) \ No newline at end of file diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.es.md b/1-Introduction/4-techniques-of-ML/translations/assignment.es.md deleted file mode 100644 index 2e931f8c..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Entrevista a un científico de datos - -## Instrucciones - -En tu compañía, en un grupo de usuarios, o entre tus amigos o compañeros de estudio, habla con alguien que trabaje profesionalmente como científico de datos. Escribe un artículo corto (500 palabras) acerca de sus ocupaciones diarias. ¿Son ellos especialistas, o trabajan como 'full stack'? - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | Un ensayo de la longitud correcta, con fuentes atribuidas, es presentado como un archivo .doc | El ensayo es pobremente atribuido o más corto que la longitud requerida | No se presentó el ensayo | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.id.md b/1-Introduction/4-techniques-of-ML/translations/assignment.id.md deleted file mode 100644 index 9f7b23be..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.id.md +++ /dev/null @@ -1,11 +0,0 @@ -# Wawancara seorang data scientist - -## Instruksi - -Di perusahaan Kamu, dalam user group, atau di antara teman atau sesama siswa, berbicaralah dengan seseorang yang bekerja secara profesional sebagai data scientist. Tulis makalah singkat (500 kata) tentang pekerjaan sehari-hari mereka. Apakah mereka spesialis, atau apakah mereka bekerja 'full stack'? - -## Rubrik - -| Kriteria | Sangat Bagus | Cukup | Perlu Peningkatan | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | Sebuah esai dengan panjang yang sesuai, dengan sumber yang dikaitkan, disajikan sebagai file .doc | Esai dikaitkan dengan buruk atau lebih pendek dari panjang yang dibutuhkan | Tidak ada esai yang disajikan | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.it.md b/1-Introduction/4-techniques-of-ML/translations/assignment.it.md deleted file mode 100644 index 41c597f4..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Intervista a un data scientist - -## Istruzioni - -Nella propria azienda, in un gruppo di utenti, o tra amici o compagni di studio, si parli con qualcuno che lavora professionalmente come data scientist. Si scriva un breve documento (500 parole) sulle loro occupazioni quotidiane. Sono specialisti o lavorano "full stack"? - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | Un saggio della lunghezza corretta, con fonti attribuite, è presentato come file .doc | Il saggio è attribuito male o più corto della lunghezza richiesta | Non viene presentato alcun saggio | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.ja.md b/1-Introduction/4-techniques-of-ML/translations/assignment.ja.md deleted file mode 100644 index b3690e77..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.ja.md +++ /dev/null @@ -1,11 +0,0 @@ -# データサイエンティストにインタビューする - -## 指示 - -会社・ユーザグループ・友人・学生仲間の中で、データサイエンティストとして専門的に働いている人に話を聞いてみましょう。その人の日々の仕事について短いレポート(500語)を書いてください。その人は専門家でしょうか?それとも「フルスタック」として働いているでしょうか? - -## 評価基準 - -| 基準 | 模範的 | 十分 | 要改善 | -| ---- | ---------------------------------------------------------------------- | -------------------------------------------------------------- | -------------------------- | -| | 出典が明記された適切な長さのレポートが.docファイルとして提示されている | レポートに出典が明記されていない、もしくは必要な長さよりも短い | レポートが提示されていない | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.ko.md b/1-Introduction/4-techniques-of-ML/translations/assignment.ko.md deleted file mode 100644 index 085f723f..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 데이터 과학자를 인터뷰해 봅시다 - -## 설명 - -현재 일 하는 회사 또는 어느 사용자 집단에서나, 주변 친구들 또는 동료 학생들 중 데이터 과학자로서 전문적으로 일하는 사람과 대화해 보세요. 대화 후 그 사람이 평소 어떤 일을 하는지 500자 이상으로 수필(에세이)을 작성해 보시기 바랍니다. 그 사람은 데이터 과학 분야에서 특정 업무에 집중하는 데이터 과학 전문가인가요, 아니면 전반적으로 다양한 업무에 집중하는 '풀스택' 데이터 과학자인가요? - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ----------------------------------------------------------------------------------------- | ----------------------------------------------------- | ------------ | -| | 500자 이상의 에세이이며 참고문헌을 제대로 표기했고 .doc 형식의 워드(Microsoft Word) 파일로 제출 | 500자 이내의 에세이이거나 참고문헌을 제대로 표기하지 않음 | 에세이 미제출 | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.pt-br.md b/1-Introduction/4-techniques-of-ML/translations/assignment.pt-br.md deleted file mode 100644 index 820519cc..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Entreviste uma pessoa cientista de dados - -## Instructions - -Em sua empresa, em um grupo de usuários ou entre seus amigos ou colegas estudantes, converse com alguém que trabalhe profissionalmente como cientista de dados. Escreva um pequeno artigo (500 palavras) sobre suas ocupações diárias. Eles são especialistas ou trabalham com 'full stack'? - -## Rubrica - -| Critérios | Exemplar | Adapte | Precisa Melhorar | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | Uma redação com a extensão correta, com fontes atribuídas, é apresentado em arquivo .doc | A redação está mal atribuído ou é menor do que o comprimento exigido | Nenhuma redação é apresentado | | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.zh-cn.md b/1-Introduction/4-techniques-of-ML/translations/assignment.zh-cn.md deleted file mode 100644 index ba28b554..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.zh-cn.md +++ /dev/null @@ -1,11 +0,0 @@ -# 采访一位数据科学家 - -## 说明 - -在你的公司、你所在的社群、或者在你的朋友和同学中,找到一位从事数据科学专业工作的人,与他或她交流一下。写一篇关于他们工作日常的小短文(500字左右)。他们是专家,还是说他们是“全栈”开发者? - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | 提交一篇清晰描述了职业属性且字数符合规范的word文档 | 提交的文档职业属性描述得不清晰或者字数不合规范 | 啥都没有交 | diff --git a/1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md b/1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md deleted file mode 100644 index 6d3d601c..00000000 --- a/1-Introduction/4-techniques-of-ML/translations/assignment.zh-tw.md +++ /dev/null @@ -1,11 +0,0 @@ -# 采訪一位數據科學家 - -## 說明 - -在你的公司、你所在的社群、或者在你的朋友和同學中,找到一位從事數據科學專業工作的人,與他或她交流一下。寫一篇關於他們工作日常的小短文(500字左右)。他們是專家,還是說他們是「全棧」開發者? - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | 提交一篇清晰描述了職業屬性且字數符合規範的word文檔 | 提交的文檔職業屬性描述得不清晰或者字數不合規範 | 啥都沒有交 | \ No newline at end of file diff --git a/1-Introduction/translations/README.es.md b/1-Introduction/translations/README.es.md deleted file mode 100644 index a4bc59ce..00000000 --- a/1-Introduction/translations/README.es.md +++ /dev/null @@ -1,23 +0,0 @@ -# Introducción al machine learning - -En esta sección del plan de estudios se le presentarán los conceptos básicos que hay detrás del campo del "machine learning", lo que es, y aprenderemos sobre su historia y las técnicas que los investigadores utilizan para trabajar con él. ¡Exploremos juntos el mundo del ML! - -![globe](images/globe.jpg) -> Photo by Bill Oxford on Unsplash - -### Lecciones - -1. [Introducción al machine learning](1-intro-to-ML/README.md) -1. [La Historia del machine learning y la AI](2-history-of-ML/README.md) -1. [Equidad y machine learning](3-fairness/README.md) -1. [Técnicas de machine learning](4-techniques-of-ML/README.md) -### Créditos - -"Introducción al Machine Learning" fue escrito con ♥️ por un equipo de personas que incluye [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) y [Jen Looper](https://twitter.com/jenlooper) - -"La Historia del Machine Learning" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper) y [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Equidad y Machine Learning" fue escrito con ♥️ por [Tomomi Imura](https://twitter.com/girliemac) - -"Técnicas de Machine Learning" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper) y [Chris Noring](https://twitter.com/softchris) - diff --git a/1-Introduction/translations/README.fr.md b/1-Introduction/translations/README.fr.md deleted file mode 100644 index 462dea70..00000000 --- a/1-Introduction/translations/README.fr.md +++ /dev/null @@ -1,22 +0,0 @@ -# Introduction au machine learning - -Dans cette section du programme, vous découvrirez les concepts de base sous-jacents au domaine du machine learning, ce qu’il est, et vous découvrirez son histoire et les techniques que les chercheurs utilisent pour travailler avec lui. Explorons ensemble ce nouveau monde de ML ! - -![globe](../images/globe.jpg) -> Photo par Bill Oxford sur Unsplash - -### Leçons - -1. [Introduction au machine learning](../1-intro-to-ML/translations/README.fr.md) -1. [L’histoire du machine learning et de l’IA](../2-history-of-ML/translations/README.fr.md) -1. [Équité et machine learning](../3-fairness/translations/README.fr.md) -1. [Techniques de machine learning](../4-techniques-of-ML/translations/README.fr.md) -### Crédits - -"Introduction au machine learning" a été écrit avec ♥️ par une équipe de personnes comprenant [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) et [Jen Looper](https://twitter.com/jenlooper) - -"L’histoire du machine learning" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper) et [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Équité et machine learning" a été écrit avec ♥️ par [Tomomi Imura](https://twitter.com/girliemac) - -"Techniques de machine learning" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper) et [Chris Noring](https://twitter.com/softchris) diff --git a/1-Introduction/translations/README.hi.md b/1-Introduction/translations/README.hi.md deleted file mode 100644 index 1d7a9b7b..00000000 --- a/1-Introduction/translations/README.hi.md +++ /dev/null @@ -1,28 +0,0 @@ -# मशीन लर्निंग का परिचय - -पाठ्यक्रम के इस भाग में, आपको मशीन लर्निंग के क्षेत्र में अंतर्निहित बुनियादी अवधारणाओं से परिचित कराया जाएगा, यह क्या है, इसका इतिहास क्या है और इसके साथ काम करने के लिए शोधकर्ताओं द्वारा उपयोग की जाने वाली तकनीकों के बारे में जानेंगे। आइए एक साथ मशीन लर्निंग की इस नई दुनिया को एक्सप्लोर करें! - -![ग्लोब](../images/globe.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) द्वारा ♥ से लिखा गया - - - - - diff --git a/1-Introduction/translations/README.id.md b/1-Introduction/translations/README.id.md deleted file mode 100644 index 0e6cc557..00000000 --- a/1-Introduction/translations/README.id.md +++ /dev/null @@ -1,23 +0,0 @@ -# Pengantar Machine Learning - -Di bagian kurikulum ini, Kamu akan berkenalan dengan konsep yang mendasari bidang Machine Learning, apa itu Machine Learning, dan belajar mengenai -sejarah serta teknik-teknik yang digunakan oleh para peneliti. Ayo jelajahi dunia baru Machine Learning bersama! - -![bola dunia](../images/globe.jpg) -> Foto oleh Bill Oxford di Unsplash - -### Pelajaran - -1. [Pengantar Machine Learning](../1-intro-to-ML/translations/README.id.md) -1. [Sejarah dari Machine Learning dan AI](../2-history-of-ML/translations/README.id.md) -1. [Keadilan dan Machine Learning](../3-fairness/translations/README.id.md) -1. [Teknik-Teknik Machine Learning](../4-techniques-of-ML/translations/README.id.md) -### Penghargaan - -"Pengantar Machine Learning" ditulis dengan ♥️ oleh sebuah tim yang terdiri dari [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) dan [Jen Looper](https://twitter.com/jenlooper) - -"Sejarah dari Machine Learning dan AI" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) dan [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Keadilan dan Machine Learning" ditulis dengan ♥️ oleh [Tomomi Imura](https://twitter.com/girliemac) - -"Teknik-Teknik Machine Learning" ditulis dengan ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) dan [Chris Noring](https://twitter.com/softchris) diff --git a/1-Introduction/translations/README.it.md b/1-Introduction/translations/README.it.md deleted file mode 100644 index a9460c26..00000000 --- a/1-Introduction/translations/README.it.md +++ /dev/null @@ -1,22 +0,0 @@ -# Introduzione a machine learning - -In questa sezione del programma di studi, verranno presentati i concetti di base sottostanti machine learning, di cosa si tratta, e si imparerà la sua storia e le tecniche utilizzate dai ricercatori per lavorarci. Si esplorerà insieme questo nuovo mondo di ML! - -![globo](../images/globe.jpg) -> Foto di Bill Oxford su Unsplash - -### Lezioni - -1. [Introduzione a machine learning](../1-intro-to-ML/translations/README.it.md) -1. [La storia di machine learning e dell'AI](../2-history-of-ML/translations/README.it.md) -1. [Equità e machine learning](../3-fairness/translations/README.it.md) -1. [Tecniche di machine learning](../4-techniques-of-ML/translations/README.it.md) -### Crediti - -"Introduzione a Machine Learning" scritto con ♥️ da un team di persone tra cui [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) e [Jen Looper](https://twitter.com/jenlooper) - -"La Storia di Machine Learning" scritto con ♥️ da [Jen Looper](https://twitter.com/jenlooper) e [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Equità e Machine Learning" scritto con ♥️ da [Tomomi Imura](https://twitter.com/girliemac) - -"Tecniche di Machine Learning" scritto con ♥️ da [Jen Looper](https://twitter.com/jenlooper) e [Chris Noring](https://twitter.com/softchris) \ No newline at end of file diff --git a/1-Introduction/translations/README.ja.md b/1-Introduction/translations/README.ja.md deleted file mode 100644 index de7b6ff2..00000000 --- a/1-Introduction/translations/README.ja.md +++ /dev/null @@ -1,23 +0,0 @@ -# 機械学習への導入 - -このセクションでは、機械学習の分野の基礎となる概念、機械学習とは何かを紹介し、その歴史や研究者が機械学習を扱う際に使用する技術について学びます。 新しいMLの世界を一緒に探求していきましょう! - -![地球](../images/globe.jpg) -> UnsplashBill Oxfordによる写真 - -### レッスン - -1. [機械学習への導入](../1-intro-to-ML/translations/README.ja.md) -1. [機械学習とAIの歴史](../2-history-of-ML/translations/README.ja.md) -1. [機械学習における公平さ](../3-fairness/translations/README.ja.md) -1. [機械学習の技術](../4-techniques-of-ML/translations/README.ja.md) - -### クレジット - -"機械学習への導入 "は、[Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan)、[Ornella Altunyan](https://twitter.com/ornelladotcom)、[Jen Looper](https://twitter.com/jenlooper)などのチームによって制作されました。 - -"機械学習とAIの歴史" は[Jen Looper](https://twitter.com/jenlooper)、[Amy Boyd](https://twitter.com/AmyKateNicho)によって制作されました。 - -"公平性と機械学習"は[Tomomi Imura](https://twitter.com/girliemac) によって制作されました。 - -"機械学習の技術"は[Jen Looper](https://twitter.com/jenlooper)と[Chris Noring](https://twitter.com/softchris) によって制作されました。 diff --git a/1-Introduction/translations/README.ko.md b/1-Introduction/translations/README.ko.md deleted file mode 100644 index 4a5147a6..00000000 --- a/1-Introduction/translations/README.ko.md +++ /dev/null @@ -1,23 +0,0 @@ -# 머신러닝 소개하기 - -커리큘럼의 이 섹션에서, 머신러닝 필드의 기초가 될 기본 개념, 의미, 역사와 연구자가 이용하는 기술을 배울 예정입니다. 새로운 ML의 세계로 같이 모험을 떠납시다! - -![globe](../images/globe.jpg) -> Photo by Bill Oxford on Unsplash - -### 강의 - -1. [머신러닝 소개하기](../1-intro-to-ML/translations/README.ko.md) -1. [머신러닝과 AI의 역사](../2-history-of-ML/translations/README.ko.md) -1. [공정성과 머신러닝](../3-fairness/translations/README.ko.md) -1. [머신러닝의 기술](../4-techniques-of-ML/translations/README.ko.md) - -### 크레딧 - -"Introduction to Machine Learning" was written with ♥️ by a team of folks including [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) and [Jen Looper](https://twitter.com/jenlooper) - -"The History of Machine Learning" was written with ♥️ by [Jen Looper](https://twitter.com/jenlooper) and [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Fairness and Machine Learning" was written with ♥️ by [Tomomi Imura](https://twitter.com/girliemac) - -"Techniques of Machine Learning" was written with ♥️ by [Jen Looper](https://twitter.com/jenlooper) and [Chris Noring](https://twitter.com/softchris) \ No newline at end of file diff --git a/1-Introduction/translations/README.pt-br.md b/1-Introduction/translations/README.pt-br.md deleted file mode 100644 index 317f5eda..00000000 --- a/1-Introduction/translations/README.pt-br.md +++ /dev/null @@ -1,23 +0,0 @@ -# Introdução ao machine learning - -Nesta seção do curso, você conhecerá os conceitos básicos do machine learning, o que ele é, e aprenderá sobre sua história e as técnicas que os pesquisadores usam para trabalhar com ele. Vamos explorar este novo mundo de ML juntos! - -![globe](../images/globe.jpg) -> Foto por Bill Oxford em Unsplash - -### Lições - -1. [Introdução ao machine learning](../1-intro-to-ML/translations/README.pt-br.md) -2. [A história do machine learning e AI](../2-history-of-ML/translations/README.pt-br.md) -3. [Equidade e machine learning](../3-fairness/translations/README.pt-br.md) -4. [Técnicas de machine learning](../4-techniques-of-ML/translations/README.pt-br.md) - -### Créditos - -"Introdução ao Machine Learning" foi escrito com ♥️ por uma equipe de pessoas, incluindo [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) e [Jen Looper](https://twitter.com/jenlooper) - -"A história do Machine Learning e AI" foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper) e [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Equidade e Machine Learning" foi escrito com ♥️ por [Tomomi Imura](https://twitter.com/girliemac) - -"Técnicas de Machine Learning" foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper) e [Chris Noring](https://twitter.com/softchris) \ No newline at end of file diff --git a/1-Introduction/translations/README.ru.md b/1-Introduction/translations/README.ru.md deleted file mode 100644 index 87569f68..00000000 --- a/1-Introduction/translations/README.ru.md +++ /dev/null @@ -1,22 +0,0 @@ -# Введение в машинное обучение - -В этом разделе учебной программы вы познакомитесь с базовыми концепциями, лежащими в основе области машинного обучения; узнаете, что это такое, а также его историю и методы, которые исследователи используют для работы с ним. Давайте вместе исследуем этот новый мир машинного обучения! - -![глобус](../images/globe.jpg) -> Фото Билла Оксфорда на Unsplash - -### Уроки - -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) diff --git a/1-Introduction/translations/README.zh-cn.md b/1-Introduction/translations/README.zh-cn.md deleted file mode 100644 index 862a5b0a..00000000 --- a/1-Introduction/translations/README.zh-cn.md +++ /dev/null @@ -1,22 +0,0 @@ -# 机器学习入门 - -课程的本章节将为您介绍机器学习领域背后的基本概念、什么是机器学习,并学习它的历史以及曾为此做出贡献的技术研究者们。让我们一起开始探索机器学习的全新世界吧! - -![globe](../images/globe.jpg) -> 图片由 Bill Oxford 提供,来自 Unsplash - -### 课程安排 - -1. [机器学习简介](../1-intro-to-ML/translations/README.zh-cn.md) -1. [机器学习的历史](../2-history-of-ML/translations/README.zh-cn.md) -1. [机器学习中的公平性](../3-fairness/translations/README.zh-cn.md) -1. [机器学习技术](../4-techniques-of-ML/translations/README.zh-cn.md) -### 致谢 - -"机器学习简介"由 [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) 及 [Jen Looper](https://twitter.com/jenlooper),共同倾 ♥️ 而作 - -"机器学习及人工智能历史" 由 [Jen Looper](https://twitter.com/jenlooper) 及 [Amy Boyd](https://twitter.com/AmyKateNicho)倾 ♥️ 而作 - -"公平性与机器学习" 由 [Tomomi Imura](https://twitter.com/girliemac) 倾 ♥️ 而作 - -"机器学习的技术" 由 [Jen Looper](https://twitter.com/jenlooper) 及 [Chris Noring](https://twitter.com/softchris) 倾 ♥️ 而作 diff --git a/1-Introduction/translations/README.zh-tw.md b/1-Introduction/translations/README.zh-tw.md deleted file mode 100644 index 36359d0d..00000000 --- a/1-Introduction/translations/README.zh-tw.md +++ /dev/null @@ -1,22 +0,0 @@ -# 機器學習入門 - -課程的本章節將為您介紹機器學習領域背後的基本概念、什麽是機器學習,並學習它的歷史以及曾為此做出貢獻的技術研究者們。讓我們一起開始探索機器學習的全新世界吧! - -![globe](../images/globe.jpg) -> 圖片由 Bill Oxford提供,來自 Unsplash - -### 課程安排 - -1. [機器學習簡介](../1-intro-to-ML/translations/README.zh-tw.md) -1. [機器學習的歷史](../2-history-of-ML/translations/README.zh-tw.md) -1. [機器學習中的公平性](../3-fairness/translations/README.zh-tw.md) -1. [機器學習技術](../4-techniques-of-ML/translations/README.zh-tw.md) -### 致謝 - -"機器學習簡介"由 [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) 及 [Jen Looper](https://twitter.com/jenlooper),共同傾 ♥️ 而作 - -"機器學習及人工智能歷史" 由 [Jen Looper](https://twitter.com/jenlooper) 及 [Amy Boyd](https://twitter.com/AmyKateNicho)傾 ♥️ 而作 - -"公平性與機器學習" 由 [Tomomi Imura](https://twitter.com/girliemac) 傾 ♥️ 而作 - -"機器學習的技術" 由 [Jen Looper](https://twitter.com/jenlooper) 及 [Chris Noring](https://twitter.com/softchris) 傾 ♥️ 而作 diff --git a/2-Regression/1-Tools/translations/README.es.md b/2-Regression/1-Tools/translations/README.es.md deleted file mode 100755 index 6178fae2..00000000 --- a/2-Regression/1-Tools/translations/README.es.md +++ /dev/null @@ -1,206 +0,0 @@ -# Comience con Python y Scikit-learn para modelos de regresión - -![Resumen de regresiones en un boceto](../../sketchnotes/ml-regression.png) - -> Boceto de [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Cuestionario previo](https://jolly-sea-0a877260f.azurestaticapps.net/quiz/9/) -## Introducción - -En estas cuatro lecciones, descubrirá como crear modelos de regresión. Discutiremos para que sirven estos en breve. Pero antes de hacer cualquier cosa, asegúrese de tener las herramientas adecuadas para comenzar el proceso! - -En esta lección, aprenderá a: - -- Configurar su computadora para tares locales de machine learning. -- Trabajar con cuadernos Jupyter. -- Usar Scikit-learn, incluida la instalación. -- Explorar la regressión lineal con un ejercicio práctico. - -## Instalaciones y configuraciones. - -[![Uso de Python con Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Uso de Python con Visual Studio Code") - -> 🎥 Haga click en la imagen de arriba para ver un video: usando Python dentro de VS Code. - -1. **Instale Python**. Asegúrese de que [Python](https://www.python.org/downloads/) esté instalado en su computadora. Utilizará Python para muchas tareas de ciencia de datos y machine learning. La mayoría de los sistemas informáticos ya incluyen una instalación de Python. También hay disponibles [paquetes de código de Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) útiles para facilitar la configuración a algunos usuarios. - - Sin embargo algunos usos de Python requieren una versión del software, mientras otros requieren una versión diferente. Por esta razón, es útil trabajar dentro de un [entorno virtual](https://docs.python.org/3/library/venv.html). - -2. **Instale Visual Studio Code**. Asegúrese de tener Visual Studio Code instalado en su computadora. Siga estas instrucciones para [instalar Visual Studio Code](https://code.visualstudio.com/) para la instalación básica. Va a utilizar Python en Visual Studio Code en este curso, por lo que es posible que desee repasar cómo [configurar Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para el desarrollo en Python. - - > Siéntase cómodo con Python trabajando con esta colección de [módulos de aprendizaje](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - -3. **Instale Scikit-learn**, siguiendo [estas instrucciones](https://scikit-learn.org/stable/install.html). Dado que debe asegurarse de usar Python3, se recomienda que use un entorno virtual. Tenga en cuenta que si está instalando esta biblioteca en una Mac M1, hay instrucciones especiales en la página vinculada arriba. - -1. **Instale Jupyter Notebook**. Deberá [instalar el paquete de Jupyter](https://pypi.org/project/jupyter/). - -## El entorno de creación de ML - -Utilizará **cuadernos** para desarrollar su código en Python y crear modelos de machine learning. Este tipo de archivos es una herramienta común para científicos de datos, y se pueden identificar por su sufijo o extensión `.ipynb`. - -Los cuadernos son un entorno interactivo que permiten al desarrollador codificar y agregar notas y escribir documentación sobre el código lo cual es bastante útil para proyectos experimentales u orientados a la investigación. -### Ejercicio - trabajar con un cuaderno - -En esta carpeta, encontrará el archivo _notebook.ipynb_. - -1. Abra _notebook.ipynb_ en Visual Studio Code. - -Un servidor de Jupyter comenzará con Python 3+ iniciado. Encontrará áreas del cuaderno que se pueden ejecutar, fragmentos de código. Puede ejecutar un bloque de código seleccionando el icono que parece un botón de reproducción. - -1. Seleccione el icono `md` y agregue un poco de _markdown_, y el siguiente texto **# Welcome to your notebook**. - - A continuación, agregue algo de código Python. - -1. Escriba **print('hello notebook')** en el bloque de código. -1. Seleccione la flecha para ejecutar el código. - - Debería ver impresa la declaración: - - ```output - hello notebook - ``` - -![VS Code con un cuaderno abierto](../images/notebook.jpg) - -Puede intercalar su código con comentarios para autodocumentar el cuaderno. - -✅ Piense por un minuto en cuán diferente es el entorno de trabajo de un desarrollador web en comparación con el de un científico de datos. - -## En funcionamiento con Scikit-learn - -Ahora que Python está configurado en un entorno local, y se siente cómo con los cuadernos de Jupyter, vamos a sentirnos igualmente cómodos con Scikit-learn (pronuncie `sci` como en `science`). Scikit-learn proporciona una [API extensa](https://scikit-learn.org/stable/modules/classes.html#api-ref) para ayudarlo a realizar tares de ML. - -Según su [sitio web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn es una biblioteca de machine learning de código abierto que admite el aprendizaje supervisado y no supervisado. También proporciona varias herramientas para el ajuste de modelos, preprocesamiento de datos, selección y evaluación de modelos, y muchas otras utilidades." - -En este curso, utilizará Scikit-learn y otras herramientas para crear modelos de machine learning para realizar lo que llamamos tareas de 'machine learning tradicional'. Hemos evitado deliberadamente las redes neuronales y el _deep learning_, ya que se tratarán mejor en nuestro próximo plan de estudios 'IA para principiantes'. - -Scikit-learn hace que sea sencillo construir modelos y evaluarlos para su uso. Se centra principalmente en el uso de datos numéricos y contiene varios conjuntos de datos listos para usar como herramientas de aprendizaje. También incluye modelos prediseñados para que los estudiantes lo prueben. Exploremos el proceso de cargar datos preempaquetados y el uso de un primer modelo de estimador integrado con Scikit-learn con algunos datos básicos. - -## Ejercicio - su primer cuaderno de Scikit-learn - -> Este tutorial se insipiró en el [ejemplo de regresión lineal](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) en el sitio web de Scikit-learn's. - -En el archivo _notebook.ipynb_ asociado a esta lección, borré todas las celdas presionando el icono 'papelera'. - -En esta sección, trabajará con un pequeño conjunto de datos sobre la diabetes que está integrado con Scikit-learn con fines de aprendizaje. Imagínese que quisiera probar un tratamiento para pacientes diabéticos. Los modelos de Machine Learning, pueden ayudarlo a determinar que pacientes responderían mejor al tratamiento, en función de combinaciones de variables. Incluso un modelo de regresión muy básico, cuando se visualiza, puede mostrar información sobre variables que le ayudarían en sus ensayos clínicos teóricos. - -✅ Hay muchos tipos de métodos de regresión y el que elija dependerá de las respuestas que esté buscando. Si desea predecir la altura probable de una persona de una edad determinada, utlizaría la regresión lineal, ya que busca un **valor numérico**. Si está interesado en descubrir si un tipo de cocina puede considerarse vegano o no, está buscando una **asignación de categoría**, por lo que utilizaría la regresión logística. Más adelante aprenderá más sobre la regresión logística. Piense un poco en algunas preguntas que puede hacer a los datos y cuáles de estos métodos sería más apropiado. - -Comencemos con esta tarea. - -### Importar bibliotecas - -Para esta tarea importaremos algunas librerías: - -- **matplotlib**. Es una [herramienta gráfica](https://matplotlib.org/) útil y la usaremos para crear un diagrama de líneas. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) es una librería útil para manejar datos numéricos en Python. -- **sklearn**. Esta es la librería Scikit-learn. - -Importar algunas librerías para ayudarte con tus tareas. - -1. Agrege importaciones escribiendo el siguiente código: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - -Arriba estás importando `matplottlib`, `numpy` y estás importando `datasets`, `linear_model` y `model_selection` de `sklearn`. `model_selection` se usa para dividir datos en conjuntos de entrenamiento y de prueba. - -### El conjunto de datos de diabetes - -El [conjunto de datos de diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) incluye 442 muestras de datos sobre la diabetes, con 10 variables de características, algunas de las cuales incluyen: - -edad: edad en años. -bmi: índice de masa corporal. -bp: presión arterial promedio. -s1 tc: Células-T (un tipo de glóbulos blancos). - -✅ Este conjunto de datos incluye el concepto de sexo como una variable característica importante para la investigación sobre la diabetes. Piense un poco en cómo categorizaciones como ésta podrían excluir a ciertas partes de una población de los tratamientos. - -Ahora cargue los datos X e y. - -> 🎓 Recuerde, esto es aprendizeje supervisado, y necesitamos un objetivo llamado 'y'. - -En una nueva celda de código, cargue el conjunto de datos de diabetes llamando `load_diabetes()`. La entrada `return_X_y=True` indica que `X` será una matriz de datos, y `y` será el objetivo de regresión. - -1. Agregue algunos comandos de impresión para mostrar la forma de la matriz de datos y su primer elemento: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Lo que recibe como respuesta es una tupla. Lo que está haciendo es asignar los dos primeros valores de la tupla a `X` y `y` respectivamente. Más información [sobre tuplas](https://wikipedia.org/wiki/Tuple). - - Puede ver que estos datos tienen 442 elementos en forma de matrices de 10 elementos: - - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Piense un poco en la relación entre los datos y el objetivo de la regresión. La regresión lineal predice relaciones entre la característica X y la variable objetivo y. ¿Puede encontrar el [objetivo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para el cojunto de datos de diabetes en la documentación? ¿Qué está demostrando este conjunto de datos dado ese objetivo? - -2. A continuación, seleccione una parte de este conjunto de datos para graficarlos colocándolos en una nueva matriz utilizando la función `newaxis` de _numpy_. Vamos a utilizar una regresión lineal para generar una línea entre los valores de estos datos, según un patrón que determine. - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ En cualquier momento, imprima los datos para comprobar su forma. - -3. Ahora que tiene los datos listos para graficarlos, puede ver si una máquina puede ayudar a determinar una división lógica entre los númnero en este conjunto de datos. Para hacer esto, necesita dividir los datos (X) y el objetivo (y) en conjunto de datos de prueba y entrenamiento. Scikit-learn tiene una forma sencilla de hacer esto; puede dividir sus datos de prueba en un punto determinado. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. Ahora está listo para entrenar su modelo! Cargue el modelo de regresión lineal y entrénelo con sus datos de entrenamiento X e y usando `model.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` es una función que verá en muchas bibliotecas de ML como TensorFlow - -5. Luego, cree una predicción usando datos de prueba, usando la función `predict()`. Esto se utilizará para trazar la línea entre los grupos de datos. - - ```python - y_pred = model.predict(X_test) - ``` - -6. Ahora es el momento de mostrar los datos en una gráfica. Matplotlib es una herramienta muy útil para esta tarea. Cree una gráfica de dispersión de todos los datos de prueba X e y, y use la predicción para dibujar una línea en el lugar más apropiado, entre las agrupaciones de datos del modelo. - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, y_pred, color='blue', linewidth=3) - plt.show() - ``` - - ![un diagrama de dispersión que muestra puntos de datos sobre la diabetes](./images/scatterplot.png) - - ✅ Piense un poco sobre lo que está pasando aquí. Una línea recta atraviesa muchos pequeños puntos de datos, pero ¿qué está haciendo excactamente? ¿Puede ver cómo debería poder usar esta línea para predecir dónde debe encajar un punto de datos nuevo y no visto en relación con el eje y del gráfico? Intente poner en palabras el uso práctico de este modelo. - -Felicitaciones, construiste tu primer modelo de regresión lineal, creaste una predicción con él y lo mostraste en una gráfica! - ---- -## Desafío - -Grafique una variable diferente de este conjunto de datos. Sugerencia: edite esta linea: `X = X[:, np.newaxis, 2]`. Dado el objetivo de este conjunto de datos,¿qué puede descubrir sobre la progresión de la diabetes? -## [Cuestionario posterior a la conferencia](https://jolly-sea-0a877260f.azurestaticapps.net/quiz/10/) - -## Revisión y autoestudio - -En este tutorial, trabajó con regresión lineal simple, en lugar de regresión lineal univariante o múltiple. Lea un poco sobre las diferencias entre estos métodos o eche un vistazo a [este video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) - -Lea más sobre el concepto de regresión lineal y piense que tipo de preguntas se pueden responder con esta técnica.Tome este [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para profundizar su comprensión. - -## Asignación - -[Un conjunto de datos diferentes](assignment.md) diff --git a/2-Regression/1-Tools/translations/README.id.md b/2-Regression/1-Tools/translations/README.id.md deleted file mode 100644 index 180579f1..00000000 --- a/2-Regression/1-Tools/translations/README.id.md +++ /dev/null @@ -1,208 +0,0 @@ -# Memulai dengan Python dan Scikit-learn untuk model regresi - -![Ringkisan regresi dalam sebuah catatan sketsa](../../../sketchnotes/ml-regression.png) - -> Catatan sketsa oleh [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Kuis Pra-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) -## Pembukaan - -Dalam keempat pelajaran ini, kamu akan belajar bagaimana membangun model regresi. Kita akan berdiskusi apa fungsi model tersebut dalam sejenak. Tetapi sebelum kamu melakukan apapun, pastikan bahwa kamu sudah mempunyai alat-alat yang diperlukan untuk memulai! - -Dalam pelajaran ini, kamu akan belajar bagaimana untuk: - -- Konfigurasi komputermu untuk tugas pembelajaran. -- Bekerja dengan Jupyter notebooks. -- Menggunakan Scikit-learn, termasuk instalasi. -- Menjelajahi regresi linear dengan latihan *hands-on*. - - -## Instalasi dan konfigurasi - -[![Menggunakan Python dalam Visual Studio Code](https://img.youtube.com/vi/7EXd4_ttIuw/0.jpg)](https://youtu.be/7EXd4_ttIuw "Menggunakan Python dalam Visual Studio Code") - -> 🎥 Klik foto di atas untuk sebuah video: menggunakan Python dalam VS Code - -1. **Pasang Python**. Pastikan bahwa [Python](https://www.python.org/downloads/) telah dipasang di komputermu. Kamu akan menggunakan Python untuk banyak tugas *data science* dan *machine learning*. Python sudah dipasang di kebanyakan sistem komputer. Adapula *[Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)* yang berguna untuk membantu proses pemasangan untuk beberapa pengguna. - - Beberapa penggunaan Python memerlukan satu versi perangkat lunak tersebut, sedangkan beberapa penggunaan lainnya mungkin memerlukan versi Python yang beda lagi. Oleh sebab itulah akan sangat berguna untuk bekerja dalam sebuah *[virtual environment](https://docs.python.org/3/library/venv.html)* (lingkungan virtual). - -2. **Pasang Visual Studio Code**. Pastikan kamu sudah memasangkan Visual Studio Code di komputermu. Ikuti instruksi-instruksi ini untuk [memasangkan Visual Studio Code](https://code.visualstudio.com/) untuk instalasi dasar. Kamu akan menggunakan Python dalam Visual Studio Code dalam kursus ini, jadi kamu mungkin akan ingin mencari tahu cara [mengkonfigurasi Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) untuk menggunakan Python. - - > Nyamankan diri dengan Python dengan mengerjakan [koleksi modul pembelajaran ini](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - -3. **Pasang Scikit-learn**, dengan mengikuti [instruksi di sini](https://scikit-learn.org/stable/install.html). Karena harus dipastikan bahwa kamu sedang menggunakan Python 3, kami anjurkan kamu menggunakan sebuah *virtual environment*. Ingatlah juga bahwa jika kamu ingin memasangkan ini di sebuah M1 Mac, ada instruksi khusus dalam laman yang ditautkan di atas. - -4. **Pasang Jupyter Notebook**. Kamu akan harus [memasang paket Jupyter](https://pypi.org/project/jupyter/). - -## Lingkungan penulisan ML-mu - -Kamu akan menggunakan ***notebooks*** untuk bekerja dengan kode Python-mu dan membuat model *machine learning*-mu. Jenis file ini adalah alat yang sering digunakan *data scientists* dan dapat diidentifikasikan dengan akhiran/ekstensi `.ipynb`. - -*Notebook* adalah sebuah lingkungan interaktif yang memungkinkan seorang *developer* untuk menulis kode, catatan, dan dokumentasi mengenai kode tersebut sehingga menjadi sangat berguna untuk proyek eksperimental ataupun riset. - -### Latihan - bekerja dengan sebuah *notebook* - -Dalam folder ini, kamu akan menemukan file _notebook.ipynb_. - -1. Buka _notebook.ipynb_ dalam Visual Studio Code. - - Sebuah server Jupyter akan mulai dengan Python 3+. Kamu akan menemukan bagian-bagian *notebook* yang dapat di-`run` (dijalankan). Bagian-bagian tersebut adalah carikan-carikan kode. Kamu bisa menjalankan secarik kode dengan mengklik tombol ▶. - -2. Pilih ikon `md` dan tambahlah sedikit *markdown*: **# Selamat datang di *notebook* saya!** - - Lalu, tambahlah sedikit kode Python. - -3. Ketik **print('hello notebook')** dalam blok kode. - -4. Klik ▶ untuk menjalankan kode. - - Hasilnya harusnya ini: - - ```output - hello notebook - ``` - -![Sebuah *notebook* yang dibuka di VS Code](../images/notebook.jpg) - -Kamu bisa menyelipkan catatan-catatan antara kodemu untuk mendokumentasi *notebook*-nya. - -✅ Pikirkanlah sejenak bagaimana lingkungan seorang *web developer* berbeda dengan lingkungan seorang *data scientist*. - -## Berjalan dengan Scikit-learn - -Sekarang, Python sudah siap dalam lingkungan lokalmu, dan kamu sudah nyaman bekerja dengan *Jupyter notebook*. Marilah membiasakan diri dengan Scikit-learn (dilafalkan `saikit lern`; huruf `e` dalam `lern` seperti `e` dalam kata `Perancis`). Scikit-learn menyediakan sebuah [API ekstensif](https://scikit-learn.org/stable/modules/classes.html#api-ref) untuk membantu kamu mengerjakan tugas ML. - -Berdasarkan [situs mereka](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn" adalah sebuah *open-source library* untuk *machine-learning* yang dapat digunakan untuk *supervised* dan *unsupervised learning*. Scikit-learn juga menyediakan beragam alat untuk *model-fitting*, *data preprocessing*, seleksi dan evaluasi model, dll. - -Dalam kursus ini, kamu akan menggunakan Scikit-learn dan beberapa alat lainnya untuk membangun model *machine-learning* untuk mengerjakan apa yang kami panggil tugas '*machine-learning* tradisional'. Kami sengaja menghindari *neural networks* dan *deep learning* sebab mereka akan dibahas dengan lebih lengkap dalam kurikulum 'AI untuk pemula' nanti. - -Scikit-learn memudahkan pembangunan dan evaluasi model-model. Dia terutama fokus pada menggunakan data numerik dan mempunyai beberapa *dataset* yang siap sedia untuk digunakan sebagai alat belajar. Dia juga mempunyai model yang sudah dibangun untuk murid-murid untuk langsung coba. Mari menjelajahi proses memuat data yang sudah disiapkan dan menggunakan model ML pengestimasian pertama menggunakan Scikit-learn dengan data sederhana. - - -## Latihan - Scikit-learn *notebook* pertamamu - -> Tutorial ini terinspirasi [contoh regresi linear ini](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) di situs Scikit-learn. - -Dalam file _notebook.ipynb_ dari pelajaran ini, kosongkan semua sel dengan mengklik tombol berlambang 'tempat sampah'. - -Dalam bagian ini, kamu akan bekerja dengan sebuah *dataset* kecil tentang diabetes yang datang bersama dengan Scikit-learn yang dimaksud sebagai bahan ajaran. Bayangkan bahwa kamu ingin mencoba sebuah cara pengobatan untuk pasien diabetes. Model *machine learning* mungkin dapat membantu kamu menentukan pasien mana merespon lebih baik pada pengobatan tersebut berdasarkan kombinasi-kombinasi variabel. Bahkan sebuah model regresi yang sederhana, saat divisualisasikan, dapat menunjukkanmu informasi tentang variabel-variabel yang dapat membantu kamu mengorganisasikan uji-uji klinis teoritismu. - -✅ Ada banyak macam metode regresi, dan yang mana yang kamu pilih tergantung pada jawaban yang kamu sedang cari. Kalau kamu ingin memprediksi tinggi badan seseorang dari usianya, kamu bisa menggunakan regresi linear, karena kamu mencari sebuah **nilai numerik**. Kalau kamu tertarik pada apa sebuah jenis kuliner sebaiknya dianggap sebagai vegan atau tidak, kamu sedang mencari sebuah **kategorisasi/klasifikasi**; kamu bisa menggunakan regresi logistik. Kamu akan belajar lebih banyak tentang regresi logistik nanti. Pikirkan dahulu beberapa pertanyaan yang kamu bisa tanyakan dari data yang ada dan metode yang mana akan paling cocok. - -Mari mulai mengerjakan tugas ini. - -### Impor *library* - -Untuk tugas ini, kita akan mengimpor beberapa *library*: - -- **matplotlib**. Sebuah [alat untuk membuat grafik](https://matplotlib.org/) yang kita akan gunakan untuk membuat sebuah grafik garis. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) adalah sebuah *library* berguna untuk menangani data numerik di Python. -- **sklearn**. Ini adalah *library* Scikit-learn. - -Imporlah *library-library* yang akan membantu dengan tugasmu. - -1. Tambahlah impor dengan mengetik kode berikut: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Di atas, kamu sedang mengimpor `matplottlib`, `numpy`. Selain itu, kamu juga sedang mengimpor `datasets`, `linear_model` dan `model_selection` dari `sklearn`. `model_selection` digunakan untuk memisahkan data menjadi set latihan dan set ujian. - -### *Dataset* diabetes - -[*Dataset* diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) mencakupi 442 sampel data mengenai diabetes dengan 10 variabel utama, termasuk: - -- age: usia dalam tahun -- bmi: *body mass index* -- bp: tekanan darah rata-rata -- s1 tc: Sel T (sejenis cel darah putih) - -✅ *Dataset* ini juga mempunyai konsep 'jenis kelamin' sebagai sebuah variabel utama yang penting dalam riset diabetes. Banyak *dataset* medis mempunyai klasifikasi binari ini. Pikirkan sejenak bagaimana kategorisasi seperti yang ini dapat mengecualikan bagian tertentu dari sebuah populasi dari pengobatan. - -Sekarang, muatkan data X dan y. - -> 🎓 Ingatlah, ini adalah *supervised learning*, jadi kita perlu sebuah target (dinamakan 'y'). - -Dalam sebuah sel kode yang baru, muatkan *dataset* diabetes dengan memanggil `load_diabetes()`. Input `return_X_y=True` menunjukkan bahwa `X` adalah sebuah matriks data dan `y` adalah target regresi. - -1. Tambah beberapa instruksi *print* untuk menunjukkan ukuran data matriks dan elemen pertama matriks tersebut. - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Respon yang didapati adalah sebuah *tuple*. Kamu sedang menetapkan kedua nilai pertama dalam *tuple* itu ke dalam `X` dan `y` secara berturut. Pelajari lebih banyak [tentant *tuples*](https://wikipedia.org/wiki/Tuple). - - Kamu bisa melihat bahwa data ini berupa 422 nilai yang disusun menjadi beberapa `array` dengan 10 elemen: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Pikirkan sejenak tentang hubungan antara data dan target regresi. Apa kamu bisa menemukan [targetnya](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) untuk *database* diabetes dalam dokumentasinya? Mengetahui targetnya, apa yang *dataset* ini sedang mendemonstrasikan? - -2. Lalu, pilih sebuah porsi dataset ini untuk digambarkan dengan menyusuninya menjadi sebuah `array` baru dengan fungsi `newaxis` dari `numpy`. Kita akan menggunakan regresi linear untuk menggambar sebuah garis antara nilai-nilai dalam data ini sesuai dengan pola yang ditentukannya. - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ Kapanpun, *print*-lah datanya untuk memeriksa bentuknya. - -3. Sekarang datanya sudah siap untuk digambar. Kamu bisa melihat jikalau sebuah mesin dapat menentukan sebuah perpisahan logika dari nomor-nomor *dataset* ini. Untuk melakukan itu, kamu harus memisahkan data (X) dan target (y) menjadi set latihan dan set ujian. Scikit-learn juga memberi cara untuk melakukan itu; kamu bisa memisahkan data ujianmu pada titik tertentu. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. Sekarang, kamu sudah siap untuk melatihkan modelmu! Muatkan dahulu data regresi linear dan latihkan modelmu dengan set X dan y-mu dengan `model.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` adalah sebuah fungsi yang akan kamu temukan dalam banyak *library* ML seperti TensorFlow. - -5. Lalu, buatlah sebuah prediksi dengan data ujianmu dengan fungsi `predict()`. Ini akan digunakan untuk menggambar sebuah garis antara grup-grup data. - - ```python - y_pred = model.predict(X_test) - ``` - -6. Sekarang waktunya untuk menggambar data dalam sebuah grafik. Matplotlib adalah sebuah alat yang sangat berguna untuk melakukan itu. Buatlah sebuah petak sebar dari semua X dan y dari set ujian dan gunakan prediksi yang dihasilkan untuk menggambar sebuah garis di tempat yang paling cocok antara grup-grup data modelnya. - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, y_pred, color='blue', linewidth=3) - plt.show() - ``` - - ![sebuah petak sebar yang menunjukkan titik-titik data sekitar diabetes](./images/scatterplot.png) - - ✅ Pikirkan sejenak tentang apa yang sedang terjadi di sini. Sebuah garis lurus membentang tengah-tengah titik-titik kecil data. Tetapi apa yang sedang garis itu lakukan? Apa kamu bisa melihat bagaimana kamu bisa menggunakan garis ini untuk memprediksi di mana sebuah titik data baru yang tidak pernah dilihat sebelumnya kemungkinan besar akan terletak berhubungan dengan sumbu y grafik ini? Coba jelaskan dalam kata-kata kegunaan praktis model ini. - -Selamat, kamu telah membangun model regresi linear pertamamu, membuat sebuah prediksi darinya, dan menunjukkannya dalam sebuah grafik! - ---- -## Tantangan - -Gambarkan sebuah variabel yang beda dari *dataset* ini. Petunjuk: edit baris ini: `X = X[:, np.newaxis, 2]`. Mengetahui target *dataset* ini, apa yang kamu bisa menemukan tentang kemajuan diabetes sebagai sebuah penyakit? -## [Kuis pasca-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## Review & Pembelajaran Mandiri - -Dalam tutorial ini, kamu bekerja dengan sebuah model regresi linear yang sederhana daripada regresi linear univariat atau berganda. Bacalah sedikit tentang perbedaan antara metode-metode ini atau tontonlah [video ini](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). - -Bacalah lebih banyak tentang konsep regresi dan pikirkanlah tentang jenis pertanyaan apa saja yang bisa dijawab teknik ini. Cobalah [tutorial ini](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) untuk memperdalam pemahamanmu. - -## Tugas - -[*Dataset* yang beda](assignment.md) diff --git a/2-Regression/1-Tools/translations/README.it.md b/2-Regression/1-Tools/translations/README.it.md deleted file mode 100644 index f251de16..00000000 --- a/2-Regression/1-Tools/translations/README.it.md +++ /dev/null @@ -1,211 +0,0 @@ -# Iniziare con Python e Scikit-learn per i modelli di regressione - -![Sommario delle regressioni in uno sketchnote](../../../sketchnotes/ml-regression.png) - -> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Qui Pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/?loc=it) - -## Introduzione - -In queste quattro lezioni, si scoprirà come costruire modelli di regressione. Si discuterà di cosa siano fra breve. -Prima di tutto, ci si deve assicurare di avere a disposizione gli strumenti adatti per far partire il processo! - -In questa lezione, si imparerà come: - -- Configurare il proprio computer per attività locali di machine learning. -- Lavorare con i Jupyter notebook. -- Usare Scikit-learn, compresa l'installazione. -- Esplorare la regressione lineare con un esercizio pratico. - -## Installazioni e configurazioni - -[![Usare Python con Visual Studio Code](https://img.youtube.com/vi/7EXd4_ttIuw/0.jpg)](https://youtu.be/7EXd4_ttIuw "Using Python with Visual Studio Code") - -> 🎥 Fare click sull'immagine qui sopra per un video: usare Python all'interno di VS Code. - -1. **Installare Python**. Assicurarsi che [Python](https://www.python.org/downloads/) sia installato nel proprio computer. Si userà Python for per molte attività di data science e machine learning. La maggior parte dei sistemi già include una installazione di Python. Ci sono anche utili [Pacchetti di Codice Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) disponbili, per facilitare l'installazione per alcuni utenti. - - Alcuni utilizzi di Python, tuttavia, richiedono una versione del software, laddove altri ne richiedono un'altra differente. Per questa ragione, è utile lavorare con un [ambiente virtuale](https://docs.python.org/3/library/venv.html). - -2. **Installare Visual Studio Code**. Assicurarsi di avere installato Visual Studio Code sul proprio computer. Si seguano queste istruzioni per [installare Visual Studio Code](https://code.visualstudio.com/) per l'installazione basica. Si userà Python in Visual Studio Code in questo corso, quindi meglio rinfrescarsi le idee su come [configurare Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) per lo sviluppo in Python. - - > Si prenda confidenza con Python tramite questa collezione di [moduli di apprendimento](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - -3. **Installare Scikit-learn**, seguendo [queste istruzioni](https://scikit-learn.org/stable/install.html). Visto che ci si deve assicurare di usare Python 3, ci si raccomanda di usare un ambiente virtuale. Si noti che se si installa questa libreria in un M1 Mac, ci sono istruzioni speciali nella pagina di cui al riferimento qui sopra. - -1. **Installare Jupyter Notebook**. Servirà [installare il pacchetto Jupyter](https://pypi.org/project/jupyter/). - -## Ambiente di creazione ML - -Si useranno **notebook** per sviluppare il codice Python e creare modelli di machine learning. Questo tipo di file è uno strumento comune per i data scientist, e viene identificato dal suffisso o estensione `.ipynb`. - -I notebook sono un ambiente interattivo che consente allo sviluppatore di scrivere codice, aggiungere note e scrivere documentazione attorno al codice il che è particolarmente utile per progetti sperimentali o orientati alla ricerca. - -### Esercizio - lavorare con un notebook - -In questa cartella, si troverà il file _notebook.ipynb_. - -1. Aprire _notebook.ipynb_ in Visual Studio Code. - - Un server Jupyter verrà lanciato con Python 3+. Si troveranno aree del notebook che possono essere `eseguite`, pezzi di codice. Si può eseguire un blocco di codice selezionando l'icona che assomiglia a un bottone di riproduzione. - -1. Selezionare l'icona `md` e aggiungere un poco di markdown, e il seguente testo **# Benvenuto nel tuo notebook**. - - Poi, aggiungere un blocco di codice Python. - -1. Digitare **print('hello notebook')** nell'area riservata al codice. -1. Selezionare la freccia per eseguire il codice. - - Si dovrebbe vedere stampata la seguente frase: - - ```output - hello notebook - ``` - -![VS Code con un notebook aperto](../images/notebook.jpg) - -Si può inframezzare il codice con commenti per auto documentare il notebook. - -✅ Si pensi per un minuto all'ambiente di lavoro di uno sviluppatore web rispetto a quello di un data scientist. - -## Scikit-learn installato e funzionante - -Adesso che Python è impostato nel proprio ambiente locale, e si è familiari con i notebook Jupyter, si acquisterà ora confidenza con Scikit-learn (si pronuncia con la `si` della parola inglese `science`). Scikit-learn fornisce una [API estensiva](https://scikit-learn.org/stable/modules/classes.html#api-ref) che aiuta a eseguire attività ML. - -Stando al loro [sito web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn è una libreria di machine learning open source che supporta l'apprendimento assistito (supervised learning) e non assistito (unsuperivised learnin). Fornisce anche strumenti vari per l'adattamento del modello, la pre-elaborazione dei dati, la selezione e la valutazione dei modelli e molte altre utilità." - -In questo corso, si userà Scikit-learn e altri strumenti per costruire modelli di machine learning per eseguire quelle che vengono chiamate attività di 'machine learning tradizionale'. Si sono deliberamente evitate le reti neurali e il deep learning visto che saranno meglio trattati nel prossimo programma di studi 'AI per Principianti'. - -Scikit-learn rende semplice costruire modelli e valutarli per l'uso. Si concentra principalmente sull'utilizzo di dati numerici e contiene diversi insiemi di dati già pronti per l'uso come strumenti di apprendimento. Include anche modelli pre-costruiti per gli studenti da provare. Si esplora ora il processo di caricamento dei dati preconfezionati, e, utilizzando un modello di stimatore incorporato, un primo modello ML con Scikit-Learn con alcuni dati di base. - -## Esercizio - Il Primo notebook Scikit-learn - -> Questo tutorial è stato ispirato dall'[esempio di regressione lineare](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) nel sito web di Scikit-learn. - -Nel file _notebook.ipynb_ associato a questa lezione, svuotare tutte le celle usando l'icona cestino ('trash can'). - -In questa sezione, di lavorerà con un piccolo insieme di dati sul diabete che è incorporato in Scikit-learn per scopi di apprendimento. Si immagini di voler testare un trattamento per i pazienti diabetici. I modelli di machine learning potrebbero essere di aiuto nel determinare quali pazienti risponderebbero meglio al trattamento, in base a combinazioni di variabili. Anche un modello di regressione molto semplice, quando visualizzato, potrebbe mostrare informazioni sulle variabili che aiuteranno a organizzare le sperimentazioni cliniche teoriche. - -✅ Esistono molti tipi di metodi di regressione e quale scegliere dipende dalla risposta che si sta cercando. Se si vuole prevedere l'altezza probabile per una persona di una data età, si dovrebbe usare la regressione lineare, visto che si sta cercando un **valore numerico**. Se si è interessati a scoprire se un tipo di cucina dovrebbe essere considerato vegano o no, si sta cercando un'**assegnazione di categoria** quindi si dovrebbe usare la regressione logistica. Si imparerà di più sulla regressione logistica in seguito. Si pensi ad alcune domande che si possono chiedere ai dati e quale di questi metodi sarebbe più appropriato. - -Si inizia con questa attività. - -### Importare le librerie - -Per questo compito verranno importate alcune librerie: - -- **matplotlib**. E' un utile [strumento grafico](https://matplotlib.org/) e verrà usato per creare una trama a linee. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) è una libreira utile per gestire i dati numerici in Python. -- **sklearn**. Questa è la libreria Scikit-learn. - -Importare alcune librerie che saranno di aiuto per le proprie attività. - -1. Con il seguente codice si aggiungono le importazioni: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Qui sopra vengono importati `matplottlib`, e `numpy`, da `sklearn` si importa `datasets`, `linear_model` e `model_selection`. `model_selection` viene usato per dividere i dati negli insiemi di addestramento e test. - -### L'insieme di dati riguardante il diabete - -L'[insieme dei dati sul diabete](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) include 442 campioni di dati sul diabete, con 10 variabili caratteristiche, alcune delle quali includono: - -- age (età): età in anni -- bmi: indice di massa corporea (body mass index) -- bp: media pressione sanguinea -- s1 tc: Cellule T (un tipo di leucocito) - -✅ Questo insieme di dati include il concetto di "sesso" come caratteristica variabile importante per la ricerca sul diabete. Molti insiemi di dati medici includono questo tipo di classificazione binaria. Si rifletta su come categorizzazioni come questa potrebbe escludere alcune parti di una popolazione dai trattamenti. - -Ora si caricano i dati di X e y. - -> 🎓 Si ricordi, questo è apprendimento supervisionato (supervised learning), e serve dare un nome all'obiettivo 'y'. - -In una nuova cella di codice, caricare l'insieme di dati sul diabete chiamando `load_diabetes()`. Il parametro `return_X_y=True` segnala che `X` sarà una matrice di dati e `y` sarà l'obiettivo della regressione. - -1. Si aggiungono alcuni comandi di stampa per msotrare la forma della matrice di dati e i suoi primi elementi: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Quella che viene ritornata è una tuple. Quello che si sta facento è assegnare i primi due valori della tupla a `X` e `y` rispettivamente. Per saperne di più sulle [tuples](https://wikipedia.org/wiki/Tuple). - - Si può vedere che questi dati hanno 442 elementi divisi in array di 10 elementi: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Si rifletta sulla relazione tra i dati e l'obiettivo di regressione. La regressione lineare prevede le relazioni tra la caratteristica X e la variabile di destinazione y. Si può trovare l'[obiettivo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) per l'insieme di dati sul diabete nella documentazione? Cosa dimostra questo insieme di dati, dato quell'obiettivo? - -2. Successivamente, selezionare una porzione di questo insieme di dati da tracciare sistemandola in un nuovo array usando la funzione di numpy's `newaxis`. Verrà usata la regressione lineare per generare una linea tra i valori in questi dati secondo il modello che determina. - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ A piacere, stampare i dati per verificarne la forma. - -3. Ora che si hanno dei dati pronti per essere tracciati, è possibile vedere se una macchina può aiutare a determinare una divisione logica tra i numeri in questo insieme di dati. Per fare ciò, è necessario dividere sia i dati (X) che l'obiettivo (y) in insiemi di test e addestamento. Scikit-learn ha un modo semplice per farlo; si possono dividere i dati di prova in un determinato punto. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. Ora si è pronti ad addestare il modello! Caricare il modello di regressione lineare e addestrarlo con i propri insiemi di addestramento X e y usando `model.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` è una funzione che si vedrà in molte librerie ML tipo TensorFlow - -5. Successivamente creare una previsione usando i dati di test, con la funzione `predict()`. Questo servirà per tracciare la linea tra i gruppi di dati - - ```python - y_pred = model.predict(X_test) - ``` - -6. Ora è il momento di mostrare i dati in un tracciato. Matplotlib è uno strumento molto utile per questo compito. Si crei un grafico a dispersione (scatterplot) di tutti i dati del test X e y e si utilizzi la previsione per disegnare una linea nel luogo più appropriato, tra i raggruppamenti dei dati del modello. - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, y_pred, color='blue', linewidth=3) - plt.show() - ``` - - ![un grafico a dispersione che mostra i punti dati sul diabete](../images/scatterplot.png) - - ✅ Si pensi a cosa sta succedendo qui. Una linea retta scorre attraverso molti piccoli punti dati, ma cosa sta facendo esattamente? Si può capire come si dovrebbe utilizzare questa linea per prevedere dove un nuovo punto di dati non noto dovrebbe adattarsi alla relazione con l'asse y del tracciato? Si cerchi di mettere in parole l'uso pratico di questo modello. - -Congratulazioni, si è costruito il primo modello di regressione lineare, creato una previsione con esso, e visualizzata in una tracciato! - ---- - -## 🚀Sfida - -Tracciare una variabile diversa da questo insieme di dati. Suggerimento: modificare questa riga: `X = X[:, np.newaxis, 2]`. Dato l'obiettivo di questo insieme di dati, cosa si potrebbe riuscire a scoprire circa la progressione del diabete come matattia? - -## [Qui post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/?loc=it) - -## Riepilogo e Auto Apprendimento - -In questo tutorial, si è lavorato con una semplice regressione lineare, piuttosto che una regressione univariata o multipla. Ci so informi circa le differenze tra questi metodi oppure si dia uno sguardo a [questo video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) - -Si legga di più sul concetto di regressione e si pensi a quale tipo di domande potrebbero trovare risposta con questa tecnica. Seguire questo [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) per approfondire la propria conoscenza. - -## Compito - -[Un insieme di dati diverso](assignment.it.md) - diff --git a/2-Regression/1-Tools/translations/README.ja.md b/2-Regression/1-Tools/translations/README.ja.md deleted file mode 100644 index 8a40fbe3..00000000 --- a/2-Regression/1-Tools/translations/README.ja.md +++ /dev/null @@ -1,218 +0,0 @@ -# 回帰モデルについてPythonとScikit-learnから始めましょう - -![回帰の要約についてのスケッチノート](../../../sketchnotes/ml-regression.png) - -> [Tomomi Imura](https://www.twitter.com/girlie_mac) によって制作されたスケッチノート - -## [講義前クイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9?loc=ja) - -## イントロダクション - -この章で用意されている4つのレッスンでは、回帰モデルを構築する方法について学びます。回帰モデルが何をするためのものなのかは、後ほど説明します。しかし、何かを始める前にプロセスを開始するための適切なツールが用意されていることを確認してください! - -このレッスンでは、以下のことを学びます。 - -- ローカル環境で機械学習タスクを実行するための設定 -- Jupyter Notebookの使い方 -- Scikit-learnのインストールと使い方 -- 線形回帰に関するハンズオン - -## インストールと設定 - -[![VisualStudioCodeでのPythonの使用方法](https://img.youtube.com/vi/7EXd4_ttIuw/0.jpg)](https://youtu.be/7EXd4_ttIuw "VisualStudioCodeでのPythonの使用方法") - -> 🎥 上の画像をクリックするとビデオが再生されます: VisualStudioCodeでのPythonの使用方法 - -1. **Pythonのインストール**: [Python](https://www.python.org/downloads/) がコンピュータにインストールされていることを確認してください。Pythonは多くのデータサイエンス、機械学習のタスクで使用します。ほとんどのコンピュータシステムにはPythonがすでにインストールされています。一部のユーザのセットアップを簡単にするために [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) を利用することもできます。 - - しかし、Pythonを使っていると時に異なるバージョンを必要とする場合があります。そのため、[仮想環境](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でPythonを使用しますので [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) を利用して、Pythonの使い方に慣れてください。 - - -3. **Scikit-learnのインストール**: [こちらの手順](https://scikit-learn.org/stable/install.html) に従ってインストールしてください。Python3の環境で実行する必要があるので、仮想環境を使用することをおすすめします。なお、このライブラリをM1のMacにインストールする場合は、上記リンク先のページに特別な説明があります。 - - -4. **Jupyter Notebookのインストール**: [Jupyter package](https://pypi.org/project/jupyter/) をインストールする必要があります。 - -## MLのオーサリング環境 - -**ノートブック**を利用して、Pythonコードでの開発や機械学習モデルの作成を行います。このような種類のファイルは、データサイエンティストにとって一般的なツールであり、接尾辞または拡張子が `.ipynb` であることで識別できます。 - -ノートブックは、開発者がコードを書くと同時に、そのコードにメモを加えたり、文書を書いたりすることができるインタラクティブな環境です。そのため、実験や研究を目的としたプロジェクトに非常に役立ちます。 - -### エクササイズ - ノートブックでの作業 - -フォルダの中に _notebook.ipynb_ というファイルが入っています。 - -1. Visual Studio Codeで _notebook.ipynb_ を開いてください。 - - JupyterサーバーはPython3+が起動した状態でスタートします。ノートブックの中には、コードを「実行」できる部分があります。再生ボタンのようなアイコンを選択すると、コードブロックを実行することができます。 - - -2. `md`アイコンを選択して、**# Welcome to your notebook** というテキストの簡単なマークダウンを追加してみましょう. - - 次に、Pythonのコードを追加します。 - - -3. コードブロックで **print('hello notebook')** と入力してください。 - - -4. 矢印を選択するとコードが実行されます。 - - 以下のような結果が出力されます: - - ```output - hello notebook - ``` - -![VS Codeで開いたノートブック](../images/notebook.jpg) - -コードにコメントを追加することで、ノートブックをセルフドキュメント化することができます。 - -✅ ウェブ開発者とデータサイエンティストの開発環境がどれほど違うか、ちょっと考えてみてください。 - -## Scikit-learnを使ってみましょう - -さて、ローカル環境にPythonがセットアップされ、Jupyter notebookに慣れてきたところで、Scikit-learn(「science」のように「sci」と発音してください)にも同様に慣れていきましょう。Scikit-learnは、MLタスクを実行するための [広範なAPI](https://scikit-learn.org/stable/modules/classes.html#api-ref) を提供しています。 - -同社の [Webサイト](https://scikit-learn.org/stable/getting_started.html) には次のような説明があります。"Scikit-learnは、教師あり、教師なしの学習をサポートするオープンソースの機械学習ライブラリです。また、モデルのフィッティング、データの前処理、モデルの選択と評価、その他多くのユーティリティーのための様々なツールを提供しています。" - -このコースでは、Scikit-learnやその他のツールを使って機械学習モデルを構築し、私たちが「伝統的な機械学習」と呼ぶタスクを実行します。ニューラルネットワークやディープラーニングについては、近日公開予定の「AI for Beginners」カリキュラムで詳しく解説しますので、意図的に避けています。 - -Scikit-learnは、モデルを構築し、評価を行って実際に利用するということが簡単にできます。主に数値データの使用に焦点を当てており、学習ツールとして使用するための既製のデータセットがいくつか含まれています。また、事前に構築済みのモデルもいくつか含まれています。では、Scikit-learnであらかじめ用意されているデータを使って、最初のMLモデルを構築するプロセスを体験しましょう。 - -## エクササイズ - 初めてのScikit-learnノートブック - -> このチュートリアルはScikit-learnのWebサイトに掲載されている [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) を参考にしています。 - -このレッスンに関連する _notebook.ipynb_ ファイルで、「ゴミ箱」アイコンを押して全てのセルを消去します。 - -このセクションでは、学習用にScikit-learnに組み込まれた、糖尿病に関する小さなデータセットを扱います。糖尿病患者の治療法をテストしたい場合を想像してみてください。機械学習モデルは、変数の組み合わせに基づいて、どの患者がその治療法によく反応するかを判断するのに役立つかもしれません。非常に基本的な回帰モデルであっても、視覚化することで、理論的な臨床試験を整理するのに役立つ変数に関する情報が得られるかもしれません。 - -✅ 回帰には様々な種類があり、求める答えによってどの手法を選ぶかが異なります。例えば、ある人の年齢が与えられて身長を予測したい場合には、**数値**を求めたいので線形回帰を利用します。ある種類の料理がビーガンとみなされるべきかどうかを発見することに興味がある場合は、**カテゴリーの割り当て**を求めているので、ロジスティック回帰を使用するでしょう。ロジスティック回帰については後ほど詳しく説明します。いくつかのデータについて、どのような手法がより適切であるかを少し考えてみてください。 - -では、今回のタスクに取り掛かりましょう。 - -### ライブラリのインポート - -このタスクでは、いくつかのライブラリをインポートします。 - -- **matplotlib**: 便利な [グラフ作成ツール](https://matplotlib.org/) です。今回はこれを使って折れ線グラフを作成します。 -- **numpy**: [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) はPythonで数値データを扱うための便利なライブラリです。 -- **sklearn**: Scikit-learnのライブラリです。 - -作業に役立つライブラリをいくつか紹介します。 - -1. 以下のコードを入力してインポートを追加します。 - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - 上記では、`matplottlib`と`numpy`をインポートし、`sklearn`から`datasets`、`linear_model`、`model_selection`をインポートしています。`model_selection`はデータをトレーニングセットとテストセットに分割する際に使用します。 - -### 糖尿病のデータセット - -組み込みの [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) には、糖尿病に関する442サンプルのデータが含まれており、10個の変数が含まれています。 - -- age: 年齢 -- bmi: ボディマス指数 -- bp: 平均血圧 -- s1 tc: T細胞(白血球の一種) - -✅ このデータセットには、糖尿病に関する研究に重要な変数として「性別」の概念が含まれています。多くの医療データセットには、このようなバイナリ分類が含まれています。このような分類が、人口のある部分を治療から排除する可能性があることについて、少し考えてみましょう。 - -では、Xとyのデータを読み込みます。 - -> 🎓 今回は教師あり学習なので、「y」で表されるターゲットが必要なことを覚えておいてください。 - -新しいコードセルで、`load_diabetes()` を呼び出して糖尿病データセットを読み込みます。入力の `return_X_y=True` は、`X` がデータ行列であり、`y` が回帰の対象であることを示しています。 - -1. データ行列の形とその最初の要素を表示するために、いくつかのprintコマンドを追加します。 - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - `load_diabetes()` のレスポンスとしてタプルが返ってきます。タプルの2つの値をそれぞれ `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. 次に、numpyの`newaxis`関数を使って新しい配列を作成することで、プロットするためのデータセットの一部を選択します。最終的には線形回帰を使用することで、決まったパターンに従って、このデータの値の間に線を生成します。 - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ いつでも、データをprintして、その形を確認することができます。 - - -3. データをプロットする準備ができたので、このデータセットの数字の論理的な分割を機械が判断できるかどうかを確認してみましょう。そのためには、データ(X)とターゲット(y)の両方をトレーニングセットとテストセットに分ける必要があります。Scikit-learnには、これを行うための簡単な方法が用意されています。 - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - - -4. これで、モデルをトレーニングする準備が整いました!線形回帰モデルを読み込み、Xとyのトレーニングセットに `model.fit()` を適用して、モデルの学習を行います。 - - ```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. さて、いよいよデータをプロットして表示してみましょう。Matplotlibはこの作業にとても便利なツールです。テストデータの全てのXとyに関する散布図を作成し、モデルの予測を使用することでデータグループ間の最も適切な場所に線を引きます。 - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, y_pred, color='blue', linewidth=3) - plt.show() - ``` - - ![糖尿病周辺のデータポイントを示す散布図](../images/scatterplot.png) - - ✅ ここで何が起こっているのか、少し考えてみましょう。直線がたくさんの小さなデータの点を通っていますが、正確には何をしているのでしょうか?この直線を使って、見たことのない新しいデータポイントがプロットのy軸との関係でどこに当てはまるかを予測することができるはずだということがわかりますか?このモデルの実用的な使い方を言葉にしてみてください。 - -おめでとうございます!初めて線形回帰モデルを構築し、それを使って予測を行い、結果をプロットで表示しました! - ---- -## 🚀チャレンジ - -このデータセットから別の変数を選択してプロットしてください。ヒント: `X = X[:, np.newaxis, 2]` の行を編集する。今回のデータセットのターゲットである、糖尿病という病気の進行について、どのような発見があるのでしょうか? -## [講義後クイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10?loc=ja) - -## レビュー & 自主学習 - -このチュートリアルでは、単変量線形回帰や多変量線形回帰ではなく、単純線形回帰を扱いました。これらの手法の違いについて少し調べてみるか、この [ビデオ](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.ja.md) diff --git a/2-Regression/1-Tools/translations/README.ko.md b/2-Regression/1-Tools/translations/README.ko.md deleted file mode 100644 index 81150a70..00000000 --- a/2-Regression/1-Tools/translations/README.ko.md +++ /dev/null @@ -1,213 +0,0 @@ -# Regression 모델을 위한 Python과 Scikit-learn 시작하기 - -![Summary of regressions in a sketchnote](../../../sketchnotes/ml-regression.png) - -> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -## 소개 - -4개의 강의에서, regression 모델을 어떻게 만드는 지에 대하여 탐험합니다. 무엇인지 곧 이야기할 것 입니다. 하지만 모든 것을 하기 전에, 프로세스를 시작할 때 올바른 도구가 있는 지 확인합니다! - -이 강의에서는, 이와 같은 내용을 배웁니다: - -- 로컬 머신러닝 작업을 위해서 컴퓨터를 구성합니다. -- Jupyter notebooks으로 작업합니다. -- 설치 과정을 포함해서, Scikit-learn 사용합니다. -- 직접 연습해보며 linear regression을 알아봅니다. - -## 설치하고 구성하기 - -[![Using Python with Visual Studio Code](https://img.youtube.com/vi/7EXd4_ttIuw/0.jpg)](https://youtu.be/7EXd4_ttIuw "Using Python with Visual Studio Code") - -> 🎥 영상 보려면 이미지 클릭: using Python within VS Code. - -1. **Python 설치하기**. [Python](https://www.python.org/downloads/)이 컴퓨터에 설치되었는 지 확인합니다. 많은 데이터 사이언스와 머신러닝 작업에서 Python을 사용하게 됩니다. 대부분 컴퓨터 시스템은 이미 Python 애플리케이션을 미리 포함하고 있습니다. 사용자가 설치를 쉽게하는, 유용한 [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)이 존재합니다. - - 그러나, 일부 Python만 사용하면, 소프트웨어의 하나의 버전만 요구하지만, 다른 건 다른 버전을 요구합니다. 이런 이유로, [virtual environment](https://docs.python.org/3/library/venv.html)에서 작업하는 것이 유용합니다. - -2. **Visual Studio Code 설치하기**. 컴퓨터에 Visual Studio Code가 설치되어 있는 지 확인합니다. 기본 설치로 [install Visual Studio Code](https://code.visualstudio.com/)를 따라합니다. Visual Studio Code에서 Python을 사용하므로 Python 개발을 위한 [configure Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott)를 살펴봅니다. - - > 이 [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott)의 모음을 통하여 Python에 익숙해집시다. - -3. [these instructions](https://scikit-learn.org/stable/install.html)에 따라서, **Scikit-learn 설치하기**. Python 3을 사용하는 지 확인할 필요가 있습니다. 가상 환경으로 사용하는 것을 추천합니다. 참고로, M1 Mac에서 라이브러리를 설치하려면, 링크된 페이지에서 특별한 설치 방법을 따라합시다. - -1. **Jupyter Notebook 설치하기**. [install the Jupyter package](https://pypi.org/project/jupyter/)가 필요합니다. - - -## ML 작성 환경 - -**notebooks**으로 Python 코드를 개발하고 머신러닝 모델도 만드려고 합니다. 이 타입 파일은 데이터 사이언티스트의 일반적인 도구이고, 접미사 또는 확장자 `.ipynb`로 찾을 수 있습니다. - -노트북은 개발자가 코드를 작성하고 노트를 추가하며 코드 사이에 문서를 작성할 수 있는 대화형 환경으로서 실험적이거나 연구-중심 프로젝트에 매우 도움이 됩니다. - -### 연습 - notebook으로 작업하기 - -이 폴더에서, _notebook.ipynb_ 파일을 찾을 수 있습니다. - -1. Visual Studio Code에서 _notebook.ipynb_ 엽니다. - - Jupyter 서버는 Python 3+ 이상에서 시작됩니다. 코드 조각에서, `run` 할 수 있는 노트북 영역을 찾습니다. 재생 버튼처럼 보이는 아이콘을 선택해서, 코드 블록을 실핼할 수 있습니다. - -1. `md` 아이콘을 선택하고 markdown을 살짝 추가합니다, 그리고 **# Welcome to your notebook** 텍스트를 넣습니다. - - 다음으로, 약간의 Python 코드를 추가합니다. - -1. 코드 블록에서 **print('hello notebook')** 입력합니다. -1. 코드를 실행하려면 화살표를 선택합니다. - - 출력된 구문이 보여야 합니다: - - ```output - hello notebook - ``` - -![VS Code with a notebook open](../images/notebook.jpg) - -코드에 주석을 넣어서 노트북이 자체적으로 문서화 할 수 있게 할 수 있습니다. - -✅ 웹 개발자의 작업 환경이 데이터 사이언티스트와 어떻게 다른 지 잠시 알아보세요. - -## Scikit-learn으로 시작하고 실행하기 - -이제 로컬 환경에 Python이 설정되었고, 그리고 Jupyter notebooks에 익숙해진 상태에서, Scikit-learn (`science`에서는 `sci`로 발음)도 익숙하게 하겠습니다. Scikit-learn은 ML 작업을 돕는 [extensive API](https://scikit-learn.org/stable/modules/classes.html#api-ref)가 제공됩니다. - -[website](https://scikit-learn.org/stable/getting_started.html)에 따르면, "Scikit-learn is an open source machine learning library that supports supervised and unsupervised learning. It also provides various tools for model fitting, data preprocessing, model selection and evaluation, and many other utilities." 라고 언급되고 있습니다. - -이 코스에서, Scikit-learn과 다른 도구를 사용하여 머신러닝 모델을 만들면서 'traditional machine learning' 작업이 진행됩니다. 곧 다가올 'AI for Beginners' 커리큘럼에서 더 잘 커버될 것이기 때문에, 신경망과 딥러닝은 제외했습니다. - -Scikit-learn 사용하면 올바르게 모델을 만들고 사용하기 위해 평가할 수 있습니다. 주로 숫자 데이터에 포커스를 맞추고 학습 도구로 사용하기 위한 여러 ready-made 데이터셋이 포함됩니다. 또 학생들이 시도해볼 수 있도록 사전-제작된 모델을 포함합니다. 패키징된 데이터를 불러오고 기초 데이터와 Scikit-learn이 같이 있는 estimator first ML 모델로 프로세스를 찾아봅니다. - -## 연습 - 첫 Scikit-learn notebook - -> 이 튜토리얼은 Scikit-learn 웹사이트에 있는 [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)에서 영감 받았습니다. - -이 강의에서 관련있는 _notebook.ipynb_ 파일에서, 'trash can' 아이콘을 누르면 모든 셀이 지워집니다. - -이 세션에서, 학습 목적의 Scikit-learn에서 만든 작은 당뇨 데이터셋으로 다룹니다. 당뇨 환자를 위한 치료 방법을 테스트하고 싶다고 생각해보세요. 머신러닝 모델은 변수 조합을 기반으로, 어떤 환자가 더 잘 치료될 지 결정할 때 도울 수 있습니다. 매우 기초적인 regression 모델도, 시각화하면, 이론적인 임상 시험을 구성하는 데에 도움이 될 변수 정보를 보여줄 수 있습니다. - -✅ Regression 방식에는 많은 타입이 있고, 어떤 것을 선택하는 지에 따라 다릅니다. 만약 주어진 나이의 사람이 클 수 있는 키에 대하여 예측하려고, **numeric value**를 구할 때, linear regression을 사용합니다. 만약 어떤 타입의 요리를 비건으로 분류해야 하는 지 알고 싶다면, logistic regression으로 **category assignment**을 찾습니다. logistic regression은 나중에 자세히 알아봅시다. 데이터에 대하여 물어볼 수 있는 몇 가지 질문과, 이 방식 중 어느 것이 적당한 지 생각해봅니다. - -작업을 시작하겠습니다. - -### 라이브러리 Import - -작업을 하기 위하여 일부 라이브러리를 import 합니다: - -- **matplotlib**. 유용한 [graphing tool](https://matplotlib.org/)이며 line plot을 만들 때 사용합니다. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html)는 Python애서 숫자를 핸들링할 때 유용한 라이브러리입니다. -- **sklearn**. [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) 라이브러리 입니다. - -작업을 도움받으려면 라이브러리를 Import 합니다. - -1. 다음 코드를 타이핑해서 imports를 추가합니다: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - `matplottlib`, `numpy`를 가져오고 `sklearn` 에서 `datasets`, `linear_model`과 `model_selection`을 가져옵니다. `model_selection`은 데이터를 학습하고 테스트 셋으로 나누기 위하여 사용합니다. - -### 당뇨 데이터셋 - -빌트-인된 [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)은 당뇨에 대한 442개의 데이터 샘플이 있고, 10개의 feature 변수가 있으며, 그 일부는 아래와 같습니다: - -- age: age in years -- bmi: body mass index -- bp: average blood pressure -- s1 tc: T-Cells (a type of white blood cells) - -✅ 이 데이터셋에는 당뇨를 연구할 때 중요한 feature 변수인 '성' 컨셉이 포함되어 있습니다. 많은 의학 데이터셋에는 binary classification의 타입이 포함됩니다. 이처럼 categorizations이 치료에서 인구의 특정 파트를 제외할 수 있는 방법에 대하여 조금 고민해보세요. - -이제, X 와 y 데이터를 불러옵니다. - -> 🎓 다시 언급하지만, 지도 학습이며, 이름이 붙은 'y' 타겟이 필요합니다. - -새로운 코드 셀에서, `load_diabetes()`를 호출하여 당뇨 데이터셋을 불러옵니다. 입력 `return_X_y=True`는 `X`를 data matrix, `y`를 regression 타겟으로 나타냅니다. - - -1. data matrix와 첫 요소의 모양을 보여주는 출력 명령을 몇 개 추가합니다: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - 응답하는 것은, tuple 입니다. 할 일은 tuple의 두 첫번째 값을 `X` 와 `y`에 각자 할당하는 것입니다. [about tuples](https://wikipedia.org/wiki/Tuple)을 봅시다. - - 데이터에 10개 요소의 배열로 이루어진 442개의 아이템이 보입니다: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ 데이터와 regression 타겟의 관계를 잠시 생각해보세요. Linear regression은 feature X와 타겟 변수 y 사이 관계를 예측합니다. 문서에서 당뇨 데이터셋의 [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)을 찾을 수 있나요? 타겟이 고려하면, 데이터셋은 무엇을 보여주나요? - -2. 다음은, numpy의 `newaxis` 함수로 새로운 배열을 통해 플롯할 데이터셋의 일부를 선택합니다. 결정한 패턴에 맞춰서, 데이터의 값 사이에 라인을 생성하기 위하여 linear regression을 사용합니다. - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ 언제나, 모양 확인 차 데이터를 출력할 수 있습니다. - -3. 이제 데이터를 그릴 준비가 되었으므로, 머신이 데이터셋의 숫자 사이에서 논리적으로 판단하며 나누는 것을 도와주고 있는 지 확인할 수 있습니다. 그러면, 데이터 (X) 와 타겟 (y)를 테스트와 훈련 셋으로 나눌 필요가 있습니다. Scikit-learn에서는 간단한 방식이 존재합니다; 주어진 포인트에서 테스트 데이터를 나눌 수 있습니다. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. 이제 모델을 훈련할 준비가 되었습니다! linear regression 모델을 부르고 `model.fit()` 사용하여 X 와 y 훈련 셋으로 훈련합니다: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()`은 TensorFlow 처럼 많은 ML 라이브러리에서 볼 수 있는 함수입니다 - -5. 그러면, `predict()` 함수를 사용하여, 테스트 데이터로 prediction을 만듭니다. 데이터 그룹 사이에 라인을 그릴 때 사용합니다 - - ```python - y_pred = model.predict(X_test) - ``` - -6. 이제 plot으로 데이터를 나타낼 시간입니다. Matplotlib은 이 작업에서 매우 유용한 도구입니다. 모든 X 와 y 테스트 데이터의 scatterplot (산점도)를 만들고, prediction을 사용해서 모델의 데이터 그룹 사이, 가장 적절한 장소에 라인을 그립니다. - - ```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() - ``` - - ![a scatterplot showing datapoints around diabetes](.././images/scatterplot.png) - - ✅ 여기에 어떤 일이 생기는 지 생각합니다. 직선은 많은 데이터의 점을 지나지만, 무엇을 하고있나요? 라인으로 보이지 않는 데이터 포인트가 plot y 축으로 연관해서, 새롭게 맞출 지 예측하는 방식을 알 수 있을까요? 모델의 실제 사용 사례를 말 해봅니다. - -축하드립니다. 첫 linear regression 모델을 만들고, 이를 통해서 prediction도 만들어서, plot에 보이게 했습니다! - ---- -## 🚀 도전 - -이 데이터셋은 다른 변수를 Plot 합니다. 힌트: 이 라인을 수정합니다: `X = X[:, np.newaxis, 2]`. 이 데이터셋의 타겟이 주어질 때, 질병으로 당뇨가 진행되면 어떤 것을 탐색할 수 있나요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## 검토 & 자기주도 학습 - -이 튜토리얼에서, univariate 또는 multiple linear regression이 아닌 simple linear regression으로 작업했습니다. 방식의 차이를 읽어보거나, [this video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef)를 봅니다. - -regression의 개념에 대하여 더 읽고 기술로 답변할 수 있는 질문의 종류에 대하여 생각해봅니다. [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott)로 깊게 이해합니다. - -## 과제 - -[A different dataset](../assignment.md) diff --git a/2-Regression/1-Tools/translations/README.pt-br.md b/2-Regression/1-Tools/translations/README.pt-br.md deleted file mode 100644 index 4e8fab74..00000000 --- a/2-Regression/1-Tools/translations/README.pt-br.md +++ /dev/null @@ -1,213 +0,0 @@ -# Primeiros passos com Python e Scikit-learn para modelos de regressão - -![Resumo de uma regressão em um _sketchnote_](../../../sketchnotes/ml-regression.png) - -> _Sketchnote_ por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9?loc=ptbr) - -> ### [Esta lição está disponível em R!](../solution/R/lesson_1-R.ipynb) - -## Introdução - -Nestas quatro lições, você irá descobrir como construir modelos de regressão. Discutiremos o que eles são daqui a pouco. Antes de mais nada, certifique-se que tem as ferramentas de que precisa para começar! - -Nesta lição, você aprenderá como: - -- Configurar seu computador para tarefas de _machine learning_. -- Trabalhar com Jupyter notebooks. -- Usar Scikit-learn, incluindo como fazer sua instalação. -- Explorar regressão linear com exercícios práticos. - -## Instalação e configuração - -[![Configurar Python no Visual Studio Code (vídeo em inglês)](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configurar Python no Visual Studio Code") - -> 🎥 Clique na imagem acima para assistir o vídeo: usando Python no VS Code (vídeo em inglês). - -1. **Instale Python**. Verifique se você já instalou [Python](https://www.python.org/downloads/) em seu computador. Você usará Python para muitas tarefas de _data science_ (ciência de dados) e _machine learning_. A maioria dos sistemas de computador já possui Python instalado. Existem [Pacotes de Código em Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) disponíveis para ajudar na instalação. - - Algumas aplicações em Python exigem versões diferentes da linguagem. Portanto, será útil trabalhar com [ambiente virtual](https://docs.python.org/3/library/venv.html). - -2. **Instale o Visual Studio Code**. Verifique se já existe o Visual Studio Code instalado em seu computador. Siga essas instruções para [instalar o Visual Studio Code](https://code.visualstudio.com/) com uma instalação básica. Você usará Python no Visual Studio Code neste curso e precisará [configurar o Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para isso. - - > Fique mais confortável em usar Python trabalhando nessa coleção de [módulos de aprendizagem](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott). - -3. **Instale a Scikit-learn**, seguindo [estas instruções](https://scikit-learn.org/stable/install.html). Visto que você precisa ter certeza que está usando o Python 3, é recomendável usar um ambiente virtual. Note que se você estiver usando essa biblioteca em um M1 Mac, há instruções específicas na página linkada acima. - -1. **Instale o Jupyter Notebook**. Você precisará [instalar o pacote Jupyter](https://pypi.org/project/jupyter/). - -## Seu ambiente de ML - -Você irá usar **_notebooks_** para desenvolver código em Python e criar modelos de _machine learning_. Esse tipo de arquivo é uma ferramenta comum para _data scientists_, e pode ser identificado pelo sufixo ou extensão `.ipynb`. - -_Notebooks_ são ambientes interativos que permitem a construção de código de programação e notas de _markdown_ para documentá-lo, o que pode ser muito útil para -projetos experimentais ou de pesquisa. - -### Exercício - Trabalhando com um **_notebook_** - -Nesta pasta, você encontrará o arquivo _notebook.ipynb_. - -1. Abra _notebook.ipynb_ no Visual Studio Code. - - Um servidor Jupyter será iniciado com Python 3+ carregado. Você encontrará áreas do _notebook_ que podem ser executadas (`run`). Para executar uma célula de código, basta clicar no ícone que parece um botão _play_ ▶. - -1. Adicione uma célula de _markdown_ (ícone `md`) e escreva o texto: "**# Boas-vindas ao seu notebook**" (Welcome to your Notebook). - - Em seguida, adicionaremos algum código em Python. - -1. Crie e escreva **print('hello notebook')** numa célula de código. -1. Clique no ícone ▶ para executar o código. - - O resultado ficará assim: - - ```output - hello notebook - ``` - -![VS Code com um notebook aberto](../images/notebook.jpg) - -Você pode adicionar comentários para documentar seu _notebook_. - -✅ Pense por um momento em como o ambiente de uma pessoa desenvolvedora _web_ difere do ambiente para _data scientists_. - -## Scikit-learn instalado e funcionando - -Agora que Python está funcionando em seu ambiente local e você está mais confortável com Jupyter notebooks, vamos nos familizar com a Scikit-learn (a pronúncia de `sci` é a mesma do verbo sair conjugado na forma `sai`). Scikit-learn fornece uma [API abrangente](https://scikit-learn.org/stable/modules/classes.html#api-ref) para te ajudar com tarefas de ML. - -De acordo com o seu [website](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn é uma bibilioteca de código aberto para _machine learning_ que suporta aprendizado supervisionado e não supervisionado. Também fornece várias ferramentas para ajuste de modelo, processamento de dados, seleção e validação de modelo, etc." - -Nesse curso, você irá usar a Scikit-learn e outras ferramentas para construir modelos de _machine learning_ para fazer as chamadas tarefas "tradicionais" de _machine learning_. Nós evitamos usar _neural networks_ (redes neurais) e _deep learning_ (aprendizagem profunda) por que serão abordadas de uma forma mais completa no curso de "AI para iniciantes". - -Scikit-learn facilita a construção e validação de modelos. O foco principal é no uso de dados numéricos mas também contém vários conjuntos de dados prontos para serem usados como ferramenta de estudo. Também possui modelos pré-construídos para os alunos experimentarem. Vamos explorar o processo de carregar dados predefinidos e usar um modelo com estimador integrado com a Scikit-learn e alguns dados básicos. - -## Exercício - Seu primeiro notebook Scikit-learn - -> Este tutorial foi inspirado pelo [exemplo de regressão linear](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) do site da Scikit-learn. - -No arquivo _notebook.ipynb_, limpe todas as células clicando no ícone que parece uma lata de lixo 🗑️. - -Nesta seção, você irá trabalhar com um pequeno conjunto de dados sobre diabetes que foi produzido para a Scikit-learn com fins de aprendizagem. Imagine que você queira testar um tratamento para pessoas diabéticas. Modelos de _machine learning_ podem te ajudar a escolher quais pacientes irão responder melhor ao tratamento, baseado em combinações de variáveis. Mesmo um modelo de regressão simples, quando visualizado, pode mostrar informações sobre variáveis que ajudarão a organizar ensaios clínicos teóricos. - -✅ Existem muitos tipos de métodos de regressão, e a escolha dentre eles dependerá da resposta que você procura. Se você quer prever a altura provável de uma pessoa de uma determinada idade, você deve usar a regressão linear, pois está sendo usado um **valor numérico**. Se você quer descobrir se um tipo de cozinha pode ser considerado vegano ou não, isso está relacionado a uma **atribuição de categoria**, então usa-se a regressão logística. Você irá aprender mais sobre regressão logística em breve. Pense um pouco nas questões que aparecem com os dados que você tem e qual desses métodos seria mais apropriado usar. - -Vamos começar a tarefa. - -### Importe as bibliotecas - -Para esta tarefa nós importaremos algumas bibliotecas: - -- **matplotlib**. É uma [ferramenta gráfica](https://matplotlib.org/) que usaremos para criar um gráfico de linha. -- **numpy**. [Numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) é uma biblioteca útil que lida com dados numéricos em Python. -- **sklearn**. Essa é a bilioteca [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). - -Importe essas bibliotecas pois te ajudarão na tarefa. - -1. Para importar você pode usar o código abaixo: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Acima, você está importando `matplottlib`, `numpy` e também `datasets`, `linear_model` e `model_selection` da `sklearn`. A função `model_selection` é usada para dividir os dados em conjuntos de dados de treinamento e teste. - -### O conjunto de dados sobre diabetes - -O [conjunto de dados sobre diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) inclui 442 exemplos de dados sobre diabetes, com 10 variáveis de características, algumas delas incluem: - -- age: idade em anos -- bmi (body mass index): índice de massa corporal -- bp (blood pressure): média de pressão sanguínea -- s1 tc: Células T (um tipo de glóbulo branco) - -✅ Esse conjunto de dados inclui o conceito de "sexo" como variável de característica importante no contexto de diabetes. Muitos conjuntos de dados médicos incluem tipos de classificação binária. Pense um pouco sobre como categorizações como essa podem excluir partes de uma população dos tratamentos. - -Agora, carregue os dados X e y. - -> 🎓 Lembre-se que esse é um processo de aprendizado supervisionado, portanto, precisamos de um alvo 'y'. - -Em uma célula de código, carregue o conjunto de dados sobre diabetes chamando a função `load_diabetes()`. O parâmetro `return_X_y=True` indica que `X` será uma matriz de dados e `y` é o alvo da regressão. - -1. Adicione alguns comandos _print_ para mostrar a forma da matriz e seu primeiro elemento: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - A função retorna uma estrutura chamada tupla. Na primeira linha, os dois primeiros valores da tupla são atribuidos a `X` e `y`, respectivamente. Saiba mais [sobre tuplas](https://wikipedia.org/wiki/Tuple). - - Você pode observar que os dados possuem 442 elementos divididos em matrizes de 10 elementos: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Pense sobre a relação entre os dados e o alvo da regressão. Regressão linear sugere a relação entre a característica X e a característica alvo y. Você pode achar o [alvo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para o conjunto de dados sobre diabetes na documentação? Conhecendo o alvo, o que este conjunto de dados demonstra? - -2. Em seguida, selecione uma parte do conjunto de dados para plotar em um gráfico, colocando-o em uma nova matriz usando a função `newaxis` da numpy. Iremos usar regressão linear para gerar uma linha entre os valores do conjunto de dados, de acordo com o padrão que ela é definida. - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ Você pode adicionar comandos _print_ para imprimir e visualizar os dados e verificar seus formatos. - -3. Agora que os dados estão prontos para serem plotados, podemos usar uma máquina para ajudar a determinar a divisão lógica entre os dados no conjunto de dados. Para isso, é necessário dividir os dados (X) e o alvo (y) em conjuntos de teste e treinamento e a Scikit-learn oferece uma maneira de fazer isso. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. Seu modelo está pronto para ser treinado! Carregue o modelo de regressão linear e treine-o usando seus conjuntos de treinamento X e Y usando a função `model.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` é uma função que aparece em muitas biblioteas de ML, como a TensorFlow. - -5. Por fim, faça uma previsão com seus dados de teste, usando a função `predict()`. Isso será usado para traçar uma linha entre os grupos de dados. - - ```python - y_pred = model.predict(X_test) - ``` - -6. Chegou a hora de mostrar os resultados em um gráfico. Matplotlib é a ferramenta perfeita para essa tarefa. Crie um gráfico de dispersão (`scatter`) de todos os dados de teste de X e y, e use a previsão feita para traçar no lugar mais adequado, entre os grupos de dados do modelo. - - ```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() - ``` - - ![um gráfico de dispersão mostrando pontos de dados de diabetes](../images/scatterplot.png) - - ✅ Observe o que está acontecendo. Uma linha reta está atravessando os pequenos pontos de dados, mas o que significa isso? Você consegue ver como pode usar essa linha para prever onde um ponto de dados novo ficaria em relação ao eixo y deste gráfico? Tente colocar em palavras o uso prático desse modelo. - -Parabéns, usando um conjunto de dados, você construiu seu primeiro modelo de regressão linear, pediu que ele fizesse uma previsão e a mostrou em forma de gráfico! - ---- -## 🚀Desafio - -Plote uma variável diferente desse mesmo conjunto de dados. Dica: edite a linha: `X = X[:, np.newaxis, 2]`. Dado o conjunto de dados alvo, o que pode ser descoberto sobre o progresso da diabetes como uma doença? -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Neste tutorial, você trabalhou com regressão linear simples, ao invés de regressão univariada ou múltipla. Leia sobre as diferença desses métodos, ou assista [esse vídeo](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). - -Leia mais sobre o conceito de regressão e pense sobre os tipos de questões que podem ser respondidas usando essa técnica. Faça esse [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para aprender mais. - -## Tarefa - -[Um conjunto de dados diferente](assignment.pt-br.md). diff --git a/2-Regression/1-Tools/translations/README.pt.md b/2-Regression/1-Tools/translations/README.pt.md deleted file mode 100644 index c144ee37..00000000 --- a/2-Regression/1-Tools/translations/README.pt.md +++ /dev/null @@ -1,214 +0,0 @@ -# Começar com Python e Scikit-learn para modelos de regressão - -![Resumo das regressões numa nota de esboço -](../../../sketchnotes/ml-regression.png) - -> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Questionário pré-palestra](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -> ### [Esta lição está disponível em R!](./solution/R/lesson_1-R.ipynb) - -## Introdução - -Nestas quatro lições, você vai descobrir como construir modelos de regressão. Discutiremos para que são em breve. Mas antes de fazer qualquer coisa, certifique-se de ter as ferramentas certas para iniciar o processo! - -Nesta lição, aprenderá a: - -- Configurar o seu computador para tarefas locais de aprendizagem automática. -- Trabalhe com cadernos Jupyter. -- Utilize scikit-learn, incluindo a instalação. -- Explore a regressão linear com um exercício prático. - -## Instalações e configurações - -[![Configurar Python com código de estúdio visual -](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configurar Python com código de estúdio visual -") - -> 🎥 Clique na imagem acima para um vídeo: utilizando Python dentro do Código VS. - -1. **Instalar Python**. Certifique-se de que [Python](https://www.python.org/downloads/) está instalado no seu computador. Você usará Python para muitas tarefas de ciência de dados e machine learning. A maioria dos sistemas informáticos já inclui uma instalação Python. Há úteis [Python Pacotes de codificação](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) disponível também, para facilitar a configuração para alguns utilizadores. - - Alguns usos de Python, no entanto, requerem uma versão do software, enquanto outros requerem uma versão diferente. Por esta razão, é útil trabalhar dentro de um [ambiente virtual](https://docs.python.org/3/library/venv.html). - -2. **Instalar código de estúdio visual**. Certifique-se de que tem o Código do Estúdio Visual instalado no seu computador. Siga estas instruções para -[instalar Código do Estúdio Visual](https://code.visualstudio.com/) para a instalação básica. Você vai usar Python em Código estúdio visual neste curso, então você pode querer relembrá-lo [configurar código de estúdio visual](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para o desenvolvimento de Python. - -> Fique confortável com python trabalhando através desta coleção de [Aprender módulos](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - -3. **Instale Scikit-learn**, seguindo [estas instruções] -(https://scikit-learn.org/stable/install.html). Uma vez que precisa de garantir que utiliza o Python 3, recomenda-se que utilize um ambiente virtual. Note que se estiver a instalar esta biblioteca num Mac M1, existem instruções especiais na página acima ligada. - -1. **Instale o Caderno Jupyter**. Você precisará [instalar o pacote Jupyter](https://pypi.org/project/jupyter/). - -## O seu ambiente de autoria ML -Você vai usar **cadernos** para desenvolver o seu código Python e criar modelos de aprendizagem automática. Este tipo de ficheiro é uma ferramenta comum para cientistas de dados, e podem ser identificados pelo seu sufixo ou extensão `.ipynb`. - -Os cadernos são um ambiente interativo que permite ao desenvolvedor codificar e adicionar notas e escrever documentação em torno do código que é bastante útil para projetos experimentais ou orientados para a investigação. - -## Exercício - trabalhe com um caderno - -Nesta pasta, encontrará o ficheiro _notebook.ipynb_. - -1. Abra _notebook.ipynb_ em Código de Estúdio Visual. - - Um servidor Jupyter começará com o Python 3+ iniciado. Encontrará áreas do caderno que podem ser `executadas`, peças de código. Pode executar um bloco de código, selecionando o ícone que parece um botão de reprodução. - -2. Selecione o ícone `md` e adicione um pouco de marcação, e o seguinte texto **# Bem-vindo ao seu caderno**. - - Em seguida, adicione um pouco de código Python. - -5. Escreva **print ('olá caderno')** no bloco de código. - -6. Selecione a seta para executar o código. - - Deve ver a declaração impressa: - - ```saída -Olá caderno -``` -![Código VS com um caderno aberto](../images/notebook.jpg) - -Pode interligar o seu código com comentários para auto-documentar o caderno. - -✅ Pense por um minuto como o ambiente de trabalho de um web developer é diferente do de um cientista de dados. - -## Em funcionamento com Scikit-learn - -Agora que python está montado no seu ambiente local, e você está confortável com os cadernos jupyter, vamos ficar igualmente confortáveis com Scikit-learn (pronunciá-lo 'sci' como em 'ciência'). Scikit-learn fornece uma [API extensiva](https://scikit-learn.org/stable/modules/classes.html#api-ref) para ajudá-lo a executar tarefas ML. - -De acordo com o seu [site](https://scikit-learn.org/stable/getting_started.html), "O Scikit-learn é uma biblioteca de aprendizagem automática de código aberto que suporta a aprendizagem supervisionada e sem supervisão. Também fornece várias ferramentas para a montagem de modelos, pré-processamento de dados, seleção e avaliação de modelos, e muitas outras utilidades." - -Neste curso, você usará scikit-learn e outras ferramentas para construir modelos de machine learning para executar o que chamamos de tarefas tradicionais de aprendizagem automática. Evitámos deliberadamente redes neurais e aprendizagem profunda, uma vez que estão melhor cobertas no nosso próximo currículo de IA para principiantes. - - - -O scikit-learn torna simples construir modelos e avaliá-los para uso. Está focado principalmente na utilização de dados numéricos e contém vários conjuntos de dados prontos para uso como ferramentas de aprendizagem. Também inclui modelos pré-construídos para os alunos experimentarem. Vamos explorar o processo de carregamento de dados pré-embalados e usar um modelo ml incorporado no estimador com o Scikit-learn com alguns dados básicos. - -## Exercício - o seu primeiro caderno Scikit-learn - -> Este tutorial foi inspirado no exemplo [de regressão linear](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) no site da Scikit-learn. - -No ficheiro _notebook.ipynb_ associado a esta lição, limpe todas as células premindo o ícone 'caixote do lixo'. - -Nesta secção, você vai trabalhar com um pequeno conjunto de dados sobre diabetes que é incorporado em Scikit-learn para fins de aprendizagem. Imagine que queria testar um tratamento para pacientes diabéticos. Os modelos de Machine Learning podem ajudá-lo a determinar quais os pacientes que responderiam melhor ao tratamento, com base em combinações de variáveis. Mesmo um modelo de regressão muito básico, quando visualizado, pode mostrar informações sobre variáveis que o ajudariam a organizar os seus ensaios clínicos teóricos. - -✅ There are many types of regression methods, and which one you pick depends on the answer you're looking for. If you want to predict the probable height for a person of a given age, you'd use linear regression, as you're seeking a **numeric value**. If you're interested in discovering whether a type of cuisine should be considered vegan or not, you're looking for a **category assignment** so you would use logistic regression. You'll learn more about logistic regression later. Think a bit about some questions you can ask of data, and which of these methods would be more appropriate. - -Vamos começar com esta tarefa. - -### Bibliotecas de importação - -Para esta tarefa importaremos algumas bibliotecas: - -- **matplotlib**. É uma ferramenta útil [de grafimento](https://matplotlib.org/) e vamos usá-lo para criar um enredo de linha. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) é uma biblioteca útil para o tratamento de dados numéricos em Python. -- **sklearn**. Este é o [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) biblioteca. - -Importe algumas bibliotecas para ajudar nas suas tarefas. - -1. Adicione as importações digitando o seguinte código: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Acima está a importar `matplottlib`, `numpy` e está a importar `datasets`, `linear_model` e `model_selection` de `sklearn`. É utilizado `model_selection` para dividir dados em conjuntos de treino e teste. - - ## O conjunto de dados da diabetes - O conjunto de dados incorporado [diabetes](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) Inclui 442 amostras de dados em torno da diabetes, com 10 variáveis de características, algumas das quais incluem: - - - idade: idade em anos - - bmi: índice de massa corporal - - bp: pressão arterial média - - s1 tc: T-Cells (um tipo de glóbulos brancos) - - ✅ Este conjunto de dados inclui o conceito de 'sexo' como uma variável de característica importante para a investigação em torno da diabetes. Muitos conjuntos de dados médicos incluem este tipo de classificação binária. Pense um pouco sobre como categorizações como esta podem excluir certas partes de uma população de tratamentos. - -Agora, carregue os dados X e Y. - -> 🎓 Lembre-se, isto é aprendizagem supervisionada, e precisamos de um alvo chamado "y". - -Numa nova célula de código, carregue o conjunto de dados da diabetes chamando `load_diabetes()` A entrada `return_X_y=True` indica que `X` será uma matriz de dados, e `y` será o alvo de regressão. - -1. Adicione alguns comandos de impressão para mostrar a forma da matriz de dados e o seu primeiro elemento: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - O que estás a receber como resposta, é um tuple. O que está a fazer é atribuir os dois primeiros valores da tuple para `X` and `y` respectivamente. Saiba mais [sobre tuples](https://wikipedia.org/wiki/Tuple). - - Pode ver que estes dados têm 442 itens moldados em matrizes de 10 elementos: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Pense um pouco sobre a relação entre os dados e o alvo de regressão. A regressão linear prevê relações entre a característica X e a variável alvo. Pode encontrar o [alvo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para o conjunto de dados da diabetes na documentação? O que é que este conjunto de dados está a demonstrar, tendo em conta esse objetivo? - -2. Em seguida, selecione uma parte deste conjunto de dados para traçar, organizando-o numa nova matriz usando a função `newaxis` da Numpy. Vamos usar a regressão linear para gerar uma linha entre valores nestes dados, de acordo com um padrão que determina. - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ A qualquer momento, imprima os dados para verificar a sua forma. - - 3. Agora que tem dados prontos a serem traçados, pode ver se uma máquina pode ajudar a determinar uma divisão lógica entre os números deste conjunto de dados. Para isso, é necessário dividir os dados (X) e o alvo (y) em conjuntos de teste e treino. O Scikit-learn tem uma forma simples de o fazer; pode dividir os seus dados de teste num dado momento. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. Agora está pronto para treinar o seu modelo! Carregue o modelo linear de regressão e treine-o com os seus conjuntos de treinamento X e y usando `modelo.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `modelo.fit()` é uma função que você verá em muitas bibliotecas ML, como TensorFlow - -5. Em seguida, crie uma previsão utilizando dados de teste, utilizando a função `predict()`. Isto será usado para traçar a linha entre grupos de dados - ```python - y_pred = model.predict(X_test) - ``` - -6. Agora é hora de mostrar os dados num enredo. Matplotlib é uma ferramenta muito útil para esta tarefa. Crie uma dispersão de todos os dados de teste X e y, e use a previsão para traçar uma linha no local mais apropriado, entre os agrupamentos de dados do modelo. - - ```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() - ``` - - ![a scatterplot showing datapoints around diabetes](../images/scatterplot.png) - - ✅ Pense um pouco sobre o que está acontecendo aqui. Uma linha reta está a passar por muitos pequenos pontos de dados, mas o que está a fazer exatamente? Consegue ver como deve ser capaz de usar esta linha para prever onde um novo ponto de dados invisível se deve encaixar em relação ao eixo y do enredo? Tente colocar em palavras o uso prático deste modelo. - -Parabéns, construíste o teu primeiro modelo linear de regressão, criaste uma previsão com ele, e exibiste-o num enredo! ---- -## 🚀Challenge - -Defina uma variável diferente deste conjunto de dados. Dica: edite esta linha:`X = X[:, np.newaxis, 2]`. Tendo em conta o objetivo deste conjunto de dados, o que é que consegue descobrir sobre a progressão da diabetes como uma doença? -## [Questionário pós-palestra](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## Review & Self Study - -Neste tutorial, trabalhou com uma simples regressão linear, em vez de univariado ou regressão linear múltipla. Leia um pouco sobre as diferenças entre estes métodos, ou dê uma olhada[este vídeo](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) - -Leia mais sobre o conceito de regressão e pense sobre que tipo de perguntas podem ser respondidas por esta técnica. Tome este [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para aprofundar a sua compreensão. -## Missão - -[Um conjunto de dados diferente](assignment.md) diff --git a/2-Regression/1-Tools/translations/README.tr.md b/2-Regression/1-Tools/translations/README.tr.md deleted file mode 100644 index d6d50548..00000000 --- a/2-Regression/1-Tools/translations/README.tr.md +++ /dev/null @@ -1,210 +0,0 @@ -# Regresyon modelleri için Python ve Scikit-learn'e giriş - -![Summary of regressions in a sketchnote](../../../sketchnotes/ml-regression.png) - -> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Ders öncesi quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -> ### [R dili ile bu dersin içeriği!](././solution/R/lesson_1-R.ipynb) - -## Giriş - -Bu dört derste, regresyon modellerinin nasıl oluşturulacağını keşfedeceksiniz.Bunların ne için olduğunu birazdan tartışacağız. Ancak herhangi bir şey yapmadan önce, süreci başlatmak için doğru araçlara sahip olduğunuzdan emin olun! - -Bu derste, şunları öğreneceğiz: - -- Bilgisayarınızı yerel makine öğrenimi görevleri için yapılandırma. -- Jupyter notebooks ile çalışmayı. -- Scikit-learn kullanmayı, kurulum da dahil. -- Uygulamalı alıştırma ile doğrusal(lineer) regresyonu keşfedin. - -## Kurulum ve Konfigürasyonlar - -[![Visual Studio Code ile Python kurulumu](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python with Visual Studio Code") - -> 🎥 Video için yukarıdaki resme tıklayınız: Python'u VS Code içinde kullanma. - -1. **Python Kurulumu**. [Python](https://www.python.org/downloads/) kurulumunun bilgisayarınızda yüklü olduğundan emin olun.Python'u birçok veri bilimi ve makine öğrenimi görevi için kullanacaksınız. Çoğu bilgisayar sistemi zaten bir Python kurulumu içerir. Şurada [Python Kodlama Paketleri](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) mevcut, bazı kullanıcılar için kurulumu daha kolay. - - Ancak Python'un bazı kullanımları, yazılımın spesifik bir sürümünü gerektirir, diğerleri ise farklı bir sürüm gerektirir. Bu yüzden, [virtual environment](https://docs.python.org/3/library/venv.html) (sanal ortamlar) ile çalışmak daha kullanışlıdır. - -2. **Visual Studio Code kurulumu**. Visual Studio Code'un bilgisayarınıza kurulduğundan emin olun. [Visual Studio Code kurulumu](https://code.visualstudio.com/) bu adımları takip ederek basitçe bir kurulum yapabilirsiniz. Bu kursta Python'ı Visual Studio Code'un içinde kullanacaksınız, bu yüzden nasıl yapılacağını görmek isteyebilirsiniz. Python ile geliştirme için [Visual Studio Code konfigürasyonu](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott). - - > Bu koleksiyon üzerinde çalışarak Python ile rahatlayın. [Modülleri öğren](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - -3. **Scikit-learn kurulumu**, [bu talimatları](https://scikit-learn.org/stable/install.html) takip ediniz. Python 3 kullandığınızdan emin olmanız gerektiğinden, sanal ortam kullanmanız önerilir. Not, bu kütüphaneyi bir M1 Mac'e kuruyorsanız, yukarıda bağlantısı verilen sayfada özel talimatlar var onları takip ediniz. - -1. **Jupyter Notebook kurulumu**. [Jupyter package'ı](https://pypi.org/project/jupyter/) kurmanız gerekmektedir. - -## Makine öğrenimi geliştirme ortamınız - -Python kodunuzu geliştirmek ve makine öğrenimi modelleri oluşturmak için **notebook** kullanacaksınız. Bu dosya türü, veri bilimcileri için yaygın bir araçtır ve bunlar, ".ipynb" son eki veya uzantısıyla tanımlanabilir. - -Notebook'lar, geliştiricinin hem kod yazmasına hem de notlar eklemesine ve kodun etrafına deneysel veya araştırma odaklı projeler için oldukça yararlı olan dökümantasyonlar yazmasına izin veren etkileşimli bir ortamdır. -### Alıştırma - notebook'larla çalışmak - -Bu klasörde, _notebook.ipynb_ adlı dosyası bulacaksınız. - -1. _notebook.ipynb_ dosyasını Visual Studio Code ile açınız. - - Bir Jupyter serveri Python 3+ ile beraber başlayacaktır. Notebook içinde kod parçalarını çalıştıracak `run` alanını göreceksiniz. Play butonuna benzeyen buton ile kod bloklarını çalıştırabileceksiniz. - -1. `md` ikonunu seçip bir markdown ekleyelim ve **# Welcome to your notebook** yazalım. - - Sonra, biraz Python kodu ekleyelim. - -1. Kod bloğuna **print('hello notebook')** yazalım. -1. Ok işaretini seçip kodu çalıştıralım. - - Bu ifadeyi çıktı olarak göreceksiniz: - - ```output - hello notebook - ``` - -![VS Code ile notebook açma](../images/notebook.jpg) - -Notebook'kunuzu dökümante etmek için kodunuza yorumlar ekleyebilirsiniz. - -✅ Bir web geliştiricisinin çalışma ortamının bir veri bilimcisinden ne kadar farklı olduğunu bir an için düşünün. - -## Scikit-learn çalışır durumda - -Artık Python yerel ortamınızda kurulduğuna göre ve Jupyter notebook ile rahatsanız, hadi Scikit-learn ile de eşit derecede rahat edelim.(`sci` `science`'ın kısaltması yani bilim anlamı taşır). Scikit-learn sağladığı [yaygın API](https://scikit-learn.org/stable/modules/classes.html#api-ref) ile ML görevlerinde sizlere yardım eder. - -[websitelerine](https://scikit-learn.org/stable/getting_started.html) göre, "Scikit-learn, denetimli ve denetimsiz öğrenmeyi destekleyen açık kaynaklı bir makine öğrenimi kütüphanesidir. Ayrıca model uydurma, veri ön işleme, model seçimi ve değerlendirmesi gibi diğer birçok şey için yardımcı olacak çeşitli araçlar sağlar." - -Bu kursta, 'geleneksel makine öğrenimi' olarak adlandırdığımız görevleri gerçekleştirmek üzere ve makine öğrenimi modelleri oluşturmak için Scikit-learn ve diğer araçları kullanacaksınız. Yakında çıkacak olan 'Yeni Başlayanlar için Yapay Zeka' müfredatımızda daha iyi ele alındığı için sinir ağlarından ve derin öğrenme konularından bilinçli olarak kaçındık. - -Scikit-learn, modeller oluşturmayı ve bunları kullanım için modeli değerlendirmeyi kolaylaştırır. Öncelikle sayısal verileri kullanmaya odaklanır ve öğrenme araçları olarak kullanılmak üzere birkaç hazır veri seti içerir. Ayrıca öğrencilerin denemesi için önceden oluşturulmuş modelleri de içerir. Önceden paketlenmiş verileri yükleme ve bazı temel verilerle birlikte Scikit-learn'de ilk ML modelini kullanma sürecini keşfedelim. - -## Alıştırma - ilk Scikit-learn notebook'unuz - -> Bu eğitim Scikit-learn web sitesindeki [lineer regresyon örneğinden](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) ilham alınmıştır. - -_notebook.ipynb_ dosyasıda bu dersle ilgili olan, tüm hücreleri 'çöp kutusu' simgesine basarak temizleyin. - -Bu bölümde, öğrenme amacıyla Scikit-learn'de yerleşik olarak bulunan diyabetle ilgili küçük bir veri seti ile çalışacaksınız. Diyabet hastaları için bir tedaviyi test etmek istediğinizi hayal edin. Makine Öğrenimi modelleri, değişken kombinasyonlarına göre hangi hastaların tedaviye daha iyi yanıt vereceğini belirlemenize yardımcı olabilir. Çok basit bir regresyon modeli bile görselleştirildiğinde, teorik klinik denemelerinizi düzenlemenize yardımcı olacak değişkenler hakkında bilgi verebilir. - -✅ Pek çok regresyon yöntemi vardır ve hangisini seçeceğiniz, aradığınız cevaba bağlıdır. Belirli bir yaştaki bir kişinin olası boyunu tahmin etmek istiyorsanız, **sayısal bir değer** aradığınız için doğrusal regresyon kullanırsınız. Bir yemeğin vegan olarak kabul edilip edilmeyeceğini keşfetmekle ilgileniyorsanız, **kategorik görev** olduğu için lojistik regresyon kullanmalısınız. Daha sonra lojistik regresyon hakkında daha fazla bilgi edineceksiniz. Verilere sorabileceğiniz bazı sorular ve bu yöntemlerden hangisinin daha uygun olacağı hakkında biraz düşünün. - -Hadi bu görev ile başlayalım. - -### Kütüphaneleri Import etmek - -Bu görev için bazı kütüphaneleri import edeceğiz: - -- **matplotlib**. Kullanışlı bir [grafiksel bir araç](https://matplotlib.org/) ve bir çizgi grafiği oluşturmak için kullanacağız. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python'da nümerik verileri ele almak için kullanışlı bir kütüphane. -- **sklearn**. Bu da [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) kütüphanesi. - -Bu görevimizde yardımcı olacak bazı kütüphaneleri import edelim. - -1. Aşağıdaki kodu yazarak import edelim: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - `matplotlib`, `numpy` import ettik ve `datasets`, `linear_model` , `model_selection` 'ı `sklearn` den import ettik. `model_selection` veri setimizi eğitim ve test kümeleri şeklinde bölmemize yardımcı olacak. - -### Diyabet veri seti - -[Diyabet veri seti](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 442 tane diyabet ile ilgili örnek içeririr, 10 öznitelik değişkeni,bazıları şunları içerir: - -- age: yaşı -- bmi: vücut kitle indeksi -- bp: ortalama kan basıncı -- s1 tc: T-Cells (bir tür beyaz kan hücresi) - -✅ Bu veri seti, diyabet hakkında araştırma yapmak için önemli bir özellik değişkeni olarak 'cinsiyet' kavramını içerir. Birçok tıbbi veri kümesi bu tür ikili sınıflandırmayı içerir. Bunun gibi sınıflandırmaların bir popülasyonun belirli bölümlerini tedavilerden nasıl dışlayabileceğini biraz düşünün. - -Şimdi, X ve y verilerini yükleyelim. - -> 🎓 Unutmayın, bu denetimli öğrenmedir ve bir 'y' hedefine ihtiyaç vardır. - -Yeni bir hücrede, load_diabetes()'i çağırarak diyabet veri setini yükleyin. 'return_X_y=True' girişi, X'in bir veri matrisi olacağını ve y'nin regresyon hedefi olacağını bildirir. - -1. Verinin, matriksinin şekline ve ilk elementine göz atmak için print kullanalım. - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Yanıt olarak geri aldığınız şey, bir tuple. Yaptığınız şey, tuple'ın ilk iki değerini sırasıyla 'X' ve 'y'ye atamak. [Tuple hakkında daha fazla bilgi](https://wikipedia.org/wiki/Tuple). - - Bu verinin 10 elemanlı dizilerde(array) şekillendirilmiş 442 öğeye sahip olduğunu görebilirsiniz: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Veriler ve regresyon hedefi arasındaki ilişki hakkında biraz düşünün. Doğrusal regresyon, özellik X ile hedef değişken y arasındaki ilişkileri tahmin eder. Diyabet veri setindeki dökümantasyonda [hedefi](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) bulabildiniz mi? Bu hedef göz önüne alındığında, bu veri kümesi neyi gösteriyor? - -2. Ardından, numpy'nin 'newaxis' fonksiyonunu kullanarak yeni bir array düzenleyerek bu veri kümesinin bir bölümünü seçin. Belirlediği bir kalıba göre bu verilerdeki değerler arasında bir çizgi oluşturmak için doğrusal regresyon kullanacağız. - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ İstediğiniz zaman, verinin şeklini kontrol etmek için yazdırın. - -3. Artık çizilmeye hazır verileriniz olduğuna göre, bir makinenin bu veri kümesindeki sayılar arasında mantıksal bir ayrım belirlemeye yardımcı olup olamayacağını görebilirsiniz. Bunun için, hem verileri (X) hem de hedefi (y), test ve eğitim kümelerine ayırmanız gerekir. Scikit-learn'in bunu yapmanın basit bir yolu var; test verilerinizi belirli bir noktada bölebilirsiniz. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. Artık modelinizi eğitmeye hazırsınız! Doğrusal regresyon modelini yükleyin ve onu "model.fit()" kullanarak X ve y eğitim kümelerinde eğitin: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` TensorFlow gibi birçok ML kütüphanesinde görebileceğiniz bir fonksiyondur. - -5. Ardından, "predict()" fonksiyonunu kullanarak test verilerini üzerinde bir tahmin oluşturun. Bu, veri grupları arasındaki çizgiyi çizmek için kullanılacaktır. - - ```python - y_pred = model.predict(X_test) - ``` - -6. Şimdi verileri bir plotta gösterme zamanı. Matplotlib bu görev için çok kullanışlı bir araçtır. Tüm X ve y test verilerinin bir dağılım grafiğini(scatterplot) oluşturun ve modelin veri grupları arasında en uygun yere bir çizgi çizmek için tahminleri kullanın. - - ```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() - ``` - - ![a scatterplot showing datapoints around diabetes](././images/scatterplot.png) - - ✅ Burada neler olduğunu biraz düşünün. Birçok küçük veri noktalarından düz bir çizgi geçiyor ama tam olarak ne yapıyor? Yeni, görünmeyen bir veri noktasının grafiğin y eksenine göre nerede olması gerektiğini tahmin etmek için bu çizgiyi nasıl kullanabilmeniz gerektiğini görebiliyor musunuz? Bu modelin pratik kullanımını kelimelere dökmeye çalışın. - -Tebrikler, ilk doğrusal regresyon modelinizi oluşturdunuz, onunla bir tahmin oluşturdunuz ve bunu bir grafikte görüntülediniz! - ---- -## 🚀Challenge - -Bu veri kümesinden farklı bir değişken çizin. İpucu: bu satırı düzenleyin: `X = X[:, np.newaxis, 2]`. Bu veri setinin hedefi göz önüne alındığında, diyabetin bir hastalık olarak ilerlemesi hakkında neler keşfedebilirsiniz? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## İnceleme ve Bireysel Çalışma - -Bu eğitimde, tek değişkenli veya çoklu doğrusal regresyon yerine basit doğrusal regresyonla çalıştınızBu yöntemler arasındaki farklar hakkında biraz bilgi edinin veya şuna bir göz atın: [bu videoya](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) - -Regresyon kavramı hakkında daha fazla bilgi edinin ve bu teknikle ne tür soruların yanıtlanabileceğini düşünün. Anlayışınızı derinleştirmek için bu [eğitime](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) göz atabilirsiniz. - -## Assignment - -[A different dataset](assignment.md) diff --git a/2-Regression/1-Tools/translations/README.zh-cn.md b/2-Regression/1-Tools/translations/README.zh-cn.md deleted file mode 100644 index d7e65684..00000000 --- a/2-Regression/1-Tools/translations/README.zh-cn.md +++ /dev/null @@ -1,207 +0,0 @@ -# 开始使用 Python 和 Scikit 学习回归模型 - -![回归](../../../sketchnotes/ml-regression.png) - -> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [课前测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) -## 介绍 - -在这四节课中,你将了解如何构建回归模型。我们将很快讨论这些是什么。但在你做任何事情之前,请确保你有合适的工具来开始这个过程! - -在本课中,你将学习如何: - -- 为本地机器学习任务配置你的计算机。 -- 使用 Jupyter notebooks。 -- 使用 Scikit-learn,包括安装。 -- 通过动手练习探索线性回归。 - -## 安装和配置 - -[![在 Visual Studio Code 中使用 Python](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python with Visual Studio Code") - -> 🎥 单击上图观看视频:在 VS Code 中使用 Python。 - -1. **安装 Python**。确保你的计算机上安装了 [Python](https://www.python.org/downloads/)。你将在许多数据科学和机器学习任务中使用 Python。大多数计算机系统已经安装了 Python。也有一些有用的 [Python 编码包](https://code.visualstudio.com/learn/educations/installers?WT.mc_id=academic-77952-leestott) 可用于简化某些用户的设置。 - - 然而,Python 的某些用法需要一个版本的软件,而其他用法则需要另一个不同的版本。 因此,在 [虚拟环境](https://docs.python.org/3/library/venv.html) 中工作很有用。 - -2. **安装 Visual Studio Code**。确保你的计算机上安装了 Visual Studio Code。按照这些说明 [安装 Visual Studio Code](https://code.visualstudio.com/) 进行基本安装。在本课程中,你将在 Visual Studio Code 中使用 Python,因此你可能想复习如何 [配置 Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) 用于 Python 开发。 - - > 通过学习这一系列的 [学习模块](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) 熟悉 Python - -3. **按照 [这些说明](https://scikit-learn.org/stable/install.html) 安装 Scikit learn**。由于你需要确保使用 Python3,因此建议你使用虚拟环境。注意,如果你是在 M1 Mac 上安装这个库,在上面链接的页面上有特别的说明。 - -4. **安装 Jupyter Notebook**。你需要 [安装 Jupyter 包](https://pypi.org/project/jupyter/)。 - -## 你的 ML 工作环境 - -你将使用 **notebooks** 开发 Python 代码并创建机器学习模型。这种类型的文件是数据科学家的常用工具,可以通过后缀或扩展名 `.ipynb` 来识别它们。 - -Notebooks 是一个交互式环境,允许开发人员编写代码并添加注释并围绕代码编写文档,这对于实验或面向研究的项目非常有帮助。 - -### 练习 - 使用 notebook - -1. 在 Visual Studio Code 中打开 _notebook.ipynb_。 - - Jupyter 服务器将以 python3+启动。你会发现 notebook 可以“运行”的区域、代码块。你可以通过选择看起来像播放按钮的图标来运行代码块。 - -2. 选择 `md` 图标并添加一点 markdown,输入文字 **# Welcome to your notebook**。 - - 接下来,添加一些 Python 代码。 - -1. 在代码块中输入 **print("hello notebook")**。 - -2. 选择箭头运行代码。 - - 你应该看到打印的语句: - - ```output - hello notebook - ``` - -![打开 notebook 的 VS Code](../images/notebook.jpg) - -你可以为你的代码添加注释,以便 notebook 可以自描述。 - -✅ 想一想 web 开发人员的工作环境与数据科学家的工作环境有多大的不同。 - -## 启动并运行 Scikit-learn - -现在 Python 已在你的本地环境中设置好,并且你对 Jupyter notebook 感到满意,让我们同样熟悉 Scikit-learn(在“science”中发音为“sci”)。 Scikit-learn 提供了 [大量的 API](https://scikit-learn.org/stable/modules/classes.html#api-ref) 来帮助你执行 ML 任务。 - -根据他们的 [网站](https://scikit-learn.org/stable/getting_started.html),“Scikit-learn 是一个开源机器学习库,支持有监督和无监督学习。它还提供了各种模型拟合工具、数据预处理、模型选择和评估以及许多其他实用程序。” - -在本课程中,你将使用 Scikit-learn 和其他工具来构建机器学习模型,以执行我们所谓的“传统机器学习”任务。我们特意避免了神经网络和深度学习,因为它们在我们即将推出的“面向初学者的人工智能”课程中得到了更好的介绍。 - -Scikit-learn 使构建模型和评估它们的使用变得简单。它主要侧重于使用数字数据,并包含几个现成的数据集用作学习工具。它还包括供学生尝试的预建模型。让我们探索加载预先打包的数据和使用内置的 estimator first ML 模型和 Scikit-learn 以及一些基本数据的过程。 - -## 练习 - 你的第一个 Scikit-learn notebook - -> 本教程的灵感来自 Scikit-learn 网站上的 [线性回归示例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)。 - -在与本课程相关的 _notebook.ipynb_ 文件中,通过点击“垃圾桶”图标清除所有单元格。 - -在本节中,你将使用一个关于糖尿病的小数据集,该数据集内置于 Scikit-learn 中以用于学习目的。想象一下,你想为糖尿病患者测试一种治疗方法。机器学习模型可能会帮助你根据变量组合确定哪些患者对治疗反应更好。即使是非常基本的回归模型,在可视化时,也可能会显示有助于组织理论临床试验的变量信息。 - -✅ 回归方法有很多种,你选择哪一种取决于你正在寻找的答案。如果你想预测给定年龄的人的可能身高,你可以使用线性回归,因为你正在寻找**数值**。如果你有兴趣了解某种菜肴是否应被视为素食主义者,那么你正在寻找**类别分配**,以便使用逻辑回归。稍后你将了解有关逻辑回归的更多信息。想一想你可以对数据提出的一些问题,以及这些方法中的哪一个更合适。 - -让我们开始这项任务。 - -### 导入库 - -对于此任务,我们将导入一些库: - -- **matplotlib**。这是一个有用的 [绘图工具](https://matplotlib.org/),我们将使用它来创建线图。 -- **numpy**。 [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是一个有用的库,用于在 Python 中处理数字数据。 -- **sklearn**。这是 Scikit-learn 库。 - -导入一些库来帮助你完成任务。 - -1. 通过输入以下代码添加导入: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - 在上面的代码中,你正在导入 `matplottlib`、`numpy`,你正在从 `sklearn` 导入 `datasets`、`linear_model` 和 `model_selection`。 `model_selection` 用于将数据拆分为训练集和测试集。 - -### 糖尿病数据集 - -内置的 [糖尿病数据集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 包含 442 个围绕糖尿病的数据样本,具有 10 个特征变量,其中包括: - -- age:岁数 -- bmi:体重指数 -- bp:平均血压 -- s1 tc:T 细胞(一种白细胞) - -✅ 该数据集包括“性别”的概念,作为对糖尿病研究很重要的特征变量。许多医学数据集包括这种类型的二元分类。想一想诸如此类的分类如何将人群的某些部分排除在治疗之外。 - -现在,加载 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. 接下来,通过使用 numpy 的 `newaxis` 函数将数据集的一部分排列到一个新数组中。我们将使用线性回归根据它确定的模式在此数据中的值之间生成一条线。 - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ 随时打印数据以检查其形状。 - -3. 现在你已准备好绘制数据,你可以看到计算机是否可以帮助确定此数据集中数字之间的逻辑分割。为此你需要将数据 (X) 和目标 (y) 拆分为测试集和训练集。Scikit-learn 有一个简单的方法来做到这一点;你可以在给定点拆分测试数据。 - - ```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)中看到的函数 - -5. 然后,使用函数 `predict()`,使用测试数据创建预测。这将用于绘制数据组之间的线 - - ```python - y_pred = model.predict(X_test) - ``` - -6. 现在是时候在图中显示数据了。Matplotlib 是完成此任务的非常有用的工具。创建所有 X 和 y 测试数据的散点图,并使用预测在模型的数据分组之间最合适的位置画一条线。 - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, y_pred, color='blue', linewidth=3) - plt.show() - ``` - - ![显示糖尿病周围数据点的散点图](../images/scatterplot.png) - - ✅ 想一想这里发生了什么。一条直线穿过许多小数据点,但它到底在做什么?你能看到你应该如何使用这条线来预测一个新的、未见过的数据点对应的 y 轴值吗?尝试用语言描述该模型的实际用途。 - -恭喜,你构建了第一个线性回归模型,使用它创建了预测,并将其显示在绘图中! - ---- - -## 🚀挑战 - -从这个数据集中绘制一个不同的变量。提示:编辑这一行:`X = X[:, np.newaxis, 2]`。鉴于此数据集的目标,你能够发现糖尿病作为一种疾病的进展情况吗? - -## [课后测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## 复习与自学 - -在本教程中,你使用了简单线性回归,而不是单变量或多元线性回归。阅读一些关于这些方法之间差异的信息,或查看 [此视频](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.zh-cn.md) diff --git a/2-Regression/1-Tools/translations/README.zh-tw.md b/2-Regression/1-Tools/translations/README.zh-tw.md deleted file mode 100644 index 8d79c727..00000000 --- a/2-Regression/1-Tools/translations/README.zh-tw.md +++ /dev/null @@ -1,208 +0,0 @@ -# 開始使用 Python 和 Scikit 學習回歸模型 - -![回歸](../../../sketchnotes/ml-regression.png) - -> 作者 [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [課前測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -## 介紹 - -在這四節課中,你將了解如何構建回歸模型。我們將很快討論這些是什麽。但在你做任何事情之前,請確保你有合適的工具來開始這個過程! - -在本課中,你將學習如何: - -- 為本地機器學習任務配置你的計算機。 -- 使用 Jupyter notebooks。 -- 使用 Scikit-learn,包括安裝。 -- 通過動手練習探索線性回歸。 - -## 安裝和配置 - -[![在 Visual Studio Code 中使用 Python](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Setup Python with Visual Studio Code") - -> 🎥 單擊上圖觀看視頻:在 VS Code 中使用 Python。 - -1. **安裝 Python**。確保你的計算機上安裝了 [Python](https://www.python.org/downloads/)。你將在許多數據科學和機器學習任務中使用 Python。大多數計算機系統已經安裝了 Python。也有一些有用的 [Python 編碼包](https://code.visualstudio.com/learn/educations/installers?WT.mc_id=academic-77952-leestott) 可用於簡化某些用戶的設置。 - - 然而,Python 的某些用法需要一個版本的軟件,而其他用法則需要另一個不同的版本。 因此,在 [虛擬環境](https://docs.python.org/3/library/venv.html) 中工作很有用。 - -2. **安裝 Visual Studio Code**。確保你的計算機上安裝了 Visual Studio Code。按照這些說明 [安裝 Visual Studio Code](https://code.visualstudio.com/) 進行基本安裝。在本課程中,你將在 Visual Studio Code 中使用 Python,因此你可能想復習如何 [配置 Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) 用於 Python 開發。 - - > 通過學習這一系列的 [學習模塊](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) 熟悉 Python - -3. **按照 [這些說明](https://scikit-learn.org/stable/install.html) 安裝 Scikit learn**。由於你需要確保使用 Python3,因此建議你使用虛擬環境。註意,如果你是在 M1 Mac 上安裝這個庫,在上面鏈接的頁面上有特別的說明。 - -4. **安裝 Jupyter Notebook**。你需要 [安裝 Jupyter 包](https://pypi.org/project/jupyter/)。 - -## 你的 ML 工作環境 - -你將使用 **notebooks** 開發 Python 代碼並創建機器學習模型。這種類型的文件是數據科學家的常用工具,可以通過後綴或擴展名 `.ipynb` 來識別它們。 - -Notebooks 是一個交互式環境,允許開發人員編寫代碼並添加註釋並圍繞代碼編寫文檔,這對於實驗或面向研究的項目非常有幫助。 - -### 練習 - 使用 notebook - -1. 在 Visual Studio Code 中打開 _notebook.ipynb_。 - - Jupyter 服務器將以 python3+啟動。你會發現 notebook 可以「運行」的區域、代碼塊。你可以通過選擇看起來像播放按鈕的圖標來運行代碼塊。 - -2. 選擇 `md` 圖標並添加一點 markdown,輸入文字 **# Welcome to your notebook**。 - - 接下來,添加一些 Python 代碼。 - -1. 在代碼塊中輸入 **print("hello notebook")**。 - -2. 選擇箭頭運行代碼。 - - 你應該看到打印的語句: - - ```output - hello notebook - ``` - -![打開 notebook 的 VS Code](../images/notebook.jpg) - -你可以為你的代碼添加註釋,以便 notebook 可以自描述。 - -✅ 想一想 web 開發人員的工作環境與數據科學家的工作環境有多大的不同。 - -## 啟動並運行 Scikit-learn - -現在 Python 已在你的本地環境中設置好,並且你對 Jupyter notebook 感到滿意,讓我們同樣熟悉 Scikit-learn(在「science」中發音為「sci」)。 Scikit-learn 提供了 [大量的 API](https://scikit-learn.org/stable/modules/classes.html#api-ref) 來幫助你執行 ML 任務。 - -根據他們的 [網站](https://scikit-learn.org/stable/getting_started.html),「Scikit-learn 是一個開源機器學習庫,支持有監督和無監督學習。它還提供了各種模型擬合工具、數據預處理、模型選擇和評估以及許多其他實用程序。」 - -在本課程中,你將使用 Scikit-learn 和其他工具來構建機器學習模型,以執行我們所謂的「傳統機器學習」任務。我們特意避免了神經網絡和深度學習,因為它們在我們即將推出的「面向初學者的人工智能」課程中得到了更好的介紹。 - -Scikit-learn 使構建模型和評估它們的使用變得簡單。它主要側重於使用數字數據,並包含幾個現成的數據集用作學習工具。它還包括供學生嘗試的預建模型。讓我們探索加載預先打包的數據和使用內置的 estimator first ML 模型和 Scikit-learn 以及一些基本數據的過程。 - -## 練習 - 你的第一個 Scikit-learn notebook - -> 本教程的靈感來自 Scikit-learn 網站上的 [線性回歸示例](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py)。 - -在與本課程相關的 _notebook.ipynb_ 文件中,通過點擊「垃圾桶」圖標清除所有單元格。 - -在本節中,你將使用一個關於糖尿病的小數據集,該數據集內置於 Scikit-learn 中以用於學習目的。想象一下,你想為糖尿病患者測試一種治療方法。機器學習模型可能會幫助你根據變量組合確定哪些患者對治療反應更好。即使是非常基本的回歸模型,在可視化時,也可能會顯示有助於組織理論臨床試驗的變量信息。 - -✅ 回歸方法有很多種,你選擇哪一種取決於你正在尋找的答案。如果你想預測給定年齡的人的可能身高,你可以使用線性回歸,因為你正在尋找**數值**。如果你有興趣了解某種菜肴是否應被視為素食主義者,那麽你正在尋找**類別分配**,以便使用邏輯回歸。稍後你將了解有關邏輯回歸的更多信息。想一想你可以對數據提出的一些問題,以及這些方法中的哪一個更合適。 - -讓我們開始這項任務。 - -### 導入庫 - -對於此任務,我們將導入一些庫: - -- **matplotlib**。這是一個有用的 [繪圖工具](https://matplotlib.org/),我們將使用它來創建線圖。 -- **numpy**。 [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) 是一個有用的庫,用於在 Python 中處理數字數據。 -- **sklearn**。這是 Scikit-learn 庫。 - -導入一些庫來幫助你完成任務。 - -1. 通過輸入以下代碼添加導入: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - 在上面的代碼中,你正在導入 `matplottlib`、`numpy`,你正在從 `sklearn` 導入 `datasets`、`linear_model` 和 `model_selection`。 `model_selection` 用於將數據拆分為訓練集和測試集。 - -### 糖尿病數據集 - -內置的 [糖尿病數據集](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) 包含 442 個圍繞糖尿病的數據樣本,具有 10 個特征變量,其中包括: - -- age:歲數 -- bmi:體重指數 -- bp:平均血壓 -- s1 tc:T 細胞(一種白細胞) - -✅ 該數據集包括「性別」的概念,作為對糖尿病研究很重要的特征變量。許多醫學數據集包括這種類型的二元分類。想一想諸如此類的分類如何將人群的某些部分排除在治療之外。 - -現在,加載 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. 接下來,通過使用 numpy 的 `newaxis` 函數將數據集的一部分排列到一個新數組中。我們將使用線性回歸根據它確定的模式在此數據中的值之間生成一條線。 - - ```python - X = X[:, np.newaxis, 2] - ``` - - ✅ 隨時打印數據以檢查其形狀。 - -3. 現在你已準備好繪製數據,你可以看到計算機是否可以幫助確定此數據集中數字之間的邏輯分割。為此你需要將數據 (X) 和目標 (y) 拆分為測試集和訓練集。Scikit-learn 有一個簡單的方法來做到這一點;你可以在給定點拆分測試數據。 - - ```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)中看到的函數 - -5. 然後,使用函數 `predict()`,使用測試數據創建預測。這將用於繪製數據組之間的線 - - ```python - y_pred = model.predict(X_test) - ``` - -6. 現在是時候在圖中顯示數據了。Matplotlib 是完成此任務的非常有用的工具。創建所有 X 和 y 測試數據的散點圖,並使用預測在模型的數據分組之間最合適的位置畫一條線。 - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, y_pred, color='blue', linewidth=3) - plt.show() - ``` - - ![顯示糖尿病周圍數據點的散點圖](../images/scatterplot.png) - - ✅ 想一想這裏發生了什麽。一條直線穿過許多小數據點,但它到底在做什麽?你能看到你應該如何使用這條線來預測一個新的、未見過的數據點對應的 y 軸值嗎?嘗試用語言描述該模型的實際用途。 - -恭喜,你構建了第一個線性回歸模型,使用它創建了預測,並將其顯示在繪圖中! - ---- - -## 🚀挑戰 - -從這個數據集中繪製一個不同的變量。提示:編輯這一行:`X = X[:, np.newaxis, 2]`。鑒於此數據集的目標,你能夠發現糖尿病作為一種疾病的進展情況嗎? - -## [課後測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## 復習與自學 - -在本教程中,你使用了簡單線性回歸,而不是單變量或多元線性回歸。閱讀一些關於這些方法之間差異的信息,或查看 [此視頻](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.zh-tw.md) diff --git a/2-Regression/1-Tools/translations/assignment.es.md b/2-Regression/1-Tools/translations/assignment.es.md deleted file mode 100644 index e5193597..00000000 --- a/2-Regression/1-Tools/translations/assignment.es.md +++ /dev/null @@ -1,14 +0,0 @@ -# Regresión con Scikit-learn - -## Instrucciones - - -Eche un vistazo al [Linnerud _dataset_](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) en Scikit-learn. Este _dataset_ tiene varios [objetivos](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Consiste en tres ejercicios (datos) y tres variables fisiológicas (objetivos) recopiladas de veinte hombres de mediana edad en un gimnasio'. - -En sus palabras, describa como crear un modelo de regresión que trazaría la relación entre la cintura y la cantidad de abdominales que se realizan. Haga lo mismo con otros puntos de datos en el _dataset_. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| Envíe un párrafo descriptivo | Se envía un párrafo bien escrito | Se envían algunas frases | No se proporciona ninguna descripción | diff --git a/2-Regression/1-Tools/translations/assignment.it.md b/2-Regression/1-Tools/translations/assignment.it.md deleted file mode 100644 index 51fa1663..00000000 --- a/2-Regression/1-Tools/translations/assignment.it.md +++ /dev/null @@ -1,13 +0,0 @@ -# Regressione con Scikit-learn - -## Istruzioni - -Dare un'occhiata all'[insieme di dati Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) in Scikit-learn. Questo insieme di dati ha [obiettivi](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset) multipli: "Consiste di tre variabili di esercizio (dati) e tre variabili fisiologiche (obiettivo) raccolte da venti uomini di mezza età in un fitness club". - -Con parole proprie, descrivere come creare un modello di Regressione che tracci la relazione tra il punto vita e il numero di addominali realizzati. Fare lo stesso per gli altri punti dati in questo insieme di dati. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| Inviare un paragrafo descrittivo | Viene presentato un paragrafo ben scritto | Vengono inviate alcune frasi | Non viene fornita alcuna descrizione | diff --git a/2-Regression/1-Tools/translations/assignment.ja.md b/2-Regression/1-Tools/translations/assignment.ja.md deleted file mode 100644 index 6f7d9ef0..00000000 --- a/2-Regression/1-Tools/translations/assignment.ja.md +++ /dev/null @@ -1,13 +0,0 @@ -# Scikit-learnを用いた回帰 - -## 課題の指示 - -Scikit-learnで[Linnerud dataset](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) を持っています。フィットネスクラブで20人の中年男性から収集した3つの運動変数(data)と3つの生理変数(target)で構成されています。 - -あなた自身の言葉で、ウエストラインと腹筋の回数との関係をプロットする回帰モデルの作成方法を説明してください。このデータセットの他のデータポイントについても同様に説明してみてください。 - -## ルーブリック - -| 指標 | 模範的 | 適切 | 要改善 | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| 説明文を提出してください。 | よく書けた文章が提出されている。 | いくつかの文章が提出されている。 | 文章が提出されていません。 | diff --git a/2-Regression/1-Tools/translations/assignment.ko.md b/2-Regression/1-Tools/translations/assignment.ko.md deleted file mode 100644 index 7db04f54..00000000 --- a/2-Regression/1-Tools/translations/assignment.ko.md +++ /dev/null @@ -1,13 +0,0 @@ -# Scikit-learn과 함께 회귀에 대해 알아봅시다 - -## 설명 - -Scikit-learn에서 [Linnerud 데이터세트](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud)를 살펴보시기 바랍니다. 이 데이터세트에는 다수의 목표 변수가 있습니다: '한 헬스장에서 스무 명의 중년 남성으로부터 수집한 운동(데이터)과 생리적(목표) 변수가 각각 세 개씩 있습니다'. - -허리둘레와 윗몸 일으키기 횟수의 관계성을 그리는 회귀 모델을 어떻게 만들지 직접 서술해 주시기 바랍니다. 마찬가지로, 이 데이터세트의 다른 종류의 데이터(변수)들도 어떻게 회귀 모델을 만들지 서술해 주세요. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| --------------------------------- | --------------------------- | ----------------------------- | ---------------- | -| 문단으로 자세히 서술해 제출하였는가? | 문단으로 자세히 서술하여 제출 | 몇 문장으로 서술한 내용을 제출 | 서술한 내용이 없음 | diff --git a/2-Regression/1-Tools/translations/assignment.pt-br.md b/2-Regression/1-Tools/translations/assignment.pt-br.md deleted file mode 100644 index d8081621..00000000 --- a/2-Regression/1-Tools/translations/assignment.pt-br.md +++ /dev/null @@ -1,13 +0,0 @@ -# Regressão com Scikit-learn - -## Instruções - -Dê uma olhada no [conjunto de dados Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud). Esse conjunto de dados possui múltiplos [alvos](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Consiste em três variáveis de exercício (dados) e três variáveis fisiológicas (alvos) coletadas de vinte homens de meia idade de uma academia '. - -Em suas palavras, descreva como criar um modelo de regressão que mostra a relação entre a cintura e o número de abdominiais feitas. Faça o mesmo para os outros pontos de dados nesse conjunto de dados. - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| ------------------------------ | ----------------------------------- | -------------------------------- | ---------------------------- | -| Enviar um parágrafo descritivo | Parágrafo bem escrito | Algumas sentenças foram enviadas | Não possui nenhuma descrição | diff --git a/2-Regression/1-Tools/translations/assignment.pt.md b/2-Regression/1-Tools/translations/assignment.pt.md deleted file mode 100644 index 7be53773..00000000 --- a/2-Regression/1-Tools/translations/assignment.pt.md +++ /dev/null @@ -1,13 +0,0 @@ -# Regressão com Scikit-learn - -## Instruções - -Dê uma olhada no conjunto de [dados Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) em Scikit-learn. Este conjunto de dados tem vários [alvos](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Consiste em três variáveis de exercício (dados) e três variáveis fisiológicas (alvo) recolhidas de vinte homens de meia-idade num clube de fitness' - -Nas suas próprias palavras, descreva como criar um modelo de Regressão que traçaria a relação entre a cintura e quantos situps são realizados. Faça o mesmo para os outros pontos de dados neste conjunto de dados. - -## Rubrica - -| Critérios | exemplares | Adequado | Necessidades de Melhoria | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| Enviar um parágrafo descritivo | Parágrafo bem escrito é submetido | Algumas frases são submetidas | Nenhuma descrição é fornecida | \ No newline at end of file diff --git a/2-Regression/1-Tools/translations/assignment.tr.md b/2-Regression/1-Tools/translations/assignment.tr.md deleted file mode 100644 index 076593fe..00000000 --- a/2-Regression/1-Tools/translations/assignment.tr.md +++ /dev/null @@ -1,13 +0,0 @@ -# Scikit-learn ile Regresyon - -## Talimatlar - -[Linnerud veri kümesine](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) Scikit-learn ile bir gözatın. Bu veri kümesinin birden fazla [hedefi](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset) vardır: 'Üç egzersiz (veri) ve yirmi veri kümesinden toplanan üç fizyolojik (hedef) değişkenden oluşur. Bir fitness kulübünde ki orta yaşlı erkekler'. - -Kendi kelimelerinizle, bel ile çekilen mekik sayısı arasındaki ilişkiyi çizecek bir Regresyon modelinin nasıl oluşturulacağını açıklayın. Bu veri kümesindeki diğer veri noktaları için de aynısını yapın. - -## Değerlendirme - -| Kriter | Örnek | Yeterli | İyileştirme Gerekli | -| ----------------------------------- | ------------------------------------- | ----------------------------- | -------------------------- | -| Açıklayıcı bir paragraf gönderildi. | İyi yazılmış bir paragraf gönderildi. | Birkaç cümle gönderildi. | Açıklama sağlanmadı. | diff --git a/2-Regression/1-Tools/translations/assignment.zh-cn.md b/2-Regression/1-Tools/translations/assignment.zh-cn.md deleted file mode 100644 index 4efe3e11..00000000 --- a/2-Regression/1-Tools/translations/assignment.zh-cn.md +++ /dev/null @@ -1,14 +0,0 @@ -# 用 Scikit-learn 实现一次回归算法 - -## 说明 - -先看看 Scikit-learn 中的 [Linnerud 数据集](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) -这个数据集中有多个[目标变量(target)](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset),其中包含了三种运动(训练数据)和三个生理指标(目标变量)组成,这些数据都是从一个健身俱乐部中的 20 名中年男子收集到的。 - -之后用自己的方式,创建一个可以描述腰围和完成仰卧起坐个数关系的回归模型。用同样的方式对这个数据集中的其它数据也建立一下模型探究一下其中的关系。 - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| 需要提交一段能描述数据集中关系的文字 | 很好的描述了数据集中的关系 | 只能描述少部分的关系 | 啥都没有提交 | diff --git a/2-Regression/1-Tools/translations/assignment.zh-tw.md b/2-Regression/1-Tools/translations/assignment.zh-tw.md deleted file mode 100644 index bd1d384c..00000000 --- a/2-Regression/1-Tools/translations/assignment.zh-tw.md +++ /dev/null @@ -1,14 +0,0 @@ -# 用 Scikit-learn 實現一次回歸算法 - -## 說明 - -先看看 Scikit-learn 中的 [Linnerud 數據集](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) -這個數據集中有多個[目標變量(target)](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset),其中包含了三種運動(訓練數據)和三個生理指標(目標變量)組成,這些數據都是從一個健身俱樂部中的 20 名中年男子收集到的。 - -之後用自己的方式,創建一個可以描述腰圍和完成仰臥起坐個數關系的回歸模型。用同樣的方式對這個數據集中的其它數據也建立一下模型探究一下其中的關系。 - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| 需要提交一段能描述數據集中關系的文字 | 很好的描述了數據集中的關系 | 只能描述少部分的關系 | 啥都沒有提交 | diff --git a/2-Regression/2-Data/translations/README.es.md b/2-Regression/2-Data/translations/README.es.md deleted file mode 100644 index 9483f816..00000000 --- a/2-Regression/2-Data/translations/README.es.md +++ /dev/null @@ -1,207 +0,0 @@ -# Construye un modelo de regresión usando Scikit-learn: prepara y visualiza los datos - -![Infografía de visualización de datos](../images/data-visualization.png) - -Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11?loc=es) - -> ### [Esta lección se encuentra disponible en R!](../solution/R/lesson_2-R.ipynb) - -## Introducción - -Ahora que has configurado las herramientas necesarias para iniciar el trabajo con la construcción de modelo de aprendizaje automático con Scikit-learn, estás listo para comenzar a realizar preguntas a tus datos. Mientras trabajas con los datos y aplicas soluciones de ML, es muy importante entender cómo realizar las preguntas correctas para desbloquear el potencial de tu conunto de datos. - -En esta lección, aprenderás: - -- Cómo preparar tus datos para la construcción de modelos. -- Cómo usar Matplotlib para visualización de datos. - -[![Preparación y visualización de datos](https://img.youtube.com/vi/11AnOn_OAcE/0.jpg)](https://youtu.be/11AnOn_OAcE "Video de preparación y visualizción de datos - ¡Clic para ver!") -> 🎥 Da clic en la imagen superior para ver un video de los aspectos clave de esta lección - - -## Realizando la pregunta correcta a tus datos - -La pregunta para la cual necesitas respuesta determinará qué tipo de algoritmos de ML requerirás. Y la calidad de la respuesta que obtendas será altamente dependiente de la naturaleza de tus datos. - -Echa un vistazo a los [datos](../../data/US-pumpkins.csv) provistos para esta lección. Puedes abrir este archivo .csv en VS Code. Un vistazo rápido muestra inmediatamente que existen campos en blanco y una mezcla de datos numéricos y de cadena. También hay una columna extraña llamada 'Package' donde los datos están mezclados entre los valores 'sacks', 'bins' y otros. Los datos de hecho, son un pequeño desastre. - -De hecho, no es muy común obtener un conjunto de datos que esté totalmente listo para su uso en un modelo de ML. En esta lección, aprenderás cómo preparar un conjunto de datos en crudo usando librerías estándares de Python. También aprenderás varias técnicas para visualizar los datos. - -## Caso de estudio: 'El mercado de calabazas' - -En este directorio encontrarás un archivo .cvs in la raíz del directorio `data` llamado [US-pumpkins.csv](../../data/US-pumpkins.csv), el cual incluye 1757 líneas de datos acerca del mercado de calabazas, ordenados en agrupaciones por ciudad. Estos son loas datos extraídos de [Reportes estándar de mercados terminales de cultivos especializados](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuido por el Departamento de Agricultura de los Estados Unidos. - -### Preparando los datos - -Estos datos son de dominio público. Puede ser descargado en varios archivos por separado, por ciudad, desde el sitio web de USDA. para evitar demasiados archivos por separado, hemos concatenado todos los datos de ciudad en una hoja de cálculo, así ya hemos _preparado_ los datos un poco. Lo siguiente es dar un vistazo más a fondo a los datos. - -### Los datos de las calabazas - conclusiones iniciales - -¿Qué notas acerca de los datos? Ya has visto que hay una mezcla de cadenas, números, blancos y valores extraños a los cuales debes encontrarle sentido. - -¿Qué preguntas puedes hacerle a los datos usando una técnica de regresión? Qué tal el "predecir el precio de la venta de calabaza durante un mes dado". Viendo nuevamente los datos, hay algunos cambios que necesitas hacer para crear las estructuras de datos necesarias para la tarea. -## Ejercicio - Analiza los datos de la calabaza - -Usemos [Pandas](https://pandas.pydata.org/), (el nombre es un acrónimo de `Python Data Analysis`) a tool very useful for shaping data, to analyze and prepare this pumpkin data. - -### Primero, revisa las fechas faltantes - -Necesitarás realizar algunos pasos para revisar las fechas faltantes: - -1. Convertir las fechas a formato de mes (las fechas están en formato de EE.UU., por lo que el formato es `MM/DD/YYYY`). -2. Extrae el mes en una nueva columna. - -Abre el archivo _notebook.ipynb_ en Visual Studio Code e importa la hoja de cálculo en un nuevo dataframe de Pandas. - -1. Usa la función `head()` para visualizar las primeras cinco filas. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ ¿Qué función usarías para ver las últimas cinco filas? - -1. Revisa si existen datos faltantes en el dataframe actual: - - ```python - pumpkins.isnull().sum() - ``` - - Hay datos faltabtes, pero quizá no importen para la tarea en cuestión. - -1. Para facilitar el trabajo con tu dataframe, elimina varias de sus columnas usando `drop()`, manteniendo sólo las columnas que necesitas: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### Segundo, determina el precio promedio de la calabaza - -Piensa en cómo determinar el precio promedio de la calabaza en un mes dado. ¿Qué columnas eligirás para esa tarea? Pista: necesitarás 3 columnas. - -Solución: toma el promedio de las columnas `Low Price` y `High Price` para poblar la nueva columna `Price` y convierte la columna `Date` para mostrar únicamente el mes, Afortunadamente, de acuerdo a la revisión de arriba, no hay datos faltantes para las fechas o precios. - -1. Para calcular el promedio, agrega el siguiente código: - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ Siéntete libre de imprimir cualquier dato que desees verificar, usando `print(month)`. - -2. Ahora, copia tus datos convertidos en un nuevo dataframe de Pandas: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - Imprimir tu dataframe te mostrará un conjunto de datos limpio y ordenado, en el cual puedes construir tu nuevo modelo de regresión. - -### ¡Pero espera!, Hay algo raro aquí - -Si observas la columna `Package`, las calabazas se venden en distintas configuraciones. Algunas son vendidas en medidas de '1 1/9 bushel', y otras en '1/2 bushel', algunas por pieza, algunas por libra y otras en grandes cajas de ancho variable. - -> Las calabazas parecen muy difíciles de pesar consistentemente. - -Indagando en los datos originales, es interesante que cualquiera con el valor `Unit of Sale` igualado a 'EACH' o 'PER BIN' también tiene el tipo de `Package` por pulgada, por cesto, o 'each'. Las calabazas parecen muy difíciles de pesar consistentemente, por lo que las filtraremos seleccionando solo aquellas calabazas con el string 'bushel' en su columna `Package`. - -1. Agrega un filtro al inicio del archivo, debajo de la importación inicial del .csv: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Si imprimes los datos ahora, puedes ver que solo estás obteniendo alrededor de 415 filas de datos que contienen calabazas por fanegas. - -### ¡Pero espera! Aún hay algo más que hacer - -¿Notaste que la cantidad de fanegas varían por fila? Necesitas normalizar el precio para así mostrar el precio por fanega, así que haz los cálculos para estandarizarlo. - -1. Agrega estas líneas después del bloque para así crear el dataframe 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) - ``` - -✅ De acuerdo a [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), el peso de una fanega depende del tipo de producto, ya que es una medida de volumen. "Una fanega de tomates, por ejemplo, se supone pese 56 libras... Las hojas y verduras usan más espacio con menos peso, por lo que una fanega de espinaca es de sólo 20 libras." ¡Todo es tan complicado! No nos molestemos en realizar una conversión fanega-a-libra, y en su lugar hagámosla por precio de fanega. ¡Todo este estudio de las fanegas de calabazas nos mostrará cuán importante es comprender la naturaleza de tus datos! - -Ahora, puedes analizar el precio por unidad basándote en su medida de fanega. Si imprimes los datos una vez más, verás que ya están estandarizados. - -✅ ¿Notaste que las calabazas vendidas por media fanega son más caras? ¿Puedes descubrir la razón? Ayuda: Las calabazas pequeñas son mucho más caras que las grandes, probablemente porque hay muchas más de ellas por fanega, dado el espacio sin usar dejado por una calabaza grande. - -## Estrategias de visualización - -parte del rol de un científico de datos es el demostrar la calidad y naturaleza de los dato con los que está trabajando. Para hacerlo, usualmente crean visualizaciones interesantes, o gráficos, grafos, y gráficas, mostrando distintos aspectos de los datos. De esta forma, son capaces de mostrar visualmente las relaciones y brechas de que otra forma son difíciles de descubrir. - -Las visualizaciones también ayudan a determinar la técnica de aprendizaje automático más apropiada para los datos. Por ejemplo, un gráfico de dispersión que parece seguir una línea, indica que los datos son un buen candidato para un ejercicio de regresión lineal. - -Una librería de visualización de datos que funciona bien en los notebooks de Jupyter es [Matplotlib](https://matplotlib.org/) (la cual también viste en la lección anterior). - -> Obtén más experiencia con la visualización de datos en [estos tutoriales](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Ejercicio - experimenta con Matplotlib - -Intenta crear algunas gráficas básicas para mostrar el nuevo dataframe que acabas de crear. ¿Qué mostraría una gráfica de línea básica? - -1. Importa Matplotlib al inicio del archivo, debajo de la importación de Pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -1. Vuelve a correr todo el notebook para refrescarlo. -1. Al final del notebook, agrega una celda para graficar los datos como una caja: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Una gráfica de dispersión mostrando la relación precio a mes](../images/scatterplot.png) - - ¿La gráfica es útil? ¿Hay algo acerca de ésta que te sorprenda? - - No es particularmente útil ya que todo lo que hace es mostrar tus datos como puntos dispersos en un mes dado. - -### Hacerlo útil - -Para obtener gráficas para mostrar datos útiles, necesitas agrupar los datos de alguna forma. Probemos creando un gráfico donde el eje y muestre los meses y los datos demuestren la distribución de los datos. - -1. Agrega una celda para crear una gráfica de barras agrupadas: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Una gráfica de bsarras mostrando la relación precio a mes](../images/barchart.png) - - ¡Esta es una visualización de datos más útil! Parece indicar que el precio más alto para las calabazas ocurre en Septiembre y Octubre. ¿Cumple esto con tus expectativas? ¿por qué sí o por qué no? - ---- - -## 🚀Desafío - -Explora los distintos tipos de visualización que ofrece Matplotlib. ¿Qué tipos son los más apropiados para problemas de regresión? - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12?loc=es) - -## Revisión y autoestudio - -Dale un vistazo a las distintas forma de visualizar los datos. Haz un lista de las distintas librerías disponibles y nota cuales son mejores para cierto tipo de tareas, por ejemplo visualizaciones 2D vs visualizaciones 3D. ¿Qué descubriste? - -## Asignación - -[Explorando la visualización](assignment.es.md) diff --git a/2-Regression/2-Data/translations/README.id.md b/2-Regression/2-Data/translations/README.id.md deleted file mode 100644 index d6c7de5f..00000000 --- a/2-Regression/2-Data/translations/README.id.md +++ /dev/null @@ -1,202 +0,0 @@ -# Membangun sebuah model regresi dengan Scikit-learn: siapkan dan visualisasikan data - -![Infografik visualisasi data](../images/data-visualization.png) -> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Kuis pra-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -## Pembukaan - -Karena sekarang kamu sudah siap dengan alat-alat yang akan diperlukan untuk mulai melampiaskan pembangunan model *machine learning* dengan Scikit-learn, kamu juga siap untuk mulai membuat pertanyaan dari datamu. Selagi kamu bekerja dengan data dan mengaplikasikan solusi ML, sangatlah penting untuk mengerti bagaimana menanyakan cara yang benar dan tepat untuk mengemukakan potensial *dataset*-mu. - -Dalam pelajaran ini, kamu akan belajar: - -- Cara mempersiapkan datamu untuk pembangunan model. -- Cara menggunakan Matplotlib untuk memvisualisasikan data. - -## Menanyakan pertanyaan yang tepat dari datamu - -Pertanyaan yang perlu dijawab akan menentukan jenis algoritma ML yang kamu akan memanfaatkan. Lalu, kualitas jawaban yang kamu akan dapat sangat tergantung pada sifat datamu (*the nature of your data*). - -Lihatlah [data](../data/US-pumpkins.csv) yang disiapkan untuk pelajaran ini. Kamu bisa membuka file .csv ini di VS Code. Membaca dengan cepat, *dataset* ini ada yang kosong dan ada yang campuran data *string* dan data numerik. Adapula sebuah kolom 'Package' yang aneh dan mengandung data antara 'sacks', 'bins', dll. Terus terang, data ini amburadul. - -Faktanya adalah tidak sering kita dihadiahkan sebuah *dataset* yang langsung bisa digunakan untuk membuat sebuah model ML. Dalam pelajaran ini, kamu akan belajar bagaimana menyiapkan sebuah *dataset* 'mentah' menggunakan *library* standar Python. Kamu juga akan belajar aneka teknik untuk memvisualisasikan datanya. - -## Studi kasus: 'pasar labu' - -Dalam folder ini kamu akan menemukan sebuah file .csv dalam folder `data` bernama [US-pumpkins.csv](../data/US-pumpkins.csv) yang mempunyai 1757 baris data tentang pasar labu disortir dalam pengelompokkan berdasarkan kota. Ini adalah data mentah yang diambil dari [Specialty Crops Terminal Markets Standard Reports (Laporan Standar Pasar Terminal Tanaman Khusus)](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusi Departemen Agrikultur Amerika Serikat. - -### Menyiapkan data - -Data ini terbuka untuk umum (*publik domain*) dan bisa diunduh sebagai banyak file terpisah berdasarkan kota dari situs internet Departemen Agrikultur Amerika Serikat. Supaya tidak berurusan dengan terlalu banyak file, kami telah menggabungkan data dari semua kota menjadi satu *spreadsheet* (file Excel). Jadi kamu sudah _menyiapkan_ datanya sedikit. Selanjutnya, mari kita lihat datanya. - -### Data labu - kesimpulan-kesimpulan awal - -Apa yang kamu cermati tentang data ini? Kamu sudah melihat bahwa ada campuran *string*, nomor, kekosongan, dan nilai-nilai aneh yang harus diartikan. - -Pertanyaan apa yang kamu bisa tanyakan dari data data ini menggunakan teknik regresi? Kalau "Prediksikan harga jual sebuah labu pada bulan tertentu" bagaimana? Melihat datanya sekali lagi, ada beberapa perubahan yang kamu harus terapkan untuk membuat struktur data yang diperlukan untuk tugas ini. - -## Latihan - analisiskan data labu - -Mari menggunakan [Pandas](https://pandas.pydata.org/) (singkatan dari `Python Data Analysis`), sebuah alat yang sangat beruna untuk membentuk, menganalisis, dan menyiapkan data labu ini. - -### Pertama, carilah tanggal yang hilang - -Kamu harus mengambil langkah untuk mencari tanggal-tanggal yang hilang terlebih dahulu: - -1. Konversi tanggal-tanggalnya menjadi format bulan (tanggal-tanggal ini dalam format Amerika Serikat, yaitu `BULAN/TANGGAL/TAHUN`). -2. Jadikan data bulan menjadi kolom baru - -Buka file _notebook.ipynb_ dalam Visual Studio Code dan impor *spreadsheet*-nya menjadi sebuah *dataframe* Pandas. - -1. Gunakan fungsi `head()` untuk melihat lima baris pertama. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ Fungsi apa yang akan kamu gunakan untuk melihat lima baris **terakhir**? - -2. Periksa apa ada data yang hilang dalam *dataframe* ini: - - ```python - pumpkins.isnull().sum() - ``` - - Ada data yang hilang, namun mungkin tidak akan diperlukan untuk tugas ini. - -3. Untuk menjadikan *dataframe* kamu lebih mudah untuk digunakan, buanglah beberapa kolom menggunakan `drop()` dan simpanlah kolom-kolom yang diperlukan saja: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### Kedua, tentukan harga rata-rata labu - -Pikirkan bagaimana caranya menentukan harga rata-rata sebuah labu pada bulan tertentu. Kamu akan pilih kolom apa saja untuk tugas ini? Petunjuk: kamu akan perlu 3 kolom. - -Solusi: Ambil rata-rata kolom `Low Price` dan `High Price` untuk mengisi kolom `Price` yang baru. Terus, konversikan kolom `Date` untuk hanya menunjukkan bulan saja. Untungnya, berdasarkan pemeriksaan di atas, tidak ada data tanggal atau harga yang hilang. - -1. Untuk mengkalkulasi rata-rata, tambahlah kode berikut: - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ Jangan ragu untuk mem-*print* data apapun yang kamu ingin periksa menggunakan `print(month)`. - -2. Sekarang, salinlah data yang telah dikonversi ke sebuah *dataframe* Pandas yang baru: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - Jika *dataframe* baru ini di-*print*, kamu akan lihat sebuah *dataset* yang rapih darimana kamu bisa membangun model regresi barumu. - -### But wait! There's something odd here -### Tunggu! Ada yang aneh di sini - -Kalau kamu lihat kolom `Package`, labu dijual dalam berbagai konfigurasi. Beberapa dijual dalam satuan '1 1/9 bushel', beberapa per labu, beberapa per pon, dan beberapa dalam dus-dus besar dengan kelebaran yang berbeda-beda. - -> Kelihatannya susah untuk menimbang labu secara konsisten - -Menggali data orisinal lebih dalam, sangatlah menarik untuk melihat apapun dengan `Unit of Sale` (satuan penjualan) yang sama dengan 'EACH' atau 'PER BIN' akan mempunyai jenis `Package` yang per inci, per bin, atau 'each'. Kelihatannya susah untuk menimbang labu secara konsisten, jadi mari memilah datanya dengan hanya memilih labu yang kolom `Package`-nya sama dengan *string* 'bushel'. - -1. Tambah sebuah filter di atas file tetapi dibawah impor .csv yang di awal - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Kalau kamu *print* datanya sekarang, kamu bisa lihat bahwa kamu hanya mendapatkan sekitar 415 baris data yang mengandung data labu per bushel. - -### Tunggu! Masih ada satu lagi - -Apa kamu sadar bahwa jumlah bushel berbeda-beda per baris? Kamu harus menormalisasi harganya supaya kamu menunjukkan harga per bushel. Gunakanlah sedikit matematika untuk menstandarisasinya. - -1. Tambahlah beberapa baris ini setelah blok yang membuat *dataframe* 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) - ``` - -✅ Berdasarkan [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), berat satu bushel tergantung jenis hasil bumi sebab bushel adalah satuan volume. "Satu bushel tomat, sebagai contoh, seharusnya seberat 56 pon (25.4 kg)... Dedaunan mengambil lebih banyak ruang tetapi lebih ringan, jadi satu bushel bayam hanya seberat 20 pon (9.1 kg)" (diterjemah). Lumayan rumit ya! Kita tidak usah mengkonversi bushel ke pon saja bagaimana, jadi kita gunakan satuan harga per bushel? Namun, semua riset ini tentang bushel labu menunjukkan sebagaimana pentingnya untuk mengerti sifat datamu! - -Sekarang, kamu bisa meneliti harga per satuan berdasarkan hitungan bushel mereka. Jika kamu *print* datanya sekali lagi, kamu bisa lihat bagaimana telah distandarisasi. - -✅ Apa kamu sadar bahwa labu yang dijual per setengah bushel sangat mahal? Kira-kira mengapa ya? Petunjuk: labu kecil jauh lebih mahal daripada labu besar, mungkin karena ada lebih banyak per bushel, apalagi mengingat pula bahwa satu labu besar mempunyai rongga kosong yang besar di dalamnya. - -## Strategi Visualisasi - -Sebagian dari peran seorang *data scientist* adalah untuk mendemonstrasikan kualitas dan sifat data yang sedang digunakan. Untuk melakukan ini, mereka seringkali membuat visualisasi-visualisasi atau grafik menarik yang menunjukkan aspek-aspek berbeda tentang datanya. Dengan cara ini, mereka dapat menunjukkan hubungan-hubungan dan celah-celah secara visual. Kalau tidak secara visual, akan susah untuk menemukan pola-pola tersebut. - -Visualisasi juga bisa membantu menentukan teknik *machine learning* yang palingn cocok untuk datanya. Sebagai contoh, sebuah petak sebar yang kelihatannya mengikuti sebuah garis mengindikasikan bahwa data ini adalah kandidat baik untuk latihan regresi linear. - -Satu *library* visualisasi data yang bekerja dengan baik dalam sebuah *Jupyter notebook* adalah [Matplotlib](https://matplotlib.org/) (yang kamu juga lihat dalam pelajaran sebelumnya). - -> Carilah pengalaman dalam memvisualisasi data dengan [tutorial-tutorial ini](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Latihan - sebuah experimen dengan Matplotlib - -Coba membuat beberapa grafik sederhana untuk menunjukkan *dataframe* baru yang baru kamu buat. Kira-kira, sebuah plot garis akan menunjukkan apa ya? - -1. Impor Matplotlib di atas file tetapi di bawah impor Pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -2. Jalankan ulang keseluruhan *notebook*-nya. -3. Di bagian bawah *notebook*-nya, tambahkan sebuah sel untuk menggambarkan datanya sebagai sebuah kotak. - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Sebuah petak sebar yang menunjukkan hubungan antara harga dan bulan](../images/scatterplot.png) - - Apakah grafik ini berguna? Apa ada yang mengejutkanmu? - - Sebenarnya tidak terlalu berguna karena dia hanya menunjukkan datamu sebagai sebuah penyebaran poin pada bulan tertentu. - -### Jadikan berguna - -Untuk menjadikan sebuah grafik menjadi berguna, biasanya datanya harus dikelompokkan dengan suatu cara. Kita coba membuat suatu plot di mana sumbu y menunjukkan bulan dan datanya mendemonstrasikan distribusi data, yuk! - -1. Tambah sebuah sel untuk membuat sebuah diagram batang berkelompok: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Sebuah diagram batang yang menunjukkan hubungan antara harga dan bulan](../images/barchart.png) - - Nah, ini lebih berguna! Kelihatannya visualisasi ini mengindikasi bahwa labu itu paling mahal pada bulan September dan Oktober. Apa itu sesuai ekspektasimu? Mengapa? - ---- - -## 🚀Tantangan - -Jelajahi jenis-jenis visualisasi yang beda dan yang disediakan Matplotlib. Jenis mana yang paling cocok untuk kasus regresi? - -## [Kuis pasca-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## Review & Pembelajaran Mandiri - -Lihatlah beragam cara memvisualisasi data. Buatlah sebuah daftar dari aneka *library* yang tersedia dan catatlah yang mana yang paling baik untuk jenis-jenis tugas tertentu. Sebagai contoh, bagaimana dengan visualisasi 2D vs. 3D? Apa yang kamu temukan? - -## Tugas - -[Menjelajahi visualisasi](../assignment.md) diff --git a/2-Regression/2-Data/translations/README.it.md b/2-Regression/2-Data/translations/README.it.md deleted file mode 100644 index c0e79ef6..00000000 --- a/2-Regression/2-Data/translations/README.it.md +++ /dev/null @@ -1,201 +0,0 @@ -# Costruire un modello di regressione usando Scikit-learn: preparare e visualizzare i dati - -> ![Infografica sulla visualizzazione dei dati](../images/data-visualization.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/?loc=it) - -## Introduzione - -Ora che si hanno a disposizione gli strumenti necessari per iniziare ad affrontare la creazione di modelli di machine learning con Scikit-learn, si è pronti per iniziare a porre domande sui propri dati. Mentre si lavora con i dati e si applicano soluzioni ML, è molto importante capire come porre la domanda giusta per sbloccare correttamente le potenzialità del proprio insieme di dati. - -In questa lezione, si imparerà: - -- Come preparare i dati per la creazione del modello. -- Come utilizzare Matplotlib per la visualizzazione dei dati. - -## Fare la domanda giusta ai propri dati - -La domanda a cui si deve rispondere determinerà il tipo di algoritmi ML che verranno utilizzati. La qualità della risposta che si riceverà dipenderà fortemente dalla natura dei propri dati. - -Si dia un'occhiata ai [dati](../../data/US-pumpkins.csv) forniti per questa lezione. Si può aprire questo file .csv in VS Code. Una rapida scrematura mostra immediatamente che ci sono spazi vuoti e un mix di stringhe e dati numerici. C'è anche una strana colonna chiamata "Package" (pacchetto) in cui i dati sono un mix tra "sacks" (sacchi), "bins" (contenitori) e altri valori. I dati, infatti, sono un po' un pasticcio. - -In effetti, non è molto comune ricevere un insieme di dati completamente pronto per creare un modello ML pronto all'uso. In questa lezione si imparerà come preparare un insieme di dati non elaborato utilizzando le librerie standard di Python. Si impareranno anche varie tecniche per visualizzare i dati. - -## Caso di studio: 'il mercato della zucca' - -In questa cartella si troverà un file .csv nella cartella `data` radice chiamato [US-pumpkins.csv](../../data/US-pumpkins.csv) che include 1757 righe di dati sul mercato delle zucche, ordinate in raggruppamenti per città. Si tratta di dati grezzi estratti dai [Report Standard dei Mercati Terminali delle Colture Speciali](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuiti dal Dipartimento dell'Agricoltura degli Stati Uniti. - -### Preparazione dati - -Questi dati sono di pubblico dominio. Possono essere scaricati in molti file separati, per città, dal sito web dell'USDA. Per evitare troppi file separati, sono stati concatenati tutti i dati della città in un unico foglio di calcolo, quindi un po' i dati sono già stati _preparati_ . Successivamente, si darà un'occhiata più da vicino ai dati. - -### I dati della zucca - prime conclusioni - -Cosa si nota riguardo a questi dati? Si è già visto che c'è un mix di stringhe, numeri, spazi e valori strani a cui occorre dare un senso. - -Che domanda si puà fare a questi dati, utilizzando una tecnica di Regressione? Che dire di "Prevedere il prezzo di una zucca in vendita durante un dato mese". Esaminando nuovamente i dati, ci sono alcune modifiche da apportare per creare la struttura dati necessaria per l'attività. - -## Esercizio: analizzare i dati della zucca - -Si usa [Pandas](https://pandas.pydata.org/), (il nome sta per `Python Data Analysis`) uno strumento molto utile per dare forma ai dati, per analizzare e preparare questi dati sulla zucca. - -### Innanzitutto, controllare le date mancanti - -Prima si dovranno eseguire i passaggi per verificare le date mancanti: - -1. Convertire le date in un formato mensile (queste sono date statunitensi, quindi il formato è `MM/GG/AAAA`). -2. Estrarre il mese in una nuova colonna. - -Aprire il file _notebook.ipynb_ in Visual Studio Code e importare il foglio di calcolo in un nuovo dataframe Pandas. - -1. Usare la funzione `head()` per visualizzare le prime cinque righe. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ Quale funzione si userebbe per visualizzare le ultime cinque righe? - -1. Controllare se mancano dati nel dataframe corrente: - - ```python - pumpkins.isnull().sum() - ``` - - Ci sono dati mancanti, ma forse non avrà importanza per l'attività da svolgere. - -1. Per rendere più facile lavorare con il dataframe, si scartano molte delle sue colonne, usando `drop()`, mantenendo solo le colonne di cui si ha bisogno: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### Secondo, determinare il prezzo medio della zucca - -Si pensi a come determinare il prezzo medio di una zucca in un dato mese. Quali colonne si sceglierebbero per questa attività? Suggerimento: serviranno 3 colonne. - -Soluzione: prendere la media delle colonne `Low Price` e `High Price` per popolare la nuova colonna Price e convertire la colonna Date per mostrare solo il mese. Fortunatamente, secondo il controllo di cui sopra, non mancano dati per date o prezzi. - -1. Per calcolare la media, aggiungere il seguente codice: - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ Si possono di stampare tutti i dati che si desidera controllare utilizzando `print(month)`. - -2. Ora copiare i dati convertiti in un nuovo dataframe Pandas: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - La stampa del dataframe mostrerà un insieme di dati pulito e ordinato su cui si può costruire il nuovo modello di regressione. - -### Ma non è finita qui! C'è qualcosa di strano qui. - -Osservando la colonna `Package`, le zucche sono vendute in molte configurazioni diverse. Alcune sono venduti in misure '1 1/9 bushel' (bushel = staio) e alcuni in misure '1/2 bushel', alcuni per zucca, alcuni per libbra e alcuni in grandi scatole con larghezze variabili. - -> Le zucche sembrano molto difficili da pesare in modo coerente - -Scavando nei dati originali, è interessante notare che qualsiasi cosa con `Unit of Sale` (Unità di vendita) uguale a 'EACH' o 'PER BIN' ha anche il tipo di `Package` per 'inch' (pollice), per 'bin' (contenitore) o 'each' (entrambi). Le zucche sembrano essere molto difficili da pesare in modo coerente, quindi si filtrano selezionando solo zucche con la stringa "bushel" nella colonna `Package`. - -1. Aggiungere un filtro nella parte superiore del file, sotto l'importazione .csv iniziale: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Se si stampano i dati ora, si può vedere che si stanno ricevendo solo le circa 415 righe di dati contenenti zucche per bushel. - -### Ma non è finita qui! C'è un'altra cosa da fare. - -Si è notato che la quantità di bushel varia per riga? Si deve normalizzare il prezzo in modo da mostrare il prezzo per bushel, quindi si facciano un po' di calcoli per standardizzarlo. - -1. Aggiungere queste righe dopo il blocco che crea il dataframe 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) - ``` - -✅ Secondo [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), il peso di un bushel dipende dal tipo di prodotto, poiché è una misura di volume. "Un bushel di pomodori, per esempio, dovrebbe pesare 56 libbre... Foglie e verdure occupano più spazio con meno peso, quindi un bushel di spinaci è solo 20 libbre". È tutto piuttosto complicato! Non occorre preoccuparsi di fare una conversione da bushel a libbra, e invece si valuta a bushel. Tutto questo studio sui bushel di zucche, però, dimostra quanto sia importante capire la natura dei propri dati! - -Ora si può analizzare il prezzo per unità in base alla misurazione del bushel. Se si stampano i dati ancora una volta, si può vedere come sono standardizzati. - -✅ Si è notato che le zucche vendute a metà bushel sono molto costose? Si riesce a capire perché? Suggerimento: le zucche piccole sono molto più costose di quelle grandi, probabilmente perché ce ne sono molte di più per bushel, dato lo spazio inutilizzato occupato da una grande zucca cava. - -## Strategie di Visualizzazione - -Parte del ruolo del data scientist è dimostrare la qualità e la natura dei dati con cui sta lavorando. Per fare ciò, si creano spesso visualizzazioni interessanti o tracciati, grafici e diagrammi, che mostrano diversi aspetti dei dati. In questo modo, sono in grado di mostrare visivamente relazioni e lacune altrimenti difficili da scoprire. - -Le visualizzazioni possono anche aiutare a determinare la tecnica di machine learning più appropriata per i dati. Un grafico a dispersione che sembra seguire una linea, ad esempio, indica che i dati sono un buon candidato per un esercizio di regressione lineare. - -Una libreria di visualizzazione dei dati che funziona bene nei notebook Jupyter è [Matplotlib](https://matplotlib.org/) (che si è visto anche nella lezione precedente). - -> Per fare più esperienza con la visualizzazione dei dati si seguano [questi tutorial](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Esercizio - sperimentare con Matplotlib - -Provare a creare alcuni grafici di base per visualizzare il nuovo dataframe appena creato. Cosa mostrerebbe un grafico a linee di base? - -1. Importare Matplotlib nella parte superiore del file, sotto l'importazione di Pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -1. Rieseguire l'intero notebook per aggiornare. -1. Nella parte inferiore del notebook, aggiungere una cella per tracciare i dati come una casella: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Un grafico a dispersione che mostra la relazione tra prezzo e mese](../images/scatterplot.png) - - È un tracciato utile? C'è qualcosa che sorprende? - - Non è particolarmente utile in quanto tutto ciò che fa è visualizzare nei propri dati come una diffusione di punti in un dato mese. - -### Renderlo utile - -Per fare in modo che i grafici mostrino dati utili, di solito è necessario raggruppare i dati in qualche modo. Si prova a creare un grafico che mostra la distribuzione dei dati dove l'asse x mostra i mesi. - -1. Aggiungere una cella per creare un grafico a barre raggruppato: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Un grafico a barre che mostra la relazione tra prezzo e mese](../images/barchart.png) - - Questa è una visualizzazione dei dati più utile! Sembra indicare che il prezzo più alto per le zucche si verifica a settembre e ottobre. Questo soddisfa le proprie aspettative? Perché o perché no? - ---- - -## 🚀 Sfida - -Esplorare i diversi tipi di visualizzazione offerti da Matplotlib. Quali tipi sono più appropriati per i problemi di regressione? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/?loc=it) - -## Revisione e Auto Apprendimento - -Dare un'occhiata ai molti modi per visualizzare i dati. Fare un elenco delle varie librerie disponibili e annotare quali sono le migliori per determinati tipi di attività, ad esempio visualizzazioni 2D rispetto a visualizzazioni 3D. Cosa si è scoperto? - -## Compito - -[Esplorazione della visualizzazione](assignment.it.md) diff --git a/2-Regression/2-Data/translations/README.ja.md b/2-Regression/2-Data/translations/README.ja.md deleted file mode 100644 index a877bdac..00000000 --- a/2-Regression/2-Data/translations/README.ja.md +++ /dev/null @@ -1,206 +0,0 @@ -# Scikit-learnを用いた回帰モデルの構築: データの準備と可視化 - -> ![データの可視化に関するインフォグラフィック](../images/data-visualization.png) -> -> [Dasani Madipalli](https://twitter.com/dasani_decoded) によるインフォグラフィック - -## [講義前のクイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11?loc=ja) - -## イントロダクション - -Scikit-learnを使って機械学習モデルの構築を行うために必要なツールの用意ができたところで、データに対する問いかけを始める準備が整いました。データを扱いMLソリューションを適用する際には、データセットの潜在能力を適切に引き出すために正しい問いかけをすることが非常に重要です。 - -このレッスンでは、以下のことを学びます。 - -- モデルを構築するためのデータ処理方法について -- データの可視化におけるMatplotlibの使い方について - -## データに対して正しい問いかけをする - -どのような質問に答えるかによって、どのようなMLアルゴリズムを活用するかが決まります。また、返ってくる回答の質は、データの性質に大きく依存します。 - -このレッスンのために用意された[データ]((../../data/US-pumpkins.csv))を見てみましょう。この.csvファイルは、VS Codeで開くことができます。ざっと確認してみると、空欄があったり、文字列や数値データが混在していることがわかります。また、「Package」という奇妙な列では「sacks」や 「bins」などの異なる単位の値が混在しています。このように、データはちょっとした混乱状態にあります。 - -実際のところ、MLモデルの作成にすぐに使えるような整ったデータセットをそのまま受け取ることはあまりありません。このレッスンでは、Pythonの標準ライブラリを使って生のデータセットを準備する方法を学びます。また、データを可視化するための様々なテクニックを学びます。 - -## ケーススタディ: カボチャの市場 - -ルートの`date`フォルダの中に [US-pumpkins.csv](../../data/US-pumpkins.csv) という名前の.csvファイルがあります。このファイルには、カボチャの市場に関する1757行のデータが、都市ごとにグループ分けされて入っています。これは、米国農務省が配布している [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) から抽出した生データです。 - -### データの準備 - -このデータはパブリックドメインです。米国農務省のウェブサイトから、都市ごとに個別ファイルをダウンロードすることができます。ファイルが多くなりすぎないように、すべての都市のデータを1つのスプレッドシートに連結しました。次に、データを詳しく見てみましょう。 - -### カボチャのデータ - 初期の結論 - -このデータについて何か気付いたことはありますか?文字列、数字、空白、奇妙な値が混在していて、意味を理解しなければならないこと気付いたと思います。 - -回帰を使って、このデータにどのような問いかけができますか?「ある月に販売されるカボチャの価格を予測する」というのはどうでしょうか?データをもう一度見てみると、この課題に必要なデータ構造を作るために、いくつかの変更が必要です。 - -## エクササイズ - カボチャのデータを分析 - -データを整形するのに非常に便利な [Pandas](https://pandas.pydata.org/) (Python Data Analysisの略) を使って、このカボチャのデータを分析したり整えてみましょう。 - -### 最初に、日付が欠損していないか確認する - -日付が欠損していないか確認するために、いくつかのステップがあります: - -1. 日付を月の形式に変換する(これは米国の日付なので、形式は `MM/DD/YYYY` となる)。 -2. 新しい列として月を抽出する。 - -Visual Studio Codeで _notebook.ipynb_ ファイルを開き、スプレッドシートを Pandas DataFrame としてインポートします。 - -1. `head()` 関数を使って最初の5行を確認します。 - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ 最後の5行を表示するには、どのような関数を使用しますか? - - -2. 現在のデータフレームに欠損データがあるかどうかをチェックします。 - - ```python - pumpkins.isnull().sum() - ``` - - 欠損データがありましたが、今回のタスクには影響がなさそうです。 - - -3. データフレームを扱いやすくするために、`drop()` 関数を使っていくつかの列を削除し、必要な列だけを残すようにします。 - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### 次に、カボチャの平均価格を決定します。 - -ある月のかぼちゃの平均価格を決定する方法を考えてみましょう。このタスクのために、どの列が必要ですか?ヒント:3つの列が必要になります。 - -解決策:「最低価格」と「最高価格」の平均値を取って新しい「price」列を作成し、「日付」列を月のみ表示するように変換します。幸いなことに、上記で確認した結果によると日付や価格に欠損データはありませんでした。 - -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ブッシェル」で売られているもの、「1/2ブッシェル」で売られているもの、かぼちゃ1個単位で売られているもの、1ポンド単位で売られているもの、幅の違う大きな箱で売られているものなど様々です。 - - -> かぼちゃの重さを一定にするのはとても難しいようです。 - -元のデータを調べてみると、「Unit of Sale」が「EACH」または「PER BIN」となっているものは、「Package」が「per inch」、「per bin」、「each」となっているのが興味深いです。カボチャの計量単位に一貫性を持たせるのが非常に難しいようなので、`Package`列に「bushel」という文字列を持つカボチャだけを選択してフィルタリングしてみましょう。 - -1. ファイルの一番上にフィルタを追加します。 - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - 今、データを出力してみると、ブッシェル単位のカボチャを含む415行ほどのデータしか得られていないことがわかります。 - -### でも、待ってください!もうひとつ、やるべきことがあります。 - -行ごとにブッシェルの量が異なることに気付きましたか?1ブッシェルあたりの価格を表示するためには、計算して価格を標準化する必要があります。 - -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) によると、ブッシェルの重さは体積を測るものなので、農産物の種類によって異なります。例えば、トマトの1ブッシェルは、56ポンドの重さになるとされています。葉っぱや野菜は重量が少なくてもスペースを取るので、ほうれん草の1ブッシェルはたったの20ポンドです。なんだか複雑ですね!ブッシェルからポンドへの換算は面倒なのでやめて、ブッシェル単位で価格を決めましょう。しかし、カボチャのブッシェルについての議論は、データの性質を理解することがいかに重要であるかを示しています。 - -これで、ブッシェルの測定値に基づいて、ユニットごとの価格を分析することができます。もう1度データを出力してみると、標準化されていることがわかります。 - -✅ ハーフブッシェルで売られているカボチャがとても高価なことに気付きましたか?なぜだかわかりますか?小さなカボチャは大きなカボチャよりもはるかに高価です。おそらく大きなカボチャ中身には、体積あたりで考えると空洞な部分が多く含まれると考えられます。 - -## 可視化戦略 - -データサイエンティストの役割の一つは、扱うデータの質や性質を示すことです。そのために、データのさまざまな側面を示す興味深いビジュアライゼーション(プロット、グラフ、チャート)を作成することがよくあります。そうすることで、他の方法では発見しにくい関係性やギャップを視覚的に示すことができます。 - -また、可視化することでデータに適した機械学習の手法を判断することができます。例えば、散布図が直線に沿っているように見える場合は、適用する手法の候補の一つとして線形回帰が考えられます。 - -Jupyter notebookでうまく利用できるテータ可視化ライブラリの一つに [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. ノートブック全体を再実行してリフレッシュします。 -2. ノートブックの下部に、データをプロットするためのセルを追加します。 - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![価格と月の関係を示す散布図](../images/scatterplot.png) - - これは役に立つプロットですか?なにか驚いたことはありますか? - - これはデータをある月について、データの広がりとして表示しているだけなので、特に役に立つものではありません。 - -### 活用できるようにする - -グラフに有用なデータを表示するには、通常、データを何らかの方法でグループ化する必要があります。ここでは、X軸を月として、データの分布を示すようなプロットを作ってみましょう。 - -1. セルを追加してグループ化された棒グラフを作成します。 - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![値段と月の関係を表した棒グラフ](../images/barchart.png) - - このプロットの方が、より有用なデータを可視化しています!カボチャの価格が最も高くなるのは、9月と10月であることを示しているようです。このプロットはあなたの期待に応えるものですか?どのような点で期待通りですか?また、どのような点で期待に答えられていませんか? - ---- - -## 🚀チャレンジ - -Matplotlibが提供する様々なタイプのビジュアライゼーションを探ってみましょう。回帰の問題にはどのタイプが最も適しているでしょうか? - -## [講義後クイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12?loc=ja) - -## レビュー & 自主学習 - -データを可視化するための様々な方法を見てみましょう。様々なライブラリをリストアップし、例えば2Dビジュアライゼーションと3Dビジュアライゼーションのように、特定のタイプのタスクに最適なものをメモします。どのような発見がありましたか? - -## 課題 - -[ビジュアライゼーションの探求](./assignment.ja.md) diff --git a/2-Regression/2-Data/translations/README.ko.md b/2-Regression/2-Data/translations/README.ko.md deleted file mode 100644 index 2d5a2d71..00000000 --- a/2-Regression/2-Data/translations/README.ko.md +++ /dev/null @@ -1,202 +0,0 @@ -# Scikit-learn 사용한 regression 모델 만들기: 데이터 준비와 시각화 - -> ![Data visualization infographic](.././images/data-visualization.png) - -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -## 소개 - -이제 Scikit-learn으로 머신러닝 모델을 만들기 시작할 때 필요한 도구를 세팅했으므로, 데이터에 대한 질문을 할 준비가 되었습니다. 데이터로 작업하고 ML 솔루션을 적용하려면, 데이터셋의 잠재력을 잘 분석하기 위하여 올바른 질문 방식을 이해하는 것이 매우 중요합니다. - -이 강의에서, 다음을 배웁니다: - -- 모델-제작 위한 데이터 준비하는 방식. -- 데이터 시각화 위한 Matplotlib 사용하는 방식. - -## 데이터에 올바른 질문하기 - -답변이 필요한 질문에 따라서 활용할 ML 알고리즘의 타입이 결정됩니다. 그리고 받는 답변의 퀄리티는 데이터의 성격에 크게 의존됩니다. - -이 강의에서 제공되는 [data](../data/US-pumpkins.csv)를 보세요. VS Code에서 .csv 파일을 열 수 있습니다. 빠르게 흝어보면 공백과 문자열과 숫자 데이터가 섞여진 것을 보여줍니다. 'Package'라고 불리는 이상한 열에 'sacks', 'bins'과 다른 값 사이에 섞인 데이터가 있습니다. 사실은, 조금 엉성합니다. - -실제로, ML 모델을 바로 꺼내 만들면서 완벽하게 사용할 준비가 된 데이터셋을 주는 건 매우 평범하지 않습니다. 이 강의에서는, 표준 Python 라이브러리로 원본 데이터셋을 준비하는 과정을 배우게 됩니다. 데이터 시각화하는 다양한 기술을 배웁니다. - -## 케이스 스터디: 'the pumpkin market' - -이 폴더에서는 호박 시장에 대한 데이터 1757 라인이 도시별로 분류된 [US-pumpkins.csv](../../data/US-pumpkins.csv) 라고 불리는 최상위 `data` 폴더에서 .csv 파일을 찾을 수 있습니다. United States Department of Agriculture가 배포한 [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)에서 원본 데이터를 추출했습니다. - -### 데이터 준비하기 - -이 데이터는 공개 도메인에 존재합니다. USDA 웹사이트에서, 도시별로, 많은 여러개 파일을 내려받을 수 있습니다. 너무 많이 분리된 파일들을 피하기 위해서, 모든 도시 데이터를 한 개의 스프레드 시트에 연결했으므로, 미리 데이터를 조금 _준비_ 했습니다. 다음으로, 데이터를 가까이 봅니다. - -### 호박 데이터 - 이른 결론 - -데이터에서 어떤 것을 눈치챘나요? 이해할 문자열, 숫자, 공백과 이상한 값이 섞여있다는 것을 이미 봤습니다. - -Regression 기술을 사용해서, 데이터에 물어볼 수 있는 질문인가요? "Predict the price of a pumpkin for sale during a given month"는 어떤가요. 데이터를 다시보면, 작업에 필요한 데이터 구조를 만들기 위하여 조금 바꿀 점이 있습니다. - -## 연습 - 호박 데이터 분석하기 - -호박 데이터를 분석하고 준비하며, 데이터를 구성할 때 매우 유용한 도구인, [Pandas](https://pandas.pydata.org/) (`Python Data Analysis`의 약자)를 사용해봅시다. - -### 먼저, 누락된 날짜를 확인합니다. - -먼저 누락된 데이터들을 확인하는 단계가 필요합니다: - -1. 날짜를 월 포맷으로 변환합니다 (US 날짜라서 `MM/DD/YYYY` 포맷). -2. month를 새로운 열로 추출합니다. - -visual Studio Code에서 _notebook.ipynb_ 파일을 열고 새로운 Pandas 데아터프레임에 spreadsheet를 가져옵니다. - -1. 처음 5개 행을 보기 위하여 `head()` 함수를 사용합니다. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ 마지막 5개 행을 보려면 어떤 함수를 사용하나요? - -1. 지금 데이터프레임에 누락된 데이터가 있다면 확인합니다: - - ```python - pumpkins.isnull().sum() - ``` - - 누락된 데이터이지만, 당장 앞에 있는 작업에는 중요하지 않을 수 있습니다. - -1. 데이터프레임 작업을 더 쉽게 하려면, `drop()`으로, 여러 열을 지우고, 필요한 행만 둡니다. - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### 두번째로, 호박의 평균 가격을 결정합니다. - -주어진 달에 호박의 평균 가격을 결정하는 방식에 대하여 생각합니다. 이 작업을 하기 위하여 어떤 열을 선택할까요? 힌트: 3개의 열이 필요합니다. - -솔루션: `Low Price`와 `High Price` 열의 평균으로 새로운 가격 열을 채우고, 이 달만 보여주기 위해 날짜 열을 변환합니다. 다행히, 확인해보니, 누락된 날짜나 가격 데이터가 없습니다. - -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}) - ``` - - 데이터프레임을 출력해보면 새로운 regression 모델을 만들 수 있는 깨끗하고, 단정한 데이터셋이 보여집니다. - -### 하지만 기다려주세요! 여기 무언가 있습니다 - -`Package` 열을 보면, 호박이 많이 다양한 구성으로 팔린 것을 볼 수 있습니다. 일부는 '1 1/9 bushel' 단위로 팔고, '1/2 bushel' 단위로 팔고, 호박 단위, 파운드 단위, 그리고 다양한 넓이의 큰 박스에도 넣어서 팔고 있습니다. - -> 호박은 일정한 무게로 이루어지기 꽤 어려운 것 같습니다. - -원본 데이터를 파다보면, 모든 항목에 인치, 박스 당, 또는 'each'로 이루어져서 `Unit of Sale`이 'EACH' 또는 'PER BIN'이라는 사실은 흥미롭습니다. 호박은 일정하게 무게를 달기가 매우 어려워서, `Package` 열에 'bushel' 문자열이 있는 호박만 선택해서 필터링하겟습니다. - -1. 파일 상단, 처음 .csv import 하단에 필터를 추가합니다: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - 지금 데이터를 출력해보면, bushel 호박 포함한 대략 415개의 행만 가져올 수 있습니다. - -### 하지만 기다려주세요! 하나 더 있습니다 - -bushel 수량이 행마다 다른 것을 알았나요? bushel 단위로 가격을 보여줄 수 있도록 가격을 노말라이즈해야 되므로, 수학으로 일반화해야 합니다. - -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)에 따르면, bushel의 무게는 볼륨 측정이므로, 농산물 타입에 따릅니다. "A bushel of tomatoes, for example, is supposed to weigh 56 pounds... Leaves and greens take up more space with less weight, so a bushel of spinach is only 20 pounds." 모든 게 정말 복잡합니다! bushel에서 파운드로 변환하면서 신경쓰지 말고, bushel로 가격을 정합니다. 호박 bushels의 모든 연구는, 데이터의 특성을 이해하는 게 매우 중요하다는 것을 보여줍니다. - -지금, bushel 측정을 기반으로 가격을 분석하는 게 가능해졌습니다. 만약 한 번 데이터를 출력하면, 표준화된 상태로 볼 수 있습니다. - -✅ half-bushel로 파는 게 매우 비싸다는 사실을 파악했나요? 왜 그런 지 알 수 있나요? 힌트: 작은 호박은 큰 호박보다 비쌉니다, 큰 hollow 파이 호박 하나가 차지하는 빈 공간을 생각해보면, bushel 당 더 많습니다. - -## 시각화 전략 - -데이터 사이언티스트 룰의 일부는 작업하고 있는 데이터의 품질과 특성을 증명하는 것입니다. 데이터의 다양한 측면을 보여주는, 흥미로운 시각화, 또는 plots, 그래프 그리고 차트를 만드는 경우가 자주 있습니다. 이렇게, 다른 방식으로 밝히기 힘든 관계와 간격을 시각적으로 표현할 수 있습니다. - -시각화는 데이터에 가장 적합한 머신러닝 기술의 결정을 돕습니다. 라인을 따라가는 것처럼 보이는 scatterplot을(산점도) 예시로, 데이터가 linear regression 연습에 좋은 후보군이라는 것을 나타냅니다. - -Jupyter notebooks에서 잘 작동하는 데이터 시각화 라이브러리는 (이전 강의에서 보았던) [Matplotlib](https://matplotlib.org/)입니다. - -> [these tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)에서 데이터 시각화 연습을 더 해보세요. - -## 연습 - Matplotlib으로 실험하기 - -직전에 만든 새로운 데이터프레임을 출력하려면 기초 plot을 만듭시다. 기초 라인 plot은 어떻게 보여주나요? - -1. 파일의 상단에, Pandas import 밑에서 Matplotlib을 Import 합니다: - - ```python - import matplotlib.pyplot as plt - ``` - -1. 전체 노트북을 다시 실행해서 새로 고칩니다. -1. 노트북의 하단에, 데이터를 박스로 plot할 셀을 추가합니다: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![A scatterplot showing price to month relationship](.././images/scatterplot.png) - - 쓸모있는 plot인가요? 어떤 것에 놀랬나요? - - 주어진 달에 대하여 점의 발산은 데이터에 보여질 뿐이므로 특별히 유용하지 않습니다. - -### 유용하게 만들기 - -차트에서 유용한 데이터를 보여지게 하려면, 데이터를 어떻게든지 그룹으로 묶어야 합니다. y축이 달을 나타내면서 데이터의 분포를 나타내는 데이터로 plot을 만들어 보겠습니다. - -1. 그룹화된 바 차트를 만들기 위한 셀을 추가합니다: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![A bar chart showing price to month relationship](.././images/barchart.png) - - 조금 더 유용한 데이터 시각화힙니다! 호박 가격이 가장 높았을 때는 9월과 10월로 보여집니다. 기대하던 목표에 부합하나요? 왜 그렇게 생각하나요? - ---- - -## 🚀 도전 - -Matplotlib에서 제공하는 다양한 시각화 타입을 찾아보세요. regression 문제에 가장 적당한 타입은 무엇인가요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## 검토 & 자기주도 학습 - -데이터 시각화하는 많은 방식을 찾아보세요. 사용할 수 있는 다양한 라이브러리 목록을 만들고 2D visualizations vs. 3D visualizations 예시처럼, 주어진 작업의 타입에 적당한 라이브러리를 확인합니다. 어떤 것을 찾았나요? - -## 과제 - -[Exploring visualization](../assignment.md) diff --git a/2-Regression/2-Data/translations/README.pt-br.md b/2-Regression/2-Data/translations/README.pt-br.md deleted file mode 100644 index 9215bf59..00000000 --- a/2-Regression/2-Data/translations/README.pt-br.md +++ /dev/null @@ -1,208 +0,0 @@ -# Construindo um modelo de regressão usando Scikit-learn: preparar e visualizar dados - -![Infográfico de visualização de dados](../images/data-visualization.png) - -Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11?loc=ptbr) - -> ### [Esta liçao está disponível em R!](../solution/R/lesson_2-R.ipynb) - -## Introdução - -Agora que você configurou as ferramentas que precisa para começar a construir modelos de _machine learning_ com o Scikit-learn, vamos fazer perguntas sobre seus dados. Conforme você trabalha com dados e aplica soluções de ML, é muito importante entender como fazer a pergunta certa para obter o melhor de seu conjunto de dados. - -Nesta lição, você irá aprender a: - -- Como preparar os dados para a construção do modelo. -- Como usar matplotlib para visualização de dados. - -[![Preparando e visualizando os dados (vídeo em inglês)](https://img.youtube.com/vi/11AnOn_OAcE/0.jpg)](https://youtu.be/11AnOn_OAcE "Preparando e Visualizando dados - Clique para assistir!") -> 🎥 Clique na imagem acima para assistir a um vídeo sobre os principais aspectos desta lição (vídeo em inglês). - - -## Fazendo a pergunta correta a seus dados - -A pergunta que você precisa responder determinará que tipo de algoritmos de ML você usará. E a qualidade da resposta que você receber dependerá muito da natureza dos seus dados. - -Dê uma olhada [nesses dados](../../data/US-pumpkins.csv). Você pode abrir este arquivo .csv no VS Code. Uma rápida leitura mostra imediatamente que existem espaços em branco e uma mistura de strings e dados numéricos. Há também uma coluna estranha chamada `Package` onde os dados são uma mistura entre 'sacks' (sacos), 'bins' (caixas) e outros valores. Esses dados estão uma bagunça. - -A verdade é que raramente somos apresentados a um conjunto de dados que pode ser usado diretamente para criar um modelo de ML. Nesta lição, você aprenderá como preparar um conjunto de dados "bruto" usando bibliotecas Python. Você também aprenderá várias técnicas para visualizar os dados. - -## Caso de estudo: 'o mercado de abóboras' - -Na pasta `data`, na raiz do projeto, você encontrará um arquivo .csv chamado [US-pumpkins.csv](../../data/US-pumpkins.csv) que inclui 1757 linhas de dados sobre o mercado de abóboras, classificados em agrupamentos por cidade. Estes são dados brutos extraídos dos [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) (Relatórios Padrão de Mercados Terminais para Cultivos Especiais) distribuído pelo Departamento de Agricultura dos Estados Unidos. - -### Preparando os dados - -Esses dados são abertos ao público. Podem ser baixados em arquivos separados, por cidade, no site do USDA. Para evitar muitos arquivos separados, concatenamos todos os dados da cidade em uma planilha, feito isso, já _preparamos_ os dados um pouco. Agora vamos examinar mais de perto os dados. - -### Dados das abóboras - conclusões inciais - -O que você acha desses dados? Você já viu que existe uma mistura de strings, números, espaços em branco e valores estranhos? - -Que pergunta você pode fazer sobre esses dados, usando uma técnica de regressão? Que tal "Como prever o preço de uma abóbora à venda durante um determinado mês"?. Olhando novamente para os dados, existem algumas mudanças que você precisa fazer para criar a estrutura de dados necessária para a tarefa. - -## Exercício - Análise dos dados das abóboras - -Vamos usar o [Pandas](https://pandas.pydata.org/), (que significa `Python Data Analysis`) uma ferramenta útil para moldar, analizar e preparar dados. - -### Primeiro, procuramos datas faltantes - -Você precisará seguir alguns passos para procurar por datas faltantes: - -1. Converta as datas para um formato mensal (as datas estão no formato dos EUA, ou seja, `MM/DD/AAAA`). -2. Transforme o mês numa nova coluna. - -Abra o arquivo _notebook.ipynb_ no Visual Studio Code e importe a planilha no formato de um _dataframe_ Pandas. - -1. Use a função `head()` para visualizar as cinco primeiras linhas. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ Qual função você usaria para visualizar as últimas cinco linhas? - -1. Veja se existe datas faltantes no _dataframe_ atual: - - ```python - pumpkins.isnull().sum() - ``` - - Alguns dados estão faltando, mas talvez não sejam necessários para esta tarefa. - -1. Para tornar seu _dataframe_ mais fácil de usar, remova algumas das colunas usando a função `drop()`, mantendo apenas as colunas que você precisa: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### Segundo, calcule o preço médio das abóboras - -Pense em como determinar o preço médio de uma abóbora em um determinado mês. Quais colunas você escolheria para esta tarefa? Dica: você precisará de 3 colunas. - -Solução: pegue a média das colunas `Low Price` (Preço baixo) e `High Price` (Preço alto) para preencher a nova coluna `Price` (Preço) e converta a coluna `Date` (Data) para mostrar apenas o mês. Felizmente, de acordo com a verificação acima, não faltam dados de datas ou preços. - -1. Pra calcular a média, adicione o seguinte código: - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ Sinta-se a vontade para imprimir qualquer dado usando `print(nome da variável aqui)`. - -2. Agora, copie sua data convertida em um _dataframe_ Pandas novinho em folha: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - Ao imprimir seu _dataframe_, você verá um conjunto de dados limpo e organizado para criar seu modelo de regressão. - -### Mas espere! Parece que tem algo estranho 🤔 - -Se você olhar a coluna `Package` (Pacote), as abóboras são vendidas em muitas configurações diferentes. Algumas são vendidas em medidas de '1 1/9 bushel' (bushel é uma unidade de medida, equivalente à "alqueire"), e algumas de '1/2 bushel', algumas por abóbora, algumas por libra (unidade de medida) e algumas em grandes caixas de larguras variadas. - -> Parece que é difícil pesar a abóbora de uma forma consistente. - -Analisando os dados originais, é interessante observar que qualquer coisa com `Unit of Sale` (Unidade de Venda) igual a 'EACH' ou 'PER BIN' também tem o tipo `Package` com "per inch" (por polegada), "per bin" (por caixa) ou "each" (ambos). Como as abóboras são difíceis de pesar de forma consistente, vamos filtrá-las selecionando apenas as abóboras com a string "bushel" em sua coluna `Package`. - -1. Adicione um filtro na parte superior do arquivo, abaixo da importação inicial do .csv: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Se você imprimir os dados agora, verá que retorna cerca de 415 contendo dados de abóboras por bushel. - -### Opa! Mais uma coisa... - -Você notou que a quantidade de bushel varia por linha? Você precisa normalizar o preço para mostrar o preço por bushel. - -1. Adicione essas linhas após o bloco criando o _dataframe_ `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) - ``` - -✅ De acordo com [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), o peso por bushel depende do tipo de produto, pois é uma medida de volume. "Um bushel de tomates, por exemplo, deve pesar 56 libras (25,4 kg).. Folhas e verduras ocupam mais espaço com menos peso, então um bushel de espinafre pesa apenas 20 libras (9,1 kg)." (fala traduzida). É muito complicado! Não vamos nos preocupar em fazer uma conversão de bushel para libra e, em vez disso, definir o preço por bushel. Perceba que todo esse estudo de bushels de abóboras mostra como é muito importante entender a natureza de seus dados! - -Você pode analisar o preço por unidade com base na medição do bushel. Se você imprimir os dados mais uma vez, verá como eles estão padronizados. - -✅ Você notou que as abóboras vendidas a meio bushel são muito caras? Você pode descobrir por quê? Dica: as abóboras pequenas são muito mais caras do que as grandes, provavelmente porque há muito mais delas por bushel, especialmente considerando que uma abóbora grande tem uma grande cavidade vazia. - -## Estratégias de visualização - -Parte da função do _data scientist_ é demonstrar a qualidade e a natureza dos dados com os quais está trabalhando. Para fazer isso, eles geralmente criam visualizações, ou plotagens, gráficos e tabelas, mostrando diferentes aspectos dos dados. Dessa forma, eles são capazes de mostrar visualmente relações e lacunas que, de outra forma, seriam difíceis de descobrir. - -As visualizações também podem ajudar a determinar a técnica de _machine learning_ mais adequada para os dados. Um gráfico de dispersão que parece seguir uma linha, por exemplo, indica que os dados são bons candidatos para um exercício de regressão linear. - -Uma biblioteca de visualização de dados que funciona bem nos blocos de _notebooks_ é a [Matplotlib](https://matplotlib.org/) (que você também viu na lição anterior). - -> Ganhe mais experiência em visualização de dados fazendo [esses tutoriais](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Exercício - Experimento com Matplotlib - -Tente criar alguns gráficos básicos para exibir o novo _dataframe_ que você acabou de criar. O que um gráfico de linha básico mostraria? - -1. Importe a Matplotlib no início do arquivo, embaixo da importação do pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -1. Execute o _notebook_ inteiro para atualizá-lo. -1. No final do _notebook_, adicione uma célula para plotar os dados: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Um gráfico de dispersão mostrando a relação de preços por mês](../images/scatterplot.png) - - Esse gráfico é relevante? Alguma coisa nele te surpreende? - - O gráfico não é útil, pois tudo o que faz é exibir seus dados como uma distribuição de pontos em um determinado mês. - -### Torne o gráfico útil - -Para fazer com que os gráficos exibam dados úteis, você precisa agrupar os dados de alguma forma. Vamos tentar criar um gráfico onde o eixo "y" mostra os meses e o eixo "x" mostra a distribuição dos preços das abóboras. - -1. Adicione uma célula de código para criar um gráfico de barras: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Um gráfico de barras mostrando a relação de preços por mês](../images/barchart.png) - - Essa visualização de dados parece ser mais útil! Parece indicar que o preço mais alto das abóboras ocorre em setembro e outubro. Isso atende às suas expectativas? Por quê ou por quê não? - ---- - -## 🚀Desafio - -Explore os diferentes tipos de visualização que o Matplotlib oferece. Quais tipos são mais adequados para problemas de regressão? - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Dê uma olhada nas maneiras de visualizar dados. Faça uma lista das várias bibliotecas disponíveis e observe quais são as melhores para determinados tipos de tarefas, por exemplo, visualizações 2D vs. visualizações 3D. O que você descobriu? - -## Tarefa - -[Explorando visualização](assignment.pt-br.md). diff --git a/2-Regression/2-Data/translations/README.pt.md b/2-Regression/2-Data/translations/README.pt.md deleted file mode 100644 index 4ede28b0..00000000 --- a/2-Regression/2-Data/translations/README.pt.md +++ /dev/null @@ -1,207 +0,0 @@ -# Crie um modelo de regressão usando o Scikit-learn: preparar e visualizar dados - -![Infográfico de visualização de dados](../images/data-visualization.png) - -Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Teste de pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -> ### [Esta lição está disponível em R!](./solution/R/lesson_2-R.ipynb) - -## Introdução - -Agora que você está configurado com as ferramentas necessárias para começar a lidar com a construção de modelos de aprendizagem automática com o Scikit-learn, você está pronto para começar a fazer perguntas sobre seus dados. Como você trabalha com dados e aplica soluções ML, é muito importante entender como fazer a pergunta certa para desbloquear adequadamente os potenciais de seu conjunto de dados. - -Nesta lição, você aprenderá: - -- Como preparar seus dados para a criação de modelos. -- Como usar Matplotlib para visualização de dados. - -[![Preparação e Visualização de Dados](https://img.youtube.com/vi/11AnOn_OAcE/0.jpg)](https://youtu.be/11AnOn_OAcE "Preparando e Visualizando vídeo de dados - Clique para Assistir!") -> 🎥 Clique na imagem acima para ver um vídeo que aborda os principais aspectos desta lição - - -## Fazendo a pergunta certa sobre seus dados - -A pergunta que você precisa responder determinará que tipo de algoritmos de ML você utilizará. E a qualidade da resposta que você recebe de volta será fortemente dependente da natureza de seus dados. - -Dê uma olhada nos [dados](../data/US-pumpkins.csv) fornecidos para esta lição. Você pode abrir este arquivo .csv no Código VS. Um skim rápido imediatamente mostra que há espaços em branco e uma mistura de strings e dados numéricos. Há também uma coluna estranha chamada 'Package' onde os dados são uma mistura entre 'sacks', 'bins' e outros valores. Os dados, de fato, são um pouco confusos. - -Na verdade, não é muito comum ser dotado de um conjunto de dados que está completamente pronto para usar para criar um modelo ML pronto para uso. Nesta lição, você aprenderá como preparar um conjunto de dados bruto usando bibliotecas Python padrão. Você também aprenderá várias técnicas para visualizar os dados. - -## Estudo de caso: "mercado da abóbora" - -Nesta pasta você encontrará um arquivo .csv na pasta raiz `data` chamada [US-pumpkins.csv](../data/US-pumpkins.csv) que inclui 1757 linhas de dados sobre o mercado de abóboras, classificadas em agrupamentos por cidade. Estes são dados brutos extraídos dos [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuídos pelo Departamento de Agricultura dos Estados Unidos. - -### Preparando dados - -Estes dados são do domínio público. Ele pode ser baixado em muitos arquivos separados, por cidade, a partir do site USDA. Para evitar muitos arquivos separados, nós concatenamos todos os dados da cidade em uma planilha, assim nós já _preparamos_ os dados um pouco. A seguir, vamos dar uma olhada nos dados. - -### Os dados da abóbora - primeiras conclusões - -O que você nota sobre esses dados? Vocês já viram que há uma mistura de strings, números, espaços em branco e valores estranhos que você precisa entender. - -Que pergunta você pode fazer sobre esses dados, usando uma técnica de Regressão? E quanto a "Prever o preço de uma abóbora à venda durante um determinado mês". Observando novamente os dados, há algumas alterações que você precisa fazer para criar a estrutura de dados necessária para a tarefa. -## Exercício - analisar os dados da abóbora - -Vamos usar [Pandas](https://pandas.pydata.org/), (o nome significa `Python Data Analysis`) uma ferramenta muito útil para moldar dados, para analisar e preparar esses dados de abóbora. - -### Primeiro, verifique se há datas ausentes - -Primeiro, você precisará seguir as etapas para verificar se há datas ausentes: - -1. Converta as datas em um formato de mês (essas são datas americanas, portanto o formato é `MM/DD/AAAA`). -2. Extraia o mês para uma nova coluna. - -Abra o arquivo _notebook.ipynb_ no Visual Studio Code e importe a planilha para um novo quadro de dados do Pandas. - -1. Use a função `head()` para exibir as cinco primeiras linhas. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - Qual função você usaria para exibir as últimas cinco linhas? - -1. Verifique se há dados ausentes no banco de dados atual: - - ```python - pumpkins.isnull().sum() - ``` - - Faltam dados, mas talvez não seja importante para a tarefa em questão. - -1. Para facilitar o trabalho com seu banco de dados, solte várias de suas colunas, usando `drop()`, mantendo apenas as colunas necessárias: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### Segundo, determinar o preço médio da abóbora - -Pense sobre como determinar o preço médio de uma abóbora em um determinado mês. Que colunas você escolheria para esta tarefa? Dica: você precisará de 3 colunas. - -Solução: utilize a média das colunas `Preço Baixo` e Preço Alto` para preencher a nova coluna Preço e converta a coluna Data para mostrar apenas o mês. Felizmente, de acordo com a verificação acima, não há dados ausentes para datas ou preços. - -1. Para calcular a média, adicione o seguinte código: -2. - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅Sinta-se à vontade para imprimir quaisquer dados que você gostaria de verificar usando `print(month)`. - -3. Agora, copie seus dados convertidos em um novo dataframe Pandas: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - A impressão do seu dataframe mostrará um conjunto de dados limpo e organizado no qual você pode construir seu novo modelo de regressão. - -### Mas espere! Há algo estranho aqui - -Se você observar a coluna `Package`, as abóboras são vendidas em várias configurações diferentes. Algumas são vendidas em medidas de "1 1/9 bushel", e algumas em medidas de "1/2 bushel", algumas por abóbora, algumas por libra, e algumas em caixas grandes com larguras variadas. - -> Abóboras parecem muito difíceis de pesar consistentemente - -Analisando os dados originais, é interessante que qualquer coisa com `Unidade de Venda` igual a 'CADA' ou 'POR CAIXA' também tenha o tipo `Pacote` por polegada, por caixa ou 'cada'. As abóboras parecem ser muito difíceis de pesar consistentemente, então vamos filtrá-las selecionando apenas as abóboras com a cadeia "bushel" na coluna `Pacote`. - -1. Adicione um filtro na parte superior do arquivo, sob a importação .csv inicial: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Se você imprimir os dados agora, você pode ver que você está apenas recebendo as 415 ou mais linhas de dados contendo abóboras pelo bushel. - -### Mas espere! Há mais uma coisa a fazer - -Você notou que o montante de bushel varia por linha? Você precisa normalizar o preço para que você mostre o preço por bushel, então faça algumas contas para padronizá-lo. - -1. Adicione estas linhas após o bloco criar o dataframe 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) - ``` - -✅ De acordo com [O Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), o peso de um bushel depende do tipo de produto, pois é uma medida de volume. "Um bushel de tomates, por exemplo, deve pesar 56 libras... Folhas e verdes ocupam mais espaço com menos peso, então um alqueire de espinafre pesa apenas 20 libras." É tudo muito complicado! Não nos preocupemos em fazer uma conversão bushel-to-pound, e em vez disso o preço pelo bushel. Todo este estudo de bushels de abóboras, no entanto, vai para mostrar como é muito importante entender a natureza dos seus dados! - -Agora, você pode analisar o preço por unidade com base em sua medição de bushel. Se você imprimir os dados mais uma vez, poderá ver como eles são padronizados. - -Você notou que as abóboras vendidas pela metade do bushel são muito caras? Você pode descobrir por quê? Dica: abóboras pequenas são muito mais caras do que as grandes, provavelmente porque há muito mais delas por bushel, dado o espaço não utilizado tomado por uma grande abóbora de torta oca. - -## Estratégias de visualização - -Parte do papel do cientista de dados é demonstrar a qualidade e a natureza dos dados com os quais eles estão trabalhando. Para fazer isso, muitas vezes criam visualizações interessantes, ou gráficos, gráficos e gráficos, mostrando diferentes aspectos dos dados. Dessa forma, eles são capazes de mostrar visualmente relacionamentos e lacunas que de outra forma são difíceis de descobrir. - -Visualizações também podem ajudar a determinar a técnica de aprendizado de máquina mais apropriada para os dados. Um gráfico de dispersão que parece seguir uma linha, por exemplo, indica que os dados são um bom candidato para um exercício de regressão linear. - -Uma biblioteca de visualização de dados que funciona bem em notebooks Jupyter é [Matplotlib](https://matplotlib.org/) (que você também viu na lição anterior). - -> Obtenha mais experiência com visualização de dados em [estes tutoriais](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=university-15963-cxa). - -## Exercício - experimente com Matplotlib - -Tente criar alguns gráficos básicos para exibir o novo banco de dados que você acabou de criar. O que um gráfico de linha básica mostraria? - -1. Importar Matplotlib no topo do arquivo, sob a importação Pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -1. Execute novamente todo o bloco de anotações para atualizar. -1. Na parte inferior do notebook, adicione uma célula para plotar os dados como uma caixa: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Uma distribuição que mostra a relação preço/mês](../images/scatterplot.png) - -Será isto um enredo útil? Alguma coisa sobre isso o surpreende? - -Não é particularmente útil, uma vez que tudo o que apresenta nos seus dados como uma distribuição de pontos num determinado mês. - -### Tornar útil - -Para que os gráficos apresentem dados úteis, normalmente é necessário agrupar os dados de alguma forma. Vamos tentar criar um desenho onde o eixo Y mostre os meses e os dados demonstram a distribuição de dados. - -1. Adicionar uma célula para criar um gráfico de barras agrupado: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - -![Um gráfico de barras que mostra a relação preço/mês](../images/barchart.png) - -Esta é uma visualização de dados mais útil! Parece indicar que o preço mais alto para as abrigas ocorre em setembro e outubro. Isso atende às suas expetativas? Porque ou porque não? - -— - -## 🚀 desafio - -Explore os diferentes tipos de visualização que o Matplotlib oferece. Que tipos são mais apropriados para problemas de regressão? - -## [Questionário pós-palestra](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## Revisão e Estudo Automático - -Dê uma vista de olhos às muitas formas de visualizar dados. Disponibilize uma lista das várias bibliotecas e anote quais as melhores para determinados tipos de tarefas, por exemplo, visualizações 2D vs. visualizações 3D. O que você descobre? - -## Atribuição - -[A explorar visualização](assignment.md) diff --git a/2-Regression/2-Data/translations/README.zh-cn.md b/2-Regression/2-Data/translations/README.zh-cn.md deleted file mode 100644 index 215f7411..00000000 --- a/2-Regression/2-Data/translations/README.zh-cn.md +++ /dev/null @@ -1,203 +0,0 @@ -# 使用 Scikit-learn 构建回归模型:准备和可视化数据 - -![数据可视化信息图](../images/data-visualization.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [课前测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -## 介绍 - -既然你已经设置了开始使用 Scikit-learn 处理机器学习模型构建所需的工具,你就可以开始对数据提出问题了。当你处理数据并应用ML解决方案时,了解如何提出正确的问题以正确释放数据集的潜力非常重要。 - -在本课中,你将学习: - -- 如何为模型构建准备数据。 -- 如何使用 Matplotlib 进行数据可视化。 - -## 对你的数据提出正确的问题 - -你提出的问题将决定你将使用哪种类型的 ML 算法。你得到的答案的质量将在很大程度上取决于你的数据的性质。 - -查看为本课程提供的[数据](../data/US-pumpkins.csv)。你可以在 VS Code 中打开这个 .csv 文件。快速浏览一下就会发现有空格,还有字符串和数字数据的混合。还有一个奇怪的列叫做“Package”,其中的数据是“sacks”、“bins”和其他值的混合。事实上,数据有点乱。 - -事实上,得到一个完全准备好用于创建 ML 模型的开箱即用数据集并不是很常见。在本课中,你将学习如何使用标准 Python 库准备原始数据集。你还将学习各种技术来可视化数据。 - -## 案例研究:“南瓜市场” - -你将在 `data` 文件夹中找到一个名为 [US-pumpkins.csv](../data/US-pumpkins.csv) 的 .csv 文件,其中包含有关南瓜市场的 1757 行数据,已按城市排序分组。这是从美国农业部分发的[特种作物终端市场标准报告](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)中提取的原始数据。 - -### 准备数据 - -这些数据属于公共领域。它可以从美国农业部网站下载,每个城市有许多不同的文件。为了避免太多单独的文件,我们将所有城市数据合并到一个电子表格中,因此我们已经准备了一些数据。接下来,让我们仔细看看数据。 - -### 南瓜数据 - 早期结论 - -你对这些数据有什么看法?你已经看到了无法理解的字符串、数字、空格和奇怪值的混合体。 - -你可以使用回归技术对这些数据提出什么问题?“预测给定月份内待售南瓜的价格”怎么样?再次查看数据,你需要进行一些更改才能创建任务所需的数据结构。 - -## 练习 - 分析南瓜数据 - -让我们使用 [Pandas](https://pandas.pydata.org/),(“Python 数据分析” Python Data Analysis 的意思)一个非常有用的工具,用于分析和准备南瓜数据。 - -### 首先,检查遗漏的日期 - -你首先需要采取以下步骤来检查缺少的日期: - -1. 将日期转换为月份格式(这些是美国日期,因此格式为 `MM/DD/YYYY`)。 - -2. 将月份提取到新列。 - -在 Visual Studio Code 中打开 notebook.ipynb 文件,并将电子表格导入到新的 Pandas dataframe 中。 - -1. 使用 `head()` 函数查看前五行。 - - ```python - import pandas as pd - pumpkins = pd.read_csv('../../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ 使用什么函数来查看最后五行? - -2. 检查当前 dataframe 中是否缺少数据: - - ```python - pumpkins.isnull().sum() - ``` - - 有数据丢失,但可能对手头的任务来说无关紧要。 - -3. 为了让你的 dataframe 更容易使用,使用 `drop()` 删除它的几个列,只保留你需要的列: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### 然后,确定南瓜的平均价格 - -考虑如何确定给定月份南瓜的平均价格。你会为此任务选择哪些列?提示:你需要 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 dataframe 中: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - 打印出的 dataframe 将向你展示一个干净整洁的数据集,你可以在此数据集上构建新的回归模型。 - -### 但是等等!这里有点奇怪 - -如果你看看 `Package`(包装)一栏,南瓜有很多不同的配置。有的以 1 1/9 蒲式耳的尺寸出售,有的以 1/2 蒲式耳的尺寸出售,有的以每只南瓜出售,有的以每磅出售,有的以不同宽度的大盒子出售。 - -> 南瓜似乎很难统一称重方式 - -深入研究原始数据,有趣的是,任何 `Unit of Sale` 等于“EACH”或“PER BIN”的东西也具有每英寸、每箱或“每个”的 `Package` 类型。南瓜似乎很难采用统一称重方式,因此让我们通过仅选择 `Package` 列中带有字符串“蒲式耳”的南瓜来过滤它们。 - -1. 在初始 .csv 导入下添加过滤器: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - 如果你现在打印数据,你可以看到你只获得了 415 行左右包含按蒲式耳计算的南瓜的数据。 - -### 可是等等! 还有一件事要做 - -你是否注意到每行的蒲式耳数量不同?你需要对定价进行标准化,以便显示每蒲式耳的定价,因此请进行一些数学计算以对其进行标准化。 - -1. 在创建 new_pumpkins dataframe 的代码块之后添加这些行: - - ```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磅。” 这一切都相当复杂!让我们不要费心进行蒲式耳到磅的转换,而是按蒲式耳定价。然而,所有这些对蒲式耳南瓜的研究表明,了解数据的性质是多么重要! - -现在,你可以根据蒲式耳测量来分析每单位的定价。如果你再打印一次数据,你可以看到它是如何标准化的。 - -✅ 你有没有注意到半蒲式耳卖的南瓜很贵?你能弄清楚为什么吗?提示:小南瓜比大南瓜贵得多,这可能是因为考虑到一个大的空心馅饼南瓜占用的未使用空间,每蒲式耳的南瓜要多得多。 - -## 可视化策略 - -数据科学家的部分职责是展示他们使用的数据的质量和性质。为此,他们通常会创建有趣的可视化或绘图、图形和图表,以显示数据的不同方面。通过这种方式,他们能够直观地展示难以发现的关系和差距。 - -可视化还可以帮助确定最适合数据的机器学习技术。例如,似乎沿着一条线的散点图表明该数据是线性回归练习的良好候选者。 - -一个在 Jupyter notebooks 中运行良好的数据可视化库是 [Matplotlib](https://matplotlib.org/)(你在上一课中也看到过)。 - -> 在[这些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)中获得更多数据可视化经验。 - -## 练习 - 使用 Matplotlib 进行实验 - -尝试创建一些基本图形来显示你刚刚创建的新 dataframe。基本线图会显示什么? - -1. 在文件顶部导入 Matplotlib: - - ```python - import matplotlib.pyplot as plt - ``` - -2. 重新刷新以运行整个 notebook。 - -3. 在 notebook 底部,添加一个单元格以绘制数据: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![显示价格与月份关系的散点图](../images/scatterplot.png) - - 这是一个有用的图吗?有什么让你吃惊的吗? - - 它并不是特别有用,因为它所做的只是在你的数据中显示为给定月份的点数分布。 - -### 让它有用 - -为了让图表显示有用的数据,你通常需要以某种方式对数据进行分组。让我们尝试创建一个图,其中 y 轴显示月份,数据显示数据的分布。 - -1. 添加单元格以创建分组柱状图: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![显示价格与月份关系的柱状图](../images/barchart.png) - - 这是一个更有用的数据可视化!似乎表明南瓜的最高价格出现在 9 月和 10 月。这符合你的期望吗?为什么?为什么不? - ---- - -## 🚀挑战 - -探索 Matplotlib 提供的不同类型的可视化。哪种类型最适合回归问题? - -## [课后测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## 复习与自学 - -请看一下可视化数据的多种方法。列出各种可用的库,并注意哪些库最适合给定类型的任务,例如 2D 可视化与 3D 可视化。你发现了什么? - -## 任务 - -[探索可视化](./assignment.zh-cn.md) diff --git a/2-Regression/2-Data/translations/README.zh-tw.md b/2-Regression/2-Data/translations/README.zh-tw.md deleted file mode 100644 index d9795fd2..00000000 --- a/2-Regression/2-Data/translations/README.zh-tw.md +++ /dev/null @@ -1,203 +0,0 @@ -# 使用 Scikit-learn 構建回歸模型:準備和可視化數據 - -![數據可視化信息圖](../images/data-visualization.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [課前測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -## 介紹 - -既然你已經設置了開始使用 Scikit-learn 處理機器學習模型構建所需的工具,你就可以開始對數據提出問題了。當你處理數據並應用ML解決方案時,了解如何提出正確的問題以正確釋放數據集的潛力非常重要。 - -在本課中,你將學習: - -- 如何為模型構建準備數據。 -- 如何使用 Matplotlib 進行數據可視化。 - -## 對你的數據提出正確的問題 - -你提出的問題將決定你將使用哪種類型的 ML 算法。你得到的答案的質量將在很大程度上取決於你的數據的性質。 - -查看為本課程提供的[數據](../data/US-pumpkins.csv)。你可以在 VS Code 中打開這個 .csv 文件。快速瀏覽一下就會發現有空格,還有字符串和數字數據的混合。還有一個奇怪的列叫做「Package」,其中的數據是「sacks」、「bins」和其他值的混合。事實上,數據有點亂。 - -事實上,得到一個完全準備好用於創建 ML 模型的開箱即用數據集並不是很常見。在本課中,你將學習如何使用標準 Python 庫準備原始數據集。你還將學習各種技術來可視化數據。 - -## 案例研究:「南瓜市場」 - -你將在 `data` 文件夾中找到一個名為 [US-pumpkins.csv](../data/US-pumpkins.csv) 的 .csv 文件,其中包含有關南瓜市場的 1757 行數據,已按城市排序分組。這是從美國農業部分發的[特種作物終端市場標準報告](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)中提取的原始數據。 - -### 準備數據 - -這些數據屬於公共領域。它可以從美國農業部網站下載,每個城市有許多不同的文件。為了避免太多單獨的文件,我們將所有城市數據合並到一個電子表格中,因此我們已經準備了一些數據。接下來,讓我們仔細看看數據。 - -### 南瓜數據 - 早期結論 - -你對這些數據有什麽看法?你已經看到了無法理解的字符串、數字、空格和奇怪值的混合體。 - -你可以使用回歸技術對這些數據提出什麽問題?「預測給定月份內待售南瓜的價格」怎麽樣?再次查看數據,你需要進行一些更改才能創建任務所需的數據結構。 - -## 練習 - 分析南瓜數據 - -讓我們使用 [Pandas](https://pandas.pydata.org/),(「Python 數據分析」 Python Data Analysis 的意思)一個非常有用的工具,用於分析和準備南瓜數據。 - -### 首先,檢查遺漏的日期 - -你首先需要采取以下步驟來檢查缺少的日期: - -1. 將日期轉換為月份格式(這些是美國日期,因此格式為 `MM/DD/YYYY`)。 - -2. 將月份提取到新列。 - -在 Visual Studio Code 中打開 notebook.ipynb 文件,並將電子表格導入到新的 Pandas dataframe 中。 - -1. 使用 `head()` 函數查看前五行。 - - ```python - import pandas as pd - pumpkins = pd.read_csv('../../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ 使用什麽函數來查看最後五行? - -2. 檢查當前 dataframe 中是否缺少數據: - - ```python - pumpkins.isnull().sum() - ``` - - 有數據丟失,但可能對手頭的任務來說無關緊要。 - -3. 為了讓你的 dataframe 更容易使用,使用 `drop()` 刪除它的幾個列,只保留你需要的列: - - ```python - new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - ``` - -### 然後,確定南瓜的平均價格 - -考慮如何確定給定月份南瓜的平均價格。你會為此任務選擇哪些列?提示:你需要 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 dataframe 中: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - 打印出的 dataframe 將向你展示一個幹凈整潔的數據集,你可以在此數據集上構建新的回歸模型。 - -### 但是等等!這裏有點奇怪 - -如果你看看 `Package`(包裝)一欄,南瓜有很多不同的配置。有的以 1 1/9 蒲式耳的尺寸出售,有的以 1/2 蒲式耳的尺寸出售,有的以每只南瓜出售,有的以每磅出售,有的以不同寬度的大盒子出售。 - -> 南瓜似乎很難統一稱重方式 - -深入研究原始數據,有趣的是,任何 `Unit of Sale` 等於「EACH」或「PER BIN」的東西也具有每英寸、每箱或「每個」的 `Package` 類型。南瓜似乎很難采用統一稱重方式,因此讓我們通過僅選擇 `Package` 列中帶有字符串「蒲式耳」的南瓜來過濾它們。 - -1. 在初始 .csv 導入下添加過濾器: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - 如果你現在打印數據,你可以看到你只獲得了 415 行左右包含按蒲式耳計算的南瓜的數據。 - -### 可是等等! 還有一件事要做 - -你是否註意到每行的蒲式耳數量不同?你需要對定價進行標準化,以便顯示每蒲式耳的定價,因此請進行一些數學計算以對其進行標準化。 - -1. 在創建 new_pumpkins dataframe 的代碼塊之後添加這些行: - - ```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磅。」 這一切都相當復雜!讓我們不要費心進行蒲式耳到磅的轉換,而是按蒲式耳定價。然而,所有這些對蒲式耳南瓜的研究表明,了解數據的性質是多麽重要! - -現在,你可以根據蒲式耳測量來分析每單位的定價。如果你再打印一次數據,你可以看到它是如何標準化的。 - -✅ 你有沒有註意到半蒲式耳賣的南瓜很貴?你能弄清楚為什麽嗎?提示:小南瓜比大南瓜貴得多,這可能是因為考慮到一個大的空心餡餅南瓜占用的未使用空間,每蒲式耳的南瓜要多得多。 - -## 可視化策略 - -數據科學家的部分職責是展示他們使用的數據的質量和性質。為此,他們通常會創建有趣的可視化或繪圖、圖形和圖表,以顯示數據的不同方面。通過這種方式,他們能夠直觀地展示難以發現的關系和差距。 - -可視化還可以幫助確定最適合數據的機器學習技術。例如,似乎沿著一條線的散點圖表明該數據是線性回歸練習的良好候選者。 - -一個在 Jupyter notebooks 中運行良好的數據可視化庫是 [Matplotlib](https://matplotlib.org/)(你在上一課中也看到過)。 - -> 在[這些教程](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott)中獲得更多數據可視化經驗。 - -## 練習 - 使用 Matplotlib 進行實驗 - -嘗試創建一些基本圖形來顯示你剛剛創建的新 dataframe。基本線圖會顯示什麽? - -1. 在文件頂部導入 Matplotlib: - - ```python - import matplotlib.pyplot as plt - ``` - -2. 重新刷新以運行整個 notebook。 - -3. 在 notebook 底部,添加一個單元格以繪製數據: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![顯示價格與月份關系的散點圖](../images/scatterplot.png) - - 這是一個有用的圖嗎?有什麽讓你吃驚的嗎? - - 它並不是特別有用,因為它所做的只是在你的數據中顯示為給定月份的點數分布。 - -### 讓它有用 - -為了讓圖表顯示有用的數據,你通常需要以某種方式對數據進行分組。讓我們嘗試創建一個圖,其中 y 軸顯示月份,數據顯示數據的分布。 - -1. 添加單元格以創建分組柱狀圖: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![顯示價格與月份關系的柱狀圖](../images/barchart.png) - - 這是一個更有用的數據可視化!似乎表明南瓜的最高價格出現在 9 月和 10 月。這符合你的期望嗎?為什麽?為什麽不? - ---- - -## 🚀挑戰 - -探索 Matplotlib 提供的不同類型的可視化。哪種類型最適合回歸問題? - -## [課後測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## 復習與自學 - -請看一下可視化數據的多種方法。列出各種可用的庫,並註意哪些庫最適合給定類型的任務,例如 2D 可視化與 3D 可視化。你發現了什麽? - -## 任務 - -[探索可視化](./assignment.zh-tw.md) diff --git a/2-Regression/2-Data/translations/assignment.es.md b/2-Regression/2-Data/translations/assignment.es.md deleted file mode 100644 index a00afc8c..00000000 --- a/2-Regression/2-Data/translations/assignment.es.md +++ /dev/null @@ -1,9 +0,0 @@ -# Explorando visualizaciones - -Hay varias librerías diferentes que están disponibles para la visualización de los datos. Cree algunas visualizaciones utilizando los datos de 'Pumpkin' en esta lección con _matplotlib_ y _seaborn_ en un cuaderno de muestra. ¿Con qué bibliotecas es más fácil trabajar? - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita mejorar | -| -------- | --------- | -------- | ----------------- | -| | Se envía un cuaderno con dos exploraciones/visualizaciones | Se envía un cuaderno con una exploración/visualización | No se envía un cuaderno | diff --git a/2-Regression/2-Data/translations/assignment.it.md b/2-Regression/2-Data/translations/assignment.it.md deleted file mode 100644 index 14527fca..00000000 --- a/2-Regression/2-Data/translations/assignment.it.md +++ /dev/null @@ -1,9 +0,0 @@ -# Esplorazione delle visualizzazioni - -Sono disponibili diverse librerie per la visualizzazione dei dati. Creare alcune visualizzazioni utilizzando i dati della zucca in questa lezione con matplotlib e seaborn in un notebook di esempio. Con quali librerie è più facile lavorare? - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | --------- | -------- | ----------------- | -| | Viene inviato un notebook con due esplorazioni/visualizzazioni | Viene inviato un notebook con una esplorazione/visualizzazione | Non è stato inviato un notebook | diff --git a/2-Regression/2-Data/translations/assignment.ja.md b/2-Regression/2-Data/translations/assignment.ja.md deleted file mode 100644 index 09f344d6..00000000 --- a/2-Regression/2-Data/translations/assignment.ja.md +++ /dev/null @@ -1,9 +0,0 @@ -# ビジュアライゼーションの探求 - -データのビジュアライゼーションには、いくつかの異なるライブラリがあります。このレッスンのPumpkinデータを使って、matplotlibとseabornを使って、サンプルノートブックでいくつかのビジュアライゼーションを作ってみましょう。どのライブラリが作業しやすいでしょうか? - -## ルーブリック - -| 指標 | 模範的 | 適切 | 要改善 | -| -------- | --------- | -------- | ----------------- | -| | ノートブックには2つの活用法/可視化方法が示されている。 | ノートブックには1つの活用法/可視化方法が示されている。 | ノートブックが提出されていない。 | diff --git a/2-Regression/2-Data/translations/assignment.ko.md b/2-Regression/2-Data/translations/assignment.ko.md deleted file mode 100644 index 340ec4df..00000000 --- a/2-Regression/2-Data/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 시각화에 대해 알아봅시다 - -## 설명 - -데이터 시각화를 위한 다양한 라이브러리가 존재합니다. 이번 시간에는 matplotlib과 seaborn 라이브러리로 Pumpkin 데이터를 샘플 노트북(Jupyter Notebook)에 시각화해보시기 바랍니다. 둘 중 어느 라이브러리가 작업하기 더 쉽나요? - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ------------------------------------------------- | -------------------------------------------- | ------------ | -| | 두 가지의 다른 시각화 라이브러리를 사용한 노트북 제출 | 한 가지의 시각화 라이브러리를 사용한 노트북 제출 | 노트북 미제출 | diff --git a/2-Regression/2-Data/translations/assignment.pt-br.md b/2-Regression/2-Data/translations/assignment.pt-br.md deleted file mode 100644 index 835465c7..00000000 --- a/2-Regression/2-Data/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Explorando Visualizações - -## Instruções - -Existem muitas bibliotecas disponíveis para visualização de dados. Crie algumas visualizações usando o conjunto de dados sobre abóboras nesta lição usando matplotlib e seaborn em um _notebook_. Quais bibliotecas são mais fáceis de usar? - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | --------- | -------- | ----------------- | -| | Um _notebook_ foi submetido com duas explorações/visualizações | Um _notebook_ foi submetido com uma exploração/visualização | Nenhum _notebook_ foi submetido | diff --git a/2-Regression/2-Data/translations/assignment.pt.md b/2-Regression/2-Data/translations/assignment.pt.md deleted file mode 100644 index 27672b9e..00000000 --- a/2-Regression/2-Data/translations/assignment.pt.md +++ /dev/null @@ -1,9 +0,0 @@ -# Exploração de Visualizações - -Existem várias bibliotecas diferentes que estão disponíveis para visualização de dados. Crie algumas visualizações utilizando os dados da Abóbora nesta lição com matplotlib e nascidos num caderno de amostras. Com que bibliotecas é mais fácil de trabalhar? - -## Rubrica - - Critérios | exemplares | Adequado | Necessidades de Melhoria | -| -------- | --------- | -------- | ----------------- | -| | Um caderno é submetido com duas explorações/visualizações| Um caderno é submetido com uma exploração/visualizações | Um caderno não é submetido | diff --git a/2-Regression/2-Data/translations/assignment.zh-cn.md b/2-Regression/2-Data/translations/assignment.zh-cn.md deleted file mode 100644 index 0829fd3a..00000000 --- a/2-Regression/2-Data/translations/assignment.zh-cn.md +++ /dev/null @@ -1,9 +0,0 @@ -# 探索数据可视化 - -有好几个库都可以进行数据可视化。用 matplotlib 和 seaborn 对本课中涉及的 Pumpkin 数据集创建一些数据可视化的图标。并思考哪个库更容易使用? - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| -------- | --------- | -------- | ----------------- | -| | 提交了含有两种探索可视化方法的 notebook 工程文件 | 提交了只包含有一种探索可视化方法的 notebook 工程文件 | 没提交 notebook 工程文件 | diff --git a/2-Regression/2-Data/translations/assignment.zh-tw.md b/2-Regression/2-Data/translations/assignment.zh-tw.md deleted file mode 100644 index 7eb2e9a5..00000000 --- a/2-Regression/2-Data/translations/assignment.zh-tw.md +++ /dev/null @@ -1,9 +0,0 @@ -# 探索數據可視化 - -有好幾個庫都可以進行數據可視化。用 matplotlib 和 seaborn 對本課中涉及的 Pumpkin 數據集創建一些數據可視化的圖標。並思考哪個庫更容易使用? - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| -------- | --------- | -------- | ----------------- | -| | 提交了含有兩種探索可視化方法的 notebook 工程文件 | 提交了只包含有一種探索可視化方法的 notebook 工程文件 | 沒提交 notebook 工程文件 | diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md deleted file mode 100644 index ecc3a95e..00000000 --- a/2-Regression/3-Linear/translations/README.es.md +++ /dev/null @@ -1,342 +0,0 @@ -# Construye un modelo de regresión usando Scikit-learn: regresión de dos formas - -![Infografía de regresión lineal vs polinomial](./images/linear-polynomial.png) -> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13?loc=es) - -> ### [¡Esta lección está disponible en R!](../solution/R/lesson_3-R.ipynb) - -### Introducción - -Hasta ahora has explorado qué es la regresión con datos obtenidos del conjunto de datos de los precios de las calabazas que usaremos en esta lección. También los has visualizado usando Matplotlib. - -Ahora estás listo para profundizar en la regresión para el aprendizaje automático. En esta lección, aprenderás más acerca de dos tipos de regresión: _regresión básica lineal_ y _regresión polinomial_, junto con algo de matemáticas fundamental a estas técnicas. - -> A lo largo de este plan de estudios, asumimos un conocimiento mínimo de matemáticas, y buscamos hacerlo accesible para los estudiantes provenientes de otros campos, así que pon atención a las notas, 🧮 llamados, diagramas, y otras herramientas de estudio para ayudar en la comprensión. - -### Prerrequisitos - -Ahora, debes estar familiarizado con la estructura de los datos de las calabazas que ya examinamos. Puedes encontrarlos precargados y pre-limpiados en el archivo _notebook.ipynb_ de esta lección. En el archivo, el precio de la calabaza se muestra por fanega en un nuevo dataframe. Asegúrate que puedas ejecutar estos notebooks en kernels en Visual Studio Code. - -### Preparación - -Como recordatorio, estás cargando estos datos para hacer preguntas aceca de estos. - -- ¿Cuándo es el mejor momento para comprar calabazas? -- ¿Qué precio puedo esperar para el caso de calabazas miniatura? -- ¿Debería comprarlas en cestos de media fanega o por caja de 1 1/9 de fanega? - -Sigamos profundizando en estos datos. - -En la lección anterior, creaste un dataframe de Pandas y lo poblaste con parte del conjunto de datos original, estandarizando el precio de la fanega. Haciéndolo, sólo fuiste capaz de reunir alrededor de 400 puntos de datos y sólo para los meses de otoño. - -Da un vistazo a los datos que fueron precargados en el notebook que acompaña a esta lección. Los datos están precargados con un gráfico de dispersión inicial para mostrar datos mensuales. Quizá podamos obtener un poco más de detalle acerca de la naturaleza de los datos limpiándolos más. - -## Un línea de regresión lineal - -Como aprendiste en la lección 1, el objetivo de un ejercicio de regresión lineal es ser capaz de graficar una línea para: - -- **Mostrar la relación de las variables**. Mostrar la relación entre las variables -- **Realizar predicciones**. Hacer predicciones precisas en donde un nuevo punto de datos caería en relación a esa línea. - -Es típico de la **regresión de mínimos cuadrados** el dibujar este tipo de línea. El término 'mínimos cuadrados' significa que todos los puntos de datos rodeando la línea de regresión se elevan al cuadrado y luego se suman. Idealmente, la suma final es tan pequeña como sea posible, porque queremos un número bajo de errores, o `mínimos cuadrados`. - -Lo hacemos así ya que queremos modelar una línea que tiene la menor distancia acumulada de todos nuestros puntos de datos. También elevamos al cuadrado los términos antes de sumarlos ya que nos interesa su magnitud en lugar de su dirección. - -> **🧮 Muéstrame las matemáticas** -> -> Esta línea, llamada la _línea de mejor ajuste_ puede ser expresada por [una ecuación](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` es la 'variable explicativa'. `Y` es la 'variable dependiente'. La pendiente de la línea es `b` y `a` es la intercepción en y, la cual se refiere a el valor de `Y` cuando `X = 0`. -> ->![Calcula la pendiente](../images/slope.png) -> -> Primero, calcula la pendiente `b`. Infografía de [Jen Looper](https://twitter.com/jenlooper) -> -> En otras palabras, y refiriéndose a nuestra pregunta original de los datos de las calabazas: "predice el precio de una calabaza por fanega por mes", `X` se referiría al precio e `Y` a el mes de venta. -> ->![Completa la ecuación](../images/calculation.png) -> -> Calcula el valor de Y. ¡Si estás pagando alrededor de $4, debe ser Abril! Infografía de [Jen Looper](https://twitter.com/jenlooper) -> -> Las matemáticas que calculan la línea deben demostrar la pendiente de la línea, la cual también depende de la intercepción, o dónde `Y` se sitúa cuando `X = 0`. -> -> Puedes observar el método de cálculo para estos valores en el sitio web [las matemáticas son divertidas](https://www.mathsisfun.com/data/least-squares-regression.html). También visita esta [calculadora de mínimos cuadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para ver cómo los valores de los números impactan la línea. - -## Correlación - -Un término más a entender es el **coeficiente de correlación** entre las variables dadas X e Y. Usando un gráfico de dispersión, puedes visualizar rápidamente este coeficiente. Un gráfico con puntos de datos dispersos en una línea ordenada tienen alta correlación, pero un gráfico con puntos de datos dispersos por todas partes entre X e Y tienen baja correlación. - -Un buen modelo de regresión lineal será aquél que tenga un alto Coeficiente de Correlación (más cercano a 1 que a 0) usando el métro de regresión de mínimos cuadrados con una línea de regresión. - -✅ Ejecuta el notebook que acompaña esta lección y mira el gráfico de Ciudad a Precio. ¿Los datos asociados de Ciudad a Precio para las ventas de calabaza parecen tener correlación alta o baja, de acuerdo a tu interpretación visual del gráfico de dispersión? - -## Prepara tus datos para la regresión - -Ahora que tienes conocimiento de las matemáticas detrás de este ejercicio, crea un modelo de regresión para ver si puedes predecir cuál de los paquetes de calabazas tendrá los mejores precios. Alguien comprando calabazas para una parcela de calabazas en días festivos quisiera esta información para ser capaz de optimizar sus compras de paquetes de calabazas para la parcela. - -Ya que usarás Scikit-learn, no hay razón para hacer esto a mano (¡aunque podrías!). En el bloque principal de procesamientos de datos de tu notebook de lección, agrega una biblioteca de Scikit-learn para convertir automáticamente todos los datos de cadena a números: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -Si ahora miras el nuevo dataframe `new_pumpkins`, ves que todas las cadenas ahora son numéricas. ¡Esto te dificulta el leer pero lo hace más comprensible para Scikit-learn! -Ahora puedes tomar decisiones más informadas (no sólo basado en un gráfico de dispersión) acerca de los datos que mejor se ajustan a la regresión. - -Intenta encontrar una buena correlación entre dos puntos de tus datos para construir potencialmente un buen modelo predictivo. Como resultado, sólo hay correlación débil entre la Ciudad y el Precio. - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -Sin embargo, existe una correlación un poco mejor entre el Paquete y su Precio. Esto tiene sentido, ¿cierto? Normalmente, entre más grande sea la caja producida, mayor será el precio. - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -Una buena pregunta a realizar de estos datos, sería: '¿Qué precio puedo esperar de un paquete de calabazas dado?' - -Construyamos este modelo de regresión - -## Construyendo un modelo lineal - -Antes de construir tu modelo, haz una limpieza más a tus datos. Elimina cualquier dato nulo y verifica una vez cómo lucen los datos. - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -Luego, crea un dataframe nuevo de este conjunto mínimo e imprímelo: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. Ahora puedes asignar tus datos de coodenadas X e Y: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` - -✅ ¿Qué está pasando aquí? Estás usando [notación slice de Python](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) para crear arreglos y así poblar `X` e `Y`. - -2. Lo siguiente es, iniciar las rutinas de construcción del modelo de regresión: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Debido a que la correlación nos es particularmente buena, el modelo producido no es terriblemente preciso. - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. Puedes visualziar la línea dibujada en el proceso: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - - ![Un gráfico de dispersión mostrando la relación paquete a precio](../images/linear.png) - -4. Prueba el modelo contra una variedad hipotética: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - El precio devuelto para esta Variedad mitológica es: - - ```output - array([[33.15655975]]) - ``` - -Ese número hace sentido, si la lógica de la regresión lineal es cierta. - -🎃 Felicidades, acabas de crear un modelo que puede ayudara predecir el precio de unas pocas variedades de calabazas. Tu parcela de calabazas de días festivos serán hermosas. ¡Pero probablemente puedes crear un mejor modelo! - -## Regresión polinomial - -Otro tipo de regresión lineal es la regresión polinomial. Mientras algunas veces existe una relación lineal entre las variables - entre más grande el volumen de la calabaza, mayor el precio - algunas veces estas relaciones no pueden ser graficadas como un plano o línea recta. - -✅ Aquí hay [más ejemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de los datos que podrían usar regresión polinomial. - -Da un vistazo más a la relación entre Variedad a Precio en la gráfica anterior. ¿Parece que el gráfico de dispersión debería ser analizado necesariamente por una línea recta? Quizá no. En este caso, puedes probar la regresión polinomial. - -✅ Los polinomios son expresiones matemáticas que pueden consistir en una o más variables y coeficientes. - -La regresión polinomial crea una línea curva para ajustar mejor los datos no lineales. - -1. Recreemos un dataframe poblado con un segmento de los datos originales de las calabazas: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -Una buena forma de visualizar las correlaciones entre los datos en los dataframes es mostrarlos en una gráfica 'coolwarm': - -2. Usa el método `Background_gradient()` con `coolwarm` como valor de su argumento: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - - Este código crea un mapa de calor: - ![Un mapa de calor mostrando correlación de datos](../images/heatmap.png) - -Viendo esta gráfica, puedes visualizar la buena correlación entre Paquete y Precio. Así que deberías ser capaz de crear un modelo algo mejor que el anterior. - -### Crea un pipeline - -Scikit-learn incluye una API útil para crear modelos de regresión polinomail - la [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) `make_pipeline`. Se crea un 'pipeline' que es una cadena de estimadores. En este caso, el pipeline incluye características polinomiales, o predicciones que forman un camino no lineal. - -1. Construye las columnas X e Y: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. Crea el pipeline llamando al método `make_pipeline()`: - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### Crea una secuencia - -En este punto, necesitas crear un nuevo dataframe con datos _ordenados_ para que así el pipeline pueda crear una secuencia. - -Agrega el siguiente código: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -Creaste un nuevo dataframe llamando `pd.DataFrame`. Luego ordenaste los valores al llamar `sort_values()`. Finalmente creaste un gráfico polinomial: - -![Un gráfico polinomial mostrando la relación paquete a precio](../images/polynomial.png) - -Puedes ver una línea curva que se ajusta mejor a tus datos. - -Revisemos la precisión del modelo: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - ¡Y voila! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -¡Es mejor! Intenta predecir un precio: - -### Haz un predicción - -¿Podemos ingresar un nuevo valor y obtener una predicción? - -Llama a `predict()` para hacer una predicción: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - - Se te presenta esta predicción: - - ```output - array([[46.34509342]]) - ``` - -¡Hace sentido, dado el gráfico! Y, si este es un mejor modelo que el anterior, viendo los mismos datos, ¡necesitas presupuestar para estas calabazas más caras! - -🏆 ¡Bien hecho! Creaste dos modelos de regresión en una lección. En la sección final de regresión, aprenderás acerca de la regresión logística para determinar categorías. - ---- - -## 🚀Desafío - -Prueba variables diferentes en este notebook para ver cómo la correlación corresponde a la precisión del modelo. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14?loc=es) - -## Revisión y auto-estudio - -En esta lección aprendimos acerca de la regresión lineal. Existen otros tipos importantes de regresión. Lee acerca de las técnicas paso a paso (Stepwise), cresta (Ridge), Lazo y red elástica (Lasso and Elasticnet). Un buen curso para estudiar para aprender más es el [Curso de aprendizaje estadístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## Asignación - -[Construye un modelo](assignment.es.md) diff --git a/2-Regression/3-Linear/translations/README.id.md b/2-Regression/3-Linear/translations/README.id.md deleted file mode 100644 index 66c8908b..00000000 --- a/2-Regression/3-Linear/translations/README.id.md +++ /dev/null @@ -1,335 +0,0 @@ -# Bangun sebuah model regresi dengan Scikit-learn: regresi dua arah - -![Infografik regresi linear vs polinomial](../images/linear-polynomial.png) -> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Kuis pra-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) -### Pembukaan - -Selama ini kamu telah menjelajahi apa regresi itu dengan data contoh yang dikumpulkan dari *dataset* harga labu yang kita akan gunakan terus sepanjang pelajaran ini. Kamu juga telah memvisualisasikannya dengan Matplotlib. - -Sekarang kamu sudah siap terjun ke dalam regresi untuk ML. Dalam pelajaran ini, kamu akan belajar lebih tentang dua jenis regresi: _regresi linear sederhana_ dan _regresi polinomial_ serta sedikit matematika yang mendasari kedua teknik ini. - -> Sepanjang kurikulum ini, kami mengasumsi kamu punya pengetahuan matematika yang minim dan ingin tetap membuat pelajaran ini terjangkau bagi murid-murid dari bidang-bidang lain. Jadi perhatikan catatan, 🧮 info, diagram, dan alat-alat belajar lainnya untuk membantu pemahaman. - -### Prasyarat - -Kamu harusnya sudah terbiasa sekarang dengan struktur data labu yang kita sedang teliti. Datanya harusnya sudah dimuat dan dibersihkan dalam file _notebook.ipynb_ pelajaran ini. Dalam file ini, harga labu ditampilkan per bushel dalam *dataframe* yang bari. Pastikan kamu bisa menjalankan *notebook-notebook* ini di *kernels* di Visual Studio Code. - -### Persiapan - -Ingat, kamu sedang memuat data ini untuk menanyakan pertanyaan darinya. - -- Kapankah waktu terbaik untuk membeli labu? -- Saya kira-kira harus bayar berapa untuk satu kotak labu mini? -- Apa saya sebaiknya membelinya dalam keranjang-keranjang setengah bushel atau kardus-kardus 1 1/9 bushel? -Ayo terjun lebih lagi ke dalam data ini. - -Dalam pelajaran sebelumnya, kamu membuat sebuah *dataframe* Pandas, mengisinya dengan sebagian *dataset* orisinal, dan menstandarisasi harganya per bushel. Tetapi, dengan begitu, kamu hanya dapat mengumpul sekitar 400 titik data dan itupun hanya untuk bulan-bulan musim gugur. - -Lihatlah data yang kita sudah muat dalam *notebook* yang terlampir pelajaran ini. Data telah di muat dan sebuah petak sebar inisial telah digambar untuk menunjukkan data per bulan. Mungkin kita bisa dapat lebih banyak detail tentang sifat datanya dengan membersih-bersihkannya lebih lagi. - -## Sebuah garis regresi linear - -Seperti yang kamu telah belajar dalam Pelajaran 1, tujuan sebuah latihan regresi linear adalah untuk dapat menggambar sebuah garis untuk: - -- **Menunjukkan hubungan antar-variabel**. Menunjukkan hubungan antara variabel-variabel. -- **Membuat prediksi**. Membuat prediksi akurat tentang di mana sebuah titik data baru akan terletak berhubungan dengan garis tersebut. - -Dalam kasus **Regresi Kuadrat Terkecil (_Least-Squares Regression_)**, biasanya garis seperti ini digambar. Istilah 'kuadrat terkecil' berarti semua titik data yang mengitari garis regresi dikuadratkan dan dijumlahkan. Secara ideal, harusnya jumlah akhirnya sekecil mungkin, karena kita ingin kesalahan (error) terkecil, alias `kuadrat terkecil`. - -Kita melakukan itu sebab kita ingin memodelkan sebuah garis yang jarak kumulatifnya dari semua titik data itu sekecil mungkin. Kita juga mengkuadratkan setiap suku sebelum dijumlahkan karena kita fokus pada besarannya daripada arahnya. - -> **🧮 Tunjukkan matematikanya kepadaku** -> -> Garis ini, dipanggil _garis yang paling cocok_, dapat diekspresikan dalam [sebuah persamaan](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` adalah 'variabel penerang'. `Y` adalah 'variabel dependen'. Gradien garisnya adalah `b`, dan `a` adalah titik potong sumbu y yaitu nilai `Y` saat `X = 0`. -> ->![hitunglah gradiennya](../images/slope.png) -> -> Pertama, hitunglah gradien `b`. Infografik oleh [Jen Looper](https://twitter.com/jenlooper) -> -> Dalam kata lain, dan berhubungan pula dengan pertanyaan awal data labu kita "prediksikan harga satu bushel labu setiap bulan", `X` merujuk pada harganya, sedangkan `Y` akan merujuk pada bulan penjualan. -> ->![lengkapilah persamaan ini](../images/calculation.png) -> -> Hitunglah nilai Y. Kalau harganya $4, artinya pasti April! Infografik oleh [Jen Looper](https://twitter.com/jenlooper) -> -> Matematika yang mengkalkulasi garis ini harus mendemonstrasikan gradien garisnya yang juga tergantung pada titik potongnya pada sumbu y, alias apa `Y`-nya saat `X = 0`. -> -> Kamu bisa melihat metode menghitung nilai-nilai ini di situs internet [*Math is Fun* (Matematika Itu Menyenangkan)](https://www.mathsisfun.com/data/least-squares-regression.html). Kunjungi [kalkulator kuadrat terkecil ini](https://www.mathsisfun.com/data/least-squares-calculator.html) juga untuk melihat bagaimana nomor-nomor ini mengubah garisnya. - -## Korelasi - -Satu lagi yang harus dipahami adalah **Koefisien Korelasi** antara variabel X dan Y yang tersedia. Menggunakan sebuah petak sebar, kamu bisa memvisualisasi korelasi ini dengan cepat. Sebuah grafik dengan titik-titik data yang tersebar rapi seperti sebuah garis mempunyai korelasi yang tinggi. Namun, sebuah grafik dengan titik-titik data yang tersebar di mana-mana antara X dan Y mempunyai korelasi yang rendah. - -Sebuah model regresi linear yang bagus akan mempunyai Koefisien Korelasi yang tinggi (lebih dekat ke 1 daripada ke 0) menggunakan metode Regresi Kuadrat Terkecil dengan sebuah garis regresi. - -✅ Jalankan *notebook* yang terlampir dalam pelajaran ini dan lihatlah petak sebar City (Kota) ke Price (Harga). Apa data yang menghubungkan City ke Price untuk penjualan labu mempunyai korelasi yang tinggi atau rendah kelihatannya? - - -## Siapkan datamu untuk regresi - -Sekarang dengan pemahamanmu mengenai matematika di balik latihan ini, buatlah sebuah model regresi untuk melihat apa kamu bisa memprediksi paket labu yang mana yang harganya paling baik. Seorang pembeli labu akan ingin mengetahui informasi ini untuk mengoptimasi pembelian labu mereka. - -Karena kamu akan menggunakan Scikit-learn, tidak usah mengerjakan ini dengan tangan (walaupun bisa sih!). Dalam blok memrosesan data utama *notebook*-mu untuk pelajaran ini, tambahlah sebuah *library* dari Scikit-learn untuk mengkonversi semua data *string* menjadi nomor secara otomatis: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -Kalau kamu sekarang simak *dataframe* new_punkins, kamu akan lihat bahwa semua *string* sudah dijadikan nomor. Ini lebih susah untuk kita baca, tetapi jauh lebih mudah untuk Scikit-learn! -Sekarang kamu bisa membuat lebih banyak keputusan berakal (tidak hanya tebak-tebak dari petak sebarnya) tentang data yang paling cocok untuk regresi. - -Coba cari sebuah korelasi bagus antara dua titik data yang berpotensi untuk membangun sebuah model prediksi yang baik. Ternyata, hanya ada korelasi yang lemah antara City dan Price: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -Meskipun begitu, ada korelasi yang sedikit lebih baik antara Package (Paket) dan Price (Harga). Masuk akal juga kan? Biasanya, lebih besar kardusnya, lebih mahal harganya. - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -Sebuah pertanyaan bagus untuk ditanyakan dari data ini adalah "Kira-kira harga sebuah paket labu berapa?" - -Mari membangun sebuah model regresi - -## Membangun sebuah model linear - -Sebelum membangun modelmu, rapikanlah datamu sekali lagi. Buanglah sebuah data nil (null) dan periksalah sekali lagi datanya kelihatannya seperti apa. - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -Lalu, buatlah sebuah *dataframe* baru dari set minimal ini dan *print*: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. Sekarang kamu bisa menetapkan data koordinat X dan y-mu: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` -✅ Apa yang sedang terjadi di sini? Kamu sedang menggunakan [notasi perpotongan Python (*Python slice notation*)](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) untuk membuat dua *array* untuk mengisi `X` dan `y`. - -1. Selanjutnya, mulailah rutin pembangunan model: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Karena korelasinya tidak begitu baik, model yang didapatkan tidak terlalu akurat. - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -2. Kamu bisa memvisualisasi garis yang digambarkan dalam proses ini: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - ![Sebuah petak sebar yang menunjukkan hubungan antara paket dan harga](../images/linear.png) - -3. Ujilah modelnya dengan sebuah jenis labu hipotetis: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - Harga yang dihasilkan untuk jenis labu mitologis ini adalah: - - ```output - array([[33.15655975]]) - ``` - -Nomor itu masuk akal jikalau logika garis regresinya benar. - -🎃 Selamat, kamu baru saja membuat sebuah model yang bisa membantu memprediksi harga beberapa jenis labu. Namun, kamu masih bisa membuatnya lebih baik! - -## Regresi polinomial - -Jenis lain regresi linear adalah regresi polinomial. Walaupun kadangkali ada hubungan linear antara variabel-variabel — lebih besar volume labunya, lebih tinggi harganya — kadangkali hubungan-hubungan ini tidak bisa digambarkan sebagai sebuah bidang atau garis lurus. - -✅ Ini ada [beberapa contoh data lain](https://online.stat.psu.edu/stat501/lesson/9/9.8) yang bisa menggunakan regresi polinomial - -Tengok kembali hubungan antara Variety (Jenis) dan Price (Harga) dalam grafik sebelumnya. Apa petak sebar ini terlihat seperti harus dianalisis dengan sebuah garis lurus? Mungkin tidak. Kali ini, kamu bisa mencoba regresi polinomial. - -✅ Polinomial adalah sebuah pernyataan matematika yang mempunyai satu atau lebih variabel dan koefisien disusun menjadi suku-suku. - -Regresi polinomial menghasilkan sebuah garis lengkung supaya lebih cocok dengan data non-linear. - -1. Mari kita membuat sebuah *dataframe* yang diisi sebuah segmen dari data orisinal labu: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -Sebuah cara bagus untuk memvisualisasi korelasi-korelasi antara data dalam *dataframe-dataframe* adalah untuk menampilkannya dalam sebuah peta '*coolwarm*' (panas-dingin): - -2. Gunakan fungsi `Background_gradient()` dengan `coolwarm` sebagai argumennya: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - This code creates a heatmap: - Kode ini membuat sebuah peta panas - ![Sebuah peta panas yang menunjukkan korelasi data](../images/heatmap.png) - -Melihat peta ini, kamu bisa memvisualisasikan korelasi yang baik antara Package dan Price. Jadi kamu seharusnya bisa membuat sebuah model yang lebih baik daripada yang sebelumnya. - -### Buatlah sebuah *pipeline* - -Scikit-learn mempunyai sebuah API yang berguna untuk membangun model regresi polinomial — [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) `make_pipeline`. Sebuah '*pipeline*' adalah sebuah rantai penaksir. Dalam kasus ini, *pipeline* ini mempunyai fitur-fitur polinomial, atau prediksi-prediksi yang membuat garis non-linear. - -1. Bangunlah kolom X dan y: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. Buatlah *pipeline*-nya dengan fungsi `make_pipeline()`: - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### Buatlah sebuah barisan - -Di sini, kamu harus membuat sebuah *dataframe* baru dengan data yang _berurutan_ supaya *pipeline*-nya bisa membuat sebuah barisan. - -Tambahlah kode ini: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -Kamu membuat sebuah *dataframe* baru dengan fungsi `pd.DataFrame`. Lalu kamu mengurutkan isinya dengan fungsi `sort_values()`. Akhirnya kamu membuat sebuah bagan polinomial: - -![Sebuah bagan polinomial yang menunjukkan hubungan antara paket dan harga](../images/polynomial.png) - -Kamu bisa melihat garis lengkungnya yang lebih cocok terhadap datamu. - -Ayo periksa akurasi modelnya: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Nah! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -Itu bagus! Coba memprediksi harga: - -### Buatlah sebuah prediksi - -Apa kita bisa memberi input dan dapat sebuah prediksi? - -Pakai fungsi `predict()` untuk membuat prediksi: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - Kamu diberi prediksi ini: - - ```output - array([[46.34509342]]) - ``` - -Itu sangat masuk akal dengan bagan sebelumnya! Selain itu, jika ini model lebih baik daripada yang sebelumnya dengan data ini, kamu bisa siap untuk labu-labu yang lebih mahal ini! - -🏆 Mantap sekali! Kamu membuat dua model regresi dalam satu pelajaran. Dalam bagian terakhir mengenai regresi, kamu akan belajar tentang regresi logistik untuk pengkategorisasian. - ---- -## 🚀 Tantangan - -Coba-cobalah variabel-variabel yang lain di *notebook* ini untuk melihat bagaimana korelasi berhubungan dengan akurasi model. - -## [Kuis pasca-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## Review & Pembelajaran Mandiri - -Dalam pelajaran ini kita belajar tentang regresi linear. Ada banyak jenis regresi lain yang penting pula. Bacalah tentang teknik *Stepwise*, *Ridge*, *Lasso*, dan *Elasticnet*. [Kursus Pembelajaran Statistik Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) juga baik untuk belajar lebih lanjut. - -## Tugas - -[Buatlah sebuah model](../assignment.md) diff --git a/2-Regression/3-Linear/translations/README.it.md b/2-Regression/3-Linear/translations/README.it.md deleted file mode 100644 index dce65d9a..00000000 --- a/2-Regression/3-Linear/translations/README.it.md +++ /dev/null @@ -1,339 +0,0 @@ -# Costruire un modello di regressione usando Scikit-learn: regressione in due modi - -![Infografica di regressione lineare e polinomiale](../images/linear-polynomial.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/?loc=it) - -### Introduzione - -Finora si è esplorato cos'è la regressione con dati di esempio raccolti dall'insieme di dati relativo ai prezzi della zucca, che verrà usato in questa lezione. Lo si è anche visualizzato usando Matplotlib. - -Ora si è pronti per approfondire la regressione per machine learning. In questa lezione si imparerà di più su due tipi di regressione: _regressione lineare di base_ e _regressione polinomiale_, insieme ad alcuni dei calcoli alla base di queste tecniche. - -> In questo programma di studi, si assume una conoscenza minima della matematica, e si cerca di renderla accessibile agli studenti provenienti da altri campi, quindi si faccia attenzione a note, 🧮 didascalie, diagrammi e altri strumenti di apprendimento che aiutano la comprensione. - -### Prerequisito - -Si dovrebbe ormai avere familiarità con la struttura dei dati della zucca che si sta esaminando. Lo si può trovare precaricato e prepulito nel file _notebook.ipynb_ di questa lezione. Nel file, il prezzo della zucca viene visualizzato per bushel (staio) in un nuovo dataframe. Assicurasi di poter eseguire questi notebook nei kernel in Visual Studio Code. - -### Preparazione - -Come promemoria, si stanno caricando questi dati in modo da porre domande su di essi. - -- Qual è il momento migliore per comprare le zucche? -- Che prezzo ci si può aspettare da una cassa di zucche in miniatura? -- Si devono acquistare in cestini da mezzo bushel o a scatola da 1 1/9 bushel? Si continua a scavare in questi dati. - -Nella lezione precedente, è stato creato un dataframe Pandas e si è popolato con parte dell'insieme di dati originale, standardizzando il prezzo per lo bushel. In questo modo, tuttavia, si sono potuti raccogliere solo circa 400 punti dati e solo per i mesi autunnali. - -Si dia un'occhiata ai dati precaricati nel notebook di accompagnamento di questa lezione. I dati sono precaricati e viene tracciato un grafico a dispersione iniziale per mostrare i dati mensili. Forse si può ottenere qualche dettaglio in più sulla natura dei dati pulendoli ulteriormente. - -## Una linea di regressione lineare - -Come si è appreso nella lezione 1, l'obiettivo di un esercizio di regressione lineare è essere in grado di tracciare una linea per: - -- **Mostrare le relazioni tra variabili**. -- **Fare previsioni**. Fare previsioni accurate su dove cadrebbe un nuovo punto dati in relazione a quella linea. - -È tipico della **Regressione dei Minimi Quadrati** disegnare questo tipo di linea. Il termine "minimi quadrati" significa che tutti i punti dati che circondano la linea di regressione sono elevati al quadrato e quindi sommati. Idealmente, quella somma finale è la più piccola possibile, perché si vuole un basso numero di errori, o `minimi quadrati`. - -Lo si fa perché si vuole modellare una linea che abbia la distanza cumulativa minima da tutti i punti dati. Si esegue anche il quadrato dei termini prima di aggiungerli poiché interessa la grandezza piuttosto che la direzione. - -> **🧮 Mostrami la matematica** -> -> Questa linea, chiamata _linea di miglior adattamento_ , può essere espressa da [un'equazione](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` è la "variabile esplicativa". `Y` è la "variabile dipendente". La pendenza della linea è `b` e `a` è l'intercetta di y, che si riferisce al valore di `Y` quando `X = 0`. -> -> ![calcolare la pendenza](../images/slope.png) -> -> Prima, calcolare la pendenza `b`. Infografica di [Jen Looper](https://twitter.com/jenlooper) -> -> In altre parole, facendo riferimento alla domanda originale per i dati sulle zucche: "prevedere il prezzo di una zucca per bushel per mese", `X` si riferisce al prezzo e `Y` si riferirisce al mese di vendita. -> -> ![completare l'equazione](../images/calculation.png) -> -> Si calcola il valore di Y. Se si sta pagando circa $4, deve essere aprile! Infografica di [Jen Looper](https://twitter.com/jenlooper) -> -> La matematica che calcola la linea deve dimostrare la pendenza della linea, che dipende anche dall'intercetta, o dove `Y` si trova quando `X = 0`. -> -> Si può osservare il metodo di calcolo per questi valori sul sito web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) . Si visiti anche [questo calcolatore dei minimi quadrati](https://www.mathsisfun.com/data/least-squares-calculator.html) per vedere come i valori dei numeri influiscono sulla linea. - -## Correlazione - -Un altro termine da comprendere è il **Coefficiente di Correlazione** tra determinate variabili X e Y. Utilizzando un grafico a dispersione, è possibile visualizzare rapidamente questo coefficiente. Un grafico con punti dati sparsi in una linea ordinata ha un'alta correlazione, ma un grafico con punti dati sparsi ovunque tra X e Y ha una bassa correlazione. - -Un buon modello di regressione lineare sarà quello che ha un Coefficiente di Correlazione alto (più vicino a 1 rispetto a 0) utilizzando il Metodo di Regressione dei Minimi Quadrati con una linea di regressione. - -✅ Eseguire il notebook che accompagna questa lezione e guardare il grafico a dispersione City to Price. I dati che associano la città al prezzo per le vendite di zucca sembrano avere una correlazione alta o bassa, secondo la propria interpretazione visiva del grafico a dispersione? - - -## Preparare i dati per la regressione - -Ora che si ha una comprensione della matematica alla base di questo esercizio, si crea un modello di regressione per vedere se si può prevedere quale pacchetto di zucche avrà i migliori prezzi per zucca. Qualcuno che acquista zucche per una festa con tema un campo di zucche potrebbe desiderare che queste informazioni siano in grado di ottimizzare i propri acquisti di pacchetti di zucca per il campo. - -Dal momento che si utilizzerà Scikit-learn, non c'è motivo di farlo a mano (anche se si potrebbe!). Nel blocco di elaborazione dati principale del notebook della lezione, aggiungere una libreria da Scikit-learn per convertire automaticamente tutti i dati di tipo stringa in numeri: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -Se si guarda ora il dataframe new_pumpkins, si vede che tutte le stringhe ora sono numeriche. Questo rende più difficile la lettura per un umano ma molto più comprensibile per Scikit-learn! -Ora si possono prendere decisioni più consapevoli (non solo basate sull'osservazione di un grafico a dispersione) sui dati più adatti alla regressione. - -Si provi a trovare una buona correlazione tra due punti nei propri dati per costruire potenzialmente un buon modello predittivo. A quanto pare, c'è solo una debole correlazione tra la città e il prezzo: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -Tuttavia, c'è una correlazione leggermente migliore tra il pacchetto e il suo prezzo. Ha senso, vero? Normalmente, più grande è la scatola dei prodotti, maggiore è il prezzo. - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -Una buona domanda da porre a questi dati sarà: "Che prezzo posso aspettarmi da un determinato pacchetto di zucca?" - -Si costruisce questo modello di regressione - -## Costruire un modello lineare - -Prima di costruire il modello, si esegue un altro riordino dei dati. Si eliminano tutti i dati nulli e si controlla ancora una volta che aspetto hanno i dati. - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -Quindi, si crea un nuovo dataframe da questo set minimo e lo si stampa: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. Ora si possono assegnare i dati delle coordinate X e y: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` - -Cosa sta succedendo qui? Si sta usando [la notazione slice Python](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) per creare array per popolare `X` e `y`. - -2. Successivamente, si avvia le routine di creazione del modello di regressione: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Poiché la correlazione non è particolarmente buona, il modello prodotto non è molto accurato. - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. Si può visualizzare la linea tracciata nel processo: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - - ![Un grafico a dispersione che mostra il rapporto tra pacchetto e prezzo](../images/linear.png) - -4. Si testa il modello contro una varietà ipotetica: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - Il prezzo restituito per questa varietà mitologica è: - - ```output - array([[33.15655975]]) - ``` - -Quel numero ha senso, se la logica della linea di regressione è vera. - -🎃 Congratulazioni, si è appena creato un modello che può aiutare a prevedere il prezzo di alcune varietà di zucche. La zucca per le festività sarà bellissima. Ma probabilmente si può creare un modello migliore! - -## Regressione polinomiale - -Un altro tipo di regressione lineare è la regressione polinomiale. Mentre a volte c'è una relazione lineare tra le variabili - più grande è il volume della zucca, più alto è il prezzo - a volte queste relazioni non possono essere tracciate come un piano o una linea retta. - -✅ Ecco [alcuni altri esempi](https://online.stat.psu.edu/stat501/lesson/9/9.8) di dati che potrebbero utilizzare la regressione polinomiale - -Si dia un'altra occhiata alla relazione tra Varietà e Prezzo nel tracciato precedente. Questo grafico a dispersione deve essere necessariamente analizzato da una linea retta? Forse no. In questo caso, si può provare la regressione polinomiale. - -✅ I polinomi sono espressioni matematiche che possono essere costituite da una o più variabili e coefficienti - -La regressione polinomiale crea una linea curva per adattare meglio i dati non lineari. - -1. Viene ricreato un dataframe popolato con un segmento dei dati della zucca originale: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -Un buon modo per visualizzare le correlazioni tra i dati nei dataframe è visualizzarli in un grafico "coolwarm": - -2. Si usa il metodo `Background_gradient()` con `coolwarm` come valore dell'argomento: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - - Questo codice crea una mappa di calore: - ![Una mappa di calore che mostra la correlazione dei dati](../images/heatmap.png) - -Guardando questo grafico, si può visualizzare la buona correlazione tra Pacchetto e Prezzo. Quindi si dovrebbe essere in grado di creare un modello un po' migliore dell'ultimo. - -### Creare una pipeline - -Scikit-learn include un'API utile per la creazione di modelli di regressione polinomiale: l'[API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) `make_pipeline`. Viene creata una 'pipeline' che è una catena di stimatori. In questo caso, la pipeline include caratteristiche polinomiali o previsioni che formano un percorso non lineare. - -1. Si costruiscono le colonne X e y: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. Si crea la pipeline chiamando il metodo `make_pipeline()` : - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### Creare una sequenza - -A questo punto, è necessario creare un nuovo dataframe con dati _ordinati_ in modo che la pipeline possa creare una sequenza. - -Si aggiunge il seguente codice: - -```python -df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) -df.sort_values(by='x',inplace = True) -points = pd.DataFrame(df).to_numpy() - -plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) -plt.xlabel('Package') -plt.ylabel('Price') -plt.scatter(X,y, color="black") -plt.show() -``` - -Si è creato un nuovo dataframe chiamato `pd.DataFrame`. Quindi si sono ordinati i valori chiamando `sort_values()`. Alla fine si è creato un grafico polinomiale: - -![Un grafico polinomiale che mostra la relazione tra pacchetto e prezzo](../images/polynomial.png) - -Si può vedere una linea curva che si adatta meglio ai dati. - -Si verifica la precisione del modello: - -```python -accuracy_score = pipeline.score(X_train,y_train) -print('Model Accuracy: ', accuracy_score) -``` - -E voilà! - -```output -Model Accuracy: 0.8537946517073784 -``` - -Ecco, meglio! Si prova a prevedere un prezzo: - -### Fare una previsione - -E possibile inserire un nuovo valore e ottenere una previsione? - -Si chiami `predict()` per fare una previsione: - -```python -pipeline.predict( np.array([ [2.75] ]) ) -``` - -Viene data questa previsione: - -```output -array([[46.34509342]]) -``` - -Ha senso, visto il tracciato! Se questo è un modello migliore del precedente, guardando gli stessi dati, si deve preventivare queste zucche più costose! - -Ben fatto! Sono stati creati due modelli di regressione in una lezione. Nella sezione finale sulla regressione, si imparerà a conoscere la regressione logistica per determinare le categorie. - ---- - -## 🚀 Sfida - -Testare diverse variabili in questo notebook per vedere come la correlazione corrisponde all'accuratezza del modello. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/?loc=it) - -## Revisione e Auto Apprendimento - -In questa lezione si è appreso della regressione lineare. Esistono altri tipi importanti di regressione. Leggere le tecniche Stepwise, Ridge, Lazo ed Elasticnet. Un buon corso per studiare per saperne di più è il [corso Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## Compito - -[Costruire un modello](assignment.it.md) diff --git a/2-Regression/3-Linear/translations/README.ja.md b/2-Regression/3-Linear/translations/README.ja.md deleted file mode 100644 index 8a99b71a..00000000 --- a/2-Regression/3-Linear/translations/README.ja.md +++ /dev/null @@ -1,334 +0,0 @@ -# Scikit-learnを用いた回帰モデルの構築: 回帰を行う2つの方法 - -![線形回帰 vs 多項式回帰 のインフォグラフィック](../images/linear-polynomial.png) -> [Dasani Madipalli](https://twitter.com/dasani_decoded) によるインフォグラフィック -## [講義前のクイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) -### イントロダクション - -これまで、このレッスンで使用するカボチャの価格データセットから集めたサンプルデータを使って、回帰とは何かを探ってきました。また、Matplotlibを使って可視化を行いました。 - -これで、MLにおける回帰をより深く理解する準備が整いました。このレッスンでは、2種類の回帰について詳しく説明します。基本的な線形回帰 (_basic linear regression_)と多項式回帰 (_polynomial regression_)の2種類の回帰について、その基礎となる数学を学びます。 - -> このカリキュラムでは、最低限の数学の知識を前提とし、他の分野の学生にも理解できるようにしていますので、理解を助けるためのメモ、🧮吹き出し、図などの学習ツールをご覧ください。 - -### 事前確認 - -ここでは、パンプキンデータの構造について説明しています。このレッスンの_notebook.ipynb_ファイルには、事前に読み込まれ、整形されたデータが入っています。このファイルでは、カボチャの価格がブッシェル単位で新しいデータフレームに表示されています。 これらのノートブックを、Visual Studio Codeのカーネルで実行できることを確認してください。 - -### 準備 - -忘れてはならないのは、データを読み込んだら問いかけを行うことです。 - -- カボチャを買うのに最適な時期はいつですか? -- ミニカボチャ1ケースの価格はどのくらいでしょうか? -- 半ブッシェルのバスケットで買うべきか、1 1/9ブッシェルの箱で買うべきか。 - -データを掘り下げていきましょう。 - -前回のレッスンでは、Pandasのデータフレームを作成し、元のデータセットの一部を入力して、ブッシェル単位の価格を標準化しました。しかし、この方法では、約400のデータポイントしか集めることができず、しかもそれは秋の期間のものでした。 - -このレッスンに付属するノートブックで、あらかじめ読み込んでおいたデータを見てみましょう。データが事前に読み込まれ、月毎のデータが散布図として表示されています。データをもっと綺麗にすることで、データの性質をもう少し知ることができるかもしれません。 - -## 線形回帰 - -レッスン1で学んだように、線形回帰の演習では、以下のような線を描けるようになることが目標です。 - -- **変数間の関係を示す。** -- **予測を行う。** 新しいデータポイントが、その線のどこに位置するかを正確に予測することができる。 - -このような線を描くことは、**最小二乗回帰 (Least-Squares Regression)** の典型的な例です。「最小二乗」という言葉は、回帰線を囲むすべてのデータポイントとの距離が二乗され、その後加算されることを意味しています。理想的には、最終的な合計ができるだけ小さくなるようにします。これはエラーの数、つまり「最小二乗」の値を小さくするためです。 - -これは、すべてのデータポイントからの累積距離が最小となる直線をモデル化したいためです。また、方向ではなく大きさに注目しているので、足す前に項を二乗します。 - -> **🧮 Show me the math** -> -> この線は、_line of best fit_ と呼ばれ、[方程式](https://en.wikipedia.org/wiki/Simple_linear_regression) で表すことができます。 -> -> ``` -> Y = a + bX -> ``` -> -> `X`は「説明変数」です。`Y`は「目的変数」です。`a`は切片で`b`は直線の傾きを表します。`X=0`のとき、`Y`の値は切片`a`となります。 -> ->![傾きの計算](../images/slope.png) -> -> はじめに、傾き`b`を計算してみます。[Jen Looper](https://twitter.com/jenlooper) によるインフォグラフィック。 -> -> カボチャのデータに関する最初の質問である、「月毎のブッシェル単位でのカボチャの価格を予測してください」で言い換えてみると、`X`は価格を、`Y`は販売された月を表しています。 -> ->![方程式の計算](../images/calculation.png) -> -> Yの値を計算してみましょう。$4前後払っているなら、4月に違いありません![Jen Looper](https://twitter.com/jenlooper) によるインフォグラフィック。 -> -> 直線を計算する数学は、直線の傾きを示す必要がありますが、これは切片、つまり「X = 0」のときに「Y」がどこに位置するかにも依存します。 -> -> これらの値の計算方法は、[Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) というサイトで見ることができます。また、[this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) では、値が線にどのような影響を与えるかを見ることができます。 - -## 相関関係 - -もう一つの理解すべき用語は、与えられたXとYの変数間の**相関係数 (Correlation Coefficient)** です。散布図を使えば、この係数をすぐに可視化することができます。データポイントがきれいな直線上に散らばっているプロットは、高い相関を持っていますが、データポイントがXとYの間のあらゆる場所に散らばっているプロットは、低い相関を持っています。 - -良い線形回帰モデルとは、最小二乗法によって求めた回帰線が高い相関係数 (0よりも1に近い)を持つものです。 - -✅ このレッスンのノートを開いて、「都市と価格」の散布図を見てみましょう。散布図の視覚的な解釈によると、カボチャの販売に関する「都市」と「価格」の関連データは、相関性が高いように見えますか、それとも低いように見えますか? - -## 回帰に用いるデータの準備 - -この演習の背景にある数学を理解したので、回帰モデルを作成して、どのパッケージのカボチャの価格が最も高いかを予測できるかどうかを確認してください。休日のパンプキンパッチ用にパンプキンを購入する人は、パッチ用のパンプキンパッケージの購入を最適化するために、この情報を必要とするかもしれません。 - -ここではScikit-learnを使用するので、手作業で行う必要はありません。レッスンノートのメインのデータ処理ブロックに、Scikit-learnのライブラリを追加して、すべての文字列データを自動的に数字に変換します。 - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -new_pumpkinsデータフレームを見ると、すべての文字列が数値になっているのがわかります。これにより、人が読むのは難しくなりましたが、Scikit-learnにとってはとても分かりやすくなりました。 -これで、回帰に最も適したデータについて、(散布図を見ただけではなく)より高度な判断ができるようになりました。 - -良い予測モデルを構築するために、データの2点間に良い相関関係を見つけようとします。その結果、「都市」と「価格」の間には弱い相関関係しかないことがわかりました。 - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -しかし、パッケージと価格の間にはもう少し強い相関関係があります。これは理にかなっていると思いますか?通常、箱が大きければ大きいほど、価格は高くなります。 - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -このデータに対する良い質問は、次のようになります。「あるカボチャのパッケージの価格はどのくらいになるか?」 - -この回帰モデルを構築してみましょう! - -## 線形モデルの構築 - -モデルを構築する前に、もう一度データの整理をしてみましょう。NULLデータを削除し、データがどのように見えるかをもう一度確認します。 - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -そして、この最小セットから新しいデータフレームを作成し、それを出力します。 - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. これで、XとYの座標データを割り当てることができます。 - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` -✅ ここでは何をしていますか? Pythonの[スライス記法](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) を使って、`X`と`y`の配列を作成しています。 - -2. 次に、回帰モデル構築のためのルーチンを開始します。 - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 相関関係があまり良くないので、生成されたモデルもあまり正確ではありません。 - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. 今回の過程で描かれた線を可視化します。 - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - ![パッケージと価格の関係を表す散布図](../images/linear.png) - -4. 架空の値に対してモデルをテストする。 - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - この架空の値に対して、以下の価格が返されます。 - - ```output - array([[33.15655975]]) - ``` - -回帰の線が正しく引かれていれば、その数字は理にかなっています。 - -🎃 おめでとうございます!数種類のカボチャの価格を予測するモデルを作成しました。休日のパンプキンパッチは美しいものになるでしょう。でも、もっと良いモデルを作れるかもしれません。 - -## 多項式回帰 - -線形回帰のもう一つのタイプは、多項式回帰です。時には変数の間に直線的な関係 (カボチャの量が多いほど、価格は高くなる)があることもありますが、これらの関係は、平面や直線としてプロットできないこともあります。 - -✅ 多項式回帰を使うことができる、[いくつかの例](https://online.stat.psu.edu/stat501/lesson/9/9.8) を示します。 - -先ほどの散布図の「品種」と「価格」の関係をもう一度見てみましょう。この散布図は、必ずしも直線で分析しなければならないように見えますか?そうではないかもしれません。このような場合は、多項式回帰を試してみましょう。 - -✅ 多項式とは、1つ以上の変数と係数で構成される数学的表現である。 - -多項式回帰では、非線形データをよりよく適合させるために曲線を作成します。 - -1. 元のカボチャのデータの一部を入力したデータフレームを作成してみましょう。 - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -データフレーム内のデータ間の相関関係を視覚化するには、「coolwarm」チャートで表示するのが良いでしょう。 - -2. `Background_gradient()` メソッドの引数に `coolwarm` を指定して使用します。 - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - -  このコードはヒートマップを作成します。 - ![データの相関関係を示すヒートマップ](../images/heatmap.png) - -このチャートを見ると、「パッケージ」と「価格」の間に正の相関関係があることが視覚化されています。つまり、前回のモデルよりも多少良いモデルを作ることができるはずです。 - -### パイプラインの作成 - -Scikit-learnには、多項式回帰モデルを構築するための便利なAPIである`make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) が用意されています。「パイプライン」は推定量の連鎖で作成されます。今回の場合、パイプラインには多項式の特徴量、非線形の経路を形成する予測値が含まれます。 - -1. X列とy列を作ります。 - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. `make_pipeline()` メソッドを呼び出してパイプラインを作成します。 - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### 系列の作成 - -この時点で、パイプラインが系列を作成できるように、ソートされたデータで新しいデータフレームを作成する必要があります。 - -以下のコードを追加します。 - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -`pd.DataFrame` を呼び出して新しいデータフレームを作成しました。次に`sort_values()` を呼び出して値をソートしました。最後に多項式のプロットを作成しました。 - -![パッケージと価格の関係を示す多項式のプロット](../images/polynomial.png) - -よりデータにフィットした曲線を確認することができます。 - -モデルの精度を確認してみましょう。 - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - これで完成です! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -いい感じです!価格を予測してみましょう。 - -### 予測の実行 - -新しい値を入力し、予測値を取得できますか? - -`predict()` メソッドを呼び出して、予測を行います。 - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - 以下の予測結果が得られます。 - - ```output - array([[46.34509342]]) - ``` - -プロットを見てみると、納得できそうです!そして、同じデータを見て、これが前のモデルよりも良いモデルであれば、より高価なカボチャのために予算を組む必要があります。 - -🏆 お疲れ様でした!1つのレッスンで2つの回帰モデルを作成しました。回帰に関する最後のセクションでは、カテゴリーを決定するためのロジスティック回帰について学びます。 - ---- -## 🚀チャレンジ - -このノートブックでいくつかの異なる変数をテストし、相関関係がモデルの精度にどのように影響するかを確認してみてください。 - -## [講義後クイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## レビュー & 自主学習 - -このレッスンでは、線形回帰について学びました。回帰には他にも重要な種類があります。Stepwise、Ridge、Lasso、Elasticnetなどのテクニックをご覧ください。より詳しく学ぶには、[Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) が良いでしょう。 - -## 課題 - -[モデル構築](./assignment.ja.md) diff --git a/2-Regression/3-Linear/translations/README.ko.md b/2-Regression/3-Linear/translations/README.ko.md deleted file mode 100644 index de898562..00000000 --- a/2-Regression/3-Linear/translations/README.ko.md +++ /dev/null @@ -1,338 +0,0 @@ -# Scikit-learn을 사용한 regression 모델 만들기: regression 2가지 방식 - -![Linear vs polynomial regression infographic](.././images/linear-polynomial.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -### 소개 - -지금까지 이 강의에서 사용할 호박 가격 데이터셋에서 모은 샘플 데이터로 regression이 무엇인지 찾아보았습니다. Matplotlib을 사용하여 시각화했습니다. - -이제 ML의 regression에 대하여 더 깊게 파고 들 준비가 되었습니다. 이 강의에서, 2가지 타입의 regression에 대해 배웁니다: 이 기술의 기반이 되는 수학의 일부와 함께, _basic linear regression_ 과 _polynomial regression_. - - -> 이 커리큘럼 대부분에 걸쳐서, 수학에 대한 최소한의 지식을 가정하고, 다른 필드에서 온 학생들이 수학에 접근할 수 있도록 노력하므로, 이해를 돕기 위하여 노트, 🧮 callouts, 다이어그램과 기타 학습 도구를 찾아보세요. - -### 필요한 조건 - -지금즈음 조사하고 있던 호박 데이터의 구조에 익숙해집니다. 이 강의의 _notebook.ipynb_ 파일에서 preloaded와 pre-cleaned된 것을 찾을 수 있습니다. 파일에서, 호박 가격은 새로운 데이터프레임에서 bushel per로 보여집니다. Visual Studio Code의 커널에서 이 노트북을 실행할 수 있는 지 확인합니다. - -### 준비하기 - -참고하자면, 이러한 질문을 물어보기 위해서 이 데이터를 불러오고 있습니다. - -- 호박을 사기 좋은 시간은 언제인가요? -- 작은 호박 케이스의 가격은 얼마인가요? -- half-bushel 바구니 또는 1 1/9 bushel 박스로 사야 하나요? - -이 데이터로 계속 파봅시다. - -이전 강의에서, Pandas 데이터프레임을 만들고 원본 데이터셋의 일부를 채웠으며, bushel로 가격을 표준화했습니다. 그렇게 했지만, 가을에만 400개의 데이터 포인트를 모을 수 있었습니다. - -이 강의에 첨부된 notebook에서 미리 불러온 데이터를 봅시다. 데이터를 미리 불러오고 초기 scatterplot(산점도)이 월 데이터를 보여주도록 차트로 만듭니다. 더 정리하면 데이터의 특성에 대하여 조금 더 자세히 알 수 있습니다. - -## Linear regression 라인 - -1 강의에서 배웠던 것처럼, linear regression 연습의 목표는 라인을 그릴 수 있어야 합니다: - -- **변수 관계 보이기**. 변수 사이 관게 보이기 -- **예상하기**. 새로운 데이터 포인트가 라인과 관련해서 어디에 있는지 정확하게 예측합니다. - -이런 타입의 선을 그리는 것은 **Least-Squares Regression** 의 전형적입니다. 'least-squares'이라는 말은 regression 라인을 두른 모든 데이터 포인트가 제곱된 다음에 더하는 것을 의미합니다. 이상적으로, 적은 수의 오류, 또는 `least-squares`를 원하기 때문에, 최종 합계는 가능한 작아야 합니다. - -모든 데이터 포인트에서 누적 거리가 가장 짧은 라인을 모델링하기 원합니다. 방향보다 크기에 관심있어서 항을 더하기 전에 제곱합니다. - -> **🧮 Show me the math** -> -> _line of best fit_ 이라고 불리는 이 선은, [an equation](https://en.wikipedia.org/wiki/Simple_linear_regression)으로 표현할 수 있습니다: -> -> ``` -> Y = a + bX -> ``` -> -> `X` 는 '독립(설명) 변수'입니다. `Y`는 '종속 변수'입니다. 라인의 기울기는 `b`이고 `a`는 y-절편이며, `X = 0`일 떄 `Y`의 값을 나타냅니다. -> ->![calculate the slope](../images/slope.png) -> -> 우선, 기울기 `b`를 구합니다. Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> 즉, 호박의 원본 질문을 참조해봅니다 : "predict the price of a pumpkin per bushel by month", `X`는 가격을 나타내고 `Y`는 판매한 달을 나타냅니다. -> ->![complete the equation](../images/calculation.png) -> -> Y의 값을 구합니다. 만약 4달러 정도 준다면, 4월만 가능합니다! Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> 라인을 구하는 수학은 절편, 또는 `X = 0`일 때 `Y`가 위치한 곳에 따라, 달라지는 라인의 기울기를 볼 수 있어야 합니다. -> -> [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) 웹사이트에서 값을 구하는 방식을 지켜볼 수 있습니다. 그리고 [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html)를 찾아가서 숫자 값이 라인에 어떤 영향을 주는 지 볼 수 있습니다. - -## 상관 관계 - -이해할 하나의 용어는 주어진 X와 Y 변수 사이의 **Correlation Coefficient**입니다. scatterplot(산점도)를 사용해서, 이 계수를 빠르게 시각화할 수 있습니다. 데이터 포인트를 깔끔한 라인으로 흩어 둔 plot은 상관 관계가 높지만, 데이터 포인트가 X와 Y 사이 어디에나 흩어진 plot은 상관 관계가 낮습니다. - -좋은 linear regression 모델은 regression 라인과 같이 Least-Squares Regression 방식을 사용하여 (0 보다 1에 가까운) 높은 상관 계수를 가집니다. - -✅ 이 강위에서 같이 주는 노트북을 실행하고 City to Price의 scatterplot (산점도)를 봅니다. scatterplot (산점도)의 시각적 해석에 따르면, 호박 판매를 도시와 가격에 연관지으면 데이터가 높거나 낮은 상관 관계를 보이는 것 같나요? - - -## Regression를 위한 데이터 준비하기 - -지금부터 연습에 기반한 수학을 이해했으므로, Regression 모델을 만들어서 호박 가격이 괜찮은 호박 패키지를 예측할 수 있는 지 봅니다. holiday pumpkin patch를 위해서 호박을 사는 사람은 이 정보로 패치용 호박 패키지를 최적으로 사고 싶습니다. - -Scikit-learn을 사용할 예정이기 때문에, (할 수 있지만) 손으로 직접 할 필요가 없습니다. 수업 노트북의 주 데이터-처리 블록에서, Scikit-learn의 라이브러리를 추가하여 모든 문자열 데이터를 숫자로 자동 변환합니다: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -new_pumpkins 데이터프레임을 보면, 모든 문자열은 이제 숫자로 보입니다. 직접 읽기는 힘들지만 Scikit-learn은 더욱 더 이해하기 쉽습니다! -지금부터 regression에 잘 맞는 데이터에 대하여 (scatterplot(산점도) 지켜보는 것 말고도) 교육적인 결정을 할 수 있습니다. - -잠재적으로 좋은 예측 모델을 만드려면 데이터의 두 포인트 사이 좋은 상관 관계를 찾아야 합니다. 도시와 가격 사이에는 약한 상관 관계만 있다는, 사실이 밝혀졌습니다: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -하지만 패키지와 가격 사이에는 조금 더 큰 상관 관계가 있습니다. 이해가 되나요? 일반적으로, 농산물 박스가 클수록, 가격도 높습니다. - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -데이터에 물어보기 좋은 질문은 이렇습니다: 'What price can I expect of a given pumpkin package?' - -regression 모델을 만들어봅니다 - -## linear 모델 만들기 - -모델을 만들기 전에, 데이터를 다시 정리합니다. Null 데이터를 드랍하고 데이터가 어떻게 보이는 지 다시 확인합니다. - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -그러면, 최소 셋에서 새로운 데이터프레임을 만들고 출력합니다: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. 이제 X와 Y 좌표 데이터를 대입합니다: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` -✅ 어떤 일이 생기나요? [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295)으로 `X` 와 `y`를 채울 배열을 생성합니다. - -2. 다음으로, regression model-building 루틴을 시작합니다: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 상관 관계가 좋지 못해서, 만들어진 모델은 딱히 정확하지 않습니다. - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. 프로세스에서 그려진 라인을 시각화할 수 있습니다: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - ![A scatterplot showing package to price relationship](.././images/linear.png) - -4. 가상의 Variety에 대하여 모델을 테스트합니다: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - 전설적 Variety의 반품된 가격입니다: - - ```output - array([[33.15655975]]) - ``` - -regression 라인의 로직이 사실이라면, 숫자는 의미가 있습니다. - -🎃 축하드립니다. 방금 전에 몇 호박 종의 가격 예측하는 모델을 만들었습니다. holiday pumpkin patch는 아릅답습니다. 하지만 더 좋은 모델을 만들 수 있습니다! - -## Polynomial regression - -linear regression의 또 다른 타입은 polynomial regression 입니다. 때때로 변수 사이 linear 관계가 있지만 - 호박 볼륨이 클수록, 가격이 높아지는 - 이런 관계를 평면 또는 직선으로 그릴 수 없습니다. - -✅ polynomial regression을 사용할 수 있는 데이터의 [some more examples](https://online.stat.psu.edu/stat501/lesson/9/9.8)입니다. - -이전 plot에서 다양성과 가격 사이 관계를 봅니다. scatterplot(산점도)이 반드시 직선으로 분석되어야 하는 것처럼 보이나요? 아마 아닐겁니다. 이 케이스에서, polynomial regression을 시도할 수 있습니다. - -✅ Polynomials는 하나 또는 더 많은 변수와 계수로 이루어 질 수 있는 수학적 표현식입니다. - -Polynomial regression은 nonlinear 데이터에 더 맞는 곡선을 만듭니다. - -1. 원본 호박 데이터의 세그먼트로 채워진 데이터프레임을 다시 만듭니다: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -데이터프레임의 데이터 사이 상관 관계를 시각화하는 좋은 방식은 'coolwarm' 차트에 보여주는 것입니다: - -2. 인수 값으로 `coolwarm`을 `Background_gradient()` 메소드에 사용합니다: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - 이 코드로 heatmap을 만듭니다: - ![A heatmap showing data correlation](.././images/heatmap.png) - -이 차트를 보고 있으면, 패키지와 가격 사이 좋은 상관 관계를 시각화할 수 있습니다. 그래서 이전의 모델보다 약간 좋게 만들 수 있어야 합니다. - -### 파이프라인 만들기 - -Scikit-learn에는 polynomial regression 모델을 만들 때 도움을 받을 수 있는 API가 포함되어 있습니다 - the `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline). 추정량의 체인인 'pipeline'이 만들어집니다. 이 케이스는, 파이프라인에 polynomial features, 또는 nonlinear 경로를 만들 예측이 포함됩니다. - -1. X 와 y 열을 작성합니다: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. `make_pipeline()` 메소드를 불러서 파이프라인을 만듭니다: - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### 시퀀스 만들기 - -이 지점에서, 파이프라인이 시퀀스를 만들 수 있도록 _sorted_ 데이터로 새로운 데이터프레임을 만들 필요가 있습니다. - -해당 코드를 추가합니다: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -`pd.DataFrame`을 불러서 새로운 데이터프레임을 만듭니다. 그러면 `sort_values()`도 불러서 값을 정렬합니다. 마지막으로 polynomial plot을 만듭니다: - -![A polynomial plot showing package to price relationship](.././images/polynomial.png) - -데이터에 더 맞는 곡선을 볼 수 있습니다. - -모델의 정확도를 확인합시다: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 그리고 짠! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -더 좋습니다! 가격을 예측해봅시다: - -### 예측하기 - -새로운 값을 넣고 예측할 수 있나요? - -`predict()`를 불러서 예측합니다: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - - 이렇게 예측됩니다: - - ```output - array([[46.34509342]]) - ``` - -주어진 plot에서, 의미가 있습니다! 그리고, 이전보다 모델이 더 좋아졌다면, 같은 데이터를 보고, 더 비싼 호박을 위한 예산이 필요합니다! - -🏆 좋습니다! 이 강의에서 두가지 regression 모델을 만들었습니다. regression의 마지막 섹션에서, 카테고리를 결정하기 위한 logistic regression에 대하여 배우게 됩니다. - ---- -## 🚀 도전 - -노트북에서 다른 변수를 테스트하면서 상관 관계가 모델 정확도에 어떻게 대응되는 지 봅니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## 검토 & 자기주도 학습 - -이 강의에서 Linear Regression에 대하여 배웠습니다. Regression의 다른 중요 타입이 있습니다. Stepwise, Ridge, Lasso 와 Elasticnet 기술에 대하여 읽어봅니다. 더 배우기 위해서 공부하기 좋은 코스는 [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)입니다. - -## 과제 - -[Build a Model](../assignment.md) \ No newline at end of file diff --git a/2-Regression/3-Linear/translations/README.pt-br.md b/2-Regression/3-Linear/translations/README.pt-br.md deleted file mode 100644 index fe3deadc..00000000 --- a/2-Regression/3-Linear/translations/README.pt-br.md +++ /dev/null @@ -1,342 +0,0 @@ -# Construindo um modelo de regressão usando Scikit-learn: regressão em dois modos - -![Infográfico de regressão linear versus polinomial](../images/linear-polynomial.png) - -> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13?loc=ptbr) - - -> ### [Esta liçao está disponível em R!](../solution/R/lesson_3-R.ipynb) - -### Introdução - -Até agora, você viu o que é regressão com dados de amostra coletados do conjunto de dados de preços de abóboras, usaremos esse conjunto de dados ao longo desta lição. Você também o visualizou usando Matplotlib. - -Você está pronto para mergulhar mais fundo na regressão para ML. Nesta lição, você aprenderá mais sobre dois tipos de regressão: _regressão linear básica_ e _regressão polinomial_, junto com um pouco da matemática que fundamenta essas duas técnicas. - -> Ao longo deste curso, assumimos um conhecimento mínimo de matemática e procuramos torná-lo acessível para alunos vindos de outras áreas, portanto, preste atenção às notas, 🧮 legendas, diagramas e outras ferramentas de aprendizagem para ajudar na compreensão. - -### Pré-requisito - -Você já deve saber mais ou menos como é a estrutura do conjunto de dados de abóboras que estávamos examinando. Você pode encontrá-lo já tratado no arquivo _notebook.ipynb_ desta lição. No arquivo, o preço da abóbora é exibido por bushel (aquela unidade de medida 😅) em um novo _dataframe_. Certifique-se de que você pode executar os _notebooks_ no Visual Studio Code. - -### Preparação - -Lembre-se de que você está carregando esses dados para produzir questionamentos a partir deles. - -- Qual é a melhor época para comprar abóboras? -- Que preço posso esperar de uma caixa de abóboras pequenas? -- Devo comprar abóboras em caixas de 1/2 bushel ou de 1 1/9? - -Vamos continuar investigando esses dados. - -Na lição anterior, você criou um _dataframe_ Pandas e o preencheu com parte do conjunto de dados original, padronizando o preço por bushel. Porém, ao fazer isso só foi possível reunir cerca de 400 pontos de dados e apenas para os meses de outono. - -Dê uma olhada nos dados que pré-carregamos no _notebook_ que acompanha esta lição. Os dados são pré-carregados e um gráfico de dispersão inicial é traçado para mostrar os dados do mês. Talvez possamos obter mais detalhes sobre a natureza dos dados fazendo uma limpeza. - -## Linha de regressão linear - -Como você aprendeu na [Lição 1](../../1-Tools/translations/README.pt-br.md), o objetivo de um exercício de regressão linear é ser capaz de traçar uma linha para: - -- **Mostrar relações entre variáveis**. -- **Fazer previsões**. Previsões sobre onde um novo ponto de dados ficaria em relação a linha. - -É típico da **Regressão de Mínimos Quadrados** traçar esse tipo de linha. O termo 'mínimos quadrados' significa que todos os pontos de dados ao redor da linha de regressão são quadrados e somados. Idealmente, essa soma final é a menor possível, porque queremos um baixo número de erros, ou `mínimos quadrados`. - -Fazemos isso porque queremos modelar uma linha que tenha a menor distância cumulativa de todos os nossos pontos de dados. Também elevamos os termos ao quadrado antes de adicioná-los, pois estamos preocupados com sua magnitude e não com sua direção. - -> **🧮 Me mostre a matemática** -> -> Esta linha, chamada de _linha de melhor ajuste_, pode ser expressa por [uma equação](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` é a 'variável explanatória'. `Y` é a 'variável dependente'. `b` é a inclinação da linha e `a` é a interseção de y, que se refere ao valor de `Y` quando `X = 0`. -> ->![Cálculo da inclinação](../images/slope.png) -> -> Primeiro, calculamos a inclinação `b` (Infográfico por [Jen Looper](https://twitter.com/jenlooper)). -> -> Em outras palavras, e se referindo à pergunta original sobre os dados das abóboras: "prever o preço mensal de uma abóbora por bushel", `X` seria o preço e `Y` o mês de venda. -> ->![Completando a equação](../images/calculation.png) -> -> Agora calcule o valor de `Y`. Se você está pagando cerca de US $ 4, então deve ser abril! (Infográfico por [Jen Looper](https://twitter.com/jenlooper)). -> -> Esse cálculo deve demonstrar a inclinação da linha, que também depende da interseção, ou onde `Y` está situado quando `X = 0`. -> -> Você pode observar o cálculo desses valores no site [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) (Matemática é divertida). Visite também [esta calculadora de mínimos quadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para observar como os valores dos números afetam a linha. - -## Correlação - -Mais um termo a ser entendido é o **Coeficiente de correlação** entre as variáveis `X` e `Y` fornecidas. Usando um gráfico de dispersão, você pode visualizar rapidamente esse coeficiente. Um gráfico com pontos de dados espalhados quase no mesmo formato da linha tem alta correlação, mas um gráfico com pontos de dados espalhados por toda parte entre `X` e `Y` tem uma correlação baixa. - -Um bom modelo de regressão linear será aquele que tiver um coeficiente de correlação alto (mais próximo de 1 do que 0) usando o método de regressão por mínimos quadrados com uma linha de regressão. - -✅Execute o _notebook_ desta lição e observe o gráfico de dispersão usando as colunas City (cidade) e Price (preço). Os dados que associam a cidade ao preço para vendas de abóboras parecem ter alta ou baixa correlação? - - -## Prepare seus dados para regressão - -Usando a matemática por trás deste exercício, crie um modelo de regressão para prever qual melhor preço de caixa de abóbora. Um comprador de abóbora vai querer saber desse tipo de informação para otimizar suas compras. - -Como você usará o Scikit-learn, não há razão para fazer isso manualmente (mas você pode!). No bloco principal do seu _notebook_, adicione a biblioteca do Scikit-learn para converter automaticamente todos os dados string em números: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -Se você olhar para o _dataframe_ `new_pumpkins` agora, verá que todas as strings são números. Isso torna a leitura mais difícil, mas muito mais simples para o Scikit-learn! -Você pode tomar decisões robustas (não apenas com base em um gráfico de dispersão) sobre os melhores dados para a regressão. - -Tente encontrar uma boa correlação entre dois pontos de seus dados para construir um bom modelo preditivo. Vemos que há uma correlação baixa entre City e Price: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -Porém, há uma correlação um pouco melhor entre Package (pacote) e Price. Isso faz sentido, né? Normalmente, quanto maior a caixa de produtos, mais alto é o preço. - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -Uma boa pergunta sobre esses dados seria: 'Que preço posso esperar de uma determinada caixa de abóbora?'. - -Vamos construir o modelo de regressão. - -## Construindo um modelo linear - -Antes de construir seu modelo, vamos tratar os dados mais uma vez. Elimine quaisquer dados nulos e verifique os dados mais uma vez. - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -Em seguida, crie um novo _dataframe_ a partir desse conjunto e imprima-o: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. Atribua seu X e y: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` -✅ Mas o que é isso? Você está usando a [notação slice](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) para criar _arrays_ e populá-los nas variáveis `X` and `y`. - -2. Comece as rotinas de construção do modelo de regressão: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Como a correlação não é tão boa, o modelo não é muito preciso. - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. Para visualizar a linha, use o código abaixo: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - ![Um gráfico de dispersão mostrando a relação do preço e caixa de abóboras](../images/linear.png) - -4. Teste o modelo com um valor hipotético de variedade (coluna Variety): - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - O preço devolvido é: - - ```output - array([[33.15655975]]) - ``` - -O número faz sentido se a lógica da linha de regressão estiver correta. - -🎃 Parabéns, você acabou de criar um modelo que pode ajudar a prever o preço de uma caixa (ou outro tipo de medida) de abóboras. -Já vai ter decoração de halloween até o do ano que vem ou já pode aprimorar seu histórico de receitas que levam abóbora. - -Lembre-se que sempre tem como melhorar o seu modelo! - -## Regressão polinomial - -Outro tipo de regressão linear é a regressão polinomial. Embora às vezes haja uma relação linear entre as variáveis - quanto maior o volume da abóbora, mais alto é o preço -, às vezes essas relações não podem ser representadas como um plano ou uma linha reta. - -✅ Aqui estão [mais exemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de dados que podem usar regressão polinomial. - -Dê uma outra olhada na relação entre Variety e Price no gráfico anterior. Este gráfico de dispersão parece que deve ser analisado por uma linha reta? Talvez não. Nesse caso, você pode tentar a regressão polinomial. - -✅ Polinômios são expressões matemáticas que podem consistir em uma ou mais variáveis e coeficientes. - -A regressão polinomial cria uma linha curva para ajustar melhor os dados não lineares. - -1. Vamos recriar um _dataframe_ preenchido com um segmento dos dados originais: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -Uma boa forma de visualizar as correlações entre os dados em _dataframes_ é exibi-los em um gráfico '_coolwarm_': - -2. Use o método `Background_gradient()` com `coolwarm` como parâmetro: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - Este código cria um mapa de calor: - - ![Um mapa de calor mostrando a correlação dos dados](../images/heatmap.png) - -Este gráfico mostra a boa correlação entre Package e Price. Portanto, você pode criar um modelo melhor que o anterior. - -### Criando um _pipeline_ - -Scikit-learn inclui uma API para construir modelos de regressão polinomial - a [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) `make_pipeline`. É criado um _pipeline_ que consiste em uma cadeia de estimadores. Nesse caso, o _pipeline_ inclui recursos polinomiais ou previsões que formam um caminho não linear. - -1. Populamos X e y: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. Criamos um _pipeline_ chamando a função `make_pipeline()`: - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### Criando uma sequência - -Neste momento, você precisa criar um novo _dataframe_ com dados _classificados_ para que o _pipeline_ possa criar uma sequência. - -Adicione o código abaixo: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -Você criou um novo _dataframe_ chamando `pd.DataFrame`. Em seguida, classificou os valores chamando `sort_values()`. Finalmente, você criou um gráfico polinomial: - -![Um gráfico polinomial que mostra a relação entre caixa e preço](../images/polynomial.png) - -Você pode ver uma linha curva que se ajusta melhor aos seus dados. - -Vamos verificar a acurácia do modelo: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Tcharam! ✨ - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -### Fazendo previsões - -Podemos inserir um novo valor e obter uma previsão? - -Chame `predict()` para pedir uma previsão: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - E conseguimos: - - ```output - array([[46.34509342]]) - ``` - -Agora faz sentido! -E se esse modelo for melhor que o anterior usando o mesmo conjunto de dados, você já pode fazer orçamentos para abóboras mais caras! 😂 - -🏆 Muito bem! Você criou dois modelos de regressão em uma lição. Na lição final, você aprenderá sobre regressão logística para determinar categorias 🤩. - ---- -## 🚀Desafio - -Teste variáveis diferentes neste _notebook_ para ver como a correlação corresponde à acurácia do modelo. - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Nesta lição, aprendemos sobre regressão linear. Existem outros tipos importantes de regressão. Leia sobre as técnicas Stepwise, Ridge, Lasso e Elasticnet. Um bom curso para um estudo mais aprofundado é o [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) (Curso de aprendizagem estatística de Stanford). - -## Tarefa - -[Construa um modelo](assignment.pt-br.md). diff --git a/2-Regression/3-Linear/translations/README.pt.md b/2-Regression/3-Linear/translations/README.pt.md deleted file mode 100644 index c778e031..00000000 --- a/2-Regression/3-Linear/translations/README.pt.md +++ /dev/null @@ -1,332 +0,0 @@ -# Crie um modelo de regressão utilizando o Scikit-learning: regressão de dois modos - -![Regressão linear vs polinomial infográfica](./images/linear-polynomial.png) -> Infográfico de [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Questionário pré-seleção](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -> ### [Esta lição está disponível em R!](./solution/R/lesson_3-R.ipynb) -### Introdução - -Até agora, vocês exploraram o que é a regressão com os dados de exemplo recolhidos a partir do conjunto de dados de preços da abóbora que vamos usar ao longo desta lição. Também o visualizaram utilizando Matplotlib. - -Agora está preparado para mergulhar mais profundamente na regressão para o ML. Nesta lição, você vai aprender mais sobre dois tipos de regressão: _regressão linear básica_ e _regressão polinomial_, juntamente com alguma da matemática subjacente a estas técnicas. - -> Ao longo deste currículo, assumimos um conhecimento mínimo de matemática, e procuramos torná-lo acessível a estudantes provenientes de outras áreas, por isso, procuremos notas, notas de 🧮, diagramas e outras ferramentas de aprendizagem para ajudar na compreensão. - -### Pré-requisitos - -Já devem conhecer a estrutura dos dados relativos à abóbora que estamos a analisar. Pode encontrá-lo pré-carregado e previamente limpo no ficheiro _notebook.ipynb_ desta lição. No ficheiro, o preço da abóbora é apresentado por defeito num novo dataframe. Certifique-se de que pode executar estes blocos de notas em kernels no Código do Visual Studio. - -### Preparação - -Como lembrete, está a carregar estes dados para fazer perguntas sobre os mesmos. - -- Quando é o melhor momento para comprar abóboras? -- Que preço posso esperar de um caso de abóbora miniatura? -- Devo comprá-los em cestos de meia-bushel ou pela caixa de bushel 1 1/9? -Vamos continuar a investigar estes dados. - -Na lição anterior, você criou um dataframe Pandas e o preencheu com parte do conjunto de dados original, padronizando os preços pelo bushel. Ao fazer isso, no entanto, você só conseguiu reunir cerca de 400 datapops e apenas nos meses de outono. - -Dê uma vista de olhos aos dados que pré-carregámos no bloco de notas que acompanha esta lição. Os dados são pré-carregados e um gráfico de dispersão inicial é desenhado para mostrar os dados do mês. Talvez possamos obter um pouco mais de detalhe sobre a natureza dos dados limpando-os mais. - -## Uma linha de regressão linear - -Como aprenderam na lição 1, o objetivo de um exercício de regressão linear é conseguir desenhar uma linha para: - -- **Mostrar relações de variáveis***. Mostrar a relação entre variáveis -- **Faça previsões**. Faça previsões precisas sobre onde um novo ponto de dados cairia em relação a essa linha. - -É típico de **Regressão dos Quadrados Menos** desenhar este tipo de linha. O termo 'menos quadrados' significa que todos os pontos de dados em torno da linha de regressão são são quadrados e depois adicionados. Idealmente, essa soma final é o mais pequena possível, porque queremos um número reduzido de erros, ou `menos quadrados` . - -Fazemo-lo porque queremos modelar uma linha que tenha a menor distância cumulativa de todos os nossos pontos de dados. Nós também fazemos o quadrado dos termos antes de os adicionarmos, uma vez que estamos preocupados com a sua magnitude e não com a sua direção. - -> ** 🧮 Mostrar a matemática** -> -> Esta linha, denominada a _linha de best fit_, pode ser expressa por [uma equação](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` é a "variável explicativa". `Y` é a 'variável dependente'. O declive da linha é `b` e `a` é a interceção y, que se refere ao valor de `Y` quando `X = 0`. -> ->![calcule o declive](images/slope.png) -> -> Primeiro, calcular o declive `b`. Infográfico por [Jen Looper](https://twitter.com/jenlooper) -> -> Por outras palavras, e referindo-se à pergunta original dos nossos dados de abóbora: "prever o preço de uma abóbora por bordel por mês", `X` referiria-se ao preço e `Y` referiria-se ao mês de venda. -> ->![complete a equação](images/calculation.png) -> -> Calcular o valor de Y. Se você está pagando por volta de $4, deve ser abril! Infográfico por [Jen Looper](https://twitter.com/jenlooper) -> -> A matemática que calcula a linha deve demonstrar o declive da linha, que também depende da interceção, ou onde `Y` está situado quando `X = 0`. -> -> Pode observar o método de cálculo destes valores no Web site [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Visite também [esta calculadora de Menos quadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para ver como os valores dos números têm impacto na linha. - -## Correlação - -Mais um termo a compreender é o **Coeficiente de Correlação** entre as variáveis X e Y fornecidas. Usando um gráfico de dispersão, você pode visualizar rapidamente este coeficiente. Um desenho com pontos de dados dispersos numa linha reta tem uma correlação elevada, mas um desenho com pontos de dados dispersos por todo o lado entre X e Y tem uma correlação baixa. - -Um bom modelo de regressão linear será aquele que tem um Coeficiente de Correlação elevado (mais perto de 1 que 0) utilizando o método de Regressão dos Menos Quadrados com uma linha de regressão. - -✅ Executar o bloco de notas que acompanha esta lição e olhar para o gráfico de distribuição City to Price. Os dados que associam a cidade ao preço das vendas de abóbora parecem ter uma correlação alta ou baixa, de acordo com a sua interpretação visual da distribuição? - - -## Preparar os dados para regressão - -Agora que têm uma compreensão da matemática por detrás deste exercício, criem um modelo de Regressão para ver se conseguem prever que pacote de abóbora terá os melhores preços de abóbora. Alguém que adquira abóbora para uma correção de abóbora de férias poderá querer que esta informação seja capaz de otimizar as suas compras de pacotes de abóbora para a correção. - -Já que você vai usar o Scikit-learning, não há razão para fazer isso à mão (embora você pudesse!). No bloco principal de processamento de dados do bloco de notas de lição, adicione uma biblioteca do Scikit-learning para converter automaticamente todos os dados de cadeia em números: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -Se olharem para o dataframe new_bompkins, veem que todas as cadeias são agora numéricas. Isto torna mais difícil para você ler, mas muito mais inteligível para o Scikit - aprender! -Agora, pode tomar decisões mais educadas (não apenas com base no aparecimento de um gráfico de dispersão) sobre os dados que melhor se adequam à regressão. - -Tente encontrar uma boa correlação entre dois pontos dos seus dados para criar, potencialmente, um bom modelo preditivo. Acontece que há apenas uma correlação fraca entre a Cidade e o Preço: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -No entanto, há uma correlação um pouco melhor entre o Pacote e o seu Preço. Isso faz sentido, certo? Normalmente, quanto maior for a caixa de produção, maior será o preço. - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -Uma boa pergunta a fazer sobre estes dados será: 'Que preço posso esperar de um determinado pacote de abóbora?' - -Vamos construir este modelo de regressão - -## A criar um modelo linear - -Antes de criar o seu modelo, faça mais uma arrumação dos seus dados. Remova todos os dados nulos e verifique novamente como são os dados. - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -Em seguida, crie um novo dataframe a partir deste conjunto mínimo e imprima-o: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. Agora, pode atribuir os seus dados de coordenadas X e y: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` -✅ O que está acontecendo aqui? Está a utilizar [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) para criar matrizes para povoar ‘X’ e ‘y’. - -2. Em seguida, inicie as rotinas de construção de modelos de regressão: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - Porque a correlação não é particularmente boa, o modelo produzido não é terrivelmente preciso. - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. Pode visualizar a linha desenhada no processo: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - ![Um gráfico de dispersão que mostra a relação preço/pacote](./images/linear.png) - -4. Teste o modelo contra uma variedade hipotética: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - O preço devolvido por esta Variedades mitológicas é: - - ```output - array([[33.15655975]]) - ``` - -Esse número faz sentido, se a lógica da linha de regressão se mantiver verdadeira. - -🎃 Parabéns, criaram um modelo que pode ajudar a prever o preço de algumas variedades de abóbora. A sua mancha de abóbora de férias será bonita. Mas é provável que se possa criar um modelo melhor! -## Regressão polinomial - -Outro tipo de regressão linear é a regressão polinomial. Embora por vezes haja uma relação linear entre variáveis - quanto maior é o volume da abóbora, maior é o preço - por vezes estas relações não podem ser desenhadas como um plano ou uma linha reta. - -✅ Aqui estão [mais alguns exemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de dados que podem utilizar regressão polinomial - -Vejam outra vez a relação entre Varity e Price no desenho anterior. Parece que este gráfico de dispersão deve ser necessariamente analisado por uma linha reta? Talvez não. Neste caso, pode-se tentar uma regressão polinomial. - -✅ Polinomiais são expressões matemáticas que podem ser compostas por uma ou mais variáveis e coeficientes - -A regressão polinomial cria uma linha curvada para ajustar melhor os dados não lineares. - -1. Vamos recriar um dataframe povoado com um segmento dos dados originais da abóbora: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -Uma boa maneira de visualizar as correlações entre os dados nos dataframes é exibi-los em um gráfico 'colorido': - -2. Utilize o método `Background_gradient()` com o valor de argumento `colarm`: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - Este código cria um mapa de calor: -![Um mapa de calor que mostra a correlação de dados](./images/heatmap.png) - -Olhando para este gráfico, pode visualizar a boa correlação entre Pacote e Preço. Portanto, deveriam ser capazes de criar um modelo um pouco melhor do que o último. -### Criar um pipeline - -Scikit-learning inclui uma API útil para a construção de modelos de regressão polinomial - o `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline). É criado um "pipeline" que é uma cadeia de estimadores. Neste caso, o pipeline inclui funcionalidades polinomiais ou previsões que formam um caminho não linear. - -1. Criar as colunas X e y: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. Crie o pipeline chamando o método "make_pipeline()": - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### Criar uma sequência - -Neste ponto, é necessário criar um novo dataframe com dados _sorted_ para que o pipeline possa criar uma sequência. - -Adicionar o seguinte código: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -Criou um novo dataframe chamando `pd.DataFrame`. Em seguida, ordenou os valores chamando `sort_values()`. Finalmente criou um desenho polinomial: - -![Um desenho polinomial que mostra a relação pacote/preço](./images/polynomial.png) - -Pode ver uma linha curvada que se adapta melhor aos seus dados. - -Vamos verificar a precisão do modelo: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - E voilá! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -Isso é melhor! Tente prever um preço: - -### Efetuar uma previsão - -Podemos introduzir um novo valor e obter uma previsão? - -Chame `predict()` para fazer uma previsão: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - É-lhe dada esta previsão: - - ```output - array([[46.34509342]]) - ``` - -Faz sentido, dado o enredo! E, se este é um modelo melhor do que o anterior, olhando para os mesmos dados, é preciso orçar para estas abrigas mais caras! - -🏆 Parabéns! Criaram dois modelos de regressão numa lição. Na última secção sobre regressão, irá obter informações sobre regressão logística para determinar categorias. - -— -## 🚀 desafio - -Teste várias variáveis diferentes neste bloco de notas para ver como a correlação corresponde à precisão do modelo. -##[Questionário pós-palestra](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## Revisão e Estudo Automático - -Nesta lição, aprendemos sobre a Regressão Linear. Há outros tipos importantes de Regressão. Leia sobre as técnicas Stepwise, Ridge, Lasso e Elasticnet. Um bom curso para estudar para aprender mais é o [curso de Aprendizagem Estatística de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## Atribuição - -[Criar um Modelo](assignment.md) diff --git a/2-Regression/3-Linear/translations/README.zh-cn.md b/2-Regression/3-Linear/translations/README.zh-cn.md deleted file mode 100644 index da5e02ad..00000000 --- a/2-Regression/3-Linear/translations/README.zh-cn.md +++ /dev/null @@ -1,341 +0,0 @@ -# 使用 Scikit-learn 构建回归模型:两种方式的回归 - -![线性与多项式回归信息图](../images/linear-polynomial.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [课前测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -### 介绍 - -到目前为止,你已经通过从我们将在本课程中使用的南瓜定价数据集收集的样本数据探索了什么是回归。你还使用 Matplotlib 对其进行了可视化。 - -现在你已准备好深入研究 ML 的回归。 在本课中,你将详细了解两种类型的回归:_基本线性回归_ 和 _多项式回归_,以及这些技术背后的一些数学知识。 - -> 在整个课程中,我们假设数学知识最少,并试图让来自其他领域的学生也能接触到它,因此请使用笔记、🧮标注、图表和其他学习工具以帮助理解。 - -### 前提 - -你现在应该熟悉我们正在检查的南瓜数据的结构。你可以在本课的 _notebook.ipynb_ 文件中找到它。 在这个文件中,南瓜的价格显示在一个新的 dataframe 中。确保可以在 Visual Studio Code 代码的内核中运行这些 notebooks。 - -### 准备 - -提醒一下,你正在加载此数据以提出问题。 - -- 什么时候买南瓜最好? -- 一箱微型南瓜的价格是多少? -- 我应该买半蒲式耳还是 1 1/9 蒲式耳? - -让我们继续深入研究这些数据。 - -在上一课中,你创建了一个 Pandas dataframe 并用原始数据集的一部分填充它,按蒲式耳标准化定价。但是,通过这样做,你只能收集大约 400 个数据点,而且只能收集秋季月份的数据。 - -看看我们在本课随附的 notebook 中预加载的数据。数据已预加载,并绘制了初始散点图以显示月份数据。也许我们可以通过更多地清理数据来获得更多关于数据性质的细节。 - -## 线性回归线 - -正如你在第 1 课中学到的,线性回归练习的目标是能够绘制一条线以便: - -- **显示变量关系**。 显示变量之间的关系 -- **作出预测**。 准确预测新数据点与该线的关系。 - -绘制这种类型的线是**最小二乘回归**的典型做法。术语“最小二乘法”意味着将回归线周围的所有数据点平方,然后相加。理想情况下,最终和尽可能小,因为我们希望错误数量较少,或“最小二乘法”。 - -我们这样做是因为我们想要对一条与所有数据点的累积距离最小的线进行建模。我们还在添加它们之前对这些项进行平方,因为我们关心的是它的大小而不是它的方向。 - -> **🧮 数学知识** -> -> 这条线称为 _最佳拟合线_,可以用[一个等式](https://en.wikipedia.org/wiki/Simple_linear_regression)表示: -> -> ``` -> Y = a + bX -> ``` -> -> `X` 是“解释变量”。`Y` 是“因变量”。直线的斜率是 `b`,`a` 是 y 轴截距,指的是 `X = 0` 时 `Y` 的值。 -> ->![计算斜率](../images/slope.png) -> -> 首先,计算斜率 `b`。作者 [Jen Looper](https://twitter.com/jenlooper) -> -> 换句话说,参考我们的南瓜数据的原始问题:“按月预测每蒲式耳南瓜的价格”,`X` 指的是价格,`Y` 指的是销售月份。 -> -> ![完成等式](../images/calculation.png) -> -> 计算 Y 的值。如果你支付大约 4 美元,那一定是四月!作者 [Jen Looper](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 之间的图具有低相关性。 - -一个好的线性回归模型将是一个用最小二乘回归法与直线回归得到的高(更接近于 1)相关系数的模型。 - -✅ 运行本课随附的 notebook 并查看 City to Price 散点图。根据你对散点图的视觉解释,将南瓜销售的城市与价格相关联的数据似乎具有高相关性或低相关性? - -## 为回归准备数据 - -现在你已经了解了本练习背后的数学原理,可以创建一个回归模型,看看你是否可以预测哪个南瓜包装的南瓜价格最优惠。为节日购买南瓜的人可能希望此信息能够优化他们如何购买南瓜包装。 - -由于你将使用 Scikit-learn,因此没有理由手动执行此操作(尽管你可以!)。在课程 notebook 的主要数据处理块中,从 Scikit-learn 添加一个库以自动将所有字符串数据转换为数字: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -如果你现在查看 new_pumpkins dataframe,你会看到所有字符串现在都是数字。这让你更难阅读,但对 Scikit-learn 来说更容易理解! - -现在,你可以对最适合回归的数据做出更有根据的决策(不仅仅是基于观察散点图)。 - -尝试在数据的两点之间找到良好的相关性,以构建良好的预测模型。事实证明,城市和价格之间只有微弱的相关性: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -然而,包装和它的价格之间有更好的相关性。这是有道理的,对吧?通常,农产品箱越大,价格越高。 - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -对这些数据提出的一个很好的问题是:“我可以期望给定的南瓜包装的价格是多少?” - -让我们建立这个回归模型 - -## 建立线性模型 - -在构建模型之前,再对数据进行一次整理。删除任何空数据并再次检查数据的样子。 - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -然后,从这个最小集合创建一个新的 dataframe 并将其打印出来: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. 现在你可以分配 X 和 y 坐标数据: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` - -✅ 这里发生了什么?你正在使用 [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) 来创建数组来填充 `X` 和 `y`。 - -2. 接下来,开始回归模型构建例程: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 因为相关性不是特别好,所以生成的模型不是非常准确。 - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. 你可以将过程中绘制的线条可视化: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - - ![散点图显示包装与价格的关系](../images/linear.png) - -4. 针对假设的品种测试模型: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - 这个神话般的品种的价格是: - - ```output - array([[33.15655975]]) - ``` - -如果回归线的逻辑成立,这个数字是有意义的。 - -🎃 恭喜你,你刚刚创建了一个模型,可以帮助预测几个南瓜品种的价格。你的节日南瓜地会很漂亮的。但是你可以创造一个更好的模型! - -## 多项式回归 - -另一种线性回归是多项式回归。虽然有时变量之间存在线性关系——南瓜的体积越大,价格就越高——但有时这些关系不能绘制成平面或直线。 - -✅ 这里有可以使用多项式回归数据的[更多示例](https://online.stat.psu.edu/stat501/lesson/9/9.8) - -再看一下上图中品种与价格之间的关系。这个散点图看起来是否应该用一条直线来分析?也许不是。在这种情况下,你可以尝试多项式回归。 - -✅ 多项式是可能由一个或多个变量和系数组成的数学表达式 - -多项式回归创建一条曲线以更好地拟合非线性数据。 - -1. 让我们重新创建一个填充了原始南瓜数据片段的 dataframe: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -可视化 dataframe 中数据之间相关性的一种好方法是将其显示在“coolwarm”图表中: - -2. 使用 `Background_gradient()` 方法和 `coolwarm` 作为其参数值: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - - 这段代码创建了一个热图: - ![显示数据相关性的热图](../images/heatmap.png) - -查看此图表,你可以直观地看到 Package 和 Price 之间的良好相关性。所以你应该能够创建一个比上一个更好的模型。 - -### 创建管道 - -Scikit-learn 包含一个用于构建多项式回归模型的有用 API - `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)。 创建了一个“管道”,它是一个估计器链。在这种情况下,管道包括多项式特征或形成非线性路径的预测。 - -1. 构建 X 和 y 列: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. 通过调用 `make_pipeline()` 方法创建管道: - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### 创建序列 - -此时,你需要使用_排序好的_数据创建一个新的 dataframe ,以便管道可以创建序列。 - -添加以下代码: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -你通过调用 `pd.DataFrame` 创建了一个新的 dataframe。然后通过调用 `sort_values()` 对值进行排序。最后你创建了一个多项式图: - -![显示包装与价格关系的多项式图](../images/polynomial.png) - -你可以看到更适合你的数据的曲线。 - -让我们检查模型的准确性: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 瞧! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -这样好多了!试着预测一个价格: - -### 做个预测 - -我们可以输入一个新值并得到一个预测吗? - -调用 `predict()` 进行预测: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - - 你会得到这样的预测: - - ```output - array([[46.34509342]]) - ``` - -参照图像,这确实有道理!而且,如果这是一个比前一个更好的模型,看同样的数据,你需要为这些更昂贵的南瓜做好预算! - -🏆 干得不错!你在一节课中创建了两个回归模型。在回归的最后一节中,你将了解逻辑回归以确定类别。 - ---- - -## 🚀挑战 - -在此 notebook 中测试几个不同的变量,以查看相关性与模型准确性的对应关系。 - -## [课后测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## 复习与自学 - -在本课中,我们学习了线性回归。还有其他重要的回归类型。了解 Stepwise、Ridge、Lasso 和 Elasticnet 技术。学习更多信息的好课程是 [斯坦福统计学习课程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## 任务 - -[构建模型](./assignment.zh-cn.md) diff --git a/2-Regression/3-Linear/translations/README.zh-tw.md b/2-Regression/3-Linear/translations/README.zh-tw.md deleted file mode 100644 index b57e4a90..00000000 --- a/2-Regression/3-Linear/translations/README.zh-tw.md +++ /dev/null @@ -1,342 +0,0 @@ -# 使用 Scikit-learn 構建回歸模型:兩種方式的回歸 - -![線性與多項式回歸信息圖](../images/linear-polynomial.png) - -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [課前測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -### 介紹 - -到目前為止,你已經通過從我們將在本課程中使用的南瓜定價數據集收集的樣本數據探索了什麽是回歸。你還使用 Matplotlib 對其進行了可視化。 - -現在你已準備好深入研究 ML 的回歸。 在本課中,你將詳細了解兩種類型的回歸:_基本線性回歸_ 和 _多項式回歸_,以及這些技術背後的一些數學知識。 - -> 在整個課程中,我們假設數學知識最少,並試圖讓來自其他領域的學生也能接觸到它,因此請使用筆記、🧮標註、圖表和其他學習工具以幫助理解。 - -### 前提 - -你現在應該熟悉我們正在檢查的南瓜數據的結構。你可以在本課的 _notebook.ipynb_ 文件中找到它。 在這個文件中,南瓜的價格顯示在一個新的 dataframe 中。確保可以在 Visual Studio Code 代碼的內核中運行這些 notebooks。 - -### 準備 - -提醒一下,你正在加載此數據以提出問題。 - -- 什麽時候買南瓜最好? -- 一箱微型南瓜的價格是多少? -- 我應該買半蒲式耳還是 1 1/9 蒲式耳? - -讓我們繼續深入研究這些數據。 - -在上一課中,你創建了一個 Pandas dataframe 並用原始數據集的一部分填充它,按蒲式耳標準化定價。但是,通過這樣做,你只能收集大約 400 個數據點,而且只能收集秋季月份的數據。 - -看看我們在本課隨附的 notebook 中預加載的數據。數據已預加載,並繪製了初始散點圖以顯示月份數據。也許我們可以通過更多地清理數據來獲得更多關於數據性質的細節。 - -## 線性回歸線 - -正如你在第 1 課中學到的,線性回歸練習的目標是能夠繪製一條線以便: - -- **顯示變量關系**。 顯示變量之間的關系 -- **作出預測**。 準確預測新數據點與該線的關系。 - -繪製這種類型的線是**最小二乘回歸**的典型做法。術語「最小二乘法」意味著將回歸線周圍的所有數據點平方,然後相加。理想情況下,最終和盡可能小,因為我們希望錯誤數量較少,或「最小二乘法」。 - -我們這樣做是因為我們想要對一條與所有數據點的累積距離最小的線進行建模。我們還在添加它們之前對這些項進行平方,因為我們關心的是它的大小而不是它的方向。 - -> **🧮 數學知識** -> -> 這條線稱為 _最佳擬合線_,可以用[一個等式](https://en.wikipedia.org/wiki/Simple_linear_regression)表示: -> -> ``` -> Y = a + bX -> ``` -> -> `X` 是「解釋變量」。`Y` 是「因變量」。直線的斜率是 `b`,`a` 是 y 軸截距,指的是 `X = 0` 時 `Y` 的值。 -> ->![計算斜率](../images/slope.png) -> -> 首先,計算斜率 `b`。作者 [Jen Looper](https://twitter.com/jenlooper) -> -> 換句話說,參考我們的南瓜數據的原始問題:「按月預測每蒲式耳南瓜的價格」,`X` 指的是價格,`Y` 指的是銷售月份。 -> -> ![完成等式](../images/calculation.png) -> -> 計算 Y 的值。如果你支付大約 4 美元,那一定是四月!作者 [Jen Looper](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 之間的圖具有低相關性。 - -一個好的線性回歸模型將是一個用最小二乘回歸法與直線回歸得到的高(更接近於 1)相關系數的模型。 - -✅ 運行本課隨附的 notebook 並查看 City to Price 散點圖。根據你對散點圖的視覺解釋,將南瓜銷售的城市與價格相關聯的數據似乎具有高相關性或低相關性? - -## 為回歸準備數據 - -現在你已經了解了本練習背後的數學原理,可以創建一個回歸模型,看看你是否可以預測哪個南瓜包裝的南瓜價格最優惠。為節日購買南瓜的人可能希望此信息能夠優化他們如何購買南瓜包裝。 - -由於你將使用 Scikit-learn,因此沒有理由手動執行此操作(盡管你可以!)。在課程 notebook 的主要數據處理塊中,從 Scikit-learn 添加一個庫以自動將所有字符串數據轉換為數字: - -```python -from sklearn.preprocessing import LabelEncoder - -new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) -``` - -如果你現在查看 new_pumpkins dataframe,你會看到所有字符串現在都是數字。這讓你更難閱讀,但對 Scikit-learn 來說更容易理解! - -現在,你可以對最適合回歸的數據做出更有根據的決策(不僅僅是基於觀察散點圖)。 - -嘗試在數據的兩點之間找到良好的相關性,以構建良好的預測模型。事實證明,城市和價格之間只有微弱的相關性: - -```python -print(new_pumpkins['City'].corr(new_pumpkins['Price'])) -0.32363971816089226 -``` - -然而,包裝和它的價格之間有更好的相關性。這是有道理的,對吧?通常,農產品箱越大,價格越高。 - -```python -print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) -0.6061712937226021 -``` - -對這些數據提出的一個很好的問題是:「我可以期望給定的南瓜包裝的價格是多少?」 - -讓我們建立這個回歸模型 - -## 建立線性模型 - -在構建模型之前,再對數據進行一次整理。刪除任何空數據並再次檢查數據的樣子。 - -```python -new_pumpkins.dropna(inplace=True) -new_pumpkins.info() -``` - -然後,從這個最小集合創建一個新的 dataframe 並將其打印出來: - -```python -new_columns = ['Package', 'Price'] -lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - -lin_pumpkins -``` - -```output - Package Price -70 0 13.636364 -71 0 16.363636 -72 0 16.363636 -73 0 15.454545 -74 0 13.636364 -... ... ... -1738 2 30.000000 -1739 2 28.750000 -1740 2 25.750000 -1741 2 24.000000 -1742 2 24.000000 -415 rows × 2 columns -``` - -1. 現在你可以分配 X 和 y 坐標數據: - - ```python - X = lin_pumpkins.values[:, :1] - y = lin_pumpkins.values[:, 1:2] - ``` - -✅ 這裏發生了什麽?你正在使用 [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) 來創建數組來填充 `X` 和 `y`。 - -2. 接下來,開始回歸模型構建例程: - - ```python - from sklearn.linear_model import LinearRegression - from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error - from sklearn.model_selection import train_test_split - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - lin_reg = LinearRegression() - lin_reg.fit(X_train,y_train) - - pred = lin_reg.predict(X_test) - - accuracy_score = lin_reg.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 因為相關性不是特別好,所以生成的模型不是非常準確。 - - ```output - Model Accuracy: 0.3315342327998987 - ``` - -3. 你可以將過程中繪製的線條可視化: - - ```python - plt.scatter(X_test, y_test, color='black') - plt.plot(X_test, pred, color='blue', linewidth=3) - - plt.xlabel('Package') - plt.ylabel('Price') - - plt.show() - ``` - - ![散點圖顯示包裝與價格的關系](../images/linear.png) - -4. 針對假設的品種測試模型: - - ```python - lin_reg.predict( np.array([ [2.75] ]) ) - ``` - - 這個神話般的品種的價格是: - - ```output - array([[33.15655975]]) - ``` - -如果回歸線的邏輯成立,這個數字是有意義的。 - -🎃 恭喜你,你剛剛創建了一個模型,可以幫助預測幾個南瓜品種的價格。你的節日南瓜地會很漂亮的。但是你可以創造一個更好的模型! - -## 多項式回歸 - -另一種線性回歸是多項式回歸。雖然有時變量之間存在線性關系——南瓜的體積越大,價格就越高——但有時這些關系不能繪製成平面或直線。 - -✅ 這裏有可以使用多項式回歸數據的[更多示例](https://online.stat.psu.edu/stat501/lesson/9/9.8) - -再看一下上圖中品種與價格之間的關系。這個散點圖看起來是否應該用一條直線來分析?也許不是。在這種情況下,你可以嘗試多項式回歸。 - -✅ 多項式是可能由一個或多個變量和系數組成的數學表達式 - -多項式回歸創建一條曲線以更好地擬合非線性數據。 - -1. 讓我們重新創建一個填充了原始南瓜數據片段的 dataframe: - - ```python - new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] - poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') - - poly_pumpkins - ``` - -可視化 dataframe 中數據之間相關性的一種好方法是將其顯示在「coolwarm」圖表中: - -2. 使用 `Background_gradient()` 方法和 `coolwarm` 作為其參數值: - - ```python - corr = poly_pumpkins.corr() - corr.style.background_gradient(cmap='coolwarm') - ``` - - 這段代碼創建了一個熱圖: - ![顯示數據相關性的熱圖](../images/heatmap.png) - -查看此圖表,你可以直觀地看到 Package 和 Price 之間的良好相關性。所以你應該能夠創建一個比上一個更好的模型。 - -### 創建管道 - -Scikit-learn 包含一個用於構建多項式回歸模型的有用 API - `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline)。 創建了一個「管道」,它是一個估計器鏈。在這種情況下,管道包括多項式特征或形成非線性路徑的預測。 - -1. 構建 X 和 y 列: - - ```python - X=poly_pumpkins.iloc[:,3:4].values - y=poly_pumpkins.iloc[:,4:5].values - ``` - -2. 通過調用 `make_pipeline()` 方法創建管道: - - ```python - from sklearn.preprocessing import PolynomialFeatures - from sklearn.pipeline import make_pipeline - - pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - pipeline.fit(np.array(X_train), y_train) - - y_pred=pipeline.predict(X_test) - ``` - -### 創建序列 - -此時,你需要使用_排序好的_數據創建一個新的 dataframe ,以便管道可以創建序列。 - -添加以下代碼: - - ```python - df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) - df.sort_values(by='x',inplace = True) - points = pd.DataFrame(df).to_numpy() - - plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) - plt.xlabel('Package') - plt.ylabel('Price') - plt.scatter(X,y, color="black") - plt.show() - ``` - -你通過調用 `pd.DataFrame` 創建了一個新的 dataframe。然後通過調用 `sort_values()` 對值進行排序。最後你創建了一個多項式圖: - -![顯示包裝與價格關系的多項式圖](../images/polynomial.png) - -你可以看到更適合你的數據的曲線。 - -讓我們檢查模型的準確性: - - ```python - accuracy_score = pipeline.score(X_train,y_train) - print('Model Accuracy: ', accuracy_score) - ``` - - 瞧! - - ```output - Model Accuracy: 0.8537946517073784 - ``` - -這樣好多了!試著預測一個價格: - -### 做個預測 - -我們可以輸入一個新值並得到一個預測嗎? - -調用 `predict()` 進行預測: - - ```python - pipeline.predict( np.array([ [2.75] ]) ) - ``` - - 你會得到這樣的預測: - - ```output - array([[46.34509342]]) - ``` - -參照圖像,這確實有道理!而且,如果這是一個比前一個更好的模型,看同樣的數據,你需要為這些更昂貴的南瓜做好預算! - -🏆 幹得不錯!你在一節課中創建了兩個回歸模型。在回歸的最後一節中,你將了解邏輯回歸以確定類別。 - ---- - -## 🚀挑戰 - -在此 notebook 中測試幾個不同的變量,以查看相關性與模型準確性的對應關系。 - -## [課後測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## 復習與自學 - -在本課中,我們學習了線性回歸。還有其他重要的回歸類型。了解 Stepwise、Ridge、Lasso 和 Elasticnet 技術。學習更多信息的好課程是 [斯坦福統計學習課程](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## 任務 - -[構建模型](./assignment.zh-tw.md) diff --git a/2-Regression/3-Linear/translations/assignment.es.md b/2-Regression/3-Linear/translations/assignment.es.md deleted file mode 100644 index d09471ca..00000000 --- a/2-Regression/3-Linear/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Crea un modelo de regresión - -## Instrucciones - -En esta lección viste cómo construir un modelo usando tanto la regresión lineal como polinomial. Usando este conocimiento, encuentra un conjunto de datos o usa uno de los conjuntos de datos incorporados de Scikit-learn, para construir un modelo nuevo. Explica en tu notebook por qué elegiste dicha técnica y demuestra la precisión de tu modelo. Si este no es preciso explica por qué. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | Presenta un notebook completo con la solución bien documentada. | La solución se encuentra incompleta. | La solución es defectuosa o tiene errores. | diff --git a/2-Regression/3-Linear/translations/assignment.it.md b/2-Regression/3-Linear/translations/assignment.it.md deleted file mode 100644 index e5aaaa77..00000000 --- a/2-Regression/3-Linear/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Creare un Modello di Regressione - -## Istruzioni - -In questa lezione è stato mostrato come costruire un modello utilizzando sia la Regressione Lineare che Polinomiale. Usando questa conoscenza, trovare un insieme di dati o utilizzare uno degli insiemi integrati di Scikit-Learn per costruire un modello nuovo. Spiegare nel proprio notebook perché si è scelto una determinata tecnica e dimostrare la precisione del modello. Se non è accurato, spiegare perché. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | presenta un notebook completo con una soluzione ben documentata | La soluzione è incompleta | La soluzione è difettosa o contiene bug | diff --git a/2-Regression/3-Linear/translations/assignment.ja.md b/2-Regression/3-Linear/translations/assignment.ja.md deleted file mode 100644 index d0f8a4c5..00000000 --- a/2-Regression/3-Linear/translations/assignment.ja.md +++ /dev/null @@ -1,11 +0,0 @@ -# 回帰モデルの作成 - -## 課題の指示 - -このレッスンでは、線形回帰と多項式回帰の両方を使ってモデルを構築する方法を紹介しました。この知識をもとに、自分でデータセットを探すか、Scikit-learnのビルトインセットの1つを使用して、新しいモデルを構築してください。手法を選んだ理由をノートブックに書き、モデルの精度を示してください。精度が十分でない場合は、その理由も説明してください。 - -## ルーブリック - -| 指標 | 模範的 | 適切 | 要改善 | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | ドキュメント化されたソリューションを含む完全なノートブックを提示する。 | 解決策が不完全である。 | 解決策に欠陥またはバグがある。 | diff --git a/2-Regression/3-Linear/translations/assignment.ko.md b/2-Regression/3-Linear/translations/assignment.ko.md deleted file mode 100644 index 5c7f7c5b..00000000 --- a/2-Regression/3-Linear/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 회귀 모델을 만들어 봅시다 - -## 설명 - -이번 수업에서는 선형 회귀와 다항 회귀로 어떻게 모델을 만드는지 알아보았습니다. 이 과제에서는 직접 데이터세트를 찾거나 Scikit-learn에서 기본으로 제공하는 데이터세트로 새로 배운 지식을 적용해 새로운 모델을 만들어보시기 바랍니다. 그리고 어떠한 기법을 사용해 모델을 만들었는지 설명하고, 모델의 정확도를 노트북(Jupyter Notebook)에 기재하시기 바랍니다. 만약 정확도가 낮다면 왜 낮은지 해석해보세요. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ----------------------------- | -------------------------- | ----------------------- | -| | 완성된 노트북에 해법을 잘 설명함 | 미완성 해법을 제시함 | 결점이 있는 해법을 제시함 | diff --git a/2-Regression/3-Linear/translations/assignment.pt-br.md b/2-Regression/3-Linear/translations/assignment.pt-br.md deleted file mode 100644 index d262b121..00000000 --- a/2-Regression/3-Linear/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Construa um modelo de regressão - -## Instruções - -Nesta lição, mostramos como construir um modelo usando regressão linear e polinomial. Usando o que aprendeu, encontre um conjunto de dados ou use um dos conjuntos integrados a Scikit-Learn para construir um novo modelo. Explique em seu _notebook_ porque você escolheu uma técnica particular e demonstre a acurácia do modelo. E se a acurácia não for boa, explique por quê. - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | Apresenta um _notebook_ completo e bem documentado | A solução está incompleta | A solução possui _bugs_ | diff --git a/2-Regression/3-Linear/translations/assignment.pt.md b/2-Regression/3-Linear/translations/assignment.pt.md deleted file mode 100644 index 0bf93e65..00000000 --- a/2-Regression/3-Linear/translations/assignment.pt.md +++ /dev/null @@ -1,11 +0,0 @@ -# Criar um modelo de regressão - -## Instruções - -Nesta lição foi-lhe mostrado como construir um modelo usando a Regressão Linear e Polinomial. Utilizando este conhecimento, encontre um conjunto de dados ou use um dos conjuntos incorporados da Scikit-learn para construir um novo modelo. Explique no seu caderno porque escolheu a técnica que escolheu e demonstre a precisão do seu modelo. Se não for preciso, explique porquê. - -## Rubrica - -| Critérios | exemplares | Adequado | Necessidades de Melhoria | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | apresenta um caderno completo com uma solução bem documentada | a solução está incompleta| a solução é imperfeita ou buggy | diff --git a/2-Regression/3-Linear/translations/assignment.zh-cn.md b/2-Regression/3-Linear/translations/assignment.zh-cn.md deleted file mode 100644 index e9c476c3..00000000 --- a/2-Regression/3-Linear/translations/assignment.zh-cn.md +++ /dev/null @@ -1,12 +0,0 @@ -# 创建自己的回归模型 - -## 说明 - -在这节课中你学到了如何用线性回归和多项式回归建立一个模型。利用这些只是,找到一个你感兴趣的数据集或者是 Scikit-learn 内置的数据集来建立一个全新的模型。用你的 notebook 来解释为什么用了这种技术来对这个数据集进行建模,并且证明出你的模型的准确度。如果它没你想象中准确,请思考一下并解释一下原因。 - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | 提交了一个完整的 notebook 工程文件,其中包含了解集,并且可读性良好 | 不完整的解集 | 解集是有缺陷或者有错误的 | - diff --git a/2-Regression/3-Linear/translations/assignment.zh-tw.md b/2-Regression/3-Linear/translations/assignment.zh-tw.md deleted file mode 100644 index dd6a9afc..00000000 --- a/2-Regression/3-Linear/translations/assignment.zh-tw.md +++ /dev/null @@ -1,11 +0,0 @@ -# 創建自己的回歸模型 - -## 說明 - -在這節課中你學到了如何用線性回歸和多項式回歸建立一個模型。利用這些只是,找到一個你感興趣的數據集或者是 Scikit-learn 內置的數據集來建立一個全新的模型。用你的 notebook 來解釋為什麽用了這種技術來對這個數據集進行建模,並且證明出你的模型的準確度。如果它沒你想象中準確,請思考一下並解釋一下原因。 - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| -------- | ------------------------------------------------------------ | -------------------------- | ------------------------------- | -| | 提交了一個完整的 notebook 工程文件,其中包含了解集,並且可讀性良好 | 不完整的解集 | 解集是有缺陷或者有錯誤的 | diff --git a/2-Regression/4-Logistic/translations/README.es.md b/2-Regression/4-Logistic/translations/README.es.md deleted file mode 100644 index a9640ce9..00000000 --- a/2-Regression/4-Logistic/translations/README.es.md +++ /dev/null @@ -1,313 +0,0 @@ -# Regresión logística para predecir categorías - -![Infografía de regresiones lineal vs logística](../images/logistic-linear.png) -> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15?loc=es) - -> ### [Esta lección se encuentra disponible en R!](../solution/R/lesson_4-R.ipynb) - -## Introducción - -En esta lección final de Regresión, una de las técnicas básicas _clásicas_ de aprendizaje automático, echaremos un vistazo a la regresión logística. Usarás esta técnica para descubrir patrones que predigan categorías binarias. ¿Este dulce es un chocolate o no lo es? ¿Ésta enfermedad es contagiosa o no?, ¿Este cliente eligirá este producto o no? - -En esta lección, aprenderás: - -- Una nueva librería para visualización de datos -- Técnicas para regresión logística - -✅ Profundiza tu entendimiento de trabajo con este tipo de regresión en este [módulo de aprendizaje(https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) -## Requisitos previos - -Haber trabajado con los datos de calabazas, ahora estamos suficientemente familiarizados con estos para entender que hay una categoría binaria que podemos trabajar con `Color`. - -Construyamos un modelo de regresión logística para predecirlo, dadas algunas variables, _qué color podría tener una calabaza dada_ (naranja 🎃 o blanca 👻). - -> ¿Porqué estamos hablando acerca de clasificación binaria en un grupo de lecciones acerca de regresión? Sólo por conveniencia ligüística, como la regresión logística es [realmente un método de clasificación](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), aunque de de base lineal. Aprende acerca de otras formas de clasificar los datos en el siguiente grupo de lecciones. - -## Define la pregunta - -Para nuestros propósitos, expresaremos esto como un binario: 'Orange' o 'Not Orange'. También hay una categoría 'striped' en nuestro conjunto de datos pero hay menos instancias de éstas, por lo que no las usaremos. Ésta desaparece una vez que removemos los valores nulos de nuestro conjunto de datos, de cualquier forma. - -> 🎃 Dato gracioso, algunas veces llamamos 'fantasmas' a las calabazas blancas. No son muy fáciles de tallar, por lo que no son tan populares como las calabazas naranjas, ¡pero se ven geniales! - -## Acerca de la regresión logística - -La regresión logística difiere de la regresión lineal, lo cual aprendiste previamentem en unas pocas cosas importantes. - -### Clasificación binaria - -La regresión logística no ofrece las mismas características como la regresión lineal. Las primeras ofrecen una predicción acerca de categorías binarias ("naranja o no naranja") mientras que la segunda es capaz de predecir valores continuos, por ejemplo dado el origen de una calabaza y el tiempo de cosecha, _cuánto incrementará su precio_. - -![Modelo de clasificación de calabazas](../images/pumpkin-classifier.png) -> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) -### Otras clasificaciones - -Existen otros tipo de regresión logística, incluyendo la multinomial y ordinal: - -- **Multinomial**, la cual implica tener más de una categoría - "Orange, White, and Striped". -- **Ordinal**, la cual implica categorías ordenadas, útil si quisieramos ordenar nuestras resultados logicamente, como nuestras calabazas que están ordenadas por un número finito de tamaños (mini,sm,med,lg,xl,xxl). - -![Regresión multinomial vs ordinal](../images/multinomial-ordinal.png) -> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Sigue siendo lineal - -Aunqeu este tipo de regresión se trata de 'predicciones de categoría', aún funciona mejor cuando hay una relación clara entre la variable dependiente (color) y las otras variables independientes (el resto del conjunto de datos, como el nombre de la ciudad y tamaño). Es bueno tener una idea de si hay alguna linealidad dividiendo estas variables o no. - -### Las variables NO tienen correlación - -¿Recuerdas cómo la regresión lineal funcionó mejor con variables correlacionadas? La regresión logística es lo opuesto - las variables no se tienen que alinear. Eso funciona para estos datos los cuales tienen correlaciones algo débiles. - -### Necesitas muchos datos limpios - -La regresión logística te dará resultados más precisos si usas más datos; nuestro pequeño conjunto de datos no es óptimo para esta tarea, así que tenlo en mente. - -✅ piensa en los tipos de datos que se prestarían bien para la regresión logística - -## Ejercicio - arregla los datos - -Primero, limpia los datos un poco, remueve los valores nulos y selecciona sólo algunas de las columnas: - -1. Agrega el siguiente código: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - Siempre puedes echar un vistazo a tu nuevo dataframe: - - ```python - new_pumpkins.info - ``` - -### Visualización - cuadrícula lado a lado - -Por ahora has cargado el [starter notebook](../notebook.ipynb) con datos de calabazas una vez más y los has limpiado para así preservar el conjunto de datos que contiene unas pocas variables, incluyendo `Color`. Visualizaremos el dataframe en el notebook usando una librería diferente: [Seaborn](https://seaborn.pydata.org/index.html), el cual es construido en Matplotlib que ya usamos anteriormente. - -Seaborn ofrece algunas formas ingeniosas de visualizar tus datos. Por ejemplo, puedes comparar distribuciones de los datos para cada punto en una cuadrícula lado a lado. - -1. Crea dicha cuadrícula instanciando `PairGrid`, usando nuestros datos de calabazas `new_pumpkins`, seguido de la llamada a `map()`: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![Una cuadrícula de datos visualizados](../images/grid.png) - - Al observar los datos lado a lado, puedes ver como los datos de Color se relacionan con las otras columnas. - - ✅ Dada la cuadrícula del gráfico de dispersión, ¿cuáles son algunas exploraciones interesantes que puedes visualizar? - -### Usa un gráfico de enjambre - -Dado que Color es una categoría binaria (Naranja o no), se le llaman 'datos categóricos' y necesita 'un [enfoque más especializado](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) para visualización. Hay otras formas de visualizar las relaciones de esta categoría con otras variables. - -Puedes visualizar variables lado a lado con los gráficos Seaborn. - -1. Prueba un gráfico de 'enjambre' (swarm) para mostrar la distribución de valores: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![Un enjambre de datos visualizados](../images/swarm.png) - -### Gráfico de Violín - -Un gráfico tipo 'violín' es útil ya que puedes visualizar fácilmente la forma en que los datos se distribuyen en las dos categorías. Los gŕaficos de violín no funcionan muy bien con conjuntos de datos muy pequeños ya que la distribución se muestra más 'suavemente'. - -1. Como parámetros `x=Color`, `kind="violin"` y llamada `catplot()`: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![un tipo de gráfico de violín](../images/violin.png) - - ✅ Prueba a crear este gráfico, y otros gráficos de Seaborn, usando otras variables. - -Ahora que tenemos una idea de la relación entre las categorías binarias de color y el grupo mayor de tamaños, exploremos la regresión logística para determinar el color probable de cierta calabaza. - -> **🧮 Muéstrame las matemáticas** -> -> ¿Recuerdas cómo la regresión lineal suele ser usó mínimos cuadrados ordinarios para llegar al valor? La regresión logística se basa en el concepto de 'máxima probabilidad' usando [funciones sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Una 'Función Sigmoide' en una gráfico tiene la forma de una 'S'. Toma una valor lo asigna entre 0 y 1. Su curva también es llamada 'curva logística'. Su fórmula luce así: -> -> ![Función logística](../images/sigmoid.png) -> -> Donde el punto medio del sigmoide se encuentra en el punt 0 de las x, L es el valor máximo de la curva, k es la pendiente de la curva. Si el resultado de la función es más de 0.5, la etiqueta en cuestión se le dará la clase '1' de la elección binaria. Si no, será clasificada como '0'. - -## Construye tu modelo - -Construir un modelo para encontrar estas clasificaciones binarias es sorprendentemente fácil en Scikit-learn. - -1. Elige las variable que quieres usar en tu modelo de clasificación y divide el modelo y los conjuntos de pruebas llamando `train_test_split()`: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_pumpkins['Color'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - ``` - -1. Ahora puedes entrenar tu modelo, llamando `fit()` con tus datos entrenados, e imprimir su resultado: - - ```python - from sklearn.model_selection import train_test_split - 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)) - ``` - - Echa un vistazo al marcador de tu modelo. No es tan malo, considerando tienes solo 1000 filas de datos: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## Mejor comprensión a través e una matriz de confusión - -Mientras puedes obtener un reporte de [términos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) del marcador imprimiendo los elementos de arriba, serás capaz de entender tu modelo más fácilmente usando una [matriz de confusión](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para ayudarnos a entender cómo se desempeña el modelo. - -> 🎓 Una '[matriz de confusión](https://wikipedia.org/wiki/Confusion_matrix)' (o 'matriz de error') es una table que expresa los verdaderos vs los falsos positivos y negativos de tu modelo, para así medir la precisión de las predicciones. - -1. Para usar métricas de confusión, llama `confusion_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Echa un vistazo a la matriz de confusión de tu modelo: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -En Scikit-learn, las filas de las matriaces de confusión (eje 0) son etiquetas reales y las columnas (eje 1) son etiquetas previstas. - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -¿Qué pasa aquí? Digamos que se le pidió a tu modelo clasificar las calabaas entre dos categorías binarias, la categoría 'orange' y la categoría 'not-orange'. - -- Si tu modelo predice una calabaza como no naranja y esta pertenece a la categoría 'not-orange' en realidad la llamamos como un verdadero negativo, mostrado por el número superior izquierdo. -- Si tu modelo precice una calabaza como naranja y esta pertenece a la categoría 'not-orange' en realidad la llamamos como un falso negativo, mostrado por el número inferior izquierdo. -- Si tu modelo predice una calabaza como no naranja y este pertenece a la categoría 'orange' en realidad la llamamos como un falso positivo, mostrado por el número superior derecho. -- Si tu modelo predice una calabaza como naranja y esta pertenece a la categoría 'naranja' en realidad la llamamos como un verdadero positivo, mostrado por el número inferior derecho. - -Como habrás adivinado, es preferible tener un número mayor de verdaderos positivos y verdaderos negativos, y un número menor de falsos positivos y falsos negativos, lo cual implica que el modelo se desempeña mejor. - -¿Cómo se relaciona la matriz de confusión con precision (precisión) y recall (recuerdo)? Recuerda, el reporte de clasificación impreso arriba mostró precisión (0.83) y recuerdo (0.98). - -Precision = tp / (tp + fp) = 162 / (162 + 33) = 0.8307692307692308 - -Recall = tp / (tp + fn) = 162 / (162 + 4) = 0.9759036144578314 - -✅ Q: De acuerdo a la matriz de confusión, ¿cómo lo hizo el modelo? A: No tan mal; existe un buen número de verdaderos positivos pero también varios falsos negativos. - -Repasemos los término que vimos anteriormente con la ayuda de la asignación de la matriz de confusión de TP/TN y FP/FN: - -🎓 Precision: TP/(TP + FP) La fración de instancias relevantes entre las instancias recuperadas (ejemplo, qué etiquetas fueron bien etiquetadas) - -🎓 Recall: TP/(TP + FN) La fracción de instancias relevantes que fueron recuperadas, bien etiquetadas o no - -🎓 f1-score: (2 * precision * recall)/(precision + recall) Un promedio ponderado de precisión y recuerdo, siendo lo mejor 1 y lo pero 0 - -🎓 Soporte: El número de ocurrencias de cada etiqueta recuperada - -🎓 Precisión: (TP + TN)/(TP + TN + FP + FN) El porcentaje de etiquetas previstas de forma precisa para la muestra. - -🎓 Promedio de macros: El cálculo de métricas medias no ponderadas para cada etiqueta, no tomando en cuenta el desequilibrio de etiquetas. - -🎓 Promedio ponderado: El cálculo de las métricas medias para cada etiqueta, tomando en cuenta el desequilibrio de etiquetas al ponderarlas po su soporte (el número de instancias verdaderas para cada etiqueta). - -✅ ¿Puedes pensar cuáles métrcias debes observar si quieres que tu modelo para reducir el número de falsos negativos? - -## Visualiza la curva ROC de este modelo - -Este no es un mal modelo; su precisión está en el rango de 80% ya que idealmente puedes usarlo para precedir el color de una calabaza dado un conjunto de variables. - -Hagamos una visualización más para ver el así llamado puntaje 'ROC': - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` - -Usando de nuevo Seaborn, grafica la [característica operativa de recepción](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) del modelo o ROC. Las curvas ROC curves son usadas comúnmente para obtener una vista de la salida de un clasificador en términos de sus verdaderos positivos vs falsos positivos. "Las curvas ROC presentan típicamente la tasa de verdaderos positivos en el eje Y, y la tasa falsos positivos en el eje X." Así, la inclinación de la curvay el espeacio entre la línea del punto medio y la curva importan: quieres una curva que suba rápidamente y sobre la línea. En nuestro caso, hay falsos positivos para empezar, y luego la línea sube hacía arriba y continua propiamente: - -![ROC](../images/ROC.png) - -Finalmente, usa la [API `roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) de Scikit-learn para calcular el 'Área bajo la curva' real (AUC): - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` - -El resultado es `0.6976998904709748`. Dado que la AUC varía entre 0 y 1, quieres un puntaje grande, ya que un modelo que es 100% correcto en sus predicciones tendrá un AUC de 1; en este caso el modelo es _bastante bueno_. - -En futuras lecciones de clasificación, aprenderás cómo iterar para mejorar los puntajes de tus modelos. Pero por ahora, ¡felicitaciones!, ¡Haz completado estas lecciones de regresión! - ---- - -## 🚀Desafío - -¡Hay mucho más para desempacar respecto a la regresión logística! Pero la mejor forma de aprender es experimentar. Encuentra un conjunto de datos que se preste para este tipo de análisis y construye un modelo con él. ¿Qué aprendes? tipo: prueba [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) por conjuntos de datos interesantes. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16?loc=es) - -## Revisión & autoestudio - -Lee las primeras páginas de este [artículo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) de algunos usos prácticos para la regresión logística. Piensa en las tareas que se ajustan mejor para uno u otro tipo de tareas de regresión que estudiamos hasta el momento. ¿Que funcionaría mejor? - -## Asignación - -[Reintentando esta regresión](assignment.es.md) diff --git a/2-Regression/4-Logistic/translations/README.id.md b/2-Regression/4-Logistic/translations/README.id.md deleted file mode 100644 index 25ad991a..00000000 --- a/2-Regression/4-Logistic/translations/README.id.md +++ /dev/null @@ -1,302 +0,0 @@ -# Regresi logistik untuk memprediksi kategori-kategori - -![Infografik regresi logistik vs. linear](../images/logistic-linear.png) -> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Kuis pra-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -## Pembukaan - -Dalam pelajaran regresi terakhir, salah satu teknik ML _klasik_ dan sederhana adalah regresi logistik. Teknik ini digunakan untuk mengemukakan pola-pola untuk memprediksi kategori binari. Apa ini sebuah permen coklat atau tidak? Apa penyakit ini menular tidak? Apa pelanggan ini akan memilih produk ini tidak? - -Dalam pelajaran ini, kamu akan belajar: - -- Sebuah *library* baru untuk pemvisualisasian data -- Teknik-teknik untuk regresi logistik - -✅ Perdalamkan pemahamanmu dalam bekerja dengan regresi jenis ini dalam [modul pembelajaran ini](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) - -## Prasyarat - -Setelah bekerja dengan data labu, kita sekarang sudah terbiasa dengannya untuk menyadari bahwa adapula sebuah kategori binari yang kita dapat menggunakan: `Color` (warna). - -Mari membangun sebuah model regresi logistik untuk memprediksi _kemungkinannya labu ini warnanya apa_ berdasarkan beberapa variabel (oranye 🎃 atau putih 👻). - -> Mengapa kita berbicara tentang klasifikasi binary dalam seri pelajaran tentang regresi? Hanya untuk kemudahan linguistik, regresi logistik juga [sebenarnya sebuah metode klasifikasi](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), namun satu yang berdasarkan garis linear. Pelajari lebih lanjut tentang cara-cara lain untuk mengklasifikasi data dalam seri pelajaran berikutnya. - -## Tentukan pertanyaannya - -Untuk keperluan kita, kita akan mengekspresikannya sebagai pilihan binari 'Orange' atau 'Not Orange' (oranye atau bukan oranye). Adapula kategori 'striped' (belang-belang) dalam dataset kita, tetapi tidak banyak titik datanya, jadi kita tidak akan menggunakannya. Lagipula, kategori itu hilang begitu kita buang nilai-nilai nil (null) dari datasetnya. - -> 🎃 Tahukah tidak? Kita kadangkali memanggil labu putih labu 'hantu'. Mereka tidak mudah diukir, jadi mereka tidak sepopuler yang oranye pada Halloween. Tetapi mereka keren juga ya! - -## Tentang regresi logistik - -Regresi logistik berbeda dari regresi linear, jenis regresi yang kamu pelajari sebelumnya, dalam beberapa askpek penting. - -### Klasifikasi binari - -Regresi logistik tidak mempunyai beberapa fitur regresi linear. Regresi logistik menyediakan sebuah prediksi tentang sebuah kategori binari (seperti "oranye atau bukan oranye"), sedangkan yang lainnya dapat memprediksi nilai-nilai kontinu. Contohnya, dengan mengetahui dari mana labu ini dan kapan dipanennya, regresi linear dapat memprediksi _berapa harganya akan naik_, namun regresi logistik tidak bisa. - -![Model klasifikasi labu](../images/pumpkin-classifier.png) -> Infografik oleh [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Klasifikasi lain - -Ditambah itu, ada banyak jenis regresi logistik, termasuk jenis multinomial dan ordinal: - -- **Multinomial** memperlibatkan lebih dari satu kategori - "Oranye, Putih, dan Belang-belang". -- **Ordinal** memperlibatkan kategori-kategori berurut. Biasanya berguna jika kita inging mengurutkan hasil kita secara logikal, seperti labu-useful if we wanted to order our outcomes logically, like our pumpkins that are ordered by a finite number of sizes (mini,sm,med,lg,xl,xxl). - -![Multinomial vs ordinal regression](./images/multinomial-ordinal.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Eh, masih linear ya? - -Walaupun jenis regresi ini semuanya tentang 'prediksi kategori', jenis ini masih paling efektif jika ada hubungan linear antara variabel dependen (warna) dan independen (sisa *dataset*-nya, seperti kota dan ukuran). Jadi baik juga untuk mencari tahu dahulu apa ada hubungan linear antara variabel-variabel ini. - -### Variabel-variabel TIDAK HARUS berkorelasi - -Ingat bagaimana regresi linear bekerja lebih baik dengan variabel berkorelasi? Regresi logistik itu kebalikannya: variabel-variabelnya tidak harus berjejer menjadi garis. Artinya, regresi ini bekerja untuk data ini yang korelasinya lumayan lemah. - -### Perlu banyak data rapi - -Regresi logistik akan memberi hasil lebih akurat jika kamu menggunakan data lebih banyak; *dataset* kecil kita tidak optimal untuk tugas ini, ingatlah itu. - -✅ Pikirkan tentang jenis-jenis data yang akan bekerja baik dengan regresi logistik - -## Latihan - rapikan data - -Pertama, rapikanlah datanya sedikit. Buanglah nilai-nilai nil (null) dan pilihlah beberapa kolom: - -1. Tambahlah kode di bawah ini: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - Kamu selalu bisa mengintip kedalam *dataframe*-mu: - - ```python - new_pumpkins.info - ``` - -### Visualisasi - *grid* berdampingan (*side-by-side grid*) - -Sekarang kamu sudah memuat [*notebook* starter](./notebook.ipynb) dengan data labunya sekali lagi dan merapikannya untuk mempertahankan sebuah *dataset* dengan beberapa variabel, termasuk `Color`. Mari memvisualisasi *dataframe*-nya dengan *library* yang beda: [Seaborn](https://seaborn.pydata.org/index.html) yang dibangun di atas Matplotlib yang kita gunakan sebelumnya. - -Seaborn menyediakan beberapa cara keren untuk memvisualisasi datamu. Contohnya, kamu bisa membandungkan distribusi datanya untuk setiap titik data dalam sebuah *grid* berdampingan. - -1. Buatlah sebuah *grid* dengan meng-*instantiate* sebuah `PairGrid` menggunakan data labu kita `new_pumpkins` diikuti memanggil fungsi `map()`: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![Sebuah visualisasi *grid* data](../images/grid.png) - - Dengan mengobservasi datanya secara berdampingan, kamu bisa lihat bagaimana data warnanya berhubungan dengan kolom-kolom lainnya. - - ✅ Dengan petak sebar ini, pendalaman menarik apa saja yang kamu bisa membayangkan? - -### Gunakan sebuah bagan kawanan (*swarm plot*) - -Karena warna adalah sebuah kategori binari (oranye atau bukan oranye), warna disebut 'data kategorikal' dan memerlukan 'sebuah [pendekatan khusus](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) untuk memvisualisasi'. Ada beberapa cara lain untuk memvisualisasi hubungan antara kategori ini dengan variabel-variabel lainnya. - -Kamu bisa memvisualisasikan variabel-variabel secara berdampingan dengan bagan-bagan Seaborn. - -1. Cobalah sebuah bagan kawanan untuk menunjukkan distribusi nilai: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![Sekawanan data yang divisualisasi](../images/swarm.png) - -### Bagan biola - -Sebuah bagan 'biola' itu berguna sebab kamu bisa memvisualisasi bagaimana data dalam kedua kategori itu terdistribusi dengan mudah. Bagan viola tidak efektif dengan *dataset* yang lebih kecil sebab distribusinya ditampilkan sebagai lebih 'mulus'. - -1. Gunakan fungsi `catplot()` dengan parameter `x=Color` dan `kind="violin"`: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![sebuah bagan biola](../images/violin.png) - - ✅ Cobalah membuat bagan ini dan jenis-jenis bagan Seaborn lainnya dengan variabel-variabel lainnya. - -Sekarang kita sudah dapat bayangan hubungan antara kedua kategori binary warna dan ukuran. Ayo menjelajahi regresi logistik untuk memprediksi warna sebuah labu tertentu. - -> **🧮 Perlihatkanlah Matematikanya Kepada Saya** -> -> Ingat bagaiaman regresi linear seringkali menggunakan metode kuadrat terkecil untuk tiba pada sebuah nilai? Regresi logistik tergantung pada konsep 'kemungkinan terbesar' menggunakan [fungsi sigmoid](https://wikipedia.org/wiki/Sigmoid_function). Sebuah 'fungsi Sigmoid' terlihat seperti huruf 'S' dalam sistem koordinat Kartesius. Fungsi ini mengambil sebuah nilai dan 'mencorongkannya' menjadi sebuah nomor antara 0 dan 1. Kurva ini juga dipanggil sebuah 'kurva logistik'. Formulanya seperti ini: -> -> ![Fungsi logistic](../images/sigmoid.png) -> -> Titik tengah sigmoidnya terletak di sumbu X. L adalah nilai maksimum kurvanya. k adalah terjalnya kurvanya. Jika hasil fungsinya lebih dari 0.5, nilai yang diberikan kepada fungsi tersebut akan diklasifikasikan sebagai '1'. Kalau tidak, nilai itu akan diklasifikasikan sebagai '0'. - -## Bangunlah modelmu - -Scikit-learn membuat membangun model klasifikasi binary sangat mudah. - -1. Pilihlah variabel-variabel yang kamu ingin gunakan dalam model klasifikasimu dan bagilah datanya menjadi set latihan dan set ujian dengan fungsi `train_test_split()`: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_pumpkins['Color'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - ``` - -2. Sekarang kamu bisa melatihkan modelmu dengan fungsi `fit()` dengan data latihanmu. *Print* hasilnya: - - ```python - from sklearn.model_selection import train_test_split - 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)) - ``` - - Lihatlah *scoreboard* modelmu. Tidak buruk, apalagi hanya dengan 1000 baris data: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## Pemahaman lebih baik via sebuah 'matriks kebingungan' - -Walaupun kamu bisa membuat sebuah *scoreboard* melaporkan [istilah-istilah](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) dengan mem-*print* yang di atas, kamu mungkin bisa memahami modelmu dengan lebih mudah dengan sebuah [matriks kebingungan](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) untuk membantu kita lebih paham akan performa modelnya. - -> 🎓 Sebuah '[matriks kebingungan](https://wikipedia.org/wiki/Confusion_matrix)' (atau 'matriks kesalahan') adalah sebuah tabel yang mengekspresikan positif benar vs. positif palsu modelmu sehingga mengukur akurasi prediksi=prediksinya. - -1. Untuk menggunakan sebuah matriks kebingungan, gunakan fungsi `confusin_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Lihatlah matriks kebingungan modelmu: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -Apa yang sedang terjadi di sini? Mari kita asumsi dulu bahwa model kita ditanyakan untuk mengklasifikasi antara dua kategori binari: 'labu' dan 'bukan labu'. - -- Kalau modelmu memprediksi sesuatu sebagai sebuah labu dan memang benar sesuatu itu adalah sebuah labu, itu disebut positif benar yang diindikasi angka di pojok kiri atas. -- Kalau modelmu memprediksi sesuatu sebagai bukan sebuah labu tetapi sesuatu itu sebenarnya sebuah labu, itu disebut positif palsu yang diindikasi angka di pojok kanan atas. -- Kalau modelmu memprediksi sesuati sebagai sebuah labu tetapi sebenarnya bukan sebuah labu, itu disebut negatif palsu yang diindikasi angka di pojok kiri bawah. -- Kalau modelmu memprediksi sesuati sebagai bukan sebuah labu dan memang benar sesuatu itu bukan sebuah labu, itu disebut negatif benar yang diindikasi angka di pojok kanan bawah. - -Sebagaimana kamu mungkin sudah pikirkan, lebih baik dapat banyak positif benar dan negatif benar dan sedikit positif palsu dan negatif palsu. Implikasinya adalah performa modelnya bagus. - -✅ Pertanyaan: Berdasarkan matriks kebingungan, modelnya baik tidak? Jawaban: Tidak buruk; ada banyak positif benar dan sedikit negatif palsu. - -Mari kita lihat kembali istilah-istilah yang kita lihat tadi dengan bantuan matriks kebingungan: - -> PB: Positif benar -> PP: Positif palsu -> NB: Negatif benar -> NP: Negatif palsu - -🎓 Presisi: PB/(PB + PP) Rasio titik data relevan antara semua titik data (seperti data mana yang benar dilabelkannya) - -🎓 *Recall*: PB/(PB + NP) Rasio titk data relevan yang digunakan, maupun labelnya benar atau tidak. - -🎓 *f1-score*: (2 * Presisi * *Recall*)/(Presisi + *Recall*) Sebuah rata-rata tertimbang antara presisi dan *recall*. 1 itu baik dan 0 itu buruk. - -🎓 Dukungan: Jumlah kejadian per label - -🎓 Akurasi: (PB + NB)/(PB + PS + NB + NS) Persentase label yang diprediksi dengan benar untuk sebuah sampel. - -🎓 Rata-rata Makro: Hitungan rata-rata sederhana (non-tertimbang) metrik setiap label tanpa menghiraukan ketidakseimbangan label. - -🎓 Rata-rata Tertimbang: Hitungan rata-rata metrik setiap label dengan mempertimbangkan ketidakseimbangan label. Rata-ratanya tertimbang nilai Dukungan (jumlah kejadian dalam realita) setiap label. - -✅ Apa kamu bisa tebak metrik apa yang harus dipantau untuk mengurangi jumlah negatif palsu modelmu? - -## Visualisasikan kurva ROC model ini - -Ini bukanlah sebuah model buruk. Akurasinya sekitar 80%, jadi sebenarnya bisa digunakan untuk memprediksi warna sebuah labu berdasarkan beberapa variabel. - -Mari kita memvisualisasikan datanya sekali lagi untuk melihat nilai ROC ini: - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` -Menggunakan Seaborn lagi, gambarlah [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) (ROC) model ini. Kurva ROC seringkali digunakan untuk menunjukkan output sebuah pembuat klasifikasi berdasarkan jumlah positif benar dan positif palsunya. "Kurva ROC biasanya menetapkan persentase positif benar di sumbu Y dan positif palsunya di sumbu X" (diterjemahkan). Maka, terjalnya kurva ini dan ruang antara garis titik tengah dan kurvanya penting: kamu mau sebuah kurva yang naik ke atas garisnya secepat mungkin. Dalam kasus ini, ada positif palsu di awal, terus kurvanya naik di atas garisnya dengan benar: - -![ROC](../images/ROC.png) - -Akhirnya, gunakanlah [API `roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) Scikit-learn untuk menghitung 'Area Di Bawah Kurva'-nya (ADBK) secara persis: - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -Hasilnya adalah `0.6976998904709748`. Mengingat bahwa ADBK itu antara 0 dan 1, lebih besar ADBK-nya lebih baik sebab ADBK model yang 100% benar terus adalah 1; dalam kasus ini, modelnya _lumayan bagus_. - -Nanti dalam pelajaran lebih lanjut tentang klasifikasi, kamu akan belajar bagaimana mengulang untuk membuat nilai-nilai modelmu lebih baik. Tetapi sekian dulu. Selamat! Kamu selesai pelajaran-pelajaran regresi ini! - ---- -## 🚀 Tantangan - -Masih ada banyak tentang regresi logistik! Tetapi cara paling baik adalah untuk bereksperimen. Carilah sebuah *dataset* yang bisa diteliti seperti ini dan bangunlah sebuah model darinya. Apa yang kamu pelajari? Petunjuk: Coba [Kaggle](https://kaggle.com) untuk *dataset-dataset* menarik. - -## [Kuis pasca-ceramah](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) - -## Review & Pembelajaran mandiri - -Bacalah beberapa halaman pertama [makalah ini dari Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) tentang beberapa penggunaan praktis regresi logistik. Pikirkan tentang tugas-tugas yang lebih baik untuk suatu jenis regresi atau jenis-jenis lainnya yang kita telah pelajari sampai kini. Apa yang akan bekerja paling baik? - -## Tugas - -[Coba lagi regresi ini](../assignment.md) diff --git a/2-Regression/4-Logistic/translations/README.it.md b/2-Regression/4-Logistic/translations/README.it.md deleted file mode 100644 index 17be0922..00000000 --- a/2-Regression/4-Logistic/translations/README.it.md +++ /dev/null @@ -1,295 +0,0 @@ -# Regressione logistica per prevedere le categorie - -![Infografica di regressione lineare e logistica](../images/logistic-linear.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/?loc=it) - -## Introduzione - -In questa lezione finale sulla Regressione, una delle tecniche _classiche_ di base di machine learning, si darà un'occhiata alla Regressione Logistica. Si dovrebbe utilizzare questa tecnica per scoprire modelli per prevedere le categorie binarie. Questa caramella è al cioccolato o no? Questa malattia è contagiosa o no? Questo cliente sceglierà questo prodotto o no? - -In questa lezione, si imparerà: - -- Una nuova libreria per la visualizzazione dei dati -- Tecniche per la regressione logistica - -✅ Con questo [modulo di apprendimento](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) si potrà approfondire la comprensione del lavoro con questo tipo di regressione -## Prerequisito - -Avendo lavorato con i dati della zucca, ora si ha abbastanza familiarità con essi per rendersi conto che esiste una categoria binaria con cui è possibile lavorare: `Color` (Colore). - -Si costruisce un modello di regressione logistica per prevedere, date alcune variabili, di _che colore sarà probabilmente una data zucca_ (arancione 🎃 o bianca 👻). - -> Perché si parla di classificazione binaria in un gruppo di lezioni sulla regressione? Solo per comodità linguistica, poiché la regressione logistica è in [realtà un metodo di classificazione](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), anche se lineare. Si scopriranno altri modi per classificare i dati nel prossimo gruppo di lezioni. - -## Definire la domanda - -Allo scopo, verrà espressa come binaria: 'Arancio' o 'Non Arancio'. C'è anche una categoria "striped" (a strisce) nell'insieme di dati, ma ci sono pochi casi, quindi non verrà presa in considerazione. Comunque scompare una volta rimossi i valori null dall'insieme di dati. - -> 🎃 Fatto divertente, a volte le zucche bianche vengono chiamate zucche "fantasma" Non sono molto facili da intagliare, quindi non sono così popolari come quelle arancioni ma hanno un bell'aspetto! - -## Informazioni sulla regressione logistica - -La regressione logistica differisce dalla regressione lineare, che si è appresa in precedenza, in alcuni importanti modi. - -### Classificazione Binaria - -La regressione logistica non offre le stesse caratteristiche della regressione lineare. La prima offre una previsione su una categoria binaria ("arancione o non arancione") mentre la seconda è in grado di prevedere valori continui, ad esempio data l'origine di una zucca e il momento del raccolto, di _quanto aumenterà il suo prezzo_. - -![Modello di classificazione della zucca](../images/pumpkin-classifier.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) -### Altre classificazioni: - -Esistono altri tipi di regressione logistica, inclusi multinomiale e ordinale: - -- **Multinomiale**, che implica avere più di una categoria: "arancione, bianco e a strisce". -- **Ordinale**, che coinvolge categorie ordinate, utile se si volessero ordinare i risultati in modo logico, come le zucche che sono ordinate per un numero finito di dimensioni (mini,sm,med,lg,xl,xxl). - -![Regressione multinomiale contro ordinale](../images/multinomial-ordinal.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### È ancora lineare - -Anche se questo tipo di Regressione riguarda le "previsioni di categoria", funziona ancora meglio quando esiste una chiara relazione lineare tra la variabile dipendente (colore) e le altre variabili indipendenti (il resto dell'insieme di dati, come il nome della città e le dimensioni) . È bene avere un'idea se c'è qualche linearità che divide queste variabili o meno. - -### Le variabili NON devono essere correlate - -Si ricorda come la regressione lineare ha funzionato meglio con più variabili correlate? La regressione logistica è l'opposto: le variabili non devono essere allineate. Funziona per questi dati che hanno correlazioni alquanto deboli. - -### Servono molti dati puliti - -La regressione logistica fornirà risultati più accurati se si utilizzano più dati; quindi si tenga a mente che, essendo l'insieme di dati sulla zucca piccolo, non è ottimale per questo compito - -✅ Si pensi ai tipi di dati che si prestano bene alla regressione logistica - -## Esercizio: riordinare i dati - -Innanzitutto, si puliscono un po 'i dati, eliminando i valori null e selezionando solo alcune delle colonne: - -1. Aggiungere il seguente codice: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - Si può sempre dare un'occhiata al nuovo dataframe: - - ```python - new_pumpkins.info - ``` - -### Visualizzazione - griglia affiancata - -A questo punto si è caricato di nuovo il [notebook iniziale](../notebook.ipynb) con i dati della zucca e lo si è pulito in modo da preservare un insieme di dati contenente alcune variabili, incluso `Color`. Si visualizza il dataframe nel notebook utilizzando una libreria diversa: [Seaborn](https://seaborn.pydata.org/index.html), che è costruita su Matplotlib, usata in precedenza. - -Seaborn offre alcuni modi accurati per visualizzare i dati. Ad esempio, si possono confrontare le distribuzioni dei dati per ogni punto in una griglia affiancata. - -1. Si crea una griglia di questo tipo istanziando `PairGrid`, usando i dati della zucca `new_pumpkins`, poi chiamando `map()`: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![Una griglia di dati visualizzati](../images/grid.png) - - Osservando i dati fianco a fianco, si può vedere come i dati di Color si riferiscono alle altre colonne. - - ✅ Data questa griglia del grafico a dispersione, quali sono alcune esplorazioni interessanti che si possono immaginare? - -### Usare un grafico a sciame - -Poiché Color è una categoria binaria (arancione o no), viene chiamata "dati categoriali" e richiede "un [approccio più specializzato](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) alla visualizzazione". Esistono altri modi per visualizzare la relazione di questa categoria con altre variabili. - -È possibile visualizzare le variabili fianco a fianco con i grafici di Seaborn. - -1. Si provi un grafico a "sciame" per mostrare la distribuzione dei valori: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![Uno sciame di dati visualizzati](../images/swarm.png) - -### Grafico violino - -Un grafico di tipo "violino" è utile in quanto è possibile visualizzare facilmente il modo in cui sono distribuiti i dati nelle due categorie. I grafici di tipo violino non funzionano così bene con insieme di dati più piccoli poiché la distribuzione viene visualizzata in modo più "liscio". - -1. Chiamare `catplot()` passando i parametri `x=Color`, `kind="violin"` : - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![una tabella di un grafico di tipo violino](../images/violin.png) - - ✅ Provare a creare questo grafico e altri grafici Seaborn, utilizzando altre variabili. - -Ora che si ha un'idea della relazione tra le categorie binarie di colore e il gruppo più ampio di dimensioni, si esplora la regressione logistica per determinare il probabile colore di una data zucca. - -> **🧮 Mostrami la matematica** -> -> Si ricorda come la regressione lineare usava spesso i minimi quadrati ordinari per arrivare a un valore? La regressione logistica si basa sul concetto di "massima verosimiglianza" utilizzando [le funzioni sigmoidi](https://wikipedia.org/wiki/Sigmoid_function). Una "Funzione Sigmoide" su un grafico ha l'aspetto di una forma a "S". Prende un valore e lo mappa da qualche parte tra 0 e 1. La sua curva è anche chiamata "curva logistica". La sua formula si presenta così: -> -> ![funzione logistica](../images/sigmoid.png) -> -> dove il punto medio del sigmoide si trova nel punto 0 di x, L è il valore massimo della curva e k è la pendenza della curva. Se l'esito della funzione è maggiore di 0,5, all'etichetta in questione verrà assegnata la classe '1' della scelta binaria. In caso contrario, sarà classificata come '0'. - -## Costruire il modello - -Costruire un modello per trovare queste classificazioni binarie è sorprendentemente semplice in Scikit-learn. - -1. Si selezionano le variabili da utilizzare nel modello di classificazione e si dividono gli insiemi di training e test chiamando `train_test_split()`: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_pumpkins['Color'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - ``` - -1. Ora si può addestrare il modello, chiamando `fit()` con i dati di addestramento e stamparne il risultato: - - ```python - from sklearn.model_selection import train_test_split - 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)) - ``` - - Si dia un'occhiata al tabellone segnapunti del modello. Non è male, considerando che si hanno solo circa 1000 righe di dati: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## Migliore comprensione tramite una matrice di confusione - -Sebbene si possano ottenere [i termini](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) del rapporto dei punteggi stampando gli elementi di cui sopra, si potrebbe essere in grado di comprendere più facilmente il modello utilizzando una [matrice di confusione](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) che aiuti a capire come lo stesso sta funzionando. - -> 🎓 Una '[matrice di confusione](https://it.wikipedia.org/wiki/Matrice_di_confusione)' (o 'matrice di errore') è una tabella che esprime i veri contro i falsi positivi e negativi del modello, misurando così l'accuratezza delle previsioni. - -1. Per utilizzare una metrica di confusione, si `chiama confusion_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Si dia un'occhiata alla matrice di confusione del modello: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -Cosa sta succedendo qui? Si supponga che al modello venga chiesto di classificare gli elementi tra due categorie binarie, la categoria "zucca" e la categoria "non una zucca". - -- Se il modello prevede qualcosa come una zucca e appartiene alla categoria 'zucca' in realtà lo si chiama un vero positivo, mostrato dal numero in alto a sinistra. -- Se il modello prevede qualcosa come non una zucca e appartiene alla categoria 'zucca' in realtà si chiama falso positivo, mostrato dal numero in alto a destra. -- Se il modello prevede qualcosa come una zucca e appartiene alla categoria 'non-una-zucca' in realtà si chiama falso negativo, mostrato dal numero in basso a sinistra. -- Se il modello prevede qualcosa come non una zucca e appartiene alla categoria 'non-una-zucca' in realtà lo si chiama un vero negativo, mostrato dal numero in basso a destra. - -Come si sarà intuito, è preferibile avere un numero maggiore di veri positivi e veri negativi e un numero inferiore di falsi positivi e falsi negativi, il che implica che il modello funziona meglio. - -✅ Domanda: Secondo la matrice di confusione, come si è comportato il modello? Risposta: Non male; ci sono un buon numero di veri positivi ma anche diversi falsi negativi. - -I termini visti in precedenza vengono rivisitati con l'aiuto della mappatura della matrice di confusione di TP/TN e FP/FN: - -🎓 Precisione: TP/(TP + FP) La frazione di istanze rilevanti tra le istanze recuperate (ad es. quali etichette erano ben etichettate) - -🎓 Richiamo: TP/(TP + FN) La frazione di istanze rilevanti che sono state recuperate, ben etichettate o meno - -🎓 f1-score: (2 * precisione * richiamo)/(precisione + richiamo) Una media ponderata della precisione e del richiamo, dove il migliore è 1 e il peggiore è 0 - -🎓 Supporto: il numero di occorrenze di ciascuna etichetta recuperata - -🎓 Accuratezza: (TP + TN)/(TP + TN + FP + FN) La percentuale di etichette prevista accuratamente per un campione. - -🎓 Macro Media: il calcolo delle metriche medie non ponderate per ciascuna etichetta, senza tener conto dello squilibrio dell'etichetta. - -🎓 Media ponderata: il calcolo delle metriche medie per ogni etichetta, tenendo conto dello squilibrio dell'etichetta pesandole in base al loro supporto (il numero di istanze vere per ciascuna etichetta). - -✅ Si riesce a pensare a quale metrica si dovrebbe guardare se si vuole che il modello riduca il numero di falsi negativi? - -## Visualizzare la curva ROC di questo modello - -Questo non è un cattivo modello; la sua precisione è nell'intervallo dell'80%, quindi idealmente si potrebbe usare per prevedere il colore di una zucca dato un insieme di variabili. - -Si rende un'altra visualizzazione per vedere il cosiddetto punteggio 'ROC': - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` -Usando di nuovo Seaborn, si traccia la [Caratteristica Operativa di Ricezione](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) o il ROC del modello. Le curve ROC vengono spesso utilizzate per ottenere una visualizzazione dell'output di un classificatore in termini di veri e falsi positivi. "Le curve ROC in genere presentano un tasso di veri positivi sull'asse Y e un tasso di falsi positivi sull'asse X". Pertanto, la ripidità della curva e lo spazio tra la linea del punto medio e la curva contano: si vuole una curva che si sposti rapidamente verso l'alto e oltre la linea. In questo caso, ci sono falsi positivi con cui iniziare, quindi la linea si dirige correttamente: - -![ROC](../images/ROC.png) - -Infine, si usa l'[`API roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) di Scikit-learn per calcolare l'effettiva "Area sotto la curva" (AUC): - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -Il risultato è `0.6976998904709748`. Dato che l'AUC varia da 0 a 1, si desidera un punteggio elevato, poiché un modello corretto al 100% nelle sue previsioni avrà un AUC di 1; in questo caso, il modello è _abbastanza buono_. - -Nelle lezioni future sulle classificazioni si imparerà come eseguire l'iterazione per migliorare i punteggi del modello. Ma per ora, congratulazioni! Si sono completate queste lezioni di regressione! - ---- -## 🚀 Sfida - -C'è molto altro da svelare riguardo alla regressione logistica! Ma il modo migliore per imparare è sperimentare. Trovare un insieme di dati che si presti a questo tipo di analisi e costruire un modello con esso. Cosa si è appreso? suggerimento: provare [Kaggle](https://kaggle.com) per ottenere insiemi di dati interessanti. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/?loc=it) - -## Revisione e Auto Apprendimento - -Leggere le prime pagine di [questo articolo da Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) su alcuni usi pratici della regressione logistica. Si pensi alle attività più adatte per l'uno o l'altro tipo di attività di regressione studiate fino a questo punto. Cosa funzionerebbe meglio? - -## Compito - -[Ritentare questa regressione](assignment.it.md) diff --git a/2-Regression/4-Logistic/translations/README.ja.md b/2-Regression/4-Logistic/translations/README.ja.md deleted file mode 100644 index e722dd61..00000000 --- a/2-Regression/4-Logistic/translations/README.ja.md +++ /dev/null @@ -1,310 +0,0 @@ -# カテゴリ予測のためのロジスティック回帰 - -![ロジスティク回帰 vs 線形回帰のインフォグラフィック](../images/logistic-linear.png) -> [Dasani Madipalli](https://twitter.com/dasani_decoded) によるインフォグラフィック -## [講義前のクイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -## イントロダクション - -回帰の最後のレッスンでは、古典的な機械学習手法の一つである、「ロジスティック回帰」を見ていきます。この手法は、2値のカテゴリを予測するためのパターンを発見するために使います。例えば、「このお菓子は、チョコレートかどうか?」、「この病気は伝染するかどうか?」、「この顧客は、この商品を選ぶかどうか?」などです。 - -このレッスンでは以下の内容を扱います。 - -- データを可視化するための新しいライブラリ -- ロジスティック回帰について - -✅ この[モジュール](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) であるため、言語的な便宜上です。次のレッスングループでは、データを分類する他の方法について学びます。 - -## 質問の定義 - -ここでは、「Orange」か「Not Orange」かの二値で表現しています。データセットには「striped」というカテゴリーもありますが、ほとんど例がないので、ここでは使いません。データセットからnull値を削除すると、このカテゴリーは消えてしまいます。 - -> 🎃 面白いことに、白いカボチャを「お化けカボチャ」と呼ぶことがあります。彫るのが簡単ではないので、オレンジ色のカボチャほど人気はありませんが、見た目がクールですよね! - -## ロジスティック回帰について - -ロジスティック回帰は、前回学んだ線形回帰とは、いくつかの重要な点で異なります。 - -### 2値分類 - -ロジスティック回帰は、線形回帰とは異なる特徴を持っています。ロジスティック回帰は、二値のカテゴリー(「オレンジ色かオレンジ色でないか」)についての予測を行うのに対し、線形回帰は連続的な値を予測します。例えば、カボチャの産地と収穫時期が与えられれば、その価格がどれだけ上昇するかを予測することができます。 - -![カボチャ分類モデル](../images/pumpkin-classifier.png) -> [Dasani Madipalli](https://twitter.com/dasani_decoded) によるインフォグラフィック -### その他の分類 - -ロジスティック回帰には他にもMultinomialやOrdinalなどの種類があります。 - -- **Multinomial**: これは2つ以上のカテゴリーを持つ場合です。 (オレンジ、白、ストライプ) -- **Ordinal**: これは、順序付けられたカテゴリを含むもので、有限の数のサイズ(mini、sm、med、lg、xl、xxl)で並べられたカボチャのように、結果を論理的に並べたい場合に便利です。 - -![Multinomial vs ordinal 回帰](../images/multinomial-ordinal.png) -> [Dasani Madipalli](https://twitter.com/dasani_decoded) によるインフォグラフィック - -### 線形について - -このタイプの回帰は、「カテゴリーの予測」が目的ですが、従属変数(色)と他の独立変数(都市名やサイズなどのデータセットの残りの部分)の間に明確な線形関係がある場合に最も効果的です。これらの変数を分ける線形性があるかどうかを把握するのは良いことです。 - -### 変数が相関している必要はない - -線形回帰は、相関性の高い変数ほどよく働くことを覚えていますか?ロジスティック回帰は、そうとは限りません。相関関係がやや弱いこのデータには有効ですね。 - -### 大量のきれいなデータが必要です - -一般的にロジスティック回帰は、より多くのデータを使用すれば、より正確な結果が得られます。私たちの小さなデータセットは、このタスクには最適ではありませんので、その点に注意してください。 - -✅ ロジスティック回帰に適したデータの種類を考えてみてください。 - -## エクササイズ - データの整形 - -まず、NULL値を削除したり、一部の列だけを選択したりして、データを少し綺麗にします。 - -1. 以下のコードを追加: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - 新しいデータフレームはいつでも確認することができます。 - - ```python - new_pumpkins.info - ``` - -### 可視化 - グリッド状に並べる - -ここまでで、[スターターノートブック](../notebook.ipynb) にパンプキンデータを再度読み込み、`Color`を含むいくつかの変数を含むデータセットを保持するように整形しました。別のライブラリを使って、ノートブック内のデータフレームを可視化してみましょう。[Seaborn](https://seaborn.pydata.org/index.html) というライブラリを使って、ノートブック内のデータフレームを可視化してみましょう。このライブラリは、今まで使っていた`Matplotlib`をベースにしています。 - -Seabornには、データを可視化するためのいくつかの優れた方法があります。例えば、各データの分布を横並びのグリッドで比較することができます。 - -1. かぼちゃのデータ`new_pumpkins`を使って、`PairGrid`をインスタンス化し、`map()`メソッドを呼び出して、以下のようなグリッドを作成します。 - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![グリッド状の可視化](../images/grid.png) - - データを並べて観察することで、Colorのデータが他の列とどのように関連しているのかを知ることができます。 - - ✅ この散布図をもとに、どのような面白い試みが考えられるでしょうか? - -### swarm plot - -Colorは2つのカテゴリー(Orange or Not)であるため、「カテゴリカルデータ」と呼ばれ、「可視化にはより[専門的なアプローチ](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) 」が必要となります。このカテゴリと他の変数との関係を可視化する方法は他にもあります。 - -Seabornプロットでは、変数を並べて表示することができます。 - -1. 値の分布を示す、'swarm' plotを試してみます。 - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![swarm plotによる可視化](../images/swarm.png) - -### Violin plot - -'violin' タイプのプロットは、2つのカテゴリーのデータがどのように分布しているかを簡単に視覚化できるので便利です。Violin plotは、分布がより「滑らか」に表示されるため、データセットが小さい場合はあまりうまくいきません。 - -1. パラメータとして`x=Color`、`kind="violin"` をセットし、 `catplot()`メソッドを呼びます。 - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![バイオリンタイプのチャート](../images/violin.png) - - ✅ 他の変数を使って、このプロットや他のSeabornのプロットを作成してみてください。 - -さて、`Color`の二値カテゴリと、より大きなサイズのグループとの関係がわかったところで、ロジスティック回帰を使って、あるカボチャの色について調べてみましょう。 - -> **🧮 数学の確認** -> -> 線形回帰では、通常の最小二乗法を用いて値を求めることが多かったことを覚えていますか?ロジスティック回帰は、[シグモイド関数](https://wikipedia.org/wiki/Sigmoid_function) を使った「最尤」の概念に依存しています。シグモイド関数は、プロット上では「S」字のように見えます。その曲線は「ロジスティック曲線」とも呼ばれます。数式は次のようになります。 -> -> ![ロジスティック関数](../images/sigmoid.png) -> -> ここで、シグモイドの中点はx=0の点、Lは曲線の最大値、kは曲線の急峻さを表します。この関数の結果が0.5以上であれば、そのラベルは二値選択のクラス「1」になります。そうでない場合は、「0」に分類されます。 - -## モデルの構築 - -これらの二値分類を行うためのモデルの構築は、Scikit-learnでは驚くほど簡単にできます。 - -1. 分類モデルで使用したい変数を選択し、`train_test_split()`メソッドでトレーニングセットとテストセットを分割します。 - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_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.model_selection import train_test_split - 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)) - ``` - - モデルのスコアボードを見てみましょう。1000行程度のデータしかないことを考えると、悪くないと思います。 - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## 混同行列による理解度の向上 - - -上記の項目を出力することで[スコアボードレポート](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) を得ることができますが、[混同行列](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) - ``` - - T作成したモデルの混同行列をみてみてください。 - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -Scikit-learnでは、混同行列の行 (axis=0)が実際のラベル、列 (axis=1)が予測ラベルとなります。 - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -ここで何が起こっているのか?例えば、カボチャを「オレンジ色」と「オレンジ色でない」という2つのカテゴリーに分類するように求められたとしましょう。 - -- モデルではオレンジ色ではないと予測されたカボチャが、実際には「オレンジ色ではない」というカテゴリーに属していた場合、「true negative」と呼ばれ、左上の数字で示されます。 -- モデルではオレンジ色と予測されたカボチャが、実際には「オレンジ色ではない」カテゴリーに属していた場合、「false negative」と呼ばれ、左下の数字で示されます。 -- モデルがオレンジではないと予測したかぼちゃが、実際にはカテゴリー「オレンジ」に属していた場合、「false positive」と呼ばれ、右上の数字で示されます。 -- モデルがカボチャをオレンジ色と予測し、それが実際にカテゴリ「オレンジ」に属する場合、「true positive」と呼ばれ、右下の数字で示されます。 - -お気づきの通り、true positiveとtrue negativeの数が多く、false positiveとfalse negativeの数が少ないことが好ましく、これはモデルの性能が高いことを意味します。 - -混同行列は、precisionとrecallにどのように関係するのでしょうか?上記の分類レポートでは、precision(0.83)とrecall(0.98)が示されています。 - -Precision = tp / (tp + fp) = 162 / (162 + 33) = 0.8307692307692308 - -Recall = tp / (tp + fn) = 162 / (162 + 4) = 0.9759036144578314 - -✅ Q: 混同行列によると、モデルの出来はどうでしたか? A: 悪くありません。true negativeがかなりの数ありますが、false negativeもいくつかあります。 - -先ほどの用語を、混同行列の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: 各ラベルのサポート数(各ラベルの真のインスタンス数)で重み付けすることにより、ラベルの不均衡を考慮して、各ラベルの平均指標を算出する。 - -✅ 自分のモデルでfalse negativeの数を減らしたい場合、どの指標に注目すべきか考えられますか? - -## モデルのROC曲線を可視化する - -これは悪いモデルではありません。精度は80%の範囲で、理想的には、一連の変数が与えられたときにカボチャの色を予測するのに使うことができます。 - -いわゆる「ROC」スコアを見るために、もう一つの可視化を行ってみましょう。 - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` -Seaborn を再度使用して、モデルの [受信者操作特性 (Receiving Operating Characteristic)](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) またはROCをプロットします。ROC曲線は、分類器の出力を、true positiveとfalse positiveの観点から見るためによく使われます。ROC曲線は通常、true positive rateをY軸に、false positive rateをX軸にとっています。したがって、曲線の急峻さと、真ん中の線形な線と曲線の間のスペースが重要で、すぐに頭を上げて中線を超えるような曲線を求めます。今回のケースでは、最初にfalse positiveが出て、その後、ラインがきちんと上に向かって超えていきます。 - -![ROC](../images/ROC.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) を使って、実際の「Area Under the Curve」(AUC)を計算します。 - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -結果は`0.6976998904709748`となりました。AUCの範囲が0から1であることを考えると、大きなスコアが欲しいところです。なぜなら、予測が100%正しいモデルはAUCが1になるからです。 - -今後の分類のレッスンでは、モデルのスコアを向上させるための反復処理の方法を学びます。一旦おめでとうございます。あなたはこの回帰のレッスンを完了しました。 - ---- -## 🚀チャレンジ - -ロジスティック回帰については、まだまだ解き明かすべきことがたくさんあります。しかし、学ぶための最良の方法は、実験することです。この種の分析に適したデータセットを見つけて、それを使ってモデルを構築してみましょう。ヒント:面白いデータセットを探すために[Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) を試してみてください。 - -## [講義後クイズ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) - -## レビュー & 自主学習 - -ロジスティック回帰の実用的な使い方について、[Stanfordからのこの論文](https://web.stanford.edu/~jurafsky/slp3/5.pdf) の最初の数ページを読んでみてください。これまで学んできた回帰タスクのうち、どちらか一方のタイプに適したタスクについて考えてみてください。何が一番うまくいくでしょうか? - -## 課題 - -[回帰に再挑戦する](./assignment.ja.md) diff --git a/2-Regression/4-Logistic/translations/README.ko.md b/2-Regression/4-Logistic/translations/README.ko.md deleted file mode 100644 index b8fdb228..00000000 --- a/2-Regression/4-Logistic/translations/README.ko.md +++ /dev/null @@ -1,311 +0,0 @@ -# 카테고리 예측하는 Logistic regression - -![Logistic vs. linear regression infographic](.././images/logistic-linear.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -## 소개 - -기초 _classic_ ML 기술의 하나인, Regression에 대한 마지막 강의에서, Logistic Regression를 보겠습니다. 기술을 사용하면 binary categories를 예측하는 패턴을 찾습니다. 사탕 초콜릿인가요? 질병이 전염되나요? 고객이 제품을 선택하나요? - -이 강의에서, 다음을 배웁니다: - -- 데이터 시각화를 위한 새로운 라이브러리 -- logistic regression 기술 - -✅ [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott)애서 regression의 타입에 대하여 깊게 이해해봅니다. - -## 필요 조건 - -호박 데이터로 작업했고, 지금부터 작업할 수 있는 하나의 binary category: `Color`가 있다는 것을 알기에 충분히 익숙해졌습니다. - -logistic regression 모델을 만들어서 몇가지 변수가 주어졌을 때, _호박의 (오렌지 🎃 또는 화이트 👻)색을 예측해봅니다_. - -> regression에 대하여 강의를 그룹으로 묶어서 binary classification에 관련된 대화를 하는 이유는 뭘까요? logistic regression은 linear-기반이지만, [really a classification method](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)이므로, 단지 언어적으로 편리해서 가능합니다. 다음 강의 그룹에서 데이터를 분류하는 다른 방식에 대하여 배워봅니다. - -## 질문 정의하기 - -목적을 위하여, 바이너리로 표현합니다: 'Orange' 또는 'Not Orange'. 데이터셋에 'striped' 카테고리도 있지만 인스턴스가 약간 있으므로, 사용하지 않을 예정입니다. 데이터셋에서 null 값을 지우면 없어질겁니다. - -> 🎃 재미있는 사실은, 하얀 호박을 'ghost' 호박으로 부르고 있습니다. 조각내기 쉽지 않기 때문에, 오랜지만큼 인기가 없지만 멋집니다! - -## logistic regression 대하여 - -Logistic regression는 일부 중요한 점에서, 이전에 배운, linear regression과 차이가 있습니다. - -### Binary classification - -Logistic regression은 linear regression와 동일한 features를 제공하지 않습니다. 이전은 binary category ("orange or not orange")에 대한 예측을 해주는 데에 비해 후자를 예시로 들어보면, 호박의 태생과 수확 시기에 따라 _가격이 얼마나 오르는 지_ 연속 값을 예측할 수 있습니다. - -![Pumpkin classification Model](.././images/pumpkin-classifier.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### 다른 classifications - -다항 분포와 순서수를 포함한, 다른 타입의 logistic regression이 있습니다: - -- **다항분포**, 하나보다 더 많은 카테고리를 포함합니다. - "Orange, White, and Striped". -- **순서수**, 정렬된 카테고리가 포함되며, 유한한 숫자 크기 (mini,sm,med,lg,xl,xxl)로 정렬된 호박과 같이, 결과를 논리적으로 정렬하고 싶을 때 유용합니다. - -![Multinomial vs ordinal regression](.././images/multinomial-ordinal.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### 여전한 linear - -Regression의 타입은 모두 'category predictions'이지만, 종속 변수 (color)와 다른 독립 변수 (the rest of the dataset, like city name and size) 사이 깔끔한 linear relationship이 있을 때 잘 작동합니다. 변수를 나눌 선형성이 있는 지에 대한 아이디어를 찾는 게 좋습니다. - -### 변수에 상관 관계가 없습니다 - -linear regression이 많은 상관 변수에서 어떻게 작동하는지 기억나시나요? Logistic regression은 - 변수를 정렬할 필요가 없는 반대 입장입니다. 조금 약한 correlations로 데이터가 작용합니다. - -### 깔끔한 데이터가 많이 필요합니다 - -Logistic regression은 많은 데이터로 정확한 결과를 줍니다; 작은 데이터셋은 최적화된 작업이 아니므로, 유념합시다. - -✅ logistic regression에 적당한 데이터의 타입에 대해 생각합니다. - -## 연습 - tidy the data - -먼저, 데이터를 조금 정리하면서, null 값을 드랍하고 일부 열만 선택합니다: - -1. 다음 코드를 추가합니다: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - 항상 새로운 데이터프레임을 살짝 볼 수 있습니다: - - ```python - new_pumpkins.info - ``` - -### 시각화 - side-by-side 그리드 - -호박 데이터가 있는 [starter notebook](.././notebook.ipynb)을 다시 불러오고 `Color` 포함한, 몇 변수를 데이터셋에 컨테이너화하려고 정리했습니다. 다른 라이브러리를 사용해서 노트북에서 데이터프레임을 시각화해봅니다: [Seaborn](https://seaborn.pydata.org/index.html)은, 이전에 썻던 Matplotlib을 기반으로 만들어졌습니다. - -Seaborn은 데이터를 시각화하는 깔끔한 방식들을 제공합니다. 예시로, side-by-side 그리드의 각 포인트에 대한 데이터의 분포를 비교할 수 있습니다. - -1. 호박 데이터 `new_pumpkins`를 사용해서, `PairGrid`를 인스턴스화하고, `map()`을 불러서 그리드를 만듭니다: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![A grid of visualized data](../images/grid.png) - - 데이터를 side-by-side로 지켜보면, 다른 열과 어떻게 관계가 이루어지는 지 볼 수 있습니다. - - ✅ scatterplot 그리드가 주어지면, 흥미있는 탐구를 구상할 수 있나요? - -### swarm plot 사용하기 - -색상은 binary category (Orange or Not)이므로, 'categorical data'라고 부르고 '시각화에는 더 [specialized approach](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)'가 필요합니다. 카테고리와 다른 변수 관계를 시각화하는 다른 방식도 있습니다. - -Seaborn plots을 side-by-side로 변수를 시각화할 수 있습니다. - -1. 값의 분포를 보여주기 위해서 'swarm' plot을 시도합니다: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![A swarm of visualized data](../images/swarm.png) - -### Violin plot - -'violin' 타입 plot은 두개 카테고리의 데이터 배포하는 방식을 쉽게 시각화할 수 있어서 유용합니다. Violin plots은 분포가 더 'smoothly'하게 출력하기 때문에 더 작은 데이터셋에서 작동하지 않습니다. - -1. 파라미터 `x=Color`, `kind="violin"` 와 `catplot()`을 호출합니다: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![a violin type chart](../images/violin.png) - - ✅ 다른 변수를 사용해서, plot과 다른 Seaborn plots을 만들어봅니다. - -이제부터 색상의 binary categories와 큰 사이즈의 그룹 사이 관계에 대한 아이디어를 낼 수 있으므로, 주어진 호박의 가능한 색상을 결정하기 위해서 logistic regression를 찾아봅니다. - -> **🧮 Show Me The Math** -> -> linear regression이 값에 도달하기 위해서 자주 ordinary least squares을 사용하는 방식이 생각날까요? Logistic regression은 [sigmoid functions](https://wikipedia.org/wiki/Sigmoid_function)으로 'maximum likelihood' 컨셉에 의존합니다. plot의 'Sigmoid Function'은 'S' 모양으로 보이기도 합니다. 값을 가져와서 0과 1 사이 맵핑합니다. 이 곡선을 'logistic curve'라고 부릅니다. 공식은 이와 같습니다: -> -> ![logistic function](../images/sigmoid.png) -> -> 시그모이드의 중간 지점은 x의 0 포인트에서 자기자신이며, L은 곡선의 최대 값, 그리고 k는 곡선의 기울기입니다. 만약 함수의 결과가 0.5보다 크면, 질문 레이블에서 binary choice의 클래스 '1'이 할당됩니다. 만약 아니면, '0'으로 분류됩니다. - -## 모델 만들기 - -binary classification을 찾는 모델을 만드는 건 Scikit-learn에서 놀랍도록 간단합니다. - -1. classification 모델을 사용하고 싶은 변수를 선택하고 `train_test_split()`을 불러서 훈련과 테스트할 셋으로 나눕니다: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_pumpkins['Color'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - ``` - -1. 이제부터 훈련된 데이터로 `fit()`을 불러서, 모델을 훈련하고, 결과를 출력할 수 있습니다: - - ```python - from sklearn.model_selection import train_test_split - 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)) - ``` - - 모델의 스코어보드를 봅니다. 데이터의 100개 행만 있다는 것을 고려하면, 나쁘지 않습니다 - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## confusion matrix으로 더 좋게 이해하기 - -이 아이템을 출력해서 스코어보드 리포트 [terms](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)를 얻을 수 있지만, 모델의 성능을 이해하는 순간 도와주는 [confusion matrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)를 사용하여 모델을 쉽게 이해할 수 있게 됩니다. - -> 🎓 '[confusion matrix](https://wikipedia.org/wiki/Confusion_matrix)' (또는 'error matrix')는 모델의 true 대 false 로 긍정 및 부정을 나타내서, 예측의 정확도를 측정하는 테이블입니다. - -1. `confusion_matrix()` 불러서, confusion metrics를 사용합니다: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - 모델의 confusion matrix를 봅니다: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -Scikit-learn에서, confusion matrices 행은 (axis 0) 실제 라벨이고 열은 (axis 1) 예측된 라벨입니다. - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -어떤 일이 생기나요? 모델이 'orange'와 'not-orange' 카테고리의, 두 바이너리 카테고리로 호박을 분류하게 요청받았다고 가정합니다. - -- 만약 모델이 호박을 오랜지색이 아닌 것으로 예측하고 실제로 'not-orange' 카테고리에 있다면 좌측 상단에서 보여지고, true negative 라고 불립니다. -- 만약 모델이 호박을 오랜지색으로 예측하고 실제로 'not-orange' 카테고리에 있다면 좌측 하단에 보여지고, false negative 라고 불립니다. -- 만약 모델이 호박을 오랜지색이 아닌 것으로 예측하고 실제로 'orange' 카테고리에 있다면 우측 상단에 보여지고, false positive 라고 불립니다. -- 만약 모델이 호박을 오랜지색으로 예측하고 실제로 'orange' 카테고리에 있다면 우측 하단에 보여지고, true positive 라고 불립니다. - -예상한 것처럼 true positives와 true negatives는 큰 숫자를 가지고 false positives와 false negatives은 낮은 숫자을 가지는 게 더 좋습니다, 모델의 성능이 더 좋다는 것을 의미합니다. - -confusion matrix는 정확도와 재현율에 얼마나 관련있나요? classification 리포트에 정확도와 (0.83) 재현율 (0.98)으로 보여져서 출력되었습니다. - -Precision = tp / (tp + fp) = 162 / (162 + 33) = 0.8307692307692308 - -Recall = tp / (tp + fn) = 162 / (162 + 4) = 0.9759036144578314 - -✅ Q: confusion matrix에 따르면, 모델은 어떻게 되나요? A: 나쁘지 않습니다; true positives의 많은 숫자뿐만 아니라 몇 false negatives도 있습니다. - -confusion matrix TP/TN 과 FP/FN의 맵핑으로 미리 본 용어에 대하여 다시 봅니다: - -🎓 정밀도: TP/(TP + FP) 검색된 인스턴스 중 관련된 인스턴스의 비율 (예시. 잘 라벨링된 라벨) - -🎓 재현율: TP/(TP + FN) 라벨링이 잘 되었는 지 상관없이, 검색한 관련된 인스턴스의 비율 - -🎓 f1-score: (2 * precision * recall)/(precision + recall) 정밀도와 재현율의 가중치 평균은, 최고 1과 최저 0 - -🎓 Support: 검색된 각 라벨의 발생 수 - -🎓 정확도: (TP + TN)/(TP + TN + FP + FN) 샘플에서 정확한 예측이 이루어진 라벨의 백분율 - -🎓 Macro Avg: 라벨 불균형을 고려하지 않고, 각 라벨의 가중치가 없는 평균 지표를 계산합니다. - -🎓 Weighted Avg: (각 라벨의 true 인스턴스 수) 지원에 따라 가중치를 할당해서 라벨 불균형을 고려해보고, 각 라벨의 평균 지표를 계산합니다. - -✅ 만약 모델이 false negatives의 숫자를 줄어들게 하려면 어떤 지표를 봐야할 지 생각할 수 있나요? - -## 모델의 ROC 곡선 시각화 - -나쁜 모델은 아닙니다; 정확도가 80% 범위라서 이상적으로 주어진 변수의 셋에서 호박의 색을 예측할 때 사용할 수 있습니다. - -'ROC' 스코어라는 것을 보려면 더 시각화해봅니다: - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` - -Seaborn을 다시 사용해서, 모델의 [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) 또는 ROC를 plot합니다. ROC 곡선은 classifier의 아웃풋을 true 대 false positives 관점에서 보려고 수시로 사용됩니다. "ROC curves typically feature true positive rate on the Y axis, and false positive rate on the X axis." 따라서, 곡선의 경사도와 중간 포인트 라인과 곡선 사이 공간이 중요합니다; 라인 위로 빠르게 지나는 곡선을 원합니다. 이 케이스에서, 시작해야 할 false positives가 있고, 라인이 적당하게 계속 이어집니다: - -![ROC](.././images/ROC.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)를 사용해서 실제 'Area Under the Curve' (AUC)를 계산합니다: - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -결과는 `0.6976998904709748`입니다. AUC 범위가 0부터 1까지 주어지면, 100% 예측하는 정확한 모델의 AUC가 1이므로, 큰 스코어를 원하게 됩니다. 이 케이스는, 모델이 _의외로 좋습니다_. - -classifications에 대한 이후 강의에서, 모델의 스코어를 개선하기 위하여 반복하는 방식을 배울 예정입니다. 하지만 지금은, 축하합니다! regression 강의를 완료했습니다! - ---- -## 🚀 도전 - -logistic regression과 관련해서 풀어야할 내용이 더 있습니다! 하지만 배우기 좋은 방식은 실험입니다. 이런 분석에 적당한 데이터셋을 찾아서 모델을 만듭니다. 무엇을 배우나요? 팁: 흥미로운 데이터셋으로 [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets)에서 시도해보세요. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) - -## 검토 & 자기주도 학습 - -logistic regression을 사용하는 약간의 실용적 사용에 대한 [this paper from Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf)의 처음 몇 페이지를 읽어봅니다. 연구했던 regression 작업 중에서 하나 또는 그 외 타입에 적당한 작업을 생각해봅니다. 어떤게 더 잘 작동하나요? - -## 과제 - -[Retrying this regression](../assignment.md) diff --git a/2-Regression/4-Logistic/translations/README.pt-br.md b/2-Regression/4-Logistic/translations/README.pt-br.md deleted file mode 100644 index fbf7eb51..00000000 --- a/2-Regression/4-Logistic/translations/README.pt-br.md +++ /dev/null @@ -1,311 +0,0 @@ -# Regressão logística para prever categorias - -![Infográfico de regressão logística versus regressão linear](../images/logistic-linear.png) -> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15?loc=ptbr) - -> ### [Esta liçao está disponível em R!](../solution/R/lesson_4-R.ipynb) - -## Introdução - -Nesta lição final sobre Regressão, uma das técnicas básicas do ML _clássico_, vamos estudar a Regressão Logística. Essa técnica serve para descobrir padrões e prever categorias binárias. Este doce é de chocolate ou não? Esta doença é contagiosa ou não? Este cliente vai escolher este produto ou não? - -Você irá aprender: - -- Uma nova biblioteca para visualização de dados -- Técnicas de regressão logística - -✅ Aprofunde seu conhecimento de como trabalhar com este tipo de regressão neste [módulo](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott). - -## Pré-requisito - -Tendo trabalhado com os dados das abóboras, estamos familiarizados o suficiente com eles para perceber que há uma categoria binária com a qual podemos trabalhar: `Color` (cor). - -Vamos construir um modelo de regressão logística para prever _qual a cor que a abóbora provavelmente terá_ (laranja 🎃 ou branca 👻), com base em algumas colunas. - -> Por que estamos falando de classificação binária em um grupo de lições sobre regressão? Apenas por conveniência linguística, regressão logística é [um método de classificação](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), mesmo sendo linear. Vamos aprender outros modos de classificar dados em lições mais a frente. - -## Defina a pergunta - -Para esta lição, expressaremos 'Orange' (Laranja) ou 'Not Orange' (Não Laranja) como um dado binário. Existe uma categoria 'striped' (listrada) em nosso conjunto de dados, mas há poucas instâncias dela, então não a usaremos. Ela desaparece assim que removemos os valores nulos no conjunto de dados. - -> 🎃 Curiosidade: podemos chamar as abóboras brancas de 'abóboras fantasmas'. Elas não são fáceis de esculpir, por isso não são tão populares quanto as laranjas mas são legais também! - -## Sobre a regressão logística - -A regressão logística difere da regressão linear em alguns aspectos importantes. - -### Classificação binária - -A regressão logística oferece uma previsão sobre uma categoria binária ("laranja ou não laranja"), enquanto a linear é capaz de prever valores contínuos, por exemplo: _quanto o preço de uma abóbora vai subir_ dada sua origem e a época de colheita. - -![Modelo de classificação de abóboras](../images/pumpkin-classifier.png) -> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Outros tipos de classificações - -Existem outros tipos de regressão logística, incluindo multinomial e ordinal: - -- **Multinomial**, que envolve ter mais de uma categoria - "Laranja, Branco e Listrado". -- **Ordinal**, que envolve categorias ordenadas. É útil se quisermos ordenar nossos resultados logicamente, como nossas abóboras que são ordenadas por um número finito de tamanhos (mini, sm, med, lg, xl, xxl). - -![Regressão multinomial versus ordina](../images/multinomial-ordinal.png) -> Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Continua sendo linear - -Embora esse tipo de regressão esteja relacionado a "previsões de categoria", ele funciona ainda melhor quando há uma relação linear clara entre a variável dependente (cor) e as outras variáveis ​​independentes (o resto do conjunto de dados, como o nome da cidade e as dimensões). É bom saber se existe alguma relação linear entre essas variáveis previamente. - -### Variáveis ​​NÃO devem ser correlacionadas - -Lembra como a regressão linear funcionou melhor com variáveis ​​correlacionadas? A regressão logística é o oposto: as variáveis ​​não precisam disso. Logo, funciona para dados que têm correlações baixas. - -### Você precisará de muitos dados. E tratados. - -A regressão logística fornecerá resultados mais precisos se você usar mais dados; portanto, tenha em mente que, como o conjunto de dados das abóboras é pequeno, talvez não sirva para esta tarefa. - -✅ Pense sobre os tipos de dados que funcionariam bem com regressão logística. - -## Exercício - Organizar os dados - -Primeiro, limpamos os dados eliminando os valores nulos e selecionando apenas algumas das colunas: - -1. Adicione o seguinte código: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - Você pode usar o código abaixo dar uma espiada em como está seu _dataframe_: - - ```python - new_pumpkins.info - ``` - -### Visualização: _side-by-side grid_ (grade lado-a-lado) - -Após carregar mais uma vez seu [_notebook_](../notebook.ipynb) com os dados das abóboras e tratá-los para preservar um conjunto de dados contendo algumas colunas, incluindo `Color`, vamos visualizar o _dataframe_ no _notebook_ usando uma biblioteca diferente: a [Seaborn](https://seaborn.pydata.org/index.html). - -Seaborn oferece algumas maneiras interessantes de visualizar dados. Por exemplo, você pode comparar as distribuições dos dados para cada ponto em uma grade lado-a-lado. - -1. Crie a grade instanciando um `PairGrid`, usando nossos dados de abóboras `new_pumpkins`, seguido pela chamada da função `map()`: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![Uma grade para visualização de dados](../images/grid.png) - - Olhando os dados lado a lado, você pode ver como os dados da coluna `Color` se relacionam com as outras colunas. - - ✅ Consegue imaginar o que podemos explorar, dada essa grade de gráficos de dispersão? - -### Gráfico _swarm_ - -Como `Color` é uma categoria binária (laranja ou não), ela é chamada de 'dado categórico' e precisa de 'uma [abordagem mais especializada](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) para visualização'. Existem outras maneiras de visualizar a relação desta coluna com as outras. - -As colunas ​​podem ser visualizadas lado a lado com os gráficos Seaborn. - -1. Experimente um gráfico _swarm_ para mostrar a distribuição de valores: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![Dados visualizados num gráfico _swarm_](../images/swarm.png) - -### Gráfico violino - -Um gráfico do tipo "violino" é útil para visualizar como os dados são distribuídos nas duas categorias. Plotagens semelhantes a violino não funcionam tão bem com conjuntos de dados menores porque a distribuição é exibida de forma mais "uniforme". - -1. Use como parâmetros `x=Color`, `kind="violin"` e chame a função `catplot()`: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![Gráfico violino](../images/violin.png) - - ✅ Tente criar este gráfico e outros gráficos Seaborn, usando outras colunas. - -Agora podemos imaginar a relação entre as duas categorias binárias de cor e tamanho (_item size_). Vamos explorar a regressão logística para prever a cor de uma abóbora em particular. - -> **🧮 Me mostre a matemática** -> -> Você se lembra como a regressão linear costumava usar mínimos quadrados comuns para chegar a um valor? A regressão logística depende do conceito de 'probabilidade máxima' usando [funções sigmóide](https://wikipedia.org/wiki/Sigmoid_function). Uma 'função sigmóide' em um gráfico parece estar na forma de um 'S'. Ela pega um valor e o mapeia para algo entre 0 e 1. Sua curva também é chamada de 'curva logística'. Sua fórmula é assim: -> -> ![logistic function](../images/sigmoid.png) -> -> o ponto médio do sigmóide encontra-se no eixo X. `L` é o valor máximo da curva e `k` é a inclinação da curva. Se o resultado da função for maior que 0.5, o valor atribuído à função será classificado como '1'. Caso contrário, será classificado como '0'. - -## Construindo um modelo - -Construir um modelo para encontrar classificações binárias é muito simples no Scikit-learn. - -1. Selecione as colunas que deseja usar em seu modelo de classificação e divida os conjuntos de dados em conjuntos de treinamento e teste chamando `train_test_split()`: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_pumpkins['Color'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - ``` - -1. Usando seus dados de treinamento, treine seu modelo chamando a função `fit()`, e imprima o resultado: - - ```python - from sklearn.model_selection import train_test_split - 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)) - ``` - - Veja o placar do seu modelo. Nada mal, especialmente com apenas 1000 linhas de dados: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## Melhor compreensão usando Matriz de Confusão - -Embora você possa obter os [valores](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) de um relatório de *placar* do seu modelo como na *impressão* acima, você pode entender melhor o desempenho do seu modelo com uma [matriz de confusão](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix). - -> 🎓 Uma '[matriz de confusão](https://wikipedia.org/wiki/Confusion_matrix)' (ou 'matriz de erro') é uma tabela que expressa os verdadeiros e falsos positivos e negativos, medindo a acurácia das previsões. - -1. Para obter a matriz de confusão, chame a função `confusion_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Dê uma olhada na matriz de confusão do seu modelo: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -> Na Scikit-learn, as linhas nas matrizes de confusão (eixo 0) são classes reais e colunas (eixo 1) são classes previstas. - -> | | 0 | 1 | -> | :---: | :---: | :---: | -> | 0 | TP (True Positive = Verdadeiro Positivo) | FN (False Negative = Falso Negativo) | -> | 1 | FP (False Positive = Falso Positivo) | TN (True Negative = Verdadeiro Negativo) | - -O que está acontecendo aqui? Supondo que nosso modelo tenha que classificar as abóboras entre duas categorias binárias, categoria 'laranja' e categoria 'não laranja': - -- Se o seu modelo prevê que uma abóbora não é laranja e ela pertence à categoria 'não laranja', chamamos isso de verdadeiro negativo. -- Se o seu modelo prevê que uma abóbora é laranja e ela pertence à categoria 'não laranja', chamamos isso de falso positivo. -- Se o seu modelo prevê que uma abóbora não é laranja e ela pertence à categoria 'laranja', chamamos isso de falso negativo. -- Se o seu modelo prevê que uma abóbora é laranja e ela pertence à categoria 'laranja', chamamos isso de verdadeiro positivo. - -Podemos perceber que é melhor ter um número maior de positivos e negativos verdadeiros e um número menor de positivos e negativos falsos pois, isso significa que o modelo tem um desempenho melhor. - -✅ Pergunta: Com base na matriz de confusão, o modelo é bom ou não? Resposta: nada mal; existem muitos verdadeiros positivos (162) e poucos falsos negativos (4). - -Vamos revisitar os termos que vimos anteriormente com a ajuda da matriz de confusão de TP / TN e FP / FN: - -🎓 Precision: TP / (TP + FP). Razão de dados relevantes que foram previstos corretamente entre todos os dados do conjunto. - -🎓 Recall: TP / (TP + FN). A proporção dos dados relevantes que foram previstos, estando rotulados corretamente ou não. - -🎓 f1-score (pontuação f1): (2 * precision * recall)/(precision + recall). Uma média ponderada entre _precision_ e _recall_. 1 é bom e 0 é ruim. - -🎓 Support (suporte): O número de ocorrências de cada classe. - -🎓 Accuracy (acurácia): (TP + TN) / (TP + TN + FP + FN). Porcentagem de classes previstas corretamente para uma amostra. - -🎓 Macro avg (média macro): Média simples (não ponderada) das métricas de cada classe. - -🎓 Weighted Avg (média Ponderada): Média ponderada dos valores de _Support_ de cada classe. - -Como a matriz de confusão se relaciona com _precision_ (precisão) e _recall_ (cobertura)? A matriz de confusão mostrada acima possui valores de precisão (0.83) e _recall_ (0.98), pois: - -Precision = TP / (TP + FP) = 162 / (162 + 33) = 0.8307692307692308 - -Recall = TP / (TP + FN) = 162 / (162 + 4) = 0.9759036144578314 - -✅ Você consegue perceber qual métrica deve ser usada se quiser que seu modelo reduza o número de falsos negativos? - -## Visualizando a curva ROC de um modelo - -O modelo construído não é ruim. A acurácia é de cerca de 80%, então ele pode ser usado para prever a cor de uma abóbora com base em algumas colunas. - -Vamos usar mais um tipo de visualização utilizando a ROC: - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` -Usando a Seaborn novamente, plote a [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) (Característica de Operação do Receptor) do modelo ou ROC. As curvas ROC são muito usadas para obter uma visão da saída de um classificador em termos de seus verdadeiros versus falsos positivos. "As curvas ROC normalmente apresentam taxa de verdadeiro positivo no eixo Y e taxa de falso positivo no eixo X." Assim, a inclinação da curva e o espaço entre a linha do ponto médio e a curva são importantes: precisamos de uma curva que sobe e passa pela linha. No nosso caso, existem falsos positivos no começo e, em seguida, a linha avança corretamente: - -![ROC](../images/ROC.png) - -Por fim, usamos a [API `roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) da Scikit-learn para calcular a 'Area Under the Curve' (área sob a curva) ou AUC: - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -O resultado é `0.6976998904709748`. Sabendo que a AUC varia de 0 a 1, o ideal é uma pontuação alta, pois um modelo que está 100% correto em suas previsões terá uma AUC de 1; neste caso, o modelo é _muito bom_. - -Em outras lições sobre classificação, você aprenderá como iterar para melhorar as pontuações do seu modelo. Mas por enquanto, parabéns! Você concluiu as lições sobre regressão! - ---- -## 🚀Desafio - -Ainda há muito sobre regressão logística! E a melhor maneira de aprender é experimentando. Encontre um conjunto de dados para este tipo de análise e construa um modelo com ele. O que você aprendeu? dica: tente o [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para conjuntos de dados interessantes. - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Leia as primeiras páginas [deste artigo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sobre alguns usos práticos da regressão logística. Pense nas tarefas mais adequadas para um ou outro tipo de tarefa de regressão que estudamos até agora. O que funcionaria melhor? - -## Tarefa - -[Refazendo a regressão](assignment.pt-br.md) diff --git a/2-Regression/4-Logistic/translations/README.pt.md b/2-Regression/4-Logistic/translations/README.pt.md deleted file mode 100644 index 22fb10bb..00000000 --- a/2-Regression/4-Logistic/translations/README.pt.md +++ /dev/null @@ -1,302 +0,0 @@ -# Regressão logística para prever categorias - -![Infográfico logístico vs. regressão linear](../images/logistic-linear.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Questionário pré-palestra](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -> ### [Esta lição está disponível em R!](./solution/R/lesson_4-R.ipynb) - -## Introdução - -Nesta lição final sobre Regressão, uma das técnicas básicas _classic_ ML, vamos dar uma olhada na Regressão Logística. Usaria esta técnica para descobrir padrões para prever categorias binárias. Isto é chocolate doce ou não? Esta doença é contagiosa ou não? Este cliente escolherá este produto ou não? - -Nesta lição, aprenderá: -- Uma nova biblioteca para visualização de dados -- Técnicas de regressão logística - -✅ aprofundar a sua compreensão de trabalhar com este tipo de regressão neste [módulo Aprender](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) -## Pré-requisito - -Tendo trabalhado com os dados da abóbora, estamos agora familiarizados o suficiente para perceber que há uma categoria binária com a qual podemos trabalhar:` Cor`. - -Vamos construir um modelo de regressão logística para prever que, dadas algumas variáveis, _what cor de uma dada abóbora é provável que be_ (🎃 laranja ou 👻 branco). - -> Porque estamos a falar de classificação binária num agrupamento de aulas sobre regressão? Apenas para conveniência linguística, uma vez que a regressão logística é [realmente um método de classificação](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression),embora um linear baseado. Saiba mais sobre outras formas de classificar os dados no próximo grupo de aulas. - -## Definir a pergunta -Para os nossos propósitos, vamos expressar isto como um binário: "Laranja" ou "Não Laranja". Existe também uma categoria de "listrado" no nosso conjunto de dados, mas há poucos casos dele, pelo que não a utilizaremos. Desaparece assim que removemos os valores nulos do conjunto de dados, de qualquer forma. - -> 🎃 facto divertido, às vezes chamamos abóboras brancas de abóboras "fantasma". Não são muito fáceis de esculpir, por isso não são tão populares como os laranjas, mas são fixes! - -## About logistic regression - -A regressão logística difere da regressão linear, que aprendeu anteriormente, de algumas formas importantes. -### Classificação binária - -A regressão logística não oferece as mesmas características que a regressão linear. O primeiro oferece uma previsão sobre uma categoria binária ("laranja ou não laranja"),) enquanto esta é capaz de prever valores contínuos, por exemplo dada a origem de uma abóbora e a hora da colheita, _how muito o seu preço irá rise_. - -![Modelo de classificação de abóbora](../images/pumpkin-classifier.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) -### Outras classificações - -Existem outros tipos de regressão logística, incluindo multinóia e ordinária: -- **Multinomial**, que envolve ter mais de uma categoria - "Laranja, Branco e Listrado". -- **Ordinal**, que envolve categorias ordenadas, úteis se quiséssemos encomendar os nossos resultados logicamente, como as nossas abóboras que são encomendadas por um número finito de tamanhos (mini,sm,med,lg,xl,xxl). - -![Regressão multinomial vs ordinal](../images/multinomial-ordinal.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) -### Ainda é linear - -Embora este tipo de Regressão seja tudo sobre "previsões de categoria", ainda funciona melhor quando há uma relação linear clara entre a variável dependente (cor) e as outras variáveis independentes (o resto do conjunto de dados, como o nome e o tamanho da cidade). É bom ter uma ideia de se há alguma linearidade dividindo estas variáveis ou não. - -### Variáveis NÃO têm que correlacionar -Lembras-te de como a regressão linear funcionou melhor com variáveis mais correlacionadas? A regressão logística é o oposto - as variáveis não têm que se alinhar. Isso funciona para estes dados que têm correlações um pouco fracas. - -### Precisa de muitos dados limpos - -A regressão logística dará resultados mais precisos se utilizar mais dados; nosso pequeno conjunto de dados não é o ideal para esta tarefa, por isso tenha isso em mente. - -✅ Pense nos tipos de dados que se emprestariam bem à regressão logística - -## Exercício - arrumar os dados - -Primeiro, limpe um pouco os dados, baixando os valores nulos e selecionando apenas algumas das colunas: - -1. Adicione o seguinte código: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - Pode sempre dar uma olhada no seu novo dataframe: - - ```python - new_pumpkins.info - ``` - -### Visualização - grelha lado a lado - -Por esta altura já já carregou o [caderno de entrada](./notebook.ipynb) com dados de abóbora mais uma vez e limpou-os de modo a preservar um conjunto de dados contendo algumas variáveis, incluindo `Color`. Vamos visualizar o quadro de dados no caderno usando uma biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que é construída em Matplotlib que usamos anteriormente. - -Seaborn oferece algumas maneiras limpas de visualizar os seus dados. Por exemplo, pode comparar distribuições dos dados por cada ponto numa grelha lado a lado. - -1. Crie tal rede através da instantânea `PairGrid`, utilizando os nossos dados de abóbora `new_pumpkins`, seguidos de `map()`: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![A grid of visualized data](../images/grid.png) - - Ao observar dados lado a lado, pode ver como os dados de Cor se relacionam com as outras colunas. - - ✅ Dada esta grelha de dispersão, quais são algumas explorações interessantes que podes imaginar? - -### Use um enredo de enxame -Uma vez que a Cor é uma categoria binária (Laranja ou Não), chama-se "dados categóricos" e precisa de "uma abordagem mais [especializada](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) à visualização". Há outras formas de visualizar a relação desta categoria com outras variáveis. - - Você pode visualizar variáveis lado a lado com parcelas seaborn. - -1. Experimente um plano de 'enxame' para mostrar a distribuição de valores: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![Um enxame de dados visualizados](../images/swarm.png) - -### Enredo de violino - -Um gráfico de tipo 'violino' é útil, pois você pode visualizar facilmente a forma como os dados nas duas categorias são distribuídos. Os gráficos de violino não funcionam tão bem com conjuntos de dados menores, pois a distribuição é exibida mais 'suavemente'. - -1. Como parâmetros `x=Color`, `kind="violin"` e chamada `catplot()`: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![a violin type chart](images/violin.png) - - ✅ Tente criar este enredo, e outros enredos de Seaborn, usando outras variáveis. - -Agora que temos uma ideia da relação entre as categorias binárias de cor e o grupo maior de tamanhos, vamos explorar a regressão logística para determinar a cor provável de uma dada abóbora. - -> **🧮 Mostre-Me A Matemática** -> -> Lembram-se como a regressão linear frequentemente usava mínimos quadrados ordinários para chegar a um valor? A regressão logística baseia-se no conceito de "máxima verossimilhança" utilizando [funções sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Uma 'Função Sigmoide' em uma trama se parece com uma forma 'S'. Ele pega um valor e o mapeia para algum lugar entre 0 e 1. Sua curva também é chamada de "curva logística". Sua fórmula é assim: -> -> ![função logística](images/sigmoid.png) -> -> onde o ponto médio do sigmoide se encontra no ponto 0 de x, L é o valor máximo da curva, e k é a inclinação da curva. Se o resultado da função for maior que 0,5, o rótulo em questão receberá a classe '1' da escolha binária. Caso contrário, será classificado como "0". - -## Crie o seu modelo - -Construir um modelo para encontrar essas classificações binárias é surpreendentemente simples no Scikit-learn. - -1. Selecione as variáveis que deseja utilizar no seu modelo de classificação e divida os conjuntos de treino e teste que chamam `train_test_split()`: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_pumpkins['Color'] - - X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - - ``` - -1. Agora você pode treinar seu modelo, chamando `fit()` com seus dados de treinamento e imprimir o resultado: - - ```python - from sklearn.model_selection import train_test_split - from sklearn.metrics import accuracy_score, classification_report - from sklearn.linear_model import LogisticRegression - - model = LogisticRegression() - model.fit(X_train, y_train) - predictions = model.predict(X_test) - - print(classification_report(y_test, predictions)) - print('Predicted labels: ', predictions) - print('Accuracy: ', accuracy_score(y_test, predictions)) - ``` - - Dê uma olhada no placar do seu modelo. Não é tão ruim, considerando que você tem apenas cerca de 1000 linhas de dados: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## Melhor compreensão através de uma matriz de confusão - -Enquanto você pode obter um relatório de placar [termos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) imprimindo os itens acima, você pode ser capaz de entender seu modelo mais facilmente usando uma [matriz confusão](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para nos ajudar a entender como o modelo está se saindo. - -> 🎓 A '[matriz de confusão](https://wikipedia.org/wiki/Confusion_matrix)' (ou 'matriz de erros') é uma tabela que expressa os verdadeiros versus falsos positivos e negativos do seu modelo, avaliando assim a precisão das previsões. - -1. Para usar uma métrica de confusão, chame`confusion_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Dê uma olhada na matriz de confusão do seu modelo: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -No Scikit-learn, matrizes de confusão Linhas (eixo 0) são rótulos reais e colunas (eixo 1) são rótulos previstos. - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -O que está acontecendo aqui? Digamos que nosso modelo é solicitado a classificar abóboras entre duas categorias binárias, categoria 'laranja' e categoria 'não-laranja'. - -- Se o seu modelo prevê uma abóbora como não laranja e pertence à categoria 'não-laranja' na realidade chamamos-lhe um verdadeiro negativo, mostrado pelo número superior esquerdo. -- Se o seu modelo prevê uma abóbora como laranja e pertence à categoria 'não-laranja' na realidade chamamos-lhe um falso negativo, mostrado pelo número inferior esquerdo. -- Se o seu modelo prevê uma abóbora como não laranja e pertence à categoria 'laranja' na realidade chamamos-lhe um falso positivo, mostrado pelo número superior direito. -- Se o seu modelo prevê uma abóbora como laranja e ela pertence à categoria 'laranja' na realidade nós chamamos de um verdadeiro positivo, mostrado pelo número inferior direito. - -Como vocês devem ter adivinhado, é preferível ter um número maior de verdadeiros positivos e verdadeiros negativos e um número menor de falsos positivos e falsos negativos, o que implica que o modelo tem melhor desempenho. - -Como a matriz de confusão se relaciona com precisão e evocação? Lembre-se, o relatório de classificação impresso acima mostrou precisão (0,83) e recuperação (0,98). - -Precision = tp / (tp + fp) = 162 / (162 + 33) = 0.8307692307692308 - -Recall = tp / (tp + fn) = 162 / (162 + 4) = 0.9759036144578314 - -✅ Q: De acordo com a matriz de confusão, como foi o modelo? A: Nada mal. há um bom número de verdadeiros negativos, mas também vários falsos negativos. - -Vamos revisitar os termos que vimos anteriormente com a ajuda do mapeamento da matriz confusão de TP/TN e FP/FN: - -🎓 precisão: TP/(TP + FP) A fração de instâncias relevantes entre as instâncias recuperadas (por exemplo, quais rótulos estavam bem rotulados) - -🎓 Chamada: TP/(TP + FN) A fração de instâncias relevantes que foram recuperadas, sejam bem rotuladas ou não - -🎓 f1- score: (2 * precisão * recolha)/(precisão + recolha) Uma média ponderada da precisão e recolha, sendo a melhor 1 e a pior 0 - -Suporte 🎓: O número de ocorrências de cada rótulo recuperado - -🎓 precisão: (TP + TN)/(TP + TN + FP + FN) A percentagem de rótulos previstos com precisão para uma amostra. - -🎓 Méd. de Macro: O cálculo das métricas médias não ponderadas para cada rótulo, sem levar em conta o desequilíbrio do rótulo. - -🎓 Média Ponderada: O cálculo das métricas médias para cada label, levando em conta o desequilíbrio de label ponderando-as pelo suporte (o número de instâncias verdadeiras para cada label). - -Consegue pensar qual métrica deve observar se quiser que o seu modelo reduza o número de falsos negativos? - -## Visualizar a curva de ROC deste modelo - -Este não é um mau modelo; sua precisão está na faixa de 80%, então idealmente você poderia usá-lo para prever a cor de uma abóbora dado um conjunto de variáveis. - -Vamos fazer mais uma visualização para ver a chamada pontuação 'ROC': - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` -Usando Seaborn novamente, plote a [Característica de operação de recepção](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ou ROC do modelo. Curvas ROC são frequentemente usadas para obter uma visão da saída de um classificador em termos de seus verdadeiros versus falsos positivos. "As curvas ROC geralmente apresentam taxa positiva verdadeira no eixo Y e taxa positiva falsa no eixo X." Assim, a inclinação da curva e o espaço entre a linha do ponto médio e a matéria da curva: você quer uma curva que rapidamente se encaminha para cima e sobre a linha. No nosso caso, há falsos positivos para começar, e então a linha se encaminha para cima e para cima corretamente: - -![ROC](./images/ROC.png) - -Finalmente, use o 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) para calcular a 'Área sob a curva' (AUC) real: - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -O resultado é `0,6976998904709748`. Dado que a AUC varia de 0 a 1, você quer uma grande pontuação, uma vez que um modelo que é 100% correto em suas previsões terá uma AUC de 1; nesse caso, o modelo é _muito bom_. - -Em lições futuras sobre classificações, você aprenderá a iterar para melhorar as pontuações do seu modelo. Mas por enquanto, parabéns! Você completou essas lições de regressão! - ---- -## 🚀Desafio - -Há muito mais a desempacotar em relação à regressão logística! Mas a melhor maneira de aprender é experimentar. Encontre um conjunto de dados que se preste a esse tipo de análise e construa um modelo com ele. O que você aprende? dica: tente [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para obter conjuntos de dados interessantes. - -## [Teste pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) - -## Análise e autoestudo - -Leia as primeiras páginas de [este artigo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sobre alguns usos práticos para regressão logística. Pense em tarefas que são mais adequadas para um ou outro tipo de tarefas de regressão que estudamos até agora. O que funcionaria melhor? - -## Atribuição - -[Repetindo esta regressão](assignment.md) diff --git a/2-Regression/4-Logistic/translations/README.zh-cn.md b/2-Regression/4-Logistic/translations/README.zh-cn.md deleted file mode 100644 index f1aa240f..00000000 --- a/2-Regression/4-Logistic/translations/README.zh-cn.md +++ /dev/null @@ -1,300 +0,0 @@ -# 逻辑回归预测分类 - -![逻辑与线性回归信息图](../images/logistic-linear.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [课前测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -## 介绍 - -在关于回归的最后一课中,我们将学习逻辑回归,这是经典的基本技术之一。你可以使用此技术来发现预测二元分类的模式。这是不是巧克力糖?这种病会传染吗?这个顾客会选择这个产品吗? - -在本课中,你将学习: - -- 用于数据可视化的新库 -- 逻辑回归技术 - -✅ 在此[学习模块](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),尽管是基于线性的。我们将在在下一课组中了解对数据进行分类的其他方法。 - -## 定义问题 - -出于我们的目的,我们将其表示为二进制:“橙色”或“非橙色”。我们的数据集中还有一个“条纹”类别,但它的实例很少,所以我们不会使用它。无论如何,一旦我们从数据集中删除空值,它就会消失。 - -> 🎃 有趣的是,我们有时称白南瓜为鬼南瓜。他们不是很容易雕刻,所以它们不像橙色的那么受欢迎,但它们看起来很酷! - -## 关于逻辑回归 - -逻辑回归在一些重要方面与你之前了解的线性回归不同。 - -### 二元分类 - -逻辑回归不提供与线性回归相同的功能。前者提供关于二元类别(“橙色或非橙色”)的预测,而后者能够预测连续值,例如,给定南瓜的起源和收获时间,_其价格将上涨多少_。 - -![南瓜分类模型](../images/pumpkin-classifier.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### 其他分类 - -还有其他类型的逻辑回归,包括多项和有序: - -- **多项**,涉及多个类别 - “橙色、白色和条纹”。 -- **有序**,涉及有序类别,如果我们想对我们的结果进行逻辑排序非常有用,例如我们的南瓜按有限数量的大小(mini、sm、med、lg、xl、xxl)排序。 - -![多项式与有序回归](../images/multinomial-ordinal.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### 仍然是线性的 - -尽管这种类型的回归都是关于“类别预测”的,但当因变量(颜色)和其他自变量(数据集的其余部分,如城市名称和大小)之间存在明显的线性关系时,它仍然效果最好。最好了解一下这些变量是否存在线性划分。 - -### 变量不必相关 - -还记得线性回归如何更好地处理更多相关变量吗?逻辑回归是相反的——变量不必对齐。这适用于相关性较弱的数据。 - -### 你需要大量干净的数据 - -如果使用更多数据,逻辑回归将给出更准确的结果;我们的小数据集对于这项任务不是最佳的,请记住这一点。 - -✅ 考虑适合逻辑回归的数据类型 - -## 练习 - 整理数据 - -首先,稍微清理一下数据,删除空值并仅选择其中一些列: - -1. 添加以下代码: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - 你可以随时查看新的数据帧: - - ```python - new_pumpkins.info - ``` - -### 可视化 - 并列网格 - -到现在为止,你已经再次使用南瓜数据加载了 [starter notebook](./notebook.ipynb) 并对其进行了清理,以保留包含一些变量(包括 `Color`)的数据集。让我们使用不同的库来可视化 notebook 中的数据帧:[Seaborn](https://seaborn.pydata.org/index.html),它是基于我们之前使用的 Matplotlib 构建的。 - -Seaborn 提供了一些巧妙的方法来可视化你的数据。例如,你可以比较并列网格中每个点的数据分布。 - -1. 通过实例化一个 `PairGrid`,使用我们的南瓜数据 `new_pumpkins`,然后调用 `map()` 来创建这样一个网格: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![可视化数据网格](../images/grid.png) - - 通过并列观察数据,你可以看到颜色数据与其他列的关系。 - - ✅ 鉴于此散点图网格,你可以设想哪些有趣的探索? - -### 使用分类散点图 - -由于颜色是一个二元类别(橙色或非橙色),它被称为“分类数据”,需要一种更[专业的方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)来可视化。还有其他方法可以可视化此类别与其他变量的关系。 - -你可以使用 Seaborn 图并列可视化变量。 - -1. 尝试使用“分类散点”图来显示值的分布: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![分类散点图可视化数据](../images/swarm.png) - -### 小提琴图 - -“小提琴”类型的图很有用,因为你可以轻松地可视化两个类别中数据的分布方式。小提琴图不适用于较小的数据集,因为分布显示得更“平滑”。 - -1. 作为参数 `x=Color`、`kind="violin"` 并调用 `catplot()`: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![小提琴图](../images/violin.png) - - ✅ 尝试使用其他变量创建此图和其他 Seaborn 图。 - -现在我们已经了解了颜色的二元类别与更大的尺寸组之间的关系,让我们探索逻辑回归来确定给定南瓜的可能颜色。 - -> **🧮 数学知识** -> -> 还记得线性回归如何经常使用普通最小二乘法来得出一个值吗?逻辑回归依赖于使用[sigmoid 函数](https://wikipedia.org/wiki/Sigmoid_function) 的“最大似然”概念。绘图上的“Sigmoid 函数”看起来像“S”形。它接受一个值并将其映射到0和1之间的某个位置。它的曲线也称为“逻辑曲线”。它的公式如下所示: -> -> ![逻辑函数](../images/sigmoid.png) -> -> 其中 sigmoid 的中点位于 x 的 0 点,L 是曲线的最大值,k 是曲线的陡度。如果函数的结果大于 0.5,则所讨论的标签将被赋予二进制选择的类“1”。否则,它将被分类为“0”。 - -## 建立你的模型 - -在 Scikit-learn 中构建模型来查找这些二元分类非常简单。 - -1. 选择要在分类模型中使用的变量,并调用 `train_test_split()` 拆分训练集和测试集: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_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.model_selection import train_test_split - 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)) - ``` - - 看看你的模型的记分板。考虑到你只有大约 1000 行数据,这还不错: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## 通过混淆矩阵更好地理解 - -虽然你可以通过获得记分板报告[条目](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)把上面的项目打印出来,通过使用[混淆矩阵](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)可以更容易地理解你的模型,帮助我们了解模型的性能。 - -> 🎓 “[混淆矩阵](https://wikipedia.org/wiki/Confusion_matrix)”(或“误差矩阵”)是一个表格,用于表示模型的真假阳性和假阴性,从而衡量预测的准确性。 - -1. 要使用混淆指标,请调用 `confusin_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - 看看你的模型的混淆矩阵: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -这里发生了什么?假设我们的模型被要求对两个二元类别之间的项目进行分类,即类别“南瓜”和类别“非南瓜”。 - -- 如果你的模型将某物预测为南瓜并且它实际上属于“南瓜”类别,我们将其称为真阳性,由左上角的数字显示。 -- 如果你的模型预测某物不是南瓜,并且它实际上属于“南瓜”类别,我们将其称为假阳性,如右上角的数字所示。 -- 如果你的模型将某物预测为南瓜并且它实际上属于“非南瓜”类别,我们将其称为假阴性,由左下角的数字显示。 -- 如果你的模型预测某物不是南瓜,并且它实际上属于“非南瓜”类别,我们将其称为真阴性,如右下角的数字所示。 - -正如你可能已经猜到的那样,最好有更多的真阳性和真阴性以及较少的假阳性和假阴性,这意味着模型性能更好。 - -✅ Q:根据混淆矩阵,模型怎么样? A:还不错;有很多真阳性,但也有一些假阴性。 - -让我们借助混淆矩阵对TP/TN和FP/FN的映射,重新审视一下我们之前看到的术语: - -🎓 准确率:TP/(TP + FP) 检索实例中相关实例的分数(例如,哪些标签标记得很好) - -🎓 召回率: TP/(TP + FN) 检索到的相关实例的比例,无论是否标记良好 - -🎓 F1分数: (2 * 准确率 * 召回率)/(准确率 + 召回率) 准确率和召回率的加权平均值,最好为1,最差为0 - -🎓 Support:检索到的每个标签的出现次数 - -🎓 准确度:(TP + TN)/(TP + TN + FP + FN) 为样本准确预测的标签百分比。 - -🎓 宏平均值: 计算每个标签的未加权平均指标,不考虑标签不平衡。 - -🎓 加权平均值:计算每个标签的平均指标,通过按支持度(每个标签的真实实例数)加权来考虑标签不平衡。 - -✅ 如果你想让你的模型减少假阴性的数量,你能想出应该关注哪个指标吗? - -## 可视化该模型的 ROC 曲线 - -这不是一个糟糕的模型;它的准确率在 80% 范围内,因此理想情况下,你可以使用它来预测给定一组变量的南瓜颜色。 - -让我们再做一个可视化来查看所谓的“ROC”分数 - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` - -再次使用 Seaborn,绘制模型的[接收操作特性](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)或 ROC。 ROC 曲线通常用于根据分类器的真假阳性来了解分类器的输出。“ROC 曲线通常具有 Y 轴上的真阳性率和 X 轴上的假阳性率。” 因此,曲线的陡度以及中点线与曲线之间的空间很重要:你需要一条快速向上并越过直线的曲线。在我们的例子中,一开始就有误报,然后这条线正确地向上和重复: - -![ROC](../images/ROC.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.6976998904709748`。 鉴于 AUC 的范围从 0 到 1,你需要一个高分,因为预测 100% 正确的模型的 AUC 为 1;在这种情况下,模型_相当不错_。 - -在以后的分类课程中,你将学习如何迭代以提高模型的分数。但是现在,恭喜!你已经完成了这些回归课程! - ---- - -## 🚀挑战 - -关于逻辑回归,还有很多东西需要解开!但最好的学习方法是实验。找到适合此类分析的数据集并用它构建模型。你学到了什么?小贴士:尝试 [Kaggle](https://kaggle.com) 获取有趣的数据集。 - -## [课后测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) - -## 复习与自学 - -阅读[斯坦福大学的这篇论文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)的前几页关于逻辑回归的一些实际应用。想想那些更适合于我们目前所研究的一种或另一种类型的回归任务的任务。什么最有效? - -## 任务 - -[重试此回归](./assignment.zh-cn.md) diff --git a/2-Regression/4-Logistic/translations/README.zh-tw.md b/2-Regression/4-Logistic/translations/README.zh-tw.md deleted file mode 100644 index cd1d6bfa..00000000 --- a/2-Regression/4-Logistic/translations/README.zh-tw.md +++ /dev/null @@ -1,301 +0,0 @@ -# 邏輯回歸預測分類 - -![邏輯與線性回歸信息圖](../images/logistic-linear.png) - -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [課前測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -## 介紹 - -在關於回歸的最後一課中,我們將學習邏輯回歸,這是經典的基本技術之一。你可以使用此技術來發現預測二元分類的模式。這是不是巧克力糖?這種病會傳染嗎?這個顧客會選擇這個產品嗎? - -在本課中,你將學習: - -- 用於數據可視化的新庫 -- 邏輯回歸技術 - -✅ 在此[學習模塊](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),盡管是基於線性的。我們將在在下一課組中了解對數據進行分類的其他方法。 - -## 定義問題 - -出於我們的目的,我們將其表示為二進製:「橙色」或「非橙色」。我們的數據集中還有一個「條紋」類別,但它的實例很少,所以我們不會使用它。無論如何,一旦我們從數據集中刪除空值,它就會消失。 - -> 🎃 有趣的是,我們有時稱白南瓜為鬼南瓜。他們不是很容易雕刻,所以它們不像橙色的那麽受歡迎,但它們看起來很酷! - -## 關於邏輯回歸 - -邏輯回歸在一些重要方面與你之前了解的線性回歸不同。 - -### 二元分類 - -邏輯回歸不提供與線性回歸相同的功能。前者提供關於二元類別(「橙色或非橙色」)的預測,而後者能夠預測連續值,例如,給定南瓜的起源和收獲時間,_其價格將上漲多少_。 - -![南瓜分類模型](../images/pumpkin-classifier.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### 其他分類 - -還有其他類型的邏輯回歸,包括多項和有序: - -- **多項**,涉及多個類別 - 「橙色、白色和條紋」。 -- **有序**,涉及有序類別,如果我們想對我們的結果進行邏輯排序非常有用,例如我們的南瓜按有限數量的大小(mini、sm、med、lg、xl、xxl)排序。 - -![多項式與有序回歸](../images/multinomial-ordinal.png) -> 作者 [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### 仍然是線性的 - -盡管這種類型的回歸都是關於「類別預測」的,但當因變量(顏色)和其他自變量(數據集的其余部分,如城市名稱和大小)之間存在明顯的線性關系時,它仍然效果最好。最好了解一下這些變量是否存在線性劃分。 - -### 變量不必相關 - -還記得線性回歸如何更好地處理更多相關變量嗎?邏輯回歸是相反的——變量不必對齊。這適用於相關性較弱的數據。 - -### 你需要大量幹凈的數據 - -如果使用更多數據,邏輯回歸將給出更準確的結果;我們的小數據集對於這項任務不是最佳的,請記住這一點。 - -✅ 考慮適合邏輯回歸的數據類型 - -## 練習 - 整理數據 - -首先,稍微清理一下數據,刪除空值並僅選擇其中一些列: - -1. 添加以下代碼: - - ```python - from sklearn.preprocessing import LabelEncoder - - new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] - - new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) - - new_pumpkins.dropna(inplace=True) - - new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) - ``` - - 你可以隨時查看新的數據幀: - - ```python - new_pumpkins.info - ``` - -### 可視化 - 並列網格 - -到現在為止,你已經再次使用南瓜數據加載了 [starter notebook](./notebook.ipynb) 並對其進行了清理,以保留包含一些變量(包括 `Color`)的數據集。讓我們使用不同的庫來可視化 notebook 中的數據幀:[Seaborn](https://seaborn.pydata.org/index.html),它是基於我們之前使用的 Matplotlib 構建的。 - -Seaborn 提供了一些巧妙的方法來可視化你的數據。例如,你可以比較並列網格中每個點的數據分布。 - -1. 通過實例化一個 `PairGrid`,使用我們的南瓜數據 `new_pumpkins`,然後調用 `map()` 來創建這樣一個網格: - - ```python - import seaborn as sns - - g = sns.PairGrid(new_pumpkins) - g.map(sns.scatterplot) - ``` - - ![可視化數據網格](../images/grid.png) - - 通過並列觀察數據,你可以看到顏色數據與其他列的關系。 - - ✅ 鑒於此散點圖網格,你可以設想哪些有趣的探索? - -### 使用分類散點圖 - -由於顏色是一個二元類別(橙色或非橙色),它被稱為「分類數據」,需要一種更[專業的方法](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)來可視化。還有其他方法可以可視化此類別與其他變量的關系。 - -你可以使用 Seaborn 圖並列可視化變量。 - -1. 嘗試使用「分類散點」圖來顯示值的分布: - - ```python - sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) - ``` - - ![分類散點圖可視化數據](../images/swarm.png) - -### 小提琴圖 - -「小提琴」類型的圖很有用,因為你可以輕松地可視化兩個類別中數據的分布方式。小提琴圖不適用於較小的數據集,因為分布顯示得更「平滑」。 - -1. 作為參數 `x=Color`、`kind="violin"` 並調用 `catplot()`: - - ```python - sns.catplot(x="Color", y="Item Size", - kind="violin", data=new_pumpkins) - ``` - - ![小提琴圖](../images/violin.png) - - ✅ 嘗試使用其他變量創建此圖和其他 Seaborn 圖。 - -現在我們已經了解了顏色的二元類別與更大的尺寸組之間的關系,讓我們探索邏輯回歸來確定給定南瓜的可能顏色。 - -> **🧮 數學知識** -> -> 還記得線性回歸如何經常使用普通最小二乘法來得出一個值嗎?邏輯回歸依賴於使用[sigmoid 函數](https://wikipedia.org/wiki/Sigmoid_function) 的「最大似然」概念。繪圖上的「Sigmoid 函數」看起來像「S」形。它接受一個值並將其映射到0和1之間的某個位置。它的曲線也稱為「邏輯曲線」。它的公式如下所示: -> -> ![邏輯函數](../images/sigmoid.png) -> -> 其中 sigmoid 的中點位於 x 的 0 點,L 是曲線的最大值,k 是曲線的陡度。如果函數的結果大於 0.5,則所討論的標簽將被賦予二進製選擇的類「1」。否則,它將被分類為「0」。 - -## 建立你的模型 - -在 Scikit-learn 中構建模型來查找這些二元分類非常簡單。 - -1. 選擇要在分類模型中使用的變量,並調用 `train_test_split()` 拆分訓練集和測試集: - - ```python - from sklearn.model_selection import train_test_split - - Selected_features = ['Origin','Item Size','Variety','City Name','Package'] - - X = new_pumpkins[Selected_features] - y = new_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.model_selection import train_test_split - 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)) - ``` - - 看看你的模型的記分板。考慮到你只有大約 1000 行數據,這還不錯: - - ```output - precision recall f1-score support - - 0 0.85 0.95 0.90 166 - 1 0.38 0.15 0.22 33 - - accuracy 0.82 199 - macro avg 0.62 0.55 0.56 199 - weighted avg 0.77 0.82 0.78 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 0 0 0 0 0 0 0 0 0 0 1 0 0 0 - 0 0 0 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 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 0 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 0 0 0 0 0 0 0 0 0 0 0 0 1 1 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 0 0 0 0 0 0 0 0 0 0 0 0 - 0 0 0 1 0 1 0 0 1 0 0 0 1 0] - ``` - -## 通過混淆矩陣更好地理解 - -雖然你可以通過獲得記分板報告[條目](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report)把上面的項目打印出來,通過使用[混淆矩陣](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix)可以更容易地理解你的模型,幫助我們了解模型的性能。 - -> 🎓 「[混淆矩陣](https://wikipedia.org/wiki/Confusion_matrix)」(或「誤差矩陣」)是一個表格,用於表示模型的真假陽性和假陰性,從而衡量預測的準確性。 - -1. 要使用混淆指標,請調用 `confusin_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - 看看你的模型的混淆矩陣: - - ```output - array([[162, 4], - [ 33, 0]]) - ``` - -這裏發生了什麽?假設我們的模型被要求對兩個二元類別之間的項目進行分類,即類別「南瓜」和類別「非南瓜」。 - -- 如果你的模型將某物預測為南瓜並且它實際上屬於「南瓜」類別,我們將其稱為真陽性,由左上角的數字顯示。 -- 如果你的模型預測某物不是南瓜,並且它實際上屬於「南瓜」類別,我們將其稱為假陽性,如右上角的數字所示。 -- 如果你的模型將某物預測為南瓜並且它實際上屬於「非南瓜」類別,我們將其稱為假陰性,由左下角的數字顯示。 -- 如果你的模型預測某物不是南瓜,並且它實際上屬於「非南瓜」類別,我們將其稱為真陰性,如右下角的數字所示。 - -正如你可能已經猜到的那樣,最好有更多的真陽性和真陰性以及較少的假陽性和假陰性,這意味著模型性能更好。 - -✅ Q:根據混淆矩陣,模型怎麽樣? A:還不錯;有很多真陽性,但也有一些假陰性。 - -讓我們借助混淆矩陣對TP/TN和FP/FN的映射,重新審視一下我們之前看到的術語: - -🎓 準確率:TP/(TP + FP) 檢索實例中相關實例的分數(例如,哪些標簽標記得很好) - -🎓 召回率: TP/(TP + FN) 檢索到的相關實例的比例,無論是否標記良好 - -🎓 F1分數: (2 * 準確率 * 召回率)/(準確率 + 召回率) 準確率和召回率的加權平均值,最好為1,最差為0 - -🎓 Support:檢索到的每個標簽的出現次數 - -🎓 準確度:(TP + TN)/(TP + TN + FP + FN) 為樣本準確預測的標簽百分比。 - -🎓 宏平均值: 計算每個標簽的未加權平均指標,不考慮標簽不平衡。 - -🎓 加權平均值:計算每個標簽的平均指標,通過按支持度(每個標簽的真實實例數)加權來考慮標簽不平衡。 - -✅ 如果你想讓你的模型減少假陰性的數量,你能想出應該關註哪個指標嗎? - -## 可視化該模型的 ROC 曲線 - -這不是一個糟糕的模型;它的準確率在 80% 範圍內,因此理想情況下,你可以使用它來預測給定一組變量的南瓜顏色。 - -讓我們再做一個可視化來查看所謂的「ROC」分數 - -```python -from sklearn.metrics import roc_curve, roc_auc_score - -y_scores = model.predict_proba(X_test) -# calculate ROC curve -fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) -sns.lineplot([0, 1], [0, 1]) -sns.lineplot(fpr, tpr) -``` - -再次使用 Seaborn,繪製模型的[接收操作特性](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc)或 ROC。 ROC 曲線通常用於根據分類器的真假陽性來了解分類器的輸出。「ROC 曲線通常具有 Y 軸上的真陽性率和 X 軸上的假陽性率。」 因此,曲線的陡度以及中點線與曲線之間的空間很重要:你需要一條快速向上並越過直線的曲線。在我們的例子中,一開始就有誤報,然後這條線正確地向上和重復: - -![ROC](../images/ROC.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.6976998904709748`。 鑒於 AUC 的範圍從 0 到 1,你需要一個高分,因為預測 100% 正確的模型的 AUC 為 1;在這種情況下,模型_相當不錯_。 - -在以後的分類課程中,你將學習如何叠代以提高模型的分數。但是現在,恭喜!你已經完成了這些回歸課程! - ---- - -## 🚀挑戰 - -關於邏輯回歸,還有很多東西需要解開!但最好的學習方法是實驗。找到適合此類分析的數據集並用它構建模型。你學到了什麽?小貼士:嘗試 [Kaggle](https://kaggle.com) 獲取有趣的數據集。 - -## [課後測](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) - -## 復習與自學 - -閱讀[斯坦福大學的這篇論文](https://web.stanford.edu/~jurafsky/slp3/5.pdf)的前幾頁關於邏輯回歸的一些實際應用。想想那些更適合於我們目前所研究的一種或另一種類型的回歸任務的任務。什麽最有效? - -## 任務 - -[重試此回歸](./assignment.zh-tw.md) diff --git a/2-Regression/4-Logistic/translations/assignment.es.md b/2-Regression/4-Logistic/translations/assignment.es.md deleted file mode 100644 index 7f99957f..00000000 --- a/2-Regression/4-Logistic/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Reintentando alguna regresión - -## Instrucciones - -En esta lección, usaste un subconjunto de datos de las calabazas. Hora, vuelve a los datos originales e intenta usar todos ellos, limpios y estandarizados, para construir un modelo de regresión logística. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | Se presenta un notebook con un modelo bien explicado y realizado | Se presenta un notebook con un modelo con rendimiento mínimo | Se presenta un modelo con un rendimiento precario o nulo | diff --git a/2-Regression/4-Logistic/translations/assignment.it.md b/2-Regression/4-Logistic/translations/assignment.it.md deleted file mode 100644 index 7b9b2016..00000000 --- a/2-Regression/4-Logistic/translations/assignment.it.md +++ /dev/null @@ -1,10 +0,0 @@ -# Riprovare un po' di Regressione - -## Istruzioni - -Nella lezione è stato usato un sottoinsieme dei dati della zucca. Ora si torna ai dati originali e si prova a usarli tutti, puliti e standardizzati, per costruire un modello di regressione logistica. -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | Un notebook viene presentato con un modello ben spiegato con buone prestazioni | Un notebook viene presentato con un modello dalle prestazioni minime | Un notebook viene presentato con un modello con scarse o nessuna prestazione | diff --git a/2-Regression/4-Logistic/translations/assignment.ja.md b/2-Regression/4-Logistic/translations/assignment.ja.md deleted file mode 100644 index 6c838173..00000000 --- a/2-Regression/4-Logistic/translations/assignment.ja.md +++ /dev/null @@ -1,11 +0,0 @@ -# 回帰に再挑戦する - -## 課題の指示 - -レッスンでは、カボチャのデータのサブセットを使用しました。今度は、元のデータに戻って、ロジスティック回帰モデルを構築するために、整形して標準化したデータをすべて使ってみましょう。 - -## ルーブリック - -| 指標 | 模範的 | 適切 | 要改善 | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | 説明がわかりやすく、性能の良いモデルが含まれたノートブック| 最小限の性能しか発揮できないモデルが含まれたノートブック | 性能の劣るモデルや、何もないモデルが含まれたノートブック | diff --git a/2-Regression/4-Logistic/translations/assignment.ko.md b/2-Regression/4-Logistic/translations/assignment.ko.md deleted file mode 100644 index ba061a53..00000000 --- a/2-Regression/4-Logistic/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 한 번 더 회귀를 알아봅시다 - -## 설명 - -이번 수업에서는 Pumpkin 데이터세트의 일부만 사용해보았습니다. 이 과제에서는 Pumpkin 데이터세트 전체를 정제 및 표준화하여 로지스틱 회귀 모델을 만들어보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | -------------------------------------- | ------------------------------------------- | --------------------------------------------------------------- | -| | 성능이 좋은 모델을 기술한 노트북을 제출함 | 최소한의 성능을 발휘하는 모델을 노트북에 선보임 | 성능이 좋지 못한 모델을 노트북에 선보이거나 어떤 모델도 선보이지 않음 | diff --git a/2-Regression/4-Logistic/translations/assignment.pt-br.md b/2-Regression/4-Logistic/translations/assignment.pt-br.md deleted file mode 100644 index eddf391c..00000000 --- a/2-Regression/4-Logistic/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Refazendo a regressão - -## Instruções - -Nesta lição, você usou um subconjunto do conjunto de dados de abóboras. Volte aos dados originais e tente usar todos eles, tratados e padronizados, para construir um modelo de Regressão Logística. - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | Apresenta um modelo bem explicado e de bom desepenho | Apresenta um modelo com desempenho mínimo | Apresenta um modelo baixo desempenho | diff --git a/2-Regression/4-Logistic/translations/assignment.pt.md b/2-Regression/4-Logistic/translations/assignment.pt.md deleted file mode 100644 index 63aed0a5..00000000 --- a/2-Regression/4-Logistic/translations/assignment.pt.md +++ /dev/null @@ -1,11 +0,0 @@ -## Retrying alguma regressão - -## Instruções - -Na lição, usaste um subconjunto dos dados da abóbora. Agora, volte aos dados originais e tente usá-lo todo, limpo e padronizado, para construir uma Regressão Logística model. - -## Rubrica - -| Critérios | exemplares | Adequado | Necessidades de Melhoria | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | Um caderno é apresentado com um modelo bem explicado e bem-adundo | Um caderno é apresentado com um modelo que funciona minimamente | Um caderno é apresentado com um modelo de sub-desempenho ou nenhum| diff --git a/2-Regression/4-Logistic/translations/assignment.zh-cn.md b/2-Regression/4-Logistic/translations/assignment.zh-cn.md deleted file mode 100644 index 9d884967..00000000 --- a/2-Regression/4-Logistic/translations/assignment.zh-cn.md +++ /dev/null @@ -1,11 +0,0 @@ -# 再探回归模型 - -## 说明 - -在这节课中,你使用了 pumpkin 数据集的子集。现在,让我们回到原始数据,并尝试使用所有数据。经过了数据清理和标准化,建立一个逻辑回归模型。 - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | 用 notebook 呈现了一个解释性和性能良好的模型 | 用 notebook 呈现了一个性能一般的模型 | 用 notebook 呈现了一个性能差的模型或根本没有模型 | diff --git a/2-Regression/4-Logistic/translations/assignment.zh-tw.md b/2-Regression/4-Logistic/translations/assignment.zh-tw.md deleted file mode 100644 index ce59d861..00000000 --- a/2-Regression/4-Logistic/translations/assignment.zh-tw.md +++ /dev/null @@ -1,11 +0,0 @@ -# 再探回歸模型 - -## 說明 - -在這節課中,你使用了 pumpkin 數據集的子集。現在,讓我們回到原始數據,並嘗試使用所有數據。經過了數據清理和標準化,建立一個邏輯回歸模型。 - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | 用 notebook 呈現了一個解釋性和性能良好的模型 | 用 notebook 呈現了一個性能一般的模型 | 用 notebook 呈現了一個性能差的模型或根本沒有模型 | diff --git a/2-Regression/translations/README.es.md b/2-Regression/translations/README.es.md deleted file mode 100644 index 8a43396e..00000000 --- a/2-Regression/translations/README.es.md +++ /dev/null @@ -1,33 +0,0 @@ -# Modelos de regresión para el machine learning -## Tema regional: Modelos de regresión para los precios de las calabazas en América del Norte 🎃 - -En América del Norte, las calabazas se tallan a menudo con caras aterradoras para Halloween. ¡Descubramos más sobre estas fascinantes verduras! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Foto de Beth Teutschmann en Unsplash - -## Lo que vas a aprender - -Las lecciones de esta sección cubren los tipos de regresión en el contexto de machine learning. Los modelos de regresión pueden ayudar a determinar la _relación_ entre variables. Este tipo de modelos puede predecir valores como la longitud, la temperatura o la edad, descubriendo así relaciones entre variables a medida que analiza puntos de datos. - -En esta serie de lecciones, descubrirá la diferencia entre la regresión lineal y la logística, y cuándo debe usar una u otra. - -En este grupo de lecciones, se preparará para comenzar las tareas de machine learning, incluida la configuración de Visual Studio Code para manejar los cuadernos, el entorno común para los científicos de datos. Descubrirá Scikit-learn, una librería para machine learning, y creará sus primeros modelos, centrándose en los modelos de Regresión en este capítulo. - -> Existen herramientas útiles _low-code_ que pueden ayudarlo a aprender a trabajar con modelos de regresión. Pruebe [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Lecciones - -1. [Herramientas del oficio](1-Tools/README.md) -2. [Gestión de datos](2-Data/README.md) -3. [Regresión lineal y polinomial](3-Linear/README.md) -4. [Regresión logística](4-Logistic/README.md) - ---- -### Créditos - -"ML con regresión" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper) - -♥️ Los contribuyentes del cuestionario incluyen: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) y [Ornella Altunyan](https://twitter.com/ornelladotcom) - -El _dataset_ de calabaza es sugerido por [este proyecto en Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) y sus datos provienen de [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuido por el Departamento de Agricultura de los Estados Unidos. Hemos agregado algunos puntos alrededor del color basados en la variedad para normalizar la distribución. Estos datos son de dominio público. diff --git a/2-Regression/translations/README.fr.md b/2-Regression/translations/README.fr.md deleted file mode 100644 index d3da3e36..00000000 --- a/2-Regression/translations/README.fr.md +++ /dev/null @@ -1,33 +0,0 @@ -# Modèles de régression pour le machine learning -## Sujet régional : Modèles de régression des prix des citrouilles en Amérique du Nord 🎃 - -En Amérique du Nord, les citrouilles sont souvent sculptées en visages effrayants pour Halloween. Découvrons-en plus sur ces légumes fascinants! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Photo de Beth Teutschmann sur Unsplash - -## Ce que vous apprendrez - -Les leçons de cette section couvrent les types de régression dans le contexte du machine learning. Les modèles de régression peuvent aider à déterminer la _relation_ entre les variables. Ce type de modèle peut prédire des valeurs telles que la longueur, la température ou l'âge, découvrant ainsi les relations entre les variables lors de l'analyse des points de données. - -Dans cette série de leçons, vous découvrirez la différence entre la régression linéaire et la régression logistique, et quand vous devriez utiliser l'une ou l'autre. - -Dans ce groupe de leçons, vous serez préparé afin de commencer les tâches de machine learning, y compris la configuration de Visual Studio Code pour gérer les blocs-notes, l'environnement commun pour les scientifiques des données. Vous découvrirez Scikit-learn, une bibliothèque pour le machine learning, et vous construirez vos premiers modèles, en vous concentrant sur les modèles de régression dans ce chapitre. - -> Il existe des outils low-code utiles qui peuvent vous aider à apprendre à travailler avec des modèles de régression. Essayez [Azure ML pour cette tâche](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Cours - -1. [Outils du métier](1-Tools/translations/README.fr.md) -2. [Gestion des données](2-Data/translations/README.fr.md) -3. [Régression linéaire et polynomiale](3-Linear/translations/README.fr.md) -4. [Régression logistique](4-Logistic/translations/README.fr.md) - ---- -### Crédits - -"ML avec régression" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper) - -♥️ Les contributeurs du quiz incluent : [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) et [Ornella Altunyan](https://twitter.com/ornelladotcom) - -L'ensemble de données sur la citrouille est suggéré par [ce projet sur Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) et ses données proviennent des [Rapports standard des marchés terminaux des cultures spécialisées](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribué par le département américain de l'Agriculture. Nous avons ajouté quelques points autour de la couleur en fonction de la variété pour normaliser la distribution. Ces données sont dans le domaine public. diff --git a/2-Regression/translations/README.hi.md b/2-Regression/translations/README.hi.md deleted file mode 100644 index febefd2d..00000000 --- a/2-Regression/translations/README.hi.md +++ /dev/null @@ -1,36 +0,0 @@ -# मशीन लर्निंग के लिए रिग्रेशन मॉडल -## क्षेत्रीय विषय: उत्तरी अमेरिका में कद्दू की कीमतों के लिए रिग्रेशन मॉडल 🎃 - -उत्तरी अमेरिका में, कद्दू को अक्सर हैलोवीन के लिए डरावने चेहरों में उकेरा जाता है। आइए इन आकर्षक सब्जियों के बारे में और जानें! - -![जैक-ओ-लालटेन](../images/jack-o-lanterns.jpg) -> बेथ तेउतसच्मैंन द्वारा तस्वीर अनस्पेलश पर - -## आप क्या सीखेंगे - -[![रिग्रेशन का परिचय](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "रिग्रेशन परिचय वीडियो - देखने के लिए क्लिक करें!") -> 🎥 इस पाठ के त्वरित परिचय वीडियो के लिए ऊपर की छवि पर क्लिक करें - -इस खंड के पाठ में मशीन लर्निंग के संदर्भ में रिग्रेशन के प्रकारों को शामिल किया गया है। रिग्रेशन मॉडल चरों के बीच _संबंध_ को निर्धारित करने में मदद कर सकते हैं। इस प्रकार का मॉडल लंबाई, तापमान या उम्र जैसे मूल्यों की भविष्यवाणी कर सकता है, इस प्रकार चर के बीच संबंधों को उजागर करता है क्योंकि यह डेटा बिंदुओं का विश्लेषण करता है। - -पाठों की इस श्रृंखला में, आप रैखिक और लॉजिस्टिक प्रतिगमन के बीच के अंतरों की खोज करेंगे, और कब कौन सा इस्तेमाल करना चाहिए। - -पाठों के इस समूह में, आप मशीन लर्निंग सीखने के कार्यों को शुरू करने के लिए तैयार होंगे, जिसमें नोटबुक को प्रबंधित करने के लिए विजुअल स्टूडियो कोड को कॉन्फ़िगर करना, डेटा वैज्ञानिकों के लिए सामान्य वातावरण शामिल है। आप मशीन लर्निंग के लिए एक लाइब्रेरी स्किकिट-लर्न की खोज करेंगे, और आप इस अध्याय में रिग्रेशन मॉडल पर ध्यान केंद्रित करते हुए अपना पहला मॉडल बनाएंगे। - ->ये उपयोगी निम्न-कोड उपकरण हैं जो आपको रिग्रेशन मॉडल के साथ काम करने के बारे में जानने में मदद कर सकते हैं.इस्तेमाल करे [इस कार्य के लिए अज़ूरे एमएल](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) - ---- -### क्रेडिट - -"रिग्रेशन के साथ एमएल" [जेन लूपर](https://twitter.com/jenlooper) द्वारा ♥ से लिखा गया - -♥️ प्रश्नोत्तरी योगदानकर्ताओं में शामिल हैं: [मुहम्मद साकिब खान इंजन](https://twitter.com/Sakibinan) और [ऑर्नेला अल्तुन्यान](https://twitter.com/ornelladotcom) - -[कागल पर इस प्रोजैक्टा](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) द्वारा कद्दू डेटासेट का सुझाव दिया गया है और इसका डेटा संयुक्त राज्य अमेरिका के कृषि विभाग द्वारा वितरित [स्पेशलिटी क्रॉप्स टर्मिनल मार्केट्स स्टैंडर्ड रिपोर्ट्स](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से लिया गया है। हमने वितरण को सामान्य करने के लिए विविधता के आधार पर रंग के आसपास कुछ बिंदु जोड़े हैं। यह डेटा पब्लिक डोमेन में है। diff --git a/2-Regression/translations/README.id.md b/2-Regression/translations/README.id.md deleted file mode 100644 index 8c90b01e..00000000 --- a/2-Regression/translations/README.id.md +++ /dev/null @@ -1,33 +0,0 @@ -# Model regresi untuk *machine learning* -## Topik regional: Model regresi untuk harga labu di Amerika Utara 🎃 - -Di Amerika Utara, labu seringkali diukir menjadi muka-muka seram untuk Halloween. Mari mencari tahu lebih banyak tentang sayur menarik ini! - -![jack-o-lantern](../images/jack-o-lanterns.jpg) -> Foto oleh Beth Teutschmann di Unsplash - -## Apa yang kamu akan pelajari - -Pelajaran-pelajaran dalam seksi ini mencakupi jenis-jenis regresi dalam konteks *machine learning*. Model regresi dapat membantu menentukan _hubungan_ antara variabel-variabel. Model jenis ini dapat memprediksi nilai-nilai seperti panjang, temperatur, atau usia, sehingga mengemukakan hubungan-hubungan antara variabel dengan menganalisis titik-titik data. - -Dalam seri pelajaran ini, kamu akan menemukan perbedaan antara regresi linear dan logistik, dan kapan untuk menggunakan satu atau yang lainnya. - -Selain itu, kamu akan disiapkan untuk mulai mengerjakan tugas *machine learning*, termasuk mengkonfigurasi Visual Studio Code untuk mengelola *notebook*, lingkungan wajar untuk *data scientist*. Kamu akan menemukan Scikit-learn, sebuah *library* untuk *machine learning*, dan kamu akan membangun model pertamamu dengan memfokus pada model regresi dalam bab ini. - -> Ada alat-alat *low-code* yang dapat membantumu belajar tentang bekerja dengan model regresi. Cobalah [Azure ML untuk tugas ini](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott). - -### Pelajaran - -1. [Alat-alat seorang *data scientist*](1-Tools/translations/README.id.md) -2. [Mengelola data](2-Data/translations/README.id.md) -3. [Regresi linear dan polinomial](3-Linear/translations/README.id.md) -4. [Regresi logistik](4-Logistic/translations/README.id.md) - ---- -### Kredit - -"ML with regression" (ML dengan regresi) ditulis dari ♥️ oleh [Jen Looper](https://twitter.com/jenlooper) - -♥️ Kontributor kuis termasuk: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) dan [Ornella Altunyan](https://twitter.com/ornelladotcom) - -*Dataset* labu disarankan [proyek ini di Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) dan datanya disumberkan dari [Specialty Crops Terminal Markets Standard Reports (Laporan Standar Pasar Terminal Tanaman Khusus)](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) yang didistribusikan Departemen Agrikultur Amerika Serikat. Kami telah menambahkan beberapa poin tentang warna berdasarkan jenis labu untuk menormalisasi distribusi data. Data ini terbuka untuk umum (*public domain*). diff --git a/2-Regression/translations/README.it.md b/2-Regression/translations/README.it.md deleted file mode 100644 index 2252ca03..00000000 --- a/2-Regression/translations/README.it.md +++ /dev/null @@ -1,34 +0,0 @@ -# Modelli di regressione per machine learning - -## Argomento regionale: modelli di Regressione per i prezzi della zucca in Nord America 🎃 - -In Nord America, le zucche sono spesso intagliate in facce spaventose per Halloween. Si scoprirà di più su queste affascinanti verdure! - -![jack-o-lantern](../images/jack-o-lanterns.jpg) -> Foto di Beth Teutschmann su Unsplash - -## Cosa si imparerà - -Le lezioni in questa sezione riguardano i tipi di regressione nel contesto di machine learning. I modelli di regressione possono aiutare a determinare la _relazione_ tra le variabili. Questo tipo di modello può prevedere valori come lunghezza, temperatura o età, scoprendo così le relazioni tra le variabili mentre analizza i punti dati. - -In questa serie di lezioni si scoprirà la differenza tra regressione lineare e regressione logistica e quando si dovrebbe usare l'una o l'altra. - -In questo gruppo di lezioni si imposterà una configurazione per iniziare le attività di machine learning, inclusa la configurazione di Visual Studio Code per gestire i notebook, l'ambiente comune per i data scientist. Si scoprirà Scikit-learn, una libreria per machine learning, e si creeranno i primi modelli, concentrandosi in questo capitolo sui modelli di Regressione. - -> Esistono utili strumenti a basso codice che possono aiutare a imparare a lavorare con i modelli di regressione. Si provi [Azure Machine Learning per questa attività](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Lezioni - -1. [Gli Attrezzi Necessari](../1-Tools/translations/README.it.md) -2. [Gestione dati](../2-Data/translations/README.it.md) -3. [Regressione lineare e polinomiale](../3-Linear/translations/README.it.md) -4. [Regressione logistica](../4-Logistic/translations/README.it.md) - ---- -### Crediti - -"ML con regressione" scritto con ♥️ da [Jen Looper](https://twitter.com/jenlooper) - -♥️ I collaboratori del quiz includono: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) e [Ornella Altunyan](https://twitter.com/ornelladotcom) - -L'insieme di dati relativi alla zucca è suggerito da [questo progetto su](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) Kaggle e i suoi dati provengono dai [Rapporti Standard sui Mercati Terminali delle Colture Speciali](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuiti dal Dipartimento dell'Agricoltura degli Stati Uniti. Sono stati aggiunti alcuni punti intorno al colore in base alla varietà per normalizzare la distribuzione. Questi dati sono di pubblico dominio. diff --git a/2-Regression/translations/README.ja.md b/2-Regression/translations/README.ja.md deleted file mode 100644 index a36ab023..00000000 --- a/2-Regression/translations/README.ja.md +++ /dev/null @@ -1,32 +0,0 @@ -# 機械学習のための回帰モデル -## トピック: 北米のカボチャ価格に関する回帰モデル 🎃 - -北米では、ハロウィンのためにカボチャはよく怖い顔に彫られています。そんな魅力的な野菜についてもっと知りましょう! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Beth TeutschmannによってUnsplashに投稿された写真 - -## 今回学ぶこと -この章のレッスンでは、機械学習の文脈における回帰の種類について説明します。回帰モデルは変数間の"関係"を決定するのに役立ちます。このタイプのモデルは、長さ、温度、年齢などの値を予測し、データポイントの分析をすることで変数間の関係性を明らかにします。 - -今回のレッスンでは、線形回帰とロジスティック回帰の違いやどのように使い分けるかを説明します。 - -データサイエンティストの共通開発環境であるノートブックを管理するためのVisual Studio Codeの構成や機械学習のタスクを開始するための準備を行います。また、機械学習用のライブラリであるScikit-learnを利用し最初のモデルを構築します。この章では回帰モデルに焦点を当てます。 - -> 回帰モデルを学習するのに役立つローコードツールがあります。ぜひ[Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)を使ってみてください。 - -### レッスン - -1. [商売道具](../1-Tools/translations/README.ja.md) -2. [データ管理](../2-Data/translations/README.ja.md) -3. [線形回帰と多項式回帰](../3-Linear/translations/README.ja.md) -4. [ロジスティック回帰](../4-Logistic/translations/README.ja.md) - ---- -### クレジット - -"機械学習と回帰"は、[Jen Looper](https://twitter.com/jenlooper)によって制作されました。 - -クイズの貢献者: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan)と[Ornella Altunyan](https://twitter.com/ornelladotcom) - -pumpkin datasetは、[こちらのKaggleプロジェクト](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)が元になっています。私たちは、分布を正規化するために多様性を元に色についていくつか追加を行っています。このデータはパブリックドメインです。 diff --git a/2-Regression/translations/README.ko.md b/2-Regression/translations/README.ko.md deleted file mode 100644 index ee57ae83..00000000 --- a/2-Regression/translations/README.ko.md +++ /dev/null @@ -1,35 +0,0 @@ -# 머신러닝을 위한 Regression 모델 - -## 지역 토픽: 북미의 호박 가격을 위한 Regression 모델 🎃 - -북미에서, Halloween을 위해서 호박을 소름돋게 무서운 얼굴로 조각하는 경우가 자주 있습니다. 매혹적인 채소에 대하여 찾아봅시다! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Photo by Beth Teutschmann on Unsplash - -## 무엇을 배우나요 - -이 섹션의 강의는 머신러닝의 컨텍스트에서 regression 타입을 다루게 됩니다. Regression 모델은 변수 사이 _relationship_ 을 결정하도록 도울 수 있습니다. 모델의 타입은 길이, 온도, 또는 나이와 같은 값을 예측할 수 있으므로, 데이터 포인트를 분석하는 순간 변수 사이의 관계를 알 수 있습니다. - -이 강의의 시리즈에서, linear와 logistic regression 간의 다른 점을 찾을 수 있고, 둘 중 하나를 언제 사용해야 될 지 알 수 있습니다. - -이 강의의 그룹에서, 데이터 사이언티스트를 위한 일반적 환경의, 노트북을 관리할 Visual Studio code 구성을 포함해서, 머신러닝 작업을 시작하도록 맞춥니다. 머신러닝을 위한 라이브러리인, Scikit-learn을 찾고, 이 챕터의 Regression 모델에 초점을 맞추어, 첫 모델을 만들 예정입니다. - -> Regression 모델을 작업할 때 배울 수 있는 유용한 low-code 도구가 있습니다. [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)를 시도해보세요. - -### Lessons - -1. [무역의 도구](../1-Tools/translations/README.ko.md) -2. [데이터 관리](../2-Data/translations/README.ko.md) -3. [Linear와 polynomial regression](../3-Linear/translations/README.ko.md) -4. [Logistic regression](../4-Logistic/translations/README.ko.md) - ---- -### 크레딧 - -"ML with regression" was written with ♥️ by [Jen Looper](https://twitter.com/jenlooper) - -♥️ Quiz contributors include: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) and [Ornella Altunyan](https://twitter.com/ornelladotcom) - -호박 데이터셋은 [this project on Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices)에서 제안되었고 데이터는 United States Department of Agriculture에서 배포한 [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice)에 기반합니다. 분포를 정규화하기 위하여 다양성을 기반으로 색상을 주변에 몇 포인트 더 했습니다. 데이터는 공개 도메인에 존재합니다. - diff --git a/2-Regression/translations/README.pt-br.md b/2-Regression/translations/README.pt-br.md deleted file mode 100644 index 295cc049..00000000 --- a/2-Regression/translations/README.pt-br.md +++ /dev/null @@ -1,34 +0,0 @@ -# Modelos de regressão para *machine learning* -## Tema regional: Modelos de regressão para preços de abóbora na América do Norte 🎃 - -Na América do Norte, é costume esculpir rostos assustadores em abóbora no Halloween. Vamos descobrir mais sobre esses vegetais -fascinantes! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Foto de Beth Teutschmann em Unsplash - -## O que vamos aprender - -As lições desta seção abordam tipos de regressão no contexto de _machine learning_. Modelos de regressão podem ajudar a determinar a _relação_ entre variáveis. Esse tipo de modelo pode prever valores como comprimento, temperatura ou idade, sugerindo relações entre variáveis à medida que analisa pontos de dados. - -Nesta série de lições, você descobrirá a diferença entre regressão linear e logística, e quando deve usar uma ou outra. - -Neste grupo de lições, te prepararemos para começar tarefas de _machine learning_, incluindo configuração do Visual Studio Code para gerenciar _notebooks_, o ambiente comum para _data scientists_ (cientistas de dados). Você descobrirá a Scikit-learn, uma biblioteca para _machine learning_, e construirá seus primeiros modelos, focando em modelos de regressão neste capítulo. - -> Existem ferramentas _low-code_ que podem ajudar a aprender como trabalhar com modelos de regressão. Use a [Azure ML para esta tarefa](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott). - -### Lições - -1. [Ferramentas necessárias](../1-Tools/translations/README.pt-br.md) -2. [Gerenciamento de dados](../2-Data/translations/README.pt-br.md) -3. [Regressão linear e polinomial](../3-Linear/translations/README.pt-br.md) -4. [Regressão logística](../4-Logistic/translations/README.pt-br.md) - ---- -### Créditos - -"ML with regression" (ML com regressão) foi escrito com ♥️ por [Jen Looper](https://twitter.com/jenlooper) - -♥️ Contribuidores do questionário incluem: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) e [Ornella Altunyan](https://twitter.com/ornelladotcom) - -O _dataset_ (base de dados) de abóbora foi sugerido por [esse projeto no Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) e seus dados vieram dos [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) (Relatórios Padrão de Mercados Terminais para Cultivos Especiais) distribuído pelo Departamento de Agricultura dos Estados Unidos. Adicionamos alguns pontos sobre a cor por tipo de abóbora para normalizar a distribuição dos dados. Esses dados são abertos ao público. diff --git a/2-Regression/translations/README.pt.md b/2-Regression/translations/README.pt.md deleted file mode 100644 index 6a13c908..00000000 --- a/2-Regression/translations/README.pt.md +++ /dev/null @@ -1,38 +0,0 @@ -# Modelos de regressão para aprendizagem automática -## Tópico regional: Modelos de regressão para preços de abóbora na América do Norte 🎃 - -Na América do Norte, as abóboras são muitas vezes esculpidas em rostos assustadores para o Halloween. Vamos descobrir mais sobre estes fascinantes vegetais! - -![jack-o-lanterns](./images/jack-o-lanterns.jpg) -> Photo by Beth Teutschmann on Unsplash - -## O que vai aprender - -[![Introduction to Regression](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Regressão Vídeo de introdução - Clique para ver -!") -> 🎥 Clique na imagem acima para obter um vídeo de introdução rápida a esta lição - -As lições nesta secção abrangem tipos de regressão no contexto da aprendizagem automática. Os modelos de regressão podem ajudar a determinar a _relação_ entre variáveis. Este tipo de modelo pode prever valores como comprimento, temperatura ou idade, descobrindo assim relações entre variáveis à medida que analisa pontos de dados. - -Nesta série de lições, você vai descobrir a diferença entre regressão logística linear vs. e quando você deve usar uma ou outra. - -Neste grupo de lições, você será configurado para iniciar tarefas de machine learning, incluindo configurar o Código do Estúdio Visual para gerir cadernos, o ambiente comum para cientistas de dados. Você vai descobrir Scikit-learn, uma biblioteca para machine learning, e você vai construir seus primeiros modelos, focando-se em modelos de Regressão neste capítulo. - -> Existem ferramentas de baixo código úteis que podem ajudá-lo a aprender sobre trabalhar com modelos de regressão. Tente -[Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Lessons - -1. [Ferramentas do comércio](1-Tools/README.md) -2. [Gestão de dados](2-Data/README.md) -3. [Linear and polynomial regression](3-Linear/README.md) -4. [Logistic regression](4-Logistic/README.md) - ---- -### Credits - -"ML com regressão" foi escrito com ♥️ por[Jen Looper](https://twitter.com/jenlooper) - -♥️ Os colaboradores do quiz incluem:[Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) e [Ornella Altunyan](https://twitter.com/ornelladotcom) - -O conjunto de dados de abóbora é sugerido por [este projeto em Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) e os seus dados são obtidos a partir do [Relatórios padrão dos mercados de terminais de culturas especiais](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuído pelo Departamento de Agricultura dos Estados Unidos. Adicionámos alguns pontos em torno da cor com base na variedade para normalizar a distribuição. Estes dados estão no domínio público. diff --git a/2-Regression/translations/README.ru.md b/2-Regression/translations/README.ru.md deleted file mode 100644 index 3e89a1fa..00000000 --- a/2-Regression/translations/README.ru.md +++ /dev/null @@ -1,36 +0,0 @@ -# Модели регрессии для машинного обучения -## Региональная тема: модели регрессии для цен на тыкву в Северной Америке 🎃 - -В Северной Америке на Хэллоуин из тыкв часто вырезают страшные лица. Давайте узнаем больше об этих очаровательных овощах! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Фото Бет Тойчманн на Unsplash - -## Что вы узнаете - -[![Введение в регрессию](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Видео с введением в регрессию - Нажмите, чтобы посмотреть!") -> 🎥 Нажмите на изображение выше, чтобы посмотреть короткое вводное видео по этому уроку - -Уроки в этом разделе охватывают типы регрессии в контексте машинного обучения. Модели регрессии могут помочь определить _отношения_ между переменными. Этот тип моделей может предсказывать такие значения, как длина, температура или возраст, тем самым выявляя взаимосвязи между переменными анализируя точки данных. - -В этой серии уроков вы узнаете разницу между линейной и логистической регрессией, а также когда вам следует использовать ту или иную модель. - -В этой группе уроков вы будете подготовлены, чтобы приступить к задачам машинного обучения, включая настройку 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) - ---- -### Благодарности - -«Модели регрессии для машинного обучения» были написаны с ♥ ️[Джен Лупер](https://twitter.com/jenlooper) - -♥ ️Вклад в создание контрольных вопросов внесли: [Мухаммад Сакиб Хан Инан](https://twitter.com/Sakibinan) и [Орнелла Алтунян](https://twitter.com/ornelladotcom) - -Набор данных по ценам на тыкву используется в [этом проекте на Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices), и данные для него взяты из [Стандартных отчетов ярмарок специальных культур](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice), которые распространяются Министерством сельского хозяйства США. Мы добавили несколько точек для цвета на основе разнообразия, чтобы нормализовать распределение. Эти данные находятся в открытом доступе. diff --git a/2-Regression/translations/README.tr.md b/2-Regression/translations/README.tr.md deleted file mode 100644 index 8d4b043e..00000000 --- a/2-Regression/translations/README.tr.md +++ /dev/null @@ -1,36 +0,0 @@ -# Makine öğrenmesi için Regresyon modelleri -## Bölgesel konu: Kuzey Amerika'da ki kabak fiyatları için regresyon modelleri 🎃 - -Kuzey Amerika'da, kabaklar genellikle Cadılar Bayramı için korkunç yüzler şeklinde oyulmuştur. Haydi bu büyüleyici sebzeler hakkında daha fazlasını keşfedelim! - -![jack-o-lanterns](../images/jack-o-lanterns.jpg) -> Photo by Beth Teutschmann on Unsplash - -## Ne öğreneceksiniz - -[![Regresyona Giriş](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Regresyona giriş videosu - İzlemek için tıklayınız!") -> 🎥 Bu derse hızlı bir giriş yapmak için resme tıklayınız. - -Bu bölümdeki dersler, makine öğreniminin bağlamındaki regresyon türlerini kapsar. Regresyon modelleri, değişkenler arasındaki _ilişkiyi_ belirlemeye yardımcı olabilir. Bu tür bir model, uzunluk, sıcaklık veya yaş gibi değerleri tahmin edebilir, böylece veri noktalarını analiz ederken değişkenler arasındaki ilişkileri ortaya çıkarabilir. - -Bu dersler dizisinde, lineer ve lojistik regresyon arasındaki farkları ve ne zaman hangisini diğerine tercih etmeniz gerektiğini keşfedeceksiniz. - -Bu ders grubunda, veri bilimcileri için ortak ortam olan not defterlerini yönetmek için Visual Studio Code'un yapılandırılması dahil olmak üzere makine öğrenimi görevlerine başlamak için hazırlanacaksınız. - -> Regresyon modelleriyle çalışma hakkında bilgi edinmenize yardımcı olabilecek kullanışlı low-code (az kodlamalı) araçlar vardır. Bunu deneyin. [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Dersler - -1. [Tools of the trade](1-Tools/README.md) -2. [Managing data](2-Data/README.md) -3. [Linear and polynomial regression](3-Linear/README.md) -4. [Logistic regression](4-Logistic/README.md) - ---- -### Katkıda Bulunanlar - -"ML with regression" ♥️ [Jen Looper](https://twitter.com/jenlooper) tarafından yazıldı. - -♥️ Quizlere katkıda bulunanlar: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) ve [Ornella Altunyan](https://twitter.com/ornelladotcom) - -Kabak veri seti [bu proje ile Kaggle'da](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) önerilmiştir ve veriler [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) Amerika Birleşik Devletleri Tarım Bakanlığı tarafından dağıtılan Özel Mahsuller Terminal Pazarları Standart Raporlarından alınmıştır. Dağılımı normalleştirmek için çeşitliliğe göre renk bazlı bazı noktalar ekledik. Bu veriler kamu malıdır. diff --git a/2-Regression/translations/README.zh-cn.md b/2-Regression/translations/README.zh-cn.md deleted file mode 100644 index bebe0c93..00000000 --- a/2-Regression/translations/README.zh-cn.md +++ /dev/null @@ -1,34 +0,0 @@ -# 机器学习中的回归模型 -## 本节主题: 北美南瓜价格的回归模型 🎃 - -在北美,南瓜经常在万圣节被刻上吓人的鬼脸。让我们来深入研究一下这种奇妙的蔬菜 - -![jack-o-lantern](../images/jack-o-lanterns.jpg) -> Foto oleh Beth Teutschmann di Unsplash - -## 你会学到什么 - -这节的课程包括机器学习领域中的多种回归模型。回归模型可以明确多种变量间的_关系_。这种模型可以用来预测类似长度、温度和年龄之类的值, 通过分析数据点来揭示变量之间的关系。 - -在本节的一系列课程中,你会学到线性回归和逻辑回归之间的区别,并且你将知道对于特定问题如何在这两种模型中进行选择 - -在这组课程中,你会准备好包括为管理笔记而设置VS Code、配置数据科学家常用的环境等机器学习的初始任务。你会开始上手Scikit-learn学习项目(一个机器学习的百科),并且你会以回归模型为主构建起你的第一种机器学习模型 - -> 这里有一些代码难度较低但很有用的工具可以帮助你学习使用回归模型。 试一下 [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - - -### Lessons - -1. [交易的工具](../1-Tools/translations/README.zh-cn.md) -2. [管理数据](../2-Data/translations/README.zh-cn.md) -3. [线性和多项式回归](../3-Linear/translations/README.zh-cn.md) -4. [逻辑回归](../4-Logistic/translations/README.zh-cn.md) - ---- -### Credits - -"机器学习中的回归" 由[Jen Looper](https://twitter.com/jenlooper)♥️ 撰写 - -♥️ 测试的贡献者: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) 和 [Ornella Altunyan](https://twitter.com/ornelladotcom) - -南瓜数据集受此启发 [this project on Kaggle](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) 由美国农业部上传分享。我们根据种类添加了围绕颜色的一些数据点。这些数据处在公共的域名上。 diff --git a/2-Regression/translations/README.zh-tw.md b/2-Regression/translations/README.zh-tw.md deleted file mode 100644 index 47ef1f34..00000000 --- a/2-Regression/translations/README.zh-tw.md +++ /dev/null @@ -1,36 +0,0 @@ -# 機器學習中的回歸模型 - -## 本節主題: 北美南瓜價格的回歸模型 🎃 - -在北美,南瓜經常在萬聖節被刻上嚇人的鬼臉。讓我們來深入研究一下這種奇妙的蔬菜 - -![jack-o-lantern](../images/jack-o-lanterns.jpg) -> Foto oleh Beth Teutschmann di Unsplash - -## 你會學到什麽 - -這節的課程包括機器學習領域中的多種回歸模型。回歸模型可以明確多種變量間的_關系_。這種模型可以用來預測類似長度、溫度和年齡之類的值, 通過分析數據點來揭示變量之間的關系。 - -在本節的一系列課程中,你會學到線性回歸和邏輯回歸之間的區別,並且你將知道對於特定問題如何在這兩種模型中進行選擇 - -在這組課程中,你會準備好包括為管理筆記而設置VS Code、配置數據科學家常用的環境等機器學習的初始任務。你會開始上手Scikit-learn學習項目(一個機器學習的百科),並且你會以回歸模型為主構建起你的第一種機器學習模型 - -> 這裏有一些代碼難度較低但很有用的工具可以幫助你學習使用回歸模型。 試一下 [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - - -### Lessons - -1. [交易的工具](../1-Tools/translations/README.zh-tw.md) -2. [管理數據](../2-Data/translations/README.zh-tw.md) -3. [線性和多項式回歸](../3-Linear/translations/README.zh-tw.md) -4. [邏輯回歸](../4-Logistic/translations/README.zh-tw.md) - ---- - -### Credits - -"機器學習中的回歸" 由[Jen Looper](https://twitter.com/jenlooper)♥️ 撰寫 - -♥️ 測試的貢獻者: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) 和 [Ornella Altunyan](https://twitter.com/ornelladotcom) - -南瓜數據集受此啟發 [this project on Kaggle](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) 由美國農業部上傳分享。我們根據種類添加了圍繞顏色的一些數據點。這些數據處在公共的域名上。 diff --git a/3-Web-App/1-Web-App/translations/README.es.md b/3-Web-App/1-Web-App/translations/README.es.md deleted file mode 100644 index a2ec59a5..00000000 --- a/3-Web-App/1-Web-App/translations/README.es.md +++ /dev/null @@ -1,346 +0,0 @@ -# Construye una aplicación web usando un modelo de aprendizaje automático - -En esta lección, entrenarás un modelo de aprendizaje automático sobre un conjunto de datos que está fuera de este mundo: _avistamiento de OVNIs durante el siglo pasado_, proporcionados por la base de datos de NUFORC. - -Aprenderás: - -- Cómo hacer 'pickle' a un modelo entrenado -- Cómo usar ese modelo en una aplicación Flask - -Continuaremos nuestro uso de notebooks para limpiar los datos y entrenar nuestro modelo, pero puedes llevar el proceso un paso más allá explorando el uso de un modelo 'en la naturaleza', por así decirlo: en una aplicación web. - -Para hacer esto, necesitas construir una aplicación web usando Flask. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17?loc=es) - -## Construyendo una aplicación - -Existen muchas formas de construir aplicaciones web para consumir modelos de aprendizaje automático. Tu arquitectura web podría influir en la forma que tu modelo es entrenado. Imagina que estás trabajando en un negocio donde el grupo de ciencia de datos ha entrenado un modelo que quieren uses en una aplicación. - -### Consideraciones - -Hay muchas preguntas que necesitas realizar: - -- **¿Es una aplicación web o móvil?** Si estás construyendo una aplicación móvil o necesitas uar el modelo en un contexto de IoT, podrías usar [TensorFlow Lite](https://www.tensorflow.org/lite/) y usar el modelo en una applicación Android o iOS. -- **¿Dónde residirá el modelo?** ¿En la nube o de forma local? -- **Soporte fuera de línea.** ¿La aplicación trabaja en modo fuera de línea? -- **¿Qué tecnología se usó para entrenar al modelo?** La tecnología elegida puede influir en las herramientas que necesitas utilizar. - - **Uso de TensorFlow.** Si estás entrenando un modelo usando TensorFlow, por ejemplo, ese ecosistema proporciona la capacidad de convertir un modelo de TensorFlow para su uso en una aplicación web usando [TensorFlow.js](https://www.tensorflow.org/js/). - - **Uso de PyTorch.** Si estás construyendo un modelo usando una librería como [PyTorch](https://pytorch.org/), tienes la opción de exportarlo en formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) para usarlo en aplicaciones web de javascript que puedan usar el entorno de ejecución [Onnx Runtime](https://www.onnxruntime.ai/). Esta opción será explorada en una futura lección para un modelo entrenado Scikit-learn. - - **Uso de Lobe.ai o Azure Custom Vision.** Si estás usando un sistema de aprendizaje automático SaaS (Software as a Service) como lo es [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) para entrenar un modelo, este tipo de software proporciona formas de exportar el modelo a diversas plataformas, incluyendo el construir una API a medida para que esta sea consultada en la nube por tu aplicación en línea. - -También tienes la oportunidad de construir una plicación web completamente en Flask que será capaz de entrenar el propio modelo en un navegador web. Esto también puede ser realizado usando TensorFlow.js en un contexto JavaScript. - -Para nuestros propósitos, ya que hemos estado trabajando con notebooks basados en Python, exploremos los pasos que necesitas realizar para exportar un modelo entrenado desde un notebook a un formato legible para una aplicación web construida en Python. - -## Herramientas - -Para esta tarea, necesitas dos herramientas: Flask y Pickle, ambos corren en Python. - -✅ ¿Qué es [Flask](https://palletsprojects.com/p/flask/)? Definido como un 'micro-framework' por sus creadores, Flask proporciona las características básicas de los frameworks web usando Python y un motor de plantillas para construir páginas web. Da un vistazo a [este módulo de aprendizaje](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) para practicar construir con Flask. - -✅ ¿Qué es [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 es un módulo de Python que serializa y deserializa estructura de objetos Python. Cuando conviertes un modelo en 'pickle', serializas o aplanas su estructura para su uso en la web. Sé cuidadoso: Pickle no es intrínsecamente seguro, por lo que debes ser cuidadoso si solicitaste hacer 'un-pickle' en un archivo. Un archivo hecho pickle tiene el sufijo `.pkl`. - -## Ejercicio - limpia tus datos - -En esta lección usarás datos de 80,000 avistamientos de OVNIs, recopilados por [NUFORC](https://nuforc.org) (El centro nacional de informes OVNI). Estos datos tienen algunas descripciones interesantes de avistamientos OVNI, por ejemplo: - - -- **Descripción larga del ejemplo.** "Un hombre emerge de un haz de luz que brilla en un campo de hierba por la noche y corre hacia el estacionamiento de Texas Instruments". -- **Descripción corta del ejemplo.** "las luces nos persiguieron". - -La hoja de cálculo [ufos.csv](../data/ufos.csv) incluye columnas acerca de los campos `city`, `state` y `country` donde ocurrió el avistamiento, la forma (`shape`) y su latitud (`latitude`) y ubicación (`latitude` y `longitude`). - -En el [notebook](../notebook.ipynb) en blanco incluído en esta lección: - -1. Importa `pandas`, `matplotlib`, y `numpy` como lo hiciste en lecciones anteriores e importa la hoja de cálculo ufos. Puedes dar un vistazo al conjunto de datos de ejemplo: - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -1. Convierte los datos de OVNIs en un pequeño dataframe con nuevos títulos. Revisa los valores únicos en el campo `Country`. - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. Ahora, puedes reducir la cantidad de datos que necesitamos manejar eliminando cualquier valor nulo e importando únicamente los avistamientos entre 1 y 60 segundos: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Importa la librería `LabelEncoder` de Scikit-learn para convertir los valores de texto de los países a número: - - ✅ LabelEncoder codifica los datos alfabéticamente - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - Tus datos deberían verse así: - - ```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 - ``` - -## Ejercicio - construye tu modelo - -Ahora puedes prepararte para entrenar un modelo dividiendo los datos entre los grupos de entrenamiento y pruebas. - -1. Selecciona las tres características que quieres entrenar en tu vector X, y el vector Y será `Country`. Quieres ser capaz de introducir `Seconds`, `Latitude` y `Longitude` y obtener un id de país de regreso. - - ```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. Entrena tu modelo usando regresión logística: - - ```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)) - ``` - -La precisión no es mala **(alrededor del 95%)**, como era de esperar, ya que `Country` y `Latitude/Longitude` se correlacionan. - -El modelo que creaste no es muy revolucionario como deberías ser capaz de inferir un país (`Country`) por su latitud y longitud (`Latitude`, `Longitude`), pero es un buen ejercicio intentar entrenar desde datos en crudo que ya limpiaste, exportaste y luego usa este modelo en una aplicación web. - -## Ejercicio - Haz 'pickle' a tu modelo - -Ahora, ¡es momento de hacer _pickle_ a tu modelo! Puedes hacer eso con pocas líneas de código. Una vez la hiciste _pickle_, carga tu modelo serializado (pickled) y pruébalo constra un arreglo de datos de muestra que contenga los valores para segundos, latitud y longitud. - -```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]])) -``` - -El modelo regresa **'3'**, lo cual es el código de país para el Reino Unido (UK). ¡Sorprendente! 👽 - -## Ejercicio - Construye una aplicación Flask - -Ahora puedes construir una aplicación Flask para llamara tu modelo y regresar resultados similares, pero de una forma visualmente más agradable. - -1. Comienza por crear un directorio llamado **web-app** junto al archivo _notebook.ipynb_ donde reside el archivo _ufo-model.pkl_. - -1. En ese directorio crea 3 directorios más: **static**, con un directorio **css** dentro de el, y **templates**. Ahora tienes la siguiente estructura de directorios: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Consulta el directorio de la solución para una vista de la aplicación terminada. - -1. El primer archivo a crear en el directorio _web-app_ es el archivo **requirements.txt**. Así como _package.json_ en una aplicación JavaScript, este archivo lista las dependencias requeridas por la aplicación. En **requirements.txt** agrega las líneas: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. Ahora, ejecuta este archivo navegando a _web-app_: - - ```bash - cd web-app - ``` - -1. Escribe en tu terminal `pip install`, para instalar las librerías listadas en _requirements.txt_: - - ```bash - pip install -r requirements.txt - ``` - -1. Ahora, estás listo para crear 3 archivos más y así terminar la aplicación: - - 1. Crea el archivo **app.py** en la raíz. - 2. Crea el archivo **index.html** dentro del directorio _templates_. - 3. Crea el archivo **styles.css** dentro del directorio _static/css_. - -1. Construye el archivo _styles.css_ file con algunos estilos: - - ```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. Lo siguiente es constuir el archivo _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 }}

- -
- -
- - - - ``` - - Echa un vistazo a la plantilla en este archivo. Nota la sitaxis 'mustache' alrededor de las variables que serán proporcionadas por la aplicación, como el texto de predicción `{{}}`. También hay un formulario que publica una predicción a la ruta `/predict`. - - Finalmente, estás listo para construir el archivo python que maneja el consumo de el modelo y la pantalla de predicciones: - -1. En `app.py` agrega: - - ```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) - ``` - - > 💡 Tip: Cuando agregas [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) mientras ejecutas la aplicación web usando Flask, cualquier cambio que realices a tu aplicación será reflejado inmediatamente sin la necesidad de reiniciar el servidor. ¡Ten cuidado! No actives este modo en una aplicación en producción. - -Si ejecutas `python app.py` o `python3 app.py` - tu servidor web inicia, localmente, y puedes llenar un pequeño formulario para obtener una respuesta a tu pregunta en cuestión acerca de ¡dónde han avistado OVNIs! - -Antes de hacerlo, echa un vistazo a las partes de `app.py`: - -1. Primero, las dependencias son cargadas y la aplicación inicia. -2. Luego, el modelo es importado. -3. Lo siguiente, el archivo index.html es renderizado en la ruta principal. - -En la ruta `/predict`, pasan muchas cosas cuando el formulario se publica: - -1. Las variables del formulario son reunidas y convertidas a un arreglo de numpy. Luego estas son enviadas al modelo y se regresa una predicción. -2. Los países que queremos se muestren son re-renderizados como texto legible de su código de país previsto, y ese valor es enviado de vuelta a index.html para ser renderizado en la plantilla. - -Usando un modelo de esta forma, con Flask y un modelo hecho pickled, es relativamente sencillo. La cosa más difícil es entender qué forma tienen los datos que deben ser enviados al modelo para obtener una predicción. Todo eso depende en cómo fue entrenado el modelo. Este tiene 3 puntos de datos como entrada para así obtener una predicción. - -En un entorno profesional, puedes ver cómo la buena comunicación es necesaria entre las personas las cuales entrenan el modelo y aquellas que lo consumen en una aplicación web o móvil. En nuestro caso, es una sola persona, ¡tú! - ---- - -## 🚀 Desafío - -En lugar de trabajar en un notebook e importar el modelo a una aplicación Flask, ¡podrías entrenar el modelo directo en la aplicación Flask! Intenta convertir tu código Python en el notebook, quizá después que tus datos sean limpiados, para entrenar el modelo desde la aplicación en una ruta llamada `train`. ¿Cuáles son los pros y contras de seguir este método? - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18?loc=es) - -## Revisión y autoestudio - -Hay muchas formas de construir una aplicación web para consumir modelos de aprendizaje automático. Haz una lista de las formas en que podrías usar JavaScript o Python para construir una aplicación web para aprovechar el apredizaje automático. Considera la arquitectura: ¿El modelo debería estar en la aplicación o vivir en la nube? Si es lo segundo, ¿Cómo lo accederías? Dibuja un modelo de arquitectura para una solución web de aprendizaje automático aplicada. - -## Asignación - -[Prueba un modelo diferente](assignment.es.md) diff --git a/3-Web-App/1-Web-App/translations/README.it.md b/3-Web-App/1-Web-App/translations/README.it.md deleted file mode 100644 index e41159ba..00000000 --- a/3-Web-App/1-Web-App/translations/README.it.md +++ /dev/null @@ -1,347 +0,0 @@ -# Creare un'app web per utilizzare un modello ML - -In questa lezione, si addestrerà un modello ML su un insieme di dati fuori dal mondo: _avvistamenti di UFO nel secolo scorso_, provenienti dal [database di NUFORC](https://www.nuforc.org). - -Si imparerà: - -- Come serializzare/deserializzare un modello addestrato -- Come usare quel modello in un'app Flask - -Si continuerà a utilizzare il notebook per pulire i dati e addestrare il modello, ma si può fare un ulteriore passo avanti nel processo esplorando l'utilizzo del modello direttamente in un'app web. - -Per fare ciò, è necessario creare un'app Web utilizzando Flask. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/?loc=it) - -## Costruire un'app - -Esistono diversi modi per creare app Web per utilizzare modelli di machine learning. L'architettura web può influenzare il modo in cui il modello viene addestrato. Si immagini di lavorare in un'azienda nella quale il gruppo di data science ha addestrato un modello che va utilizzato in un'app. - -### Considerazioni - -Ci sono molte domande da porsi: - -- **È un'app web o un'app su dispositivo mobile?** Se si sta creando un'app su dispositivo mobile o si deve usare il modello in un contesto IoT, ci si può avvalere [di TensorFlow Lite](https://www.tensorflow.org/lite/) e usare il modello in un'app Android o iOS. -- **Dove risiederà il modello**? E' utilizzato in cloud o in locale? -- **Supporto offline**. L'app deve funzionare offline? -- **Quale tecnologia è stata utilizzata per addestrare il modello?** La tecnologia scelta può influenzare gli strumenti che è necessario utilizzare. - - **Utilizzare** TensorFlow. Se si sta addestrando un modello utilizzando TensorFlow, ad esempio, tale ecosistema offre la possibilità di convertire un modello TensorFlow per l'utilizzo in un'app Web utilizzando [TensorFlow.js](https://www.tensorflow.org/js/). - - **Utilizzare PyTorch**. Se si sta costruendo un modello utilizzando una libreria come PyTorch[,](https://pytorch.org/) si ha la possibilità di esportarlo in formato [ONNX](https://onnx.ai/) ( Open Neural Network Exchange) per l'utilizzo in app Web JavaScript che possono utilizzare il [motore di esecuzione Onnx](https://www.onnxruntime.ai/). Questa opzione verrà esplorata in una lezione futura per un modello addestrato da Scikit-learn - - **Utilizzo di Lobe.ai o Azure Custom vision**. Se si sta usando un sistema ML SaaS (Software as a Service) come [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) per addestrare un modello, questo tipo di software fornisce modi per esportare il modello per molte piattaforme, inclusa la creazione di un'API su misura da interrogare nel cloud dalla propria applicazione online. - -Si ha anche l'opportunità di creare un'intera app Web Flask in grado di addestrare il modello stesso in un browser Web. Questo può essere fatto anche usando TensorFlow.js in un contesto JavaScript. - -Per questo scopo, poiché si è lavorato con i notebook basati su Python, verranno esplorati i passaggi necessari per esportare un modello addestrato da tale notebook in un formato leggibile da un'app Web creata in Python. - -## Strumenti - -Per questa attività sono necessari due strumenti: Flask e Pickle, entrambi eseguiti su Python. - -✅ Cos'è [Flask](https://palletsprojects.com/p/flask/)? Definito come un "micro-framework" dai suoi creatori, Flask fornisce le funzionalità di base dei framework web utilizzando Python e un motore di template per creare pagine web. Si dia un'occhiata a [questo modulo di apprendimento](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) per esercitarsi a sviluppare con Flask. - -✅ Cos'è [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 è un modulo Python che serializza e de-serializza la struttura di un oggetto Python. Quando si utilizza pickle in un modello, si serializza o si appiattisce la sua struttura per l'uso sul web. Cautela: pickle non è intrinsecamente sicuro, quindi si faccia attenzione se viene chiesto di de-serializzare un file. Un file creato con pickle ha il suffisso `.pkl`. - -## Esercizio: pulire i dati - -In questa lezione verranno utilizzati i dati di 80.000 avvistamenti UFO, raccolti dal Centro Nazionale per gli Avvistamenti di UFO [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Questi dati hanno alcune descrizioni interessanti di avvistamenti UFO, ad esempio: - -- **Descrizione di esempio lunga**. "Un uomo emerge da un raggio di luce che di notte brilla su un campo erboso e corre verso il parcheggio della Texas Instruments". -- **Descrizione di esempio breve**. "le luci ci hanno inseguito". - -Il foglio di calcolo [ufo.csv](../data/ufos.csv) include colonne su città (`city`), stato (`state`) e nazione (`country`) in cui è avvenuto l'avvistamento, la forma (`shape`) dell'oggetto e la sua latitudine (`latitude`) e longitudine (`longitude`). - -Nel [notebook](../notebook.ipynb) vuoto incluso in questa lezione: - -1. importare `pandas`, `matplotlib` e `numpy` come fatto nelle lezioni precedenti e importare il foglio di calcolo ufo.csv. Si può dare un'occhiata a un insieme di dati campione: - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('../data/ufos.csv') - ufos.head() - ``` - -1. Convertire i dati ufos in un piccolo dataframe con nuove intestazioni Controllare i valori univoci nel campo `Country` . - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. Ora si può ridurre la quantità di dati da gestire eliminando qualsiasi valore nullo e importando solo avvistamenti tra 1-60 secondi: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Importare la libreria `LabelEncoder` di Scikit-learn per convertire i valori di testo per le nazioni in un numero: - - ✅ LabelEncoder codifica i dati in ordine alfabetico - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - I dati dovrebbero assomigliare a questo: - - ```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 - ``` - -## Esercizio: costruire il proprio modello - -Ora ci si può preparare per addestrare un modello portando i dati nei gruppi di addestramento e test. - -1. Selezionare le tre caratteristiche su cui lo si vuole allenare come vettore X mentre il vettore y sarà `Country` Si deve essere in grado di inserire secondi (`Seconds`), latitudine (`Latitude`) e longitudine (`Longitude`) e ottenere un ID nazione da restituire. - - ```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. Addestrare il modello usando la regressione logistica: - - ```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)) - ``` - -La precisione non è male **(circa il 95%)**, non sorprende che `Country` e `Latitude/Longitude` siano correlati. - -Il modello creato non è molto rivoluzionario in quanto si dovrebbe essere in grado di dedurre una nazione (`Country`) dalla sua latitudine e longitudine (`Latitude` e `Longitude`), ma è un buon esercizio provare ad allenare dai dati grezzi che sono stati puliti ed esportati, e quindi utilizzare questo modello in una app web. - -## Esercizio: usare pickle con il modello - -Ora è il momento di utilizzare _pickle_ con il modello! Lo si può fare in poche righe di codice. Una volta che è stato _serializzato con pickle_, caricare il modello e testarlo rispetto a un array di dati di esempio contenente valori per secondi, latitudine e longitudine, - -```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]])) -``` - -Il modello restituisce **"3"**, che è il codice nazione per il Regno Unito. Fantastico! 👽 - -## Esercizio: creare un'app Flask - -Ora si può creare un'app Flask per chiamare il modello e restituire risultati simili, ma in un modo visivamente più gradevole. - -1. Iniziare creando una cartella chiamata **web-app** a livello del file _notebook.ipynb_ dove risiede il file _ufo-model.pkl_. - -1. In quella cartella creare altre tre cartelle: **static**, con una cartella **css** al suo interno e **templates**. Ora si dovrebbero avere i seguenti file e directory: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Fare riferimento alla cartella della soluzione per una visualizzazione dell'app finita. - -1. Il primo file da creare nella cartella _web-app_ è il file **requirements.txt**. Come _package.json_ in un'app JavaScript, questo file elenca le dipendenze richieste dall'app. In **requirements.txt** aggiungere le righe: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. Ora, eseguire questo file portandosi su _web-app_: - - ```bash - cd web-app - ``` - -1. Aprire una finestra di terminale dove risiede requirements.txt e digitare `pip install`, per installare le librerie elencate in _reuirements.txt_: - - ```bash - pip install -r requirements.txt - ``` - -1. Ora si è pronti per creare altri tre file per completare l'app: - - 1. Creare **app.py** nella directory radice. - 2. Creare **index.html** nella directory _templates_. - 3. Creare **sytles.css** nella directory _static/css_. - -1. Inserire nel file _styles.css_ alcuni stili: - - ```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. Quindi, creare il file _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 }}

- -
-
- - - - ``` - - Dare un'occhiata al template di questo file. Notare la sintassi con le parentesi graffe attorno alle variabili che verranno fornite dall'app, come il testo di previsione: `{{}}`. C'è anche un modulo che invia una previsione alla rotta `/predict`. - - Infine, si è pronti per creare il file python che guida il consumo del modello e la visualizzazione delle previsioni: - -1. In `app.py` aggiungere: - - ```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) - ``` - - > 💡 Suggerimento: quando si aggiunge [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) durante l'esecuzione dell'app web utilizzando Flask, qualsiasi modifica apportata all'applicazione verrà recepita immediatamente senza la necessità di riavviare il server. Attenzione! Non abilitare questa modalità in un'app di produzione. - -Se si esegue `python app.py` o `python3 app.py` , il server web si avvia, localmente, e si può compilare un breve modulo per ottenere una risposta alla domanda scottante su dove sono stati avvistati gli UFO! - -Prima di farlo, dare un'occhiata alle parti di `app.py`: - -1. Innanzitutto, le dipendenze vengono caricate e l'app si avvia. -1. Poi il modello viene importato. -1. Infine index.html viene visualizzato sulla rotta home. - -Sulla rotta `/predict` , accadono diverse cose quando il modulo viene inviato: - -1. Le variabili del modulo vengono raccolte e convertite in un array numpy. Vengono quindi inviate al modello e viene restituita una previsione. -2. Le nazioni che si vogliono visualizzare vengono nuovamente esposte come testo leggibile ricavato dal loro codice paese previsto e tale valore viene inviato a index.html per essere visualizzato nel template della pagina web. - -Usare un modello in questo modo, con Flask e un modello serializzato è relativamente semplice. La cosa più difficile è capire che forma hanno i dati che devono essere inviati al modello per ottenere una previsione. Tutto dipende da come è stato addestrato il modello. Questo ha tre punti dati da inserire per ottenere una previsione. - -In un ambiente professionale, si può vedere quanto sia necessaria una buona comunicazione tra le persone che addestrano il modello e coloro che lo consumano in un'app web o su dispositivo mobile. In questo caso, si ricoprono entrambi i ruoli! - ---- - -## 🚀 Sfida - -Invece di lavorare su un notebook e importare il modello nell'app Flask, si può addestrare il modello direttamente nell'app Flask! Provare a convertire il codice Python nel notebook, magari dopo che i dati sono stati puliti, per addestrare il modello dall'interno dell'app su un percorso chiamato `/train`. Quali sono i pro e i contro nel seguire questo metodo? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/?loc=it) - -## Revisione e Auto Apprendimento - -Esistono molti modi per creare un'app web per utilizzare i modelli ML. Elencare dei modi in cui si potrebbe utilizzare JavaScript o Python per creare un'app web per sfruttare machine learning. Considerare l'architettura: il modello dovrebbe rimanere nell'app o risiedere nel cloud? In quest'ultimo casi, come accedervi? Disegnare un modello architettonico per una soluzione web ML applicata. - -## Compito - -[Provare un modello diverso](assignment.it.md) - - diff --git a/3-Web-App/1-Web-App/translations/README.ja.md b/3-Web-App/1-Web-App/translations/README.ja.md deleted file mode 100644 index 525e32ca..00000000 --- a/3-Web-App/1-Web-App/translations/README.ja.md +++ /dev/null @@ -1,345 +0,0 @@ -# 機械学習モデルを使うためのWebアプリを構築する - -この講義では、この世界のものではないデータセットを使って機械学習モデルを学習させます。NUFORCのデータベースに登録されている「過去100年のUFO目撃情報」です。 - -あなたが学ぶ内容は以下の通りです。 - -- 学習したモデルを「塩漬け」にする方法 -- モデルをFlaskアプリで使う方法 - -引き続きノートブックを使ってデータのクリーニングやモデルの学習を行いますが、さらに一歩進んでモデルを「野生で」、つまりWebアプリで使うのを検討することも可能です。 - -そのためには、Flaskを使ってWebアプリを構築する必要があります。 - -## [講義前の小テスト](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17?loc=ja) - -## アプリの構築 - -機械学習モデルを使うためのWebアプリを構築する方法はいくつかあります。Webアーキテクチャはモデルの学習方法に影響を与える可能性があります。データサイエンスグループが学習したモデルをアプリで使用する、という業務があなたに任されている状況をイメージしてください。 - -### 検討事項 - -あなたがすべき質問はたくさんあります。 - -- **Webアプリですか?それともモバイルアプリですか?** モバイルアプリを構築している場合や、IoTの環境でモデルを使う必要がある場合は、[TensorFlow Lite](https://www.tensorflow.org/lite/) を使用して、AndroidまたはiOSアプリでモデルを使うことができます。 -- **モデルはどこに保存しますか?** クラウドでしょうか?それともローカルでしょうか? -- **オフラインでのサポート。** アプリはオフラインで動作する必要がありますか? -- **モデルの学習にはどのような技術が使われていますか?** 選択された技術は使用しなければいけないツールに影響を与える可能性があります。 - - **Tensor flow を使っている。** 例えば TensorFlow を使ってモデルを学習している場合、 [TensorFlow.js](https://www.tensorflow.org/js/) を使って、Webアプリで使用できるように TensorFlow モデルを変換する機能をそのエコシステムは提供しています。 - - **PyTorchを使っている。** [PyTorch](https://pytorch.org/) などのライブラリを使用してモデルを構築している場合、[ONNX](https://onnx.ai/) (Open Neural Network Exchange) 形式で出力して、JavaScript のWebアプリで [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) のような機械学習SaaS (Software as a Service) システムを使用してモデルを学習している場合、この種のソフトウェアは多くのプラットフォーム向けにモデルを出力する方法を用意していて、これにはクラウド上のオンラインアプリケーションからリクエストされるような専用APIを構築することも含まれます。 - -また、ウェブブラウザ上でモデルを学習することができるFlaskのWebアプリを構築することもできます。JavaScript の場合でも TensorFlow.js を使うことで実現できます。 - -私たちの場合はPythonベースのノートブックを今まで使用してきたので、学習したモデルをそのようなノートブックからPythonで構築されたWebアプリで読める形式に出力するために必要な手順を探ってみましょう。 - -## ツール - -ここでの作業には2つのツールが必要です。FlaskとPickleで、どちらもPython上で動作します。 - -✅ [Flask](https://palletsprojects.com/p/flask/) とは?制作者によって「マイクロフレームワーク」と定義されているFlaskは、Pythonを使ったWebフレームワークの基本機能と、Webページを構築するためのテンプレートエンジンを提供しています。Flaskでの構築を練習するために [この学習モジュール](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) を見てみてください。 - -✅ [Pickle](https://docs.python.org/3/library/pickle.html) とは?Pickle 🥒 は、Pythonのオブジェクト構造をシリアライズ・デシリアライズするPythonモジュールです。モデルを「塩漬け」にすると、Webで使用するためにその構造をシリアライズしたり平坦化したりします。pickleは本質的に安全ではないので、ファイルの 'un-pickle' を促された際は注意してください。塩漬けされたファイルの末尾は `.pkl` となります。 - -## 演習 - データをクリーニングする - -この講義では、[NUFORC](https://nuforc.org) (The National UFO Reporting Center) が集めた8万件のUFO目撃情報のデータを使います。このデータには、UFOの目撃情報に関する興味深い記述があります。例えば以下のようなものです。 - -- **長い記述の例。** 「夜の草原を照らす光線から男が現れ、Texas Instruments の駐車場に向かって走った」 -- **短い記述の例。** 「私たちを光が追いかけてきた」 - -[ufos.csv](../data/ufos.csv) のスプレッドシートには、目撃された場所の都市 (`city`)、州 (`state`)、国 (`country`)、物体の形状 (`shape`)、緯度 (`latitude`)、経度 (`longitude`) などの列が含まれています。 - -この講義に含んでいる空の [ノートブック](../notebook.ipynb) で、以下の手順に従ってください。 - -1. 前回の講義で行ったように `pandas`、`matplotlib`、`numpy` をインポートし、UFOのスプレッドシートをインポートしてください。サンプルのデータセットを見ることができます。 - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -1. UFOのデータを新しいタイトルで小さいデータフレームに変換してください。また、`Country` 属性の一意な値を確認してください。 - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. ここで、null値をすべて削除し、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ベクトルとして学習したい3つの特徴を選択し、Yベクトルには `Country` を指定します。`Seconds`、`Latitude`、`Longitude` を入力して国のIDを取得することにします。 - - ```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)) - ``` - -国 (`Country`) と緯度・経度 (`Latitude/Longitude`) は相関しているので当然ですが、精度は悪くないです。**(約95%)** - -緯度 (`Latitude`) と経度 (`Longitude`) から国 (`Country`) を推測することができるので、作成したモデルは画期的なものではありませんが、クリーニングして出力した生のデータから学習を行い、このモデルをWebアプリで使用してみる良い練習にはなります。 - -## 演習 - モデルを「塩漬け」にする - -さて、いよいよモデルを「塩漬け」にしてみましょう!これは数行のコードで実行できます。「塩漬け」にした後は、そのモデルを読み込んで、秒・緯度・経度を含むサンプルデータの配列でテストしてください。 - -```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」** を返します。すばらしい!👽 - -## 演習 - Flaskアプリを構築する - -これでFlaskアプリを構築してモデルを呼び出すことができるようになり、これは同じような結果を返しますが、視覚的によりわかりやすい方法です。 - -1. まず、_ufo-model.pkl_ ファイルと _notebook.ipynb_ ファイルが存在する場所に **web-app** というフォルダを作成してください。 - -1. そのフォルダの中に、さらに3つのフォルダを作成してください。**css** というフォルダを含む **static** と、**templates** です。以下のようなファイルとディレクトリになっているはずです。 - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ 完成したアプリを見るには、solution フォルダを参照してください。 - -1. _web-app_ フォルダの中に作成する最初のファイルは **requirements.txt** です。JavaScript アプリにおける _package.json_ と同様に、このファイルはアプリに必要な依存関係をリストにしたものです。**requirements.txt** に以下の行を追加してください。 - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. 次に、_web-app_ に移動して、このファイルを実行します。 - - ```bash - cd web-app - ``` - -1. _requirements.txt_ に記載されているライブラリをインストールするために、ターミナルで `pip install` と入力してください。 - - ```bash - pip install -r requirements.txt - ``` - -1. アプリを完成させるために、さらに3つのファイルを作成する準備が整いました。 - - 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` のパスに対して予測を送信するフォームもあります。 - - ついに、モデルを使用して予測値を表示するpythonファイルを構築する準備ができました。 - -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) - ``` - - > 💡 ヒント: Flaskを使ったWebアプリを実行する際に [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) を加えると、サーバを再起動しなくてもアプリに加えた変更がすぐに反映されます。注意!本番アプリではこのモードを有効にしないでください。 - -`python app.py` もしくは `python3 app.py` を実行すると、Webサーバがローカルに起動し、UFOがどこで目撃されたのかという重要な質問に対する答えを、短いフォームに記入することで得られます。 - -その前に `app.py` を見てみましょう。 - -1. 最初に、依存関係が読み込まれてアプリが起動します。 -1. 次に、モデルが読み込まれます。 -1. 次に、ホームのパスで index.html がレンダリングされます。 - -`/predict` のパスにフォームを送信するといくつかのことが起こります。 - -1. フォームの変数が集められてnumpyの配列に変換されます。それらはモデルに送られ、予測が返されます。 -2. 表示させたい国は、予測されたコードから読みやすい文字列に再レンダリングされて、index.html に送り返された後にテンプレートの中でレンダリングされます。 - -このように、Flaskとpickleされたモデルを使うのは比較的簡単です。一番難しいのは、予測を得るためにモデルに送らなければならないデータがどのような形をしているかを理解することです。それはモデルがどのように学習されたかによります。今回の場合は、予測を得るために入力すべきデータが3つあります。 - -プロの現場では、モデルを学習する人と、それをWebやモバイルアプリで使用する人との間に、良好なコミュニケーションが必要であることがわかります。今回はたった一人の人間であり、それはあなたです! - ---- - -## 🚀 チャレンジ - -ノートブックで作業してモデルをFlaskアプリにインポートする代わりに、Flaskアプリの中でモデルをトレーニングすることができます。おそらくデータをクリーニングした後になりますが、ノートブック内のPythonコードを変換して、アプリ内の `train` というパスでモデルを学習してみてください。この方法を採用することの長所と短所は何でしょうか? - -## [講義後の小テスト](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18?loc=ja) - -## 振り返りと自主学習 - -機械学習モデルを使用するWebアプリを構築する方法はたくさんあります。JavaScript やPythonを使って機械学習を活用するWebアプリを構築する方法を挙げてください。アーキテクチャに関する検討: モデルはアプリ内に置くべきでしょうか?それともクラウドに置くべきでしょうか?後者の場合、どのようにアクセスするでしょうか?機械学習を使ったWebソリューションのアーキテクチャモデルを描いてください。 - -## 課題 - -[違うモデルを試す](assignment.ja.md) diff --git a/3-Web-App/1-Web-App/translations/README.ko.md b/3-Web-App/1-Web-App/translations/README.ko.md deleted file mode 100644 index 4c7024ed..00000000 --- a/3-Web-App/1-Web-App/translations/README.ko.md +++ /dev/null @@ -1,348 +0,0 @@ -# ML 모델 사용하여 Web App 만들기 - -이 강의에서, 이 세상에 없었던 데이터셋에 대하여 ML 모델을 훈련할 예정입니다: _UFO sightings over the past century_, sourced from NUFORC's database. - -다음을 배우게 됩니다: - -- 훈련된 모델을 'pickle'하는 방식 -- Flask 앱에서 모델을 사용하는 방식 - -계속 노트북으로 데이터를 정리하고 모델을 훈련하지만, 웹 앱에서 'in the wild' 모델을 사용하면 단계를 넘어서 발전할 수 있습니다. - -이러면, Flask로 웹 앱을 만들어야 합니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## 앱 만들기 - -머신러닝 모델로 웹 앱을 만드는 여러 방식이 존재합니다. 웹 구조는 모델을 훈련하는 방식에 영향을 줄 수 있습니다. 데이터 사이언스 그룹이 앱에서 사용하고 싶은 훈련된 모델을 가지고 비지니스에서 일한다고 상상해봅니다. - -### 고려할 사항 - -많은 질문들을 물어볼 필요가 있습니다: - -- **웹 앱 혹은 모바일 앱인가요?** 만약 모바일 앱을 만들거나 IoT 컨텍스트에서 모델을 사용해야 되는 경우, [TensorFlow Lite](https://www.tensorflow.org/lite/)로 Android 또는 iOS 앱에서 모델을 사용할 수 있습니다. -- **모델은 어디에 있나요?** 클라우드 또는 로컬 중 어디인가요? -- **오프라인 지원합니다.** 앱이 오프라인으로 동작하나요? -- **모델을 훈련시킬 때 사용하는 기술은 무엇인가요?** 선택된 기술은 사용할 도구에 영향을 줄 수 있습니다. - - **Tensor flow 사용합니다.** 만약 TensorFlow로 모델을 훈련한다면, 예시로, 에코 시스템은 [TensorFlow.js](https://www.tensorflow.org/js/)로 웹 앱에서 사용할 TensorFlow 모델을 변환해주는 기능을 제공합니다. - - **PyTorch 사용합니다.** 만약 [PyTorch](https://pytorch.org/) 같은 라이브러리로 모델을 만들면, [Onnx Runtime](https://www.onnxruntime.ai/)으로 할 수 있는 JavaScript 웹 앱에서 사용하기 위한 [ONNX](https://onnx.ai/) (Open Neural Network Exchange) 포맷으로 내보낼 옵션이 존재합니다. 이 옵션은 Scikit-learn-trained 모델로 이후 강의에서 알아볼 예정입니다. - - **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) 같은 ML SaaS (Software as a Service) 시스템으로 모델을 훈련하게 된다면, 이 소프트웨어 타입은 온라인 애플리케이션이 클라우드에서 쿼리된 bespoke API를 만드는 것도 포함해서 많은 플랫폼의 모델들을 내보낼 방식을 제공합니다. - -또 웹 브라우저에서 모델로만 훈련할 수 있는 모든 Flask 웹 앱을 만들 수 있습니다. JavaScript 컨텍스트에서 TensorFlow.js로 마무리 지을 수 있습니다. - -목적을 위해서, Python-기반의 노트북으로 작성했기 때문에, 노트북에서 훈련된 모델을 Python-제작한 웹 앱에서 읽을 수 있는 포맷으로 내보낼 때 필요한 단계를 알아봅니다. - -## 도구 - -작업에서, 2가지 도구가 필요합니다: Flask 와 Pickle은, 둘 다 Python에서 작동합니다. - -✅ [Flask](https://palletsprojects.com/p/flask/)는 무엇일까요? 작성자가 'micro-framework'로 정의한, Flask는 Python으로 웹 프레임워크의 기본적인 기능과 웹 페이지를 만드는 템플릿 엔진을 제공합니다. [this Learn module](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott)을 보고 Flask로 만드는 것을 연습합니다. - -✅ [Pickle](https://docs.python.org/3/library/pickle.html)은 무엇일까요? Pickle 🥒은 Python 객체 구조를 serializes와 de-serializes하는 Python 모듈입니다. 모델을 'pickle'하게 되면, 웹에서 쓰기 위해서 serialize 또는 flatten합니다. 주의합시다: pickle은 원래 안전하지 않아서, 파일을 'un-pickle'한다고 나오면 조심합니다. pickled 파일은 접미사 `.pkl`로 있습니다. - -## 연습 - 데이터 정리하기 - -[NUFORC](https://nuforc.org) (The National UFO Reporting Center)에서 모아둔, 80,000 UFO 목격 데이터를 이 강의에서 사용합니다. 데이터에 UFO 목격 관련한 몇 흥미로운 설명이 있습니다, 예시로 들어봅니다: - -- **긴 예시를 설명합니다.** "A man emerges from a beam of light that shines on a grassy field at night and he runs towards the Texas Instruments parking lot". -- **짧은 예시를 설명합니다.** "the lights chased us". - -[ufos.csv](.././data/ufos.csv) 스프레드시트에는 목격된 `city`, `state` 와 `country`, 오브젝트의 `shape` 와 `latitude` 및 `longitude` 열이 포함되어 있습니다. - -강의에 있는 빈 [notebook](../notebook.ipynb)에서 진행합니다: - -1. 이전 강의에서 했던 것처럼 `pandas`, `matplotlib`, 와 `numpy`를 import하고 ufos 스프레드시트도 import합니다. 샘플 데이터셋을 볼 수 있습니다: - - ```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. 지금부터, 모든 null 값을 드랍하고 1-60초 사이 목격만 가져와서 처리할 데이터의 수량을 줄일 수 있습니다: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Scikit-learn의 `LabelEncoder` 라이브러리를 Import해서 국가의 텍스트 값을 숫자로 변환합니다: - - ✅ 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 백터로 훈련할 3가지 features를 선택하면, y 백터는 `Country`로 됩니다. `Seconds`, `Latitude` 와 `Longitude`를 입력하면 국가 id로 반환되기를 원합니다. - - ```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. logistic regression을 사용해서 모델을 훈련합니다: - - ```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)) - ``` - -당연하게, `Country` 와 `Latitude/Longitude`가 상관 관계있어서, 정확도 **(around 95%)** 가 나쁘지 않습니다. - -만든 모델은 `Latitude` 와 `Longitude`에서 `Country`를 알 수 있어야 하므로 매우 혁신적이지 않지만, 정리하면서, 뽑은 원본 데이터에서 훈련을 해보고 웹 앱에서 모델을 쓰기에 좋은 연습입니다. - -## 연습 - 모델 'pickle'하기 - -모델을 _pickle_ 할 시간이 되었습니다! 코드 몇 줄로 할 수 있습니다. _pickled_ 되면, pickled 모델을 불러와서 초, 위도와 경도 값이 포함된 샘플 데이터 배열을 대상으로 테스트합니다. - -```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'** 이 반환됩니다. Wild! 👽 - -## 연습 - Flask 앱 만들기 - -지금부터 Flask 앱을 만들어서 모델을 부르고 비슷한 결과를 반환하지만, 시각적으로 만족할 방식으로도 가능합니다. - -1. _ufo-model.pkl_ 파일과 _notebook.ipynb_ 파일 옆에 **web-app** 이라고 불리는 폴더를 만들면서 시작합니다. - -1. 폴더에서 3가지 폴더를 만듭니다: **static**, 내부에 **css** 폴더가 있으며, **templates`** 도 있습니다. 지금부터 다음 파일과 디렉토리들이 있어야 합니다: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ 완성된 앱을 보려면 solution 폴더를 참조합니다 - -1. _web-app_ 폴더에서 만들 첫 파일은 **requirements.txt** 파일입니다. JavaScript 앱의 _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. 지금부터, 앱을 완성하기 위해서 3가지 파일을 더 만들 준비를 했습니다: - - 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 }}

- -
-
- - - - ``` - - 파일의 템플릿을 봅니다. 예측 텍스트: `{{}}`처럼, 앱에서 제공할 수 있는 변수 주위, 'mustache' 구문을 확인해봅니다. `/predict` 라우터에 예측을 보낼 폼도 있습니다. - - 마지막으로, 모델을 써서 예측으로 보여줄 python 파일을 만들 준비가 되었습니다: - -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)를 추가하면 Flask 사용해서 웹 앱을 실행하는 도중에, 서버를 다시 시작할 필요없이 애플리케이션에 변경점이 바로 반영됩니다. 조심하세요! 프로덕션 앱에서 이 모드를 활성화하지 맙시다. - -만약 `python app.py` 또는 `python3 app.py`를 실행하면 - 웹 서버가 로컬에서 시작하고, 짧은 폼을 작성하면 UFOs가 목격된 장소에 대해 주목받을 질문의 답을 얻을 수 있습니다! - -하기 전, `app.py`의 일부분을 봅니다: - -1. 먼저, 의존성을 불러오고 앱이 시작합니다. -1. 그 다음, 모델을 가져옵니다. -1. 그 다음, index.html을 홈 라우터에 랜더링합니다. - -`/predict` 라우터에서, 폼이 보내질 때 몇가지 해프닝이 생깁니다: - -1. 폼 변수를 모아서 numpy 배열로 변환합니다. 그러면 모델로 보내지고 예측이 반환됩니다. -2. 국가를 보여줄 때는 예상된 국가 코드에서 읽을 수 있는 텍스트로 다시 랜더링하고, 이 값을 템플릿에서 랜더링할 수 있게 index.html로 보냅니다. - -Flask와 pickled 모델과 같이, 모델을 사용하는 이 방식은, 비교적으로 간단합니다. 어려운 것은 예측을 받기 위해서 모델에 줄 데이터의 모양을 이해해야 한다는 것입니다. 모든 모델이 어떻게 훈련받았는 지에 따릅니다. 예측을 받기 위해서 3개 데이터 포인트를 넣어야 합니다. - -전문 세팅에서, 모델을 훈련하는 사람과 웹 또는 모바일 앱에서 사용하는 사람 사이 얼마나 좋은 소통이 필요한 지 알 수 있습니다. 이 케이스는, 오직 한 사람, 당신입니다! - ---- - -## 🚀 도전 - -노트북에서 작성하고 Flask 앱에서 모델을 가져오는 대신, Flask 앱에서 바로 모델을 훈련할 수 있습니다! 어쩌면 데이터를 정리하고, 노트북에서 Python 코드로 변환해서, `train`이라고 불리는 라우터로 앱에서 모델을 훈련합니다. 이러한 방식을 추구했을 때 장점과 단점은 무엇인가요? - - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## 검토 & 자기주도 학습 - -ML 모델로 웹 앱을 만드는 방식은 많습니다. JavaScript 또는 Python으로 머신러닝을 활용하는 웹 앱의 제작 방식에 대한 목록을 만듭니다. 구조를 고려합니다: 모델이 앱이나 클라우드에 있나요? 만약 후자의 경우, 어떻게 접근하나요? 적용한 ML 웹 솔루션에 대해 아키텍쳐 모델을 그립니다. - -## 과제 - -[Try a different model](../assignment.md) - - diff --git a/3-Web-App/1-Web-App/translations/README.pt-br.md b/3-Web-App/1-Web-App/translations/README.pt-br.md deleted file mode 100644 index 31912a32..00000000 --- a/3-Web-App/1-Web-App/translations/README.pt-br.md +++ /dev/null @@ -1,348 +0,0 @@ -# Crie um aplicativo Web para usar um modelo de ML - -Nesta lição, você treinará um modelo de ML em um conjunto de dados que está fora deste mundo: _avistamentos de OVNIs no século passado_, obtidos do banco de dados do NUFORC. - -Você vai aprender: - -- Como 'pickle' um modelo treinado -- Como usar esse modelo em uma aplicação Flask - -Continuaremos nosso uso de notebooks para limpar dados e treinar nosso modelo, mas você pode levar o processo um passo adiante, explorando o uso de um modelo 'em estado selvagem', por assim dizer: em um aplicativo web. - -Para fazer isso, você precisa construir um aplicativo da web usando o Flask. - -## [Teste pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17?loc=ptbr) - -## Construindo um aplicativo - -Existem inúmeras maneiras de criar aplicativos web para consumir modelos de machine learning (aprendizado de máquina). Sua arquitetura web pode influenciar a maneira como seu modelo é treinado. Imagine que você está trabalhando em uma empresa em que o grupo de ciência de dados treinou um modelo que eles desejam que você use em um aplicativo. - -### Considerações - -Existem muitas perguntas que você precisa fazer: - -- **É um aplicativo web ou um aplicativo mobile?** Se você estiver criando um aplicativo mobile ou precisar usar o modelo em um contexto de IoT, poderá usar o [TensorFlow Lite](https://www.tensorflow.org/lite/) e usar o modelo em um aplicativo Android ou iOS. -- **Onde o modelo residirá?** Na nuvem ou localmente? -- **Suporte offline.** O aplicativo precisa funcionar offline?? -- **Qual tecnologia foi usada para treinar o modelo?** A tecnologia escolhida pode influenciar o ferramental que você precisa usar. - - **Usando o fluxo do Tensor.** Se você estiver treinando um modelo usando o TensorFlow, por exemplo, esse ecossistema oferece a capacidade de converter um modelo do TensorFlow para uso em um aplicativo da web usando [TensorFlow.js](https://www.tensorflow.org/js/). - - **Usando o PyTorch.** Se você estiver construindo um modelo usando uma biblioteca como [PyTorch](https://pytorch.org/), você tem a opção de exportá-lo em formato [ONNX](https://onnx.ai/) (Troca de rede neural aberta (Open Neural Network Exchange)) para uso em aplicativos web JavaScript que podem usar o [Onnx Runtime](https://www.onnxruntime.ai/). Esta opção será explorada em uma lição futura para um modelo treinado para aprender com Scikit. - - **Usando Lobe.ai ou Azure Custom Vision.** Se você estiver usando um sistema ML SaaS (Software as a Service), como [Lobe.ai](https://lobe.ai/) ou [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) para treinar um modelo, este tipo de software fornece maneiras de exportar o modelo para muitas plataformas, incluindo a construção de uma API sob medida para ser consultada na nuvem por seu aplicativo online. - -Você também tem a oportunidade de construir um aplicativo web Flask inteiro que seria capaz de treinar o próprio modelo em um navegador da web. Isso também pode ser feito usando TensorFlow.js em um contexto JavaScript. - -Para nossos propósitos, já que estamos trabalhando com notebooks baseados em Python, vamos explorar as etapas que você precisa seguir para exportar um modelo treinado de tal notebook para um formato legível por um aplicativo web construído em Python. - -## Ferramenta - -Para esta tarefa, você precisa de duas ferramentas: Flask e Pickle, ambos executados em Python. - -✅ O que é [Flask](https://palletsprojects.com/p/flask/)? Definido como um 'micro-framework' por seus criadores, o Flask fornece os recursos básicos de estruturas web usando Python e um mecanismo de modelagem para construir páginas web. Dê uma olhada [neste módulo de aprendizagem](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) para praticar a construção com Flask. - -✅ O que é [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 é um módulo Python que serializa e desserializa a estrutura de um objeto Python. Quando você 'pickle' um modelo, serializa ou aplaina sua estrutura para uso na web. Tenha cuidado: pickle não é intrinsecamente seguro, então tome cuidado se for solicitado para ser feito um 'un-pickle' em um arquivo. Um arquivo tem o sufixo `.pkl`. - -## Exercício - limpe seus dados - -Nesta lição, você usará dados de 80.000 avistamentos de OVNIs, coletados pelo [NUFORC](https://nuforc.org) (Centro Nacional de Relatos de OVNIs). Esses dados têm algumas descrições interessantes de avistamentos de OVNIs, por exemplo: - -- **Exemplo de descrição longa.** "Um homem emerge de um feixe de luz que brilha em um campo gramado à noite e corre em direção ao estacionamento da Texas Instruments". -- **Exemplo de descrição curta.** "as luzes nos perseguiram". - -A planilha [ufos.csv](../data/ufos.csv) inclui colunas sobre a `city`, `state` e `country` onde o avistamento ocorreu, a `shape` do objeto e sua `latitude` e `longitude`. -_nota da tradução: city é a coluna referente a cidade, state é a coluna referente ao estado e country é a coluna referente ao país._ - -Em um [notebook](../notebook.ipynb) branco incluído nesta lição: - -1. importe as bibliotecas `pandas`, `matplotlib`, e `numpy` como você fez nas lições anteriores e importe a planilha ufos. Você pode dar uma olhada em um conjunto de dados de amostra: - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -2. Converta os dados ufos em um pequeno dataframe com títulos novos. Verifique os valores únicos no campo `Country`. - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -3. Agora, você pode reduzir a quantidade de dados com os quais precisamos lidar, descartando quaisquer valores nulos e importando apenas avistamentos entre 1 a 60 segundos: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -4. Importe a biblioteca `LabelEncoder` do Scikit-learn para converter os valores de texto de países em um número: - - ✅ LabelEncoder encodes data alphabetically - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - Seus dados devem ser assim: - - ```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 - ``` - -## Exercício - construa seu modelo - -Agora você pode se preparar para treinar um modelo, dividindo os dados no grupo de treinamento e teste. - -1. Selecione os três recursos que deseja treinar como seu vetor X, e o vetor y será o `Country`. Você quer ser capaz de inserir `Seconds`, `Latitude` e `Longitude` e obter um id de país para retornar. - -_nota da tradução: seconds são os segundos e country são os países._ - - ```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) - ``` - -2. Treine seu modelo usando regressão logística: - - ```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)) - ``` - -A precisão não é ruim **(cerca de 95%)**, o que não é surpresa, já que `Country` e `Latitude/Longitude` se correlacionam. - -O modelo que você criou não é muito revolucionário, pois você deve ser capaz de inferir um `País` de sua `Latitude` e `Longitude`, mas é um bom exercício tentar treinar a partir de dados brutos que você limpou, exportou e, em seguida, use este modelo em um aplicativo da web. - -## Exercício - 'pickle' seu modelo - -Agora, é hora de _pickle_ seu modelo! Você pode fazer isso em algumas linhas de código. Depois de _pickled_, carregue seu modelo pickled e teste-o em uma matriz de dados de amostra contendo valores para segundos, latitude e longitude, - -```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]])) -``` - -O modelo retorna **'3'**, que é o código do país para o Reino Unido. Maneiro! 👽 - -## Exercício - construir um aplicativo Flask - -Agora você pode construir uma aplicação Flask para chamar seu modelo e retornar resultados semelhantes, mas de uma forma visualmente mais agradável. - -1. Comece criando uma pasta chamada **web-app** ao lado do arquivo _notebook.ipynb_ onde o arquivo _ufo-model.pkl_ reside. - -2. Nessa pasta, crie mais três pastas: **static**, com uma pasta **css** dentro dela, e **templates**. Agora você deve ter os seguintes arquivos e diretórios:: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Consulte a pasta da solução para uma visão da aplicação concluído - -3. O primeiro arquivo a ser criado na pasta _web-app_ é o arquivo **requirements.txt**. Como _package.json_ em uma aplicação JavaScript, este arquivo lista as dependências exigidas pela aplicação. Em **requirements.txt**, adicione as linhas: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -4. Agora, execute este arquivo navegando até o _web-app_: - - ```bash - cd web-app - ``` - -5. Em seu terminal, digite `pip install`, para instalar as bibliotecas listadas em _requirements.txt_: - - ```bash - pip install -r requirements.txt - ``` - -6. Agora, você está pronto para criar mais três arquivos para finalizar o aplicativo: - - 1. Crie **app.py** na raiz do projeto. - 2. Crie **index.html** no diretório _templates_. - 3. Crie **styles.css** no diretório _static/css_. - -7. Construa o arquivo _styles.css_ com alguns estilos: - - ```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; - } - ``` - -8. Em seguida, crie o arquivo _index.html_: - - ```html - - - - - 🛸 Predição de aparência de OVNIs! 👽 - - - - -
- -
- -

De acordo com o número de segundos, latitude e longitude, que país provavelmente relatou ter visto um OVNI?

- -
- - - - -
- -

{{ prediction_text }}

- -
- -
- - - - ``` - - Dê uma olhada no modelo neste arquivo. Observe a sintaxe do 'mustache' em torno das variáveis que serão fornecidas pelo aplicativo, como o texto de previsão: `{{}}`. Há também um formulário que posta uma previsão para a rota `/predict`. - - Finalmente, você está pronto para construir o arquivo python que direciona o consumo do modelo e a exibição de previsões: - -9. Em `app.py` adicione: - - ```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) - ``` - - > 💡 Dica: quando você adiciona [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) enquanto executa o aplicativo da web usando o Flask, todas as alterações feitas em seu aplicativo será refletido imediatamente, sem a necessidade de reiniciar o servidor. Cuidado! Não ative este modo em um aplicativo de produção. - -Se você executar `python app.py` ou `python3 app.py` - seu servidor web inicializa, localmente, e você pode preencher um pequeno formulário para obter uma resposta à sua pergunta candente sobre onde OVNIs foram avistados! - -Antes de fazer isso, dê uma olhada nas partes do `app.py`: - -1. Primeiro, as dependências são carregadas e o aplicativo é iniciado. -2. Em seguida, o modelo é importado. -3. Em seguida, index.html é renderizado na rota inicial. - -Na rota `/predict`, várias coisas acontecem quando o formulário é postado: - -1. As variáveis do formulário são reunidas e convertidas em um array numpy. Eles são então enviados para o modelo e uma previsão é retornada. -2. Os países que desejamos exibir são renderizados novamente como texto legível de seu código de país previsto e esse valor é enviado de volta para index.html para ser renderizado no modelo. - -Usar um modelo dessa maneira, com o Flask e um modelo em conserva, é relativamente simples. O mais difícil é entender qual é o formato dos dados que devem ser enviados ao modelo para se obter uma previsão. Tudo depende de como o modelo foi treinado. Este possui três pontos de dados a serem inseridos a fim de obter uma previsão. - -Em um ambiente profissional, você pode ver como uma boa comunicação é necessária entre as pessoas que treinam o modelo e aqueles que o consomem em um aplicativo da web ou móvel. No nosso caso, é apenas uma pessoa, você! - ---- - -## 🚀 Desafio - -Em vez de trabalhar em um notebook e importar o modelo para o aplicativo Flask, você pode treinar o modelo diretamente no aplicativo Flask! Tente converter seu código Python no notebook, talvez depois que seus dados forem limpos, para treinar o modelo de dentro do aplicativo em uma rota chamada `train`. Quais são os prós e os contras de seguir esse método? - -## [Teste pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18?loc=ptbr) - -## Revisão e autoestudo - -Existem muitas maneiras de construir um aplicativo da web para consumir modelos de ML. Faça uma lista das maneiras pelas quais você pode usar JavaScript ou Python para construir um aplicativo da web para alavancar o aprendizado de máquina. Considere a arquitetura: o modelo deve permanecer no aplicativo ou na nuvem? Nesse último caso, como você acessaria? Desenhe um modelo arquitetônico para uma solução da Web de ML aplicada. - -## Tarefa - -[Experimente um modelo diferente](assignment.pt-br.md) diff --git a/3-Web-App/1-Web-App/translations/README.pt.md b/3-Web-App/1-Web-App/translations/README.pt.md deleted file mode 100644 index 587817b2..00000000 --- a/3-Web-App/1-Web-App/translations/README.pt.md +++ /dev/null @@ -1,347 +0,0 @@ -# Criar um Aplicativo Web para usar um Modelo ML - -Nesta lição, você treinará um modelo ML em um conjunto de dados que está fora deste mundo: _Avistamentos de OVNIs no último século_, provenientes do banco de dados do NUFORC. - -Você aprenderá: - -- Como "picles" um modelo treinado -- Como usar esse modelo em um aplicativo Flask - -Continuaremos a usar notebooks para limpar dados e treinar nosso modelo, mas você pode levar o processo um passo adiante explorando o uso de um modelo "selvagem", por assim dizer: em um aplicativo Web. - -Para fazer isso, você precisa construir um aplicativo Web usando Flask. - -## [Teste de pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## Criando um aplicativo - -Há várias maneiras de criar aplicativos Web para consumir modelos de aprendizado de máquina. Sua arquitetura da Web pode influenciar a maneira como seu modelo é treinado. Imagine que você está trabalhando em um negócio onde o grupo de ciência de dados treinou um modelo que eles querem que você use em um aplicativo. - -### Considerações - -Há muitas perguntas que você precisa fazer: - -- **É um aplicativo Web ou um aplicativo móvel?** Se você estiver criando um aplicativo móvel ou precisar usar o modelo em um contexto de IoT, poderá usar [TensorFlow Lite](https://www.tensorflow.org/lite/) e usar o modelo em um aplicativo Android ou iOS. -- **Onde o modelo residirá?** Na nuvem ou localmente? -- **Suporte off-line.** O aplicativo precisa trabalhar off-line? -- **Que tecnologia foi usada para treinar o modelo?** A tecnologia escolhida pode influenciar as ferramentas que você precisa usar. - - - **Usando fluxo de Tensor.** Se você estiver treinando um modelo usando TensorFlow, por exemplo, esse ecossistema oferece a capacidade de converter um modelo TensorFlow para uso em um aplicativo Web usando [TensorFlow.js](https://www.tensorflow.org/js/). -- **Usando o PyTorch.** Se você estiver criando um modelo usando uma biblioteca como [PyTorch](https://pytorch.org/), terá a opção de exportá-lo no formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) para uso em aplicativos Web JavaScript que podem usar o [Onnx Runtime](https://www.onnxruntime.ai/). Essa opção será explorada em uma lição futura para um modelo treinado com o Scikit. -- **Usando o Lobe.ai ou o Azure Custom Vision.** Se você estiver usando um sistema ML SaaS (Software as a Service) como [Lobe.ai](https://lobe.ai/) ou [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academy-15963-cxa) para treinar um modelo, esse tipo de software fornece maneiras de exportar o modelo para várias plataformas, incluindo a criação de uma API sob medida ser consultado na nuvem pelo aplicativo online. - - -Você também tem a oportunidade de construir um aplicativo web Flask inteiro que seria capaz de treinar o próprio modelo em um navegador da web. Isso também pode ser feito usando TensorFlow.js em um contexto JavaScript. - -Para nossos propósitos, já que estamos trabalhando com notebooks baseados em Python, vamos explorar as etapas que você precisa seguir para exportar um modelo treinado de tal notebook para um formato legível por um aplicativo web construído em Python. - -## Ferramenta - -Para esta tarefa, você precisa de duas ferramentas: Flask e Pickle, ambos em Python. - -O que é [Frasco](https://palletsprojects.com/p/flask/)? Definido como um 'microframework' por seus criadores, o Flask fornece as características básicas de frameworks web usando Python e um motor de modelagem para construir páginas web. Dê uma olhada em [este módulo de aprendizado](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) para praticar a construção com o Flask. - -✅ O que é [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 é um módulo Python que serializa e desserializa uma estrutura de objeto Python. Ao "pichar" um modelo, você serializa ou achata sua estrutura para uso na web. Tenha cuidado: o pickle não é intrinsecamente seguro, portanto, tenha cuidado se for solicitado a `cancelar o pickle` de um arquivo. Um arquivo em conserto tem o sufixo `.pkl`. - -## Exercício - limpar seus dados - -Nesta lição, você usará dados de 80.000 avistamentos de UFO, coletados pelo [NUFORC](https://nuforc.org) (Centro Nacional de Relatórios de UFO). Estes dados têm algumas descrições interessantes de avistamentos de UFO, por exemplo: - -- **Descrição de exemplo longo.** "Um homem emerge de um feixe de luz que brilha em um campo gramado à noite e corre em direção ao estacionamento da Texas Instruments". -- **Breve descrição do exemplo.** "as luzes nos perseguiram". - -A planilha [ufos.csv](./data/ufos.csv) inclui colunas sobre `city`, `state` e `country` onde ocorreu o avistamento, `shape` do objeto e sua `latitude` e `longitude`. - -No espaço em branco [notebook](notebook.ipynb) incluído nesta lição: - -1. importe `pandas`, `matplotlib` e `numpy` como fez nas lições anteriores e importe a planilha ufos. Você pode dar uma olhada em um conjunto de dados de amostra: - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -1.Converta os dados ufos em um pequeno dataframe com títulos novos. Verifique os valores exclusivos no campo `País`. - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. Agora, você pode reduzir a quantidade de dados que precisamos lidar, eliminando quaisquer valores nulos e importando apenas avistamentos entre 1-60 segundos: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Importe a biblioteca 'LabelEncoder' do Scikit-learn para converter os valores de texto dos países em um número: - - ✅ LabelEncoder codifica os dados em ordem alfabética - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - Seus dados devem ter esta aparência: - - ```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 - ``` - -## Exercício - construa seu modelo - -Agora você pode se preparar para treinar um modelo dividindo os dados no grupo de treinamento e teste. - -1. Selecione os três recursos que você deseja treinar como seu vetor X, e o vetor y será o `País`. Você quer digitar `Segundos`, `Latitude` e `Longitude` e obter um ID de país para retornar. - - ```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. Treine seu modelo usando regressão logística: - - ```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)) - ``` - -A precisão não é ruim **(cerca de 95%)**, sem surpresas, já que `País` e `Latitude/Longitude` se correlacionam. - -O modelo que você criou não é muito revolucionário, pois você deve ser capaz de inferir um `País` a partir de sua `Latitude` e `Longitude`, mas é um bom exercício para tentar treinar a partir de dados brutos que você limpou, exportou e, em seguida, usar esse modelo em um aplicativo Web. - -## Exercício - 'pickle' seu modelo - -Agora, é hora de _pickle_ seu modelo! Você pode fazer isso em algumas linhas de código. Uma vez que seja _pickled_, carregue seu modelo em pickles e teste-o em uma matriz de dados de amostra contendo valores para segundos, latitude e longitude, - -```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]])) -``` - -O modelo retorna **'3'**, que é o código de país do Reino Unido. Selvagem! 👽 - -## Exercício - criar um aplicativo Flask - -Agora você pode construir um aplicativo Flask para chamar seu modelo e retornar resultados semelhantes, mas de uma forma mais visualmente agradável. - -1. Comece criando uma pasta chamada **web-app** ao lado do arquivo _notebook.ipynb_ onde reside seu arquivo _ufo-model.pkl_. - -1. Nessa pasta, crie mais três pastas: **static**, com uma pasta **css** dentro dela e **templates**. Agora você deve ter os seguintes arquivos e diretórios: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Consulte a pasta da solução para obter uma exibição do aplicativo concluído - -1. O primeiro arquivo a ser criado na pasta _web-app_ é o arquivo **requirements.txt**. Como _package.json_ em um aplicativo JavaScript, esse arquivo lista as dependências exigidas pelo aplicativo. Em **requirements.txt** adicione as linhas: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. Agora, execute este arquivo navegando para _web-app_: - - ```bash - cd web-app - ``` - -1. Em seu terminal, digite `pip install` para instalar as bibliotecas listadas em _requirements.txt_: - - ```bash - pip install -r requirements.txt - ``` - -1.Agora, você está pronto para criar mais três arquivos para concluir o aplicativo: - -1. Crie **app.py** na raiz. -2. Crie **index.html** no diretório _templates_. -3. Crie **styles.css** no diretório _static/css_. - -1. Construa o arquivo _styles.css_ com alguns estilos: - - ```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. Em seguida, crie o arquivo _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 }}

- -
- -
- - - - ``` - - Dê uma olhada na modelagem neste arquivo. Observe a sintaxe do 'bigode' ao redor das variáveis que serão fornecidas pelo aplicativo, como o texto de previsão: `{{}}`. Há também uma forma que publica uma previsão da rota `/predict`. - -Finalmente, você está pronto para construir o arquivo python que direciona o consumo do modelo e a exibição de previsões: - -1. Em `app.py` adicione: - - ```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) - ``` - - >Dica: quando você adiciona [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) ao executar o aplicativo Web usando Flask, todas as alterações feitas no aplicativo serão refletidas imediatamente sem a necessidade de reiniciar o servidor. Cuidado! Não habilite este modo em um aplicativo de produção. - -Se você executar `python app.py` ou `python3 app.py` - seu servidor Web é iniciado localmente e você pode preencher um formulário curto para obter uma resposta para sua pergunta de gravação sobre onde os OVNIs foram avistados! - -Antes de fazer isso, dê uma olhada nas partes de `app.py`: - -1. Primeiro, as dependências são carregadas e o aplicativo inicia. -1. Então, o modelo é importado. -1. Então, index.html é renderizado na rota inicial. - -Na rota `/predict`, várias coisas acontecem quando o formulário é publicado: - -1. As variáveis de formulário são reunidas e convertidas em uma matriz numérica. Eles são então enviados para o modelo e uma previsão é retornada. -2. Os Países que queremos exibir são renderizados novamente como texto legível de seu código de país previsto, e esse valor é enviado de volta para index.html para ser renderizado no modelo. - -Usando um modelo desta maneira, com Flask e um modelo em conserva, é relativamente simples. A coisa mais difícil é entender qual é a forma dos dados que devem ser enviados ao modelo para obter uma previsão. Tudo depende de como o modelo foi treinado. Este tem três pontos de dados para serem inseridos a fim de obter uma previsão. - -Em um ambiente profissional, você pode ver como uma boa comunicação é necessária entre as pessoas que treinam o modelo e aqueles que o consomem em um aplicativo web ou móvel. No nosso caso, é só uma pessoa, você! - ---- - -## 🚀Desafio - -Em vez de trabalhar em um notebook e importar o modelo para o aplicativo Flask, você poderia treinar o modelo dentro do aplicativo Flask! Tente converter seu código Python no notebook, talvez depois que seus dados forem limpos, para treinar o modelo de dentro do aplicativo em uma rota chamada `train`. Quais são os prós e contras de se buscar esse método? - -## [Teste pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## Análise e autoestudo - -Há muitas maneiras de construir um aplicativo Web para consumir modelos ML. Faça uma lista de maneiras de usar JavaScript ou Python para construir um aplicativo Web para aproveitar o aprendizado de máquina. Considere a arquitetura: o modelo deve permanecer no aplicativo ou viver na nuvem? Se o último, como você acessaria? Desenhe um modelo arquitetônico para uma solução web ML aplicada. - -## Atribuição - -[Tente um modelo diferente](assignment.md) diff --git a/3-Web-App/1-Web-App/translations/README.zh-cn.md b/3-Web-App/1-Web-App/translations/README.zh-cn.md deleted file mode 100644 index 1ed88068..00000000 --- a/3-Web-App/1-Web-App/translations/README.zh-cn.md +++ /dev/null @@ -1,347 +0,0 @@ -# 构建使用 ML 模型的 Web 应用程序 - -在本课中,你将在一个数据集上训练一个 ML 模型,这个数据集来自世界各地:过去一个世纪的 UFO 目击事件,来源于 [NUFORC 的数据库](https://www.nuforc.org)。 - -你将学会: - -- 如何“pickle”一个训练有素的模型 -- 如何在 Flask 应用程序中使用该模型 - -我们将继续使用 notebook 来清理数据和训练我们的模型,但你可以进一步探索在 web 应用程序中使用模型。 - -为此,你需要使用 Flask 构建一个 web 应用程序。 - -## [课前测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## 构建应用程序 - -有多种方法可以构建 Web 应用程序以使用机器学习模型。你的 web 架构可能会影响你的模型训练方式。想象一下,你在一家企业工作,其中数据科学小组已经训练了他们希望你在应用程序中使用的模型。 - -### 注意事项 - -你需要问很多问题: - -- **它是 web 应用程序还是移动应用程序?** 如果你正在构建移动应用程序或需要在物联网环境中使用模型,你可以使用 [TensorFlow Lite](https://www.tensorflow.org/lite/) 并在 Android 或 iOS 应用程序中使用该模型。 -- **模型放在哪里?** 在云端还是本地? -- **离线支持**。该应用程序是否必须离线工作? -- **使用什么技术来训练模型?** 所选的技术可能会影响你需要使用的工具。 - - **使用 TensorFlow**。例如,如果你正在使用 TensorFlow 训练模型,则该生态系统提供了使用 [TensorFlow.js](https://www.tensorflow.org/js/) 转换 TensorFlow 模型以便在Web应用程序中使用的能力。 - - **使用 PyTorch**。如果你使用 [PyTorch](https://pytorch.org/) 等库构建模型,则可以选择将其导出到 [ONNX](https://onnx.ai/)(开放神经网络交换)格式,用于可以使用 [Onnx Runtime](https://www.onnxruntime.ai/)的JavaScript Web 应用程序。此选项将在 Scikit-learn-trained 模型的未来课程中进行探讨。 - - **使用 Lobe.ai 或 Azure 自定义视觉**。如果你使用 ML SaaS(软件即服务)系统,例如 [Lobe.ai](https://lobe.ai/) 或 [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) 来训练模型,这种类型的软件提供了为许多平台导出模型的方法,包括构建一个定制A PI,供在线应用程序在云中查询。 - -你还有机会构建一个完整的 Flask Web 应用程序,该应用程序能够在 Web浏览器中训练模型本身。这也可以在 JavaScript 上下文中使用 TensorFlow.js 来完成。 - -出于我们的目的,既然我们一直在使用基于 Python 的 notebook,那么就让我们探讨一下将经过训练的模型从 notebook 导出为 Python 构建的 web 应用程序可读的格式所需要采取的步骤。 - -## 工具 - -对于此任务,你需要两个工具:Flask 和 Pickle,它们都在 Python 上运行。 - -✅ 什么是 [Flask](https://palletsprojects.com/p/flask/)? Flask 被其创建者定义为“微框架”,它提供了使用 Python 和模板引擎构建网页的 Web 框架的基本功能。看看[本学习单元](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott)练习使用 Flask 构建应用程序。 - -✅ 什么是 [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle🥒是一个 Python 模块,用于序列化和反序列化 Python 对象结构。当你“pickle”一个模型时,你将其结构序列化或展平以在 Web 上使用。小心:pickle 本质上不是安全的,所以如果提示“un-pickle”文件,请小心。生产的文件具有后缀 `.pkl`。 - -## 练习 - 清理你的数据 - -在本课中,你将使用由 [NUFORC](https://nuforc.org)(国家 UFO 报告中心)收集的 80,000 次 UFO 目击数据。这些数据对 UFO 目击事件有一些有趣的描述,例如: - -- **详细描述**。"一名男子从夜间照射在草地上的光束中出现,他朝德克萨斯仪器公司的停车场跑去"。 -- **简短描述**。 “灯光追着我们”。 - -[ufos.csv](./data/ufos.csv) 电子表格包括有关目击事件发生的 `city`、`state` 和 `country`、对象的 `shape` 及其 `latitude` 和 `longitude` 的列。 - -在包含在本课中的空白 [notebook](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() - ``` - -2. 将 ufos 数据转换为带有新标题的小 dataframe。检查 `country` 字段中的唯一值。 - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -3. 现在,你可以通过删除任何空值并仅导入 1-60 秒之间的目击数据来减少我们需要处理的数据量: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -4. 导入 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` 并获得要返回的国家/地区 ID。 - - ```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) - ``` - -2. 使用逻辑回归训练模型: - - ```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`,但是,尝试从清理、导出的原始数据进行训练,然后在 web 应用程序中使用此模型是一个很好的练习。 - -## 练习 - “pickle”你的模型 - -现在,是时候 _pickle_ 你的模型了!你可以在几行代码中做到这一点。一旦它是 _pickled_,加载你的 pickled 模型并针对包含秒、纬度和经度值的示例数据数组对其进行测试, - -```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'**,这是英国的国家代码。👽 - -## 练习 - 构建Flask应用程序 - -现在你可以构建一个Flask应用程序来调用你的模型并返回类似的结果,但以一种更美观的方式。 - -1. 首先在你的 _ufo-model.pkl_ 文件所在的 _notebook.ipynb_ 文件旁边创建一个名为 **web-app** 的文件夹。 - -2. 在该文件夹中创建另外三个文件夹:**static**,其中有文件夹 **css** 和 **templates**。 你现在应该拥有以下文件和目录 - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ 请参阅解决方案文件夹以查看已完成的应用程序 - -3. 在 _web-app_ 文件夹中创建的第一个文件是 **requirements.txt** 文件。与 JavaScript 应用程序中的 _package.json_ 一样,此文件列出了应用程序所需的依赖项。在 **requirements.txt** 中添加以下几行: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -4. 现在,进入 web-app 文件夹: - - ```bash - cd web-app - ``` - -5. 在你的终端中输入 `pip install`,以安装 _reuirements.txt_ 中列出的库: - - ```bash - pip install -r requirements.txt - ``` - -6. 现在,你已准备好创建另外三个文件来完成应用程序: - - 1. 在根目录中创建 **app.py**。 - 2. 在 _templates_ 目录中创建**index.html**。 - 3. 在 _static/css_ 目录中创建**styles.css**。 - -7. 使用一些样式构建 _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; - } - ``` - -8. 接下来,构建 _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 }}

- -
-
- - - - ``` - - 看看这个文件中的模板。请注意应用程序将提供的变量周围的“mustache”语法,例如预测文本:`{{}}`。还有一个表单可以将预测发布到 `/predict` 路由。 - - 最后,你已准备好构建使用模型和显示预测的 python 文件: - -9. 在`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) - ``` - - > 💡 提示:当你在使用 Flask 运行 Web 应用程序时添加 [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode)时你对应用程序所做的任何更改将立即反映,无需重新启动服务器。注意!不要在生产应用程序中启用此模式 - -如果你运行 `python app.py` 或 `python3 app.py` - 你的网络服务器在本地启动,你可以填写一个简短的表格来回答你关于在哪里看到 UFO 的问题! - -在此之前,先看一下 `app.py` 的实现: - -1. 首先,加载依赖项并启动应用程序。 -2. 然后,导入模型。 -3. 然后,在 home 路由上渲染 index.html。 - -在 `/predict` 路由上,当表单被发布时会发生几件事情: - -1. 收集表单变量并转换为 numpy 数组。然后将它们发送到模型并返回预测。 -2. 我们希望显示的国家/地区根据其预测的国家/地区代码重新呈现为可读文本,并将该值发送回 index.html 以在模板中呈现。 - -以这种方式使用模型,包括 Flask 和 pickled 模型,是相对简单的。最困难的是要理解数据是什么形状的,这些数据必须发送到模型中才能得到预测。这完全取决于模型是如何训练的。有三个数据要输入,以便得到一个预测。 - -在一个专业的环境中,你可以看到训练模型的人和在 Web 或移动应用程序中使用模型的人之间的良好沟通是多么的必要。在我们的情况下,只有一个人,你! - ---- - -## 🚀 挑战 - -你可以在 Flask 应用程序中训练模型,而不是在 notebook 上工作并将模型导入 Flask 应用程序!尝试在 notebook 中转换 Python 代码,可能是在清除数据之后,从应用程序中的一个名为 `train` 的路径训练模型。采用这种方法的利弊是什么? - -## [课后测](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## 复习与自学 - -有很多方法可以构建一个Web应用程序来使用ML模型。列出可以使用JavaScript或Python构建Web应用程序以利用机器学习的方法。考虑架构:模型应该留在应用程序中还是存在于云中?如果是后者,你将如何访问它?为应用的ML Web解决方案绘制架构模型。 - -## 任务 - -[尝试不同的模型](./assignment.zh-cn.md) - - diff --git a/3-Web-App/1-Web-App/translations/README.zh-tw.md b/3-Web-App/1-Web-App/translations/README.zh-tw.md deleted file mode 100644 index 111bd90c..00000000 --- a/3-Web-App/1-Web-App/translations/README.zh-tw.md +++ /dev/null @@ -1,347 +0,0 @@ -# 構建使用 ML 模型的 Web 應用程序 - -在本課中,你將在一個數據集上訓練一個 ML 模型,這個數據集來自世界各地:過去一個世紀的 UFO 目擊事件,來源於 [NUFORC 的數據庫](https://www.nuforc.org)。 - -你將學會: - -- 如何「pickle」一個訓練有素的模型 -- 如何在 Flask 應用程序中使用該模型 - -我們將繼續使用 notebook 來清理數據和訓練我們的模型,但你可以進一步探索在 web 應用程序中使用模型。 - -為此,你需要使用 Flask 構建一個 web 應用程序。 - -## [課前測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/17/) - -## 構建應用程序 - -有多種方法可以構建 Web 應用程序以使用機器學習模型。你的 web 架構可能會影響你的模型訓練方式。想象一下,你在一家企業工作,其中數據科學小組已經訓練了他們希望你在應用程序中使用的模型。 - -### 註意事項 - -你需要問很多問題: - -- **它是 web 應用程序還是移動應用程序?** 如果你正在構建移動應用程序或需要在物聯網環境中使用模型,你可以使用 [TensorFlow Lite](https://www.tensorflow.org/lite/) 並在 Android 或 iOS 應用程序中使用該模型。 -- **模型放在哪裏?** 在雲端還是本地? -- **離線支持**。該應用程序是否必須離線工作? -- **使用什麽技術來訓練模型?** 所選的技術可能會影響你需要使用的工具。 - - **使用 TensorFlow**。例如,如果你正在使用 TensorFlow 訓練模型,則該生態系統提供了使用 [TensorFlow.js](https://www.tensorflow.org/js/) 轉換 TensorFlow 模型以便在Web應用程序中使用的能力。 - - **使用 PyTorch**。如果你使用 [PyTorch](https://pytorch.org/) 等庫構建模型,則可以選擇將其導出到 [ONNX](https://onnx.ai/)(開放神經網絡交換)格式,用於可以使用 [Onnx Runtime](https://www.onnxruntime.ai/)的JavaScript Web 應用程序。此選項將在 Scikit-learn-trained 模型的未來課程中進行探討。 - - **使用 Lobe.ai 或 Azure 自定義視覺**。如果你使用 ML SaaS(軟件即服務)系統,例如 [Lobe.ai](https://lobe.ai/) 或 [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) 來訓練模型,這種類型的軟件提供了為許多平臺導出模型的方法,包括構建一個定製A PI,供在線應用程序在雲中查詢。 - -你還有機會構建一個完整的 Flask Web 應用程序,該應用程序能夠在 Web瀏覽器中訓練模型本身。這也可以在 JavaScript 上下文中使用 TensorFlow.js 來完成。 - -出於我們的目的,既然我們一直在使用基於 Python 的 notebook,那麽就讓我們探討一下將經過訓練的模型從 notebook 導出為 Python 構建的 web 應用程序可讀的格式所需要采取的步驟。 - -## 工具 - -對於此任務,你需要兩個工具:Flask 和 Pickle,它們都在 Python 上運行。 - -✅ 什麽是 [Flask](https://palletsprojects.com/p/flask/)? Flask 被其創建者定義為「微框架」,它提供了使用 Python 和模板引擎構建網頁的 Web 框架的基本功能。看看[本學習單元](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott)練習使用 Flask 構建應用程序。 - -✅ 什麽是 [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle🥒是一個 Python 模塊,用於序列化和反序列化 Python 對象結構。當你「pickle」一個模型時,你將其結構序列化或展平以在 Web 上使用。小心:pickle 本質上不是安全的,所以如果提示「un-pickle」文件,請小心。生產的文件具有後綴 `.pkl`。 - -## 練習 - 清理你的數據 - -在本課中,你將使用由 [NUFORC](https://nuforc.org)(國家 UFO 報告中心)收集的 80,000 次 UFO 目擊數據。這些數據對 UFO 目擊事件有一些有趣的描述,例如: - -- **詳細描述**。"一名男子從夜間照射在草地上的光束中出現,他朝德克薩斯儀器公司的停車場跑去"。 -- **簡短描述**。 「燈光追著我們」。 - -[ufos.csv](./data/ufos.csv) 電子表格包括有關目擊事件發生的 `city`、`state` 和 `country`、對象的 `shape` 及其 `latitude` 和 `longitude` 的列。 - -在包含在本課中的空白 [notebook](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() - ``` - -2. 將 ufos 數據轉換為帶有新標題的小 dataframe。檢查 `country` 字段中的唯一值。 - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -3. 現在,你可以通過刪除任何空值並僅導入 1-60 秒之間的目擊數據來減少我們需要處理的數據量: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -4. 導入 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` 並獲得要返回的國家/地區 ID。 - - ```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) - ``` - -2. 使用邏輯回歸訓練模型: - - ```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`,但是,嘗試從清理、導出的原始數據進行訓練,然後在 web 應用程序中使用此模型是一個很好的練習。 - -## 練習 - 「pickle」你的模型 - -現在,是時候 _pickle_ 你的模型了!你可以在幾行代碼中做到這一點。一旦它是 _pickled_,加載你的 pickled 模型並針對包含秒、緯度和經度值的示例數據數組對其進行測試, - -```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'**,這是英國的國家代碼。👽 - -## 練習 - 構建Flask應用程序 - -現在你可以構建一個Flask應用程序來調用你的模型並返回類似的結果,但以一種更美觀的方式。 - -1. 首先在你的 _ufo-model.pkl_ 文件所在的 _notebook.ipynb_ 文件旁邊創建一個名為 **web-app** 的文件夾。 - -2. 在該文件夾中創建另外三個文件夾:**static**,其中有文件夾 **css** 和 **templates**。 你現在應該擁有以下文件和目錄 - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ 請參閱解決方案文件夾以查看已完成的應用程序 - -3. 在 _web-app_ 文件夾中創建的第一個文件是 **requirements.txt** 文件。與 JavaScript 應用程序中的 _package.json_ 一樣,此文件列出了應用程序所需的依賴項。在 **requirements.txt** 中添加以下幾行: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -4. 現在,進入 web-app 文件夾: - - ```bash - cd web-app - ``` - -5. 在你的終端中輸入 `pip install`,以安裝 _reuirements.txt_ 中列出的庫: - - ```bash - pip install -r requirements.txt - ``` - -6. 現在,你已準備好創建另外三個文件來完成應用程序: - - 1. 在根目錄中創建 **app.py**。 - 2. 在 _templates_ 目錄中創建**index.html**。 - 3. 在 _static/css_ 目錄中創建**styles.css**。 - -7. 使用一些樣式構建 _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; - } - ``` - -8. 接下來,構建 _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 }}

- -
-
- - - - ``` - - 看看這個文件中的模板。請註意應用程序將提供的變量周圍的「mustache」語法,例如預測文本:`{{}}`。還有一個表單可以將預測發布到 `/predict` 路由。 - - 最後,你已準備好構建使用模型和顯示預測的 python 文件: - -9. 在`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) - ``` - - > 💡 提示:當你在使用 Flask 運行 Web 應用程序時添加 [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode)時你對應用程序所做的任何更改將立即反映,無需重新啟動服務器。註意!不要在生產應用程序中啟用此模式 - -如果你運行 `python app.py` 或 `python3 app.py` - 你的網絡服務器在本地啟動,你可以填寫一個簡短的表格來回答你關於在哪裏看到 UFO 的問題! - -在此之前,先看一下 `app.py` 的實現: - -1. 首先,加載依賴項並啟動應用程序。 -2. 然後,導入模型。 -3. 然後,在 home 路由上渲染 index.html。 - -在 `/predict` 路由上,當表單被發布時會發生幾件事情: - -1. 收集表單變量並轉換為 numpy 數組。然後將它們發送到模型並返回預測。 -2. 我們希望顯示的國家/地區根據其預測的國家/地區代碼重新呈現為可讀文本,並將該值發送回 index.html 以在模板中呈現。 - -以這種方式使用模型,包括 Flask 和 pickled 模型,是相對簡單的。最困難的是要理解數據是什麽形狀的,這些數據必須發送到模型中才能得到預測。這完全取決於模型是如何訓練的。有三個數據要輸入,以便得到一個預測。 - -在一個專業的環境中,你可以看到訓練模型的人和在 Web 或移動應用程序中使用模型的人之間的良好溝通是多麽的必要。在我們的情況下,只有一個人,你! - ---- - -## 🚀 挑戰 - -你可以在 Flask 應用程序中訓練模型,而不是在 notebook 上工作並將模型導入 Flask 應用程序!嘗試在 notebook 中轉換 Python 代碼,可能是在清除數據之後,從應用程序中的一個名為 `train` 的路徑訓練模型。采用這種方法的利弊是什麽? - -## [課後測](https://white-water-09ec41f0f.azurestaticapps.net/quiz/18/) - -## 復習與自學 - -有很多方法可以構建一個Web應用程序來使用ML模型。列出可以使用JavaScript或Python構建Web應用程序以利用機器學習的方法。考慮架構:模型應該留在應用程序中還是存在於雲中?如果是後者,你將如何訪問它?為應用的ML Web解決方案繪製架構模型。 - -## 任務 - -[嘗試不同的模型](./assignment.zh-tw.md) - - diff --git a/3-Web-App/1-Web-App/translations/assignment.es.md b/3-Web-App/1-Web-App/translations/assignment.es.md deleted file mode 100644 index 569518b4..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Prueba un modelo distinto - -## Instrucciones - -Ahora que haz construido una aplicación web usando un modelo de regresión entrenado, usa uno de los modelos de la lección anterior de regresión para rehacer esta aplicación web. Puedes conservar el estilo o diseñarlo de forma diferente para reflejar los datos de las calabazas. Sé cuidadoso al cambiar los insumos para reflejar tu método de entrenamiento del modelo. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejora | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | La aplicación web se ejecuta como se espera y es desplegda en la nube | La aplicación web contiene defectos o exhibe resultados inesperados | La aplicación web no funciona correctamente | diff --git a/3-Web-App/1-Web-App/translations/assignment.it.md b/3-Web-App/1-Web-App/translations/assignment.it.md deleted file mode 100644 index 7bc7ffd9..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Provare un modello diverso - -## Istruzioni - -Ora che si è creato un'app web utilizzando un modello di Regressione addestrato, usare uno dei modelli da una lezione precedente sulla Regressione per rifare questa app web. Si può mantenere lo stile o progettarla in modo diverso per riflettere i dati della zucca. Fare attenzione a modificare gli input in modo che riflettano il metodo di addestramento del proprio modello. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | L'app web funziona come previsto e viene distribuita nel cloud | L'app web contiene difetti o mostra risultati imprevisti | L'app web non funziona correttamente | diff --git a/3-Web-App/1-Web-App/translations/assignment.ja.md b/3-Web-App/1-Web-App/translations/assignment.ja.md deleted file mode 100644 index 2151a7c2..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.ja.md +++ /dev/null @@ -1,11 +0,0 @@ -# 違うモデルを試す - -## 指示 - -訓練された回帰モデルを使用して1つのWebアプリを構築したので、前回の回帰の講義で使用したモデルの1つを使用して、このWebアプリを再実行してください。スタイルをそのままにしても、かぼちゃのデータを反映するために別のデザインにしても構いません。モデルの学習方法に合わせて入力を変更するように注意してください。 - -## 評価基準 - -| 指標 | 模範的 | 適切 | 要改善 | -| ---- | ----------------------------------------------------------- | ----------------------------------------------------------------- | ------------------------------- | -| | Webアプリが期待通りに動作し、クラウド上にデプロイされている | Webアプリに欠陥が含まれているか、期待していない結果を表示している | Webアプリが正しく機能していない | diff --git a/3-Web-App/1-Web-App/translations/assignment.ko.md b/3-Web-App/1-Web-App/translations/assignment.ko.md deleted file mode 100644 index e48d477a..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 다른 모델을 사용해봅시다 - -## 설명 - -이번 수업에서는 회귀 모델을 훈련시키고, 그 모델을 사용해 웹 애플리케이션을 만들어보았습니다. 이 과제에서는 이전 회귀 수업에서 알아본 모델 중 하나를 선택해 다시 한번 웹 애플리케이션을 만들어보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| ------- | ----------------------------------------------------- | ----------------------------------------------------- | ----------------------------------- | -| | 웹 애플리케이션이 예상대로 정상 작동하며 클라우드에 배포됨 | 웹 애플리케이션에 결함이 있거나 예기치 못한 결과를 나타냄 | 웹 애플리케이션이 제대로 작동하지 않음 | diff --git a/3-Web-App/1-Web-App/translations/assignment.pt-br.md b/3-Web-App/1-Web-App/translations/assignment.pt-br.md deleted file mode 100644 index 2c0002f9..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Experimente um modelo diferente - -## Instruções - -Agora que você construiu um aplicativo da web usando um modelo de regressão treinado, use um dos modelos de uma lição anterior de regressão para refazer este aplicativo da web. Você pode manter o estilo ou projetá-lo de maneira diferente para refletir os dados da abóbora. Tenha o cuidado de alterar as entradas para refletir o método de treinamento do seu modelo. - -## Rubrica - -| Critérios | Exemplar | Adequado | Precisa Melhorar | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | O aplicativo da web é executado conforme o esperado e é implantado na nuvem | O aplicativo da web contém falhas ou exibe resultados inesperados | O aplicativo da web não funciona corretamente | diff --git a/3-Web-App/1-Web-App/translations/assignment.pt.md b/3-Web-App/1-Web-App/translations/assignment.pt.md deleted file mode 100644 index 37ff9638..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.pt.md +++ /dev/null @@ -1,11 +0,0 @@ -# Tente um modelo diferente - -## Instruções - -Agora que você construiu um aplicativo Web usando um modelo Regression treinado, use um dos modelos de uma lição Regression anterior para refazer esse aplicativo Web. Você pode manter o estilo ou design de forma diferente para refletir os dados da abóbora. Tenha cuidado para alterar as entradas para refletir o método de treinamento do seu modelo. - -## Rubrica - -| Critérios | Exemplar | Adequado | Necessidade de melhoria | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | O aplicativo Web é executado conforme o esperado e implantado na nuvem | O aplicativo Web contém falhas ou exibe resultados inesperados | O aplicativo Web não funciona corretamente| diff --git a/3-Web-App/1-Web-App/translations/assignment.zh-cn.md b/3-Web-App/1-Web-App/translations/assignment.zh-cn.md deleted file mode 100644 index 016dfa52..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.zh-cn.md +++ /dev/null @@ -1,12 +0,0 @@ -# Բͬģ - -## ˵ - -ڣѾܹʹһѵĻعģwebӦóôǰĻعγѡһģһwebӦóʹԭķͬķƣչʾpumpkinݡעԷӳģ͵ѵ - - -## б׼ - -| ׼ | | йо | Ŭ | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | webӦóԤУƶ | webӦóȱݻʾ벻Ľ | webӦó޷ | diff --git a/3-Web-App/1-Web-App/translations/assignment.zh-tw.md b/3-Web-App/1-Web-App/translations/assignment.zh-tw.md deleted file mode 100644 index 3c98a948..00000000 --- a/3-Web-App/1-Web-App/translations/assignment.zh-tw.md +++ /dev/null @@ -1,12 +0,0 @@ -# 嘗試不同的模型 - -## 說明 - -現在,你已經能夠使用一個經過訓練的回歸模型來搭建web應用程序,那麽請你從前面的回歸課程中重新選擇一個模型來重做一遍web應用程序。你可以使用原來的風格或者其他不同的風格進行設計,來展示pumpkin數據。註意更改輸入以反映模型的訓練方法。 - - -## 評判標準 - -| 標準 | 優秀 | 中規中矩 | 仍需努力 | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | web應用程序按預期運行,並部署到雲端 | web應用程序存在缺陷或者顯示意想不到的結果 | web應用程序無法正常運行 | \ No newline at end of file diff --git a/3-Web-App/translations/README.es.md b/3-Web-App/translations/README.es.md deleted file mode 100644 index cb0937dc..00000000 --- a/3-Web-App/translations/README.es.md +++ /dev/null @@ -1,21 +0,0 @@ -# Construye una aplicación web para usar tu modelo de aprendizaje automático - -En esta sección del curso, se te presentará un tema de aprendizaje automático aplicado: cómo guardar tu modelo Scikit-learn como un archivo que puede ser usado para realizar predicciones desde una aplicación web. Una vez que el modelo es guardado, aprenderás cómo usarlo en una aplicación web construida en Flask. ¡Primero crearás un modelo usando algunos datos relacionados con avistamiento de OVNIs! Luego, construirás una aplicación web que te permitirá ingresar un número de segundos con un valor de latitud y longitud para así predecir qué país reportó haber visto un OVNI. - -![Estacionamiento de OVNIs](../images/ufo.jpg) - -Fotografía de Michael Herren en Unsplash - -## Lecciones - -1. [Construye una aplicación web](../1-Web-App/translations/README.es.md) - -## Créditos - -"Construye una aplicación web"fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper). - -♥️ Los cuestionariosfueron escritos por Rohan Raj. - -Los conjuntos de datos fueron tomados de [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -La arquitectura de la aplicación web fue sugerida en parte por [este artículo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) and [this repo](https://github.com/abhinavsagar/machine-learning-deployment) por Abhinav Sagar. diff --git a/3-Web-App/translations/README.hi.md b/3-Web-App/translations/README.hi.md deleted file mode 100644 index 0e5f5780..00000000 --- a/3-Web-App/translations/README.hi.md +++ /dev/null @@ -1,20 +0,0 @@ -## अपने एमएल मॉडल का उपयोग करने के लिए एक वेब ऐप बनाएं - -पाठ्यक्रम के इस खंड में, आपको एक लागू एम.एल विषय से परिचित कराया जाएगा: अपने सैकिट-लर्न मॉडल को एक फ़ाइल के रूप में कैसे सहेजा जाए जिसका उपयोग वेब एप्लिकेशन के भीतर पूर्वानुमान लगाने के लिए किया जा सकता है। मॉडल सहेजे जाने के बाद, आप सीखेंगे कि फ्लास्क में निर्मित वेब ऐप में इसका उपयोग कैसे करें। आप पहले कुछ डेटा का उपयोग करके एक मॉडल तैयार करेंगे जो कि यू.एफ.ओ देखे जाने के बारे में है! फिर, आप एक वेब ऐप तैयार करेंगे जो आपको अक्षांश और देशांतर मान के साथ सेकंड इनपुट करने देगा ताकि यह अनुमान लगाया जा सके कि किस देश ने यू.एफ.ओ देखने की सूचना दी है। - -![यू.एफ.ओ पार्किंग](../images/ufo.jpg) -> माइकल हेरेन द्वारा तस्वीर अनस्पेलश पर - -### पाठ - -- [वेब ऐप बनाएं](../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) से प्रेरित है \ No newline at end of file diff --git a/3-Web-App/translations/README.it.md b/3-Web-App/translations/README.it.md deleted file mode 100644 index d376b8ec..00000000 --- a/3-Web-App/translations/README.it.md +++ /dev/null @@ -1,22 +0,0 @@ -# Creare un'app web per utilizzare il modello ML - -In questa sezione del programma di studi, verrà presentato un argomento ML applicato: come salvare il modello di Scikit-learn come file che può essere utilizzato per fare previsioni all'interno di un'applicazione web. Una volta salvato il modello, si imparerà come utilizzarlo in un'app web sviluppata con Flask. Per prima cosa si creerà un modello utilizzando alcuni dati che riguardano gli avvistamenti di UFO! Quindi, si creerà un'app web che consentirà di inserire un numero di secondi con un valore di latitudine e longitudine per prevedere quale paese ha riferito di aver visto un UFO. - -![Parcheggio UFO](../images/ufo.jpg) - -Foto di Michael Herren su Unsplash - - -## Lezioni - -1. [Costruire un'app web](../1-Web-App/translations/README.it.md) - -## Crediti - -"Costruire un'app web" è stato scritto con ♥️ da [Jen Looper](https://twitter.com/jenlooper). - -♥️ I quiz sono stati scritti da Rohan Raj. - -L'insieme di dati proviene da [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -L'architettura dell'app web è stata suggerita in parte da [questo articolo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) e da [questo](https://github.com/abhinavsagar/machine-learning-deployment) repository di Abhinav Sagar. \ No newline at end of file diff --git a/3-Web-App/translations/README.ja.md b/3-Web-App/translations/README.ja.md deleted file mode 100644 index 3ada9808..00000000 --- a/3-Web-App/translations/README.ja.md +++ /dev/null @@ -1,21 +0,0 @@ -# 機械学習モデルを使うためにWebアプリを構築する - -カリキュラムのこの部分では、機械学習の応用的な話題を学びます。 Webアプリで予測を行うために使用するファイルとして Scikit-learn のモデルを保存する方法です。モデルを保存した後に、Flaskを使って構築したWebアプリでそのモデルを使う方法を学びます。まずはUFOの目撃情報に関するデータでモデルを作ります。次に、UFOの目撃報告があった国を予測するために、緯度・経度・秒数を入力できるWebアプリを構築します。 - -![UFOパーキング](../images/ufo.jpg) - -Michael Herren によって Unsplash に投稿された写真 - -## 講義 - -1. [Webアプリを構築する](../1-Web-App/translations/README.ja.md) - -## クレジット - -「Webアプリを構築する」️は [Jen Looper](https://twitter.com/jenlooper) によって執筆されました。 - -小テストは Rohan Raj によって執筆されました。 - -データセットは [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings) のものを元にしています。 - -Webアプリのアーキテクチャは、Abhinav Sagar による [この記事](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) と [このリポジトリ](https://github.com/abhinavsagar/machine-learning-deployment) を一部参考にしています。 diff --git a/3-Web-App/translations/README.ko.md b/3-Web-App/translations/README.ko.md deleted file mode 100644 index 45ba2b6a..00000000 --- a/3-Web-App/translations/README.ko.md +++ /dev/null @@ -1,22 +0,0 @@ -# ML 모델을 사용하여 web app 만들기 - -커리큘럼의 이 섹션에서, ML이 적용된 주제를 소개할 예정입니다: Scikit-learn 모델을 웹 애플리케이션에서 예측할 때 사용할 수 있는 파일로 저장해봅니다. 모델을 저장하고, Flask에 있는 웹 앱에서 어덯게 사용하는 지도 배웁니다. 먼저 UFO 목격 제보에 관련된 일부 데이터로 모델을 만듭니다! 그러면, 위도와 경도 값으로 몇 초 입력해서 UFO가 보고된 나라를 예측할 수 있는 웹 앱을 만들게 됩니다. - -![UFO Parking](../images/ufo.jpg) - -Photo by Michael Herren on Unsplash - - -## 강의 - -1. [Web App 만들기](../1-Web-App/translations/README.ko.md) - -## 크레딧 - -"Build a Web App" was written with ♥️ by [Jen Looper](https://twitter.com/jenlooper). - -♥️ The quizzes were written by Rohan Raj. - -데이터셋은 [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings)에서 가져왔습니다. - -웹 앱 구조는 [this article](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4)과 Abhinav Sagar의 [this repo](https://github.com/abhinavsagar/machine-learning-deployment)에서 부분적으로 제안되었습니다. \ No newline at end of file diff --git a/3-Web-App/translations/README.pt-br.md b/3-Web-App/translations/README.pt-br.md deleted file mode 100644 index 52eb4f7e..00000000 --- a/3-Web-App/translations/README.pt-br.md +++ /dev/null @@ -1,21 +0,0 @@ -# Crie um aplicativo da web para usar seu modelo de ML - -Nesta seção do curso, você será apresentado a um tópico de ML aplicado: como salvar seu modelo Scikit-learn como um arquivo que pode ser usado para fazer previsões dentro de uma aplicação web. Depois que o modelo for salvo, você aprenderá como usá-lo em uma aplicação web integrada no Flask. Primeiro, você criará um modelo usando alguns dados sobre avistamentos de OVNIs! Em seguida, você construirá um aplicativo web que permitirá que você insira um número de segundos com um valor de latitude e longitude para prever qual país relatou ter visto um OVNI. - -![Estacionamento de OVNI](../images/ufo.jpg) - -Foto por Michael Herren em Unsplash - -## Lições - -1. [Crie um aplicativo Web](../1-Web-App/translations/README.pt-br.md) - -## Créditos - -"Crie um aplicativo Web" foi escrito com ♥ por [Jen Looper](https://twitter.com/jenlooper). - -♥️ Os questionários foram escritos por Rohan Raj. - -O conjunto de dados é originado do [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -A arquitetura do aplicativo da web foi sugerida em parte por [esse artigo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) e [esse repositório](https://github.com/abhinavsagar/machine-learning-deployment) do Abhinav Sagar. diff --git a/3-Web-App/translations/README.pt.md b/3-Web-App/translations/README.pt.md deleted file mode 100644 index 838c4e12..00000000 --- a/3-Web-App/translations/README.pt.md +++ /dev/null @@ -1,21 +0,0 @@ -# Crie um aplicativo Web para usar seu modelo ML - -Nesta seção do currículo, você será apresentado a um tópico ML aplicado: como salvar seu modelo Scikit-learn como um arquivo que pode ser usado para fazer previsões em uma aplicação Web. Uma vez que o modelo é salvo, você vai aprender como usá-lo em um aplicativo web construído em Flask. Você vai primeiro criar um modelo usando alguns dados que são tudo sobre avistamentos de UFO! Em seguida, você criará um aplicativo Web que permitirá inserir um número de segundos com uma latitude e um valor de longitude para prever qual país relatou ter visto um UFO. - -![Estacionamento UFO](../images/ufo.jpg) - -Foto de Michael Herren em Unsplash - -## Lições - -1. [Crie um aplicativo Web](1-Web-App/README.md) - -## Créditos - -"Build a Web App" foi escrito com ♥️ por[Jen Looper](https://twitter.com/jenlooper). - -♥️ Os testes foram escritos por Rohan Raj. - -O conjunto de dados provém de [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -A arquitetura do aplicativo Web foi sugerida em parte por [este artigo](https://towardsdatascience.com/how-to-easy-deploy-machine-learning-models-using-flask-b95af8fe34d4) e [este repositório](https://github.com/abhinavsagar/machine-learning-deployment) by Abhinav Sagar. diff --git a/3-Web-App/translations/README.ru.md b/3-Web-App/translations/README.ru.md deleted file mode 100644 index a80791dd..00000000 --- a/3-Web-App/translations/README.ru.md +++ /dev/null @@ -1,21 +0,0 @@ -# Создайте веб-приложение для использования вашей модели машинного обучения - -В этом разделе учебной программы вы познакомитесь с прикладной темой машинного обучения: как сохранить модель Scikit-learn в виде файла, который можно использовать для прогнозирования в веб-приложении. После сохранения модели вы узнаете, как использовать ее в веб-приложении, созданном во Flask. Сначала вы создадите модель, используя некоторые данные о наблюдениях за НЛО! Затем вы создадите веб-приложение, которое позволит вам ввести количество секунд с широтой и долготой, чтобы предсказать, какая страна сообщила о НЛО. - -![Парковка для НЛО](../images/ufo.jpg) - -Фото Майкла Херрена на Unsplash - -## Уроки - -1. [Создание веб-приложения](../1-Web-App/README.md) - -## Благодарности - -«Создайте веб-приложение» было написано с ♥ ️[Джен Лупер](https://twitter.com/jenlooper). - -♥ ️Контрольные вопросы были написаны Роханом Раджем. - -Набор данных взят из [Kaggle](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) Абхинава Сагара. diff --git a/3-Web-App/translations/README.zh-cn.md b/3-Web-App/translations/README.zh-cn.md deleted file mode 100644 index b4d4c0db..00000000 --- a/3-Web-App/translations/README.zh-cn.md +++ /dev/null @@ -1,22 +0,0 @@ -# 构建一个 Web 应用程序来使用您的机器学习模型 - -课程的本章节将为您介绍机器学习的应用:如何保存您的 Scikit-learn 模型为文件以便在 Web 应用程序中使用该模型进行预测。模型保存后,您将学习如何在一个由 Flask 构建的 Web 应用程序中使用它。首先,您将会使用一些 UFO 目击事件的数据去创建一个模型!然后,您将构建一个 Web 应用程序,这个应用程序能让您输入秒数,经度,纬度来预测哪个国家会报告 UFO 目击事件。 - -![UFO Parking](../images/ufo.jpg) - -图片由 Michael Herren 拍摄,来自 Unsplash - -## 教程 - -1. [构建一个 Web 应用程序](../1-Web-App/translations/README.zh-cn.md) - -## 致谢 - -"构建一个 Web 应用程序" 由 [Jen Looper](https://twitter.com/jenlooper) 用 ♥ 编写️ - -测验由 Rohan Raj 用 ♥️ 编写 - -数据集来自 [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings) - -Web 应用程序的架构一部分参考了 Abhinav Sagar 的[文章](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4)和[仓库](https://github.com/abhinavsagar/machine-learning-deployment) - diff --git a/3-Web-App/translations/README.zh-tw.md b/3-Web-App/translations/README.zh-tw.md deleted file mode 100644 index f5c9ab64..00000000 --- a/3-Web-App/translations/README.zh-tw.md +++ /dev/null @@ -1,22 +0,0 @@ -# 構建一個 Web 應用程序來使用您的機器學習模型 - -課程的本章節將為您介紹機器學習的應用:如何保存您的 Scikit-learn 模型為文件以便在 Web 應用程序中使用該模型進行預測。模型保存後,您將學習如何在一個由 Flask 構建的 Web 應用程序中使用它。首先,您將會使用一些 UFO 目擊事件的數據去創建一個模型!然後,您將構建一個 Web 應用程序,這個應用程序能讓您輸入秒數,經度,緯度來預測哪個國家會報告 UFO 目擊事件。 - -![UFO Parking](../images/ufo.jpg) - -圖片由 Michael Herren 拍攝,來自 Unsplash - -## 教程 - -1. [構建一個 Web 應用程序](../1-Web-App/translations/README.zh-tw.md) - -## 致謝 - -"構建一個 Web 應用程序" 由 [Jen Looper](https://twitter.com/jenlooper) 用 ♥ 編寫️ - -測驗由 Rohan Raj 用 ♥️ 編寫 - -數據集來自 [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings) - -Web 應用程序的架構一部分參考了 Abhinav Sagar 的[文章](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4)和[倉庫](https://github.com/abhinavsagar/machine-learning-deployment) - diff --git a/4-Classification/1-Introduction/translations/README.es.md b/4-Classification/1-Introduction/translations/README.es.md deleted file mode 100644 index 26fc5991..00000000 --- a/4-Classification/1-Introduction/translations/README.es.md +++ /dev/null @@ -1,299 +0,0 @@ -# Introducción a la clasificación - -En estas cuatro lecciones, explorarás un enfoque fundamental de aprendizaje automático clásico - _classification_. Ensayaremos usando varios algoritmos de clasificación con un conjunto de datos acerca de todas las cocinas brillantes de Asia e India. ¡Espero estés hambriento! - -![Solo una pizca!](../images/pinch.png) - -> ¡Celebra las cocinas de toda Asia en estas lecciones! Imagen de [Jen Looper](https://twitter.com/jenlooper) - -La clasificación es una form de [aprendizaje supervisado](https://wikipedia.org/wiki/Supervised_learning) que conlleva mucho en común con técnicas de regresión. Si el aprendizaje automático trata todo acerca de la predicción de valores o nombres para las cosas usando conjuntos de datos, entonces la clasificación generalmente recae en dos grupos: _clasificación binaria_ y _clasificación multiclase_. - -[![Introducción a la clasificación](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introducción a la clasificación") - -> 🎥 Da clic en la imagen de arriba para ver el video: John Guttag del MIT presenta la clasificación - -Recuerda: - -- **La regresión lineal** te ayudó a predecir las relaciones entre las variables y hacer predicciones precisas donde un nuevo punto de datos podría reacer en una relación a esa línea. Por lo que puedes predecir _qué precio tendrá una calabaza en Septiembre vs Diciembre_, por ejemplo. -- **La regresión logística** te ayudó a descubrir "categorías binarias": en este punto de precio, ¿_la calabaza pertenece a la categoría orange or not-orange_? - -La clasificación utiliza varios algorítmos para determinar otras formas de determinar la clase o etiqueta de un punto de datos. Trabajemos con estos datos de cocina para ver si, al observar un grupo de ingredientes, podemos determinar su cocina u origen. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19?loc=es) - -> ### [¡Esta lección está disponible en R!](./solution/R/lesson_10-R.ipynb) - -### Introducción - -La clasificación es una de las actividades fundamentales del investigador de aprendizaje automático y el científico de datos. Desde la clasificación básica de un valor binario ("¿este correo electrónico es o no spam?"), hasta complejas clasificaciones de imágenes y segmentación utilizando la visión por computadora, simpre es útil ser capaz de ordenar los datos en clases y hacerle preguntas. - -Para expresar el proceso de una forma más científica, nuestro método de clasificación crea un modelo predictivo que te habilita asignar la relación entre las variables de entrada a las variables de salida. - -![Clasificación binaria vs multiclase](../images/binary-multiclass.png) - -> Problemas binarios vs multiclase para que los algoritmos de clasificación los manejen. Infografía de [Jen Looper](https://twitter.com/jenlooper) - -Antes de empezar el proceso de limpieza de nuestros datos, visualizarlos, y prepararlos para nuestras tareas de aprendizaje automático, aprendamos un poco acerca de las diversas formas en que el aprendizaje automático puede ser aprovechado para clasificar los datos. - -Derivado de las clasificaciones [estadísticas](https://wikipedia.org/wiki/Statistical_classification), usando cracterística de uso del aprendizaje automático clásico, como `smoker`, `weight`, y `age` para determinar la _probabilidad de desarrollar X enfermedad_. Como una técnica de aprendizaje supervisada similar para los ejercicios de regresión que desempeñaste anteriormente, tus datos son etiquetados y los algoritmos de aprendizaje automático use esas etiquetas para clasificar y predecir clases (o 'características') de un conjunto de datos y asignarlos a un grupo o resultado. - -✅ Date un momento para imaginar un conjunto de datos acerca de las cocinas. ¿Qué sería capaz de responder un modelo multiclase? ¿Qué sería capaz de responder un modelo binario? ¿Qué si quisieras determinar si una cocina dada fuera probable que usara fenogreco? ¿Qué si quisieras ver si, dado un regalo de una bolsa del supermercado llena de anís estrella, alcachofa, coliflor y rábano picante, pudieras crear un platillo Indio típico? - -[![Canastas locas y misteriosas](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Canastas locas y misteriosas") - -> 🎥 Da clic en la imagen superior para ver un video. Toda la premisa del programa 'Chopped' es el 'cesto misterioso' donde los chefs tienen que hacer algunos platillos a partir de la elección al azar de ingredientes. ¡Seguramente un modelo de aprendizaje automático habría ayudado! - -## Hola 'clasificador' - -La pregutna que queremos hacer a este conjunto de datos de cocina es realmente una **pregunta multiclase**, así como tenemos muchas cocinas nacionales potenciales para trabajar, Dado un lote de ingredientes, ¿en cuáles de estas muchas clases encajarán los datos? - -Scikit-learn ofrece diversos algoritmos distintos para usar en la clasificación de datos, dependiente en la naturaleza del problema que quieres resolver. En las siguientes dos lecciones, aprenderás acerca de varios de estos algoritmos. - -## Ejercicio - limpia y equilibra tus datos - -La primer tarea a la mano, antes de iniciar este proyecto, es limpiar y **equilibrar** tus datos para obtener mejores resultados. Comienza con el archivo en blanco _notebook.ipynb_ en la raíz de este directorio. - -Lo primero a instalar es [imblearn](https://imbalanced-learn.org/stable/). Este es un paquete de Scikit-learn que te permitirá equilibrar mejor los datos (aprenderás más acerca de esta tarea en un minuto). - -1. Para instalar `imblearn`, ejecuta `pip install`, así: - - ```python - pip install imblearn - ``` - -1. Importa los paquetes que necesitas para importar tus datos y visualizarlos, también importa `SMOTE` de `imblearn`. - - ```python - import pandas as pd - import matplotlib.pyplot as plt - import matplotlib as mpl - import numpy as np - from imblearn.over_sampling import SMOTE - ``` - - Ahora está configurado para leer importart los datos a continuación. - -1. La siguiente tarea será importar los datos: - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - Usando `read_csv()` leerá el contenido del archivo csv _cusines.csv_ y colocarlo en la variable `df`. - -1. Comprueba la forma de los datos: - - ```python - df.head() - ``` - - Las primeras cinco filas lucen así: - - ```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. Obtén información acerca de estos datos llamando a `info()`: - - ```python - df.info() - ``` - - Tu salida se parece a: - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Ejercicio - aprendiendo acerca de cocinas - -Ahora el trabajo comienza a hacerse más interesante. Descubramos la distribución de los datos, por cocina - -1. Grafica los datos como barras llamando `barh()`: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![Distribución de datos de cocina](../images/cuisine-dist.png) - - Existe un número finito de cocinas, pero la distribución de los datos es irregular. ¡Puedes corregirlo! Anter de hacerlo, explora un poco más. - -1. Descubre cuántos datos están disponibles por cocina e imprímelos: - - ```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}') - ``` - - la salida luce así: - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Descubriendo ingredientes - -Ahora puedes profundizar en los datos y aprender cuáles son los ingredientes típicos por cocina. Deberías limpiar los datos recurrentes que crean confusión entre cocinas, así que aprendamos acerca de este problema. - -1. Crea una función `create_ingredient()` en Python para crear un dataframe ingrediente. Esta función comenzará eliminando una columna inútil y ordenando los ingredientes por su conteo: - - ```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 - ``` - - Ahora puedes usar esa función para tener una idea de los 10 ingredientes más populares por cocina. - -1. Llama `create_ingredient()` y graficalo llamando `barh()`: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![Tailandeses](../images/thai.png) - -1. Haz lo mismo para los datos de ingredientes japoneses: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![Japoneses](../images/japanese.png) - -1. Ahora para los ingredientes chinos: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![Chinos](../images/chinese.png) - -1. Grafica los ingredientes indios: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![indios](../images/indian.png) - -1. Finalmente, grafica los ingredientes coreanos: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![coreanos](../images/korean.png) - -1. Ahora, eliminar los ingredientes más comunes que crean confusión entre las distintas cocinas, llamando `drop()`: - - ¡Todos aman el arroz, el ajo y el gengibre! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Equilibra el conjunto de datos - -Ahora que has limpiado los datos, usa [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Técnica de sobremuestreo de minoritario sintético" - para equilibrarlo. - -1. Llama `fit_resample()`, esta estrategia genera nuevas muestras por interpolación. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - Al equilibrar tus datos, tendrás mejores resultados cuando los clasifiques. Piensa en una clasificación binaria. Si la mayoría de tus datos es una clase, un modelo de aprendizaje automático va a predecir esa clase más frecuentemente, solo porque hay más datos para ello. Equilibrar los datos toma cualquier dato sesgado y ayuda a remover este desequilibrio. - -1. Ahora puedes comprobar los números de etiquetas por ingredientes: - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - Tu salida luce así: - - ```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 - ``` - - Los datos están bien y limpios, equilibrados ¡y muy deliciosos! - -1. El último paso es guardar tus datos equilibrados, incluyendo etiquetas y características, en un nuevo dataframe que pueda ser exportado a un archivo: - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. Puedes dar un vistazo más a los datos usando `transformed_df.head()` y `transformed_df.info()`. Guarda una copia de estos datos para un uso en futuras lecciones: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisines.csv") - ``` - - Este nuevo CSV ahora puede ser encontrado en la directorio raíz data. - ---- - -## 🚀Desafío - -Este plan de estudios contiene varios conjuntos de datos interesantes. Profundiza en los directorios `data` y ve si alguno contiene conjuntos de datos que serían apropiados para clasificación binaria o multiclase. ¿Qué preguntas harías a este conunto de datos? - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20?loc=es) - -## Revisión y autoestudio - -Explora la API de SMOTE. ¿Para qué casos de uso es se usa mejor? ¿Qué problemas resuelve? - -## Asignación - -[Explora métodos de clasificación](assignment.es.md) diff --git a/4-Classification/1-Introduction/translations/README.it.md b/4-Classification/1-Introduction/translations/README.it.md deleted file mode 100644 index eb7df4c5..00000000 --- a/4-Classification/1-Introduction/translations/README.it.md +++ /dev/null @@ -1,297 +0,0 @@ -# Introduzione alla classificazione - -In queste quattro lezioni si esplorerà un focus fondamentale del machine learning classico: _la classificazione_. Verrà analizzato l'utilizzo di vari algoritmi di classificazione con un insieme di dati su tutte le brillanti cucine dell'Asia e dell'India. Si spera siate affamati! - -![solo un pizzico!](../images/pinch.png) - -> In queste lezioni di celebrano le cucine panasiatiche! Immagine di [Jen Looper](https://twitter.com/jenlooper) - -La classificazione è una forma di [apprendimento supervisionato](https://it.wikipedia.org/wiki/Apprendimento_supervisionato) che ha molto in comune con le tecniche di regressione. Se machine learning riguarda la previsione di valori o nomi di cose utilizzando insiemi di dati, la classificazione generalmente rientra in due gruppi: _classificazione binaria_ e _classificazione multiclasse_. - -[![Introduzione allaclassificazione](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduzione alla classificazione") - -> 🎥 Fare clic sull'immagine sopra per un video: John Guttag del MIT introduce la classificazione - -Ricordare: - -- La **regressione lineare** ha aiutato a prevedere le relazioni tra le variabili e a fare previsioni accurate su dove un nuovo punto dati si sarebbe posizionato in relazione a quella linea. Quindi, si potrebbe prevedere _quale prezzo avrebbe una zucca a settembre rispetto a dicembre_, ad esempio. -- La **regressione logistica** ha aiutato a scoprire le "categorie binarie": a questo prezzo, _questa zucca è arancione o non arancione_? - -La classificazione utilizza vari algoritmi per determinare altri modi per definire l'etichetta o la classe di un punto dati. Si lavorerà con questi dati di cucina per vedere se, osservando un gruppo di ingredienti, è possibile determinarne la cucina di origine. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/?loc=it) - -### Introduzione - -La classificazione è una delle attività fondamentali del ricercatore di machine learning e data scientist. Dalla classificazione basica di un valore binario ("questa email è spam o no?"), alla complessa classificazione e segmentazione di immagini utilizzando la visione artificiale, è sempre utile essere in grado di ordinare i dati in classi e porre domande su di essi. - -Per definire il processo in modo più scientifico, il metodo di classificazione crea un modello predittivo che consente di mappare la relazione tra le variabili di input e le variabili di output. - -![classificazione binaria vs. multiclasse](../images/binary-multiclass.png) - -> Problemi binari e multiclasse per la gestione di algoritmi di classificazione. Infografica di [Jen Looper](https://twitter.com/jenlooper) - -Prima di iniziare il processo di pulizia dei dati, visualizzazione e preparazione per le attività di machine learning, si apprenderà qualcosa circa i vari modi in cui machine learning può essere sfruttato per classificare i dati. - -Derivata dalla [statistica](https://it.wikipedia.org/wiki/Classificazione_statistica), la classificazione che utilizza machine learning classico utilizza caratteristiche come l'`essere fumatore`, il `peso` e l'`età` per determinare _la probabilità di sviluppare la malattia X._ Essendo una tecnica di apprendimento supervisionata simile agli esercizi di regressione eseguiti in precedenza, i dati vengono etichettati e gli algoritmi ML utilizzano tali etichette per classificare e prevedere le classi (o "caratteristiche") di un insieme di dati e assegnarle a un gruppo o risultato. - -✅ Si prenda un momento per immaginare un insieme di dati sulle cucine. A cosa potrebbe rispondere un modello multiclasse? A cosa potrebbe rispondere un modello binario? Se si volesse determinare se una determinata cucina potrebbe utilizzare il fieno greco? Se si volesse vedere se, regalando una busta della spesa piena di anice stellato, carciofi, cavolfiori e rafano, si possa creare un piatto tipico indiano? - -[![Cesti misteriosi pazzeschi](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU " Cestini misteriosi pazzeschi") - -> 🎥 Fare clic sull'immagine sopra per un video. L'intera premessa dello spettacolo 'Chopped' è il 'cesto misterioso' dove gli chef devono preparare un piatto con una scelta casuale di ingredienti. Sicuramente un modello ML avrebbe aiutato! - -## Ciao 'classificatore' - -La domanda che si vuole porre a questo insieme di dati sulla cucina è in realtà una **domanda multiclasse**, poiché ci sono diverse potenziali cucine nazionali con cui lavorare. Dato un lotto di ingredienti, in quale di queste molte classi si identificheranno i dati? - -Scikit-learn offre diversi algoritmi da utilizzare per classificare i dati, a seconda del tipo di problema che si desidera risolvere. Nelle prossime due lezioni si impareranno a conoscere molti di questi algoritmi. - -## Esercizio: pulire e bilanciare i dati - -Il primo compito, prima di iniziare questo progetto, sarà pulire e **bilanciare** i dati per ottenere risultati migliori. Si inizia con il file vuoto _notebook.ipynb_ nella radice di questa cartella. - -La prima cosa da installare è [imblearn](https://imbalanced-learn.org/stable/). Questo è un pacchetto di apprendimento di Scikit che consentirà di bilanciare meglio i dati (si imparerà di più su questa attività tra un minuto). - -1. Per installare `imblearn`, eseguire `pip install`, in questo modo: - - ```python - pip install imblearn - ``` - -1. Importare i pacchetti necessari per caricare i dati e visualizzarli, importare anche `SMOTE` da `imblearn`. - - ```python - import pandas as pd - import matplotlib.pyplot as plt - import matplotlib as mpl - import numpy as np - from imblearn.over_sampling import SMOTE - ``` - - Ora si è pronti per la successiva importazione dei dati. - -1. Il prossimo compito sarà quello di importare i dati: - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - Usando `read_csv()` si leggerà il contenuto del file csv _cusines.csv_ e lo posizionerà nella variabile `df`. - -1. Controllare la forma dei dati: - - ```python - df.head() - ``` - - Le prime cinque righe hanno questo aspetto: - - ```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. Si possono ottienere informazioni su questi dati chiamando `info()`: - - ```python - df.info() - ``` - - Il risultato assomiglia a: - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Esercizio - conoscere le cucine - -Ora il lavoro inizia a diventare più interessante. Si scoprirà la distribuzione dei dati, per cucina - -1. Tracciare i dati come barre chiamando `barh()`: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![distribuzione dati cuisine](../images/cuisine-dist.png) - - Esiste un numero finito di cucine, ma la distribuzione dei dati non è uniforme. Si può sistemare! Prima di farlo, occorre esplorare un po' di più. - -1. Si deve scoprire quanti dati sono disponibili per cucina e stamparli: - - ```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}') - ``` - - il risultato si presenta così: - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Alla scoperta degli ingredienti - -Ora si possono approfondire i dati e scoprire quali sono gli ingredienti tipici per cucina. Si dovrebbero ripulire i dati ricorrenti che creano confusione tra le cucine, quindi si affronterà questo problema. - -1. Creare una funzione `create_ingredient()` in Python per creare un dataframe ingredient Questa funzione inizierà eliminando una colonna non utile e ordinando gli ingredienti in base al loro conteggio: - - ```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 - ``` - - Ora si può usare questa funzione per farsi un'idea dei primi dieci ingredienti più popolari per cucina. - -1. Chiamare `create_ingredient_df()` e tracciare il grafico chiamando `barh()`: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![thai](../images/thai.png) - -1. Fare lo stesso per i dati giapponesi: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![Giapponese](../images/japanese.png) - -1. Ora per gli ingredienti cinesi: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![cinese](../images/chinese.png) - -1. Tracciare gli ingredienti indiani: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![indiano](../images/indian.png) - -1. Infine, tracciare gli ingredienti coreani: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![Coreano](../images/korean.png) - -1. Ora, eliminare gli ingredienti più comuni che creano confusione tra le diverse cucine, chiamando `drop()`: - - Tutti amano il riso, l'aglio e lo zenzero! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Bilanciare l'insieme di dati - -Ora che i dati sono puliti, si usa [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Tecnica di sovracampionamento della minoranza sintetica" - per bilanciarlo. - -1. Chiamare `fit_resample()`, questa strategia genera nuovi campioni per interpolazione. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - Bilanciando i dati, si otterranno risultati migliori quando si classificano. Si pensi a una classificazione binaria. Se la maggior parte dei dati è una classe, un modello ML prevederà quella classe più frequentemente, solo perché ci sono più dati per essa. Il bilanciamento dei dati prende tutti i dati distorti e aiuta a rimuovere questo squilibrio. - -1. Ora si può controllare il numero di etichette per ingrediente: - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - il risultato si presenta così: - - ```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 - ``` - - I dati sono belli e puliti, equilibrati e molto deliziosi! - -1. L'ultimo passaggio consiste nel salvare i dati bilanciati, incluse etichette e caratteristiche, in un nuovo dataframe che può essere esportato in un file: - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. Si può dare un'altra occhiata ai dati usando `transform_df.head()` e `transform_df.info()`. Salvare una copia di questi dati per utilizzarli nelle lezioni future: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisine.csv") - ``` - - Questo nuovo CSV può ora essere trovato nella cartella data in radice. - ---- - -## 🚀 Sfida - -Questo programma di studi contiene diversi insiemi di dati interessanti. Esaminare le cartelle `data` e vedere se contiene insiemi di dati che sarebbero appropriati per la classificazione binaria o multiclasse. Quali domande si farebbero a questo insieme di dati? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/?loc=it) - -## Revisione e Auto Apprendimento - -Esplorare l'API di SMOTE. Per quali casi d'uso è meglio usarla? Quali problemi risolve? - -## Compito - -[Esplorare i metodi di classificazione](assignment.it.md) diff --git a/4-Classification/1-Introduction/translations/README.ko.md b/4-Classification/1-Introduction/translations/README.ko.md deleted file mode 100644 index 72dcc04b..00000000 --- a/4-Classification/1-Introduction/translations/README.ko.md +++ /dev/null @@ -1,298 +0,0 @@ -# classification 소개하기 - -4개 강의에서, classic 머신러닝의 기본 초점인 - _classification_ 을 찾아 볼 예정입니다. 아시아와 인도의 모든 훌륭한 요리 데이터셋과 함께 다양한 classification 알고리즘을 사용할 예정입니다. 배고파보세요! - -![just a pinch!](../images/pinch.png) - -> Celebrate pan-Asian cuisines in these lessons! Image by [Jen Looper](https://twitter.com/jenlooper) - -Classification은 regression 기술과 공통점이 많은 [supervised learning](https://wikipedia.org/wiki/Supervised_learning)의 폼입니다. 만약 머신러닝이 데이터셋으로 사물의 값이나 이름을 예측한다면, 일반적으로 classification는 2가지 그룹으로 나누어집니다: _binary classification_ 과 _multiclass classification_. - -[![Introduction to classification](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduction to classification") - -> 🎥 이미지를 누르면 영상 시청: MIT's John Guttag introduces classification - -생각합니다: - -- **Linear regression** 변수 사이 관계를 예측하고 새로운 데이터 포인트로 라인과 엮인 위치에 대한 정확한 예측을 하도록 도움을 줍니다. 예시로, _what price a pumpkin would be in September vs. December_ 를 예측할 수 있습니다. -- **Logistic regression** "binary categories"를 찾을 때 도와줄 수 있습니다: at this price point, _is this pumpkin orange or not-orange_? - -Classification은 다양한 알고리즘으로 데이터 포인트의 라벨 혹은 클래스를 결정할 다른 방식을 고릅니다. 요리 데이터로, 재료 그룹을 찾아서, 전통 요리로 결정할 수 있는지 알아보려 합니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) - -### 소개 - -Classification은 머신러닝 연구원과 데이터 사이언티스트의 기본 활동의 하나입니다. 바이너리 값("is this email spam or not?")의 기본 classification부터, 컴퓨터 비전으로 복잡한 이미지 classification과 segmentation까지, 데이터를 클래스로 정렬하고 물어보는 것은 항상 유용합니다. - -보다 과학적인 방식으로 프로세스를 설명해보자면, classification 방식은 입력한 변수 사이 관계를 출력 변수에 맵핑할 수 있는 예측 모델을 만듭니다. - -![binary vs. multiclass classification](../images/binary-multiclass.png) - -> Binary vs. multiclass problems for classification algorithms to handle. Infographic by [Jen Looper](https://twitter.com/jenlooper) - -데이터를 정리, 시각화, 그리고 ML 작업을 준비하는 프로세스를 시작하기 전, 데이터를 분류할 때 활용할 수 있는 머신러닝의 다양한 방식에 대하여 알아봅니다. - -[statistics](https://wikipedia.org/wiki/Statistical_classification)에서 분리된, classic 머신러닝을 사용하는 classification은, `smoker`, `weight`, 그리고 `age`처럼 _likelihood of developing X disease_ 에 대하여 결정합니다. 전에 수행한 regression 연습과 비슷한 supervised learning 기술로서, 데이터에 라벨링한 ML 알고리즘은 라벨로 데이터셋의 클래스(또는 'features')를 분류하고 예측해서 그룹 또는 결과에 할당합니다. - -✅ 잠시 요리 데이터셋을 상상해봅니다. multiclass 모델은 어떻게 답변할까요? 바이너리 모델은 어떻게 답변할까요? 주어진 요리에 fenugreek를 사용할 지 어떻게 확인하나요? 만약 star anise, artichokes, cauliflower, 그리고 horseradish로 가득한 식품 가방을 선물해서, 전형적 인도 요리를 만들 수 있는지, 보고 싶다면 어떻게 하나요? - - -[![Crazy mystery baskets](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Crazy mystery baskets") - -> 🎥 영상을 보려면 이미지 클릭합니다. The whole premise of the show 'Chopped' is the 'mystery basket' where chefs have to make some dish out of a random choice of ingredients. Surely a ML model would have helped! - -## 안녕 'classifier' - -요리 데이터셋에 물어보고 싶은 질문은, 여러 잠재적 국민 요리를 만들 수 있기 때문에 실제로 **multiclass question**입니다. 재료가 배치되었을 때, 많은 클래스 중에 어떤 데이터가 맞을까요? - -Scikit-learn은 해결하고 싶은 문제의 타입에 따라서, 데이터를 분류하며 사용할 여러가지 알고리즘을 제공합니다. 다음 2가지 강의에서, 몇 알고리즘에 대하여 더 배울 예정입니다. - -## 연습 - 데이터 정리하며 균형잡기 - -프로젝트를 시작하기 전, 첫번째로 해야 할 일은, 더 좋은 결과를 얻기 위해서 데이터를 정리하고 **balance** 하는 일입니다. 이 폴더의 최상단에 있는 빈 _notebook.ipynb_ 파일에서 시작합니다. - -먼저 설치할 것은 [imblearn](https://imbalanced-learn.org/stable/)입니다. 데이터의 균형을 잘 잡아줄 Scikit-learn 패키지입니다 (몇 분동안 배우게 됩니다). - -1. 이렇게, `imblearn` 설치하고, `pip install`을 실행합니다: - - ```python - pip install imblearn - ``` - -1. 데이터를 가져오고 시각화할 때 필요한 패키지를 Import 합니다, `imblearn`의 `SMOTE`도 import 합니다. - - ```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_ csv 파일의 컨텐츠를 읽고 `df` 변수에 놓습니다. - -1. 데이터의 모양을 확인합니다: - - ```python - df.head() - ``` - - 다음은 처음 5개 행입니다: - - ```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()`를 불러서 바 형태로 데이터를 Plot합니다: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![cuisine data distribution](../images/cuisine-dist.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. Python에서 성분 데이터프레임을 생성하기 위해서 `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 - ``` - - 지금부터 함수를 사용해서 요리별 가장 인기있는 10개 재료의 아이디어를 얻을 수 있습니다. - -1. `create_ingredient()` 부르고 `barh()`을 부르면서 plot합니다: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![thai](../images/thai.png) - -1. 일본 데이터에서 똑같이 합니다: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![japanese](../images/japanese.png) - -1. 지금 중국 재료에서도 합니다: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![chinese](../images/chinese.png) - -1. 인도 재료에서도 Plot 합니다: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![indian](../images/indian.png) - -1. 마지막으로, 한국 재료에도 plot 합니다: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![korean](../images/korean.png) - -1. 지금부터, `drop()`을 불러서, 전통 요리 사이에 혼란을 주는 가장 공통적인 재료를 드랍합니다: - - 모두 쌀, 마늘과 생강을 좋아합니다! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## 데이터셋 균형 맞추기 - -지금까지 [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html)를 사용해서, 데이터를 정리했습니다. - "Synthetic Minority Over-sampling Technique" - to balance it. - -1. `fit_resample()`을 부르는, 전략은 interpolation으로 새로운 샘플을 생성합니다. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - 데이터를 균형맞추면, 분류할 때 더 좋은 결과를 냅니다. binary classification에 대하여 생각해봅니다. 만약 대부분 데이터가 한 클래스라면, 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. 마지막 단계는 라벨과 features를 포함한, 밸런스 맞춘 데이터를 파일로 뽑을 수 있는 새로운 데이터프레임으로 저장합니다: - - ```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` 폴더를 파보면서 binary 또는 multi-class classification에 적당한 데이터셋이 포함되어 있나요? 데이터셋에 어떻게 물어보나요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) - -## 검토 & 자기주도 학습 - -SMOTE API를 찾아봅니다. 어떤 사용 케이스에 잘 사용하나요? 어떤 문제를 해결하나요? - -## 과제 - -[Explore classification methods](../assignment.md) diff --git a/4-Classification/1-Introduction/translations/README.pt-br.md b/4-Classification/1-Introduction/translations/README.pt-br.md deleted file mode 100644 index fb16c78f..00000000 --- a/4-Classification/1-Introduction/translations/README.pt-br.md +++ /dev/null @@ -1,299 +0,0 @@ -# Introdução à classificação - -Nestas quatro lições, você explorará um foco fundamental da aprendizagem de máquina clássica - _classificação_. Usaremos vários algoritmos de classificação com um _datset_ (conjunto de dados) sobre todas as cozinhas brilhantes da Ásia e da Índia. Espero que esteja com fome! - -![Só uma pitada!](../images/pinch.png) - -> Celebre a cozinha pan-asiática nestas aulas! Imagem por [Jen Looper](https://twitter.com/jenlooper). - -A classificação é uma forma de [aprendizado supervisionado](https://wikipedia.org/wiki/Supervised_learning) que tem muito em comum com as técnicas de regressão. O aprendizado de máquina tem tudo a ver com prever valores ou nomes para coisas usando _datasets_. A classificação geralmente se divide em dois grupos: _classificação binária_ e _classificação de multiclasse_. - -[![Introdução à classificação](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introdução à classificação") - -> 🎥 Clique na imagem acima para ver o vídeo: John Guttag do MIT introduz classificação (vídeo em inglês). - -Lembre-se: - -- **A regressão linear** ajudou a prever relações entre variáveis e fazer previsões precisas sobre onde um novo ponto de dados cairia em relação a uma linha. Então, você poderia prever _que preço teria uma abóbora em setembro vs. dezembro_, por exemplo. -- **A regressão logística** ajudou a descobrir "categorias binárias": em uma faixa de preço, _essa abóbora é laranja ou não_? - -A classificação usa vários algoritmos para determinar outras maneiras de determinar o rótulo ou a classe de um ponto de dados ou objeto. Vamos trabalhar com dados sobre culinária para ver se, observando um grupo de ingredientes, podemos determinar sua culinária de origem. - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/?loc=ptbr) - -> ### [Esta lição está disponível em R!](../solution/R/lesson_10-R.ipynb) - -### Introdução - -Classificação é uma das atividades fundamentais do pesquisador de aprendizado de máquina e cientista de dados. Desde a classificação básica de um valor binário ("este e-mail é spam ou não?"), até a classificação e segmentação de imagens complexas usando visão computacional, é sempre útil ser capaz de classificar os dados em classes e fazer perguntas sobre eles. - -Para declarar o processo de uma maneira mais científica, seu método de classificação cria um modelo preditivo que permite mapear o relacionamento entre as variáveis de entrada e as variáveis de saída. - -![Classificação binária vs multiclasse](../images/binary-multiclass.png) - -> Problemas binários vs. multiclasse para algoritmos de classificação lidarem. Infográfico por [Jen Looper](https://twitter.com/jenlooper). - -Antes de iniciar o processo de limpar, visualizar e preparar nossos dados para tarefas de ML, vamos aprender um pouco sobre as várias maneiras pelas quais o aprendizado de máquina pode ser usado ao classificar dados. - -Derivado da [estatística](https://wikipedia.org/wiki/Statistical_classification), a classificação no aprendizado de máquina clássico usa características como `fumante`,` peso` e `idade` para determinar a _possibilidade de desenvolver a doença X_. Como uma técnica de aprendizado supervisionado semelhante aos exercícios de regressão que você realizou anteriormente, seus dados são rotulados e os algoritmos de ML usam esses rótulos para classificar e prever classes (ou 'características') de um _dataset_ e atribuí-los a um grupo ou resultado. - -✅ Imagine um _dataset_ sobre culinárias. O que um modelo multiclasse seria capaz de responder? O que um modelo binário seria capaz de responder? E se você quisesse determinar se uma determinada cozinha usaria [feno-grego](https://pt.wikipedia.org/wiki/Feno-grego)? E se você quisesse ver se usando uma sacola de supermercado cheia de anis estrelado, alcachofras, couve-flor e raiz-forte, você poderia criar um prato típico indiano? - -[![Cestas de mistério malucas](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Cestas de mistério malucas") - -> 🎥 Clique na imagem acima para assistir a um vídeo (em inglês). O foco de cada episódio do programa 'Chopped' é a 'cesta misteriosa' onde os chefs têm que fazer um prato a partir de uma escolha aleatória de ingredientes. Certamente um modelo de ML teria ajudado! - -## Olá 'classificador' - -A pergunta que queremos fazer sobre este _dataset_ de culinária é, na verdade, uma **questão multiclasse**, pois temos várias cozinhas nacionais em potencial para trabalhar. Dado um lote de ingredientes, em qual dessas muitas classes os dados se encaixam? - -Dependendo do tipo de problema que você deseja resolver, o Scikit-learn oferece vários algoritmos diferentes para classificar dados. Nas próximas tarefas, você aprenderá sobre esses algoritmos. - -## Exercício - limpe e balanceie seus dados - -A primeira tarefa, antes de iniciar este projeto, é limpar e **balancear** seus dados para obter melhores resultados. Comece com o arquivo _notebook.ipynb_ na raiz da pasta desta tarefa. - -A primeira coisa a instalar é o [imblearn](https://imbalanced-learn.org/stable/). O imblearn é um pacote Scikit-learn que permitirá que você balanceie melhor os dados (vamos aprender mais sobre isso já já). - -1. Para instalar o `imblearn`, rode `pip install`: - - ```python - pip install imblearn - ``` - -1. Importe os pacotes que você precisa para obter seus dados e visualizá-los, importe também a classe `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 - ``` - - Agora você está pronto para obter os dados do _dataset_. - -1. O próximo passo é obter os dados do _dataset_ a ser usado: - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - Usando o método `read_csv()`, leremos o conteúdo do arquivo csv _cusines.csv_ e colocaremos na variável `df`. - -1. Vamos observar o formato dos dados: - - ```python - df.head() - ``` - - As primeiras cinco linhas são assim: - - ```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. Conseguimos informações sobre esses dados chamando `info()`: - - ```python - df.info() - ``` - - O resultado será mais ou menos assim: - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Exercício - aprendendo sobre cozinhas - -Agora o trabalho começa a ficar mais interessante. Vamos descobrir a distribuição de dados por cozinha. - -1. Plote os dados como gráfico de barras chamando o método `barh()`: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![distribuição de dados de culinária](../images/cuisine-dist.png) - - Há um número finito de cozinhas, mas a distribuição de dados é desigual. Você pode consertar isso! Mas antes, explore um pouco mais. - -1. Descubra quantos dados estão disponíveis por cozinha e imprima-os: - - ```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}') - ``` - - O resultado será mais ou menos assim: - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Descobrindo ingredientes - -Vamos nos aprofundar nos dados e aprender quais são os ingredientes típicos de cada cozinha. Para isso, devemos limpar os dados recorrentes que criam confusão entre cozinhas. - -1. Crie uma função em Python chamada `create_ingredient()` para criar um _dataframe_ de ingredientes. Esta função começará eliminando uma coluna inútil ("Unnamed: 0") e classificando os ingredientes por quantidade: - - ```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 - ``` - - Você pode usar essa função para ter uma ideia dos dez ingredientes mais populares de uma culinária. - -1. Chame a função `create_ingredient()` usando os dados de cozinha tailandesa, e plote-os usando o método `barh()`: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![tailandesa](../images/thai.png) - -1. Faça o mesmo para cozinha japonesa: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![japonesa](../images/japanese.png) - -1. E para cozinha chinesa: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![chinesa](../images/chinese.png) - -1. Plote os ingredientes indianos: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![indiana](../images/indian.png) - -1. Por fim, os ingredientes da cozinha coreana: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![coreana](../images/korean.png) - -1. Agora, remova os ingredientes mais comuns que criam confusão entre cozinhas distintas, chamando `drop()`: - - Todo mundo adora arroz, alho e gengibre! - - ```python - feature_df = df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Balanceie o _dataset_ - -Agora que você limpou os dados, use a [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Técnica de sobreamostragem de minoria sintética" - para balancear. - -1. Chame o método `fit_resample()`, esta estratégia gera novas amostras por interpolação. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - Ao balancear seus dados, você terá melhores resultados ao classificá-los. Pense em uma classificação binária. Se a maioria dos seus dados for uma classe, um modelo de ML vai prever essa classe com mais frequência, simplesmente porque há mais dados para ela. O balanceamento de dados pega todos os dados distorcidos e ajuda a remover esse desequilíbrio. - -1. Verifique o número de rótulos por ingrediente: - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - O resultado será mais ou menos assim: - - ```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 - ``` - - Os dados são bons e limpos, equilibrados e muito deliciosos! - -1. A última etapa é salvar seus dados balanceados, incluindo rótulos e características, em um novo _dataframe_ que pode ser exportado para um arquivo: - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. Você pode dar mais uma olhada nos dados usando o método `transform_df.head()` e `transform_df.info()`. Salve uma cópia desses dados para usar nas próximas tarefas: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisines.csv") - ``` - - Este novo csv pode ser encontrado na pasta raiz, onde estão todos os arquivos com os dados dos _datasets_. - ---- - -## 🚀Desafio - -Esta lição contém vários _datasets_ interessantes. Explore os arquivos da pasta `data` e veja quais _datasets_ seriam apropriados para classificação binária ou multiclasse. Quais perguntas você faria sobre estes _datasets_? - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Explore a API do SMOTE. Para quais casos de uso ela é melhor usada? Quais problemas resolve? - -## Tarefa - -[Explore métodos de classificação](assignment.pt-br.md) diff --git a/4-Classification/1-Introduction/translations/README.tr.md b/4-Classification/1-Introduction/translations/README.tr.md deleted file mode 100644 index 84f979f2..00000000 --- a/4-Classification/1-Introduction/translations/README.tr.md +++ /dev/null @@ -1,298 +0,0 @@ -# Sınıflandırmaya giriş - -Bu dört derste klasik makine öğreniminin temel bir odağı olan _sınıflandırma_ konusunu keşfedeceksiniz. Asya ve Hindistan'ın nefis mutfağının tamamı üzerine hazırlanmış bir veri setiyle çeşitli sınıflandırma algoritmalarını kullanmanın üzerinden geçeceğiz. Umarız açsınızdır! - -![sadece bir tutam!](../images/pinch.png) - -> Bu derslerede Pan-Asya mutfağını kutlayın! Fotoğraf [Jen Looper](https://twitter.com/jenlooper) tarafından çekilmiştir. - -Sınıflandırma, regresyon yöntemleriyle birçok ortak özelliği olan bir [gözetimli öğrenme](https://wikipedia.org/wiki/Supervised_learning) biçimidir. Eğer makine öğrenimi tamamen veri setleri kullanarak değerleri veya nesnelere verilecek isimleri öngörmekse, sınıflandırma genellikle iki gruba ayrılır: _ikili sınıflandırma_ ve _çok sınıflı sınıflandırma_. - -[![Sınıflandırmaya giriş](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduction to classification") - -> :movie_camera: Video için yukarıdaki fotoğrafa tıklayın: MIT's John Guttag introduces classification (MIT'den John Guttag sınıflandırmayı tanıtıyor) - -Hatırlayın: - -- **Doğrusal regresyon** değişkenler arasındaki ilişkileri öngörmenize ve o doğruya ilişkili olarak yeni bir veri noktasının nereye düşeceğine dair doğru öngörülerde bulunmanıza yardımcı oluyordu. Yani, _bir balkabağının fiyatının aralık ayına göre eylül ayında ne kadar olabileceğini_ öngörebilirsiniz örneğin. -- **Lojistik regresyon** "ikili kategoriler"i keşfetmenizi sağlamıştı: bu fiyat noktasında, _bu balkabağı turuncu mudur, turuncu-değil midir?_ - -Sınıflandırma, bir veri noktasının etiketini veya sınıfını belirlemek için farklı yollar belirlemek üzere çeşitli algoritmalar kullanır. Bir grup malzemeyi gözlemleyerek kökeninin hangi mutfak olduğunu belirleyip belirleyemeyeceğimizi görmek için bu mutfak verisiyle çalışalım. - -## [Ders öncesi kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/?loc=tr) - -### Giriş - -Sınıflandırma, makine öğrenimi araştırmacısının ve veri bilimcisinin temel işlerinden biridir. İkili bir değerin temel sınıflandırmasından ("Bu e-posta gereksiz (spam) midir yoksa değil midir?") bilgisayarla görüden yararlanarak karmaşık görüntü sınıflandırma ve bölütlemeye kadar, veriyi sınıf sınıf sıralayabilmek ve soru sorabilmek daima faydalıdır. - -Süreci daha bilimsel bir yolla ifade etmek gerekirse, sınıflandırma yönteminiz, girdi bilinmeyenlerinin arasındaki ilişkiyi çıktı bilinmeyenlerine eşlemenizi sağlayan öngörücü bir model oluşturur. - -![ikili ve çok sınıflı sınıflandırma karşılaştırması](../images/binary-multiclass.png) - -> Sınıflandırma algoritmalarının başa çıkması gereken ikili ve çok sınıflı problemler. Bilgilendirme grafiği [Jen Looper](https://twitter.com/jenlooper) tarafından hazırlanmıştır. - -Verimizi temizleme, görselleştirme ve makine öğrenimi görevleri için hazırlama süreçlerine başlamadan önce, veriyi sınıflandırmak için makine öğreniminin leveraj edilebileceği çeşitli yolları biraz öğrenelim. - -[İstatistikten](https://wikipedia.org/wiki/Statistical_classification) türetilmiş olarak, klasik makine öğrenimi kullanarak sınıflandırma, _X hastalığının gelişmesi ihtimalini_ belirlemek için `smoker`, `weight`, ve `age` gibi öznitelikler kullanır. Daha önce yaptığınız regresyon alıştırmalarına benzeyen bir gözetimli öğrenme yöntemi olarak, veriniz etiketlenir ve makine öğrenimi algoritmaları o etiketleri, sınıflandırmak ve veri setinin sınıflarını (veya 'özniteliklerini') öngörmek ve onları bir gruba veya bir sonuca atamak için kullanır. - -:white_check_mark: Mutfaklarla ilgili bir veri setini biraz düşünün. Çok sınıflı bir model neyi cevaplayabilir? İkili bir model neyi cevaplayabilir? Farz edelim ki verilen bir mutfağın çemen kullanmasının muhtemel olup olmadığını belirlemek istiyorsunuz. Farzedelim ki yıldız anason, enginar, karnabahar ve bayır turpu ile dolu bir alışveriş poşetinden tipik bir Hint yemeği yapıp yapamayacağınızı görmek istiyorsunuz. - -[![Çılgın gizem sepetleri](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Crazy mystery baskets") - -> :movie_camera: Video için yukarıdaki fotoğrafa tıklayın. Aşçıların rastgele malzeme seçeneklerinden yemek yaptığı 'Chopped' programının tüm olayı 'gizem sepetleri'dir. Kuşkusuz, bir makine öğrenimi modeli onlara yardımcı olurdu! - -## Merhaba 'sınıflandırıcı' - -Bu mutfak veri setiyle ilgili sormak istediğimiz soru aslında bir **çok sınıflı soru**dur çünkü elimizde farklı potansiyel ulusal mutfaklar var. Verilen bir grup malzeme için, veri bu sınıflardan hangisine uyacak? - -Scikit-learn, veriyi sınıflandırmak için kullanmak üzere, çözmek istediğiniz problem çeşidine bağlı olarak, çeşitli farklı algoritmalar sunar. Önümüzdeki iki derste, bu algoritmalardan birkaçını öğreneceksiniz. - -## Alıştırma - verinizi temizleyip dengeleyin - -Bu projeye başlamadan önce elinizdeki ilk görev, daha iyi sonuçlar almak için, verinizi temizlemek ve **dengelemek**. Üst klasördeki boş _notebook.ipynb_ dosyasıyla başlayın. - -Kurmanız gereken ilk şey [imblearn](https://imbalanced-learn.org/stable/). Bu, veriyi daha iyi dengelemenizi sağlayacak bir Scikit-learn paketidir. (Bu görev hakkında birazdan daha fazla bilgi göreceksiniz.) - -1. `imblearn` kurun, `pip install` çalıştırın, şu şekilde: - - ```python - pip install imblearn - ``` - -1. Verinizi almak ve görselleştirmek için ihtiyaç duyacağınız paketleri alın (import edin), ayrıca `imblearn` paketinden `SMOTE` alın. - - ```python - import pandas as pd - import matplotlib.pyplot as plt - import matplotlib as mpl - import numpy as np - from imblearn.over_sampling import SMOTE - ``` - - Şimdi okumak için hazırsınız, sonra veriyi alın. - -1. Sonraki görev veriyi almak olacak: - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - `read_csv()` kullanmak _cusines.csv_ csv dosyasının içeriğini okuyacak ve `df` değişkenine yerleştirecek. - -1. Verinin şeklini kontrol edin: - - ```python - df.head() - ``` - - İlk beş satır şöyle görünüyor: - - ```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()` fonksiyonunu çağırarak bu veri hakkında bilgi edinin: - - ```python - df.info() - ``` - - Çıktınız şuna benzer: - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Alıştırma - mutfaklar hakkında bilgi edinmek - -Şimdi, işimiz daha da ilginçleşmeye başlıyor. Mutfak mutfak verinin dağılımını keşfedelim - -1. `barh()` fonksiyonunu çağırarak veriyi sütunlarla çizdirin: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![mutfak veri dağılımı](../images/cuisine-dist.png) - - Sonlu sayıda mutfak var, ancak verinin dağılımı düzensiz. Bunu düzeltebilirsiniz! Bunu yapmadan önce, biraz daha keşfedelim. - -1. Her mutfak için ne kadar verinin mevcut olduğunu bulun ve yazdırın: - - ```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}') - ``` - - çıktı şöyle görünür: - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Malzemeleri keşfetme - -Şimdi veriyi daha derinlemesine inceleyebilirsiniz ve her mutfak için tipik malzemelerin neler olduğunu öğrenebilirsiniz. Mutfaklar arasında karışıklık yaratan tekrar eden veriyi temizlemelisiniz, dolayısıyla şimdi bu problemle ilgili bilgi edinelim. - -1. Python'da, malzeme veri iskeleti yaratmak için `create_ingredient_df()` diye bir fonksiyon oluşturun. Bu fonksiyon, yardımcı olmayan bir sütunu temizleyerek ve sayılarına göre malzemeleri sıralayarak başlar: - - ```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 - ``` - - Şimdi bu fonksiyonu, her mutfağın en yaygın ilk on malzemesi hakkında hakkında fikir edinmek için kullanabilirsiniz. - -1. `create_ingredient_df()` fonksiyonunu çağırın ve `barh()` fonksiyonunu çağırarak çizdirin: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![Tayland](../images/thai.png) - -1. Japon verisi için de aynısını yapın: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![Japon](../images/japanese.png) - -1. Şimdi Çin malzemeleri için yapın: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![Çin](../images/chinese.png) - -1. Hint malzemelerini çizdirin: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![Hint](../images/indian.png) - -1. Son olarak, Kore malzemelerini çizdirin: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![Kore](../images/korean.png) - -1. Şimdi, `drop()` fonksiyonunu çağırarak, farklı mutfaklar arasında karışıklığa sebep olan en çok ortaklık taşıyan malzemeleri temizleyelim: - - Herkes pirinci, sarımsağı ve zencefili seviyor! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Veri setini dengeleyin - -Veriyi temizlediniz, şimdi [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" ("Sentetik Azınlık Aşırı-Örnekleme/Örneklem-Artırma Tekniği") kullanarak dengeleyelim. - -1. `fit_resample()` fonksiyonunu çağırın, bu strateji ara değerlemeyle yeni örnekler üretir. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - Verinizi dengeleyerek, sınıflandırırken daha iyi sonuçlar alabileceksiniz. Bir ikili sınıflandırma düşünün. Eğer verimizin çoğu tek bir sınıfsa, bir makine öğrenimi modeli, sırf onun için daha fazla veri olduğundan o sınıfı daha sık tahmin edecektir. Veriyi dengelemek herhangi eğri veriyi alır ve bu dengesizliğin ortadan kaldırılmasına yardımcı olur. - -1. Şimdi, her bir malzeme için etiket sayısını kontrol edebilirsiniz: - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - Çıktınız şöyle görünür: - - ```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 - ``` - - Veri şimdi tertemiz, dengeli ve çok lezzetli! - -1. Son adım, dengelenmiş verinizi, etiket ve özniteliklerle beraber, yeni bir dosyaya gönderilebilecek yeni bir veri iskeletine kaydetmek: - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. `transformed_df.head()` ve `transformed_df.info()` fonksiyonlarını kullanarak verinize bir kez daha göz atabilirsiniz. Gelecek derslerde kullanabilmek için bu verinin bir kopyasını kaydedin: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../../data/cleaned_cuisines.csv") - - ``` - - Bu yeni CSV şimdi kök data (veri) klasöründe görülebilir. - ---- - -## :rocket: Meydan okuma - -Bu öğretim programı farklı ilgi çekici veri setleri içermekte. `data` klasörlerini inceleyin ve ikili veya çok sınıflı sınıflandırma için uygun olabilecek veri setleri bulunduran var mı, bakın. Bu veri seti için hangi soruları sorabilirdiniz? - -## [Ders sonrası kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/?loc=tr) - -## Gözden Geçirme & Kendi Kendine Çalışma - -SMOTE'nin API'ını keşfedin. En iyi hangi durumlar için kullanılıyor? Hangi problemleri çözüyor? - -## Ödev - -[Sınıflandırma yöntemlerini keşfedin](assignment.tr.md) diff --git a/4-Classification/1-Introduction/translations/README.zh-cn.md b/4-Classification/1-Introduction/translations/README.zh-cn.md deleted file mode 100644 index 9c762e84..00000000 --- a/4-Classification/1-Introduction/translations/README.zh-cn.md +++ /dev/null @@ -1,291 +0,0 @@ -# 对分类方法的介绍 - -在这四节课程中,你将会学习机器学习中一个基本的重点 - _分类_。 我们会在关于亚洲和印度的神奇的美食的数据集上尝试使用多种分类算法。希望你有点饿了。 - -![一个桃子!](../images/pinch.png) - -> 在学习的课程中赞叹泛亚地区的美食吧! 图片由 [Jen Looper](https://twitter.com/jenlooper) 提供 - -分类算法是[监督学习](https://wikipedia.org/wiki/Supervised_learning)的一种。它与回归算法在很多方面都有相同之处。如果机器学习所有的目标都是使用数据集来预测数值或物品的名字,那么分类算法通常可以分为两类 _二元分类_ 和 _多元分类_。 - -[![对分类算法的介绍](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "对分类算法的介绍") - -> 🎥 点击上方的图片可以跳转到一个视频-MIT 的 John 对分类算法的介绍 - -请记住: - -- **线性回归** 帮助你预测变量之间的关系并对一个新的数据点会落在哪条线上做出精确的预测。因此,你可以预测 _南瓜在九月的价格和十月的价格_。 -- **逻辑回归** 帮助你发现“二元范畴”:即在当前这个价格, _这个南瓜是不是橙色_? - -分类方法采用多种算法来确定其他可以用来确定一个数据点的标签或类别的方法。让我们来研究一下这个数据集,看看我们能否通过观察菜肴的原料来确定它的源头。 - -## [课程前的小问题](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) - -分类是机器学习研究者和数据科学家使用的一种基本方法。从基本的二元分类(这是不是一份垃圾邮件?)到复杂的图片分类和使用计算机视觉的分割技术,它都是将数据分类并提出相关问题的有效工具。 - -![二元分类 vs 多元分类](../images/binary-multiclass.png) - -> 需要分类算法解决的二元分类和多元分类问题的对比. 信息图由 [Jen Looper](https://twitter.com/jenlooper) 提供 - -在开始清洗数据、数据可视化和调整数据以适应机器学习的任务前,让我们来了解一下多种可用来数据分类的机器学习方法。 - -派生自[统计数学](https://wikipedia.org/wiki/Statistical_classification),分类算法使用经典的机器学习的一些特征,比如通过'吸烟者'、'体重'和'年龄'来推断 _罹患某种疾病的可能性_。作为一个与你刚刚实践过的回归算法很相似的监督学习算法,你的数据是被标记过的并且算法通过采集这些标签来进行分类和预测并进行输出。 - -✅ 花一点时间来想象一下一个关于菜肴的数据集。一个多元分类的模型应该能回答什么问题?一个二元分类的模型又应该能回答什么?如果你想确定一个给定的菜肴是否会用到葫芦巴(一种植物,种子用来调味)该怎么做?如果你想知道给你一个装满了八角茴香、花椰菜和辣根的购物袋你能否做出一道代表性的印度菜又该怎么做? - -[![Crazy mystery baskets](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "疯狂的神秘篮子") - -> 🎥 点击图像观看视频。整个'Chopped'节目的前提都是建立在神秘的篮子上,在这个节目中厨师必须利用随机给定的食材做菜。可见一个机器学习模型能起到不小的作用 - -## 初见-分类器 - -我们关于这个菜肴数据集想要提出的问题其实是一个 **多元问题**,因为我们有很多潜在的具有代表性的菜肴。给定一系列食材数据,数据能够符合这些类别中的哪一类? - -Scikit-learn 项目提供多种对数据进行分类的算法,你需要根据问题的具体类型来进行选择。在下两节课程中你会学到这些算法中的几个。 - -## 练习 - 清洗并平衡你的数据 - -在你开始进行这个项目前的第一个上手的任务就是清洗和 **平衡**你的数据来得到更好的结果。从当前目录的根目录中的 _nodebook.ipynb_ 开始。 - -第一个需要安装的东西是 [imblearn](https://imbalanced-learn.org/stable/) 这是一个 Scikit-learn 项目中的一个包,它可以让你更好的平衡数据 (关于这个任务你很快你就会学到更多)。 - -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()` 会读取 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() - ``` - - ![菜肴数据分配](../images/cuisine-dist.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. 在 Python 中创建一个函数 `create_ingredient_df()` 来创建一个食材的数据帧。这个函数会去掉数据中无用的列并按食材的数量进行分类。 - - ```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 - ``` -现在你可以使用这个函数来得到理想的每道菜肴最重要的 10 种食材。 - -1. 调用函数 `create_ingredient_df()` 然后通过函数 `barh()` 来绘制图像: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![thai](../images/thai.png) - -1. 对日本的数据进行相同的操作: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![日本](../images/japanese.png) - -1. 现在处理中国的数据: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![中国](../images/chinese.png) - -1. 绘制印度食材的数据: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![印度](../images/indian.png) - -1. 最后,绘制韩国的食材的数据: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![韩国](../images/korean.png) - -1. 现在,去除在不同的菜肴间最普遍的容易造成混乱的食材,调用函数 `drop()`: - - 大家都喜欢米饭、大蒜和生姜 - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## 平衡数据集 - -现在你已经清理过数据集了, 使用 [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - 来平衡数据集。 - -1. 调用函数 `fit_resample()`, 此方法通过插入数据来生成新的样本 - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - 通过对数据集的平衡,当你对数据进行分类时能够得到更好的结果。现在考虑一个二元分类的问题,如果你的数据集中的大部分数据都属于其中一个类别,那么机器学习的模型就会因为在那个类别的数据更多而判断那个类别更为常见。平衡数据能够去除不公平的数据点。 - -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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) - -## 回顾 & 自学 - -探索一下 SMOTE 的 API 文档。思考一下它最适合于什么样的情况、它能够解决什么样的问题。 - -## 课后作业 - -[探索一下分类方法](./assignment.zh-cn.md) diff --git a/4-Classification/1-Introduction/translations/assignment.es.md b/4-Classification/1-Introduction/translations/assignment.es.md deleted file mode 100644 index 674f9195..00000000 --- a/4-Classification/1-Introduction/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Explore métodos de clasificación - -## Instrucciones - -En la [documentación de Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) encontrarás un gran lista de formas de clasificar los datos. Haz una pequeña búsqueda en estos documentos: tu meta es buscar los metódos de clasificación y hacer coincidir un conjunto de datos en este plan de estudios, una pregunta que puedes hacerle, y una técnica de clasificación. Crea una hoja de cálculo o tabla en un archivo .doc y explica cómo el conjunto de datos funcionaría con el algoritmo de clasificación. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | Se presentó un documento repasando 5 algoritmos junto a una técnica de clasificación. El resumen está bien explicado y detallado. | Se presentó un documento repasando 3 algoritmos junto a una técnica de clasificación. El resumen está bien explicado y detallado. | Se presentó un documento repasando menos de tres algoritmos junto a una técnica de clasificación y el resumen no está bien detallado ni explicado. | diff --git a/4-Classification/1-Introduction/translations/assignment.it.md b/4-Classification/1-Introduction/translations/assignment.it.md deleted file mode 100644 index 12834017..00000000 --- a/4-Classification/1-Introduction/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Esplorare i metodi di classificazione - -## Istruzioni - -Nella [documentazione](https://scikit-learn.org/stable/supervised_learning.html) di Scikit-learn si troverà un ampio elenco di modi per classificare i dati. Fare una piccola caccia al tesoro in questi documenti: l'obiettivo è cercare metodi di classificazione e abbinare un insieme di dati in questo programma di studi, una domanda che si può porre e una tecnica di classificazione. Creare un foglio di calcolo o una tabella in un file .doc e spiegare come funzionerebbe l'insieme di dati con l'algoritmo di classificazione. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | viene presentato un documento che riporta una panoramica di 5 algoritmi insieme a una tecnica di classificazione. La panoramica è ben spiegata e dettagliata. | viene presentato un documento che riporta una panoramica di 3 algoritmi insieme a una tecnica di classificazione. La panoramica è ben spiegata e dettagliata. | viene presentato un documento che riporta una panoramica di meno di tre algoritmi insieme a una tecnica di classificazione e la panoramica non è né ben spiegata né dettagliata. | diff --git a/4-Classification/1-Introduction/translations/assignment.ko.md b/4-Classification/1-Introduction/translations/assignment.ko.md deleted file mode 100644 index 4dd076a4..00000000 --- a/4-Classification/1-Introduction/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 분류법에 대해 알아봅시다 - -## 설명 - -Scikit-learn의 이 [기술 문서](https://scikit-learn.org/stable/supervised_learning.html)를 보면 다양한 데이터 분류 기법들을 확인할 수 있습니다. 이 기술 문서로 물건 찾기 게임 비슷한 걸 한번 해 봅시다: 문서에서 여러 분류 알고리즘들을 찾아보고, 이 머신러닝 과정에서 제공하는 어떤 데이터세트에 적용이 가능한지 또 그 적합성을 따지기 위해 어떤 질문을 해야 하는지와 분류 기법에 대해 알아보세요. 선택한 데이터세트와 분류 알고리즘이 어떻게 적합한지 .doc 형식의 파일에 표를 만들어 설명해 보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ---------------------------------------------------------------------- | -------------------------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| | 다섯 가지의 다른 알고리즘들과 분류 기법의 중요한 점들을 상세히 잘 설명하였음 | 세 가지의 다른 알고리즘들과 분류 기법의 중요한 점들을 상세히 잘 설명하였음 | 세 가지 미만의 다른 알고리즘들과 분류 기법에 대해 쉽지 않게 설명하였으며 그 설명이 상세하지 못함 | diff --git a/4-Classification/1-Introduction/translations/assignment.pt-br.md b/4-Classification/1-Introduction/translations/assignment.pt-br.md deleted file mode 100644 index e2332edc..00000000 --- a/4-Classification/1-Introduction/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Explore métodos de classificação - -## Instruções - -Na [documentação do Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html), você encontrará uma grande lista de maneiras de classificar dados. Faça uma pequena caça ao tesouro nesses documentos: seu objetivo é procurar métodos de classificação e combinar um _dataset_, uma pergunta que você pode fazer sobre ele e uma técnica de classificação. Crie uma planilha ou tabela em um arquivo .doc e explique como o _dataset_ funcionaria com o algoritmo de classificação. - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | O documento é apresentado com uma visão geral de 5 algoritmos e uma técnica de classificação. A visão geral é bem explicada e detalhada. | O documento é apresentado com uma visão geral de 3 algoritmos e uma técnica de classificação. A visão geral é bem explicada e detalhada. | O documento é apresentado com uma visão geral de menos de três algoritmos e uma técnica de classificação. A visão geral não é bem explicada nem detalhada. | diff --git a/4-Classification/1-Introduction/translations/assignment.tr.md b/4-Classification/1-Introduction/translations/assignment.tr.md deleted file mode 100644 index 99dfe5c2..00000000 --- a/4-Classification/1-Introduction/translations/assignment.tr.md +++ /dev/null @@ -1,11 +0,0 @@ -# Sınıflandırma yöntemlerini keşfedin - -## Yönergeler - -[Scikit-learn dokümentasyonunda](https://scikit-learn.org/stable/supervised_learning.html) veriyi sınıflandırma yöntemlerini içeren büyük bir liste göreceksiniz. Bu dokümanlar arasında ufak bir çöpçü avı yapın: Hedefiniz, sınıflandırma yöntemleri aramak ve bu eğitim programındaki bir veri seti, sorabileceğiniz bir soru ve bir sınıflandırma yöntemi eşleştirmek. Bir .doc dosyasında elektronik çizelge veya tablo hazırlayın ve veri setinin sınıflandırma algoritmasıyla nasıl çalışacağını açıklayın. - -## Rubrik - -| Ölçüt | Örnek Alınacak Nitelikte | Yeterli | Geliştirme Gerekli | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | Bir sınıflandırma yönteminin yanısıra 5 algoritmayı inceleyen bir doküman sunulmuş. İnceleme iyi açıklanmış ve detaylı. | Bir sınıflandırma yönteminin yanısıra 5 algoritmayı inceleyen bir doküman sunulmuş. İnceleme iyi açıklanmış ve detaylı. | Bir sınıflandırma yönteminin yanısıra 3'ten az algoritmayı inceleyen bir doküman sunulmuş ve inceleme iyi açıklanmış veya detaylı değil. | diff --git a/4-Classification/1-Introduction/translations/assignment.zh-cn.md b/4-Classification/1-Introduction/translations/assignment.zh-cn.md deleted file mode 100644 index 83d9eaba..00000000 --- a/4-Classification/1-Introduction/translations/assignment.zh-cn.md +++ /dev/null @@ -1,11 +0,0 @@ -# 探索分类方法 - -## 说明 - -在 [Scikit-learn 文档](https://scikit-learn.org/stable/supervised_learning.html) 中你会找到一大串的数据分类的方法。在这些文档中做一个寻宝游戏:你的目标是寻找分类方法,并在本课程中匹配一个数据集,一个你能对它提出的问题,以及一种分类技术。在一个 .doc 文件中创建一个电子表格或表格,并解释该数据集如何与分类算法一起工作。 - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| ---- | --- | -------- | ------- | -| | 提交了一份文件,概述了 5 种算法和一种分类技术。概述解释得清楚且详细。 | 提交了一份文件,概述了 3 种算法和一种分类技术。概述解释得清楚且详细。 | 提交了一份文件,概述了少于 3 种算法和一种分类技术,而且概述既没有很好的解释也没有详细说明。 | diff --git a/4-Classification/2-Classifiers-1/translations/README.es.md b/4-Classification/2-Classifiers-1/translations/README.es.md deleted file mode 100644 index e253d970..00000000 --- a/4-Classification/2-Classifiers-1/translations/README.es.md +++ /dev/null @@ -1,245 +0,0 @@ -# Clasificadores de cocina 1 - -En esta lección, usarás el conjunto de datos que guardaste en la última lección llena de equilibrio, datos limpios todo sobre cocinas. - -Usarás este conjunto de datos con una variedad de clasificadores para _predecir una cocina nacional dada basado en un grupo de ingredientes_. Mientras lo haces, aprenderás más acerca de algunas formas en que los algoritmos pueden ser aprovechados para las tareas de clasificación. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21?loc=es) - -# Preparación - -Asumiendo que completaste la [Lección 1](../../1-Introduction/translations/README.es.md), asegura que existe un archivo _cleaned_cuisines.csv_ en el directorio raíz `/data` para estas cuatro lecciones. - -## Ejercicio - predice una cocina nacional - -1. Trabaja en el directorio _notebook.ipynb_ de la lección, importa ese archivo junto con la biblioteca Pandas: - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") - cuisines_df.head() - ``` - - Los datos lucen así: - -| | 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. Ahora, importa varias bibliotecas más: - - ```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. Divide las coordenadas X e Y en dos diferentes dataframes para entrenar. `cuisine` puede ser el dataframe de las etiquetas: - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - Se verá así: - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. Elimina la columna `Unnamed: 0` y la columna `cuisine`, llamando a `drop()`. Guarda el resto de los datos como características entrenables: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - Tus características lucen así: - -| | 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 | - -¡Ahora ya estás listo para entrenar tu modelo! - -## Eligiendo tu clasificador - -Ahora que tus datos están limpios y listos para entrenamiento, tienes que decidir qué algoritmo usar para hacer el trabajo. - -Scikit-learn agrupa clasificaciones bajo aprendizaje supervisado, y en esa categoría encontrarás muchas formas de clasificar. [La variedad](https://scikit-learn.org/stable/supervised_learning.html) es bastante abrumadora a primera vista. Los siguientes métodos incluyen técnicas de clasificación: - -- Modelos lineales -- Máquinas de vectores de soporte -- Descenso de gradiente estocástico -- Vecinos más cercanos -- Procesos Gaussianos -- Árboles de decisión -- Métodos de conjunto (clasificador de votos) -- Algoritmos multiclase y multisalida (clasificación multiclase y multietiqueta, clasificación multiclase-multisalida) - -> También puedes usar [redes neuronales para clasificar los datos](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), pero eso está fuera del alcance de esta lección. - -### ¿Qué clasificador usar? - -Así que, ¿qué clasificador deberías elegir? A menudo, el ejecutar varios y buscar un buen resultado es una forma de probar. Scikit-lean ofrece una [comparación lado a lado](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) en un conjunto de datos creado, comparando KNeighbors, SVC two ways, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB y QuadraticDiscrinationAnalysis, mostrando los resultados visualizados: - -![Comparación de clasificadores](../images/comparison.png) -> Gráficos generados en la documentación de Scikit-learn - -> AutoML resuelve este problema de forma pulcra al ejecutar estas comparaciones en la nube, permitiéndote elegir el mejor algoritmo para tus datos. Pruébalo [aquí](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) - -### Un mejor enfoque - -Una mejor forma a estar adivinando, es seguir las ideas de esta [hoja de trucos de ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Aquí, descubrimos que, para nuestro problema multiclase, tenemos algunas opciones: - -![Hoja de trucos para problemas multiclase](../images/cheatsheet.png) -> Una sección de la hoja de trucos de algoritmos de Microsoft, detallando opciones de clasificación multiclase. - -✅ ¡Descarga esta hoja de trucos, imprímela y cuélgala en tu pared! - -### Razonamiento - -Veamos si podemos razonar nuestro camino a través de diferentes enfoques dadas las restricciones que tenemos: - -- **Las redes neuronales son muy pesadas**. Dado nuestro conjunto de datos limpio aunque mínimo, y el hecho que estamos ejecutando el entrenamiento de forma local vía los notebooks, las redes neuronales son demasiado pesadas para esta tarea. -- **Sin clasificador de dos clases**. No usamos clasificador de dos clases, por lo que descarta un uno-contra-todos. -- **El árbol de decisión o la regresión logística podría funcionar**. Un árbol de decisión podría funcionar, o la regresión logística para datos multiclase. -- **Los árboles de decisión potenciados multiclase resuelven un problema diferente**. El árbol de decisión potenciado multiclase es el más adecuado para tareas no paramétricas, por ejemplo, las tareas designadas para construir clasificaciones, por lo que no es útil para nosotros. - -### Usando Scikit-learn - -Usaremos Scikit-learn para analizar nuestros datos. Sin embargo, hay varias formas de usar la regresión logística en Scikit-learn. Da un vistazo a los [parámetros a pasar](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -En esencia, hay dos parámetros importantes - `multi_class` y `solver` - que necesitamos especificar, cuando le pedimos a Scikit-learn realice una regresión logística. El valor `multi_class` aplica cierto comportamiento. El valor del solucionador (`solver`) es el algoritmo a usar. No todos los solucionadores pueden ser emparejados con todos los valores `multi_class`. - -De acuerdo a la documentación, en el caso multiclase, el algoritmo de entrenamiento: - -- **Usa el esquema uno contra el resto (OvsR)**, si la opción `multi_class` se configura a `ovr` -- **Usa la pérdida de entropía cruzada**, si la opción `multi_class` se configura a `multinomial` (Actualmente la opción `multinomial` es soportada sólo por los solucionadores ‘lbfgs’, ‘sag’, ‘saga’ y ‘newton-cg’.). - -> 🎓 Aquí, el 'esquema' puede ser 'ovr' (one-vs-rest) o 'multinomial'. Ya que la regresión logística está diseñada realmente para soportar la clasificación binaria, estos esquemas te permiten manejar mejor las tareas de clasificación multiclase [fuente](https://machinelea -rningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/). - -> 🎓 El 'solucionador' es definido como "el algoritmo a usar en el problema de optimización" [fuente](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - - -Scikit-learn ofrece esta tabla para explicar como los solucionadores manejan distintos desafíos presentados por distintas clases de datos estructurados: - -![solucionadores](../images/solvers.png) - -## Ejercicio - divide los datos - -Nos podemos enfocar en la regresión logística para nuestra primer prueba de entrenamiento ya que recién aprendiste sobre esto último en la lección anterior. -Divide tus datos en los grupos 'training' y 'testing' al llamar a `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) -``` - -## Ejercicio - aplica la regresión logística - -Ya que estás usando un caso multiclase, necesitas elegir qué _esquema_ usar y qué _solucionador_ configurar. Usa LogisticRegression con un ajuste multiclase y el solucionador **liblinear** para entrenar. - -1. Crea un regresión logística con un multi_class configurado a `ovr` y el solucionador ajustado a `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)) - ``` - - ✅ Prueba un solucionador diferente como `lbfgs`, el cual suele ser configurado por defecto - - > Nota, usa la función de Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) para aplanar tus datos cuando sea necesario. - - ¡La precisión es buena por enciam del **80%*! - -1. Puedes ver este modelo en acción al probar una fila de datos (#50): - - ```python - print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') - print(f'cuisine: {y_test.iloc[50]}') - ``` - - El resultado es impreso: - - ```output - ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') - cuisine: indian - ``` - - ✅ Prueba un número de fila distinto y revisa los resultados - -1. Indagando más, puedes revisar la precisión de esta predicción: - - ```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() - ``` - - El resultado es impreso - La cocina India es su mejor conjetura, con buena probabilidad: - - | | 0 | - | -------: | -------: | - | indian | 0.715851 | - | chinese | 0.229475 | - | japanese | 0.029763 | - | korean | 0.017277 | - | thai | 0.007634 | - - ✅ ¿Puedes explicar por qué el modelo está muy seguro de que esta es una cocina India? - -1. Obtén mayor detalle al imprimir un reporte de clasificación, como lo hiciste en las lecciones de regresión: - - ```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 | - -## 🚀Desafío - -En esta lección, usaste tus datos limpios para construir un modelo de aprendizaje automático que puede predecir una cocina nacional basado en una serie de ingredientes. Toma un tiempo para leer las diversas opciones que provee Scikit-learn para clasificar los datos. Profundiza en el concepto de 'solucionador' para comprender que sucede detrás de escena. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22?loc=es) - -## Revisión y autoestudio - -Indaga un poco más en las matemáticas detrás de la regresión logística en [esta lección](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) - -## Asignación - -[Estudia los solucionadores](assignment.es.md) diff --git a/4-Classification/2-Classifiers-1/translations/README.it.md b/4-Classification/2-Classifiers-1/translations/README.it.md deleted file mode 100644 index 6db66fea..00000000 --- a/4-Classification/2-Classifiers-1/translations/README.it.md +++ /dev/null @@ -1,241 +0,0 @@ -# Classificatori di cucina 1 - -In questa lezione, si utilizzerà l'insieme di dati salvati dall'ultima lezione, pieno di dati equilibrati e puliti relativi alle cucine. - -Si utilizzerà questo insieme di dati con una varietà di classificatori per _prevedere una determinata cucina nazionale in base a un gruppo di ingredienti_. Mentre si fa questo, si imparerà di più su alcuni dei modi in cui gli algoritmi possono essere sfruttati per le attività di classificazione. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/?loc=it) -# Preparazione - -Supponendo che la [Lezione 1](../1-Introduction/README.md) sia stata completata, assicurarsi che _esista_ un file clean_cuisines.csv nella cartella in radice `/data` per queste quattro lezioni. - -## Esercizio - prevedere una cucina nazionale - -1. Lavorando con il _notebook.ipynb_ di questa lezione nella cartella radice, importare quel file insieme alla libreria Pandas: - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../../data/cleaned_cuisine.csv") - cuisines_df.head() - ``` - - I dati si presentano così: - - ```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 | 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. Ora importare molte altre librerie: - - ```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. Dividere le coordinate X e y in due dataframe per l'addestramento. `cuisine` può essere il dataframe delle etichette: - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - Apparirà così - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. Scartare la colonna `Unnamed: 0` e la colonna `cuisine` , chiamando `drop()`. Salvare il resto dei dati come caratteristiche addestrabili: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - Le caratteristiche sono così: - - | 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 | - | 1 | 1 | 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 | - | 3 | 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 | - -Ora si è pronti per addestrare il modello! - -## Scegliere il classificatore - -Ora che i dati sono puliti e pronti per l'addestramento, si deve decidere quale algoritmo utilizzare per il lavoro. - -Scikit-learn raggruppa la classificazione in Supervised Learning, e in quella categoria si troveranno molti modi per classificare. [La varietà](https://scikit-learn.org/stable/supervised_learning.html) è piuttosto sconcertante a prima vista. I seguenti metodi includono tutti tecniche di classificazione: - -- Modelli Lineari -- Macchine a Vettori di Supporto -- Discesa stocastica del gradiente -- Nearest Neighbors -- Processi Gaussiani -- Alberi di Decisione -- Apprendimento ensemble (classificatore di voto) -- Algoritmi multiclasse e multioutput (classificazione multiclasse e multietichetta, classificazione multiclasse-multioutput) - -> Si possono anche usare [le reti neurali per classificare i dati](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), ma questo esula dall'ambito di questa lezione. - -### Con quale classificatore andare? - -Quale classificatore si dovrebbe scegliere? Spesso, scorrerne diversi e cercare un buon risultato è un modo per testare. Scikit-learn offre un [confronto fianco](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) a fianco su un insieme di dati creato, confrontando KNeighbors, SVC in due modi, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB e QuadraticDiscrinationAnalysis, mostrando i risultati visualizzati: - -![confronto di classificatori](../images/comparison.png) -> Grafici generati sulla documentazione di Scikit-learn - -> AutoML risolve questo problema in modo ordinato eseguendo questi confronti nel cloud, consentendo di scegliere l'algoritmo migliore per i propri dati. Si può provare [qui](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) - -### Un approccio migliore - -Un modo migliore che indovinare a caso, tuttavia, è seguire le idee su questo [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) scaricabile. Qui si scopre che, per questo problema multiclasse, si dispone di alcune scelte: - -![cheatsheet per problemi multiclasse](../images/cheatsheet.png) -> Una sezione dell'Algorithm Cheat Sheet di Microsoft, che descrive in dettaglio le opzioni di classificazione multiclasse - -✅ Scaricare questo cheat sheet, stamparlo e appenderlo alla parete! - -### Motivazione - -Si prova a ragionare attraverso diversi approcci dati i vincoli presenti: - -- **Le reti neurali sono troppo pesanti**. Dato l'insieme di dati pulito, ma minimo, e il fatto che si sta eseguendo l'addestramento localmente tramite notebook, le reti neurali sono troppo pesanti per questo compito. -- **Nessun classificatore a due classi**. Non si usa un classificatore a due classi, quindi questo esclude uno contro tutti. -- L'**albero decisionale o la regressione logistica potrebbero funzionare**. Potrebbe funzionare un albero decisionale o una regressione logistica per dati multiclasse. -- **Gli alberi decisionali potenziati multiclasse risolvono un problema diverso**. L'albero decisionale potenziato multiclasse è più adatto per attività non parametriche, ad esempio attività progettate per costruire classifiche, quindi non è utile in questo caso. - -### Utilizzo di Scikit-learn - -Si userà Scikit-learn per analizzare i dati. Tuttavia, ci sono molti modi per utilizzare la regressione logistica in Scikit-learn. Dare un'occhiata ai [parametri da passare](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -Essenzialmente ci sono due importanti parametri `multi_class` e `solver`, che occorre specificare, quando si chiede a Scikit-learn di eseguire una regressione logistica. Il valore `multi_class` si applica un certo comportamento. Il valore del risolutore è quale algoritmo utilizzare. Non tutti i risolutori possono essere associati a tutti i valori `multi_class` . - -Secondo la documentazione, nel caso multiclasse, l'algoritmo di addestramento: - -- **Utilizza lo schema one-vs-rest (OvR)** - uno contro tutti, se l'opzione `multi_class` è impostata su `ovr` -- **Utilizza la perdita di entropia incrociata**, se l 'opzione `multi_class` è impostata su `multinomial`. (Attualmente l'opzione multinomiale è supportata solo dai solutori 'lbfgs', 'sag', 'saga' e 'newton-cg')." - -> 🎓 Lo 'schema' qui può essere 'ovr' (one-vs-rest) - uno contro tutti - o 'multinomiale'. Poiché la regressione logistica è realmente progettata per supportare la classificazione binaria, questi schemi consentono di gestire meglio le attività di classificazione multiclasse. [fonte](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) - -> 🎓 Il 'solver' è definito come "l'algoritmo da utilizzare nel problema di ottimizzazione". [fonte](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -Scikit-learn offre questa tabella per spiegare come i risolutori gestiscono le diverse sfide presentate da diversi tipi di strutture dati: - -![risolutori](../images/solvers.png) - -## Esercizio: dividere i dati - -Ci si può concentrare sulla regressione logistica per la prima prova di addestramento poiché di recente si è appreso di quest'ultima in una lezione precedente. -Dividere i dati in gruppi di addestramento e test chiamando `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) -``` - -## Esercizio: applicare la regressione logistica - -Poiché si sta utilizzando il caso multiclasse, si deve scegliere quale _schema_ utilizzare e quale _solutore_ impostare. Usare LogisticRegression con un'impostazione multiclasse e il solutore **liblinear** da addestrare. - -1. Creare una regressione logistica con multi_class impostato su `ovr` e il risolutore impostato su `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)) - ``` - - ✅ Provare un risolutore diverso come `lbfgs`, che è spesso impostato come predefinito - - > Nota, usare la funzione [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) di Pandas per appiattire i dati quando necessario. - - La precisione è buona oltre l'**80%**! - -1. Si può vedere questo modello in azione testando una riga di dati (#50): - - ```python - print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') - print(f'cuisine: {y_test.iloc[50]}') - ``` - - Il risultato viene stampato: - - ```output - ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') - cuisine: indian - ``` - - ✅ Provare un numero di riga diverso e controllare i risultati - -1. Scavando più a fondo, si può verificare l'accuratezza di questa previsione: - - ```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() - ``` - - Il risultato è stampato: la cucina indiana è la sua ipotesi migliore, con buone probabilità: - - | | 0 | | | | | | | | | | | | | | | | | | | | | - | ---------: | -------: | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | - | indiano | 0,715851 | | | | | | | | | | | | | | | | | | | | | - | cinese | 0.229475 | | | | | | | | | | | | | | | | | | | | | - | Giapponese | 0,029763 | | | | | | | | | | | | | | | | | | | | | - | Coreano | 0.017277 | | | | | | | | | | | | | | | | | | | | | - | thai | 0.007634 | | | | | | | | | | | | | | | | | | | | | - - ✅ Si è in grado di spiegare perché il modello è abbastanza sicuro che questa sia una cucina indiana? - -1. Ottenere maggiori dettagli stampando un rapporto di classificazione, come fatto nelle lezioni di regressione: - - ```python - y_pred = model.predict(X_test) - print(classification_report(y_test,y_pred)) - ``` - - | precisione | recall | punteggio f1 | supporto | | | | | | | | | | | | | | | | | | | - | --------------- | ------ | ------------ | -------- | ---- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | - | cinese | 0,73 | 0,71 | 0,72 | 229 | | | | | | | | | | | | | | | | | | - | indiano | 0,91 | 0,93 | 0,92 | 254 | | | | | | | | | | | | | | | | | | - | Giapponese | 0.70 | 0,75 | 0,72 | 220 | | | | | | | | | | | | | | | | | | - | Coreano | 0,86 | 0,76 | 0,81 | 242 | | | | | | | | | | | | | | | | | | - | thai | 0,79 | 0,85 | 0.82 | 254 | | | | | | | | | | | | | | | | | | - | accuratezza | 0,80 | 1199 | | | | | | | | | | | | | | | | | | | | - | macro media | 0,80 | 0,80 | 0,80 | 1199 | | | | | | | | | | | | | | | | | | - | Media ponderata | 0,80 | 0,80 | 0,80 | 1199 | | | | | | | | | | | | | | | | | | - -## 🚀 Sfida - -In questa lezione, sono stati utilizzati dati puliti per creare un modello di apprendimento automatico in grado di prevedere una cucina nazionale basata su una serie di ingredienti. Si prenda del tempo per leggere le numerose opzioni fornite da Scikit-learn per classificare i dati. Approfondire il concetto di "risolutore" per capire cosa succede dietro le quinte. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/?loc=it) -## Revisione e Auto Apprendimento - -Approfondire un po' la matematica alla base della regressione logistica in [questa lezione](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) -## Compito - -[Studiare i risolutori](assignment.it.md) diff --git a/4-Classification/2-Classifiers-1/translations/README.ko.md b/4-Classification/2-Classifiers-1/translations/README.ko.md deleted file mode 100644 index e0c247aa..00000000 --- a/4-Classification/2-Classifiers-1/translations/README.ko.md +++ /dev/null @@ -1,243 +0,0 @@ -# 요리 classifiers 1 - -이 강의에서는, 요리에 대하여 균형적이고, 깔끔한 데이터로 채운 저번 강의에서 저장했던 데이터셋을 사용합니다. - -다양한 classifiers와 데이터셋을 사용해서 _재료 그룹 기반으로 주어진 국민 요리를 예측_ 합니다. 이러는 동안, classification 작업에 알고리즘을 활용할 몇 방식에 대해 자세히 배워볼 예정입니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) - -## 준비하기 - -[Lesson 1](../../1-Introduction/README.md)을 완료했다고 가정하고, 4가지 강의의 최상단 `/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. 훈련을 위한 2가지 데이터프레임으로 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. `drop()`을 불러서 `Unnamed: 0` 열과 `cuisine` 열을 드랍합니다. 훈련 가능한 features로 남긴 데이터를 저장합니다: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - features는 이렇게 보입니다: - -| | 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 | - -지금부터 모델을 훈련할 준비가 되었습니다! - -## classifier 고르기 - -이제 데이터를 정리하고 훈련할 준비가 되었으므로, 작업에 사용할 알고리즘을 정해야 합니다. - -Scikit-learn은 Supervised Learning 아래에 classification 그룹으로 묶여있고, 이 카테고리에서 다양한 분류 방식을 찾을 수 있습니다. [The variety](https://scikit-learn.org/stable/supervised_learning.html)는 처음에 꽤 당황스럽습니다. 다음 방식에 모든 classification 기술이 포함되어 있습니다: - -- Linear 모델 -- Support Vector Machines -- Stochastic Gradient Descent -- Nearest Neighbors -- Gaussian Processes -- Decision Trees -- Ensemble methods (voting Classifier) -- Multiclass 와 multioutput algorithms (multiclass 와 multilabel classification, multiclass-multioutput classification) - -> [neural networks to classify data](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification)를 사용할 수 있지만, 이 강의의 범위를 벗어납니다. - -### 어떠한 classifier 사용하나요? - -그래서, 어떤 classifier를 골라야 하나요? 자주, 여러가지로 실행하며 좋은 결과를 보는 게 테스트 방식입니다. Scikit-learn은 KNeighbors, SVC 두 방식으로 GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB 그리고 QuadraticDiscrinationAnalysis 와 비교하여 만든 데이터셋에 대한 [side-by-side comparison](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html)을 제공하고, 시각화된 결과를 보입니다: - -![comparison of classifiers](../images/comparison.png) -> Plots generated on Scikit-learn's documentation - -> AutoML은 클라우드에서 comparisons을 실행해서 이러한 문제를 깔끔하게 해결했으며, 데이터에 적당한 알고리즘을 고를 수 있습니다. [here](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)에서 시도해봅니다. - -### 더 괜찮은 접근법 - -그러나, 성급히 추측하기보다 더 괜찮은 방식으로, 내려받을 수 있는 [ML Cheat sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott)의 아이디어를 따르는 것입니다. 여기, multiclass 문제에 대하여, 몇 선택 사항을 볼 수 있습니다: - -![cheatsheet for multiclass problems](../images/cheatsheet.png) -> multiclass classification 옵션을 잘 설명하는, Microsoft의 알고리즘 치트 시트의 섹션 - -✅ 치트 시트를 내려받고, 출력해서, 벽에 겁니다! - -### 추리하기 - -만약 주어진 제약 사항을 감안해서 다른 접근 방식으로 추론할 수 있는지 봅니다: - -- **Neural networks 매우 무겁습니다**. 깔끔하지만, 최소 데이터셋과, 노트북으로 로컬에서 훈련했다는 사실을 보면, 이 작업에서 neural networks는 매우 무겁습니다. -- **two-class classifier 아닙니다**. one-vs-all를 빼기 위해서, two-class classifier를 사용하지 않습니다. -- **Decision tree 또는 logistic regression 작동할 수 있습니다**. decision tree 또는, multiclass를 위한 logistic regression이 작동할 수 있습니다. -- **Multiclass Boosted Decision Trees 다른 문제를 해결합니다**. multiclass boosted decision tree는 nonparametric 작업에 가장 적당합니다. 예시로. 랭킹을 만드려고 디자인 했으므로, 유용하지 않습니다. - -### Scikit-learn 사용하기 - -Scikit-learn으로 데이터를 분석할 예정입니다. 그러나, Scikit-learn에는 logistic regression을 사용할 많은 방식이 존재합니다. [parameters to pass](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression)를 찾아봅니다. - -기본적으로 Scikit-learn에서 logistic regression을 하도록 요청할 때 지정할 필요가 있는, `multi_class` 와 `solver` 중요한 두 개의 파라미터가 있습니다. `multi_class` 값은 특정 동작을 적용합니다. solver의 값은 사용할 알고리즘입니다. 모든 solver가 모든 `multi_class` 값들을 연결하지 않습니다. - -문서에 따르면, multiclass 케이스인 경우, 훈련 알고리즘은 아래와 같습니다: - -- **one-vs-rest (OvR) 스키마를 사용합니다**, `multi_class` 옵션을 `ovr`로 한 경우 -- **cross-entropy loss를 사용합니다**, `multi_class` 옵션을 `multinomial`로 한 경우. (현재 `multinomial` 옵션은 ‘lbfgs’, ‘sag’, ‘saga’ 그리고 ‘newton-cg’ solvers에서 지원됩니다.)" - -> 🎓 'scheme'는 여기에서 'ovr' (one-vs-rest) 혹은 'multinomial'일 것입니다. logistic regression은 binary classification을 잘 지원할 수 있도록 디자인 되었으므로, 스키마를 사용하면 multiclass classification 작업을 잘 핸들링할 수 있습니다. [source](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) - -> 🎓 'solver'는 "the algorithm to use in the optimization problem"로 정의됩니다. [source](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -Scikit-learn은 solvers가 다양한 데이터 구조에 제시된 다른 문제 방식을 설명하고자 이 표를 제공합니다: - -![solvers](../images/solvers.png) - -## 연습 - 데이터 나누기 - -지난 강의에서 최근에 배웠으므로 첫 훈련 시도에 대한 logistic regression으로 집중할 수 있습니다. -`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) -``` - -## 연습 - logistic regression 적용하기 - -multiclass 케이스로, 사용할 _scheme_ 와 설정할 _solver_ 를 선택해야 합니다. 훈련할 multiclass 세팅과 **liblinear** solver와 함께 LogisticRegression을 사용합니다. - -1. multi_class를 `ovr`로 설정하고 solver도 `liblinear`로 설정해서 logistic regression을 만듭니다: - - ```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`처럼 다른 solver를 시도합니다 - - > 노트, 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. regression 강의에서 했던 행동처럼, classification 리포트를 출력해서 자세한 정보를 얻습니다: - - ```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 | - -## 🚀 도전 - -이 강의에서, 정리된 데이터로 재료의 시리즈를 기반으로 국민 요리를 예측할 수 있는 머신러닝 모델을 만들었습니다. 시간을 투자해서 Scikit-learn이 데이터를 분류하기 위해 제공하는 다양한 옵션을 읽어봅니다. 무대 뒤에서 생기는 일을 이해하기 위해서 'solver'의 개념을 깊게 파봅니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) -## 검토 & 자기주도 학습 - -[this lesson](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf)에서 logistic regression 뒤의 수학에 대해서 더 자세히 파봅니다. - -## 과제 - -[Study the solvers](../assignment.md) diff --git a/4-Classification/2-Classifiers-1/translations/README.pt-br.md b/4-Classification/2-Classifiers-1/translations/README.pt-br.md deleted file mode 100644 index 21d7dc01..00000000 --- a/4-Classification/2-Classifiers-1/translations/README.pt-br.md +++ /dev/null @@ -1,243 +0,0 @@ -# Classificadores de culinária 1 - -Nesta lição, você usará o _dataset_ balanceado e tratado que salvou da última lição cheio de dados sobre cozinhas diferentes. - -Você usará este _dataset_ com uma variedade de classificadores para _prever uma determinada culinária nacional com base em um grupo de ingredientes_. Enquanto isso, você aprenderá mais sobre algumas das maneiras como os algoritmos podem ser aproveitados para tarefas de classificação. - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21?loc=ptbr) - -# Preparação - -Assumindo que você completou [lição 1](../../1-Introduction/translations/README.pt-br.md), certifique-se de que existe o arquivo _cleaned_cuisines.csv_ na pasta `/data`, pois será usado para todas as lições de classificação. - -## Exercício - prevendo uma culinária nacional - -1. Usando o _notebook.ipynb_ que está na pasta desta lição, importe a biblioteca Pandas: - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../../data/cleaned_cuisines.csv") - cuisines_df.head() - ``` - - Os dados estarão mais ou menos assim: - -| | 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. Agora importe algumas bibliotecas: - - ```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. Divida as coordenadas X e y em dois _dataframes_ para treinamento. `cuisine` pode ser o rótulo do _dataframe_: - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - O resultado será mais ou menos assim: - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. Remova as colunas `Unnamed: 0` e `cuisine`, chamando o método `drop()`. Salve o restante dos dados como características treináveis: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - As características serão mais ou menos assim: - -| | 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 | - -Já podemos treinar nosso modelo! - -## Escolhendo um classificador - -Agora que seus dados estão tratados e prontos para treinamento, você deve decidir qual algoritmo usar para o trabalho. - -O Scikit-learn agrupa classificação em apredizagem supervisionada e, nessa categoria, você encontrará muitas maneiras de classificar. [A variedade](https://scikit-learn.org/stable/supervised_learning.html) é bastante desconcertante à primeira vista. Todos os métodos a seguir incluem técnicas de classificação: - -- Modelos Lineares -- Máquinas de vetor de suporte (SVM) -- Descida do gradiente estocástico (SGD) -- Vizinhos mais próximos -- Processos Gaussianos -- Árvores de decisão -- Métodos de conjunto (classificador de votação, _ensemble_) -- Algoritmos de multiclasse e saída múltipla (classificação multiclasse e multilabel, classificação multiclasse-saída múltipla) - -> Você também pode usar [redes neurais para classificar dados](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), mas isso está fora do escopo desta lição. - -### Qual classificador escolher? - -Então, qual classificador você deve escolher? Freqüentemente, percorrer vários e procurar um bom resultado é uma forma de testar. Scikit-learn oferece uma [comparação lado a lado](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) em um _dataset_ criado, comparando com KNeighbors, SVC de duas maneiras, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB e QuadraticDiscrinationAnalysis, mostrando os resultados visualizados: - -![comparação de classificadores](../images/comparison.png) -> Plots gerados na documentação do Scikit-learn - -> O AutoML resolve esse problema perfeitamente executando essas comparações na nuvem, permitindo que você escolha o melhor algoritmo para seus dados. Teste-o [aqui](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott). - -### Uma abordagem melhor - -Melhor do que adivinhar, é seguir as ideias nesta [planilha com dicas de ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Aqui, descobrimos que para o nosso problema multiclasse, temos algumas opções: - -![planilha com dicas para problemas multiclasse](../images/cheatsheet.png) -> Uma planilha com dicas de algoritmo da Microsoft, detalhando as opções de classificação multiclasse. - -✅ Baixe esta planilha, imprima e pendure na parede! - -### Raciocinando - -Vamos ver se podemos raciocinar através de diferentes abordagens, dadas as restrições que temos: - -- **Redes neurais são muito pesadas**. Dado que nosso _dataset_ está tratado mas é pequeno, e o fato de estarmos executando o treinamento localmente por meio de _notebooks_, redes neurais são muito pesadas para essa tarefa. -- **Nenhum classificador de duas classes**. Não usamos um classificador de duas classes, isso exclui o esquema um versus todos (one-vs-all). -- **Árvore de decisão ou regressão logística podem funcionar**. Árvore de decisão pode funcionar, ou regressão logística para dados multiclasse. -- **Árvores de decisão impulsionadas à multiclasse resolvem um problema diferente**. Árvore de decisão impulsionada à multiclasse é mais adequada para tarefas não paramétricas, por exemplo, tarefas destinadas a construir _rankings_, por isso não são úteis para nós. - -### Usando Scikit-learn - -Usaremos o Scikit-learn para analisar nossos dados. No entanto, existem muitas maneiras de usar a regressão logística no Scikit-learn. Dê uma olhada nos [possíveis parâmetros](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -Essencialmente, existem dois parâmetros importantes - `multi_class` e `solver` -, que precisamos especificar quando pedimos ao Scikit-learn para realizar uma regressão logística. O valor de `multi_class` aplica um certo comportamento. O valor de `solver` é o algoritmo a ser usado. Nem todos os valores de `solver` podem ser combinados com os valores de `multi_class`. - -De acordo com a documentação, no caso de multiclasse, o algoritmo de treinamento: - -- **Usa o esquema one-vs-rest (OvR, ou "um contra o resto")**, se a opção `multi_class` estiver definida como `ovr`. -- **Usa a perda de entropia cruzada**, se a opção `multi_class` estiver definida como `multinomial` (atualmente, a opção `multinomial` é compatível apenas com os "_solvers_" (ou solucionadores): `lbfgs`, `sag`, `saga` e `newton-cg`). - -> 🎓 O 'esquema' aqui pode ser 'ovr' ou 'multinomial'. Uma vez que a regressão logística é realmente projetada para oferecer suporte à classificação binária, esses esquemas permitem um melhor tratamento das tarefas de classificação multiclasse. [Fonte](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/). - -> 🎓 O 'solucionador' é definido como "o algoritmo a ser usado no problema de otimização". [Fonte](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -O Scikit-learn oferece esta tabela para explicar como os solucionadores lidam com diferentes desafios apresentados por diferentes tipos de estruturas de dados: - -![Solucionadores](../images/solvers.png) - -## Exercício - dividindo os dados - -Podemos nos concentrar na regressão logística para nosso primeiro teste de treinamento, uma vez que você aprendeu recentemente sobre o último em uma lição anterior. -Divida seus dados em grupos de treinamento e teste chamando o método `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) -``` - -## Exercício - aplicando regressão logística - -Já que estamos usando um caso multiclasse, você precisa escolher qual _scheme_ usar e qual _solver_ definir. Use LogisticRegression com uma configuração multiclasse e o solucionador **liblinear** para treinar. - -1. Crie uma regressão logística com multi_class definido como `ovr` e solver definido como `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)) - ``` - - ✅ Teste diferentes _solvers_ como o `lbfgs`, que já é definido como padrão. - - > Use a função Pandas chamada [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) para nivelar seus dados quando necessário. - - A acurácia está boa quando é maior que **80%**! - -1. Você pode ver este modelo em ação testando dessa forma (linha #50): - - ```python - print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') - print(f'cuisine: {y_test.iloc[50]}') - ``` - - O resultado será: - - ```output - ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') - cuisine: indian - ``` - - ✅ Tente um número de linha diferente e verifique os resultados. - -1. Indo mais fundo, você pode verificar a precisão desta previsão: - - ```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() - ``` - - A culinária indiana é seu melhor palpite, com boa probabilidade: - - | | 0 | - | -------: | -------: | - | indian | 0.715851 | - | chinese | 0.229475 | - | japanese | 0.029763 | - | korean | 0.017277 | - | thai | 0.007634 | - - ✅ Você pode explicar por que a modelo tem certeza de que se trata de uma culinária indiana? - -1. Obtenha mais detalhes imprimindo um relatório de classificação, como você fez nas aulas de regressão: - - ```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 | - -## 🚀Desafio - -Nesta lição, você usou seus dados para construir um modelo de aprendizado de máquina que pode prever uma culinária nacional com base em uma série de ingredientes. Reserve algum tempo para ler as opções que o Scikit-learn oferece para classificar dados. Aprofunde-se no conceito de 'solucionador' para entender o que acontece nos bastidores. - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Aprofunde-se um pouco mais na matemática por trás da regressão logística [nesta lição](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf). - -## Tarefa - -[Estudando solucionadores](assignment.pt-br.md). diff --git a/4-Classification/2-Classifiers-1/translations/README.tr.md b/4-Classification/2-Classifiers-1/translations/README.tr.md deleted file mode 100644 index 4a5ffde7..00000000 --- a/4-Classification/2-Classifiers-1/translations/README.tr.md +++ /dev/null @@ -1,241 +0,0 @@ -# Mutfak sınıflandırıcıları 1 - -Bu derste, mutfaklarla ilgili dengeli ve temiz veriyle dolu, geçen dersten kaydettiğiniz veri setini kullanacaksınız. - -Bu veri setini çeşitli sınıflandırıcılarla _bir grup malzemeyi baz alarak verilen bir ulusal mutfağı öngörmek_ için kullanacaksınız. Bunu yaparken, sınıflandırma görevleri için algoritmaların leveraj edilebileceği yollardan bazıları hakkında daha fazla bilgi edineceksiniz. - -## [Ders öncesi kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/?loc=tr) -# Hazırlık - -[Birinci dersi](../../1-Introduction/README.md) tamamladığınızı varsayıyoruz, dolayısıyla bu dört ders için _cleaned_cuisines.csv_ dosyasının kök `/data` klasöründe var olduğundan emin olun. - -## Alıştırma - ulusal bir mutfağı öngörün - -1. Bu dersin _notebook.ipynb_ dosyasında çalışarak, Pandas kütüphanesiyle beraber o dosyayı da alın: - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") - cuisines_df.head() - ``` - - Veri şöyle görünüyor: - -| | 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. Şimdi, birkaç kütüphane daha alın: - - ```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 ve y koordinatlarını eğitme için iki veri iskeletine bölün. `cuisine` etiket veri iskeleti olabilir: - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - Şöyle görünecek: - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. `Unnamed: 0` ve `cuisine` sütunlarını, `drop()` fonksiyonunu çağırarak temizleyin. Kalan veriyi eğitilebilir öznitelikler olarak kaydedin: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - Öznitelikleriniz şöyle görünüyor: - -| 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 | -| 1 | 1 | 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 | -| 3 | 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 | - -Şimdi modelinizi eğitmek için hazırsınız! - -## Sınıflandırıcınızı seçme - -Veriniz temiz ve eğitme için hazır, şimdi bu iş için hangi algoritmanın kullanılması gerektiğine karar vermelisiniz. - -Scikit-learn, sınıflandırmayı gözetimli öğrenme altında grupluyor. Bu kategoride sınıflandırma için birçok yöntem görebilirsiniz. [Çeşitlilik](https://scikit-learn.org/stable/supervised_learning.html) ilk bakışta oldukça şaşırtıcı. Aşağıdaki yöntemlerin hepsi sınıflandırma yöntemlerini içermektedir: - -- Doğrusal Modeller -- Destek Vektör Makineleri -- Stokastik Gradyan İnişi -- En Yakın Komşu -- Gauss Süreçleri -- Karar Ağaçları -- Topluluk Metotları (Oylama Sınıflandırıcısı) -- Çok sınıflı ve çok çıktılı algoritmalar (çok sınıflı ve çok etiketli sınıflandırma, çok sınıflı-çok çıktılı sınıflandırma) - -> [Verileri sınıflandırmak için sinir ağlarını](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification) da kullanabilirsiniz, ancak bu, bu dersin kapsamı dışındadır. - -### Hangi sınıflandırıcıyı kullanmalı? - -Şimdi, hangi sınıflandırıcıyı seçmelisiniz? Genellikle, birçoğunu gözden geçirmek ve iyi bir sonuç aramak deneme yollarından biridir. Scikit-learn, oluşturulmuş bir veri seti üzerinde KNeighbors, iki yolla SVC, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ve QuadraticDiscrinationAnalysis karşılaştırmaları yapan ve sonuçları görsel olarak gösteren bir [yan yana karşılaştırma](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) sunar: - -![sınıflandırıcıların karşılaştırılması](../images/comparison.png) -> Grafikler Scikit-learn dokümantasyonlarında oluşturulmuştur. - -> AutoML, bu karşılaştırmaları bulutta çalıştırarak bu problemi muntazam bir şekilde çözer ve veriniz için en iyi algoritmayı seçmenizi sağlar. [Buradan](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) deneyin. - -### Daha iyi bir yaklaşım - -Böyle tahminlerle çözmekten daha iyi bir yol ise, indirilebilir [ML Kopya kağıdı](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) içindeki fikirlere bakmaktır. Burada, bizim çok sınıflı problemimiz için bazı seçenekler olduğunu görüyoruz: - -![çok sınıflı problemler için kopya kağıdı](../images/cheatsheet.png) -> Microsoft'un Algoritma Kopya Kağıdı'ndan, çok sınıflı sınıflandırma seçeneklerini detaylandıran bir bölüm - -:white_check_mark: Bu kopya kağıdını indirin, yazdırın ve duvarınıza asın! - -### Akıl yürütme - -Elimizdeki kısıtlamalarla farklı yaklaşımlar üzerine akıl yürütelim: - -- **Sinir ağları çok ağır**. Temiz ama minimal veri setimizi ve eğitimi not defterleriyle yerel makinelerde çalıştırdığımızı göz önünde bulundurursak, sinir ağları bu görev için çok ağır oluyor. -- **İki sınıflı sınıflandırıcısı yok**. İki sınıflı sınıflandırıcı kullanmıyoruz, dolayısıyla bire karşı hepsi (one-vs-all) yöntemi eleniyor. -- **Karar ağacı veya lojistik regresyon işe yarayabilirdi**. Bir karar ağacı veya çok sınıflı veri için lojistik regresyon işe yarayabilir. -- **Çok Sınıf Artırmalı Karar Ağaçları farklı bir problemi çözüyor**. Çok sınıf artırmalı karar ağacı, parametrik olmayan görevler için en uygunu, mesela sıralama (ranking) oluşturmak için tasarlanan görevler. Yani, bizim için kullanışlı değil. - -### Scikit-learn kullanımı - -Verimizi analiz etmek için Scikit-learn kullanacağız. Ancak, Scikit-learn içerisinde lojistik regresyonu kullanmanın birçok yolu var. [Geçirilecek parametreler](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression) göz atın. - -Aslında, Scikit-learn'den lojistik regresyon yapmasını beklediğimizde belirtmemiz gereken `multi_class` ve `solver` diye iki önemli parametre var. `multi_class` değeri belli bir davranış uygular. Çözücünün değeri, hangi algoritmanın kullanılacağını gösterir. Her çözücü her `multi_class` değeriyle eşleştirilemez. - -Dokümanlara göre, çok sınıflı durumunda eğitme algoritması: - -- Eğer `multi_class` seçeneği `ovr` olarak ayarlanmışsa, **bire karşı diğerleri (one-vs-rest, OvR) şemasını kullanır** -- Eğer `multi_class` seçeneği `multinomial` olarak ayarlanmışsa, **çapraz düzensizlik yitimini/kaybını kullanır**. (Güncel olarak `multinomial` seçeneği yalnızca ‘lbfgs’, ‘sag’, ‘saga’ ve ‘newton-cg’ çözücüleriyle destekleniyor.) - -> :mortar_board: Buradaki 'şema' ya 'ovr' (one-vs-rest, yani bire karşı diğerleri) ya da 'multinomial' olabilir. Lojistik regresyon aslında ikili sınıflandırmayı desteklemek için tasarlandığından, bu şemalar onun çok sınıflı sınıflandırma görevlerini daha iyi ele alabilmesini sağlıyor. [kaynak](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) - -> :mortar_board: 'Çözücü', "eniyileştirme probleminde kullanılacak algoritma" olarak tanımlanır. [kaynak](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression) - -Scikit-learn, çözücülerin, farklı tür veri yapıları tarafından sunulan farklı meydan okumaları nasıl ele aldığını açıklamak için bu tabloyu sunar: - -![çözücüler](../images/solvers.png) - -## Alıştırma - veriyi bölün - -İkincisini önceki derte öğrendiğinizden, ilk eğitme denememiz için lojistik regresyona odaklanabiliriz. -`train_test_split()` fonksiyonunu çağırarak verilerinizi eğitme ve sınama gruplarına bölün: - -```python -X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) -``` - -## Alıştırma - lojistik regresyon uygulayın - -Çok sınıflı durumu kullandığınız için, hangi _şemayı_ kullanacağınızı ve hangi _çözücüyü_ ayarlayacağınızı seçmeniz gerekiyor. Eğitme için, bir çok sınıflı ayarında LogisticRegression ve **liblinear** çözücüsünü kullanın. - -1. multi_class'ı `ovr` ve solver'ı `liblinear` olarak ayarlayarak bir lojistik regresyon oluşturun: - - ```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)) - ``` - - :white_check_mark: Genelde varsayılan olarak ayarlanan `lbfgs` gibi farklı bir çözücü deneyin. - - > Not olarak, gerektiğinde verinizi düzleştirmek için Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) fonksiyonunu kullanın. - - Doğruluk **%80** üzerinde iyidir! - -1. Bir satır veriyi (#50) sınayarak bu modeli eylem halinde görebilirsiniz: - - ```python - print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') - print(f'cuisine: {y_test.iloc[50]}') - ``` - - Sonuç bastırılır: - - ```output - ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') - cuisine: indian - ``` - - :white_check_mark: Farklı bir satır sayısı deneyin ve sonuçları kontrol edin - -1. Daha derinlemesine inceleyerek, bu öngörünün doğruluğunu kontrol edebilirsiniz: - - ```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() - ``` - - Sonuç bastırılır - Hint mutfağı iyi olasılıkla en iyi öngörü: - - | | 0 | - | -------: | -------: | - | indian | 0.715851 | - | chinese | 0.229475 | - | japanese | 0.029763 | - | korean | 0.017277 | - | thai | 0.007634 | - - :while_check_mark: Modelin, bunun bir Hint mutfağı olduğundan nasıl emin olduğunu açıklayabilir misiniz? - -1. Regresyon derslerinde yaptığınız gibi, bir sınıflandırma raporu bastırarak daha fazla detay elde edin: - - ```python - y_pred = model.predict(X_test) - print(classification_report(y_test,y_pred)) - ``` - - | | precision | recall | f1-score | support | - | ------------ | --------- | ------ | -------- | ------- | - | chinese | 0.73 | 0.71 | 0.72 | 229 | - | indian | 0.91 | 0.93 | 0.92 | 254 | - | japanese | 0.70 | 0.75 | 0.72 | 220 | - | korean | 0.86 | 0.76 | 0.81 | 242 | - | thai | 0.79 | 0.85 | 0.82 | 254 | - | accuracy | 0.80 | 1199 | | | - | macro avg | 0.80 | 0.80 | 0.80 | 1199 | - | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | - -## :rocket: Meydan Okuma - -Bu derste, bir grup malzemeyi baz alarak bir ulusal mutfağı öngörebilen bir makine öğrenimi modeli oluşturmak için temiz verinizi kullandınız. Scikit-learn'ün veri sınıflandırmak için sağladığı birçok yöntemi okumak için biraz vakit ayırın. Arka tarafta neler olduğunu anlamak için 'çözücü' kavramını derinlemesine inceleyin. - -## [Ders sonrası kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/?loc=tr) - -## Gözden geçirme & kendi kendine çalışma - -[Bu deste](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) lojistik regresyonun arkasındaki matematiği derinlemesine inceleyin. -## Ödev - -[Çözücüleri çalışın](assignment.tr.md) diff --git a/4-Classification/2-Classifiers-1/translations/README.zh-cn.md b/4-Classification/2-Classifiers-1/translations/README.zh-cn.md deleted file mode 100644 index 4add5d4f..00000000 --- a/4-Classification/2-Classifiers-1/translations/README.zh-cn.md +++ /dev/null @@ -1,241 +0,0 @@ -# 菜品分类器 1 - -本节课程将使用你在上一个课程中所保存的全部经过均衡和清洗的菜品数据。 - -你将使用此数据集和各种分类器,_根据一组配料预测这是哪一国家的美食_。在此过程中,你将学到更多用来权衡分类任务算法的方法 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) - -# 准备工作 - -假如你已经完成了[课程 1](../../1-Introduction/translations/README.zh-cn.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(译者注:代表标签数据)两个 dataframe。首先可将 `cuisine` 列的数据单独保存为的一个 dataframe 作为标签(label)。 - - ```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. 调用 `drop()` 方法将 `Unnamed: 0` 和 `cuisine` 列删除,并将余下的数据作为可以用于训练的特证(feature)数据: - - ```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 | - | 1 | 1 | 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 | - | 3 | 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 | - -现在,你已经准备好可以开始训练你的模型了! - -## 选择你的分类器 - -你的数据已经清洗干净并已经准备好可以进行训练了,现在需要决定你想要使用的算法来完成这项任务。 - -Scikit_learn 将分类任务归在了监督学习类别中,在这个类别中你可以找到很多可以用来分类的方法。乍一看上去,有点[琳琅满目](https://scikit-learn.org/stable/supervised_learning.html)。以下这些算法都可以用于分类: - -- 线性模型(Linear Models) -- 支持向量机(Support Vector Machines) -- 随机梯度下降(Stochastic Gradient Descent) -- 最近邻(Nearest Neighbors) -- 高斯过程(Gaussian Processes) -- 决策树(Decision Trees) -- 集成方法(投票分类器)(Ensemble methods(voting classifier)) -- 多类别多输出算法(多类别多标签分类,多类别多输出分类)(Multiclass and multioutput algorithms (multiclass and multilabel classification, multiclass-multioutput classification)) - -> 你也可以使用[神经网络来分类数据](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), 但这对于本课程来说有点超纲了。 - -### 如何选择分类器? - -那么,你应该如何从中选择分类器呢?一般来说,可以选择多个分类器并对比他们的运行结果。Scikit-learn 提供了各种算法(包括 KNeighbors、 SVC two ways、 GaussianProcessClassifier、 DecisionTreeClassifier、 RandomForestClassifier、 MLPClassifier、 AdaBoostClassifier、 GaussianNB 以及 QuadraticDiscrinationAnalysis)的[对比](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html),并且将结果进行了可视化的展示: - -![各分类器比较](../images/comparison.png) -> 图表来源于 Scikit-learn 的官方文档 - -> AutoML 通过在云端运行这些算法并进行了对比,非常巧妙地解决的算法选择的问题,能帮助你根据数据集的特点来选择最佳的算法。试试点击[这里](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott)了解更多。 - -### 另外一种效果更佳的分类器选择方法 - -比起无脑地猜测,你可以下载这份[机器学习速查表(cheatsheet)](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott)。这里面将各算法进行了比较,能更有效地帮助我们选择算法。根据这份速查表,我们可以找到要完成本课程中涉及的多类型的分类任务,可以有以下这些选择: - -![多类型问题速查表](../images/cheatsheet.png) -> 微软算法小抄中部分关于多类型分类任务可选算法 - -✅ 下载这份小抄,并打印出来,挂在你的墙上吧! - -### 选择的流程 - -让我们根据所有限制条件依次对各种算法的可行性进行判断: - -- **神经网络(Neural Network)太过复杂了**。我们的数据很清晰但数据量比较小,此外我们是通过 notebook 在本地进行训练的,神经网络对于这个任务来说过于复杂了。 -- **二分类法(two-class classifier)是不可行的**。我们不能使用二分类法,所以这就排除了一对多(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)。 - -当我们需要 Scikit-learn 进行逻辑回归运算时,`multi_class` 以及 `solver`是最重要的两个参数,因此我们需要特别说明一下。 `multi_class` 是分类方式选择参数,而`solver`优化算法选择参数。值得注意的是,并不是所有的 solvers 都可以与`multi_class`参数进行匹配的。 - -根据官方文档,在多类型分类问题中: - -- 当 `multi_class` 被设置为 `ovr` 时,将使用 **“一对其余”(OvR)策略(scheme)**。 -- 当 `multi_class` 被设置为 `multinomial` 时,则使用的是**交叉熵损失(cross entropy loss)** 作为损失函数。(注意,目前`multinomial`只支持‘lbfgs’, ‘sag’, ‘saga’以及‘newton-cg’等 solver 作为损失函数的优化方法) - -> 🎓 在本课程的任务中“scheme”可以是“ovr(one-vs-rest)”也可以是“multinomial”。因为逻辑回归本来是设计来用于进行二分类任务的,这两个 scheme 参数的选择都可以使得逻辑回归很好的完成多类型分类任务。[来源](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) - -> 🎓 “solver”被定义为是"用于解决优化问题的算法"。[来源](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). - -Scikit-learn提供了以下这个表格来解释各种solver是如何应对的不同的数据结构所带来的不同的挑战的: - -![solvers](../images/solvers.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) -``` - -## 练习 - 调用逻辑回归算法 - -接下来,你需要决定选用什么 _scheme_ 以及 _solver_ 来进行我们这个多类型分类的案例。在这里我们使用 LogisticRegression 方法,并设置相应的 multi_class 参数,同时将 solver 设置为 **liblinear** 来进行模型训练。 - -1. 创建一个逻辑回归模型,并将 multi_class 设置为 `ovr`,同时将 solver 设置为 `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)) - ``` - - ✅ 也可以试试其他 solver 比如 `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 | - -## 挑战 - -在本课程中,你使用了清洗后的数据建立了一个机器学习的模型,这个模型能够根据输入的一系列的配料来预测菜品来自于哪个国家。请再花点时间阅读一下 Scikit-learn 所提供的关于可以用来分类数据的其他方法的资料。此外,你也可以深入研究一下“solver”的概念并尝试一下理解其背后的原理。 - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) - -## 回顾与自学 - -[这个课程](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf)将对逻辑回归背后的数学原理进行更加深入的讲解 - -## 作业 - -[学习 solver](assignment.md) diff --git a/4-Classification/2-Classifiers-1/translations/assignment.es.md b/4-Classification/2-Classifiers-1/translations/assignment.es.md deleted file mode 100644 index 17075f7d..00000000 --- a/4-Classification/2-Classifiers-1/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Estudia los solucionadores - -## Instrucciones - -En esta lección aprendiste acerca de diferentes solucionadores que emparejan algoritmos con un proceso de aprendizaje automático para crear un modelo preciso. Revisa los solucionadores listados en la lección y elige dos. En tus propias palabras, compara y contrasta estos dos solucionadores. ¿Qué clase de problema abordan? ¿Cómo funcionan con varias estructuras de datos? ¿Porqué elegirías uno por encima de otro? - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | Se presentó un archivo .doc con dos párrafos, uno de cada solucionador, comparándolos seriamente. | Se presentó un archivo .doc con sólo un párrafo | La asignación está incompleta | diff --git a/4-Classification/2-Classifiers-1/translations/assignment.it.md b/4-Classification/2-Classifiers-1/translations/assignment.it.md deleted file mode 100644 index 80d1c5e1..00000000 --- a/4-Classification/2-Classifiers-1/translations/assignment.it.md +++ /dev/null @@ -1,10 +0,0 @@ -# Studiare i risolutori -## Istruzioni - -In questa lezione si è imparato a conoscere i vari risolutori che associano algoritmi a un processo di machine learning per creare un modello accurato. Esaminare i risolutori elencati nella lezione e sceglierne due. Con parole proprie, confrontare questi due risolutori. Che tipo di problema affrontano? Come funzionano con varie strutture di dati? Perché se ne dovrebbe sceglierne uno piuttosto che un altro? - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | Viene presentato un file .doc con due paragrafi, uno su ciascun risolutore, confrontandoli attentamente. | Un file .doc viene presentato con un solo paragrafo | Il compito è incompleto | diff --git a/4-Classification/2-Classifiers-1/translations/assignment.ko.md b/4-Classification/2-Classifiers-1/translations/assignment.ko.md deleted file mode 100644 index f73c053e..00000000 --- a/4-Classification/2-Classifiers-1/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# Solver들을 공부해 봅시다 - -## 설명 - -이 수업에서는 보다 정확한 모델을 만들기 위해 알고리즘들과 기계 학습 과정을 결합하는 여러 가지 종류의 solver들에 대해 알아보았습니다. 이번 과제에서는 이 수업에서 알아본 solver들을 다시 한번 살펴보고, 두 가지 solver를 골라 비교하고 대조해 보시기 바랍니다. 두 solver는 어떤 종류의 문제를 다루나요? 또한 두 solver는 다양한 종류의 데이터와 어떻게 상호 작용하나요? 두 solver 중 하나를 골라야 한다면 어느 것을 왜 택일할 건가요? - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ------------------------------------------------------------------------------------ | --------------------------- | ------------------ | -| | 각 solver마다 한 문단으로 다른 solver와 유심히 비교해 총 두 개의 문단을 .doc 파일로 제출함 | 한 문단만 .doc 파일로 제출함 | 미완성 과제를 제출함 | diff --git a/4-Classification/2-Classifiers-1/translations/assignment.pt-br.md b/4-Classification/2-Classifiers-1/translations/assignment.pt-br.md deleted file mode 100644 index 7b20fe43..00000000 --- a/4-Classification/2-Classifiers-1/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Estudando solucionadores - -## Instruções - -Nesta lição, você aprendeu sobre os vários solucionadores que combinam algoritmos com um processo de aprendizado de máquina para criar um modelo preciso. Percorra os solucionadores listados na lição e escolha dois. Em suas próprias palavras, compare e contraste esses dois solucionadores. Que tipo de problema eles abordam? Como eles funcionam com várias estruturas de dados? Por que você escolheria um em vez do outro? - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | Um arquivo .doc foi apresentado com dois parágrafos, um em cada solucionador, comparando-os cuidadosamente. | Um arquivo .doc é apresentado com apenas um parágrafo. | A tarefa está incompleta. | diff --git a/4-Classification/2-Classifiers-1/translations/assignment.tr.md b/4-Classification/2-Classifiers-1/translations/assignment.tr.md deleted file mode 100644 index 10d4c64f..00000000 --- a/4-Classification/2-Classifiers-1/translations/assignment.tr.md +++ /dev/null @@ -1,9 +0,0 @@ -# Çözücüleri çalışın -## Yönergeler - -Bu derste, doğru bir model yaratmak için algoritmaları bir makine öğrenimi süreciyle eşleştiren çeşitli çözücüleri öğrendiniz. Derste sıralanan çözücüleri inceleyin ve iki tanesini seçin. Kendi cümlelerinizle, bu iki çözücünün benzerliklerini ve farklılıklarını bulup yazın. Ne tür problemleri ele alıyorlar? Çeşitli veri yapılarıyla nasıl çalışıyorlar? Birini diğerine neden tercih ederdiniz? -## Rubrik - -| Ölçüt | Örnek Alınacak Nitelikte | Yeterli | Geliştirme Gerekli | -| -------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | Her biri bir çözücü üzerine yazılmış, onları dikkatle karşılaştıran ve iki paragraf içeren bir .doc dosyası sunulmuş | Bir paragraf içeren bir .doc dosyası sunulmuş | Görev tamamlanmamış | diff --git a/4-Classification/2-Classifiers-1/translations/assignment.zh-cn.md b/4-Classification/2-Classifiers-1/translations/assignment.zh-cn.md deleted file mode 100644 index aa0d36e7..00000000 --- a/4-Classification/2-Classifiers-1/translations/assignment.zh-cn.md +++ /dev/null @@ -1,11 +0,0 @@ -# 学习不同的 solvers - -## 说明 - -在本课程,您学习了众多将算法与机器学习过程结合在一起来产生精确模型的 solvers 。回顾本课程中列出的所有 solvers 并挑选两个,用您自己的语言比较和对比这两个 solver。它们解决了什么样的问题?它们如何处理各种数据结构?您为什么要选择某个 solver 而不是另一个? - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| ---- | --- | -------- | ------- | -| | 提交了一份有两个段落的 .doc 文件,每个段落描述一个 solver, 并详细比较它们间的异同 | 提交了一份仅有一个段落的 .doc 文件 | 没有完成 | diff --git a/4-Classification/3-Classifiers-2/translations/README.es.md b/4-Classification/3-Classifiers-2/translations/README.es.md deleted file mode 100644 index c49e1fd2..00000000 --- a/4-Classification/3-Classifiers-2/translations/README.es.md +++ /dev/null @@ -1,234 +0,0 @@ -# Clasificadores de cocina 2 - -En esta segunda lección de clasificación, explorarás más formas de clasificar datos numéricos. También aprenderás acerca de las ramificaciones para elegir un clasificador en lugar de otro. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23?loc=es) - -### Prerrequisito - -Asumimos que has completado las lecciones anteriores y has limpiado el conjunto de datos en tu directorio `data` llamado _cleaned_cuisines.csv_ en la raíz de este directorio 4-lesson. - -### Preparación - -Hemos cargado tu archivo _notebook.ipynb_ con el conjunto de datos limpio y lo hemos dividido en los dataframes X e Y, listo para el proceso de construcción del modelo. - -## Un mapa de clasificación - -Anteriormente, aprendiste acerca de las distintas opciones que tienes al clasificar los datos usando la hoja de trucos de Microsoft. Scikit-learn ofrece algo similar, pero la hoja de trucos es más granular que puede ayudar a reducir tus estimadores (otro término para clasificadores): - -![Mapa de aprendizaje automático de Scikit-learn](../images/map.png) -> Consejo: [Visita este mapa en línea](https://scikit-learn.org/stable/tutorial/machine_learning_map/) y haz clic en la ruta para leer la documentación. - -### El plan - -Este mapa es muy útil una vez que tengas una compresión clara de tus datos, como puedas 'caminar' junto a sus rutas para una decisión: - -- Tenemos >50 muestras -- Queremos predecir una categoría -- Tenemos datos etiquetados -- Tenemos menos de 100K muestras -- ✨ Podemos elegir un SVC lineal -- Si eso no funciona, ya que tenemos datos numéricos - - Podemos probar un ✨ clasificador KNeighbors - - Si eso no funciona, intenta los clasificadores ✨ SVC y ✨ conjunto - -Este es un camino muy útil a seguir. - -## Ejercicio - divide los datos - -Siguiendo este camino, deberías empezar importando algunas bibliotecas a usar. - -1. Importa las bibliotecas necesarias: - - ```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. Divide tus datos de entrenamiento y prueba: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Clasificador lineal SVC - -El agrupamiento de vectores de soporte (SVC) es un hijo de la familia de máquinas de vectores de soporte de las técnicas de aprendizaje automático (aprende más acerca de estos más adelante). En este método, puedes elegir un 'kernel' para decidir cómo agrupar las etiquetas. El parámetro 'C' se refiere a 'regularization' el cual regula la influencia de los parámetros. El kernel puede ser uno de [varios](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aquí lo configuramos a 'linear' para asegurar que aprovechamos la clasificación lineal SVC. La probabilidad por defecto es 'false'; aquí lo configuramos a 'true' para reunir estimaciones de probabilidad. Configuramos el estado aleatorio a '0' para revolver los datos para obtener probabilidades. - -### Ejercicio - aplica SVC lineal - -Comienza creando un arreglo de clasificadores. Agregarás progresivamente a este arreglo mientras probamos. - -1. Empieza con un SVC lineal: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Entrena tu modelo usando el SVC lineal e imprime un reporte: - - ```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)) - ``` - - El resultado es bastante bueno: - - ```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 - ``` - -## Clasificador K-Neighbors - -K-neighbors es parte de la familia de "vecinos" de métodos de aprendizaje automático, el cual puede ser usado para el aprendizaje supervisado y no supervisado. En este método, se crea un número predefinido de puntos y se reúnen los datos alrededor de estos puntos de modo que se puedan predecir etiquetas generalizadas para los datos. - -### Ejercicio - aplica el clasificador K-Neighbors - -El clasificador previo era bueno, y funcionó bien con los datos, pero quizá podemos obtener mejor precisión. Prueba el clasificador K-Neighbors. - -1. Agrega una línea a tu arreglo de clasificadores (agrega una coma después del elemento Linear SVC): - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - El resultado es ligeramente peor: - - ```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 - ``` - - ✅ Aprende acerca de [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) - -## Clasificador de vectores de soporte - -Los clasificadores de vectores de soporte son parte de la familia de [máquinas de vectores de soporte (SVM)](https://wikipedia.org/wiki/Support-vector_machine) de métodos de aprendizaje automático que son usados para las tareas de clasificación y regresión. Los SVMs "asignan ejemplos de entrenamiento a puntos en el espacio" para maximizar la distancia entre dos categorías. Los datos subsecuentes son asignados en este espacio para que su categoría pueda ser predecida. - -### Ejercicio - aplica un clasificador de vectores de soporte - -Intentemos un poco más de precisión con un clasificador de vectores de soporte. - -1. Agrega una coma después del elemento K-Neighbors, y luego agrega esta línea: - - ```python - 'SVC': SVC(), - ``` - - ¡El resultado es bastante bueno! - - ```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 - ``` - - ✅ Aprende acerca de los [vectores de soporte](https://scikit-learn.org/stable/modules/svm.html#svm) - -## Clasificadores de conjuntos - -Sigamos el camino hasta el final, aunque la prueba anterior fue bastante buena. Probemos algunos clasificadores de conjuntos, específicamente Random Forest y AdaBoost: - -```python - 'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -El resultado es muy bueno, especialmente para Random Forest: - -```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 -``` - -✅ Aprende acerca de los [clasificadores de conjuntos](https://scikit-learn.org/stable/modules/ensemble.html) - -Este método de aprendizaje automático "combina las predicciones de varios estimadores base" para mejorar la calidad del modelo. En nuestro ejemplo, usamos Random Trees y AdaBoost. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), un método de promedio, construye un 'bosque' de 'árboles de decisión' infundido con aleatoriedad para evitar sobreajuste. El parámetro n_estimators es configurado a el número de árboles. -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajusta un clasificador a un conjunto de datos y luego ajusta copias de ese clasificador a el mismo conjunto de datos. Se enfoca en los pesos de los elementos clasificados erróneamente y realiza el ajuste para que el siguiente clasificador lo corrija. - ---- - -## 🚀Desafío - -Cada una de estas técnicas tiene un gran número de parámetros que puedes modificar. Investiga los parámetros predeterminados de cada uno y piensa en lo que significaría el ajuste de estos parámetros para la calidad del modelo. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24?loc=es) - -## Revisión y autoestudio - -Existe mucha jerga en esta lecciones, ¡así que toma unos minutos para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de términos útiles! - -## Asignación - -[Juego de parámetros](assignment.es.md) diff --git a/4-Classification/3-Classifiers-2/translations/README.it.md b/4-Classification/3-Classifiers-2/translations/README.it.md deleted file mode 100644 index 5b49f6b1..00000000 --- a/4-Classification/3-Classifiers-2/translations/README.it.md +++ /dev/null @@ -1,235 +0,0 @@ -# Classificatori di cucina 2 - -In questa seconda lezione sulla classificazione, si esploreranno più modi per classificare i dati numerici. Si Impareranno anche le ramificazioni per la scelta di un classificatore rispetto all'altro. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/?loc=it) - -### Prerequisito - -Si parte dal presupposto che siano state completate le lezioni precedenti e si disponga di un insieme di dati pulito nella cartella `data` chiamato _clean_cuisine.csv_ nella radice di questa cartella di 4 lezioni. - -### Preparazione - -Il file _notebook.ipynb_ è stato caricato con l'insieme di dati pulito ed è stato diviso in dataframe di dati X e y, pronti per il processo di creazione del modello. - -## Una mappa di classificazione - -In precedenza, si sono apprese le varie opzioni a disposizione durante la classificazione dei dati utilizzando il cheat sheet di Microsoft. Scikit-learn offre un cheat sheet simile, ma più granulare che può aiutare ulteriormente a restringere i propri stimatori (un altro termine per i classificatori): - -![Mappa ML da Scikit-learn](../images/map.png) -> Suggerimento: [visitare questa mappa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) e fare clic lungo il percorso per leggere la documentazione. - -### Il piano - -Questa mappa è molto utile una volta che si ha una chiara comprensione dei propri dati, poiché si può "camminare" lungo i suoi percorsi verso una decisione: - -- Ci sono >50 campioni -- Si vuole pronosticare una categoria -- I dati sono etichettati -- Ci sono meno di 100K campioni -- ✨ Si può scegliere un SVC lineare -- Se non funziona, visto che ci sono dati numerici - - Si può provare un ✨ KNeighbors Classifier - - Se non funziona, si prova ✨ SVC e ✨ Classificatori di ensemble - -Questo è un percorso molto utile da seguire. - -## Esercizio: dividere i dati - -Seguendo questo percorso, si dovrebbe iniziare importando alcune librerie da utilizzare. - -1. Importare le librerie necessarie: - - ```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. Dividere i dati per allenamento e test: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Classificatore lineare SVC - -Il clustering Support-Vector (SVC) è figlio della famiglia di tecniche ML Support-Vector (ulteriori informazioni su queste di seguito). In questo metodo, si può scegliere un "kernel" per decidere come raggruppare le etichette. Il parametro 'C' si riferisce alla 'regolarizzazione' che regola l'influenza dei parametri. Il kernel può essere uno dei [tanti](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); qui si imposta su 'lineare' per assicurarsi di sfruttare l'SVC lineare. Il valore predefinito di probabilità è 'false'; qui si imposta su 'true' per raccogliere stime di probabilità. Si imposta lo stato casuale su "0" per mescolare i dati per ottenere le probabilità. - -### Esercizio: applicare una SVC lineare - -Iniziare creando un array di classificatori. Si aggiungerà progressivamente a questo array durante il test. - -1. Iniziare con un SVC lineare: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Addestrare il modello utilizzando Linear SVC e stampare un rapporto: - - ```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)) - ``` - - Il risultato è abbastanza buono: - - ```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 - ``` - -## Classificatore K-Neighbors - -K-Neighbors fa parte della famiglia dei metodi ML "neighbors" (vicini), che possono essere utilizzati sia per l'apprendimento supervisionato che non supervisionato. In questo metodo, viene creato un numero predefinito di punti e i dati vengono raccolti attorno a questi punti in modo tale da poter prevedere etichette generalizzate per i dati. - -### Esercizio: applicare il classificatore K-Neighbors - -Il classificatore precedente era buono e funzionava bene con i dati, ma forse si può ottenere una maggiore precisione. Provare un classificatore K-Neighbors. - -1. Aggiungere una riga all'array classificatore (aggiungere una virgola dopo l'elemento Linear SVC): - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - Il risultato è un po' peggio: - - ```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 - ``` - - ✅ Scoprire [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) - -## Classificatore Support Vector - -I classificatori Support-Vector fanno parte della famiglia di metodi ML [Support-Vector Machine](https://it.wikipedia.org/wiki/Macchine_a_vettori_di_supporto) utilizzati per le attività di classificazione e regressione. Le SVM "mappano esempi di addestramento in punti nello spazio" per massimizzare la distanza tra due categorie. I dati successivi vengono mappati in questo spazio in modo da poter prevedere la loro categoria. - -### Esercizio: applicare un classificatore di vettori di supporto - -Si prova a ottenere una precisione leggermente migliore con un classificatore di vettori di supporto. - -1. Aggiungere una virgola dopo l'elemento K-Neighbors, quindi aggiungere questa riga: - - ```python - 'SVC': SVC(), - ``` - - Il risultato è abbastanza buono! - - ```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 - ``` - - ✅ Scoprire i vettori di [supporto](https://scikit-learn.org/stable/modules/svm.html#svm) - -## Classificatori ensamble - -Si segue il percorso fino alla fine, anche se il test precedente è stato abbastanza buono. Si provano un po' di classificatori di ensemble, nello specifico Random Forest e AdaBoost: - -```python -'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -Il risultato è molto buono, soprattutto per Random Forest: - -```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 -``` - -✅ Ulteriori informazioni sui [classificatori di ensemble](https://scikit-learn.org/stable/modules/ensemble.html) - -Questo metodo di Machine Learning "combina le previsioni di diversi stimatori di base" per migliorare la qualità del modello. In questo esempio, si è utilizzato Random Trees e AdaBoost. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), un metodo di calcolo della media, costruisce una "foresta" di "alberi decisionali" infusi di casualità per evitare il sovradattamento. Il parametro n_estimators è impostato sul numero di alberi. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) adatta un classificatore a un insieme di dati e quindi adatta le copie di quel classificatore allo stesso insieme di dati. Si concentra sui pesi degli elementi classificati in modo errato e regola l'adattamento per il successivo classificatore da correggere. - ---- - -## 🚀 Sfida - -Ognuna di queste tecniche ha un gran numero di parametri che si possono modificare. Ricercare i parametri predefiniti di ciascuno e pensare a cosa significherebbe modificare questi parametri per la qualità del modello. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/?loc=it) - -## Revisione e Auto Apprendimento - -C'è molto gergo in queste lezioni, quindi si prenda un minuto per rivedere [questo elenco](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) di terminologia utile! - -## Compito - -[Giocore coi parametri](assignment.it.md) diff --git a/4-Classification/3-Classifiers-2/translations/README.ko.md b/4-Classification/3-Classifiers-2/translations/README.ko.md deleted file mode 100644 index f4319a9c..00000000 --- a/4-Classification/3-Classifiers-2/translations/README.ko.md +++ /dev/null @@ -1,235 +0,0 @@ -# 요리 classifiers 2 - -두번째 classification 강의에서, 숫자 데이터를 분류하는 더 많은 방식을 알아봅니다. 다른 것보다 하나의 classifier를 선택하는 파급효과도 배우게 됩니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) - -### 필요 조건 - -직전 강의를 완료하고 4강 폴더의 최상단 `data` 폴더에 _cleaned_cuisines.csv_ 라고 불리는 정리된 데이터셋이 있다고 가정합니다. - -### 준비하기 - -정리된 데이터셋과 _notebook.ipynb_ 파일을 불러오고 X 와 y 데이터프레임으로 나누면, 모델 제작 프로세스를 준비하게 됩니다. - -## Classification map - -이전에, Microsoft 치트 시트를 사용해서 데이터를 분류할 때 다양한 옵션을 배울 수 있었습니다. Scikit-learn은 estimators (classifiers)를 좁히는 데 더 도움을 받을 수 있었고, 보다 세분화된 치트 시트를 비슷하게 제공합니다: - -![ML Map from Scikit-learn](../images/map.png) -> 팁: [visit this map online](https://scikit-learn.org/stable/tutorial/machine_learning_map/)으로 경로를 따라 클릭해서 문서를 읽어봅니다. - -### 계획 - -지도는 데이터를 명쾌하게 파악하면 정한 길을 따라 'walk'할 수 있으므르 매우 도움이 됩니다: - -- 샘플을 >50개 가지고 있습니다 -- 카테고리를 예측하고 싶습니다 -- 라벨링된 데이터를 가지고 있습니다 -- 100K개 보다 적은 샘플을 가지고 있습니다 -- ✨ Linear SVC를 고를 수 있습니다 -- 동작하지 않을 때, 숫자 데이터를 가지고 있으므로 - - ✨ KNeighbors Classifier를 시도할 수 있습니다 - - 만약 그것도 동작하지 않는다면, ✨ SVC 와 ✨ Ensemble Classifiers를 시도합니다. - -따라가면 도움을 받을 수 있습니다. - -## 연습 - 데이터 나누기 - -경로를 따라서, 사용할 라이브러리를 가져오기 시작해야 합니다. - -1. 필요한 라이브러리를 Import 합니다: - - ```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) - ``` - -## Linear SVC classifier - -Support-Vector clustering (SVC)는 ML 기술 중에서 Support-Vector machines의 하위입니다 (아래에서 자세히 알아봅니다). 이 메소드에서, 'kernel'을 선택하고 라벨을 클러스터하는 방식을 결정할 수 있습니다. 'C' 파라미터는 파라미터의 영향을 규제할 'regularization'을 나타냅니다. 커널은 [several](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) 중에서 있을 수 있습니다. 여기는 linear SVC를 활용하도록 'linear'로 설정합니다. 확률은 'false'가 기본입니다; 하지만 확률을 추정하기 위해서 'true'로 설정합니다. 확률을 얻으려면 데이터를 섞어서 랜덤 상태 '0'으로 설정합니다. - -### 연습 - linear SVC 적용하기 - -classifiers의 배열을 만들기 시작합니다. 테스트하며 배열에 점차 추가할 예정입니다. - -1. Linear SVC로 시작합니다: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Linear 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-Neighbors classifier - -K-Neighbors는 supervised 와 unsupervised learning에서 사용하는 ML 방식 중 "neighbors" 계열의 일부분입니다. 이 메소드에서, 미리 정의한 수의 포인트를 만들고 포인트 주변의 데이터를 수집하면 데이터에 대한 일반화된 라벨을 예측할 수 있습니다. - -### 연습 - K-Neighbors classifier 적용하기 - -이전 classifier는 좋았고, 데이터도 잘 동작했지만, 더 정확도를 높일 수 있을 수 있습니다. K-Neighbors classifier를 시도해봅니다. - -1. classifier 배열에 라인을 추가합니다 (Linear 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-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors)에 대하여 알아봅니다 - -## Support Vector Classifier - -Support-Vector classifiers는 classification 과 regression 작업에 사용하는 ML 방식 중에서 [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) 계열의 일부분입니다. SVMs은 두 카테고리 사이의 거리를 최대로 하려고 "공간의 포인트에 훈련 예시를 맵핑"합니다. 차후 데이터는 카테고리를 예측할 수 있게 이 공간에 맵핑됩니다. - -### 연습 - Support Vector Classifier 적용하기 - -Support Vector Classifier로 정확도를 조금 더 올립니다. - -1. K-Neighbors 아이템 뒤로 컴마를 추가하고, 라인을 추가합니다: - - ```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 - ``` - - ✅ [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm)에 대하여 알아봅니다 - -## Ensemble Classifiers - -지난 테스트에서 꽤 좋았지만, 경로를 끝까지 따라갑니다. Ensemble Classifiers, 구체적으로 Random Forest 와 AdaBoost를 시도합니다: - -```python -'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -특별하게 Random Forest는, 결과가 매우 좋습니다: - -```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 -``` - -✅ [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html)에 대해 배웁니다 - -머신러닝의 방식 "여러 기본 estimators의 에측을 합쳐"서 모델의 품질을 향상시킵니다. 예시로, Random Trees 와 AdaBoost를 사용합니다. - -- 평균 방식인 [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)는, 오버피팅을 피하려 랜덤성이 들어간 'decision trees'의 'forest'를 만듭니다. n_estimators 파라미터는 트리의 수로 설정합니다. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html)는 데이터셋을 classifier로 맞추고 classifier의 카피를 같은 데이터셋에 맞춥니다.잘 못 분류된 아이템의 가중치에 집중하고 다음 classifier를 교정하도록 맞춥니다. - ---- - -## 🚀 도전 - -각 기술에는 트윅할 수 있는 많은 수의 파라미터가 존재합니다. 각 기본 파라미터를 조사하고 파라미터를 조절헤서 모델 품질에 어떤 의미가 부여되는지 생각합니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) - -## 검토 & 자기주도 학습 - -강의에서 많은 특수 용어가 있어서, 잠시 시간을 투자해서 유용한 용어의 [this list](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott)를 검토합니다! - -## 과제 - -[Parameter play](../assignment.md) diff --git a/4-Classification/3-Classifiers-2/translations/README.pt-br.md b/4-Classification/3-Classifiers-2/translations/README.pt-br.md deleted file mode 100644 index 5d33a7fa..00000000 --- a/4-Classification/3-Classifiers-2/translations/README.pt-br.md +++ /dev/null @@ -1,235 +0,0 @@ -# Classificadores de culinária 2 - -Nesta segunda lição de classificação, você explorará outras maneiras de classificar dados numéricos. Você também aprenderá sobre as ramificações para escolher um classificador em vez de outro. - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23?loc=ptbr) - -### Pré-requisito - -Presumimos que você tenha concluído as lições anteriores e tenha um arquivo com o _dataset_ em sua pasta `data` chamado _cleaned_cuisines.csv_. - -### Preparação - -Carregando o arquivo _notebook.ipynb_ com o _dataset_ e o dividimos em dataframes X e y, estamos prontos para o processo de construção do modelo. - -## Um mapa de classificação - -Anteriormente, você aprendeu sobre as várias opções para classificar dados usando a planilha da Microsoft. O Scikit-learn oferece uma planilha semelhante, com mais informações, que pode ajudar ainda mais a restringir seus estimadores (outro termo para classificadores): - -![Mapa da ML do Scikit-learn](../images/map.png) -> Dica: [visite este site](https://scikit-learn.org/stable/tutorial/machine_learning_map/) para ler a documentação. - -### O plano - -Este mapa é muito útil, uma vez que você tenha uma compreensão clara de seus dados, pois você pode 'andar' no mapa ao longo dos caminhos para então, tomar uma decisão: - -- Temos mais que 50 amostras -- Queremos prever uma categoria -- Nós rotulamos os dados -- Temos menos de 100 mil amostras -- ✨ Podemos escolher um SVC linear -- Se isso não funcionar, já que temos dados numéricos: - - Podemos tentar um classificador KNeighbors ✨ - - Se não funcionar, tente o ✨ SVC e ✨ Classificadores de conjunto (ensemble) - -Esta é uma trilha muito útil a seguir. - -## Exercício - dividindo os dados - -Seguindo este caminho, devemos começar importando algumas bibliotecas. - -1. Importe essas bibliotecas: - - ```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. Divida os dados em dados de treinamento e teste: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Classificador linear SVC - -O Clustering de Vetores de Suporte (SVC, ou no inglês, Support-Vector clustering) é um filho da família de máquinas de vetores de suporte de técnicas de ML. Neste método, você pode escolher um 'kernel' para decidir como agrupar os rótulos. O parâmetro 'C' refere-se à 'regularização' que regula a influência dos parâmetros. O kernel pode ser um de [vários](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aqui, nós o definimos como 'linear' para garantir impulsionar o classificador. O padrão de probabilidade é 'false'; aqui, nós o definimos como 'true' para reunir estimativas de probabilidade. Definimos random_state como '0' para embaralhar os dados e obter probabilidades. - -### Exercício - aplicando um SVC linear - -Comece criando um array de classificadores. Você adicionará itens progressivamente a este array enquanto testamos. - -1. Comece com um SVC linear: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Treine seu modelo usando o SVC e imprima um relatório: - - ```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)) - ``` - - O resultado é bom: - - ```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 - ``` - -## Classificador K-Neighbors - -K-Neighbors faz parte da família "neighbors" de métodos de ML, que podem ser usados para aprendizado supervisionado e não supervisionado. Neste método, um número predefinido de pontos é criado e os dados são reunidos em torno desses pontos de modo que rótulos generalizados podem ser previstos para os dados. - -### Exercício - aplicando o classificador K-Neighbors - -O classificador anterior era bom e funcionou bem com os dados, mas talvez possamos obter uma melhor acurácia. Experimente um classificador K-Neighbors. - -1. Adicione uma linha ao seu array de classificadores (adicione uma vírgula após o item do SVC): - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - O resultado é um pouco pior: - - ```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 - ``` - - ✅ Aprenda mais sobre [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) - -## Classificador de Vetores de Suporte - -Os Classificadores de Vetores de Suporte (SVM, ou no inglês, Support-Vector Machine) fazem parte da família [Classificadores de Vetores de Suporte](https://wikipedia.org/wiki/Support-vector_machine) de métodos de ML que são usados para tarefas de classificação e regressão. Os SVMs "mapeiam exemplos de treinamento para pontos no espaço" para maximizar a distância entre duas categorias. Os dados subsequentes são mapeados neste espaço para que sua categoria possa ser prevista. - -### Exercício - aplicando o Classificador de Vetores de Suporte - -Vamos tentar aumentar a acurácia com um Classificador de Vetores de Suporte. - -1. Adicione uma vírgula após o item K-Neighbors e, em seguida, adicione esta linha: - - ```python - 'SVC': SVC(), - ``` - - O resultado é muito bom! - - ```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 - ``` - - ✅ Aprenda mais sobre [Vetores de Suporte](https://scikit-learn.org/stable/modules/svm.html#svm) - -## Classificadores de conjunto (ensemble) - -Vamos seguir o caminho até o fim, embora o teste anterior tenha sido muito bom. Vamos tentar alguns 'Classificadores de conjunto, especificamente Random Forest (Árvores Aleatórias) e AdaBoost: - -```python -'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -O resultado é muito bom, especialmente para Random Forest: - -```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 -``` - -✅ Aprenda mais sobre [Classificadores de conjunto](https://scikit-learn.org/stable/modules/ensemble.html) - -Este método de arendizado de máquina "combina as previsões de vários estimadores de base" para melhorar a qualidade do modelo. Em nosso exemplo, usamos Random Forest e AdaBoost. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), um método de média, constrói uma 'floresta' de 'árvores de decisão' infundidas com aleatoriedade para evitar _overfitting_. O parâmetro `n_estimators` define a quantidade de árvores. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajusta um classificador a um _dataset_ e, em seguida, ajusta cópias desse classificador ao mesmo _dataset_. Ele se concentra nos pesos dos itens classificados incorretamente e corrige o ajuste para o próximo classificador. - ---- - -## 🚀Desafio - -Cada uma dessas técnicas possui um grande número de parâmetros. Pesquise os parâmetros padrão de cada um e pense no que o ajuste desses parâmetros significaria para a qualidade do modelo. - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Há muitos termos nessas lições, então reserve um minuto para revisar [esta lista útil](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) sobre terminologias! - -## Tarefa - -[Brincando com parâmetros](assignment.pt-br.md). diff --git a/4-Classification/3-Classifiers-2/translations/README.tr.md b/4-Classification/3-Classifiers-2/translations/README.tr.md deleted file mode 100644 index 270fa60e..00000000 --- a/4-Classification/3-Classifiers-2/translations/README.tr.md +++ /dev/null @@ -1,235 +0,0 @@ -# Mutfak sınıflandırıcıları 2 - -Bu ikinci sınıflandırma dersinde, sayısal veriyi sınıflandırmak için daha fazla yöntem öğreneceksiniz. Ayrıca, bir sınıflandırıcıyı diğerlerine tercih etmenin sonuçlarını da öğreneceksiniz. - -## [Ders öncesi kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/?loc=tr) - -### Ön koşul - -Önceki dersleri tamamladığınızı ve bu 4-ders klasörünün kökündeki `data` klasörünüzdeki _cleaned_cuisines.csv_ adlı veri setini temizlediğinizi varsayıyoruz. - -### Hazırlık - -Temizlenmiş veri setiyle _notebook.ipynb_ dosyanızı yükledik ve model oluşturma sürecine hazır olması için X ve y veri iskeletlerine böldük. - -## Bir sınıflandırma haritası - -Daha önce, Microsoft'un kopya kağıdını kullanarak veri sınıflandırmanın çeşitli yollarını öğrendiniz. Scikit-learn de buna benzer, öngörücülerinizi (sınıflandırıcı) sınırlandırmanıza ilaveten yardım edecek bir kopya kağıdı sunar. - -![Scikit-learn'den Makine Öğrenimi Haritası](../images/map.png) -> Tavsiye: [Bu haritayı çevrim içi ziyaret edin](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ve rotayı seyrederken dokümantasyonu okumak için tıklayın. - -### Plan - -Verinizi iyice kavradığınızda bu harita çok faydalı olacaktır, çünkü karara ulaşırken rotalarında 'yürüyebilirsiniz': - -- >50 adet örneğimiz var -- Bir kategori öngörmek istiyoruz -- Etiketlenmiş veri var -- 100 binden az örneğimiz var -- :sparkles: Bir Linear SVC (Doğrusal Destek Vektör Sınıflandırma) seçebiliriz -- Eğer bu işe yaramazsa, verimiz sayısal olduğundan - - :sparkles: Bir KNeighbors (K Komşu) Sınıflandırıcı deneyebiliriz - - Eğer bu işe yaramazsa, :sparkles: SVC (Destek Vektör Sınıflandırma) ve :sparkles: Ensemble (Topluluk) Sınıflandırıcılarını deneyin - -Bu çok faydalı bir yol. - -## Alıştırma - veriyi bölün - -Bu yolu takip ederek, kullanmak için bazı kütüphaneleri alarak başlamalıyız. - -1. Gerekli kütüphaneleri alın: - - ```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. Eğitme ve sınama verinizi bölün: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Linear SVC Sınıflandırıcısı - -Destek Vektör kümeleme (SVC), makine öğrenimi yöntemlerinden Destek Vektör Makinelerinin (Aşağıda bunun hakkında daha fazla bilgi edineceksiniz.) alt dallarından biridir. Bu yöntemde, etiketleri nasıl kümeleyeceğinize karar vermek için bir 'kernel' seçebilirsiniz. 'C' parametresi 'düzenlileştirme'yi ifade eder ve parametrelerin etkilerini düzenler. Kernel (çekirdek) [birçoğundan](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) biri olabilir; burada, doğrusal SVC leveraj ettiğimizden emin olmak için, 'linear' olarak ayarlıyoruz. Olasılık varsayılan olarak 'false' olarak ayarlıdır; burada, olasılık öngörülerini toplamak için, 'true' olarak ayarlıyoruz. Rastgele durumu (random state), olasılıkları elde etmek için veriyi karıştırmak (shuffle) üzere, '0' olarak ayarlıyoruz. - -### Alıştırma - doğrusal SVC uygulayın - -Sınıflandırıcıardan oluşan bir dizi oluşturarak başlayın. Sınadıkça bu diziye ekleme yapacağız. - -1. Liner SVC ile başlayın: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Linear SVC kullanarak modelinizi eğitin ve raporu bastırın: - - ```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)) - ``` - - Sonuç oldukça iyi: - - ```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-Komşu sınıflandırıcısı - -K-Komşu, makine öğrenimi yöntemlerinden "neighbors" (komşular) ailesinin bir parçasıdır ve gözetimli ve gözetimsiz öğrenmenin ikisinde de kullanılabilir. Bu yöntemde, önceden tanımlanmış sayıda nokta üretilir ve veri bu noktalar etrafında, genelleştirilmiş etiketlerin veriler için öngörülebileceği şekilde toplanır. - -### Alıştırma - K-Komşu sınıflandırıcısını uygulayın - -Önceki sınıflandırıcı iyiydi ve veriyle iyi çalıştı, ancak belki daha iyi bir doğruluk elde edebiliriz. K-Komşu sınıflandırıcısını deneyin. - -1. Sınıflandırıcı dizinize bir satır ekleyin (Linear SVC ögesinden sonra bir virgül ekleyin): - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - Sonuç biraz daha kötü: - - ```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 - ``` - - :white_check_mark: [K-Komşu](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) hakkında bilgi edinin - -## Destek Vektör Sınıflandırıcısı - -Destek Vektör sınıflandırıcıları, makine öğrenimi yöntemlerinden [Destek Vektörü Makineleri](https://wikipedia.org/wiki/Support-vector_machine) ailesinin bir parçasıdır ve sınıflandırma ve regresyon görevlerinde kullanılır. SVM'ler (Destek Vektör Makineleri), iki kategori arasındaki uzaklığı en yükseğe getirmek için eğitme örneklerini boşluktaki noktalara eşler. Sonraki veri, kategorisinin öngörülebilmesi için bu boşluğa eşlenir. - -### Alıştırma - bir Destek Vektör Sınıflandırıcısı uygulayın - -Bir Destek Vektör Sınıflandırıcısı ile daha iyi bir doğruluk elde etmeye çalışalım. - -1. K-Neighbors ögesinden sonra bir virgül ekleyin, sonra bu satırı ekleyin: - - ```python - 'SVC': SVC(), - ``` - - Sonuç oldukça iyi! - - ```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 - ``` - - :white_check_mark: [Destek Vektörleri](https://scikit-learn.org/stable/modules/svm.html#svm) hakkında bilgi edinin - -## Topluluk Sınıflandırıcıları - -Önceki sınamanın oldukça iyi olmasına rağmen rotayı sonuna kadar takip edelim. Bazı Topluluk Sınıflandırıcılarını deneyelim, özellikle Random Forest ve AdaBoost'u: - -```python -'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -Sonuç çok iyi, özellikle Random Forest sonuçları: - -```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 -``` - -:white_check_mark: [Topluluk Sınıflandırıcıları](https://scikit-learn.org/stable/modules/ensemble.html) hakkında bilgi edinin - -Makine Öğreniminin bu yöntemi, modelin kalitesini artırmak için, "birçok temel öngörücünün öngörülerini birleştirir." Bizim örneğimizde, Random Trees ve AdaBoost kullandık. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest) bir ortalama alma yöntemidir, aşırı öğrenmeden kaçınmak için rastgelelikle doldurulmuş 'karar ağaçları'ndan oluşan bir 'orman' oluşturur. n_estimators parametresi, ağaç sayısı olarak ayarlanmaktadır. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html), bir sınıflandıcıyı bir veri setine uydurur ve sonra o sınıflandırıcının kopyalarını aynı veri setine uydurur. Yanlış sınıflandırılmış ögelerin ağırlıklarına odaklanır ve bir sonraki sınıflandırıcının düzeltmesi için uydurma/oturtmayı ayarlar. - ---- - -## :rocket: Meydan okuma - -Bu yöntemlerden her biri değiştirebileceğiniz birsürü parametre içeriyor. Her birinin varsayılan parametrelerini araştırın ve bu parametreleri değiştirmenin modelin kalitesi için ne anlama gelebileceği hakkında düşünün. - -## [Ders sonrası kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/?loc=tr) - -## Gözden Geçirme & Kendi Kendine Çalışma - -Bu derslerde çok fazla jargon var, bu yüzden yararlı terminoloji içeren [bu listeyi](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) incelemek için bir dakika ayırın. - -## Ödev - -[Parametre oyunu](assignment.tr.md) \ No newline at end of file diff --git a/4-Classification/3-Classifiers-2/translations/README.zh-cn.md b/4-Classification/3-Classifiers-2/translations/README.zh-cn.md deleted file mode 100644 index 51cf64cf..00000000 --- a/4-Classification/3-Classifiers-2/translations/README.zh-cn.md +++ /dev/null @@ -1,235 +0,0 @@ -# 菜品分类器 2 - -在第二节课程中,您将探索更多方法来对数值数据进行分类。您还将了解选择不同的分类器所带来的结果。 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) - -### 先决条件 - -我们假设您已经完成了前面的课程,并且在本次课程文件夹根路径下的 `data` 文件夹中有一个经过清洗的名为 cleaned_cuisines.csv 数据集。 - -### 准备工作 - -我们已经将清洗过的数据集加载进您的 _notebook.ipynb_ 文件,并分为 X 和 Y dataframe,为模型构建过程做好准备。 - -## 分类学习路线图 - -在此之前,您已经了解使用 Microsoft 速查表对数据进行分类时可以使用到的各种选项。Scikit-learn 提供了一个类似的,但更细粒度的速查表,可以进一步帮助您调整估计器(分类器的另一个术语): - -![来自 Scikit-learn 的机器学习路线图 ](../images/map.png) -> 提示:[在线查看路线图](https://scikit-learn.org/stable/tutorial/machine_learning_map/)并沿着路线阅读文档。 - -### 计划 - -一旦您清楚了解了您的数据,这张路线图就非常有用,因为您可以沿着路线并做出决定: - -- 我们有超过 50 个样本 -- 我们想要预测一个类别 -- 我们有标记过的数据 -- 我们的样本数少于 100000 -- ✨ 我们可以选择线性 SVC -- 如果那不起作用,既然我们有数值数据 - - 我们可以尝试 ✨ K-近邻分类器 - - 如果那不起作用,试试 ✨ SVC 和 ✨ 集成分类器 - -这是一条非常有用的线索。 - -## 练习 - 拆分数据 - -按照这个路线,我们应该从导入一些要使用的库来开始。 - -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 - ``` - -2. 拆分您的训练数据和测试数据: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## 线性 SVC 分类器 - -支持向量分类(SVC)是机器学习方法支持向量机家族中的一个子类(参阅下方内容,学习更多相关知识)。用这种方法您可以选择一个 kernel 去决定如何聚类标签。C 参数指的是“正则化”,它将参数的影响正则化。kernel 可以是[其中](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC)的一项;这里我们将 kernel 设置为 linear 来使用线性 SVC。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-近邻是机器学习方法最近邻家族的一部分,可以用来进行有监督和无监督学习。这种方法创建了预定个数的点,并且数据被聚集在这些点的四周,这样数据的大致标签可以被预测出来。 - -### 练习 - 使用 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) - -## Support Vector 分类器 - -Support-Vector 分类器是机器学习方法[支持向量机](https://wikipedia.org/wiki/Support-vector_machine)家族的一部分,被用于分类和回归任务。为了最大化两个类别之间的距离,支持向量机将“训练样例映射为空间中不同的点”。然后数据被映射为距离,所以它们的类别可以得到预测。 - -### 练习 - 使用 Support Vector 分类器 - -为了更好的精度,我们尝试 Support Vector 分类器。 - -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 - ``` - - ✅ 了解 [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) - -## 集成分类器 - -尽管之前的测试结果相当不错,我们还是沿着路线走到最后吧。我们来尝试一些集成分类器,特别是随机森林和 AdaBoost: - -```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) - -这种机器学习方法"组合了各种基本估计器的预测"来提高模型质量。在我们的示例中,我们使用随机森林和 AdaBoost。 - -- [随机森林](https://scikit-learn.org/stable/modules/ensemble.html#forest)是一种平均化方法,它建立了一个注入了随机性的“决策树森林”以避免过度拟合。n_estimators 参数设置了随机森林中树的数量。 - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) 在数据集上拟合一个分类器,然后在同一数据集上拟合分类器的额外副本。它关注并调整错误分类实例的权重,以便后续的分类器更多地关注和修正。 - ---- - -## 🚀挑战 - -这些技术方法每个都有很多能够让您微调的参数。研究每一个的默认参数,并思考调整这些参数对模型质量有何意义。 - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) - -## 回顾与自学 - -课程中出现了很多术语,花点时间浏览[术语表](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott)来复习一下它们吧! - -## 作业 - -[玩转参数](../translations/assignment.zh-cn.md) diff --git a/4-Classification/3-Classifiers-2/translations/assignment.es.md b/4-Classification/3-Classifiers-2/translations/assignment.es.md deleted file mode 100644 index 6ea777a5..00000000 --- a/4-Classification/3-Classifiers-2/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Juega con los parámetros - -## Instrucciones - -Hay varios parámetros que están configurados de forma predeterminada cuando usas estos clasificadores. Intellisense en VS Code puede ayudarte a profundizar en ellos. Adopta una de las técnicas de clasificación de aprendizaje automático de esta lección y vuelve a entrenar los modelos ajustando varios valores de parámetros. Construye un notebook explicando por qué algunos cambios mejoran la calidad del modelo mientras otros la degradan. Sé minucioso en tu respuesta. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| | Se presentó un notebook con un clasificador completamente construido, sus parámetros ajustados y los cambios explicados en cajas de texto | Se presentó un notebook parcialmente completo o pobremente explicado | Se presentó un notebook con errores o fallos | diff --git a/4-Classification/3-Classifiers-2/translations/assignment.it.md b/4-Classification/3-Classifiers-2/translations/assignment.it.md deleted file mode 100644 index 472cdb11..00000000 --- a/4-Classification/3-Classifiers-2/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Giocore coi parametri - -## Istruzioni - -Ci sono molti parametri impostati in modalità predefinita quando si lavora con questi classificatori. Intellisense in VS Code può aiutare a scavare in loro. Adottare una delle tecniche di classificazione ML in questa lezione e riaddestrare i modelli modificando i vari valori dei parametri. Costruire un notebook spiegando perché alcune modifiche aiutano la qualità del modello mentre altre la degradano. La risposta sia dettagliata. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| | Un notebook viene presentato con un classificatore completamente costruito e i suoi parametri ottimizzati e le modifiche spiegate nelle caselle di testo | Un quaderno è presentato parzialmente o spiegato male | Un notebook contiene errori o è difettoso | diff --git a/4-Classification/3-Classifiers-2/translations/assignment.ko.md b/4-Classification/3-Classifiers-2/translations/assignment.ko.md deleted file mode 100644 index 4e716e59..00000000 --- a/4-Classification/3-Classifiers-2/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 매개변수로 놀아 봅시다 - -## 설명 - -분류기들을 사용할 때 수많은 매개변수가 기본값을 가지고 있는 것을 확인할 수 있습니다. 비주얼 스튜디어 코드(VS Code)의 코드 자동완성 기능(IntelliSense)을 통해 매개변수에 대해 자세히 알아볼 수 있습니다. 이번 수업에서 알아본 머신러닝 분류 기법 중 한 기법을 선택해 여러 매개변수를 조정해 모델을 다시 훈련시켜 보세요. 그리고 Jupyter Notebook(노트북)에 매개변수 조정에 따라 왜 모델의 성능에 차이가 생기는지 자세히 설명해 보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------- | --------------------------- | -| | 매개변수 조정이 적용된 완성된 분류기와 함께 조정에 따른 모델의 성능 변화에 대한 설명을 노트북에 포함하여 제출함 | 미완성 노트북을 제출하거나 설명이 부족함 | 노트북에 버그 또는 결함이 있음 | diff --git a/4-Classification/3-Classifiers-2/translations/assignment.pt-br.md b/4-Classification/3-Classifiers-2/translations/assignment.pt-br.md deleted file mode 100644 index ce8cd6a4..00000000 --- a/4-Classification/3-Classifiers-2/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Brincando com parâmetros - -## Instruções - -Existem muitos parâmetros definidos por padrão ao trabalhar com classificadores. O Intellisense no VS Code pode ajudá-lo a se aprofundar neles. Adote uma das técnicas de classificação de ML nesta lição e retreine os modelos ajustando os parâmetros. Construa um _notebook_ explicando por que algumas mudanças ajudam na qualidade do modelo enquanto outras o degradam. Seja detalhado em sua resposta. - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| | Um _notebook_ foi apresentado com um classificador totalmente construído e seus parâmetros ajustados e mudanças explicadas em caixas de texto | O _notebook_ foi parcialmente apresentado ou mal explicado | O _notebook_ está bugado | diff --git a/4-Classification/3-Classifiers-2/translations/assignment.tr.md b/4-Classification/3-Classifiers-2/translations/assignment.tr.md deleted file mode 100644 index fbc74092..00000000 --- a/4-Classification/3-Classifiers-2/translations/assignment.tr.md +++ /dev/null @@ -1,11 +0,0 @@ -# Parametre Oyunu - -## Yönergeler - -Bu sınıflandırıcılarla çalışırken varsayılan olarak ayarlanmış birçok parametre var. VS Code'daki Intellisense, onları derinlemesine incelemenize yardımcı olabilir. Bu dersteki Makine Öğrenimi Sınıflandırma Yöntemlerinden birini seçin ve çeşitli parametre değerlerini değiştirerek modelleri yeniden eğitin. Neden bazı değişikliklerin modelin kalitesini artırdığını ve bazılarının azalttığını açıklayan bir not defteri yapın. Cevabınız açıklayıcı olmalı. - -## Rubrik - -| Ölçüt | Örnek Alınacak Nitelikte | Yeterli | Geliştirme Gerekli | -| -------- | ---------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ------------------------------- | -| | Bir sınıflandırıcının tamamen oluşturulduğu ve parametrelerinin değiştirilip yazı kutularında açıklandığı bir not defteri sunulmuş | Not defteri kısmen sunulmuş veya az açıklanmış | Not defteri hatalı veya kusurlu | \ No newline at end of file diff --git a/4-Classification/3-Classifiers-2/translations/assignment.zh-cn.md b/4-Classification/3-Classifiers-2/translations/assignment.zh-cn.md deleted file mode 100644 index 08fa81f0..00000000 --- a/4-Classification/3-Classifiers-2/translations/assignment.zh-cn.md +++ /dev/null @@ -1,11 +0,0 @@ -# 玩转参数 - -## 说明 - -在使用分类器时,有很多被默认设置了的参数。Vs Code 中的 Intellisense 可以帮助您深入了解它们。选用本课程中机器学习分类方法中的一个,调整各种参数,重新训练模型。构建一个 notebook 工程来解释为什么有些参数改变有助于提高模型质量,而其他改变会降低模型质量。请在您的回答中详细介绍。 - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| ---- | --- | -------- | ------- | -| | 提交了一个 notebook 工程文件,构建了一个完整且参数调整过的分类器,并对参数改变进行解释 | 提交了一个不完整的或没有详细解释的 notebook 工程文件 | notebook 工程文件有错误或者有缺陷 | diff --git a/4-Classification/4-Applied/translations/README.es.md b/4-Classification/4-Applied/translations/README.es.md deleted file mode 100644 index 927227e2..00000000 --- a/4-Classification/4-Applied/translations/README.es.md +++ /dev/null @@ -1,316 +0,0 @@ -# Construye una aplicación web de recomendación de cocina - -En esta lección, construirás un modelo de clasificación usando algunas de las técnicas que aprendiste en las lecciones anteriores y con el conjunto de datos de la cocina deliciosa usada a través de este serie de lecciones. Además, construirás una pequeña aplicación web para usar un modelo guardado, aprovechando el runtime web de Onnx. - -Uno de los usos prácticos más útiles del aprendizaje automático es construir sistemas de recomendación, y ¡hoy puedes tomar el primer en esa dirección! - -[![Presentando esta aplicación web](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "ML aplicado") - -> 🎥 Haz clic en la imagen de arriba para ver el video: Jen Looper construye una aplicación web usando los datos clasificados de cocina. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25?loc=es) - -En esta lección aprenderás: - -- Cómo construir un modelo y guardarlo como un modelo Onnx -- Cómo usar Netron para inspeccionar el modelo -- Cómo usar tu modelo en una aplicación web por inferencia - -## Construye tu modelo - -Construir sistemas de aprendizaje automático aplicado es un parte importante de aprovechar estas tecnologías para tus sistemas de negocio. Puedes usar modelos dentro de tus aplicaciones web (y así usarlos de sin conexión en caso de ser necesario) al usar Onnx. - -En la [lección anterior](../../../3-Web-App/1-Web-App/translations/README.es.md), construiste un modelo de regresión acerca de los avistamientos OVNI, le hiciste "pickle", y los usaste en una aplicación Flask. Aunque esta arquitectura es muy útil conocerla, es una aplicación Python full-stack, y tus requerimientos pueden incluir el uso de una aplicación JavaScript. - -En esta lección, puedes construir un sistema JavaScript básico por inferencia. Pero primero, necesitas entrenar tu modelo y convertirlo para usarlo con Onnx. - -## Ejercicio - entrena tu modelo de clasificación - -Primero, entrena un modelo de clasificación usando el conjunto limpio de datos de cocina que ya usamos. - -1. Comienza importando bibliotecas útiles: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Necesitas '[skl2onnx](https://onnx.ai/sklearn-onnx/)' para ayudar a convertir tu modelo Scikit-learn al formato Onnx. - -1. Luego, trabaja con tus datos de la misma forma que lo hiciste en las lecciones anteriores, al leer el archivo CSV usando `read_csv()`: - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -1. Elimina las primeras dos columnas y guarda los datos restantes como 'X': - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Guarda las etiquetas como 'y': - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Comienza la rutina de entrenamiento - -Usaremos la biblioteca 'SVC' la cual tiene buena precisión. - -1. Importa las bibliotecas correspondientes de 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. Separa los conjuntos de entrenamiento y prueba: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Construye un model de clasificación SVC como lo hiciste en la lección anterior: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Ahora, prueba tu modelo al llamar a `predict()`: - - ```python - y_pred = model.predict(X_test) - ``` - -1. Imprime un reporte de clasificación para revisar la calidad del modelo: - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Como vimos anteriormente, la precisión es buena: - - ```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 - ``` - -### Convierte tu modelo a Onnx - -Asegúrate que haces la conversión con el número adecuado de Tensor. Este conjunto de datos lista 380 ingredientes, por lo que necesitas anotar ese número en `FloatTensorType`: - -1. Conviértelo usando un número de tensor de 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. Crea el onx y guárdalo como un archivo **model.onnx**: - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Nota, puedes pasar [opciones](https://onnx.ai/sklearn-onnx/parameterized.html) a tu script de conversión. En este caso, pasamos 'nocl' como True y 'zipap' como False. Ya que este es un modelo de clasificación, tienes la opción de eliminar ZipMap el cual produce una lista de diccionarios (no necesarios). `nocl` se refiere a la información de clase que se incluye en el modelo. Reduce el tamaño de tu modelo al configurar `nocl` a 'True'. - -Al ejecutar todo el notebook construirás un modelo Onnx y lo guardará en su directorio. - -## Observa tu modelo - -Los modelos Onnx no se aprecian bien en Visual Studio Code, pero muchos investigadores usan buen software libre para visualizar el modelo y asegurar que se construyó de forma adecuada. Descarga [Netron](https://github.com/lutzroeder/Netron) y abre tu archivo `model.onnx`. Puedes visualizar de forma simple tu modelo, con sus 380 entradas y el clasificador listado: - - -![Netron visual](../images/netron.png) - -Netron es una herramienta útil para ver tus modelos. - -Ahora estás listo para usar este modelo limpio en una aplicación web. Construyamos una aplicación que nos será útil cuando veas tu refrigerador e intentes descubrir qué combinación de tus ingredientes sobrantes puedes usar para realizar un platillo de cierta cocina, de acuerdo a lo que determina tu modelo. - -## Construye una aplicación web de recomendación - -Puedes usar tu modelo directamente en la aplicación web. Esta arquitectura también te permite ejecutarlo de forma local e incluso sin conexión en caso de ser necesario. Empieza creando un archivo `index.html` en el mismo directorio donde guardaste tu archivo `model.onnx`. - -1. En este archivo _index.html_, agrega el siguiente código: - - ```html - - -
- Cuisine Matcher -
- - ... - - - ``` - -1. Ahora, trabaja dentro de las etiquetas `body`, agrega algo de código para mostrar una lista de checkboxes reflejando algunos ingredientes: - - ```html -

Revisa tu refrigerador. ¿Qué puedes crear?

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- -
- ``` - - Nota que a cada checkbox se le asigna un valor. Esto refleja el índice donde se encuentran los ingredientes de acuerdo al conjunto de datos. La manzana (Apple), por ejemplo, en este listado alfabético, ocupa la quinta columna, por lo que su valor es '4' ya que empezamos a contar a partir del 0. Puedes consultar la [hoja de cálculo de los ingredientes](../../data/ingredient_indexes.csv) para descubrir el índice asignado a cierto ingrediente. - - Continúa tu trabajo en el archivo index.html, agrega un bloque script donde se llame al modelo, después de el `` final de cierre. - -1. Primero, importa el [Runtime de Onnx](https://www.onnxruntime.ai/): - - ```html - - ``` - - > El Runtime de Onnx se usa para permitir ejecutar tus modelos Onnx a través de una gran variedad de plataformas hardware, incluyendo optimizaciones y el uso de una API. - -1. Una vez que el Runtime esté en su lugar, puedes llamarlo: - - ```html - - ``` - -En este código, suceden varias cosas: - -1. Creaste un arreglo de 380 valores posibles(1 o 0) para ser configurados y enviados al modelo por inferencia, dependiendo si checkbox de ingrediente está seleccionado. -2. Creaste un arreglo de checkboxes y una forma de determinar si fueron seleccionados en una función `init` que es llamada cuando inicia la aplicación. Cuando se selecciona un checkbox, se modifica el arreglo `ingredients` para reflejar al ingrediente seleccionado. -3. Creaste una función `testCheckboxes` que verifica si algún checkbox se seleccionó. -4. Usa la función `startInference` cuando se presione el botón y, si algún checkbox fue seleccionado, comienza la inferencia. -5. La rutina de inferencia incluye: - 1. Configuración de una carga asíncrona del modelo - 2. Creación de una estructura Tensor para enviar al modelo - 3. Creación de 'feeds' que refleja la entrada `float_input` que creaste cuando entrenaste tu modelo (puedes usar Netron para verificar el nombre) - 4. Envía estos 'feeds' al modelo y espera la respuesta - -## Prueba tu aplicación - -Abre una sesión de terminal en Visual Studio Code en el directorio donde reside tu archivo index.html. Asegúrate que tienes instalado [http-server](https://www.npmjs.com/package/http-server) de forma global, y escribe `http-server` en la terminal. Se debería abrir una ventana del navegador web para ver tu aplicación en localhost. Revisa qué cocina es recomendada basada en varios ingredientes: - -![Aplicación web de ingredientes](../images/web-app.png) - -Felicidades, has creado una aplicación de 'recomendación' con pocos campos. ¡Lleva algo de tiempo el construir este sistema! - -## 🚀Desafío - -Tu aplicación web es mínima, así que continua construyéndola usando los ingredientes y sus índices de los datos [ingredient_indexes](../../data/ingredient_indexes.csv). ¿Qué combinaciones de sabor funcionan para crear un determinado platillo nacional? - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26?loc=es) - -## Revisión y autoestudio - -Mientras esta lección sólo se refirió a la utilidad de crear un sistema de recomendación para ingredientes alimenticios, esta área de aplicaciones del aprendizaje automático es muy rica en ejemplos. Lee más acerca de cómo se construyen estos sistemas: - -- 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/ - -## Asignación - -[Construye una nueva aplicación de recomendación](assignment.es.md) diff --git a/4-Classification/4-Applied/translations/README.it.md b/4-Classification/4-Applied/translations/README.it.md deleted file mode 100644 index cba81d55..00000000 --- a/4-Classification/4-Applied/translations/README.it.md +++ /dev/null @@ -1,336 +0,0 @@ -# Costruire un'App Web per Consigliare una Cucina - -In questa lezione si creerà un modello di classificazione utilizzando alcune delle tecniche apprese nelle lezioni precedenti e con il delizioso insieme di dati sulla cucina utilizzato in questa serie. Inoltre, si creerà una piccola app web per utilizzare un modello salvato, sfruttando il runtime web di Onnx. - -Uno degli usi pratici più utili dell'apprendimento automatico è la creazione di sistemi di raccomandazione e oggi si può fare il primo passo in quella direzione! - -[![Introduzione ai Sistemi di Raccomandazione](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 Fare clic sull'immagine sopra per un video - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/?loc=it) - -In questa lezione, si imparerà: - -- Come costruire un modello e salvarlo come modello Onnx -- Come usare Netron per ispezionare il modello -- Come utilizzare il modello in un'app web per l'inferenza - -## Costruire il modello - -La creazione di sistemi ML applicati è una parte importante dell'utilizzo di queste tecnologie per i sistemi aziendali. Si possono utilizzare i modelli all'interno delle proprie applicazioni web (e quindi utilizzarli in un contesto offline se necessario) utilizzando Onnx. - -In una [lezione precedente](../../../3-Web-App/1-Web-App/translations/README.it.md) si è costruito un modello di regressione sugli avvistamenti di UFO, è stato serializzato e lo si è utilizzato in un'app Flask. Sebbene questa architettura sia molto utile da conoscere, è un'app Python completa e i requisiti potrebbero includere l'uso di un'applicazione JavaScript. - -In questa lezione si può creare un sistema di inferenza di base utilizzando JavaScript. Prima, tuttavia, è necessario addestrare un modello e convertirlo per l'utilizzo con Onnx. - -## Esercizio - modello di classificazione di addestramento - -Innanzitutto, addestrare un modello di classificazione utilizzando l'insieme di dati pulito delle cucine precedentemente usato. - -1. Iniziare importando librerie utili: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Serve '[skl2onnx](https://onnx.ai/sklearn-onnx/)' per poter convertire il modello di Scikit-learn in formato Onnx. - -1. Quindi si lavora con i dati nello stesso modo delle lezioni precedenti, leggendo un file CSV usando `read_csv()`: - - ```python - data = pd.read_csv('../data/cleaned_cuisine.csv') - data.head() - ``` - -1. Rimuovere le prime due colonne non necessarie e salvare i dati rimanenti come "X": - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Salvare le etichette come "y": - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Iniziare la routine di addestramento - -Verrà usata la libreria 'SVC' che ha una buona precisione. - -1. Importare le librerie appropriate da 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. Separare gli insiemi di allenamento e test: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Costruire un modello di classificazione SVC come fatto nella lezione precedente: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Ora provare il modello, chiamando `predict()`: - - ```python - y_pred = model.predict(X_test) - ``` - -1. Stampare un rapporto di classificazione per verificare la qualità del modello: - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Come visto prima, la precisione è buona: - - ```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 - ``` - -### Convertire il modello in Onnx - -Assicurarsi di eseguire la conversione con il numero tensore corretto. Questo insieme di dati ha 380 ingredienti elencati, quindi è necessario annotare quel numero in `FloatTensorType`: - -1. Convertire usando un numero tensore di 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. Creare l'onx e salvarlo come file **model.onnx**: - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Nota, si possono passare le[opzioni](https://onnx.ai/sklearn-onnx/parameterized.html) nello script di conversione. In questo caso, si è passato 'nocl' come True e 'zipmap' come False. Poiché questo è un modello di classificazione, si ha la possibilità di rimuovere ZipMap che produce un elenco di dizionari (non necessario). `nocl` si riferisce alle informazioni sulla classe incluse nel modello. Ridurre le dimensioni del modello impostando `nocl` su 'True'. - -L'esecuzione dell'intero notebook ora creerà un modello Onnx e lo salverà in questa cartella. - -## Visualizzare il modello - -I modelli Onnx non sono molto visualizzabili in Visual Studio code, ma c'è un ottimo software gratuito che molti ricercatori usano per visualizzare il modello per assicurarsi che sia costruito correttamente. Scaricare [Netron](https://github.com/lutzroeder/Netron) e aprire il file model.onnx. Si può vedere il modello semplice visualizzato, con i suoi 380 input e classificatore elencati: - -![Vista Netron ](../images/netron.png) - -Netron è uno strumento utile per visualizzare i modelli. - -Ora si è pronti per utilizzare questo modello accurato in un'app web. Si costruisce un'app che tornerà utile quando si guarda nel frigorifero e si prova a capire quale combinazione di ingredienti avanzati si può usare per cucinare una determinata tipologia di cucina, come determinato dal modello. - -## Creare un'applicazione web di raccomandazione - -Si può utilizzare il modello direttamente in un'app web. Questa architettura consente anche di eseguirlo localmente e anche offline se necessario. Iniziare creando un file `index.html` nella stessa cartella in cui si è salvato il file `model.onnx`. - -1. In questo file _index.html_, aggiungere il seguente codice markup: - - ```html - - -
- Cuisine Matcher -
- - ... - - - ``` - -1. Ora, lavorando all'interno del tag `body` , aggiungere un piccolo markup per mostrare un elenco di caselle di controllo che riflettono alcuni ingredienti: - - ```html -

Check your refrigerator. What can you create?

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- -
- ``` - - Notare che a ogni casella di controllo viene assegnato un valore. Questo riflette l'indice in cui si trova l'ingrediente in base all'insieme di dati. Apple, ad esempio, in questo elenco alfabetico, occupa la quinta colonna, quindi il suo valore è "4" poiché si inizia a contare da 0. Si può consultare il [foglio di calcolo degli ingredienti](../../data/ingredient_indexes.csv) per scoprire l'indice di un determinato ingrediente. - - Continuando il lavoro nel file index.html, aggiungere un blocco di script in cui viene chiamato il modello dopo la chiusura del tag `` finale. - -1. Innanzitutto, importare il [runtime Onnx](https://www.onnxruntime.ai/): - - ```html - - ``` - - > Onnx Runtime viene utilizzato per consentire l'esecuzione dei modelli Onnx su un'ampia gamma di piattaforme hardware, comprese le ottimizzazioni e un'API da utilizzare. - -1. Una volta che il Runtime è a posto, lo si può chiamare: - - ```javascript - - ``` - -In questo codice, accadono diverse cose: - -1. Si è creato un array di 380 possibili valori (1 o 0) da impostare e inviare al modello per l'inferenza, a seconda che una casella di controllo dell'ingrediente sia selezionata. -2. Si è creata una serie di caselle di controllo e un modo per determinare se sono state selezionate in una funzione `init` chiamata all'avvio dell'applicazione. Quando una casella di controllo è selezionata, l 'array `ingredients` viene modificato per riflettere l'ingrediente scelto. -3. Si è creata una funzione `testCheckboxes` che controlla se una casella di controllo è stata selezionata. -4. Si utilizza quella funzione quando si preme il pulsante e, se una casella di controllo è selezionata, si avvia l'inferenza. -5. La routine di inferenza include: - 1. Impostazione di un caricamento asincrono del modello - 2. Creazione di una struttura tensoriale da inviare al modello - 3. Creazione di "feed" che riflettano l'input `float_input` creato durante l'addestramento del modello (si può usare Netron per verificare quel nome) - 4. Invio di questi "feed" al modello e attesa di una risposta - -## Verificare l'applicazione - -Aprire una sessione terminale in Visual Studio Code nella cartella in cui risiede il file index.html. Assicurarsi di avere [http-server](https://www.npmjs.com/package/http-server) installato globalmente e digitare `http-server` al prompt. Dovrebbe aprirsi nel browser un localhost e si può visualizzare l'app web. Controllare quale cucina è consigliata in base ai vari ingredienti: - -![app web degli ingredienti](../images/web-app.png) - -Congratulazioni, si è creato un'app web di "raccomandazione" con pochi campi. Si prenda del tempo per costruire questo sistema! -## 🚀 Sfida - -L'app web è molto minimale, quindi continuare a costruirla usando gli ingredienti e i loro indici dai dati [ingredient_indexes](../../data/ingredient_indexes.csv) . Quali combinazioni di sapori funzionano per creare un determinato piatto nazionale? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/?loc=it) - -## Revisione e Auto Apprendimento - -Sebbene questa lezione abbia appena toccato l'utilità di creare un sistema di raccomandazione per gli ingredienti alimentari, quest'area delle applicazioni ML è molto ricca di esempi. Leggere di più su come sono costruiti questi sistemi: - -- 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/ - -## Compito - -[Creare un nuovo sistema di raccomandazione](assignment.it.md) diff --git a/4-Classification/4-Applied/translations/README.ko.md b/4-Classification/4-Applied/translations/README.ko.md deleted file mode 100644 index 336ecafb..00000000 --- a/4-Classification/4-Applied/translations/README.ko.md +++ /dev/null @@ -1,337 +0,0 @@ -# 요리 추천 Web App 만들기 - -이 강의에서, 이전 강의에서 배웠던 몇 기술과 이 계열에서 사용했던 맛있는 요리 데이터셋으로 classification 모델을 만들 예정입니다. 추가로, Onnx의 웹 런타임을 활용해서, 저장된 모델로 작은 웹 앱을 만들 것입니다. - -머신러닝의 유용하고 실용적인 사용 방식 중에 하나인 recommendation system을 만들고, 오늘 이 쪽으로 처음 걷습니다! - -[![Applied ML](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 영상 보려면 이미지 클릭 - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) - -이 강의에서 다음을 배우게 됩니다: - -- 모델을 만들고 Onnx 모델로 저장하는 방식 -- Netron 사용해서 모델 검사하는 방식 -- 추론을 위한 웹 앱에서 모델을 사용하는 방식 - -## 모델 만들기 - -Applied ML 시스템을 만드는 것은 비지니스 시스템에서 이 기술을 활용하는 부분이 중요합니다. Onnx로 웹 애플리케이션에서 (필요하면 오프라인 컨텍스트에서 사용하기도 합니다) 모델을 사용할 수 있습니다. - -[previous lesson](../../../3-Web-App/1-Web-App/README.md)에서, UFO 목격에 대한 Regression 모델을 만들었고, "pickled" 한 것을, Flask 앱에서 사용했습니다. 이 구조는 알고 있다면 매우 유용하지만, full-stack Python 앱이므로, JavaScript 애플리케이션을 포함해야 된다고 요구될 수 있습니다. - -이 강의에서, 추론할 기초 JavaScript-기반 시스템을 만듭니다. 그러나 먼저, 모델을 훈련하고 Onnx와 같이 사용하기 위해서 변환할 필요가 있습니다. - -## 연습 - classification 모델 훈련 - -먼저, 이미 사용했던 깨끗한 요리 데이터셋으로 classification 모델을 훈련합니다. - -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. 첫 2개의 필요없는 열을 제거하고 'X'로 나머지 데이터를 저장합니다: - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. 'y'로 라벨을 저장합니다: - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### 훈련 루틴 개시하기 - -좋은 정확도의 'SVC' 라이브러리를 사용할 예정입니다. - -1. Scikit-learn에서 적합한 라이브러리를 Import 합니다: - - ```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 Classification model 모델을 만듭니다: - - ```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. 모델의 품질을 확인하기 위해서 classification 리포트를 출력합니다: - - ```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로 변환하기 - -적절한 Tensor 숫자로 변환할 수 있어야 합니다. 데이터셋은 380개 성분이 나열되며, `FloatTensorType`에 숫자를 적어야 합니다: - -1. 380개의 tensor 숫자로 변환하기. - - ```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()) - ``` - - > 노트, 변환 스크립트에서 [options](https://onnx.ai/sklearn-onnx/parameterized.html)을 줄 수 있습니다. 이 케이스에서, 'nocl'는 True, 'zipmap'은 False로 줬습니다. (필수는 아니지만) classification 모델이라서, 사전의 리스트를 만드는 ZipMap을 지울 옵션이 있습니다. `nocl`은 모델에 있는 클래스 정보를 나타냅니다. `nocl`을 'True'로 설정해서 모델의 크기를 줄입니다. - -전체 노트북을 실행하면 Onnx 모델이 만들어지고 폴더에 저장됩니다. - -## 모델 보기 - -Onnx 모델은 Visual Studio code에서 잘 볼 수 없지만, 많은 연구원들이 모델을 잘 만들었는지 보고 싶어서 모델을 시각화할 때 사용하기 매우 좋은 자유 소프트웨어가 있습니다. [Netron](https://github.com/lutzroeder/Netron)을 내려받고 model.onnx 파일을 엽니다. 380개 입력과 나열된 classifier로 간단한 모델을 시각화해서 볼 수 있습니다: - -![Netron visual](../images/netron.png) - -Netron은 모델을 보게 도와주는 도구입니다. - -지금부터 웹 앱에서 neat 모델을 사용할 준비가 되었습니다. 냉장고를 볼 때 편리한 앱을 만들고 모델이 결정해서 건내준 요리를 조리할 수 있게 남은 재료 조합을 찾아봅니다. - -## recommender 웹 애플리케이션 만들기 - -웹 앱에서 바로 모델을 사용할 수 있습니다. 이 구조를 사용한다면 로컬에서 실행할 수 있고 필요하면 오프라인으로 가능합니다. `model.onnx` 파일을 저장한 동일 폴더에서 `index.html` 파일을 만들기 시작합니다. - -1. _index.html_ 파일에서, 다음 마크업을 추가합니다: - - ```html - - -
- Cuisine Matcher -
- - ... - - - ``` - -1. 지금부터, `body` 테그에서 작업하며, 일부 요소를 반영하는 체크박스의 리스트로 보여줄 약간의 마크업을 추가합니다: - - ```html -

Check your refrigerator. What can you create?

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- -
- ``` - - 각 체크박스에 값이 주어졌습니다. 데이터셋에 따라서 식재료가 발견된 인덱스를 반영합니다. Apple을 예시로 들면, 알파벳 리스트에서, 5번째 열을 차지하므로, 0부터 세기 시작해서 값은 '4'가 됩니다. 주어진 식재료의 색인을 찾기 위해서 [ingredients spreadsheet](../../data/ingredient_indexes.csv)를 참고할 수 있습니다 - - index.html 파일에 작업을 계속 이어서, 마지막 닫는 `` 뒤에 모델을 부를 script 블록을 추가합니다. - -1. 먼저, [Onnx Runtime](https://www.onnxruntime.ai/)을 가져옵니다: - - ```html - - ``` - - > Onnx 런타임은 최적화와 사용할 API를 포함해서, 넓은 범위의 하드웨어 플랫폼으로 Onnx 모델을 실행할 때 쓰입니다. - -1. 런타임이 자리에 있다면, 이렇게 부를 수 있습니다: - - ```javascript - - ``` - -이 코드에서, 몇가지 해프닝이 생깁니다: - -1. 체크박스 요소가 체크되었는 지에 따라, 추론해서 모델로 보낼 380개 가능한 값(1 또는 0)의 배열을 만듭니다. -2. 체크박스의 배열과 애플리케이션을 시작하며 불렀던 `init` 함수에서 체크되었는 지 확인할 방식을 만들었습니다. 체크박스를 체크하면, 고른 재료를 반영할 수 있게 `ingredients` 배열이 변경됩니다. -3. 모든 체크박스를 체크했는지 확인하는 `testCheckboxes` 함수를 만들었습니다. -4. 버튼을 누르면 이 함수를 사용하고, 만약 모든 체크박스가 체크되어 있다면, 추론하기 시작합니다. -5. 추론 루틴에 포함됩니다: - 1. 모델의 비동기 로드 세팅하기 - 2. 모델로 보낼 Tensor 구조 만들기 - 3. 모델을 훈련할 때 만들었던 입력 `float_input`을 반영하는 'feeds' 만들기 (Netron으로 이름을 확인할 수 있습니다) - 4. 모델로 'feeds'를 보내고 응답 기다리기 - -## 애플리케이션 테스트하기 - -index.html 파일의 폴더에서 Visual Studio Code로 터미널 세션을 엽니다. 전역적으로 [http-server](https://www.npmjs.com/package/http-server)를 설치했는지 확인하고, 프롬프트에 `http-server`를 타이핑합니다. 로컬 호스트로 열고 웹 앱을 볼 수 있습니다. 여러 재료를 기반으로 추천된 요리를 확인합니다: - -![ingredient web app](../images/web-app.png) - -축하드립니다, 약간의 필드로 'recommendation' 웹 앱을 만들었습니다. 시간을 조금 내어 이 시스템을 만들어봅니다! - -## 🚀 도전 - -이 웹 앱은 매우 작아서, [ingredient_indexes](../../data/ingredient_indexes.csv) 데이터에서 성분과 인덱스로 계속 만듭니다. 주어진 국민 요리를 만드려면 어떤 풍미 조합으로 작업해야 되나요? - -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) - -## 검토 & 자기주도 학습 - -이 강의에서 식품 재료에 대한 recommendation 시스템 구축의 유용함을 다뤘지만, 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/ - -## 과제 - -[Build a new recommender](../assignment.md) diff --git a/4-Classification/4-Applied/translations/README.pt-br.md b/4-Classification/4-Applied/translations/README.pt-br.md deleted file mode 100644 index 07c24e39..00000000 --- a/4-Classification/4-Applied/translations/README.pt-br.md +++ /dev/null @@ -1,337 +0,0 @@ -# Construindo uma aplicação Web para recomendar culinária - -Nesta lição, você construirá um modelo de classificação usando algumas das técnicas que aprendeu nas lições anteriores e com o _dataset_ de cozinhas deliciosas usado ao longo desta série. Além disso, você construirá uma pequena aplicação Web para usar um modelo salvo, aproveitando o tempo de execução da web do Onnx. - -Um dos usos práticos mais úteis do aprendizado de máquina é criar sistemas de recomendação, e você pode dar o primeiro passo nessa direção hoje! - -[![Introdução a Sistemas de Recomendação](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 Clique na imagem acima para ver um vídeo - -## [Questionário inicial](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25?loc=ptbr) - -Nesta lição você aprenderá: - -- Como construir um modelo e salvá-lo como um modelo Onnx -- Como usar o Netron para visualizar o modelo -- Como usar seu modelo em uma aplicação Web para inferência - -## Construindo seu modelo - -Construir sistemas aplicados de ML é uma parte importante para o aproveitamento dessas tecnologias voltadas para sistemas de negócios. Você pode usar modelos dentro de aplicações Web (e, portanto, usá-los em um contexto offline, se necessário) usando Onnx. - -Em uma [lição anterior](../../../3-Web-App/1-Web-App/translations/README.pt-br.md), você construiu um modelo de regressão sobre avistamentos de OVNIs, aplicou "pickle" e o usou em uma aplicação Flask. Embora seja muito útil conhecer essa arquitetura, é uma aplicação full-stack Python e seus requisitos podem incluir o uso de JavaScript. - -Nesta lição, você pode construir um sistema básico baseado em JavaScript para inferência. Mas primeiro, você precisa treinar um modelo e convertê-lo para uso através do Onnx. - -## Exercício - treinando um modelo de classificação - -Primeiro, treine um modelo de classificação usando o _dataset_ que usamos anteriormente. - -1. Comece importando algumas bibliotecas: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Você precisará da '[skl2onnx](https://onnx.ai/sklearn-onnx/)' para ajudar a converter seu modelo Scikit-learn para o formato Onnx. - -1. Trabalhe com seus dados da mesma maneira que você fez nas lições anteriores, lendo um arquivo CSV usando `read_csv()`: - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -1. Remova as duas primeiras colunas desnecessárias e salve os dados restantes na variável 'X': - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Salve as categorias na variável 'y': - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Começando a rotina de treinamento - -Usaremos a biblioteca 'SVC' que tem boa acurácia. - -1. Importe as bibliotecas apropriadas do 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. Separe os dados em dados de treinamento e teste: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Construa um modelo de classificação SVC como você fez na lição anterior: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Agora teste seu modelo, chamando o método `predict()`: - - ```python - y_pred = model.predict(X_test) - ``` - -1. Imprima um relatório de classificação para verificar a qualidade do modelo: - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Como vimos antes, a acurácia é boa: - - ```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 - ``` - -### Convertendo seu modelo para o formato Onnx - -Certifique-se de fazer a conversão adequada do número Tensor. Este _dataset_ tem 380 ingredientes listados, então você precisa anotar esse número usando a `FloatTensorType`: - -1. Converta usando um número tensor de 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. Crie a variável onx e armazene como um arquivo chamado **model.onnx**: - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Observe, você pode passar um dicionário em [options](https://onnx.ai/sklearn-onnx/parameterized.html) no seu script de conversão. Nesse caso, passamos 'nocl' como True e 'zipmap' como False. Por ser um modelo de classificação, você tem a opção de remover o ZipMap, que produz uma lista de dicionários (não é necessário). `nocl` refere-se às informações de classe incluídas no modelo. Reduza o tamanho do seu modelo configurando `nocl` para 'True'. - -Executando o _notebook_ inteiro agora irá construir um modelo Onnx e salvá-lo nesta pasta. - -## Visualizando seu modelo - -Os modelos Onnx não são muito visíveis no código do Visual Studio, mas existe um software livre muito bom que muitos pesquisadores usam para visualizar o modelo e garantir que ele seja construído corretamente. Baixe o programa [Netron](https://github.com/lutzroeder/Netron) e abra seu arquivo model.onnx com ele. Você pode ver seu modelo simples com suas 380 entradas e suas possíveis saídas: - -![Visualização Netron](../images/netron.png) - -Netron é uma ferramenta útil para visualizar seus modelos. - -Estamos prontos para usar este modelo bacana em uma aplicação Web. Vamos construir uma aplicação que será útil pra quando você olhar em sua geladeira e tentar descobrir qual combinação de seus ingredientes você pode usar para cozinhar um prato de uma determinada culinária específica, conforme determinado por seu modelo. - -## Criando uma aplicação Web de recomendação - -Você pode usar seu modelo diretamente em uma aplicação Web. Essa arquitetura também permite executá-lo localmente e até mesmo offline, se necessário. Comece criando um arquivo `index.html` na mesma pasta onde você armazenou seu arquivo` model.onnx`. - -1. No arquivo _index.html_, adicione o seguinte _markup_: - - ```html - - -
- Cuisine Matcher -
- - ... - - - ``` - -1. Trabalhando com a tag `body`, adicione um pequeno _markup_ para mostrar uma lista de caixas de seleção (input) refletindo alguns ingredientes: - - ```html -

Check your refrigerator. What can you create?

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- -
- ``` - - Observe que cada caixa de seleção recebe um valor. Este valor reflete o índice onde o ingrediente é encontrado de acordo com o _dataset_. O ingrediente "apple", por exemplo, ocupa a quinta coluna, então seu valor é '4' já que começamos a contar em 0. Você pode consultar a [planilha de ingredientes](../../data/ingredient_indexes.csv) para descobrir um determinado índice do ingrediente. - - Continuando seu trabalho no arquivo _index.html_, vamos adicionar um bloco de script onde o modelo é chamado após o fechamento final ``. - -1. Primeiro, importe o [Onnx Runtime](https://www.onnxruntime.ai/): - - ```html - - ``` - - > Onnx Runtime é usado para permitir a execução de seus modelos Onnx em uma ampla gama de plataformas de hardware, incluindo otimizações e uma API. - -1. Assim que o Runtime estiver pronto, você pode chamá-lo: - - ```javascript - - ``` - -Neste código, várias coisas acontecem: - -1. Existe uma matriz de 380 valores possíveis (1 ou 0) para serem definidos e enviados ao modelo para inferência, dependendo se a caixa de seleção de um ingrediente está marcada. -2. Existe um array de caixas de seleção e uma maneira de determinar se elas foram verificadas é usando a função `init` que é chamada quando a aplicação é iniciada. Quando uma caixa de seleção é marcada, o array `ingredients` é atualizado para refletir o ingrediente escolhido. -3. Existe uma função `testCheckboxes` que verifica se alguma caixa de seleção foi marcada. -4. Você usa essa função quando o botão é pressionado e, se alguma caixa de seleção estiver marcada, você inicia a inferência. -5. A rotina de inferência inclui: - 1. Carregar o modelo de forma assíncrona - 2. Criar uma estrutura de Tensores para enviar ao modelo - 3. Criar 'feeds' que refletem a entrada `float_input` que você criou ao treinar seu modelo (você pode usar o Netron para verificar esse nome) - 4. Enviar esses 'feeds' para a modelo e aguardar uma resposta - -## Testando sua aplicação - -Abra uma sessão de terminal (prompt, cmd) no Visual Studio Code na pasta onde está o arquivo _index.html_. Certifique-se de ter o pacote [http-server](https://www.npmjs.com/package/http-server) instalado globalmente e digite `http-server` no prompt. Um _localhost_ será aberto e você pode visualizar sua aplicação. Verifique qual cozinha é recomendada com base nos ingredientes: - -![Aplicação Web de Ingredientes](../images/web-app.png) - -Parabéns, você criou uma aplicação Web de 'recomendação' com alguns campos. Dedique algum tempo para aprimorar o sistema! - -## 🚀Desafio - -Sua aplicação é simples, portanto, adicione outros ingredientes observando seus índices na [planilha de ingredientes](../../data/ingredient_indexes.csv). Que combinações de sabores funcionam para criar um determinado prato? - -## [Questionário para fixação](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26?loc=ptbr) - -## Revisão e Auto Aprendizagem - -Embora esta lição tenha apenas abordado sobre a criação de um sistema de recomendação para ingredientes alimentícios, esta área de aplicações de ML é muito rica em exemplos. Leia mais sobre como esses sistemas são construídos: - -- 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/ - -## Tarefa - -[Construindo um recomendador](assignment.pt-br.md). diff --git a/4-Classification/4-Applied/translations/README.tr.md b/4-Classification/4-Applied/translations/README.tr.md deleted file mode 100644 index fea7f0cf..00000000 --- a/4-Classification/4-Applied/translations/README.tr.md +++ /dev/null @@ -1,336 +0,0 @@ -# Mutfak Önerici Bir Web Uygulaması Oluşturun - -Bu derste, önceki derslerde öğrendiğiniz bazı yöntemleri kullanarak, bu seri boyunca kullanılan leziz mutfak veri setiyle bir sınıflandırma modeli oluşturacaksınız. Ayrıca, kaydettiğiniz modeli kullanmak üzere, Onnx'un web çalışma zamanından yararlanan küçük bir web uygulaması oluşturacaksınız. - -Makine öğreniminin en faydalı pratik kullanımlarından biri, önerici/tavsiyeci sistemler oluşturmaktır ve bu yöndeki ilk adımınızı bugün atabilirsiniz! - -[![Önerici Sistemler Tanıtımı](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> :movie_camera: Video için yukarıdaki fotoğrafa tıklayın - -## [Ders öncesi kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/?loc=tr) - -Bu derste şunları öğreneceksiniz: - -- Bir model nasıl oluşturulur ve Onnx modeli olarak kaydedilir -- Modeli denetlemek için Netron nasıl kullanılır -- Modeliniz çıkarım için bir web uygulamasında nasıl kullanılabilir - -## Modelinizi oluşturun - -Uygulamalı Makine Öğrenimi sistemleri oluşturmak, bu teknolojilerden kendi iş sistemleriniz için yararlanmanızın önemli bir parçasıdır. Onnx kullanarak modelleri kendi web uygulamalarınız içerisinde kullanabilirsiniz (Böylece gerektiğinde çevrim dışı bir içerikte kullanabilirsiniz.). - -[Önceki bir derste](../../../3-Web-App/1-Web-App/README.md) UFO gözlemleriyle ilgili bir Regresyon modeli oluşturmuş, "pickle" kullanmış ve bir Flask uygulamasında kullanmıştınız. Bu mimariyi bilmek çok faydalıdır, ancak bu tam yığın Python uygulamasıdır ve bir JavaScript uygulaması kullanımı gerekebilir. - -Bu derste, çıkarım için temel JavaScript tabanlı bir sistem oluşturabilirsiniz. Ancak öncelikle, bir model eğitmeniz ve Onnx ile kullanım için dönüştürmeniz gerekmektedir. - -## Alıştırma - sınıflandırma modelini eğitin - -Öncelikle, kullandığımız temiz mutfak veri setini kullanarak bir sınıflandırma modeli eğitin. - -1. Faydalı kütüphaneler almakla başlayın: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Scikit-learn modelinizi Onnx biçimine dönüştürmeyi sağlamak için '[skl2onnx](https://onnx.ai/sklearn-onnx/)'a ihtiyacınız var. - -1. Sonra, önceki derslerde yaptığınız şekilde, `read_csv()` kullanarak bir CSV dosyasını okuyarak veriniz üzerinde çalışın: - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -1. İlk iki gereksiz sütunu kaldırın ve geriye kalan veriyi 'X' olarak kaydedin: - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Etiketleri 'y' olarak kaydedin: - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Eğitme rutinine başlayın - -İyi doğruluğu olan 'SVC' kütüphanesini kullanacağız. - -1. Scikit-learn'den uygun kütüphaneleri alın: - - ```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. Eğitme ve sınama kümelerini ayırın: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Önceki derste yaptığınız gibi bir SVC Sınıflandırma modeli oluşturun: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Şimdi, `predict()` fonksiyonunu çağırarak modelinizi sınayın: - - ```python - y_pred = model.predict(X_test) - ``` - -1. Modelin kalitesini kontrol etmek için bir sınıflandırma raporu bastırın: - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Daha önce de gördüğümüz gibi, doğruluk iyi: - - ```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 - ``` - -### Modelinizi Onnx'a dönüştürün - -Dönüştürmeyi uygun Tensor sayısıyla yaptığınıza emin olun. Bu veri seti listelenmiş 380 malzeme içeriyor, dolayısıyla bu sayıyı `FloatTensorType` içinde belirtmeniz gerekiyor: - -1. 380 tensor sayısını kullanarak dönüştürün. - - ```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'u oluşturun ve **model.onnx** diye bir dosya olarak kaydedin: - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Not olarak, dönüştürme senaryonuzda [seçenekler](https://onnx.ai/sklearn-onnx/parameterized.html) geçirebilirsiniz. Biz bu durumda, 'nocl' parametresini True ve 'zipmap' parametresini 'False' olarak geçirdik. Bu bir sınıflandırma modeli olduğundan, bir sözlük listesi üreten (gerekli değil) ZipMap'i kaldırma seçeneğiniz var. `nocl`, modelde sınıf bilgisinin barındırılmasını ifade eder. `nocl` parametresini 'True' olarak ayarlayarak modelinizin boyutunu küçültün. - -Tüm not defterini çalıştırmak şimdi bir Onnx modeli oluşturacak ve bu klasöre kaydedecek. - -## Modelinizi inceleyin - -Onnx modelleri Visual Studio code'da pek görünür değiller ama birçok araştırmacının modelin doğru oluştuğundan emin olmak üzere modeli görselleştirmek için kullandığı çok iyi bir yazılım var. [Netron](https://github.com/lutzroeder/Netron)'u indirin ve model.onnx dosyanızı açın. 380 girdisi ve sınıflandırıcısıyla basit modelinizin görselleştirildiğini görebilirsiniz: - -![Netron görseli](../images/netron.png) - -Netron, modellerinizi incelemek için faydalı bir araçtır. - -Şimdi, bu düzenli modeli web uygulamanızda kullanmak için hazırsınız. Buzdolabınıza baktığınızda ve verilen bir mutfak için artık malzemelerin hangi birleşimini kullanabileceğinizi bulmayı denediğinizde kullanışlı olacak bir uygulama oluşturalım. Bu birleşim modeliniz tarafından belirlenecek. - -## Önerici bir web uygulaması oluşturun - -Modelinizi doğrudan bir web uygulamasında kullanabilirsiniz. Bu mimari, modelinizi yerelde ve hatta gerektiğinde çevrim dışı çalıştırabilmenizi de sağlar. `model.onnx` dosyanızı kaydettiğiniz klasörde `index.html` dosyasını oluşturarak başlayın. - -1. Bu _index.html_ dosyasında aşağıdaki işaretlemeyi ekleyin: - - ```html - - -
- Cuisine Matcher -
- - ... - - - ``` - -1. Şimdi, `body` etiketleri içinde çalışarak, bazı malzemeleri ifade eden bir onay kutusu listesi göstermek için küçük bir işaretleme ekleyin: - - ```html -

Check your refrigerator. What can you create?

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- -
- ``` - - Her bir onay kutusuna bir değer verildiğine dikkat edin. Bu, veri setine göre malzemenin bulunduğu indexi ifade eder. Örneğin bu alfabetik listede elma beşinci sütundadır, dolayısıyla onun değeri '4'tür çünkü saymaya 0'dan başlıyoruz. Verilen malzemenin indexini görmek için [malzemeler tablosuna](../../data/ingredient_indexes.csv) başvurabilirsiniz. - - index.html dosyasındaki işinize devam ederek, son `` kapamasından sonra modelinizin çağrılacağı bir script bloğu ekleyin. - -1. Öncelikle, [Onnx Runtime](https://www.onnxruntime.ai/) alın: - - ```html - - ``` - - > Onnx Runtime, Onnx modelinizin, eniyileştirmeler ve kullanmak için bir API da dahil olmak üzere, geniş bir donanım platform yelpazesinde çalışmasını sağlamak için kullanılır. - -1. Runtime uygun hale geldiğinde, onu çağırabilirsiniz: - - ```javascript - - ``` - -Bu kodda birçok şey gerçekleşiyor: - -1. Ayarlanması ve çıkarım için modele gönderilmesi için, bir malzeme onay kutusunun işaretli olup olmadığına bağlı 380 muhtemel değerden (ya 1 ya da 0) oluşan bir dizi oluşturdunuz. -2. Onay kutularından oluşan bir dizi ve uygulama başladığında çağrılan bir `init` fonksiyonunda işaretli olup olmadıklarını belirleme yolu oluşturdunuz. Eğer onay kutusu işaretliyse, `ingredients` dizisi, seçilen malzemeyi ifade etmek üzere değiştirilir. -3. Herhangi bir onay kutusunun işaretli olup olmadığını kontrol eden bir `testCheckboxes` fonksiyonu oluşturdunuz. -4. Düğmeye basıldığında o fonksiyonu kullanıyor ve eğer herhangi bir onay kutusu işaretlenmişse çıkarıma başlıyorsunuz. -5. Çıkarım rutini şunları içerir: - 1. Makinenin eşzamansız bir yüklemesini ayarlama - 2. Modele göndermek için bir Tensor yapısı oluşturma - 3. Modelinizi eğitirken oluşturduğunuz `float_input` (Bu adı doğrulamak için Netron kullanabilirsiniz.) girdisini ifade eden 'feeds' oluşturma - 4. Bu 'feeds'i modele gönderme ve yanıt için bekleme - -## Uygulamanızı test edin - -index.html dosyanızın olduğu klasördeyken Visual Studio Code'da bir terminal açın. Global kapsamda [http-server](https://www.npmjs.com/package/http-server) indirilmiş olduğundan emin olun ve istemde `http-server` yazın. Bir yerel ana makine açılmalı ve web uygulamanızı görebilirsiniz. Çeşitli malzemeleri baz alarak hangi mutfağın önerildiğine bakın: - -![malzeme web uygulaması](../images/web-app.png) - -Tebrikler, birkaç değişkenle bir 'önerici' web uygulaması oluşturdunuz! Bu sistemi oluşturmak için biraz zaman ayırın! -## :rocket: Meydan okuma - -Web uygulamanız çok minimal, bu yüzden [ingredient_indexes](../../data/ingredient_indexes.csv) verisinden malzemeleri ve indexlerini kullanarak web uygulamanızı oluşturmaya devam edin. Verilen bir ulusal yemeği yapmak için hangi tat birleşimleri işe yarıyor? - -## [Ders sonrası kısa sınavı](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/?loc=tr) - -## Gözden Geçirme & Kendi Kendine Çalışma - -Bu dersin sadece yemek malzemeleri için bir öneri sistemi oluşturmanın olanaklarına değinmesiyle beraber, makine öğrenimi uygulamalarının bu alanı örnekler açısından çok zengin. Bu sistemlerin nasıl oluşturulduğu hakkında biraz daha okuyun: - -- 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/ - -## Ödev - -[Yeni bir önerici oluşturun](assignment.tr.md) diff --git a/4-Classification/4-Applied/translations/README.zh-CN.md b/4-Classification/4-Applied/translations/README.zh-CN.md deleted file mode 100644 index f39c2907..00000000 --- a/4-Classification/4-Applied/translations/README.zh-CN.md +++ /dev/null @@ -1,333 +0,0 @@ -# 构建一个美食推荐 Web 应用程序 - -在本节课程中,您将使用您在之前课程中学习到的一些方法和本系列课程用到的美食数据集来构建一个分类模型。此外,您还会使用 Onnx Web 运行时构建一个小的 Web 应用程序去使用保存的模型。 -机器学习最有用的实际运用之一就是构建推荐系统,今天您可以朝这个方向迈出第一步了! - -[![推荐系统介绍](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 点击上面的图片查看视频 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) - -本节课程中您将会学习: - -- 如何构建模型并将它保存为 Onnx 模型 -- 如何使用 Netron 去检查模型 -- 如何在 Web 应用程序中使用您的模型去进行推理 - -## 构建您的模型 - -建立应用机器学习系统是让这些技术赋能您的业务系统的一个重要部分。通过使用 Onnx 您可以在 Web 应用程序中使用模型(如果需要可以离线使用它们)。 - -[之前的课程](../../../3-Web-App/1-Web-App/translations/README.zh-cn.md)中,您构建并 “pickled” 了一个 UFO 目击事件的回归模型,并在一个 Flask 应用程序中使用。虽然了解它的架构会很有用,但这是一个全栈 Python 应用程序,您的需求可能包括使用 JavaScript 应用程序。 - -在本节课程中,您可以构建一个基于 JavaScript 的基础系统进行推理。不过无论如何,首先您需要训练一个模型并将其转换给 Onnx 使用。 - -## 练习 - 训练分类模型 - -首先,使用之前我们使用的清洗后的菜品数据集来训练一个分类模型。 - -1. 从导入库开始: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - 您需要 [skl2onnx](https://onnx.ai/sklearn-onnx/) 来帮助您将 Scikit-learn 模型转换为 Onnx 格式。 - -2. 然后使用 `read_csv()` 读取一个 CSV 文件,按照您在之前课程中用的相同方式处理您的数据: - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -3. 删除前两列无用的列,将其余的数据保存为 X: - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -4. 保存标签为 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 - ``` - -2. 拆分训练数据和测试数据: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -3. 像您在之前课程中所做的一样,构建一个 SVC 分类器模型: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -4. 现在,调用 `predict()` 测试您的模型: - - ```python - y_pred = model.predict(X_test) - ``` - -5. 打印分类报告来检查模型质量: - - ```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}} - ``` - -2. 创建 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)。在这种情况下,我们传入设为 True 的 `nocl` 参数和设为 False 的 `zipmap` 参数。由于这是一个分类模型,您可以选择删除产生字典列表的 ZipMap(不必要)。`nocl` 指模型中包含的类别信息。通过将 `nocl` 设置为 True 来减小模型的大小。 - -运行完整的 notebook 工程文件现在将会构建一个 Onnx 模型并保存到此文件夹中。 - -## 查看您的模型 - -在 Visual Studio Code 中,Onnx 模型的结构不是很清晰。但有一个非常好的免费软件,很多研究员用它做模型可视化以保证模型被正确构建。下载 [Netron](https://github.com/lutzroeder/Netron) 然后打开您的 model.onnx 文件。您能看到您的简单模型被可视化了,其中列举有传入的参数 `380` 和分类器: - -![Netron 可视化](../images/netron.png) - -Netron 是查看您模型的有用工具。 - -现在您准备好了在 Web 应用程序中使用这个简洁的模型。我们来构建一个应用程序,当您查看冰箱时它会派上用场,并试图找出您可以使用哪种剩余食材组合来烹饪给定的菜肴,这由您的模型决定。 - -## 构建一个推荐器 Web 应用程序 - -您可以在 Web 应用程序中直接使用您的模型。这种架构允许您在本地运行,如果需要的话甚至可以离线运行。我们从在您保存 `model.onnx` 文件的相同目录下创建一个 `index.html` 文件开始。 - -1. 在 _index.html_ 文件中,添加以下标签: - - ```html - - -
- Cuisine Matcher -
- - ... - - - ``` - -2. 现在在 `body` 标签内,添加一些标签来展示代表一些配料的 checkbox 列表: - - ```html -

Check your refrigerator. What can you create?

-
-
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - -
-
-
- -
- ``` - - 注意,每个 checkbox 都给定了一个值,它反映了根据数据集可以找到对应配料的索引。例如,在这个按字母顺序排列的列表中,Apple 在第五列,由于我们从 0 开始计数,因此它的值是 4 。您可以查阅[配料表格](../../data/ingredient_indexes.csv)来查找给定配料的索引。 - - 继续您在 index.htlm 文件中的工作,在最后一个闭合的 `` 后添加一个脚本代码块去调用模型。 - -3. 首先,导入 [Onnx Runtime](https://www.onnxruntime.ai/): - - ```html - - ``` - - > Onnx Runtime 用于在多种硬件平台上运行 Onnx 模型,包括优化和使用的 API。 - -4. 一旦 Runtime 就位,您可以调用它: - - ```javascript - - ``` - -在这段代码中,发生了这些事情: - -1. 您创建了一个由 380 个可能值( 1 或 0 )组成的数组,这些值被发送给模型进行推理,具体取决于是否选中了配料的 checkbox。 -2. 您创建了一个 checkbox 数组并在应用程序启动时调用的 `init` 方法中确定它们是否被选中。选中 checkbox 后,`ingredients` 数组会发生变化来反映所选的配料。 -3. 您创建了一个 `testCheckboxes` 方法检查是否有 checkbox 被选中。 -4. 当按钮被点击将会使用 `startInference` 方法,如果有任一 checkbox 被选中,该方法会开始推理。 -5. 推理过程包括: - 1. 设置异步加载模型 - 2. 创建了一个要传入模型的张量结构 - 3. 创建 `feeds`,它反映了您在训练模型时创建的 `float_input` 输入(您可以使用 Netron 来验证具体名称) - 4. 发送 `feeds` 到模型并等待返回结果 - -## 测试您的应用程序 - -在 Visual Studio Code 中,从您的 index.html 文件所在的文件夹打开一个终端。请确保您已经全局安装了 [http-server](https://www.npmjs.com/package/http-server),按提示输入 `http-server`,一个 localhost 页面将会打开,您可以浏览您的 Web 应用程序。检查一下给出不同的配料会有什么菜品会被推荐: - -![菜品配料 web 应用程序](../images/web-app.png) - -祝贺您已经创建了一个包含几个字段的 “推荐” Web 应用程序。花点时间来构建这个系统吧! - -## 🚀挑战 - -您的 Web 应用程序还很小巧,所以继续使用[配料索引](../../data/ingredient_indexes.csv)中的配料数据和索引数据来构建它吧。用什么样的口味组合才能创造出一道特定的民族菜肴? - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) - -## 回顾与自学 - -虽然本课程只讨论了创建一个菜品配料推荐系统的效果,但机器学习的应用程序领域有非常丰富的示例。阅读了解这些系统是如何构建的: - -- 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/ - -## 作业 - -[构建一个推荐器](../translations/assignment.zh-CN.md) diff --git a/4-Classification/4-Applied/translations/assignment.es.md b/4-Classification/4-Applied/translations/assignment.es.md deleted file mode 100644 index 2121ab1a..00000000 --- a/4-Classification/4-Applied/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Construye un recomendador - -## Instrucciones - -Dados tus ejercicios en esta lección, ahora sabes cómo construir aplicaciones web basadas en JavaScript usando el Runtime Onnx y un modelo Onnx convertido. Experimenta con la construcción de un nuevo recomendador usando los datos de estas lecciones u obtenidos de otro lugar (por favor, da los créditos correspondientes). Debes crear un recomendador de mascotas dados diversos atributos de personalidad, o un recomendador de géneros musicales basados en el estado de ánimo de una persona. ¡Sé creativo! - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | Se presentó tanto una aplicación web como un notebook, ambos bien documentados y ejecutándose | Uno de esos dos falta o contiene errores | Ambos faltan o están defectuosos | diff --git a/4-Classification/4-Applied/translations/assignment.it.md b/4-Classification/4-Applied/translations/assignment.it.md deleted file mode 100644 index cc926c72..00000000 --- a/4-Classification/4-Applied/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Creare un sistema di raccomandazione - -## Istruzioni - -Dati gli esercizi di questa lezione, ora si conosce come creare un'app Web basata su JavaScript utilizzando Onnx Runtime e un modello Onnx convertito. Sperimentare con la creazione di un nuovo sistema di raccomandazione utilizzando i dati di queste lezioni o provenienti da altre parti (citare le fonti, per favore). Si potrebbe creare un sistema di raccomandazione di animali domestici in base a vari attributi della personalità o un sistema di raccomandazione di genere musicale basato sull'umore di una persona. Dare sfogo alla creatività! - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | Vengono presentati un'app Web e un notebook, entrambi ben documentati e funzionanti | Uno di quei due è mancante o difettoso | Entrambi sono mancanti o difettosi | diff --git a/4-Classification/4-Applied/translations/assignment.ko.md b/4-Classification/4-Applied/translations/assignment.ko.md deleted file mode 100644 index 940655f0..00000000 --- a/4-Classification/4-Applied/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 추천기를 만들어 봅시다 - -## 설명 - -이번 수업을 통해 오닉스 런타임(ONNX Runtime) 및 오닉스(ONNX) 형식으로 변환된 모델을 이용해 자바스크립트(JavaScript) 기반의 웹 애플리케이션을 구축하는 법을 배워 보았습니다. 과제로 이 머신러닝 과정에서 제공하는 데이터 또는 다른 곳에서 얻은 데이터로 새로운 추천기를 만드는 실험을 해보세요. (다른 곳에서 데이터를 가져올 경우 그 출처를 꼭 밝히시기 바랍니다.) 다양한 성격 특성에 기반한 반려동물 추천기라든지, 음악 청취자의 기분에 기반하여 장르를 추천하는 추천기도 좋습니다. 창의적으로 한번 만들어 보세요! - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ---------------------------------------------------------------------- | ------------------------------------------------------------------------- | ------------------------------------------------------- | -| | 잘 문서화되고 작동하는 웹 애플리케이션과 Jupyter Notebook(노트북)을 제출함 | 웹 애플리케이션 또는 노트북 중 하나를 제출하지 않았거나 둘 중 하나에 결함이 있음 | 웹 애플리케이션과 노트북 둘 다 제출하지 않았거나 결함이 있음 | diff --git a/4-Classification/4-Applied/translations/assignment.pt-br.md b/4-Classification/4-Applied/translations/assignment.pt-br.md deleted file mode 100644 index 219c0b10..00000000 --- a/4-Classification/4-Applied/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Construindo um recomendador - -## Instruções - -Dados os exercícios desta lição, agora você sabe como construir uma aplicação Web baseada em JavaScript usando Onnx Runtime e um modelo Onnx convertido. Experimente construir um novo recomendador usando dados dessas lições ou obtidos em outro lugar (dê crédito, por favor). Você pode criar um recomendador de animais de estimação com vários atributos de personalidade, ou um recomendador de gênero musical baseado no humor de uma pessoa. Use a criatividade! - -## Critérios de avaliação - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | Uma aplicação Web e um _notebook_ foram apresentados, ambos bem documentados e funcionando | Um dos dois está faltando ou com bugs | Não possui nem uma aplicação Web e nem um _notebook_, ou ambos estão com bugs | diff --git a/4-Classification/4-Applied/translations/assignment.tr.md b/4-Classification/4-Applied/translations/assignment.tr.md deleted file mode 100644 index f561bf48..00000000 --- a/4-Classification/4-Applied/translations/assignment.tr.md +++ /dev/null @@ -1,11 +0,0 @@ -# Bir önerici oluşturun - -## Yönergeler - -Bu dersteki alıştırmalar göz önünde bulundurulursa, Onnx Runtime ve dönüştürülmüş bir Onnx modeli kullanarak JavaScript tabanlı web uygulamasının nasıl oluşturulacağını artık biliyorsunuz. Bu derslerdeki verileri veya başka bir yerden kaynaklandırılmış verileri (Lütfen kaynakça verin.) kullanarak yeni bir önerici oluşturma deneyimi kazanın. Verilen çeşitli kişilik özellikleriyle bir evcil hayvan önericisi veya kişinin ruh haline göre bir müzik türü önericisi oluşturabilirsiniz. Yaratıcı olun! - -## Rubrik - -| Ölçüt | Örnek Alınacak Nitelikte | Yeterli | Geliştirme Gerekli | -| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | İyi belgelenen ve çalışan bir web uygulaması ve not defteri sunulmuş | İkisinden biri eksik veya kusurlu | İkisi ya eksik ya da kusurlu | \ No newline at end of file diff --git a/4-Classification/4-Applied/translations/assignment.zh-CN.md b/4-Classification/4-Applied/translations/assignment.zh-CN.md deleted file mode 100644 index de90093e..00000000 --- a/4-Classification/4-Applied/translations/assignment.zh-CN.md +++ /dev/null @@ -1,11 +0,0 @@ -# 构建一个推荐器 - -## 说明 - -根据本课程中的练习,您现在了解了如何使用 Onnx Runtime 和转换后的 Onnx 模型构建基于 JavaScript 的 Web 应用程序。尝试使用课程中的数据或其他来源(请添加致谢)的数据来构建一个新的推荐器。您可以根据不同的个性属性构建一个宠物推荐器,或者根据人的情绪创建音乐流派推荐器。要有创意! - -## 评判标准 - -| 标准 | 优秀 | 中规中矩 | 仍需努力 | -| ---- | --- | -------- | ------- | -| | 提交了一个 Web 应用程序和 notebook 工程文件,两者的注释说明充分并且能正常运行 | 其中一个没提交或者有缺陷 | 两个都没提交或者都有缺陷 | diff --git a/4-Classification/translations/README.es.md b/4-Classification/translations/README.es.md deleted file mode 100644 index d8fdcd46..00000000 --- a/4-Classification/translations/README.es.md +++ /dev/null @@ -1,27 +0,0 @@ -# Introducción a la clasificación - -## Tema regional: Deliciosas cocinas asiáticas e indias 🍜 - -En Asia y la India, las tradiciones alimentarias son muy diversas, ¡y muy deliciosas!. Veamos los datos sobre las cocinas regionales para intentar comprender sus ingredientes. - -![Vendedor de comida tailandesa](../images/thai-food.jpg) -> Photo by Lisheng Chang on Unsplash - -## Lo que aprenderás - -Esta sección, se basará en el estudio anterior de la Regresión y aprenderás sobre otros clasificadores que puedes usar para entender mejor los datos. - -Hay herramientas "low code" útiles que pueden ayudarte a aprender a trabajar con modelos de clasificación. Prueba [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lecciones - -1. [Introducción a la clasificación](../1-Introduction/README.md) -2. [Más clasificadores](../2-Classifiers-1/README.md) -3. [Otros clasificadores](../3-Classifiers-2/README.md) -4. [ML aplicado: construir una aplicación web](../4-Applied/README.md) - -## Créditos - -"Getting started with classification" fue escrito con ♥️ por [Cassie Breviu](https://www.twitter.com/cassiebreviu) y [Jen Looper](https://www.twitter.com/jenlooper) - -El conjunto de datos de cocinas deliciosas se obtuvo de [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). diff --git a/4-Classification/translations/README.hi.md b/4-Classification/translations/README.hi.md deleted file mode 100644 index 91c0357b..00000000 --- a/4-Classification/translations/README.hi.md +++ /dev/null @@ -1,28 +0,0 @@ -# वर्गीकरण के साथ शुरुआत - -## क्षेत्रीय विषय: स्वादिष्ट एशियाई और भारतीय व्यंजन - -एशिया और भारत में खाद्य परंपराएं बेहद विविध हैं, और बहुत स्वादिष्ट हैं! आइए क्षेत्रीय व्यंजनों का डेटा (data) देखकर उनकी सामग्री को समझने का प्रयास करें। - -![थाई भोजन विक्रेता](../images/thai-food.jpg) - -> लीशेंग चैंग (Lisheng Chang) द्वारा अनस्प्लैश (unsplash) पर चित्र - -## आप क्या सीखेंगे - -इस खंड में आप इस पाठ्यक्रम के पूर्व भाग में सीखे गए प्रतिगमन (regression) के कौशल पर निर्माण करेंगे, और अन्य वर्गीकारकों (classifiers) के बारे में जानेंगे। इन वर्गीकारकों का उपयोग करके आप डेटा (data) को बेहतर ढंग से समझ सकते हैं। - -> कई उपकरण हैं जिनकी सहयता से आप न्यूनतम कोड के माध्यम से वर्गीकरण मॉडलों के साथ काम करना सीख सकते हैं। [इस कार्य के लिए अज़ौर म. ल. (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. [व्यावहारिक म. ल. (ML): वेब अनुप्रयोग का निर्माण](../4-Applied/README.md) - -## श्रेय - -"वर्गीकरण के साथ शुरुआत" [कैसी ब्रेवियू](https://twitter.com/cassiebreviu) और [जेन लूपर](https://www.twitter.com/jenlooper) द्वारा ♥️ के साथ लिखा गया था। - -स्वादिष्ट व्यंजनों का डेटासेट (dataset) [कैगल (Kaggle)](https://www.kaggle.com/hoandan/asian-and-indian-cuisines) से प्राप्त किया गया था। \ No newline at end of file diff --git a/4-Classification/translations/README.it.md b/4-Classification/translations/README.it.md deleted file mode 100644 index 0edf03ec..00000000 --- a/4-Classification/translations/README.it.md +++ /dev/null @@ -1,26 +0,0 @@ -# Iniziare con la classificazione - -## Argomento regionale: Deliziose Cucine Asiatiche e Indiane 🍜 - -In Asia e in India, le tradizioni alimentari sono estremamente diverse e molto deliziose! Si darà un'occhiata ai dati sulle cucine regionali per cercare di capirne gli ingredienti. - -![Venditore di cibo tailandese](../images/thai-food.jpg) -> Foto di Lisheng Chang su Unsplash - -## Cosa si imparerà - -In questa sezione si approfondiranno le abilità sulla regressione apprese nella prima parte di questo programma di studi per conoscere altri classificatori da poter utilizzare e che aiuteranno a conoscere i propri dati. - -> Esistono utili strumenti a basso codice che possono aiutare a imparare a lavorare con i modelli di regressione. Si provi [Azure ML per questa attività](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lezioni - -1. [Introduzione alla classificazione](../1-Introduction/translations/README.it.md) -2. [Più classificatori](../2-Classifiers-1/translations/README.it.md) -3. [Ancora altri classificatori](../3-Classifiers-2/translations/README.it.md) -4. [Machine Learning applicato: sviluppare un'app web](../4-Applied/translations/README.it.md) -## Crediti - -"Iniziare con la classificazione" è stato scritto con ♥️ da [Cassie Breviu](https://www.twitter.com/cassieview) e [Jen Looper](https://www.twitter.com/jenlooper). - -L'insieme di dati sulle deliziose cucine proviene da [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). diff --git a/4-Classification/translations/README.ko.md b/4-Classification/translations/README.ko.md deleted file mode 100644 index 4ecd0437..00000000 --- a/4-Classification/translations/README.ko.md +++ /dev/null @@ -1,27 +0,0 @@ -# classification 시작하기 - -## 지역 토픽: 맛있는 아시아 및 인도 요리 🍜 - -아시아와 인도의, 전통 음식은 다양하고, 매우 맛있습니다! 재료를 이해하기 위해서 지역 요리에 대한 데이터를 찾아봅니다. - -![Thai food seller](../images/thai-food.jpg) -> Photo by Lisheng Chang on Unsplash - -## 무엇을 배우나요 - -이 섹션에서, 데이터를 배우며 도음이 될 다른 classifiers을 배우기 위해서 이 커리큘럼 첫 파트에서 배운 regression의 모든 내용을 바탕으로 진행합니다. - -> There are useful low-code tools that can help you learn about working with classification models. Try [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## 강의 - -1. [classification 소개하기](../1-Introduction/translations/README.ko.md) -2. [더 많은 classifiers](../2-Classifiers-1/translations/README.ko.md) -3. [또 다른 classifiers](../3-Classifiers-2/translations/README.ko.md) -4. [응용: web app 만들기](../4-Applied/translations/README.ko.md) - -## 크레딧 - -"Getting started with classification" was written with ♥️ by [Cassie Breviu](https://www.twitter.com/cassieview) and [Jen Looper](https://www.twitter.com/jenlooper). - -맛있는 요리 데이터셋은 [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines)에서 가져왔습니다. diff --git a/4-Classification/translations/README.pt-br.md b/4-Classification/translations/README.pt-br.md deleted file mode 100644 index e63f6b69..00000000 --- a/4-Classification/translations/README.pt-br.md +++ /dev/null @@ -1,27 +0,0 @@ -# Começando com Classificação - -## Tópico regional: Deliciosas cozinhas asiáticas e indianas 🍜 - -Na Ásia e na Índia, as tradições alimentares são extremamente diversificadas e deliciosas! Vamos observar dados sobre culinária regional para tentar entender seus ingredientes. - -![Vendedor de comida tailandesa](../images/thai-food.jpg) -> Foto por Lisheng Chang no Unsplash - -## O que você vai aprender - -Você desenvolverá as habilidades que aprendeu nas lições sobre Regressão, para aprender sobre outros classificadores que o ajudarão a aprender mais sobre dados. - -> Existem ferramentas _low-code_ (que não exigem o uso de código) úteis que podem ajudá-lo a aprender como trabalhar com modelos de classificação. Experimente a [Azure ML para esta tarefa](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott). - -## Lições - -1. [Introdução à classificação](../1-Introduction/translations/README.pt-br.md) -2. [Classificadores](../2-Classifiers-1/translations/README.pt-br.md) -3. [Mais classificadores](../3-Classifiers-2/translations/README.pt-br.md) -4. [ML aplicado: construindo uma aplicação web](../4-Applied/translations/README.pt-br.md) - -## Créditos - -"Começando com Classificação" foi escrito com ♥️ por [Cassie Breviu](https://www.twitter.com/cassieview) e [Jen Looper](https://www.twitter.com/jenlooper). - -O conjunto de dados sobre deliciosas culinárias foi obtido a partir do [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). diff --git a/4-Classification/translations/README.ru.md b/4-Classification/translations/README.ru.md deleted file mode 100644 index 611291da..00000000 --- a/4-Classification/translations/README.ru.md +++ /dev/null @@ -1,26 +0,0 @@ -# Знакомство с классификацией -## Региональная тема: Вкусные блюда азиатской и индийской кухни 🍜 - -В Азии и Индии традиции кухни чрезвычайно разнообразны и очень вкусны! Давайте посмотрим на данные о региональных кухнях, чтобы попытаться понять их состав. - -![Продавец тайской еды](../images/thai-food.jpg) -> Фото Лишенг Чанг на Unsplash - -## Что вы узнаете - -В этом разделе вы воспользуетесь навыками, полученными в первой части учебной программы о регрессии, и узнаете о других классификаторах, которые вы можете использовать и которые помогут вам понять ваши данные. - -> Существуют инструменты, не требующие написания большого количества кода, которые могут помочь вам узнать о моделях классификации. Попробуйте [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/cassieview) и [Джен Лупер](https://www.twitter.com/jenlooper) - -Набор данных о вкусных блюдах взят из [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). diff --git a/4-Classification/translations/README.tr.md b/4-Classification/translations/README.tr.md deleted file mode 100644 index c7dcc311..00000000 --- a/4-Classification/translations/README.tr.md +++ /dev/null @@ -1,25 +0,0 @@ -# Sınıflandırmaya başlarken -## Bölgesel konu: Leziz Asya ve Hint Mutfağı :ramen: - -Asya ve Hindistan'da yemek gelenekleri fazlaca çeşitlilik gösterir ve çok lezzetlidir! Malzemelerini anlamaya çalışmak için bölgesel mutfaklar hakkındaki veriye bakalım. - -![Taylandlı yemek satıcısı](../images/thai-food.jpg) -> Fotoğraf Lisheng Chang tarafından çekilmiştir ve Unsplash'tadır. - -## Öğrenecekleriniz - -Bu bölümde, bu eğitim programının tamamen regresyon üzerine olan ilk bölümünde öğrendiğiniz becerilere dayanıp onların üstüne beceriler ekleyeceksiniz ve veriniz hakkında bilgi sahibi olmanızı sağlayacak diğer sınıflandırıcıları öğreneceksiniz. - -> Sınıflandırma modelleriyle çalışmayı öğrenmenizi sağlayacak faydalı düşük kodlu araçlar vardır. [Bu görev için Azure ML](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)'i deneyin. - -## Dersler - -1. [Sınıflandırmaya giriş](../1-Introduction/translations/README.tr.md) -2. [Daha fazla sınıflandırıcı](../2-Classifiers-1/translations/README.tr.md) -3. [Hatta daha fazla sınıflandırıcı](../3-Classifiers-2/translations/README.tr.md) -4. [Uygulamalı Makine Öğrenimi: bir web uygulaması oluşturun](../4-Applied/translations/README.tr.md) -## Katkıda bulunanlar - -"Sınıflandırmaya başlarken" [Cassie Breviu](https://www.twitter.com/cassieview) ve [Jen Looper](https://www.twitter.com/jenlooper) tarafından :hearts: ile yazılmıştır. - -Leziz mutfak veri seti [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines)'dan alınmıştır. diff --git a/4-Classification/translations/README.zh-cn.md b/4-Classification/translations/README.zh-cn.md deleted file mode 100644 index d69ca3fe..00000000 --- a/4-Classification/translations/README.zh-cn.md +++ /dev/null @@ -1,27 +0,0 @@ -# 开始学习分类方法 - -## 地方性的话题:美味的亚洲与印度菜肴 🍜 - -无论是在亚洲亦或是在印度,饮食风俗在美味无比的同时,又在不同的地区各具特色。让我们来看一些地方美食的数据,并尝试理解一下他们的原料。 - -![Thai food seller](../images/thai-food.jpg) -> 图片由 Lisheng Chang 提供,来自 Unsplash - -## 你会学到什么 - -建立在我们之前关于回归问题的讨论基础上,在本小节中,你将继续学习能够帮助你更好地理解数据的各种分类器。 - -> 这里有一些不太涉及代码,且能帮助你了解如何使用分类模型的小工具。可以试试用 Azure 来完成[这个小任务](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)。 - -## 课程 - -1. [介绍分类方法](../1-Introduction/translations/README.zh-cn.md) -2. [其他分类器](../2-Classifiers-1/translations/README.zh-cn.md) -3. [更多其他的分类器](../3-Classifiers-2/README.md) -4. [应用机器学习:做一个网页 APP](../4-Applied/README.md) - -## 致谢 - -“开始学习分类方法”部分由 [Cassie Breviu](https://www.twitter.com/cassieview) 和 [Jen Looper](https://www.twitter.com/jenlooper) 用 ♥️ 写作。 - -这些美食的数据集来源于 [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines)。 diff --git a/5-Clustering/1-Visualize/translations/README.es.md b/5-Clustering/1-Visualize/translations/README.es.md deleted file mode 100644 index 3ee3dc6e..00000000 --- a/5-Clustering/1-Visualize/translations/README.es.md +++ /dev/null @@ -1,333 +0,0 @@ -# Introducción al agrupamiento - -El agrupamiento (clustering) es un tipo de [aprendizaje no supervisado](https://wikipedia.org/wiki/Unsupervised_learning) que supone que un conjunto de datos está sin etiquetar o que sus entradas no están emparejadas con salidas predefinidas. Usa varios algoritmos para ordenar datos sin etiquetar y provee agrupaciones de acuerdo a patrones que discierne en los datos. - -[![No One Like You de PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You de PSquare") - -> 🎥 Haz clic en la imagen de arriba para ver el video. Mientras estudias aprendizaje automático con agrupamiento, disfruta de algunas canciones Dance Hall Nigerianas - esta es una canción muy popular del 2014 de PSquare. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27?loc=es) - -### Introducción - -El [agrupamiento](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) es muy útil para la exploración de datos. Veamos si nos puede ayudar a descubrir tendencias y patrones en la forma en que la audiencia Nigeriana consume música. - -✅ Piensa por un minuto acerca de los usos del agrupamiento. En la vida real, el agrupamiento sucede siempre que tienes un montón de ropa sucia y necesitas ordenar las prendas de los miembros de la familia 🧦👕👖🩲. En la ciencia de datos, el agrupamiento ocurre cuando intentamos analizar las preferencias de los usuarios, o determinar las características de cualquier conjunto de datos no etiquetado. El agrupamiento, de cierta forma, ayuda a dar sentido al caos, como un cajón de calcetines. - -[![introducción al agrupamiento](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "introducción al agrupamiento") - -> 🎥 Haz clic en la imagen de arriba para ver el video: John Guttag del MIT presenta el agrupamiento - -En el ámbito profesional, el agrupamiento puede ser usado para determinar temas como la segmentación de mercado, qué grupos de edad compran qué cosas, por citar algunos. Otro uso sería la detección de anomalías, quizá para detectar el fraude de un conjunto de datos de transacciones de tarjetas de crédito. O podrías usar el agrupamiento para determinar tumores en un lote de escaneos médicos. - -✅ Piensa un poco acerca de cómo encontrarías el agrupamiento 'en la naturaleza', en un entorno bancario, de comercio electrónico o de negocio. - -> 🎓 Curiosamente, el análisis de agrupamiento se originó en los campos de la Antropología y Psicología en los años 1930. ¿Puedes imaginar cómo fue usado? - -Alternativamente, puedes usarlo para agrupar resultados de búsqueda - por enlaces de compra, imágenes o reseñas, por citar algunos. El agrupamiento es útil cuando tienes un gran conjunto de datos el cual quieres reducir y sobre el cual deseas realizar un análisis más granular, así la técnica puede ser usada para aprender acerca de los datos antes que se construyan otros modelos. - -✅ Una vez que tus datos están organizados en grupos , asignale un Id de grupo, y esta técnica puede ser útil cuando conservas la privacidad de un conjunto de datos; en su lugar te puedes referir a un punto de datos por su id de grupo, en vez de sus datos identificables más reveladores. ¿Puedes pensar en otras razones del por qué preferirías un Id de grupo en lugar de otros elementos del grupo para identificarlo? - -Profundiza tu compresión de las técnicas de agrupamiento en este [módulo de aprendizaje](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) - -## Empezando con el agrupamiento - -[Scikit-learn ofrece un gran arreglo](https://scikit-learn.org/stable/modules/clustering.html) de métodos para realizar agrupamiento. El tipo que elijas dependerá de tu caso de uso. De acuerdo a la documentación, cada método tiene varios beneficios. Aquí tienes una tabla simplificada de los métodos soportados por Scikit-learn y sus casos de uso apropiados: - -| Nombre del método | Caso de uso | -| :--------------------------- | :-------------------------------------------------------------------------| -| K-Medias | propósito general, inductivo | -| Propagación de afinidad | Muchos, grupos desiguales, inductivo | -| Desplazamiento medio | Muchos, grupos desiguales, inductivo | -| Agrupamiento espectral | Pocos, grupos iguales, transductivo | -| Agrupación jerárquica Ward | Muchos, grupos restringidos, transductivo | -| Agrupación aglomerativa | Muchos, restringidos, distancia no Euclidianas, transductivo | -| DBSCAN | Geometría no plana, grupos desiguales, transductivo | -| OPTICS | Geometría no plana, grupos desiguales con densidad variable, transductivo | -| Mezclas Gaussianas | Geometría plana, inductivo | -| BIRCH | Gran conjunto de datos con valores atípicos, inductivo | - -> 🎓 El cómo creamos los grupos tiene mucho que ver con cómo recopilamos los puntos de datos en grupos. Desempaquemos algo de vocabulario: -> -> 🎓 ['Transductivo' vs. 'inductivo'](https://wikipedia.org/wiki/Transduction_(machine_learning)) -> -> La inferencia transductiva se deriva de los casos de entrenamiento observados que se asignan a casos de prueba específicos. La inferencia inductiva se deriva de los casos de entrenamiento que se asignan a reglas generales las cuales sólo aplican a los casos de prueba. -> -> Un ejemplo: Imagina que tienes un conjunto de datos que está parcialmente etiquetado. Algunas cosas son 'records', otras 'cds' y unas más están en blanco. Tu trabajo es proveer las etiquetas para los blancos. Si eliges un enfoque inductivo, entrenarías un modelo buscando 'records' y 'cds' y aplicarías esas etiquetas a tus datos sin etiquetar. Este enfoque tendrá problemas clasificando como que en realidad con 'cassettes'. Por otro lado, un enfoque transductivo, maneja estos datos desconocidos de forma más efectiva ya que funciona para agrupar elementos similares y luego aplica una etiqueta a un grupo. En este caso, los agrupamientos reflejan 'cosas musicales redondas' y 'cosas musicales cuadradas'. -> -> 🎓 [Geometría 'no plana' vs 'plana'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> Derivada de la terminología matemática, la geometría no plana versus plana se refiere a la medida de distancias entre puntos ya sea por métodos geométricos 'planos' ([Euclidianos](https://wikipedia.org/wiki/Euclidean_geometry)) o 'no planos' (no Euclidianos). -> -> En este contexto 'Plano' se refiere a la geometría Euclidiana (partes de las cuales se enseñan como geometría 'plana'), y no plana se refiere a la geometría no Euclidiana. ¿Qué tiene que ver la geometría con el aprendizaje automático? Bien, como dos campos que tienen sus raíces en las matemáticas, debe haber una forma común de medir las distancias entre puntos en los grupos, y eso puede hacerse de forma 'plana' o 'no plana', dependiendo de la naturaleza de los datos. Las [distancias Euclidianas](https://wikipedia.org/wiki/Euclidean_distance) se miden como la longitud de un segmento de línea entre dos puntos. Las [distancias no Euclidianas](https://wikipedia.org/wiki/Non-Euclidean_geometry) se miden como a lo largo de la curva. Si tus datos visualizados parecen no existir en un plano, podrías necesitar usar un algoritmo especializado para realizarlo. -> -![Infografía de geometría plana vs no plana](../images/flat-nonflat.png) -> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) -> -> 🎓 ['Distancias'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) -> -> Los agrupamientos se definen por su matriz de distancia, por ejemplo, las distancias entre puntos. Esta distancia puede ser medida de varias formas. Los agrupamientos Euclidianos se definen por el promedio de los valores de los puntos, y contienen un 'centroide' o punto central. por lo tanto, las distancias son medidas por la distancia al centroide. Las distancias no Euclidianas se refieren a 'clustroides', el punto más cercano a otros puntos. Los clustroides en turno pueden ser definidos de varias formas. -> -> 🎓 ['Restringido'](https://wikipedia.org/wiki/Constrained_clustering) -> -> El [agrupamiento restringido](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) presenta el término aprendizaje 'semi-supervisado' en este método no supervisado. Las relaciones entre los puntos son marcadas como 'cannot link' o 'must-link' por lo que algunas reglas son forzadas en el conjunto de datos. -> -> Un ejemplo: Si se libera un algoritmo en un lote de datos no etiquetados o semi-etiquetados, los agrupamientos que produce pueden ser de baja calidad. En el ejemplo de arriba, los agrupamientos pueden reunir 'round music things' y 'square music things' y 'triangular things' y 'cookies'. Si se proporcionan algunas restricciones o reglas a seguir ("el elemento debe estar hecho de plástico", "el elemento necesita ser capaz de reproducir música") esto puede ayudar a 'restringir' al algoritmo para que realice mejores elecciones. -> -> 🎓 'Densidad' -> -> Los datos que son 'ruidosos' se consideran como 'densos'. Las distancias entre los puntos en cada uno de sus grupos puede probar, al examinarse, ser más o menos densos, o 'atestados' y por lo tanto estos datos necesitan ser analizados con los métodos de agrupamiento apropiados. [Este artículo](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) demuestra la diferencia entre usar los algoritmos K-Medias vs HDBSCAN para explorar un conjunto de datos ruidosos con densidad de agrupamiento desigual. - -## Algoritmos de agrupamiento - -Existen más de 100 algoritmos de agrupamiento, y sus usos dependen de la naturaleza de los datos que se te presentan. Discutamos algunos de los más importantes: - -- **Agrupamiento jerárquico** Si un objeto se clasifica por su proximidad a un objeto cercano, en lugar de uno más lejano, los grupos se forman basados en las distancias de sus miembros hacia y desde otros objetos. El agrupamiento aglomerativo de Scikit-learn es jerárquico. - - ![Infografía de agrupamiento jerárquico](../images/hierarchical.png) - > Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Agrupamiento de centroide**. Este popular algoritmo require la elección de 'k', o el número de grupos a formar, tras lo cua el algoritmo determina el punto central de un grupo y reúne datos alrededor de ese punto. [El agrupamiento K-Medias](https://wikipedia.org/wiki/K-means_clustering) es una versión popular de agrupamiento de centroide. El centro se determina por la media más cercana, por eso el nombre. La distancia al cuadrado desde el grupo se minimiza. - - ![Infografía de agrupamiento de centroide](../images/centroid.png) - > Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Agrupamiento basado en distribución**. Se basa en el modelado estadístico, el agrupamiento basado en distribución se centra en determinar la probabilidad de los puntos de datos de pertenecer a un grupo, y los asigna en consecuencia. Los métodos de mezcla Gaussiana pertenecen a este tipo. - -- **Agrupamiento basado en densidad**. Los puntos de datos se asignan a grupos basado en su densidad, o su agrupación unos alrededor de otros. Los puntos de datos lejanos del grupo se consideran valores atípicos o ruido. DBSCAN, desplazamiento medio y OPTICS pertenecen a este tipo de agrupamiento. - -- **Agrupamiento basado en cuadrícula**. Para conjuntos de datos multi-dimensionales, se crea una cuadrícula y los datos se dividen entre las celdas de la cuadrícula, creando así los grupos. - -## Ejercicio - agrupa tus datos - -El agrupamiento como técnica recibe mucha ayuda de una buena visualización, así que empecemos por visualizar nuestros datos de música. Este ejercicio nos ayudará a decidir cuál de los métodos de agrupamiento deberíamos usar de forma más efectiva de acuerdo a la naturaleza de estos datos. - -1. Abre el archivo _notebook.ipynb_ en este directorio. - -1. Importa el paquete `Seaborn` para una buena visualización de datos. - - ```python - !pip install seaborn - ``` - -1. Adjunta los datos de la canción del archivo _nigerian-songs.csv_. Carga un dataframe con algunos datos de las canciones. Prepárate para explorar estos datos al importar las bibliotecas y volcar los datos: - - ```python - import matplotlib.pyplot as plt - import pandas as pd - - df = pd.read_csv("../data/nigerian-songs.csv") - df.head() - ``` - - Revisa las primeras líneas de datos: - - | | 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. Obtén información acerca del dataframe, llamando a `info()`: - - ```python - df.info() - ``` - - La salida luce así: - - ```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. Vuelve a revisar los valores nulos, al llamar a `isnull()` y verifica que la suma sea 0: - - ```python - df.isnull().sum() - ``` - - Se ve bien: - - ```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. Describe los datos: - - ```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 | - -> 🤔 Si estamos trabajando con el agrupamiento, un método no supervisado que no requiere datos etiquetados. ¿Por qué mostramos estos datos con etiquetas? En la fase de exploración de datos, son útiles, pero no son necesarias para que el algoritmo de agrupamiento funcione. Podrías sólo eliminar los encabezados de columna y referirte a los datos por el número de columna. - -Observa los valores generales de los datos. Nota que 'popularity' puede ser '0', lo cual muestra las canciones que no tienen clasificación. Eliminemos esas. - -1. Usa un gráfico de barras para descubrir los géneros más populares: - - ```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') - ``` - - ![Los más populares](../images/popular.png) - -✅ Si te gustaría ver los mejores valores, cambia el valor top `[:5]` por uno mayor, o elimínalo para verlos todos. - -Nota, cuando el género superior se describe como 'Missing', que significa que Spotify no lo clasificó, así que deshagámonos de él. - -1. Deshazte de los datos faltantes al filtrarlos - - ```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') - ``` - - Ahora revisa nuevamente los géneros: - - ![Los más populares](../images/all-genres.png) - -1. Por mucho, los mejores tres géneros dominan este conjunto de datos. Concentrémonos en `afro dancehall`, `afropop`, y `nigerian pop`, adicionalmente filtra el conjunto de datos para remover todo lo que tenga un valor de popularidad de 0 (lo que significa no fue clasificado con una popularidad en el conjunto de datos y puede ser considerado ruido para nuestros propósitos): - - ```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. Haz una prueba rápida para ver si los datos se correlacionan de alguna forma particularmente fuerte: - - ```python - corrmat = df.corr() - f, ax = plt.subplots(figsize=(12, 9)) - sns.heatmap(corrmat, vmax=.8, square=True) - ``` - - ![Correlaciones](../images/correlation.png) - - La única correlación fuerte es entre `energy` y `loudness`, lo cual no es de sorprender, dado que la música a todo volumen es usualmente muy energética. De lo contrario, las correlaciones son relativamente débiles. Será interesante ver lo que un algoritmo de agrupamiento puede hacer con estos datos. - - > 🎓 ¡Nota que la correlación no implica causalidad! Tenemos prueba de la correlación pero no de la causalidad. Un [sitio web divertido](https://tylervigen.com/spurious-correlations) tiene algunas imágenes que enfatizan este punto. - -¿Hay convergencia alguna en este conjunto de datos en torno a la popularidad percibida y bailabilidad de la canción? Una rejilla frontal muestra que hay círculos concéntricos que se alínean, sin importar el género. ¿Podría ser que los gustos Nigerianos converjan a cierto nivel con la bailabilidad de este género? - -✅ Prueba distintos puntos de datos (energy, loudness, speechiness) y más o distintos géneros musicales. ¿Qué puedes descubrir? Da un vistazo a la table `df.describe()` para ver la propagación general de los puntos de datos. - -### Ejercicio - distribución de datos - -¿Son significativamente diferentes estos tres géneros en la percepció nde su bailabilidad, basados en su popularidad? - -1. Examina nuestra distribución de datos de los tres mejores géneros por popularidad y bailabilidad junto con un eje x e y dados. - - ```python - sns.set_theme(style="ticks") - - g = sns.jointplot( - data=df, - x="popularity", y="danceability", hue="artist_top_genre", - kind="kde", - ) - ``` - - Puedes descubrir círculos concéntricos entorno alrededor de un punto general de convergencia, mostrando la distribución de los puntos. - - > 🎓 Nota que este ejemplo usa KDE (Estimación de la Densidad del Kernel), gráfico que representa los datos usando una curva de densidad de probabilidad continua. Esto nos permite interpretar los dato al trabajar con distribuciones múltilples. - - En general, los tres géneros se alinean libremente en términos de su probabilidad y bailabilidad. Determinar los grupos en estos datos libremente alineados será un desafío: - - ![Distribución](../images/distribution.png) - -1. Crea un gráfico de dispersión: - - ```python - sns.FacetGrid(df, hue="artist_top_genre", size=5) \ - .map(plt.scatter, "popularity", "danceability") \ - .add_legend() - ``` - - Un gráfico de dispersión de los mismos ejes muestra un patrón similar de convergencia - - ![Cadrícula de facetas](../images/facetgrid.png) - -En general, para el agrupamiento, puedes usar gráficos de dispersión para mostrar grupos de datos, por lo que dominar este tipo de visualizaciones es muy útil. En la siguiente lección, tomaremos estos datos filtrados y usaremos el agrupamiento k-medias para descubrir grupos en estos datos que se vean superpuestos de formas interesantes. - ---- - -## 🚀Desafío - -En preparación para la siguiente lección, realiza una gráfica acerca de los diverso algoritmos de agrupamiento que puedes descubrir y usar en un ambiente de producción. ¿Qué tipo de problemas trata de abordar el agrupamiento? - -## [Examen porterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28?loc=es) - -## Revisión y auto-estudio - -Antes que apliques los algoritmos de agrupamiento, como aprendimos, es buena idea entender la naturaleza de tu conjunto de datos. Lee más sobre este tema [aquí](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) - -[Este útil artículo](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) te guía a través de las distintas formas en que se comportan los distintos algoritmos de agrupamiento, dadas distintas formas de los datos. - -## Asignación - -[Investiga otras visualizaciones para agrupamiento](assignment.es.md) diff --git a/5-Clustering/1-Visualize/translations/README.it.md b/5-Clustering/1-Visualize/translations/README.it.md deleted file mode 100644 index 007b2162..00000000 --- a/5-Clustering/1-Visualize/translations/README.it.md +++ /dev/null @@ -1,332 +0,0 @@ -# Introduzione al clustering - -Il clustering è un tipo di [apprendimento non supervisionato](https://wikipedia.org/wiki/Unsupervised_learning) che presuppone che un insieme di dati non sia etichettato o che i suoi input non siano abbinati a output predefiniti. Utilizza vari algoritmi per ordinare i dati non etichettati e fornire raggruppamenti in base ai modelli che individua nei dati. - -[![No One Like You di PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You di PSquare") - -> 🎥 Fare clic sull'immagine sopra per un video. Mentre si studia machine learning con il clustering, si potranno gradire brani della Nigerian Dance Hall: questa è una canzone molto apprezzata del 2014 di PSquare. -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/?loc=it) - -### Introduzione - -[Il clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) è molto utile per l'esplorazione dei dati. Si vedrà se può aiutare a scoprire tendenze e modelli nel modo in cui il pubblico nigeriano consuma la musica. - -✅ Ci si prenda un minuto per pensare agli usi del clustering. Nella vita reale, il clustering si verifica ogni volta che si ha una pila di biancheria e si devono sistemare i vestiti dei propri familiari 🧦👕👖🩲. Nella scienza dei dati, il clustering si verifica quando si tenta di analizzare le preferenze di un utente o di determinare le caratteristiche di qualsiasi insieme di dati senza etichetta. Il clustering, in un certo senso, aiuta a dare un senso al caos, come un cassetto dei calzini. - -[![Introduzione a ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduzione al Clustering") - -> 🎥 Fare clic sull'immagine sopra per un video: John Guttag del MIT introduce il clustering - -In un ambiente professionale, il clustering può essere utilizzato per determinare cose come la segmentazione del mercato, determinare quali fasce d'età acquistano quali articoli, ad esempio. Un altro uso sarebbe il rilevamento di anomalie, forse per rilevare le frodi da un insieme di dati delle transazioni con carta di credito. Oppure si potrebbe usare il clustering per determinare i tumori in una serie di scansioni mediche. - -✅ Si pensi un minuto a come si potrebbe aver incontrato il clustering 'nel mondo reale', in un ambiente bancario, e-commerce o aziendale. - -> 🎓 È interessante notare che l'analisi dei cluster ha avuto origine nei campi dell'antropologia e della psicologia negli anni '30. Si riusce a immaginare come potrebbe essere stato utilizzato? - -In alternativa, lo si può utilizzare per raggruppare i risultati di ricerca, ad esempio tramite link per acquisti, immagini o recensioni. Il clustering è utile quando si dispone di un insieme di dati di grandi dimensioni che si desidera ridurre e sul quale si desidera eseguire un'analisi più granulare, quindi la tecnica può essere utilizzata per conoscere i dati prima che vengano costruiti altri modelli. - -✅ Una volta che i dati sono organizzati in cluster, viene assegnato un ID cluster e questa tecnica può essere utile quando si preserva la privacy di un insieme di dati; si può invece fare riferimento a un punto dati tramite il suo ID cluster, piuttosto che dati identificabili più rivelatori. Si riesce a pensare ad altri motivi per cui fare riferimento a un ID cluster piuttosto che ad altri elementi del cluster per identificarlo? - -In questo [modulo di apprendimento](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) si approfondirà la propria comprensione delle tecniche di clustering - -## Iniziare con il clustering - -[Scikit-learn offre una vasta gamma](https://scikit-learn.org/stable/modules/clustering.html) di metodi per eseguire il clustering. Il tipo scelto dipenderà dal caso d'uso. Secondo la documentazione, ogni metodo ha diversi vantaggi. Ecco una tabella semplificata dei metodi supportati da Scikit-learn e dei loro casi d'uso appropriati: - -| Nome del metodo | Caso d'uso | -| :------------------------------------------------------ | :-------------------------------------------------------------------------- | -| K-MEANS | uso generale, induttivo | -| Affinity propagation (Propagazione dell'affinità) | molti, cluster irregolari, induttivo | -| Mean-shift (Spostamento medio) | molti, cluster irregolari, induttivo | -| Spectral clustering (Raggruppamento spettrale) | pochi, anche grappoli, trasduttivi | -| Ward hierarchical clustering (Cluster gerarchico) | molti, cluster vincolati, trasduttivi | -| Agglomerative clustering (Raggruppamento agglomerativo) | molte, vincolate, distanze non euclidee, trasduttive | -| DBSCAN | geometria non piatta, cluster irregolari, trasduttivo | -| OPTICS | geometria non piatta, cluster irregolari con densità variabile, trasduttivo | -| Gaussian mixtures (miscele gaussiane) | geometria piana, induttiva | -| BIRCH | insiemi di dati di grandi dimensioni con valori anomali, induttivo | - -> 🎓 Il modo in cui si creno i cluster ha molto a che fare con il modo in cui si raccolgono punti dati in gruppi. Si esamina un po' di vocabolario: -> -> 🎓 ['trasduttivo' vs. 'induttivo'](https://wikipedia.org/wiki/Transduction_(machine_learning)) -> -> L'inferenza trasduttiva è derivata da casi di addestramento osservati che mappano casi di test specifici. L'inferenza induttiva è derivata da casi di addestramento che mappano regole generali che vengono poi applicate ai casi di test. -> -> Un esempio: si immagini di avere un insieme di dati che è solo parzialmente etichettato. Alcune cose sono "dischi", alcune "cd" e altre sono vuote. Il compito è fornire etichette per gli spazi vuoti. Se si scegliesse un approccio induttivo, si addestrerebbe un modello alla ricerca di "dischi" e "cd" e si applicherebbero quelle etichette ai dati non etichettati. Questo approccio avrà problemi a classificare cose che sono in realtà "cassette". Un approccio trasduttivo, d'altra parte, gestisce questi dati sconosciuti in modo più efficace poiché funziona raggruppando elementi simili e quindi applica un'etichetta a un gruppo. In questo caso, i cluster potrebbero riflettere "cose musicali rotonde" e "cose musicali quadrate". -> -> 🎓 [Geometria 'non piatta' (non-flat) vs. 'piatta' (flat)](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> Derivato dalla terminologia matematica, la geometria non piatta rispetto a quella piatta si riferisce alla misura delle distanze tra i punti mediante metodi geometrici "piatti" ([euclidei](https://wikipedia.org/wiki/Euclidean_geometry)) o "non piatti" (non euclidei). -> -> "Piatto" in questo contesto si riferisce alla geometria euclidea (parti della quale vengono insegnate come geometria "piana") e non piatto si riferisce alla geometria non euclidea. Cosa ha a che fare la geometria con machine learning? Bene, come due campi che sono radicati nella matematica, ci deve essere un modo comune per misurare le distanze tra i punti nei cluster, e questo può essere fatto in modo "piatto" o "non piatto", a seconda della natura dei dati . [Le distanze euclidee](https://wikipedia.org/wiki/Euclidean_distance) sono misurate come la lunghezza di un segmento di linea tra due punti. [Le distanze non euclidee](https://wikipedia.org/wiki/Non-Euclidean_geometry) sono misurate lungo una curva. Se i dati, visualizzati, sembrano non esistere su un piano, si potrebbe dover utilizzare un algoritmo specializzato per gestirli. -> -![Infografica con geometria piatta e non piatta](../images/flat-nonflat.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) -> -> [' Distanze'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) -> -> I cluster sono definiti dalla loro matrice di distanza, ad esempio le distanze tra i punti. Questa distanza può essere misurata in alcuni modi. I cluster euclidei sono definiti dalla media dei valori dei punti e contengono un 'centroide' o baricentro. Le distanze sono quindi misurate dalla distanza da quel baricentro. Le distanze non euclidee si riferiscono a "clustroidi", il punto più vicino ad altri punti. I clustroidi a loro volta possono essere definiti in vari modi. -> -> 🎓 ['Vincolato'](https://wikipedia.org/wiki/Constrained_clustering) -> -> [Constrained Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduce l'apprendimento 'semi-supervisionato' in questo metodo non supervisionato. Le relazioni tra i punti sono contrassegnate come "non è possibile collegare" o "è necessario collegare", quindi alcune regole sono imposte sull'insieme di dati. -> -> Un esempio: se un algoritmo viene applicato su un batch di dati non etichettati o semi-etichettati, i cluster che produce potrebbero essere di scarsa qualità. Nell'esempio sopra, i cluster potrebbero raggruppare "cose musicali rotonde" e "cose musicali quadrate" e "cose triangolari" e "biscotti". Se vengono dati dei vincoli, o delle regole da seguire ("l'oggetto deve essere di plastica", "l'oggetto deve essere in grado di produrre musica"), questo può aiutare a "vincolare" l'algoritmo a fare scelte migliori. -> -> 'Densità' -> -> I dati "rumorosi" sono considerati "densi". Le distanze tra i punti in ciascuno dei suoi cluster possono rivelarsi, all'esame, più o meno dense, o "affollate" e quindi questi dati devono essere analizzati con il metodo di clustering appropriato. [Questo articolo](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) dimostra la differenza tra l'utilizzo del clustering K-Means rispetto agli algoritmi HDBSCAN per esplorare un insieme di dati rumoroso con densità di cluster non uniforme. - -## Algoritmi di clustering - -Esistono oltre 100 algoritmi di clustering e il loro utilizzo dipende dalla natura dei dati a portata di mano. Si discutono alcuni dei principali: - -- **Raggruppamento gerarchico**. Se un oggetto viene classificato in base alla sua vicinanza a un oggetto vicino, piuttosto che a uno più lontano, i cluster vengono formati in base alla distanza dei loro membri da e verso altri oggetti. Il clustering agglomerativo di Scikit-learn è gerarchico. - - ![Infografica sul clustering gerarchico](../images/hierarchical.png) - > Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Raggruppamento centroide**. Questo popolare algoritmo richiede la scelta di 'k', o il numero di cluster da formare, dopodiché l'algoritmo determina il punto centrale di un cluster e raccoglie i dati attorno a quel punto. [Il clustering K-means](https://wikipedia.org/wiki/K-means_clustering) è una versione popolare del clustering centroide. Il centro è determinato dalla media più vicina, da qui il nome. La distanza al quadrato dal cluster è ridotta al minimo. - - ![Infografica sul clustering del centroide](../images/centroid.png) - > Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Clustering basato sulla distribuzione**. Basato sulla modellazione statistica, il clustering basato sulla distribuzione è incentrato sulla determinazione della probabilità che un punto dati appartenga a un cluster e sull'assegnazione di conseguenza. I metodi di miscelazione gaussiana appartengono a questo tipo. - -- **Clustering basato sulla densità**. I punti dati vengono assegnati ai cluster in base alla loro densità o al loro raggruppamento l'uno intorno all'altro. I punti dati lontani dal gruppo sono considerati valori anomali o rumore. DBSCAN, Mean-shift e OPTICS appartengono a questo tipo di clustering. - -- **Clustering basato su griglia**. Per gli insiemi di dati multidimensionali, viene creata una griglia e i dati vengono divisi tra le celle della griglia, creando così dei cluster. - -## Esercizio: raggruppare i dati - -Il clustering come tecnica è notevolmente aiutato da una corretta visualizzazione, quindi si inizia visualizzando i dati musicali. Questo esercizio aiuterà a decidere quale dei metodi di clustering si dovranno utilizzare in modo più efficace per la natura di questi dati. - -1. Aprire il file _notebook.ipynb_ in questa cartella. - -1. Importare il pacchetto `Seaborn` per una buona visualizzazione dei dati. - - ```python - !pip install seaborn - ``` - -1. Aggiungere i dati dei brani da _nigerian-songs.csv_. Caricare un dataframe con alcuni dati sulle canzoni. Prepararsi a esplorare questi dati importando le librerie e scaricando i dati: - - ```python - import matplotlib.pyplot as plt - import pandas as pd - - df = pd.read_csv("../data/nigerian-songs.csv") - df.head() - ``` - - Controllare le prime righe di dati: - - | | 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. Ottenere alcune informazioni sul dataframe, chiamando `info()`: - - ```python - df.info() - ``` - - Il risultato appare così: - - ```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. Ricontrollare i valori null, chiamando `isnull()` e verificando che la somma sia 0: - - ```python - df.isnull().sum() - ``` - - Si presenta bene! - - ```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. Descrivere i dati: - - ```python - df.describe() - ``` - - | | release_date | lenght | popularity | danceability | acousticness | Energia | strumentale | vitalità | livello di percezione sonora | parlato | tempo | #ora_firma | - | ------- | ------------ | ----------- | ---------- | ------------ | ------------ | -------- | ----------- | -------- | ---------------------------- | -------- | ---------- | ---------- | - | estero) | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | 530 | - | mezzo | 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 | - -> 🤔 Se si sta lavorando con il clustering, un metodo non supervisionato che non richiede dati etichettati, perché si stanno mostrando questi dati con etichette? Nella fase di esplorazione dei dati, sono utili, ma non sono necessari per il funzionamento degli algoritmi di clustering. Si potrebbero anche rimuovere le intestazioni delle colonne e fare riferimento ai dati per numero di colonna. - -Dare un'occhiata ai valori generali dei dati. Si nota che la popolarità può essere "0", che mostra i brani che non hanno una classifica. Quelli verranno rimossi a breve. - -1. Usare un grafico a barre per scoprire i generi più popolari: - - ```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') - ``` - - ![I più popolari](../images/popular.png) - -✅ Se si desidera vedere più valori superiori, modificare il valore di top `[:5]` con un valore più grande o rimuoverlo per vederli tutti. - -Nota, quando un valore di top è descritto come "Missing", ciò significa che Spotify non lo ha classificato, quindi va rimosso. - -1. Eliminare i dati mancanti escludendoli via filtro - - ```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') - ``` - - Ora ricontrollare i generi: - - ![I più popolari](../images/all-genres.png) - -1. Di gran lunga, i primi tre generi dominano questo insieme di dati. Si pone l'attenzione su `afrodancehall,` `afropop` e `nigerian pop`, filtrando inoltre l'insieme di dati per rimuovere qualsiasi cosa con un valore di popolarità 0 (il che significa che non è stato classificato con una popolarità nell'insieme di dati e può essere considerato rumore per gli scopi attuali): - - ```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. Fare un test rapido per vedere se i dati sono correlati in modo particolarmente forte: - - ```python - corrmat = df.corr() - f, ax = plt.subplots(figsize=(12, 9)) - sns.heatmap(corrmat, vmax=.8, square=True) - ``` - - ![correlazioni](../images/correlation.png) - - L'unica forte correlazione è tra `energy` e `loudness` (volume), il che non è troppo sorprendente, dato che la musica ad alto volume di solito è piuttosto energica. Altrimenti, le correlazioni sono relativamente deboli. Sarà interessante vedere cosa può fare un algoritmo di clustering di questi dati. - - > 🎓 Notare che la correlazione non implica la causalità! Ci sono prove di correlazione ma nessuna prova di causalità. Un [sito web divertente](https://tylervigen.com/spurious-correlations) ha alcune immagini che enfatizzano questo punto. - -C'è qualche convergenza in questo insieme di dati intorno alla popolarità e alla ballabilità percepite di una canzone? Una FacetGrid mostra che ci sono cerchi concentrici che si allineano, indipendentemente dal genere. Potrebbe essere che i gusti nigeriani convergano ad un certo livello di ballabilità per questo genere? - -✅ Provare diversi punti dati (energy, loudness, speachiness) e più o diversi generi musicali. Cosa si può scoprire? Dare un'occhiata alla tabella con `df.describe()` per vedere la diffusione generale dei punti dati. - -### Esercizio - distribuzione dei dati - -Questi tre generi sono significativamente differenti nella percezione della loro ballabilità, in base alla loro popolarità? - -1. Esaminare la distribuzione dei dati sui tre principali generi per la popolarità e la ballabilità lungo un dato asse x e y. - - ```python - sns.set_theme(style="ticks") - - g = sns.jointplot( - data=df, - x="popularity", y="danceability", hue="artist_top_genre", - kind="kde", - ) - ``` - - Si possono scoprire cerchi concentrici attorno a un punto di convergenza generale, che mostra la distribuzione dei punti. - - > 🎓 Si noti che questo esempio utilizza un grafico KDE (Kernel Density Estimate) che rappresenta i dati utilizzando una curva di densità di probabilità continua. Questo consente di interpretare i dati quando si lavora con più distribuzioni. - - In generale, i tre generi si allineano liberamente in termini di popolarità e ballabilità. Determinare i cluster in questi dati vagamente allineati sarà una sfida: - - ![distribuzione](../images/distribution.png) - -1. Crea un grafico a dispersione: - - ```python - sns.FacetGrid(df, hue="artist_top_genre", size=5) \ - .map(plt.scatter, "popularity", "danceability") \ - .add_legend() - ``` - - Un grafico a dispersione degli stessi assi mostra un modello di convergenza simile - - ![Facetgrid](../images/facetgrid.png) - -In generale, per il clustering è possibile utilizzare i grafici a dispersione per mostrare i cluster di dati, quindi è molto utile padroneggiare questo tipo di visualizzazione. Nella prossima lezione, si prenderanno questi dati filtrati e si utilizzerà il clustering k-means per scoprire gruppi in questi dati che si sovrappongono in modi interessanti. - ---- - -## 🚀 Sfida - -In preparazione per la lezione successiva, creare un grafico sui vari algoritmi di clustering che si potrebbero scoprire e utilizzare in un ambiente di produzione. Che tipo di problemi sta cercando di affrontare il clustering? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/?loc=it) - -## Revisione e Auto Apprendimento - -Prima di applicare gli algoritmi di clustering, come si è appreso, è una buona idea comprendere la natura del proprio insieme di dati. Leggere di più su questo argomento [qui](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) - -[Questo utile articolo](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) illustra i diversi modi in cui si comportano i vari algoritmi di clustering, date diverse forme di dati. - -## Compito - -[Ricercare altre visualizzazioni per il clustering](assignment.it.md) diff --git a/5-Clustering/1-Visualize/translations/README.ko.md b/5-Clustering/1-Visualize/translations/README.ko.md deleted file mode 100644 index 6fae1dad..00000000 --- a/5-Clustering/1-Visualize/translations/README.ko.md +++ /dev/null @@ -1,335 +0,0 @@ -# Clustering 소개하기 - -Clustering이 데이터셋에 라벨을 붙이지 않거나 입력이 미리 정의한 출력과 맞지 않는다고 가정한다면 [Unsupervised Learning](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") - -> 🎥 영상을 보려면 이미지 클릭. While you're studying machine learning with clustering, enjoy some Nigerian Dance Hall tracks - this is a highly rated song from 2014 by PSquare. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) - -### 소개 - -[Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124)은 데이터를 탐색할 때 매우 유용합니다. 나이지리아 사람들이 음악을 듣는 방식에서 트렌드와 패턴을 찾아 도움을 받을 수 있는지 봅니다. - -✅ 시간을 내서 clustering 사용법에 대해 생각해봅니다. 실생활에서, clustering은 빨래 바구니를 가지고 가족 구성원의 옷 🧦👕👖🩲을 정리하는 순간에 발생합니다. 데이터 사이언스에서, clustering은 사용자의 선호를 분석하거나, 라벨을 붙이지 않은 데이터셋 특성을 정하는 순간에 발생합니다. Clustering은, 어떤 식으로든, 양말 서랍처럼, 혼란스러움을 이해하는 순간에 도움을 받을 수 있습니다. - -[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") - -> 🎥 영상을 보려면 이미지 클릭: MIT's John Guttag introduces clustering - -전문적인 설정에서, clustering은 시장 세분화처럼 결정하면서 사용할 수 있습니다, 예시로, 특정 나이대가 어떤 아이템을 구매하는지 결정할 수 있습니다. 또 다른 용도는 anomaly detection이며, 아마도 신용 카드 거래 데이터셋에서 사기를 적발하기 위함입니다. 또는 clustering으로 의학촬영의 배치에서 종양을 판단할 수 있습니다. - -✅ 시간을 내서, 은행, 이커머스, 비지니스 설정에서, 'in the wild' 어떻게 clustering을 접했는지 생각합니다. - -> 🎓 흥미로운 사실은, cluster analysis는 1930년에 인류학과 심리학의 필드에서 유래되었습니다. 어떻게 사용했는지 상상 되나요? - -또한, 그룹화된 검색 결과를 위해서 사용합니다. - 예를 들면, 쇼핑 링크, 이미지, 또는 리뷰. Clustering은 줄이려는 대규모 데이터셋이 있고 세분화된 분석을 하고 싶을 때 유용하므로, 다른 모델이 설계되기 전까지 데이터를 학습하며 이 기술을 사용할 수 있습니다. - -✅ 데이터가 클러스터에서 구성되면, 클러스터 ID를 할당하며, 이 기술로 데이터셋의 프라이버시를 보호할 때 유용합니다; 식별할 수 있는 데이터를 더 노출하는 대신, 클러스터 ID로 데이터 포인트를 참조할 수 있습니다. 클러스터의 다른 요소가 아닌 클러스터 ID를 참조해서 식별하는 이유를 생각할 수 있나요? - -이 [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)에서 clustering 기술을 깊게 이해합니다. - -## Clustering 시작하기 - -[Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html)은 clustering을 수행하는 방식의 큰 배열을 제공합니다. 선택한 타입은 사용 케이스에 따라서 달라질 예정입니다. 문서에 따르면, 각 방식에 다양한 이점이 있습니다. Scikit-learn에서 지원하는 방식과 적절한 사용 케이스에 대한 단순화된 테이블입니다: - -| Method name | Use case | -| :--------------------------- | :--------------------------------------------------------------------- | -| K-Means | general purpose, inductive | -| Affinity propagation | many, uneven clusters, inductive | -| Mean-shift | many, uneven clusters, inductive | -| Spectral clustering | few, even clusters, transductive | -| Ward hierarchical clustering | many, constrained clusters, transductive | -| Agglomerative clustering | many, constrained, non Euclidean distances, transductive | -| DBSCAN | non-flat geometry, uneven clusters, transductive | -| OPTICS | non-flat geometry, uneven clusters with variable density, transductive | -| Gaussian mixtures | flat geometry, inductive | -| BIRCH | large dataset with outliers, inductive | - -> 🎓 클러스터를 만드는 방식에서 데이터 포인트를 그룹으로 수집하는 것과 많이 비슷합니다. 몇 단어를 풀어봅니다: -> -> 🎓 ['Transductive' vs. 'inductive'](https://wikipedia.org/wiki/Transduction_(machine_learning)) -> -> Transductive 추론은 특정한 테스트 케이스로 맵핑되어 관찰된 훈련 케이스에서 유래됩니다. Inductive 추론은 오직 테스트 케이스에서만 적용되는 일반적인 규칙으로 맵핑된 훈련 케이스에서 유래됩니다. -> -> 예시: 오직 일부만 라벨링된 데이터를 가지고 있다고 생각합니다. 일부 'records', 'cds', 공백으로 이루어져 있습니다. 공백에 라벨을 제공하는 일입니다. 만약 inductive 접근법을 선택했다면, 'records'와 'cds'를 찾는 모델로 훈련하고, 라벨링되지 않은 데이터에 라벨을 적용합니다. 이 접근법은 실제 'cassettes'를 분류할 때 골치아픕니다. transductive 접근법은, 반면에, 비슷한 아이템과 함께 그룹으로 묶어서 라벨을 적용하므로 알려지지 않은 데이터보다 효과적으로 핸들링합니다. 이 케이스에서, 클러스터는 'round musical things'와 'square musical things'를 반영할 수 있습니다. -> -> 🎓 ['Non-flat' vs. 'flat' geometry](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> 수학 용어에서 유래된, non-flat vs. flat 기하학은 'flat' ([Euclidean](https://wikipedia.org/wiki/Euclidean_geometry)) 또는 'non-flat' (non-Euclidean) 기하학 방식으로 포인트 사이 거리를 특정하는 것을 의미합니다. -> -> 이 컨텍스트에서 'Flat'은 Euclidean 기하학 (일부는 'plane' 기하학으로 가르침)을, non-flat은 non-Euclidean을 나타냅니다. 기하학은 머신러닝과 어떤 연관성이 있나요? 음, 수학과 기반이 같은 두 필드라서, 클러스터에서 포인트 사이의 거리를 측정할 수 있는 공통 방식이 있으며, 데이터의 특성에 기반해서, 'flat' 또는 'non-flat'으로 마무리지을 수 있습니다. [Euclidean distances](https://wikipedia.org/wiki/Euclidean_distance)는 두 포인트 사이 선분의 길이로 측정합니다. [Non-Euclidean distances](https://wikipedia.org/wiki/Non-Euclidean_geometry)는 곡선에 따라서 측정됩니다. 만약 데이터가, 시각화되어서, 평면에 존재하지 않은 것으로 보인다면, 특별 알고리즘을 사용해서 핸들링할 수 있습니다. -> -![Flat vs Nonflat Geometry Infographic](.././images/flat-nonflat.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) -> -> 🎓 ['Distances'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) -> -> 클러스터는 distance matrix로 정의됩니다, 예시로. 포인트 사이 거리입니다. 거리는 몇 방식으로 측정될 수 있습니다. Euclidean 클러스터는 포인트 값의 평균으로 정의되고, 'centroid' 또는 중심 포인트를 포함합니다. 거리는 이 중심까지 거리로 측정됩니다. Non-Euclidean 거리는 다른 포인트에서 가까운 포인트, 'clustroids'로 나타냅니다. Clustroid는 다음과 같이 다양한 방식으로 정의할 수 있습니다. -> -> 🎓 ['Constrained'](https://wikipedia.org/wiki/Constrained_clustering) -> -> [Constrained Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf)은 unsupervised 방식에서 'semi-supervised' 학습을 접목합니다. 포인트 사이 관계는 'cannot link' 또는 'must-link'로 플래그되어 데이터 셋에 일부 룰을 강제합니다. - -> -> 예시: 만약 알고리즘이 라벨링하지 못했거나 세미-라벨링된 데이터의 배치에서 풀리면, 만들어지는 클러스터의 품질이 내려갈 수 있습니다. 위 예시에서, 클러스터는 'round music things'와 'square music things'와 'triangular things'와 'cookies'를 그룹으로 묶을 수 있습니다. 만약 제한사항이나, 따라야할 룰이 주어진다면 ("the item must be made of plastic", "the item needs to be able to produce music") 알고리즘이 더 좋은 선택을 하도록 '제한'해서 도와줄 수 있습니다. -> -> 🎓 'Density' -> -> 'noisy' 데이터는 'dense'로 칩니다. 각 클러스터의 포인트 사이 거리에서 조금 밀집해있거나, 'crowded'한 것으로 증명할 수 있으므로, 데이터는 적당한 clustering 방식으로 분석되어질 필요가 있습니다. [This article](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html)에서 K-Means clustering vs. HDBSCAN 알고리즘을 사용해서 고르지않는 클러스터 밀집도로 노이즈 데이터셋을 찾아보고 서로 다른 차이점을 시연합니다. - -## Clustering 알고리즘 - -100개 이상 clustering 알고리즘이 있고, 현재 데이터의 특성에 기반해서 사용하는 게 다릅니다. 몇 주요 사항에 대해 이야기해봅니다: - -- **Hierarchical clustering**. 만약 오브젝트가 멀리 떨어져있지 않고, 가까운 오브젝트와 근접성으로 분류된다면, 클러스터는 다른 오브젝트의 거리에 따라서 형태가 만들어집니다. Scikit-learn의 agglomerative clustering은 계층적입니다. - - ![Hierarchical clustering Infographic](.././images/hierarchical.png) - > Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Centroid clustering**. 이 인기있는 알고리즘은 'k', 또는 형성할 클러스터의 수를 선택해야 될 필요가 있으며, 이후 알고리즘은 클러스터의 중심 포인트를 결정하고 포인트 주변 데이터를 수집합니다. [K-means clustering](https://wikipedia.org/wiki/K-means_clustering)은 인기있는 centroid clustering 버전입니다. 중심이 가까운 평균에 따라서 이름이 정해집니다. 클러스터에서 제곱 거리가 최소화됩니다. - - ![Centroid clustering Infographic](.././images/centroid.png) - > Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Distribution-based clustering**. 통계 모델링에서, distribution-based clustering은 데이터 포인트가 클러스터에 있는 확률을 기반으로, 할당에 중점을 둡니다. Gaussian mixture 방식이 이 타입에 속합니다. - -- **Density-based clustering**. 데이터 포인트는 밀집도나 서로 그룹으로 묶어진 기반으로 클러스터에 할당합니다. 그룹에서 멀리 떨어진 데이터 포인트를 아웃라이어나 노이즈로 간주합니다. DBSCAN, Mean-shift와 OPTICS는 이 clustering 타입에 해당됩니다. - -- **Grid-based clustering**. multi-dimensional 데이터셋이면, 그리드가 만들어지고 데이터가 그리드의 셀에 나눈 뒤에, 클러스터를 만듭니다. - -## 연습 - 데이터 cluster - -기술에서 Clustering은 적절한 시각화로 크게 도움받으므로, 음악 데이터로 시각화해서 시작해봅니다. 이 연습은 데이터의 특성에 가장 효과적으로 사용할 clustering 방식을 정할 때 도움받을 수 있습니다. - -1. 이 폴더에서 _notebook.ipynb_ 파일을 엽니다. - -1. 좋은 데이터 시각화를 위해서 `Seaborn` 패키지를 가져옵니다. - - ```python - !pip install seaborn - ``` - -1. _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인지 확인해서, Null 값을 다시 검토합니다: - - ```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 | - -> 🤔 만약 라벨링 안 한 데이터가 필요하지 않은 unsupervised 방식으로, clustering을 작업하게되면, 왜 데이터로 라벨을 보여주나요? 데이터 탐색 단계에서 편리하겠지만, clustering 알고리즘이 동작할 때는 필요 없습니다. 열 헤더를 제거하고 열 넘버로 데이터를 참조할 수 있습니다. - -데이터의 일반적 값을 봅니다. 랭킹에 못 들은 음악을 보여주는 건, '0'일 수 있습니다. 바로 제거하겠습니다. - -1. 가장 인기있는 장르를 찾기 위해서 barplot을 사용합니다: - - ```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](.././images/popular.png) - -✅ 만약 상위 값을 많이 보려면, top `[:5]`을 더 큰 값으로 변경하거나, 제거해서 다 봅니다. - -노트, 상위 장르가 'Missing'으로 서술되어 있으면, Spotify에서 분류하지 않았으므로, 제거합니다. - -1. 필터링해서 missing 데이터를 제거합니다 - - ```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](../images/all-genres.png) - -1. 지금까지, 상위 3개 장르가 데이터셋을 장악했습니다. `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() - f, ax = plt.subplots(figsize=(12, 9)) - sns.heatmap(corrmat, vmax=.8, square=True) - ``` - - ![correlations](../images/correlation.png) - - 유일하게 강한 상관 관계는 `energy`와 `loudness` 사이에 있으며, 일반적으로 화려한 음악이 에너지 넘치는다는 사실은 놀랍지 않습니다. 아니라면, 상관 관계는 상대적으로 약합니다. clustering 알고리즘이 데이터를 만드는 과정을 보는 것은 흥미로울 예정입니다. - - > 🎓 상관 관계가 인과 관계를 의미하지 않는다는 것을 참고합니다! 상관 관계의 증거는 있지만 인과 관계의 증거가 없습니다. [amusing web site](https://tylervigen.com/spurious-correlations)에 이 점을 강조할 몇 자료가 있습니다. - -데이터셋에 노래의 perceived popularity와 danceability가 수렴되나요? FacetGrid는 장르와 관계없이, 일렬로 늘어선 동심원을 보여줍니다. 나이지리아 사람들의 취향이 이 장르에서 특정 danceability 레벨에 수렴할 수 있지 않을까요? - -✅ 다른 데이터 포인트 (energy, loudness, speechiness)와 더 많거나 다른 뮤지컬 장르로 시도합니다. 무엇을 찾을 수 있나요? 일반적으로 데이터 포인트가 확산하는 것을 보려면 `df.describe()` 테이블을 찾아봅니다. - -### 연습 - 데이터 분산 - -이 3개 장르는 인기도에 기반해서, danceability의 인지도와 상당히 다르나요? - -1. 주어진 x와 y 축에 따라서 인기도와 danceability에 대한 상위 3개 장르 데이터 분포를 찾아봅니다. - - ```python - sns.set_theme(style="ticks") - - g = sns.jointplot( - data=df, - x="popularity", y="danceability", hue="artist_top_genre", - kind="kde", - ) - ``` - - 일반적인 수렴 점을 중심으로 동심원을 발견해서, 점의 분포를 확인할 수 있습니다. - - > 🎓 이 예시에서 continuous probability density curve로 데이터를 나타내는 KDE (Kernel Density Estimate) 그래프를 사용합니다. 여러 분포로 작업할 때 데이터를 해석할 수 있습니다. - - 보통은, 3가지 장르가 인기도와 danceability로 루즈하게 정렬됩니다. 루즈하게-정렬된 데이터에서 클러스터를 결정하는 것은 힘듭니다: - - ![distribution](../images/distribution.png) - -1. scatter plot을 만듭니다: - - - ```python - sns.FacetGrid(df, hue="artist_top_genre", size=5) \ - .map(plt.scatter, "popularity", "danceability") \ - .add_legend() - ``` - - 동일 축의 scatterplot은 비슷한 수렴 패턴을 보입니다 - - ![Facetgrid](../images/facetgrid.png) - -보통, clustering은, scatterplots으로 데이터 클러스터를 표시할 수 있으므로, 이 시각화 타입을 숙지하는 것은 매우 유용합니다. 다음 강의에서, 필터링된 데이터를 가져와서 k-means clustering으로 흥미로운 방식이 겹쳐보일 이 데이터의 그룹을 찾아보겠습니다. - ---- - -## 🚀 도전 - -다음 강의를 준비하기 위해서, 프로덕션 환경에서 찾아서 사용할 수 있는 다양한 clustering 알고리즘을 차트로 만듭니다. clustering은 어떤 문제를 해결하려고 시도하나요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) - -## 검토 & 자기주도 학습 - -clustering 알고리즘을 적용하기 전에, 배운대로, 데이터셋의 특성을 이해하는 게 좋습니다. 이 토픽 [here](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)을 더 읽어봅니다. - -[This helpful article](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/)에서 다양한 데이터 형태가 주어지면, 다양한 clustering 알고리즘이 동작하는 다른 방식을 알려줍니다. - -## 과제 - -[Research other visualizations for clustering](../assignment.md) diff --git a/5-Clustering/1-Visualize/translations/README.zh-cn.md b/5-Clustering/1-Visualize/translations/README.zh-cn.md deleted file mode 100644 index 5b699c62..00000000 --- a/5-Clustering/1-Visualize/translations/README.zh-cn.md +++ /dev/null @@ -1,339 +0,0 @@ -# 介绍聚类 - -聚类是一种无监督学习,它假定数据集未标记或其输入与预定义的输出不匹配。它使用各种算法对未标记的数据进行排序,并根据它在数据中识别的模式提供分组。 - -[![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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) - -### 介绍 - -[聚类](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") - -> 🎥单击上图观看视频:麻省理工学院的 John Guttag 介绍聚类 - -在专业环境中,聚类可用于确定诸如市场细分之类的事情,例如确定哪些年龄组购买哪些商品。另一个用途是异常检测,可能是从信用卡交易数据集中检测欺诈。或者您可以使用聚类来确定一批医学扫描中的肿瘤。 - -✅ 想一想您是如何在银行、电子商务或商业环境中“意外”遇到聚类的。 - -> 🎓有趣的是,聚类分析起源于 1930 年代的人类学和心理学领域。你能想象它是如何被使用的吗? - -或者,您可以使用它对搜索结果进行分组 - 例如,通过购物链接、图片或评论。当您有一个大型数据集想要减少并且想要对其执行更细粒度的分析时,聚类非常有用,因此该技术可用于在构建其他模型之前了解数据。 - -✅一旦你的数据被组织成聚类,你就为它分配一个聚类 ID,这个技术在保护数据集的隐私时很有用;您可以改为通过其聚类 ID 来引用数据点,而不是通过更多的可明显区分的数据。您能想到为什么要引用聚类 ID 而不是聚类的其他元素来识别它的其他原因吗? - -在此[学习模块中](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)) -> -> 转导推理源自观察到的映射到特定测试用例的训练用例。归纳推理源自映射到一般规则的训练案例,然后才应用于测试案例。 -> -> 示例:假设您有一个仅部分标记的数据集。有些东西是“记录”,有些是“CD”,有些是空白的。您的工作是为空白提供标签。如果您选择归纳方法,您将训练一个寻找“记录”和“CD”的模型,并将这些标签应用于未标记的数据。这种方法将难以对实际上是“盒式磁带”的东西进行分类。另一方面,转导方法可以更有效地处理这些未知数据,因为它可以将相似的项目组合在一起,然后将标签应用于一个组。在这种情况下,聚类可能反映“圆形音乐事物”和“方形音乐事物”。 -> -> 🎓 [“非平面”与“平面”几何](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> 源自数学术语,非平面与平面几何是指通过“平面”([欧几里德](https://wikipedia.org/wiki/Euclidean_geometry))或“非平面”(非欧几里得)几何方法测量点之间的距离。 -> -> 在此上下文中,“平面”是指欧几里得几何(其中一部分被教导为“平面”几何),而非平面是指非欧几里得几何。几何与机器学习有什么关系?好吧,作为植根于数学的两个领域,必须有一种通用的方法来测量聚类中点之间的距离,并且可以以“平坦”(flat)或“非平坦”(non-flat)的方式完成,具体取决于数据的性质. [欧几里得距离](https://wikipedia.org/wiki/Euclidean_distance)测量为两点之间线段的长度。[非欧距离](https://wikipedia.org/wiki/Non-Euclidean_geometry)是沿曲线测量的。如果您的可视化数据似乎不存在于平面上,您可能需要使用专门的算法来处理它。 -> -> ![Flat vs Nonflat Geometry Infographic](../images/flat-nonflat.png) -> [Dasani Madipalli ](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 的凝聚聚类是分层的。 - - ![Hierarchical clustering Infographic](../images/hierarchical.png) - - > [Dasani Madipalli](https://twitter.com/dasani_decoded) 作图 - -- **质心聚类**。这种流行的算法需要选择“k”或要形成的聚类数量,然后算法确定聚类的中心点并围绕该点收集数据。[K-means 聚类](https://wikipedia.org/wiki/K-means_clustering)是质心聚类的流行版本。中心由最近的平均值确定,因此叫做质心。与聚类的平方距离被最小化。 - - ![Centroid clustering Infographic](../images/centroid.png) - - > [Dasani Madipalli](https://twitter.com/dasani_decoded) 作图 - -- **基于分布的聚类**。基于统计建模,基于分布的聚类中心确定一个数据点属于一个聚类的概率,并相应地分配它。高斯混合方法属于这种类型。 - -- **基于密度的聚类**。数据点根据它们的密度或它们彼此的分组分配给聚类。远离该组的数据点被视为异常值或噪声。DBSCAN、Mean-shift 和 OPTICS 属于此类聚类。 - -- **基于网格的聚类**。对于多维数据集,创建一个网格并将数据划分到网格的单元格中,从而创建聚类。 - - - -## 练习 - 对你的数据进行聚类 - -适当的可视化对聚类作为一种技术有很大帮助,所以让我们从可视化我们的音乐数据开始。这个练习将帮助我们决定我们应该最有效地使用哪种聚类方法来处理这些数据的性质。 - -1. 打开此文件夹中的 *notebook.ipynb* 文件。 - -1. 导入 `Seaborn` 包以获得良好的数据可视化。 - - ```python - !pip install seaborn - ``` - -1. 附加来自 *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](../images/popular.png) - -✅如果您想查看更多顶部值,请将顶部更改`[:5]`为更大的值,或将其删除以查看全部。 - -请注意,当顶级流派被描述为“缺失”时,这意味着 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') - ``` - - 现在重新检查 genres: - - ![most popular](../images/all-genres.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() - f, ax = plt.subplots(figsize=(12, 9)) - sns.heatmap(corrmat, vmax=.8, square=True) - ``` - - ![correlations](../images/correlation.png) - - > 唯一强相关性是 `energy` 和之间 `loudness`,这并不奇怪,因为嘈杂的音乐通常非常有活力。否则,相关性相对较弱。看看聚类算法可以如何处理这些数据会很有趣。 - > - > > 🎓请注意,相关性并不意味着因果关系!我们有相关性的证据,但没有因果关系的证据。一个[有趣的网站](https://tylervigen.com/spurious-correlations)有一些强调这一点的视觉效果。 - -这个数据集是否围绕歌曲的流行度和可舞性有任何收敛?FacetGrid 显示无论流派如何,都有同心圆排列。对于这种类型,尼日利亚人的口味是否会在某种程度的可舞性上趋于一致? - -✅ 尝试不同的数据点(能量、响度、语音)和更多或不同的音乐类型。你能发现什么?查看 `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(核密度估计)图,该图使用连续概率密度曲线表示数据。这允许我们在处理多个分布时解释数据。 - - 总的来说,这三种流派在流行度和可舞性方面松散地对齐。在这种松散对齐的数据中确定聚类将是一个挑战: - - ![distribution](../images/distribution.png) - -1. 创建散点图: - - ```python - sns.FacetGrid(df, hue="artist_top_genre", size=5) \ - .map(plt.scatter, "popularity", "danceability") \ - .add_legend() - ``` - - 相同轴的散点图显示了类似的收敛模式 - - ![Facetgrid](../images/facetgrid.png) - -一般来说,对于聚类,你可以使用散点图来展示数据的聚类,所以掌握这种类型的可视化是非常有用的。在下一课中,我们将使用过滤后的数据并使用 k-means 聚类来发现这些数据中以有趣方式重叠的组。 - ---- - -## 🚀挑战 - -为下一课做准备,制作一张图表,说明您可能会在生产环境中发现和使用的各种聚类算法。 - -聚类试图解决什么样的问题? - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) - -## 复习与自学 - -在应用聚类算法之前,正如我们所了解的,了解数据集的性质是一个好主意。[在此处](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html)阅读有关此主题的更多[信息](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.zh-cn.md) diff --git a/5-Clustering/1-Visualize/translations/assignment.es.md b/5-Clustering/1-Visualize/translations/assignment.es.md deleted file mode 100644 index decf6c5a..00000000 --- a/5-Clustering/1-Visualize/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Investiga otras visualizaciones para agruparlas - -## Instrucciones - -En esta lección, has trabajado con algunas técnicas de visualización para comprender cómo graficar tus datos en preparación para agruparlos. Los gráficos de dispersión son particularmente útiles para encontrar grupos de objetos. Investiga distintas formas y librerías para crear gráficos de dispersión y documenta tu trabajo en un notebook. Puedes usar los datos de esta lección, otras lecciones, o datos que tú mismo proporciones (por favor, dá crédito a su fuente en tu notebook). Grafica algunos datos usando gráficos de dispersión y explica lo que descubras. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | -| | Se presentó un notebook con cinco gráficos de dispersión bien documentados | Se presentó un notebook con menos de cinco gráficos de dispersión y no está bien documentado | Se presentó un notebook incompleto | diff --git a/5-Clustering/1-Visualize/translations/assignment.it.md b/5-Clustering/1-Visualize/translations/assignment.it.md deleted file mode 100644 index dad3d708..00000000 --- a/5-Clustering/1-Visualize/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Ricercare altre visualizzazioni per il clustering - -## Istruzioni - -In questa lezione, si è lavorato con alcune tecniche di visualizzazione per capire come tracciare i propri dati in preparazione per il clustering. I grafici a dispersione, in particolare, sono utili per trovare gruppi di oggetti. Ricercare modi diversi e librerie diverse per creare grafici a dispersione e documentare il proprio lavoro in un notebook. Si possono utilizzare i dati di questa lezione, di altre lezioni o dei dati che si sono procurati in autonomia (per favore citare la fonte, comunque, nel proprio notebook). Tracciare alcuni dati usando i grafici a dispersione e spiegare cosa si scopre. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | -| | Viene presentato un notebook con cinque grafici a dispersione ben documentati | Un notebook viene presentato con meno di cinque grafici a dispersione ed è meno ben documentato | Viene presentato un notebook incompleto | diff --git a/5-Clustering/1-Visualize/translations/assignment.ko.md b/5-Clustering/1-Visualize/translations/assignment.ko.md deleted file mode 100644 index b9cea96c..00000000 --- a/5-Clustering/1-Visualize/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 클러스터링(군집화)을 위해 다른 시각화도 알아봅시다 - -## 설명 - -이번 수업에서는 군집화를 위해 데이터를 그려 넣는 법을 몇 가지 시각화 기술을 통해 알아보았습니다. 산점도는 특히나 여러 객체의 그룹들을 찾는 데 유용합니다. 다양한 방법과 라이브러리들을 조사해 여러 산점도를 그리고 그 과정을 Jupyter Notebook(노트북)에 기록해 보세요. 이 머신러닝 과정에서 제공하는 데이터를 사용하거나 다른 곳에서 데이터를 가져와도 됩니다. (다른 곳에서 데이터를 가져올 경우 그 출처를 노트북에 꼭 밝히시기 바랍니다.) 산점도로 데이터를 시각화해 무엇을 발견했는지 설명해 보세요. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | --------------------------------------- | ------------------------------------------------------- | -------------------- | -| | 노트북에 다섯 개의 산점도를 각각 잘 설명함 | 노트북에 다섯 개 미만의 산점도를 소개했으며 그 설명이 부족함 | 미완성 노트북을 제출함 | diff --git a/5-Clustering/1-Visualize/translations/assignment.zh-cn.md b/5-Clustering/1-Visualize/translations/assignment.zh-cn.md deleted file mode 100644 index 512c880c..00000000 --- a/5-Clustering/1-Visualize/translations/assignment.zh-cn.md +++ /dev/null @@ -1,13 +0,0 @@ -# 研究用于聚类的其他可视化 - -## 说明 - -在本节课中,您使用了一些可视化技术来掌握绘制数据图,为聚类数据做准备。散点图在寻找一组对象时尤其有用。研究不同的方法和不同的库来创建散点图,并在 notebook 上记录你的工作。你可以使用这节课的数据,其他课的数据,或者你自己的数据(但是,请把它的来源记在你的 notebook 上)。用散点图绘制一些数据,并解释你的发现。 - -## 评判规则 - - -| 评判标准 | 优秀 | 中规中矩 | 仍需努力 | -| -------- | -------------------------------- | ----------------------------------------------- | -------------------- | -| | notebook 上有五个详细文档的散点图 | notebook 上的散点图少于 5 个,而且文档写得不太详细 | 一个不完整的 notebook | - diff --git a/5-Clustering/2-K-Means/translations/README.es.md b/5-Clustering/2-K-Means/translations/README.es.md deleted file mode 100644 index 2d83b395..00000000 --- a/5-Clustering/2-K-Means/translations/README.es.md +++ /dev/null @@ -1,251 +0,0 @@ -# Agrupamiento K-Medias - -[![Andrew Ng explica el agrupamiento](https://img.youtube.com/vi/hDmNF9JG3lo/0.jpg)](https://youtu.be/hDmNF9JG3lo "Andrew Ng explica el agrupamiento") - -> 🎥 Haz clic en la imagen de arriba para ver el video: Andrew Ng explica el agrupamiento" - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29?loc=es) - -En esta lección, aprenderás cómo crear grupos usando Scikit-learn y el conjunto de datos de música Nigeriana que importaste anteriormente. Cubriremos los conceptos básicos de K-Medias para agrupamiento. Ten en mente que, como aprendiste en lecciones anteriores, hay muchas formas de de trabajar con grupos y el método que uses depende de tus datos. Probaremos K-medias ya que es la técnica de agrupamiento más común. ¡Comencemos! - -Términos que sobre los que aprenderás: - -- Puntaje de silueta -- Método del codo -- Inercia -- Varianza - -## Introducción - -[El agrupamiento K-medias](https://wikipedia.org/wiki/K-means_clustering) es un método derivado del dominio del procesamiento de señales. Se usa para dividir y particionar grupos de datos en 'k' grupos usando una serie de observaciones. Cada observación funciona para agrupar un punto de datos más cercano a su 'media' más cercana, o el punto central de un grupo. - -Los grupos pueden ser visualizados como [diagramas Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), los cuales incluye un punto (o 'semilla') y su región correspondiente. - -![diagrama Voronoi](../images/voronoi.png) - -> Infografía de [Jen Looper](https://twitter.com/jenlooper) - -El proceso de agrupamiento K-medias [se ejecuta en un proceso de tres pasos](https://scikit-learn.org/stable/modules/clustering.html#k-means): - -1. El algoritmo selecciona el k-número de puntos centrales al hacer muestreo del conjunto de datos. Después de esto, se repite: - 1. Se asigna cada muestra al centroide más cercano. - 2. Se crean nuevos centroides al tomar el valor medio de todas las muestras asignadas a los centroides previos. - 3. Luego, se calcula la diferencia entre los centroides nuevos y viejos y se repite hasta que los centroides se estabilizan. - -Un inconveniente de usar K-medias incluye el hecho que necesitarás establecer 'k', que es el número de centroides. Afortunadamente el 'método del codo' ayuda a estimar un buen valor inicial para 'k'. Lo probarás en un minuto. - -## Prerrequisitos - -Trabajarás en el archivo _notebook.ipynb_ de esta lección, que incluye la importación de datos y limpieza preliminar que hiciste en la última lección. - -## Ejercicio - preparación - -Comienza por darle otro vistazo a los datos de canciones. - -1. Crea un gráfico de caja, llamando a `boxplot()` para cada columna: - - ```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) - ``` - - Estos datos son un poco ruidosos: al observar cada columna como un gráfico de caja, puedes ver los valores atípicos. - - ![Valores atípicos](../images/boxplots.png) - -Podrías revisar el conjunto de datos y remover estos valores atípicos, pero eso haría que quedara un mínimo de datos. - -1. Por ahora, elege qué columnas usarás para tu ejercicio de agrupamiento. Elige unas con rangos similares y codifica la columna `artist_top_genre` como datos numéricos: - - ```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. Ahora necesitas elegir a cuántos grupos apuntar. Sabes que hay 3 géneros de canciones que extrajimos de el conjunto de datos, así que probemos con 3: - - ```python - from sklearn.cluster import KMeans - - nclusters = 3 - seed = 0 - - km = KMeans(n_clusters=nclusters, random_state=seed) - km.fit(X) - - # Predict the cluster for each data point - - y_cluster_kmeans = km.predict(X) - y_cluster_kmeans - ``` - -Ves un arreglo impreso con los grupos predichos (0, 1, 0 2) para cada fila del dataframe. - -1. Usa este arreglo para calcular una 'puntaje de silueta': - - ```python - from sklearn import metrics - score = metrics.silhouette_score(X, y_cluster_kmeans) - score - ``` - -## Puntaje de silueta - -Busca un puntaje de silueta más cercano a 1. Este puntaje varía de -1 a 1, y si el puntaje es 1, el grupo es denso y bien separado de otros grupos. Un valor cercano a 0 representa grupos superpuestos con muestras muy cercanas al límite de decisión de los grupos vecinos. [Fuente](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam). - -Nuestro puntaje es de **.53**, justo a la mitad. Esto indica que nuestros datos no son particularmente adecuados para este tipo de agrupamiento, pero continuemos. - -### Ejercicio - construye un modelo - -1. Importa `KMeans` e inicia el proceso de agrupamiento. - - ```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_) - - ``` - - Hay algunas partes que requieren explicación. - - > 🎓 range: Estas son las iteraciones del proceso de agrupamiento - - > 🎓 random_state: "Determina la generación de números aleatorios para la inicialización del centroide." [Fuente](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - - > 🎓 WCSS: "within-cluster sums of squares (suma de cuadrados dentro del grupo)" mide la distancia cuadrática promedio de todos los puntos dentro de un grupo al centroide dle grupo. [Fuente](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - - > 🎓 Inertia: Los algoritmos K-medias intentan elegir los centroides para minimizar la 'inertia (inercia)', "una medida de cuánta coherencia interna tienen los grupos." [Fuente](https://scikit-learn.org/stable/modules/clustering.html). El valor se agrega a la variable wcss en cada iteración. - - > 🎓 k-means++: En [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) puedes usar la optimización 'k-means++', la cual "inicializa los centroides para que sean (generalmente) distantes uno de otro, llevando a probablemente mejores resultados que la inicialización aleatoria". - -### Método del codo - -Anteriormente, supusiste que, porque has apuntado a 3 géneros de canciones, deberías elegir 3 grupos. ¿Pero es el caso? - -1. Usa el 'método del codo' para asegurarte. - - ```python - plt.figure(figsize=(10,5)) - sns.lineplot(range(1, 11), wcss,marker='o',color='red') - plt.title('Elbow') - plt.xlabel('Number of clusters') - plt.ylabel('WCSS') - plt.show() - ``` - - Usa la variable `wcss` que construiste en el paso anterior para crear una gráfica que muestre dónde se está 'la curva' en el codo, la cual indica el número óptimo de grupos. ¡Quizá **es** 3! - - ![Método del codo](../images/elbow.png) - -## Ejercicio - muestra los grupos - -1. Prueba el proceso de nuevo, esta vez configurando 3 grupos, y muestra los grupos como un gráfico de dispersión: - - ```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. Revisa la precisión del modelo: - - ```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))) - ``` - - La precisión de este modelo no es tan buena, y la forma de los grupos te dará una pista del por qué. - - ![Grupos](../images/clusters.png) - - Estos datos están demasiado desequilibrados, muy poco correlacionados y tienen demasiada varianza entre los valores de columna para agrupar bien. De hecho, los grupos que forman están probablemente fuertemente influenciados o sesgados por las tres categorías de géneros que definimos arriba. ¡Eso fue un proceso de aprendizaje! - - En la documentación de Scikit-learn, puedes ver que un modelo como este, con grupos no muy bien demarcados, tienen un problema de 'varianza': - - ![Modelos de problemas](../images/problems.png) - > Infografía de Scikit-learn - -## Varianza - -La varianza se define como "ep promedio de diferencias cuadráticas de la media". [Fuente](https://www.mathsisfun.com/data/standard-deviation.html). En el contexto de este problema de agrupamiento, se refiere a los datos en los que los números de nuestro conjunto de datos tienden a divergir demasiado de la media. - -✅ Este es un buen momento para pensar acerca de todas las formas en que podrías corregir este problema. ¿Modificar los datos un poco más? 'Usar columnas distintas? ¿Usar un algoritmo diferente? Intenta [escalando tus datos](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) para normalizarlos y probar otras columnas. - -> Prueba esta '[calculadora de varianza](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' para entender un poca más el concepto. - ---- - -## 🚀Desafío - -Dedica algo de tiempo a este notebook, ajustando los parámetros. ¿Puedes mejorar la precisión del modelo al limpiar más los datos (eliminando valores atípicos, por ejemplo)? Puedes usar pesos para dar mayor ponderación a las muestras de datos proporcionadas. ¿Qué más puedes hacer para crear mejores grupos? - -Pista: Prueba escalar tus datos. Hay código comentado en el notebook que agrega escalado estándar para hacer que las columnas de datos se parezcan más entre sí en términos de rango. Encontrarás que mientras el puntaje de silueta disminuye el 'pliegue' en la gráfica de codo se suaviza. Esto es por qué al dejar los datos sin escalar le permite a los datos con menos variación tengan más peso. Lee un poco más de este problema [aquí](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30?loc=es) - -## Revisión y auto-estudio - -Da un vistazo a un simulador K-Medias [como este](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Puedes usar esta herramienta para visualizar puntos de datos de muestra y determina sus centroides. Puedes editar la aleatoriedad de los datos, el número de grupos y el número de centroides. ¿Esto te ayuda para tener una idea de cómo se pueden agrupar los datos? - -También, da un vistazo a [este folleto de K-Medias](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) de Stanford. - -## Asignación - -[Prueba distintos métodos de agrupamiento](assignment.es.md) diff --git a/5-Clustering/2-K-Means/translations/README.it.md b/5-Clustering/2-K-Means/translations/README.it.md deleted file mode 100644 index 42ef5750..00000000 --- a/5-Clustering/2-K-Means/translations/README.it.md +++ /dev/null @@ -1,251 +0,0 @@ -# Clustering K-Means - -[![Andrew Ng spiega Clustering](https://img.youtube.com/vi/hDmNF9JG3lo/0.jpg)](https://youtu.be/hDmNF9JG3lo " Andrew Ng spiega Clustering") - -> 🎥 Fare clic sull'immagine sopra per un video: Andrew Ng spiega il clustering - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/?loc=it) - -In questa lezione si imparerà come creare cluster utilizzando Scikit-learn e l'insieme di dati di musica nigeriana importato in precedenza. Si tratteranno le basi di K-Means per Clustering. Si tenga presente che, come appreso nella lezione precedente, ci sono molti modi per lavorare con i cluster e il metodo usato dipende dai propri dati. Si proverà K-Means poiché è la tecnica di clustering più comune. Si inizia! - -Temini che si imparerà a conoscere: - -- Silhouette scoring (punteggio silhouette) -- Elbow method (metodo del gomito) -- Inerzia -- Varianza - -## Introduzione - -[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) è un metodo derivato dal campo dell'elaborazione del segnale. Viene utilizzato per dividere e partizionare gruppi di dati in cluster "k" utilizzando una serie di osservazioni. Ogni osservazione lavora per raggruppare un dato punto dati più vicino alla sua "media" più vicina, o punto centrale di un cluster. - -I cluster possono essere visualizzati come [diagrammi di Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), che includono un punto (o 'seme') e la sua regione corrispondente. - -![diagramma di voronoi](../images/voronoi.png) - -> Infografica di [Jen Looper](https://twitter.com/jenlooper) - -Il processo di clustering K-Means [viene eseguito in tre fasi](https://scikit-learn.org/stable/modules/clustering.html#k-means): - -1. L'algoritmo seleziona il numero k di punti centrali campionando dall'insieme di dati. Dopo questo, esegue un ciclo: - 1. Assegna ogni campione al centroide più vicino. - 2. Crea nuovi centroidi prendendo il valore medio di tutti i campioni assegnati ai centroidi precedenti. - 3. Quindi, calcola la differenza tra il nuovo e il vecchio centroide e ripete finché i centroidi non sono stabilizzati. - -Uno svantaggio dell'utilizzo di K-Means include il fatto che sarà necessario stabilire 'k', ovvero il numero di centroidi. Fortunatamente il "metodo del gomito" aiuta a stimare un buon valore iniziale per "k". Si proverà in un minuto. - -## Prerequisito - -Si lavorerà nel file _notebook.ipynb_ di questa lezione che include l'importazione dei dati e la pulizia preliminare fatta nell'ultima lezione. - -## Esercizio - preparazione - -Iniziare dando un'altra occhiata ai dati delle canzoni. - -1. Creare un diagramma a scatola e baffi (boxplot), chiamando `boxplot()` per ogni colonna: - - ```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) - ``` - - Questi dati sono un po' rumorosi: osservando ogni colonna come un boxplot, si possono vedere i valori anomali. - - ![situazioni anomale](../images/boxplots.png) - -Si potrebbe esaminare l'insieme di dati e rimuovere questi valori anomali, ma ciò renderebbe i dati piuttosto minimi. - -1. Per ora, si scelgono quali colonne utilizzare per questo esercizio di clustering. Scegliere quelle con intervalli simili e codifica la colonna `artist_top_genre` come dati numerici: - - ```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. Ora si deve scegliere quanti cluster scegliere come obiettivo. E' noto che ci sono 3 generi di canzoni ricavati dall'insieme di dati, quindi si prova 3: - - ```python - from sklearn.cluster import KMeans - - nclusters = 3 - seed = 0 - - km = KMeans(n_clusters=nclusters, random_state=seed) - km.fit(X) - - # Predict the cluster for each data point - - y_cluster_kmeans = km.predict(X) - y_cluster_kmeans - ``` - -Viene visualizzato un array con i cluster previsti (0, 1 o 2) per ogni riga del dataframe di dati. - -1. Usare questo array per calcolare un "punteggio silhouette": - - ```python - from sklearn import metrics - score = metrics.silhouette_score(X, y_cluster_kmeans) - score - ``` - -## Punteggio Silhouette - -Si vuole ottenere un punteggio silhouette più vicino a 1. Questo punteggio varia da -1 a 1 e, se il punteggio è 1, il cluster è denso e ben separato dagli altri cluster. Un valore vicino a 0 rappresenta cluster sovrapposti con campioni molto vicini al limite di decisione dei clusters vicini [fonte](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam). - -Il punteggio è **.53**, quindi proprio nel mezzo. Ciò indica che i dati non sono particolarmente adatti a questo tipo di clustering, ma si prosegue. - -### Esercizio: costruire il proprio modello - -1. Importare `KMeans` e avviare il processo di clustering. - - ```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_) - - ``` - - Ci sono alcune parti qui che meritano una spiegazione. - - > 🎓 range: queste sono le iterazioni del processo di clustering - - > 🎓 random_state: "Determina la generazione di numeri casuali per l'inizializzazione del centroide."[fonte](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - - > 🎓 WCSS: "somma dei quadrati all'interno del cluster" misura la distanza media al quadrato di tutti i punti all'interno di un cluster rispetto al cluster centroid [fonte](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - - > 🎓 Inerzia: gli algoritmi K-Means tentano di scegliere i centroidi per ridurre al minimo l’’inerzia’, "una misura di quanto siano coerenti i cluster".[fonte](https://scikit-learn.org/stable/modules/clustering.html). Il valore viene aggiunto alla variabile wcss ad ogni iterazione. - - > 🎓 k-means++: in [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) puoi utilizzare l'ottimizzazione 'k-means++', che "inizializza i centroidi in modo che siano (generalmente) distanti l'uno dall'altro, portando probabilmente a risultati migliori rispetto all'inizializzazione casuale. - -### Metodo del gomito - -In precedenza, si era supposto che, poiché sono stati presi di mira 3 generi di canzoni, si dovrebbero scegliere 3 cluster. E' questo il caso? - -1. Usare il "metodo del gomito" per assicurarsene. - - ```python - plt.figure(figsize=(10,5)) - sns.lineplot(range(1, 11), wcss,marker='o',color='red') - plt.title('Elbow') - plt.xlabel('Number of clusters') - plt.ylabel('WCSS') - plt.show() - ``` - - Usare la variabile `wcss` creata nel passaggio precedente per creare un grafico che mostra dove si trova la "piegatura" nel gomito, che indica il numero ottimale di cluster. Forse **sono** 3! - - ![Metodo del gomito](../images/elbow.png) - -## Esercizio - visualizzare i cluster - -1. Riprovare il processo, questa volta impostando tre cluster e visualizzare i cluster come grafico a dispersione: - - ```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. Verificare la precisione del modello: - - ```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))) - ``` - - La precisione di questo modello non è molto buona e la forma dei grappoli fornisce un indizio sul perché. - - ![cluster](../images/clusters.png) - - Questi dati sono troppo sbilanciati, troppo poco correlati e c'è troppa varianza tra i valori della colonna per raggruppare bene. In effetti, i cluster che si formano sono probabilmente fortemente influenzati o distorti dalle tre categorie di genere definite sopra. È stato un processo di apprendimento! - - Nella documentazione di Scikit-learn, si può vedere che un modello come questo, con cluster non molto ben delimitati, ha un problema di "varianza": - - ![modelli problematici](../images/problems.png) - > Infografica da Scikit-learn - -## Varianza - -La varianza è definita come "la media delle differenze al quadrato dalla media" [fonte](https://www.mathsisfun.com/data/standard-deviation.html). Nel contesto di questo problema di clustering, si fa riferimento ai dati che i numeri dell'insieme di dati tendono a divergere un po' troppo dalla media. - -✅ Questo è un ottimo momento per pensare a tutti i modi in cui si potrebbe correggere questo problema. Modificare un po' di più i dati? Utilizzare colonne diverse? Utilizzare un algoritmo diverso? Suggerimento: provare a [ridimensionare i dati](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) per normalizzarli e testare altre colonne. - -> Provare questo "[calcolatore della varianza](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)" per capire un po’ di più il concetto. - ---- - -## 🚀 Sfida - -Trascorrere un po' di tempo con questo notebook, modificando i parametri. E possibile migliorare l'accuratezza del modello pulendo maggiormente i dati (rimuovendo gli outlier, ad esempio)? È possibile utilizzare i pesi per dare più peso a determinati campioni di dati. Cos'altro si può fare per creare cluster migliori? - -Suggerimento: provare a ridimensionare i dati. C'è un codice commentato nel notebook che aggiunge il ridimensionamento standard per rendere le colonne di dati più simili tra loro in termini di intervallo. Si scoprirà che mentre il punteggio della silhouette diminuisce, il "kink" nel grafico del gomito si attenua. Questo perché lasciare i dati non scalati consente ai dati con meno varianza di avere più peso. Leggere un po' di più su questo problema [qui](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/?loc=it) - -## Revisione e Auto Apprendimento - -Dare un'occhiata a un simulatore di K-Means [tipo questo](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). È possibile utilizzare questo strumento per visualizzare i punti dati di esempio e determinarne i centroidi. Questo aiuta a farsi un'idea di come i dati possono essere raggruppati? - -Inoltre, dare un'occhiata a [questa dispensa sui K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) di Stanford. - -## Compito - -[Provare diversi metodi di clustering](assignment.it.md) diff --git a/5-Clustering/2-K-Means/translations/README.ko.md b/5-Clustering/2-K-Means/translations/README.ko.md deleted file mode 100644 index 4d5d6ca7..00000000 --- a/5-Clustering/2-K-Means/translations/README.ko.md +++ /dev/null @@ -1,251 +0,0 @@ -# K-Means clustering - -[![Andrew Ng explains Clustering](https://img.youtube.com/vi/hDmNF9JG3lo/0.jpg)](https://youtu.be/hDmNF9JG3lo "Andrew Ng explains Clustering") - -> 🎥 영상을 보려면 이미지 클릭: Andrew Ng explains clustering - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) - -이 강의에서, Scikit-learn과 함께 이전에 가져온 나이지리아 음악 데이터셋으로 클러스터 제작 방식을 배울 예정입니다. Clustering을 위한 K-Means 기초를 다루게 됩니다. 참고로, 이전 강의에서 배웠던대로, 클러스터로 작업하는 여러 방식이 있고 데이터를 기반한 방식도 있습니다. 가장 일반적 clustering 기술인 K-Means을 시도해보려고 합니다. 시작해봅니다! - -다음 용어를 배우게 됩니다: - -- Silhouette scoring -- Elbow method -- Inertia -- Variance - -## 소개 - -[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering)은 신호 처리 도메인에서 파생된 방식입니다. observations 계열로서 데이터 그룹을 'k' 클러스터로 나누고 분할하며 사용했습니다. 각자 observation은 가까운 'mean', 또는 클러스터의 중심 포인트에 주어진 정밀한 데이터 포인트를 그룹으로 묶기 위해서 작동합니다. - -클러스터는 포인트(또는 'seed')와 일치하는 영역을 포함한, [Voronoi diagrams](https://wikipedia.org/wiki/Voronoi_diagram)으로 시각화할 수 있습니다. - -![voronoi diagram](../images/voronoi.png) - -> infographic by [Jen Looper](https://twitter.com/jenlooper) - -K-Means clustering은 [executes in a three-step process](https://scikit-learn.org/stable/modules/clustering.html#k-means)로 처리됩니다: - -1. 알고리즘은 데이터셋에서 샘플링한 중심 포인트의 k-number를 선택합니다. 반복합니다: - 1. 가장 가까운 무게 중심에 각자 샘플을 할당합니다. - 2. 이전의 무게 중심에서 할당된 모든 샘플의 평균 값을 가지면서 새로운 무게 중심을 만듭니다. - 3. 그러면, 새롭고 오래된 무게 중심 사이의 거리를 계산하고 무계 중심이 안정될 때까지 반복합니다. - -K-Means을 사용한 한 가지 약점은 무게 중심의 숫자를, 'k'로 해야 된다는 사실입니다. 다행스럽게 'elbow method'는 'k' 값을 좋게 시작할 수 있게 추정하는 데 도움을 받을 수 있습니다. 몇 분동안 시도할 예정입니다. - -## 전제 조건 - -마지막 강의에서 했던 데이터를 가져와서 미리 정리한 이 강의의 _notebook.ipynb_ 파일로 작업할 예정입니다. - -## 연습 - 준비하기 - -노래 데이터를 다시 보는 것부터 시작합니다. - -1. 각 열에 `boxplot()`을 불러서, 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) - ``` - - 이 데이터는 약간의 노이즈가 있습니다: 각 열을 boxplot으로 지켜보면 아웃라이어를 볼 수 있습니다. - - ![outliers](../images/boxplots.png) - -데이터셋을 찾고 이 아웃라이어를 제거하는 대신에, 데이터는 꽤 작아지게 됩니다. - -1. 지금부터, clustering 연습에서 사용할 열을 선택합니다. 유사한 범위로 하나 선택하고 `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) - - # Predict the cluster for each data point - - y_cluster_kmeans = km.predict(X) - y_cluster_kmeans - ``` - -데이터 프레임의 각 열에서 예측된 클러스터 (0, 1,또는 2)로 배열을 출력해서 볼 수 있습니다. - -1. 배열로 'silhouette score'를 계산합니다: - - ```python - from sklearn import metrics - score = metrics.silhouette_score(X, y_cluster_kmeans) - score - ``` - -## Silhouette score - -1에 근접한 silhouette score를 찾아봅니다. 이 점수는 -1에서 1까지 다양하며, 클러스터가 밀접하여 다른 것과 잘-분리됩니다. 0 근접 값은 주변 클러스터의 decision boundary에 매우 가까운 샘플과 함께 클러스터를 오버랩헤서 니타냅니다. [source](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam). - -**.53** 점이므로, 중간에 위치합니다. 데이터가 이 clustering 타입에 특히 잘-맞지 않다는 점을 나타내고 있지만, 계속 진행합니다. - -### 연습 - 모델 만들기 - -1. `KMeans`을 import 하고 clustering 처리를 시작합니다. - - ```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: clustering 프로세스의 반복입니다 - - > 🎓 random_state: "Determines random number generation for centroid initialization."[source](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - - > 🎓 WCSS: "within-cluster sums of squares"은 클러스터 무게 중심으로 클러스터에서 모든 포인트의 squared average 거리를 측정합니다. [source](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - - > 🎓 Inertia: K-Means 알고리즘은 'inertia'를 최소로 유지하기 위해서 무게 중심을 선택하려고 시도합니다, "a measure of how internally coherent clusters are."[source](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++' 최적화를 사용할 수 있고, 무게 중심을 (일반적인) 거리로 각자 떨어져서 초기화하면, 아마 랜덤 초기화보다 더 좋은 결과로 이어질 수 있습니다. - -### Elbow method - -예전에 추측했던 것을 기반으로, 3개 노래 장르를 타겟팅 했으므로, 3게 클러스터를 선택해야 되었습니다. 그러나 그랬어야만 하나요? - -1. 'elbow method'을 사용해서 확인합니다. - - ```python - plt.figure(figsize=(10,5)) - sns.lineplot(range(1, 11), wcss,marker='o',color='red') - plt.title('Elbow') - plt.xlabel('Number of clusters') - plt.ylabel('WCSS') - plt.show() - ``` - - 이전 단계에서 만들었던 `wcss` 변수로, 최적 클러스터 수를 나타낼 elbow의 'bend'가 어디있는지 보여주는 차트를 만듭니다. 아마도 3 **입니다**! - - ![elbow method](../images/elbow.png) - -## 연습 - 클러스터 보이기 - -1. 프로세스를 다시 시도하여, 이 시점에 3개 클러스터를 다시 설정하고, scatterplot으로 클러스터를 보여줍니다: - - ```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](../images/clusters.png) - - 이 데이터는 매우 불안정하며, 상관 관계가 낮고 열 값 사이에 편차가 커서 잘 클러스터될 수 없습니다. 사실, 만들어진 클러스터는 정의한 3개 장르 카테고리에 크게 영향받거나 뒤틀릴 수 있습니다. 학습 프로세스입니다! - - Scikit-learn 문서에, 클러스터가 매우 명확하지 않은 모델, 'variance' 문제가 있습니다: - - ![problem models](../images/problems.png) - > Infographic from Scikit-learn - -## Variance - -Variance는 "the average of the squared differences from the Mean."으로 정의되었습니다. [source](https://www.mathsisfun.com/data/standard-deviation.html) 이 clustering 문제의 컨텍스트에서, 데이터셋 숫자가 평균에서 너무 크게 이탈되어 데이터로 나타냅니다. - -✅ 이 이슈를 해결할 모든 방식을 생각해보는 훌륭한 순간입니다. 데이터를 조금 트윅해볼까요? 다른 열을 사용해볼까요? 다른 알고리즘을 사용해볼까요? 힌트: [scaling your data](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/)로 노멀라이즈하고 다른 컬럼을 테스트헤봅니다. - -> '[variance calculator](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)'로 좀 더 개념을 이해해봅니다. - ---- - -## 🚀 도전 - -파라미터를 트윅하면서, 노트북으로 시간을 보냅니다. 데이터를 더 정리해서 (예시로, 아웃라이어 제거) 모델의 정확도를 개선할 수 있나요? 가중치로 주어진 데이터 샘플에서 더 가중치를 줄 수 있습니다. 괜찮은 클러스터를 만들기 위헤 어떤 다른 일을 할 수 있나요? - -힌트: 데이터를 더 키워봅니다. 가까운 범위 조건에 비슷한 데이터 열을 만들고자 추가하는 표준 스케일링 코드를 노트북에 주석으로 남겼습니다. silhouette 점수가 낮아지는 동안, elbow 그래프의 'kink'가 주름 펴지는 것을 볼 수 있습니다. 데이터를 조정하지 않고 남기면 덜 분산된 데이터가 더 많은 가중치로 나를 수 있다는 이유입니다. [here](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226) 이 문제를 조금 더 읽어봅니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) - -## 검토 & 자기주도 학습 - -[such as this one](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/)같은 K-Means 시뮬레이터를 찾아봅니다. 이 도구로 샘플 데이터 포인트를 시각화하고 무게 중심을 결정할 수 있습니다. 데이터의 랜덤성, 클러스터 수와 무게 중심 수를 고칠 수 있습니다. 데이터를 그룹으로 묶기 위한 아이디어를 얻는 게 도움이 되나요? - -또한, Stanford 의 [this handout on K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) 을 찾아봅니다. - -## 과제 - -[Try different clustering methods](../assignment.md) diff --git a/5-Clustering/2-K-Means/translations/README.zh-cn.md b/5-Clustering/2-K-Means/translations/README.zh-cn.md deleted file mode 100644 index 3a9fba1c..00000000 --- a/5-Clustering/2-K-Means/translations/README.zh-cn.md +++ /dev/null @@ -1,253 +0,0 @@ -# K-Means 聚类 - -[![Andrew Ng explains Clustering](https://img.youtube.com/vi/hDmNF9JG3lo/0.jpg)](https://youtu.be/hDmNF9JG3lo "Andrew Ng explains Clustering") - -> 🎥 单击上图观看视频:Andrew Ng 解释聚类 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) - -在本课中,您将学习如何使用 Scikit-learn 和您之前导入的尼日利亚音乐数据集创建聚类。我们将介绍 K-Means 聚类 的基础知识。请记住,正如您在上一课中学到的,使用聚类的方法有很多种,您使用的方法取决于您的数据。我们将尝试 K-Means,因为它是最常见的聚类技术。让我们开始吧! - -您将了解的术语: - -- 轮廓打分 -- 手肘方法 -- 惯性 -- 方差 - -## 介绍 - -[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) 是一种源自信号处理领域的方法。它用于使用一系列观察将数据组划分和划分为“k”个聚类。每个观察都用于对最接近其最近“平均值”或聚类中心点的给定数据点进行分组。 - -聚类可以可视化为 [Voronoi 图](https://wikipedia.org/wiki/Voronoi_diagram),其中包括一个点(或“种子”)及其相应的区域。 - -![voronoi diagram](../images/voronoi.png) - -> [Jen Looper](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* 文件,其中包含您在上一课中所做的数据导入和初步清理。 - -## 练习 - 准备 - -首先再看看歌曲数据。 - -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](../images/boxplots.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) - - # Predict the cluster for each data point - - 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)。 - -我们的分数是 **0.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:“聚类内平方和”测量聚类内所有点到聚类质心的平方平均距离。[来源](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce)。 - - > 🎓 Inertia: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 个歌曲 genre,所以您应该选择 3 个聚类。但真的是这样吗? - -1. 使用手肘方法来确认。 - - ```python - plt.figure(figsize=(10,5)) - sns.lineplot(range(1, 11), wcss,marker='o',color='red') - plt.title('Elbow') - plt.xlabel('Number of clusters') - plt.ylabel('WCSS') - plt.show() - ``` - - 使用 `wcss` 您在上一步中构建的变量创建一个图表,显示肘部“弯曲”的位置,这表示最佳聚类数。也许**是** 3! - - ![elbow method](../images/elbow.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](../images/clusters.png) - - 这些数据太不平衡,相关性太低,列值之间的差异太大,无法很好地聚类。事实上,形成的聚类可能受到我们上面定义的三个类型类别的严重影响或扭曲。那是一个学习的过程! - - 在 Scikit-learn 的文档中,你可以看到像这样的模型,聚类划分不是很好,有一个“方差”问题: - - ![problem models](../images/problems.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://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226)。 - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) - -## 复习与自学 - -看看[像这样](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/)的 K-Means 模拟器。您可以使用此工具来可视化样本数据点并确定其质心。您可以编辑数据的随机性、聚类数和质心数。这是否有助于您了解如何对数据进行分组? - -另外,看看斯坦福大学的 [K-Means 讲义](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html)。 - -## 作业 - -[尝试不同的聚类方法](./assignment.zh-cn.md) - diff --git a/5-Clustering/2-K-Means/translations/assignment.es.md b/5-Clustering/2-K-Means/translations/assignment.es.md deleted file mode 100644 index 8ea2ee54..00000000 --- a/5-Clustering/2-K-Means/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Prueba distintos métodos de agrupamiento - -## Instrucciones - -En esta lección aprendiste acerca del agrupamiento K-Medias. Algunas veces K-Medias no es apropiado para tus datos. Crea un notebook usando los datos ya sea de estas lecciones o de algún otro lugar (dá crédito a tu fuente) y muestra un método de agrupamiento diferente sin usar K-Medias. ¿Qué aprendiste? - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | Se presentó un notebook con un modelo de agrupamiento bien documentado | Se presentó un notebook sin buena documentación y/o incompleto | Se envió un trabajo incompleto | diff --git a/5-Clustering/2-K-Means/translations/assignment.it.md b/5-Clustering/2-K-Means/translations/assignment.it.md deleted file mode 100644 index 59fc79de..00000000 --- a/5-Clustering/2-K-Means/translations/assignment.it.md +++ /dev/null @@ -1,10 +0,0 @@ -# Provare diversi metodi di clustering - -## Istruzioni - -In questa lezione si è imparato a conoscere il clustering K-Means. A volte K-Means non è appropriato per i propri dati. Creare un notebook usando i dati da queste lezioni o da qualche altra parte (accreditare la fonte) e mostrare un metodo di clustering diverso NON usando K-Means. Che cosa si è imparato? -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | Viene presentato un notebook con un modello di clustering ben documentato | Un notebook è presentato senza una buona documentazione e/o incompleto | E' stato inviato un lavoro incompleto | diff --git a/5-Clustering/2-K-Means/translations/assignment.ko.md b/5-Clustering/2-K-Means/translations/assignment.ko.md deleted file mode 100644 index 61b73ef3..00000000 --- a/5-Clustering/2-K-Means/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 다른 군집법도 알아봅시다 - -## 설명 - -이번 수업에서는 k-평균 군집화에 대해 알아보았습니다. 때때로 k-평균 군집법은 특정 데이터를 군집화하는 데 있어 적합하지 않을 수 있습니다. Jupyter Notebook(노트북)을 만들고, 이 머신러닝 과정에서 제공하는 데이터를 사용하거나 다른 곳에서 데이터를 구해 (출처를 밝히시기 바랍니다) k-평균 군집법을 사용하지 않는 다른 군집법 한 가지를 골라 데이터에 적용해 보세요. 무엇을 배웠나요? - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ------------------------------------ | -------------------------------------------- | ------------------- | -| | 잘 문서화한 군집 모델을 노트북에 선보임 | 문서화가 부족하고 (또는) 그 문서가 완성되지 않음 | 미완성 작업을 제출함 | diff --git a/5-Clustering/2-K-Means/translations/assignment.zh-cn.md b/5-Clustering/2-K-Means/translations/assignment.zh-cn.md deleted file mode 100644 index c21058d3..00000000 --- a/5-Clustering/2-K-Means/translations/assignment.zh-cn.md +++ /dev/null @@ -1,12 +0,0 @@ -# 尝试不同的聚类方法 - - -## 说明 - -在本课中,您学习了 K-Means 聚类。有时 K-Means 不适合您的数据。使用来自这些课程或其他地方的数据(归功于您的来源)创建notebook,并展示不使用 K-Means 的不同聚类方法。你学到了什么? -## 评判规则 - -| 评判标准 | 优秀 | 中规中矩 | 仍需努力 | -| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | 一个具有良好文档记录的聚类模型的notebook | 一个没有详细文档或不完整的notebook| 提交了一个不完整的工作 | - diff --git a/5-Clustering/translations/README.es.md b/5-Clustering/translations/README.es.md deleted file mode 100644 index 0a3c4cf7..00000000 --- a/5-Clustering/translations/README.es.md +++ /dev/null @@ -1,29 +0,0 @@ -# Modelos de agrupamiento en el aprendizaje automático - -El agrupamiento es una tarea del aprendizaje automático en donde se buscan objetos que se parezcan a otros y estos se agrupan en elementos llamados clusters. Lo que hace diferente al clustering de otros enfoques en el aprendizaje automático, es que las cosas suceden de forma automática, de hecho, es justo decir que es lo opuesto al aprendizaje supervisado. - -## Tema regional: modelos de clustering para los gustos musicales de la audiencia Nigeriana 🎧 - -La audiencia Nigeriana tiene diversos gustos musicales. Usando datos extraídos de Spotify (inspirados por [este artículo](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421), daremos un vistazo a alguna música popular en Nigeria. Este conjunto de datos incluye datos acerca de varias canciones de acuerdo a la puntuación por 'bailables', 'acústica', 'volumen', 'habla', popularidad y energía. ¡Será interesante descubrir patrones en estos datos! - -![Un tornamesa](../images/turntable.jpg) - -> Foto por Marcela Laskoski en Unsplash - -En esta serie de lecciones, descubrirás nuevas formas de analizar datos usando técnicas de clustering. El clustering es particularmente útil cuando tu conjunto de datos carece de etiquetas. Si este sí tiene etiquetas, entonces las técnicas de clasificación como las que has aprendido en lecciones previas son más útiles. Pero en casos donde pretendes agrupar datos sin etiquetas, el clustering es una gran forma de descubrir patrones. - - -> Existen herramientas low-code útiles que te pueden ayudar a trabajar con modelos de clustering. Prueba [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lecciones - -1. [Introducción al clustering](1-Visualize/README.md) -2. [K-Means clustering](2-K-Means/README.md) - -## Créditos - -Éstas lecciones fueron escritas con 🎶 por [Jen Looper](https://www.twitter.com/jenlooper) con la útil ayuda de [Rishit Dagli](https://rishit_dagli) y [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). - -El conjunto de datos de las [Canciones Nigerianas](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) fue obtenido de Kaggle como raspado de datos de Spotify. - -Algunos ejemplos útiles de K-means que ayudaron en la creación de esta lección son [exploración de iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), este [notebook introductorio](https://www.kaggle.com/prashant111/k-means-clustering-with-python), y este [ejemplo hipotético de ONG](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). diff --git a/5-Clustering/translations/README.hi.md b/5-Clustering/translations/README.hi.md deleted file mode 100644 index 92f308e0..00000000 --- a/5-Clustering/translations/README.hi.md +++ /dev/null @@ -1,28 +0,0 @@ -# मशीन लर्निंग के लिए क्लस्टरिंग मॉडल - -क्लस्टरिंग (Clustering) एक ऐसा मशीन लर्निंग वर्ग है जो एक प्रकार के ऑब्जेक्ट्स को पहचान कर, उन्हें साथ संगृहीत (groups) करता है। एक प्रकार के संग्रहण को एक क्लस्टर (Cluster) बुलाया जाता ह। क्लस्टरिंग की बाकि मशीन लर्निंग मॉडल से खासियत ये है की इसमें यह संग्रहण की प्रक्रिया स्वचालित है। यह सुपेर्विसेड लर्निंग से बिलकुल विपरीत है। - -## क्षेत्रीय विषय: नाइजीरियन लोगो के संगीत की पसंद को समझने के लिए क्लस्टरिंग का प्रयोग 🎧 - -नाइजीरिया के विभन्न लोगो की संगीत में विभन्न रूचि है। सॉप्टीफाय से लिए हुए डाटा ([इस आर्टिकल से प्रेरित](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)) से, आइये नाइजीरिया के प्रसिद्ध संगीत के बारे मै जानते है। यह डाटा में अनेक संगीत की 'नृत्य योग्यता' (danceability score), 'ध्वनिकता' (acousticness), 'प्रबलता' (loudness), 'वाक्पटुता' (speechiness), 'लोकप्रियता' (popularity) और 'ऊर्जा' (energy) मौजूद है। इस डेटा में पैटर्न खोजना दिलचस्प होगा। - -![एक टर्नटेबल](../images/turntable.jpg) - -> मार्सेला लास्कोस्की (Marcela Laskoski) के द्वारा ली गयी उनस्प्लैश (Unsplash) पर एक तस्वीर - -पाठों की इस श्रृंखला में, आप क्लस्टरिंग तकनीकों का उपयोग करके डेटा का विश्लेषण करने के नए तरीकों की खोज करेंगे। क्लस्टरिंग विशेष रूप से तब उपयोगी होती है जब आपके डेटासेट में लेबल की कमी होती है। यदि इसमें लेबल हैं, तो वर्गीकरण (Classification) तकनीकें जैसे कि आपने पिछले पाठों में सीखी हैं, अधिक उपयोगी हो सकती हैं। लेकिन ऐसे मामलों में जहां आप बिना लेबल वाले डेटा को समूहबद्ध करना चाहते हैं, क्लस्टरिंग पैटर्न खोजने का एक शानदार तरीका है। - -> उपयोगी निम्न-कोड (low code) उपकरण हैं जो क्लस्टरिंग मॉडल के साथ काम करने के बारे में सीखने में आपकी सहायता कर सकते हैं। इसके लिए [अझूरे ऍम एल (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) जो स्पॉटीफी से स्कैरेपेड है, उसे को कग्गले से लिया गया है। - -इस पाठ को बनाने में सहायता करने वाले उदाहरणों में यह के-मीन पाठ शामिल है: [आईरिस एक्सप्लोरेशन](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), यह [परिचयात्मक नोटबुक](https://www.kaggle.com/prashant111/k-means-clustering-with-python), और यह [काल्पनिक एनजीओ उदाहरण](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering)। diff --git a/5-Clustering/translations/README.it.md b/5-Clustering/translations/README.it.md deleted file mode 100644 index 5074ce76..00000000 --- a/5-Clustering/translations/README.it.md +++ /dev/null @@ -1,29 +0,0 @@ -# Modelli di clustering per machine learning - -Il clustering è un'attività di machine learning che cerca di trovare oggetti che si assomigliano per raggrupparli in gruppi chiamati cluster. Ciò che differenzia il clustering da altri approcci in machine learning è che le cose accadono automaticamente, infatti, è giusto dire che è l'opposto dell'apprendimento supervisionato. - -## Tema regionale: modelli di clustering per il gusto musicale di un pubblico nigeriano 🎧 - -Il pubblico eterogeneo della Nigeria ha gusti musicali diversi. Usando i dati recuperati da Spotify (ispirato da [questo articolo](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421), si dà un'occhiata a un po' di musica popolare in Nigeria. Questo insieme di dati include dati sul punteggio di "danzabilità", acustica, volume, "speechness" (un numero compreso tra zero e uno che indica la probabilità che un particolare file audio sia parlato - n.d.t.) popolarità ed energia di varie canzoni. Sarà interessante scoprire modelli in questi dati! - -![Un giradischi](../images/turntable.jpg) - -> Foto di Marcela Laskoski su Unsplash - -In questa serie di lezioni si scopriranno nuovi modi per analizzare i dati utilizzando tecniche di clustering. Il clustering è particolarmente utile quando l'insieme di dati non ha etichette. Se ha etichette, le tecniche di classificazione come quelle apprese nelle lezioni precedenti potrebbero essere più utili. Ma nei casi in cui si sta cercando di raggruppare dati senza etichetta, il clustering è un ottimo modo per scoprire i modelli. - -> Esistono utili strumenti a basso codice che possono aiutare a imparare a lavorare con i modelli di clustering. Si provi [Azure ML per questa attività](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lezioni - - -1. [Introduzione al clustering](../1-Visualize/translations/README.it.md) -2. [K-Means clustering](../2-K-Means/translations/README.it.md) - -## Crediti - -Queste lezioni sono state scritte con 🎶 da [Jen Looper](https://www.twitter.com/jenlooper) con utili recensioni di [Rishit Dagli](https://rishit_dagli) e [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). - -L'insieme di dati [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) è stato prelevato da Kaggle, a sua volta recuperato da Spotify. - -Esempi utili di K-Means che hanno aiutato nella creazione di questa lezione includono questa [esplorazione dell'iride](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), questo [notebook introduttivo](https://www.kaggle.com/prashant111/k-means-clustering-with-python) e questo [ipotetico esempio di ONG](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). diff --git a/5-Clustering/translations/README.ko.md b/5-Clustering/translations/README.ko.md deleted file mode 100644 index 1053ecc3..00000000 --- a/5-Clustering/translations/README.ko.md +++ /dev/null @@ -1,28 +0,0 @@ -# 머신러닝을 위한 Clustering 모델 - -Clustering 은 서로 비슷한 오브젝트를 찾고 clusters 라고 불린 그룹으로 묶는 머신러닝 작업입니다. Clustering 이 머신러닝의 다른 접근법과 다른 점은, 자동으로 어떤 일이 생긴다는 것이며, 사실은, supervised learning 의 반대라고 말하는 게 맞습니다. - -## 지역 토픽: 나이지리아 사람들의 음악 취향을 위한 clustering 모델 🎧 - -나이지리아의 다양한 사람들은 다양한 음악 취향이 있습니다. Spotify 에서 긁어온 데이터를 사용해서 ([this article](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421) 에서 영감받았습니다), 나이지니아에서 인기있는 음악을 알아보겠습니다. 데이터셋에 다양한 노래의 'danceability' 점수, 'acousticness', loudness, 'speechiness', 인기도와 에너지 데이터가 포함됩니다. 데이터에서 패턴을 찾는 것은 흥미로울 예정입니다! - -![A turntable](../images/turntable.jpg) - -> Photo by Marcela Laskoski on Unsplash - -이 강의의 시리즈에서, clustering 기술로 데이터를 분석하는 새로운 방식을 찾아볼 예정입니다. Clustering 은 데이터셋에 라벨이 없으면 더욱 더 유용합니다. 만약 라벨이 있다면, 이전 강의에서 배운대로 classification 기술이 더 유용할 수 있습니다. 그러나 라벨링되지 않은 데이터를 그룹으로 묶으려면, clustering 은 패턴을 발견하기 위한 좋은 방식입니다. - -> clustering 모델 작업을 배울 때 도움을 받을 수 있는 유용한 low-code 도구가 있습니다. [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott)를 시도해봅니다. - -## 강의 - -1. [clustering 소개하기](../1-Visualize/translations/README.ko.md) -2. [K-Means clustering](../2-K-Means/translations/README.ko.md) - -## 크레딧 - -These lessons were written with 🎶 by [Jen Looper](https://www.twitter.com/jenlooper) with helpful reviews by [Rishit Dagli](https://rishit_dagli) and [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). - -[Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) 데이터셋은 Spotify 스크랩해서 Kaggle 에서 가져왔습니다. - -이 강의를 만들 때 도움된 유용한 K-Means 예시는 [iris exploration](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), [introductory notebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python), 과 [hypothetical NGO example](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering)이 포함됩니다. diff --git a/5-Clustering/translations/README.ru.md b/5-Clustering/translations/README.ru.md deleted file mode 100644 index 7dcd5d9c..00000000 --- a/5-Clustering/translations/README.ru.md +++ /dev/null @@ -1,26 +0,0 @@ -# Модели кластеризации для машинного обучения - -Кластеризация - это задача машинного обучения, в которой происходит поиск похожих друг на друга объектов и объединение их в группы, называемые кластерами. Что отличает кластеризацию от других подходов в машинном обучении, так это то, что все происходит автоматически, и справедливо будет сказать, что это противоположность обучению с учителем. - -## Региональная тема: модели кластеризации для музыкальных вкусов нигерийской публики 🎧 - -Разнообразная публика Нигерии имеет самые разные музыкальные вкусы. Используя данные, полученные от Spotify (на основе [этой статьи](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421), давайте посмотрим на популярную музыку в Нигерии. Этот набор данных включает данные о "танцевальности", "акустичности", громкости, "разговорчивости", популярности и энергии различных песен. Будет интересно обнаружить закономерности в этих данных! - -![Диджейский пульт](../images/turntable.jpg) - -> Фото Марсела Ласкоски на Unsplash - -В этой серии уроков вы откроете для себя новые способы анализа данных с помощью методов кластеризации. Кластеризация особенно полезна, когда в наборе данных отсутствуют метки. Если в нем есть метки, тогда могут быть более полезными методы классификации, подобные тем, которые вы изучили на предыдущих уроках. Но в случаях, когда вы хотите сгруппировать данные без меток, кластеризация - отличный способ обнаружить закономерности. - -> Существуют инструменты, не требующие написания большого количества кода, которые могут помочь вам узнать о моделях кластеризации. Попробуйте [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. [Метод K-средних](../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) был получен из Kaggle как спаршенный со Spotify. - -Полезные примеры K-средних, которые помогли в создании этого урока, включают [исследование цветков ирисов](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), [вводный блокнот](https://www.kaggle.com/prashant111/k-means-clustering-with-python) и [пример гипотетической НПО](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). diff --git a/5-Clustering/translations/README.zh-cn.md b/5-Clustering/translations/README.zh-cn.md deleted file mode 100644 index c82808dc..00000000 --- a/5-Clustering/translations/README.zh-cn.md +++ /dev/null @@ -1,29 +0,0 @@ -# 机器学习中的聚类模型 - -聚类(clustering)是一项机器学习任务,用于寻找类似对象并将他们分成不同的组(这些组称做“聚类”(cluster))。聚类与其它机器学习方法的不同之处在于聚类是自动进行的。事实上,我们可以说它是监督学习的对立面。 - -## 本节主题: 尼日利亚观众音乐品味的聚类模型🎧 - -尼日利亚多样化的观众有着多样化的音乐品味。使用从 Spotify 上抓取的数据(受到[本文](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)的启发),让我们看看尼日利亚流行的一些音乐。这个数据集包括关于各种歌曲的舞蹈性、声学、响度、言语、流行度和活力的分数。从这些数据中发现一些模式(pattern)会是很有趣的事情! - -![A turntable](../images/turntable.jpg) - -> Marcela LaskoskiUnsplash 上的照片 - -在本系列课程中,您将发现使用聚类技术分析数据的新方法。当数据集缺少标签的时候,聚类特别有用。如果它有标签,那么分类技术(比如您在前面的课程中所学的那些)可能会更有用。但是如果要对未标记的数据进行分组,聚类是发现模式的好方法。 - -> 这里有一些有用的低代码工具可以帮助您了解如何使用聚类模型。尝试 [Azure ML for this task](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## 课程安排 - -1. [介绍聚类](../1-Visualize/translations/README.zh-cn.md) -2. [K-Means 聚类](../2-K-Means/translations/README.zh-cn.md) - -## 致谢 - -这些课程由 Jen Looper 在 🎶 上撰写,并由 [Rishit Dagli](https://rishit_dagli) 和 [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) 进行了有帮助的评审。 - -[尼日利亚歌曲数据集](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) 来自 Kaggle 抓取的 Spotify 数据。 - -一些帮助创造了这节课程的 K-Means 例子包括:[虹膜探索(iris exploration)](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering),[介绍性的笔记(introductory notebook)](https://www.kaggle.com/prashant111/k-means-clustering-with-python),和 [假设非政府组织的例子(hypothetical NGO example)](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering)。 - diff --git a/6-NLP/1-Introduction-to-NLP/translations/README.es.md b/6-NLP/1-Introduction-to-NLP/translations/README.es.md deleted file mode 100644 index 5fa8d9ea..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/README.es.md +++ /dev/null @@ -1,166 +0,0 @@ -# Introducción al procesamiento del lenguaje natural - -Esta lección cubre una breve historia y conceptos importante del *procesamiento del lenguaje natural*, un subcampo de la *ligüística computacional*. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31?loc=es) - -## Introducción - -NLP, como se conoce comúnmente, es una de las áreas más conocidas donde se ha aplicado y usado el aprendizaje automático en software de producción. - -✅ ¿Puedes pensar en software que usas cada d´ia que probablemente tenga algo de NLP embebido? ¿Qué hay de tus programas de procesamiento de palabras o aplicaciones web que usas regularmente? - -Aprenderás acerca de: - -- **La idea de los idiomas**. Cómo se desarrollaron los idiomas y cuáles han sido las mayores áreas de estudio. -- **Definiciones y conceptos**. También aprenderás definiciones y conceptos acerca de cómo procesan texto las computadoras, incluyendo análisis, gramática e identificación de sustantivos y verbos. Hay algunas tareas de codificación en esta lección, y se presentan varios conceptos importantes que aprenderás a codificar posteriormente en las próximas lecciones. - -## Lingüística computacional - -La lingüística computacional es una área de la investigación y desarrollo que por varias décadas ha estudiado cómo pueden trabajar las computadoras e incluso entender, traducir y comunicar con idiomas. El procesamiento del lenguaje natural es un campo relacionado que se enfoca en cómo las computadoras pueden procesar el lenguaje 'natural' o humano. - -### Ejemplo - dictado telefónico - -Si alguna vez has dictado a tu teléfono en lugar de escribir o hacerle una pregunta al asistente virtual, tu voz se convirtió a texto y luego fue procesada o *parseada* desde el idioma que hablaste. Las palabras clave detectadas fueron procesadas en un formato que el teléfono o asistente pueda entender y actuar. - -![Comprensión](../images/comprehension.png) -> ¡La comprensión lingüística real es difícil! Imagen de [Jen Looper](https://twitter.com/jenlooper) - -### ¿Cómo es posible esta tecnología? - -Es posible porque alguien escribió un programa de computadora que lo hace. Hace algunas décadas, algunos escritores de ciencia ficción predijeron que la gente hablaría regularmente con sus computadoras, y las computadoras siempre entenderían exactamente lo que éstas quieren. Tristemente, resultó ser un problema más complejo del que se imaginó, y aunque es un problema mejor comprendido ahora, hay desafíos significativos en lograr un 'perfecto' procesamiento del lenguaje natural cuando se trata de entender el significado de una oración. Este es un problema particularmente difícil cuando se trata de entender el humor o detectar las emociones tal como el sarcasmo en una oración. - -En este punto, recordarás las clases escolares donde el profesor cubría las partes de la gramática en una oración. En algunos países, los estudiantes aprenden gramática y lingüística como una materia dedicada, pero en varios casos, estos temas se incluyen como parte del aprendizaje de un idioma: ya sea tu primer idioma en la escuela primaria (aprendiendo a leer y escribir) y quizá como un segundo idioma en la escuela secundaria o la preparatoria. ¡No te preocupes si no eres un experto diferenciando sustantivos de verbos o adverbios de adjetivos! - -Si tienes problemas diferenciando entre *presente simple* y *presente continuo*, no estás solo. Esto es un algo desafiante para mucha gente, incluso hablantes nativos de un idioma. La buena noticia es que las computadoras son muy buenas aplicando reglas formales, y aprenderás a escribir código que puede *parsear* una oración tan bien como un humano. El mayor desafío que examinarás más adelante es el entender el *significado* y *sentimiento* de una oración. - -## Prerrequisitos - -Para esta lección, el prerrequisito principal es ser capaz de leer y comprender el idioma de esta lección. No hay problemas matemáticos ni ecuaciones a resolver. Aunque el actor original escribió esta lección en Inglés, también está traducida a otros idiomas, por lo que podrías leer la traducción. Hay ejemplos donde se usan un número distinto de idiomas (para comparar las distintas reglas gramaticales de los distintos idiomas). Estas *no* son traducidas, pero su texto explicativo sí, así que el significado debería ser claro. - -Para las tareas de programación, usarás Python y los ejemplos usan Python 3.8. - -En esta sección, necesitarás y usarás: - -- **Comprensión de Python 3**. Comprensión del lenguaje de programación Python 3, esta lección usa entradas, ciclos, lectura de archivos, arreglos. -- **Visual Studio Code + extensión**. Usaremos Visual Studio Code y su extensión para Python. También puedes usar algún IDE para Python de tu elección. -- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) es una biblioteca de procesamiento de texto simplificada para Python. Sigue las instrucciones en el sitio de TextBlob para instalarla en tu sistema (también instala corpora, como se muestra abajo): - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 Consejo: Puedes ejecutar Python directamente en los ambientes de VS Code. Revisa la [documentación](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) para mayor información. - -## Hablando con las máquinas - -La historia de intentar hacer que las computadoras comprendan el lenguaje humano se remota a décadas atrás, y uno de los primeros científicos en considerar el procesamiento del lenguaje natural fue *Alan Turing*. - -### La 'prueba de Turing' - -Cuando Turing estaba investigando *la inteligencia artificial* en los años 1950, considero que si una prueba conversacional pudiera ser proporcionada a un humano y una computadora (a través de correspondencia mecanografiada) donde el humano en la conversación no estuviese seguro si estuviesen conversando con otro humano o una computadora. - -Si, después de cierto tiempo de conversación, el humano no pudiese determinar si las respuestas provinieron de una computadora o no, entonces pudiese decirse que la computadora estaba *pensando*? - -### La inspiración - 'el juego de imitación' - -La idea para este juego provino de una juego de fiesta llamado *El juego de imitación* donde un interrogador está solo en una habitación y tiene como objetivo determinar cuál de las dos personas (en otra habitación) son hombres y mujeres, respectivamente. El interrogador puede enviar notas, y debe intentar pensar en preguntas donde las respuestas escritas revelen el género de la persona misteriosa. Desde luego, los jugadores en la otra habitación intentan engañar al interrogador al responder a sus preguntas de tal forma que engañen o confundan al interrogador, pero dando la apariencia de responder honestamente. - -### Desarrollando a Eliza - -En los años 1960s un científico del MIT llamado *Joseph Weizenbaum* desarrolló a [*Eliza*](https://wikipedia.org/wiki/ELIZA), un 'terapeuta' de computadora que realiza preguntas a los humanos y da la sensación de entender sus respuestas. Sin embargo, mientras Eliza podía analizar una oración e identificar ciertas construcciones gramaticales y palabras clase para así darles respuestas razonables, no debería decirse *entender* la oración. Si a Eliza le fuera presentada una oración con el siguiente formato "**I am** sad" podría reorganizar y sustituir palabras en la oración para formar la respuesta "How long have **you been** sad". - -Esto daba la impresión que Eliza entendió la oración y le fue hecha una pregunta de seguimiento, aunque en realidad, cambió el tiempo verbal y agregó algunas palabras. Si Eliza no podía identificar una palabra clave para la cual tenía una respuesta, en su lugar daría una respuesta aleatoria que pudiese ser aplicable a distintas oraciones. Eliza podía ser engañada fácilmente, por ejemplo si un usuario escribió "**You are** a bicycle" podría responder con "How long have **I been** a bicycle?", en lugar de una respuesta más elaborada. - -[![Chateando con Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chateando con Eliza") - -> 🎥 Da clic en la imagen de arriba para ver el video del programa original ELIZA - -> Nota: Puedes leer la descripción original de [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publicado en 1966 si tienes una cuenta ACM, lee acerca de Eliza en [wikipedia](https://wikipedia.org/wiki/ELIZA) - -## Ejercicio - Programar un bot conversacional básico - -Un bot conversacional, como Eliza, es una programa que obtiene entradas del usuario y parece entender y responder inteligentemente. A diferencia de Eliza, nuestro bot no tendrá varias reglas dándole la apariencia de tener una conversación inteligente. En su lugar, nuestro bot tendrá sólo una habilidad, mantener la conversación con respuestas aleatorias que funcionen en casi cualquier conversación trivial. - -### El plan - - -Tus pasos para construir un bot conversacional: - -1. Imprime instrucciones asesorando al usuario cómo interactuar con el bot -2. Empieza un ciclo - 1. Acepta la entrada del usuario - 2. Si el usuario pidió salir, entonces sal - 3. Procesa la entrada del usuario y determina la respuesta (en este caso, la respuesta es una elección aleatoria de una lista de posibles respuestas genéricas) - 4. Imprime la respuesta -3. Vuelve al paso 2 - -### Construye el bot - -Ahora creemos el bot. Iniciaremos definiendo algunas frases. - -1. Crea este bot tú mismo en Python con las siguientes respuestas aleatorias: - - ```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?"] - ``` - - Aquí tienes unas salidas de ejemplo para guiarte (la entrada del usuario está en las líneas que empiezan con `>`): - - ```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! - ``` - - [Aquí](../solution/bot.py) tienes una posible solución a la tarea. - - ✅ Detente y considera - - 1. ¿Crees que las respuestas aleatorias podrías 'engañar' a alguien haciéndole pensar que el bot realmente los entendió? - 2. ¿Qué características necesitaría el bot para ser más efectivo? - 3. Si el bot pudiera 'entender' realmente el significado de una oración, ¿también necesitaría 'recordar' el significado de oraciones anteriores en una conversación? - ---- - -## 🚀Desafío - -Elige uno de los elementos "Detente y considera" de arriba y trata de implementarlos en código o escribe una solución en papel usando pseudo-código. - -En la siguiente lección, aprenderás acerca de otros enfoques de cómo analizar el lenguaje natural y aprendizaje automático. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32?loc=es) - -## Revisión y autoestudio - -Da un vistazo a las referencias abajo para más oportunidades de lectura. - -### Referencias - -1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . -2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. - -## Asignación - -[Buscar un bot](assignment.es.md) diff --git a/6-NLP/1-Introduction-to-NLP/translations/README.it.md b/6-NLP/1-Introduction-to-NLP/translations/README.it.md deleted file mode 100644 index 1104da7e..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/README.it.md +++ /dev/null @@ -1,165 +0,0 @@ -# Introduzione all'elaborazione del linguaggio naturale - -Questa lezione copre una breve storia e concetti importanti dell' *elaborazione del linguaggio naturale*, un sottocampo della *linguistica computazionale*. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/?loc=it) - -## Introduzione - -NLP, come è comunemente conosciuto, è una delle aree più note in cui machine learning è stato applicato e utilizzato nei software di produzione. - -✅ Si riesce a pensare a un software che si usa tutti i giorni che probabilmente ha NLP incorporato? Che dire dei programmi di elaborazione testi o le app mobili che si usano regolarmente? - -Si imparerà a conoscere: - -- **L'idea delle lingue**. Come si sono sviluppate le lingue e quali sono state le principali aree di studio. -- **Definizione e concetti**. Si impareranno anche definizioni e concetti su come i computer elaborano il testo, inclusa l'analisi, la grammatica e l'identificazione di nomi e verbi. Ci sono alcune attività di codifica in questa lezione e vengono introdotti diversi concetti importanti che si imparerà a codificare più avanti nelle lezioni successive. - -## Linguistica computazionale - -La linguistica computazionale è un'area di ricerca e sviluppo che da molti decenni studia come i computer possono lavorare e persino capire, tradurre e comunicare con le lingue. L'elaborazione del linguaggio naturale (NLP) è un campo correlato incentrato su come i computer possono elaborare le lingue "naturali" o umane. - -### Esempio: dettatura telefonica - -Se si è mai dettato al telefono invece di digitare o posto una domanda a un assistente virtuale, il proprio discorso è stato convertito in formato testuale e quindi elaborato o *analizzato* dalla lingua con la quale si è parlato. Le parole chiave rilevate sono state quindi elaborate in un formato che il telefono o l'assistente possono comprendere e utilizzare. - -![comprensione](../images/comprehension.png) -> La vera comprensione linguistica è difficile! Immagine di [Jen Looper](https://twitter.com/jenlooper) - -### Come è resa possibile questa tecnologia? - -Questo è possibile perché qualcuno ha scritto un programma per computer per farlo. Alcuni decenni fa, alcuni scrittori di fantascienza prevedevano che le persone avrebbero parlato principalmente con i loro computer e che i computer avrebbero sempre capito esattamente cosa intendevano. Purtroppo, si è rivelato essere un problema più difficile di quanto molti immaginavano, e sebbene sia un problema molto meglio compreso oggi, ci sono sfide significative nel raggiungere un'elaborazione del linguaggio naturale "perfetta" quando si tratta di comprendere il significato di una frase. Questo è un problema particolarmente difficile quando si tratta di comprendere l'umore o rilevare emozioni come il sarcasmo in una frase. - -A questo punto, si potrebbero ricordare le lezioni scolastiche in cui l'insegnante ha coperto le parti della grammatica in una frase. In alcuni paesi, agli studenti viene insegnata la grammatica e la linguistica come materie dedicate, ma in molti questi argomenti sono inclusi nell'apprendimento di una lingua: o la prima lingua nella scuola primaria (imparare a leggere e scrivere) e forse una seconda lingua in post-primario o liceo. Non occorre preoccuparsi se non si è esperti nel distinguere i nomi dai verbi o gli avverbi dagli aggettivi! - -Se si fa fatica a comprendere la differenza tra il *presente semplice* e il *presente progressivo*, non si è soli. Questa è una cosa impegnativa per molte persone, anche madrelingua di una lingua. La buona notizia è che i computer sono davvero bravi ad applicare regole formali e si imparerà a scrivere codice in grado di *analizzare* una frase così come un essere umano. La sfida più grande che si esaminerà in seguito è capire il *significato* e il *sentimento* di una frase. - -## Prerequisiti - -Per questa lezione, il prerequisito principale è essere in grado di leggere e comprendere la lingua di questa lezione. Non ci sono problemi di matematica o equazioni da risolvere. Sebbene l'autore originale abbia scritto questa lezione in inglese, è anche tradotta in altre lingue, quindi si potrebbe leggere una traduzione. Ci sono esempi in cui vengono utilizzati un numero di lingue diverse (per confrontare le diverse regole grammaticali di lingue diverse). Questi *non* sono tradotti, ma il testo esplicativo lo è, quindi il significato dovrebbe essere chiaro. - -Per le attività di codifica, si utilizzerà Python e gli esempi utilizzano Python 3.8. - -In questa sezione servirà e si utilizzerà: - -- **Comprensione del linguaggio Python 3**. Questa lezione utilizza input, loop, lettura di file, array. -- **Visual Studio Code + estensione**. Si userà Visual Studio Code e la sua estensione Python. Si può anche usare un IDE Python a propria scelta. -- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) è una libreria di elaborazione del testo semplificata per Python. Seguire le istruzioni sul sito TextBlob per installarlo sul proprio sistema (installare anche i corpora, come mostrato di seguito): - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 Suggerimento: si può eseguire Python direttamente negli ambienti VS Code. Controllare la [documentazione](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) per ulteriori informazioni. - -## Parlare con le macchine - -La storia del tentativo di far capire ai computer il linguaggio umano risale a decenni fa e uno dei primi scienziati a considerare l'elaborazione del linguaggio naturale è stato *Alan Turing*. - -### Il Test di Turing. - -Quando Turing stava facendo ricerche sull'*intelligenza artificiale* negli anni '50, considerò se un test di conversazione potesse essere somministrato a un essere umano e a un computer (tramite corrispondenza digitata) in cui l'essere umano nella conversazione non era sicuro se stesse conversando con un altro umano o un computer. - -Se, dopo una certa durata di conversazione, l'essere umano non è riuscito a determinare se le risposte provenivano da un computer o meno, allora si potrebbe dire che il computer *sta pensando*? - -### L'ispirazione - 'il gioco dell'imitazione' - -L'idea è nata da un gioco di società chiamato *The Imitation Game* in cui un interrogatore è da solo in una stanza e ha il compito di determinare quale delle due persone (in un'altra stanza) sono rispettivamente maschio e femmina. L'interrogatore può inviare note e deve cercare di pensare a domande in cui le risposte scritte rivelano il sesso della persona misteriosa. Ovviamente, i giocatori nell'altra stanza stanno cercando di ingannare l'interrogatore rispondendo alle domande in modo tale da fuorviare o confondere l'interrogatore, dando anche l'impressione di rispondere onestamente. - -### Lo sviluppo di Eliza - -Negli anni '60 uno scienziato del MIT chiamato *Joseph* Weizenbaum sviluppò [*Eliza*](https:/wikipedia.org/wiki/ELIZA), un "terapista" informatico che poneva domande a un umano e dava l'impressione di comprendere le loro risposte. Tuttavia, mentre Eliza poteva analizzare una frase e identificare alcuni costrutti grammaticali e parole chiave in modo da dare una risposta ragionevole, non si poteva dire *che capisse* la frase. Se a Eliza viene presentata una frase che segue il formato "**Sono** _triste_", potrebbe riorganizzare e sostituire le parole nella frase per formare la risposta "Da quanto tempo **sei** _triste_". - -Questo dava l'impressione che Eliza avesse capito la frase e stesse facendo una domanda successiva, mentre in realtà stava cambiando il tempo e aggiungendo alcune parole. Se Eliza non fosse stata in grado di identificare una parola chiave per la quale aveva una risposta, avrebbe dato invece una risposta casuale che potrebbe essere applicabile a molte frasi diverse. Eliza avrebbe potuto essere facilmente ingannata, ad esempio se un utente avesse scritto "**Sei** una _bicicletta_" avrebbe potuto rispondere con "Da quanto tempo **sono** una _bicicletta_?", invece di una risposta più ragionata. - -[![Chiacchierare conEliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco " Chiaccherare con Eliza") - -> 🎥 Fare clic sull'immagine sopra per un video sul programma ELIZA originale - -> Nota: si può leggere la descrizione originale di [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) pubblicata nel 1966 se si dispone di un account ACM. In alternativa, leggere di Eliza su [wikipedia](https://it.wikipedia.org/wiki/ELIZA_(chatterbot)) - -## Esercizio: codificare un bot conversazionale di base - -Un bot conversazionale, come Eliza, è un programma che sollecita l'input dell'utente e sembra capire e rispondere in modo intelligente. A differenza di Eliza, questo bot non avrà diverse regole che gli danno l'impressione di avere una conversazione intelligente. Invece, il bot avrà una sola capacità, per mantenere viva la conversazione con risposte casuali che potrebbero funzionare in quasi tutte le conversazioni banali. - -### Il piano - -I passaggi durante la creazione di un bot conversazionale: - -1. Stampare le istruzioni che consigliano all'utente come interagire con il bot -2. Iniziare un ciclo - 1. Accettare l'input dell'utente - 2. Se l'utente ha chiesto di uscire, allora si esce - 3. Elaborare l'input dell'utente e determinare la risposta (in questo caso, la risposta è una scelta casuale da un elenco di possibili risposte generiche) - 4. Stampare la risposta -3. Riprendere il ciclo dal passaggio 2 - -### Costruire il bot - -Si crea il bot. Si inizia definendo alcune frasi. - -1. Creare questo bot in Python con le seguenti risposte casuali: - - ```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?"] - ``` - - Ecco un esempio di output come guida (l'input dell'utente è sulle righe che iniziano con `>`): - - ```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! - ``` - - Una possibile soluzione al compito è [qui](../solution/bot.py) - - ✅ Fermarsi e riflettere - - 1. Si ritiene che le risposte casuali "ingannerebbero" qualcuno facendogli pensare che il bot le abbia effettivamente capite? - 2. Di quali caratteristiche avrebbe bisogno il bot per essere più efficace? - 3. Se un bot potesse davvero "capire" il significato di una frase, avrebbe bisogno di "ricordare" anche il significato delle frasi precedenti in una conversazione? - ---- - -## 🚀 Sfida - -Scegliere uno degli elementi "fermarsi e riflettere" qui sopra e provare a implementarli nel codice o scrivere una soluzione su carta usando pseudocodice. - -Nella prossima lezione si impareranno una serie di altri approcci all'analisi del linguaggio naturale e dell'machine learning. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/?loc=it) - -## Revisione e Auto Apprendimento - -Dare un'occhiata ai riferimenti di seguito come ulteriori opportunità di lettura. - -### Bibliografia - -1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Edizione primavera 2020), Edward N. Zalta (a cura di), URL = . -2. Università di Princeton "About WordNet". [WordNet](https://wordnet.princeton.edu/). Princeton University 2010. - -## Compito - -[Cercare un bot](assignment.it.md) diff --git a/6-NLP/1-Introduction-to-NLP/translations/README.ko.md b/6-NLP/1-Introduction-to-NLP/translations/README.ko.md deleted file mode 100644 index 178117ff..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/README.ko.md +++ /dev/null @@ -1,165 +0,0 @@ -# Natural language processing 소개하기 - -이 강의애서 *computational linguistics* 하위인, *natural language processing*의 간단한 역사와 중요 컨셉을 다룹니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) - -## 소개 - -일반적으로 알고있는, NLP는, 머신러닝이 프로덕션 소프트웨어에 적용되어 사용하는 잘-알려진 영역 중 하나입니다. - -✅ 항상 사용하는 소프트웨어에서 NLP가 들어갈 수 있는지 생각할 수 있나요? 규칙적으로 사용하는 워드 프로그램이나 모바일 앱은 어떤가요? - -해당 내용을 배우게 됩니다: - -- **언어의 아이디어**. 언어가 어떻게 발전했고 어떤 주요 연구 영역인가요? -- **정의와 컨셉**. 또한 파싱, 문법, 그리고 명사와 동사를 식별하는 것을 합쳐서, 컴퓨터가 텍스트를 처리하는 방식에 대한 정의와 개념을 배우게 됩니다. 이 강의에서 약간의 코딩 작업을 하며, 다음 강의 뒤에 배울 코드에서 중요한 개념을 소개합니다. - -## 전산 언어학 - -전산 언어학은 컴퓨터가 언어와 합쳐서 이해, 번역, 그리고 커뮤니케이션 방식을 연구하는 수십 년을 넘어 연구 개발하고 있는 영역입니다. natural language processing (NLP)은 컴퓨터가 인간 언어를, 'natural'하게, 처리할 수 있는 것에 초점을 맞춘 관련 필드입니다. - -### 예시 - 전화번호 받아쓰기 - -만약 핸드폰에 타이핑하거나 가상 어시스턴트에 질문을 했다면, 음성은 텍스트 형태로 변환되고 언급한 언어에서 처리되거나 *파싱*됩니다. 감지된 키워드는 핸드폰이나 어시스턴트가 이해하고 행동할 수 있는 포맷으로 처리됩니다. - -![comprehension](../images/comprehension.png) -> Real linguistic comprehension is hard! Image by [Jen Looper](https://twitter.com/jenlooper) - -### 이 기술은 어떻게 만들어지나요? - -누군가 컴퓨터 프로그램을 작성했기 때문에 가능합니다. 수십 년 전에, 과학소설 작가는 사람들이 컴퓨터와 이야기하며, 컴퓨터가 그 의미를 항상 정확히 이해할 것이라고 예측했습니다. 슬프게, 많은 사람들이 상상했던 내용보다 더 어려운 문제로 밝혀졌고, 이제 더 잘 이해되는 문제이지만, 문장 의미를 이해함에 있어서 'perfect'한 natural language processing을 성공하기에는 상당히 어렵습니다. 유머를 이해하거나 문장에서 풍자처럼 감정을 알아차릴 때 특히 어렵습니다. - -이 포인트에서, 학교 수업에서 선생님이 문장의 문법 파트를 가르쳤던 기억을 회상할 수 있습니다. 일부 국가에서는, 학생에게 문법과 언어학을 전공 과목으로 가르치지만, 많은 곳에서, 이 주제를 언어 학습의 일부로 합칩니다: 초등학교에서 모국어(읽고 쓰는 방식 배우기)와 중학교나, 고등학교에서 제2 외국어를 배울 수 있습니다. 만약 명사와 형용사 또는 부사를 구분하는 전문가가 아니라고 해도 걱정하지 맙시다! - -만약 *simple present*와 *present progressive* 사이에서 몸부림치면, 혼자가 아닙니다. 모국어를 언어로 쓰는, 많은 사람들에게 도전입니다. 좋은 소식은 컴퓨터가 형식적인 규칙을 적용하는 것은 매우 좋고, 사람말고 문장을 *parse*할 수 있는 코드로 작성하는 방식을 배우게 됩니다. 나중에 할 큰 도전은 문장의 *meaning*과, *sentiment*를 이해하는 것입니다. - -## 전제 조건 - -이 강의에서, 주요 전제 조건은 이 강의의 언어를 읽고 이해해야 합니다. 풀 수 있는 수학 문제나 방정식이 아닙니다. 원작자가 영어로 이 강의를 작성했지만, 다른 언어로 번역되었으므로, 번역본으로 읽을 수 있게 되었습니다. 다른 언어로 사용된 (다른 언어의 다른 문법을 비교하는) 예시가 있습니다. 번역을 *하지 않았어도*, 설명 텍스트는, 의미가 명확해야 합니다. - -코딩 작업이면, 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 사이트 설명을 따라서 시스템에 설치합니다 (보이는 것처럼, corpora도 설치합니다): - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 팁: VS Code 환경에서 Python을 바로 실행할 수 있습니다. [docs](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott)으로 정보를 더 확인합니다. - -## 기계와 대화하기 - -컴퓨터가 인간 언어를 이해하려 시도한 역사는 수십 년전으로, natural language processing을 고려한 초창기 사이언티스트 중 한 사람이 *Alan Turing*입니다. - -### 'Turing test' - -Turing이 1950년에 *artificial intelligence*를 연구하고 있을 때, 만약 대화하고 있는 사람이 다른 사람이나 컴퓨터와 대화하고 있는지 확신할 수 없다면, 사람과 컴퓨터의 대화를 (타이핑된 통신으로) 테스트할 수 있는지 고려했습니다. - -만약, 일정 대화 이후에, 사람이 컴퓨터에서 나온 대답인지 결정할 수 없다면, 컴퓨터가 *thinking*하고 있다고 말할 수 있나요? - -### 영감 - 'the imitation game' - -*The Imitation Game*으로 불리는 파티 게임에서 유래된 아이디어로 질문자가 방에 혼자있고 (다른 방의) 두 사람 중 남성과 여성을 결정할 일을 맡게 됩니다. 질문하는 사람은 노트를 보낼 수 있으며, 성별을 알 수 없는 사람이 작성해서 보낼 답변을 생각하고 질문해야 합니다. 당연하게, 다른 방에 있는 사람도 잘 못 이끌거나 혼동하는 방식으로 답변하며, 정직하게 대답해주는 모습을 보여 질문하는 사람을 속이려고 합니다. - -### Eliza 개발 - -1960년에 *Joseph Weizenbaum*으로 불린 MIT 사이언티스트는, 사람의 질문을 답변하고 답변을 이해하는 모습을 주는 컴퓨터 'therapist' [*Eliza*](https://wikipedia.org/wiki/ELIZA)를 개발했습니다. 하지만, Eliza는 문장을 파싱하고 특정 문법 구조와 키워드를 식별하여 이유있는 답변을 준다고 할 수 있지만, 문장을 *understand*한다고 말할 수 없습니다. 만약 Eliza가 "**I am** sad" 포맷과 유사한 문장을 제시받으면 문장에서 단어를 재배열하고 대치해서 "How long have **you been** sad" 형태로 응답할 수 있습니다. - -Eliza가 문장을 이해하고 다음 질문을 대답하는 것처럼 인상을 줬지만, 실제로는, 시제를 바꾸고 일부 단어를 추가했을 뿐입니다. 만약 Eliza가 응답할 키워드를 식별하지 못하는 경우, 여러 다른 문장에 적용할 수 있는 랜덤 응답으로 대신합니다. 만약 사용자가 "**You are** a bicycle"라고 작성하면 더 이유있는 응답 대신에, "How long have **I been** a bicycle?"처럼 답변하므로, Eliza는 쉽게 속을 수 있습니다. - -[![Chatting with Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chatting with Eliza") - -> 🎥 original ELIZA program에 대한 영상보려면 이미지 클릭 - -> 노트: ACM 계정을 가지고 있다면 출판된 [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) 원본 설명을 읽을 수 있습니다. 대신, [wikipedia](https://wikipedia.org/wiki/ELIZA)에서 Eliza에 대한 내용을 읽을 수도 있습니다. - -## 연습 - 기초 대화 봇 코드 작성하기 - -Eliza와 같은, 대화 봇은, 사용자 입력을 유도해서 지능적으로 이해하고 답변하는 프로그램입니다. 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! - ``` - - 작업에 맞는 하나의 솔루션은 [here](../solution/bot.py) 입니다 - - ✅ 잠시 멈추고 생각합니다 - - 1. 랜덤 응답이 실제로 누군가를 이해했다고 생각하게 'trick'을 쓴다고 생각하나요? - 2. 봇이 더 효과있으려면 어떤 기능을 해야 될까요? - 3. 만약 봇이 문장의 의미를 정말 'understand' 했다면, 대화에서 이전 문장의 의미도 'remember'할 필요가 있을까요? - ---- - -## 🚀 도전 - -"잠시 멈추고 생각합니다" 항목 중 하나를 골라서 코드를 구현하거나 의사 코드로 종이에 솔루션을 작성합니다. - -다음 강의에서, natural language와 머신러닝을 분석하는 여러 다른 접근 방식에 대해 배울 예정입니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) - -## 검토 & 자기주도 학습 - -더 읽을 수 있는 틈에 아래 레퍼런스를 찾아봅니다. - -### 레퍼런스 - -1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . -2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. - -## 과제 - -[Search for a bot](../assignment.md) diff --git a/6-NLP/1-Introduction-to-NLP/translations/README.pt-br.md b/6-NLP/1-Introduction-to-NLP/translations/README.pt-br.md deleted file mode 100644 index 801e3787..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/README.pt-br.md +++ /dev/null @@ -1,173 +0,0 @@ -# Introdução ao Processamento de Linguagem Natural - -Esta aula cobre uma breve história, bem como conceitos importantes do *processamento de linguagem natural*, uma subárea da *Linguística computacional*. - -## [Teste pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31?loc=ptbr) - -## Introdução - -O Processamento de Linguagem Natural (PLN) ou, em inglês, Natural Language Processing (NLP), como é geralmente conhecido, é um dos campos mais conhecidos onde o aprendizado de máquina (machine learning) tem sido aplicado e usado na produção de software. - -✅ Você consegue pensar em algum software que você usa todo dia e que provavelmente tem algum PLN integrado? E em programas de processamento de palavras ou aplicativos mobile que você usa com frequência? - -Você vai aprender sobre: - -- **A noção de linguagens**. Como as linguagens se desenvolveram e quais são as principais áreas de estudo. -- **Definição e conceitos**. Você também vai aprender definições e conceitos relacionados com o modo como os computadores processam texto, incluindo análise sintática (parsing), gramática e identificação de substantivos e verbos. Existem algumas tarefas de programação nesta aula, juntamente com a introdução de muitos conceitos importantes, os quais você irá aprender a programar nas próximas aulas. - -## Linguística computacional - -Linguística computacional é uma área de pesquisa e desenvolvimento que vem aumentando ao longo das décadas e estuda como computadores podem trabalhar e comunicar com linguagens, traduzir, e até entendê-las. O processamento de linguagem natural (PLN) é um campo relacionado à linguística computacional que foca em como computadores podem processar linguagens 'naturais' ou humanas. - -### Exemplo - transcrição de voz no celular - -Se você já usou o recurso de transcrição de voz ao invés de escrever ou fez uma pergunta para uma assistente virtual, sua fala foi convertida para o formato textual e então ela foi processada ou *parseada* (teve a sintaxe analisada). As palavras-chave detectadas então são processadas em um formato que o celular ou a assistente possa entender e agir. - -![compreensão](../images/comprehension.png) -> Compreensão de linguagem de verdade é difícil! Imagem por [Jen Looper](https://twitter.com/jenlooper) - -> Tradução: - > Mulher: Mas o que você quer? Frango? Peixe? Patê? - > Gato: Miau - -### Como essa tecnologia é possível? - -Ela é possível porque alguém escreveu um programa de computador para fazer isto. Algumas décadas atrás, escritores de ficção científica previram que as pessoas iriam falar majoritariamente com seus computadores, e que computadores sempre conseguiriam entender exatamente o que elas queriam dizer. Infelizmente, isto mostrou-se mais difícil do que muitos imaginavam, e apesar de hoje ser um problema muito melhor compreendido, ainda existem desafios significativos para alcançar o processamento de linguagem natural 'perfeito' no que tange a entender o significado de uma frase/oração. Este é um problema particularmente difícil quando é preciso entender humor ou detectar emoções como sarcasmo em uma frase. - -Agora, você pode estar se lembrando das aulas da escola onde o professor fala sobre a gramática de uma oração. Em alguns países, estudantes aprendem gramática e linguística em uma matéria dedicada, mas, em muitos, estes tópicos são incluídos como parte do aprendizado da linguagem: ou sua primeira linguagem na pré-escola (aprendendo a ler e escrever) e talvez a segunda linguagem no ensino fundamental ou médio. Contudo, não se preocupe se você não é experiente em diferenciar substantivos de verbos ou advérbios de adjetivos! - -Se você tem dificuldade com a diferença entre o *presente do indicativo* e o *gerúndio*, você não está sozinho(a). Esta é uma tarefa desafiadora para muitas pessoas, mesmo falantes nativos de uma língua. A boa notícia é que computadores são ótimos em aplicar regras formais, e você vai aprender a escrever código que pode *parsear* (analisar a sintaxe) uma frase tão bem quanto um humano. A maior dificuldade que você irá encontrar é entender o *significado* e o *sentimento* de uma frase. - -## Pré-requisitos - -Para esta aula, o pré-requisito principal é conseguir ler e entender a linguagem. Não existem equações ou problemas da matemática para resolver. Enquanto o autor original escreveu esta aula em inglês, ela também será traduzida em outras línguas (como em português!), então você pode estar lendo uma tradução. Existem exemplos onde diferentes linguagens são usadas (como comparar regras gramaticais entre diferentes linguagens). Elas *não* são traduzidas, mas o texto que as explica sim, então o significado fica claro. - -Para as tarefas de programação, você irá usar Python. Os exemplos a seguir usam Python 3.8. - -Nesta seção, você vai precisar: - -- **Entender Python 3**. Entender a linguagem Python 3, esta aula usa input (entrada), loops (iteração), leitura de arquivos, arrays (vetores). -- **Visual Studio Code + extensão**. Nós iremos utilizar o Visual Studio Code e sua extensão de Python, mas você pode usar a IDE Python de sua preferência. -- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) é uma biblioteca de processamento de texto simplificada para Python. Siga as instruções no site do TextBlob para instalá-lo no seu sistema (instale o corpora também, como mostrado abaixo): - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 Dica: Você pode rodar Python diretamente nos ambientes (environments) do VS Code. Veja a [documentação](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) para mais informações. - -## Falando com máquinas - -A história de tentar fazer computadores entender a linguagem humana é de décadas atrás, e um dos primeiros cientistas a considerar o processamento de linguagem natural foi *Alan Turing*. - -### O 'Teste de Turing' - -Quando Turing estava pesquisando *inteligência artificial* na década de 1950, ele imaginou um caso onde um teste de conversação digitada que poderia ser dado para um humano e um computador, onde o humano na conversa não conseguiria ter certeza de que ele estava falando com outro humano ou um computador. - -Se o humano não pudesse determinar se as respostas foram dadas por um computador ou não depois de um certo período de conversa, poderíamos dizer que computador está *pensando*? - -### A inspiração - 'o jogo da imitação' - -A ideia do teste veio de um jogo de festa chamado *O Jogo da Imitação* (The Imitation Game), onde um interrogador está sozinho em um cômodo e tem a tarefa de determinar qual de duas pessoas (em outro cômodo) é o homem e qual é a mulher. O interrogador pode mandar notas, e precisa tentar pensar em questões onde as respostas escritas revelam o gênero da pessoa misteriosa. Obviamente, os jogadores na outra sala estão tentando enganar o interrogador ao responder questões de forma confusa/enganosa, ao mesmo tempo em que aparentam dar respostas sinceras. - -### Desenvolvendo Eliza - -Nos anos 1960, um cientista do MIT chamado *Joseph Weizenbaum* desenvolveu [*Eliza*](https://wikipedia.org/wiki/ELIZA), um computador 'terapeuta' que fazia perguntas ao humano e aparentava entender suas respostas. No entanto, enquanto Eliza conseguia parsear e identificar certas construções gramaticais e palavras-chave para conseguir responder de forma razoável, não podemos dizer que ele conseguia *entender* a frase. Se Eliza fosse apresentado com uma sequência de sentenças seguindo o formato "**Eu estou** triste" ele podia rearranjar e substituir palavras na sentença para formar a resposta "Há quanto tempo **você está** triste?". - -Isso dá a impressão de que Eliza entendeu a afirmação e fez uma pergunta subsequente, enquanto na realidade, o computador mudou a conjugação verbal e adicionou algumas palavras. Se Eliza não conseguisse identificar uma palavra-chave que já tem uma resposta pronta, ele daria uma resposta aleatória que pode ser aplicada em diversas afirmações do usuário. Eliza podia ser facilmente enganado, por exemplo, quando um usuário escrevia "**Você é** uma bicicleta", a resposta dada poderia ser "Há quanto tempo **eu sou** uma bicicleta?", ao invés de uma resposta mais razoável. - -[![Conversando com Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chatting with Eliza") - -> 🎥 Clique na imagem abaixo para ver um video sobre o programa original ELIZA - -> Nota: Você pode ler a descrição original de [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publicada em 1966 se você tem uma conta ACM. Alternativamente, leia sobre Eliza na [wikipedia](https://wikipedia.org/wiki/ELIZA) - -## Exercício - programando um bot de conversação básico - -Um bot de conversação, como Eliza, é um programa que obtém o input do usuário e parece entender e responder de forma inteligente. Diferentemente de Eliza, nosso bot não vai ter diversas regras dando a aparência de uma conversação inteligente. Ao invés disso, nosso bot tem uma única habilidade, a de continuar a conversação com respostas aleatórias que podem funcionar em qualquer conversação trivial. - -### O plano - -Seus passos quando estiver construindo um bot de conversação: - -1. Imprima instruções indicando como o usuário pode interagir com o bot -2. Comece um loop (laço) - 1. Aceite o input do usuário - 2. Se o usuário pedir para sair, então sair - 3. Processar o input do usuário e determinar resposta (neste caso, a resposta é uma escolha aleatória de uma lista de possíveis respostas genéricas) - 4. Imprima a resposta -3. Voltar para o passo 2 (continuando o loop/laço) - -### Construindo o bot - -Agora, vamos criar o bot. Iremos começar definindo algumas frases. - -> Nota da tradutora: em função da política de contribuição da Microsoft, todos os códigos foram mantidos em inglês. No entanto, é possível encontrar traduções abaixo deles para ajudar no entendimento. Para não estender muito o arquivo, somente algumas partes foram traduzidas, então sintam-se convidados a pesquisar em tradutores/dicionários. - -1. Crie este bot em Python com as seguintes respostas: - - ```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?"] - ``` - > A lista de respostas genéricas inclui frases como "Isso é bem interessante, por favor me conte mais." e "O tempo esses dias está bem doido, né?" - - Aqui estão alguns outputs de exemplo para te guiar (as entradas do usuário se iniciam com `>`): - - ```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! - ``` - > O bot se apresenta e dá instruções de como o usuário deve interagir. A conversa é iniciada pelo bot, que pergunta "Como você está hoje?". O usuário diz "Estou bem, valeu", ao que o bot responde "Isso é bem interessante, por favor me conte mais.". A conversa continua por mais alguns diálogos. - - Uma solução possível para a tarefa está [aqui](../solution/bot.py) - - ✅ Pare e pense - - 1. Você acha que respostas aleatórias seriam capazes de fazer uma pessoa achar que o bot realmente entendeu que ela disse? - 2. Quais recursos/funções o bot precisaria ter para ser mais convincente? - 3. Se um bot pudesse 'entender' facilmente o significado de uma frase, ele também precisaria se 'lembrar' do significado de frases anteriores? - ---- - -## 🚀Desafio - -Escolha um dos elementos do "pare e considere" acima e tente implementá-lo em código ou escreva uma solução no papel usando pseudocódigo. - -Na próxima aula, você irá aprender sobre algumas outras abordagens de análise sintática de linguagem natural e de aprendizado de máquina. - -## [Teste pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32?loc=ptbr) - -## Revisão & Autoestudo - -Dê uma olhada nas referências abaixo e talvez até as considere como oportunidade de leitura futura. - -### Referências - -1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . -2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. - -## Tarefa - -[Procure por um bot](assignment.pt-br.md) diff --git a/6-NLP/1-Introduction-to-NLP/translations/README.zh-cn.md b/6-NLP/1-Introduction-to-NLP/translations/README.zh-cn.md deleted file mode 100644 index 97428b49..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/README.zh-cn.md +++ /dev/null @@ -1,163 +0,0 @@ -# 自然语言处理介绍 -这节课讲解了 *自然语言处理* 的简要历史和重要概念,*自然语言处理*是计算语言学的一个子领域。 - -## [课前测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) - -## 介绍 -众所周知,自然语言处理(Natural Language Processing, NLP)是机器学习在生产软件中应用最广泛的领域之一。 - -✅ 你能想到哪些你日常生活中使用的软件可能嵌入了自然语言处理技术呢?或者,你经常使用的文字处理程序或移动应用程序中是否嵌入了自然语言处理技术呢? - -你将会学习到: - -- **什么是「语言」**。语言的发展历程,以及相关研究的主要领域。 -- **定义和概念**。你还将了解关于计算机文本处理的概念。包括解析(parsing)、语法(grammar)以及识别名词与动词。这节课中有一些编程任务;还有一些重要概念将在以后的课程中被引入,届时你也会练习通过编程实现其它概念。 - -## 计算语言学 - -计算语言学 (Computational Linguistics) 是一个经过几十年研究和发展的领域,它研究如何让计算机能使用、理解、翻译语言并使用语言交流。自然语言处理(NLP)是计算语言学中一个专注于计算机如何处理「自然的」(或者说,人类的)语言的相关领域。 - -### 举例:电话号码识别 - -如果你曾经在手机上使用语音输入替代键盘输入,或者使用过虚拟语音助手,那么你的语音将被转录(或者叫*解析*)为文本形式后进行处理。被检测到的关键字最后将被处理成手机或语音助手可以理解并可以依此做出行为的格式。 - -![comprehension](../images/comprehension.png) -> 真正意义上的语言理解很难!图源:[Jen Looper](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 - ``` - -> 💡 提示:你可以在 VS Code 环境中直接运行 Python。 点击 [文档](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) 查看更多信息。 - -## 与机器对话 - -试图让计算机理解人类语言的尝试最早可以追溯到几十年前。*Alan Turing* 是最早研究自然语言处理问题的科学家之一。 - -### 图灵测试 - -当图灵在 1950 年代研究*人工智能*时,他想出了这个思维实验:让人类和计算机通过打字的方式来交谈,其中人类并不知道对方是人类还是计算机。 - -如果经过一定时间的交谈,人类无法确定对方是否是计算机,那么是否可以认为计算机正在“思考”? - -### 灵感 - “模仿游戏” - -这个想法来自一个名为 *模仿游戏* 的派对游戏,其中一名审讯者独自一人在一个房间里,负责确定在另一个房间里的两人的性别(男性或女性)。审讯者可以传递笔记,并且需要想出能够揭示神秘人性别的问题。当然,另一个房间的玩家也可以通过回答问题的方式来欺骗审讯者,例如用看似真诚的方式误导或迷惑审讯者。 - -### Eliza 的研发 - -在 1960 年代的麻省理工学院,一位名叫 *Joseph Weizenbaum* 的科学家开发了 [*Eliza*](https:/wikipedia.org/wiki/ELIZA)。Eliza 是一位计算机“治疗师”,它可以向人类提出问题并让人类觉得它能理解人类的回答。然而,虽然 Eliza 可以解析句子并识别某些语法结构和关键字以给出合理的答案,但不能说它*理解*了句子。如果 Eliza 看到的句子格式为“**I am** sad”(**我很** 难过),它可能会重新排列并替换句子中的单词,回答 “How long have **you been** sad"(**你已经** 难过 多久了)。 - -看起来像是 Eliza 理解了这句话,还在询问关于这句话的问题,而实际上,它只是在改变时态和添加词语。如果 Eliza 没有在回答中发现它知道如何响应的词汇,它会给出一个随机响应,该响应可以适用于许多不同的语句。 Eliza 很容易被欺骗,例如,如果用户写了 "**You are** a bicycle"(**你是** 个 自行车),它可能会回复 "How long have **I been** a bicycle?"(**我已经是** 一个 自行车 多久了?),而不是更合理的回答。 - -[![跟 Eliza 聊天](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "跟 Eliza 聊天") - -> 🎥 点击上方的图片查看关于 Eliza 原型的视频 - -> 旁注:如果你拥有 ACM 账户,你可以阅读 1996 年发表的 [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) 的原始介绍。或者,在[维基百科](https://wikipedia.org/wiki/ELIZA)上阅读有关 Eliza 的信息。 - -## 练习 - 编程实现一个基础的对话机器人 - -像 Eliza 一样的对话机器人是一个看起来可以智能地理解和响应用户输入的程序。与 Eliza 不同的是,我们的机器人不会用规则让它看起来像是在进行智能对话。我们的对话机器人将只有一种能力:它只会通过基本上可以糊弄所有普通对话的句子来随机回答,使得谈话能够继续进行。 - -### 计划 - -搭建聊天机器人的步骤 - -1. 打印用户与机器人交互的使用说明 -2. 开启循环 - 1. 获取用户输入 - 2. 如果用户要求退出,就退出 - 3. 处理用户输入并选择一个回答(在这个例子中,从回答列表中随机选择一个回答) - 4. 打印回答 -3. 重复步骤 2 - -### 构建聊天机器人 - -接下来让我们建一个聊天机器人。我们将从定义一些短语开始。 - -1. 使用以下随机的回复(`random_responses`)在 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! - ``` - - 示例程序在[这里](../solution/bot.py)。这只是一种可能的解决方案。 - - ✅ 停下来,思考一下 - - 1. 你认为这些随机响应能够“欺骗”人类,使人类认为机器人实际上理解了他们的意思吗? - 2. 机器人需要哪些功能才能更有效的回应? - 3. 如果机器人真的可以“理解”一个句子的意思,它是否也需要“记住”前面句子的意思? - ---- - -## 🚀挑战 - -在上面的「停下来,思考一下」板块中选择一个问题,尝试编程实现它们,或使用伪代码在纸上编写解决方案。 - -在下一课中,您将了解解析自然语言和机器学习的许多其他方法。 - -## [课后测验](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) - -## 复习与自学 - -看看下面的参考资料作为进一步的参考阅读。 - -### 参考 - -1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . -2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. - -## 任务 - -[查找一个机器人](../assignment.md) diff --git a/6-NLP/1-Introduction-to-NLP/translations/assignment.es.md b/6-NLP/1-Introduction-to-NLP/translations/assignment.es.md deleted file mode 100644 index 67b7401a..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Buscar un bot - -## Instrucciones - -Los bots están en todas partes. Tu asignación: ¡encuentra uno y adóptalo! Los puedes encontrar en sitios web, en aplicaciones bancarias, y en los teléfonos, por ejemplo cuando llamas a compañías de servicios financieros para asesoramiento o información de cuenta. Analiza el bot y ve si puedes confundirlo. Si puedes confundir al bot, ¿por qué piensas que sucedió? Escribe un ensayo corto acerca de tu experiencia. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | -| | Se escribió un ensayo a página completa, explicando la presunta arquitectura del bot y describiendo tu experiencia con él | El ensayo está incompleto o no fue bien investigado | No se envió ensayo | diff --git a/6-NLP/1-Introduction-to-NLP/translations/assignment.it.md b/6-NLP/1-Introduction-to-NLP/translations/assignment.it.md deleted file mode 100644 index 02150752..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Cercare un bot - -## Istruzioni - -I bot sono ovunque. Il compito: trovarne uno e adottarlo! È possibile trovarli sui siti web, nelle applicazioni bancarie e al telefono, ad esempio quando si chiamano società di servizi finanziari per consigli o informazioni sull'account. Analizzare il bot e vedire se si riesce a confonderlo. Se si riesce a confondere il bot, perché si pensa sia successo? Scrivere un breve articolo sulla propria esperienza. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | -| | Viene scritto un documento a pagina intera, che spiega la presunta architettura del bot e delinea l'esperienza con esso | Un documento è incompleto o non ben concepito | Nessun documento inviato | diff --git a/6-NLP/1-Introduction-to-NLP/translations/assignment.ko.md b/6-NLP/1-Introduction-to-NLP/translations/assignment.ko.md deleted file mode 100644 index a97bef29..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# Bot(봇)을 찾아보세요 - -## 설명 - -봇은 어디에나 있습니다. 이번 과제로 봇 하나를 찾아 그 봇에 대해 알아보세요! 웹사이트, 은행 애플리케이션, 전화 통화 등에서 — 예를 들어 금융 서비스 회사에 전화하여 조언이나 계좌 정보를 구할 때 — 찾을 수 있습니다. 봇을 분석해 봇을 혼란스럽게 만들 수 있는지 알아보고, 혼란스럽게 만들 수 있다면 어떤 이유로 혼란스러워하는지, 봇에 대한 짧은 글을 써보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | --------------------------------------------------------------------------------------------------------------- | -------------------------------------- | ----------------- | -| | 봇의 아키텍처(구성 방식)를 추리해, 그 추리를 바탕으로한 봇의 구성 방식 및 봇 사용 경험을 (A4 용지) 한 장 분량으로 설명함 | 글이 미완성이거나 봇에 대한 조사가 부족함 | 글을 제출하지 않음 | diff --git a/6-NLP/1-Introduction-to-NLP/translations/assignment.pt-br.md b/6-NLP/1-Introduction-to-NLP/translations/assignment.pt-br.md deleted file mode 100644 index 92486af4..00000000 --- a/6-NLP/1-Introduction-to-NLP/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Procure por um bot - -## Instruções - -Bots estão em todos os lugares. Sua tarefa: encontrar um e analisá-lo! Você pode encontrá-los em web sites, aplicações de bancos, e no celular, por exemplo, quando entra em contato com bancos em busca de ajuda ou informação sobre sua conta. Analise o bot e veja se você consegue confundi-lo. Se você conseguir, por qual motivo você acha que isto aconteceu? Escreva um pequeno artigo sobre sua experiência. - -## Rubrica - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | -| | Um artigo de uma página completa foi escrito, explicando a suposta arquitetura do bot e resumindo sua experiência com ele | O artigo está incompleto ou mal pesquisado | Nenhum artigo foi feito | diff --git a/6-NLP/2-Tasks/translations/README.es.md b/6-NLP/2-Tasks/translations/README.es.md deleted file mode 100644 index 60cb290a..00000000 --- a/6-NLP/2-Tasks/translations/README.es.md +++ /dev/null @@ -1,214 +0,0 @@ -# Tareas y técnicas comunes del procesamiento del lenguaje natural - -Para la mayoría de tareas de *procesamiento del lenguaje natural*, el texto a ser procesado debe ser partido en bloques, examinado y los resultados almacenados y tener referencias cruzadas con reglas y conjuntos de datos. Esta tareas, le permiten al programador obtener el _significado_, _intención_ o sólo la _frecuencia_ de los términos y palabras en un texto. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33?loc=es) - -Descubramos técnicas comunes usadas en el procesamiento de texto. Combinadas con el aprendizaje automático, estas técnicas te ayudan a analizar grandes cantidades de texto de forma eficiente, Antes de aplicar aprendizaje automático a estas tareas, primero entendamos los problemas encontrados por un especialista del procesamiento del lenguaje natural. - -## Tareas comunes al procesamiento del lenguaje natural - -Existen distintas forma de analizar un texto en el cual trabajas. Hay tareas que puedes realizar y a través de estas tareas eres capaz de estimar la comprensión del texto y sacar conclusiones. Usualmente llevas a cabo estas tareas en secuencia. - -### Tokenización - -Probablemente la primer cosa que la mayoría de los algoritmos tiene que hacer es dividir el texto en `tokens`, o palabras. Aunque esto suena simple, teniendo en cuenta la puntuación y distintas palabras y delimitadoras de oraciones en los diferentes idiomas puede hacerlo difícil. Puede que tengas que usar varios métodos para determinar la separación. - -![Tokenización](../images/tokenization.png) -> Tokenizando una oración de **Orgullo y Prejuicio**. Infografía de [Jen Looper](https://twitter.com/jenlooper) - -### Incrustaciones - -[Las incrustaciones de palabras](https://wikipedia.org/wiki/Word_embedding) son una forma de convertir numéricamente tus datos de texto. Las incrustaciones se realizan de tal forma que las palabras con significado similar o palabras que se usan juntas son agrupadas. - -![Incrustaciones de palabras](../images/embedding.png) -> "I have the highest respect for your nerves, they are my old friends." - Palabras incrustadas para una oración en **Orgullo y Prejuicio**. Infografía de [Jen Looper](https://twitter.com/jenlooper) - -✅ Prueba [esta herramienta interesante](https://projector.tensorflow.org/) par aexperimentar con palabras embebidas. Dando cic en una palabra se muestran grupos de palabras similares: 'toy' se agrupa con 'disney', 'lego', 'playstation', y 'console'. - -### Parseo y etiquetado de parte del discurso - -Cada palabra que ha sido tokenizada puede ser etiquetada como parte de un discurso - un sustantivo, verbo o adjetivo. La oración `the quick red fox jumped over the lazy brown dog` puede ser etiquetada como parte del discurso como fox = noun, jumped = verb. - -![Parseo](../images/parse.png) - -> Analizando una oración de **Orgullo y Prejuicio**. Infografía de [Jen Looper](https://twitter.com/jenlooper) - -El parseo es reconocer qué palabras están relacionadas con otras en una oración - por ejemplo `the quick red fox jumped` es una secuencia adjetivo-sustantivo-verbo que está separada de la secuencia `lazy brown dog`. - -### Frecuencias de palabras y frases - -Un procedimiento útil cuando analizas un gran bloque de texto es construir un diccionario de cada palabra o frase de interés y qué tan frecuente aparece. La frase `the quick red fox jumped over the lazy brown dog` tiene una frecuencia de palabra de 2 para `the`. - -Veamos un texto de ejemplo donde contamos las frecuencias de las palabras. El poema The Winners de Rudyard Kipling contiene el siguiente verso: - -```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. -``` - -Como las frecuencias de frases pueden distinguir entre mayúsculas y minúsculas según se requiera, la frase `a friend` tiene una frecuencia de 2, `the` tiene una frecuencia de 6, y `travels` es 2. - -### N-gramas - -Un texto puede ser dividido en secuencias de palabras de una longitud definida, una palabra simple (unigrama), dos palabras (bigramas), tres palabras (trigramas) o cualquier número de palabras (n-gramas). - -Por ejemplo `the quick red fox jumped over the lazy brown dog` con un n-grama de puntaje 2 produce los siguientes n-gramas: - -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 - -Podría ser más fácil visualizarlo como una caja deslizante sobre la oración. Aquí se presenta para n-gramas de 3 palabras, el n-grama está en negritas en cada oración: - -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** - -![Ventana deslizante de n-gramas](../images/n-grams.gif) - -> N-grama de valor 3: Infografía de [Jen Looper](https://twitter.com/jenlooper) - -### Extracción de frases nominales - -En la mayoría de las oraciones, hay un sustantivo que es el sujeto u objeto de la oración. En Inglés, se suele identificar como al tener 'a', 'an' o 'the' precediéndole. Identificar el sujeto u objeto de una oración al 'extraer la frase nominal' es una tarea común del procesamiento del lenguaje natural al intentar comprender el significado de una oración. - -✅ En la oración "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.", ¿puedes identificar las frases nominales? - -En la oración `the quick red fox jumped over the lazy brown dog` hay 2 frases nominales: **quick red fox** y **lazy brown dog**. - -### Análisis de sentimiento - -Una oración o texto puede ser analizado por sentimiento, o que tan *positivo* o *negativo* es. El sentimiento se mide en *polaridad* y *objetividad/subjetividad*. La polaridad se mide de -1.0 a 1.0 (negativo a positivo) y 0.0 a 1.0 (de más objetivo a más subjetivo). - -✅ Más adelante aprenderás que hay distintas formas de determinar el sentimiento usando aprendizaje automático, pero una forma es tener una lista de palabras y frase que son categorizadas como positivas o negativas por un humano experto y aplica ese modelo al texto para calcular un puntaje de polaridad. ¿Puedes ver cómo esto podría funcionar mejor en ciertas circunstancias y peor en otras? - -### Inflexión - -La inflexión te permite tomar una palabra y obtener el singular o plural de la misma. - -### Lematización - -Un *lema* es la raíz o palabra principal para un conjunto de palabras, por ejemplo *flew*, *flies*, *flying* tiene como lema el verbo *fly*. - -También hay bases de datos útiles para el investigador del procesamiento del lenguaje natural, notablemente: - -### WordNet - -[WordNet](https://wordnet.princeton.edu/) es una base de datos de palabras, sinónimos antónimos y muchos otros detalles para cada palabra en distintos idiomas. Es increíblemente útil al intentar construir traducciones, correctores ortográficos, o herramientas de idioma de cualquier tipo. - -## Bibliotecas NLP - -Afortunadamente, no tienes que construir todas estas técnicas por ti mismo, ya que existen excelentes bibliotecas Python disponibles que hacen mucho más accesible a los desarrolladores que no están especializados en el procesamiento de lenguaje natural o aprendizaje automático. Las siguientes lecciones incluyen más ejemplos de estos, pero aquí aprenderás algunos ejemplos útiles para ayudarte con las siguientes tareas. - -### Ejercicio - usando la biblioteca `TextBlob` - -Usemos una biblioteca llamada TextBlob ya que contiene APIs útiles para abordar este tipo de tareas. TextBlob "se para sobre hombros de gigantes como [NLTK](https://nltk.org) y [pattern](https://github.com/clips/pattern), y se integran bien con ambos." Tiene una cantidad considerable de aprendizaje automático embebido en su API. - -> Nota: Hay una guía de [Inicio rápido](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) útil disponible para TextBlob que es recomendada por desarrolladores Python experimentados. - -Al intentar identificar *frases nominales*, TextBlob ofrece varias opciones de extractores para encontrar frases nominales. - -1. Da un vistazo a `ConllExtractor`. - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # import and create a Conll extractor to use later - extractor = ConllExtractor() - - # later when you need a noun phrase extractor: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified - np = user_input_blob.noun_phrases - ``` - - > ¿Qué pasa aquí? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) es "un extractor de frases nominales que usa el análisis de fragmentos entrenado con el corpus de entrenamiento ConLL-2000." ConLL-2000 se refiere a la conferencia en aprendizaje de lenguaje natural computacional del 2000. Cada año la conferencia organiza un talle para abordar un problema difícil del procesamiento del lenguaje natural, y en el 2000 fue de fragmentación de sustantivos. Se entrenó un modelo en el Wall Street Journal, con las "secciones 15 a 18 como datos de entrenamiento (211727 tokens) y la sección 20 como datos de prueba (47377 tokens)". Puedes revisar los procedimientos usados [aquí](https://www.clips.uantwerpen.be/conll2000/chunking/) y los [resultados](https://ifarm.nl/erikt/research/np-chunking.html). - -### Desafío - Mejora tu bot con procesamiento del lenguaje natural - -En la lección anterior construiste un bot de preguntas y respuestas muy simple. Ahora, harás a Marvin un poco más comprensivo al analizar tu entrada para sentimiento e imprimir una respuesta para emparejar el sentimiento. También necesitarás identificar `noun_phrase` y preguntar al respecto. - -Tus pasos al construir un mejor bot conversacional: - -1. Imprime las instrucciones avisando al usuario cómo interactuar con el bot -2. Inicia el ciclo - 1. Acepta la entrada del usuario - 2. Si el usuario pidió salir, entonces sal del programa - 3. Procesa la entrada del usuario y determina la respuesta de sentimiento apropiada - 4. Si se detectó una frase nominal en el sentimiento, pluralízalo y pide más entradas de ese tema - 5. Imprime la respuesta -3. Regresa al paso 2 - -Aquí tienes el fragmento de código para determinar el sentimiento usando TextBlob. Nota que sólo hay 4 *gradientes* de respuesta de sentimiento (podrías tener más si quisieras): - -```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. " -``` - -Aquí está una salida de muestra para guiarte (la entrada del usuario está en las líneas que comienzan con >): - -```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! -``` - -Una posible solución a esta tarea esta [aquí](../solution/bot.py) - -✅ Revisión de conocimiento - -1. ¿Piensas que las respuestas comprensivas 'engañarían' a alguien a creer que el bot en realidad les entendió? -2. ¿El identificar la frane nominal hace al bot más 'creíble'? -3. ¿Por qué extraer una 'frase nominal' de una oración es algo útil? - ---- - -Implementa el bot con la revisión de conocimiento anterior y pruébalo con un amigo. ¿Pudo engañarlo? ¿Puedes hacer a tu bot más 'creíble'? - -## 🚀Desafío - -Toma una tarea de la revisión de conocimiento previo y trata de implementarla. Prueba el bot con un amigo. ¿Pudo engañarlo? ¿Puedes hacer a tu bot más 'creíble'? - -## [Examen posterior a la lectura](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34?loc=es) - -## Revisión y autoestudio - -En las siguientes lecciones aprenderás más acerca del análisis de sentimiento. Investiga esta técnica interesante en artículos como estos en [KDNuggets](https://www.kdnuggets.com/tag/nlp) - -## Asignación - -[Haz que un bot responda](assignment.es.md) diff --git a/6-NLP/2-Tasks/translations/README.it.md b/6-NLP/2-Tasks/translations/README.it.md deleted file mode 100644 index 43bc6520..00000000 --- a/6-NLP/2-Tasks/translations/README.it.md +++ /dev/null @@ -1,214 +0,0 @@ -# Compiti e tecniche comuni di elaborazione del linguaggio naturale - -Per la maggior parte delle attività di *elaborazione del linguaggio naturale* , il testo da elaborare deve essere suddiviso, esaminato e i risultati archiviati o incrociati con regole e insiemi di dati. Queste attività consentono al programmatore di derivare il _significato_ o l'_intento_ o solo la _frequenza_ di termini e parole in un testo. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/?loc=it) - -Si esaminano le comuni tecniche utilizzate nell'elaborazione del testo. Combinate con machine learning, queste tecniche aiutano ad analizzare grandi quantità di testo in modo efficiente. Prima di applicare machine learning a queste attività, tuttavia, occorre cercare di comprendere i problemi incontrati da uno specialista in NLP. - -## Compiti comuni per NLP - -Esistono diversi modi per analizzare un testo su cui si sta lavorando. Ci sono attività che si possono eseguire e attraverso le quali si è in grado di valutare la comprensione del testo e trarre conclusioni. Di solito si eseguono queste attività in sequenza. - -### Tokenizzazione - -Probabilmente la prima cosa che la maggior parte degli algoritmi di NLP deve fare è dividere il testo in token o parole. Anche se questo sembra semplice, dover tenere conto della punteggiatura e dei delimitatori di parole e frasi di lingue diverse può renderlo complicato. Potrebbe essere necessario utilizzare vari metodi per determinare le demarcazioni. - -![Tokenizzazione](../images/tokenization.png) -> Tokenizzazione di una frase da **Orgoglio e Pregiudizio**. Infografica di [Jen Looper](https://twitter.com/jenlooper) - -### Embedding - -I [word embeddings](https://it.wikipedia.org/wiki/Word_embedding) sono un modo per convertire numericamente i dati di testo. Gli embedding vengono eseguiti in modo tale che le parole con un significato simile o le parole usate insieme vengano raggruppate insieme. - -![word embeddings](../images/embedding.png) -> "I have the highest respect for your nerves, they are my old friends." - Incorporazioni di parole per una frase in **Orgoglio e Pregiudizio**. Infografica di [Jen Looper](https://twitter.com/jenlooper) - -✅ Provare [questo interessante strumento](https://projector.tensorflow.org/) per sperimentare i word embedding. Facendo clic su una parola vengono visualizzati gruppi di parole simili: gruppi di "toy" con "disney", "lego", "playstation" e "console". - -### Analisi e codifica di parti del discorso - -Ogni parola che è stata tokenizzata può essere etichettata come parte del discorso: un sostantivo, un verbo o un aggettivo. La frase `the quick red fox jumped over the lazy brown dog` potrebbe essere etichettata come fox = sostantivo, jumped = verbo. - -![elaborazione](../images/parse.png) - -> Analisi di una frase da **Orgoglio e Pregiudizio**. Infografica di [Jen Looper](https://twitter.com/jenlooper) - -L'analisi consiste nel riconoscere quali parole sono correlate tra loro in una frase - per esempio `the quick red fox jumped` è una sequenza aggettivo-sostantivo-verbo che è separata dalla sequenza `lazy brown dog` . - -### Frequenze di parole e frasi - -Una procedura utile quando si analizza un corpo di testo di grandi dimensioni è creare un dizionario di ogni parola o frase di interesse e con quale frequenza viene visualizzata. La frase `the quick red fox jumped over the lazy brown dog` ha una frequenza di parole di 2 per the. - -Si esamina un testo di esempio in cui si conta la frequenza delle parole. La poesia di Rudyard Kipling The Winners contiene i seguenti versi: - -```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. -``` - -Poiché le frequenze delle frasi possono essere o meno insensibili alle maiuscole o alle maiuscole, a seconda di quanto richiesto, la frase `a friend` ha una frequenza di 2, `the` ha una frequenza di 6 e `travels` è 2. - -### N-grammi - -Un testo può essere suddiviso in sequenze di parole di una lunghezza prestabilita, una parola singola (unigramma), due parole (bigrammi), tre parole (trigrammi) o un numero qualsiasi di parole (n-grammi). - -Ad esempio, `the quick red fox jumped over the lazy brown dog` con un punteggio n-grammo di 2 produce i seguenti n-grammi: - -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 - -Potrebbe essere più facile visualizzarlo come una casella scorrevole per la frase. Qui è per n-grammi di 3 parole, l'n-grammo è in grassetto in ogni frase: - -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** - -![finestra scorrevole n-grammi](../images/n-grams.gif) - -> Valore N-gram di 3: Infografica di [Jen Looper](https://twitter.com/jenlooper) - -### Estrazione frase nominale - -Nella maggior parte delle frasi, c'è un sostantivo che è il soggetto o l'oggetto della frase. In inglese, è spesso identificabile con "a" o "an" o "the" che lo precede. Identificare il soggetto o l'oggetto di una frase "estraendo la frase nominale" è un compito comune in NLP quando si cerca di capire il significato di una frase. - -✅ Nella frase "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.", si possono identificare i nomi nelle frasi? - -Nella frase `the quick red fox jumped over the lazy brown dog` ci sono 2 frasi nominali: **quick red fox** e **lazy brown dog**. - -### Analisi del sentiment - -Una frase o un testo può essere analizzato per il sentimento, o quanto *positivo* o *negativo* esso sia. Il sentimento si misura in *polarità* e *oggettività/soggettività*. La polarità è misurata da -1,0 a 1,0 (da negativo a positivo) e da 0,0 a 1,0 (dal più oggettivo al più soggettivo). - -✅ In seguito si imparerà che ci sono diversi modi per determinare il sentimento usando machine learning ma un modo è avere un elenco di parole e frasi che sono classificate come positive o negative da un esperto umano e applicare quel modello al testo per calcolare un punteggio di polarità. Si riesce a vedere come funzionerebbe in alcune circostanze e meno bene in altre? - -### Inflessione - -L'inflessione consente di prendere una parola e ottenere il singolare o il plurale della parola. - -### Lemmatizzazione - -Un *lemma* è la radice o il lemma per un insieme di parole, ad esempio *volò*, *vola*, *volando* ha un lemma del verbo *volare*. - -Ci sono anche utili database disponibili per il ricercatore NPL, in particolare: - -### WordNet - -[WordNet](https://wordnet.princeton.edu/) è un database di parole, sinonimi, contari e molti altri dettagli per ogni parola in molte lingue diverse. È incredibilmente utile quando si tenta di costruire traduzioni, correttori ortografici o strumenti di lingua di qualsiasi tipo. - -## Librerie NPL - -Fortunatamente, non è necessario creare tutte queste tecniche da soli, poiché sono disponibili eccellenti librerie Python che le rendono molto più accessibili agli sviluppatori che non sono specializzati nell'elaborazione del linguaggio naturale o in machine learning. Le prossime lezioni includono altri esempi di queste, ma qui si impareranno alcuni esempi utili che aiuteranno con il prossimo compito. - -### Esercizio: utilizzo della libreria `TextBlob` - -Si usa una libreria chiamata TextBlob in quanto contiene API utili per affrontare questi tipi di attività. TextBlob "sta sulle spalle giganti di [NLTK](https://nltk.org) e [pattern](https://github.com/clips/pattern), e si sposa bene con entrambi". Ha una notevole quantità di ML incorporato nella sua API. - -> Nota: per TextBlob è disponibile un'utile [guida rapida](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart), consigliata per sviluppatori Python esperti - -Quando si tenta di identificare *le frasi nominali*, TextBlob offre diverse opzioni di estrattori per trovarle. - -1. Dare un'occhiata a `ConllExtractor`. - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # importa e crea un extrattore Conll da usare successivamente - extractor = ConllExtractor() - - # quando serve un estrattore di frasi nominali: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # notare specificato estrattore non predefinito - np = user_input_blob.noun_phrases - ``` - - > Cosa sta succedendo qui? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) è "Un estrattore di frasi nominali che utilizza l'analisi dei blocchi addestrata con il corpus di formazione ConLL-2000". ConLL-2000 si riferisce alla Conferenza del 2000 sull'apprendimento computazionale del linguaggio naturale. Ogni anno la conferenza ha ospitato un workshop per affrontare uno spinoso problema della NPL, e nel 2000 è stato lo spezzettamento dei sostantivi. Un modello è stato addestrato sul Wall Street Journal, con "sezioni 15-18 come dati di addestramento (211727 token) e sezione 20 come dati di test (47377 token)". Si possono guardare le procedure utilizzate [qui](https://www.clips.uantwerpen.be/conll2000/chunking/) e i [risultati](https://ifarm.nl/erikt/research/np-chunking.html). - -### Sfida: migliorare il bot con NPL - -Nella lezione precedente si è creato un bot di domande e risposte molto semplice. Ora si renderà Marvin un po' più comprensivo analizzando l'input per il sentimento e stampando una risposta che corrisponda al sentimento. Si dovrà anche identificare una frase nominale `noun_phrase` e chiedere informazioni su di essa. - -I passaggi durante la creazione di un bot conversazionale: - -1. Stampare le istruzioni che consigliano all'utente come interagire con il bot -2. Avviare il ciclo - 1. Accettare l'input dell'utente - 2. Se l'utente ha chiesto di uscire, allora si esce - 3. Elaborare l'input dell'utente e determinare la risposta di sentimento appropriata - 4. Se viene rilevata una frase nominale nel sentimento, pluralizzala e chiedere ulteriori input su quell'argomento - 5. Stampare la risposta -3. Riprendere il ciclo dal passo 2 - -Ecco il frammento di codice per determinare il sentimento usando TextBlob. Si noti che ci sono solo quattro *gradienti* di risposta al sentimento (se ne potrebbero avere di più se lo si desidera): - -```python -if user_input_blob.polarity <= -0.5: - response = "Oh dear, that sounds bad. " # Oh caro, è terribile -elif user_input_blob.polarity <= 0: - response = "Hmm, that's not great. " # Mmm, non è eccezionale -elif user_input_blob.polarity <= 0.5: - response = "Well, that sounds positive. " # Bene, questo è positivo -elif user_input_blob.polarity <= 1: - response = "Wow, that sounds great. " # Wow, sembra eccezionale -``` - -Ecco un risultato di esempio a scopo di guida (l'input utente è sulle righe che iniziano per >): - -```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! -``` - -Una possibile soluzione al compito è [qui](../solution/bot.py) - -Verifica delle conoscenze - -1. Si ritiene che le risposte casuali "ingannerebbero" qualcuno facendogli pensare che il bot le abbia effettivamente capite? -2. Identificare la frase nominale rende il bot più 'credibile'? -3. Perché estrarre una "frase nominale" da una frase sarebbe una cosa utile da fare? - ---- - -Implementare il bot nel controllo delle conoscenze precedenti e testarlo su un amico. Può ingannarlo? Si può rendere il bot più 'credibile?' - -## 🚀 Sfida - -Prendere un'attività dalla verifica delle conoscenze qui sopra e provare a implementarla. Provare il bot su un amico. Può ingannarlo? Si può rendere il bot più 'credibile?' - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/?loc=it) - -## Revisione e Auto Apprendimento - -Nelle prossime lezioni si imparerà di più sull'analisi del sentiment. Fare ricerche su questa interessante tecnica in articoli come questi su [KDNuggets](https://www.kdnuggets.com/tag/nlp) - -## Compito - -[Fare rispondere un bot](assignment.it.md) diff --git a/6-NLP/2-Tasks/translations/README.ko.md b/6-NLP/2-Tasks/translations/README.ko.md deleted file mode 100644 index 63e9ca63..00000000 --- a/6-NLP/2-Tasks/translations/README.ko.md +++ /dev/null @@ -1,214 +0,0 @@ -# 일반적인 natural language processing 작업과 기술 - -대부분 *natural language processing* 작업으로, 처리한 텍스트를 분해하고, 검사하고, 그리고 결과를 저장하거나 룰과 데이터셋을 서로 참조했습니다. 이 작업들로, 프로그래머가 _meaning_ 또는 _intent_ 또는 오직 텍스트에 있는 용어와 단어의 _frequency_ 만 끌어낼 수 있게 합니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/) - -텍스트를 처리하며 사용했던 일반적인 기술을 찾아봅니다. 머신러닝에 결합된, 이 기술은 효율적으로 많은 텍스트를 분석하는데 도와줍니다. 그러나, 이 작업에 ML을 적용하기 전에, NLP 스페셜리스트가 일으킨 문제를 이해합니다. - -## NLP의 공통 작업 - -작업하고 있는 텍스트를 분석하는 다양한 방식이 있습니다. 진행할 작업과 이 작업으로 텍스트 이해도로 측정하고 결론을 지을 수 있습니다. 대부분 순서대로 작업합니다. - -### Tokenization - -아마 많은 NLP 알고리즘으로 처음 할 일은 토큰이나, 단어로 텍스트를 나누는 것입니다. 간단하게 들리지만, 문장 부호와 다른 언어의 단어와 문장 구분 기호를 고려하는 건 까다로울 수 있습니다. - -![tokenization](../images/tokenization.png) -> Tokenizing a sentence from **Pride and Prejudice**. Infographic by [Jen Looper](https://twitter.com/jenlooper) - -### Embeddings - -[Word embeddings](https://wikipedia.org/wiki/Word_embedding)은 텍스트 데이터를 숫자처럼 변환하는 방식입니다. Embeddings은 의미가 비슷한 단어이거나 cluster와 단어를 함께 쓰는 방식으로 이루어집니다. - -![word embeddings](../images/embedding.png) -> "I have the highest respect for your nerves, they are my old friends." - Word embeddings for a sentence in **Pride and Prejudice**. Infographic by [Jen Looper](https://twitter.com/jenlooper) - -✅ [this interesting tool](https://projector.tensorflow.org/)로 단어 embeddings를 실험해봅니다. 하나의 단어를 클릭하면 비슷한 단어의 클러스터를 보여줍니다: 'disney', 'lego', 'playstation', 그리고 'console'이 'toy' 클러스터에 있있습니다. - -### 파싱 & Part-of-speech Tagging - -토큰화된 모든 단어는 품사를 명사, 동사, 형용사로 테그할 수 있습니다. `the quick red fox jumped over the lazy brown dog` 문장은 fox = noun, jumped = verb로 POS 태그될 수 있습니다. - -![parsing](../images/parse.png) - -> Parsing a sentence from **Pride and Prejudice**. Infographic by [Jen Looper](https://twitter.com/jenlooper) - -파싱은 문장에서 각자 단어들이 관련있는지 인식하는 것입니다. 예시로 `the quick red fox jumped`는 `lazy brown dog` 시퀀스와 나눠진 형용사-명사-동사 시퀀스 입니다. - -### 단어와 구문 빈도 - -텍스트의 많은 분량을 분석할 때 유용한 순서는 흥미있는 모든 단어 또는 자주 나오는 사전을 만드는 것입니다. `the quick red fox jumped over the lazy brown dog` 문구는 단어 빈도가 2 입니다. - -단어 빈도를 세는 예시를 찾아봅니다. Rudyard Kipling의 시인 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입니다. - -### N-grams - -텍스트는 지정한 길이의 단어 시퀀스, 한 단어(unigram), 두 단어(bigrams), 세 단어(trigrams) 또는 모든 수의 단어(n-grams)로 나눌 수 있습니다. - -예시로 n-gram 2점인 `the quick red fox jumped over the lazy brown dog`는 다음 n-grams을 만듭니다: - -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 단어로 이루어진 n-grams이며, n-gram은 각 문장에서 볼드체로 있습니다: - -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](../images/n-grams.gif) - -> N-gram value of 3: Infographic by [Jen Looper](https://twitter.com/jenlooper) - -### Noun phrase 추출 - -대부분 문장에서, 문장의 주어나, 목적어인 명사가 있습니다. 영어에서, 자주 'a' 또는 'an' 또는 'the'가 앞에 오게 가릴 수 있습니다. "noun phrase 추출'로 문장의 주어 또는 목적어를 가려내려 하는 것은 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." 문장에서, noun phrases를 가려낼 수 있나요? - -`the quick red fox jumped over the lazy brown dog` 문장에서 noun phrases 2개가 있습니다: **quick red fox** 와 **lazy brown dog**. - -### 감정 분석 - -문장이나 텍스트는 감정이나, *positive* 또는 *negative*인지 분석할 수 있습니다. 감정은 *polarity* 와 *objectivity/subjectivity*로 측정됩니다. Polarity는 -1.0 에서 1.0 (negative 에서 positive) 이며 0.0 에서 1.0 (가장 객관적에서 가장 주관적으로)으로 측정됩니다. - -✅ 나중에 머신러닝으로 감정을 판단하는 다른 방식을 배울 수 있지만, 하나의 방식은 전문가가 positive 또는 negative로 분류된 단어와 구분의 리스트를 가지고 polarity 점수를 계산한 텍스트로 모델을 적용하는 것입니다. 일부 상황에서 어떻게 작동하고 다른 상황에서도 잘 동작하는지 볼 수 있나요? - -### Inflection - -Inflection은 단어를 가져와서 단수나 복수 단어를 얻게 됩니다. - -### Lemmatization - -*lemma*는 단어 세트에서 어원이나 표제어고, 예시로 *flew*, *flies*, *flying*은 *fly* 동사의 lemma를 가지고 있습니다. - -특히, NLP 연구원이 사용할 수 있는 유용한 데이터베이스도 있습니다: - -### WordNet - -[WordNet](https://wordnet.princeton.edu/)은 다양한 언어로 모든 단어를 단어, 동의어, 반의어 그리고 다양한 기타 내용으로 이룬 데이터베이스입니다. 번역, 맞춤법 검사, 또는 모든 타입의 언어 도구를 만드려고 시도할 때 매우 유용합니다. - -## NLP 라이브러리 - -운 좋게, 훌륭한 Python 라이브러리로 natural language processing이나 머신러닝에 전문적이지 않은 개발자도 쉽게 접근할 수 있으므로, 이 기술을 스스로 다 만들지 않아도 됩니다. 다음 강의에서 더 많은 예시를 포함하지만, 여기에서 다음 작업에 도움이 될 몇 유용한 예시를 배울 예정입니다. - -### 연습 - `TextBlob` 라이브러리 사용 - -이 타입의 작업을 처리하는 유용한 API를 포함한 TextBlob이라고 불리는 라이브리를 사용합니다. TextBlob은 "stands on the giant shoulders of [NLTK](https://nltk.org) and [pattern](https://github.com/clips/pattern), and plays nicely with both."이며 API에서 상당히 많이 ML이 녹아들어졌습니다. - -> 노트: 잘하는 Python 개발자를 위해서 추천하는 TextBlob의 유용한 [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) 가이드가 존재합니다 - -*noun phrases* 식별하려고 시도하는 순간, TextBlob은 noun phrases를 찾고자 몇 추출 옵션을 제공합니다. - -1. `ConllExtractor` 봅니다. - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # import and create a Conll extractor to use later - extractor = ConllExtractor() - - # later when you need a noun phrase extractor: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified - np = user_input_blob.noun_phrases - ``` - - > 어떤 일이 생기나요? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor)는 "A noun phrase extractor that uses chunk parsing trained with the ConLL-2000 training corpus."입니다. ConLL-2000은 2000 Conference on Computational Natural Language Learning을 의미합니다. 매년 까다로운 NLP 문제를 해결하기 위한 워크숍을 호스트하는 컨퍼런스이며, 2000년에는 noun chunking이었습니다. 모델은 "sections 15-18 as training data (211727 tokens) and section 20 as test data (47377 tokens)"로 Wall Street Journal에서 훈련되었습니다. [here](https://www.clips.uantwerpen.be/conll2000/chunking/)에서 사용한 순서와 [results](https://ifarm.nl/erikt/research/np-chunking.html)를 볼 수 있습니다. - -### 도전 - NLP로 봇 개선하기 - -이전 강의에서 매우 간단한 Q&A 봇을 만들었습니다. 이제, 감정을 넣어서 분석하고 감정과 맞는 응답을 출력하여 Marvin을 좀 더 감성적으로 만듭니다. 또 `noun_phrase`를 식별하고 물어볼 필요가 있습니다. - -더 좋은 대화 봇을 만들 때 단계가 있습니다: - -1. 사용자에게 봇과 상호작용하는 방식 출력 -2. 반복 시작 - 1. 사용자 입력 승인 - 2. 만약 사용자가 종료 요청하면, 종료 - 3. 사용자 입력 처리하고 적절한 감정 응답 결정 - 4. 만약 감정에서 noun phrase 탐지되면, 복수형 변경하고 이 토픽에서 입력 추가 요청 - 5. 응답 출력 -3. 2 단계로 돌아가서 반복 - -여기 TextBlob으로 감정을 탐지하는 코드 스니펫이 있습니다. 감정 응답에 4개 *gradients*만 있다는 점을 참고합니다 (좋아하는 경우 더 가질 수 있음): - -```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! -``` - -작업에 대한 하나의 가능한 솔루션은 [here](../solution/bot.py) 있습니다. - -✅ 지식 점검 - -1. 봇이 그 사람들을 실제로 이해했다고 생각할 수 있게 감성적인 반응으로 'trick'할 수 있다고 생각하나요? -2. noun phrase를 식별하면 봇을 더 '믿을' 수 있나요? -3. 문장에서 'noun phrase'를 추출하는 이유는 무엇인가요? - ---- - -이전의 지식 점검에서 봇을 구현하고 친구에게 테스트해봅니다. 그들을 속일 수 있나요? 좀 더 '믿을 수'있게 봇을 만들 수 있나요? - -## 🚀 도전 - -이전의 지식 점검에서 작업하고 구현합니다. 친구에게 봇을 테스트합니다. 그들을 속일 수 있나요? 좀 더 '믿을 수'있게 봇을 만들 수 있나요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/) - -## 검토 & 자기주도 학습 - -다음 몇 강의에서 감정 분석에 대하여 더 배울 예정입니다. [KDNuggets](https://www.kdnuggets.com/tag/nlp) 같은 아티클에서 흥미로운 기술을 연구합니다. - -## 과제 - -[Make a bot talk back](../assignment.md) diff --git a/6-NLP/2-Tasks/translations/README.pt-br.md b/6-NLP/2-Tasks/translations/README.pt-br.md deleted file mode 100644 index 0aa63090..00000000 --- a/6-NLP/2-Tasks/translations/README.pt-br.md +++ /dev/null @@ -1,220 +0,0 @@ -# Técnicas e tarefas frequentes do Processamento de Linguagem Natural - -Para a maioria das tarefas de *processamento de linguagem natural*, o texto a ser processado precisa ser quebrado em partes e examinado, e os resultados precisam ser guardados ou cruzados com regras e data sets. Estas tarefas permitem que o programador obtenha _significado_, _intencionalidade_ ou a _frequência_ de termos e palavras em um texto. - -## [Teste pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33?loc=ptbr) - -Vamos descobrir técnicas frequentemente usadas no processamento de texto. Combinadas com aprendizado de máquina, estas técnicas ajudam você a analisar grandes quantidades de texto com eficiência. Contudo, antes de aplicar o aprendizado de máquina para estas tarefas, vamos entender os problemas enfrentados por um especialista de PLN (ou NLP). - -## Tarefas frequentes para o PLN - -Existem diferentes formas de analisar um texto em que você está trabalhando. Existem algumas tarefas que você pode executar e através destas você pode obter um entendimento melhor do texto e chegar a conclusões. Você geralmente as realiza em uma sequência. - -### Tokenização - -Provavelmente a primeira coisa que a maioria dos algoritmos de PLN precisa é fazer um split (quebra) do texto em tokens, que, na prática, são palavras. Apesar de parecer simples, considerar pontuação e delimitadores de palavras e orações de diferentes linguagens pode ser trabalhoso. Você pode ter que usar vários métodos para determinar os delimitadores. - -![tokenização](../images/tokenization.png) -> Tokenizando uma frase de **Orgulho e preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper) - -### Embeddings - -[Word embeddings](https://wikipedia.org/wiki/Word_embedding) (em português, podemos dizer vetores de palavras - apesar de o termo mais comum ser word embeddings) são uma forma de converter seus dados textuais em dados numéricos. Os embeddings são feitos de tal forma que as palavras com significado parecido ou palavras usadas em conjunto ficam agrupadas em clusters. - -![word embeddings](../images/embedding.png) -> "I have the highest respect for your nerves, they are my old friends." - Word embeddings de uma frase em **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper) - -✅ Tente esta [ferramenta interessante](https://projector.tensorflow.org/) para experimentar com word embeddings. Clicar em uma palavra mostra o cluster (agrupamento) de palavras parecidas: 'brinquedo' está agrupado com 'disney', 'lego', 'playstation', e 'console'. - -### Parsing & Marcação de Partes da Fala (Part of Speech Tagging - POS) - -Toda palavra tokenizada pode ser marcada como parte da fala - um substantivo, verbo, ou adjetivo. A frase `A rápida raposa pula por cima do preguiçoso cão marrom` pode ser marcada com partes da fala da seguinte forma: raposa = substantivo, pula = verbo. - -![parsing/análise sintática](../images/parse.png) - -> Parseando/analisando sintaticamente uma frase de **Orgulho e Preconceito**. Infográfico por [Jen Looper](https://twitter.com/jenlooper) - -Parsear é reconhecer quais palavras se relacionam entre si em uma frase - por exemplo, `A rápida raposa pula` é uma sequência com adjetivo-substantivo-verbo que difere da sequência `preguiçoso cão marrom`. - -### Frequência de palavras e frases - -Um procedimento útil ao analisar um texto grande é construir um dicionário com toda palavra/frase de interesse e com a frequência ela aparece. A frase `A rápida raposa pula por cima do preguiçoso cão marrom` tem uma frequência de 1 para a palavra raposa. - -Vamos observar um exemplo de texto onde contamos a frequência de palavras. O poema The Winners de Rudyard Kipling contém o seguinte verso: - -> O poema não foi traduzido, porém, basta observar as frequências. - -```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. -``` - -Dependendo do caso, pode ser necessário que a frequência de expressões considere variações de letras maiúsculas e minúsculas (case sensitive) ou não (case insensitive). Se desconsiderarmos a diferença entre maiúsculas e minúsculas, a expressão `a friend` possui frequência de 2 no poema e `the` tem frequência de 6, e a de `travels` é 2. - -### N-gramas - -Um texto pode ser dividido em sequências de palavras de certo tamanho, uma única palavra (unigrama), duas palavras (bigrama), três palavras (trigrama) ou qualquer número de palavras (n-gramas). - -Por exemplo, `A rápida raposa pula por cima do preguiçoso cão marrom` com um n-grama de tamanho 2 produz os seguintes n-gramas: - -1. a rápida -2. rápida raposa -3. raposa pula -4. pula por -5. por cima -6. cima do -7. do preguiçoso -8. preguiçoso cão -9. cão marrom - -Pode ser mais fácil visualizar o n-grama como uma caixa que desliza sobre a frase. Aqui está um exemplo dos n-gramas de 3 palavras, o n-grama está em negrito em cada frase: - -A rápida raposa pula por cima do preguiçoso cão marrom - -1. **A rápida raposa** pula por cima do preguiçoso cão marrom -2. A **rápida raposa pula** por cima do preguiçoso cão marrom -3. A rápida **raposa pula por** cima do preguiçoso cão marrom -4. A rápida raposa **pula por cima** do preguiçoso cão marrom -5. A rápida raposa pula **por cima do** preguiçoso cão marrom -6. A rápida raposa pula por **cima do preguiçoso** cão marrom -7. A rápida raposa pula por cima **do preguiçoso cão** marrom -8. A rápida raposa pula por cima do **preguiçoso cão marrom** - -![janela deslizante do n-gramas](../images/n-grams.gif) - -> N-grama de tamanho 3: Infográfico por [Jen Looper](https://twitter.com/jenlooper) - -### Extração de sujeito e objeto - -Na maioria das frases, existe um substantivo que é o sujeito ou o objeto da oração. Em português (e em inglês também), geralmente é possível identificá-los por serem precedidos por palavras como "a(s)" e "o(s)". Identificar o sujeito ou o objeto de uma oração é uma tarefa comum em PLN quando o objetivo é entender o significado de uma frase. - -✅ Nas frases "Não sei precisar a hora, ou o lugar, ou o olhar, ou as palavras que lançaram as bases. Faz muito tempo. Eu já estava no meio antes de me dar conta de que havia começado.", você consegue identificar os sujeitos e os objetos? - -Na frase `A rápida raposa pula por cima do preguiçoso cão marrom` existem dois substantivos **raposa** e **cão**, que, respectivamente, são sujeito e objeto. - -### Análise de sentimento - -Uma frase ou texto pode ser analisado para encontrar sentimento, ou avaliar o quão *positivo* ou *negativo* é. Sentimento é medido em *polaridade* e *objetividade/subjetividade*. Polaridade é medida de -1.0 a 1.0 (negativo a positivo) e objetividade/subjetividade é medida de 0.0 a 1.0 (mais objetivo a mais subjetivo). - -✅ Mais tarde você irá aprender que existem diferentes formas de se determinar sentimento usando aprendizado de máquina (machine learning), mas um jeito de fazer é ter uma lista de palavras e frases categorizadas como positivas ou negativas por um especialista humano e aplicar este modelo ao texto para calcular a pontuação da polaridade. Você consegue perceber como isso poderia funcionar melhor em alguns casos e pior em outros? - -### Inflexão/flexão - -A inflexão/flexão é a variação de uma palavra. Exemplos incluem flexão de número (singular/plural), gênero (feminino/masculino) e grau (aumentativo/diminutivo). - -### Lematização - -Um *lema* é uma palavra (ou conjunto de palavras) que é raiz ou termo base, como, por exemplo, *voa*, *voou*, *voando* são variações (lexemas) do verbo *voar*. - -Também existem databases úteis disponíveis para pesquisadores de PLN, particularmente: - -### WordNet - -[WordNet](https://wordnet.princeton.edu/) é uma database de palavras, sinônimos, antônimos e muitos outros detalhes para todas as palavras em muitas linguagens diferentes. É incrivelmente útil quando estamos tentando construir tradutores, verificadores de ortografia ou ferramentas de linguagem de qualquer tipo. - -## Bibliotecas de PLN - -Por sorte, você não precisa criar estas técnicas por si só, já que existem excelentes bibliotecas de Python disponíveis, que tornam o PLN muito mais acessível para desenvolvedores que não são especializados em processamento de linguagem natural ou machine learning. As próximas aulas incluem mais exemplos delas, mas aqui você irá aprender alguns exemplos úteis para te ajudar na próxima tarefa. - -### Exercício - usando a biblioteca `TextBlob` - -Iremos utilizar uma biblioteca chamada TextBlob, pois ela contém APIs convenientes para lidar com esse tipo de tarefa. O TextBlob "se apoia nos ombros dos gigantes [NLTK](https://nltk.org) e [pattern](https://github.com/clips/pattern), e funciona bem com ambos". Existe uma quantidade considerável de aprendizado de máquina embutido em sua API. - -> Nota: Um guia inicial ([Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart)) está disponível para o TextBlob e é recomendado para desenvolvedores Python. - -Quando estiver tentando identificar *sujeitos e objetos*, o TextBlob oferece diversas opções de extratores para encontrar ambos. - -1. Obeserve o `ConllExtractor`. - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # import and create a Conll extractor to use later - extractor = ConllExtractor() - - # later when you need a noun phrase extractor: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified - np = user_input_blob.noun_phrases - ``` - - > O que está acontecendo aqui? O [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) é "um extrator de sujeito e objeto que usa parsing/análise sintática de chunks, e é treinado com o ConLL-2000 training corpus." O nome ConLL-2000 é em referência à conferência 2000 Conference on Computational Natural Language Learning. Todo ano a conferência sedia um workshop para lidar com um problema difícil de NLP e, em 2000, foi o noun phrase chunking (divisão da frase em subcomponentes - como substantivos e verbos). Um modelo foi treinado no Wall Street Journal, com "seções 15-18 como dados de treino (211727 tokens) e a seção 20 como dados de teste (47377 tokens)". Você pode ver os procedimentos utilizados [aqui](https://www.clips.uantwerpen.be/conll2000/chunking/) e os resultados [aqui](https://ifarm.nl/erikt/research/np-chunking.html). - -### Desafio - melhorando seu bot com PLN - -Na aula anterior você construiu um bot de perguntas e respostas bastante simples. Agora, você vai fazer Marvin um pouco mais simpático ao analisar seu input em busca do sentimento e imprimindo a resposta de forma a combinar com ele. Você também vai precisar identificar um `sujeito ou objeto` e perguntar sobre. - -Seus passos quando estiver construindo um bot de conversação são: - -1. Imprima instruções indicando como o usuário pode interagir com o bot -2. Comece um loop (laço) - 1. Aceite o input do usuário - 2. Se o usuário pedir para sair, então sair - 3. Processar o input do usuário e determinar resposta adequada de acordo com o sentimento expressado no input - 4. Se um sujeito ou objeto for identificado no sentimento, torne o bot mais variado e pergunte por mais inputs sobre aquele tópico - 5. Imprima a resposta -3. Voltar para o passo 2 (continuando o loop/laço) - - -Aqui está um trecho de código que determina o sentimento usando TextBlob. Note que só existem quatro *gradientes* de resposta a sentimento (você pode ter mais, se quiser): - -> É feita uma divisão por valor de polaridade. Se estiver no intervalo, retorna respostas correspondentes: "Nossa, isso parece terrível", "Hmm, isso não parece muito bom", "Bom, isso parece positivo" e "Uau, isso soa ótimo" - -```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. " -``` - -Aqui estão alguns outputs de exemplo para te guiar (input do usuário está nas linhas que começam com >): - -```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! -``` - -Uma possível resposta para a tarefa está [aqui](../solution/bot.py) - -✅ Checagem de conhecimento - -1. Você acha que respostas simpáticas conseguiriam convencer uma pessoa a achar que o bot realmente entendeu o que ela disse? -2. Será que identificar sujeito e objeto tornam o bot mais convincente? -3. Porque você acha que extrair o sujeito e o objeto de uma oração é algo útil a se fazer? - ---- - - -## 🚀Desafio - -Implemente o bot discutido acima da seção checagem de conhecimento e teste-o em amigos. O bot consegue enganá-los? Você consegue fazer seu bot mais convincente? - -## [Teste pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34?loc=ptbr) - -## Revisão & Autoestudo - -Nas próximas aulas você vai aprender mais sobre análise de sentimento. Pesquise sobre esta técnica interessante em artigos como estes no [KDNuggets](https://www.kdnuggets.com/tag/nlp). - -## Tarefa - -[Faça um bot responder](assignment.pt-br.md) diff --git a/6-NLP/2-Tasks/translations/assignment.es.md b/6-NLP/2-Tasks/translations/assignment.es.md deleted file mode 100644 index 6895eada..00000000 --- a/6-NLP/2-Tasks/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Hacer que un Bot responda - -## Instrucciones - -En las lecciones anteriores, programaste un bot básico con el cual chatear. Este bot da respuestas aleatorias hasta que le digas 'bye'. ¿Puedes hacer las respuestas menos aleatorias, y activar respuestas si dices cosas específicas, como 'why' o 'how'? Piensa un poco en cómo el aprendizaje automático puede hacer este tipo de trabajo menos manual a medida que extiendes tu bot. Puedes usar las librerías NLTK o TextBlob para hacer tus tareas más fáciles. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | -| | Se presentó y documentó un nuevo archivo bot.py | Se presentó un nuevo archivo bot pero contiene fallos | No se presentó un archivo | diff --git a/6-NLP/2-Tasks/translations/assignment.it.md b/6-NLP/2-Tasks/translations/assignment.it.md deleted file mode 100644 index fddf44bc..00000000 --- a/6-NLP/2-Tasks/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Fare rispondere un bot - -## Istruzioni - -Nelle ultime lezioni, si è programmato un bot di base con cui chattare. Questo bot fornisce risposte casuali finché non si dice ciao ("bye"). Si possono rendere le risposte un po' meno casuali e attivare le risposte se si dicono cose specifiche, come "perché" o "come"? Si pensi a come machine learning potrebbe rendere questo tipo di lavoro meno manuale mentre si estende il bot. Si possono utilizzare le librerie NLTK o TextBlob per semplificare le attività. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | -| | Viene presentato e documentato un nuovo file bot.py | Viene presentato un nuovo file bot ma contiene bug | Non viene presentato un file | diff --git a/6-NLP/2-Tasks/translations/assignment.ko.md b/6-NLP/2-Tasks/translations/assignment.ko.md deleted file mode 100644 index d663714d..00000000 --- a/6-NLP/2-Tasks/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# Bot(봇)이 대답을 하게 만들어 보세요 - -## 설명 - -지난 수업에서 대화를 나눌 수 있는 간단한 봇을 만들어 보았습니다. 이 봇은 'bye(안녕)'라고 말할 때까지 엉뚱한 대답을 하며 대화를 이어 나갔었습니다. 이번에는 이 봇에게 'why(왜)' 또는 'how(어떻게)' 등을 사용해 구체적으로 질문을 할 경우 조금 덜 엉뚱하게 대답을 하도록 이끌어 낼 수 있을까요? 봇을 확장하여 기계학습(머신러닝)이 이러한 수작업을 어떻게 최소화 할 수 있을지 생각해 보시기 바랍니다. 좀 더 수월한 작업을 위해 NLTK 또는 TextBlob 라이브러리를 사용하셔도 됩니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | --------------------------------------------- | ------------------------------------ | ------------- | -| | 문서화 작업을 포함한 새로운 bot.py 파일을 제출함 | 새로운 봇 파일을 제출했으나 버그가 있음 | 봇 파일 미제출 | diff --git a/6-NLP/2-Tasks/translations/assignment.pt-br.md b/6-NLP/2-Tasks/translations/assignment.pt-br.md deleted file mode 100644 index 47123c6b..00000000 --- a/6-NLP/2-Tasks/translations/assignment.pt-br.md +++ /dev/null @@ -1,11 +0,0 @@ -# Faça um bot responder - -## Instruções - -Nas últimas aulas, você programou um simples bot de conversação. Ele retorna mensagens aleatórias até você dizer 'bye' (tchau). Você consegue fazer as respostas menos aleatórias e acionar certas respostas se você disser coisas específicas, como 'porque' ou 'como'? Pense um pouco sobre como o machine learning pode fazer este tipo de tarefa menos manual enquanto você melhora seu bot. Você pode usar as bibliotecas NLTK ou TextBlob para fazer seu trabalho mais fácil. - -## Rubrica - -| Critério | Exemplar | Adequado | Precisa melhorar | -| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | -| | Um novo arquivo bot.py foi apresentado e documentado | Um novo arquivo com bot foi apresentado, porém, contém bugs | Nenhum arquivo foi criado | diff --git a/6-NLP/3-Translation-Sentiment/translations/README.es.md b/6-NLP/3-Translation-Sentiment/translations/README.es.md deleted file mode 100644 index 58421434..00000000 --- a/6-NLP/3-Translation-Sentiment/translations/README.es.md +++ /dev/null @@ -1,187 +0,0 @@ -# Traducción y análisis de sentimiento con aprendizaje automático - -En las lecciones anteriores aprendiste cómo construir un bot básico usando `TextBlob`, una biblioteca que embebe aprendizaje automático tras bambalinas para realizar tareas básicas de procesamiento del lenguaje natural (NLP) tales como extracción de frases nominales. Otro desafío importante en la lingüística computacional es la _traducción_ precisa de una oración de un idioma hablado o escrito a otro. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35?loc=es) - -La traducción es siempre un problema difícil compuesto por el hecho que existen miles de idiomas y cada uno puede tener distintas reglas gramaticales. Un enfoque es convertir las reglas gramaticales formales para un idioma, como el Inglés, a una estructura no dependiente del idioma, y luego traducirlo al convertirlo de nuevo a otro idioma. Este enfoque significa que deberías realizar los siguientes pasos: - -1. **Identificacción**. Identifica o etiqueta las palabras en el idioma de entrada en sustantivos, verbos, etc. -2. **Crea la traducción**. Produce una traducción directa de cada palabra en el formato del idioma objetivo. - -### Oración de ejemplo, Inglés a Irlandés - -En 'Inglés', la oración _I feel happy_ es de 3 palabras en el orden: - -- **sujeto** (I) -- **verbo** (feel) -- **adjetivo** (happy) - -Sin embargo, en el idioma 'Irlandés', la misma oración tiene una estructura gramatical muy diferente - emociones como "*happy*" o "*sad*" se expresan como `being *upon* you`. - -La frase en Inglés `I feel happy` en Irlandés sería `Tá athas orm`. Una traducción *literal* sería `Happy is upon me`. - -Un hablante Irlandés al traducir al Inglés diría `I feel happy`, no `Happy is upon me`, porque el entiende el significado de la oración, aún si las palabras y la estructura de la oración son diferentes. - -El orden formal para la oración en Irlandés es: - -- **verbo** (Tá or is) -- **adjetivo** (athas, or happy) -- **sujeto** (orm, or upon me) - -## Traducción - -Un programa de traducción simple podría traducir sólo las palabras, ignorando la estructura de la oración. - -✅ Si has aprendido un segundo (o tercero o más) idioma como adulto, podrías haber comenzado pensando en tu idioma nativo, traduciendo un concepto palabra por palabra en tu cabeza al segundo idioma, y luego diciendo tu traducción. Esto es similar a lo que realizan los programas de traducción simple. ¡Es importante superar esta fase para lograr fluidez! - -La traducción simple lleva a malas (y algunas veces divertidas) traducciones: `I feel happy` se traduce literalmente a `Mise bhraitheann athas` en Irlandés. Lo cual significa (literalmente) `me feel happy` y no es una oración Irlandesa válida. Aún cuando el Inglés e Irlandés son idiomas hablados en dos islas vecinas muy cercanas, son idiomas muy diferentes con diferentes estructuras gramaticales. - -> Puedes ver más videos acerca de las tradiciones lingüísticas Irlandesas tales como [esta](https://www.youtube.com/watch?v=mRIaLSdRMMs) - -### Enfoques del aprendizaje automático - -Hasta ahora, hasta aprendido acerca de los enfoques a las reglas formales para el procesamiento del lenguaje natural. Otro enfoque es ignorar el significado de las palabras, y _en su lugar usar aprendizaje automático para detectar patrones_. Esto puede funcionar en traducciones si tienes demasiado texto (un *corpus*) o textos (*corpora*) tanto en el idioma origen como el destino. - -Por ejemplo, considera el caso de *Orgullo y Prejuicio*, una novela Ingles muy conocidad escrita por Jane Austen in 1813. Si consultas el libro en Inglés y una traducción humana del libro en *Francés*, podrías detectar frases en uno que están traducidas _idiomáticamente_ al otro. Lo cual harás en un minuto. - -Por ejemplo, cuando una frase en Inglés como `I have no money` se traduce literalmente al Francés, se convertiría en `Je n'ai pas de monnaie`. "Monnaie" es un 'falso cognado' francés, ya que 'money' y 'monnaie' no son sinónimos. Una mejor traducción que la humana sería `Je n'ai pas d'argent`, porque transmite mejor el significado de no tener dinero (en lugar de 'loose change' lo cual es el significado de 'monnaie'). - -![monnaie](../images/monnaie.png) - -> Imagen de [Jen Looper](https://twitter.com/jenlooper) - -Si un modelo de aprendizaje automático tiene suficientes traducciones humanas para construir un modelo sobre el cual basarse, puede mejorar la precisión de las traducciones al identificar patrones comunes en textos que han sido previamente traducidos por hablantes humanos expertos de ambos idiomas. - -### Ejercicio - traducción - -Puedes usar `TextBlob` para traducir oraciones. Prueba la famosa primer línea de **Orgullo y Prejuicio**: - -```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` hace un muy buen trabajo al traducir: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". - -Se podría discutir que la traducción de TextBlob es mucho más exacta, que la traducción Francesa de 1932 del libro por V. Leconte y 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." - -En este caso, la traducción proporcionada por el aprendizaje automático realiza un mejor trabajo que el traductor humano quien innecesariamente agrega palabras a las dichas por el autor para dar 'claridad'. - -> ¿Qué pasa aquí? ¿y por qué TextBlob es tan bueno al traducir? Bien, tras bambalinas, usa Google translate, una IA sofisticada capaz de analizar millones de frases y predecir las mejores cadenas para la tarea en cuestión. No ocurre nada manual aquí y tienes una conexión a internet para usar `blob.translate`. - -✅ Prueba unas oraciones más. ¿Cuál es mejor, la traducción del aprendizaje automático o la humana? ¿En qué casos? - -## Análisis de sentimiento - -Otra área donde el aprendizaje automático funciona muy bien es el análisis de sentimiento. Un enfoque de no aprendizaje automático al sentimiento es identificar las palabras y frases que son 'positivas' y 'negativas'. Luego, dada una nueva porción de texto, calcular el valor total de las palabras positivas, negativas y neutras para identificar el sentimiento en general. - -Este enfoque se puede engañar fácilmente como ya has visto en la tarea de Marvin - La oración `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` es una oración sarcástica y de sentimiento negativo, pero el algoritmo simple detecta 'great', 'wonderful', 'glad' como positivas y 'waste', 'lost' y 'dark' como negativas. El sentimiento general está influenciado por estas palabras contradictorias. - -✅ Detente un segundo y piensa en cómo transmitimos el sarcasmo como hablantes humanos. La inflexión del tono juega un gran rol. Intenta decir la frase "Well, that film was awesome" de distintas formas para descubrir cómo tu voz transmite el significado. - -### Enfoques del aprendizaje automático - -El enfoque del aprendizaje automático debería ser reunir manualmente los cuerpos de texto negativos y positivos - tweets, o reseñar de películas, o cualquier otra cosa donde el ser humano ha dado una calificación **y** una opinión escrita. Luego las técnicas de procesamiento del lenguaje natural pueden ser aplicadas a las opiniones y calificaciones, para que surjan los patrones (por ejemplo, las reseñas positivas de películas tienden a usar la frase 'merecedora del Oscar' más que las reseñas negativas, o las reseñas positivas de restaurantes dicen 'gourmet' mucho más que 'disgusting'). - -> ⚖️ **Ejemplo**: Si trabajaste en la oficina de un político y se debatía alguna ley nueva, los constituyentes pueden escribir a la oficina con correos electrónicos emitiendo su apoyo o rechazo a esa nueva ley. Digamos que te asignaron leer los correos electrónicos y ordenarlos en 2 pilas, *for* y *against*. Si hubiera muchos correos electrónicos, podrías estar abrumado al intentar leerlos todos. ¿No sería genial que un bot pudiera leerlos todos por ti, entenderlos y decirte a qué pila pertenecen? -> -> Una forma de lograrlo es usar aprendizaje automático. Entrenarías al modelo con una porción de los correos electrónicos de los que están en contra (*against*) y a favor (*for*). El modelo tendería a asociar frases y palabras con los lados en contra y a favor, *pero no entendería nada del contenido*, a menos que ciertas palabras y patrones fuesen más probables de aparecer en un correo clasificado como *against* o *for*. Podrías probarlo con algunos correo electrónicos que no usaste para entrenar el modelo, y ver si llegó a la misma conclusión que tú. Luego, una vez que estuvieses satisfecho con la precisión del modelo, podrías procesar correos posteriores sin necesidad de leer cada uno. - -✅ ¿Este proceso suena como algún proceso que has usado en lecciones previas? - -## Ejercicio - oraciones sentimentales - -El sentimiento se mide con una *polaridad* de -1 a 1, donde -1 es el sentimiento más negativo, y 1 el más positivo. El sentimiento también puede medirse con el puntaje de 0 a 1, para la objetividad (0) y la subjetividad (1). - -Da un vistazo más a *Orgullo y Prejuicio* de Jane Austen. El texto está disponible en [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). la muestra de abajo muestra un pequeño programa el cual analiza el sentimiento de las primer y última oraciones del libro y muestra su polaridad de sentimiento y el puntaje subjetivo/objetivo. - -Deberías usar la biblioteca `TextBlob` (descrita arriba) para determinar el sentimiento (`sentiment`) (no tienes que escribir tu propia calculadora de sentimiento) en la siguiente tarea. - -```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)) -``` - -Verás la siguiente salida: - -```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) -``` - -## Desafío - revisa la polaridad de sentimiento - -Tu tarea es determinar, usando la polaridad de sentimiento, si *Orgullo y Prejuicio* tiene más oraciones absolutamente positivas que absolutamente negativas. Para esta tarea, puedes asumir que un puntaje de polaridad de 1 o -1 es absolutamente positivo o negativo, respectivamente. - -**Pasos:** - -1. Descarga una [copia de Orgullo y Prejuicio](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) de Project Gutenberg como archivo .txt. Elimina los metadatos al inicio y final del archivo, dejando solo el texto original. -2. Abre el archivo en python y extrae los contenidos como una cadena. -3. Crea un TextBlob usando la cadena del libro -4. Analiza cada oración en el libro dentro de un ciclo - 1. Si la polaridad es 1 o -1 almacena la oración en un arreglo o lista de mensajes positivos o negativos -5. Al final, imprime todas las oraciones positivas y negativas (de forma separada) y el número de cada una. - -Aquí tienes una [solución de muestra](../solution/notebook.ipynb). - -✅ Verificación de conocimiento - -1. El sentimiento se basa en las palabras usadas en la oración, pero ¿el código *entiende* las palabras? -2. ¿Piensas que la polaridad del sentimiento es precisa, o en otras palabras, estás *de acuerdo* con los puntajes? - 1. En particular, ¿estás de acuerdo o en desacuerdo con la polaridad **positiva** absoluta de las siguientes oraciones? - * “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. Las siguientes 3 oraciones fueron puntuadas con un sentimiento positivo absoluto, pero leyendo atentamente, esas no son oraciones positivas. ¿Por qué el análisis de sentimiento piensa que fueron oraciones positivas? - * 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. ¿Estás de acuerdo o en desacuerdo con la polaridad absoluta **negativa** de las siguientes oraciones? - - 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! - -✅ Cualquier aficionado de Jane Austen entenderá que ella usa frecuentemente sus libros para criticar los aspectos más ridículo de la sociedad de la Regencia Inglesa. Elizabeth Bennett, el personaje principal en *Orgullo y Prejuicio*, es una aguda observadora social (como la autora) y su lenguaje es a menudo muy matizado. Incluso el Sr. Darcy (el interés amoroso en la historia) nota el lenguaje juguetón y burlón de Elizabeth: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." - ---- - -## 🚀Desafío - -¿Puedes hacer a Marvin aún mejor al extraer otras características de la entrada del usuario? - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36?loc=es) - -## Revisión y autoestudio - -Hay varias formas de extraer el sentimiento del texto. Piensa en las aplicaciones de negocios que podrían hacer uso de esta técnica. Piensa cómo puede salir mal. Lee más acerca de los sistemas sofisticados listos para empresas que analizan el sentimiento tal como [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). Prueba algunas de las oraciones de Orgullo y Prejuicio de arriba y observa si se pueden detectar matices. - -## Asignación - -[Licencia poética](assignment.es.md) diff --git a/6-NLP/3-Translation-Sentiment/translations/README.it.md b/6-NLP/3-Translation-Sentiment/translations/README.it.md deleted file mode 100644 index a902fc2b..00000000 --- a/6-NLP/3-Translation-Sentiment/translations/README.it.md +++ /dev/null @@ -1,187 +0,0 @@ -# Traduzione e analisi del sentiment con ML - -Nelle lezioni precedenti si è imparato come creare un bot di base utilizzando `TextBlob`, una libreria che incorpora machine learning dietro le quinte per eseguire attività di base di NPL come l'estrazione di frasi nominali. Un'altra sfida importante nella linguistica computazionale è _la traduzione_ accurata di una frase da una lingua parlata o scritta a un'altra. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/?loc=it) - -La traduzione è un problema molto difficile, aggravato dal fatto che ci sono migliaia di lingue e ognuna può avere regole grammaticali molto diverse. Un approccio consiste nel convertire le regole grammaticali formali per una lingua, come l'inglese, in una struttura non dipendente dalla lingua e quindi tradurla convertendola in un'altra lingua. Questo approccio significa che si dovrebbero eseguire i seguenti passaggi: - -1. **Identificazione**. Identificare o taggare le parole nella lingua di input in sostantivi, verbi, ecc. -2. **Creare la traduzione**. Produrre una traduzione diretta di ogni parola nel formato della lingua di destinazione. - -### Frase di esempio, dall'inglese all'irlandese - -In inglese, la frase _I feel happy_ (sono felice) è composta da tre parole nell'ordine: - -- **soggetto** (I) -- **verbo** (feel) -- **aggettivo** (happy) - -Tuttavia, nella lingua irlandese, la stessa frase ha una struttura grammaticale molto diversa - emozioni come "*felice*" o "*triste*" sono espresse come se fossero *su se stessi*. - -La frase inglese `I feel happy` in irlandese sarebbe `Tá athas orm`. Una traduzione *letterale* sarebbe `Happy is upon me` (felicità su di me). - -Un oratore irlandese che traduce in inglese direbbe `I feel happy`, non `Happy is upon me`, perché capirebbe il significato della frase, anche se le parole e la struttura della frase sono diverse. - -L'ordine formale per la frase in irlandese sono: - -- **verbo** (Tá o is) -- **aggettivo** (athas, o happy) -- **soggetto** (orm, o upon me) - -## Traduzione - -Un programma di traduzione ingenuo potrebbe tradurre solo parole, ignorando la struttura della frase. - -✅ Se si è imparato una seconda (o terza o più) lingua da adulto, si potrebbe aver iniziato pensando nella propria lingua madre, traducendo un concetto parola per parola nella propria testa nella seconda lingua, e poi pronunciando la traduzione. Questo è simile a quello che stanno facendo i programmi per computer di traduzione ingenui. È importante superare questa fase per raggiungere la fluidità! - -La traduzione ingenua porta a cattive (e talvolta esilaranti) traduzioni errate: `I feel happy` si traduce letteralmente in `Mise bhraitheann athas` in irlandese. Ciò significa (letteralmente) `me feel happy` e non è una frase irlandese valida. Anche se l'inglese e l'irlandese sono lingue parlate su due isole vicine, sono lingue molto diverse con strutture grammaticali diverse. - -> E' possibile guardare alcuni video sulle tradizioni linguistiche irlandesi come [questo](https://www.youtube.com/watch?v=mRIaLSdRMMs) - -### Approcci di machine learning - -Finora, si è imparato a conoscere l'approccio delle regole formali all'elaborazione del linguaggio naturale. Un altro approccio consiste nell'ignorare il significato delle parole e _utilizzare invece machine learning per rilevare i modelli_. Questo può funzionare nella traduzione se si ha molto testo (un *corpus*) o testi (*corpora*) sia nella lingua di origine che in quella di destinazione. - -Si prenda ad esempio il caso di *Pride and Prejudice (Orgoglio* e pregiudizio),un noto romanzo inglese scritto da Jane Austen nel 1813. Se si consulta il libro in inglese e una traduzione umana del libro in *francese*, si potrebberoi rilevare frasi in uno che sono tradotte *idiomaticamente* nell'altro. Si farà fra un minuto. - -Ad esempio, quando una frase inglese come `I have no money` (non ho denaro) viene tradotta letteralmente in francese, potrebbe diventare `Je n'ai pas de monnaie`. "Monnaie" è un complicato "falso affine" francese, poiché "money" e "monnaie" non sono sinonimi. Una traduzione migliore che un essere umano potrebbe fare sarebbe `Je n'ai pas d'argent`, perché trasmette meglio il significato che non si hanno soldi (piuttosto che "moneta spicciola" che è il significato di "monnaie"). - -![monnaie](../images/monnaie.png) - -> Immagine di [Jen Looper](https://twitter.com/jenlooper) - -Se un modello ML ha abbastanza traduzioni umane su cui costruire un modello, può migliorare l'accuratezza delle traduzioni identificando modelli comuni in testi che sono stati precedentemente tradotti da umani esperti parlanti di entrambe le lingue. - -### Esercizio - traduzione - -Si può usare `TextBlob` per tradurre le frasi. Provare la famosa prima riga di **Orgoglio e Pregiudizio**: - -```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` fa un buon lavoro con la traduzione: "C'est une vérité universalllement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". - -Si può sostenere che la traduzione di TextBlob è molto più esatta, infatti, della traduzione francese del 1932 del libro di V. Leconte e Ch. Pressoir: - -"C'est une vérité universelle qu'un celibataire 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 residence, 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." - -In questo caso, la traduzione informata da ML fa un lavoro migliore del traduttore umano che mette inutilmente parole nella bocca dell'autore originale per "chiarezza". - -> Cosa sta succedendo qui? e perché TextBlob è così bravo a tradurre? Ebbene, dietro le quinte, utilizza Google translate, una sofisticata intelligenza artificiale in grado di analizzare milioni di frasi per prevedere le migliori stringhe per il compito da svolgere. Non c'è niente di manuale in corso qui e serve una connessione Internet per usare `blob.translate`. - -✅ Provare altre frasi. Qual'è migliore, ML o traduzione umana? In quali casi? - -## Analisi del sentiment - -Un'altra area in cui l'apprendimento automatico può funzionare molto bene è l'analisi del sentiment. Un approccio non ML al sentiment consiste nell'identificare parole e frasi che sono "positive" e "negative". Quindi, dato un nuovo pezzo di testo, calcolare il valore totale delle parole positive, negative e neutre per identificare il sentimento generale. - -Questo approccio è facilmente ingannabile come si potrebbe aver visto nel compito di Marvin: la frase `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` (Grande, è stata una meravigliosa perdita di tempo, sono contento che ci siamo persi su questa strada oscura) è una frase sarcastica e negativa, ma il semplice algoritmo rileva 'great' (grande), 'wonderful' (meraviglioso), 'glad' (contento) come positivo e 'waste' (spreco), 'lost' (perso) e 'dark' (oscuro) come negativo. Il sentimento generale è influenzato da queste parole contrastanti. - -✅ Si rifletta un momento su come si trasmette il sarcasmo come oratori umani. L'inflessione del tono gioca un ruolo importante. Provare a dire la frase "Beh, quel film è stato fantastico" in modi diversi per scoprire come la propria voce trasmette significato. - -### Approcci ML - -L'approccio ML sarebbe quello di raccogliere manualmente corpi di testo negativi e positivi: tweet, recensioni di film o qualsiasi cosa in cui l'essere umano abbia assegnato un punteggio *e* un parere scritto. Quindi le tecniche di NPL possono essere applicate alle opinioni e ai punteggi, in modo che emergano modelli (ad esempio, le recensioni positive di film tendono ad avere la frase "degno di un Oscar" più delle recensioni di film negative, o le recensioni positive di ristoranti dicono "gourmet" molto più di "disgustoso"). - -> ⚖️ **Esempio**: se si è lavorato nell'ufficio di un politico e c'era qualche nuova legge in discussione, gli elettori potrebbero scrivere all'ufficio con e-mail a sostegno o e-mail contro la nuova legge specifica. Si supponga che si abbia il compito di leggere le e-mail e ordinarle in 2 pile, *pro* e *contro*. Se ci fossero molte e-mail, si potrebbe essere sopraffatti dal tentativo di leggerle tutte. Non sarebbe bello se un bot potesse leggerle tutte, capirle e dire a quale pila apparteneva ogni email? -> -> Un modo per raggiungere questo obiettivo è utilizzare machine learning. Si addestrerebbe il modello con una parte delle email *contro* e una parte delle email *per* . Il modello tenderebbe ad associare frasi e parole con il lato contro o il lato per, *ma non capirebbe alcun contenuto*, solo che è più probabile che alcune parole e modelli in una email appaiano in un *contro* o in un *pro*. Si potrebbe fare una prova con alcune e-mail non usate per addestrare il modello e vedere se si arriva alla stessa conclusione tratta da un umano. Quindi, una volta soddisfatti dell'accuratezza del modello, si potrebbero elaborare le email future senza doverle leggere tutte. - -✅ Questo processo ricorda processi usati nelle lezioni precedenti? - -## Esercizio - frasi sentimentali - -Il sentimento viene misurato con una *polarità* da -1 a 1, il che significa che -1 è il sentimento più negativo e 1 è il più positivo. Il sentimento viene anche misurato con un punteggio 0 - 1 per oggettività (0) e soggettività (1). - -Si dia un'altra occhiata a *Orgoglio e pregiudizio* di Jane Austen. Il testo è disponibile qui su [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). L'esempio seguente mostra un breve programma che analizza il sentimento della prima e dell'ultima frase del libro e ne mostra la polarità del sentimento e il punteggio di soggettività/oggettività. - -Si dovrebbe utilizzare la libreria `TextBlob` (descritta sopra) per determinare il `sentiment` (non si deve scrivere il proprio calcolatore del sentimento) nella seguente attività. - -```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)) -``` - -Si dovrebbe ottenere il seguente risultato: - -```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) -``` - -## Sfida: controllare la polarità del sentimento - -Il compito è determinare, usando la polarità del sentiment, se *Orgoglio e Pregiudizio* ha più frasi assolutamente positive di quelle assolutamente negative. Per questa attività, si può presumere che un punteggio di polarità di 1 o -1 sia rispettivamente assolutamente positivo o negativo. - -**Procedura:** - -1. Scaricare una [copia di Orgoglio e pregiudizio](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) dal Progetto Gutenberg come file .txt. Rimuovere i metadati all'inizio e alla fine del file, lasciando solo il testo originale -2. Aprire il file in Python ed estrare il contenuto come una stringa -3. Creare un TextBlob usando la stringa del libro -4. Analizzare ogni frase del libro in un ciclo - 1. Se la polarità è 1 o -1, memorizzare la frase in un array o in un elenco di messaggi positivi o negativi -5. Alla fine, stampare tutte le frasi positive e negative (separatamente) e il numero di ciascuna. - -Ecco una [soluzione](../solution/notebook.ipynb) di esempio. - -✅ Verifica delle conoscenze - -1. Il sentimento si basa sulle parole usate nella frase, ma il codice *comprende* le parole? -2. Si ritiene che la polarità del sentimento sia accurata o, in altre parole, si è *d'accordo* con i punteggi? - 1. In particolare, si è d'accordo o in disaccordo con l'assoluta polarità **positiva** delle seguenti frasi? - * What an excellent father you have, girls! (Che padre eccellente avete, ragazze!) said she, when the door was shut. (disse lei, non appena si chiuse la porta). - * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” ("Il vostro esame di Mr. Darcy è finito, presumo", disse Miss Bingley; "e vi prego qual è il risultato?") “I am perfectly convinced by it that Mr. Darcy has no defect. (Sono perfettamente convinta che il signor Darcy non abbia difetti). - * How wonderfully these sort of things occur! (Come accadono meravigliosamente questo genere di cose!). - * I have the greatest dislike in the world to that sort of thing. (Ho la più grande antipatia del mondo per quel genere di cose). - * Charlotte is an excellent manager, I dare say (Charlotte è un'eccellente manager, oserei dire). - * “This is delightful indeed! (“Questo è davvero delizioso!) - * I am so happy! (Che gioia!) - * Your idea of the ponies is delightful. (La vostra idea dei pony è deliziosa). - 2. Le successive 3 frasi sono state valutate con un sentimento assolutamente positivo, ma a una lettura attenta, non sono frasi positive. Perché l'analisi del sentiment ha pensato che fossero frasi positive? - * 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. (Come sarò felice, quando il suo soggiorno a Netherfield sarà finito!» "Vorrei poter dire qualcosa per consolarti", rispose Elizabeth; “ma proprio non ci riesco). - * If I could but see you as happy! (Se solo potessi vederti felice!) - * Our distress, my dear Lizzy, is very great. (La nostra angoscia, mia cara Lizzy, è devvero grande). - 3. Sei d'accordo o in disaccordo con la polarità **negativa** assoluta delle seguenti frasi? - - Everybody is disgusted with his pride. (Tutti sono disgustati dal suo orgoglio). - - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. ("Vorrei sapere come si comporta in mezzo agli estranei." "Allora sentirete, ma preparatevi a qualcosa di terribile). - - The pause was to Elizabeth’s feelings dreadful. (La pausa fu terribile per i sentimenti di Elizabeth). - - It would be dreadful! (Sarebbe terribile!) - -✅ Qualsiasi appassionato di Jane Austen capirebbe che usa spesso i suoi libri per criticare gli aspetti più ridicoli della società inglese Regency. Elizabeth Bennett, la protagonista di *Orgoglio e pregiudizio,* è un'attenta osservatrice sociale (come l'autrice) e il suo linguaggio è spesso pesantemente sfumato. Anche Mr. Darcy (l'interesse amoroso della storia) nota l'uso giocoso e canzonatorio del linguaggio di Elizabeth: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." ("Ho il piacere di conoscervi da abbastanza tempo per sapere quanto vi divertiate a esprimere di tanto in tanto delle opinioni che in realtà non vi appartengono") - ---- - -## 🚀 Sfida - -Si può rendere Marvin ancora migliore estraendo altre funzionalità dall'input dell'utente? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/?loc=it) - -## Revisione e Auto Apprendimento - -Esistono molti modi per estrarre il sentiment dal testo. Si pensi alle applicazioni aziendali che potrebbero utilizzare questa tecnica. Pensare a cosa potrebbe andare storto. Ulteriori informazioni sui sistemi sofisticati pronti per l'azienda che analizzano il sentiment come l'[analisi del testo di Azure](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). Provare alcune delle frasi di Orgoglio e Pregiudizio sopra e vedere se può rilevare sfumature. - -## Compito - -[Licenza poetica](assignment.it.md) diff --git a/6-NLP/3-Translation-Sentiment/translations/README.ko.md b/6-NLP/3-Translation-Sentiment/translations/README.ko.md deleted file mode 100644 index 1ae01cdc..00000000 --- a/6-NLP/3-Translation-Sentiment/translations/README.ko.md +++ /dev/null @@ -1,188 +0,0 @@ -# ML로 번역하고 감정 분석하기 - -이전 강의에서 noun phrase 추출하는 기초 NLP 작업을 하기 위해 ML behind-the-scenes을 포함한 라이브러리인, `TextBlob`으로 기본적인 봇을 만드는 방식을 배웠습니다. 컴퓨터 언어학에서 다른 중요한 도전은 구두나 다른 언어로 문장을 정확하게 _translation_ 하는 것입니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) - -번역은 천여 개 언어와 각자 많이 다른 문법 규칙이 있다는 사실에 의해서 합쳐진 매우 어려운 문제입니다. 한 접근 방식은 영어처럼, 한 언어의 형식적인 문법 규칙을 비-언어 종속 구조로 변환하고, 다른 언어로 변환하면서 번역합니다. 이 접근 방식은 다음 단계로 진행된다는 점을 의미합니다: - -1. **Identification**. nouns, verbs 등으로 입력하는 언어의 단어를 식별하거나 태그를 답니다. -2. **Create translation**. 타겟 언어 포맷의 각 단어로 바로 번역합니다. - -### 예시 문장, 영어를 아일랜드어로 - -'영어'에서, _I feel happy_ 문장은 순서대로 3개 단어가 이루어집니다: - -- **subject** (I) -- **verb** (feel) -- **adjective** (happy) - -그러나, '아일랜드' 언어에서, 같은 문장은 매우 다른 문법적인 구조를 가지고 있습니다 - "*happy*" 또는 "*sad*" 같은 감정이 *다가오는* 것으로 표현되었습니다. - -아일랜드어로 `Tá athas orm`인 영어 표현은 `I feel happy`입니다. *문자 그대로* 번역하면 `Happy is upon me`입니다. - -영어로 번역하는 아일랜드 사람은 `I feel happy`라고 말하며, `Happy is upon me`는 아니라고 합니다, -그 이유는 단어와 문장 구조가 다르다면, 문장의 의미를 이해하는 게 달라진다고 생각했기 때문입니다. - -아일랜드어 문장의 형식적인 순서는 이렇습니다: - -- **verb** (Tá or is) -- **adjective** (athas, or happy) -- **subject** (orm, or upon me) - -## 번역 - -전문적이지 않은 변역 프로그램은 문장 구조를 무시하고, 단어만 번역할 수 있습니다. - -✅ 만약 성인이 되고나서 두번째 (혹은 세 번보다 더 많은) 언어를 배웠다면, 번역문을 말할 때, 모국어로 생각하고 머리 속 개념으로 두번째 언어를 번역했을 것입니다. 전문적이지 않은 번역 프로그램이 하는 일과 유사합니다. 유창하게 하려면 이 단계를 넘기는 것이 중요합니다! - -전문적이지 않은 번역은 나쁘고 (그리고 때떄로 명쾌한) 잘 못된 번역으로 될 수 있습니다: 아일랜드어에서 `Mise bhraitheann athas`는 문자 그대로 `I feel happy`로 번역합니다. (문자 그대로) `me feel happy`를 의미하지만 올바른 아일랜드어 문장은 아닙니다. 영어와 아일랜드어는 섬에 가깝게 붙어서 사용하는 언어지만, 다른 문법 구조로 인해서 매우 다른 언어가 되었습니다. - -> [this one](https://www.youtube.com/watch?v=mRIaLSdRMMs)에서 아일랜드 언어 전통에 관련한 약간의 비디오를 시청할 수 있습니다. - -### 머신러닝 접근 방식 - -아직, natural language processing 에 형식적인 룰 접근하는 방식에 대하여 배웠습니다. 다른 접근 방식은 단어의 의미를 무시하고, _대신 머신러닝으로 패턴을 감지_ 하는 방식입니다. 만약 원본과 타겟 언어 모두에 많은 텍스트 (a *corpus*) 또는 몇 텍스트 (*corpora*)를 가진다면 번역할 수 있습니다. - -예시로, 1813년에 Jane Austen이 쓴 잘 알려진 영어 소설, *Pride and Prejudice* 케이스를 고려해봅니다. 만약 영어로 된 책과 *French*로 되어 번역한 책을 참고해보면, _idiomatically_ 가 다르게 번역된 구문을 찾을 수 있습니다. 몇 분에 할 수 있습니다. - -예시로, `I have no money` 같은 영어 구문을 불어로 그대로 번역할 때, `Je n'ai pas de monnaie`로 될 수 있습니다. "Monnaie"는 'money' 와 'monnaie'가 동의어가 아니므로, 까다로운 불어 'false cognate' 입니다. 돈이 없다는 ('monnaie' 의미인 'loose change' 보다) 의미를 더 잘 전달할 수 있기 때문에, 사람이 만들 수 있는 더 좋은 번역은 `Je n'ai pas d'argent` 일 것 입니다. - -![monnaie](../images/monnaie.png) - -> Image by [Jen Looper](https://twitter.com/jenlooper) - -만약 ML 모델에 이를 만들 충분한 수동 번역이 되는 경우, 언어에 다 능숙한 사람이 이전에 번역한 텍스트에서 공통적인 패턴을 식별하여 번역의 정확도를 향상시킬 수 있습니다. - -### 연습 - 번역 - -`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!". - -사실은, V. Leconte and Ch. Pressoir 책의 1932년 불어 번역보다, TextBlob의 번역이 더 정확하다고 주장할 수 있습니다: - -"C'est une vérité universelle qu'un celibataire 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 residence, 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." - -이 케이스는, 'clarity'하게 원저자가 불필요한 단어를 넣는 수작업 번역보다 ML에서 제안하는 번역이 더 좋게 작업합니다. - -> 어떤가요? TextBlob이 더 좋게 번역되는 이유는 무엇인가요? 음, 그 뒤에는, 수작업으로 가장 적당한 문자열을 예측한 수백만 문장을 파싱할 수 있는 정교한, AI Google 번역을 사용하고 있습니다. 여기에 수동으로 진행되지 않고, `blob.translate`를 사용하려면 인터넷 연결이 필요합니다. - -✅ 몇 문장을 더 시도해봅니다. ML이나 수작업 번역 중에, 어떤 게 좋나요? 어떤 케이스에서 말이죠? - -## 감정 분석 - -머신러닝이 감정 분석을 더 잘 작업하는 것은 다른 영역입니다. 감정에 대한 비-ML 방식은 'positive' 와 'negative'인 단어와 구문를 식별합니다. 그러면, 새로운 텍스트의 조각이 주어졌을 때, 긍정, 부정과 중립 단어의 모든 값을 계산하여 전체적인 감정을 식별합니다. - -이 방식은 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' 구문을 부정적인 영화 리뷰보다 더 많이 사용하는 경향이 있으며 긍정적인 레스토랑 리뷰는 'disgusting'보다 'gourmet'라고 더 말하는 경향이 있습니다). - -> ⚖️ **Example**: 만약 정치인 사무실에서 일하고 있으며 새 법을 검토하면, 선거권자들은 새로운 법에 대한 서포팅하거나 반대하는 메일을 사무실로 보낼 수 있습니다. 이메일을 읽고 *for*와 *against* 기준으로 2 파일로 분류하는 일을 한다고 가정합니다. 만약 많은 메일을 받으면, 모든 것을 읽으려고 시도하다가 숨막힐 수 있습니다. 만약 봇이 모든 것을 읽고 이해해서 이메일이 어느 파일에 속하는지 알려줄 수 있다면, 좋을 수 있나요? -> -> 하나의 방식은 머신러닝을 사용해서 이루어내는 것입니다. 이메일의 *against* 일부와 *for* 일부를 모델에 훈련합니다. 모델은 구문과 단어를 찬성과 반대 측면으로 연관하려는 경향이 있지만, *모든 컨텐츠를 이해하지 못하고*, 오직 특정 단어와 패턴이 *against* 또는 *for* 이메일에 나타날 것 같다는 것만 알게됩니다. 모델을 훈련하지 않은 몇 이메일로 테스트할 수 있으며, 같은 결말이 나왔다는 것을 볼 수 있습니다. 그렇게, 모델의 정확도를 만족하게 된다면, 각자 읽을 필요없이 이후 이메일을 처리할 수 있습니다. - -✅ 이 프로세스가 이전 강의에서 사용했던 것처럼 들리나요? - -## 연습 - 감정적인 문장 - -감정은 -1 에서 1로 *polarity* 측정하며, 가장 부정적인 문장은 -1 으로 의미하고, 그리고 1은 가장 긍정적입니다. 감정은 objectivity (0) 와 subjectivity (1)를 0 - 1 점으로 측정하기도 합니다. - -Jane Austen의 *Pride and Prejudice*를 다르게 봅니다. 텍스트는 [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm)에서 존재합니다. 샘플은 책 처음과 마지막 문장의 감정을 분석하고 감정 polarity와 subjectivity/objectivity 점수를 출력하는 짧은 프로그램이며 다음과 같이 보여집니다. - -다음 작업에서 (설명한) `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) -``` - -## 도전 - 감정 polarity 확인 - -만약 *Pride and Prejudice*가 절대적 부정적인 내용보다 긍정적인 문장이 더 있다면, 작업은 감정 polarity로 탐지합니다. 이 작업에서, 1 or -1 polarity 점수가 각자 절대적으로 positive 하거나 negative 하다고 생각할 수 있습니다. - -**단계:** - -1. .txt 파일로 이루어진 Project Gutenberg의 [copy of Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm)를 내려받습니다. 파일의 시작과 끝에 있는 메타데이터를 제거해서, 원본 텍스트만 남깁니다 -2. Python으로 파일을 열고 문자열로 컨텐츠를 풉니다 -3. 책의 문자열로 TextBlob을 만듭니다 -4. 책의 각 문장을 반복해서 분석합니다 - 1. 만약 polarity가 1 또는 -1이면 문장을 배열이나 positive 또는 negative 메시지 리스트에 저장합니다 -5. 마지막으로, (각자) 모든 긍정적인 문장과 부정적인 문장, 각 수를 출력합니다 - -여기에 샘플 [solution](../solution/notebook.ipynb)이 있습니다. - -✅ 지식 점검 - -1. 감정은 문장에서 사용된 단어를 기반하지만, 코드는 단어를 *이해하나요*? -2. 감정 polarity가 정확하다고 생각하거나, 다시 말하면, 점수에 *동의* 하나요? - 1. 특히나, 다음 문장이 절대적으로 **긍정** polarity라는 점을 동의하거나 거부하나요? - * “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. 다음 문장을 절대적인 **부정** polarity로 동의하거나 거부하나요? - - 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! - -✅ 모든 Jane Austen의 팬은 자주 자신의 책으로 English Regency 사회의 말도 안되는 측면을 비판하는 것을 이해합니다. *Pride and Prejudice*의 주요 캐릭터인 Elizabeth Bennett은, (작성자 같은) 예민한 소셜 옵저버이며 그녀의 언어는 가끔 뉘앙스가 미묘합니다. 심지어 Mr. Darcy (이야기에 흥미로운 것을 좋아하는 자)도 Elizabeth의 장난스럽고 놀리는 언어를 주목합니다: "I have had the pleasure of your acquaintance long enough to know that you find great enjoyment in occasionally professing opinions which in fact are not your own." - ---- - -## 🚀 도전 - -사용자 입력으로 다른 features를 추출해서 Marvin을 더 좋게 만들 수 있나요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) - -## 검토 & 자기주도 학습 - -텍스트에서 감정을 추출하는 많은 방식이 있습니다. 이 기술로 사용할 수 있는 비지니스 애플리케이션을 생각해봅니다. 어떻게 틀릴 수 있는지도 생각해봅니다. [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) 같이 감정 분석을 하는 정교한 enterprise-ready 시스템에 대하여 읽어봅니다. Pride and Prejudice 일부 문장에서 미묘한 차이를 감지할 수 있는지 테스트 합니다. - -## 과제 - -[Poetic license](../assignment.md) diff --git a/6-NLP/3-Translation-Sentiment/translations/assignment.es.md b/6-NLP/3-Translation-Sentiment/translations/assignment.es.md deleted file mode 100644 index 65272590..00000000 --- a/6-NLP/3-Translation-Sentiment/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Licencia poética - -## Instrucciones - -En [este notebook](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) puedes encontrar más de 500 poemas de Emily Dickinson previamente analizados por sentimiento usando análisis de texto de Azure. Usando este conjunto de datos, analízalo usando las técnicas descritas en la lección. ¿El sentimiento sugerido de un poema coincide con la decisión más sofisticada del servicio de Azure? ¿En tu opinión por qué o por qué no? ¿Algo te sorprende? - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | -| | Se presentó un notebook con un análisis sólido de una muestra de salida del autor | El notebook se presenta incompleto o no ejecuta el análisis | No se presentó un notebook | diff --git a/6-NLP/3-Translation-Sentiment/translations/assignment.it.md b/6-NLP/3-Translation-Sentiment/translations/assignment.it.md deleted file mode 100644 index 1b786ba2..00000000 --- a/6-NLP/3-Translation-Sentiment/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Licenza poetica - -## Istruzioni - -In [questo notebook](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) si possono trovare oltre 500 poesie di Emily Dickinson precedentemente analizzate per il sentiment utilizzando l'analisi del testo di Azure. Utilizzando questo insieme di dati, analizzarlo utilizzando le tecniche descritte nella lezione. Il sentimento suggerito di una poesia corrisponde alla decisione più sofisticata del servizio Azure? Perché o perché no, secondo il proprio parere? C’è qualcosa che sorprende? - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | -| | Un notebook viene presentato con una solida analisi del risultato da un campione di un autore | Il notebook è incompleto o non esegue l'analisi | Nessun notebook presentato | diff --git a/6-NLP/3-Translation-Sentiment/translations/assignment.ko.md b/6-NLP/3-Translation-Sentiment/translations/assignment.ko.md deleted file mode 100644 index 82e6286b..00000000 --- a/6-NLP/3-Translation-Sentiment/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 시적 허용 - -## 설명 - -이전에 Azure의 Text Analytics 서비스를 사용해 감성 분석에 사용된 500편이 넘는 Emily Dickinson(에밀리 디킨슨)의 시를 이 [Notebook(노트북)](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency)에서 찾을 수 있습니다. 이번 수업에서 알아본 기술들을 사용해 이 데이터셋을 분석해 보시기 바랍니다. 감성 분석 결과가 Azure의 Text Analytics 서비스 보다 좋나요? 왜 그런 결과가 나왔다고 생각하나요? 뜻밖의 놀라운 점은 없나요? - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ---------------------------------------------- | --------------------------------------- | -------------------- | -| | 결과물의 표본에 대한 충실한 분석을 노트북에 선보임 | 노트북이 미완성이거나 분석을 포함하지 않음 | 노트북을 제출하지 않음 | diff --git a/6-NLP/4-Hotel-Reviews-1/translations/README.es.md b/6-NLP/4-Hotel-Reviews-1/translations/README.es.md deleted file mode 100644 index 5cf3be9c..00000000 --- a/6-NLP/4-Hotel-Reviews-1/translations/README.es.md +++ /dev/null @@ -1,415 +0,0 @@ -# Análisis de sentimiento con reseñas de hoteles - procesando los datos - -En esta sección usarás las técnicas de las lecciones anteriores para hacer un ańalisis exploratorio de datos de un gran conjunto de datos. Una vez que tengas un buen entendimiento de la utilidad de las distintas, aprenderás: - -- cómo eliminar las columnas innecesarias -- cómo calcular algunos datos nuevos basándote en las columnas existentes -- cómo guardar el conjunto de datos resultante para usarlo en el desafío final - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37?loc=es) - -### Introducción - -hasta ahora has aprendido acerca de cómo los datos de texto es muy diferente a los tipos de datos numéricos. Si el texto fue escrito o hablado por un humano, si puede ser analizado para encontrar patrones y frecuencias, sentimiento y significado. Este lección te lleva a un conjunto de datos reales con un desafío real: **[515K datos de reseñas de hoteles en Europa](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** e incluye una [licencia de dominio público: CC0](https://creativecommons.org/publicdomain/zero/1.0/). Se obtuvo mediante scraping de Booking.com de fuentes públicas. El creador del conjunto de datos fue Jiashen Liu. - -### Preparación - -Necesitarás: - -* La habilidad de ejecutar notebooks .ipynb usando Python 3 -* pandas -* NLTK, [la cual deberías instalar localmente](https://www.nltk.org/install.html) -* El conjunto de datos el cual está disponible en Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). El cual de alrededor de 230MB desempequetado. Descargalo en el directorio raíz `/data` asociado con estas lecciones de NLP. - -## Análisis exploratorio de datos - -Este desafío asume que estás construyendo un bot de recomendación de hoteles usando análisis de sentimiento y puntajes de reseñas de huéspedes. El conjunto de datos que usarás incluye reseñas de 1493 hoteles distintos en 6 ciudades. - -Usando Python, un conjunto de datos de reseñas de hoteles y análisis de sentimiento de NLTK podrías encontrar: - -* ¿Cuáles son las frases y palabras usadas con mayor frecuencia en las reseñas? -* ¿Las *etiquetas* oficiales que describen un hotel se correlacionan con los puntajes de las reseñas (por ejemplo son más negativas para un hotel en particular de *Familia con niños pequeños* que *viajero solitario*, quizá indicando que es mejor para *viajeros solitarios*)? -* ¿Los puntajes de sentimiento de NLTK 'concuerdan' (agree) con los puntajes numéricos de quién reseña el hotel? - -#### Conjuntos de datos - -Exploremos el conjunto de datos que descargaste y guardaste de forma local. Abre el archivo en un editor como VS Code o Excel. - -Los encabezados en el conjunto de datos se ven así: - -*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* - -Aquí están agrupados de cierta forma que sean fáciles de examinar: -##### Columnas Hotel - -* `Hotel_Name`, `Hotel_Address`, `lat` (latitud), `lng` (longitud) - * Usando *lat* y *lng* podrías graficar un map con Python mostrando las ubicaciones de hoteles (quiźa usando un código de colores para las reseñas positivas y negativas) - * Hotel_Address obviamente no nos es útil, y probablemente la reemplazaremos con un país para una búsqueda y ordenamiento más fácil. - -**Columnas Hotel Meta-review** - -* `Average_Score` - * De acuerdo al creador del conjunto de datos, esta columna es el *Puntaje promedio del hotel, basado en el último comentario del último año*. Esto parece una forma inusual de calcular el puntaje, pero son los datos extraídos por lo que podemos tomarlos como valor por ahora. - ✅ Basado en las otras columnas de estos datos, ¿puedes pensar en otra forma de calcular el puntaje promedio? - -* `Total_Number_of_Reviews` - * El número total de reseñas que ha recibido este hotel. No está claro (sin escribir algo de código) si esto se refiere a las reseñas en el conjunto de datos. -* `Additional_Number_of_Scoring` - * Esto significa que se dió un puntaje de reseña pero no se escribió reseña positiva o negativa por el crítico. - -**Columnas Review** - -- `Reviewer_Score` - - Este es un valor numérico con máximo 1 posición decimal entre los valores máximos y mínimos de 2.5 y 10 - - No se explica por qué 2.5 es el puntaje más bajo posible -- `Negative_Review` - - Si un crítico no escribió nada, este campo tendrá "**No Negative**" - - Nota que un crítico puede escribir una reseña positiva en la columna de reseña negativa (por ejemplo, "there is nothing bad about this hotel") -- `Review_Total_Negative_Word_Counts` - - El conteo de palabras negativas más altas indica un puntaje más bajo (sin revisar el sentimentalismo) -- `Positive_Review` - - Si un crítico no escribió nada, este campo tendrá "**No Positive**" - - Nota que un cŕitico puede escribir una reseña negativa en la columna de reseña positiva (por ejemplo, "there is nothing good about this hotel at all") -- `Review_Total_Positive_Word_Counts` - - El conteo de palabras positivas más altas indica un puntaje más alto (sin revisar el sentimentalismo) -- `Review_Date` y `days_since_review` - - Una medida de frescura o ranciedad puede aplicarse a una reseña (las reseñas más biejas pueden no ser tan precisas como las nuevas ya que la administración del hotel ha cambiado, o se hicieron remodelaciones, o se agregó una alberca, etc.) -- `Tags` - - Estas son breves descriptores que un crítico puede seleccionar para describir el tipo de huéspesd que fueron (ejemplo, `solo` o `family`), el tipo de cuarto que se les asignó, la duración de la estancia y cómo se envió la reseña. - - Desafortunadamente, el usar estas etiquetas es problemático, revisa la sección de abajo la cual discute su utilidad - -**Columnas Reviewer** - -- `Total_Number_of_Reviews_Reviewer_Has_Given` - - Esta podría ser un factor en un modelo de recomendación, por ejemplo, si pudieras determinar que los críticos más prolíficos con cientos de reseñas tendieran a ser más negativos que positivos. Sin embargo, el crítico de cualquier reseña en particular no se identifica con un código único, y por lo tanto no puede ser vinculado a un conjunto de reseñas. Hay 30 críticos con 100 reseñas o más, pero es díficil ver cómo esto puede ayudar al modelo de recomendación. -- `Reviewer_Nationality` - - Algunas personas podrían pensar que ciertas nacionalidades tienden dar una reseña positiva o negatica debido a una inclinación nacional. Sea cuidadoso al construir dichas vistas anecdóticas en tus modelos. Estos son estereotipos nacionales (y algunas veces raciales), y cada crítico fue un individuo que escribió una reseña basándose en su experiencia. Podría haber sido filtrado a través de varios lentes tal como sus estadías anteriores en hoteles, la distancia viajada, y su temperamento personal. Pensar que su nacionalidad fue el motivo del puntaje de una reseña es difícil de justificar. - -##### Ejemplos - -| Average Score | Total Number Reviews | Reviewer Score | Negative
Review | Positive Review | Tags | -| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | -| 7.8 | 1945 | 2.5 | This is currently not a hotel but a construction site I was terrorized from early morning and all day with unacceptable building noise while resting after a long trip and working in the room People were working all day i e with jackhammers in the adjacent rooms I asked for a room change but no silent room was available To make things worse I was overcharged I checked out in the evening since I had to leave very early flight and received an appropriate bill A day later the hotel made another charge without my consent in excess of booked price It's a terrible place Don't punish yourself by booking here | Nothing Terrible place Stay away | Business trip Couple Standard Double Room Stayed 2 nights | - -Como puedes ver, este huésped no tuvo una estancia agradable en el hotel. El hotel tiene un puntaje promedio bueno de 7.8 y 1945 reseñas, pero este crítico le dió 2.5 y escribió 115 palabras acerca de qué tan negativa fue su estancia. Si no escribió nada en la columna Positive_Review, podrías suponer que no hubo nada positivo, pero por desgracia escribió 7 palabras de advertencia. Si contaramos sólo palabras en lugar del significado, o el sentimiento de las palabras, podríamos tener una vista sesgada de la intención del crítico. Extrañamente, su puntaje de 2.5 es confuso, ya que si esa estancia en el hotel fue tan mala, ¿por qué darle una puntuación? Investigando el conjunto de datos más de cerca, verás que el puntaje más bajo posible es de 2.5, no de 0. El puntaje más alto posible es de 10. - -##### Etiquetas - -Como se mencionó anteriormente, a primera vista, la idea de usar etiquetas (`Tags`) para categorizar los datos, hace sentido. Desafortunadamente estas etiquetas no están estandarizadas, lo cual significa que en cierto hotel, las opciones podrían ser *Single room*, *Twin room*, y *Double room*, pero en otro hotel, son *Deluxe Single Room*, *Classic Queen Room*, y *Executive King Room*. Estas pueden ser las mismas cosas, pero hay tantas variaciones que la elección se convierte en: - -1. Intenta cambiar todos los términos a un estándar único, lo cual es muy difícil, por qué no está claro cuál sería la ruta de conversión en cada caso (por ejemplo *Classic single room* se asigna a *Single room* pero *Superior Queen Room with Courtyard Garden or City View* es más difícil de asignar). - -1. Podemos tomar un enfoque de NLP y medir la frecuencia de ciertos términos como *Solo*, *Business Traveller*, o *Family with young kids* ya que aplican para cada hotel, y tenerlo en cuenta en la recomendación. - -Las etiquetas con frecuencia son (pero no siempre) un campo único que contiene una lista de 5 a 6 valores separados por coma que se alinean al *Tipo de viaje*, *Tipo de huésped*, *Tipo de habitación*, *Número de noches*, y *Tipo de dispositivo de revisión con el que se envió*. Sin embargo, ya que algunos críticos no llenan cada campo (pueden dejar uno en blanco), los valores no siempre aparecen en el mismo orden. - -Como ejemplo toma el *Tipo de grupo*. Existen 1025 posibilidades únicas en este campo en la columna `Tags`, y desafortunadamente sólo algunos de ellos se refieren al grupo (algunos son de el tipo de habitación, etc.). Si filtras sólo aquellos que mencionan familia, los resultados contienen varios tipos de resultados *Family room*. Si incluyes el término *with*, esto es, cuenta los valores *Family with*, los resultados mejoran, con más de 80,000 de 515,000 resultados que contienen la frase "Family with young children" o "Family with older children". - -Esto significa que la columna `Tags` no nos es completamente unútil, pero nos tomará algo de trabajo hacerla útil. - -##### Puntaje promedio de hotel - -Hay cierto número de rarezas o discrepancias con el conjunto de datos que no puedo comprender, pero se ilustran aquí para que estés al tanto de ello cuando construyes tus modelos. ¡Si las averiguas, por favor háznoslo saber en la sección de discusión! - -El conjunto de datos tiene las siguientes columnas relacionadas al puntaje promedio y el número de reseñas: - -1. Hotel_Name -2. Additional_Number_of_Scoring -3. Average_Score -4. Total_Number_of_Reviews -5. Reviewer_Score - -El hotel con la mayor cantidad de reseñas de este conjunto de datos es *Britannia International Hotel Canary Wharf* con 4789 reseñas de 515,000. Pero si miramos el valor del `Total_Number_of_Reviews` para este hotel, es de 9086. Puedes suponer que hay mucho más puntaje sin las reseñas, así que quizá deberíamos agregar el valor de la columna `Additional_Number_of_Scoring`. Ese valor es 2682, y sumándolo a 4789 obtenemos 7,471 lo cual está 1615 por debajo de `Total_Number_of_Reviews`. - -Si tomas la columna `Average_Score`, puedes suponer que es el promedio de las reseñas del conjunto de datos, pero la descripción de Kaggle es "*Average Score of the hotel, calculado basándose en el último comentario del último año*". Eso no parece ser tan útil, pero podemos calcular nuestro propio promedio basándonos en los puntajes de reseñas del conjunto de datos. Usando el mismo hotel como ejemplo, el puntaje promedio del hotel es 7,1 pero el puntaje calculado (el puntaje del crítico promedio *en* el conjunto de datos) es 6.8. Esto está cerca, pero no es el mismo valor, y sólo podemos adivinar que los puntajes dados en las reseñas de `Additional_Number_of_Scoring` incrementaron el promedio a 7.1. Desafortunadamente sin forma de probar o demostrar esa afirmación, es difícil usar o confiar en `Average_Score`, `Additional_Number_of_Scoring` y `Total_Number_of_Reviews` cuando se basan en, o se refieren a los datos que no tenemos. - -Para complicar más las cosas, el hotel con el segundo número más alto de reseñas tiene un puntaje promedio calculado de 8.12 y el conjunto de datos `Average_Score` es de 8.1. ¿este puntaje es correcto o es una coincidencia o el primer hotel tiene una discrepancia? - -En la posibilidad que estos hoteles puedan sea un caso atípico, y que tal vez la mayoría de los valores se sumen (pero algunos no por alguna razón), escribiremos un pequeño programa para explorar los valores en le conjunto de datos y determinar el uso correcto (o no uso) de los valores. - -> 🚨 Una nota de advertencia -> -> Al trabajar con este conjunto de datos escribirás código que calcula algo a partir del texto sin tener que leer o analizar el texto por ti mismo. Esta es la esencia del procesamiento del lenguaje natural (NLP), el interpretar el significado o sentimiento sin tener que depender de un humano que lo haga. Sin embargo, es posible que leas algunas de las reseñas negativas. Te insisto no lo hagas, ya que no tienes porqué hacerlo. Algunas son tontas, o reseñas negativas irrelevantes del hotel, como "The weather wasn't great", algo fuera del control del hotel, o de hecho nada. Pero también hay un lado obscuro de algunas reseñas. En ocasiones, las reseñas negativas son racistas, sexistas o edadistas. Lo cual es desafortunado pero esperado e un conjunto de datos obtenido de un sitio web público. Algunos críticos dejan reseñas que encontrarás desagradables, incómodas o molestas. Es mejor dejar que el código mida el sentimiento en lugarde leerlo tú mismo y enfadarte. Dicho esto, es una minoría la que escribe esas cosas, pero existen de todas formas. - -## Ejercicio - Exploración de datos -### Carga los datos - -Ya es suficiente de examinar los datos de forma visual, ¡ahora escribirás algo de código para obtener algunas respuestas! Esta sección usa la biblioteca pandas. Tu primer tarea es asegurarte que puedes cargar y leer los datos del CSV. La biblioteca pandas tiene un cargador CSV rápido, y el resultado se coloca en un dataframe, como en lecciones anteriores. El CSV que estamos cargando tiene más de medio millón filas, pero sólo 17 columnas. Pandas te proporciona muchas formas poderosas de interactuar con un dataframe, incluyendo la capacidad de realizar operaciones en cada fila. - -A partir de aquí en esta lección, habrá fragmentos de código y algunas explicaciones del mismo, además de algunas discusiones acerca de lo que significan los resultados. Usa el _notebook.ipynb_ incluido para tu código. - -Empecemos cargando el archivo de datos que usarás: - -```python -# Load the hotel reviews from CSV -import pandas as pd -import time -# importing time so the start and end time can be used to calculate file loading time -print("Loading data file now, this could take a while depending on file size") -start = time.time() -# df is 'DataFrame' - make sure you downloaded the file to the data folder -df = pd.read_csv('../../data/Hotel_Reviews.csv') -end = time.time() -print("Loading took " + str(round(end - start, 2)) + " seconds") -``` - -Ahora que se han cargado los datos, podemos realizar operaciones en ellos. Coloca este código al principio de tu programa para la siguiente parte. - -## Explora los datos - -En este caso, los datos ya se encuentranb *limpios*, lo cual significa que están listos para que trabajemos sobre ellos, y no contienen caracteres en otros idiomas que podrían entorpecer a los algoritmos que esperan únicamente caracteres en Inglés. - -✅ Tendrás que trabajar con datos que requieren un procesamiento inicial para formatearlos antes de aplicar técnicas de NLP, pero no este vez. Si así fuera, ¿cómo manejarías los caracteres no pertenecientes al Inglés? - -Dedica un momento a asegurarte que una vez se carguen los datos, puedes explorarlos con código. Es muy fácil querer enfocarte en las columnas `Negative_Review` y `Positive_Review`. Las cuales contienen texto natural para procesar por tus algoritmos de NLP. ¡Pero espera! Antes que comiences el procesamiento de lenguaje natural y sentimiento, deberías seguir el código siguiente para cerciorarte si los valores dados en el conjunto de datos coinciden con los valores que calculaste con pandas. - -## Operaciones de dataframe - -La primer tarea en esta lección es revisar si las siguientes afirmaciones son correctas al escribir algo de código que examine el dataframe (sin modificarlo). - -> Como muchas tareas de programación, hay varias formas de completarla, pero un buen consejo es hacerlo de la forma más simple y fácil que puedas, especialmente si seŕa más fácil entenderla cuando volvamos a este código en el futuro. Con dataframes, hay una API eshaustiva que tendrá frecuentemente una forma de hacer lo que quieres de forma eficiente. - -Trata las siguientes preguntas como tareas de programación e intenta responderlas sin mirar la solución. - -1. Imprime la *forma* del dataframe que acabas de cargar (la forma es el número de filas y columnas) -2. Calcula el conteo de frecuencia para las nacionalidades de los críticos: - 1. ¿Cuántos valores distintos existen para la columna `Reviewer_Nationality` y cuáles son? - 2. ¿Cuál es la nacionalidad del crítico que es la más común en el conjunto de datos (imprime el país y el número de reseñas)? - 3. ¿Cuáles son las 10 nacionalidades encontradas más frecuentemente, y el conteo de sus frecuencias? -3. ¿Cuál fue el hotel más frecuentemente reseñado por cada una del top 10 de nacionalidades de críticos? -4. ¿Cuántas reseñas hay por hotel (conteo de frecuencia de hotel) en el conjunto de datos? -5. Mientras que hay una columna `Average_Score` por cada hotel en el conjunto de datos, también puedes calcular un puntaje promedio (obteniendo el promedio de todos los puntajes de los críticos en el conjunto de datos para cada hotel). Agrega una nueva columna a tu dataframe con el encabezado `Calc_Average_Score` que contenga el promedio calculado. -6. ¿Algunos hoteles tienen el mismo `Average_Score` y `Calc_Average_Score` (redondeado a una posición decimal)? - 1. Intenta escribir una función en Python que tome una Serie (fila) como argumento y compare los valores, imprimiendo el mensaje cuando los valores no son iguales. Luego, usa el método `.apply()` para procesar cada fila con la función. -7. Calcula e imprime cuántas filas tienen en la columna `Negative_Review` valores de "No Negative" . -8. Calcula e imprime cuántas filas tienen en la columna `Positive_Review` valores de "No Positive" . -9. Calcula e imprime cuántas filas tienen en la columna `Positive_Review` valores de "No Positive" **y** en la columna `Negative_Review` valores de "No Negative". - -### Respuestas al código - -1. Imprime la *forma* del dataframe que acabas de cargar (la forma es el número de filas y columnas). - - ```python - print("The shape of the data (rows, cols) is " + str(df.shape)) - > The shape of the data (rows, cols) is (515738, 17) - ``` - -2. Calcula el conteo de frecuencia para las nacionalidades de los críticos: - - 1. ¿Cuańtos valores distintos hay en la columna `Reviewer_Nationality` y cuáles son? - 2. ¿Cuál es la nacionalidad más común para los críticos en el conjunto de datos (imprime el país y el número de reseñas)? - - ```python - # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality - nationality_freq = df["Reviewer_Nationality"].value_counts() - print("There are " + str(nationality_freq.size) + " different nationalities") - # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data - print(nationality_freq) - ``` - - ```output - 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. ¿Cuáles son los siguientes 10 nacionalidades encontradas más frecuentemente, y su conteo de frecuencia? - - ```python - print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") - # Notice there is a leading space on the values, strip() removes that for printing - # What is the top 10 most common nationalities and their frequencies? - print("The next 10 highest frequency reviewer nationalities are:") - print(nationality_freq[1:11].to_string()) - ``` - - ```output - 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. ¿Cuál fue el hotel mayormente reseñado para cada uno del top 10 de las nacionalidades de críticos? - - ```python - # What was the most frequently reviewed hotel for the top 10 nationalities - # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) - for nat in nationality_freq[:10].index: - # First, extract all the rows that match the criteria into a new dataframe - nat_df = df[df["Reviewer_Nationality"] == nat] - # Now get the hotel freq - freq = nat_df["Hotel_Name"].value_counts() - print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") - ``` - - ```output - 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. ¿Cuántas reseñas hay por hotel (conteo de frecuencia del hotel) en el conjunto de datos? - - ```python - # First create a new dataframe based on the old one, removing the uneeded columns - hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) - - # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found - hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') - - # Get rid of all the duplicated rows - hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) - display(hotel_freq_df) - ``` - - | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | - | :----------------------------------------: | :---------------------: | :-----------------: | - | Britannia International Hotel Canary Wharf | 9086 | 4789 | - | Park Plaza Westminster Bridge London | 12158 | 4169 | - | Copthorne Tara Hotel London Kensington | 7105 | 3578 | - | ... | ... | ... | - | Mercure Paris Porte d Orleans | 110 | 10 | - | Hotel Wagner | 135 | 10 | - | Hotel Gallitzinberg | 173 | 8 | - - Has notado que los resultados de los *contados en el conjunto de datos* no coinciden con el valor en `Total_Number_of_Reviews`. No está claro si este valor en el conjunto de datos representó el número total de reseñas que tuvo el hotel, pero no fueron extraídas, o algún otro cálculo. La columna `Total_Number_of_Reviews`no se usa en el modelo porque no es del todo clara. - -5. Mientras que hay una columna `Average_Score` para cada hotel en el conjunto de datos, también puedes calcular un puntaje promedio (obteniendo el promedio de todos los puntajes de los críticos en el conjunto de datos para cada hotel). Agrega una nueva columna a tu dataframe con el encabezado `Calc_Average_Score` que contenga dicho promedio calculado. Imprime las columnas `Hotel_Name`, `Average_Score`, y `Calc_Average_Score`. - - ```python - # define a function that takes a row and performs some calculation with it - def get_difference_review_avg(row): - return row["Average_Score"] - row["Calc_Average_Score"] - - # 'mean' is mathematical word for 'average' - df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - - # Add a new column with the difference between the two average scores - df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) - - # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) - review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) - - # Sort the dataframe to find the lowest and highest average score difference - review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) - - display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) - ``` - - También te preguntarás aceca de el valor de `Average_Score` y por qué algunas veces es diferente del puntaje promedio calculado. Como no podemos saber por qué algunos de los valores coinciden, pero otros difieren, en esta situación lo más seguro es usar los puntajes de reseñas que tenemos para calcular el promedio por nosotros mismos. Dicho esto, las diferencias suelen ser mínimas, aquí tienes los hoteles con la mayor desviación del promedio del conjunto de datos y el promedio calculado: - - | 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 | - - Con sólo 1 hotel que tiene un diferencia de puntaje mayor a 1, esto significa que probablemente podemos ignorar la diferencia y usar el puntaje promedio calculado. - -6. Calcula e imprime cuántas filas tienen en la columna `Negative_Review` valores de "No Negative" - -7. Calcula e imprime cuántas filas tienen en la columna `Positive_Review` valores de "No Positive" - -8. Calcula e imprime cuántas filas tienen en la columna `Positive_Review` valores de "No Positive" **y** en la columna `Negative_Review` valores de "No Negative" - - ```python - # with lambdas: - start = time.time() - no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) - print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) - - no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) - - both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) - end = time.time() - print("Lambdas took " + str(round(end - start, 2)) + " seconds") - ``` - - ```output - 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 - ``` - -## Otra forma de hacerlo - -Otra forma de contar los elementos sin usar Lambdas, y usar la suma para contar las filas: - - ```python - # without lambdas (using a mixture of notations to show you can use both) - start = time.time() - no_negative_reviews = sum(df.Negative_Review == "No Negative") - print("Number of No Negative reviews: " + str(no_negative_reviews)) - - no_positive_reviews = sum(df["Positive_Review"] == "No Positive") - print("Number of No Positive reviews: " + str(no_positive_reviews)) - - both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) - print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) - - end = time.time() - print("Sum took " + str(round(end - start, 2)) + " seconds") - ``` - - ```output - 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 - ``` - - Quizá hayas notado que hay 127 filas que tienen valores tanto "No Negative" como "No Positive" para las columnas `Negative_Review` y `Positive_Review` respectivamente. Lo cual significa que los críticos le dieron al hotel un puntaje numérico, pero se negaron a escribir tanto una reseña positiva como negativa. Afortunadamente este es un número pequeño de filas (127 de 515738, o 0.02%), así que probablemente no sesgará nuestro modelo o los resultados en alguna dirección en particular, pero podrías no haber esperado que un conjunto de datos de reseñas tenga filas sin reseñas, por lo que vale la pena explorar los datos para descubrir filas como esta. - -Ahora que has explorado el conjunto de datos, en la próxima lección filtrarás los datos y agregarás algo de análisis de sentimiento. - ---- -## 🚀Desafío - -Esta lección demuestra, como vimos en lecciones anteriores, qué tan críticamente importante es entender tus datos y sus imperfecciones antes de realizar operaciones sobre ellos. Los datos basados en texto, requieren particularmente un minucioso escrutinio. Profundiza en grandes conjuntos de datos basados en texto y ve si puedes descubrir áreas que podrían presentar sesgos o sentimientos sesgados en un modelo. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38?loc=es) - -## Revisión y autoestudio - -Toma [esta ruta de aprendizaje de NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) para descubrir herramientas a probar al construir modelos de voz y de gran cantidad de datos. - -## Asignación - -[NLTK](assignment.es.md) diff --git a/6-NLP/4-Hotel-Reviews-1/translations/README.it.md b/6-NLP/4-Hotel-Reviews-1/translations/README.it.md deleted file mode 100644 index 3e1bed6a..00000000 --- a/6-NLP/4-Hotel-Reviews-1/translations/README.it.md +++ /dev/null @@ -1,412 +0,0 @@ -# Analisi del sentiment con le recensioni degli hotel - elaborazione dei dati - -In questa sezione si utilizzeranno le tecniche delle lezioni precedenti per eseguire alcune analisi esplorative dei dati di un grande insieme di dati. Una volta compresa bene l'utilità delle varie colonne, si imparerà: - -- come rimuovere le colonne non necessarie -- come calcolare alcuni nuovi dati in base alle colonne esistenti -- come salvare l'insieme di dati risultante per l'uso nella sfida finale - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/?loc=it) - -### Introduzione - -Finora si è appreso come i dati di testo siano abbastanza diversi dai tipi di dati numerici. Se è un testo scritto o parlato da un essere umano, può essere analizzato per trovare schemi e frequenze, sentiment e significati. Questa lezione entra in un vero insieme di dati con una vera sfida: **[515K dati di recensioni di hotel in Europa](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** e include una [licenza CC0: Public Domain](https://creativecommons.org/publicdomain/zero/1.0/). È stato ricavato da Booking.com da fonti pubbliche. Il creatore dell'insieme di dati è stato Jiashen Liu. - -### Preparazione - -Ecco l'occorrente: - -* La possibilità di eseguire notebook .ipynb utilizzando Python 3 -* pandas -* NLTK, [che si dovrebbe installare localmente](https://www.nltk.org/install.html) -* L'insieme di dati disponibile su Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Sono circa 230 MB decompressi. Scaricarlo nella cartella radice `/data` associata a queste lezioni di NLP. - -## Analisi esplorativa dei dati - -Questa sfida presuppone che si stia creando un bot di raccomandazione di hotel utilizzando l'analisi del sentiment e i punteggi delle recensioni degli ospiti. L'insieme di dati da utilizzare include recensioni di 1493 hotel diversi in 6 città. - -Utilizzando Python, un insieme di dati di recensioni di hotel e l'analisi del sentiment di NLTK si potrebbe scoprire: - -* quali sono le parole e le frasi più usate nelle recensioni? -* i *tag* ufficiali che descrivono un hotel correlato con punteggi di recensione (ad es. sono le più negative per un particolare hotel per *famiglia con bambini piccoli* rispetto a *viaggiatore singolo*, forse indicando che è meglio per i *viaggiatori sinogli*?) -* i punteggi del sentiment NLTK "concordano" con il punteggio numerico del recensore dell'hotel? - -#### Insieme di dati - -Per esplorare l'insieme di dati scaricato e salvato localmente, aprire il file in un editor tipo VS Code o anche Excel. - -Le intestazioni nell'insieme di dati sono le seguenti: - -*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* - -Qui sono raggruppati in un modo che potrebbe essere più facile da esaminare: - -##### Colonne Hotel - -* `Hotel_Name` (nome hotel), `Hotel_Address` (indirizzo hotel), `lat` (latitudine)`,` lng (longitudine) - * Usando *lat* e *lng* si può tracciare una mappa con Python che mostra le posizioni degli hotel (forse codificate a colori per recensioni negative e positive) - * Hotel_Address non è ovviamente utile e probabilmente verrà sostituito con una nazione per semplificare l'ordinamento e la ricerca - -**Colonne di meta-recensione dell'hotel** - -* `Average_Score` (Punteggio medio) - * Secondo il creatore dell'insieme di dati, questa colonna è il *punteggio medio dell'hotel, calcolato in base all'ultimo commento dell'ultimo anno*. Questo sembra un modo insolito per calcolare il punteggio, ma sono i dati recuperati, quindi per ora si potrebbero prendere come valore nominale. - - ✅ Sulla base delle altre colonne di questi dati, si riesce a pensare a un altro modo per calcolare il punteggio medio? - -* `Total_Number_of_Reviews` (Numero totale di recensioni) - * Il numero totale di recensioni ricevute da questo hotel - non è chiaro (senza scrivere del codice) se si riferisce alle recensioni nell'insieme di dati. -* `Additional_Number_of_Scoring` (Numero aggiuntivo di punteggio - * Ciò significa che è stato assegnato un punteggio di recensione ma nessuna recensione positiva o negativa è stata scritta dal recensore - -**Colonne di recensione** - -- `Reviewer_Score` (Punteggio recensore) - - Questo è un valore numerico con al massimo 1 cifra decimale tra i valori minimo e massimo 2,5 e 10 - - Non è spiegato perché 2,5 sia il punteggio più basso possibile -- `Negative_Review` (Recensione Negativa) - - Se un recensore non ha scritto nulla, questo campo avrà "**No Negative" (Nessun negativo)** - - Si tenga presente che un recensore può scrivere una recensione positiva nella colonna delle recensioni negative (ad es. "non c'è niente di negativo in questo hotel") -- `Review_Total_Negative_Word_Counts` (Conteggio parole negative totali per revisione) - - Conteggi di parole negative più alti indicano un punteggio più basso (senza controllare il sentiment) -- `Positive_Review` (Recensioni positive) - - Se un recensore non ha scritto nulla, questo campo avrà "**No Positive" (Nessun positivo)** - - Si tenga presente che un recensore può scrivere una recensione negativa nella colonna delle recensioni positive (ad es. "non c'è niente di buono in questo hotel") -- `Review_Total_Positive_Word_Counts` (Conteggio parole positive totali per revisione) - - Conteggi di parole positive più alti indicano un punteggio più alto (senza controllare il sentiment) -- `Review_Date` e `days_since_review` (Data revisione e giorni trascorsi dalla revisione) - - Una misura di freschezza od obsolescenza potrebbe essere applicata a una recensione (le recensioni più vecchie potrebbero non essere accurate quanto quelle più recenti perché la gestione dell'hotel è cambiata, o sono stati effettuati lavori di ristrutturazione, o è stata aggiunta una piscina, ecc.) -- `Tag` - - Questi sono brevi descrittori che un recensore può selezionare per descrivere il tipo di ospite in cui rientra (ad es. da soli o in famiglia), il tipo di camera che aveva, la durata del soggiorno e come è stata inviata la recensione. - - Sfortunatamente, l'uso di questi tag è problematico, controllare la sezione sottostante che discute la loro utilità - -**Colonne dei recensori** - -- `Total_Number_of_Reviews_Reviewer_Has_Given` (Numero totale di revisioni per recensore) - - Questo potrebbe essere un fattore in un modello di raccomandazione, ad esempio, se si potesse determinare che i recensori più prolifici con centinaia di recensioni avevano maggiori probabilità di essere negativi piuttosto che positivi. Tuttavia, il recensore di una particolare recensione non è identificato con un codice univoco e quindi non può essere collegato a un insieme di recensioni. Ci sono 30 recensori con 100 o più recensioni, ma è difficile vedere come questo possa aiutare il modello di raccomandazione. -- `Reviewer_Nationality` (Nazionalità recensore) - - Alcune persone potrebbero pensare che alcune nazionalità abbiano maggiore propensione a dare una recensione positiva o negativa a causa di un'inclinazione nazionalista. Fare attenzione a creare tali punti di vista aneddotici nei propri modelli. Questi sono stereotipi nazionalisti (e talvolta razziali) e ogni recensore era un individuo che ha scritto una recensione in base alla propria esperienza. Potrebbe essere stata filtrata attraverso molte lenti come i loro precedenti soggiorni in hotel, la distanza percorsa e la loro indole. Pensare che la loro nazionalità sia stata la ragione per un punteggio di recensione è difficile da giustificare. - -##### Esempi - -| Average Score | Total Number Reviews | Reviewer Score | Negative
Review | Positive Review | Tags | -| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | -| 7.8 | 1945 | 2.5 | This is currently not a hotel but a construction site I was terroized from early morning and all day with unacceptable building noise while resting after a long trip and working in the room People were working all day i e with jackhammers in the adjacent rooms I asked for a room change but no silent room was available To make thinks worse I was overcharged I checked out in the evening since I had to leave very early flight and received an appropiate bill A day later the hotel made another charge without my concent in excess of booked price It s a terrible place Don t punish yourself by booking here | Nothing Terrible place Stay away | Business trip Couple Standard Double Room Stayed 2 nights | - -Come si può vedere, questo ospite non ha trascorso un soggiorno felice in questo hotel. L'hotel ha un buon punteggio medio di 7,8 e 1945 recensioni, ma questo recensore ha dato 2,5 e ha scritto 115 parole su quanto sia stato negativo il suo soggiorno. Se non è stato scritto nulla nella colonna Positive_Review, si potrebbe supporre che non ci sia stato nulla di positivo, ma purtroppo sono state scritte 7 parole di avvertimento. Se si contassero solo le parole invece del significato o del sentiment delle parole, si potrebbe avere una visione distorta dell'intento dei recensori. Stranamente, il punteggio di 2,5 è fonte di confusione, perché se il soggiorno in hotel è stato così negativo, perché dargli dei punti? Indagando da vicino l'insieme di dati, si vedrà che il punteggio più basso possibile è 2,5, non 0. Il punteggio più alto possibile è 10. - -##### Tag - -Come accennato in precedenza, a prima vista, l'idea di utilizzare i `tag` per classificare i dati ha senso. Sfortunatamente questi tag non sono standardizzati, il che significa che in un determinato hotel le opzioni potrebbero essere *Camera singola* , *Camera a due letti* e *Camera doppia*, ma nell'hotel successivo potrebbero essere *Camera singola deluxe*, *Camera matrimoniale classica* e *Camera king executive*. Potrebbero essere le stesse cose, ma ci sono così tante varianti che la scelta diventa: - -1. Tentare di modificare tutti i termini in un unico standard, il che è molto difficile, perché non è chiaro quale sarebbe il percorso di conversione in ciascun caso (ad es. *Camera singola classica* mappata in *camera singola*, ma *camera Queen Superior con cortile giardino o vista città* è molto più difficile da mappare) - -1. Si può adottare un approccio NLP e misurare la frequenza di determinati termini come *Solo*, *Business Traveller* (Viaggiatore d'affari) o *Family with young kids* (Famiglia con bambini piccoli) quando si applicano a ciascun hotel e tenerne conto nella raccomandazione - -I tag sono in genere (ma non sempre) un singolo campo contenente un elenco di valori separati da 5 a 6 virgole allineati per *Type of trip* (Tipo di viaggio), *Type of guests* (Tipo di ospiti), *Type of room* (Tipo di camera), *Number of nights* (Numero di notti) e *Type of device* (Tipo di dispositivo con il quale è stata inviata la recensione).Tuttavia, poiché alcuni recensori non compilano ogni campo (potrebbero lasciarne uno vuoto), i valori non sono sempre nello stesso ordine. - -Ad esempio, si prenda *Type of group* (Tipo di gruppo). Ci sono 1025 possibilità uniche in questo campo nella colonna `Tag`, e purtroppo solo alcune di esse fanno riferimento a un gruppo (alcune sono il tipo di stanza ecc.). Se si filtra solo quelli che menzionano la famiglia, saranno ricavati molti risultati relativi al tipo di *Family room* . Se si include il termine *with* (con), cioè si conta i valori per *Family with*, i risultati sono migliori, con oltre 80.000 dei 515.000 risultati che contengono la frase "Family with young children" (Famiglia con figli piccoli) o "Family with older children" (Famiglia con figli grandi). - -Ciò significa che la colonna dei tag non è completamente inutile allo scopo, ma richiederà del lavoro per renderla utile. - -##### Punteggio medio dell'hotel - -Ci sono una serie di stranezze o discrepanze con l'insieme di dati che non si riesce a capire, ma sono illustrate qui in modo che ci siano note quando si costruiscono i propri modelli. Se ci si capisce qualcosa, renderlo noto nella sezione discussione! - -L'insieme di dati ha le seguenti colonne relative al punteggio medio e al numero di recensioni: - -1. Hotel_Name (Nome Hotel) -2. Additional_Number_of_Scoring (Numero aggiuntivo di punteggio -3. Average_Score (Punteggio medio) -4. Total_Number_of_Reviews (Numero totale di recensioni) -5. Reviewer_Score (Punteggio recensore) - -L'hotel con il maggior numero di recensioni in questo insieme di dati è *il Britannia International Hotel Canary Wharf* con 4789 recensioni su 515.000. Ma se si guarda al valore `Total_Number_of_Reviews` per questo hotel, è 9086. Si potrebbe supporre che ci siano molti più punteggi senza recensioni, quindi forse si dovrebbe aggiungere il valore della colonna `Additional_Number_of_Scoring` . Quel valore è 2682 e aggiungendolo a 4789 si ottiene 7.471 che è ancora 1615 in meno del valore di `Total_Number_of_Reviews`. - -Se si prende la colonna `Average_Score`, si potrebbe supporre che sia la media delle recensioni nell'insieme di dati, ma la descrizione di Kaggle è "*Punteggio medio dell’hotel, calcolato in base all’ultimo commento nell’ultimo anno*". Non sembra così utile, ma si può calcolare la media in base ai punteggi delle recensioni nell'insieme di dati. Utilizzando lo stesso hotel come esempio, il punteggio medio dell'hotel è 7,1 ma il punteggio calcolato (punteggio medio del recensore nell'insieme di dati) è 6,8. Questo è vicino, ma non lo stesso valore, e si può solo supporre che i punteggi dati nelle recensioni `Additional_Number_of_Scoring` hanno aumentato la media a 7,1. Sfortunatamente, senza alcun modo per testare o dimostrare tale affermazione, è difficile utilizzare o fidarsi di `Average_Score`, `Additional_Number_of_Scoring` e `Total_Number_of_Reviews` quando si basano su o fanno riferimento a dati che non sono presenti. - -Per complicare ulteriormente le cose, l'hotel con il secondo numero più alto di recensioni ha un punteggio medio calcolato di 8,12 e l'insieme di dati `Average_Score` è 8,1. Questo punteggio corretto è una coincidenza o il primo hotel è una discrepanza? - -Sulla possibilità che questi hotel possano essere un valore anomalo e che forse la maggior parte dei valori coincidano (ma alcuni non lo fanno per qualche motivo) si scriverà un breve programma per esplorare i valori nell'insieme di dati e determinare l'utilizzo corretto (o mancato utilizzo) dei valori. - -> 🚨 Una nota di cautela -> -> Quando si lavora con questo insieme di dati, si scriverà un codice che calcola qualcosa dal testo senza dover leggere o analizzare il testo da soli. Questa è l'essenza di NLP, interpretare il significato o il sentiment senza che lo faccia un essere umano. Tuttavia, è possibile che si leggano alcune delle recensioni negative. Non è raccomandabile farlo. Alcune di esse sono recensioni negative sciocche o irrilevanti, come "Il tempo non era eccezionale", qualcosa al di fuori del controllo dell'hotel, o di chiunque, in effetti. Ma c'è anche un lato oscuro in alcune recensioni. A volte le recensioni negative sono razziste, sessiste o antietà. Questo è un peccato, ma è prevedibile in un insieme di dati recuperato da un sito web pubblico. Alcuni recensori lasciano recensioni che si potrebbe trovare sgradevoli, scomode o sconvolgenti. Meglio lasciare che il codice misuri il sentiment piuttosto che leggerle da soli e arrabbiarsi. Detto questo, è una minoranza che scrive queste cose, ma esistono lo stesso. - -## Esercizio - Esplorazione dei dati - -### Caricare i dati - -Per ora l'esame visivo dei dati è sufficiente, adesso si scriverà del codice e si otterranno alcune risposte! Questa sezione utilizza la libreria pandas. Il primo compito è assicurarsi di poter caricare e leggere i dati CSV. La libreria pandas ha un veloce caricatore CSV e il risultato viene inserito in un dataframe, come nelle lezioni precedenti. Il CSV che si sta caricando ha oltre mezzo milione di righe, ma solo 17 colonne. Pandas offre molti modi potenti per interagire con un dataframe, inclusa la possibilità di eseguire operazioni su ogni riga. - -Da qui in poi in questa lezione, ci saranno frammenti di codice e alcune spiegazioni del codice e alcune discussioni su cosa significano i risultati. Usare il _notebook.ipynb_ incluso per il proprio codice. - -Si inizia con il caricamento del file di dati da utilizzare: - -```python -# Carica il CSV con le recensioni degli hotel -import pandas as pd -import time -# importa time per determinare orario di inizio e fine caricamento per poterne calcolare la durata -print("Loading data file now, this could take a while depending on file size") -start = time.time() -# df è un 'DataFrame' - assicurarsi di aver scaricato il file nella cartelle data -df = pd.read_csv('../../data/Hotel_Reviews.csv') -end = time.time() -print("Loading took " + str(round(end - start, 2)) + " seconds") -``` - -Ora che i dati sono stati caricati, si possono eseguire alcune operazioni su di essi. Tenere questo codice nella parte superiore del programma per la parte successiva. - -## Esplorare i dati - -In questo caso, i dati sono già *puliti*, il che significa che sono pronti per essere lavorati e non ci sono caratteri in altre lingue che potrebbero far scattare algoritmi che si aspettano solo caratteri inglesi. - -✅ Potrebbe essere necessario lavorare con dati che richiedono un'elaborazione iniziale per formattarli prima di applicare le tecniche di NLP, ma non questa volta. Se si dovesse, come si gestirebero i caratteri non inglesi? - -Si prenda un momento per assicurarsi che una volta caricati, i dati possano essere esplorarati con il codice. È molto facile volersi concentrare sulle colonne `Negative_Review` e `Positive_Review` . Sono pieni di testo naturale per essere elaborato dagli algoritmi di NLP. Ma non è finita qui! Prima di entrare nel NLP e nel sentiment, si dovrebbe seguire il codice seguente per accertarsi se i valori forniti nell'insieme di dati corrispondono ai valori calcolati con pandas. - -## Operazioni con dataframe - -Il primo compito di questa lezione è verificare se le seguenti asserzioni sono corrette scrivendo del codice che esamini il dataframe (senza modificarlo). - -> Come molte attività di programmazione, ci sono diversi modi per completarla, ma un buon consiglio è farlo nel modo più semplice e facile possibile, soprattutto se sarà più facile da capire quando si riesaminerà questo codice in futuro. Con i dataframe, esiste un'API completa che spesso avrà un modo per fare ciò che serve in modo efficiente. - -Trattare le seguenti domande come attività di codifica e provare a rispondere senza guardare la soluzione. - -1. Stampare la *forma* del dataframe appena caricato (la forma è il numero di righe e colonne) -2. Calcolare il conteggio della frequenza per le nazionalità dei recensori: - 1. Quanti valori distinti ci sono per la colonna `Reviewer_Nationality` e quali sono? - 2. Quale nazionalità del recensore è la più comune nell'insieme di dati (stampare nazione e numero di recensioni)? - 3. Quali sono le prossime 10 nazionalità più frequenti e la loro frequenza? -3. Qual è stato l'hotel più recensito per ciascuna delle 10 nazionalità più recensite? -4. Quante recensioni ci sono per hotel (conteggio della frequenza dell'hotel) nell'insieme di dati? -5. Sebbene sia presente una colonna `Average_Score` per ogni hotel nell'insieme di dati, si può anche calcolare un punteggio medio (ottenendo la media di tutti i punteggi dei recensori nell'insieme di dati per ogni hotel). Aggiungere una nuova colonna al dataframe con l'intestazione della colonna `Calc_Average_Score` che contiene quella media calcolata. -6. Ci sono hotel che hanno lo stesso (arrotondato a 1 decimale) `Average_Score` e `Calc_Average_Score`? - 1. Provare a scrivere una funzione Python che accetta una serie (riga) come argomento e confronta i valori, stampando un messaggio quando i valori non sono uguali. Quindi usare il metodo `.apply()` per elaborare ogni riga con la funzione. -7. Calcolare e stampare quante righe contengono valori di "No Negative" nella colonna `Negative_Review` " -8. Calcolare e stampare quante righe contengono valori di "No Positive" nella colonna `Positive_Review` " -9. Calcolare e stampare quante righe contengono valori di "No Positive" nella colonna `Positive_Review` " **e** valori di "No Negative" nella colonna `Negative_Review` - -### Risposte - -1. Stampare la *forma* del dataframei appena caricato (la forma è il numero di righe e colonne) - - ```python - print("The shape of the data (rows, cols) is " + str(df.shape)) - > The shape of the data (rows, cols) is (515738, 17) - ``` - -2. Calcolare il conteggio della frequenza per le nazionalità dei recensori: - - 1. Quanti valori distinti ci sono per la colonna `Reviewer_Nationality` e quali sono? - 2. Quale nazionalità del recensore è la più comune nell'insieme di dati (paese di stampa e numero di recensioni)? - - ```python - # value_counts() crea un oggetto Series con indice e valori, in questo caso la nazione - # e la frequenza con la quale si manifestano nella nazionalità del recensore - nationality_freq = df["Reviewer_Nationality"].value_counts() - print("There are " + str(nationality_freq.size) + " different nationalities") - # stampa la prima e ultima riga della Series. Modificare in nationality_freq.to_string() per stampare tutti i dati - 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. Quali sono le prossime 10 nazionalità più frequenti e la loro frequenza? - - ```python - print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") - # Notare che c'è uno spazio davanti ai valori, strip() lo rimuove per la stampa - # Quale sono le 10 nazionalità più comuni e la loro frequenza? - 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. Qual è stato l'hotel più recensito per ciascuna delle 10 nazionalità più recensite? - - ```python - # Qual è stato l'hotel più recensito per ciascuna delle 10 nazionalità più recensite - # In genere con pandas si cerca di evitare un ciclo esplicito, ma si vuole mostrare come si crea un - # nuovo dataframe usando criteri (non fare questo con un grande volume di dati in quanto potrebbe essere molto lento) - for nat in nationality_freq[:10].index: - # Per prima cosa estrarre tutte le righe che corrispondono al criterio in un nuovo dataframe - nat_df = df[df["Reviewer_Nationality"] == nat] - # Ora ottenere la frequenza per l'hotel - 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. Quante recensioni ci sono per hotel (conteggio della frequenza dell'hotel) nell'insieme di dati? - - ```python - # Per prima cosa creare un nuovo dataframe in base a quello vecchio, togliendo le colonne non necessarie - 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) - - # Raggruppre le righe per Hotel_Name, conteggiarle e inserire il risultato in una nuova colonna Total_Reviews_Found - hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') - - # Eliminare tutte le righe duplicate - hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) - display(hotel_freq_df) - ``` - - | Hotel_Name (Nome Hotel) | Total_Number_of_Reviews (Numero totale di recensioni) | Total_Reviews_Found | - | :----------------------------------------: | :---------------------------------------------------: | :-----------------: | - | Britannia International Hotel Canary Wharf | 9086 | 4789 | - | Park Plaza Westminster Bridge Londra | 12158 | 4169 | - | Copthorne Tara Hotel London Kensington | 7105 | 3578 | - | ... | ... | ... | - | Mercure Paris Porte d'Orléans | 110 | 10 | - | Hotel Wagner | 135 | 10 | - | Hotel Gallitzinberg | 173 | 8 | - - - Si potrebbe notare che il *conteggio nell'insieme di dati* non corrisponde al valore in `Total_Number_of_Reviews`. Non è chiaro se questo valore nell'insieme di dati rappresentasse il numero totale di recensioni che l'hotel aveva, ma non tutte sono state recuperate o qualche altro calcolo. `Total_Number_of_Reviews` non viene utilizzato nel modello a causa di questa non chiarezza. - -5. Sebbene sia presente una colonna `Average_Score` per ogni hotel nell'insieme di dati, si può anche calcolare un punteggio medio (ottenendo la media di tutti i punteggi dei recensori nell'insieme di dati per ogni hotel). Aggiungere una nuova colonna al dataframe con l'intestazione della colonna `Calc_Average_Score` che contiene quella media calcolata. Stampare le colonne `Hotel_Name`, `Average_Score` e `Calc_Average_Score`. - - ```python - # definisce una funzione che ottiene una riga ed esegue alcuni calcoli su di essa - def get_difference_review_avg(row): - return row["Average_Score"] - row["Calc_Average_Score"] - - # 'mean' è la definizione matematica per 'average' - df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - - # Aggiunge una nuova colonna con la differenza tra le due medie di punteggio - df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) - - # Crea un df senza tutti i duplicati di Hotel_Name (quindi una sola riga per hotel) - review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) - - # Ordina il dataframe per trovare la differnza più bassa e più alta per il punteggio medio - 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"]]) - ``` - - Ci si potrebbe anche chiedere del valore `Average_Score` e perché a volte è diverso dal punteggio medio calcolato. Poiché non è possibile sapere perché alcuni valori corrispondano, ma altri hanno una differenza, in questo caso è più sicuro utilizzare i punteggi delle recensioni a disposizione per calcolare autonomamente la media. Detto questo, le differenze sono solitamente molto piccole, ecco gli hotel con la maggiore deviazione dalla media dell'insieme di dati e dalla media calcolata: - - | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name (Nome Hotel) | - | :----------------------: | :-----------: | :----------------: | -------------------------------------------: | - | -0,8 | 7,7 | 8,5 | Best Western Hotel Astoria | - | -0,7 | 8,8 | 9,5 | Hotel Stendhal Place Vend me Parigi MGallery | - | -0,7 | 7,5 | 8.2 | Mercure Paris Porte d'Orléans | - | -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 Eugenia | - | 0,9 | 8,6 | 7,7 | MARCHESE Faubourg St Honor Relais Ch teaux | - | 1,3 | 7,2 | 5,9 | Kube Hotel Ice Bar | - - Con un solo hotel con una differenza di punteggio maggiore di 1, significa che probabilmente si può ignorare la differenza e utilizzare il punteggio medio calcolato. - -6. Calcolare e stampare quante righe hanno la colonna `Negative_Review` valori di "No Negative" - -7. Calcolare e stampare quante righe hanno la colonna `Positive_Review` valori di "No Positive" - -8. Calcolare e stampare quante righe hanno la colonna `Positive_Review` valori di "No Positive" **e** `Negative_Review` valori di "No Negative" - - ```python - # con funzini lambda: - 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 - ``` - -## Un'altra strada - -Un altro modo per contare gli elementi senza Lambda e utilizzare sum per contare le righe: - -```python -# senza funzioni lambda (usando un misto di notazioni per mostrare che si possono usare entrambi) -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 -``` - -Si potrebbe aver notato che ci sono 127 righe che hanno entrambi i valori "No Negative" e "No Positive" rispettivamente per le colonne `Negative_Review` e `Positive_Review` . Ciò significa che il recensore ha assegnato all'hotel un punteggio numerico, ma ha rifiutato di scrivere una recensione positiva o negativa. Fortunatamente questa è una piccola quantità di righe (127 su 515738, o 0,02%), quindi probabilmente non distorcerà il modello o i risultati in una direzione particolare, ma si potrebbe non aspettarsi che un insieme di dati di recensioni abbia righe con nessuna recensione, quindi vale la pena esplorare i dati per scoprire righe come questa. - -Ora che si è esplorato l'insieme di dati, nella prossima lezione si filtreranno i dati e si aggiungerà un'analisi del sentiment. - ---- - -## 🚀 Sfida - -Questa lezione dimostra, come visto nelle lezioni precedenti, quanto sia di fondamentale importanza comprendere i dati e le loro debolezze prima di eseguire operazioni su di essi. I dati basati su testo, in particolare, sono oggetto di un attento esame. Esaminare vari insiemi di dati contenenti principalmente testo e vedere se si riesce a scoprire aree che potrebbero introdurre pregiudizi o sentiment distorti in un modello. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/?loc=it) - -## Revisione e Auto Apprendimento - -Seguire [questo percorso di apprendimento su NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) per scoprire gli strumenti da provare durante la creazione di modelli vocali e di testo. - -## Compito - -[NLTK](assignment.it.md) diff --git a/6-NLP/4-Hotel-Reviews-1/translations/README.ko.md b/6-NLP/4-Hotel-Reviews-1/translations/README.ko.md deleted file mode 100644 index 681a46bd..00000000 --- a/6-NLP/4-Hotel-Reviews-1/translations/README.ko.md +++ /dev/null @@ -1,408 +0,0 @@ -# 호텔 리뷰로 감정 분석하기 - 데이터 처리 - -이 섹션에서는 큰 데이터셋의 탐색적으로 데이터를 분석하는 이전 강의의 기술을 사용할 예정입니다. 다양한 열의 유용성을 잘 이해하면, 배울 수 있습니다: - -- 필요하지 않은 열을 제거하는 방식 -- 이미 존재하는 열을 기반으로 일부 새로운 데이터를 계산하는 방식 -- 최종 도전에서 사용하고자 결과 데이터셋을 저장하는 방식 - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/) - -### 소개 - -지금까지 텍스트 데이터가 숫자 데이터 타입과 꽤 다르다는 것을 배웠습니다. 만약 사람이 텍스트를 쓰거나 읽는다면, 패턴과 빈도, 감정과 의미를 찾기 위해서 분석할 수 있습니다. 이 강의에서 실전인 진짜 데이터로 진행합니다: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** 이며 [CC0: Public Domain license](https://creativecommons.org/publicdomain/zero/1.0/)를 포함합니다. 퍼블릭 소스의 from Booking.com에서 스크랩했습니다. Jiashen Liu가 데이터셋을 생성했습니다. - -### 준비 - -다음 내용이 필요할 예정입니다: - -* Python 3로 .ipynb 노트북을 실행할 능력 -* pandas -* NLTK, [which you should install locally](https://www.nltk.org/install.html) -* Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)에서 사용할 데이터셋. 압축 풀면 230 MB 입니다. NLP 강의와 관련있는 상단 `/data` 폴더에 내려받습니다. - -## 탐색적 데이터 분석 - -이 도전은 감정 분석과 게스트 리뷰 점수로 호텔 추천 봇을 만든다고 가정합니다. 데이터셋은 6개 도시에 있는 1493개 다른 호텔의 리뷰를 포함해서 사용합니다. - -호델 리뷰 데이터셋을 Python으로, NLTK 감정 분석을 확인할 수 있습니다: - -* 리뷰에서 가장 빈번하게 사용된 단어와 구문은 무엇인가요? -* 호텔을 설명하는 공식 *tags*는 리뷰 점수와 관계가 있나요? (예시로, *Solo traveller*보다 *Family with young children*으로 왔을 때 호텔 리뷰가 더 부정적이고, 어쩌면 *Solo travellers*가 더 괜찮나요?) -* NLTK 감정 점수가 호텔 리뷰어의 숫자로만 이루어진 점수를 '동의'할 수 있나요? - -#### 데이터셋 - -내려받아서 로컬에 저장한 데이터셋을 알아보겠습니다. VS Code나 엑셀 같은 에디터로 파일을 엽니다. - -데이터셋의 헤더는 다음과 같습니다: - -*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 열 - -* `Hotel_Name`, `Hotel_Address`, `lat` (latitude), `lng` (longitude) - * *lat* 과 *lng*으로 Python에서 호텔 위치를 보일 맵을 plot합니다 (아마 부정적이고 긍정적인 리뷰에 대한 색상) - * Hotel_Address는 분명 우리에게 유용하지 않으므로, 쉽게 분류하고 검색할 수 있게 국가로 대체할 예정입니다 - -**Hotel Meta-review 열** - -* `Average_Score` - * 데이터셋을 만든 사람에 의하면, 이 열은 *지난 연도에 작성된 최신 코멘트를 기반으로 계산한, 호텔의 평균 점수*입니다. 점수를 계산하는 특이한 방식처럼 보이지만, 현재 액면가로 보일 수 있도록 스크랩한 데이터입니다. - - ✅ 데이터에서 다른 열을 기반으로, 평균 점수를 계산하는 방식을 생각할 수 있나요? - -* `Total_Number_of_Reviews` - * 호텔이 받은 리뷰의 총 개수 - 만약 데이터셋의 리뷰를 나타내는 것이면 (일부 코드 작성없이) 명확하지 않습니다 -* `Additional_Number_of_Scoring` - * 리뷰 점수가 부여되었지만 리뷰어가 작성한 긍정적이나 부정적인 리뷰가 없다는 점을 의미합니다 - -**Review columns** - -- `Reviewer_Score` - - 숫자 값은 최소 2.5 최대 값 10 사이의 최대 소수점 1자리 입니다. - - 2.5가 낮은 숫자인 이유는 없습니다 -- `Negative_Review` - - 만약 리뷰어가 아무것도 작성하지 않았다면, 필드는 "**No Negative**"로 채워집니다 - - 리뷰어가 부정적인 리뷰 열에 긍정적인 리뷰를 남길 수 있다는 점을 참고합니다 (e.g. "there is nothing bad about this hotel") -- `Review_Total_Negative_Word_Counts` - - 많은 부정적인 단어들은 점수가 낮습니다 (감정을 확인하지 않습니다) -- `Positive_Review` - - 만약 리뷰어가 아무것도 작성하지 않았다면, 필드는 "**No Positive**"로 채워집니다 - - 리뷰어가 긍정적인 리뷰 열에 부정적인 리뷰를 남길 수 있다는 점을 참고합니다 (e.g. "there is nothing good about this hotel at all") -- `Review_Total_Positive_Word_Counts` - - 많은 긍정적인 단어들은 점수가 높습니다 (감정을 확인하지 않습니다) -- `Review_Date` and `days_since_review` - - 최근이나 과거에 작성된 리뷰가 적용될 수 있습니다 (과거에 작성된 리뷰는 호텔 관리가 바뀌었거나, 리노베이션이 끝났거나, 수영장이 생기는 등 최근보다 정확하지 않을 수 있습니다.) -- `Tags` - - 리뷰어가 게스트 타입 (예시. 솔로 혹은 패밀리), 지낸 룸 타입, 지낸 기간처럼 작성한 리뷰 방식을 설명하고자 선택할 수 있는 짧은 설명문입니다. - - 불행하게도, 이 태그를 사용하는 것은 문제가 있으므로, 아래 usefulness를 설명하는 섹션으로 확인합니다 - -**리뷰어 열** - -- `Total_Number_of_Reviews_Reviewer_Has_Given` - - 예시로, 수백 개 리뷰를 작성한 다량의 리뷰어가 긍정적보다 부정적으로 리뷰를 남긴다고 판단할 수 있다면, recommendation 모델에서 한 인자가 될 수 있습니다. 그러나, 특정 리뷰를 작성한 리뷰어는 유니크 코드로 식별하지 않으므로, 리뷰 셋에 링크할 수 없습니다. 100개보다 더 작성한 30명 리뷰어가 있지만, recommendation 모델에 어떤 방식으로 도울 수 있는지 보기 힘듭니다. - -- `Reviewer_Nationality` - - 일부 사람들은 국가마다 성향이 다르므로 긍정적이나 부정적인 리뷰를 줄 수 있다고 생각합니다. 모델에 사례 증거를 신중히 만듭니다. 국가(인종)에 대한 고정 관념이며, 각 리뷰어는 경험을 기반해서 개인적으로 리뷰를 작성했습니다. 이전에 지낸 호텔, 이동한 거리, 그리고 개인 체질 같은 요인으로 다르게 필터링되었을 수 있습니다. 국적이 리뷰 점수에 대한 이유가 되는 것은 합리적이지 않습니다. - -##### 예제 - -| Average Score | Total Number Reviews | Reviewer Score | Negative
Review | Positive Review | Tags | -| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | -| 7.8 | 1945 | 2.5 | This is currently not a hotel but a construction site I was terroized from early morning and all day with unacceptable building noise while resting after a long trip and working in the room People were working all day i e with jackhammers in the adjacent rooms I asked for a room change but no silent room was available To make thinks worse I was overcharged I checked out in the evening since I had to leave very early flight and received an appropiate bill A day later the hotel made another charge without my concent in excess of booked price It s a terrible place Don t punish yourself by booking here | Nothing Terrible place Stay away | Business trip Couple Standard Double Room Stayed 2 nights | - -본 내용처럼, 게스트는 호텔에 즐겁게 지내지 못했습니다. 호텔은 1945개 리뷰 중 7.8 점으로 좋은 평균이지만, 리뷰어는 2.5점을 주며 지냈던 내용을 115개 단어를 부정적으로 남겼습니다. 만약 Positive_Review 열이 깨끗하면, 긍정이 없다고 추측하겠지만, 7개 경고문을 작성했습니다. 만약 단어 의미나 단어 감정 대신 단어 자체를 센다면, 리뷰어 의도를 왜곡해서 볼 수 있습니다. 이상하게, 2.5 점은 혼란스러우며, 만약 호탤애 지낸 게 불쾌하다고, 모든 포인트를 다 주나요? 데이터셋을 가까이 조사하면, 낮을 수 있는 점수가 0점이 아니라, 2.5점이라고 볼 수 있습니다. 가능한 높은 점수는 10점 입니다. - -##### Tags - -언급된 것처럼, 한 눈에, `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* 같은 특정 용어의 빈도를 측정하며, 추천 모델에 인자로 반영합니다 - -태그는 일반적으로 (항상 그렇지 않지만) *Type of trip*, *Type of guests*, *Type of room*, *Number of nights*, 그리고 *Type of device review was submitted on* 에 따라서 5에서 6개 컴마로 구분된 값 리스트를 포함한 단일 필드입니다. 그러나, 일부 리뷰어는 각 필드를 채우지 않기 때문에 (하나정도 공백으로 남길 수 있습니다), 값을 동일한 순서로 항상 유지할 수 없습니다. - -예시는, *Type of group*으로 합니다. `Tags` 열에 1025개 필드가 서로 안 겹칠 가능성이 있지만, 불행히도 일부만 그룹으로 (일부 방 타입처럼) 참조합니다. 만약 패밀리를 언급한 것만 필터링하면, 많은 *Family room* 타입 결과를 포함해서 냅니다. 만약 *with* 용어를 포함하면, 즉 *Family with* 값을 센다면, 결과는 더 좋게, "Family with young children" 또는 "Family with older children" 문구가 포함된 515,000개 중 80,000개 넘는 결과가 나옵니다. - -태그 열을 쓰기에는 완벽하지 않다는 것을 의미하지만, 약간 작업하면 유용해질 수 있습니다. - -##### 평균 호텔 점수 - -이해할 수 없는 데이터셋으로 이상하거나 모순되는게 많지만, 모델을 만들 때 알 수 있는 예시가 있습니다. 만약 알게 된다면, 토론 섹션에 알려주세요! - -데이터셋의 평균 점수와 리뷰 수에 관련된 열은 다음과 같습니다: - -1. Hotel_Name -2. Additional_Number_of_Scoring -3. Average_Score -4. Total_Number_of_Reviews -5. Reviewer_Score - -이 데이터셋에서 가장 리뷰가 많은 싱글 호텔은 515,000개 중 4789개 리뷰를 받은 *Britannia International Hotel Canary Wharf*입니다. 하지만 만약 호텔의 `Total_Number_of_Reviews` 값을 보면, 9086 입니다. 리뷰없는 점수가 많을 것이라고 추정할 수 있어서, `Additional_Number_of_Scoring` 열 값을 추가할 필요가 있습니다. 이 값은 2682이며, `Total_Number_of_Reviews`의 1615가 부족해져서 4789를 더하면 7,471이 됩니다. - -만약 `Average_Score` 열로, 데이터셋에서 리뷰의 평균을 추축할 수 있지만, Kaggle 설명은 "*Average Score of the hotel, calculated based on the latest comment in the last year*"라고 합니다. 유용해보이지 않지만, 데이터셋의 리뷰 점수를 기반해서 평균을 계산할 수 있습니다. 예시로 동일한 호텔을 사용해서, 평균 호텔 점수가 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의 정수입니다. 그러나, 알부 부정적인 리뷰를 읽을 수 있습니다. 직접 할 필요가 없으므로, 하지말라고 권유하고 싶습니다. 일부는 "The weather wasn't great"와 같이, 멍청하거나, 관련없는 부정적 호텔 리뷰이거나, 호텔에서 어떤 컨트롤도 할 수 없는 내용입니다. 하지만 이것도 일부 어두운 측면의 리뷰입니다. 때로 부정적인 리뷰는 racist, sexist, 또는 ageist적 입니다. 불행하지만 퍼블릭 웹사이트에서 긁어온 데이터에서 예상하게 됩니다. 일부 리뷰어는 싫어하거나, 불편하거나, 화낼 수 있는 리뷰를 남깁니다. 읽고 속상한 것보다 코드로 감정을 측정하는 것이 더 좋습니다. 즉, 소수가 작성하지만, 모두 똑같이 있습니다. - -## 연습 - 데이터 탐색 - -### 데이터 불러오기 - -데이터를 시각적으로 확인하는 것도 충분하므로, 이제 살짝 코드를 작성하고 답변을 얻겠습니다! 이 섹션에서 pandas 라이브러리를 사용합니다. 첫 작업은 CSV 데이터를 불러오고 읽어올 수 있는지 확인하는 작업입니다. pandas 라이브러리는 빠른 CSV 리더이며, 이전 강의에서 했던, dataframe에 결과를 둡니다. 불러올 CSV는 50만 행이 넘지만, 17 열만 있습니다. Pandas는 모든 행에서 작업할 기능을 포함해서, 데이터프레임과 상호 작용하는 강력한 방식을 많이 제공합니다. - -이 강의의 이 곳에서, 코드 스니펫과 일부 코드 설명과 일부 결과에 의미를 둔 토론을 하게 됩니다. 코드에 있는 _notebook.ipynb_ 를 사용합니다. - -사용할 데이터 파일을 불러오기 위해서 시작합니다: - -```python -# Load the hotel reviews from CSV -import pandas as pd -import time -# importing time so the start and end time can be used to calculate file loading time -print("Loading data file now, this could take a while depending on file size") -start = time.time() -# df is 'DataFrame' - make sure you downloaded the file to the data folder -df = pd.read_csv('../../data/Hotel_Reviews.csv') -end = time.time() -print("Loading took " + str(round(end - start, 2)) + " seconds") -``` - -이제 데이터가 불러와지면, 일부 작업을 할 수 있습니다. 다음 파트를 위해서 프로그램의 상단에 코드를 둡니다. - -## 데이터 탐색하기 - -이 케이스에서, 데이터는 이미 *깨끗하므로*, 작업할 준비가 되었고, 영어만 대상으로한 알고리즘에 걸릴 수 있는 다른 언어가 없다는 점을 의미합니다. - -✅ NLP 기술을 적용하기 전 포맷에 일부 초기 처리가 필요한 데이터로 작성할 수 있지만, 이번에는 아닙니다. 만약 한다면, 비-영어권 언어를 핸들링 할 수 있나요? - -데이터를 불러오는 순간, 코드로 탐색할 수 있는지 시간을 내어 확인합니다. `Negative_Review` 와 `Positive_Review` 열에 집중하기 윈하면 매우 쉽습니다. NLP 알고리즘이 처리할 자연어 텍스트로 채워졌습니다. 하지만 잠깐 기다려봅니다! NLP와 감정으로 들어가기 전, 다음 코드로 만약 데이터셋에 주어진 값이 pandas로 계산한 값과 매치되는지 확실히 봅시다. - -## 데이터프레임 작업 - -이 강의에서 첫 작업은 데이터프레임을 (바꾸지 않고) 점검하는 코드로 작성해서 다음 가정이 올바른지 체크하는 것입니다. - -> 많은 프로그래밍 작업처럼, 마무리할 여러 방식이 있지만, 특히 미래에 다시 코드를 작성할 때 이해하기 쉬우려면, 간단하고, 쉽게 할 수 있도록 좋은 조언을 하게 됩니다. 데이터프레임에는, 효율적인 방식으로 자주 할 수 있는 포괄적인 API가 있습니다. - -코딩 작업으로 다음 질문을 설명하며 솔루션에 기대지 않고 답변할 수 있게 시도합니다 - -1. 직전에 불러온 데이터프레임의 *shape*를 출력합니다 (shape는 행과 열의 개수입니다) -2. 리뷰어 국적 대상으로 빈도 카운트를 계산합니다: - 1. `Reviewer_Nationality` 열에 얼마나 많은 별개 값이 있으며 어떤가요? - 2. 데이터셋에서 가장 일반적인 리뷰어 국적은 어디인가요 (국가와 리뷰 개수 출력)? - 3. 다음으로 더 자주 발견되는 국적은 어디고, 빈도를 카운트하나요? -3. 상위 10에 드는 리뷰어 국적에서 가장 자주 리뷰된 호텔은 어디인가요? -4. 데이터셋에서 호텔 별 (호텔의 빈도 개수) 리뷰가 얼마나 있나요? -5. 데이터셋에서 각 호텔마다 `Average_Score` 열이 있지만, 평균 점수도 계산할 수 있습니다 (각 호텔의 데이터셋에서 모든 리뷰어 점수의 평균을 얻습니다). 계산된 평균을 포함한 `Calc_Average_Score` 열 헤더로 데이터프레임에 새로운 열을 추가합니다. -6. 호텔에서 동일한 (반올림한 소수점 1자리) `Average_Score` 와 `Calc_Average_Score`를 가지고 있나요? - 1. Series (row)로 값을 비교하며, 값이 같지 않을 때 메시지를 출력하는 Python 함수를 작성합니다. 그러면 `.apply()` 메소드를 사용해서 처리하면 함수로 모든 행을 처리할 수 있습니다. -7. "No Negative"의 `Negative_Review` 열 값에 있는 행이 얼마나 있는지 계산하고 출력합니다 -8. "No Positive"의 `Positive_Review` 열 값에 있는 행이 얼마나 있는지 계산하고 출력합니다 -9. "No Positive"의 `Negative_Review` 열 값**과** "No Negative"의 `Negative_Review` 열 값에 있는 행이 얼마나 있는지 계산하고 출력합니다 - -### 코드 답변 - -1. 직전에 불러온 데이터프레임의 *shape*를 출력합니다 (shape는 행과 열의 개수입니다) - - ```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() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality - nationality_freq = df["Reviewer_Nationality"].value_counts() - print("There are " + str(nationality_freq.size) + " different nationalities") - # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data - print(nationality_freq) - - There are 227 different nationalities - United Kingdom 245246 - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - ... - Comoros 1 - Palau 1 - Northern Mariana Islands 1 - Cape Verde 1 - Guinea 1 - Name: Reviewer_Nationality, Length: 227, dtype: int64 - ``` - - 3. 다음으로 더 자주 발견되는 국적은 어디고, 빈도를 카운트하나요? - - ```python - print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") - # Notice there is a leading space on the values, strip() removes that for printing - # What is the top 10 most common nationalities and their frequencies? - print("The next 10 highest frequency reviewer nationalities are:") - print(nationality_freq[1:11].to_string()) - - The highest frequency reviewer nationality is United Kingdom with 245246 reviews. - The next 10 highest frequency reviewer nationalities are: - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - Saudi Arabia 8951 - Netherlands 8772 - Switzerland 8678 - Germany 7941 - Canada 7894 - France 7296 - ``` - -3. 상위 10에 드는 리뷰어 국적에서 가장 자주 리뷰된 호텔은 어디인가요? - - ```python - # What was the most frequently reviewed hotel for the top 10 nationalities - # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) - for nat in nationality_freq[:10].index: - # First, extract all the rows that match the criteria into a new dataframe - nat_df = df[df["Reviewer_Nationality"] == nat] - # Now get the hotel freq - freq = nat_df["Hotel_Name"].value_counts() - print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") - - The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. - The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. - The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. - The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. - The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. - The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. - The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. - The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. - The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. - The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. - ``` - -4. 데이터셋에서 호텔 별 (호텔의 빈도 개수) 리뷰가 얼마나 있나요? - - ```python - # First create a new dataframe based on the old one, removing the uneeded columns - hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) - - # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found - hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') - - # Get rid of all the duplicated rows - hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) - display(hotel_freq_df) - ``` - | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | - | :----------------------------------------: | :---------------------: | :-----------------: | - | Britannia International Hotel Canary Wharf | 9086 | 4789 | - | Park Plaza Westminster Bridge London | 12158 | 4169 | - | Copthorne Tara Hotel London Kensington | 7105 | 3578 | - | ... | ... | ... | - | Mercure Paris Porte d Orleans | 110 | 10 | - | Hotel Wagner | 135 | 10 | - | Hotel Gallitzinberg | 173 | 8 | - - *counted in the dataset* 결과로 `Total_Number_of_Reviews`에서 값이 매치되지 않는 점을 알 것입니다. 데이터셋의 값이 호텔의 모든 리뷰 개수를 나타낸다고 하지만, 모두 스크랩하지 못했거나, 계산이 다릅니다. `Total_Number_of_Reviews`는 불명확성으로 인하여 모델에서 사용하지 않습니다. - -5. 데이터셋에서 각 호텔마다 `Average_Score` 열이 있지만, 평균 점수를 계산할 수 있습니다 (각 호텔의 데이터셋에서 모든 리뷰어 점수의 평균을 얻습니다). 계산된 평균을 포함한 `Calc_Average_Score` 열 헤더로 데이터프레임에 새로운 열을 추가합니다. `Hotel_Name`, `Average_Score`, 그리고 `Calc_Average_Score` 열을 출력합니다. - - ```python - # define a function that takes a row and performs some calculation with it - def get_difference_review_avg(row): - return row["Average_Score"] - row["Calc_Average_Score"] - - # 'mean' is mathematical word for 'average' - df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - - # Add a new column with the difference between the two average scores - df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) - - # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) - review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) - - # Sort the dataframe to find the lowest and highest average score difference - review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) - - display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) - ``` - - 또는 `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보다 큰 호텔이 오직 1개이므로, 아마도 차이를 무시하고 계산된 평균 점수를 사용할 수 있을 것입니다. - -6. "No Negative"의 `Negative_Review` 열 값에 있는 행이 얼마나 있는지 계산하고 출력합니다 - -7. "No Positive"의 `Positive_Review` 열 값에 있는 행이 얼마나 있는지 계산하고 출력합니다 - -8. "No Positive"의 `Negative_Review` 열 값**과** "No Negative"의 `Negative_Review` 열 값에 있는 행이 얼마나 있는지 계산하고 출력합니다 - - ```python - # with lambdas: - start = time.time() - no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) - print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) - - no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) - - both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) - end = time.time() - print("Lambdas took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Lambdas took 9.64 seconds - ``` - -## 다른 방식 - -다른 방식으로 Lambda 없이 아이템을 카운트하고, sum으로 행을 카운트합니다: - - ```python - # without lambdas (using a mixture of notations to show you can use both) - start = time.time() - no_negative_reviews = sum(df.Negative_Review == "No Negative") - print("Number of No Negative reviews: " + str(no_negative_reviews)) - - no_positive_reviews = sum(df["Positive_Review"] == "No Positive") - print("Number of No Positive reviews: " + str(no_positive_reviews)) - - both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) - print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) - - end = time.time() - print("Sum took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Sum took 0.19 seconds - ``` - - 둘 다 `Negative_Review` 와 `Positive_Review` 열에 대하여 각자 "No Negative"와 "No Positive" 값이 127개 행을 가지고 있다는 점을 알 수 있습니다. 리뷰어가 숫자로 이루어진 점수를 호텔에 주었지만, 어느 긍정적이나 부정적인 리뷰도 남기지 않았다는 점을 의미합니다. 운이 좋아서 적은 행 개수로(515738 중 127, 0.02%), 모델 또는 결과가 어느 방향으로 치우치지 않앗지만, 리뷰 데이터셋에 리뷰가 없으므로, 이와 같이 행을 찾기 위해서 데이터를 찾을 보람이 있습니다. - -지금 데이터셋을 찾아서, 다음 강의에서 데이터를 필터링하고 감정 분석을 추가해봅니다. - ---- -## 🚀 도전 - -이전 강의에서 본 것처럼, 이 강의에서 작업하기 전 데이터와 약점을 이해하는 것이 얼마나 치명적이게 중요한지 보여줍니다. 특별히, 텍스트-기반 데이터는, 조심히 조사해야 합니다. 다양한 text-heavy 데이터셋을 파보고 모델에서 치우치거나 편향된 감정으로 끼워놓은 영역을 찾을 수 있는지 확인합니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/) - -## 검토 & 자기주도 학습 - -[this Learning Path on NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott)로 음성과 text-heavy 모델을 만들 때 시도하는 도구를 찾아봅니다. - -## 과제 - -[NLTK](../assignment.md) diff --git a/6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md b/6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md deleted file mode 100644 index 16f2ae36..00000000 --- a/6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md +++ /dev/null @@ -1,5 +0,0 @@ -# NLTK - -## Instrucciones - -NLTK es una biblioteca bien conocida para su uso en lingüística computacional y NLP. Toma esta oportunidad para leer el '[libro NLTK](https://www.nltk.org/book/)' y prueba sus ejercicios. En esta asignación sin ponderación, conocerás esta biblioteca más a fondo. diff --git a/6-NLP/4-Hotel-Reviews-1/translations/assignment.it.md b/6-NLP/4-Hotel-Reviews-1/translations/assignment.it.md deleted file mode 100644 index 5fd90e11..00000000 --- a/6-NLP/4-Hotel-Reviews-1/translations/assignment.it.md +++ /dev/null @@ -1,5 +0,0 @@ -# NLTK - -## Instructions - -NLTK is a well-known library for use in computational linguistics and NLP. Take this opportunity to read through the '[NLTK book](https://www.nltk.org/book/)' and try out its exercises. In this ungraded assignment, you will get to know this library more deeply. diff --git a/6-NLP/4-Hotel-Reviews-1/translations/assignment.ko.md b/6-NLP/4-Hotel-Reviews-1/translations/assignment.ko.md deleted file mode 100644 index 64f96837..00000000 --- a/6-NLP/4-Hotel-Reviews-1/translations/assignment.ko.md +++ /dev/null @@ -1,5 +0,0 @@ -# NLTK - -## 설명 - -NLTK는 컴퓨터 언어학 및 자연어 처리 분야에서 잘 알려진 라이브러리입니다. 이번 시간에는 이 [NLTK 책](https://www.nltk.org/book/)을 읽고 책 안에 포함된 문제들을 풀어보세요 — 이 미채점 과제를 통해 NLTK 라이브러리에 대해 더욱 자세히 알게 될 겁니다. diff --git a/6-NLP/5-Hotel-Reviews-2/translations/README.es.md b/6-NLP/5-Hotel-Reviews-2/translations/README.es.md deleted file mode 100644 index 1791bfc5..00000000 --- a/6-NLP/5-Hotel-Reviews-2/translations/README.es.md +++ /dev/null @@ -1,376 +0,0 @@ -# Análisis de sentimiento con reseñas de hoteles - -Ahora que has explorado a detalle el conjunto de datos, es momento de filtrar las columnas y luego usar técnicas de procesamiento del lenguaje natural sobre el conjunto de datos para obtener nuevos conocimientos acerca de los hoteles. - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39?loc=es) - -### Filtrado y operaciones de análisis de sentimiento - -Como quizá ya has notado, el conjunto de datos presenta unos cuantos problemas. Algunas columnas contienen información inútil, otras parecen incorrectas. Si estas son correctas, no está claro cómo fueron calculadas, y las respuestas no pueden verificarse de forma independiente al realizar nuestros propios cálculos. - -## Ejercicio: un poco más de procesamiento de datos - -Limpia un poco más los datos. Agrega las columnas que usaremos más tarde, cambia los valores en otras columnas y elimina completamente ciertas columnas. - -1. Procesamiento inicial de columnas - - 1. Elimina `lat` y `lng` - - 2. Reemplaza los valores de `Hotel_Address` con los siguientes valores (si la dirección contiene lo mismo que la ciudad y el país, cámbialo sólo a la ciudad y el país). - - Estas son las únicas ciudades y países en el conjunto de datos: - - Amsterdam, Netherlands - - Barcelona, Spain - - London, United Kingdom - - Milan, Italy - - Paris, France - - Vienna, Austria - - ```python - def replace_address(row): - if "Netherlands" in row["Hotel_Address"]: - return "Amsterdam, Netherlands" - elif "Barcelona" in row["Hotel_Address"]: - return "Barcelona, Spain" - elif "United Kingdom" in row["Hotel_Address"]: - return "London, United Kingdom" - elif "Milan" in row["Hotel_Address"]: - return "Milan, Italy" - elif "France" in row["Hotel_Address"]: - return "Paris, France" - elif "Vienna" in row["Hotel_Address"]: - return "Vienna, Austria" - - # Replace all the addresses with a shortened, more useful form - df["Hotel_Address"] = df.apply(replace_address, axis = 1) - # The sum of the value_counts() should add up to the total number of reviews - print(df["Hotel_Address"].value_counts()) - ``` - - Ahora puedes consultar datos a nivel de país: - - ```python - display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) - ``` - - | Hotel_Address | Hotel_Name | - | :--------------------- | :--------: | - | Amsterdam, Netherlands | 105 | - | Barcelona, Spain | 211 | - | London, United Kingdom | 400 | - | Milan, Italy | 162 | - | Paris, France | 458 | - | Vienna, Austria | 158 | - -2. Procesa las columnas Hotel Meta-review - - 1. Elimina `Additional_Number_of_Scoring` - - 1. Reemplaza `Total_Number_of_Reviews` con el número total de reseñas para ese hotel que realmente están en el conjunto de datos - - 1. Reemplaza `Average_Score` con nuestros propio puntaje calculado - - ```python - # Drop `Additional_Number_of_Scoring` - df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) - # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values - df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') - df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - ``` - -3. Procesa las columnas review - - 1. Elimina `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` y `days_since_review` - - 2. Conserva `Reviewer_Score`, `Negative_Review`, y `Positive_Review` tal cual están, - - 3. Conserva `Tags` por ahora - - - Realizaremos operaciones de filtrado adicionales sobre las etiquetas en la siguiente lección y luego se eliminarán etiquetas - -4. Procesa las columnas reviewer - - 1. Elimina `Total_Number_of_Reviews_Reviewer_Has_Given` - - 2. Conserva `Reviewer_Nationality` - -### Columnas de etiqueta (Tag) - -La columna `Tag` es problemática ya que está almacenada como lista (en forma de texto) en la columna. Desafortunadamente el orden y número de subsecciones es esta columna no son siempre los mismos. Es difícil para un humano el identificar las frases correctas en las que estar interesado, ya que hay 515,000 filas, y 1427 hoteles, y cada uno tiene opciones ligeramente diferentes que un crítico podría elegir. Aquí es donde destaca el procesamiento del lenguaje natural. Puedes escanear texto y encontrar las frases más comunes, y contarlas. - -Desafortunadamente, no estamos interesados en palabras simples, sino en frases multi-palabra (por ejemplo, *Business trip*). Ejecutar un algoritmo de distribución de frecuencia multi-palabra sobre tantos datos (6762646 palabras) podría tomar un largo período de tiempo, pero sin mirar los datos, estos parecería que es un gasto necesario. Aquí es donde el análisis exploratorio de datos es útil, porque ya has visto una muestra de estas etiquetas tales como `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']` , puedes empezar a preguntar si es posible reducir ampliamente el procesamiento que tienes que hacer. Afortunadamente, así es - pero primero necesitas seguir algunos pasos para determinar las etiquetas de interés. - -### Filtrar las etiquetas - -Recuerda que el objetivo de los conjuntos de datos es agregar sentimiento y columnas que nos ayudarán a elegir el mejor hotel (para ti o quizá un cliente te pidió realizar un bot de recomendación de hoteles). Necesitas preguntarte si la etiquetas son útiles o no en el conjunto de datos final. Aquí hay una interpretación (si necesitabas el conjunto de datos por otras razones, distintas etiquetas podrían permanecer dentro/fuera de la selección): - -1. El tipo de viaje es relevante, y así debería seguir -2. El tipo de grupo de huéspedes es importante, y así debería seguir -3. El tipo de cuarto, suite o estudio en que se quedó el huésped es irrelevante (todos los hoteles tienen básicamente los mismos cuartos) -4. El dispositivo desde el cual se envió la reseña es irrelevante -5. El número de noches que se hospedó el crítico *podría* ser relevante si atribuiste a las estancias largas con mayor gusto por el hotel, pero es exagerado, y probablemente irrelevante - -En resumen, **conserva 2 tipos de etiquetas y elimina el resto**. - -Primero, no quieres contar las etiquetas hasta que estén en un mejor formato, lo cual significa eliminar los corchetes y comillas. Puedes hacerlo de varias formas, pero quieres la más rápida ya que podría tomar un largo tiempo el procesar demasiados datos. Afortunadamente, pandas tiene una forma fácil de hacer cada uno de estos pasos. - -```Python -# Remove opening and closing brackets -df.Tags = df.Tags.str.strip("[']") -# remove all quotes too -df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) -``` - -Cada etiqueta se convierte en algo así: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. - -Ahora encontramos un problema. Algunas reseñas o filas tienen 5 columnas, algunas 3, otras 6. Esto es resultado de cómo se creó el conjunto de datos, y es difícil de corregir. Quieres obtener un conteo de frecuencia de cada frase, pero están en distinto orden en cada reseña, ya que el conteo podría estar apagado y un hotel podría no obtener una etiqueta asignada como lo merece. - -En su lugar, usarás el orden distinto a tu favor, ¡porque cada etiqueta es multi-palabra pero también está separada por una coma! La forma más simple de hacerlo es crear 6 columnas temporales con cada etiqueta insertada en la columna correspondiente a su orden en la etiqueta. Luego puedes unir las 6 columnas en una sola y ejecutar el método `value_counts()` en la columna resultante. Imprímelo, verás que había 2428 etiquetas únicas. Aquí una pequeña muestra: - -| Tag | Count | -| ------------------------------ | ------ | -| Leisure trip | 417778 | -| Submitted from a mobile device | 307640 | -| Couple | 252294 | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Solo traveler | 108545 | -| Stayed 3 nights | 95821 | -| Business trip | 82939 | -| Group | 65392 | -| Family with young children | 61015 | -| Stayed 4 nights | 47817 | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Family with older children | 26349 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Stayed 5 nights | 20845 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | -| 2 rooms | 12393 | - -Algunas de las etiquetas comunes como `Submitted from a mobile device` no nos son útiles, por lo que podría ser una buena idea quitarlas antes de contar la ocurrencia de las frases, pero es una operación tan rápida que puedes dejarlos e ignorarlos. - -### Eliminando la longitud de las etiquetas de estadía - -Eliminar estas etiquetas es el paso 1, reduce levemente el número total de etiquetas a ser consideradas. Nota que no las eliminas del conjunto de datos, sólo eliges eliminarlas de la consideración de valores a contar/mantener en el conjunto de datos de reseñas. - -| Length of stay | Count | -| ---------------- | ------ | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Stayed 3 nights | 95821 | -| Stayed 4 nights | 47817 | -| Stayed 5 nights | 20845 | -| Stayed 6 nights | 9776 | -| Stayed 7 nights | 7399 | -| Stayed 8 nights | 2502 | -| Stayed 9 nights | 1293 | -| ... | ... | - -Existe una gran variedad de cuartos, suites, studios, departamentos, y así sucesivamente. Estos significan casi lo mismo y no te son relevantes, así que elimínalos de consideración. - -| Type of room | Count | -| ----------------------------- | ----- | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | - -Finalmente, y esto es placentero (porque no requirió casi nada de procesamiento), te quedarás con las siguientes etiquetas *útiles*: - -| Tag | Count | -| --------------------------------------------- | ------ | -| Leisure trip | 417778 | -| Couple | 252294 | -| Solo traveler | 108545 | -| Business trip | 82939 | -| Group (combined with Travellers with friends) | 67535 | -| Family with young children | 61015 | -| Family with older children | 26349 | -| With a pet | 1405 | - -Podrías argumentar que `Travellers with friends` es casi lo mismo que `Group`, y sería justo combinar las dos de arriba. El código para identificar las etiquetas correctas es [el notebook de Etiquetas](../solution/1-notebook.ipynb). - -El último paso es crear nuevas columnas para cada una de estas etiquetas. Luego, para cada fila de reseña, si la columna `Tag` coincide con una de las nuevas columnas, agrega un 1, si no es así, agrega un 0. El resultado final será un conteo de cuántos críticos eligieron este hotel (en agregado), digamos, para negocios vs ocio, o para traer mascota, y esta es información útil al recomendar un hotel. - -```python -# Process the Tags into new columns -# The file Hotel_Reviews_Tags.py, identifies the most important tags -# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, -# Family with young children, Family with older children, With a pet -df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) -df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) -df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) -df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) -df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) -df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) -df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) -df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) - -``` - -### Guarda tu archivo - -Finalmente, guarda el conjunto de datos tal cual se encuentra ahora con un nuevo nombre. - -```python -df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) - -# Saving new data file with calculated columns -print("Saving results to Hotel_Reviews_Filtered.csv") -df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) -``` - -## Operaciones de análisis de sentimiento - -En esta sección final, aplicarás análisis de sentimiento a las columnas de reseña y guardarás los resultados en un conjunto de datos. - -## Ejercicio: Carga y guarda los datos filtrados - -Nota que ahora estás cargando el conjunto de datos filtrado que fue guardado en la sección anterior, **no** el conjunto de datos original. - -```python -import time -import pandas as pd -import nltk as nltk -from nltk.corpus import stopwords -from nltk.sentiment.vader import SentimentIntensityAnalyzer -nltk.download('vader_lexicon') - -# Load the filtered hotel reviews from CSV -df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') - -# You code will be added here - - -# Finally remember to save the hotel reviews with new NLP data added -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) -``` - -### Eliminando stop words - -Si fueses a ejecutar el análisis de sentimiento en las columnas de reseñas positivas y negativas, te llevaría mucho tiempo. Al probarlo en un laptop de pruebas poderosa con una CPU rápida, tomó de 12 - 14 minutos dependiendo en qué biblioteca de sentimientos fue usada. Eso es demasiado tiempo (relativamente), por lo que vale la pena investigar si se puede acelerar. - -Eliminar stop words, o palabras comunes del Inglés que no cambian el sentimiento de una oración, es el primer paso. Al eliminarlas, el análisis de sentimiento debería ejecutarse más rápido, pero no sería menos preciso (ya que las stop words no afectan el sentimiento, pero sí ralentizan el análisis). - -La reseña negativa más larga fue de 395 palabras, pero después de eliminar las stop words, es de 195 palabras. - -Eliminar las stops words también es una operación rápida, remover las stop words de 2 columnas de reseñas de 515,000 filas tomó 3.3 segundos en el dispositivo de prueba, Podría tomar ligeramente más o menos tiempo dependiendo de la velocidad del CPU de tu dispositivo, la RAM, si tienes un disco de estado sólido o no, entre otros factores. La relatividad de corto período de operación significa que si se mejora el tiempo de análisis de sentimiento, entonces vale la pena hacerlo. - -```python -from nltk.corpus import stopwords - -# Load the hotel reviews from CSV -df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") - -# Remove stop words - can be slow for a lot of text! -# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches -# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends -start = time.time() -cache = set(stopwords.words("english")) -def remove_stopwords(review): - text = " ".join([word for word in review.split() if word not in cache]) - return text - -# Remove the stop words from both columns -df.Negative_Review = df.Negative_Review.apply(remove_stopwords) -df.Positive_Review = df.Positive_Review.apply(remove_stopwords) -``` - -### Realizando análisis de sentimiento - -Ahora deberías calcular el análisis de sentimiento tanto para las columnas de reseñas positivas como negativas y almacenar el resultado en 2 nuevas columnas. La prueba del sentimiento será compararlo con el puntaje del crítico para la misma reseña. Por ejemplo, si el sentimiento piensa que la reseña negativa tuvo un sentimiento de 1 (sentimiento extremadamente positivo) y un sentimiento de reseña positiva de 1, pero el crítico le dió al hotel el puntaje más bajo posible, luego que el texto de la reseña no coincide con el puntaje o el analizador de sentimiento no pudo reconocer el sentimiento de forma correcta. Deberías esperar que algunos puntajes de sentimiento sean completamente erróneos, y a menudo será explicable, por ejemplo, la reseña podría ser extremadamente sarcástica "Of course I LOVED sleeping in a room with no heating" y el analizador de sentimiento piensa que es un sentimiento positivo, aunque un humano leyéndolo sabría que fue sarcasmo. - -NLTK provee distintos analizadores de sentimiento con los cuales aprender, y puedes sustituirlos y así ver si el sentimiento es más o menos preciso. El análisis de sentimiento VADER se usó aquí. - -> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -```python -from nltk.sentiment.vader import SentimentIntensityAnalyzer - -# Create the vader sentiment analyser (there are others in NLTK you can try too) -vader_sentiment = SentimentIntensityAnalyzer() -# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -# There are 3 possibilities of input for a review: -# It could be "No Negative", in which case, return 0 -# It could be "No Positive", in which case, return 0 -# It could be a review, in which case calculate the sentiment -def calc_sentiment(review): - if review == "No Negative" or review == "No Positive": - return 0 - return vader_sentiment.polarity_scores(review)["compound"] -``` - -Después en tu programa cuando estés listo para calcular el sentimiento, puedes aplicarlo a ca reseña como sigue: - -```python -# Add a negative sentiment and positive sentiment column -print("Calculating sentiment columns for both positive and negative reviews") -start = time.time() -df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) -df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) -end = time.time() -print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") -``` - -Esto toma aproximadamente 120 segundos en mi computadora, pero varía en cada equipo. Si quieres imprimir los resultados y ver si el sentimiento coincide con la reseña: - -```python -df = df.sort_values(by=["Negative_Sentiment"], ascending=True) -print(df[["Negative_Review", "Negative_Sentiment"]]) -df = df.sort_values(by=["Positive_Sentiment"], ascending=True) -print(df[["Positive_Review", "Positive_Sentiment"]]) -``` - -¡Lo último por hacer con el archivo antes de usarlo en el desafío, es guardarlo! También deberías considerar reordenar todas tus nuevas columnas para que sean fáciles de usar (para un humano, es un cambio cosmético). - -```python -# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) -df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) - -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) -``` - -Deberías ejecutar el código completo del [notebook de análisis](../solution/3-notebook.ipynb) (después de que hayas ejecutado [tu notebook de filtrado](../solution/1-notebook.ipynb) para generar el archivo Hotel_Reviews_Filtered.csv). - -Para revisar, los pasos son: - -1. Se exploró el archivo original del conjunto de datos **Hotel_Reviews.csv** en la lección anterior con [el notebook explorador](../../4-Hotel-Reviews-1/solution/notebook.ipynb) -2. Se filtró Hotel_Reviews.csv con [el notebook de filtrado](../solution/1-notebook.ipynb) resultando el archivo **Hotel_Reviews_Filtered.csv** -3. Se procesó Hotel_Reviews_Filtered.csv con [el notebook de análisis de sentimiento](../solution/3-notebook.ipynb) obteniendo como resultado **Hotel_Reviews_NLP.csv** -4. Usa Hotel_Reviews_NLP.csv en el desafío NLP de abajo - -### Conclusión - -Cuando iniciaste, tenías un conjunto de datos con columnas y datos pero no todos ello podían ser verificados o usados. Exploraste los datos, filtraste lo que no necesitas, convertiste etiquetas en algo útil, calculaste tus propios promedios, agregaste algunas columnas de sentimiento y espero hayas aprendido cosas interesantes acerca de procesar texto natural. - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40?loc=es) - -## Desafío - -Ahora que tienes tu conjunto de datos analizado por sentimiento, observa si puedes usar las estrategias que aprendiste en este plan de estudios (agrupamiento, ¿quizá?) para determinar patrones alrededor del sentimiento. - -## Revisión y autoestudio - -Toma [este módulo de aprendizaje](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) para aprender más y usar distintas herramientas para explorar el sentimiento en el texto. - -## Asignación - -[Prueba distintos conjuntos de datos](assignment.es.md) diff --git a/6-NLP/5-Hotel-Reviews-2/translations/README.it.md b/6-NLP/5-Hotel-Reviews-2/translations/README.it.md deleted file mode 100644 index e7d4d26f..00000000 --- a/6-NLP/5-Hotel-Reviews-2/translations/README.it.md +++ /dev/null @@ -1,376 +0,0 @@ -# Analisi del sentiment con recensioni di hotel - -Ora che si è esplorato in dettaglio l'insieme di dati, è il momento di filtrare le colonne e quindi utilizzare le tecniche NLP sull'insieme di dati per ottenere nuove informazioni sugli hotel. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/?loc=it) - -### Operazioni di Filtraggio e Analisi del Sentiment - -Come probabilmente notato, l'insieme di dati presenta alcuni problemi. Alcune colonne sono piene di informazioni inutili, altre sembrano errate. Se sono corrette, non è chiaro come sono state calcolate e le risposte non possono essere verificate in modo indipendente dai propri calcoli. - -## Esercizio: un po' più di elaborazione dei dati - -Occorre pulire un po' di più i dati. Si aggiungono colonne che saranno utili in seguito, si modificano i valori in altre colonne e si eliminano completamente determinate colonne. - -1. Elaborazione iniziale colonne - - 1. Scartare `lat` e `lng` - - 2. Sostituire i valori `Hotel_Address` con i seguenti valori (se l'indirizzo contiene lo stesso della città e del paese, si cambia solo con la città e la nazione). - - Queste sono le uniche città e nazioni nell'insieme di dati: - - Amsterdam, Netherlands - - Barcelona, Spain - - London, United Kingdom - - Milan, Italy - - Paris, France - - Vienna, Austria - - ```python - def replace_address(row): - if "Netherlands" in row["Hotel_Address"]: - return "Amsterdam, Netherlands" - elif "Barcelona" in row["Hotel_Address"]: - return "Barcelona, Spain" - elif "United Kingdom" in row["Hotel_Address"]: - return "London, United Kingdom" - elif "Milan" in row["Hotel_Address"]: - return "Milan, Italy" - elif "France" in row["Hotel_Address"]: - return "Paris, France" - elif "Vienna" in row["Hotel_Address"]: - return "Vienna, Austria" - - # Sostituisce tutti gli indirizzi con una forma ridotta più utile - df["Hotel_Address"] = df.apply(replace_address, axis = 1) - # La somma di value_counts() dovrebbe sommarsi al numero totale recensioni - print(df["Hotel_Address"].value_counts()) - ``` - - Ora si possono interrogare i dati a livello di nazione: - - ```python - display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) - ``` - - | Hotel_Address | Hotel_Name (Nome Hotel) | - | :--------------------- | :---------------------: | - | Amsterdam, Paesi Bassi | 105 | - | Barcellona, Spagna | 211 | - | Londra, Regno Unito | 400 | - | Milano, Italia | 162 | - | Parigi, Francia | 458 | - | Vienna, Austria | 158 | - -2. Elaborazione colonne di meta-recensione dell'hotel - -1. Eliminare `Additional_Number_of_Scoring` - -1. Sostituire `Total_Number_of_Reviews` con il numero totale di recensioni per quell'hotel che sono effettivamente nell'insieme di dati - -1. Sostituire `Average_Score` con il punteggio calcolato via codice - -```python -# Elimina `Additional_Number_of_Scoring` -df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) -# Sostituisce `Total_Number_of_Reviews` e `Average_Score` con i propri valori calcolati -df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') -df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) -``` - -3. Elaborazione delle colonne di recensione - - 1. Eliminare `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` e `days_since_review` - - 2. Mantenere `Reviewer_Score`, `Negative_Review` e `Positive_Review` così come sono - - 3. Conservare i `Tags` per ora - - - Si faranno alcune operazioni di filtraggio aggiuntive sui tag nella prossima sezione, successivamente i tag verranno eliminati - -4. Elaborazione delle colonne del recensore - -1. Scartare `Total_Number_of_Reviews_Reviewer_Has_Given` - -2. Mantenere `Reviewer_Nationality` - -### Colonne tag - -Le colonne `Tag` sono problematiche in quanto si tratta di un elenco (in formato testo) memorizzato nella colonna. Purtroppo l'ordine e il numero delle sottosezioni in questa colonna non sono sempre gli stessi. È difficile per un essere umano identificare le frasi corrette a cui essere interessato, perché ci sono 515.000 righe e 1427 hotel e ognuno ha opzioni leggermente diverse che un recensore potrebbe scegliere. È qui che la NLP brilla. Si può scansionare il testo, trovare le frasi più comuni e contarle. - -Purtroppo non interessano parole singole, ma frasi composte da più parole (es. *Viaggio di lavoro*). L'esecuzione di un algoritmo di distribuzione della frequenza a più parole su così tanti dati (6762646 parole) potrebbe richiedere una quantità straordinaria di tempo, ma senza guardare i dati, sembrerebbe che sia una spesa necessaria. È qui che l'analisi dei dati esplorativi diventa utile, perché si è visto un esempio di tag come `["Business trip", "Solo traveler", "Single Room", "Stayed 5 nights", "Submitted from a mobile device"]` , si può iniziare a chiedersi se è possibile ridurre notevolmente l'elaborazione da fare. Fortunatamente lo è, ma prima occorre seguire alcuni passaggi per accertare i tag di interesse. - -### Filtraggio tag - -Ricordare che l'obiettivo dell'insieme di dati è aggiungere il sentiment e le colonne che aiuteranno a scegliere l'hotel migliore (per se stessi o forse per un cliente che incarica di creare un bot di raccomandazione dell'hotel). Occorre chiedersi se i tag sono utili o meno nell'insieme di dati finale. Ecco un'interpretazione (se serve l'insieme di dati per altri motivi diversi tag potrebbero rimanere dentro/fuori dalla selezione): - -1. Il tipo di viaggio è rilevante e dovrebbe rimanere -2. Il tipo di gruppo di ospiti è importante e dovrebbe rimanere -3. Il tipo di camera, suite o monolocale in cui ha soggiornato l'ospite è irrilevante (tutti gli hotel hanno praticamente le stesse stanze) -4. Il dispositivo su cui è stata inviata la recensione è irrilevante -5. Il numero di notti in cui il recensore ha soggiornato *potrebbe* essere rilevante se si attribuisce a soggiorni più lunghi un gradimento maggiore per l'hotel, ma è una forzatura e probabilmente irrilevante - -In sintesi, si **mantengono 2 tipi di tag e si rimuove il resto**. - -Innanzitutto, non si vogliono contare i tag finché non sono in un formato migliore, quindi ciò significa rimuovere le parentesi quadre e le virgolette. Si può fare in diversi modi, ma serve il più veloce in quanto potrebbe richiedere molto tempo per elaborare molti dati. Fortunatamente, pandas ha un modo semplice per eseguire ciascuno di questi passaggi. - -```Python -# Rimuove le parentesi quadre di apertura e chiusura -df.Tags = df.Tags.str.strip("[']") -# rimuove anche tutte le virgolette -df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) -``` - -Ogni tag diventa qualcosa come: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. - -Successivamente si manifesta un problema. Alcune recensioni, o righe, hanno 5 colonne, altre 3, altre 6. Questo è il risultato di come è stato creato l'insieme di dati ed è difficile da risolvere. Si vuole ottenere un conteggio della frequenza di ogni frase, ma sono in ordine diverso in ogni recensione, quindi il conteggio potrebbe essere disattivato e un hotel potrebbe non ricevere un tag assegnato per ciò che meritava. - -Si utilizzerà invece l'ordine diverso a proprio vantaggio, perché ogni tag è composto da più parole ma anche separato da una virgola! Il modo più semplice per farlo è creare 6 colonne temporanee con ogni tag inserito nella colonna corrispondente al suo ordine nel tag. Quindi si uniscono le 6 colonne in una grande colonna e si esegue il metodo `value_counts()` sulla colonna risultante. Stampandolo, si vedrà che c'erano 2428 tag univoci. Ecco un piccolo esempio: - -| Tag | Count | -| ------------------------------ | ------ | -| Leisure trip | 417778 | -| Submitted from a mobile device | 307640 | -| Couple | 252294 | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Solo traveler | 108545 | -| Stayed 3 nights | 95821 | -| Business trip | 82939 | -| Group | 65392 | -| Family with young children | 61015 | -| Stayed 4 nights | 47817 | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Family with older children | 26349 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Stayed 5 nights | 20845 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | -| 2 rooms | 12393 | - -Alcuni dei tag comuni come `Submitted from a mobile device` non sono di alcuna utilità, quindi potrebbe essere una cosa intelligente rimuoverli prima di contare l'occorrenza della frase, ma è un'operazione così veloce che si possono lasciare e ignorare. - -### Rimozione della durata dai tag di soggiorno - -La rimozione di questi tag è il passaggio 1, riduce leggermente il numero totale di tag da considerare. Notare che non si rimuovono dall'insieme di dati, si sceglie semplicemente di rimuoverli dalla considerazione come valori da contare/mantenere nell'insieme di dati delle recensioni. - -| Length of stay | Count | -| ---------------- | ------ | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Stayed 3 nights | 95821 | -| Stayed 4 nights | 47817 | -| Stayed 5 nights | 20845 | -| Stayed 6 nights | 9776 | -| Stayed 7 nights | 7399 | -| Stayed 8 nights | 2502 | -| Stayed 9 nights | 1293 | -| ... | ... | - -C'è una grande varietà di camere, suite, monolocali, appartamenti e così via. Significano tutti più o meno la stessa cosa e non sono rilevanti allo scopo, quindi si rimuovono dalla considerazione. - -| Type of room | Count | -| ----------------------------- | ----- | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | - -Infine, e questo è delizioso (perché non ha richiesto molta elaborazione), rimarranno i seguenti tag *utili*: - -| Tag | Count | -| --------------------------------------------- | ------ | -| Leisure trip | 417778 | -| Couple | 252294 | -| Solo traveler | 108545 | -| Business trip | 82939 | -| Group (combined with Travellers with friends) | 67535 | -| Family with young children | 61015 | -| Family with older children | 26349 | -| With a pet | 1405 | - -Si potrebbe obiettare che `Travellers with friends` (Viaggiatori con amici) è più o meno lo stesso di `Group` (Gruppo), e sarebbe giusto combinare i due come fatto sopra. Il codice per identificare i tag corretti è [il notebook Tags](../solution/1-notebook.ipynb). - -Il passaggio finale consiste nel creare nuove colonne per ciascuno di questi tag. Quindi, per ogni riga di recensione, se la colonna `Tag` corrisponde a una delle nuove colonne, aggiungere 1, in caso contrario aggiungere 0. Il risultato finale sarà un conteggio di quanti recensori hanno scelto questo hotel (in aggregato) per, ad esempio, affari o piacere, o per portare un animale domestico, e questa è un'informazione utile quando consiglia un hotel. - -```python -# Elabora Tags in nuove colonne -# Il file Hotel_Reviews_Tags.py, identifica i tag più importanti -# Leisure trip, Couple, Solo traveler, Business trip, Group combinato con Travelers with friends, -# Family with young children, Family with older children, With a pet -df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) -df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) -df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) -df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) -df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) -df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) -df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) -df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) - -``` - -### Salvare il file. - -Infine, salvare l'insieme di dati così com'è ora con un nuovo nome. - -```python -df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) - -# Salvataggio del nuovo file dati con le colonne calcolate -print("Saving results to Hotel_Reviews_Filtered.csv") -df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) -``` - -## Operazioni di Analisi del Sentiment - -In questa sezione finale, si applicherà l'analisi del sentiment alle colonne di recensione e si salveranno i risultati in un insieme di dati. - -## Esercizio: caricare e salvare i dati filtrati - -Tenere presente che ora si sta caricando l'insieme di dati filtrato che è stato salvato nella sezione precedente, **non** quello originale. - -```python -import time -import pandas as pd -import nltk as nltk -from nltk.corpus import stopwords -from nltk.sentiment.vader import SentimentIntensityAnalyzer -nltk.download('vader_lexicon') - -# Carica le recensioni di hotel filtrate dal CSV -df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') - -# Il proprio codice andrà aggiunto qui - - -# Infine ricordarsi di salvare le recensioni di hotel con i nuovi dati NLP aggiunti -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) -``` - -### Rimozione delle stop word - -Se si dovesse eseguire l'analisi del sentiment sulle colonne delle recensioni negative e positive, potrebbe volerci molto tempo. Testato su un potente laptop di prova con CPU veloce, ci sono voluti 12 - 14 minuti a seconda della libreria di sentiment utilizzata. È un tempo (relativamente) lungo, quindi vale la pena indagare se può essere accelerato. - -Il primo passo è rimuovere le stop word, o parole inglesi comuni che non cambiano il sentiment di una frase. Rimuovendole, l'analisi del sentiment dovrebbe essere eseguita più velocemente, ma non essere meno accurata (poiché le stop word non influiscono sul sentiment, ma rallentano l'analisi). - -La recensione negativa più lunga è stata di 395 parole, ma dopo aver rimosso le stop word, è di 195 parole. - -Anche la rimozione delle stop word è un'operazione rapida, poiché la rimozione di esse da 2 colonne di recensione su 515.000 righe ha richiesto 3,3 secondi sul dispositivo di test. Potrebbe volerci un po' più o meno tempo a seconda della velocità della CPU del proprio dispositivo, della RAM, del fatto che si abbia o meno un SSD e alcuni altri fattori. La relativa brevità dell'operazione significa che se migliora il tempo di analisi del sentiment, allora vale la pena farlo. - -```python -from nltk.corpus import stopwords - -# Carica le recensioni di hotel da CSV -df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") - -# Rimuove le stop word - potrebbe essere lento quando c'è molto testo! -# Ryan Han (ryanxjhan su Kaggle) ha un gran post riguardo al misurare le prestazioni di diversi approcci per la rimozione delle stop word -# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # si usa l'approccio raccomandato da Ryan -start = time.time() -cache = set(stopwords.words("english")) -def remove_stopwords(review): - text = " ".join([word for word in review.split() if word not in cache]) - return text - -# Rimuove le stop word da entrambe le colonne -df.Negative_Review = df.Negative_Review.apply(remove_stopwords) -df.Positive_Review = df.Positive_Review.apply(remove_stopwords) -``` - -### Esecuzione dell'analisi del sentiment - -Ora si dovrebbe calcolare l'analisi del sentiment per le colonne di recensioni negative e positive e memorizzare il risultato in 2 nuove colonne. Il test del sentiment sarà quello di confrontarlo con il punteggio del recensore per la stessa recensione. Ad esempio, se il sentiment ritiene che la recensione negativa abbia avuto un sentiment pari a 1 (giudizio estremamente positivo) e un sentiment positivo della recensione pari a 1, ma il recensore ha assegnato all'hotel il punteggio più basso possibile, allora il testo della recensione non corrisponde al punteggio, oppure l'analizzatore del sentiment non è stato in grado di riconoscere correttamente il sentiment. Ci si dovrebbe aspettare che alcuni punteggi del sentiment siano completamente sbagliati, e spesso ciò sarà spiegabile, ad esempio la recensione potrebbe essere estremamente sarcastica "Certo che mi è piaciuto dormire in una stanza senza riscaldamento" e l'analizzatore del sentimento pensa che sia un sentimento positivo, anche se un un lettore umano avrebbe rilevato il sarcasmo. - -NLTK fornisce diversi analizzatori di sentiment con cui imparare e si possono sostituire e vedere se il sentiment è più o meno accurato. Qui viene utilizzata l'analisi del sentiment di VADER. - -> Hutto, CJ & Gilbert, EE (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Ottava Conferenza Internazionale su Weblog e Social Media (ICWSM-14). Ann Arbor, MI, giugno 2014. - -```python -from nltk.sentiment.vader import SentimentIntensityAnalyzer - -# Crea l'analizzatore di sentiment vader (ce ne sono altri in NLTK che si possono provare) -vader_sentiment = SentimentIntensityAnalyzer() -# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -# Ci sono tre possibilità di input per un recensore: -# Potrebbe essere "No Negative", nel qual caso ritorna 0 -# Potrebbe essere "No Positive", nel qual caso ritorna 0 -# Potrebbe essere una recensione, nel qual caso calcola il sentiment -def calc_sentiment(review): - if review == "No Negative" or review == "No Positive": - return 0 - return vader_sentiment.polarity_scores(review)["compound"] -``` - -Più avanti nel programma, quando si è pronti per calcolare il sentiment, lo si può applicare a ciascuna recensione come segue: - -```python -# Aggiunge una colonna di sentiment negativa e positiva -print("Calculating sentiment columns for both positive and negative reviews") -start = time.time() -df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) -df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) -end = time.time() -print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") -``` - -Questo richiede circa 120 secondi sul computer utilizzato, ma varierà per ciascun computer. Se si vogliono stampare i risultati e vedere se il sentiment corrisponde alla recensione: - -```python -df = df.sort_values(by=["Negative_Sentiment"], ascending=True) -print(df[["Negative_Review", "Negative_Sentiment"]]) -df = df.sort_values(by=["Positive_Sentiment"], ascending=True) -print(df[["Positive_Review", "Positive_Sentiment"]]) -``` - -L'ultima cosa da fare con il file prima di utilizzarlo nella sfida è salvarlo! Si dovrrebbe anche considerare di riordinare tutte le nuove colonne in modo che sia facile lavorarci (per un essere umano, è un cambiamento estetico). - -```python -# Riordina le colonne (E' un estetismo ma facilita l'esplorazione successiva dei dati) -df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) - -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) -``` - -Si dovrebbe eseguire l'intero codice per [il notebook di analisi](../solution/3-notebook.ipynb) (dopo aver eseguito [il notebook di filtraggio](../solution/1-notebook.ipynb) per generare il file Hotel_Reviews_Filtered.csv). - -Per riepilogare, i passaggi sono: - -1. Il file del'insieme di dati originale **Hotel_Reviews.csv** è stato esplorato nella lezione precedente con [il notebook explorer](../../4-Hotel-Reviews-1/solution/notebook.ipynb) -2. Hotel_Reviews.csv viene filtrato [dal notebook di filtraggio](../solution/1-notebook.ipynb) risultante in **Hotel_Reviews_Filtered.csv** -3. Hotel_Reviews_Filtered.csv viene elaborato dal [notebook di analisi del sentiment](../solution/3-notebook.ipynb) risultante in **Hotel_Reviews_NLP.csv** -4. Usare Hotel_Reviews_NLP.csv nella Sfida NLP di seguito - -### Conclusione - -Quando si è iniziato, si disponeva di un insieme di dati con colonne e dati, ma non tutto poteva essere verificato o utilizzato. Si sono esplorati i dati, filtrato ciò che non serve, convertito i tag in qualcosa di utile, calcolato le proprie medie, aggiunto alcune colonne di sentiment e, si spera, imparato alcune cose interessanti sull'elaborazione del testo naturale. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/?loc=it) - -## Sfida - -Ora che si è analizzato il proprio insieme di dati per il sentiment, vedere se si possono usare le strategie apprese in questo programma di studi (clustering, forse?) per determinare modelli intorno al sentiment. - -## recensione e Auto Apprendimento - -Seguire [questo modulo di apprendimento](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) per saperne di più e utilizzare diversi strumenti per esplorare il sentiment nel testo. - -## Compito - -[Provare un insieme di dati diverso](assignment.it.md) diff --git a/6-NLP/5-Hotel-Reviews-2/translations/README.ko.md b/6-NLP/5-Hotel-Reviews-2/translations/README.ko.md deleted file mode 100644 index 2eec23aa..00000000 --- a/6-NLP/5-Hotel-Reviews-2/translations/README.ko.md +++ /dev/null @@ -1,376 +0,0 @@ -# 호텔 리뷰로 감정 분석하기 - -지금까지 자세히 데이터셋을 살펴보았으며, 열을 필터링하고 데이터셋으로 NLP 기술을 사용하여 호텔에 대한 새로운 시각을 얻게 될 시간입니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/) - -### 필터링 & 감정 분석 작업 - -알고 있는 것처럼, 데이터셋에 약간의 이슈가 있었습니다. 일부 열은 필요없는 정보로 채워져있으며, 부정확해 보입니다. 만약 맞는 경우, 어떻게 계산되었는지 불투명하고, 답을 스스로 계산해서 독립적으로 확인할 수 없습니다. - -## 연습: 조금 더 데이터 처리하기 - -조금 더 데이터를 정리합니다. 열을 추가하는 것은 나중에 유용하며, 다른 열에서 값을 변경하고, 특정한 열을 완전히 드랍하게 됩니다. - -1. 초기 column 처리합니다 - - 1. `lat` 과 `lng`를 드랍합니다 - - 2. `Hotel_Address` 값을 다음 값으로 치환합니다 (만약 주소에 도시와 국가가 같다면, 도시와 국가만 변경합니다). - - 데이터셋에서 도시와 국가만 있습니다: - - Amsterdam, Netherlands - - Barcelona, Spain - - London, United Kingdom - - Milan, Italy - - Paris, France - - Vienna, Austria - - ```python - def replace_address(row): - if "Netherlands" in row["Hotel_Address"]: - return "Amsterdam, Netherlands" - elif "Barcelona" in row["Hotel_Address"]: - return "Barcelona, Spain" - elif "United Kingdom" in row["Hotel_Address"]: - return "London, United Kingdom" - elif "Milan" in row["Hotel_Address"]: - return "Milan, Italy" - elif "France" in row["Hotel_Address"]: - return "Paris, France" - elif "Vienna" in row["Hotel_Address"]: - return "Vienna, Austria" - - # Replace all the addresses with a shortened, more useful form - df["Hotel_Address"] = df.apply(replace_address, axis = 1) - # The sum of the value_counts() should add up to the total number of reviews - print(df["Hotel_Address"].value_counts()) - ``` - - 지금부터 국가 레벨 데이터로 쿼리할 수 있습니다: - - ```python - display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) - ``` - - | Hotel_Address | Hotel_Name | - | :--------------------- | :--------: | - | Amsterdam, Netherlands | 105 | - | Barcelona, Spain | 211 | - | London, United Kingdom | 400 | - | Milan, Italy | 162 | - | Paris, France | 458 | - | Vienna, Austria | 158 | - -2. 호텔 Meta-review 열을 처리합니다 - - 1. `Additional_Number_of_Scoring`을 드랍합니다 - - 1. `Total_Number_of_Reviews`를 데이터셋에 실제로 있는 총 호텔 리뷰로 치환합니다 - - 1. `Average_Score`를 계산해둔 점수로 치환합니다 - - ```python - # Drop `Additional_Number_of_Scoring` - df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) - # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values - df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') - df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - ``` - -3. 리뷰 열을 처리합니다 - - 1. `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` 그리고 `days_since_review`를 드랍합니다 - - 2. `Reviewer_Score`, `Negative_Review`, 그리고 `Positive_Review` 를 두고, - - 3. 당장 `Tags` 도 둡니다 - - - 다음 섹션에서 태그에 추가적인 필터링 작업을 조금 진행하고 태그를 드랍하게 됩니다 - -4. 리뷰어 열을 처리합니다 - - 1. `Total_Number_of_Reviews_Reviewer_Has_Given`을 드랍합니다 - - 2. `Reviewer_Nationality`를 둡니다 - -### Tag 열 - -`Tag`열은 열에 저장된 (텍스트 폼의) 리스트라서 문제가 됩니다. 불행하게 순서와 열의 서브 섹션의 숫자는 항상 같지 않습니다. 515,000 행과 1427개 호텔이고, 각자 리뷰어가 선택할 수 있는 옵션은 조금씩 다르기 때문에, 사람에게 흥미로운 알맞은 문구를 가리기 힘듭니다. NLP가 빛나는 영역입니다. 텍스트를 스캔하고 가장 일반적인 문구를 찾으며, 셀 수 있습니다. - -불행히도, 단일 단어는 아니지만, multi-word 구문은 (예시. *Business trip*) 흥미롭습니다. 많은 데이터에 (6762646 단어) multi-word frequency distribution 알고리즘을 실행하는 것은 특별히 오래 걸릴 수 있지만, 데이터를 보지 않아도, 필요한 비용으로 보일 것입니다. `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']` 처럼 태그 샘플로 보면, 해야 하는 처리로 많이 줄일 수 있는지 물어볼 수 있기 때문에, 탐색적 데이터 분석은 유용합니다. 운이 좋게도, - 그러나 먼저 관심있는 태그를 확실히 하고자 다음 몇 단계가 필요합니다. - -### tags 필터링 - -데이터셋의 목표는 좋은 호텔을 선택할 때 (호텔 추천 봇을 만들어 달라고 맡기는 클라이언트일 수 있습니다) 도움을 받고자 감정과 열을 추가하는 것이라고 되새깁니다. 태그가 최종 데이터셋에서 유용한지 스스로에게 물어볼 필요가 있습니다. 한 가지 해석이 있습니다 (만약 다른 사유로 데이터셋이 필요한 경우에 선택할 수 있거나 안하기도 합니다): - -1. 여행 타입이 적절하고, 유지되어야 합니다 -2. 게스트 그룹 타입은 중요하고, 유지되어야 합니다 -3. 게스트가 지낸 룸 타입, 스위트, 또는 스튜디오 타입은 관련 없습니다 (모든 호텔은 기본적으로 같은 룸이 존재합니다) -4. 리뷰를 작성한 디바이스는 관련 없습니다 -5. 만약 리뷰어가 좋아하는 호텔을 더 오래 지낸다면, 리뷰어가 지낸 숙박 기간과 *관련이 있을* 수 있지만, 확대 해석이며, 아마 관련 없습니다 - -요약하면, **2가지 종류 태그를 유지하고 나머지를 제거합니다**. - -먼저, 더 좋은 포맷이 될 때까지 태그를 안 세고 싶으므로, square brackets과 quotes를 제거해야 합니다. 여러 방식으로 할 수 있지만, 많은 데이터를 처리하며 오랜 시간이 걸리므로 빠르게 하길 원합니다. 운이 좋게도, pandas는 각 단계를 쉬운 방식으로 할 수 있습니다. - -```Python -# Remove opening and closing brackets -df.Tags = df.Tags.str.strip("[']") -# remove all quotes too -df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) -``` - -각자 태그는 이처럼 이루어집니다: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. - -다음으로 문제를 찾았습니다. 리뷰, 또는 행에 5개 열이 있고, 일부는 3개이거나, 6개입니다. 데이터셋이 어떻게 만들어졌는가에 따른 결과이며, 고치기 어렵습니다. 각 구문의 빈도 카운트를 얻고 싶지만, 각 리뷰의 순서가 다르므로, 카운트에 벗어날 수 있고, 호텔이 가치가 있는 태그로 할당받지 못할 수 있습니다. - -각 태그는 multi-word 지만 쉼표로 구분되어 있기 때문에, 대신 다른 순서로 사용하며 가산점을 받습니다! 간단한 방식은 태그에서 순서와 일치하는 열에 넣은 각 태그로 6개 임시 열을 만드는 것입니다. 6개 열을 하나의 큰 열로 합치고 결과 열에 `value_counts()` 메소드를 실행할 수 있습니다. 출력하면, 2428개 유니크 태그를 보게 됩니다. 여기 작은 샘플이 있습니다: - -| Tag | Count | -| ------------------------------ | ------ | -| Leisure trip | 417778 | -| Submitted from a mobile device | 307640 | -| Couple | 252294 | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Solo traveler | 108545 | -| Stayed 3 nights | 95821 | -| Business trip | 82939 | -| Group | 65392 | -| Family with young children | 61015 | -| Stayed 4 nights | 47817 | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Family with older children | 26349 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Stayed 5 nights | 20845 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | -| 2 rooms | 12393 | - -`Submitted from a mobile device` 같은 일부 일반적인 태그는 사용하지 못해서, phrase occurrence를 카운트하기 전에 지우는 게 똑똑할 수 있지만, 빠르게 작업하려면 그냥 두고 무시할 수 있습니다. - -### length of stay 태그 지우기 - -이 태그를 지우는 것은 1단계이며, 고려할 태그의 총 개수를 약간 줄이게 됩니다. 데이터셋에서 지우지 말고, 리뷰 데이터셋에 카운트/유지할 값으로 고려할 대상에서 지우게 선택합니다. - -| Length of stay | Count | -| ---------------- | ------ | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Stayed 3 nights | 95821 | -| Stayed 4 nights | 47817 | -| Stayed 5 nights | 20845 | -| Stayed 6 nights | 9776 | -| Stayed 7 nights | 7399 | -| Stayed 8 nights | 2502 | -| Stayed 9 nights | 1293 | -| ... | ... | - -룸, 스위트, 스튜디오, 아파트 등 매우 다양합니다. 대부분 같은 것을 의미하고 관련 없으므로, 대상에서 지웁니다. - -| Type of room | Count | -| ----------------------------- | ----- | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | - -최종적으로, (많이 처리할 일이 없기 때문에) 즐겁게, 다음 *유용한* 태그만 남길 예정입니다: - -| Tag | Count | -| --------------------------------------------- | ------ | -| Leisure trip | 417778 | -| Couple | 252294 | -| Solo traveler | 108545 | -| Business trip | 82939 | -| Group (combined with Travellers with friends) | 67535 | -| Family with young children | 61015 | -| Family with older children | 26349 | -| With a pet | 1405 | - -`Travellers with friends`는 `Group`과 거의 같다고 주장할 수 있어서, 둘을 합치면 공평할 것입니다. 올바른 태그로 식별하기 위한 코드는 [the Tags notebook](../solution/1-notebook.ipynb)에 있습니다. - -마지막 단계는 각 태그로 새로운 열을 만드는 것입니다. 그러면, 모든 리뷰 행에서, `Tag` 열이 하나의 새로운 열과 매치되면, 1을 추가하고, 아니면, 0을 추가합니다. 마지막 결과는 비지니스 vs 레저, 또는 애완동물 동반 언급하면서, 호텔 추천할 때 유용한 정보이므로, 얼마나 많은 리뷰어가 (총계) 호텔을 선택했는지 카운트합니다. - -```python -# Process the Tags into new columns -# The file Hotel_Reviews_Tags.py, identifies the most important tags -# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, -# Family with young children, Family with older children, With a pet -df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) -df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) -df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) -df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) -df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) -df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) -df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) -df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) - -``` - -### 파일 저장하기 - -마지막으로, 새로운 이름으로 바로 데이터셋을 저장합니다. - -```python -df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) - -# Saving new data file with calculated columns -print("Saving results to Hotel_Reviews_Filtered.csv") -df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) -``` - -## 감정 분석 작업 - -마지막 섹션에서, 리뷰 열에 감정 분석을 적용하고 데이터셋에 결과를 저장힙니다. - -## 연습: 필터링된 데이터를 불러오고 저장하기 - -지금 원본 데이터셋 *말고*, 이전 색션에서 저장했던 필터링된 데이터셋을 불러오고 있습니다. - -```python -import time -import pandas as pd -import nltk as nltk -from nltk.corpus import stopwords -from nltk.sentiment.vader import SentimentIntensityAnalyzer -nltk.download('vader_lexicon') - -# Load the filtered hotel reviews from CSV -df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') - -# You code will be added here - - -# Finally remember to save the hotel reviews with new NLP data added -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) -``` - -### stop word 제거하기 - -만약 긍정적이고 부정적인 리뷰 열에 감정 분석을 하는 경우, 오랜 시간이 걸릴 수 있습니다. 빠른 CPU를 가진 강력한 노트북으로 테스트하면, 사용한 감정 라이브러리에 따라서 12 - 14 분 정도 걸립니다. (상대적)으로 오래 걸려서, 빠르게 할 수 있는지 알아볼 가치가 있습니다. - -문장의 감정을 바꾸지 않는 stop word나, 일반적인 영어 단어를 지우는 것은, 첫 단계입니다. 지우게 된다면, 감정 분석이 더 빠르게 되지만, 정확도가 낮아지지 않습니다 (stop word는 감정에 영향없지만, 분석이 느려집니다). - -긴 부정적 리뷰는 395 단어로 었지만 , stop word를 지우면, 195 단어만 남습니다. - -stop word를 지우는 것은 빨라서, 테스트 디바이스에서 515,000 행이 넘는 2개 리뷰 열에 stop word를 지우면 3.3초 걸립니다. 디바이스의 CPU 속도, 램, SSD 등에 따라 더 오래 걸리거나 빨리 끝날 수 있습니다. 작업이 상대적으로 빨라지고 감정 분석 시간도 향상시킬 수 있다면, 할 가치가 있음을 의미합니다. - -```python -from nltk.corpus import stopwords - -# Load the hotel reviews from CSV -df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") - -# Remove stop words - can be slow for a lot of text! -# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches -# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends -start = time.time() -cache = set(stopwords.words("english")) -def remove_stopwords(review): - text = " ".join([word for word in review.split() if word not in cache]) - return text - -# Remove the stop words from both columns -df.Negative_Review = df.Negative_Review.apply(remove_stopwords) -df.Positive_Review = df.Positive_Review.apply(remove_stopwords) -``` - -### 감정 분석하기 - -지금부터 모든 부정적이고 긍정적인 리뷰 열에 대한 감정 분석을 계산하고, 2개 열에 결과를 저장해야 합니다. 감정 테스트는 같은 리뷰로 리뷰어의 점수를 비교할 예정입니다. 예시로, 만약 부정적인 리뷰가 1 (많이 긍정적인 감정) 감정이고 1 긍정적인 리뷰 감정이라고 감정을 내렸지만, 리뷰어가 낮은 점수로 호텔을 리뷰하면, 리뷰 텍스트가 점수와 어느 것도 매치되지 않거나, sentiment analyser가 감정을 똑바로 인식할 수 없습니다. 일부 감정 점수는 다 틀릴 수 있고, 그 이유를 자주 설명할 수 있습니다. 예시로. "Of course I LOVED sleeping in a room with no heating" 리뷰는 극도로 풍자적이고 sentiment analyser는 긍정적인 감정이라고 생각하지만, 사람이 읽으면 풍자라는 것을 알 수 있습니다. - -NLTK는 학습하는 다양한 sentiment analyzer를 제공하고, 이를 대신헤서 감정이 얼마나 정확한지 볼 수 있습니다. VADER sentiment analysis를 여기에서 사용했습니다. - -> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -```python -from nltk.sentiment.vader import SentimentIntensityAnalyzer - -# Create the vader sentiment analyser (there are others in NLTK you can try too) -vader_sentiment = SentimentIntensityAnalyzer() -# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -# There are 3 possibilities of input for a review: -# It could be "No Negative", in which case, return 0 -# It could be "No Positive", in which case, return 0 -# It could be a review, in which case calculate the sentiment -def calc_sentiment(review): - if review == "No Negative" or review == "No Positive": - return 0 - return vader_sentiment.polarity_scores(review)["compound"] -``` - -이후에 프로그램에서 감정을 계산하려 준비할 때, 다음 각 리뷰에서 적용할 수 있습니다: - -```python -# Add a negative sentiment and positive sentiment column -print("Calculating sentiment columns for both positive and negative reviews") -start = time.time() -df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) -df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) -end = time.time() -print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") -``` - -이 컴퓨터에서 120초 정도 걸리지만, 각자 컴퓨터마다 다릅니다. 만약 결과를 출력하고 감정이 리뷰와 매치되는지 보려면 아래와 같이 진행합니다: - -```python -df = df.sort_values(by=["Negative_Sentiment"], ascending=True) -print(df[["Negative_Review", "Negative_Sentiment"]]) -df = df.sort_values(by=["Positive_Sentiment"], ascending=True) -print(df[["Positive_Review", "Positive_Sentiment"]]) -``` - -마지막으로 할 일은 도전에서 사용하기 전, 파일을 저장하는 것입니다! 쉽게 작업하도록 모든 새로운 열로 다시 정렬을 (사람인 경우, 외형 변경) 고려해야 합니다. - -```python -# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) -df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) - -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) -``` - -(Hotel_Reviews_Filtered.csv 파일 만들어서 [your filtering notebook](../solution/1-notebook.ipynb) 실행한 후에) [the analysis notebook](../solution/3-notebook.ipynb)으로 전체 코드를 실행해야 합니다. - -검토하는, 단계는 이렇습니다: - -1. 원본 데이터셋 **Hotel_Reviews.csv** 파일은 이전 강의에서 [the explorer notebook](../../4-Hotel-Reviews-1/solution/notebook.ipynb)으로 살펴보았습니다 -2. Hotel_Reviews.csv는 [the filtering notebook](../solution/1-notebook.ipynb)에서 필터링되고 **Hotel_Reviews_Filtered.csv**에 결과로 남습니다 -3. Hotel_Reviews_Filtered.csv는 [the sentiment analysis notebook](../solution/3-notebook.ipynb)에서 처리되어 **Hotel_Reviews_NLP.csv**에 결과로 남습니다 -4. 다음 NLP 도전에서 Hotel_Reviews_NLP.csv를 사용합니다 - -### 결론 - -시작했을 때, 열과 데이터로 이루어진 데이터셋이 었었지만 모두 다 확인되거나 사용되지 않았습니다. 데이터를 살펴보았으며, 필요없는 것은 필터링해서 지웠고, 유용하게 태그를 변환했고, 평균을 계산했으며, 일부 감정 열을 추가하고 기대하면서, 자연어 처리에 대한 일부 흥미로운 사실을 학습했습니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) - -## 도전 - -이제부터 감정을 분석해둔 데이터셋을 가지고 있으므로, 이 커리큘럼 (clustering, perhaps?)에서 배웠던 전략으로 감정 주변 패턴을 결정해봅니다. - -## 검토 & 자기주도 학습 - -[this Learn module](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott)로 더 배우고 다른 도구도 사용해서 텍스트에서 감정을 찾습니다. - -## 과제 - -[Try a different dataset](../assignment.md) diff --git a/6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md b/6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md deleted file mode 100644 index 1bae2aac..00000000 --- a/6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Prueba un conjunto de datos diferente - -## Instrucciones - -Ahora que has aprendido acerca del uso de NLTK para asignar sentimiento al texto, prueba un conjunto de datos diferente. Probablemente necesitarás hacer algo más de procesamiento de datos, por lo cual, crear un notebook y documenta tu proceso de pensamiento. ¿Qué descubriste? - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | -| | Se presentó tanto un notebook como un conjunto de datos con celdas bien documentadas explicando cómo se asignó el sentimiento | Al notebook le faltan buenas explicaciones | El notebook es defectuoso | diff --git a/6-NLP/5-Hotel-Reviews-2/translations/assignment.it.md b/6-NLP/5-Hotel-Reviews-2/translations/assignment.it.md deleted file mode 100644 index dae727b7..00000000 --- a/6-NLP/5-Hotel-Reviews-2/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Provare un insieme di dati diverso - -## Istruzioni - -Ora che si è imparato a usare NLTK per assegnare sentiment al testo, provare un insieme di dati diverso. Probabilmente si dovranno elaborare dei dati attorno ad esso, quindi creare un notebook e documentare il proprio processo di pensiero. Cosa si è scoperto? - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | -| | Vengono presentati un notebook completo e un insieme di dati con celle ben documentate che spiegano come viene assegnato il sentiment | Il notebook manca di buone spiegazioni | Il notebook è difettoso | diff --git a/6-NLP/5-Hotel-Reviews-2/translations/assignment.ko.md b/6-NLP/5-Hotel-Reviews-2/translations/assignment.ko.md deleted file mode 100644 index 344aafda..00000000 --- a/6-NLP/5-Hotel-Reviews-2/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 다른 데이터세트를 사용해 보세요 - -## 설명 - -NLTK 라이브러리를 사용해 텍스트에 감성을 부여하는 방법을 배워보았으니 이번에는 다른 데이터세트에 적용해 보세요. 적용하기 위해서는 데이터 처리 과정을 거쳐야 할 것이기 때문에 Jupyter Notebook(노트북)을 만들어 어떠한 방식으로 이 문제에 접근했는지 (사고과정을) 서술해 보시기 바랍니다. 새로 알게 된 것이 있나요? - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | ---------------------------------------------------------------------------------------------- | -------------------- | ------------------ | -| | 완성된 노트북과 함께 데이터세트를 선보였으며, 어떻게 감성을 부여했는지 여러 칸(cell)에 걸쳐 잘 서술함 | 노트북에 설명이 부족함 | 노트북에 결함이 있음 | diff --git a/6-NLP/translations/README.es.md b/6-NLP/translations/README.es.md deleted file mode 100644 index 4e3876b1..00000000 --- a/6-NLP/translations/README.es.md +++ /dev/null @@ -1,24 +0,0 @@ -# Primeros pasos con el procesamiento de lenguaje natural - -El procesamiento de lenguaje natural (NLP) es la capacidad que tiene un programa de computadora para entender el lenguaje humano como se habla y escribe -- referido como lenguaje natural. Es un componente de la inteligencia artificial (AI). NLP ha existido por más de 50 años y tiene raíces en el campo de la lingüística. Todo el campo está dirigido a ayudar a las máquinas a entender y rpocesar el lenguaje humano. Este luego puede ser usado para realizar tareas como corrección ortográfica o traducción automática. Tiene una variedad de apliciones en el mundo real en un número de campos, incluyendo investigación médica, motores de búsqueda e inteligencia de negocios. - -## Tema regional: Los idiomas y literatura europeos y hoteles románticos de Europa ❤️ - -En esta sección del plan de estudios, se te presentará una de los usos mayormente difundidos del aprendizaje automático: procesamiento del lenguaje natural (NLP). Derivado de la lingüística computacional, esta categoría de inteligencia artificial es el puente entre humanos y máquinas vía comunicación por voz o texto. - -En estas lecciones aprenderás las bases del NLP al construir pequeños bots de conversación par aprender como el aprendizaje automático ayuda en hacer estas conversaciones más y más 'inteligentes'. Viajarás tiempo atrás, charlando con Elizabeth Bennett y Mr. Darcy de la novela clásica de Jane Austen, **Orgullo y Prejuico**, publicado 1813. Luego, ampliarás tus conocimientos al aprender acerca de análisis de los sentimientos vía reseñas de hoteles en Europa. - -![Libro Orgullo y Prejuicio y té](../images/p&p.jpg) -> Fotografía de Elaine Howlin en Unsplash - -## Lecciones - -1. [Introducción al procesamiento del lenguaje natural](../1-Introduction-to-NLP/README.md) -2. [Tareas y técnicas comunes de NLP](../2-Tasks/README.md) -3. [Traducción y análisis de sentimiento con aprendizaje automático](../3-Translation-Sentiment/README.md) -4. [Preparando tus datos](../4-Hotel-Reviews-1/README.md) -5. [NLTK para análisis de sentimiento](../5-Hotel-Reviews-2/README.md) - -## Créditos - -Estas lecciones de procesamiento del lenguaje natural fueron escritas con ☕ por [Stephen Howell](https://twitter.com/Howell_MSFT) diff --git a/6-NLP/translations/README.hi.md b/6-NLP/translations/README.hi.md deleted file mode 100644 index f92f46c1..00000000 --- a/6-NLP/translations/README.hi.md +++ /dev/null @@ -1,11 +0,0 @@ -# एक बॉट के लिए खोजें - -## निर्देश - -बॉट हर जगह हैं। आपका कार्य: एक ढूंढो और उसे अपनाओ! आप उन्हें वेब साइटों पर, बैंकिंग अनुप्रयोगों में और फोन पर पा सकते हैं, उदाहरण के लिए जब आप वित्तीय सेवा कंपनियों को सलाह या खाता जानकारी के लिए कॉल करते हैं। बॉट का विश्लेषण करें और देखें कि क्या आप इसे भ्रमित कर सकते हैं। यदि आप बॉट को भ्रमित कर सकते हैं, तो आपको क्या लगता है कि ऐसा क्यों हुआ? अपने अनुभव के बारे में एक संक्षिप्त लेख लिखें। - -## रूब्रिक - -| मानदंड | अनुकरणीय | पर्याप्त | सुधार की जरूरत | -| -------- | -------------------------------------------------- -------------------------------------------------- ------------- | ------------------------------------------- | --------------------- | -| | एक पूर्ण पृष्ठ का पेपर लिखा जाता है, जो अनुमानित बॉट आर्किटेक्चर की व्याख्या करता है और इसके साथ आपके अनुभव को रेखांकित करता है | एक पेपर अधूरा है या अच्छी तरह से शोध नहीं किया गया है | कोई पेपर सबमिट नहीं किया गया | diff --git a/6-NLP/translations/README.it.md b/6-NLP/translations/README.it.md deleted file mode 100644 index 13eb3226..00000000 --- a/6-NLP/translations/README.it.md +++ /dev/null @@ -1,24 +0,0 @@ -# Iniziare con l'elaborazione del linguaggio naturale - -L'elaborazione del linguaggio naturale, NLP, è un sottocampo dell'intelligenza artificiale. L'intero campo è volto ad aiutare le macchine a comprendere ed elaborare il linguaggio umano. Questo può quindi essere utilizzato per eseguire attività come il controllo ortografico o la traduzione automatica. - -## Argomento regionale: lingue e letterature europee e hotel romantici d'Europa ❤️ - -In questa sezione del programma di studi, verrà presentato uno degli usi più diffusi di machine learning: l'elaborazione del linguaggio naturale (NLP). Derivato dalla linguistica computazionale, questa categoria di intelligenza artificiale è il ponte tra umani e macchine tramite la comunicazione vocale o testuale. - -In queste lezioni si impareranno le basi di NLP costruendo piccoli bot conversazionali per imparare come machine learning aiuti a rendere queste conversazioni sempre più "intelligenti". Si viaggerà indietro nel tempo, chiacchierando con Elizabeth Bennett e Mr. Darcy dal romanzo classico di Jane Austen, **Orgoglio e pregiudizio**, pubblicato nel 1813. Quindi, si approfondiranno le proprie conoscenze imparando l'analisi del sentiment tramite le recensioni di hotel in Europa. - -![Libro e tè di Orgoglio e Pregiudizio](../images/p&p.jpg) -> Foto di Elaine Howlin su Unsplash - -## Lezioni - -1. [Introduzione all'elaborazione del linguaggio naturale](../1-Introduction-to-NLP/translations/README.it.md) -2. [Compiti e tecniche comuni di NLP](../2-Tasks/translations/README.it.md) -3. [Traduzione e analisi del sentiment con machine learning](../3-Translation-Sentiment/translations/README.it.md) -4. [Preparazione dei dati](../4-Hotel-Reviews-1/translations/README.it.md) -5. [NLTK per l'analisi del sentiment](../5-Hotel-Reviews-2/translations/README.it.md) - -## Crediti - -Queste lezioni sull'elaborazione del linguaggio naturale sono state scritte con ☕ da [Stephen Howell](https://twitter.com/Howell_MSFT) diff --git a/6-NLP/translations/README.ko.md b/6-NLP/translations/README.ko.md deleted file mode 100644 index f80c6ab3..00000000 --- a/6-NLP/translations/README.ko.md +++ /dev/null @@ -1,24 +0,0 @@ -# Natural language processing 시작하기 - -Natural language processing, 즉 NLP는, 인공지능의 하위 필드입니다. 전체 필드는 기계가 인간의 언어를 이해하고 처리하는 것을 도와줍니다. 맞춤법 검사 또는 기게 번역과 같은 작업을 수행할 때 쓸 수 있습니다. - -## 지역 토픽: 유럽 언어와 문학 그리고 유럽의 로맨틱 호텔 ❤️ - -커리큘럼의 섹션에서, 머신러닝의 가장 널리 퍼진 사용법 중 하나를 소개합니다: natural language processing (NLP). 전산 언어학에서 나온, 인공지능 카테고리는 음성 또는 텍스트 통신으로 인간과 기계 사이를 연결합니다. - -이 강의에서 머신러닝이 이 대화를 점차 'smart'하게 만드는 방식을 배우고자 작은 대화 봇을 만들어서 NLP의 기본을 배울 예정입니다. 1813년에 출판한, Jane Austen의 고전 소설, **Pride and Prejudice**에, Elizabeth Bennett과 Mr. Darcy 같이 이야기하며 과거로 시간 여행을 하게 됩니다. 그러면, 유럽의 호텔 리뷰로 감정 분석을 배우면서 지식을 발전시킬 예정입니다. - -![Pride and Prejudice book and tea](../images/p&p.jpg) -> Photo by Elaine Howlin on Unsplash - -## 강의 - -1. [Natural language processing 소개하기](../1-Introduction-to-NLP/translations/README.ko.md) -2. [일반적 NLP 작업과 기술](../2-Tasks/translations/README.ko.md) -3. [머신러닝으로 번역과 감정 분석하기](../3-Translation-Sentiment/translations/README.ko.md) -4. [데이터 준비하기](../4-Hotel-Reviews-1/translations/README.ko.md) -5. [감정 분석을 위한 NLTK](../5-Hotel-Reviews-2/translations/README.ko.md) - -## 크래딧 - -These natural language processing lessons were written with ☕ by [Stephen Howell](https://twitter.com/Howell_MSFT) diff --git a/6-NLP/translations/README.pt-br.md b/6-NLP/translations/README.pt-br.md deleted file mode 100644 index 19b9c67e..00000000 --- a/6-NLP/translations/README.pt-br.md +++ /dev/null @@ -1,24 +0,0 @@ -# Iniciando com Processamento de Linguagem Natural - -O processamento de Linguagem Natural (PLN) ou, em inglês, Natural Language Processing (NLP) é a habilidade de um programa de computador entender linguagem humana da maneira falada e escrita -- o que são referidas como linguagem natural. É um componente da inteligência artificial (IA). O PLN já existe há mais de 50 anos e possui raízes no campo da linguística, que é todo direcionado a ajudar máquinas a entender e processar a linguagem humana. Isto pode então ser usado para realizar tarefas como verificação de ortografia ou tradução. Existe uma variedade de aplicações do mundo real em muitos campos, como em pesquisa médica, ferramentas de busca e inteligência de negócio. - -## Tópico regional: línguas europeias e literatura, e hotéis da Europa ❤️ - -Nesta seção do currículo, você vai aprender mais sobre uma das formas mais difundidas do aprendizado de máquina (machine learning): Processamento de Linguagem Natural (PLN). Vinda da linguística computacional, esta categoria de inteligência artificial é a ponte entre humanos e máquinas através de comunicação de voz ou textual. - -Nessas aulas, iremos aprender os fundamentos do PLN ao construir simples bots de conversação para entender como o aprendizado de máquina ajuda a tornar essas conversas mais e mais 'inteligentes'. Você vai viajar para o passado, conversando com Elizabeth Bennett e Mr. Darcy do livro clássico de Jane Austen, **Orgulho e Preconceito**, publicado em 1813. Então, você aumentará seu conhecimento ao aprender sobre análise de sentimentos por meio de avaliações de hotéis da Europa. - -![Livro Orgulho e Preconceito, e chá](../images/p&p.jpg) -> Foto por Elaine Howlin em Unsplash - -## Aulas - -1. [Introdução ao Processamento de Linguagem Natural](../1-Introduction-to-NLP/translations/README.pt-br.md) -2. [Técnicas e tarefas frequentes do Processamento de Linguagem Natural](../2-Tasks/translations/README.pt-br.md) -3. [Translation and sentiment analysis with machine learning](../3-Translation-Sentiment/README.md) (ainda não traduzido) -4. [Preparing your data](../4-Hotel-Reviews-1/README.md) (ainda não traduzido) -5. [NLTK for Sentiment Analysis](../5-Hotel-Reviews-2/README.md) (ainda não traduzido) - -## Créditos - -Essas aulas de processamento de linguagem natural foram escritas com ☕ por [Stephen Howell](https://twitter.com/Howell_MSFT) diff --git a/6-NLP/translations/README.ru.md b/6-NLP/translations/README.ru.md deleted file mode 100644 index c6224ba6..00000000 --- a/6-NLP/translations/README.ru.md +++ /dev/null @@ -1,24 +0,0 @@ -# Введение в обработку естественного языка - -Обработка естественного языка (Natural language processing, NLP) - это область искусственного интеллекта. Исследования в этой области направлены ​​на то, чтобы помочь машинам понимать и обрабатывать человеческий язык. Например, решаются такие задачи, как проверка орфографии или машинный перевод. - -## Региональная тема: европейские языки и литература и романтические отели Европы ❤️ - -В этом разделе учебной программы вы познакомитесь с одним из наиболее распространенных способов использования машинного обучения: обработкой естественного языка (NLP). Эта категория искусственного интеллекта, пришедшая из компьютерной лингвистики, является связующим звеном между людьми и машинами посредством голосовой или текстовой коммуникации. - -На этих уроках мы изучим основы NLP, создав небольших диалоговых ботов, чтобы понять, как машинное обучение помогает сделать разговоры все более и более «умными». Вы отправитесь в прошлое, болтая с Элизабет Беннетт и мистером Дарси из классического романа Джейн Остин **Гордость и предубеждение**, опубликованного в 1813 году. Затем вы расширите свои знания, узнав об анализе тональности текста по отзывам об отелях в Европе. - -![Книга "Гордость и предубеждение" и чай](../images/p&p.jpg) -> Фото Элейн Хоулин на Unsplash - -## Уроки - -1. [Введение в обработку естественного языка](../1-Introduction-to-NLP/README.md) -2. [Распространенные задачи и техники NLP](../2-Tasks/README.md) -3. [Перевод и анализ тональности с помощью машинного обучения](../3-Translation-Sentiment/README.md) -4. [Подготовка данных](../4-Hotel-Reviews-1/README.md) -5. [NLTK для анализа тональности текста](../5-Hotel-Reviews-2/README.md) - -## Благодарности - -Эти уроки обработки естественного языка были написаны с ☕ [Стивен Хауэлл](https://twitter.com/Howell_MSFT) diff --git a/6-NLP/translations/README.zh-cn.md b/6-NLP/translations/README.zh-cn.md deleted file mode 100644 index a594b5a0..00000000 --- a/6-NLP/translations/README.zh-cn.md +++ /dev/null @@ -1,24 +0,0 @@ -# 自然语言处理入门 - -自然语言处理 (NLP) 是人工智能的一个子领域,主要研究如何让机器理解和处理人类语言,并用它来执行拼写检查或机器翻译等任务。 - -## 本节主题:欧洲语言文学和欧洲浪漫酒店 ❤️ - -在这部分课程中,您将了解机器学习最广泛的用途之一:自然语言处理 (NLP)。源自计算语言学,这一类人工智能会通过语音或文本与人类交流,建立连接人与机器的桥梁。 - -课程中,我们将通过构建小型对话机器人来学习 NLP 的基础知识,以了解机器学习是如何使这个机器人越来越“智能”。您将穿越回 1813 年,与简·奥斯汀的经典小说 **傲慢与偏见** 中的 Elizabeth Bennett 和 Mr. Darcy 聊天(该小说于 1813 年出版)。然后,您将通过欧洲的酒店评论来进一步学习情感分析。 - -![傲慢与偏见之书,和茶](../images/p&p.jpg) -> 由 Elaine Howlin 拍摄, 来自 Unsplash - -## 课程 - -1. [自然语言处理简介](../1-Introduction-to-NLP/translations/README.zh-cn.md) -2. [NLP 常见任务与技巧](../2-Tasks/README.md) -3. [机器学习翻译和情感分析](../3-Translation-Sentiment/README.md) -4. [准备数据](../4-Hotel-Reviews-1/README.md) -5. [用于情感分析的工具:NLTK](../5-Hotel-Reviews-2/README.md) - -## 作者 - -这些自然语言处理课程由 [Stephen Howell](https://twitter.com/Howell_MSFT) 用 ☕ 编写 diff --git a/7-TimeSeries/1-Introduction/translations/README.es.md b/7-TimeSeries/1-Introduction/translations/README.es.md deleted file mode 100644 index d9402560..00000000 --- a/7-TimeSeries/1-Introduction/translations/README.es.md +++ /dev/null @@ -1,186 +0,0 @@ -# Introducción a la predicción de series de tiempo - -![Resumen de series de tiempo en un boceto](../../../sketchnotes/ml-timeseries.png) - -> Boceto de [Tomomi Imura](https://www.twitter.com/girlie_mac) - -En esta lección y la siguiente, aprenderás un poco acerca de la predicción de series de tiempo, una parte interesante y valiosa del repertorio de de un científico de ML, la cual es un poco menos conocida que otros temas. La predicción de series de tiempo es una especie de 'bola de cristal': basada en el rendimiento pasado de una variable como el precio, puedes predecir su valor potencial futuro. - -[![Introducción a la predicción de series de tiempo](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introducción a la predicción de series de tiempo") - -> 🎥 Da clic en la imagen de arriba para ver un video acerca de la predicción de series de tiempo - -## [Examen previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41?loc=es) - -Es un campo útil e interesante con valor real para el negocio, dada su aplicación directa a problemas de precio, inventario e incidentes de cadenas de suministro. Mientras que las técnicas de aprendizaje profundo han comenzado a usarse para ganar más conocimiento para mejorar el rendimiento de futuras predicciones, la predicción de series de tiempo sigue siendo un campo muy informado por técnicas de aprendizaje automático clásico. - -> El útil plan de estudios de series de tiempo de Penn State puede ser encontrado [aquí](https://online.stat.psu.edu/stat510/lesson/1) - -## Introducción - -Supón que mantienes un arreglo de parquímetros inteligentes que proveen datos acerca de que tan seguido son usados y con qué duración de tiempo. - -> ¿Qué pasaría si pudieras predecir, basado en el rendimiento pasado del medidor, su valor futuro de acuerdo a las leyes de suministro y demanda? - -Predecir de forma precisa cuándo actuar para así lograr tu objetivo es una desafío que podría ser abordado con la predicción de series de tiempo.No haría feliz a la gente que le cobraran más en hora pico cuando están buscando un lugar para estacionarse, ¡pero sería una forma segura de generar ingresos para limpiar las calles! - -Exploremos algunos de los tipos de algoritmos de series de tiempo e iniciemos un notebook para limpiar y preparar algunos datos. Los datos que analizarás son tomados de la competencia de predicción de GEFCom2014. Esta consiste de 3 años de carga eléctrica por hora y los valores de temperatura entre el 2012 y 2014. Dados los patrones históricos de carga eléctrica y temperatura, puedes predecir valores futuros de carga eléctrica. - -En este ejemplo, aprenderás cómo predecir un paso de tiempo adelante, usando sólo la carga histórica. Antes de iniciar, sin embargo, es útil entender qué está pasando detrás de escena. - -## Algunas definiciones - -Al encontrar el término 'series de tiempo' necesitas entender su uso en varios contextos diferentes. - -🎓 **Series de tiempo** - -En matemáticas, "una serie de tiempo es una serie de puntos de datos indexados (o listados o graficados) en orden de tiempo. Más comúnmente, una serie de tiempo es una secuencia tomada en puntos sucesivos igualmente espaciados en el tiempo." Un ejemplo de una serie de tiempo es el valor diario de cierre de el [Promedio Industrial Down Jones](https://wikipedia.org/wiki/Time_series). El uso de gráficos de series de tiempo y modelado estadístico se encuentra frecuentemente en el procesamiento de señales, predicción del clima, predicción de sismos, y otros campos donde ocurren eventos y los puntos de datos pueden ser graficados en el tiempo. - -🎓 **Análisis de series de tiempo** - -El análisis de series de tiempo, es el análisis de los datos de las series de tiempo previamente mencionadas. Los datos de las series de tiempo pueden tomar distintas formas, incluyendo 'series de tiempo interrumpidas' las cuales detectan patrones en la evolución de las series de tiempo antes y después de un evento de interrupción. El tipo de análisis necesario para las series de tiempo depende de la naturaleza de los datos. Los datos de series de tiempo en sí mismos pueden tomar la forma de series de números o caracteres. - -El análisis a realizar, usa una variedad de métodos, incluyendo dominio de frecuencia y dominio de tiempo, lineal y no lineal y más. [Aprende más](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) acerca de varias formas de analizar este tipo de datos. - -🎓 **Predicción de series de tiempo** - -La predicción de series de tiempo es el uso de un modelo para predecir valores futuros basándose en patrones mostrados por datos previamente recopilados como ocurrieron en el pasado. Mientras es posible usar modelos de regresión para explorar los datos de las series de tiempo, con índices de tiempo como variables x en un plano, dichos datos se analizan mejor usando tipos especiales de modelos. - -Los datos de series de timpo son una lista de observaciones ordenadas, a diferencia de los datos que pueden ser analizados por regresión lineal. El más común es ARIMA, el cual es un acrónimo que significa "Autoregressive Integrated Moving Average". - -Los [modelos ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "relacionan el valor presente de una serie de valores pasados y errores de predicción anteriores". Estos son más apropiados para el análisis de datos en el dominio de tiempo, donde los datos están se ordenan en el tiempo. - -> Existen varios tipos de modelos ARIMA, los cuales puedes aprender [aquí](https://people.duke.edu/~rnau/411arim.htm) y que conocerás más tarde. - -En la siguiente lección, construirás un modelo ARIMA usando [series de tiempo univariante](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), las cual se enfoca en una variable que cambia su valor en el tiempo. Un ejemplo de este tipo de datos es [este conjunto de datos](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) que registra la concentración mensual de CO2 en el Observatorio Mauna Loa: - -| CO2 | YearMonth | Year | Month | -| :----: | :-------: | :---: | :---: | -| 330.62 | 1975.04 | 1975 | 1 | -| 331.40 | 1975.13 | 1975 | 2 | -| 331.87 | 1975.21 | 1975 | 3 | -| 333.18 | 1975.29 | 1975 | 4 | -| 333.92 | 1975.38 | 1975 | 5 | -| 333.43 | 1975.46 | 1975 | 6 | -| 331.85 | 1975.54 | 1975 | 7 | -| 330.01 | 1975.63 | 1975 | 8 | -| 328.51 | 1975.71 | 1975 | 9 | -| 328.41 | 1975.79 | 1975 | 10 | -| 329.25 | 1975.88 | 1975 | 11 | -| 330.97 | 1975.96 | 1975 | 12 | - -✅ Identifica la variable que cambia en el tiempo en este conjunto de datos - -## [Características de datos](https://online.stat.psu.edu/stat510/lesson/1/1.1) de series de tiempo a considerar - -Al mirar datos de series de tiempo, puedes notar que tienen ciertas características que necesitas tomar ne consideración y mitigar para entender mejor sus patrones. Si consideras los datos de las series de tiempo como proporcionando potencialmente una 'señal' que quieres analizar, estas características pueden ser interpretadas como 'ruido'. Frecuentemente necesitarás reducir este 'ruido' al compensar algunas de estas características usando ciertas técnicas estadísticas. - -Aquí hay algunos conceptos que deberías saber para ser capaz de trabajar con las series de tiempo: - -🎓 **Tendencias** - -Las tendencias se definen como incrementos y decrementos medibles en el tiempo. [Lee más](https://machinelearningmastery.com/time-series-trends-in-python). En el contexto de las series de tiempo, se trata de cómo usar las tendencias y, si es necesario, eliminarlas. - -🎓 **[Estacionalidad](https://machinelearningmastery.com/time-series-seasonality-with-python/)** - -La estacionalidad se define como fluctuaciones periódicas, tales como prisas de vacaciones que pueden afectar las ventas, por ejemplo. [Da un vistazo](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) a cómo los distintos tipos de gráficos muestran la estacionalidad en los datos. - -🎓 **Valores atípicos** - -Los valores atípicos están muy lejos de la varianza de datos estándar. - -🎓 **Ciclos de largo plazo** - -Independiente de la estacionalidad, los datos pueden mostrar un ciclo de largo plazo como un declive que dura más de un año. - -🎓 **Varianza constante** - -En el tiempo, algunos datos muestran fluctuaciones constantes, tales como el uso de energía por día y noche. - -🎓 **Cambios abruptos** - -Los datos pueden mostrar un cambio abrupto que puede necesitar mayor análisis. El cierre abrupto de negocios debido al COVID, por ejemplo, causó cambios en los datos. - -✅ Aquí hay una [muestra de gráfico de series de tiempo](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) mostrando la moneda diaria en juego gastada en algunos años. ¿Puedes identificar alguna de las características listadas arriba en estos datos? - -![Gasto de moneda en el juego](../images/currency.png) - -## Ejercicio - comenzando con los datos de uso de energía - -Comencemos creando un modelo de series de tiempo para predecir el uso futuro de energía dato su uso pasado. - -> Los datos en este ejemplo se tomaron de la competencia de predicción GEFCom2014. Consta de 3 años de valores de carga eléctrica y de temperatura medidos por hora entre 2012 y 2014. - -> -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli y Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. - -1. En el directorio `working` de esta lección, abre el archivo _notebook.ipynb_. Empieza agregando las bibliotecas que te ayudarán a cargar y visualizar datos - - ```python - import os - import matplotlib.pyplot as plt - from common.utils import load_data - %matplotlib inline - ``` - - Nota, estás usando los archivos del direcorio `common` incluido el cual configura tu ambiente y maneja la descarga de los datos. - -2. Ahora, examina los datos como un dataframe llamando `load_data()` y `head()`: - - ```python - data_dir = './data' - energy = load_data(data_dir)[['load']] - energy.head() - ``` - - Puedes ver que hay dos columnas representando la fecha y la carga: - - | | load | - | :-----------------: | :----: | - | 2012-01-01 00:00:00 | 2698.0 | - | 2012-01-01 01:00:00 | 2558.0 | - | 2012-01-01 02:00:00 | 2444.0 | - | 2012-01-01 03:00:00 | 2402.0 | - | 2012-01-01 04:00:00 | 2403.0 | - -3. Ahora, grafica los datos llamando `plot()`: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![Gráfico de energía](../images/energy-plot.png) - -4. Ahora, grafica la primer semana de Julio de 2014, al proveerla como entrada a `energy` en el patrón `[from date]: [to date]`: - - ```python - energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![julio](../images/july-2014.png) - - ¡Un hermoso gráfico! Da un vistazo a estos gráficos y ve si puedes determinar alguna de las características listadas arriba. ¿Que podemos suponer al visualizar los datos? - -En la siguiente lección, crearás un modelo ARIMA para realizar algunas predicciones. - ---- - -## 🚀Desafío - -Haz una lista de todas las industrias y áreas de consulta en las que puedes pensar que se beneficiarían de la predicción de series de tiempo. ¿Puedes pensar en una aplicación de estas técnicas en las artes, en la econometría, ecología, venta al menudeo, la industria, finanzas? ¿Dónde más? - -## [Examen posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42?loc=es) - -## Revisión y autoestudio - -Aunque no las cubriremos aquí, las redes neuronales son usadas algunas veces para mejorar los métodos clásicos de predicción de series de tiempo. Lee más acerca de ellas [en este artículo](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) - -## Asignación - -[Visualiza algunas series de tiempo más](assignment.es.md) diff --git a/7-TimeSeries/1-Introduction/translations/README.it.md b/7-TimeSeries/1-Introduction/translations/README.it.md deleted file mode 100644 index 2c3ee610..00000000 --- a/7-TimeSeries/1-Introduction/translations/README.it.md +++ /dev/null @@ -1,185 +0,0 @@ -# Introduzione alla previsione delle serie temporali - -![Riepilogo delle serie temporali in uno sketchnote](../../../sketchnotes/ml-timeseries.png) - -> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -In questa lezione e nella successiva si imparerà qualcosa sulla previsione delle serie temporali, una parte interessante e preziosa del repertorio di uno scienziato ML che è un po' meno conosciuta rispetto ad altri argomenti. La previsione delle serie temporali è una sorta di "sfera di cristallo": sulla base delle prestazioni passate di una variabile come il prezzo, è possibile prevederne il valore potenziale futuro. - -[![Introduzione alla previsione delle serie temporali](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introduzione alla previsione delle serie temporali") - -> 🎥 Fare clic sull'immagine sopra per un video sulla previsione delle serie temporali - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/?loc=it) - -È un campo utile e interessante con un valore reale per il business, data la sua applicazione diretta a problemi di prezzi, inventario e problemi della catena di approvvigionamento. Mentre le tecniche di deep learning hanno iniziato a essere utilizzate per acquisire maggiori informazioni per prevedere meglio le prestazioni future, la previsione delle serie temporali rimane un campo ampiamente informato dalle tecniche classiche di ML. - -> Un utile programma di studio delle serie temporali di Penn State può essere trovato [qui](https://online.stat.psu.edu/stat510/lesson/1) - -## Introduzione - -Si supponga di mantenere una serie di parchimetri intelligenti che forniscono dati su quanto spesso vengono utilizzati e per quanto nel corso del tempo. - -> Se si potesse prevedere, in base alle prestazioni passate del contatore, il suo valore futuro secondo le leggi della domanda e dell'offerta? - -Prevedere con precisione quando agire per raggiungere il proprio obiettivo è una sfida che potrebbe essere affrontata dalla previsione delle serie temporali. Non renderebbe le persone felici di pagare di più nei periodi di punta quando cercano un parcheggio, ma sarebbe un modo sicuro per generare entrate per pulire le strade! - -Si esplorano alcuni dei tipi di algoritmi di serie temporali e si avvia un notebook per pulire e preparare alcuni dati. I dati che saranno analizzati sono tratti dal concorso di previsione GEFCom2014. Consiste in 3 anni di carico orario di elettricità e valori di temperatura tra il 2012 e il 2014. Dati i modelli storici del carico elettrico e della temperatura, è possibile prevedere i valori futuri del carico elettrico. - -In questo esempio si imparerà a fare previsioni un passo avanti, utilizzando solo i dati di caricamento storici. Prima di iniziare, però, è utile capire cosa succede dietro le quinte. - -## Definizioni - -Quando si incontra il termine "serie temporale" è necessario comprenderne l'uso in diversi contesti. - -🎓 **Serie temporali** - -In matematica, "una serie temporale è una serie di punti dati indicizzati (o elencati o rappresentati graficamente) in ordine temporale". Più comunemente, una serie temporale è una sequenza presa in punti successivi equidistanti nel tempo. Un esempio di una serie temporale è il valore di chiusura giornaliero del [Dow Jones Industrial Average](https://it.wikipedia.org/wiki/Serie_storica). L'uso di grafici di serie temporali e modelli statistici si riscontra frequentemente nell'elaborazione del segnale, nelle previsioni meteorologiche, nella previsione dei terremoti e in altri campi in cui si verificano eventi e i punti dati possono essere tracciati nel tempo. - -🎓 **Analisi delle serie temporali** - -L'analisi delle serie temporali è l'analisi dei dati delle serie temporali sopra menzionati. I dati delle serie temporali possono assumere forme distinte, comprese le "serie temporali interrotte" che rilevano i modelli nell'evoluzione di una serie temporale prima e dopo un evento di interruzione. Il tipo di analisi necessaria per le serie temporali dipende dalla natura dei dati. I dati delle serie temporali possono assumere la forma di serie di numeri o caratteri. - -L'analisi da eseguire utilizza una varietà di metodi, tra cui dominio della frequenza e dominio del tempo, lineare e non lineare e altro ancora. Per [saperne di più](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) sui molti modi per analizzare questo tipo di dati. - -🎓 **Previsione delle serie temporali** - -La previsione delle serie temporali è l'uso di un modello per prevedere i valori futuri in base ai modelli visualizzati dai dati raccolti in precedenza così come si sono verificati in passato. Sebbene sia possibile utilizzare modelli di regressione per esplorare i dati delle serie temporali, con indici temporali come x variabili su un grafico, tali dati vengono analizzati al meglio utilizzando tipi speciali di modelli. - -I dati delle serie temporali sono un elenco di osservazioni ordinate, a differenza dei dati che possono essere analizzati mediante regressione lineare. Il più comune è ARIMA, acronimo che sta per "Autoregressive Integrated Moving Average" (Modello autoregressivo integrato a media mobile). - -[I modelli ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "mettono in relazione il valore attuale di una serie con i valori passati e gli errori di previsione passati". Sono più appropriati per l'analisi dei dati nel dominio del tempo, in cui i dati sono ordinati nel tempo. - -> Esistono diversi tipi di modelli ARIMA, [qui](https://people.duke.edu/~rnau/411arim.htm) si possono trovare ulteriori informazioni al riguardo e di cui si parlerà nella prossima lezione. - -Nella prossima lezione, si creerà un modello ARIMA utilizzando [Serie Temporali UYnivariate](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), che si concentra su una variabile che cambia il suo valore nel tempo. Un esempio di questo tipo di dati è [questo insieme di dati](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) che registra la concentrazione mensile di C02 presso l'Osservatorio di Mauna Loa: - -| CO2 | YearMonth | Year | Month | -| :----: | :-------: | :---: | :---: | -| 330.62 | 1975.04 | 1975 | 1 | -| 331.40 | 1975.13 | 1975 | 2 | -| 331.87 | 1975.21 | 1975 | 3 | -| 333.18 | 1975.29 | 1975 | 4 | -| 333.92 | 1975.38 | 1975 | 5 | -| 333.43 | 1975.46 | 1975 | 6 | -| 331.85 | 1975.54 | 1975 | 7 | -| 330.01 | 1975.63 | 1975 | 8 | -| 328.51 | 1975.71 | 1975 | 9 | -| 328.41 | 1975.79 | 1975 | 10 | -| 329.25 | 1975.88 | 1975 | 11 | -| 330.97 | 1975.96 | 1975 | 12 | - -✅ Identificare la variabile che cambia nel tempo in questo set di dati - -## [Caratteristiche dei dati](https://online.stat.psu.edu/stat510/lesson/1/1.1) delle serie temporali da considerare - -Quando si esaminano i dati delle serie temporali, è possibile notare che presentano determinate caratteristiche che è necessario prendere in considerazione e mitigare per comprenderne meglio i modelli. Se si considerano i dati delle serie temporali come potenziali produttori di un "segnale" che si desidera analizzare, queste caratteristiche possono essere considerate "rumore". Spesso sarà necessario ridurre questo "rumore" compensando alcune di queste caratteristiche utilizzando alcune tecniche statistiche. - -Ecco alcuni concetti che si dovrebbe conoscere per poter lavorare con le serie temporali: - -🎓 **Tendenze** - -Le tendenze sono definite come aumenti e diminuzioni misurabili nel tempo. [Per saperne di più](https://machinelearningmastery.com/time-series-trends-in-python). Nel contesto delle serie temporali, si tratta di come utilizzare e, se necessario, rimuovere le tendenze dalle serie temporali. - -🎓 **[Stagionalità](https://machinelearningmastery.com/time-series-seasonality-with-python/)** - -La stagionalità è definita come fluttuazioni periodiche, come le vacanze estive che potrebbero influire sulle vendite, ad esempio. [Si dia un'occhiata](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) a come i diversi tipi di grafici mostrano la stagionalità nei dati. - -🎓 **Valori anomali** - -I valori anomali sono molto lontani dalla varianza dei dati standard. - -🎓 **Ciclo di lunga durata** - -Indipendentemente dalla stagionalità, i dati potrebbero mostrare un ciclo di lungo periodo come una recessione economica che dura più di un anno. - -🎓 **Varianza costante** - -Nel tempo, alcuni dati mostrano fluttuazioni costanti, come il consumo energetico giornaliero e notturno. - -🎓 **Cambiamenti improvvisi** - -I dati potrebbero mostrare un cambiamento improvviso che potrebbe richiedere un'ulteriore analisi. La brusca chiusura delle attività a causa del COVID, ad esempio, ha causato cambiamenti nei dati. - -✅ Ecco un [esempio di grafico della serie temporale](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) che mostra la valuta di gioco giornaliera spesa in alcuni anni. Si riesce a identificare una delle caratteristiche sopra elencate in questi dati? - -![Spesa in valuta di gioco](../images/currency.png) - -## Esercizio: iniziare con i dati sul consumo energetico - -Si inizia a creare un modello di serie temporali per prevedere l'utilizzo futuro di energia dato l'utilizzo passato. - -> I dati in questo esempio sono presi dal concorso di previsione GEFCom2014. Consiste in 3 anni di carico orario di elettricità e valori di temperatura tra il 2012 e il 2014. -> -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli e Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896- 913, luglio-settembre 2016. - -1. Nella cartella `working` di questa lezione, aprire il _file_ notebook.ipynb. Iniziare aggiungendo librerie che aiuteranno a caricare e visualizzare i dati - - ```python - import os - import matplotlib.pyplot as plt - from common.utils import load_data - %matplotlib inline - ``` - - Nota, si stanno utilizzando i file dalla cartella `common` inclusa che configura il proprio ambiente e gestisce il download dei dati. - -2. Quindi, si esaminano i dati come un dataframe chiamando `load_data()` e `head()`: - - ```python - data_dir = './data' - energy = load_data(data_dir)[['load']] - energy.head() - ``` - - Si può vedere che ci sono due colonne che rappresentano data e carico: - - | | load | - | :-----------------: | :----: | - | 2012-01-01 00:00:00 | 2698.0 | - | 2012-01-01 01:00:00 | 2558.0 | - | 2012-01-01 02:00:00 | 2444.0 | - | 2012-01-01 03:00:00 | 2402.0 | - | 2012-01-01 04:00:00 | 2403.0 | - -3. Ora, tracciare i dati chiamando `plot()`: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![grafico dell'energia](../images/energy-plot.png) - -4. Ora, tracciare la prima settimana di luglio 2014, fornendola come input per `energy` nella forma `[from date]: [to date]`: - - ```python - energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![luglio](../images/july-2014.png) - - Uno stupendo grafico! Dare un'occhiata a questi grafici e vedere se si riesce a determinare una delle caratteristiche sopra elencate. Cosa si può dedurre visualizzando i dati? - -Nella prossima lezione, si creerà un modello ARIMA per creare alcune previsioni. - ---- - -## 🚀 Sfida - -Fare un elenco di tutti i settori e le aree di indagine che vengono in mente che potrebbero trarre vantaggio dalla previsione delle serie temporali. Si riesce a pensare a un'applicazione di queste tecniche nelle arti? In Econometria? Ecologia? Vendita al Dettaglio? Industria? Finanza? Dove se no? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/?loc=it) - -## Revisione e Auto Apprendimento - -Sebbene non si tratteranno qui, le reti neurali vengono talvolta utilizzate per migliorare i metodi classici di previsione delle serie temporali. Si legga di più su di loro [in questo articolo](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) - -## Compito - -[Visualizzare altre serie temporali](assignment.it.md) diff --git a/7-TimeSeries/1-Introduction/translations/README.ko.md b/7-TimeSeries/1-Introduction/translations/README.ko.md deleted file mode 100644 index d949913b..00000000 --- a/7-TimeSeries/1-Introduction/translations/README.ko.md +++ /dev/null @@ -1,186 +0,0 @@ -# Time series forecasting 소개하기 - -![Summary of time series in a sketchnote](../../../sketchnotes/ml-timeseries.png) - -> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) - -이 강의와 다음에서, 다른 토픽보다 덜 알려진 ML 사이언티스트의 레파토리 중에 흥미롭고 가치있는 파트인, time series forecasting에 대하여 약간 배우게 됩니다. Time series forecasting은 일종의 'crystal ball'입니다: 가격과 같은 값의 과거 성적에 기반해서, 미래 잠재 값을 예측할 수 있습니다. - -[![Introduction to time series forecasting](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introduction to time series forecasting") - -> 🎥 이미지를 눌러서 time series forecasting에 대한 비디오를 봅니다 - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/) - -가격, 재고, 그리고 공급과 연관된 이슈에 직접 적용하게 된다면, 비지니스에 실제로 가치있는 유용하고 흥미로운 필드가 됩니다. 딥러닝 기술은 미래의 성능을 잘 예측하기 위해 더 많은 인사이트를 얻고자 사용했지만, time series forecasting은 classic ML 기술에서 지속적으로 많은 정보를 얻는 필드입니다. - -> Penn State의 유용한 time series 커리큘럼은 [here](https://online.stat.psu.edu/stat510/lesson/1)에서 찾을 수 있습니다 - -## 소개 - -시간에 따라 얼마나 자주 사용하는지 데이터를 제공하는 smart parking meters의 배열을 관리한다고 가정해봅니다. - -> 미터기의 과거 퍼포먼스를 기반으로, 공급과 수요의 법칙에 따라서 미래 값을, 예측할 수 있나요? - -목표를 이루기 위해 언제 할 지 정확히 예측하는 것은 time series forecasting으로 다룰 수 있는 도전입니다. 주차 공간을 찾을 때 바쁜 시간이면 더 많은 요금을 받아서 기분은 안 좋겠지만, 거리 청소할 수익을 벌 수 있는 확실한 방식이 될 예정입니다! - -time series 알고리즘 일부를 알아보면서 노트북에서 정리하고 준비한 일부 데이터로 시작합니다. 분석할 데이터는 GEFCom2014 forecasting competition에서 가져왔습니다. 2012년과 2014년 사이 시간당 전기 부하와 온도 값의 3년치로 이루어져 있습니다. 전기 부하와 온도의 과거에 기록된 패턴이 주어지면, 전기 부하의 미래 값을 예측할 수 있습니다. - -이 예시에서, 과거에 기록된 부하 데이터만 사용해서, 한 time step에 앞서 예측하는 방식을 배우게 됩니다. 그러나, 시작하기 전, 무대 뒤에서 어떤 일이 일어나는지 이해하는 것이 유용합니다. - -## 일부 정의 - -'time series' 용어를 만나면 여러 다른 맥락에서 사용하는 것을 이해할 필요가 있습니다. - -🎓 **Time series** - -수학에서, "time series은 시간 순서로 인덱스된 (또는 리스트되거나 그래픽으로 표기) 데이터 포인트 시리즈입니다. 가장 일반적으로, time series는 연속해서 같은 간격의 포인트로 되어있는 시퀀스입니다." time series 예시로는 [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series)의 당일 마감 값입니다. time series plot과 통계 모델링을 사용하면 신호 처리, 닐씨 예측, 지진 경보 등 발생하고 시간이 지나면서 데이터 포인트를 그릴 수 있는 다양한 필드에서 자주 마주하게 됩니다. - -🎓 **Time series analysis** - -Time series 분석은, 방금 전에 언급했던 time series 데이터의 분석입니다. Time series 데이터는 interrupting 이벤트 이전과 이후에 time series 진화 패턴을 감지하는 'interrupted time series'를 포함한 별개 폼을 가질 수 있습니다. time series에 필요한 분석 타입은, 데이터의 특성에 기반합니다. Time series 데이터 자체는 계열 숫자 또는 문자 폼을 가질 수 있습니다. - -분석하면, frequency-domain과 time-domain, 선형과 비선형 등 포함해서, 다양한 방식을 사용합니다. 이 데이터 타입을 분석할 많은 방식에 대해서 [Learn more](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm)합니다. - -🎓 **Time series forecasting** - -Time series forecasting은 모델로 이전에 수집한 과거 데이터에서 보여준 패턴을 기반으로 미래 값을 예측합니다. regression 모델은 plot에서 x 변수를 사용할 타임 인덱스로, time series 데이터를 살펴보는 것이 가능하지만, 앞서 언급한 데이터는 스페셜 타입 모델을 사용해서 잘 분석하게 됩니다. - -Time series 데이터는 linear regression으로 분석할 수 있는 데이터와 다르게, 정렬된 관찰 값의 리스트입니다. 가장 일반적인 하나는 "Autoregressive Integrated Moving Average"의 약어인, ARIMA입니다. - -[ARIMA models](https://online.stat.psu.edu/stat510/lesson/1/1.1)은 "시리즈의 현재 값을 과거 값과 과거 예측 오류로 엮습니다." 데이터가 시간이 지나면서 정렬되는, time-domain 데이터를 분석하는 게 가장 적당합니다. - -> [here](https://people.duke.edu/~rnau/411arim.htm)에서 배울 수 있고 다음 강의에서 다룰 예정인, ARIMA 모델에는 여러 타입이 있습니다. - -다음 강의에서, 시간이 지나가면서 바뀌는 하나의 변수에 초점을 맞추어진, [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm)로 ARIMA 모델을 만드려고 합니다. 데이터 타입의 예시는 Mauna Loa Observatory에서 월별 C02 concentration을 기록한 [this dataset](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm)입니다. - -| CO2 | YearMonth | Year | Month | -| :----: | :-------: | :---: | :---: | -| 330.62 | 1975.04 | 1975 | 1 | -| 331.40 | 1975.13 | 1975 | 2 | -| 331.87 | 1975.21 | 1975 | 3 | -| 333.18 | 1975.29 | 1975 | 4 | -| 333.92 | 1975.38 | 1975 | 5 | -| 333.43 | 1975.46 | 1975 | 6 | -| 331.85 | 1975.54 | 1975 | 7 | -| 330.01 | 1975.63 | 1975 | 8 | -| 328.51 | 1975.71 | 1975 | 9 | -| 328.41 | 1975.79 | 1975 | 10 | -| 329.25 | 1975.88 | 1975 | 11 | -| 330.97 | 1975.96 | 1975 | 12 | - -✅ 이 데이터셋에서 시간이 지나며 변수를 식별합니다 - -## 고려할 Time Series [data characteristics](https://online.stat.psu.edu/stat510/lesson/1/1.1) - -time series 데이터를 봤을 때, 패턴을 더 잘 이해하고자 계산하고 완화해야 할 필요가 있는 특성이라는 점을 알 수 있습니다. 만약 분석하기 원하는 'signal'로 잠재적으로 제공하는 time series 데이터를 고려하면, 이 특성을 'noise'라고 생각할 수 있습니다. 일부 통계 기술로 이 특성 중 일부를 파생해서 이 'noise'를 자주 줄일 필요가 있을 것입니다. - -time series 작업하기 위해서 알아야 되는 일부 컨셉은 여기 있습니다: - -🎓 **Trends** - -트랜드는 시간이 지나면서 측정할 수 있는 증감으로 정의합니다. [Read more](https://machinelearningmastery.com/time-series-trends-in-python). time series의 컨텍스트에서, time series으로 트랜드를 사용하고 필요할 때 지우는 방식입니다. - -🎓 **[Seasonality](https://machinelearningmastery.com/time-series-seasonality-with-python/)** - -다양한 plot 타입이 데이터에서 seasonality를 어떻게 보여주는지 [Take a look](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm)합니다. - -🎓 **Outliers** - -아웃라이어는 표준회된 데이터 분산에서 멀어져 있습니다. - -🎓 **Long-run cycle** - -seasonality의 독립적으로, 1년 보다 긴 경제 침체같은 long-run cycle을 보여줄 수 있습니다. - -🎓 **Constant variance** - -시간이 지나면서, 일부 데이터는 낮과 밤 비율의 에너지 사용량처럼, 변하지 않는 파동을 보여줍니다. - -🎓 **Abrupt changes** - -데이터는 더 분석할 필요가 있는 갑작스러운 변화를 보여줄 수 있습니다. 예시로, COVID로 인하여 비지니스가 갑자기 끝나면, 데이터에 변경이 가해집니다. - -✅ 여기는 몇 년이 넘도록 일일 인-게임 통화를 보여주는 [sample time series plot](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python)입니다. 이 데이터에서 리스트로 되어있는 특성을 모두 식별할 수 있나요? - -![In-game currency spend](.././images/currency.png) - -## 연습 - 전력 사용량 데이터로 시작하기 - -주어진 과거 사용량으로 미래 전력 사용량을 예측하기 위한 time series 모델을 만들기 시작합시다. - -> 이 예시의 데이터는 GEFCom2014 forecasting competition에서 가져왔습니다. 2012년과 2014년 사이 시간당 전력 부하와 온도 값 3년치로 이루어져 있습니다. -> -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli and Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, July-September, 2016. - -1. 이 강의의 `working` 폴더에서, _notebook.ipynb_ 파일을 엽니다. 데이터를 불러오고 시각화하기 위해 도움을 받을 수 있는 라이브러리를 추가해서 시작합니다 - - - ```python - import os - import matplotlib.pyplot as plt - from common.utils import load_data - %matplotlib inline - ``` - - 참고, 환경을 세팅하고 데이터를 내려받으려 포함된 `common` 폴더에 있는 파일을 사용합니다. - -2. 다음으로, `load_data()`와 `head()`를 불러서 데이터프레임으로 데이터를 검사합니다: - - ```python - data_dir = './data' - energy = load_data(data_dir)[['load']] - energy.head() - ``` - - 날짜와 load를 나타내는 두 열을 볼 수 있습니다: - - | | load | - | :-----------------: | :----: | - | 2012-01-01 00:00:00 | 2698.0 | - | 2012-01-01 01:00:00 | 2558.0 | - | 2012-01-01 02:00:00 | 2444.0 | - | 2012-01-01 03:00:00 | 2402.0 | - | 2012-01-01 04:00:00 | 2403.0 | - -3. 지금부터, `plot()` 불러서 데이터를 plot 합니다: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![energy plot](../images/energy-plot.png) - -4. 지금부터, `[from date]: [to date]` 패턴에서 `energy`를 넣어서 제공하는, July 2014 첫 주를 plot합니다: - - ```python - energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![july](../images/july-2014.png) - - 예쁜 plot 입니다! 이 plot을 보고 다음 리스트된 특성을 다 판단할 수 있는지 확인합니다. 데이터를 시각화해서 추측할 내용이 있나요? - -다음 강의에서, 일부 예측하는 ARIMA 모델을 만들 예정입니다. - ---- - -## 🚀 도전 - -time series forecasting에서 얻을 수 있다고 생각할 수 있는 모든 산업과 조사 영역의 리스트를 만듭니다. 예술에 이 기술을 적용할 수 있다고 생각하나요? 경제학에서? 생태학에서? 리테일에서? 산업에서? 금융에서? 또 다른 곳은 어딘가요? - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) - -## 검토 & 자기주도 학습 - -여기에서 커버되지 않지만, neural network는 가끔 time series forecasting의 classic 방식을 개선할 때 사용합니다. [in this article](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412)에서 해당 내용을 더 읽어봅니다. - -## 과제 - -[Visualize some more time series](../assignment.md) diff --git a/7-TimeSeries/1-Introduction/translations/assignment.es.md b/7-TimeSeries/1-Introduction/translations/assignment.es.md deleted file mode 100644 index d9b8bfa0..00000000 --- a/7-TimeSeries/1-Introduction/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Visualiza algunas series de tiempo más - -## Instrucciones - -Has comenzado a aprender acerca de la predicción de series de tiempo al mirar el tipo de datos que requiere este modelado especial. Ya has visualizado algunos datos referentes a la energía. Ahora, busca otros datos que te beneficiarían de la predicción de series de tiempo. Encuentra tres ejemplos (prueba [Kaggle](https://kaggle.com) y [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) y crea un notebook para visualizarlos. Anota cualquier característica especial que tengan (estacionalidad, cambios abruptos, u otras tendencias) en el notebook. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| | Se graficaron y explicaron tres conjuntos de datos en un notebook | Se graficaron y explicaron dos conjuntos de datos en un notebook | Se graficaron y explicaron pocos conjuntos de datos en un notebook o los datos presentados fueron insuficientes | diff --git a/7-TimeSeries/1-Introduction/translations/assignment.it.md b/7-TimeSeries/1-Introduction/translations/assignment.it.md deleted file mode 100644 index 28e9e816..00000000 --- a/7-TimeSeries/1-Introduction/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Visualizzare altre serie temporali - -## Istruzioni - -Si è iniziato a conoscere la previsione di serie temporali esaminando il tipo di dati richiesti da questa modellazione speciale. Si sono visualizzati alcuni dati sull'energia. Ora, cercare altri dati che potrebbero trarre vantaggio dalla previsione di serie temporali. Trovare tre esempi (provare [Kaggle](https://kaggle.com) e [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) e creare un notebook per visualizzarli. Annotare nel notebook tutte le caratteristiche speciali che hanno (stagionalità, cambiamenti improvvisi o altre tendenze). - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------------ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| | Tre insiemi di dati sono tracciati e spiegati in un notebook | Due insiemi di dati sono tracciati e spiegati in un notebook | Pochi insiemi di dati sono tracciati o spiegati in un notebook o i dati presentati sono insufficienti | diff --git a/7-TimeSeries/1-Introduction/translations/assignment.ko.md b/7-TimeSeries/1-Introduction/translations/assignment.ko.md deleted file mode 100644 index d6d2bfa6..00000000 --- a/7-TimeSeries/1-Introduction/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 좀더 다양한 시계열 데이터를 시각화해 봅시다 - -## 설명 - -이번 수업에서는 특수한 모델링이 필요한 유형의 (시계열) 데이터를 살펴봄으로써 시계열 예측에 대해 알아보기 시작했으며, 에너지 관련 데이터를 시각화해 보았습니다. 이 과제에서는 시계열 예측을 통해 유익한 결과를 도출해낼 수 있을 법한 다른 데이터를 찾아보세요. 세 가지 데이터를 찾아 ([Kaggle](https://kaggle.com)과 [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)에서 한번 찾아보세요) 시각화하고 특징(계절성, 급변동성, 동향 등)을 관찰해 Jupyter Notebook(노트북)에 기록해 보시기 바랍니다. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 |향상 필요 | -| -------- | ------------------------------------------------------ | ------------------------------------------------------- | ------------------------------------------------------------------------------------- | -| | 노트북에 세 가지 데이터세트를 모두 시각화했으며 그 특징을 설명함 | 노트북에 두 가지 데이터세트를 시각화했으며 그 특징을 설명함 | 노트북에 몇몇의 데이터세트만 시각화 또는 그 특징을 설명했거나, 충분한 데이터를 사용하지 않음 | diff --git a/7-TimeSeries/2-ARIMA/translations/README.it.md b/7-TimeSeries/2-ARIMA/translations/README.it.md deleted file mode 100644 index 9db7cd80..00000000 --- a/7-TimeSeries/2-ARIMA/translations/README.it.md +++ /dev/null @@ -1,394 +0,0 @@ -# Previsione delle serie temporali con ARIMA - -Nella lezione precedente, si è imparato qualcosa sulla previsione delle serie temporali e si è caricato un insieme di dati che mostra le fluttuazioni del carico elettrico in un periodo di tempo. - -[![Introduzione ad ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 " Introduzione ad ARIMA") - -> 🎥 Fare clic sull'immagine sopra per un video: Una breve introduzione ai modelli ARIMA. L'esempio è fatto in linguaggio R, ma i concetti sono universali. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/?loc=it) - -## Introduzione - -In questa lezione si scoprirà un modo specifico per costruire modelli con [ARIMA: *AutoRegressive Integrated Moving Average*](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) (Media mobile integrata autoregressiva). I modelli ARIMA sono particolarmente indicati per l'adattamento di dati che mostrano [non stazionarietà](https://it.wikipedia.org/wiki/Processo_stazionario). - -## Concetti generali - -Per poter lavorare con ARIMA, ci sono alcuni concetti da conoscere: - -- 🎓 **Stazionarietà**. In un contesto statistico, la stazionarietà si riferisce a dati la cui distribuzione non cambia se spostata nel tempo. I dati non stazionari, poi, mostrano fluttuazioni dovute a andamenti che devono essere trasformati per essere analizzati. La stagionalità, ad esempio, può introdurre fluttuazioni nei dati e può essere eliminata mediante un processo di "differenziazione stagionale". - -- 🎓 **[Differenziazione](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. I dati differenzianti, sempre in un contesto statistico, si riferiscono al processo di trasformazione dei dati non stazionari per renderli stazionari rimuovendo il loro andamento non costante. "La differenziazione rimuove le variazioni di livello di una serie temporale, eliminando tendenza e stagionalità e stabilizzando di conseguenza la media delle serie temporali." [Documento di Shixiong e altri](https://arxiv.org/abs/1904.07632) - -## ARIMA nel contesto delle serie temporali - -Si esaminano le parti di ARIMA per capire meglio come aiuta a modellare le serie temporali e a fare previsioni contro di esso. - -- **AR - per AutoRegressivo**. I modelli autoregressivi, come suggerisce il nome, guardano "indietro" nel tempo per analizzare i valori precedenti nei dati e fare ipotesi su di essi. Questi valori precedenti sono chiamati "ritardi". Un esempio potrebbero essere i dati che mostrano le vendite mensili di matite. Il totale delle vendite di ogni mese sarebbe considerato una "variabile in evoluzione" nell'insieme di dati. Questo modello è costruito come "la variabile di interesse in evoluzione è regredita sui propri valori ritardati (cioè precedenti)". [wikipedia](https://it.wikipedia.org/wiki/Modello_autoregressivo_a_media_mobile) - -- **I - per integrato**. A differenza dei modelli simili "ARMA", la "I" in ARIMA si riferisce al suo aspetto *[integrato](https://wikipedia.org/wiki/Order_of_integration)* . I dati vengono "integrati" quando vengono applicati i passaggi di differenziazione in modo da eliminare la non stazionarietà. - -- **MA - per Media Mobile**. L'aspetto della [media mobile](https://it.wikipedia.org/wiki/Modello_a_media_mobile) di questo modello si riferisce alla variabile di output che è determinata osservando i valori attuali e passati dei ritardi. - -In conclusione: ARIMA viene utilizzato per adattare il più possibile un modello alla forma speciale dei dati delle serie temporali. - -## Esercizio: costruire un modello ARIMA - -Aprire la cartella _/working_ in questa lezione e trovare il file _notebook.ipynb_. - -1. Eseguire il notebook per caricare la libreria Python `statsmodels`; servirà per i modelli ARIMA. - -1. Caricare le librerie necessarie - -1. Ora caricare molte altre librerie utili per tracciare i dati: - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from pandas.plotting import autocorrelation_plot - from statsmodels.tsa.statespace.sarimax import SARIMAX - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - from IPython.display import Image - - %matplotlib inline - pd.options.display.float_format = '{:,.2f}'.format - np.set_printoptions(precision=2) - warnings.filterwarnings("ignore") # specificare per ignorare messaggi di avvertimento - ``` - -1. Caricare i dati dal file `/data/energy.csv` in un dataframe Pandas e dare un'occhiata: - - ```python - energy = load_data('./data')[['load']] - energy.head(10) - ``` - -1. Tracciare tutti i dati energetici disponibili da gennaio 2012 a dicembre 2014. Non dovrebbero esserci sorprese poiché questi dati sono stati visti nell'ultima lezione: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - Ora si costruisce un modello! - -### Creare insiemi di dati di addestramento e test - -Ora i dati sono stati caricati, quindi si possono separare in insiemi di addestramento e test. Si addestrerà il modello sull'insieme di addestramento. Come al solito, dopo che il modello ha terminato l'addestramento, se ne valuterà l'accuratezza utilizzando l'insieme di test. È necessario assicurarsi che l'insieme di test copra un periodo successivo dall'insieme di addestramento per garantire che il modello non ottenga informazioni da periodi di tempo futuri. - -1. Assegnare un periodo di due mesi dal 1 settembre al 31 ottobre 2014 all'insieme di addestramento. L'insieme di test comprenderà il bimestre dal 1 novembre al 31 dicembre 2014: - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - - Poiché questo dato riflette il consumo giornaliero di energia, c'è un forte andamento stagionale, ma il consumo è più simile al consumo nei giorni più recenti. - -1. Visualizzare le differenze: - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![Addestrare e testare i dati](../images/train-test.png) - - Pertanto, l'utilizzo di una finestra di tempo relativamente piccola per l'addestramento dei dati dovrebbe essere sufficiente. - - > Nota: poiché la funzione utilizzata per adattare il modello ARIMA usa la convalida nel campione durante l'adattamento, si omettono i dati di convalida. - -### Preparare i dati per l'addestramento - -Ora è necessario preparare i dati per l'addestramento eseguendo il filtraggio e il ridimensionamento dei dati. Filtrare l'insieme di dati per includere solo i periodi di tempo e le colonne che servono e il ridimensionamento per garantire che i dati siano proiettati nell'intervallo 0,1. - -1. Filtrare l'insieme di dati originale per includere solo i suddetti periodi di tempo per insieme e includendo solo la colonna necessaria "load" più la data: - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - Si può vedere la forma dei dati: - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -1. Ridimensionare i dati in modo che siano nell'intervallo (0, 1). - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - train.head(10) - ``` - -1. Visualizzare i dati originali rispetto ai dati in scala: - - ```python - energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) - train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) - plt.show() - ``` - - ![originale](../images/original.png) - - > I dati originali. - - ![scaled](../images/scaled.png) - - > I dati in scala - -1. Ora che si è calibrato i dati scalati, si possono scalare i dati del test: - - ```python - test['load'] = scaler.transform(test) - test.head() - ``` - -### Implementare ARIMA - -È tempo di implementare ARIMA! Si utilizzerà ora la libreria `statsmodels` installata in precedenza. - -Ora occorre seguire diversi passaggi - -1. Definire il modello chiamando `SARIMAX()` passando i parametri del modello: parametri p, d e q e parametri P, D e Q. -2. Preparare il modello per i dati di addestramento chiamando la funzione fit(). -3. Effettuare previsioni chiamando la funzione `forecast()` specificando il numero di passaggi (l'orizzonte - `horizon`) da prevedere. - -> 🎓 A cosa servono tutti questi parametri? In un modello ARIMA ci sono 3 parametri che vengono utilizzati per aiutare a modellare gli aspetti principali di una serie temporale: stagionalità, tendenza e rumore. Questi parametri sono: - -`p`: il parametro associato all'aspetto autoregressivo del modello, che incorpora i valori *passati*. -`d`: il parametro associato alla parte integrata del modello, che incide sulla quantità di *differenziazione* (🎓 si ricorda la differenziazione 👆?) da applicare a una serie temporale. -`q`: il parametro associato alla parte a media mobile del modello. - -> Nota: se i dati hanno un aspetto stagionale, come questo, si utilizza un modello ARIMA stagionale (SARIMA). In tal caso è necessario utilizzare un altro insieme di parametri: `P`, `D` e `Q` che descrivono le stesse associazioni di `p`, `d` e `q` , ma corrispondono alle componenti stagionali del modello. - -1. Iniziare impostando il valore di orizzonte preferito. Si prova 3 ore: - - ```python - # Specificare il numero di passaggi per prevedere in anticipo - HORIZON = 3 - print('Forecasting horizon:', HORIZON, 'hours') - ``` - - La selezione dei valori migliori per i parametri di un modello ARIMA può essere difficile in quanto è in qualche modo soggettiva e richiede molto tempo. Si potrebbe prendere in considerazione l'utilizzo di una funzione `auto_arima()` dalla [libreria `pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html), - -1. Per ora provare alcune selezioni manuali per trovare un buon modello. - - ```python - order = (4, 1, 0) - seasonal_order = (1, 1, 0, 24) - - model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) - results = model.fit() - - print(results.summary()) - ``` - - Viene stampata una tabella dei risultati. - -Si è costruito il primo modello! Ora occorre trovare un modo per valutarlo. - -### Valutare il modello - -Per valutare il modello, si può eseguire la cosiddetta convalida `walk forward` . In pratica, i modelli di serie temporali vengono riaddestrati ogni volta che diventano disponibili nuovi dati. Ciò consente al modello di effettuare la migliore previsione in ogni fase temporale. - -A partire dall'inizio della serie temporale utilizzando questa tecnica, addestrare il modello sull'insieme di dati di addestramento Quindi fare una previsione sul passaggio temporale successivo. La previsione viene valutata rispetto al valore noto. L'insieme di addestramento viene quindi ampliato per includere il valore noto e il processo viene ripetuto. - -> Nota: è necessario mantenere fissa la finestra dell'insieme di addestramento per un addestramento più efficiente in modo che ogni volta che si aggiunge una nuova osservazione all'insieme di addestramento, si rimuove l'osservazione dall'inizio dell'insieme. - -Questo processo fornisce una stima più solida di come il modello si comporterà in pratica. Tuttavia, ciò comporta il costo computazionale della creazione di così tanti modelli. Questo è accettabile se i dati sono piccoli o se il modello è semplice, ma potrebbe essere un problema su larga scala. - -La convalida walk-forward è lo standard di riferimento per valutazione del modello di serie temporali ed è consigliata per i propri progetti. - -1. Innanzitutto, creare un punto dati di prova per ogni passaggio HORIZON. - - ```python - test_shifted = test.copy() - - for t in range(1, HORIZON): - test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') - - test_shifted = test_shifted.dropna(how='any') - test_shifted.head(5) - ``` - - | | | load | load 1 | load 2 | - | ---------- | -------- | ---- | ------ | ------ | - | 2014/12/30 | 00:00:00 | 0,33 | 0.29 | 0,27 | - | 2014/12/30 | 00:01:00:00 | 0.29 | 0,27 | 0,27 | - | 2014/12/30 | 02:00:00 | 0,27 | 0,27 | 0,30 | - | 2014/12/30 | 03:00:00 | 0,27 | 0,30 | 0.41 | - | 2014/12/30 | 04:00 | 0,30 | 0.41 | 0,57 | - - I dati vengono spostati orizzontalmente in base al loro punto horizon. - -1. Fare previsioni sui dati di test utilizzando questo approccio a finestra scorrevole in un ciclo della dimensione della lunghezza dei dati del test: - - ```python - %%time - training_window = 720 # dedicare 30 giorni (720 ore) for l'addestramento - - train_ts = train['load'] - test_ts = test_shifted - - history = [x for x in train_ts] - history = history[(-training_window):] - - predictions = list() - - order = (2, 1, 0) - seasonal_order = (1, 1, 0, 24) - - for t in range(test_ts.shape[0]): - model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) - model_fit = model.fit() - yhat = model_fit.forecast(steps = HORIZON) - predictions.append(yhat) - obs = list(test_ts.iloc[t]) - # move the training window - history.append(obs[0]) - history.pop(0) - print(test_ts.index[t]) - print(t+1, ': predicted =', yhat, 'expected =', obs) - ``` - - Si può guardare l'addestramento in corso: - - ```output - 2014-12-30 00:00:00 - 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] - - 2014-12-30 01:00:00 - 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] - - 2014-12-30 02:00:00 - 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] - ``` - -1. Confrontare le previsioni con il carico effettivo: - - ```python - eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) - eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] - eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') - eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() - eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) - eval_df.head() - ``` - - ```output - | | | timestamp | h | prediction | actual | - | --- | ---------- | --------- | --- | ---------- | -------- | - | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | - | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | - | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | - | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | - | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | - ``` - - Osservare la previsione dei dati orari, rispetto al carico effettivo. Quanto è accurato questo? - -### Controllare la precisione del modello - -Controllare l'accuratezza del modello testando il suo errore percentuale medio assoluto (MAPE) su tutte le previsioni. - -> **🧮 Mostrami la matematica!** -> -> ![MAPE (%)](../images/mape.png) -> -> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) viene utilizzato per mostrare l'accuratezza della previsione come un rapporto definito dalla formula qui sopra. La differenza tra actualt e predictedt viene divisa per actualt. "Il valore assoluto in questo calcolo viene sommato per ogni punto nel tempo previsto e diviso per il numero di punti adattati n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) - -1. Equazione espressa in codice: - - ```python - if(HORIZON > 1): - eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] - print(eval_df.groupby('h')['APE'].mean()) - ``` - -1. Calcolare il MAPE di un passo: - - ```python - print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') - ``` - - Previsione a un passo MAPE: 0,5570581332313952 % - -1. Stampare la previsione a più fasi MAPE: - - ```python - print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') - ``` - - ```output - Multi-step forecast MAPE: 1.1460048657704118 % - ``` - - Un bel numero basso è il migliore: si consideri che una previsione che ha un MAPE di 10 è fuori dal 10%. - -1. Ma come sempre, è più facile vedere visivamente questo tipo di misurazione dell'accuratezza, quindi si traccia: - - ```python - if(HORIZON == 1): - ## Tracciamento previsione passo singolo - eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) - - else: - ## Tracciamento posizione passo multiplo - plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] - for t in range(1, HORIZON+1): - plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values - - fig = plt.figure(figsize=(15, 8)) - ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) - ax = fig.add_subplot(111) - for t in range(1, HORIZON+1): - x = plot_df['timestamp'][(t-1):] - y = plot_df['t+'+str(t)][0:len(x)] - ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) - - ax.legend(loc='best') - - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![un modello di serie temporale](../images/accuracy.png) - -🏆 Un grafico molto bello, che mostra un modello con una buona precisione. Ottimo lavoro! - ---- - -## 🚀 Sfida - -Scoprire i modi per testare l'accuratezza di un modello di serie temporali. Si esamina MAPE in questa lezione, ma ci sono altri metodi che si potrebbero usare? Ricercarli e annotarli. Un documento utile può essere trovato [qui](https://otexts.com/fpp2/accuracy.html) - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/?loc=it) - -## Revisione e Auto Apprendimento - -Questa lezione tratta solo le basi della previsione delle serie temporali con ARIMA. SI prenda del tempo per approfondire le proprie conoscenze esaminando [questo repository](https://microsoft.github.io/forecasting/) e i suoi vari tipi di modelli per imparare altri modi per costruire modelli di serie temporali. - -## Compito - -[Un nuovo modello ARIMA](assignment.it.md) diff --git a/7-TimeSeries/2-ARIMA/translations/README.ko.md b/7-TimeSeries/2-ARIMA/translations/README.ko.md deleted file mode 100644 index 7e04a53c..00000000 --- a/7-TimeSeries/2-ARIMA/translations/README.ko.md +++ /dev/null @@ -1,394 +0,0 @@ -# ARIMA로 Time series forecasting 하기 - -이전 강의에서, time series forecasting에 대해 약간 배웠고 시간대 간격으로 전력 부하의 파동을 보여주는 데이터셋도 불러왔습니다. - -[![Introduction to ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introduction to ARIMA") - -> 🎥 영상을 보려면 이미지 클릭: A brief introduction to ARIMA models. The example is done in R, but the concepts are universal. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/) - -## 소개 - -이 강의에서, [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average)로 모델을 만드는 상세한 방식을 살펴볼 예정입니다. ARIMA 모델은 [non-stationarity](https://wikipedia.org/wiki/Stationary_process)를 보여주는 데이터에 특히 알맞습니다. - -## 일반적인 컨셉 - -ARIMA로 작업하려고 한다면, 일부 컨셉을 알 필요가 있습니다: - -- 🎓 **Stationarity**. 통계 컨텍스트에서, stationarity는 시간이 지나면서 분포가 변경되지 않는 데이터를 나타냅니다. Non-stationary 데이터라면, 분석하기 위해서 변환이 필요한 트랜드로 파동을 보여줍니다. 예시로, Seasonality는, 데이터에 파동을 나타나게 할 수 있고 'seasonal-differencing' 처리로 뺄 수 있습니다. - -- 🎓 **[Differencing](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Differencing 데이터는, 통계 컨텍스트에서 다시 언급하자면, non-stationary 데이터를 non-constant 트랜드로 지워서 움직이지 않게 변형시키는 프로세스를 나타냅니다. "Differencing removes the changes in the level of a time series, eliminating trend and seasonality and consequently stabilizing the mean of the time series." [Paper by Shixiong et al](https://arxiv.org/abs/1904.07632) - -## Time series의 컨텍스트에서 ARIMA - -ARIMA의 파트를 언팩해서 어떻게 time series 모델을 만들고 예측하는 데에 도움을 주는지 더 이해합니다. - -- **AR - for AutoRegressive**. 이름에서 추측하듯, Autoregressive 모델은, 데이터에서 이전 값을 분석하고 가정하기 위해서 시간을 'back' 합니다. 이전 값은 'lags'이라고 불립니다. 예시로 연필의 월별 판매를 보여주는 데이터가 존재합니다. 각 월별 판매 총액은 데이터셋에서 'evolving variable'으로 생각됩니다. 이 모델은 "evolving variable of interest is regressed on its own lagged (i.e., prior) values."로 만들어졌습니다. [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) - -- **I - for Integrated**. 비슷한 'ARMA' 모델과 다르게, ARIMA의 'I'는 *[integrated](https://wikipedia.org/wiki/Order_of_integration)* 측면을 나타냅니다. non-stationarity를 제거하기 위해서 differencing 단계가 적용될 때 데이터는 'integrated'됩니다. - -- **MA - for Moving Average**. 이 모델의 [moving-average](https://wikipedia.org/wiki/Moving-average_model) 측면에서 lags의 현재와 과거 값을 지켜봐서 결정하는 출력 변수를 나타냅니다. - -결론: ARIMA는 가능한 근접하게 time series 데이터의 스페셜 폼에 맞는 모델을 만들기 위해서 사용합니다. - -## 연습 - ARIMA 모델 만들기 - -이 강의의 _/working_ 폴더를 열고 _notebook.ipynb_ 파일을 찾습니다. - -1. 노트북을 실행해서 `statsmodels` Python 라이브러리를 불러옵니다; ARIMA 모델이 필요할 예정입니다. - -1. 필요한 라이브러리를 불러옵니다 - -1. 지금부터, 데이터를 plot할 때 유용한 여러 라이브러리를 불러옵니다: - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from pandas.plotting import autocorrelation_plot - from statsmodels.tsa.statespace.sarimax import SARIMAX - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - from IPython.display import Image - - %matplotlib inline - pd.options.display.float_format = '{:,.2f}'.format - np.set_printoptions(precision=2) - warnings.filterwarnings("ignore") # specify to ignore warning messages - ``` - -1. `/data/energy.csv` 파일의 데이터를 Pandas 데이터프레임으로 불러오고 찾아봅니다: - - ```python - energy = load_data('./data')[['load']] - energy.head(10) - ``` - -1. January 2012부터 December 2014까지 유효한 에너지 데이터를 모두 plot합니다. 지난 강의에서 보았던 데이터라서 놀랍지 않습니다: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - 지금부터, 모델을 만들어봅시다! - -### 훈련과 테스트 데이터셋 만들기 - -이제 데이터를 불러왔으면, 훈련과 테스트 셋으로 나눌 수 있습니다. 훈련 셋으로 모델을 훈련할 수 있습니다. 평소처럼, 모델 훈련이 끝나면, 데이터셋으로 정확도를 평가합니다. 모델이 미래에서 정보를 못 얻도록 테스트셋이 훈련 셋의 이후 기간을 커버하는지 확인할 필요가 있습니다. - -1. 2014년 September 1 부터 October 31 까지 2개월간 훈련 셋에 할당합니다. 테스트셋은 2014년 November 1 부터 December 31 까지 2개월간 포함합니다: - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - - 이 데이터는 에너지의 일일 소비 수량을 반영하므로, 강한 계절적 패턴이 있지만, 소비 수량은 최근 날짜와 매우 비슷합니다. - -1. 다른 점을 시각화합니다: - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![training and testing data](../images/train-test.png) - - 그래서, 데이터를 훈련하면 상대적으로 적은 시간대로도 충분해야 합니다. - - > 노트: ARIMA 모델을 fit할 때 사용하는 함수는 fitting하는 동안 in-sample 검증하므로, 검증 데이터를 생략할 예정입니다. - -### 훈련을 위한 데이터 준비하기 - -지금부터, 데이터 필터링하고 스케일링한 훈련 데이터를 준비할 필요가 있습니다. 필요한 시간대와 열만 포함된 데이터셋을 필터링하고, 0,1 간격으로 데이터를 예측하도록 확장합니다. - -1. 세트 별로 앞서 말해둔 기간만 포함하고 날짜가 추가된 'load' 열만 포함해서 원본 데이터셋을 필터링합니다: - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - 데이터의 모양을 볼 수 있습니다: - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -1. (0, 1) 범위로 데이터를 스케일링합니다: - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - train.head(10) - ``` - -1. 원본 vs. 스케일된 데이터를 시각화합니다: - - ```python - energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) - train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) - plt.show() - ``` - - ![original](../images/original.png) - - > 원본 데이터 - - ![scaled](../images/scaled.png) - - > 스케일된 데이터 - -1. 지금부터 스케일된 데이터를 보정했으므로, 테스트 데이터로 스케일할 수 있습니다: - - ```python - test['load'] = scaler.transform(test) - test.head() - ``` - -### ARIMA 구현하기 - -ARIMA를 구현할 시간입니다! 미리 설치해둔 `statsmodels` 라이브러리를 지금 사용하겠습니다. - -이제 다음 몇 단계가 필요합니다 - - 1. `SARIMAX()`을 불러서 데이터를 정의하고 모델 파라미터를 전달합니다: p, d, 그리고 q 파라미터와, P, D, 그리고 Q 파라미터. - 2. fit() 함수를 불러서 훈련 데이터을 위한 모델을 준비합니다. - 3. `forecast()` 함수를 부르고 예측할 단계 숫자를 (`horizon`) 지정해서 예측합니다. - -> 🎓 모든 파라미터는 무엇을 위해서 있나요? ARIMA 모델에 time series의 주요 측면을 모델링 도울 때 사용하는 3개 파라미터가 있습니다: seasonality, trend, 그리고 noise. 파라미터는 이렇습니다: - -`p`: *past* 값을 합치는, 모델의 auto-regressive 측면과 관련있는 파라미터입니다. -`d`: time series에 적용할 *differencing* (🎓 differencing을 기억하나요 👆?) 결과에 영향받는, 모델의 통합 파트와 관련있는 파라미터입니다. -`q`: 모델의 moving-average 파트와 관련있는 파라미터입니다. - -> 노트: 데이터에 - 이러한 것처럼 - 계절적 측면이 있다면, seasonal ARIMA 모델 (SARIMA)을 사용합니다. 이러한 케이스에는 다른 파라미터 셋을 사용할 필요가 있습니다: `P`, `D`와, `Q`는 `p`, `d`와, `q`처럼 같은 집단이라는 점을 설명하지만, 모델의 계절적 컴포넌트에 대응합니다. - -1. 선호하는 horizon 값을 세팅하며 시작합니다. 3시간 동안 시도해봅시다: - - ```python - # Specify the number of steps to forecast ahead - HORIZON = 3 - print('Forecasting horizon:', HORIZON, 'hours') - ``` - - ARIMA 파라미터의 최적 값을 선택하는 것은 다소 주관적이고 시간이 많이 지나므로 어려울 수 있습니다. [`pyramid` library](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html)에서 `auto_arima()` 함수로 사용하는 것을 고려할 수 있습니다. - -1. 지금 당장 좋은 모델을 찾고자 약간 수동으로 선택하려고 합니다. - - ```python - order = (4, 1, 0) - seasonal_order = (1, 1, 0, 24) - - model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) - results = model.fit() - - print(results.summary()) - ``` - - 결과 테이블이 출력되었습니다. - -첫 모델을 만들었습니다! 지금부터 평가하는 방식을 찾을 필요가 있습니다. - -### 모델 평가하기 - -모델을 평가하려면, `walk forward` 검증이라 불리는 것을 할 수 있습니다. 연습에서, time series 모델은 새로운 데이터를 사용할 수 있는 순간마다 다시-훈련하고 있습니다. 모델은 각 time step마다 최적 예측을 하게 됩니다. - -이 기술로 time series의 초반부터 시작해서, 훈련 데이터셋으로 모델을 훈련합니다. 다음 time step에서 예측하게 됩니다. 예측은 알려진 값을 기반으로 평가하게 됩니다. 훈련 셋은 알려진 값을 포함해서 확장하고 프로세스가 반복하게 됩니다. - -> 노트: 세트의 초반부터 관측치를 지울 수 있는, 훈련 셋에서 새로운 관측치를 추가할 때마다 효과적인 훈련을 위해 훈련 셋 window를 고정해서 유지해야 합니다. - -이 프로세스는 실전에서 모델이 어떻게 할 지에 대해서 강하게 추정하도록 제공합니다. 그러나, 많은 모델을 만들면 계산 비용이 생깁니다. 이는 데이터가 작거나 모델이 간단하지만, 스케일에 이슈가 있을 때 받아들일 수 있습니다. - -Walk-forward 검사는 time series 모델 평가의 최적 표준이고 이 프로젝트에 추천됩니다. - -1. 먼저, 각자 HORIZON 단계에 테스트 데이터 포인트를 만듭니다. - - ```python - test_shifted = test.copy() - - for t in range(1, HORIZON + 1): - test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') - - test_shifted = test_shifted.dropna(how='any') - test_shifted.head(5) - ``` - - | | | load | load+1 | load+2 | - | ---------- | -------- | ---- | ------ | ------ | - | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | - | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | - | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | - | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | - | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | - - 데이터는 horizon 포인트에 따라서 수평으로 이동합니다. - -1. 테스트 데이터 길이의 크기로 반복해서 sliding window 방식으로 테스트 데이터를 예측합니다: - - ```python - %%time - training_window = 720 # dedicate 30 days (720 hours) for training - - train_ts = train['load'] - test_ts = test_shifted - - history = [x for x in train_ts] - history = history[(-training_window):] - - predictions = list() - - order = (2, 1, 0) - seasonal_order = (1, 1, 0, 24) - - for t in range(test_ts.shape[0]): - model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) - model_fit = model.fit() - yhat = model_fit.forecast(steps = HORIZON) - predictions.append(yhat) - obs = list(test_ts.iloc[t]) - # move the training window - history.append(obs[0]) - history.pop(0) - print(test_ts.index[t]) - print(t+1, ': predicted =', yhat, 'expected =', obs) - ``` - - 진행하고 있는 훈련을 볼 수 있습니다: - - ```output - 2014-12-30 00:00:00 - 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] - - 2014-12-30 01:00:00 - 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] - - 2014-12-30 02:00:00 - 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] - ``` - -1. 예측과 실제 부하를 비교합니다: - - ```python - eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) - eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] - eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') - eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() - eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) - eval_df.head() - ``` - - output - | | | timestamp | h | prediction | actual | - | --- | ---------- | --------- | --- | ---------- | -------- | - | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | - | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | - | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | - | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | - | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | - - 실제 부하와 비교해서, 시간당 데이터의 예측을 관찰해봅니다. 어느정도 정확한가요? - -### 모델 정확도 확인하기 - -모든 예측에서 mean absolute percentage error (MAPE)으로 테스트해서 모델의 정확도를 확인해봅니다. - -> **🧮 Show me the math** -> -> ![MAPE](../images/mape.png) -> -> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/)은 다음 공식에서 정의된 비율로 정확도를 예측해서 보여주도록 사용됩니다. actualt 과 predictedt 사이의 차이점을 actualt로 나누게 됩니다. "The absolute value in this calculation is summed for every forecasted point in time and divided by the number of fitted points n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) - -1. 코드로 방정식을 표현합니다: - - ```python - if(HORIZON > 1): - eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] - print(eval_df.groupby('h')['APE'].mean()) - ``` - -1. one step MAPE을 계산합니다: - - - ```python - print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') - ``` - - One step forecast MAPE: 0.5570581332313952 % - -1. multi-step forecast MAPE을 출력합니다: - - ```python - print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') - ``` - - ```output - Multi-step forecast MAPE: 1.1460048657704118 % - ``` - - 최적으로 낮은 숫자가 가장 좋습니다: 10 MAPE이 10% 내려져서 예측되었다고 생각해봅니다. - -1. 하지만 항상, 이 정확도 측정 종류를 시각적으로 보는 것이 더 쉬우므로, plot 해봅니다: - - ```python - if(HORIZON == 1): - ## Plotting single step forecast - eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) - - else: - ## Plotting multi step forecast - plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] - for t in range(1, HORIZON+1): - plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values - - fig = plt.figure(figsize=(15, 8)) - ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) - ax = fig.add_subplot(111) - for t in range(1, HORIZON+1): - x = plot_df['timestamp'][(t-1):] - y = plot_df['t+'+str(t)][0:len(x)] - ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) - - ax.legend(loc='best') - - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![a time series model](../images/accuracy.png) - -🏆 괜찮은 정확도로 모델을 보여주는, 매우 좋은 plot 입니다. 잘 마쳤습니다! - ---- - -## 🚀 도전 - -Time Series 모델의 정확도를 테스트할 방식을 파봅니다. 이 강의에서 MAPE을 다루지만, 사용할 다른 방식이 있나요? 조사해보고 첨언해봅니다. 도움을 받을 수 있는 문서는 [here](https://otexts.com/fpp2/accuracy.html)에서 찾을 수 있습니다. - -## [강의 후 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/) - -## 검토 & 자기주도 학습 - -이 강의에서 ARIMA로 Time Series Forecasting의 기초만 다룹니다. 시간을 내서 [this repository](https://microsoft.github.io/forecasting/)를 파보고 Time Series 모델 만드는 다양한 방식을 배우기 위한 모델 타입도 깊게 알아봅니다. - -## 과제 - -[A new ARIMA model](../assignment.md) diff --git a/7-TimeSeries/2-ARIMA/translations/assignment.es.md b/7-TimeSeries/2-ARIMA/translations/assignment.es.md deleted file mode 100644 index cefa7807..00000000 --- a/7-TimeSeries/2-ARIMA/translations/assignment.es.md +++ /dev/null @@ -1,11 +0,0 @@ -# Un nuevo modelo ARIMA - -## Instrucciones - -Ahora que has construido un modelo de ARIMA, construye uno nuevo con datos frescos (prueba uno de [estos conjuntos de datos de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anota tu trabajo en un notebook, visualiza los datos y tu modelo, y prueba su precisión usando MAPE. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | -| | Se presentó un notebook con nuevo modelo de ARIMA construido, probado y explicado con visualizaciones y precisión declarada. | El notebook presentado no está anotado o contiene bugs | Se presentó un notebook incompleto | diff --git a/7-TimeSeries/2-ARIMA/translations/assignment.it.md b/7-TimeSeries/2-ARIMA/translations/assignment.it.md deleted file mode 100644 index 120865b9..00000000 --- a/7-TimeSeries/2-ARIMA/translations/assignment.it.md +++ /dev/null @@ -1,11 +0,0 @@ -# Un nuovo modello ARIMA - -## Istruzioni - -Ora che si è creato un modello ARIMA, crearne uno nuovo con dati aggiornati (provare uno di [questi set di dati da Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Annotare il lavoro in un notebook, visualizzare i dati e il modello e verificarne l'accuratezza utilizzando MAPE. - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | -| | Viene presentato un notebook con un nuovo modello ARIMA costruito, testato e spiegato con visualizzazioni e accuratezza dichiarate. | Il notebook presentato non è annotato o contiene bug | Viene presentato un notebook incompleto | diff --git a/7-TimeSeries/2-ARIMA/translations/assignment.ko.md b/7-TimeSeries/2-ARIMA/translations/assignment.ko.md deleted file mode 100644 index b2f6629a..00000000 --- a/7-TimeSeries/2-ARIMA/translations/assignment.ko.md +++ /dev/null @@ -1,11 +0,0 @@ -# 새로운 ARIMA 모델 - -## 설명 - -이번 수업에서는 ARIMA 모델을 만들어 보았습니다. 이 과제에서는 새 데이터([듀크대학교에서 제공하는 데이터세트](http://www2.stat.duke.edu/~mw/ts_data_sets.html) 중 하나)로 새로운 ARIMA 모델을 만들어 보세요. Jupyter Notebook(노트북)에 작업 과정을 설명하고, 데이터와 모델을 시각화하고, MAPE(평균 절대 백분율 오차)를 사용해 모델의 정확도를 시험해 보세요. - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | -------------------- | -| | 새로운 ARIMA 모델을 만들었으며, 그 성능을 시험했고, 시각 자료와 함께 작업 과정의 설명 및 모델의 정확도를 노트북에 선보임 | 작업 과정의 설명을 포함하지 않거나 버그가 있는 노트북을 제출함 | 미완성 노트북을 제출함 | diff --git a/7-TimeSeries/3-SVR/translations/README.md b/7-TimeSeries/3-SVR/translations/README.md deleted file mode 100644 index 9a6ad79c..00000000 --- a/7-TimeSeries/3-SVR/translations/README.md +++ /dev/null @@ -1 +0,0 @@ -Placeholder for translation file \ No newline at end of file diff --git a/7-TimeSeries/3-SVR/translations/assignment.es.md b/7-TimeSeries/3-SVR/translations/assignment.es.md deleted file mode 100644 index ec343391..00000000 --- a/7-TimeSeries/3-SVR/translations/assignment.es.md +++ /dev/null @@ -1,13 +0,0 @@ -# Un nuevo modelo SVR - -## Instrucciones [^1] - -Ahora que has construido un modelo SVR, construye uno nuevo con datos frescos (prueba uno de [estos conjuntos de datos de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anota tu trabajo en un notebook. Visualiza los datos y tu modelo, y prueba su precisión usando MAPE y gráficos apropiados. También prueba ajustando distintos hiperparámetros y valores para los pasos de tiempo. - -## Rúbrica [^1] - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------- | -| | Se presentó un notebook on un modelo SVR construido, probado y explicado con visualizaciones y precisión declarada. | El notebook presentado no está anotado o contiene errores. | Se presentó un notebook incompleto. | - -[^1]:El texto en esta sección se basó en la [asignación de ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) diff --git a/7-TimeSeries/translations/README.es.md b/7-TimeSeries/translations/README.es.md deleted file mode 100644 index 20509f9b..00000000 --- a/7-TimeSeries/translations/README.es.md +++ /dev/null @@ -1,23 +0,0 @@ -# Introducción a la predicción de series de tiempo - -¿Qué es la predicción de series de tiempo? Se trata de predecir eventos futuros al analizar las tendencias del pasado. - -## Tema regional: Uso de la electricidad en el mundo ✨ - -En estas dos lecciones, se te presentará la predicción de series de tiempo, un área algo menos conocida del aprendizaje automático que sin embargo es extremadamente valiosa para la industria y aplicaciones empresariales, entre otros campos. Mientras las redes neuronales pueden ser usadas para mejorar la utilidad de estos modelos, las estudiaremos en el contexto del aprendizaje automático clásico como modelos que ayudan a predecir el desempeño futuro basado en el pasado. - -Nuestro enfoque regional es el uso de la electricidad en el mundo, un conjunto de datos interesante para aprender a predecir el uso de la energía a futuro basado en patrones de cargas pasadas. Puedes ver cómo esta clase de predicción puede ser extremadamente útil en un entorno empresarial. - -![Red eléctrica](../images/electric-grid.jpg) - -Fotografía de [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) de torres eléctricas en una carretera en Rajasthan en [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## Lecciones - -1. [Introducción a la predicción de series de tiempo](../1-Introduction/README.md) -2. [Construyendo modelos de series de tiempo con ARIMA](../2-ARIMA/README.md) -3. [Construyendo un Regresor de Soporte Vectorial para la predicción de series de tiempo](../3-SVR/README.md) - -## Créditos - -"Introducción a la predicción de series de tiempo" fue escrito con ⚡️ por [Francesca Lazzeri](https://twitter.com/frlazzeri) y [Jen Looper](https://twitter.com/jenlooper). Los notebooks aparecieron primero en el [repo de Azure "Aprendizaje profundo para series de tiempo"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) originalmente escrito por Francesca Lazzeri. La lección de SVR fue escrita por [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) diff --git a/7-TimeSeries/translations/README.fr.md b/7-TimeSeries/translations/README.fr.md deleted file mode 100644 index 7ffec79f..00000000 --- a/7-TimeSeries/translations/README.fr.md +++ /dev/null @@ -1,23 +0,0 @@ -# Introduction à la prévision des séries chronologiques - -Qu'est-ce que la prévision des séries chronologiques ? Il s'agit de prédire des événements futurs en analysant les tendances du passé. - -## Thème régional : consommation mondiale d'électricité ✨ - -Dans ces deux leçons, nous vous présenterons la prévision des séries temporelles, un domaine moins connu de l'apprentissage automatique qui est pourtant extrêmement précieux pour les applications industrielles et commerciales, entre autres. Bien que les réseaux neuronaux puissent être utilisés pour améliorer l'utilité de ces modèles, nous les étudierons dans le contexte de l'apprentissage automatique classique comme des modèles permettant de prédire les performances futures sur la base du passé. - -Nous nous concentrons sur l'utilisation de l'électricité dans le monde, un ensemble de données intéressant pour apprendre à prévoir l'utilisation future de l'électricité sur la base des modèles de charge passés. Vous pouvez voir comment ce type de prévision peut être extrêmement utile dans un environnement commercial. - -![réseau électrique](../images/electric-grid.jpg) - -Photo par [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) de poteaux électriques sur une route au Rajasthan, sur [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## Leçons - -1. [Introduction à la prévision des séries chronologiques](../1-Introduction/README.md) -2. [Construction de modèles de séries temporelles ARIMA](../2-ARIMA/README.md) -3. [Construction d'un régresseur à vecteur de support pour la prévision des séries temporelles](../3-SVR/README.md) - -## Crédits - -"Introduction à la prévision des séries chronologiques" a été écrit avec ⚡️ par [Francesca Lazzeri](https://twitter.com/frlazzeri) et [Jen Looper](https://twitter.com/jenlooper). Les notebooks ont été publiés pour la première fois en ligne dans le [Azure "Deep Learning For Time Series" repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) écrit à l'origine par Francesca Lazzeri. La leçon sur les SVR a été rédigée par [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) diff --git a/7-TimeSeries/translations/README.hi.md b/7-TimeSeries/translations/README.hi.md deleted file mode 100644 index 06dec057..00000000 --- a/7-TimeSeries/translations/README.hi.md +++ /dev/null @@ -1,24 +0,0 @@ -# समय श्रृंखला पूर्वानुमान से परिचय - -समय श्रृंखला पूर्वानुमान (time series forecasting) क्या है? यह अतीत के रुझानों का विश्लेषण करके भविष्य की घटनाओं की भविष्यवाणी करने के बारे में है। - -## क्षेत्रीय विषय: दुनिया भर में बिजली का उपयोग ✨ - -इन दो पाठों में आपको समय श्रृंखला पूर्वानुमान से परिचित कराया जाएगा। यह मशीन लर्निंग (machine learning) का कुछ कम ज्ञात क्षेत्र होने के बावजूद भी अन्य क्षेत्रों के साथ-साथ उद्योग और व्यावसायिक अनुप्रयोगों के लिए अत्यंत मूल्यवान है। जबकि इन मॉडलों की उपयोगिता को बढ़ाने के लिए न्यूरल नेटवर्क (neural networks) का उपयोग किया जा सकता है, हम इनका अध्ययन शास्त्रीय मशीन लर्निंग (machine learning) के संदर्भ में करेंगे, जहाँ मॉडल अतीत के आधार पर भविष्य के प्रदर्शन की भविष्यवाणी करने में मदद करते हैं। - -हमारा क्षेत्रीय केंद्र दुनिया में बिजली का उपयोग है। यह पिछले विद्युत भार के प्रतिरूप के आधार पर भविष्य के बिजली के उपयोग का पूर्वानुमान करना सीखने के लिए एक दिलचस्प डेटासेट (dataset) है। आप भांप सकते हैं कि इस प्रकार का पूर्वानुमान व्यावसायिक वातावरण में किस प्रकार अत्यंत सहायक हो सकता है। - -![विद्युत ग्रिड](../images/electric-grid.jpg) - -> राजस्थान में एक सड़क पर बिजली के टावरों का [पेड्डी साई ऋतिक (Peddi Sai hrithik)](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) द्वारा Unsplash [अनस्प्लैश (Unsplash)](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) पर चित्र - - -## पाठ - -1. [समय श्रृंखला पूर्वानुमान से परिचय](../1-Introduction/README.md) -2. [अरीमा (ARIMA) समय श्रृंखला मॉडलों का निर्माण](../2-ARIMA/README.md) -3. [समय श्रृंखला पूर्वानुमान के लिए समर्थन वेक्टर प्रतिगामी (Support Vector Regressor) का निर्माण](../3-SVR/README.md) - -## श्रेय - -"समय श्रृंखला पूर्वानुमान से परिचय" ⚡️ के साथ [फ्रैंचेस्का लज़ैरी (Francesca Lazzeri)](https://twitter.com/frlazzeri) और [जेन लूपर (Jen Looper)](https://twitter.com/jenlooper) द्वारा लिखा गया था। नोटबुकें पहली बार [अज़ौर "डीप लर्निंग फॉर टाइम सीरीज़" रिपॉजिटरी (Azure "Deep Learning For Time Series" repository)](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) में ऑनलाइन दिखाई दी, जिसे मूल रूप से फ्रैंचेस्का लज़ैरी (Francesca Lazzeri) ने लिखा था। एस. वी. आर. (SVR) पाठ [अनिर्बान मुखर्जी (Anirban Mukherjee)](https://github.com/AnirbanMukherjeeXD) द्वारा लिखा गया था। diff --git a/7-TimeSeries/translations/README.it.md b/7-TimeSeries/translations/README.it.md deleted file mode 100644 index d6ddb78e..00000000 --- a/7-TimeSeries/translations/README.it.md +++ /dev/null @@ -1,22 +0,0 @@ -# Introduzione alla previsione delle serie temporali - -Che cos'è la previsione delle serie temporali? Si tratta di prevedere eventi futuri analizzando le tendenze del passato. - -## Argomento regionale: consumo di elettricità in tutto il mondo ✨ - -In queste due lezioni, si verrà introdotti alla previsione delle serie temporali, un'area un po' meno conosciuta di machine learning che è tuttavia estremamente preziosa per l'industria e le applicazioni aziendali, tra gli altri campi. Sebbene le reti neurali possano essere utilizzate per migliorare l'utilità di questi modelli, verranno studiate nel contesto di machine learning classico come modelli che aiutano a prevedere le prestazioni future basandosi sul passato. - -L'obiettivo regionale è l'utilizzo elettrico nel mondo, un interessante insieme di dati per conoscere la previsione del consumo energetico futuro in base ai modelli di carico passato. Si può vedere come questo tipo di previsione può essere estremamente utile in un ambiente aziendale. - -![rete elettrica](../images/electric-grid.jpg) - -Foto di [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) di torri elettriche su una strada in Rajasthan su [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## Lezioni - -1. [Introduzione alla previsione delle serie temporali](../1-Introduction/translations/README.it.md) -2. [Costruire modelli di serie temporali ARIMA](../2-ARIMA/translations/README.it.md) - -## Crediti - -"Introduzione alla previsione delle serie temporali" è stato scritto con ⚡️ da [Francesca Lazzeri](https://twitter.com/frlazzeri) e [Jen Looper](https://twitter.com/jenlooper) diff --git a/7-TimeSeries/translations/README.ko.md b/7-TimeSeries/translations/README.ko.md deleted file mode 100644 index 023a9f41..00000000 --- a/7-TimeSeries/translations/README.ko.md +++ /dev/null @@ -1,22 +0,0 @@ -# Time series forecasting 소개하기 - -time series forecasting은 무엇인가요? 과거의 트렌드로 분석해서 미래 이벤트를 예측합니다. - -## 지역 토픽: 전세계 전기 사용량 ✨ - -2개의 강의에서, 타 필드의 산업과 비지니스 애플리케이션에서도 매우 쓸모있는 머신러닝의 비교적 덜 알려진 영역인, time series forecasting을 소개할 예정입니다. neural network로 모델의 유틸리티를 개선할 수 있지만, 모델은 과거 기반으로 미래 성능을 예측할수 있게 도와줄 수 있으므로 classical 머신러닝의 컨텍스트로 공부해볼 예정입니다. - -여기에서 핵심은 과거 부하 패턴 기반으로 향후 전력 사용량의 예측에 대해 배울 수 있는 흥미로운 데이터셋인, 전세계의 전기 사용량입니다. 이 예측 종류가 비지니스 환경에서 많이 돕고 있는지 볼 수 있습니다. - -![electric grid](../images/electric-grid.jpg) - -Photo by [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) of electrical towers on a road in Rajasthan on [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## 강의 - -1. [Time series forecasting 소개하기](../1-Introduction/translations/README.ko.md) -2. [ARIMA time series 모델 만들기](../2-ARIMA/translations/README.ko.md) - -## 크레딧 - -"Introduction to time series forecasting" was written with ⚡️ by [Francesca Lazzeri](https://twitter.com/frlazzeri) and [Jen Looper](https://twitter.com/jenlooper) diff --git a/7-TimeSeries/translations/README.ru.md b/7-TimeSeries/translations/README.ru.md deleted file mode 100644 index 25f4726b..00000000 --- a/7-TimeSeries/translations/README.ru.md +++ /dev/null @@ -1,22 +0,0 @@ -# Введение в прогнозирование временных рядов - -Что такое прогнозирование временных рядов? Речь идет о предсказании будущих событий, анализируя тенденции прошлого. - -## Региональная тема: потребление электроэнергии во всем мире ✨ - -В этих двух уроках вы познакомитесь с прогнозированием временных серий, несколько менее известной областью машинного обучения, которая, тем не менее, чрезвычайно ценна для промышленности и бизнес-приложений, среди других областей. Хотя нейронные сети можно использовать для повышения полезности этих моделей, мы будем изучать их в контексте классического машинного обучения, поскольку модели помогают прогнозировать будущую производительность на основе прошлого. - -Наш региональный фокус - использование электроэнергии в мире, интересный набор данных, позволяющий узнать о прогнозировании будущего использования энергии на основе моделей прошлой нагрузки. Вы можете увидеть, что такое прогнозирование может быть чрезвычайно полезным в бизнес-среде. - -![электрическая сеть](../images/electric-grid.jpg) - -Автор фотографии [Педди Саи Хритика](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) электрических башен на дороге в Раджастане на [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## Уроки - -1. [Введение в прогнозирование временных рядов](../1-Introduction/README.md) -2. [Построение моделей ARIMA](../2-ARIMA/README.md) - -## Благодарности - -«Введение в прогнозирование временных рядов» было написано с ⚡️ [Франческа Лазерри](https://twitter.com/frlazzeri) и [Джен Лупер](https://twitter.com/jenlooper) diff --git a/7-TimeSeries/translations/README.zh-cn.md b/7-TimeSeries/translations/README.zh-cn.md deleted file mode 100644 index 6da6529a..00000000 --- a/7-TimeSeries/translations/README.zh-cn.md +++ /dev/null @@ -1,26 +0,0 @@ -# 时间序列预测简介 - -什么是时间序列预测?它就是通过分析过去的趋势来预测未来的事件。 - -## 区域主题:全球用电量✨ - -在这两节课中,你将了解时间序列预测,这是机器学习中一个鲜为人知的领域,但对工业和商业应用程序以及其他领域非常有价值。虽然神经网络可用于增强这些模型的实用性,但我们将在经典机器学习的背景下研究它们,因为模型有助于根据过去预测未来的表现。 - -我们的重点是世界上的用电量,这是一个有趣的数据集,可以根据过去的用电量负载来预测未来的用电量。你可以看到这种预测在商业环境中非常有用。 - -![电网](../images/electric-grid.jpg) - -> [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) 摄于 [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) 。 - -## 课程 - -1. [时间序列预测介绍](../1-Introduction/README.md) -2. [构建 ARIMA 时间序列模型](../2-ARIMA/README.md) -3. [构建支持向量回归器的时间序列预测](../3-SVR/README.md) - -## 作者 - -“时间序列预测简介” 由 [Francesca Lazzeri](https://twitter.com/frlazzeri) 和 [Jen Looper](https://twitter.com/jenlooper) 用 ⚡️ 编写。 - -笔记本首先出现在 [Azure “时间序列深度学习”存储库](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) 最初由 Francesca Lazzeri 编写。SVR 课由 [Anirban Mukherjee](https://github.com/AnibanMukherjeeXD) 编写。 - diff --git a/8-Reinforcement/translations/README.it.md b/8-Reinforcement/translations/README.it.md deleted file mode 100644 index aa683dda..00000000 --- a/8-Reinforcement/translations/README.it.md +++ /dev/null @@ -1,53 +0,0 @@ -# Introduzione al reinforcement learning - -Il reinforcement learning (apprendimento per rinforzo), RL, è visto come uno dei paradigmi di base di machine learning, accanto all'apprendimento supervisionato e all'apprendimento non supervisionato. RL è tutta una questione di decisioni: fornire le decisioni giuste o almeno imparare da esse. - -Si immagini di avere un ambiente simulato come il mercato azionario. Cosa succede se si impone un determinato regolamento. Ha un effetto positivo o negativo? Se accade qualcosa di negativo, si deve accettare questo _rinforzo negativo_, imparare da esso e cambiare rotta. Se è un risultato positivo, si deve costruire su quel _rinforzo positivo_. - -![Pierino e il lupo](../images/peter.png) - -> Pierino e i suoi amici devono sfuggire al lupo affamato! Immagine di [Jen Looper](https://twitter.com/jenlooper) - -## Tema regionale: Pierino e il lupo (Russia) - -[Pierino e il Lupo](https://it.wikipedia.org/wiki/Pierino_e_il_lupo) è una fiaba musicale scritta dal compositore russo [Sergei Prokofiev](https://it.wikipedia.org/wiki/Sergei_Prokofiev). È la storia del giovane pioniere Pierino, che coraggiosamente esce di casa per inseguire il lupo nella radura della foresta . In questa sezione, si addestreranno algoritmi di machine learning che aiuteranno Pierino a: - -- **Esplorare** l'area circostante e costruire una mappa di navigazione ottimale -- **Imparare** a usare uno skateboard e bilanciarsi su di esso, per muoversi più velocemente. - -[![Pierino e il lupo](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 Cliccare sull'immagine sopra per ascoltare Pierino e il Lupo di Prokofiev - -## Reinforcement learning - -Nelle sezioni precedenti, si sono visti due esempi di problemi di machine learning: - -- **Supervisionato**, dove si ha un insieme di dati che suggeriscono soluzioni campione al problema da risolvere. [La classificazione](../../4-Classification/translations/README.it.md) e la [regressione](../../2-Regression/translations/README.it.md) sono attività di apprendimento supervisionato. -- **Non** supervisionato, in cui non si dispone di dati di allenamento etichettati. L'esempio principale di apprendimento non supervisionato è il [Clustering](../../5-Clustering/translations/README.it.md). - -In questa sezione, viene presentato un nuovo tipo di problemi di apprendimento che non richiede dati di addestramento etichettati. Esistono diversi tipi di tali problemi: - -- **[Apprendimento semi-supervisionato](https://wikipedia.org/wiki/Semi-supervised_learning)**, in cui si dispone di molti dati non etichettati che possono essere utilizzati per pre-addestrare il modello. -- **[Apprendimento per rinforzo](https://it.wikipedia.org/wiki/Apprendimento_per_rinforzo)**, in cui un agente impara come comportarsi eseguendo esperimenti in un ambiente simulato. - -### Esempio: gioco per computer - -Si supponga di voler insegnare a un computer a giocare a un gioco, come gli scacchi o [Super Mario](https://it.wikipedia.org/wiki/Mario_(serie_di_videogiochi)). Affinché il computer possa giocare, occorre prevedere quale mossa fare in ciascuno degli stati di gioco. Anche se questo può sembrare un problema di classificazione, non lo è, perché non si dispone di un insieme di dati con stati e azioni corrispondenti. Sebbene si potrebbero avere alcuni dati come partite di scacchi esistenti o registrazioni di giocatori che giocano a Super Mario, è probabile che tali dati non coprano a sufficienza un numero adeguato di possibili stati. - -Invece di cercare dati di gioco esistenti, **Reinforcement Learning** (RL) si basa sull'idea di *far giocare il computer* molte volte e osservare il risultato. Quindi, per applicare il Reinforcement Learning, servono due cose: - -- **Un ambiente** e **un simulatore** che permettono di giocare molte volte un gioco. Questo simulatore definirebbe tutte le regole del gioco, nonché possibili stati e azioni. - -- **Una funzione di ricompensa**, che informi di quanto bene si è fatto durante ogni mossa o partita. - -La differenza principale tra altri tipi di machine learning e RL è che in RL in genere non si sa se si vince o si perde finchè non si finisce il gioco. Pertanto, non è possibile dire se una determinata mossa da sola sia buona o meno: si riceve una ricompensa solo alla fine del gioco. L'obiettivo è progettare algoritmi che consentano di addestrare un modello in condizioni incerte. Si imparerà a conoscere un algoritmo RL chiamato **Q-learning**. - -## Lezioni - -1. [Introduzione a reinforcement learning e al Q-Learning](../1-QLearning/translations/README.it.md) -2. [Utilizzo di un ambiente di simulazione in palestra](../2-Gym/translations/README.it.md) - -## Crediti - -"Introduzione al Reinforcement Learning" è stato scritto con ♥️ da [Dmitry Soshnikov](http://soshnikov.com) diff --git a/8-Reinforcement/translations/README.ko.md b/8-Reinforcement/translations/README.ko.md deleted file mode 100644 index e0541157..00000000 --- a/8-Reinforcement/translations/README.ko.md +++ /dev/null @@ -1,54 +0,0 @@ -# Reinforcement learning 소개하기 - -Reinforcement learning, 즉 RL은, supervised learning 과 unsupervised learning 다음의, 기초 머신러닝 페러다임 중 하나로 봅니다. RL은 모든 의사결정입니다: 올바른 결정을 하거나 최소한 배우게 됩니다. - -주식 시장처럼 시뮬레이션된 환경을 상상해봅니다. 만약 규제시키면 어떤 일이 벌어질까요. 긍정적이거나 부정적인 영향을 주나요? 만약 부정적인 일이 생긴다면, 진로를 바꾸어, _negative reinforcement_ 을 배울 필요가 있습니다. 긍정적인 결과는, _positive reinforcement_ 로 만들 필요가 있습니다. - -![peter and the wolf](../images/peter.png) - -> Peter and his friends need to escape the hungry wolf! Image by [Jen Looper](https://twitter.com/jenlooper) - -## 지역 토픽: 피터와 늑대 (러시아) - -[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)는 러시아 작곡가 [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev)가 작성한 뮤지컬 동화입니다. 늑대를 쫓아내기 위해 용감하게 집 밖의 숲으로 떠나는, 젊은 개척가 피터의 이야기입니다. 이 섹션에서, Peter를 도와주기 위해서 머신러닝 알고리즘을 훈련해볼 예정입니다: - -- 주변 영역을 **탐색**하고 최적의 길을 안내하는 지도 만들기 -- 빨리 움직이기 위해서, 스케이트보드를 사용하고 밸런스잡는 방식을 **배우기** - -[![Peter and the Wolf](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 Peter and the Wolf by Prokofiev를 들으려면 이미지 클릭 - -## Reinforcement learning - -이전 섹션에서, 머신러닝 문제의 예시를 보았습니다: - -- **Supervised**, 해결하려는 문제에 대해서 예시 솔루션을 추천할 데이터셋이 있습니다. [Classification](../../4-Classification/translations/README.ko.md) 과 [regression](../../2-Regression/translations/README.ko.md)은 supervised learning 작업입니다. - -- **Unsupervised**, 라벨링된 훈련 데이터가 없습니다. unsupervised learning의 주요 예시는 [Clustering](../../5-Clustering/translations/README.ko.md)입니다. - -이 섹션에서, 라벨링된 훈련 데이터가 필요없는 학습 문제의 새로운 타입에 대하여 소개할 예정입니다. 여러 문제의 타입이 있습니다: - -- **[Semi-supervised learning](https://wikipedia.org/wiki/Semi-supervised_learning)**, 모델을 사전-훈련하며 사용할 수 있던 라벨링하지 않은 데이터를 많이 가지고 있습니다. -- **[Reinforcement learning](https://wikipedia.org/wiki/Reinforcement_learning)**, 에이전트는 시뮬레이션된 환경에서 실험해서 행동하는 방식을 학습합니다. - -### 예시 - 컴퓨터 게임 - -체스나, [Super Mario](https://wikipedia.org/wiki/Super_Mario) 같은, 게임 플레이를 컴퓨터에게 가르치고 싶다고 가정합니다. 컴퓨터가 게임을 플레이하려면, 게임 상태마다 어떻게 움직여야 되는지 예측할 필요가 있습니다. classification 문제처럼 보이겠지만, 아닙니다 - 상태와 일치하는 작업이 같이 있는 데이터셋은 없기 때문입니다. 기존 체스 경기 혹은 Super Mario를 즐기는 플레이어의 기록이 같은 소수의 데이터가 있을 수 있겠지만, 데이터가 가능한 상태의 충분히 많은 수를 커버할 수 없을 수 있습니다. - -기존 게임 데이터를 찾는 대신에, **Reinforcement Learning** (RL)은 매번 *making the computer play* 하고 결과를 지켜보는 아이디어가 기반됩니다. 그래서, Reinforcement Learning을 적용하면, 2가지가 필요합니다: - -- 게임을 계속 플레이할 수 있는 **환경**과 **시뮬레이터**. 시뮬레이터는 모든 게임 규칙의 가능한 상태와 동작을 정의합니다. - -- **Reward function**, 각자 움직이거나 게임이 진행되면서 얼마나 잘 했는지 알려줍니다. - -다른 타입의 머신러닝과 RL 사이에 다른 주요 포인트는 RL에서 일반적으로 게임을 끝내기 전에 이기거나 지는 것을 알 수 없다는 점입니다. 그래서, 특정 동작이 좋을지 나쁠지 말할 수 없습니다 - 오직 게임의 끝에서 보상을 받습니다. 그리고 목표는 불확실 조건에서 모델을 훈련할 알고리즘을 만드는 것입니다. **Q-learning**이라고 불리는 RL 알고리즘에 대하여 배울 예정입니다. - -## 강의 - -1. [Reinforcement learning과 Q-Learning 소개하기](../1-QLearning/translations/EADME.ko.md) -2. [헬스장 시뮬레이션 환경 사용하기](../2-Gym/translations/README.ko.md) - -## 크레딧 - -"Introduction to Reinforcement Learning" was written with ♥️ by [Dmitry Soshnikov](http://soshnikov.com) diff --git a/8-Reinforcement/translations/README.ru.md b/8-Reinforcement/translations/README.ru.md deleted file mode 100644 index 7c10a745..00000000 --- a/8-Reinforcement/translations/README.ru.md +++ /dev/null @@ -1,52 +0,0 @@ -# Введение в обучение с подкреплением -Обучение с подкреплением (Reinforcement learning, RL) рассматривается как одна из основных парадигм машинного обучения, наряду с обучением с учителем (supervised learning) и без учителя (unsupervised learning). RL - это все о принятии решений: принятии правильных решений или, по крайней мере, извлечении уроков из них. - -Представьте, что у вас есть смоделированная среда, такая как фондовый рынок. Что произойдет, если вы введете определенное правило. Имеет ли это положительный или отрицательный эффект? Если происходит что-то негативное, вам нужно принять это _негативное подкрепление_, извлечь из него урок и изменить направление. Если это положительный результат, вам нужно использовать это _положительное подкрепление_. - -![Петя и волк](../images/peter.png) - -> Пете и его друзьям нужно спастись от голодного волка! Автор изображения [Jen Looper](https://twitter.com/jenlooper) - -## Региональная тема: Петя и Волк (Россия) - -[Петя и Волк](https://ru.wikipedia.org/wiki/%D0%9F%D0%B5%D1%82%D1%8F_%D0%B8_%D0%B2%D0%BE%D0%BB%D0%BA) - музыкальная сказка русского композитора [Сергея Прокофьева](https://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%BA%D0%BE%D1%84%D1%8C%D0%B5%D0%B2,_%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B9_%D0%A1%D0%B5%D1%80%D0%B3%D0%B5%D0%B5%D0%B2%D0%B8%D1%87). Это история о юном пионере Пете, который смело выходит из своего дома на лесную поляну, чтобы преследовать волка. В этом разделе мы обучим алгоритмы машинного обучения, которые помогут Пете: - -- **Исследовать** окрестности и построить оптимальную навигационную карту. -- **Научиться** пользоваться скейтбордом и балансировать на нем, чтобы двигаться быстрее. - -[![Петя и Волк](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 Нажмите на изображение выше, чтобы послушать Петю и Волка Прокофьева - -## Обучение с подкреплением - -В предыдущих разделах вы видели два примера проблем машинного обучения: - -- **Обучение с учителем**, где у нас есть наборы данных, которые предлагают примеры решений проблемы, которую мы хотим решить. [Классификация](../../4-Classification/README.md) и [регрессия](../../2-Regression/README.md) - это задачи обучения с учителем. -- **Обучение без учителя**, в котором у нас нет размеченных данных для обучения. Основным примером обучения без учителя является [Кластеризация](../../5-Clustering/README.md). - -В этом разделе мы познакомим вас с новым типом задач, которые не требуют маркированных данных для обучения. Есть несколько типов таких проблем: - -- **[Обучение с частичным привлечением учителя](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D1%87%D0%B0%D1%81%D1%82%D0%B8%D1%87%D0%BD%D1%8B%D0%BC_%D0%BF%D1%80%D0%B8%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC_%D1%83%D1%87%D0%B8%D1%82%D0%B5%D0%BB%D1%8F)**, где у нас есть много немаркированных данных, которые можно использовать для предварительного обучения модели. -- **[Обучение с подкреплением](https://ru.wikipedia.org/wiki/%D0%9E%D0%B1%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81_%D0%BF%D0%BE%D0%B4%D0%BA%D1%80%D0%B5%D0%BF%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC)**, в котором агент учится вести себя, проводя эксперименты в некоторой моделируемой среде. - -### Пример - компьютерная игра - -Предположим, вы хотите научить компьютер играть в игру, например, в шахматы или [Супер Марио](https://ru.wikipedia.org/wiki/Super_Mario_(%D1%81%D0%B5%D1%80%D0%B8%D1%8F_%D0%B8%D0%B3%D1%80)). Чтобы компьютер мог играть в игру, нам нужно, чтобы он предсказывал, какой ход сделать в каждом из игровых состояний. Хотя это может показаться проблемой классификации, это не так - потому что у нас нет набора данных с состояниями и соответствующими действиями. Хотя у нас могут быть некоторые данные, такие как существующие шахматные матчи или записи игроков, играющих в Супер Марио, скорее всего, что эти данные не будут в достаточной степени охватывать достаточно большое количество возможных состояний. - -Вместо поиска существующих игровых данных **Обучение с подкреплением** (RL) основано на идее *заставить компьютер играть* много раз и наблюдать за результатом. Таким образом, чтобы применить обучение с подкреплением, нам нужны две вещи: - -- **Среда** и **симулятор**, которые позволяют нам играть в игру много раз. Этот симулятор будет определять все правила игры, а также возможные состояния и действия. - -- **Функция вознаграждения**, которая сообщит нам, насколько хорошо мы сделали отдельный ход или прошли всю игру. - -Основное различие между другими типами машинного обучения и RL заключается в том, что в RL мы обычно не знаем, выиграем мы или проиграем, пока не закончим игру. Таким образом, мы не можем сказать, является ли отдельно взятый ход хорошим или нет - мы получаем награду только в конце игры. И наша цель - разработать алгоритмы, которые позволят нам обучать модель в неопределенных условиях. Мы познакомимся с одним алгоритмом RL под названием **Q-Learning**. - -## Уроки - -1. [Введение в обучение с подкреплением и Q-Learning](../1-QLearning/README.md) -2. [Использование тренажерного зала](../2-Gym/README.md) - -## Благодарности - -«Введение в обучение с подкреплением» написано с ♥ ️[Дмитрием Сошниковым](https://soshnikov.com) diff --git a/8-Reinforcement/translations/README.tr.md b/8-Reinforcement/translations/README.tr.md deleted file mode 100644 index 52458105..00000000 --- a/8-Reinforcement/translations/README.tr.md +++ /dev/null @@ -1,52 +0,0 @@ -# Pekiştirmeli Öğrenmeye Giriş - -Pekiştirmeli öğrenme (reinforcement learning), RL, denetimli öğrenme ve denetimsiz öğrenme gibi temel makine öğrenmesi paradigmalarından biri olarak görülüyor. RL tamamen kararlar ile ilgilidir: doğru kararları verebilmek veya en azından onlardan öğrenmektir. - -Simüle edilmiş bir ortamınız olduğunu hayal edin, borsa gibi. Belirli bir düzenlemeyi(regülasyon) uygularsanız ne olur? Pozitif mi negatif mi etki eder? Eğer negatif etki ettiyse bunu _negative reinforcement_ olarak almalı, bundan birşeyler öğrenmeli ve rotanızı buna göre değiştirmelisiniz. Eğer pozitif bir sonuç elde ederseniz, _positive reinforcement_ olarak bunun üzerine birşeyler inşa etmelisiniz. - -![peter and the wolf](../images/peter.png) - -> Peter ve arkadaşı aç kurttan kaçmalı! Image by [Jen Looper](https://twitter.com/jenlooper) -## Bölgesel Konu: Peter ve Kurt (Rusya) - -[Peter ve Kurt](https://en.wikipedia.org/wiki/Peter_and_the_Wolf), Rus bir besteci[Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) tarafından yazılmış bir müzikal peri masalıdır. Kurdu kovalamak için evinden cesurca ormana giden genç Peter hakkında bir hikaye. Bu bölümde Peter'a yardımcı olacak makine öğrenmesi algoritmaları eğiteceğiz: - -- Çevredeki alanı **keşfedin** ve yol gösterici harita oluşturun. -- Daha hızlı hareket etmek için kaykay kullanmayı ve üzerinde dengede durmayı **öğrenin**. - -[![Peter and the Wolf](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 Prokofiev'in Peter ve Kurt şarkısını dinlemek için yukarıdaki resme tıklayın. -## Pekiştirmeli Öğrenme - -Bir önceki bölümde, iki çeşit makine öğrenmesi problemi örneğini gördünüz: - -- **Denetimli**, çözmek istediğimiz soruna örnek çözümler öneren veri kümelerimiz var. [Sınıflandırma(Classification)](../../4-Classification/README.md) ve [regresyon(regression)](../2-Regression/README.md) denetimli öğrenme görevlerindendir. -- **Denetimsiz**, etiketli eğitim verisine sahip değiliz. Denetimsiz öğrenmenin başlıca örneği [kümelemedir(Clustering)](../../5-Clustering/README.md). - -Bu bölümde, etiketlenmiş eğitim verileri ihtiyaç duymayan yeni bir öğrenme problemi türünü size tanıtacağız. Bu tür problemlerin birkaç türü vardır: - -- **[Yarı-denetimli öğrenme](https://wikipedia.org/wiki/Semi-supervised_learning)**, modeli önceden eğitmek için kullanılabilecek çok sayıda etiketlenmemiş veriye sahip olduğumuz yer. -- **[Pekiştirmeli öğrenme](https://wikipedia.org/wiki/Reinforcement_learning)**, bir ajanın(agent, öğrenme işini yapacak olan), simüle edilmiş bir ortamda denemeler yaparak nasıl davranacağını öğrendiği. - -### Örnek - bilgisayar oyunu - -Bir bilgisayara satranç gibi bir oyun oynamayı öğretmek istediğinizi varsayalım, veya [Super Mario](https://wikipedia.org/wiki/Super_Mario). -Bir bilgisayarın bir oyunu oynaması için, oyun durumlarının her birinde hangi hamleyi yapacağını tahmin etmemiz gerekir. Bu bir sınıflandırma problemi gibi görünse de, değil - çünkü bu durumları ve karşılık gelen aksiyonları içeren bir veri kümemiz yok. Mevcut satranç maçları veya Super Mario oynayan oyuncuların kayıtları gibi bazı verilere sahip olabiliriz, bu verilerin yeterince büyük sayıda olmaması veya olası durumları yeterince kapsamaması muhtemeldir. - -**Pekiştirmeli öğrenme** (RL) mevcut oyun verilerini aramak yerine, *bilgisayarın defalarca oynamasını sağlama* ve sonucu gözlemleme fikrine dayanır. Bu nedenle **pekiştirmeli öğrenmeyi** uygulamak için iki şeye ihtiyacımız var: - -- **Bir ortam** ve **bir similatör** birçok kez oyun oynamamıza imkan verecektir. Bu simülatör, olası tüm durumlar ve tüm eylemlerin yanı sıra tüm oyun kurallarını tanımlayacaktır. - -- **Bir ödül fonksiyonu**, bu bize her harekette veya oyunda ne kadar iyi ilerlediğimizi söyleyecektir. - -Diğer makine öğrenimi türleri ile RL arasındaki temel fark, RL'de oyunu bitirene kadar kazanıp kazanmadığımızı genellikle bilemememizdir. Bu nedenle, belirli bir hareketin tek başına iyi olup olmadığını söyleyemeyiz - sadece oyunun sonunda bir ödül alırız. Ve hedefimiz ise belirsiz koşullar altında bir modeli eğitmemizi sağlayacak algoritmalar tasarlamak. **Q-learning** adında ki bir RL algoritmasını öğreneceğiz. - -## Dersler - -1. [Introduction to reinforcement learning and Q-Learning](../1-QLearning/README.md) -2. [Using a gym simulation environment](../2-Gym/README.md) - -## Katkıda bulunanlar - - "Pekiştirmeli Öğrenmeye Giriş" ♥️ [Dmitry Soshnikov](http://soshnikov.com) tarafından yazıldı. diff --git a/8-Reinforcement/translations/README.zh-cn.md b/8-Reinforcement/translations/README.zh-cn.md deleted file mode 100644 index 28973b2a..00000000 --- a/8-Reinforcement/translations/README.zh-cn.md +++ /dev/null @@ -1,53 +0,0 @@ -# 强化学习简介 - -强化学习 (RL, Reinforcement Learning),是基本的机器学习范式之一(仅次于监督学习 (Supervised Learning) 和无监督学习(Unsupervised Learning))。强化学习和「策略」息息相关:它应当产生正确的策略,或从错误的策略中学习。 - -假设有一个模拟环境,比如说股市。当我们用某一个规则来限制这个市场时,会发生什么?这个规则(或者说策略)有积极或消极的影响吗?如果它的影响是正面的,我们需要从这种_负面强化_中学习,改变我们的策略。如果它的影响是正面的,我们需要在这种_积极强化_的基础上再进一步发展。 - -![彼得和狼](../images/peter.png) - -> 彼得和他的朋友们得从饥饿的狼这儿逃掉!图片来自 [Jen Looper](https://twitter.com/jenlooper) - -## 本节主题:彼得与狼(俄罗斯) - -[彼得与狼](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) 是俄罗斯作曲家[谢尔盖·普罗科菲耶夫](https://en.wikipedia.org/wiki/Sergei_Prokofiev)创作的音乐童话。它讲述了彼得勇敢地走出家门,到森林中央追逐狼的故事。在本节中,我们将训练帮助彼得追狼的机器学习算法: - -- **探索**周边区域并构建最佳地图 -- **学习**如何使用滑板并在滑板上保持平衡,以便更快地移动。 - -[![彼得和狼](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 点击上面的图片,听普罗科菲耶夫的《彼得与狼》 - -## 强化学习 - -在前面的部分中,您已经看到了两类机器学习问题的例子: - -- **监督**,在有已经标记的,暗含解决方案的数据集的情况下。 [分类](../../4-Classification/translations/README.zh-cn.md) 和 [回归](../../2-Regression/translations/README.zh-cn.md) 是监督学习任务。 -- **无监督**,在我们没有标记训练数据集的情况下。无监督学习的主要例子是 [聚类](../../5-Clustering/translations/README.zh-cn.md)。 - -在本节中,我们将学习一类新的机器学习问题,它不需要已经标记的训练数据 —— 比如这两类问题: - -- **[半监督学习](https://wikipedia.org/wiki/Semi-supervised_learning)**,在我们有很多未标记的、可以用来预训练模型的数据的情况下。 -- **[强化学习](https://wikipedia.org/wiki/Reinforcement_learning)**,在这种方法中,机器通过在某种模拟环境中进行实验来学习最佳策略。 - -### 示例 - 电脑游戏 - -假设我们要教会计算机玩某一款游戏 —— 例如国际象棋,或者 [超级马里奥](https://wikipedia.org/wiki/Super_Mario)。为了让计算机学会玩游戏,我们需要它预测在每个游戏「状态」下,它应该做什么「操作」。虽然这看起来像是一个分类问题,但事实并非如此,因为我们并没有像这样的,包含「状态」和状态对应的「操作」的数据集。我们只有一些有限的数据,比如来自国际象棋比赛的记录,或者是玩家玩超级马里奥的记录。这些数据可能无法涵盖足够多的「状态」。 - -不同于这种需要大量现有的数据的方法,**强化学习**是基于*让计算机多次玩*并观察玩的结果的想法。因此,要使用强化学习方法,我们需要两个要素: - -- **环境**和**模拟器**,它们允许我们多次玩游戏。该模拟器应该定义所有游戏规则,以及可能的状态和动作。 - -- **奖励函数**,它会告诉我们每个每一步(或者每局游戏)的表现如何。 - -其他类型的机器学习和强化学习 (RL) 之间的主要区别在于,在 RL 中,我们通常在完成游戏之前,都不知道我们是赢还是输。因此,我们不能说单独的某个动作是不是「好」的 - 我们只会在游戏结束时获得奖励。我们的目标是设计算法,使我们能够在这种不确定的条件下训练模型。我们将了解一种称为 **Q-learning** 的 RL 算法。 - -## 课程 - -1. [强化学习和 Q-Learning 介绍](1-QLearning/README.md) -2. [使用 Gym 模拟环境](2-Gym/README.md) - -## 本文作者 - -“强化学习简介” 由 [Dmitry Soshnikov](http://soshnikov.com) 用 ♥️ 编写 diff --git a/9-Real-World/1-Applications/translations/README.it.md b/9-Real-World/1-Applications/translations/README.it.md deleted file mode 100644 index a71f035f..00000000 --- a/9-Real-World/1-Applications/translations/README.it.md +++ /dev/null @@ -1,162 +0,0 @@ -# Poscritto: Machine learning nel mondo reale - -![Riepilogo di machine learning nel mondo reale in uno sketchnote](../../../sketchnotes/ml-realworld.png) -> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -In questo programma di studi si sono appresi molti modi per preparare i dati per l'addestramento e creare modelli di machine learning. Sono stati creati una serie di modelli classici di regressione, clustering, classificazione, elaborazione del linguaggio naturale e serie temporali. Congratulazioni! Ora, se ci si sta chiedendo a cosa serva tutto questo... quali sono le applicazioni del mondo reale per questi modelli? - -Sebbene l'intelligenza artificiale abbia suscitato molto interesse nell'industria, che di solito sfrutta il deep learning, esistono ancora preziose applicazioni per i modelli classici di machine learning. Si potrebbero anche usare alcune di queste applicazioni oggi! In questa lezione, si esplorerà come otto diversi settori e campi relativi all'argomento utilizzano questi tipi di modelli per rendere le loro applicazioni più performanti, affidabili, intelligenti e preziose per gli utenti. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/?loc=it) - -## Finanza - -Il settore finanziario offre molte opportunità per machine learning. Molti problemi in quest'area si prestano ad essere modellati e risolti utilizzando machine learning. - -### Rilevamento frodi con carta di credito - -Si è appreso del [clustering k-means](../../../5-Clustering/2-K-Means/translations/README.it.md) in precedenza nel corso, ma come può essere utilizzato per risolvere i problemi relativi alle frodi con carta di credito? - -Il clustering K-means è utile con una tecnica di rilevamento delle frodi con carta di credito chiamata **rilevamento dei valori anomali**. I valori anomali, o le deviazioni nelle osservazioni su un insieme di dati, possono svelare se una carta di credito viene utilizzata normalmente o se sta succedendo qualcosa di insolito. Come mostrato nel documento collegato di seguito, è possibile ordinare i dati della carta di credito utilizzando un algoritmo di clustering k-means e assegnare ogni transazione a un cluster in base a quanto sembra essere un valore anomalo. Quindi, si possono valutare i cluster più rischiosi per le transazioni fraudolente rispetto a quelle legittime. - -https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf - -### Gestione patrimoniale - -Nella gestione patrimoniale, un individuo o un'impresa gestisce gli investimenti per conto dei propri clienti. Il loro compito è sostenere e far crescere la ricchezza a lungo termine, quindi è essenziale scegliere investimenti che funzionino bene. - -Un modo per valutare le prestazioni di un particolare investimento è attraverso la regressione statistica. La[regressione lineare](../../../2-Regression/1-Tools/translations/README.it.md) è uno strumento prezioso per capire come si comporta un fondo rispetto a un benchmark. Si può anche dedurre se i risultati della regressione sono statisticamente significativi o quanto influenzerebbero gli investimenti di un cliente. Si potrebbe anche espandere ulteriormente la propria analisi utilizzando la regressione multipla, in cui è possibile prendere in considerazione ulteriori fattori di rischio. Per un esempio di come funzionerebbe per un fondo specifico, consultare il documento di seguito sulla valutazione delle prestazioni del fondo utilizzando la regressione. - -http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/ - -## Istruzione - -Anche il settore educativo è un'area molto interessante in cui si può applicare machine learning. Ci sono problemi interessanti da affrontare come rilevare l'imbroglio nei test o nei saggi o gestire i pregiudizi nel processo di correzione, non intenzionali o meno. - -### Prevedere il comportamento degli studenti - -[Coursera](https://coursera.com), un fornitore di corsi aperti online, ha un fantastico blog di tecnologia in cui discutono molte decisioni ingegneristiche. In questo caso di studio, hanno tracciato una linea di regressione per cercare di esplorare qualsiasi correlazione tra un punteggio NPS (Net Promoter Score) basso e il mantenimento o l'abbandono del corso. - -https://medium.com/coursera-engineering/regressione-controllata-quantificare-l'impatto-della-qualità-del-corso-sulla-ritenzione-dell'allievo-31f956bd592a - -### Mitigare i pregiudizi - -[Grammarly](https://grammarly.com), un assistente di scrittura che controlla gli errori di ortografia e grammatica, utilizza sofisticati [sistemi di elaborazione del linguaggio naturale](../../../6-NLP/translations/README.it.md) in tutti i suoi prodotti. Hanno pubblicato un interessante caso di studio nel loro blog tecnologico su come hanno affrontato il pregiudizio di genere nell'apprendimento automatico, di cui si si è appreso nella [lezione introduttiva sull'equità](../../../1-Introduction/3-fairness/translations/README.it.md). - -https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/ - -## Vendita al dettaglio - -Il settore della vendita al dettaglio può sicuramente trarre vantaggio dall'uso di machine learning, dalla creazione di un percorso migliore per il cliente allo stoccaggio dell'inventario in modo ottimale. - -### Personalizzare il percorso del cliente - -In Wayfair, un'azienda che vende articoli per la casa come i mobili, aiutare i clienti a trovare i prodotti giusti per i loro gusti e le loro esigenze è fondamentale. In questo articolo, gli ingegneri dell'azienda descrivono come utilizzano ML e NLP per "far emergere i risultati giusti per i clienti". In particolare, il loro motore di intento di ricerca è stato creato per utilizzare l'estrazione di entità, l'addestramento di classificatori, l'estrazione di risorse e opinioni e l'etichettatura del sentimento sulle recensioni dei clienti. Questo è un classico caso d'uso di come funziona NLP nella vendita al dettaglio online. - -https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search - -### Gestione dell’inventario - -Aziende innovative e agili come [StitchFix](https://stitchfix.com), un servizio che spedisce abbigliamento ai consumatori, si affidano molto al machine learning per consigli e gestione dell'inventario. I loro team di stilisti lavorano insieme ai loro team di merchandising, infatti: "uno dei nostri data scientist ha armeggiato con un algoritmo genetico e lo ha applicato all'abbigliamento per prevedere quale sarebbe un capo di abbigliamento di successo che oggi non esiste. L'abbiamo portato al team del merchandising e ora possono usarlo come strumento". - -https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/ - -## Assistenza sanitaria - -Il settore sanitario può sfruttare il machine learning per ottimizzare le attività di ricerca e anche problemi logistici come la riammissione dei pazienti o l'arresto della diffusione delle malattie. - -### Gestione delle sperimentazioni cliniche - -La tossicità negli studi clinici è una delle principali preoccupazioni per i produttori di farmaci. Quanta tossicità è tollerabile? In questo studio, l'analisi di vari metodi di sperimentazione clinica ha portato allo sviluppo di un nuovo approccio per prevedere le probabilità dei risultati della sperimentazione clinica. Nello specifico, sono stati in grado di usare random forest per produrre un [classificatore](../../../4-Classification/translations/README.it.md) in grado di distinguere tra gruppi di farmaci. - -https://www.sciencedirect.com/science/article/pii/S2451945616302914 - -### Gestione della riammissione ospedaliera - -Le cure ospedaliere sono costose, soprattutto quando i pazienti devono essere ricoverati di nuovo. Questo documento discute un'azienda che utilizza il machine learning per prevedere il potenziale di riammissione utilizzando algoritmi di [clustering](../../../5-Clustering/translations/README.it.md). Questi cluster aiutano gli analisti a "scoprire gruppi di riammissioni che possono condividere una causa comune". - -https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning - -### Gestione della malattia - -La recente pandemia ha messo in luce i modi in cui machine learning può aiutare a fermare la diffusione della malattia. In questo articolo, si riconoscerà l'uso di ARIMA, curve logistiche, regressione lineare e SARIMA. "Questo lavoro è un tentativo di calcolare il tasso di diffusione di questo virus e quindi di prevedere morti, guarigioni e casi confermati, in modo che possa aiutare a prepararci meglio e sopravvivere". - -https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/ - -## 🌲 Ecologia e Green Tech - -Natura ed ecologia sono costituiti da molti sistemi sensibili in cui l'interazione tra animali e natura viene messa a fuoco. È importante essere in grado di misurare accuratamente questi sistemi e agire in modo appropriato se accade qualcosa, come un incendio boschivo o un calo della popolazione animale. - -### Gestione delle foreste - -Si è appreso il [Reinforcement Learning](../../../8-Reinforcement/translations/README.it.md) nelle lezioni precedenti. Può essere molto utile quando si cerca di prevedere i modelli in natura. In particolare, può essere utilizzato per monitorare problemi ecologici come gli incendi boschivi e la diffusione di specie invasive. In Canada, un gruppo di ricercatori ha utilizzato Reinforcement Learning per costruire modelli di dinamica degli incendi boschivi da immagini satellitari. Utilizzando un innovativo "processo di diffusione spaziale (SSP)", hanno immaginato un incendio boschivo come "l'agente in qualsiasi cellula del paesaggio". "L'insieme di azioni che l'incendio può intraprendere da un luogo in qualsiasi momento include la diffusione a nord, sud, est o ovest o la mancata diffusione. - -Questo approccio inverte la solita configurazione RL poiché la dinamica del corrispondente Processo Decisionale di Markov (MDP) è una funzione nota per la diffusione immediata degli incendi". Maggiori informazioni sugli algoritmi classici utilizzati da questo gruppo al link sottostante. - -https://www.frontiersin.org/articles/10.3389/fneur.2018.00006/pieno - -### Rilevamento del movimento degli animali - -Mentre il deep learning ha creato una rivoluzione nel tracciamento visivo dei movimenti degli animali (qui si può costruire il proprio [localizzatore di orsi polari](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) ), il machine learning classico ha ancora un posto in questo compito. - -I sensori per tracciare i movimenti degli animali da fattoria e l'internet delle cose fanno uso di questo tipo di elaborazione visiva, ma tecniche di machine learning di base sono utili per preelaborare i dati. Ad esempio, in questo documento, le posture delle pecore sono state monitorate e analizzate utilizzando vari algoritmi di classificazione. Si potrebbe riconoscere la curva ROC a pagina 335. - -https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf - -### Gestione energetica - -Nelle lezioni sulla [previsione delle serie temporali](../../../7-TimeSeries/translations/README.it.md), si è invocato il concetto di parchimetri intelligenti per generare entrate per una città in base alla comprensione della domanda e dell'offerta. Questo articolo discute in dettaglio come il raggruppamento, la regressione e la previsione delle serie temporali si sono combinati per aiutare a prevedere il futuro uso di energia in Irlanda, sulla base della misurazione intelligente. - -https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf - -## Assicurazione - -Il settore assicurativo è un altro settore che utilizza machine learning per costruire e ottimizzare modelli finanziari e attuariali sostenibili. - -### Gestione della volatilità - -MetLife, un fornitore di assicurazioni sulla vita, è disponibile con il modo in cui analizzano e mitigano la volatilità nei loro modelli finanziari. In questo articolo si noteranno le visualizzazioni di classificazione binaria e ordinale. Si scopriranno anche visualizzazioni di previsione. - -https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf - -## 🎨 Arte, cultura e letteratura - -Nelle arti, per esempio nel giornalismo, ci sono molti problemi interessanti. Rilevare notizie false è un problema enorme poiché è stato dimostrato che influenza l'opinione delle persone e persino che fa cadere le democrazie. I musei possono anche trarre vantaggio dall'utilizzo di machine learning in tutto, dalla ricerca di collegamenti tra gli artefatti alla pianificazione delle risorse. - -### Rilevamento di notizie false - -Rilevare notizie false è diventato un gioco del gatto e del topo nei media di oggi. In questo articolo, i ricercatori suggeriscono che un sistema che combina diverse delle tecniche ML qui studiate può essere testato e il miglior modello implementato: "Questo sistema si basa sull'elaborazione del linguaggio naturale per estrarre funzionalità dai dati e quindi queste funzionalità vengono utilizzate per l'addestramento di classificatori di machine learning come Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) e Logistic Regression (LR)." - -https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf - -Questo articolo mostra come la combinazione di diversi campi ML possa produrre risultati interessanti in grado di aiutare a impedire che le notizie false si diffondano e creino danni reali; in questo caso, l'impulso è stato la diffusione di voci su trattamenti COVID che incitavano alla violenza di massa. - -### ML per Musei - -I musei sono all'apice di una rivoluzione dell'intelligenza artificiale in cui catalogare e digitalizzare le collezioni e trovare collegamenti tra i manufatti sta diventando più facile con l'avanzare della tecnologia. Progetti come [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) stanno aiutando a svelare i misteri di collezioni inaccessibili come gli Archivi Vaticani. Ma anche l'aspetto commerciale dei musei beneficia dei modelli di machine learning. - -Ad esempio, l'Art Institute di Chicago ha costruito modelli per prevedere a cosa è interessato il pubblico e quando parteciperà alle esposizioni. L'obiettivo è creare esperienze di visita personalizzate e ottimizzate ogni volta che l'utente visita il museo. "Durante l'anno fiscale 2017, il modello ha previsto presenze e ammissioni entro l'1% di scostamento, afferma Andrew Simnick, vicepresidente senior dell'Art Institute". - -https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices - -## Marketing - -### Segmentazione della clientela - -Le strategie di marketing più efficaci si rivolgono ai clienti in modi diversi in base a vari raggruppamenti. In questo articolo vengono discussi gli usi degli algoritmi di Clustering per supportare il marketing differenziato. Il marketing differenziato aiuta le aziende a migliorare il riconoscimento del marchio, raggiungere più clienti e guadagnare di più. - -https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/ - -## 🚀 Sfida - -Identificare un altro settore che beneficia di alcune delle tecniche apprese in questo programma di studi e scoprire come utilizza il machine learning. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/?loc=it) - -## Revisione e Auto Apprendimento - -Il team di data science di Wayfair ha diversi video interessanti su come usano il machine learning nella loro azienda. Vale la pena [dare un'occhiata](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! - -## Compito - -[Una caccia al tesoro per ML](assignment.it.md) diff --git a/9-Real-World/1-Applications/translations/README.ko.md b/9-Real-World/1-Applications/translations/README.ko.md deleted file mode 100644 index 24d0fed0..00000000 --- a/9-Real-World/1-Applications/translations/README.ko.md +++ /dev/null @@ -1,163 +0,0 @@ -# 추신: 현실의 머신러닝 - - -![Summary of machine learning in the real world in a sketchnote](../../../sketchnotes/ml-realworld.png) -> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) - -이 커리큘럼에서, 훈련하기 위한 데이터를 준비하고 머신러닝 모델으로 만드는 다양한 방식을 배웠습니다. 일렬의 classic regression, clustering, classification, natural language processing과, time series 모델을 만들었습니다. 축하드립니다! 지금부터, 모두 어떤 것을 고려했는지 궁금할 수 있습니다... 이 모델로 어떤 현실 어플리케이션을 만들었나요? - -보통 딥러닝을 활용하는, AI로 산업에 많은 관심이 모이지만, 여전히 classical 머신러닝 모델의 가치있는 애플리케이션도 존재합니다. 오늘 이 애플리케이션 일부를 사용할 수도 있습니다! 이 강의에서, 8개 다양한 산업과 subject-matter 도메인에서 이 모델 타입으로 애플리케이션의 성능, 신뢰, 지능과, 사용자 가치를 어떻게 더 높일지 탐색할 예정입니다. - -## [강의 전 퀴즈](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) - -## 💰 금융 - -금융 섹터는 머신러닝을 위해 많은 기회를 제공합니다. 이 영역의 많은 문제는 ML로 모델링하고 풀면서 할 수 있습니다. - -### 신용카드 사기 감지 - -코스 초반에 [k-means clustering](../../../5-Clustering/2-K-Means/README.md)에 대하여 배웠지만, 신용카드 사기와 관련된 문제를 풀려면 어떻게 사용할 수 있을까요? - -K-means clustering은 **outlier detection**이라고 불리는 신용카드 사기 탐지 기술 중에 능숙합니다. 데이터셋에 대한 관찰의 아웃라이어 또는, 표준 편차는, 신용카드가 일반적인 수용량으로 사용되거나 평범하지 않은 일이 일어나는지 알려줄 수 있습니다. 다음 링크된 논문에서 본 것처럼, k-means clustering 알고리즘으로 신용카드를 정렬하고 아웃라이어가 얼마나 나오는지 기반해서 트랜잭션을 클러스터에 할당할 수 있습니다. 그러면, 합법적인 트랜잭션과 대비해서 사기 행위인 위험한 클러스터를 평가할 수 있습니다. - -https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf - -### 재산 관리 - -재산 관리에서, 개인 혹은 공사는 클라이언트를 대신해서 투자합니다. 이 일은 오래 재산을 유지하고 증식시키기 위해서, 효율이 나는 투자를 선택하는 게 필수적입니다. - -투자 효율을 평가하는 방식 중 하나는 statistical regression을 통하는 것입니다. [Linear regression](../../../2-Regression/1-Tools/README.md)은 일부 벤치마크와 비교해서 펀드 효율을 이해하는데 가치있는 도구입니다. 또한 regression의 결과가 통게적으로 의미가 있는지, 클라이언트의 투자에 영향을 받을지 따질 수 있습니다. 추가적인 리스크를 고려할 수 있을 때, multiple regression으로 분석을 더욱 더 확장할 수 있습니다. 특정 펀드가 어덯게 동작하는지에 대한 예시로, regression으로 펀드 효율을 평가하는 다음 논문을 확인합니다. - -http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/ - -## 🎓 교육 - -교육 섹터도 ML이 적용되었을 때 매우 흥미롭습니다. 테스트나 에세이에서 치팅을 감지하거나 의도와 상관없는 편견을 정정하는 프로세스 관리처럼, 다루어야 할 흥미로운 문제입니다. - -### 학생 행동 예측 - -[Coursera](https://coursera.com)라는, 온라인 오픈코스 제공자는, 많은 엔지니어링 결정을 논의하는 훌륭한 기술 블로그입니다. 이 연구 케이스에서, 낮은 NPS (Net Promoter Score) 점수와 코스를 유지하거나 하차하는 사이의 모든 상관 관계를 탐색하려는 regression 라인을 plot합니다. - -https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a - -### 편견 완화 - -[Grammarly](https://grammarly.com)는, 맞춤법과 문법 오류를 확인하고, 프로덕트 전반적으로 복잡한 [natural language processing systems](../../../6-NLP/README.md)으로, 작문을 돕습니다. [introductory fairness lesson](../../../1-Introduction/3-fairness/README.md)에서 배운, 머신러닝의 gender bias를 다루는 방식을 기술 블로그에 흥미로운 케이스 스터디로 배포했습니다. - -https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/ - -## 👜 리테일 - -리테일 섹터는 더 좋은 고객 기록을 만들고 최적의 방식으로 재고를 모으는 모든 것에 대하여, ML로 명확하게 이익을 낼 수 있습니다. - -### 고객 기록 개인화 - -가구같은 가정용품을 파는 회사인, Wayfair에서는, 고객이 취향과 니즈에 맞는 제품을 찾도록 돕는 게 최고입니다. 이 아티클에서, 회사의 엔지니어들은 ML과 NLP로 "surface the right results for customers"하는 방식을 설명합니다. 특히나, Query Intent 엔진은 엔티티 추출, classifier 훈련, 자산과 의견 추출, 그리고 고객 리뷰에서 감정 태그까지 사용하도록 만들어졌습니다. 온라인 리테일에서 NLP가 어떻게 작동하는가에 대한 고전적인 사용 방식입니다. - -https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search - -### 재고 관리 - -소비자에게 의상을 배달해주는 박스 서비스인, [StitchFix](https://stitchfix.com)처럼 혁신적이고, 재빠른 회사는, 추천과 재고 관리를 ML에 많이 의존합니다. styling 팀은 merchandising 팀과 같이 일합니다, 사실은 이렇습니다: "one of our data scientists tinkered with a genetic algorithm and applied it to apparel to predict what would be a successful piece of clothing that doesn't exist today. We brought that to the merchandise team and now they can use that as a tool." - -https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/ - -## 🏥 의료 - -의료 섹션은 ML을 활용해서 연구 작업과 재입원 환자 또는 질병 확산 방지처럼 logistic 문제를 최적화할 수 있습니다. - -### 임상실험 관리 - -임상 실험에서 독성은 제약사의 주요 관심사입니다. 알미니 많은 독성을 참을 수 있을까요? 연구에서는, 다양한 임상 시도 방식을 분석해서 임상 시도 결과의 확률을 예측하는 새로운 접근 방식이 개발되었습니다. 특히나, random forest로 약물 그룹 사이에서 식별할 수 있는 [classifier](../../../4-Classification/README.md)도 만들 수 있었습니다. - -https://www.sciencedirect.com/science/article/pii/S2451945616302914 - -### 병원 재입원 관리 - -병원 치료는 특히나, 환자가 다시 입원해야 될 때 손실이 큽니다. 이 논문은 [clustering](../../../5-Clustering/README.md) 알고리즘으로 다시 입원할 가능성을 예측하는 ML로 사용하고 있는 회사를 설명합니다. 이 클러스터는 분석가가 "discover groups of readmissions that may share a common cause"하는 것이 도움됩니다. - -https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning - -### 질병 관리 - -최근 팬데믹은 머신러닝이 질병 확산을 막을 수 있게 도와주는 방식에서 희망찬 미래를 보여주었습니다. 이 아티클에서, ARIMA, ARIMA, logistic curves, linear regression과, SARIMA의 사용법을 알게 됩니다. "This work is an attempt to calculate the rate of spread of this virus and thus to predict the deaths, recoveries, and confirmed cases, so that it may help us to prepare better and survive." - -https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/ - -## 🌲 생태학과 환경 기술 - -자연과 생태학은 동물과 자연 사이의 상호 작용으로 초점을 맞추어진 많이 민감한 시스템으로 이루어져 있습니다. 이 시스템을 정확히 측정하고 산불이 나거나 동물 개체군이 줄어드는 것처럼, 일이 생기면 적절하게 행동하는 게 중요합니다. - -### 숲 관리 - -이전 강의에서 [Reinforcement Learning](../../../8-Reinforcement/README.md)에 대하여 배웠습니다. 자연에서 패턴을 예측 시도하면 매우 유용할 수 있습니다. 특히나, 산불이 나고 외래종의 확산처럼 생태학적 문제를 추적할 때 사용할 수 있습니다. Canada에서, 연구원 그룹은 Reinforcement Learning으로 위성 이미지에서 산불 역학 모델을 만들었습니다. 혁신적인 "spatially spreading process (SSP)"을 사용해서, "the agent at any cell in the landscape."로 산불을 상상했습니다. "The set of actions the fire can take from a location at any point in time includes spreading north, south, east, or west or not spreading. - -This approach inverts the usual RL setup since the dynamics of the corresponding Markov Decision Process (MDP) is a known function for immediate wildfire spread." 다음 링크에서 그룹이 사용했던 classic 알고리즘에 대하여 더 읽어봅니다. - -https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full - -### 동물의 움직임 감지 - -딥러닝이 동물 움직임을 시각적으로-추적하려고 혁신적으로 만들었지만 (여기에 [polar bear tracker](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott)를 만들 수 있습니다), classic ML은 여전히 이 작업에서 자리를 차지하고 있습니다. - -농장 동물의 움직임을 추적하는 센서와 이 비주얼 프로세싱 타입을 사용하는 IoT도 있지만, 더 기본적인 ML 기술은 데이터를 전처리할 때 유용합니다. 예시로, 논문에서, 다양한 classifier 알고리즘으로 양의 상태를 모니터링하고 분석했습니다. 335 페이지에서 ROC curve를 알게 될 수 있습니다. - -https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf - -### ⚡️ 에너지 관리 - -[time series forecasting](../../../7-TimeSeries/README.md)의 강의에서, 수요와 공급의 이해를 기반해서 마을 수익을 발생시키기 위한 smart parking meter의 컨셉을 불렀습니다. 이 아티클에서 clustering, regression과 time series forecasting이 합쳐진, smart metering을 기반으로, Ireland의 미래 애너지 사용량 예측을 어떻게 도와줄 수 있는지 자세히 이야기 합니다. - -https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf - -## 💼 보험 - -보험 섹터는 ML로 수행 가능한 재무와 보험계리학 모델을 구성하고 최적화하는 또 다른 섹터입니다. - -### 변동성 관리 - -생명 보험 제공자인, MetLife는, 재무 모델에서 변동성을 분석하고 완화하는 방식을 곧 보입니다. 이 아티클에서 binary와 ordinal classification 시각화를 파악할 수 있습니다. 또한 예측 시각화도 찾을 수 있습니다. - -https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf - -## 🎨 예술, 문화, 그리고 문학 - -예술에서, 저널리즘을 예시로 들자면, 많이 흥미로운 문제입니다. 가짜 뉴스를 감지하는 것은 사람들의 여론과 관계가 있고 민주주의를 흔든다고 입증되었기 때문에 큰 문제입니다. 박물관도 유물 사이 연결고리를 찾는 것부터 자원 관리까지 모든 것에 ML로 이익을 낼 수 있습니다. - -### 가짜 뉴스 감지 - -가짜 뉴스를 감지하는 것은 오늘의 미디어에서 고양이와 쥐의 게임으로 되어있습니다. 이 아티클에서, 원구원들은 연구했던 여러 ML 기술을 합친 시스템을 테스트하고 최적의 모델을 배포할 수 있다고 제안했습니다: "This system is based on natural language processing to extract features from the data and then these features are used for the training of machine learning classifiers such as Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), and Logistic Regression(LR)." - -https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf - -이 아티클에서 서로 다른 ML 도메인을 합쳐서 가짜 뉴스의 확산과 실제 데미지를 막는 데 도울 수 있는 흥미로운 결과를 어떻게 얻을 수 있는지 보여줍니다; 이 케이스에서, 핵심은 집단 폭력을 유도했던 COVID 치료 방식에 대한 루머가 확산된 것입니다. - -### 박물관 ML - -박물관은 기술 발전이 다가오면서 수집품 카탈로그 작성과 디지털화 그리고 유물 사이 연결고리 찾는 게 더 쉬워지는 AI 혁신의 정점에 있습니다. [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) 같은 프로젝트는 Vatican Archives처럼 희귀한 수집품의 미스터리를 풀고자 도울 수 있습니다. 그러나, 박물관의 비지니스 측면에서도 ML 모델의 이익이 있습니다. - -예시로, Art Institute of Chicago는 관람객이 어디에 관심있고 언제 박람회에 참석하는지 예측하는 모델을 만들었습니다. 목표로 사용자가 박물관을 방문하는 순간마다 게인마다 맞춰서 최적화된 방문객 경험을 만들고자 했습니다. "During fiscal 2017, the model predicted attendance and admissions within 1 percent of accuracy, says Andrew Simnick, senior vice president at the Art Institute." - -https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices - -## 🏷 마케팅 - -### 고객 세분화 - -가장 효과적인 마케팅 전략은 다양한 그룹핑을 기반으로 다양한 방식에 소비자를 타게팅합니다. 이 아티클에서, Clustering 알고리즘으로 차별화된 마케팅을 지원하기 위한 이야기를 합니다. 차별화된 마케팅은 회사 브랜드 인식을 개선하고, 더 많은 소비자에게 다가가고, 더 많이 돈을 벌고자 도와줄 수 있습니다. - -https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/ - -## 🚀 도전 - -이 커리큘럼에서 배웠던 일부 기술로 이익을 낼 다른 색터를 식별하고, ML을 어떻게 사용하는지 탐색합니다. - -## [강의 후 학습](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) - -## 검토 & 자기주도 학습 - -Wayfair 데이터 사이언스 팀은 회사에서 어떻게 ML을 사용하는지에 대한 여러 흥미로운 비디오를 남겼습니다. [taking a look](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)해볼 가치가 있습니다! - -## 과제 - -[A ML scavenger hunt](../assignment.md) diff --git a/9-Real-World/1-Applications/translations/assignment.es.md b/9-Real-World/1-Applications/translations/assignment.es.md deleted file mode 100644 index 43015df5..00000000 --- a/9-Real-World/1-Applications/translations/assignment.es.md +++ /dev/null @@ -1,13 +0,0 @@ -# Una búsqueda del tesoro con aprendizaje automático - -## Instrucciones - -En esta lección aprendiste acerca de muchos casos de uso en la vida real que fueron solucionados usando aprendizaje automático. Si bien, el uso del aprendizaje profundo, las nuevas técnicas y herramientas en la inteligencia artificial y el apoyo en las redes neuronales han ayudado a acelerar la producción de herramientas para ayudar a estos sectores, el aprendizaje automático clásico que usa las técnicas en este curso aún tienen gran valor. - -Para esta asignación, imagina que estás participando en un hackatón. Usa lo que has aprendido en el curso para así proponer una solución mediante el uso de aprendizaje automático clásico y así resolver un problema en uno de los sectores discutidos en esta lección. Crea una una presentación donde discutes cómo implementarás tu idea. ¡Tendrás puntos adicionales si puedes reunir datos de prueba y construir un modelo de aprendizaje automático para soportar tu concepto! - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita mejorar | -| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | -| | Entregó una presentación de PowerPoint - puntos adicionales si creó un modelo | Entregó una presentación básica nada innovadora | El trabajo está incompleto | diff --git a/9-Real-World/1-Applications/translations/assignment.it.md b/9-Real-World/1-Applications/translations/assignment.it.md deleted file mode 100644 index fadb90a9..00000000 --- a/9-Real-World/1-Applications/translations/assignment.it.md +++ /dev/null @@ -1,13 +0,0 @@ -# Una caccia al tesoro per ML - -## Istruzioni - -In questa lezione si sono appresi molti casi d'uso reali che sono stati risolti utilizzando machine learning classico. Sebbene l'uso del deep learning, di nuove tecniche e strumenti nell'intelligenza artificiale e lo sfruttamento delle reti neurali abbia contribuito ad accelerare la produzione di strumenti per aiutare in questi settori, il machine learning classico che utilizza le tecniche esposte in questo programma di studi ha ancora un grande valore. - -In questo compito, si immagini di partecipare a un [hackathon](https://it.wikipedia.org/wiki/Hackathon). Usare ciò che si è appreso nel programma di studi per proporre una soluzione usando ML classico per risolvere un problema in uno dei settori discussi in questa lezione. Creare una presentazione in cui si discute come implementare la propria idea. Punti bonus se si riesce a raccogliere dati di esempio e creare un modello ML per supportare il proprio concetto! - -## Rubrica - -| Criteri | Ottimo | Adeguato | Necessita miglioramento | -| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | -| | Viene esposta una presentazione PowerPoint - bonus per la creazione di un modello | Viene esposta una presentazione di base non innovativa | Il lavoro è incompleto | diff --git a/9-Real-World/1-Applications/translations/assignment.ko.md b/9-Real-World/1-Applications/translations/assignment.ko.md deleted file mode 100644 index 00af49b7..00000000 --- a/9-Real-World/1-Applications/translations/assignment.ko.md +++ /dev/null @@ -1,13 +0,0 @@ -# 머신러닝 물건 찾기 게임 - -## 설명 - -이번 수업에서는 기존의 클래식한 머신러닝 알고리즘으로 해결한 실제 문제들에 대해 알아보았습니다. 인공지능의 신기술 및 새로운 도구, 딥러닝, 신경망 활용 등이 다양한 산업 분야에 도움이 되는 도구 제작 속도를 높이는 데 도움이 됐습니다. 그렇지만 이 머신러닝 과정에서 소개하는 기존의 클래식한 머신러닝 알고리즘은 여전히 높은 유용성을 지니고 있습니다. - -이 과제는 여러분이 해커톤(hackathon)에 참가하고 있다고 상상하며 임해 보시기 바랍니다. 이 과정에서 배운 내용을 사용해 이번 수업에서 다룬 산업 분야들 중 한 분야의 문제를 해결을 하고자 합니다. 기존의 클래식한 머신러닝 알고리즘을 사용해 그 문제를 해결할 수 있는 해법을 제안해 보세요. 그리고 여러분의 아이디어를 어떻게 구현할 것인지를 파워포인트(PowerPoint) 프레젠테이션에 담아 보세요. 표본 데이터를 수집하고 머신러닝 모델을 구축해 여러분의 개념을 뒷받침할 수 있다면 가산점! - -## 평가기준표 - -| 평가기준 | 모범 | 적절 | 향상 필요 | -| -------- | -------------------------------------------------- | ------------------------------------- | -------- | -| | 파워포인트 프레젠테이션을 선보임 - 모델 구축 시 가산점 | 새롭지 않고 단순한 프레젠테이션을 선보임 | 미완성 | diff --git a/9-Real-World/translations/README.es.md b/9-Real-World/translations/README.es.md deleted file mode 100644 index 3ad06a6a..00000000 --- a/9-Real-World/translations/README.es.md +++ /dev/null @@ -1,14 +0,0 @@ -# Postdata: Aplicaciones del mundo real de aprendizaje automático clásico - -En esta sección del curso, presentaremos algunas aplicaciones del aprendizaje automático clásico en el mundo real. Hemos escrutinado el internet para encontrar documentos oficiales y artículos acerca de aplicaciones que han usado estas estrategias; evitando las redes neuronales, el aprendizaje profundo y la inteligencia artificial tanto como fue posible. Aprende cómo se usa el aprendizaje automático en los sistemas comerciales, las aplicaciones ecológicas, las finanzas, el arte y la cultura y más. - -![ajedrez](../images/chess.jpg) - -> Foto por Alexis Fauvet en Unsplash - -## Lección - -1. [Aplicaciones del mundo real para el aprendizaje automático](../1-Applications/translations/README.es.md) -## Créditos - -"Aplicaciones del mundo real" fue escrito por un equipo de personas, incluyendo a [Jen Looper](https://twitter.com/jenlooper) y [Ornella Altunyan](https://twitter.com/ornelladotcom). \ No newline at end of file diff --git a/9-Real-World/translations/README.fr.md b/9-Real-World/translations/README.fr.md deleted file mode 100644 index a6116815..00000000 --- a/9-Real-World/translations/README.fr.md +++ /dev/null @@ -1,15 +0,0 @@ -# Postscript: Applications réelles de l'apprentissage automatique classique - -Dans cette section du cours, nous vous présenterons quelques applications réelles du ML classique. Nous avons parcouru l'Internet pour trouver des papiers de recherches et des articles sur des applications qui ont utilisé ces stratégies, en évitant autant que possible les réseaux neuronaux, l'apprentissage profond et l'IA. Découvrez comment le ML est utilisé dans les systèmes commerciaux, les applications écologiques, la finance, les arts et la culture, et plus encore. - -![échecs](../images/chess.jpg) - -> Photo par Alexis Fauvet sur Unsplash - -## Leçon - -1. [Applications du monde réel pour le ML](../1-Applications/README.md) - -## Crédits - -"Applications du monde réel pour le ML" a été rédigé par une équipe de personnes, dont les suivantes [Jen Looper](https://twitter.com/jenlooper) et [Ornella Altunyan](https://twitter.com/ornelladotcom). diff --git a/9-Real-World/translations/README.hi.md b/9-Real-World/translations/README.hi.md deleted file mode 100644 index 4e90260c..00000000 --- a/9-Real-World/translations/README.hi.md +++ /dev/null @@ -1,15 +0,0 @@ -# उपसंहार: शास्त्रीय मशीन लर्निंग (machine learning) के वास्तविक विश्व अनुप्रयोग - -पाठ्यक्रम के इस खंड में आपको शास्त्रीय एम. एल. (ML) के कुछ वास्तविक-विश्व के अनुप्रयोगों से परिचित कराया जाएगा। हमने इंटरनेट को खंगालकर इन रणनीतियों का उपयोग करने वाले अनुप्रयोगों के बारे में श्वेतपत्र और लेख खोजे हैं। यह करते हुए, जितना संभव हुआ हमने न्यूरल नेटवर्क (neural networks), डीप लर्निंग (deep learning) और ए. आई. (AI) से बचने का प्रयास किया है। आईये जानें की एम. एल. का उपयोग व्यावसायिक प्रणालियों, पारिस्थितिक अनुप्रयोगों, वित्त, कला और संस्कृति आदि में कैसे किया जाता है। - -![शतरंज](../images/chess.jpg) - -> एलेक्सिस फॉवेट (Alexis Fauvet) द्वारा अनस्प्लैश (Unsplash) पर चित्र - -## पाठ - -1. [एम. एल. (ML) के वास्तविक-विश्व अनुप्रयोग](../1-Applications/README.md) - -## श्रेय - -"वास्तविक विश्व अनुप्रयोग" को [जेन लूपर (Jen Looper)](https://twitter.com/jenlooper) और [ओर्नेला अल्टुन्यान (Ornella Altunyan)](https://twitter.com/ornelladotcom) सहित एक मित्रों की टोली द्वारा लिखा गया था। diff --git a/9-Real-World/translations/README.it.md b/9-Real-World/translations/README.it.md deleted file mode 100644 index 682a116f..00000000 --- a/9-Real-World/translations/README.it.md +++ /dev/null @@ -1,15 +0,0 @@ -# Poscritto: applicazioni del mondo reale di machine learning classico - -In questa sezione del programma di studi, verranno presentate alcune applicazioni del mondo reale di machine learning classico. Internet è stata setacciata per trovare [whitepaper](https://it.wikipedia.org/wiki/White_paper) e articoli sulle applicazioni che hanno utilizzato queste strategie, evitando il più possibile le reti neurali, il deep learning e l'intelligenza artificiale. Si scoprirà come viene utilizzato machine learning nei sistemi aziendali, applicazioni ecologiche, finanza, arte e cultura e altro ancora. - -![scacchi](../images/chess.jpg) - -> Foto di Alexis Fauvet su Unsplash - -## Lezione - -1. [Applicazioni del mondo reale per ML](../1-Applications/translations/README.it.md) - -## Crediti - -"Real-World Applications" è stato scritto da un team di persone, tra cui [Jen Looper](https://twitter.com/jenlooper) e [Ornella Altunyan](https://twitter.com/ornelladotcom). \ No newline at end of file diff --git a/9-Real-World/translations/README.ko.md b/9-Real-World/translations/README.ko.md deleted file mode 100644 index 26da3f74..00000000 --- a/9-Real-World/translations/README.ko.md +++ /dev/null @@ -1,15 +0,0 @@ -# Postscript: Classic 머신러닝의 현실 애플리케이션 - -커리큘럼의 이 섹션에서, classical ML의 실제-세계 에플리케이션을 소개힐 예정입니다. 가능한 neural networks, 딥러닝과 AI를 피하면서, 이 전략을 사용한 애플리케이션에 대한 백서와 아티클을 찾으려 웹 서핑을 했습니다. ML이 비즈니스 시스템, 생태학 애플리케이션, 금융, 예술과 문화, 그리고 더 많은 곳에서 어떻게 사용되는지 배웁니다. - -![chess](../images/chess.jpg) - -> Photo by Alexis Fauvet on Unsplash - -## 강의 - -1. [ML의 현실 애플리케이션](../1-Applications/translations/README.ko.md) - -## 크레딧 - -"Real-World Applications" was written by a team of folks, including [Jen Looper](https://twitter.com/jenlooper) and [Ornella Altunyan](https://twitter.com/ornelladotcom). \ No newline at end of file diff --git a/9-Real-World/translations/README.pt.md b/9-Real-World/translations/README.pt.md deleted file mode 100644 index 1b7bcede..00000000 --- a/9-Real-World/translations/README.pt.md +++ /dev/null @@ -1,13 +0,0 @@ -# Posfácio: Aplicações no mundo real do Machine Learning clássico -Nesta seção do currículo, você será apresentado a algumas aplicações do ML clássico. Ao vasculhar publicações e artigos sobre essas aplicações na internet, nós buscamos trazer apenas a ML de modo a evitar, ao máximo, usar as estratégias de redes neurais, deep learning e IA. Aprenda sobre como o ML é usado nos sistemas de negócios, nas aplicações ecológicas, nas finanças, na arte, na cultura e muito mais. - -![xadrez](../images/chess.jpg) - -> Foto de Alexis Fauvet disponível em Unsplash - -## Aula - -1. [Aplicações práticas do ML no mundo real](https://github.com/microsoft/ML-For-Beginners/blob/main/9-Real-World/1-Applications/README.md) -## Créditos - -"Real-World Applications" foi escrito por uma equipe de colegas, dentre eles [Jen Looper](https://twitter.com/jenlooper) e [Ornella Altunyan](https://twitter.com/ornelladotcom). diff --git a/9-Real-World/translations/README.ru.md b/9-Real-World/translations/README.ru.md deleted file mode 100644 index dec780f5..00000000 --- a/9-Real-World/translations/README.ru.md +++ /dev/null @@ -1,14 +0,0 @@ -# Постскриптум: реальные приложения классического машинного обучения - -В этом разделе учебной программы вы познакомитесь с некоторыми реальными приложениями классического машинного обучения. Мы обыскали Интернет в поисках технических документов и статей о приложениях, которые использовали эти стратегии, избегая, насколько это возможно, нейронных сетей, глубокого обучения и искусственного интеллекта. Узнайте о том, как машинное обучение используется в бизнес-системах, экологических приложениях, финансах, искусстве и культуре и многом другом. - -![Шахматы](../images/chess.jpg) - -> Фото сделано Алексис Фаувет на Unsplash - -## Урок - -1. [Реальные приложения для машинного обучения](../1-Applications/README.md) -## Благодарности - -"Реальные приложения для машинного обучения" былы написаны группой людей, включая [Джен Лупер](https://twitter.com/jenlooper) и [Орнелла Алтунян](https://twitter.com/ornelladotcom). diff --git a/9-Real-World/translations/README.tr.md b/9-Real-World/translations/README.tr.md deleted file mode 100644 index 34941f53..00000000 --- a/9-Real-World/translations/README.tr.md +++ /dev/null @@ -1,20 +0,0 @@ -# Dipnot: Klasik makine öğrenmesinin gerçek dünya uygulamaları - - - -Müfredatın bu bölümünde, klasik makine öğrenmesinin bazı gerçek dünya uygulamalarıyla tanışacaksınız. Bu stratejileri kullanan, sinir ağlarından, derin öğrenmeden ve yapay zeka(AI)'dan mümkün olduğunca kaçınan uygulamalar hakkında teknik incelemeler ve makaleler bulmak için interneti taradık.Makine öğrenmesinin iş sistemlerinde, ekolojik uygulamalarda, finansta, sanat ve kültürde ve dahasında nasıl kullanıldığı hakkında bilgi edinin. - - -![chess](images/chess.jpg) - -> Alexis Fauvet'in Unsplash'taki fotoğrafı - -## Ders - -1. [Makine öğrenmesi gerçek dünya uygulamaları](https://github.com/microsoft/ML-For-Beginners/blob/main/9-Real-World/1-Applications/translations/README.tr.md) - -## Katkıda Bulunanlar - -"Gerçek Dünya Uygulamaları", [Jen Looper](https://twitter.com/jenlooper) ve [Ornella Altunyan](https://twitter.com/ornelladotcom)'ın da aralarında bulunduğu bir ekip tarafından yazılmıştır. - - diff --git a/9-Real-World/translations/README.zh-cn.md b/9-Real-World/translations/README.zh-cn.md deleted file mode 100644 index ff091bce..00000000 --- a/9-Real-World/translations/README.zh-cn.md +++ /dev/null @@ -1,14 +0,0 @@ -# 附言:经典机器学习在现实生活中的应用 - -在课程的这一章节中,你将会了解一些经典机器学习的现实应用。我们在网络上找遍了涉及课程中这些技术的应用的白皮书和文章,从中尽力排除了神经网络、深度学习和AI。让我们一起来探索机器学习是如何被应用在商业系统、生态应用、金融、艺术文化和其他领域中吧。 - -![chess](../images/chess.jpg) - -> 照片由 Alexis Fauvet 拍摄并发布在 Unsplash 平台 - -## 课程安排 - -1. [机器学习的现实应用](../1-Applications/README.md) -## 致谢 - -"机器学习的现实应用" 由 [Jen Looper](https://twitter.com/jenlooper) 和 [Ornella Altunyan](https://twitter.com/ornelladotcom) 两人的团队共同撰写. diff --git a/README.md b/README.md index d2e9edbd..87c26cf3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,15 @@ [![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) [![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) +### 🌐 Multi-Language Support + +#### Supported via GitHub Action (Automated & Always Up-to-Date) + +[French](./translations/fr/README.md) | [Spanish](./translations/es/README.md) | [German](./translations/de/README.md) | [Russian](./translations/ru/README.md) | [Arabic](./translations/ar/README.md) | [Persian (Farsi)](./translations/fa/README.md) | [Urdu](./translations/ur/README.md) | [Chinese (Simplified)](./translations/zh/README.md) | [Chinese (Traditional, Macau)](./translations/mo/README.md) | [Chinese (Traditional, Hong Kong)](./translations/hk/README.md) | [Chinese (Traditional, Taiwan)](./translations/tw/README.md) | [Japanese](./translations/ja/README.md) | [Korean](./translations/ko/README.md) | [Hindi](./translations/hi/README.md) | [Bengali](./translations/bn/README.md) | [Marathi](./translations/mr/README.md) | [Nepali](./translations/ne/README.md) | [Punjabi (Gurmukhi)](./translations/pa/README.md) | [Portuguese (Portugal)](./translations/pt/README.md) | [Portuguese (Brazil)](./translations/br/README.md) | [Italian](./translations/it/README.md) | [Polish](./translations/pl/README.md) | [Turkish](./translations/tr/README.md) | [Greek](./translations/el/README.md) | [Thai](./translations/th/README.md) | [Swedish](./translations/sv/README.md) | [Danish](./translations/da/README.md) | [Norwegian](./translations/no/README.md) | [Finnish](./translations/fi/README.md) | [Dutch](./translations/nl/README.md) | [Hebrew](./translations/he/README.md) | [Vietnamese](./translations/vi/README.md) | [Indonesian](./translations/id/README.md) | [Malay](./translations/ms/README.md) | [Tagalog (Filipino)](./translations/tl/README.md) | [Swahili](./translations/sw/README.md) | [Hungarian](./translations/hu/README.md) | [Czech](./translations/cs/README.md) | [Slovak](./translations/sk/README.md) | [Romanian](./translations/ro/README.md) | [Bulgarian](./translations/bg/README.md) | [Serbian (Cyrillic)](./translations/sr/README.md) | [Croatian](./translations/hr/README.md) | [Slovenian](./translations/sl/README.md) | [Ukrainian](./translations/uk/README.md) | [Burmese (Myanmar)](./translations/my/README.md) + +#### Join the Community + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) # Machine Learning for Beginners - A Curriculum @@ -135,9 +143,6 @@ You can run this documentation offline by using [Docsify](https://docsify.js.org Find a pdf of the curriculum with links [here](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). -## Help Wanted - -Would you like to contribute a translation? Please read our [translation guidelines](TRANSLATIONS.md) and add a templated issue to manage the workload [here](https://github.com/microsoft/ML-For-Beginners/issues). ## 🎒 Other Courses diff --git a/TRANSLATIONS.md b/TRANSLATIONS.md deleted file mode 100644 index 0385169c..00000000 --- a/TRANSLATIONS.md +++ /dev/null @@ -1,34 +0,0 @@ -# Contribute by translating lessons - -We welcome translations for the lessons in this curriculum! -## Guidelines - -There are folders in each lesson folder and lesson introduction folder which contain the translated markdown files. - -> Note, please do not translate any code in the code sample files; the only things to translate are README, assignments, and the quizzes. Thanks! - -Translated files should follow this naming convention: - -**README._[language]_.md** - -where _[language]_ is a two letter language abbreviation following the ISO 639-1 standard (e.g. `README.es.md` for Spanish and `README.nl.md` for Dutch). - -**assignment._[language]_.md** - -Similar to Readme's, please translate the assignments as well. - -> Important: when translating text in this repo, please ensure that you do not use machine translation. We will verify translations via the community, so please only volunteer for translations in languages where you are proficient. - -**Quizzes** - -1. Add your translation to the quiz-app by adding a file here: https://github.com/microsoft/ML-For-Beginners/tree/main/quiz-app/src/assets/translations, with proper naming convention (en.json, fr.json). **Please don't localize the words 'true' or 'false' however. thanks!** - -2. Add your language code to the dropdown in the quiz-app's App.vue file. - -3. Edit the quiz-app's [translations index.js file](https://github.com/microsoft/ML-For-Beginners/blob/main/quiz-app/src/assets/translations/index.js) to add your language. - -4. Finally, edit ALL the quiz links in your translated README.md files to point directly to your translated quiz: https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1 becomes https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=id - -**THANK YOU** - -We truly appreciate your efforts! diff --git a/translations/README.es.md b/translations/README.es.md deleted file mode 100644 index 73f895ed..00000000 --- a/translations/README.es.md +++ /dev/null @@ -1,133 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Aprendizaje automático para principiantes - Un plan de estudios - -> 🌍 Viaja alrededor del mundo mientras exploramos el aprendizaje automático a través de las culturas del mundo 🌍 - -Los Azure Cloud Advocates de Microsoft están emocionados en ofrecer un plan de estudios de 12 semanas, con 26 lecciones, todas acerca de **aprendizaje automático**. En este plan de estudios, aprenderás sobre lo que algunas veces es llamado **aprendizaje automático clásico**, usando principalmente Scikit-learn y evitando el aprendizaje profundo, el cual se aborda en nuestro próximo plan de estudios 'IA para principiantes'. ¡Acompaña estas lecciones con nuestro [plan de estudios 'Ciencia de Datos para principiantes'](https://aka.ms/datascience-beginners)! - -Viaja con nosotros alrededor del mundo mientras aplicamos técnicas clásicas a los datos de distintas áreas del mundo. Cada lección incluye: - -- Exámenes previos y posteriores a cada lección -- Instrucciones para completar dicha lección -- Una solución -- Un ejercicio y más - -Nuestra metodología de enseñanza basada en proyectos, te permite aprender mientras practicas; esta es una forma comprobada para que adquieras nuevas habilidades. - -**✍️ Agradecimientos de todo corazón** a Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, y Amy Boyd. - -**🎨 Gracias también a nuestros ilustradores** Tomomi Imura, Dasani Madipalli, y Jen Looper. - -**🙏 Agradecimientos especiales 🙏 a nuestros autores de Embajadores Estudiantiles de Microsoft, revisores, y colaboradores de contenido**, notablemente a Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, y Snigdha Agarwal. - -**🤩 ¡Agradecimiento adicional al embajador estudiantil de Microsoft Eric Wanjau por nuestras lecciones de R!** - ---- - -# Empezando con el plan de estudio - -**Estudiantes**, para usar este plan de estudios, realiza un fork del repositorio completo en tu cuenta de GitHub y completa los ejercicios por ti mismo o en grupo: - -- Realiza el examen previo a la lección. -- Lee las lecciones y completa las actividades, pausando y reflexionando en cada verificación de conocimiento. -- Intenta crear los proyectos para comprender las lecciones en lugar de ejecutar el código de la solución; sin embargo ese código se encuentra disponible en los directorios `/solution` en cada lección orientada a proyecto. -- Realiza el examen posterior a la lección. -- Completa el desafío. -- Completa el ejercicio. -- Después de completar un grupo de lecciones, visita el [tablero de discusión](https://github.com/microsoft/ML-For-Beginners/discussions) y "aprende en voz alta" llenando la rúbrica PAT apropiada. Un 'PAT' es una herramienta de evaluación del progreso que es una rúbrica la cual llenas para avanzar en tu aprendizaje. También puede reaccionar a otros PATs y así aprender juntos. - -> Para aprender más, recomendamos seguir estos módulos y rutas de aprendizaje de [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). - -**Profesores**, hemos [incluido algunas sugerencias](../for-teachers.md) de cómo usar este plan de estudios. - ---- - -## Conoce al equipo - -[![Video promocional](../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Video promocional") - -**Gif de** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) - -> 🎥 ¡Da clic a la imagen de arriba para ver un video acerca del proyecto y la gente que lo creó! - ---- - -## Pedagogía - -Hemos elegido dos principios pedagógicos mientras construimos este plan de estudios: asegurar que es práctico **basado en proyectos** y que incluye **exámenes frecuentes**. Además, este plan de estudios tiene un **tema** común para darle cohesión. - -Al asegurar que el contenido se alinea con los proyectos, el proceso se hace más atractivo par los estudiantes y la retención de conceptos incrementará. Además, un pequeño examen antes de cada clase para establecer la intención del estudiante de aprender un tema, mientras el segundo examen después de la clase asegura una mayor retención. Este plan de estudios fue diseñado para ser flexible y divertido y puede se tomado en su totalidad o por partes. Los proyectos comienzan pequeños y van incrementando en complejidad durante el ciclo de 12 semanas. Este plan de estudios también incluye una nota al final sobre aplicaciones de aprendizaje automático en el mundo real, la cual puede ser usada como cŕeditos extra o como base para discusión. - -> Encuentra nuestros lineamientos de [Código de conducta](../CODE_OF_CONDUCT.md), [Contribución](../CONTRIBUTING.md), y [Traducción](../TRANSLATIONS.md). ¡Son bienvenidos tus comentarios constructivos! - -## Cada lección incluye: - -- boceto opcional -- video suplementario opcional -- examen diagnóstico previo a la lección -- lección escrita -- para lecciones basadas en proyectos, guías paso a paso de cómo construir el proyecto -- verificaciones de conocimiento -- un desafío -- lectura suplementaria -- un ejercicio -- examen posterior a la lección - -> **Una nota acerca de los lenguajes**: Estas lecciones están escritas principalmente en Python, pero muchas también están disponibles en R. Para completar una lección en R, ve al directorio `/solution` y busca las lecciones. Ellas incluyen una extensión .rmd que representa un archivo **Markdown R** el cual puede ser definido simplemente como `porciones de código` embebido (de R u otros lenguajes) y un `encabezado YAML` (que guía cómo dar formato a las salidas, por ejemplo PDF) en un `documento Markdown`. Como tal, este sirve como un framework ejemplar de autoría para la ciencia de datos ya que permite combinar tu código, su salida, y tus pensamientos al permitirte escribirlos en Markdown. Es más, los documentos Markdown R pueden ser representados como formatos de salida tal como PDF, HTML, o Word. - -> **Una nota acerca de los exámenes**: Todos los exámenes están contenidos [en esta app](https://gray-sand-07a10f403.1.azurestaticapps.net/), para un total de 52 exámenes de 3 preguntas cada uno, Ellos están vinculados dentro de las lecciones pero la aplicación de exámenes puede ser ejecutada localmente; sigue las instrucciones en el directorio `quiz-app`. - -| Número de lección | Tema | Agrupación de lecciones | Objetivos de aprendizaje | Lección vinculada | Autor | -| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | -| 01 | Introducción al aprendizaje automático | [Introducción](../1-Introduction/translations/README.es.md) | Aprende los conceptos básicos detrás del aprendizaje automático | [Lección](../1-Introduction/1-intro-to-ML/translations/README.es.md) | Muhammad | -| 02 | La historia del aprendizaje automático | [Introducción](../1-Introduction/translations/README.es.md) | Aprende la historia de este campo | [Lección](../1-Introduction/2-history-of-ML/translations/README.es.md) | Jen y Amy | -| 03 | Justicia y aprendizaje automático | [introducción](../1-Introduction/translations/README.es.md) | ¿Cuáles son los problemas filosóficos importantes alrededor de la justicia que los estudiantes deberían considerar al construir y aplicar modelos de aprendizaje automático? | [Lección](../1-Introduction/3-fairness/translations/README.es.md) | Tomomi | -| 04 | Técnicas para el aprendizaje automático | [introducción](../1-Introduction/translations/README.es.md) | ¿Qué técnicas usan los investigadores de aprendizaje automático para construir modelos de ML? | [Lección](../1-Introduction/4-techniques-of-ML/translations/README.es.md) | Chris y Jen | -| 05 | Introducción a la regresión | [Regresión](../2-Regression/translations/README.es.md) | Comienza con Python y Scikit-learn para modelos de regresión |
  • [Python](../2-Regression/1-Tools/translations/README.es.md)
  • [R](../2-Regression/1-Tools/solution/R/lesson_1-R.ipynb)
|
  • Jen
  • Eric Wanjau
| -| 06 | Precios de la calabaza en Norte América 🎃 | [Regresión](../2-Regression/translations/README.es.md) | Visualiza y limpia los datos en preparación para el aprendizaje automático |
  • [Python](../2-Regression/2-Data/translations/README.es.md)
  • [R](../2-Regression/2-Data/solution/R/lesson_2-R.ipynb)
|
  • Jen
  • Eric Wanjau
| -| 07 | Precios de la calabaza en Norte América 🎃 | [Regresión](../2-Regression/translations/README.es.md) | Construye modelos de regresión lineal y polinomial |
  • [Python](../2-Regression/3-Linear/translations/README.es.md)
  • [R](../2-Regression/3-Linear/solution/R/lesson_3-R.ipynb)
|
  • Jen
  • Eric Wanjau
| -| 08 | Precios de la calabaza en Norte América 🎃 | [Regresión](../2-Regression/translations/README.es.md) | Construye un modelo de regresión logística |
  • [Python](../2-Regression/4-Logistic/translations/README.es.md)
  • [R](../2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb)
|
  • Jen
  • Eric Wanjau
| -| 09 | Una aplicación web 🔌 | [Aplicación web](../3-Web-App/translations/README.es.md) | Construye una aplicación web para usar tu modelo entrenado | [Python](../3-Web-App/1-Web-App/translations/README.es.md) | Jen | -| 10 | Introducción a la clasificación | [Clasificación](../4-Classification/translations/README.es.md) | Limpia, prepara y visualiza tus datos; introducción a la clasificación |
  • [Python](../4-Classification/1-Introduction/translations/README.es.md)
  • [R](../4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb) |
    • Jen y Cassie
    • Eric Wanjau
    | -| 11 | Deliciosas cocinas Asiática e India 🍜 | [Clasificación](../4-Classification/translations/README.es.md) | Introducción a los clasificadores |
    • [Python](../4-Classification/2-Classifiers-1/translations/README.es.md)
    • [R](../4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb) |
      • Jen y Cassie
      • Eric Wanjau
      | -| 12 | Deliciosas cocinas Asiática e India 🍜 | [Clasificación](../4-Classification/translations/README.es.md) | Más clasificadores |
      • [Python](../4-Classification/3-Classifiers-2/translations/README.es.md)
      • [R](../4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb) |
        • Jen y Cassie
        • Eric Wanjau
        | -| 15 | Explorando los gustos musicales de Nigeria 🎧 | [Agrupamiento](../5-Clustering/translations/README.es.md) | Explora el método de agrupamiento K-medias |
        • [Python](../5-Clustering/2-K-Means/translations/README.es.md)
        • [R](../5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb) |
          • Jen
          • Eric Wanjau
          | -| 16 | Introducción al procesamiento de lenguaje natural ☕️ | [Procesamiento de lenguaje natural](../6-NLP/translations/README.es.md) | Aprende las bases acerca de NLP al construir un bot simple | [Python](../6-NLP/1-Introduction-to-NLP/translations/README.es.md) | Stephen | -| 18 | Traducción y análisis de sentimiento ♥️ | [Procesamiento de lenguaje natural](../6-NLP/translations/README.es.md) | Traducción y análisis de sentimiento con Jane Austen | [Python](../6-NLP/3-Translation-Sentiment/translations/README.es.md) | Stephen | -| 19 | Hoteles románticos de Europa ♥️ | [Procesamiento de lenguaje natural](../6-NLP/translations/README.es.md) | Análisis de sentimiento con reseñas de hoteles 1 | [Python](../6-NLP/4-Hotel-Reviews-1/translations/README.es.md) | Stephen | -| 20 | Hoteles románticos de Europa ♥️ | [Procesamiento de lenguaje natural](../6-NLP/translations/README.es.md) | Análisis de sentimiento con reseñas de hoteles 2 | [Python](../6-NLP/5-Hotel-Reviews-2/translations/README.es.md) | Stephen | -| 21 | Introducción a la predicción de series de tiempo | [Series de tiempo](../7-TimeSeries/translations/README.es.md) | Introducción a la predicción de series de tiempo | [Python](../7-TimeSeries/1-Introduction/translations/README.es.md) | Francesca | -| 22 | ⚡️ Uso de energía mundial ⚡️ - predicción de series de tiempo con ARIMA | [Series de tiempo](../7-TimeSeries/translations/README.es.md) | Predicción de series de tiempo con ARIMA | [Python](../7-TimeSeries/2-ARIMA/translations/README.es.md) | Francesca | -| 23 | ⚡️ Uso de energía mundial ⚡️ - predicción de series de tiempo con SVR | [Series de tiempo](../7-TimeSeries/translations/README.es.md) | Predicción de series de tiempo con Regresor de soporte vectorial | [Python](../7-TimeSeries/3-SVR/translations/README.es.md) | Anirban | -| 24 | Introducción al aprendizaje reforzado | [Aprendizaje reforzado](../8-Reinforcement/translations/README.es.md) | introducción al aprendizaje reforzado con Q-Learning | [Python](../8-Reinforcement/1-QLearning/translations/README.es.md) | Dmitry | -| 25 | ¡Ayuda a Pedro a evitar al lobo! 🐺 | [Aprendizaje reforzado](../8-Reinforcement/translations/README.es.md) | Gimnasio de aprendizaje reforzado | [Python](../8-Reinforcement/2-Gym/translations/README.es.md) | Dmitry | -| Postdata | Escenarios y aplicaciones del aprendizaje automático en el mundo real | [Aprendizaje automático en la naturaleza](../9-Real-World/translations/README.es.md) | Interesantes y reveladoras aplicaciones del mundo real del aprendizaje automático clásico | [Lección](../9-Real-World/1-Applications/translations/README.es.md) | Equipo | - -## Acceso sin conexión - -Puedes ejecutar esta documentación sin conexión al usar [Docsify](https://docsify.js.org/#/). Crea un fork de este repositorio, [instala Docsify](https://docsify.js.org/#/quickstart) en tu equipo local, y luego en el directorio raíz de este repositorio, escribe `docsify serve`. El sitio web será servido en el puerto 3000 de tu host local: `localhost:3000`. - -## PDFs - -Encuentra [aquí](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf) un pdf de el plan de estudios con enlaces. - -## ¡Necesitamos tu ayuda! - -¿Te gustaría contribuir con una traducción? Por favor lee nuestros [lineamientos de traducción](../TRANSLATIONS.md) y agrega un issue basado en la plantilla para administrar la carga de trabajo [aquí](https://github.com/microsoft/ML-For-Beginners/issues). - -## Otros planes de estudio - -¡Nuestro equipo produce otros planes de estudio! Revísalos: - -- [Desarrollo Web para principiantes](https://aka.ms/webdev-beginners) -- [Internet de las cosas para principiantes](https://aka.ms/iot-beginners) -- [Ciencia de Datos para principiantes](https://aka.ms/datascience-beginners) diff --git a/translations/README.hi.md b/translations/README.hi.md deleted file mode 100644 index 8e87d72d..00000000 --- a/translations/README.hi.md +++ /dev/null @@ -1,129 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# शुरुआती के लिए मशीन लर्निंग - एक पाठ्यक्रम - -> 🌍दुनिया भर में यात्रा करें क्योंकि हम विश्व संस्कृतियों के माध्यम से मशीन लर्निंग का पता लगाते हैं 🌍 - -माइक्रोसॉफ्ट के एज़्योर क्लाउड एडवोकेट्स को 12-सप्ताह, 26-पाठ पाठ्यक्रम की पेशकश करके प्रसन्नता हो रही है **मशीन लर्निंग** के बारे में 12-सप्ताह, 26-पाठ पाठ्यक्रम की पेशकश करके प्रसन्न हैं। इस पाठ्यक्रम में, आप प्राथमिक रूप से स्किकिट-लर्न को एक पुस्तकालय के रूप में उपयोग करते हुए और हमारे आगामी 'एआई फॉर बिगिनर्स' पाठ्यक्रम में शामिल गहन शिक्षण से बचने के लिए, जिसे कभी-कभी **क्लासिक मशीन लर्निंग** कहा जाता है, के बारे में जानेंगे। इन पाठों को हमारे साथ जोड़ें ['शुरुआती के लिए डेटा विज्ञान' पाठ्यक्रम](https://aka.ms/datascience-beginners), भी! - -दुनिया भर में हमारे साथ यात्रा करें क्योंकि हम इन क्लासिक तकनीकों को दुनिया के कई क्षेत्रों के डेटा पर लागू करते हैं। प्रत्येक पाठ में पाठ से पहले और बाद में प्रश्नोत्तरी, पाठ को पूरा करने के लिए लिखित निर्देश, एक समाधान, एक असाइनमेंट, और बहुत कुछ शामिल हैं। हमारी परियोजना-आधारित शिक्षाशास्त्र आपको निर्माण करते समय सीखने की अनुमति देता है, जो नए कौशल को 'छड़ी' करने का एक सिद्ध तरीका है। - -**✍️ हमारे लेखकों** जेन लूपर, स्टीफन हॉवेल, फ्रांसेस्का लाज़ेरी, टोमोमी इमुरा, कैसी ब्रेवियू, दिमित्री सोशनिकोव, क्रिस नोरिंग, अनिर्बान मुखर्जी, ओरनेला अल्टुनियन और एमी बॉयड को हार्दिक धन्यवाद। - -**🎨 हमारे चित्रकारों** तोमोमी इमुरा, दासानी मदिपल्ली और जेन लूपर को भी धन्यवाद - -**🙏 हमारे Microsoft छात्र राजदूत लेखकों, समीक्षकों और सामग्री योगदानकर्ताओं के लिए विशेष धन्यवाद**, विशेष रूप से रिषित डागली, मुहम्मद साकिब खान इनान, रोहन राज, अलेक्जेंड्रू पेट्रेस्कु, अभिषेक जायसवाल, नवरीन तबस्सुम, इओन समुइला, और स्निग्धा अग्रवाल - -**🤩 हमारे R पाठों के लिए Microsoft छात्र राजदूत एरिक वंजाउ का अतिरिक्त आभार!** - ---- - -# शुरू करना - -**विद्यार्थी**, इस पाठ्यक्रम का उपयोग करने के लिए, संपूर्ण रेपो को अपने स्वयं के गिटहब खाते में फोर्क करें और अभ्यास स्वयं या समूह के साथ पूरा करें: - -- प्री-लेक्चर क्विज से शुरुआत करें। -- व्याख्यान पढ़ें और गतिविधियों को पूरा करें, प्रत्येक ज्ञान जांच पर रुकें और प्रतिबिंबित करें। -- समाधान कोड चलाने के बजाय पाठों को समझकर प्रोजेक्ट बनाने का प्रयास करें; हालांकि वह कोड प्रत्येक परियोजना-उन्मुख पाठ में `/ समाधान` फ़ोल्डर में उपलब्ध है। -- व्याख्यान के बाद प्रश्नोत्तरी लें। -- चुनौती को पूरा करें। -- असाइनमेंट पूरा करें। -- एक पाठ समूह पूरा करने के बाद, [चर्चा बोर्ड](https://github.com/microsoft/ML-For-Beginners/discussions) पर जाएँ और उपयुक्त PAT रूब्रिक भरकर "ज़ोर से सीखें"। एक 'पीएटी' एक प्रगति आकलन उपकरण है जो एक रूब्रिक है जिसे आप अपने सीखने को आगे बढ़ाने के लिए भरते हैं। आप अन्य पीएटी पर भी प्रतिक्रिया कर सकते हैं ताकि हम एक साथ सीख सकें। - -> आगे के अध्ययन के लिए, हम इन [माइक्रोसॉफ्ट लर्न](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) मॉड्यूल और सीखने के रास्तों का अनुसरण करने की सलाह देते हैं।. - -**शिक्षक**, हमारे पास [कुछ सुझाव शामिल हैं](../for-teachers.md) इस पाठ्यक्रम का उपयोग कैसे करें। ---- - -## टीम से मिलो - - - -[![Promo video](../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -**Gif by** [मोहित जैसल](https://linkedin.com/in/mohitjaisal) - -> 🎥 परियोजना और इसे बनाने वाले लोगों के बारे में वीडियो के लिए ऊपर की छवि पर क्लिक करें! ---- - -## शिक्षा शास्त्र - -इस पाठ्यक्रम का निर्माण करते समय हमने दो शैक्षणिक सिद्धांतों को चुना है: यह सुनिश्चित करना कि यह व्यावहारिक रूप से **परियोजना-आधारित** है और इसमें **लगातार प्रश्नोत्तरी** शामिल हैं। इसके अलावा, इस पाठ्यक्रम में एक समान **थीम** है जो इसे एकता प्रदान करता है। - -यह सुनिश्चित करके कि सामग्री परियोजनाओं के साथ संरेखित होती है, छात्रों के लिए प्रक्रिया को और अधिक आकर्षक बनाया जाता है और अवधारणाओं के प्रतिधारण को बढ़ाया जाएगा। इसके अलावा, कक्षा से पहले एक कम-दांव प्रश्नोत्तरी छात्र के विषय को सीखने के इरादे को निर्धारित करती है, जबकि कक्षा के बाद दूसरी प्रश्नोत्तरी आगे प्रतिधारण सुनिश्चित करती है। इस पाठ्यक्रम को लचीला और मजेदार बनाने के लिए डिज़ाइन किया गया था और इसे पूर्ण या आंशिक रूप से लिया जा सकता है। परियोजनाएं छोटी शुरू होती हैं और 12-सप्ताह के चक्र के अंत तक तेजी से जटिल हो जाती हैं। इस पाठ्यक्रम में एमएल के वास्तविक-विश्व अनुप्रयोगों पर एक पोस्टस्क्रिप्ट भी शामिल है, जिसका उपयोग अतिरिक्त क्रेडिट के रूप में या चर्चा के आधार के रूप में किया जा सकता है। - -> हमारी [आचार संहिता](../CODE_OF_CONDUCT.md), [योगदान](../CONTRIBUTING.md), और [अनुवाद](../TRANSLATIONS.md) दिशानिर्देश खोजें। हम आपकी रचनात्मक प्रतिक्रिया का स्वागत करते हैं! - -## प्रत्येक पाठ में शामिल हैं: - -- वैकल्पिक स्केचनोट -- वैकल्पिक पूरक वीडियो -- पूर्व व्याख्यान वार्मअप प्रश्नोत्तरी -- लिखित पाठ -- प्रोजेक्ट-आधारित पाठों के लिए, प्रोजेक्ट बनाने के तरीके के बारे में चरण-दर-चरण मार्गदर्शिका -- ज्ञान जांच -- एक चुनौती -- पूरक पठन -- कार्यभार -- व्याख्यान के बाद प्रश्नोत्तरी - -> **भाषाओं के बारे में एक नोट**: ये पाठ मुख्य रूप से पायथन में लिखे गए हैं, लेकिन कई आर में भी उपलब्ध हैं। एक आर पाठ को पूरा करने के लिए, `/ समाधान` फ़ोल्डर में जाएं और आर पाठ देखें। उनमें एक .rmd एक्सटेंशन शामिल है जो एक **R मार्कडाउन** फ़ाइल का प्रतिनिधित्व करता है जिसे केवल `कोड चंक्स` (आर या अन्य भाषाओं के) के एम्बेडिंग के रूप में परिभाषित किया जा सकता है और एक `वाईएएमएल हेडर` (जो इस तरह के आउटपुट को प्रारूपित करने का मार्गदर्शन करता है) पीडीएफ के रूप में) एक `मार्कडाउन दस्तावेज़` में। जैसे, यह डेटा विज्ञान के लिए एक अनुकरणीय संलेखन ढांचे के रूप में कार्य करता है क्योंकि यह आपको अपने कोड, इसके आउटपुट और आपके विचारों को मार्कडाउन में लिखने की अनुमति देकर आपको संयोजित करने की अनुमति देता है। इसके अलावा, आर मार्कडाउन दस्तावेजों को पीडीएफ, एचटीएमएल या वर्ड जैसे आउटपुट स्वरूपों में प्रस्तुत किया जा सकता है। - -> **क्विज़ के बारे में एक नोट**: सभी क्विज़ शामिल हैं [इस ऐप में](https://gray-sand-07a10f403.1.azurestaticapps.net/), प्रत्येक तीन प्रश्नों के कुल 52 क्विज़ के लिए। वे पाठों के भीतर से जुड़े हुए हैं लेकिन प्रश्नोत्तरी ऐप को स्थानीय रूप से चलाया जा सकता है; `क्विज़-ऐप` फ़ोल्डर में दिए गए निर्देशों का पालन करें। - -| पाठ संख्या | विषय | पाठ समूहन | सीखने के मकसद | जुड़ा हुआ पाठ | लेखक | -| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | -| 01 | मशीन लर्निंग का परिचय | [परिचय](../1-Introduction/README.md) | मशीन लर्निंग के पीछे की बुनियादी अवधारणाओं को जानें | [पाठ](../1-Introduction/1-intro-to-ML/README.md) | मुहम्मद | -| 02 | मशीन लर्निंग का इतिहास | [परिचय](../1-Introduction/README.md) | इस क्षेत्र में अंतर्निहित इतिहास को जानें | [पाठ](../1-Introduction/2-history-of-ML/README.md) | जेन और एमी | -| 03 | निष्पक्षता और मशीन लर्निंग | [परिचय](../1-Introduction/README.md) | निष्पक्षता के आसपास कौन से महत्वपूर्ण दार्शनिक मुद्दे हैं जिन पर छात्रों को एमएल मॉडल बनाते और लागू करते समय विचार करना चाहिए? | [पाठ](../1-Introduction/3-fairness/README.md) | तोमोमी | -| 04 | मशीन सीखने की तकनीक | [परिचय](../1-Introduction/README.md) | एमएल शोधकर्ता एमएल मॉडल बनाने के लिए किन तकनीकों का उपयोग करते हैं? | [पाठ](../1-Introduction/4-techniques-of-ML/README.md) | क्रिस और जेन | -| 05 | प्रतिगमन का परिचय | [रिग्रेशन](../2-Regression/README.md)| रिग्रेशन मॉडल के लिए पायथन और स्किकिट-लर्न के साथ शुरुआत करें |
          • [Python](../2-Regression/1-Tools/README.md)
          • [R](../2-Regression/1-Tools/solution/R/lesson_1-R.ipynb )
          |
          • जेन
          • एरिक वंजाउ
          | -| 06 | उत्तर अमेरिकी कद्दू की कीमतें 🎃 | [रिग्रेशन](../2-Regression/README.md) | एमएल की तैयारी में डेटा को विज़ुअलाइज़ और साफ़ करें |
          • [Python](../2-Regression/2-Data/README.md)
          • [R](../2-Regression/2-Data/solution/R/lesson_2-R.ipynb )
          |
          • जेन
          • एरिक वंजाउ
          | -| 07 | उत्तर अमेरिकी कद्दू की कीमतें 🎃 | [रिग्रेशन](../2-Regression/README.md) | रैखिक और बहुपद प्रतिगमन मॉडल बनाएं |
          • [Python](../2-Regression/3-Linear/README.md)
          • [R](../2-Regression/3-Linear/solution/R/lesson_3-R.ipynb) )
          |
          • जेन
          • एरिक वंजाउ
          | -| 08 | उत्तर अमेरिकी कद्दू की कीमतें 🎃 | [रिग्रेशन](../2-Regression/README.md) | लॉजिस्टिक रिग्रेशन मॉडल बनाएं |
          • [Python](../2-Regression/4-Logistic/README.md)
          • [R](../2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb )
          |
          • जेन
          • एरिक वंजाउ
          | -| 09 | एक वेब ऐप | [वेब ऐप](../3-Web-App/README.md) | अपने प्रशिक्षित मॉडल का उपयोग करने के लिए एक वेब ऐप बनाएं | [पायथन](../3-Web-App/1-Web-App/README.md) | जेन | -| 10 | वर्गीकरण का परिचय | [वर्गीकरण](../4-Classification/README.md) | अपने डेटा को साफ़, तैयार और विज़ुअलाइज़ करें; वर्गीकरण का परिचय |
          • [पायथन](../4-Classification/1-Introduction/README.md)
          • [R](4-वर्गीकरण/1-परिचय/समाधान/R/lesson_10-R.ipynb ) |
            • जेन और कैसी
            • एरिक वंजाउ
            | -| 11 | स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 | [वर्गीकरण](../4-Classification/README.md) | क्लासिफायर का परिचय |
            • [पायथन](../4-Classification/2-Classifiers-1/README.md)
            • [R](../4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb) |
              • जेन और कैसी
              • एरिक वंजाउ
              | -| 12 | स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 | [वर्गीकरण](../4-Classification/README.md) | अधिक क्लासिफायर |
              • [पायथन](../4-Classification/3-Classifiers-2/README.md)
              • [R](../4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb) |
                • जेन और कैसी
                • एरिक वंजाउ
                | -| 13 | स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 | [वर्गीकरण](../4-Classification/README.md) | अपने मॉडल का उपयोग करके एक अनुशंसाकर्ता वेब ऐप बनाएं | [पायथन](../4-Classification/4-Applied/README.md) | जेन | -| 14 | क्लस्टरिंग का परिचय | [क्लस्टरिंग](../5-Clustering/README.md) | अपने डेटा को साफ़, तैयार और विज़ुअलाइज़ करें; क्लस्टरिंग का परिचय |
                • [पायथन](5-Clustering/1-Visualize/README.md)
                • [R](../5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) |
                  • जेन
                  • एरिक वंजाउ
                  | -| 15 | नाइजीरियाई संगीत स्वाद की खोज 🎧 | [क्लस्टरिंग](../5-Clustering/README.md) | K-मीन्स क्लस्टरिंग विधि का अन्वेषण करें |
                  • [पायथन](../5-Clustering/2-K-Means/README.md)
                  • [R](../5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb) |
                    • जेन
                    • एरिक वंजाउ
                    | -| 16 | प्राकृतिक भाषा प्रसंस्करण का परिचय ️ | [प्राकृतिक भाषा संसाधन](../6-NLP/README.md) | एक साधारण बॉट बनाकर एनएलपी के बारे में मूल बातें जानें | [पायथन](../6-NLP/1-Introduction-to-NLP/README.md) | स्टीफन | -| 17 | सामान्य एनएलपी कार्य ☕️ | [प्राकृतिक भाषा संसाधन](../6-NLP/README.md)) | भाषा संरचनाओं से निपटने के लिए आवश्यक सामान्य कार्यों को समझकर अपने एनएलपी ज्ञान को गहरा करें | [पायथन](../6-NLP/2-Tasks/README.md) | स्टीफन | -| 18 | अनुवाद और भावना विश्लेषण ♥️ | [प्राकृतिक भाषा संसाधन](../6-NLP/README.md)) | जेन ऑस्टेन के साथ अनुवाद और भावना विश्लेषण | [पायथन](../6-NLP/README.md) | स्टीफन | -| 19 | यूरोप के रोमांटिक होटल ♥️ | [प्राकृतिक भाषा संसाधन](../6-NLP/README.md)) | होटल समीक्षाओं के साथ भावनाओं का विश्लेषण 1 | [पायथन](../6-NLP/4-Hotel-Reviews-1/README.md) | स्टीफन | -| 20 | यूरोप के रोमांटिक होटल ♥️ | [प्राकृतिक भाषा संसाधन](../6-NLP/README.md)) | होटल समीक्षाओं के साथ भावनाओं का विश्लेषण 2 | [पायथन](../6-NLP/5-Hotel-Reviews-2/README.md) | स्टीफन | -| 21 | समय श्रृंखला पूर्वानुमान का परिचय | [समय श्रृंखला](../7-TimeSeries/README.md) | समय श्रृंखला पूर्वानुमान का परिचय | [पायथन](../7-TimeSeries/1-Introduction/README.md) | फ्रांसेस्का | -| 22 | ⚡️ विश्व शक्ति उपयोग ️ - अरिमा के साथ समय श्रृंखला पूर्वानुमान | [समय श्रृंखला](../7-TimeSeries/README.md) | ARIMA के साथ समय श्रृंखला पूर्वानुमान | [पायथन](../7-TimeSeries/2-ARIMA/README.md) | फ्रांसेस्का | -| 23 | ⚡️ विश्व शक्ति उपयोग ️ - एसवीआर के साथ समय श्रृंखला पूर्वानुमान | [समय श्रृंखला](../8-Reinforcement/README.md) | सपोर्ट वेक्टर रेजिस्टर के साथ टाइम सीरीज़ फोरकास्टिंग | [पायथन](../7-TimeSeries/3-SVR/README.md) | अनिर्बान | -| 24 | सुदृढीकरण सीखने का परिचय | [सुदृढीकरण सीखना](../8-Reinforcement/README.md)| क्यू-लर्निंग के साथ सुदृढीकरण सीखने का परिचय | [पायथन](../8-Reinforcement/1-QLearning/README.md) | दिमित्री | -| 25 | पीटर को भेड़िये से बचने में मदद करें! | [सुदृढीकरण सीखना](../8-Reinforcement/README.md) | सुदृढीकरण सीखने जिम | [पायथन](../8-Reinforcement/2-Gym/README.md) | दिमित्री | -| पोस्टस्क्रिप्ट | रीयल-वर्ल्ड एमएल परिदृश्य और अनुप्रयोग | [एमएल इन द वाइल्ड](../9-Real-World/README.md)| शास्त्रीय एमएल के दिलचस्प और खुलासा वास्तविक दुनिया के अनुप्रयोग | [पाठ](../9-Real-World/1-Applications/README.md) | टीम | - -## ऑफ़लाइन पहुंच - -आप [Docsify](https://docsify.js.org/#/) का उपयोग करके इस दस्तावेज़ को ऑफ़लाइन चला सकते हैं। इस रेपो को फोर्क करें, [इंस्टॉल Docsify](https://docsify.js.org/#/quickstart) अपनी स्थानीय मशीन पर, और फिर इस रेपो के रूट फ़ोल्डर में, `docsify सर्व करें` टाइप करें। वेबसाइट को आपके लोकलहोस्ट पर पोर्ट 3000 पर परोसा जाएगा: `localhost:3000`। - -## पीडीएफ़ - -लिंक के साथ पाठ्यक्रम का एक पीडीएफ खोजें [यहां](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf)। - -## मदद अपेक्षित! - -क्या आप अनुवाद में योगदान देना चाहेंगे? कृपया हमारे [अनुवाद दिशानिर्देश](TRANSLATIONS.md) पढ़ें और कार्यभार को प्रबंधित करने के लिए एक टेम्पलेट समस्या जोड़ें [यहां](https://github.com/microsoft/ML-For-Beginners/issues)। - -## अन्य पाठ्यक्रम - -हमारी टीम अन्य पाठ्यक्रम तैयार करती है! चेक आउट: - -- [शुरुआती के लिए वेब देव](https://aka.ms/webdev-beginners) -- [शुरुआती के लिए IoT](https://aka.ms/iot-beginners) -- [शुरुआती के लिए डेटा विज्ञान](https://aka.ms/datascience-beginners) \ No newline at end of file diff --git a/translations/README.it.md b/translations/README.it.md deleted file mode 100644 index 6825a4d7..00000000 --- a/translations/README.it.md +++ /dev/null @@ -1,124 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Machine Learning per Principianti - Un Programma di Studio - -> 🌍 Fai il giro del mondo mentre esploriamo il Machine Learning attraverso le varie culture 🌍 - -Gli Azure Cloud Advocates di Microsoft sono lieti di offrire un programma di studi di 12 settimane, articolato su 26 lezioni, interamente dedicato al **Machine Learning**. In questo programma di studi imparerai ciò che viene talvolta definito **machine learning classico**, usando principalmente Scikit-learn come libreria ed evitando il deep learning, che verrà coperto nel nostro prossimo programma di studi "AI per principianti". Queste lezioni si accoppiano anche con il programma di studi di prossima uscita "Data Science per principianti"! - -Gira il mondo insieme a noi mentre applichiamo queste classiche tecniche ai dati di diverse aree del mondo. Ogni lezione include quiz pre- e post- lezione, istruzioni scritte per completare la lezione, una soluzione, un compito ed altro ancora. Il nostro metodo di insegnamento basato sui progetti consente di imparare strada facendo, un metodo comprovato per memorizzare le nuove conoscenze. - -**✍️ Un grazie di cuore ai nostri autori** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Ornella Altunyan, e Amy Boyd - -**🎨 Grazie anche ai nostri illustratori** Tomomi Imura, Dasani Madipalli, e Jen Looper - -**🙏 Un ringraziamento speciale 🙏 agli autori di Microsoft Student Ambassador, ai revisori e ai collaboratori per i contenuti**, in particolare Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, e Snigdha Agarwal - -**🤩 Un grazie supplementare al Microsoft Student Ambassador Eric Wanjau per le nostre lezioni su R!** - ---- - -# Per Iniziare - -**Studenti**, per utilizzare questo programma di studi, eseguite il fork dell'intera repo sul vostro account GitHub e completate gli esercizi da soli o con un gruppo: - -- Iniziate con un quiz pre-lezione. -- Leggete la lezione e completate le attività, facendo una pausa e riflettendo ad ogni verifica della conoscenza. -- Provate a fare i progetti capendo le lezioni piuttosto che eseguendo il codice della soluzione; Quel codice è ad ogni modo disponibile nella cartella `/solution` presente in ogni lezione con progetto. -- Fate il quiz post-lezione. -- Completate la sfida. -- Completate il compito. -- Dopo il completamento di un gruppo di lezioni, visitate il [Forum di discussione](https://github.com/microsoft/ML-For-Beginners/discussions) e "learn out load" (imparare ad alta voce) riempiendo la rubrica Pat appropriata. 'PAT' è uno strumento di valutazione dei progressi che consiste in una rubrica da compilare per promuovere il proprio apprendimento. Si può anche interagire in altri PAT in modo da imparare assieme. - -> Per ulteriori approfondimenti, si raccomanda di sequire i seguenti moduli e percorsi di apprendimento [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). - -**Insegnanti**, sono stati [inclusi alcuni suggerimenti](for-teachers.md) su come usare questo programma di studi. - ---- - -## Incontrare la squadra - -[![Promo video](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -> 🎥 Clicca sull'immagine qui sopra per visualizzare un video sul progetto e su coloro che lo hanno creato! - ---- - -## Pedagogia - -Abbiamo scelto due principi pedagogici durante la creazione di questo programma di studi: assicurandoci che sia **basato su progetti** pratici e che includa **quiz frequenti**. Inoltre, questo programma di studi presenta un **tema** comune per conferirgli coerenza. - -Assicurandosi che il contenuto si allinei con i progetti, il processo è reso più coinvolgente per gli studenti e la conservazione dei concetti sarà aumentata. Inoltre, un quiz di poca difficoltà prima di una lezione imposta l'intenzione dello studente verso l'apprendimento di un argomento, mentre un secondo quiz dopo la lezione garantisce ulteriore ritenzione. Questo programma di studi è stato progettato per essere flessibile e divertente e può essere seguito in tutto o in parte. I progetti iniziano piccoli e diventano sempre più complessi entro la fine del ciclo di 12 settimane. Questo programma di studi include anche un poscritto sulle applicazioni del mondo reale di ML, che può essere utilizzata come credito extra o come base per la discussione. - -> Consultate Le linee guida del [Codice di Condotta](CODE_OF_CONDUCT.md), per [Collaborare](CONTRIBUTING.md), e [Tradurre](TRANSLATIONS.md). I feedback costruttivi saranno accolti con piacere! - -## Ogni lezione include: - -- uno sketchNote opzionale -- un video supplementare opzionale -- un quiz di riscaldamento pre-lezione -- una lezione scritta -- per le lezioni basate sulla creazione di un progetto, guide passo-passo su come farlo -- verifiche della conoscenza -- una sfida -- una lettura supplementare -- un compito -- un quiz post-lezione - -> **Una nota sui quiz**: Tutti i quiz sono contenuti [in questa app](https://gray-sand-07a10f403.1.azurestaticapps.net/), per un totale di 50 quiz con tre domande ciascuno. I link ai quiz sono presenti all'interno delle lezioni ma l'app può essere eseguita in locale seguendo le istruzioni contenute nella cartella `quiz-app`. - -| Numero Lezione | Argomento | Gruppo Lezioni | Obiettivi di Apprendimento | Lezioni Collegate | Autore | -| :-----------: | :--------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------: | :------------: | -| 01 | Introduzione a machine learning | [Introduzione](../1-Introduction/translations/README.it.md) | Apprendere i concetti di base dietro il machine learning | [lezione](../1-Introduction/1-intro-to-ML/translations/README.it.md) | Muhammad | -| 02 | La storia del machine learning | [Introduzione](../1-Introduction/translations/README.it.md) | Apprendere la storia alla base di questo campo | [lezione](../1-Introduction/2-history-of-ML/translations/README.it.md) | Jen e Amy | -| 03 | Equità e machine learning | [Introduzione](../1-Introduction/translations/README.it.md) | Quali sono gli importanti quesiti filosofici riguardanti l'etica che gli studenti dovrebbero prendere in considerazione quando si creano ed applicano i modelli di ML? | [lezione](../1-Introduction/3-fairness/translations/README.it.md) | Tomomi | -| 04 | Tecniche di machine learning | [Introduzione](../1-Introduction/translations/README.it.md) | Quali tecniche usano i ricercatori per costruire i modelli di ML? | [lezione](../1-Introduction/4-techniques-of-ML/translations/README.it.md) | Chris e Jen | -| 05 | Introduzione alla regressione | [Regressione](../2-Regression/translations/README.it.md) | Iniziare con Python e Scikit-learn per i modelli di regressione | [lezione](../2-Regression/1-Tools/translations/README.it.md) | Jen | -| 06 | Prezzi della zucca del Nord America 🎃 | [Regressione](../2-Regression/translations/README.it.md) | Visualizzare e pulire i dati in preparazione per ML | [lezione](../2-Regression/2-Data/translations/README.it.md) | Jen | -| 07 | Prezzi della zucca del Nord America 🎃 | [Regressione](../2-Regression/translations/README.it.md) | Costruire modelli di regressione lineare e polinomiale | [lezione](../2-Regression/3-Linear/translations/README.it.md) | Jen | -| 08 | Prezzi della zucca del Nord America 🎃 | [Regressione](../2-Regression/translations/README.it.md) | Costruire un modello di regressione logistica | [lezione](../2-Regression/4-Logistic/translations/README.it.md) | Jen | -| 09 | Una App web 🔌 | [App Web](../3-Web-App/translations/README.it.md) | Costruire un'App web per utilizzare il proprio modello addestrato | [lezione](../3-Web-App/1-Web-App/translations/README.it.md) | Jen | -| 10 | Introduzione alla classificazione | [Classificazione](../4-Classification/translations/README.it.md) | Pulire, preparare e visualizzare i dati; introduzione alla classificazione | [lezione](../4-Classification/1-Introduction/translations/README.it.md) | Jen e Cassie | -| 11 | Deliziose cucine asiatiche e indiane 🍜 | [Classificazione](../4-Classification/translations/README.it.md) | Introduzione ai classificatori | [lezione](../4-Classification/2-Classifiers-1/translations/README.it.md) | Jen e Cassie | -| 12 | Deliziose cucine asiatiche e indiane 🍜 | [Classificazione](../4-Classification/translations/README.it.md) | Ancora classificatori | [lezione](../4-Classification/3-Classifiers-2/translations/README.it.md) | Jen e Cassie | -| 13 | Deliziose cucine asiatiche e indiane 🍜 | [Classificazione](../4-Classification/translations/README.it.md) | Costruire un'App web di raccomandazione usando il proprio modello | [lezione](../4-Classification/4-Applied/translations/README.it.md) | Jen | -| 14 | Introduzione al clustering. | [Clustering](../5-Clustering/translations/README.it.md) | Pulire, preparare e visualizzare i dati; introduzione al clustering. | [lezione](../5-Clustering/1-Visualize/translations/README.it.md) | Jen | -| 15 | Esplorare i gusti musicali nigeriani 🎧 | [Clustering](../5-Clustering/translations/README.it.md) | Esplorare il metodo di clustering K-Means | [lezione](../5-Clustering/2-K-Means/translations/README.it.md) | Jen | -| 16 | Introduzione all'elaborazione naturale del linguaggio ☕️ | [Elaborazione del linguaggio naturale](../6-NLP/translations/README.it.md) | Imparare le basi di NLP costruendo un semplice bot | [lezione](../6-NLP/1-Introduction-to-NLP/translations/README.it.md) | Stephen | -| 17 | Attività NLP comuni ☕️ | [Elaborazione del linguaggio naturale](../6-NLP/translations/README.it.md) | Approfondire la conoscenza dell'NLP comprendendo i compiti comuni richiesti quando si tratta di gestire strutture linguistiche | [lezione](../6-NLP/2-Tasks/translations/README.it.md) | Stephen | -| 18 | Traduzione e analisi del sentimento ♥️ | [Elaborazione del linguaggio naturale](../6-NLP/translations/README.it.md) | Traduzione e analisi del sentimento con Jane Austen | [lezione](../6-NLP/3-Translation-Sentiment/translations/README.it.md) | Stephen | -| 19 | Hotel romantici dell'Europa ♥️ | [Elaborazione del linguaggio naturale](../6-NLP/translations/README.it.md) | Analisi del sentimento con le recensioni di hotel 1 | [lezione](../6-NLP/4-Hotel-Reviews-1/translations/README.it.md) | Stephen | -| 20 | Hotel romantici dell'Europa ♥️ | [Elaborazione del linguaggio naturale](../6-NLP/translations/README.it.md) | Analisi del sentimento con le recensioni di hotel 2 | [lezione](../6-NLP/5-Hotel-Reviews-2/translations/README.it.md) | Stephen | -| 21 | Introduzione alle previsioni delle serie temporali | [Time series](../7-TimeSeries/translations/README.it.md) | Introduzione alle previsioni delle serie temporali | [lezione](../7-TimeSeries/1-Introduction/translations/README.it.md) | Francesca | -| 22 | ⚡️ Utilizzo energetico mondiale ⚡️ - previsione di serie temporali con ARIMA | [Time series](../7-TimeSeries/translations/README.it.md) | Previsione di serie temporali con ARIMA | [lezione](../7-TimeSeries/2-ARIMA/translations/README.it.md) | Francesca | -| 23 | Introduzione al reinforcement learning | [Reinforcement learning](../8-Reinforcement/translations/README.it.md) | Introduzione al reinforcement learning con Q-Learning | [lezione](../8-Reinforcement/1-QLearning/translations/README.it.md) | Dmitry | -| 24 | Aiutare Pierino a evitare il lupo! 🐺 | [Reinforcement learning](../8-Reinforcement/translations/README.it.md) | Reinforcement learning Gym | [lezione](../8-Reinforcement/2-Gym/translations/README.it.md) | Dmitry | -| Poscritto | Scenari e applicazioni ML del mondo reale | [ML in natura](../9-Real-World/translations/README.it.md) | Applicazioni interessanti e rivelanti applicazioni di ML classico del mondo reale | [lezione](../9-Real-World/1-Applications/translations/README.it.md) | Team | - -## Accesso offline - -Si può seguire questa documentazione offline usando [Docsify](https://docsify.js.org/#/). Effettuate il fork di questa repo, [installare Docsify](https://docsify.js.org/#/quickstart) sul proprio dispositivo e poi digitare `docsify serve` nella cartella radice della repo. Il sito web sarà servito sulla porta 3000 di localhost: `localhost:3000`. - -## PDF - -È possibile trovare un pdf con il programma di studio ed i collegamenti [qui](pdf/readme.pdf). - -## Cercasi aiuto! - -Vorresti contribuire alla traduzione? Per favore leggi le [linee guida per la traduzione](TRANSLATIONS.md) e aggiungi una issue basata sul modello per gestire il carico di lavoro [qui](https://github.com/microsoft/ML-For-Beginners/issues/71). - -## Altri Programmi di Studi - -Il nostro team produce altri programmi di studi! Dai un'occhiata a: - -- [Sviluppo Web per Principianti](https://aka.ms/webdev-beginners) -- [IoT per Principianti](https://aka.ms/iot-beginners) -- [Data Science for Beginners](https://aka.ms/datascience-beginners) \ No newline at end of file diff --git a/translations/README.ja.md b/translations/README.ja.md deleted file mode 100644 index c7322da4..00000000 --- a/translations/README.ja.md +++ /dev/null @@ -1,121 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# 初心者のための機械学習 - カリキュラム - -> 🌍 世界の文化に触れながら機械学習を探求する旅 🌍 - -マイクロソフトの Azure Cloud Advocates では、12週間、24レッスンの**機械学習**に関するカリキュラムを提供しています。このカリキュラムでは、今後公開する予定の「初心者のためのAI」で扱う深層学習を避け、主に Scikit-learn ライブラリを使用した**古典的機械学習**と呼ばれるものについて学びます。同様に公開予定の「初心者のためのデータサイエンス」と合わせてご活用ください! - -世界各地のデータに古典的な手法を適用しながら、一緒に世界を旅してみましょう。各レッスンには、レッスン前後の小テストや、レッスンを完了するための指示・解答・課題などが含まれています。新しいスキルを「定着」させるものとして実証されているプロジェクトベースの教育法によって、構築しながら学ぶことができます。 - -**✍️ 著者の皆様に心から感謝いたします** Jen Looper さん、Stephen Howell さん、Francesca Lazzeri さん、Tomomi Imura さん、Cassie Breviu さん、Dmitry Soshnikov さん、Chris Noring さん、Ornella Altunyan さん、そして Amy Boyd さん - -**🎨 イラストレーターの皆様にも心から感謝いたします** Tomomi Imura さん、Dasani Madipalli さん、そして Jen Looper さん - -**🙏 Microsoft Student Ambassador の著者・査読者・コンテンツ提供者の皆様に特に感謝いたします 🙏** 特に、Rishit Dagli さん、Muhammad Sakib Khan Inan さん、Rohan Raj さん、Alexandru Petrescu さん、Abhishek Jaiswal さん、Nawrin Tabassum さん、Ioan Samuila さん、そして Snigdha Agarwal さん - ---- - -# はじめに - -**学生の皆さん**、このカリキュラムを利用するには、自分のGitHubアカウントにリポジトリ全体をフォークして、一人もしくはグループで演習を完了させてください。 - -- 講義前の小テストから始めてください。 -- 知識を確認するたびに立ち止まったり振り返ったりしながら、講義を読んで各アクティビティを完了させてください。 -- 解答のコードをただ実行するのではなく、レッスンを理解してプロジェクトを作成するようにしてください。なお、解答のコードは、プロジェクトに紐づく各レッスンの `/solution` フォルダにあります。 -- 講義後の小テストを受けてください。 -- チャレンジを完了させてください。 -- 課題を完了させてください。 -- レッスングループの完了後は [Discussionボード](https://github.com/microsoft/ML-For-Beginners/discussions) にアクセスし、適切なPAT表に記入することで「声に出して学習」してください。"PAT" とは Progress Assessment Tool(進捗評価ツール)の略で、学習を促進するために記入する表のことです。他のPATにリアクションすることもできるので、共に学ぶことが可能です。 - -> さらに学習を進める場合は、[Microsoft Learn](https://docs.microsoft.com/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) のラーニングパスに従うことをお勧めします。 - -**先生方**、このカリキュラムをどのように使用するか、[いくつかの提案](../for-teachers.md) があります。 - ---- - -## チームの紹介 - -[![プロモーションビデオ](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "プロモーションビデオ") - -> 🎥 上の画像をクリックすると、このプロジェクトと、プロジェクトを作った人たちについてのビデオを観ることができます! - ---- - -## 教育法 - -このカリキュラムを構築するにあたり、私たちは2つの教育方針を選びました。**プロジェクトベース**の体験と、**頻繁な小テスト**を含むことです。さらにこのカリキュラムには、まとまりを持たせるための共通の**テーマ**があります。 - -内容とプロジェクトとの整合性を保つことで、学生にとって学習プロセスがより魅力的になり、概念の定着度が高まります。さらに、授業前の軽い小テストは学生の学習意欲を高め、授業後の2回目の小テストはより一層の定着につながります。このカリキュラムは柔軟かつ楽しいものになるようデザインされており、すべて、もしくは一部を受講することが可能です。プロジェクトは小さなものから始まり、12週間の間に少しずつ複雑なものになっていきます。また、このカリキュラムには機械学習の実世界への応用に関するあとがきも含んでおり、追加の単位あるいは議論の題材として使用できます。 - -> [行動規範](../CODE_OF_CONDUCT.md)、[貢献](../CONTRIBUTING.md)、[翻訳](../TRANSLATIONS.md) のガイドラインをご覧ください。建設的なご意見をお待ちしております! - -## 各レッスンの内容 - -- オプションのスケッチノート -- オプションの補足ビデオ -- 講義前の小テスト -- 成文のレッスン -- プロジェクトベースのレッスンを行うため、プロジェクトの構築方法に関する段階的なガイド -- 知識の確認 -- チャレンジ -- 副読本 -- 課題 -- 講義後の小テスト - -> **小テストに関する注意**: すべての小テストは [このアプリ](https://gray-sand-07a10f403.1.azurestaticapps.net/) に含まれており、各3問からなる50個の小テストがあります。これらはレッスン内からリンクされていますが、アプリをローカルで実行することもできます。`quiz-app` フォルダ内の指示に従ってください。 - -| レッスン番号 | トピック | レッスングループ | 学習の目的 | 関連するレッスン | 著者 | -| :----------: | :------------------------------------------: | :----------------------------------------------------: | ------------------------------------------------------------------------------------------ | :---------------------------------------------------------------------: | :------------: | -| 01 | 機械学習への導入 | [導入](../1-Introduction/translations/README.ja.md) | 機械学習の基本的な概念を学ぶ | [レッスン](../1-Introduction/1-intro-to-ML/translations/README.ja.md) | Muhammad | -| 02 | 機械学習の歴史 | [導入](../1-Introduction/translations/README.ja.md) | この分野の背景にある歴史を学ぶ | [レッスン](../1-Introduction/2-history-of-ML/translations/README.ja.md) | Jen and Amy | -| 03 | 公平性と機械学習 | [導入](../1-Introduction/translations/README.ja.md) | 機械学習モデルを構築・適用する際に学生が考慮すべき、公平性に関する重要な哲学的問題は何か? | [レッスン](../1-Introduction/3-fairness/translations/README.ja.md) | Tomomi | -| 04 | 機械学習の手法 | [導入](../1-Introduction/translations/README.ja.md) | 機械学習の研究者はどのような手法でモデルを構築しているか? | [レッスン](1-Introduction/4-techniques-of-ML/README.md) | Chris and Jen | -| 05 | 回帰への導入 | [回帰](../2-Regression/README.md) | 回帰モデルをPythonと Scikit-learn で始める | [レッスン](../2-Regression/1-Tools/translations/README.ja.md) | Jen | -| 06 | 北米のカボチャの価格 🎃 | [回帰](../2-Regression/README.md) | 機械学習に向けてデータを可視化してクリーニングする | [レッスン](../2-Regression/2-Data/translations/README.ja.md) | Jen | -| 07 | 北米のカボチャの価格 🎃 | [回帰](../2-Regression/README.md) | 線形および多項式回帰モデルを構築する | [レッスン](2-Regression/3-Linear/README.md) | Jen | -| 08 | 北米のカボチャの価格 🎃 | [回帰](../2-Regression/README.md) | ロジスティック回帰モデルを構築する | [レッスン](../2-Regression/4-Logistic/README.md) | Jen | -| 09 | Webアプリ 🔌 | [Web アプリ](../3-Web-App/README.md) | 学習したモデルを使用するWebアプリを構築する | [レッスン](../3-Web-App/1-Web-App/README.md) | Jen | -| 10 | 分類への導入 | [分類](../4-Classification/README.md) | データをクリーニング・前処理・可視化する。分類への導入 | [レッスン](../4-Classification/1-Introduction/README.md) | Jen and Cassie | -| 11 | 美味しいアジア料理とインド料理 🍜 | [分類](../4-Classification/README.md) | 分類器への導入 | [レッスン](../4-Classification/2-Classifiers-1/README.md) | Jen and Cassie | -| 12 | 美味しいアジア料理とインド料理 🍜 | [分類](../4-Classification/README.md) | その他の分類器 | [レッスン](../4-Classification/3-Classifiers-2/README.md) | Jen and Cassie | -| 13 | 美味しいアジア料理とインド料理 🍜 | [分類](../4-Classification/README.md) | モデルを使用して推薦Webアプリを構築する | [レッスン](../4-Classification/4-Applied/README.md) | Jen | -| 14 | クラスタリングへの導入 | [クラスタリング](../5-Clustering/README.md) | データをクリーニング・前処理・可視化する。クラスタリングへの導入 | [レッスン](../5-Clustering/1-Visualize/README.md) | Jen | -| 15 | ナイジェリアの音楽的嗜好を探る 🎧 | [クラスタリング](../5-Clustering/README.md) | K-Means法を探る | [レッスン](../5-Clustering/2-K-Means/README.md) | Jen | -| 16 | 自然言語処理への導入 ☕️ | [自然言語処理](../6-NLP/README.md) | 単純なボットを構築して自然言語処理の基礎を学ぶ | [レッスン](../6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | 自然言語処理の一般的なタスク ☕️ | [自然言語処理](../6-NLP/README.md) | 言語構造を扱う際に必要となる一般的なタスクを理解することで、自然言語処理の知識を深める | [レッスン](../6-NLP/2-Tasks/README.md) | Stephen | -| 18 | 翻訳と感情分析 ♥️ | [自然言語処理](../6-NLP/README.md) | ジェーン・オースティンの翻訳と感情分析 | [レッスン](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | ヨーロッパのロマンチックなホテル ♥️ | [自然言語処理](../6-NLP/README.md) | ホテルのレビューの感情分析 1 | [レッスン](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | ヨーロッパのロマンチックなホテル ♥️ | [自然言語処理](../6-NLP/README.md) | ホテルのレビューの感情分析 2 | [レッスン](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | 時系列予測への導入 | [Time series](../7-TimeSeries/README.md) | 時系列予測への導入 | [レッスン](../7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ 世界の電力使用量 ⚡️ - ARIMAによる時系列予測 | [Time series](../7-TimeSeries/README.md) | ARIMAによる時系列予測 | [レッスン](../7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | 強化学習への導入 | [Reinforcement learning](../8-Reinforcement/README.md) | Q学習を使った強化学習への導入 | [レッスン](../8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 24 | ピーターが狼を避けるのを手伝ってください! 🐺 | [Reinforcement learning](../8-Reinforcement/README.md) | 強化学習ジム | [レッスン](../8-Reinforcement/2-Gym/README.md) | Dmitry | -| Postscript | 実世界の機械学習シナリオと応用 | [ML in the Wild](../9-Real-World/README.md) | 興味深くて意義のある、古典的機械学習の実世界での応用 | [レッスン](../9-Real-World/1-Applications/README.md) | Team | - -## オフラインアクセス - -[Docsify](https://docsify.js.org/#/) を使うと、このドキュメントをオフラインで実行できます。このリポジトリをフォークして、ローカルマシンに [Docsify をインストール](https://docsify.js.org/#/quickstart) し、このリポジトリのルートフォルダで `docsify serve` と入力してください。ローカルホストの3000番ポート、つまり `localhost:3000` でWebサイトが起動します。 - -## PDF - -カリキュラムのPDFへのリンクは [こちら](../pdf/readme.pdf)。 - -## ヘルプ募集! - -翻訳をしてみませんか?[翻訳ガイドライン](../TRANSLATIONS.md) をご覧の上、[こちら](https://github.com/microsoft/ML-For-Beginners/issues/71) でお知らせください。 - -## その他のカリキュラム - -私たちはその他のカリキュラムも提供しています!ぜひチェックしてみてください。 - -- [初心者のためのWeb開発](https://aka.ms/webdev-beginners) -- [初心者のためのIoT](https://aka.ms/iot-beginners) diff --git a/translations/README.ko.md b/translations/README.ko.md deleted file mode 100644 index 219b41fc..00000000 --- a/translations/README.ko.md +++ /dev/null @@ -1,124 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Machine Learning for Beginners (입문자를 위한 머신러닝) - 커리큘럼 - -> 🌍 세계의 문화로 머신러닝을 알아가면서 전 세계를 여행합니다 🌍 - -Microsoft의 Azure Cloud Advocates는 **Machine Learning**에 대한 모든 12-주, 24-강의 (하나 더!) 커리큘럼을 제공하게 된 것을 기쁘게 생각합니다. 이 교육 과정에서는 주로 Scikit-learn을 라이브러리로 사용하고 향후에 다룰 딥 러닝을 제외한 **classic machine learning**에 대해 배우게 됩니다. 본 수업과 '입문자를 위한 데이터 과학' 커리큘럼과 연계하여 학습해도 좋습니다. - -이러한 고전적인 기술을 세계 여러 지역의 데이터에 적용하는 동안 우리와 함께 세계 여행을 떠나보십시오. 각 레슨에는 예습 및 복습 퀴즈, 레슨을 완료하기 위한 서면 지침, 해결책 및 과제가 포함됩니다. 프로젝트 기반 교육학을 통해 새로운 기술을 익힐 수 있는 검증된 방법으로 학습 할 수 있습니다. - -**✍️ Hearty thanks to our authors** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Ornella Altunyan, and Amy Boyd - -**🎨 Thanks as well to our illustrators** Tomomi Imura, Dasani Madipalli, and Jen Looper - -**🙏 Special thanks 🙏 to our Microsoft Student Ambassador authors, reviewers and content contributors**, notably Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, and Snigdha Agarwal - -**🤩 Extra gratitude to Microsoft Student Ambassador Eric Wanjau for our R lessons!** - ---- - -# 시작하기 - -**학생**은, 이 커리큘럼을 사용하기 위해서, 전체 저장소를 자신의 GitHub 계정으로 포크하고 혼자 또는 그룹으로 같이 학습합니다: - -- 강의 전 퀴즈를 시작합니다. -- 강의를 읽고, 각 지식 점검에서 멈추고 습득해서 활동을 끝냅니다. -- 솔루션 코드를 실행하는 것보다 강의를 이해해서 프로젝트를 만들어봅니다. 해답 코드는 각 프로젝트-지향 강의 별 `/solution` 폴더에 위치합니다. -- 강의 후 퀴즈를 해봅니다. -- 도전을 끝내봅니다. -- 과제를 끝내봅니다. -- 강의 그룹을 끝내면, [Discussion board](https://github.com/microsoft/ML-For-Beginners/discussions)를 방문하고 적절한 PAT rubric를 채워서 "learn out loud" 합니다. 'PAT'은 심화적으로 배우려고 작성하는 rubric인 Progress Assessment 도구 입니다. 같이 배울 수 있게 다른 PAT으로도 할 수 있습니다. - -> 더 배우기 위해서, [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) 모듈과 학습 경로를 따르는 것을 추천합니다. - -**선생님**은, 이 커리큘럼의 사용 방법에 대해 [일부 제안사항](../for-teachers.md)이 있습니다. - ---- - -## Team 만나기 - -[![Promo video](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -> 🎥 프로젝트와 이 내용을 작성한 사람들에 대한 영상을 보려면 위 이미지를 클릭합니다! - ---- - -## 교육학 - -이 커리큘럼을 만드는 동안 2가지 교육학 원칙을 선택했습니다: **project-based**에서 실습하고 **frequent quizzes**가 포함되었는지 확인합니다. 추가적으로, 이 커리큘럼은 통합적으로 보이기 위해서 공통적인 **theme**가 있습니다. - -컨텐츠가 프로젝트와 맞게 유지되므로, 프로세스는 학생들이 더 끌리고 개념의 집중도가 높아집니다. 추가적으로, 강의 전 가벼운 퀴즈는 학생들이 공부에 집중하게 해주고, 강의 후 두 번째 퀴즈는 계속 집중하게 합니다. 이 커리큘럼은 유연하고 재밌게 디자인되었으며 다 배우거나 일부만 배울 수 있습니다. 프로젝트는 작게 시작해서 12주 사이클로 끝날 때까지 점점 복잡해집니다. 이 커리큘럼은 추가 크레딧이나 토론의 기초로 사용할 수 있는, ML의 현실에 적용한 postscript도 포함되어 있습니다. - -> [Code of Conduct](../CODE_OF_CONDUCT.md), [Contributing](../CONTRIBUTING.md)과, [Translation](../TRANSLATIONS.md) 가이드라인을 확인해봅니다. 건설적인 피드백을 환영합니다! - -## 각 강의에 포함된 내용: - -- 취사선택 스케치노트 -- 취사선택 추가 영상 -- 강의 전 준비 퀴즈 -- 강의 내용 -- 프로젝트-기반 강의라면, 프로젝트 제작 방식 step-by-step 지도 -- 지식 점검 -- 도전 -- 보충 내용 -- 과제 -- 강의 후 퀴즈 - -> **퀴즈 참고사항**: 모든 퀴즈는 [이 앱](https://gray-sand-07a10f403.1.azurestaticapps.net/)에 포함되어 있으며, 각각 3문제씩 총 50개의 퀴즈가 있습니다. 퀴즈 앱은 교육 과정과 연결되어 있지만, 원하는 경우 따로 퀴즈 앱을 실행할 수도 있습니다. 자세한 사항은 퀴즈 앱 폴더 내의 지침을 따르십시오. - - -| 강의 번호 | 토픽 | 강의 그룹 | 학습 목표 | 연결 강의 | 저자 | -| :-----------: | :--------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------: | :------------: | -| 01 | 머신러닝 소개 | [소개](../1-Introduction/translations/README.ko.md) | 머신러닝의 기초 컨셉을 배웁니다 | [강의](../1-Introduction/1-intro-to-ML/translations/README.ko.md) | Muhammad | -| 02 | 머신러닝의 역사 | [소개](../1-Introduction/translations/README.ko.md) | 이 필드의 역사를 배웁니다 | [강의](../1-Introduction/2-history-of-ML/translations/README.ko.md) | Jen and Amy | -| 03 | 공정과 머신러닝 | [소개](../1-Introduction/translations/README.ko.md) | 학생들이 ML 모델을 만들고 적용할 때 고려해야 할 공정과 관련한 중요 철학적인 이슈는 무엇인가요? | [강의](../1-Introduction/3-fairness/translations/README.ko.md) | Tomomi | -| 04 | 머신러닝의 기술 | [소개](../1-Introduction/translations/README.ko.md) | ML 연구원들이 ML 모델을 만들 때 사용할 기술은 무엇인가요? | [강의](../1-Introduction/4-techniques-of-ML/translations/README.ko.md) | Chris and Jen | -| 05 | regression 소개 | [Regression](../2-Regression/translations/README.ko.md) | regression 모델을 위한 Python과 Scikit-learn으로 시작합니다 | [강의](../2-Regression/1-Tools/translations/README.ko.md) | Jen | -| 06 | 북미의 호박 가격 🎃 | [Regression](../2-Regression/translations/README.ko.md) | ML을 준비하기 위해서 데이터를 시각화하고 정리합니다 | [강의](../2-Regression/2-Data/translations/README.ko.md) | Jen | -| 07 | 북미의 호박 가격 🎃 | [Regression](../2-Regression/translations/README.ko.md) | linear와 polynomial regression 모델을 만듭니다 | [강의](2-Regression/3-Linear/translations/README.ko.md) | Jen | -| 08 | 북미의 호박 가격 🎃 | [Regression](../2-Regression/translations/README.ko.md) | logistic regression 모델을 만듭니다 | [강의](../2-Regression/4-Logistic/translations/README.ko.md) | Jen | -| 09 | 웹 앱 🔌 | [웹 앱](../3-Web-App/translations/README.ko.md) | 훈련된 모델로 웹 앱을 만듭니다 | [강의](../3-Web-App/1-Web-App/translations/README.ko.md) | Jen | -| 10 | classification 소개 | [Classification](../4-Classification/translations/README.ko.md) | 데이터 정리, 준비, 그리고 시각화; classification을 소개합니다 | [강의](../4-Classification/1-Introduction/translations/README.ko.md) | Jen and Cassie | -| 11 | 맛있는 아시아와 인도 요리 🍜 | [Classification](../4-Classification/translations/README.ko.md) | classifier를 소개합니다 | [강의](../4-Classification/2-Classifiers-1/translations/README.ko.md) | Jen and Cassie | -| 12 | 맛있는 아시아와 인도 요리 🍜 | [Classification](../4-Classification/translations/README.ko.md) | 더 많은 classifier | [강의](../4-Classification/3-Classifiers-2/translations/README.ko.md) | Jen and Cassie | -| 13 | 맛있는 아시아와 인도 요리 🍜 | [Classification](../4-Classification/translations/README.ko.md) | 모델로 추천 웹 앱을 만듭니다 | [강의](../4-Classification/4-Applied/translations/README.ko.md) | Jen | -| 14 | clustering 소개 | [Clustering](../5-Clustering/translations/README.ko.md) | 데이터 정리, 준비, 그리고 시각화; clustering을 소개합니다 | [강의](../5-Clustering/1-Visualize/translations/README.ko.md) | Jen | -| 15 | 나이지리아인의 음악 취향 알아보기 🎧 | [Clustering](../5-Clustering/translations/README.ko.md) | K-Means clustering 메소드를 탐색합니다 | [강의](../5-Clustering/2-K-Means/translations/README.ko.md) | Jen | -| 16 | natural language processing 소개 ☕️ | [Natural language processing](../6-NLP/translations/README.ko.md) | 간단한 봇을 만들면서 NLP에 대하여 기본을 배웁니다 | [강의](../6-NLP/1-Introduction-to-NLP/translations/README.ko.md) | Stephen | -| 17 | 일반적인 NLP 작업 ☕️ | [Natural language processing](../6-NLP/translations/README.ko.md) | 언어 구조를 다룰 때 필요한 일반 작업을 이해하면서 NLP 지식을 깊게 팝니다 | [강의](../6-NLP/2-Tasks/translations/README.ko.md) | Stephen | -| 18 | 번역과 감정 분석 ♥️ | [Natural language processing](../6-NLP/translations/README.ko.md) | Jane Austen을 통한 번역과 감정 분석 | [강의](../6-NLP/3-Translation-Sentiment/translations/README.ko.md) | Stephen | -| 19 | 유럽의 로맨틱 호텔 ♥️ | [Natural language processing](../6-NLP/translations/README.ko.md) | 호텔 리뷰를 통한 감정 분석 1 | [강의](../6-NLP/4-Hotel-Reviews-1/translations/README.ko.md) | Stephen | -| 20 | 유럽의 로맨틱 호텔 ♥️ | [Natural language processing](../6-NLP/translations/README.ko.md) | 호텔 리뷰를 통한 감정 분석 2 | [강의](../6-NLP/5-Hotel-Reviews-2/translations/README.ko.md) | Stephen | -| 21 | time series forecasting 소개 | [Time series](../7-TimeSeries/translations/README.ko.md) | time series forecasting을 소개합니다 | [강의](../7-TimeSeries/1-Introduction/translations/README.ko.md) | Francesca | -| 22 | ⚡️ 세계 전력 사용량 ⚡️ - ARIMA의 time series forecasting | [Time series](../7-TimeSeries/translations/README.ko.md) | ARIMA의 Time series forecasting | [강의](../7-TimeSeries/2-ARIMA/translations/README.ko.md) | Francesca | -| 23 | reinforcement learning 소개 | [Reinforcement learning](../8-Reinforcement/translations/README.ko.md) | Q-Learning의 reinforcement learning을 소개합니다 | [강의](../8-Reinforcement/1-QLearning/translations/README.ko.md) | Dmitry | -| 24 | 늑대를 피하는 Peter 도와주기! 🐺 | [Reinforcement learning](../8-Reinforcement/translations/README.ko.md) | Gym에서 Reinforcement learning | [강의](../8-Reinforcement/2-Gym/translations/README.ko.md) | Dmitry | -| Postscript | 실생활 ML 시나리오와 애플리케이션 | [야생의 ML](../9-Real-World/translations/README.ko.md) | classical ML의 흥미롭게 드러나는 현실 애플리케이션 | [강의](../9-Real-World/1-Applications/translations/README.ko.md) | Team | - -## 오프라인 액세스 - -[Docsify](https://docsify.js.org/#/)를 사용하여 이 문서를 오프라인으로 실행할 수 있습니다. 이 repo를 포크하여 로컬 컴퓨터에 [Docsify (설치)](https://docsify.js.org/#/quickstart)를 설치한 다음 이 repo의 루트 폴더에 'docsify serve'를 입력하면 됩니다. 웹 사이트는 로컬 호스트의 포트 3000에서 제공됩니다: 'localhost:3000'. - -## PDF - -[여기](../pdf/readme.pdf) 링크를 통해 커리큘럼의 PDF를 찾아보십시오. - -## 도와주세요! - -번역에 기여하고 싶으신가요? [translation guidelines](../TRANSLATIONS.md)를 읽고 [here](https://github.com/microsoft/ML-For-Beginners/issues/71)에 입력해주세요. - -## 기타 커리큘럼 - -우리 팀에서는 다른 커리큘럼도 제작합니다! 확인해보세요! - -- [Web Dev for Beginners](https://aka.ms/webdev-beginners) -- [IoT for Beginners](https://aka.ms/iot-beginners) diff --git a/translations/README.ms.md b/translations/README.ms.md deleted file mode 100644 index 10432769..00000000 --- a/translations/README.ms.md +++ /dev/null @@ -1,129 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Pembelajaran Mesin untuk Pemula - Kurikulum - -> 🌍 Mengembara ke seluruh dunia semasa kita meneroka Pembelajaran Mesin melalui budaya dunia 🌍 - -Azure Cloud Advocates di Microsoft dengan senang hati menawarkan kurikulum 12-minggu, 24-pelajaran (ditambah satu!) Mengenai**Pembelajaran Mesin**. Dalam kurikulum ini, anda akan belajar tentang apa yang kadang-kadang disebut**pembelajaran mesin klasik**, menggunakan terutamanya Scikit-learning sebagai perpustakaan dan mengelakkan pembelajaran mendalam, yang dicakup dalam kurikulum 'AI for Beginners' yang akan datang. Pasangkan pelajaran ini dengan ['Data Science for Beginners' kurikulum](https://aka.ms/datascience-beginners) kami juga! - -Perjalanan bersama kami di seluruh dunia kerana kami menerapkan teknik klasik ini ke data dari banyak kawasan di dunia. Setiap pelajaran merangkumi kuiz sebelum dan sesudah pelajaran, arahan bertulis untuk menyelesaikan pelajaran, penyelesaian, tugasan dan banyak lagi. Pedagogi berasaskan projek kami membolehkan anda belajar sambil membina, cara yang terbukti untuk kemahiran baru 'melekat'. - -**✍️ Terima kasih kepada penulis kami**Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, dan Amy Boyd - -**🎨 Terima kasih juga kepada ilustrator kami**Tomomi Imura, Dasani Madipalli, dan Jen Looper - -**🙏 Terima kasih khas 🙏 kepada pengarang, pengulas dan penyumbang kandungan Duta Pelajar Microsoft kami**, terutamanya Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, dan Snigdha Agarwal - -**🤩 Terima kasih yang tidak terhingga kepada Duta Pelajar Microsoft Eric Wanjau atas pelajaran R kami!** - ---- - -# Bermula - -**Pelajar**, untuk menggunakan kurikulum ini, garpu seluruh repo ke akaun GitHub anda sendiri dan selesaikan latihan anda sendiri atau bersama kumpulan: - -- Mulakan dengan kuiz pra-kuliah. -- Baca kuliah dan selesaikan aktiviti, berhenti sebentar dan renungkan pada setiap pemeriksaan pengetahuan. -- Cuba buat projek dengan memahami pelajaran daripada menjalankan kod penyelesaian; namun kod itu terdapat di folder `/solution` dalam setiap pelajaran berorientasikan projek. -- Ikuti kuiz pasca kuliah. -- Selesaikan cabaran. -- Selesaikan tugasan. -- Setelah menyelesaikan kumpulan pelajaran, lawati [Discussion board](https://github.com/microsoft/ML-For-Beginners/discussions) dan "belajar dengan kuat" dengan mengisi rubrik PAT yang sesuai. 'PAT' adalah Alat Penilaian Kemajuan yang merupakan rubrik yang anda isi untuk melanjutkan pembelajaran anda. Anda juga boleh bertindak balas terhadap PAT lain sehingga kami dapat belajar bersama. - -> Untuk kajian lebih lanjut, kami mengesyorkan mengikuti [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) berikut dan jalan belajar. - -**Guru**, kami telah [memasukkan beberapa cadangan](for-teachers.md) mengenai cara menggunakan kurikulum ini. - - -## Jumpa pasukan - -[![Promo video](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -> 🎥 Klik gambar di atas untuk video mengenai projek dan orang yang membuatnya! - ---- - -## Pedagogi - -Kami telah memilih dua prinsip pedagogi semasa membina kurikulum ini: memastikan bahawa ia adalah **berasaskan projek** dan merangkumi **kuiz yang kerap**. Di samping itu, kurikulum ini mempunyai **tema umum** untuk memberikannya kesatuan. - -Dengan memastikan bahawa kandungan sesuai dengan projek, proses dibuat lebih menarik bagi pelajar dan pengekalan konsep akan ditambah. Di samping itu, kuiz bertaraf rendah sebelum kelas menetapkan niat pelajar untuk mempelajari sesuatu topik, sementara kuiz kedua selepas kelas memastikan pengekalan selanjutnya. Kurikulum ini dirancang agar fleksibel dan menyenangkan dan dapat diambil secara keseluruhan atau sebahagian. Projek bermula kecil dan menjadi semakin rumit pada akhir kitaran 12 minggu. Kurikulum ini juga termasuk skrip tulisan mengenai aplikasi ML dunia nyata, yang dapat digunakan sebagai kredit tambahan atau sebagai dasar perbincangan. - -> Cari garis panduan [Kod Tingkah Laku](CODE_OF_CONDUCT.md) kami, [Menyumbang](CONTRIBUTING.md), dan [Terjemahan](TRANSLATIONS.md). Kami mengalu-alukan maklum balas yang membina! - - -## Setiap pelajaran merangkumi: - -- nota lakaran pilihan -- video tambahan pilihan -- kuiz pemanasan sebelum kuliah -- pelajaran bertulis -- untuk pelajaran berasaskan projek, panduan langkah demi langkah bagaimana membina projek -- pemeriksaan pengetahuan -- satu cabaran -- bacaan tambahan -- tugasan -- kuiz pasca kuliah - - -> **Catatan mengenai bahasa**: Pelajaran ini terutama ditulis dalam Python, tetapi banyak juga tersedia dalam R. Untuk menyelesaikan pelajaran R, pergi ke folder `/solution` dan cari pelajaran R. Mereka termasuk pelanjutan .rmd yang mewakili fail **R Markdown** yang hanya dapat didefinisikan sebagai penyisipan `potongan kode '(dari R atau bahasa lain) dan` header YAML` (yang membimbing cara memformat output seperti PDF) dalam `Markdown document`. Oleh itu, ia berfungsi sebagai kerangka penulisan teladan bagi sains data kerana ia membolehkan anda menggabungkan kod, output dan pemikiran anda dengan membolehkan anda menuliskannya dalam Markdown. Lebih-lebih lagi, dokumen R Markdown dapat diberikan ke format output seperti PDF, HTML, atau Word. - -> **Catatan mengenai kuiz**: Semua kuiz terkandung [dalam aplikasi ini](https://gray-sand-07a10f403.1.azurestaticapps.net/), untuk 50 keseluruhan kuiz masing-masing dari tiga soalan. Mereka dihubungkan dari dalam pelajaran tetapi aplikasi kuiz dapat dijalankan secara tempatan; ikuti arahan dalam folder `quiz-app`. - - -| Nombor Pelajaran | Topik | Pengumpulan Pelajaran | Objektif Pembelajaran | Pautan Pembelajaran | Pengarang | -|:-------------:|:--------------------------------------------------------------:|:--------------------------------------------------------:|------------------------------------------------------------------------------------------------------------------------------------------|:-----------------------------------------------------------------------------------------------------------------------------------------------:|:---------------------------------------------------:| -| 01 | Pengenalan pembelajaran mesin | [Pengenalan](../1-Introduction/README.md) | Ketahui konsep asas di sebalik pembelajaran mesin | [Pelajaran](../1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | Sejarah pembelajaran mesin | [Pengenalan](../1-Introduction/README.md) | Ketahui sejarah yang mendasari bidang ini | [Pelajaran](../1-Introduction/2-history-of-ML/README.md) | Jen and Amy | -| 03 | Keadilan dan pembelajaran mesin | [Pengenalan](../1-Introduction/README.md) | Apakah masalah falsafah penting mengenai keadilan yang harus dipertimbangkan oleh pelajar semasa membina dan menggunakan model ML? | [Pelajaran](../1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | Teknik untuk pembelajaran mesin | [Pengenalan](../1-Introduction/README.md) | Teknik apa yang digunakan oleh penyelidik ML untuk membina model ML? | [Pelajaran](../1-Introduction/4-techniques-of-ML/README.md) | Chris and Jen | -| 05 | Pengenalan regresi | [Regresi](../2-Regression/README.md) | Mulakan dengan Python dan Scikit-belajar untuk model regresi |
                    • [Python](../2-Regression/1-Tools/README.md)
                    • [R](../2-Regression/1-Tools/solution/R/lesson_1-R.ipynb)
                    |
                    • Jen
                    • Eric Wanjau
                    | -| 06 | Harga labu Amerika Utara 🎃 | [Regresi](../2-Regression/README.md) | Visualisasikan dan bersihkan data sebagai persediaan untuk ML |
                    • [Python](../2-Regression/2-Data/README.md)
                    • [R](../2-Regression/2-Data/solution/R/lesson_2-R.ipynb)
                    |
                    • Jen
                    • Eric Wanjau
                    | -| 07 | Harga labu Amerika Utara 🎃 | [Regresi](../2-Regression/README.md) | Membina model regresi linear dan polinomial |
                    • [Python](../2-Regression/3-Linear/README.md)
                    • [R](../2-Regression/3-Linear/solution/R/lesson_3-R.ipynb)
                    |
                    • Jen
                    • Eric Wanjau
                    | -| 08 | Harga labu Amerika Utara 🎃 | [Regresi](../2-Regression/README.md) | Bina model regresi logistik |
                    • [Python](../2-Regression/4-Logistic/README.md)
                    • [R](../2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb)
                    |
                    • Jen
                    • Eric Wanjau
                    | -| 09 | Aplikasi Web 🔌 | [Aplikasi Web](../3-Web-App/README.md) | Bina aplikasi web untuk menggunakan model terlatih anda | [Python](../3-Web-App/1-Web-App/README.md) | Jen | -| 10 | Pengenalan klasifikasi | [Pengelasan](../4-Classification/README.md) | Bersihkan, persiapkan, dan gambarkan data anda; pengenalan klasifikasi |
                    • [Python](../4-Classification/1-Introduction/README.md)
                    • [R](../4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb) |
                      • Jen and Cassie
                      • Eric Wanjau
                      | -| 11 | Masakan Asia dan India yang lazat 🍜 | [Pengelasan](../4-Classification/README.md) | Pengenalan kepada pengelasan |
                      • [Python](../4-Classification/2-Classifiers-1/README.md)
                      • [R](../4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb) |
                        • Jen and Cassie
                        • Eric Wanjau
                        | -| 12 | Masakan Asia dan India yang lazat 🍜 | [Pengelasan](../4-Classification/README.md) | Lebih banyak pengelasan |
                        • [Python](../4-Classification/3-Classifiers-2/README.md)
                        • [R](../4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb) |
                          • Jen and Cassie
                          • Eric Wanjau
                          | -| 13 | Masakan Asia dan India yang lazat 🍜 | [Pengelasan](../4-Classification/README.md) | Bina aplikasi web cadangan menggunakan model anda | [Python](../4-Classification/4-Applied/README.md) | Jen | -| 14 | Pengenalan pengelompokan | [Penggabungan](../5-Clustering/README.md) | Bersihkan, persiapkan, dan gambarkan data anda; Pengenalan pengelompokan |
                          • [Python](5-Clustering/1-Visualize/README.md)
                          • [R](../5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) |
                            • Jen
                            • Eric Wanjau
                            | -| 15 | Meneroka Selera Muzik Nigeria 🎧 | [Penggabungan](../5-Clustering/README.md) | Terokai kaedah pengelompokan K-Means |
                            • [Python](../5-Clustering/2-K-Means/README.md)
                            • [R](../5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb) |
                              • Jen
                              • Eric Wanjau
                              | -| 16 | Pengenalan pemprosesan bahasa semula jadi ☕️ | [Pemprosesan bahasa semula jadi](../6-NLP/README.md) | Ketahui asas mengenai NLP dengan membina bot sederhana | [Python](../6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Tugas NLP biasa ☕️ | [Pemprosesan bahasa semula jadi](../6-NLP/README.md) | Memperdalam pengetahuan NLP anda dengan memahami tugas-tugas umum yang diperlukan ketika berurusan dengan struktur bahasa | [Python](../6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Analisis terjemahan dan sentimen ♥ ️| [Pemprosesan bahasa semula jadi](../6-NLP/README.md) | Terjemahan dan analisis sentimen dengan Jane Austen | [Python](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | Hotel romantis di Eropah ♥ ️| [Pemprosesan bahasa semula jadi](../6-NLP/README.md) | Analisis sentimen dengan ulasan hotel | [Python](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | Hotel romantis di Eropah ♥ ️| [Pemprosesan bahasa semula jadi](../6-NLP/README.md) | Analisis sentimen dengan ulasan hotel 2 | [Python](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | Pengenalan ramalan siri masa | [Siri masa](../7-TimeSeries/README.md) | Pengenalan ramalan siri masa | [Python](../7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ Penggunaan Kuasa Dunia ⚡️ - ramalan siri masa dengan ARIMA | [Siri masa](../7-TimeSeries/README.md) | Ramalan siri masa dengan ARIMA | [Python](../7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | World️ Penggunaan Kuasa Dunia ⚡️ - ramalan siri masa dengan SVR | [Siri masa](../7-TimeSeries/README.md) | Ramalan siri masa dengan Regressor Vektor Sokongan | [Python](../7-TimeSeries/3-SVR/README.md) | Anirban | -| 24 | Pengenalan pembelajaran pengukuhan | [Pembelajaran pengukuhan](../8-Reinforcement/README.md) | Pengenalan pembelajaran pengukuhan dengan Q-Learning | [Python](../8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 25 | Tolong Peter mengelakkan serigala! 🐺 | [Pembelajaran pengukuhan](../8-Reinforcement/README.md) | Gym pembelajaran pengukuhan | [Python](../8-Reinforcement/2-Gym/README.md) | Dmitry | -| Poskrip | Senario dan aplikasi ML Dunia Sebenar | [ML di Alam Nyata](../9-Real-World/README.md) | Aplikasi ML klasik yang menarik dan mendedahkan | [Pelajaran](../9-Real-World/1-Applications/README.md) | Pasukan | - -## Akses luar talian - -Anda boleh menjalankan dokumentasi ini di luar talian dengan menggunakan [Docsify](https://docsify.js.org/#/). 'Fork' repo ini, [pasang Docsify](https://docsify.js.org/#/quickstart) pada mesin tempatan anda, dan kemudian di folder root repo ini, ketik `docsify serve`. Laman web akan dilayan di port 3000 di localhost anda: `localhost: 3000`. - -## PDF - -Cari pdf kurikulum dengan pautan [di sini](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). - -## Pertolongan diperlukan! - -Adakah anda ingin menyumbang terjemahan? Sila baca [pedoman terjemahan](TRANSLATIONS.md) kami dan tambahkan input [di sini](https://github.com/microsoft/ML-For-Beginners/issues/71). - -## Kurikulum Lain - -Pasukan kami menghasilkan kurikulum lain! Lihat: - -- [Peranti Web untuk Pemula](https://aka.ms/webdev-beginners) -- [IoT untuk Pemula](https://aka.ms/iot-beginners) -- [Sains Data untuk Pemula](https://aka.ms/datascience-beginners) \ No newline at end of file diff --git a/translations/README.pt-br.md b/translations/README.pt-br.md deleted file mode 100644 index 1a55ea16..00000000 --- a/translations/README.pt-br.md +++ /dev/null @@ -1,123 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Machine Learning para Iniciantes - O Curso - -> 🌍 Viaje pelo mundo enquanto exploramos o Machine Learning através das culturas mundiais 🌍 - -Os Advocates do Azure Cloud da Microsoft têm o prazer de oferecer um curso de 12 semanas com 24 lições (mais uma!) sobre **Machine Learning**. Neste curso, você irá aprender o que às vezes chamamos de **machine learning clássico**, usando principalmente Scikit-learn como biblioteca e evitando deep learning, que será coberto no próximo curso 'IA para Iniciantes'. Combine também essas lições com o curso de [Data Science para Iniciantes](https://aka.ms/datascience-beginners)! - -Viaje conosco ao redor do mundo enquanto aplicamos essas técnicas clássicas a dados de muitas áreas do mundo. Cada lição inclui questionários pré e pós-aula, instruções escritas para completar a lição, uma solução, uma tarefa e muito mais. A nossa pedagogia baseada em projetos permite que você aprenda enquanto constrói, uma forma comprovada de "aderir" as novas habilidades. - -**✍️ sinceros agradecimentos aos nossos autores** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Ornella Altunyan, e Amy Boyd - -**🎨 Obrigado também aos nossos ilustradores** Tomomi Imura, Dasani Madipalli, e Jen Looper - -**🙏 Agradecimentos especiais 🙏 aos autores, revisores e colaboradores de conteúdo do Microsoft Student Ambassador**, notavelmente Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, e Snigdha Agarwal - -**🤩 Agradecimento extra ao Microsoft Student Ambassador, Eric Wanjau, por nossas aulas de R!** - ---- - -# Iniciando - -**Estudantes**, para usar este curso, faça um fork do nosso repositório para sua conta do GitHub e complete os exercícios de forma individual ou em grupo: - -- Comece com o questionário de pré-aula. -- Leia as aulas e conclua as atividades, pausando e refletindo a cada verificação de conhecimento. -- Tente criar os projetos compreendendo as lições ao invés de executar o código da solução; No entanto, esse código está disponível nas pastas `/solution` em cada lição que contenha um projeto. -- Faça o teste de pós-aula. -- Complete o desafio. -- Conclua a tarefa. -- Após concluir uma lição em grupo, visite o [Quadro de discussões](https://github.com/microsoft/ML-For-Beginners/discussions) e "aprenda em voz alta" preenchendo de forma apropriada a rubrica PAT. Um 'PAT' é uma ferramenta de avaliação de progresso que é uma rubrica que você preenche para promover seu aprendizado. Você também pode reagir a outros PATs para que possamos aprender juntos. - -> Para um estudo mais aprofundado, recomendamos seguir os módulos e percursos de aprendizagem da [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). - -**Professores**, [incluímos algumas sugestões](../for-teachers.md) em como usar este curso. - ---- - -## Conhece a equipe - -[![Video promo](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "Video promo") - -> 🎥 Clique na imagem acima para o vídeo sobre o projeto e as pessoas que o criaram! - ---- - -## Pedagogia - -Escolhemos dois princípios pedagógicos ao construir este curso: garantir que seja prático **baseado em projeto** e que inclua **questionários frequentes**. Além disso, este curso tem um **tema** comum para dar-lhe coesão. - -Ao garantir que o conteúdo esteja alinhado com os projetos, o processo torna-se mais envolvente para os estudantes e a retenção dos conceitos é aumentada. Além disso, um teste de baixo risco antes da aula define a intenção do estudante de aprender um tópico, enquanto que o segundo questionário após a aula garante maior retenção. Este curso foi projetado para ser flexível e divertido e pode ser realizado por completo ou parcialmente. Os projetos começam pequenos e tornam-se cada vez mais complexos ao final do ciclo de 12 semanas. Este curso também inclui um pós-escrito sobre aplicações de ML no mundo real, que pode ser usado como crédito extra ou como base para discussão. - -> Encontre as diretrizes do nosso [Código de Conduta](../CODE_OF_CONDUCT.md), [Contribuição](../CONTRIBUTING.md) e [Tradução](../TRANSLATIONS.md). Agradecemos seu feedback construtivo! - -## Cada aula inclui: - -- esboço opcional -- vídeo complementar opcional -- teste de aquecimento da pré-aula -- aula escrita -- para aulas baseadas em projetos, guias com passo a passo sobre como construir o projeto -- verificações de conhecimento -- um desafio -- leitura suplementar -- tarefa -- questionário pós-aula - -> **Uma nota sobre questionários**: Todos os questionários estão contidos [neste aplicativo](https://gray-sand-07a10f403.1.azurestaticapps.net/), para um total de 50 testes de três perguntas cada. Eles estão vinculados nas lições, mas o aplicativo de teste pode ser executado localmente; siga as instruções na pasta `quiz-app`. - -| Número da aula | Tópico | Agrupamento de Aulas | Objetivos de aprendizagem | Aula vinculada | Autor | -| :------------: | :-------------------------------------------------------------------: | :---------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------: | :----------: | -| 01 | Introdução ao machine learning | [Introdução](../1-Introduction/translations/README.pt-br.md) | Aprenda os conceitos básicos atrás do machine learning | [Aula](../1-Introduction/1-intro-to-ML/translations/README.pt-br.md) | Muhammad | -| 02 | A História de machine learning | [Introdução](../1-Introduction/translations/README.pt-br.md) | Aprenda a história subjacente desta área | [Aula](../1-Introduction/2-history-of-ML/translations/README.pt-br.md) | Jen e Amy | -| 03 | Equidade e aprendizado de máquina | [Introdução](../1-Introduction/translations/README.pt-br.md) | Quais são as questões filosóficas importantes sobre justiça que os alunos devem considerar ao construir e aplicar modelos de ML? | [Aula](../1-Introduction/3-fairness/translations/README.pt-br.md) | Tomomi | -| 04 | Técnicas para machine learning | [Introdução](../1-Introduction/translations/README.pt-br.md) | Quais técnicas os pesquisadores de ML usam para construir modelos de ML? | [Aula](../1-Introduction/4-techniques-of-ML/translations/README.pt-br.md) | Chris e Jen | -| 05 | Introdução à regressão | [Regressão](../2-Regression/translations/README.pt-br.md) | Comece a usar Python e Scikit-learn para modelos de regressão |
                              • [Python](2-Regression/1-Tools/translations/README.pt-br.md)
                              • [R](../2-Regression/1-Tools/solution/R/lesson_1-R.ipynb)
                              |
                              • Jen
                              • Eric Wanjau
                              | -| 06 | Preços das abóboras norte americanas 🎃 | [Regressão](../2-Regression/translations/README.pt-br.md) | Visualize e limpe os dados em preparação para o ML |
                              • [Python](../2-Regression/2-Data/translations/README.pt-br.md)
                              • [R](../2-Regression/2-Data/solution/R/lesson_2-R.ipynb)
                              |
                              • Jen
                              • Eric Wanjau
                              | -| 07 | Preços das abóboras norte americanas 🎃 | [Regressão](../2-Regression/translations/README.pt-br.md) | Construa modelos de regressão linear e polinomial |
                              • [Python](../2-Regression/3-Linear/translations/README.pt-br.md)
                              • [R](../2-Regression/3-Linear/solution/R/lesson_3-R.ipynb)
                              |
                              • Jen
                              • Eric Wanjau
                              | -| 08 | Preços das abóboras norte americanas 🎃 | [Regressão](../2-Regression/translations/README.pt-br.md) | Construa um modelo de regressão logística |
                              • [Python](../2-Regression/4-Logistic/translations/README.pt-br.md)
                              • [R](../2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb)
                              |
                              • Jen
                              • Eric Wanjau
                              | -| 09 | Uma Web App 🔌 | [Web App](../3-Web-App/translations/README.pt-br.md) | Crie um aplicativo web para usar seu modelo treinado | [Python](../3-Web-App/1-Web-App/translations/README.pt-br.md) | Jen | -| 10 | Introdução à classificação | [Classificação](../4-Classification/README.md) | Limpe, prepare e visualize seus dados; introdução à classificação |
                              • [Python](4-Classification/1-Introduction/README.md)
                              • [R](4-Classification/1-Introduction/solution/R/lesson_10-R.ipynb) |
                                • Jen e Cassie
                                • Eric Wanjau
                                | -| 11 | Deliciosas cozinhas asiáticas e indianas 🍜 | [Classificação](../4-Classification/README.md) | Introdução aos classificadores |
                                • [Python](4-Classification/2-Classifiers-1/README.md)
                                • [R](4-Classification/2-Classifiers-1/solution/R/lesson_11-R.ipynb) |
                                  • Jen e Cassie
                                  • Eric Wanjau
                                  | -| 12 | Deliciosas cozinhas asiáticas e indianas 🍜 | [Classificação](../4-Classification/README.md) | Mais classificadores |
                                  • [Python](4-Classification/3-Classifiers-2/README.md)
                                  • [R](4-Classification/3-Classifiers-2/solution/R/lesson_12-R.ipynb) |
                                    • Jen e Cassie
                                    • Eric Wanjau
                                    | -| 13 | Deliciosas cozinhas asiáticas e indianas 🍜 | [Classificação](../4-Classification/README.md) | Construa um aplicativo web de recomendação usando seu modelo | [Python](4-Classification/4-Applied/README.md) | Jen | -| 14 | Introdução ao clustering | [Clustering](../5-Clustering/README.md) | Limpe, prepare e visualize seus dados; Introdução ao clustering |
                                    • [Python](5-Clustering/1-Visualize/README.md)
                                    • [R](5-Clustering/1-Visualize/solution/R/lesson_14-R.ipynb) |
                                      • Jen
                                      • Eric Wanjau
                                      | -| 15 | Explorando Gostos Musicais Nigerianos 🎧 | [Clustering](../5-Clustering/README.md) | Explore o método de agrupamento K-Means |
                                      • [Python](5-Clustering/2-K-Means/README.md)
                                      • [R](5-Clustering/2-K-Means/solution/R/lesson_15-R.ipynb) |
                                        • Jen
                                        • Eric Wanjau
                                        | -| 16 | Introdução processamento de linguagem natural ☕️ | [Processamento de linguagem natural](../6-NLP/README.md) | Aprenda o básico sobre PNL criando um bot simples | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Tarefas NLP comuns ☕️ | [Processamento de linguagem natural](../6-NLP/README.md) | Aprofunde seu conhecimento de PNL entendendo as tarefas comuns exigidas ao lidar com estruturas de linguagem | [Python](6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Tradução e análise de sentimento ♥️ | [Processamento de linguagem natural](../6-NLP/README.md) | Tradução e análise de sentimento com Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | Hotéis românticos da Europa ♥️ | [Processamento de linguagem natural](../6-NLP/README.md) | Análise de sentimento com avaliações de hotéis, 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | Hotéis românticos da Europa ♥️ | [Processamento de linguagem natural](../6-NLP/README.md) | Análise de sentimento com avaliações de hotéis, 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | Introdução à previsão de séries temporais | [Séries temporais](../7-TimeSeries/README.md) | Introdução à previsão de séries temporais | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ Uso de Energia Mundial ⚡️ - previsão de série temporal com ARIMA | [Séries temporais](../7-TimeSeries/README.md) | Previsão de séries temporais com ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | Introdução à aprendizagem por reforço | [Aprendizagem por reforço](../8-Reinforcement/README.md) |Introdução à aprendizagem por reforço com Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 24 | Ajuda o Pedro a evitar do lobo! 🐺 | [Aprendizagem por reforço](../8-Reinforcement/README.md) | Ginásio de aprendizagem por reforço | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | -| Postscript | Cenários e aplicações de ML do mundo real | [ML na natureza](../9-Real-World/README.md) | Aplicações interessantes e reveladoras do mundo real do ML clássico | [Aula](../9-Real-World/1-Applications/README.md) | Equipe | - -## Acesso Offline - -Você pode executar esta documentação offline usando [Docsify](https://docsify.js.org/#/). Faça um fork deste repositório, [instale o Docsify](https://docsify.js.org/#/quickstart) em sua máquina local e, em seguida, na pasta raiz deste repositório, digite `docsify serve`. O site será servido na porta 3000 em seu localhost: `localhost: 3000`. - -## PDFs - -Encontre o pdf do curso com os links [aqui](../pdf/readme.pdf) - -## Procura-se ajuda! - -Você gostaria de contribuir com uma tradução? Leia nossas [diretrizes de tradução](../TRANSLATIONS.md) e adicione informações [aqui](https://github.com/microsoft/ML-For-Beginners/issues/71) - -## Outros Cursos - -Nossa equipe produziu outros cursos! Confira: - -- [Web Dev para Iniciantes](https://aka.ms/webdev-beginners) -- [IoT para Iniciantes](https://aka.ms/iot-beginners) diff --git a/translations/README.pt.md b/translations/README.pt.md deleted file mode 100644 index 5616eb39..00000000 --- a/translations/README.pt.md +++ /dev/null @@ -1,121 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Machine Learning para Principiantes - Um Curso - -> 🌍 Viaja pelo mundo enquanto exploramos o Machine Learning através das culturas mundiais 🌍 - -Os Azure Cloud Advocates da Microsoft têm o gosto de oferecer um curso de 24 lições com a duração 12 semanas sobre **Machine Learning**. Neste curso, irás aprender o que algumas vezes chamamos de **machine learning clássico**, usando principalmente Scikit-learn como biblioteca e evitando deep learning, que será coberto no próximo curso 'IA para Iniciantes'. Combina também estas lições com o nosso próximo curso de 'Data Science para Iniciantes'. - -Viaja connosco ao redor do mundo enquanto aplicamos estas técnicas clássicas a dados de muitas áreas do mundo. Cada aula inclui questionários pré- e pós-aula, instruções escritas para completar a aula, uma solução, uma tarefa e muito mais. A nossa pedagogia baseada em projetos permite que aprendas enquanto constróis, uma forma comprovada de "colar"" as novas habilidades. - -**✍️ Muito obrigado aos nossos autores** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Ornella Altunyan, e Amy Boyd - -**🎨 Obrigado também aos nossos ilustradores** Tomomi Imura, Dasani Madipalli, e Jen Looper - -**🙏 Agradecimento especial 🙏 aos nossos autores Microsoft Student Ambassador, revisores e contribuidores**, notavelmente Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, e Snigdha Agarwal - ---- - -# Começando - -**Estudantes**, para usar este curso, faz fork no nosso repositório para a tua conta GitHub e completa os exercícios individualmente ou em grupo: - -- Começa com o teste pré-aula -- Lê a aula e completa as atividades, fazendo uma pausa e refletindo a cada verificação de conhecimento. -- Tenta criar os projetos compreendedo as aulas ao invés de executar o código da solução. No entanto, esse código está disponível nas pastas `/solution` em cada aula que contenha um projeto. -- Faz o teste pós-aula -- Completa um desafio -- Conclui a tarefa -- Depois de concluir uma aula em grupo, visita o [Quadro de discussão](https://github.com/microsoft/ML-For-Beginners/discussions) e "aprende em voz alta" preenchendo a rúbrica PAT apropriada. Um 'PAT' é uma ferramenta de avaliação de progresso que é uma rúbrica que preenches para promover a tua aprendizagem. Também podes reagir a outros PATs para que possamos aprender juntos. - -> Para um estudo mais aprofundado, recomendamos que sigas estes [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) módulos e percursos de aprendizagem. - -**Professores**, [incluímos algumas sugestões](../for-teachers.md) em como usar este curso. - ---- - -## Conhece a equipa - -[![Promo video](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -> 🎥 Clica na imagem acima para um vídeo sobre o projeto e as pessoas que o criaram! - ---- - -## Pedagogia - -Escolhemos dois princípios pedagógicos ao construir este curso: garantindo que seja um trabalho prático **baseado em projeto** e isso inclui **testes frequentes**. Adicionalmente, este currículo tem um **tema** comum para dar-lhe coesão. - -Ao garantir que o conteúdo esteja alinhado com os projetos, o processo torna-se mais envolvente para os estudantes e a retenção dos conceitos é aumentada. Além disso, um teste de baixo risco antes da aula define a intenção do estudante de aprender um tópico, enquanto que um segundo teste após a aula garante maior retenção. Este curso foi projetado para ser flexível e divertido e pode ser realizado no seu todo ou parcialmente. Os projetos começam pequenos e tornam-se cada vez mais complexos no final do ciclo de 12 semanas. Este currículo também inclui um pós-escrito sobre aplicações reais de ML, que pode ser usado como crédito extra ou como base para discussão. - -> Encontra o nosso [Código de Conduta](../CODE_OF_CONDUCT.md), diretrizes de [Contribuição](../CONTRIBUTING.md), e [Tradução](../TRANSLATIONS.md). Agradecemos o teu feedback construtivo! - -## Cada aula inclui: - -- esboço opcional -- vídeo suplementar opcional -- teste de aquecimento pré-aula -- aula escrita -- para aulas baseadas em projetos, guias passo a passo sobre como contruir o projeto -- verificações de conhecimento -- um desafio -- leitura suplementar -- tarefa -- teste pós-aula - -> **Uma nota sobre testes**: Podes encontrar todos os testes [nesta app](https://gray-sand-07a10f403.1.azurestaticapps.net/), para um total de 50 testes de 3 perguntas cada. Eles estão vinculados às aulas, mas a aplicação do teste pode ser executada localmente; segue as intruções na pasta `quiz-app`. - -| Número de aula | Tópico | Agrupamento de Aulas | Objetivos de aprendizagem | Aula vinculada | Autor | -| :------------: | :-------------------------------------------------------------------: | :---------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------------ | :-------------------------------------------------: | :----------: | -| 01 | Introdução ao machine learning | [Introdução](../1-Introduction/README.md) | Aprender os conceitos básicos atrás do machine learning | [aula](../1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | A História de machine learning | [Introdução](../1-Introduction/README.md) | Aprender a história subjacente nesta área | [aula](../1-Introduction/2-history-of-ML/README.md) | Jen e Amy | -| 03 | Justiça e machine learning | [Introdução](../1-Introduction/README.md) | Quais são as questões filosóficas importantes sobre justiça que os estudantes devem considerar ao construir e aplicar modelos de ML? | [aula](../1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | Técnicas para machine learning | [Introdução](../1-Introduction/README.md) | Que técnicas os investigadores de ML usam para construir modelos de ML? | [aula](../1-Introduction/4-techniques-of-ML/README.md) | Chris e Jen | -| 05 | Introdução à regressão | [Regressão](../2-Regression/README.md) | Começando a usar Python e Scikit-learn para modelos de regressão | [aula](../2-Regression/1-Tools/README.md) | Jen | -| 06 | Preços das abóboras norte americanas 🎃 | [Regressão](../2-Regression/README.md) | Visualizar e limpar os dados em preparação para o ML | [aula](../2-Regression/2-Data/README.md) | Jen | -| 07 | Preços das abóboras norte americanas 🎃 | [Regressão](../2-Regression/README.md) | Construir modelos de regressão linear e polinomial | [aula](../2-Regression/3-Linear/README.md) | Jen | -| 08 | Preços das abóboras norte americanas 🎃 | [Regressão](../2-Regression/README.md) | Construir um modelo de regressão logística | [aula](../2-Regression/4-Logistic/README.md) | Jen | -| 09 | Uma Web App 🔌 | [Web App](../3-Web-App/README.md) | Criar uma web app para usar o teu modelo treinado | [aula](../3-Web-App/1-Web-App/README.md) | Jen | -| 10 | Introdução à classificação | [Classificação](../4-Classification/README.md) | Limpar, preparar e visualizar os dados; introdução à classificação | [aula](../4-Classification/1-Introduction/README.md) | Jen e Cassie | -| 11 | Deliciosas cozinhas asiáticas e indianas 🍜 | [Classificação](../4-Classification/README.md) | Introdução aos classificadores | [aula](../4-Classification/2-Classifiers-1/README.md) | Jen e Cassie | -| 12 | Deliciosas cozinhas asiáticas e indianas 🍜 | [Classificação](../4-Classification/README.md) | Mais classificadores | [aula](../4-Classification/3-Classifiers-2/README.md) | Jen e Cassie | -| 13 | Deliciosas cozinhas asiáticas e indianas 🍜 | [Classificação](../4-Classification/README.md) | Criar uma web app de recomendação usando o teu modelo | [aula](../4-Classification/4-Applied/README.md) | Jen | -| 14 | Introdução ao clustering | [Clustering](../5-Clustering/README.md) | Limpar, preparar e visualizar os dados; Introdução ao clustering | [aula](../5-Clustering/1-Visualize/README.md) | Jen | -| 15 | Explorando Gostos Musicais Nigerianos 🎧 | [Clustering](../5-Clustering/README.md) | Explorar o método de agrupamento K-Means | [aula](../5-Clustering/2-K-Means/README.md) | Jen | -| 16 | Introdução processamento de linguagem natural ☕️ | [Processamento de linguagem natural](../6-NLP/README.md) | Aprender o básico sobre NLP construindo um bot simples | [aula](../6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Tarefas NLP comuns ☕️ | [Processamento de linguagem natural](../6-NLP/README.md) | Aprofundar o conhecimento de NLP percebendo tarefas comuns exigidas ao lidar com estruturas de linguagem | [aula](../6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Tradução e análise de sentimento ♥️ | [Processamento de linguagem natural](../6-NLP/README.md) | Tradução e análise de sentimento com Jane Austen | [aula](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | Hotéis romanticos da Europa ♥️ | [Processamento de linguagem natural](../6-NLP/README.md) | Análise de sentimento com avaliações de hotéis, 1 | [aula](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | Hotéis romanticos da Europa ♥️ | [Processamento de linguagem natural](../6-NLP/README.md) | Análise de sentimento com avaliações de hotéis, 2 | [aula](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | Introdução previsão de séries temporais | [Séries temporais](../7-TimeSeries/README.md) | Introdução a previsão de séries temporais | [aula](../7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ Uso de Energia Mundial ⚡️ - previsão de série temporal com ARIMA | [Séries temporais](../7-TimeSeries/README.md) | Previsão de séries temporais com ARIMA | [aula](../7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | Introdução à aprendizagem por reforço | [Aprendizagem por reforço](../8-Reinforcement/README.md) | Introdução à aprendizagem por reforço com Q-Learning | [aula](../8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 24 | Ajuda o Pedro a escapar do lobo! 🐺 | [Aprendizagem por reforço](../8-Reinforcement/README.md) | Ginásio de aprendizagem por reforço | [aula](../8-Reinforcement/2-Gym/README.md) | Dmitry | -| Postscript | Cenários reais de ML e aplicações | [ML na vida real](../9-Real-World/README.md) | Aplicações interessantes e reveladoras do mundo real do ML clássico | [aula](../9-Real-World/1-Applications/README.md) | Equipa | - -## Acesso Offline - -Podes usar este documento offline usando o [Docsify](https://docsify.js.org/#/). Dá fork neste repositório, [instala o Docsify](https://docsify.js.org/#/quickstart) no teu computador, e depois na pasta raiz deste repositório, escreve `docsify serve`. O site será executado na porta 3000 do teu localhost: `localhost:3000`. - -## PDFs - -Encontras um pdf do curso com links [aqui](../pdf/readme.pdf) - -## Help Wanted! - -Gostarias de contribuir para uma tradução? Por favor lê as nossas [diretrizes de tradução](../TRANSLATIONS.md) e adiciona o teu input [aqui](https://github.com/microsoft/ML-For-Beginners/issues/71) - -## Outros Cursos - -A nossa equipa produziu outros cursos! Confere: - -- [Web Dev para Iniciantes](https://aka.ms/webdev-beginners) -- [IoT para Iniciantes](https://aka.ms/iot-beginners) diff --git a/translations/README.tr.md b/translations/README.tr.md deleted file mode 100644 index 44075aa2..00000000 --- a/translations/README.tr.md +++ /dev/null @@ -1,119 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# Yeni Başlayanlar için Makine Öğrenimi - Bir Eğitim Programı - -> :earth_africa: Dünya kültürleri sayesinde Makine Öğrenimini keşfederken dünyayı gezin :earth_africa: - -Microsoft'taki Azure Cloud Destekleyicileri tamamen **Makine Öğrenimi** hakkında olan 12 hafta ve 24 derslik eğitim programını sunmaktan memnuniyet duyar. Bu eğitim programında, kütüphane olarak temelde Scikit-learn kullanarak ve yakında çıkacak olan 'Yeni Başlayanlar için Yapay Zeka' dersinde anlatılan derin öğrenmeden uzak durarak, zaman zaman adlandırıldığı şekliyle, **klasik makine öğrenimi**ni öğreneceksiniz. Bu dersleri yakında çıkacak olan 'Yeni Başlayanlar için Veri Bilimi' eğitim programımızla da birleştirin! - -Biz bu klasik teknikleri dünyanın birçok alanından verilere uygularken bizimle dünyayı gezin. Her bir ders, ders başı ve ders sonu kısa sınavlarını, dersi tamamlamak için yazılı yönergeleri, bir çözümü, bir ödevi ve daha fazlasını içerir. Yeni becerilerin 'yerleşmesi' için kanıtlanmış bir yol olan proje temelli pedagojimiz, yaparken öğrenmenizi sağlar. - -**:writing_hand: Yazarlarımıza yürekten teşekkürler** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Ornella Altunyan, and Amy Boyd - -**:art: Çizerlerimize de teşekkürler** Tomomi Imura, Dasani Madipalli, and Jen Looper - - **:pray: Microsoft Student Ambassador yazarlarımıza, eleştirmenlerimize ve içeriğe katkıda bulunanlara özel teşekkürler :pray:** özellikle Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, and Snigdha Agarwal - ---- -# Başlarken - -**Öğrenciler**, bu eğitim programını kullanmak için, tüm yazılım havuzunu kendi GitHub hesabınıza çatallayın ve alıştırmaları kendiniz veya bir grup ile tamamlayın: - -- Bir ders öncesi kısa sınavı ile başlayın -- Her bilgi kontrolünde durup derinlemesine düşünerek dersi okuyun ve etkinlikleri tamamlayın. -- Çözüm kodunu çalıştırmaktansa dersleri kavrayarak projeleri yapmaya çalışın; yine de o çözüm kodu her proje yönelimli derste `/solution` klasörlerinde mevcut. -- Ders sonrası kısa sınavını çözün -- Meydan okumayı tamamlayın -- Ödevi tamamlayın -- Bir ders grubunu tamamladıktan sonra, [Tartışma Panosu](https://github.com/microsoft/ML-For-Beginners/discussions)'nu ziyaret edin ve uygun PAT yönergesini doldurarak "sesli öğrenin" (Yani, tamamen öğrenmeden önce öğrenme süreciniz üzerine derin düşünerek içgözlem ve geridönütlerle kendinizde farkındalık oluşturun.). 'PAT', bir Progress Assessment Tool'dur (Süreç Değerlendirme Aracı), öğrenmenizi daha ileriye taşımak için doldurduğunuz bir yönergedir. Diğer PAT'lere de karşılık verebilirsiniz, böylece beraber öğrenebiliriz. - -> İleri çalışma için, bu [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) modüllerini ve öğrenme rotalarını takip etmenizi tavsiye ediyoruz. - -**Öğretmenler**, bu eğitim programının nasıl kullanılacağı hakkında [bazı öneriler ekledik](../for-teachers.md). - ---- - -## Takımla Tanışın - -[![Tanıtım videosu](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -> :movie_camera: Proje ve projeyi yaratanlar hakkındaki video için yukarıdaki fotoğrafa tıklayın! - ---- -## Pedagoji - -Bu eğitim programını oluştururken iki pedagojik ilke seçtik: uygulamalı **proje temelli** olduğundan ve **sık kısa sınavlar** içerdiğinden emin olmak. Ayrıca, bu eğitim programında tutarlılık sağlaması için genel bir **tema** var. - -İçeriğin projelerle uyumlu olduğuna emin olarak, süreç öğrenciler için daha ilgi çekici hale getirilmiştir ve kavramların akılda kalıcılığı artacaktır. Ayrıca, dersten önce ikincil değerli bir kısa sınav öğrencinin niyetini konuyu öğrenmek yaparken dersten sonra yapılan ikinci bir kısa sınav da akılda kalıcılığı sağlar. Bu eğitim programı esnek ve eğlenceli olacak şekilde hazırlanmıştır ve tümüyle veya kısmen işlenebilir. Projeler kolay başlar ve 12 haftalık zamanın sonuna doğru karmaşıklıkları gittikçe artar. Bu eğitim programı, Makine Öğreniminin gerçek hayattaki uygulamaları üzerine, ek puan veya tartışma için bir temel olarak kullanılabilecek bir ek yazı da içermektedir. - -> [Davranış Kuralları](../CODE_OF_CONDUCT.md)'mızı, [Katkıda Bulunma](../CONTRIBUTING.md) ve [Çeviri](../TRANSLATIONS.md) kılavuz ilkelerimizi inceleyin. Yapıcı geridönütlerinizi memnuniyetle karşılıyoruz! -## Her bir ders şunları içermektedir: - -- isteğe bağlı eskiz notu -- isteğe bağlı ek video -- ders öncesi ısınma kısa sınavı -- yazılı ders -- proje temelli dersler için, projenin nasıl yapılacağına dair adım adım kılavuz -- bilgi kontrolleri -- bir meydan okuma -- ek okuma -- ödev -- ders sonrası kısa sınavı - -> **Kısa sınavlar hakkında bir not**: Her biri üç sorudan oluşan ve toplamda 50 tane olan tüm kısa sınavlar [bu uygulamada](https://gray-sand-07a10f403.1.azurestaticapps.net/) bulunmaktadır. Derslerin içinden de bağlantı yoluyla ulaşılabilirler ancak kısa sınav uygulaması yerelde çalıştırılabilir; `quiz-app` klasöründeki yönergeleri takip edin. - - -| Ders Numarası | Konu | Ders Gruplandırması | Öğrenme Hedefleri | Ders | Yazar | -| :-----------: | :--------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------: | :------------: | -| 01 | Makine Öğrenimi Giriş | [Giriş](../1-Introduction/README.md) | Makine öğreniminin temel kavramlarını öğrenmek | [ders](../1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | Makine Öğrenimi Tarihi | [Giriş](../1-Introduction/README.md) | Bu alanın altında yatan tarihi öğrenmek | [ders](../1-Introduction/2-history-of-ML/README.md) | Jen and Amy | -| 03 | Eşitlik ve Makine Öğrenimi | [Giriş](../1-Introduction/README.md) | Öğrencilerin ML modelleri yaparken ve uygularken düşünmeleri gereken eşitlik hakkındaki önemli felsefi sorunlar nelerdir? | [ders](../1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | Makine Öğrenimi için Yöntemler | [Giriş](../1-Introduction/README.md) | ML araştırmacıları ML modelleri üretmek için hangi yöntemleri kullanırlar? | [ders](../1-Introduction/4-techniques-of-ML/README.md) | Chris and Jen | -| 05 | Regresyona Giriş | [Regresyon](../2-Regression/README.md) | Regresyon modelleri için Python ve Scikit-learn'e başlamak | [ders](../2-Regression/1-Tools/README.md) | Jen | -| 06 | Kuzey Amerika balkabağı fiyatları :jack_o_lantern: | [Regresyon](../2-Regression/README.md) | ML hazırlığı için verileri görselleştirmek ve temizlemek | [ders](../2-Regression/2-Data/README.md) | Jen | -| 07 | Kuzey Amerika balkabağı fiyatları :jack_o_lantern: | [Regresyon](../2-Regression/README.md) | Doğrusal ve polinom regresyon modelleri yapmak | [ders](../2-Regression/3-Linear/README.md) | Jen | -| 08 | Kuzey Amerika balkabağı fiyatları :jack_o_lantern: | [Regresyon](../2-Regression/README.md) | Lojistik bir regresyon modeli yapmak | [ders](../2-Regression/4-Logistic/README.md) | Jen | -| 09 | Bir Web Uygulaması :electric_plug: | [Web Uygulaması](../3-Web-App/README.md) | Eğittiğiniz modeli kullanmak için bir web uygulaması yapmak | [ders](../3-Web-App/1-Web-App/README.md) | Jen | -| 10 | Sınıflandırmaya Giriş | [Sınıflandırma](../4-Classification/README.md) | Verilerinizi temizlemek, hazırlamak, ve görselleştirmek; sınıflandırmaya giriş | [ders](../4-Classification/1-Introduction/README.md) | Jen and Cassie | -| 11 | Leziz Asya ve Hint mutfağı :ramen: | [Sınıflandırma](../4-Classification/README.md) | Sınıflandırıcılara giriş | [ders](../4-Classification/2-Classifiers-1/README.md) | Jen and Cassie | -| 12 | Leziz Asya ve Hint mutfağı :ramen: | [Sınıflandırma](../4-Classification/README.md) | Daha fazla sınıflandırıcı | [ders](../4-Classification/3-Classifiers-2/README.md) | Jen and Cassie | -| 13 | Leziz Asya ve Hint mutfağı :ramen: | [Sınıflandırma](../4-Classification/README.md) | Modelinizi kullanarak tavsiyede bulunan bir web uygulaması yapmak | [ders](../4-Classification/4-Applied/README.md) | Jen | -| 14 | Kümelemeye Giriş | [Kümeleme](../5-Clustering/README.md) | Verilerinizi temizlemek, hazırlamak, ve görselleştirmek; kümelemeye giriş | [ders](../5-Clustering/1-Visualize/README.md) | Jen | -| 15 | Nijerya'nın Müzik Zevklerini Keşfetme :headphones: | [Kümeleme](../5-Clustering/README.md) | K merkezli kümeleme yöntemini keşfetmek | [ders](../5-Clustering/2-K-Means/README.md) | Jen | -| 16 | Doğal Dil İşlemeye Giriş :coffee: | [Doğal Dil İşleme](../6-NLP/README.md) | Basit bir bot yaratarak NLP temellerini öğrenmek | [ders](../6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Yaygın NLP Görevleri :coffee: | [Doğal Dil İşleme](../6-NLP/README.md) | Dil yapılarıyla uğraşırken gereken yaygın görevleri anlayarak NLP bilginizi derinleştirmek | [ders](../6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Çeviri ve Duygu Analizi :hearts: | [Doğal Dil İşleme](../6-NLP/README.md) | Jane Austen ile çeviri ve duygu analizi | [ders](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | Avrupa'nın Romantik Otelleri :hearts: | [Doğal Dil İşleme](../6-NLP/README.md) | Otel değerlendirmeleriyle duygu analizi, 1 | [ders](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | Avrupa'nın Romantik Otelleri :hearts: | [Doğal Dil İşleme](../6-NLP/README.md) | Otel değerlendirmeleriyle duygu analizi 2 | [ders](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | Zaman Serisi Tahminine Giriş | [Zaman Serisi](../7-TimeSeries/README.md) | Zaman serisi tahminine giriş | [ders](../7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | :zap: Dünya Güç Kullanımı :zap: - ARIMA ile Zaman Serisi Tahmini | [Zaman Serisi](../7-TimeSeries/README.md) | ARIMA ile zaman serisi tahmini | [ders](../7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | Pekiştirmeli Öğrenmeye Giriş | [Pekiştirmeli Öğrenme](../8-Reinforcement/README.md) | Q-Learning ile pekiştirmeli öğrenmeye giriş | [ders](../8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 24 | Peter'ın Kurttan Uzak Durmasına Yardım Edin! :wolf: | [Pekiştirmeli Öğrenme](../8-Reinforcement/README.md) | Pekiştirmeli öğrenme spor salonu | [ders](../8-Reinforcement/2-Gym/README.md) | Dmitry | -| Ek Yazı | Gerçek Hayattan ML Senaryoları ve Uygulamaları | [Vahşi Doğada ML](../9-Real-World/README.md) | Klasik makine öğreniminin ilginç ve açıklayıcı gerçek hayat uygulamaları | [ders](../9-Real-World/1-Applications/README.md) | Takım | -## Çevrimdışı erişim - -Bu dokümantasyonu [Docsify](https://docsify.js.org/#/) kullanarak çevrimdışı çalıştırabilirsiniz. Bu yazılım havuzunu çatallayın, yerel makinenizde [Docsify'ı kurun](https://docsify.js.org/#/quickstart) ve sonra bu yazılım havuzunun kök dizininde `docsify serve` yazın. İnternet sitesi, 3000 portunda `localhost:3000` yerel ana makinenizde sunulacaktır. - -## PDF'ler - -Eğitim programının bağlantılarla PDF'sine [buradan](../pdf/readme.pdf) ulaşabilirsiniz. - -## Yardım İsteniyor! - -Bir çeviri katkısında bulunmak ister misiniz? Lütfen [çeviri kılavuz ilkelerimizi](../TRANSLATIONS.md) okuyun ve [buraya](https://github.com/microsoft/ML-For-Beginners/issues/71) girdiyi ekleyin. - -## Diğer Eğitim Programları - -Takımımız başka eğitim programları üretiyor! İnceleyin: - -- [Yeni Başlayanlar için Web Geliştirme](https://aka.ms/webdev-beginners) -- [Yeni Başlayanlar için Nesnelerin İnterneti](https://aka.ms/iot-beginners) - diff --git a/translations/README.zh-cn.md b/translations/README.zh-cn.md deleted file mode 100644 index f9186a05..00000000 --- a/translations/README.zh-cn.md +++ /dev/null @@ -1,119 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](../http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# 针对初学者的机器学习课程 - -> 🌍 环游世界,并通过世界文化来探索机器学习 🌍 - -微软 Azure Cloud 的倡导者们很高兴可以提供这套十二周、二十四节课的关于**机器学习**的课程。在这套课程中,你将学习关于**经典机器学习**的内容,主要将使用 Scikit-learn 这一库。关于深度学习的内容将会尽量避免 —— 它会被我们即将推出的 "AI for Beginners (针对初学者的 AI 教程)" 所涵盖。你也可以把这些课和我们已推出的 [Data Science for Beginners(针对初学者的数据科学教程)](https://aka.ms/datascience-beginners) 相结合! - -通过把这些经典的技术应用在来自世界各地的数据,我们将 “环游世界”。每一节课都包括了课前和课后测验、课程内容的文字讲义说明、示例代码、作业等。通过这种基于项目的教学方法,你将在构建中学习,这样可以把技能学得更牢靠。 - -**✍️ 衷心感谢作者们** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Ornella Altunyan 以及 Amy Boyd - -**🎨 同时也要感谢我们的插画师** Tomomi Imura, Dasani Madipalli 以及 Jen Looper - - **🙏 特别感谢 🙏 我们的微软学生大使作者们,内容贡献和内容复核者们**, Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, 和 Snigdha Agarwal 等 - ---- -# 准备开始 - -**对于学生们**,为了更好的使用这套课程,把整个仓库 fork 到你自己的 GitHub 账户中,并自行(或和一个小组一起)完成以下练习: - -- 从课前测验开始 -- 阅读课程内容,完成所有的活动,在每次 knowledge check 时暂停并思考 -- 我们建议你基于理解来创建项目(而不是仅仅跑一遍示例代码)。示例代码的位置在每一个项目的 `/solution` 文件夹中。 -- 进行课后测验 -- 完成课程挑战 -- 完成作业 -- 一节课完成后, 访问[讨论版](https://github.com/microsoft/ML-For-Beginners/discussions),通过填写相应的 PAT Rubric (课程目标) 来深化自己的学习成果。你也可以回应其它的 PAT,这样我们可以一起学习。 - -> 如果希望进一步学习,我们推荐跟随 [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) 的模块和学习路径。 - -**对于老师们**,我们对于如何使用这套教程[提供了一些建议](../for-teachers.md)。 - ---- - -## 项目团队 - -[![宣传视频](../ml-for-beginners.png)](https://youtu.be/Tj1XWrDSYJU "宣传视频") - -> 🎥 点击上方的图片,来观看一个关于这个项目和它的创造者们的视频! - ---- -## 教学方式 - -此课程基于两个教学原则:学生应该上手进行**项目实践**,并完成**频繁的测验**。 此外,为了使整个课程更具有整体性,课程们有一个共同的**主题**。 - -通过确保课程内容与项目强相关,我们让学习过程对学生更具吸引力,概念的学习也被深化了。难度较低的课前测验可以吸引学生学习课程,而课后的第二次测验也进一步重复了课堂中的概念。该课程被设计地灵活有趣,可以一次性全部学习,或者分开来一部分一部分学习。这些项目由浅入深,从第一周的小项目开始,在第十二周结束时变得较为复杂。本课程还包括一个关于机器学习实际应用的后记,可用作额外学分或进一步讨论的基础。 - -> 在这里,你可以找到我们的[行为守则](../CODE_OF_CONDUCT.md),[对项目作出贡献](../CONTRIBUTING.md)以及[翻译](../TRANSLATIONS.md)指南。我们欢迎各位提出有建设性的反馈! - -## 每一节课都包含: - -- 可选的笔记 -- 可选的补充视频 -- 课前热身测验 -- 文字课程 -- 对于基于项目的课程,包含构建项目的分步指南 -- knowledge checks -- 一个挑战 -- 补充阅读 -- 作业 -- 课后测验 - -> **关于测验**:所有的测验都在[这个应用里](https://gray-sand-07a10f403.1.azurestaticapps.net/),总共 50 个测验,每个测验三个问题。它们的链接在每节课中,而且这个测验应用可以在本地运行。请参考 `quiz-app` 文件夹中的指南。 - - -| 课程编号 | 主体 | 课程组 | 学习目标 | 课程链接 | 作者 | -| :------: | :------------------------------------------: | :-----------------------------------------------: | ----------------------------------------------------------------------- | :----------------------------------------------------: | :-----------: | -| 01 | 机器学习简介 | [简介](../1-Introduction/translations/README.zh-cn.md) | 了解机器学习背后的基本概念 | [课程](../1-Introduction/1-intro-to-ML/translations/README.zh-cn.md) | Muhammad | -| 02 | 机器学习的历史 | [简介](../1-Introduction/translations/README.zh-cn.md) | 了解该领域的历史 | [课程](../1-Introduction/2-history-of-ML/translations/README.zh-cn.md) | Jen 和 Amy | -| 03 | 机器学习与公平 | [简介](../1-Introduction/translations/README.zh-cn.md) | 在构建和应用机器学习模型时,我们应该考虑哪些有关公平的重要哲学问题? | [课程](../1-Introduction/3-fairness/translations/README.zh-cn.md) | Tomomi | -| 04 | 机器学习的技术工具 | [简介](../1-Introduction/translations/README.zh-cn.md) | 机器学习研究者使用哪些技术来构建机器学习模型? | [课程](../1-Introduction/4-techniques-of-ML/translations/README.zh-cn.md) | Chris 和 Jen | -| 05 | 回归简介 | [回归](../2-Regression/translations/README.zh-cn.md) | 开始使用 Python 和 Scikit-learn 构建回归模型 | [课程](../2-Regression/1-Tools/translations/README.zh-cn.md) | Jen | -| 06 | 北美南瓜价格 🎃 | [回归](../2-Regression/translations/README.zh-cn.md) | 可视化、进行数据清理,为机器学习做准备 | [课程](../2-Regression/2-Data/translations/README.zh-cn.md) | Jen | -| 07 | 北美南瓜价格 🎃 | [回归](../2-Regression/translations/README.zh-cn.md) | 建立线性和多项式回归模型 | [课程](../2-Regression/3-Linear/translations/README.zh-cn.md) | Jen | -| 08 | 北美南瓜价格 🎃 | [回归](../2-Regression/translations/README.zh-cn.md) | 构建逻辑回归模型 | [课程](../2-Regression/4-Logistic/translations/README.zh-cn.md) | Jen | -| 09 | 一个网页应用 🔌 | [网页应用](../3-Web-App/translations/README.zh-cn.md) | 构建一个 Web 应用程序以使用经过训练的模型 | [课程](../3-Web-App/1-Web-App/translations/README.zh-cn.md) | Jen | -| 10 | 分类简介 | [分类](../4-Classification/translations/README.zh-cn.md) | 清理、准备和可视化数据; 分类简介 | [课程](../4-Classification/1-Introduction/translations/README.zh-cn.md) | Jen 和 Cassie | -| 11 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/translations/README.zh-cn.md) | 分类器简介 | [课程](../4-Classification/2-Classifiers-1/translations/README.zh-cn.md) | Jen 和 Cassie | -| 12 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/translations/README.zh-cn.md) | 关于分类器的更多内容 | [课程](../4-Classification/3-Classifiers-2/translations/README.zh-cn.md) | Jen 和 Cassie | -| 13 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/translations/README.zh-cn.md) | 使用您的模型构建一个可以「推荐」的 Web 应用 | [课程](../4-Classification/4-Applied/translations/README.zh-cn.md) | Jen | -| 14 | 聚类简介 | [聚类](../5-Clustering/translations/README.zh-cn.md) | 清理、准备和可视化数据; 聚类简介 | [课程](../5-Clustering/1-Visualize/translations/README.zh-cn.md) | Jen | -| 15 | 探索尼日利亚人的音乐品味 🎧 | [聚类](../5-Clustering/translations/README.zh-cn.md) | 探索 K-Means 聚类方法 | [课程](../5-Clustering/2-K-Means/translations/README.zh-cn.md) | Jen | -| 16 | 自然语言处理 (NLP) 简介 ☕️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 通过构建一个简单的 bot (机器人) 来了解 NLP 的基础知识 | [课程](../6-NLP/1-Introduction-to-NLP/translations/README.zh-cn.md) | Stephen | -| 17 | 常见的 NLP 任务 ☕️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 通过理解处理语言结构时所需的常见任务来加深对于自然语言处理 (NLP) 的理解 | [课程](../6-NLP/2-Tasks/README.md) | Stephen | -| 18 | 翻译和情感分析 ♥️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 对简·奥斯汀的文本进行翻译和情感分析 | [课程](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | 欧洲的浪漫酒店 ♥️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 对于酒店评价进行情感分析(上) | [课程](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | 欧洲的浪漫酒店 ♥️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 对于酒店评价进行情感分析(下) | [课程](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | 时间序列预测简介 | [时间序列](../7-TimeSeries/translations/README.zh-cn.md) | 时间序列预测简介 forecasting | [课程](../7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ 世界用电量 ⚡️ - 使用 ARIMA 进行时间序列预测 | [时间序列](../7-TimeSeries/translations/README.zh-cn.md) | 使用 ARIMA 进行时间序列预测 | [课程](../7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | 强化学习简介 | [强化学习](../8-Reinforcement/translations/README.zh-cn.md) | Q-Learning 强化学习简介 | [课程](../8-Reinforcement/1-QLearning/translations/README.zh-cn.md) | Dmitry | -| 24 | 帮助 Peter 避开狼!🐺 | [强化学习](../8-Reinforcement/translations/README.zh-cn.md) | 强化学习练习 | [课程](../8-Reinforcement/2-Gym/translations/README.zh-cn.md) | Dmitry | -| 后记 | 现实世界中的机器学习场景和应用 | [自然场景下的机器学习](../9-Real-World/translations/README.zh-cn.md) | 探索有趣的经典机器学习方法,了解现实世界中机器学习的应用 | [课程](../9-Real-World/1-Applications/README.md) | 团队 | -## 离线访问 - -您可以使用 [Docsify](https://docsify.js.org/#/) 离线运行此文档。 Fork 这个仓库,并在你的本地机器上[安装 Docsify](https://docsify.js.org/#/quickstart),并在这个仓库的根文件夹中运行 `docsify serve`。你可以通过 localhost 的 3000 端口访问此文档:`localhost:3000`。 -## PDF 文档们 - -点击[这里](../pdf/readme.pdf)查找课程的 PDF 文档。 - -## 需要你的帮助! - -想贡献一份翻译吗?请阅读我们的[翻译指南](../TRANSLATIONS.md)并在[此处](https://github.com/microsoft/ML-For-Beginners/issues/71)添加你的意见。 - -## 其他课程 - -我们的团队还制作了其他课程!可以看一下: - -- [针对初学者的 Web 开发课程](https://aka.ms/webdev-beginners) -- [针对初学者的物联网课程](https://aka.ms/iot-beginners) -- [针对初学者的数据科学课程](https://aka.ms/datascience-beginners) diff --git a/translations/Readme.ta.md b/translations/Readme.ta.md deleted file mode 100644 index f123e4ca..00000000 --- a/translations/Readme.ta.md +++ /dev/null @@ -1,132 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -# ஆரம்பநிலைக்கான இயந்திர கற்றல் - ஒரு பாடத்திட்டம் - -> 🌍 உலக கலாச்சாரங்களின் மூலம் இயந்திர கற்றலை நாங்கள் ஆராயும்போது உலகம் முழுவதும் பயணம் செய்யுங்கள் 🌍 - -மைக்ரோசாப்ட் நிறுவனத்தில் உள்ள அஸூர் கிளவுட் வக்கீல்கள், இயந்திர கற்றல் பற்றிய 12-வாரம், 26-பாடம் பாடத்திட்டத்தை வழங்குவதில் மகிழ்ச்சியடைகிறார்கள். இந்தப் பாடத்திட்டத்தில், சில சமயங்களில் கிளாசிக் மெஷின் லேர்னிங் என்று அழைக்கப்படுவதைப் பற்றி நீங்கள் அறிந்துகொள்வீர்கள், முதன்மையாக ஸ்கிகிட்-லேர்னை நூலகமாகப் பயன்படுத்தி, ஆழ்ந்த கற்றலைத் தவிர்ப்பீர்கள், இது எங்களின் வரவிருக்கும் 'ஆரம்பநிலையாளர்களுக்கான AI' பாடத்திட்டத்தில் உள்ளடக்கப்பட்டுள்ளது. இந்தப் பாடங்களை எங்களுடன் இணைக்கவும் ['தொடக்கங்களுக்கான தரவு அறிவியல்' பாடத்திட்டம்](https://aka.ms/datascience-beginners), அத்துடன்! - -உலகின் பல பகுதிகளில் உள்ள தரவுகளுக்கு இந்த உன்னதமான நுட்பங்களைப் பயன்படுத்துவதால், எங்களுடன் உலகம் முழுவதும் பயணம் செய்யுங்கள். ஒவ்வொரு பாடத்திலும் பாடத்திற்கு முந்தைய மற்றும் பிந்தைய வினாடி வினாக்கள், பாடத்தை முடிக்க எழுதப்பட்ட வழிமுறைகள், ஒரு தீர்வு, ஒரு பணி மற்றும் பல உள்ளன. எங்கள் திட்ட அடிப்படையிலான கற்பித்தல், புதிய திறன்களை 'ஒட்டிக்கொள்ள' ஒரு நிரூபிக்கப்பட்ட வழி, கட்டும் போது கற்றுக்கொள்ள அனுமதிக்கிறது. - -**✍️ எங்கள் ஆசிரியர்களுக்கு மனமார்ந்த நன்றிகள்** ஜென் லூப்பர், ஸ்டீபன் ஹோவெல், ஃபிரான்செஸ்கா லாஸ்ஸெரி, டோமோமி இமுரா, காஸ்ஸி ப்ரீவியூ, டிமிட்ரி சோஷ்னிகோவ், கிறிஸ் நோரிங், அனிர்பன் முகர்ஜி, ஓர்னெல்லா அல்துன்யன் மற்றும் ஆமி பாய்ட் - -**🎨 எங்கள் ஓவியர்களுக்கும் நன்றி** டோமோமி இமுரா, தசானி மடிபல்லி மற்றும் ஜென் லூப்பர் - -**🙏 சிறப்பு நன்றி 🙏 எங்கள் Microsoft மாணவர் தூதர் ஆசிரியர்கள், விமர்சகர்கள் மற்றும் உள்ளடக்க பங்களிப்பாளர்களுக்கு**, குறிப்பாக ரிஷித் டாக்லி, முஹம்மது சாகிப் கான் இனான், ரோஹன் ராஜ், அலெக்ஸாண்ட்ரு பெட்ரெஸ்கு, அபிஷேக் ஜெய்ஸ்வால், நவ்ரின் தபாசும், இயோன் சாமுயிலா மற்றும் ஸ்னிக்தா அகர்வால் - -**🤩 எங்கள் R பாடங்களுக்காக மைக்ரோசாஃப்ட் மாணவர் தூதர் எரிக் வான்ஜாவுக்கு கூடுதல் நன்றி!** - ---- - -# தொடங்குதல் - -**[மாணவர்கள்](https://docs.microsoft.com/en-gb/learn/student-hub/)**, இந்தப் பாடத்திட்டத்தைப் பயன்படுத்த, உங்கள் சொந்த கிட்ஹப் கணக்கில் முழு ரெப்போவையும் பிரித்து, பயிற்சிகளை நீங்களே அல்லது ஒரு குழுவுடன் முடிக்கவும்: - -- விரிவுரைக்கு முந்தைய வினாடி வினாவுடன் தொடங்கவும். -- விரிவுரையைப் படித்து செயல்பாடுகளை முடிக்கவும், ஒவ்வொரு அறிவுச் சரிபார்ப்பிலும் இடைநிறுத்தப்பட்டு பிரதிபலிக்கவும். -- தீர்வுக் குறியீட்டை இயக்குவதை விட பாடங்களைப் புரிந்துகொண்டு திட்டங்களை உருவாக்க முயற்சிக்கவும்; இருப்பினும் அந்த குறியீடு ஒவ்வொரு திட்டம் சார்ந்த பாடத்திலும் `/தீர்வு` கோப்புறைகளில் கிடைக்கும். -- விரிவுரைக்குப் பிந்தைய வினாடி வினாவை எடுத்துக் கொள்ளுங்கள். -- சவாலை முடிக்கவும். -- வேலையை முடிக்கவும். -- ஒரு பாடம் குழுவை முடித்த பிறகு, பார்வையிடவும் [கலந்துரையாடல் குழு](https://github.com/microsoft/ML-For-Beginners/discussions) மற்றும் "சத்தமாக கற்க" பொருத்தமான PAT rubric ஐ நிரப்புவதன் மூலம். ஒரு 'PAT' என்பது முன்னேற்ற மதிப்பீட்டுக் கருவியாகும், இது உங்கள் கற்றலை மேலும் மேம்படுத்த நீங்கள் நிரப்பும் ரூபிரிக் ஆகும். நீங்கள் மற்ற PAT களுக்கு எதிர்வினையாற்றலாம், எனவே நாங்கள் ஒன்றாகக் கற்றுக்கொள்ளலாம். - -> மேலும் ஆய்வுக்கு, இவற்றைப் பின்பற்ற பரிந்துரைக்கிறோம் [மைக்ரோசாப்ட் கற்றல்](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott)தொகுதிகள் மற்றும் கற்றல் பாதைகள். - -**ஆசிரியர்கள்**, எங்களிடம் உள்ளது [சில பரிந்துரைகளை உள்ளடக்கியது](https://github.com/microsoft/ML-For-Beginners/blob/main/for-teachers.md) இந்த பாடத்திட்டத்தை எவ்வாறு பயன்படுத்துவது. - ---- - -## குழுவை சந்திக்கவும் - -[![Promo video](../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Promo video") - -**Gif de** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) - -> 🎥 திட்டம் மற்றும் அதை உருவாக்கியவர்கள் பற்றிய வீடியோவிற்கு மேலே உள்ள படத்தை கிளிக் செய்யவும்! - ---- - -## கல்வியியல் - -இந்தப் பாடத்திட்டத்தை உருவாக்கும் போது இரண்டு கல்வியியல் கோட்பாடுகளை நாங்கள் தேர்ந்தெடுத்துள்ளோம்: இது நடைமுறையில் இருப்பதை உறுதி செய்தல் **திட்ட அடிப்படையிலான** -மற்றும் அதில் அடங்கும் **அடிக்கடி வினாடி வினா**. கூடுதலாக, இந்த பாடத்திட்டம் பொதுவானது **தீம்** அதை ஒருங்கிணைக்க. - -திட்டங்களுடன் உள்ளடக்கம் சீரமைக்கப்படுவதை உறுதி செய்வதன் மூலம், செயல்முறை மாணவர்களுக்கு மிகவும் ஈடுபாட்டுடன் உருவாக்கப்படுகிறது மற்றும் கருத்துகளைத் தக்கவைத்தல் அதிகரிக்கப்படும். கூடுதலாக, ஒரு வகுப்பிற்கு முன் ஒரு குறைந்த வினாடி வினா, ஒரு தலைப்பைக் கற்கும் மாணவர்களின் நோக்கத்தை அமைக்கிறது, அதே நேரத்தில் வகுப்பிற்குப் பிறகு இரண்டாவது வினாடி வினா மேலும் தக்கவைப்பை உறுதி செய்கிறது. இந்த பாடத்திட்டம் நெகிழ்வான மற்றும் வேடிக்கையாக வடிவமைக்கப்பட்டுள்ளது மற்றும் முழுமையாகவோ அல்லது பகுதியாகவோ எடுக்கப்படலாம். திட்டங்கள் சிறியதாக தொடங்கி 12 வார சுழற்சியின் முடிவில் பெருகிய முறையில் சிக்கலானதாக மாறும். இந்தப் பாடத்திட்டத்தில் ML இன் நிஜ-உலகப் பயன்பாடுகள் பற்றிய போஸ்ட்ஸ்கிரிப்ட் உள்ளது, இது கூடுதல் கடன் அல்லது விவாதத்திற்கான அடிப்படையாகப் பயன்படுத்தப்படலாம். - -> எங்களுடையதைக் கண்டுபிடி [நடத்தை விதிகள்](https://github.com/microsoft/ML-For-Beginners/blob/main/CODE_OF_CONDUCT.md), [பங்களிக்கிறது](https://github.com/microsoft/ML-For-Beginners/blob/main/CONTRIBUTING.md), மற்றும் [மொழிபெயர்ப்பு](https://github.com/microsoft/ML-For-Beginners/blob/main/TRANSLATIONS.md) வழிகாட்டுதல்கள். உங்கள் ஆக்கபூர்வமான கருத்தை நாங்கள் வரவேற்கிறோம்! - -## ஒவ்வொரு பாடமும் அடங்கும்: - -- விருப்ப ஓவியக் குறிப்பு -- விருப்பமான துணை வீடியோ -- விரிவுரைக்கு முந்தைய பயிற்சி வினாடி வினா -- எழுதப்பட்ட பாடம் -- திட்ட அடிப்படையிலான பாடங்களுக்கு, திட்டத்தை எவ்வாறு உருவாக்குவது என்பது குறித்த படிப்படியான வழிகாட்டிகள் -- அறிவு சோதனைகள் -- சவால் -- துணை வாசிப்பு -- பணி நியமனம் -- விரிவுரைக்குப் பிந்தைய வினாடிவினா - -> மொழிகள் பற்றிய குறிப்பு: இந்தப் பாடங்கள் முதன்மையாக பைத்தானில் எழுதப்பட்டுள்ளன, ஆனால் பல R இல் கிடைக்கின்றன. ஆர் பாடத்தை முடிக்க, செல்லவும் `/தீர்வு` கோப்புறை மற்றும் R பாடங்களைத் தேடுங்கள். அவை ஒரு .rmd நீட்டிப்பைக் குறிக்கும் **ஆர் மார்க் டவுன்** ஒரு உட்பொதிவு என எளிமையாக வரையறுக்கக்கூடிய கோப்பு `குறியீடு துண்டுகள்` (ஆர் அல்லது பிற மொழிகளில்) மற்றும் ஏ -> `YAML தலைப்பு` (PDF போன்ற வெளியீடுகளை எப்படி வடிவமைப்பது என்று வழிகாட்டுகிறது) -> ஒரு `மார்க் டவுன் ஆவணம்`. எனவே, இது தரவு அறிவியலுக்கான முன்மாதிரியான ஆசிரியர் கட்டமைப்பாக செயல்படுகிறது, ஏனெனில் இது உங்கள் குறியீடு, அதன் வெளியீடு மற்றும் உங்கள் எண்ணங்களை மார்க் டவுனில் எழுத அனுமதிப்பதன் மூலம் ஒருங்கிணைக்க அனுமதிக்கிறது. மேலும், R மார்க் டவுன் ஆவணங்கள் PDF, HTML அல்லது Word போன்ற வெளியீட்டு வடிவங்களுக்கு வழங்கப்படலாம். - -> வினாடி வினா பற்றிய குறிப்பு: அனைத்து வினாடி வினாக்களும் அடங்கியுள்ளன [இந்த பயன்பாட்டில்](https://gray-sand-07a10f403.1.azurestaticapps.net/), தலா மூன்று கேள்விகள் கொண்ட 52 மொத்த வினாடி வினாக்களுக்கு. அவை பாடங்களுக்குள் இருந்து இணைக்கப்பட்டுள்ளன ஆனால் வினாடி வினா பயன்பாட்டை உள்நாட்டில் இயக்க முடியும்; இல் உள்ள வழிமுறைகளைப் பின்பற்றவும் `வினாடி வினா-பயன்பாடு`. - -| பாடம் எண் | தலைப்பு | பாடம் தொகுத்தல் | கற்றல் நோக்கங்கள் | இணைக்கப்பட்ட பாடம் | நூலாசிரியர் | -| :--------: | :-----------------------------------------: | :----------------------------------------------------: | --------------------------------------------------------------------------------------------------------------------------------------------- | :-----------------------------------------------------: | :-----------------: | -| 01 | இயந்திர கற்றல் அறிமுகம் | [இயந்திர கற்றல் அறிமுகம்](../1-Introduction/README.md) | இயந்திர கற்றலுக்குப் பின்னால் உள்ள அடிப்படைக் கருத்துகளைக் கற்றுக்கொள்ளுங்கள் | [பாடம்](../1-Introduction/1-intro-to-ML/README.md) | முஹம்மது | -| 02 | இயந்திர கற்றலின் வரலாறு | [அறிமுகம்](../1-Introduction/README.md) | இந்தத் துறையில் உள்ள வரலாற்றைக் கற்றுக்கொள்ளுங்கள் | [பாடம்](../1-Introduction/2-history-of-ML/README.md) | ஜென் மற்றும் ஆமி | -| 03 | நேர்மை மற்றும் இயந்திர கற்றல் | [அறிமுகம்](../1-Introduction/README.md) | எம்எல் மாடல்களை உருவாக்கி பயன்படுத்தும்போது மாணவர்கள் கருத்தில் கொள்ள வேண்டிய நியாயத்தன்மையைச் சுற்றியுள்ள முக்கியமான தத்துவ சிக்கல்கள் என்ன? | [பாடம்](../1-Introduction/3-fairness/README.md) | டோமோமி | -| 04 | இயந்திர கற்றலுக்கான நுட்பங்கள் | [அறிமுகம்](../1-Introduction/README.md) | ML மாதிரிகளை உருவாக்க ML ஆராய்ச்சியாளர்கள் என்ன த்துகிறார்கள்? | [பாடம்](../1-Introduction/4-techniques-of-ML/README.md) | கிறிஸ் மற்றும் ஜென் | -| 05 | பின்னடைவு அறிமுகம் | [பின்னடைவு](../2-Regression/README.md) | பின்னடைவு மாதிரிகளுக்கான பைதான் மற்றும் Scikit-Learn உடன் தொடங்கவும் | [பாடம்](../2-Regression/1-Tools/README.md) | ஜென் | -| 06 | பின்னடைவு அறிமுகம் 🎃 | [பின்னடைவு](../2-Regression/README.md) | ML க்கான தயாரிப்பில் தரவை காட்சிப்படுத்தவும் மற்றும் சுத்தம் செய்யவும் | [பாடம்](../2-Regression/2-Data/README.md) | ஜென் | -| 07 | பின்னடைவு அறிமுகம் 🎃 | [பின்னடைவு](../2-Regression/README.md) | நேரியல் மற்றும் பல்லுறுப்புக்கோவை பின்னடைவு மாதிரிகளை உருவாக்கவும் | [பாடம்](../2-Regression/3-Linear/README.md) | ஜென் | -| 08 | பின்னடைவு அறிமுகம் 🎃 | [பின்னடைவு](../2-Regression/README.md) | லாஜிஸ்டிக் பின்னடைவு மாதிரியை உருவாக்கவும் | [பாடம்](../2-Regression/4-Logistic/README.md) | ஜென் | -| 09 | ஒரு இணைய பயன்பாடு 🔌 | [இணைய ஆப்](../3-Web-App/README.md) | நீங்கள் பயிற்சி பெற்ற மாதிரியைப் பயன்படுத்த இணைய பயன்பாட்டை உருவாக்கவும் | [பாடம்](../3-Web-App/1-Web-App/README.md) | ஜென் | -| 10 | வகைபடின் அறிமுகம் 🎃 | [வகைப்பாடு](../4-Classification/README.md) | உங்கள் தரவை சுத்தம் செய்யவும், தயார் செய்யவும் மற்றும் காட்சிப்படுத்தவும்; வகைப்பாட்டின் அறிமுகம் | [பாடம்](../4-Classification/1-Introduction/README.md) | ஜென் மற்றும் காசி | -| 11 | சுவைய மற்றும் இந்திய வகைகள் 🍜 | [வகைப்பாடு](../4-Classification/README.md) | வகைப்படுத்தின அறிமுகம் | [பாடம்](../4-Classification/2-Classifiers-1/README.md) | ஜென் மற்றும் காசி | -| 12 | சுவையான ஆசிய மற்றும் இந்திய உணவு வகைகள் 🍜 | [வகைப்பாடு](../4-Classification/README.md) | மேலும் வகைப்படுத்திகள் | [பாடம்](../4-Classification/3-Classifiers-2/README.md) | ஜென் மற்றும் காசி | -| 13 | சுவையான ஆசிய மற்றும் இந்திய உணவு வகைகள் 🍜 | [வகைப்பாடு](../4-Classification/README.md) | உங்கள் மாதிரியைப் பயன்படுத்தி பரிந்துரைக்கும் இணைய பயன்பாட்டை உருவாக்கவும் | [பாடம்](../4-Classification/4-Applied/README.md) | ஜென் | -| 14 | கிளஸ்டரிங் அறிமுகம் | [கிளஸ்டரிங்](../5-Clustering/README.md) | உங்கள் தரவை சுத்தம் செய்யவும், தயார் செய்யவும் மற்றும் காட்சிப்படுத்தவும்; கிளஸ்டரிங் அறிமுகம் | [பாடம்](../5-Clustering/1-Visualize/README.md) | ஜென் | -| 15 | நைஜீரிய இசை சுவைகளை ஆராய்தல் 🎧 | [கிளஸ்டரிங்](../5-Clustering/README.md) | K-Means கிளஸ்டரிங் முறையை ஆராயுங்கள் அறிமுகம் | [பாடம்](../5-Clustering/2-K-Means/README.md) | ஜென் | -| 16 | இயற்கை மொழி செயலாக்கம் ☕️ அறிமுகம் | [இயற்கை மொழி செக்கம்](../6-NLP/README.md) | ஒரு எளிய போட்டன் மூலம் NLP பற்றிய டைகளை அறியவும் | [பாடம்](../6-NLP/1-Introduction-to-NLP/README.md) | ஸ்டீபன் | -| 17 | StepheCommon NLP பணிகள் ☕️ | [இயற்கை மொழி செயகம்](../6-NLP/README.md) | மொழி கட்டமைப்புகளைக் கையடும் பொதுவான பணிகளைப் புரிந்தள்வதன் மூலம் உங்கள் NLP அறிவை ஆழமாக்குங்கள் | [பாடம்](../6-NLP/2-Tasks/README.md) | ஸ்டீபன் | -| 18 | மொழிபெயர்ப்பு மற்றும் ♥️ | [இயற்கை செயலா](../6-NLP/README.md) | ஜேன் ஆஸ்டனுடன் மொழிபெயர்ப்பு | [பாடம்](../6-NLP/3-Translation-Sentiment/README.md) | ஸ்டீபன் | -| 19 | ஐரோப்பாவின் காதல் ♥ | [இயற்கை மொழி செயலாக்கம்](../6-NLP/README.md) | ஹோட்டல் மதிப்புரைகளுடன் உணர்வு பகுப்பாய்வு 1 | [பாடம்](../6-NLP/4-Hotel-Reviews-1/README.md) | ஸ்டீபன் | -| 20 | ஐரோப்பாவின் காதல் ♥ | [இயற்கை மொழி செயலாக்கம்](../6-NLP/README.md) | ஹோட்டல் மதிப்புரைகளுடன் உணர்வு பகுப்பாய்வு 2 | [பாடம்](../6-NLP/5-Hotel-Reviews-2/README.md) | ஸ்டீபன் | -| 21 | நேரத் தொடர் முன்னறிவிப்பு | [நேரத் தொடர்](../7-TimeSeries/README.md) | Iநேரத் தொடர் முன்னறிவிப்பு | [பாடம்](../7-TimeSeries/1-Introduction/README.md) | பிரான்செஸ்கா | -| 22 | ⚡️ உலக சக்தபாடு ⚡️ - ARIMA உடன | [நேரத் தொடர்](../7-TimeSeries/README.md) | ARIMA உடன் நே முன்னறிவிப்பு | [பாடம்](../7-TimeSeries/2-ARIMA/README.md) | பிரான்செஸ்கா | -| 23 | ⚡️ உலக சக்தி பயன்பாடு ⚡️ - SVR உடன் நேரர் | [நேரத் தொடர்](../8-Reinforcement/README.md) | ஆதரவு வெக்டர் ரிக்ரஸருடன் நேரத் தொடர் | [பாடம்](../8-Reinforcement/1-QLearning/README.md) | அனிர்பன் | -| 24 | ஓநாயை தவிர்க்க உதவுங்கள்! 🐺 | [வலுவூட்டல் கற்றல்](../8-Reinforcement/README.md) | வலுவூட்டல் கற்றல் | [பாடம்](../8-Reinforcement/2-Gym/README.md) | டிமிட்ரி | -| Postscript | நிஜ உலக ML காட்சிகள் மற்றும் பயன்பாடுகள் | [காட்டில் எம்.எல்](../9-Real-World/README.md) | கிளாசிக்கல் ML இன் சுவாரஸ்யமான மற்றும் வெளிப்படுத்தும் நிஜ உலக பயன்பாடுகள் | [பாடம்](../9-Real-World/1-Applications/README.md) | குழு | - -## ஆஃப்லைன் அணுகல் - -பயன்படுத்தி இந்த ஆவணத்தை ஆஃப்லைனில் இயக்கலாம் [ஆவணப்படுத்து](https://docsify.js.org/#/). Dá fork neste repositório, [Docsify ஐ நிறுவவும்](https://docsify.js.org/#/quickstart) உங்கள் உள்ளூர் கணினியில், பின்னர் இந்த ரெப்போவின் ரூட் கோப்புறையில் தட்டச்சு செய்யவும் `docsify சேவை`. உங்கள் லோக்கல் ஹோஸ்டில் போர்ட் 3000 இல் இணையதளம் `வழங்கப்படும்:3000`. - -## PDFகள் - -இணைப்புகளுடன் பாடத்திட்டத்தின் pdfஐக் கண்டறியவும் [இங்கே](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf) - -## உதவி தேவை! - -மொழிபெயர்ப்பில் பங்களிக்க விரும்புகிறீர்களா? தயவுசெய்து எங்களுடையதைப் படியுங்கள் [மொழிபெயர்ப்பு வழிகாட்டுதல்கள்](../TRANSLATIONS.md) -மற்றும் நிர்வகிக்க டெம்ப்ளேட் சிக்கலைச் சேர்க்கவும் பணிச்சுமை [இங்கே](https://github.com/microsoft/ML-For-Beginners/issues/71) - -## பிற பாடத்திட்டங்கள் - -எங்கள் குழு மற்ற பாடத்திட்டங்களை உருவாக்குகிறது! சரிபார்: - -- [தொடக்கநிலையாளர்களுக்கான Web Dev](https://aka.ms/webdev-beginners) -- [ஆரம்பநிலைக்கு IoT](https://aka.ms/iot-beginners) -- [ஆரம்பநிலைக்கான தரவு அறிவியல்](https://aka.ms/datascience-beginners) diff --git a/translations/de/TRANSLATIONS.md b/translations/de/TRANSLATIONS.md deleted file mode 100644 index 383092bb..00000000 --- a/translations/de/TRANSLATIONS.md +++ /dev/null @@ -1,37 +0,0 @@ -# Beitrag durch Übersetzen von Lektionen - -Wir freuen uns über Übersetzungen der Lektionen in diesem Lehrplan! -## Richtlinien - -In jedem Lektionen-Ordner und im Ordner für die Einführungen der Lektionen gibt es Unterordner, die die übersetzten Markdown-Dateien enthalten. - -> Hinweis: Bitte übersetzen Sie keinen Code in den Beispieldateien; die einzigen Dinge, die zu übersetzen sind, sind README, Aufgaben und die Quiz. Danke! - -Übersetzte Dateien sollten diesem Namensschema folgen: - -**README._[language]_.md** - -wobei _[language]_ eine zweibuchstabige Sprachabkürzung nach dem ISO 639-1 Standard ist (z. B. `README.es.md` für Spanisch und `README.nl.md` für Niederländisch). - -**assignment._[language]_.md** - -Ähnlich wie bei Readme-Dateien, bitte auch die Aufgaben übersetzen. - -> Wichtig: Wenn Sie Texte in diesem Repository übersetzen, stellen Sie bitte sicher, dass Sie keine maschinelle Übersetzung verwenden. Wir werden die Übersetzungen über die Community überprüfen, also melden Sie sich bitte nur für Übersetzungen in Sprachen an, in denen Sie gut sind. - -**Quiz** - -1. Fügen Sie Ihre Übersetzung zur Quiz-App hinzu, indem Sie eine Datei hier hinzufügen: https://github.com/microsoft/ML-For-Beginners/tree/main/quiz-app/src/assets/translations, mit der richtigen Namenskonvention (en.json, fr.json). **Bitte lokalisieren Sie jedoch nicht die Wörter 'true' oder 'false'. Danke!** - -2. Fügen Sie Ihren Sprachcode zum Dropdown-Menü in der App.vue-Datei der Quiz-App hinzu. - -3. Bearbeiten Sie die [translations index.js Datei](https://github.com/microsoft/ML-For-Beginners/blob/main/quiz-app/src/assets/translations/index.js) der Quiz-App, um Ihre Sprache hinzuzufügen. - -4. Schließlich bearbeiten Sie ALLE Quiz-Links in Ihren übersetzten README.md-Dateien, damit sie direkt zu Ihrem übersetzten Quiz verweisen: https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1 wird zu https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=id - -**DANKE** - -Wir schätzen Ihre Bemühungen wirklich sehr! - -**Haftungsausschluss**: -Dieses Dokument wurde mithilfe von KI-gestützten maschinellen Übersetzungsdiensten übersetzt. Obwohl wir uns um Genauigkeit bemühen, sollten Sie sich bewusst sein, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als die maßgebliche Quelle betrachtet werden. Für kritische Informationen wird eine professionelle menschliche Übersetzung empfohlen. Wir übernehmen keine Haftung für Missverständnisse oder Fehlinterpretationen, die aus der Verwendung dieser Übersetzung entstehen. \ No newline at end of file diff --git a/translations/es/1-Introduction/1-intro-to-ML/README.md b/translations/es/1-Introduction/1-intro-to-ML/README.md deleted file mode 100644 index 338ba6ba..00000000 --- a/translations/es/1-Introduction/1-intro-to-ML/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Introducción al aprendizaje automático - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - ---- - -[![ML para principiantes - Introducción al Aprendizaje Automático para Principiantes](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML para principiantes - Introducción al Aprendizaje Automático para Principiantes") - -> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre esta lección. - -¡Bienvenido a este curso de aprendizaje automático clásico para principiantes! Ya sea que seas completamente nuevo en este tema o un practicante experimentado de ML que busca repasar un área, ¡nos alegra que te unas a nosotros! Queremos crear un punto de partida amigable para tu estudio de ML y estaríamos encantados de evaluar, responder e incorporar tus [comentarios](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introducción al ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introducción al ML") - -> 🎥 Haz clic en la imagen de arriba para ver un video: John Guttag del MIT introduce el aprendizaje automático - ---- -## Comenzando con el aprendizaje automático - -Antes de comenzar con este plan de estudios, necesitas tener tu computadora configurada y lista para ejecutar notebooks localmente. - -- **Configura tu máquina con estos videos**. Utiliza los siguientes enlaces para aprender [cómo instalar Python](https://youtu.be/CXZYvNRIAKM) en tu sistema y [configurar un editor de texto](https://youtu.be/EU8eayHWoZg) para el desarrollo. -- **Aprende Python**. También se recomienda tener un entendimiento básico de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un lenguaje de programación útil para científicos de datos que usamos en este curso. -- **Aprende Node.js y JavaScript**. También usamos JavaScript algunas veces en este curso al construir aplicaciones web, por lo que necesitarás tener [node](https://nodejs.org) y [npm](https://www.npmjs.com/) instalados, así como [Visual Studio Code](https://code.visualstudio.com/) disponible tanto para el desarrollo en Python como en JavaScript. -- **Crea una cuenta de GitHub**. Dado que nos encontraste aquí en [GitHub](https://github.com), es posible que ya tengas una cuenta, pero si no, crea una y luego haz un fork de este plan de estudios para usarlo por tu cuenta. (Siéntete libre de darnos una estrella, también 😊) -- **Explora Scikit-learn**. Familiarízate con [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), un conjunto de bibliotecas de ML que referenciamos en estas lecciones. - ---- -## ¿Qué es el aprendizaje automático? - -El término 'aprendizaje automático' es uno de los términos más populares y frecuentemente utilizados en la actualidad. Hay una posibilidad no trivial de que hayas escuchado este término al menos una vez si tienes algún tipo de familiaridad con la tecnología, sin importar en qué dominio trabajes. Sin embargo, la mecánica del aprendizaje automático es un misterio para la mayoría de las personas. Para un principiante en aprendizaje automático, el tema a veces puede parecer abrumador. Por lo tanto, es importante entender qué es realmente el aprendizaje automático y aprender sobre él paso a paso, a través de ejemplos prácticos. - ---- -## La curva del hype - -![ml hype curve](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.es.png) - -> Google Trends muestra la reciente 'curva del hype' del término 'aprendizaje automático' - ---- -## Un universo misterioso - -Vivimos en un universo lleno de misterios fascinantes. Grandes científicos como Stephen Hawking, Albert Einstein y muchos más han dedicado sus vidas a buscar información significativa que revele los misterios del mundo que nos rodea. Esta es la condición humana de aprender: un niño humano aprende cosas nuevas y descubre la estructura de su mundo año tras año a medida que crece hasta la adultez. - ---- -## El cerebro del niño - -El cerebro y los sentidos de un niño perciben los hechos de su entorno y gradualmente aprenden los patrones ocultos de la vida que ayudan al niño a crear reglas lógicas para identificar patrones aprendidos. El proceso de aprendizaje del cerebro humano hace que los humanos sean la criatura viviente más sofisticada de este mundo. Aprender continuamente al descubrir patrones ocultos y luego innovar sobre esos patrones nos permite mejorar y mejorar a lo largo de nuestra vida. Esta capacidad de aprendizaje y capacidad de evolución está relacionada con un concepto llamado [plasticidad cerebral](https://www.simplypsychology.org/brain-plasticity.html). Superficialmente, podemos trazar algunas similitudes motivacionales entre el proceso de aprendizaje del cerebro humano y los conceptos de aprendizaje automático. - ---- -## El cerebro humano - -El [cerebro humano](https://www.livescience.com/29365-human-brain.html) percibe cosas del mundo real, procesa la información percibida, toma decisiones racionales y realiza ciertas acciones según las circunstancias. Esto es lo que llamamos comportarse inteligentemente. Cuando programamos una réplica del proceso de comportamiento inteligente en una máquina, se llama inteligencia artificial (IA). - ---- -## Algo de terminología - -Aunque los términos pueden confundirse, el aprendizaje automático (ML) es un subconjunto importante de la inteligencia artificial. **ML se preocupa por usar algoritmos especializados para descubrir información significativa y encontrar patrones ocultos a partir de datos percibidos para corroborar el proceso de toma de decisiones racionales**. - ---- -## IA, ML, Aprendizaje Profundo - -![AI, ML, deep learning, data science](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.es.png) - -> Un diagrama que muestra las relaciones entre IA, ML, aprendizaje profundo y ciencia de datos. Infografía de [Jen Looper](https://twitter.com/jenlooper) inspirada por [esta gráfica](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - ---- -## Conceptos a cubrir - -En este plan de estudios, vamos a cubrir solo los conceptos básicos del aprendizaje automático que un principiante debe conocer. Cubrimos lo que llamamos 'aprendizaje automático clásico' utilizando principalmente Scikit-learn, una excelente biblioteca que muchos estudiantes usan para aprender lo básico. Para entender conceptos más amplios de inteligencia artificial o aprendizaje profundo, es indispensable un conocimiento fundamental sólido del aprendizaje automático, y por eso queremos ofrecerlo aquí. - ---- -## En este curso aprenderás: - -- conceptos básicos del aprendizaje automático -- la historia del ML -- ML y equidad -- técnicas de regresión en ML -- técnicas de clasificación en ML -- técnicas de clustering en ML -- técnicas de procesamiento de lenguaje natural en ML -- técnicas de pronóstico de series temporales en ML -- aprendizaje por refuerzo -- aplicaciones del mundo real para ML - ---- -## Lo que no cubriremos - -- aprendizaje profundo -- redes neuronales -- IA - -Para hacer una mejor experiencia de aprendizaje, evitaremos las complejidades de las redes neuronales, el 'aprendizaje profundo' - construcción de modelos de muchas capas usando redes neuronales - y la IA, que discutiremos en un plan de estudios diferente. También ofreceremos un próximo plan de estudios de ciencia de datos para centrarnos en ese aspecto de este campo más amplio. - ---- -## ¿Por qué estudiar aprendizaje automático? - -El aprendizaje automático, desde una perspectiva de sistemas, se define como la creación de sistemas automatizados que pueden aprender patrones ocultos a partir de datos para ayudar a tomar decisiones inteligentes. - -Esta motivación está libremente inspirada en cómo el cerebro humano aprende ciertas cosas basadas en los datos que percibe del mundo exterior. - -✅ Piensa por un minuto por qué una empresa querría intentar usar estrategias de aprendizaje automático en lugar de crear un motor basado en reglas codificadas. - ---- -## Aplicaciones del aprendizaje automático - -Las aplicaciones del aprendizaje automático están ahora casi en todas partes, y son tan ubicuas como los datos que fluyen en nuestras sociedades, generados por nuestros teléfonos inteligentes, dispositivos conectados y otros sistemas. Considerando el inmenso potencial de los algoritmos de aprendizaje automático de última generación, los investigadores han estado explorando su capacidad para resolver problemas de la vida real multidimensionales y multidisciplinarios con grandes resultados positivos. - ---- -## Ejemplos de ML aplicado - -**Puedes usar el aprendizaje automático de muchas maneras**: - -- Para predecir la probabilidad de enfermedad a partir del historial médico o informes de un paciente. -- Para aprovechar los datos meteorológicos y predecir eventos climáticos. -- Para entender el sentimiento de un texto. -- Para detectar noticias falsas y detener la propagación de propaganda. - -Finanzas, economía, ciencias de la tierra, exploración espacial, ingeniería biomédica, ciencia cognitiva e incluso campos en las humanidades han adaptado el aprendizaje automático para resolver los arduos problemas de procesamiento de datos de su dominio. - ---- -## Conclusión - -El aprendizaje automático automatiza el proceso de descubrimiento de patrones al encontrar ideas significativas a partir de datos del mundo real o generados. Ha demostrado ser altamente valioso en aplicaciones comerciales, de salud y financieras, entre otras. - -En un futuro cercano, entender los conceptos básicos del aprendizaje automático será una necesidad para personas de cualquier dominio debido a su adopción generalizada. - ---- -# 🚀 Desafío - -Dibuja, en papel o utilizando una aplicación en línea como [Excalidraw](https://excalidraw.com/), tu comprensión de las diferencias entre IA, ML, aprendizaje profundo y ciencia de datos. Agrega algunas ideas de problemas que cada una de estas técnicas es buena para resolver. - -# [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - ---- -# Revisión y Autoestudio - -Para aprender más sobre cómo puedes trabajar con algoritmos de ML en la nube, sigue este [Camino de Aprendizaje](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -Toma un [Camino de Aprendizaje](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sobre los conceptos básicos de ML. - ---- -# Tarea - -[Ponte en marcha](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/1-intro-to-ML/assignment.md b/translations/es/1-Introduction/1-intro-to-ML/assignment.md deleted file mode 100644 index 59f1f889..00000000 --- a/translations/es/1-Introduction/1-intro-to-ML/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# Ponerse en Marcha - -## Instrucciones - -En esta tarea no calificada, deberías repasar Python y preparar tu entorno para poder ejecutar notebooks. - -Toma esta [Ruta de Aprendizaje de Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), y luego configura tus sistemas viendo estos videos introductorios: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/2-history-of-ML/README.md b/translations/es/1-Introduction/2-history-of-ML/README.md deleted file mode 100644 index d105545c..00000000 --- a/translations/es/1-Introduction/2-history-of-ML/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# Historia del aprendizaje automático - -![Resumen de la Historia del aprendizaje automático en un sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.es.png) -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - ---- - -[![ML para principiantes - Historia del Aprendizaje Automático](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML para principiantes - Historia del Aprendizaje Automático") - -> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre esta lección. - -En esta lección, repasaremos los hitos más importantes en la historia del aprendizaje automático y la inteligencia artificial. - -La historia de la inteligencia artificial (IA) como campo está entrelazada con la historia del aprendizaje automático, ya que los algoritmos y avances computacionales que sustentan el ML alimentaron el desarrollo de la IA. Es útil recordar que, aunque estos campos como áreas de investigación distintas comenzaron a cristalizarse en la década de 1950, importantes [descubrimientos algorítmicos, estadísticos, matemáticos, computacionales y técnicos](https://wikipedia.org/wiki/Timeline_of_machine_learning) precedieron y se superpusieron a esta era. De hecho, las personas han estado pensando en estas cuestiones durante [cientos de años](https://wikipedia.org/wiki/History_of_artificial_intelligence): este artículo discute las bases intelectuales históricas de la idea de una 'máquina pensante'. - ---- -## Descubrimientos notables - -- 1763, 1812 [Teorema de Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) y sus predecesores. Este teorema y sus aplicaciones subyacen en la inferencia, describiendo la probabilidad de que ocurra un evento basado en conocimientos previos. -- 1805 [Teoría de los Mínimos Cuadrados](https://wikipedia.org/wiki/Least_squares) por el matemático francés Adrien-Marie Legendre. Esta teoría, que aprenderás en nuestra unidad de Regresión, ayuda en el ajuste de datos. -- 1913 [Cadenas de Markov](https://wikipedia.org/wiki/Markov_chain), nombradas así por el matemático ruso Andrey Markov, se utilizan para describir una secuencia de posibles eventos basada en un estado anterior. -- 1957 [Perceptrón](https://wikipedia.org/wiki/Perceptron) es un tipo de clasificador lineal inventado por el psicólogo estadounidense Frank Rosenblatt que subyace en los avances en el aprendizaje profundo. - ---- - -- 1967 [Vecino más cercano](https://wikipedia.org/wiki/Nearest_neighbor) es un algoritmo diseñado originalmente para mapear rutas. En un contexto de ML se usa para detectar patrones. -- 1970 [Retropropagación](https://wikipedia.org/wiki/Backpropagation) se utiliza para entrenar [redes neuronales feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Redes Neuronales Recurrentes](https://wikipedia.org/wiki/Recurrent_neural_network) son redes neuronales artificiales derivadas de las redes neuronales feedforward que crean gráficos temporales. - -✅ Investiga un poco. ¿Qué otras fechas se destacan como fundamentales en la historia del ML y la IA? - ---- -## 1950: Máquinas que piensan - -Alan Turing, una persona verdaderamente notable que fue votada [por el público en 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) como el mayor científico del siglo XX, es acreditado por ayudar a sentar las bases para el concepto de una 'máquina que puede pensar'. Luchó con detractores y con su propia necesidad de evidencia empírica de este concepto en parte creando el [Test de Turing](https://www.bbc.com/news/technology-18475646), que explorarás en nuestras lecciones de PLN. - ---- -## 1956: Proyecto de Investigación de Verano de Dartmouth - -"El Proyecto de Investigación de Verano de Dartmouth sobre inteligencia artificial fue un evento fundamental para la inteligencia artificial como campo," y fue aquí donde se acuñó el término 'inteligencia artificial' ([fuente](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Cada aspecto del aprendizaje o cualquier otra característica de la inteligencia puede describirse en principio de manera tan precisa que se pueda hacer que una máquina lo simule. - ---- - -El investigador principal, el profesor de matemáticas John McCarthy, esperaba "proceder sobre la base de la conjetura de que cada aspecto del aprendizaje o cualquier otra característica de la inteligencia puede describirse en principio de manera tan precisa que se pueda hacer que una máquina lo simule." Los participantes incluyeron a otra luminaria en el campo, Marvin Minsky. - -El taller se acredita con haber iniciado y alentado varias discusiones, incluyendo "el surgimiento de métodos simbólicos, sistemas enfocados en dominios limitados (primeros sistemas expertos), y sistemas deductivos versus sistemas inductivos." ([fuente](https://wikipedia.org/wiki/Dartmouth_workshop)). - ---- -## 1956 - 1974: "Los años dorados" - -Desde la década de 1950 hasta mediados de los años '70, el optimismo era alto con la esperanza de que la IA pudiera resolver muchos problemas. En 1967, Marvin Minsky afirmó con confianza que "Dentro de una generación... el problema de crear 'inteligencia artificial' se resolverá sustancialmente." (Minsky, Marvin (1967), Computación: Máquinas Finita e Infinita, Englewood Cliffs, N.J.: Prentice-Hall) - -La investigación en procesamiento de lenguaje natural floreció, la búsqueda se refinó y se hizo más poderosa, y se creó el concepto de 'micro-mundos', donde se completaban tareas simples usando instrucciones en lenguaje claro. - ---- - -La investigación fue bien financiada por agencias gubernamentales, se hicieron avances en computación y algoritmos, y se construyeron prototipos de máquinas inteligentes. Algunas de estas máquinas incluyen: - -* [Shakey el robot](https://wikipedia.org/wiki/Shakey_the_robot), que podía maniobrar y decidir cómo realizar tareas 'inteligentemente'. - - ![Shakey, un robot inteligente](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.es.jpg) - > Shakey en 1972 - ---- - -* Eliza, un temprano 'chatterbot', podía conversar con personas y actuar como un 'terapeuta' primitivo. Aprenderás más sobre Eliza en las lecciones de PLN. - - ![Eliza, un bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.es.png) - > Una versión de Eliza, un chatbot - ---- - -* "Mundo de bloques" fue un ejemplo de un micro-mundo donde los bloques podían apilarse y ordenarse, y se podían probar experimentos en enseñar a las máquinas a tomar decisiones. Los avances construidos con bibliotecas como [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ayudaron a impulsar el procesamiento del lenguaje. - - [![mundo de bloques con SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "mundo de bloques con SHRDLU") - - > 🎥 Haz clic en la imagen de arriba para un video: Mundo de bloques con SHRDLU - ---- -## 1974 - 1980: "Invierno de la IA" - -A mediados de los años 70, se hizo evidente que la complejidad de hacer 'máquinas inteligentes' había sido subestimada y que su promesa, dada la potencia de cálculo disponible, había sido exagerada. La financiación se secó y la confianza en el campo disminuyó. Algunos problemas que afectaron la confianza incluyeron: ---- -- **Limitaciones**. La potencia de cálculo era demasiado limitada. -- **Explosión combinatoria**. La cantidad de parámetros que necesitaban ser entrenados creció exponencialmente a medida que se pedía más a las computadoras, sin una evolución paralela de la potencia y capacidad de cálculo. -- **Escasez de datos**. Había una escasez de datos que obstaculizaba el proceso de probar, desarrollar y refinar algoritmos. -- **¿Estamos haciendo las preguntas correctas?**. Las propias preguntas que se estaban haciendo comenzaron a ser cuestionadas. Los investigadores comenzaron a recibir críticas sobre sus enfoques: - - Las pruebas de Turing fueron cuestionadas mediante, entre otras ideas, la 'teoría de la habitación china' que postulaba que, "programar una computadora digital puede hacer que parezca entender el lenguaje, pero no podría producir una comprensión real." ([fuente](https://plato.stanford.edu/entries/chinese-room/)) - - Se cuestionó la ética de introducir inteligencias artificiales como el "terapeuta" ELIZA en la sociedad. - ---- - -Al mismo tiempo, comenzaron a formarse varias escuelas de pensamiento de IA. Se estableció una dicotomía entre las prácticas de ["IA desordenada" vs. "IA ordenada"](https://wikipedia.org/wiki/Neats_and_scruffies). Los laboratorios _desordenados_ ajustaban programas durante horas hasta obtener los resultados deseados. Los laboratorios _ordenados_ "se centraban en la lógica y la resolución formal de problemas". ELIZA y SHRDLU eran sistemas _desordenados_ bien conocidos. En la década de 1980, a medida que surgió la demanda de hacer los sistemas de ML reproducibles, el enfoque _ordenado_ gradualmente tomó la delantera ya que sus resultados son más explicables. - ---- -## Sistemas expertos de los años 80 - -A medida que el campo creció, sus beneficios para los negocios se hicieron más claros, y en la década de 1980 también lo hizo la proliferación de 'sistemas expertos'. "Los sistemas expertos fueron una de las primeras formas verdaderamente exitosas de software de inteligencia artificial (IA)." ([fuente](https://wikipedia.org/wiki/Expert_system)). - -Este tipo de sistema es en realidad _híbrido_, consistiendo parcialmente en un motor de reglas que define los requisitos comerciales, y un motor de inferencia que aprovechaba el sistema de reglas para deducir nuevos hechos. - -Esta era también vio una mayor atención a las redes neuronales. - ---- -## 1987 - 1993: 'Enfriamiento' de la IA - -La proliferación de hardware especializado en sistemas expertos tuvo el desafortunado efecto de volverse demasiado especializado. El auge de las computadoras personales también compitió con estos sistemas grandes, especializados y centralizados. La democratización de la informática había comenzado, y eventualmente allanó el camino para la explosión moderna de big data. - ---- -## 1993 - 2011 - -Esta época vio una nueva era para el ML y la IA, pudiendo resolver algunos de los problemas causados anteriormente por la falta de datos y potencia de cálculo. La cantidad de datos comenzó a aumentar rápidamente y a estar más disponible, para bien y para mal, especialmente con la llegada del smartphone alrededor de 2007. La potencia de cálculo se expandió exponencialmente, y los algoritmos evolucionaron junto a ella. El campo comenzó a madurar a medida que los días desenfrenados del pasado comenzaron a cristalizarse en una verdadera disciplina. - ---- -## Ahora - -Hoy en día, el aprendizaje automático y la IA tocan casi todas las partes de nuestras vidas. Esta era exige una comprensión cuidadosa de los riesgos y efectos potenciales de estos algoritmos en la vida humana. Como ha dicho Brad Smith de Microsoft, "La tecnología de la información plantea cuestiones que llegan al corazón de las protecciones fundamentales de los derechos humanos, como la privacidad y la libertad de expresión. Estas cuestiones aumentan la responsabilidad de las empresas tecnológicas que crean estos productos. En nuestra opinión, también exigen una regulación gubernamental reflexiva y el desarrollo de normas sobre usos aceptables" ([fuente](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - ---- - -Queda por ver qué depara el futuro, pero es importante entender estos sistemas informáticos y el software y algoritmos que ejecutan. Esperamos que este plan de estudios te ayude a obtener una mejor comprensión para que puedas decidir por ti mismo. - -[![La historia del aprendizaje profundo](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "La historia del aprendizaje profundo") -> 🎥 Haz clic en la imagen de arriba para un video: Yann LeCun discute la historia del aprendizaje profundo en esta conferencia - ---- -## 🚀Desafío - -Investiga uno de estos momentos históricos y aprende más sobre las personas detrás de ellos. Hay personajes fascinantes, y ningún descubrimiento científico se creó jamás en un vacío cultural. ¿Qué descubres? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - ---- -## Revisión y Autoestudio - -Aquí hay elementos para ver y escuchar: - -[Este podcast donde Amy Boyd discute la evolución de la IA](http://runasradio.com/Shows/Show/739) -[![La historia de la IA por Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "La historia de la IA por Amy Boyd") - ---- - -## Tarea - -[Crear una línea de tiempo](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/2-history-of-ML/assignment.md b/translations/es/1-Introduction/2-history-of-ML/assignment.md deleted file mode 100644 index e14285a7..00000000 --- a/translations/es/1-Introduction/2-history-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Crear una línea de tiempo - -## Instrucciones - -Usando [este repositorio](https://github.com/Digital-Humanities-Toolkit/timeline-builder), crea una línea de tiempo de algún aspecto de la historia de los algoritmos, matemáticas, estadísticas, IA o ML, o una combinación de estos. Puedes enfocarte en una persona, una idea o un largo período de pensamiento. Asegúrate de añadir elementos multimedia. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | ------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | Se presenta una línea de tiempo desplegada como una página de GitHub | El código está incompleto y no desplegado | La línea de tiempo está incompleta, no bien investigada y no desplegada | - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/3-fairness/README.md b/translations/es/1-Introduction/3-fairness/README.md deleted file mode 100644 index ce728b44..00000000 --- a/translations/es/1-Introduction/3-fairness/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# Construyendo soluciones de aprendizaje automático con IA responsable - -![Resumen de IA responsable en Aprendizaje Automático en un sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.es.png) -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## Introducción - -En este currículo, comenzarás a descubrir cómo el aprendizaje automático puede y está impactando nuestras vidas cotidianas. Incluso ahora, los sistemas y modelos están involucrados en tareas de toma de decisiones diarias, como diagnósticos de salud, aprobaciones de préstamos o detección de fraudes. Por lo tanto, es importante que estos modelos funcionen bien para proporcionar resultados confiables. Al igual que cualquier aplicación de software, los sistemas de IA pueden no cumplir con las expectativas o tener un resultado indeseable. Es por eso que es esencial poder entender y explicar el comportamiento de un modelo de IA. - -Imagina lo que puede suceder cuando los datos que utilizas para construir estos modelos carecen de ciertos datos demográficos, como raza, género, visión política, religión, o representan desproporcionadamente dichos datos demográficos. ¿Qué pasa cuando la salida del modelo se interpreta para favorecer a algunos demográficos? ¿Cuál es la consecuencia para la aplicación? Además, ¿qué sucede cuando el modelo tiene un resultado adverso y es perjudicial para las personas? ¿Quién es responsable del comportamiento de los sistemas de IA? Estas son algunas preguntas que exploraremos en este currículo. - -En esta lección, tú: - -- Aumentarás tu conciencia sobre la importancia de la equidad en el aprendizaje automático y los daños relacionados con la equidad. -- Te familiarizarás con la práctica de explorar valores atípicos y escenarios inusuales para garantizar la fiabilidad y seguridad. -- Comprenderás la necesidad de empoderar a todos diseñando sistemas inclusivos. -- Explorarás la importancia de proteger la privacidad y seguridad de los datos y las personas. -- Verás la importancia de tener un enfoque de caja de cristal para explicar el comportamiento de los modelos de IA. -- Serás consciente de cómo la responsabilidad es esencial para construir confianza en los sistemas de IA. - -## Prerrequisito - -Como prerrequisito, toma la ruta de aprendizaje "Principios de IA Responsable" y mira el video a continuación sobre el tema: - -Aprende más sobre IA Responsable siguiendo esta [Ruta de Aprendizaje](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) - -[![Enfoque de Microsoft hacia la IA Responsable](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Enfoque de Microsoft hacia la IA Responsable") - -> 🎥 Haz clic en la imagen de arriba para ver un video: Enfoque de Microsoft hacia la IA Responsable - -## Equidad - -Los sistemas de IA deben tratar a todos de manera justa y evitar afectar a grupos similares de personas de diferentes maneras. Por ejemplo, cuando los sistemas de IA proporcionan orientación sobre tratamiento médico, solicitudes de préstamos o empleo, deben hacer las mismas recomendaciones a todos con síntomas similares, circunstancias financieras o cualificaciones profesionales. Cada uno de nosotros, como seres humanos, lleva consigo sesgos heredados que afectan nuestras decisiones y acciones. Estos sesgos pueden ser evidentes en los datos que utilizamos para entrenar los sistemas de IA. Dicha manipulación puede ocurrir a veces de manera involuntaria. A menudo es difícil saber conscientemente cuándo estás introduciendo sesgo en los datos. - -**"Injusticia"** abarca impactos negativos, o "daños", para un grupo de personas, como aquellos definidos en términos de raza, género, edad o estado de discapacidad. Los principales daños relacionados con la equidad se pueden clasificar como: - -- **Asignación**, si por ejemplo se favorece a un género o etnia sobre otro. -- **Calidad del servicio**. Si entrenas los datos para un escenario específico pero la realidad es mucho más compleja, lleva a un servicio de bajo rendimiento. Por ejemplo, un dispensador de jabón de manos que no parece ser capaz de detectar personas con piel oscura. [Referencia](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **Denigración**. Criticar y etiquetar injustamente algo o alguien. Por ejemplo, una tecnología de etiquetado de imágenes etiquetó infamemente imágenes de personas de piel oscura como gorilas. -- **Sobre o subrepresentación**. La idea es que un cierto grupo no se vea en una cierta profesión, y cualquier servicio o función que siga promoviendo eso está contribuyendo al daño. -- **Estereotipos**. Asociar un grupo dado con atributos preasignados. Por ejemplo, un sistema de traducción de idiomas entre inglés y turco puede tener inexactitudes debido a palabras con asociaciones estereotipadas de género. - -![traducción al turco](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.es.png) -> traducción al turco - -![traducción de vuelta al inglés](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.es.png) -> traducción de vuelta al inglés - -Al diseñar y probar sistemas de IA, debemos asegurarnos de que la IA sea justa y no esté programada para tomar decisiones sesgadas o discriminatorias, que los seres humanos también tienen prohibido tomar. Garantizar la equidad en la IA y el aprendizaje automático sigue siendo un desafío sociotécnico complejo. - -### Fiabilidad y seguridad - -Para generar confianza, los sistemas de IA deben ser fiables, seguros y consistentes bajo condiciones normales e inesperadas. Es importante saber cómo se comportarán los sistemas de IA en una variedad de situaciones, especialmente cuando son casos atípicos. Al construir soluciones de IA, se debe poner un enfoque sustancial en cómo manejar una amplia variedad de circunstancias que las soluciones de IA encontrarían. Por ejemplo, un coche autónomo debe poner la seguridad de las personas como una prioridad principal. Como resultado, la IA que impulsa el coche necesita considerar todos los posibles escenarios que el coche podría encontrar, como noche, tormentas eléctricas o ventiscas, niños corriendo por la calle, mascotas, construcciones en la carretera, etc. Qué tan bien un sistema de IA puede manejar una amplia gama de condiciones de manera fiable y segura refleja el nivel de anticipación que el científico de datos o el desarrollador de IA consideró durante el diseño o prueba del sistema. - -> [🎥 Haz clic aquí para un video:](https://www.microsoft.com/videoplayer/embed/RE4vvIl) - -### Inclusión - -Los sistemas de IA deben ser diseñados para involucrar y empoderar a todos. Al diseñar e implementar sistemas de IA, los científicos de datos y desarrolladores de IA identifican y abordan posibles barreras en el sistema que podrían excluir involuntariamente a las personas. Por ejemplo, hay 1 mil millones de personas con discapacidades en todo el mundo. Con el avance de la IA, pueden acceder a una amplia gama de información y oportunidades más fácilmente en sus vidas diarias. Al abordar las barreras, se crean oportunidades para innovar y desarrollar productos de IA con mejores experiencias que beneficien a todos. - -> [🎥 Haz clic aquí para un video: inclusión en IA](https://www.microsoft.com/videoplayer/embed/RE4vl9v) - -### Seguridad y privacidad - -Los sistemas de IA deben ser seguros y respetar la privacidad de las personas. Las personas confían menos en los sistemas que ponen en riesgo su privacidad, información o vidas. Al entrenar modelos de aprendizaje automático, dependemos de los datos para producir los mejores resultados. Al hacerlo, se debe considerar el origen de los datos y su integridad. Por ejemplo, ¿fueron los datos enviados por el usuario o estaban disponibles públicamente? Luego, al trabajar con los datos, es crucial desarrollar sistemas de IA que puedan proteger la información confidencial y resistir ataques. A medida que la IA se vuelve más prevalente, proteger la privacidad y asegurar información personal y empresarial importante se vuelve más crítico y complejo. Los problemas de privacidad y seguridad de datos requieren una atención especialmente cercana para la IA porque el acceso a los datos es esencial para que los sistemas de IA hagan predicciones y decisiones precisas e informadas sobre las personas. - -> [🎥 Haz clic aquí para un video: seguridad en IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - -- Como industria, hemos logrado avances significativos en privacidad y seguridad, impulsados significativamente por regulaciones como el GDPR (Reglamento General de Protección de Datos). -- Sin embargo, con los sistemas de IA debemos reconocer la tensión entre la necesidad de más datos personales para hacer los sistemas más personales y efectivos y la privacidad. -- Al igual que con el nacimiento de las computadoras conectadas a Internet, también estamos viendo un gran aumento en el número de problemas de seguridad relacionados con la IA. -- Al mismo tiempo, hemos visto que la IA se usa para mejorar la seguridad. Como ejemplo, la mayoría de los escáneres antivirus modernos están impulsados por heurísticas de IA hoy en día. -- Necesitamos asegurarnos de que nuestros procesos de Ciencia de Datos se mezclen armoniosamente con las últimas prácticas de privacidad y seguridad. - -### Transparencia - -Los sistemas de IA deben ser comprensibles. Una parte crucial de la transparencia es explicar el comportamiento de los sistemas de IA y sus componentes. Mejorar la comprensión de los sistemas de IA requiere que las partes interesadas comprendan cómo y por qué funcionan para que puedan identificar posibles problemas de rendimiento, preocupaciones de seguridad y privacidad, sesgos, prácticas excluyentes o resultados no deseados. También creemos que aquellos que usan sistemas de IA deben ser honestos y abiertos sobre cuándo, por qué y cómo eligen implementarlos, así como las limitaciones de los sistemas que usan. Por ejemplo, si un banco usa un sistema de IA para apoyar sus decisiones de préstamos al consumidor, es importante examinar los resultados y entender qué datos influyen en las recomendaciones del sistema. Los gobiernos están comenzando a regular la IA en diversas industrias, por lo que los científicos de datos y las organizaciones deben explicar si un sistema de IA cumple con los requisitos regulatorios, especialmente cuando hay un resultado no deseado. - -> [🎥 Haz clic aquí para un video: transparencia en IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - -- Debido a que los sistemas de IA son tan complejos, es difícil entender cómo funcionan e interpretar los resultados. -- Esta falta de comprensión afecta la forma en que se gestionan, operacionalizan y documentan estos sistemas. -- Esta falta de comprensión afecta más importantemente las decisiones tomadas utilizando los resultados que estos sistemas producen. - -### Responsabilidad - -Las personas que diseñan y despliegan sistemas de IA deben ser responsables de cómo operan sus sistemas. La necesidad de responsabilidad es particularmente crucial con tecnologías de uso sensible como el reconocimiento facial. Recientemente, ha habido una creciente demanda de tecnología de reconocimiento facial, especialmente por parte de organizaciones de aplicación de la ley que ven el potencial de la tecnología en usos como encontrar niños desaparecidos. Sin embargo, estas tecnologías podrían ser potencialmente utilizadas por un gobierno para poner en riesgo las libertades fundamentales de sus ciudadanos al, por ejemplo, permitir la vigilancia continua de individuos específicos. Por lo tanto, los científicos de datos y las organizaciones deben ser responsables de cómo su sistema de IA impacta a individuos o a la sociedad. - -[![Investigador líder en IA advierte sobre la vigilancia masiva a través del reconocimiento facial](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.es.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Enfoque de Microsoft hacia la IA Responsable") - -> 🎥 Haz clic en la imagen de arriba para ver un video: Advertencias sobre la vigilancia masiva a través del reconocimiento facial - -En última instancia, una de las preguntas más grandes para nuestra generación, como la primera generación que está llevando la IA a la sociedad, es cómo asegurarse de que las computadoras sigan siendo responsables ante las personas y cómo asegurarse de que las personas que diseñan computadoras sean responsables ante todos los demás. - -## Evaluación de impacto - -Antes de entrenar un modelo de aprendizaje automático, es importante realizar una evaluación de impacto para comprender el propósito del sistema de IA; cuál es el uso previsto; dónde se desplegará; y quién interactuará con el sistema. Estos son útiles para el/los revisor(es) o probadores que evalúan el sistema para saber qué factores considerar al identificar posibles riesgos y consecuencias esperadas. - -Las siguientes son áreas de enfoque al realizar una evaluación de impacto: - -* **Impacto adverso en individuos**. Ser consciente de cualquier restricción o requisito, uso no soportado o cualquier limitación conocida que obstaculice el rendimiento del sistema es vital para garantizar que el sistema no se use de manera que pueda causar daño a los individuos. -* **Requisitos de datos**. Comprender cómo y dónde el sistema usará los datos permite a los revisores explorar cualquier requisito de datos que debas tener en cuenta (por ejemplo, regulaciones de datos GDPR o HIPPA). Además, examina si la fuente o cantidad de datos es sustancial para el entrenamiento. -* **Resumen del impacto**. Reúne una lista de posibles daños que podrían surgir del uso del sistema. A lo largo del ciclo de vida del ML, revisa si los problemas identificados están mitigados o abordados. -* **Objetivos aplicables** para cada uno de los seis principios fundamentales. Evalúa si los objetivos de cada uno de los principios se cumplen y si hay alguna brecha. - -## Depuración con IA responsable - -Al igual que depurar una aplicación de software, depurar un sistema de IA es un proceso necesario de identificación y resolución de problemas en el sistema. Hay muchos factores que afectarían a un modelo que no se desempeña como se espera o de manera responsable. La mayoría de las métricas de rendimiento de modelos tradicionales son agregados cuantitativos del rendimiento de un modelo, que no son suficientes para analizar cómo un modelo viola los principios de IA responsable. Además, un modelo de aprendizaje automático es una caja negra que hace difícil entender qué impulsa su resultado o proporcionar una explicación cuando comete un error. Más adelante en este curso, aprenderemos cómo usar el panel de IA Responsable para ayudar a depurar sistemas de IA. El panel proporciona una herramienta holística para que los científicos de datos y desarrolladores de IA realicen: - -* **Análisis de errores**. Para identificar la distribución de errores del modelo que puede afectar la equidad o fiabilidad del sistema. -* **Visión general del modelo**. Para descubrir dónde hay disparidades en el rendimiento del modelo a través de cohortes de datos. -* **Análisis de datos**. Para entender la distribución de datos e identificar cualquier posible sesgo en los datos que podría llevar a problemas de equidad, inclusión y fiabilidad. -* **Interpretabilidad del modelo**. Para entender qué afecta o influye en las predicciones del modelo. Esto ayuda a explicar el comportamiento del modelo, lo cual es importante para la transparencia y la responsabilidad. - -## 🚀 Desafío - -Para prevenir daños desde el principio, debemos: - -- tener una diversidad de antecedentes y perspectivas entre las personas que trabajan en los sistemas -- invertir en conjuntos de datos que reflejen la diversidad de nuestra sociedad -- desarrollar mejores métodos a lo largo del ciclo de vida del aprendizaje automático para detectar y corregir la IA responsable cuando ocurra - -Piensa en escenarios de la vida real donde la falta de confiabilidad de un modelo es evidente en la construcción y uso del modelo. ¿Qué más deberíamos considerar? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## Revisión y autoestudio - -En esta lección, has aprendido algunos conceptos básicos sobre la equidad y la injusticia en el aprendizaje automático. - -Mira este taller para profundizar en los temas: - -- En busca de IA responsable: Llevando los principios a la práctica por Besmira Nushi, Mehrnoosh Sameki y Amit Sharma - -[![RAI Toolbox: Un marco de código abierto para construir IA responsable](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Un marco de código abierto para construir IA responsable") - -> 🎥 Haz clic en la imagen de arriba para ver un video: RAI Toolbox: Un marco de código abierto para construir IA responsable por Besmira Nushi, Mehrnoosh Sameki y Amit Sharma - -También lee: - -- Centro de recursos de RAI de Microsoft: [Recursos de IA Responsable – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) - -- Grupo de investigación FATE de Microsoft: [FATE: Equidad, Responsabilidad, Transparencia y Ética en IA - Microsoft Research](https://www.microsoft.com/research/theme/fate/) - -RAI Toolbox: - -- [Repositorio de GitHub de Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) - -Lee sobre las herramientas de Azure Machine Learning para garantizar la equidad: - -- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) - -## Tarea - -[Explora RAI Toolbox](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/3-fairness/assignment.md b/translations/es/1-Introduction/3-fairness/assignment.md deleted file mode 100644 index e2328b7e..00000000 --- a/translations/es/1-Introduction/3-fairness/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Explora el Responsible AI Toolbox - -## Instrucciones - -En esta lección aprendiste sobre el Responsible AI Toolbox, un "proyecto de código abierto impulsado por la comunidad para ayudar a los científicos de datos a analizar y mejorar los sistemas de IA." Para esta tarea, explora uno de los [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) de RAI Toolbox y reporta tus hallazgos en un documento o presentación. - -## Rubrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------- | -------- | ---------------- | -| | Se presenta un documento o una presentación en PowerPoint discutiendo los sistemas de Fairlearn, el notebook que se ejecutó y las conclusiones obtenidas de su ejecución | Se presenta un documento sin conclusiones | No se presenta ningún documento | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/4-techniques-of-ML/README.md b/translations/es/1-Introduction/4-techniques-of-ML/README.md deleted file mode 100644 index 91ce103d..00000000 --- a/translations/es/1-Introduction/4-techniques-of-ML/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Técnicas de Aprendizaje Automático - -El proceso de construir, usar y mantener modelos de aprendizaje automático y los datos que utilizan es muy diferente de muchos otros flujos de trabajo de desarrollo. En esta lección, desmitificaremos el proceso y delinearemos las principales técnicas que necesitas conocer. Tú: - -- Comprenderás los procesos que sustentan el aprendizaje automático a un alto nivel. -- Explorarás conceptos básicos como 'modelos', 'predicciones' y 'datos de entrenamiento'. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) - -[![ML para principiantes - Técnicas de Aprendizaje Automático](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML para principiantes - Técnicas de Aprendizaje Automático") - -> 🎥 Haz clic en la imagen de arriba para ver un video corto que recorre esta lección. - -## Introducción - -A un alto nivel, el arte de crear procesos de aprendizaje automático (ML) se compone de varios pasos: - -1. **Decidir la pregunta**. La mayoría de los procesos de ML comienzan con una pregunta que no puede ser respondida por un simple programa condicional o un motor basado en reglas. Estas preguntas a menudo giran en torno a predicciones basadas en una colección de datos. -2. **Recopilar y preparar datos**. Para poder responder a tu pregunta, necesitas datos. La calidad y, a veces, la cantidad de tus datos determinarán qué tan bien puedes responder a tu pregunta inicial. Visualizar los datos es un aspecto importante de esta fase. Esta fase también incluye dividir los datos en un grupo de entrenamiento y un grupo de prueba para construir un modelo. -3. **Elegir un método de entrenamiento**. Dependiendo de tu pregunta y la naturaleza de tus datos, necesitas elegir cómo quieres entrenar un modelo para reflejar mejor tus datos y hacer predicciones precisas. Esta es la parte de tu proceso de ML que requiere experiencia específica y, a menudo, una cantidad considerable de experimentación. -4. **Entrenar el modelo**. Usando tus datos de entrenamiento, usarás varios algoritmos para entrenar un modelo que reconozca patrones en los datos. El modelo puede utilizar pesos internos que se pueden ajustar para privilegiar ciertas partes de los datos sobre otras para construir un mejor modelo. -5. **Evaluar el modelo**. Usas datos que nunca antes has visto (tus datos de prueba) de tu conjunto recopilado para ver cómo está funcionando el modelo. -6. **Ajuste de parámetros**. Basado en el rendimiento de tu modelo, puedes rehacer el proceso usando diferentes parámetros, o variables, que controlan el comportamiento de los algoritmos utilizados para entrenar el modelo. -7. **Predecir**. Usa nuevas entradas para probar la precisión de tu modelo. - -## Qué pregunta hacer - -Las computadoras son particularmente hábiles en descubrir patrones ocultos en los datos. Esta utilidad es muy útil para los investigadores que tienen preguntas sobre un dominio determinado que no pueden ser respondidas fácilmente creando un motor de reglas condicionales. Dada una tarea actuarial, por ejemplo, un científico de datos podría ser capaz de construir reglas hechas a mano sobre la mortalidad de fumadores vs no fumadores. - -Sin embargo, cuando se traen muchas otras variables a la ecuación, un modelo de ML podría resultar más eficiente para predecir tasas de mortalidad futuras basadas en el historial de salud pasado. Un ejemplo más alegre podría ser hacer predicciones meteorológicas para el mes de abril en una ubicación determinada basada en datos que incluyen latitud, longitud, cambio climático, proximidad al océano, patrones de la corriente en chorro, y más. - -✅ Esta [presentación de diapositivas](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sobre modelos meteorológicos ofrece una perspectiva histórica del uso de ML en el análisis meteorológico. - -## Tareas previas a la construcción - -Antes de comenzar a construir tu modelo, hay varias tareas que necesitas completar. Para probar tu pregunta y formar una hipótesis basada en las predicciones de un modelo, necesitas identificar y configurar varios elementos. - -### Datos - -Para poder responder a tu pregunta con algún tipo de certeza, necesitas una buena cantidad de datos del tipo correcto. Hay dos cosas que necesitas hacer en este punto: - -- **Recopilar datos**. Teniendo en cuenta la lección anterior sobre la equidad en el análisis de datos, recopila tus datos con cuidado. Sé consciente de las fuentes de estos datos, cualquier sesgo inherente que puedan tener y documenta su origen. -- **Preparar datos**. Hay varios pasos en el proceso de preparación de datos. Es posible que necesites compilar datos y normalizarlos si provienen de fuentes diversas. Puedes mejorar la calidad y cantidad de los datos a través de varios métodos como convertir cadenas a números (como hacemos en [Clustering](../../5-Clustering/1-Visualize/README.md)). También puedes generar nuevos datos, basados en los originales (como hacemos en [Clasificación](../../4-Classification/1-Introduction/README.md)). Puedes limpiar y editar los datos (como haremos antes de la lección de la [Aplicación Web](../../3-Web-App/README.md)). Finalmente, también podrías necesitar aleatorizarlos y barajarlos, dependiendo de tus técnicas de entrenamiento. - -✅ Después de recopilar y procesar tus datos, tómate un momento para ver si su forma te permitirá abordar tu pregunta prevista. Puede ser que los datos no se desempeñen bien en tu tarea dada, como descubrimos en nuestras lecciones de [Clustering](../../5-Clustering/1-Visualize/README.md). - -### Características y Objetivo - -Una [característica](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) es una propiedad medible de tus datos. En muchos conjuntos de datos se expresa como un encabezado de columna como 'fecha', 'tamaño' o 'color'. Tu variable característica, usualmente representada como `X` en el código, representa la variable de entrada que se utilizará para entrenar el modelo. - -Un objetivo es aquello que estás tratando de predecir. El objetivo, usualmente representado como `y` en el código, representa la respuesta a la pregunta que estás tratando de hacer a tus datos: en diciembre, ¿qué **color** de calabazas será el más barato? en San Francisco, ¿qué barrios tendrán el mejor **precio** inmobiliario? A veces, el objetivo también se refiere como atributo de etiqueta. - -### Selección de tu variable característica - -🎓 **Selección de Características y Extracción de Características** ¿Cómo sabes qué variable elegir al construir un modelo? Probablemente pasarás por un proceso de selección de características o extracción de características para elegir las variables correctas para el modelo más eficiente. Sin embargo, no son lo mismo: "La extracción de características crea nuevas características a partir de funciones de las características originales, mientras que la selección de características devuelve un subconjunto de las características." ([fuente](https://wikipedia.org/wiki/Feature_selection)) - -### Visualiza tus datos - -Un aspecto importante del kit de herramientas del científico de datos es el poder de visualizar datos usando varias bibliotecas excelentes como Seaborn o MatPlotLib. Representar tus datos visualmente puede permitirte descubrir correlaciones ocultas que puedes aprovechar. Tus visualizaciones también pueden ayudarte a descubrir sesgos o datos desequilibrados (como descubrimos en [Clasificación](../../4-Classification/2-Classifiers-1/README.md)). - -### Divide tu conjunto de datos - -Antes de entrenar, necesitas dividir tu conjunto de datos en dos o más partes de tamaño desigual que aún representen bien los datos. - -- **Entrenamiento**. Esta parte del conjunto de datos se ajusta a tu modelo para entrenarlo. Este conjunto constituye la mayoría del conjunto de datos original. -- **Prueba**. Un conjunto de datos de prueba es un grupo independiente de datos, a menudo reunido a partir de los datos originales, que utilizas para confirmar el rendimiento del modelo construido. -- **Validación**. Un conjunto de validación es un grupo más pequeño de ejemplos independientes que utilizas para ajustar los hiperparámetros del modelo, o la arquitectura, para mejorar el modelo. Dependiendo del tamaño de tus datos y la pregunta que estás haciendo, es posible que no necesites construir este tercer conjunto (como anotamos en [Pronóstico de Series Temporales](../../7-TimeSeries/1-Introduction/README.md)). - -## Construcción de un modelo - -Usando tus datos de entrenamiento, tu objetivo es construir un modelo, o una representación estadística de tus datos, usando varios algoritmos para **entrenarlo**. Entrenar un modelo lo expone a datos y le permite hacer suposiciones sobre los patrones percibidos que descubre, valida y acepta o rechaza. - -### Decidir un método de entrenamiento - -Dependiendo de tu pregunta y la naturaleza de tus datos, elegirás un método para entrenarlo. Revisando la [documentación de Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - que usamos en este curso - puedes explorar muchas formas de entrenar un modelo. Dependiendo de tu experiencia, es posible que tengas que probar varios métodos diferentes para construir el mejor modelo. Es probable que pases por un proceso en el que los científicos de datos evalúan el rendimiento de un modelo alimentándolo con datos no vistos, verificando la precisión, el sesgo y otros problemas que degradan la calidad, y seleccionando el método de entrenamiento más apropiado para la tarea en cuestión. - -### Entrenar un modelo - -Armado con tus datos de entrenamiento, estás listo para 'ajustarlo' para crear un modelo. Notarás que en muchas bibliotecas de ML encontrarás el código 'model.fit' - es en este momento que envías tu variable característica como un array de valores (usualmente 'X') y una variable objetivo (usualmente 'y'). - -### Evaluar el modelo - -Una vez que el proceso de entrenamiento esté completo (puede tomar muchas iteraciones, o 'épocas', para entrenar un modelo grande), podrás evaluar la calidad del modelo usando datos de prueba para medir su rendimiento. Estos datos son un subconjunto de los datos originales que el modelo no ha analizado previamente. Puedes imprimir una tabla de métricas sobre la calidad de tu modelo. - -🎓 **Ajuste del modelo** - -En el contexto del aprendizaje automático, el ajuste del modelo se refiere a la precisión de la función subyacente del modelo mientras intenta analizar datos con los que no está familiarizado. - -🎓 **Subajuste** y **sobreajuste** son problemas comunes que degradan la calidad del modelo, ya que el modelo se ajusta ya sea no lo suficientemente bien o demasiado bien. Esto causa que el modelo haga predicciones demasiado alineadas o demasiado desalineadas con sus datos de entrenamiento. Un modelo sobreajustado predice los datos de entrenamiento demasiado bien porque ha aprendido demasiado bien los detalles y el ruido de los datos. Un modelo subajustado no es preciso ya que no puede analizar con precisión ni sus datos de entrenamiento ni los datos que aún no ha 'visto'. - -![modelo sobreajustado](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.es.png) -> Infografía por [Jen Looper](https://twitter.com/jenlooper) - -## Ajuste de parámetros - -Una vez que tu entrenamiento inicial esté completo, observa la calidad del modelo y considera mejorarlo ajustando sus 'hiperparámetros'. Lee más sobre el proceso [en la documentación](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Predicción - -Este es el momento en el que puedes usar datos completamente nuevos para probar la precisión de tu modelo. En un entorno de ML 'aplicado', donde estás construyendo activos web para usar el modelo en producción, este proceso podría implicar recopilar la entrada del usuario (una pulsación de botón, por ejemplo) para establecer una variable y enviarla al modelo para inferencia, o evaluación. - -En estas lecciones, descubrirás cómo usar estos pasos para preparar, construir, probar, evaluar y predecir - todos los gestos de un científico de datos y más, a medida que avanzas en tu viaje para convertirte en un ingeniero de ML 'full stack'. - ---- - -## 🚀Desafío - -Dibuja un diagrama de flujo que refleje los pasos de un practicante de ML. ¿Dónde te ves ahora en el proceso? ¿Dónde predices que encontrarás dificultad? ¿Qué te parece fácil? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## Revisión y Autoestudio - -Busca en línea entrevistas con científicos de datos que hablen sobre su trabajo diario. Aquí tienes [una](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Tarea - -[Entrevista a un científico de datos](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/4-techniques-of-ML/assignment.md b/translations/es/1-Introduction/4-techniques-of-ML/assignment.md deleted file mode 100644 index 067e22f0..00000000 --- a/translations/es/1-Introduction/4-techniques-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Entrevista a un científico de datos - -## Instrucciones - -En tu empresa, en un grupo de usuarios, o entre tus amigos o compañeros de estudio, habla con alguien que trabaje profesionalmente como científico de datos. Escribe un breve artículo (500 palabras) sobre sus ocupaciones diarias. ¿Son especialistas o trabajan en 'full stack'? - -## Rubrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejora | -| --------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | Un ensayo de la longitud correcta, con fuentes atribuidas, presentado como un archivo .doc | El ensayo está mal atribuido o es más corto de lo requerido | No se presenta ensayo | - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/1-Introduction/README.md b/translations/es/1-Introduction/README.md deleted file mode 100644 index 473b9098..00000000 --- a/translations/es/1-Introduction/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Introducción al aprendizaje automático - -En esta sección del plan de estudios, se te presentarán los conceptos básicos que subyacen en el campo del aprendizaje automático, qué es y aprenderás sobre su historia y las técnicas que los investigadores utilizan para trabajar con él. ¡Vamos a explorar juntos este nuevo mundo del aprendizaje automático! - -![globe](../../../translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.es.jpg) -> Foto de Bill Oxford en Unsplash - -### Lecciones - -1. [Introducción al aprendizaje automático](1-intro-to-ML/README.md) -1. [La historia del aprendizaje automático y la IA](2-history-of-ML/README.md) -1. [Equidad y aprendizaje automático](3-fairness/README.md) -1. [Técnicas del aprendizaje automático](4-techniques-of-ML/README.md) -### Créditos - -"Introducción al Aprendizaje Automático" fue escrito con ♥️ por un equipo de personas que incluyen a [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) y [Jen Looper](https://twitter.com/jenlooper) - -"La Historia del Aprendizaje Automático" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper) y [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Equidad y Aprendizaje Automático" fue escrito con ♥️ por [Tomomi Imura](https://twitter.com/girliemac) - -"Técnicas del Aprendizaje Automático" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper) y [Chris Noring](https://twitter.com/softchris) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/1-Tools/README.md b/translations/es/2-Regression/1-Tools/README.md deleted file mode 100644 index 89293ad5..00000000 --- a/translations/es/2-Regression/1-Tools/README.md +++ /dev/null @@ -1,228 +0,0 @@ -# Comienza con Python y Scikit-learn para modelos de regresión - -![Resumen de regresiones en un sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.es.png) - -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Cuestionario antes de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -> ### [¡Esta lección está disponible en R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) - -## Introducción - -En estas cuatro lecciones, descubrirás cómo construir modelos de regresión. Hablaremos de para qué sirven en breve. ¡Pero antes de hacer nada, asegúrate de tener las herramientas adecuadas para comenzar el proceso! - -En esta lección, aprenderás a: - -- Configurar tu computadora para tareas locales de aprendizaje automático. -- Trabajar con Jupyter notebooks. -- Usar Scikit-learn, incluida la instalación. -- Explorar la regresión lineal con un ejercicio práctico. - -## Instalaciones y configuraciones - -[![ML para principiantes - Configura tus herramientas para construir modelos de Machine Learning](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para principiantes - Configura tus herramientas para construir modelos de Machine Learning") - -> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre cómo configurar tu computadora para ML. - -1. **Instala Python**. Asegúrate de que [Python](https://www.python.org/downloads/) esté instalado en tu computadora. Usarás Python para muchas tareas de ciencia de datos y aprendizaje automático. La mayoría de los sistemas informáticos ya incluyen una instalación de Python. También hay [Paquetes de Codificación de Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) útiles para facilitar la configuración a algunos usuarios. - - Sin embargo, algunos usos de Python requieren una versión del software, mientras que otros requieren una versión diferente. Por esta razón, es útil trabajar dentro de un [entorno virtual](https://docs.python.org/3/library/venv.html). - -2. **Instala Visual Studio Code**. Asegúrate de tener Visual Studio Code instalado en tu computadora. Sigue estas instrucciones para [instalar Visual Studio Code](https://code.visualstudio.com/) para la instalación básica. Vas a usar Python en Visual Studio Code en este curso, por lo que podría ser útil repasar cómo [configurar Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para el desarrollo en Python. - - > Familiarízate con Python trabajando a través de esta colección de [Módulos de aprendizaje](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - > - > [![Configura Python con Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configura Python con Visual Studio Code") - > - > 🎥 Haz clic en la imagen de arriba para ver un video: usando Python dentro de VS Code. - -3. **Instala Scikit-learn**, siguiendo [estas instrucciones](https://scikit-learn.org/stable/install.html). Dado que necesitas asegurarte de usar Python 3, se recomienda que uses un entorno virtual. Nota, si estás instalando esta biblioteca en una Mac M1, hay instrucciones especiales en la página enlazada arriba. - -4. **Instala Jupyter Notebook**. Necesitarás [instalar el paquete Jupyter](https://pypi.org/project/jupyter/). - -## Tu entorno de autoría de ML - -Vas a usar **notebooks** para desarrollar tu código Python y crear modelos de aprendizaje automático. Este tipo de archivo es una herramienta común para los científicos de datos, y pueden ser identificados por su sufijo o extensión `.ipynb`. - -Los notebooks son un entorno interactivo que permite al desarrollador tanto codificar como agregar notas y escribir documentación alrededor del código, lo cual es bastante útil para proyectos experimentales o orientados a la investigación. - -[![ML para principiantes - Configura Jupyter Notebooks para comenzar a construir modelos de regresión](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML para principiantes - Configura Jupyter Notebooks para comenzar a construir modelos de regresión") - -> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre este ejercicio. - -### Ejercicio - trabajar con un notebook - -En esta carpeta, encontrarás el archivo _notebook.ipynb_. - -1. Abre _notebook.ipynb_ en Visual Studio Code. - - Se iniciará un servidor Jupyter con Python 3+. Encontrarás áreas del notebook que pueden ser `run`, piezas de código. Puedes ejecutar un bloque de código, seleccionando el ícono que parece un botón de reproducción. - -2. Selecciona el ícono `md` y agrega un poco de markdown, y el siguiente texto **# Bienvenido a tu notebook**. - - Luego, agrega algo de código Python. - -3. Escribe **print('hello notebook')** en el bloque de código. -4. Selecciona la flecha para ejecutar el código. - - Deberías ver la declaración impresa: - - ```output - hello notebook - ``` - -![VS Code con un notebook abierto](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.es.jpg) - -Puedes intercalar tu código con comentarios para auto-documentar el notebook. - -✅ Piensa por un minuto cuán diferente es el entorno de trabajo de un desarrollador web en comparación con el de un científico de datos. - -## Puesta en marcha con Scikit-learn - -Ahora que Python está configurado en tu entorno local, y te sientes cómodo con los Jupyter notebooks, vamos a familiarizarnos con Scikit-learn (se pronuncia `sci` as in `science`). Scikit-learn proporciona una [extensa API](https://scikit-learn.org/stable/modules/classes.html#api-ref) para ayudarte a realizar tareas de ML. - -Según su [sitio web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn es una biblioteca de aprendizaje automático de código abierto que admite el aprendizaje supervisado y no supervisado. También proporciona varias herramientas para el ajuste de modelos, el preprocesamiento de datos, la selección y evaluación de modelos, y muchas otras utilidades." - -En este curso, usarás Scikit-learn y otras herramientas para construir modelos de aprendizaje automático para realizar lo que llamamos tareas de 'aprendizaje automático tradicional'. Hemos evitado deliberadamente las redes neuronales y el aprendizaje profundo, ya que están mejor cubiertos en nuestro próximo plan de estudios 'AI for Beginners'. - -Scikit-learn hace que sea sencillo construir modelos y evaluarlos para su uso. Se centra principalmente en el uso de datos numéricos y contiene varios conjuntos de datos listos para usar como herramientas de aprendizaje. También incluye modelos pre-construidos para que los estudiantes los prueben. Vamos a explorar el proceso de cargar datos preempaquetados y usar un estimador incorporado para el primer modelo de ML con Scikit-learn con algunos datos básicos. - -## Ejercicio - tu primer notebook de Scikit-learn - -> Este tutorial fue inspirado por el [ejemplo de regresión lineal](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) en el sitio web de Scikit-learn. - -[![ML para principiantes - Tu primer proyecto de regresión lineal en Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para principiantes - Tu primer proyecto de regresión lineal en Python") - -> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre este ejercicio. - -En el archivo _notebook.ipynb_ asociado a esta lección, elimina todas las celdas presionando el ícono de la 'papelera'. - -En esta sección, trabajarás con un pequeño conjunto de datos sobre la diabetes que está incorporado en Scikit-learn para fines de aprendizaje. Imagina que quieres probar un tratamiento para pacientes diabéticos. Los modelos de aprendizaje automático podrían ayudarte a determinar qué pacientes responderían mejor al tratamiento, en función de combinaciones de variables. Incluso un modelo de regresión muy básico, cuando se visualiza, podría mostrar información sobre variables que te ayudarían a organizar tus ensayos clínicos teóricos. - -✅ Hay muchos tipos de métodos de regresión, y cuál elijas depende de la respuesta que estés buscando. Si deseas predecir la altura probable de una persona de una edad determinada, usarías la regresión lineal, ya que estás buscando un **valor numérico**. Si estás interesado en descubrir si un tipo de cocina debe considerarse vegana o no, estás buscando una **asignación de categoría**, por lo que usarías la regresión logística. Aprenderás más sobre la regresión logística más adelante. Piensa un poco en algunas preguntas que puedes hacer a los datos, y cuál de estos métodos sería más apropiado. - -Vamos a empezar con esta tarea. - -### Importar bibliotecas - -Para esta tarea, importaremos algunas bibliotecas: - -- **matplotlib**. Es una herramienta útil para [gráficos](https://matplotlib.org/) y la usaremos para crear un gráfico de líneas. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) es una biblioteca útil para manejar datos numéricos en Python. -- **sklearn**. Esta es la biblioteca [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). - -Importa algunas bibliotecas para ayudarte con tus tareas. - -1. Agrega las importaciones escribiendo el siguiente código: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Arriba estás importando `matplotlib`, `numpy` and you are importing `datasets`, `linear_model` and `model_selection` from `sklearn`. `model_selection` is used for splitting data into training and test sets. - -### The diabetes dataset - -The built-in [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) includes 442 samples of data around diabetes, with 10 feature variables, some of which include: - -- age: age in years -- bmi: body mass index -- bp: average blood pressure -- s1 tc: T-Cells (a type of white blood cells) - -✅ This dataset includes the concept of 'sex' as a feature variable important to research around diabetes. Many medical datasets include this type of binary classification. Think a bit about how categorizations such as this might exclude certain parts of a population from treatments. - -Now, load up the X and y data. - -> 🎓 Remember, this is supervised learning, and we need a named 'y' target. - -In a new code cell, load the diabetes dataset by calling `load_diabetes()`. The input `return_X_y=True` signals that `X` will be a data matrix, and `y` será el objetivo de la regresión. - -2. Agrega algunos comandos print para mostrar la forma de la matriz de datos y su primer elemento: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Lo que estás obteniendo como respuesta es una tupla. Lo que estás haciendo es asignar los dos primeros valores de la tupla a `X` and `y` respectivamente. Aprende más [sobre tuplas](https://wikipedia.org/wiki/Tuple). - - Puedes ver que estos datos tienen 442 elementos organizados en matrices de 10 elementos: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Piensa un poco sobre la relación entre los datos y el objetivo de la regresión. La regresión lineal predice relaciones entre la característica X y la variable objetivo y. ¿Puedes encontrar el [objetivo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para el conjunto de datos de diabetes en la documentación? ¿Qué está demostrando este conjunto de datos, dado ese objetivo? - -3. A continuación, selecciona una parte de este conjunto de datos para graficar seleccionando la tercera columna del conjunto de datos. Puedes hacer esto usando el `:` operator to select all rows, and then selecting the 3rd column using the index (2). You can also reshape the data to be a 2D array - as required for plotting - by using `reshape(n_rows, n_columns)`. Si uno de los parámetros es -1, la dimensión correspondiente se calcula automáticamente. - - ```python - X = X[:, 2] - X = X.reshape((-1,1)) - ``` - - ✅ En cualquier momento, imprime los datos para verificar su forma. - -4. Ahora que tienes los datos listos para ser graficados, puedes ver si una máquina puede ayudar a determinar una división lógica entre los números en este conjunto de datos. Para hacer esto, necesitas dividir tanto los datos (X) como el objetivo (y) en conjuntos de prueba y entrenamiento. Scikit-learn tiene una manera sencilla de hacer esto; puedes dividir tus datos de prueba en un punto dado. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -5. ¡Ahora estás listo para entrenar tu modelo! Carga el modelo de regresión lineal y entrénalo con tus conjuntos de entrenamiento X e y usando `model.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` is a function you'll see in many ML libraries such as TensorFlow - -5. Then, create a prediction using test data, using the function `predict()`. Esto se usará para dibujar la línea entre los grupos de datos del modelo. - - ```python - y_pred = model.predict(X_test) - ``` - -6. Ahora es el momento de mostrar los datos en un gráfico. Matplotlib es una herramienta muy útil para esta tarea. Crea un diagrama de dispersión de todos los datos de prueba X e y, y usa la predicción para dibujar una línea en el lugar más apropiado, entre los agrupamientos de datos del modelo. - - ```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() - ``` - - ![un diagrama de dispersión que muestra puntos de datos sobre diabetes](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.es.png) - - ✅ Piensa un poco en lo que está pasando aquí. Una línea recta atraviesa muchos pequeños puntos de datos, pero ¿qué está haciendo exactamente? ¿Puedes ver cómo deberías poder usar esta línea para predecir dónde debería encajar un nuevo punto de datos no visto en relación con el eje y del gráfico? Intenta poner en palabras el uso práctico de este modelo. - -¡Felicidades, construiste tu primer modelo de regresión lineal, creaste una predicción con él y la mostraste en un gráfico! - ---- -## 🚀Desafío - -Grafica una variable diferente de este conjunto de datos. Pista: edita esta línea: `X = X[:,2]`. Dado el objetivo de este conjunto de datos, ¿qué puedes descubrir sobre la progresión de la diabetes como enfermedad? -## [Cuestionario después de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## Revisión y autoestudio - -En este tutorial, trabajaste con regresión lineal simple, en lugar de regresión univariada o múltiple. Lee un poco sobre las diferencias entre estos métodos, o echa un vistazo a [este video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). - -Lee más sobre el concepto de regresión y piensa en qué tipo de preguntas pueden ser respondidas por esta técnica. Toma este [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para profundizar tu comprensión. - -## Tarea - -[Un conjunto de datos diferente](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/1-Tools/assignment.md b/translations/es/2-Regression/1-Tools/assignment.md deleted file mode 100644 index f3a4deb3..00000000 --- a/translations/es/2-Regression/1-Tools/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Regresión con Scikit-learn - -## Instrucciones - -Echa un vistazo al [dataset de Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) en Scikit-learn. Este dataset tiene múltiples [objetivos](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Consiste en tres variables de ejercicio (datos) y tres variables fisiológicas (objetivo) recolectadas de veinte hombres de mediana edad en un club de fitness'. - -En tus propias palabras, describe cómo crear un modelo de Regresión que trace la relación entre la circunferencia de la cintura y cuántos abdominales se logran. Haz lo mismo para los otros puntos de datos en este conjunto de datos. - -## Rubrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| ------------------------------ | ----------------------------------- | ----------------------------- | -------------------------- | -| Enviar un párrafo descriptivo | Se envía un párrafo bien escrito | Se envían algunas oraciones | No se proporciona descripción | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/1-Tools/solution/Julia/README.md b/translations/es/2-Regression/1-Tools/solution/Julia/README.md deleted file mode 100644 index 157e605a..00000000 --- a/translations/es/2-Regression/1-Tools/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/2-Data/README.md b/translations/es/2-Regression/2-Data/README.md deleted file mode 100644 index 73def6aa..00000000 --- a/translations/es/2-Regression/2-Data/README.md +++ /dev/null @@ -1,214 +0,0 @@ -# Construir un modelo de regresión usando Scikit-learn: preparar y visualizar datos - -![Infografía de visualización de datos](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.es.png) - -Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -> ### [¡Esta lección está disponible en R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) - -## Introducción - -Ahora que tienes las herramientas necesarias para comenzar a construir modelos de aprendizaje automático con Scikit-learn, estás listo para empezar a hacer preguntas a tus datos. A medida que trabajas con datos y aplicas soluciones de ML, es muy importante entender cómo hacer la pregunta correcta para desbloquear adecuadamente el potencial de tu conjunto de datos. - -En esta lección, aprenderás: - -- Cómo preparar tus datos para la construcción de modelos. -- Cómo usar Matplotlib para la visualización de datos. - -## Hacer la pregunta correcta a tus datos - -La pregunta que necesitas responder determinará qué tipo de algoritmos de ML utilizarás. Y la calidad de la respuesta que obtengas dependerá en gran medida de la naturaleza de tus datos. - -Echa un vistazo a los [datos](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) proporcionados para esta lección. Puedes abrir este archivo .csv en VS Code. Una rápida ojeada muestra inmediatamente que hay espacios en blanco y una mezcla de cadenas y datos numéricos. También hay una columna extraña llamada 'Package' donde los datos son una mezcla entre 'sacks', 'bins' y otros valores. Los datos, de hecho, son un poco desordenados. - -[![ML para principiantes - Cómo analizar y limpiar un conjunto de datos](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para principiantes - Cómo analizar y limpiar un conjunto de datos") - -> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre cómo preparar los datos para esta lección. - -De hecho, no es muy común recibir un conjunto de datos completamente listo para usar y crear un modelo de ML de inmediato. En esta lección, aprenderás cómo preparar un conjunto de datos crudo utilizando bibliotecas estándar de Python. También aprenderás varias técnicas para visualizar los datos. - -## Estudio de caso: 'el mercado de calabazas' - -En esta carpeta encontrarás un archivo .csv en la carpeta raíz `data` llamado [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) que incluye 1757 líneas de datos sobre el mercado de calabazas, ordenados en grupos por ciudad. Estos son datos crudos extraídos de los [Informes Estándar de Mercados Terminales de Cultivos Especiales](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuidos por el Departamento de Agricultura de los Estados Unidos. - -### Preparando los datos - -Estos datos están en el dominio público. Se pueden descargar en muchos archivos separados, por ciudad, desde el sitio web del USDA. Para evitar demasiados archivos separados, hemos concatenado todos los datos de las ciudades en una sola hoja de cálculo, por lo tanto, ya hemos _preparado_ un poco los datos. A continuación, echemos un vistazo más de cerca a los datos. - -### Los datos de calabazas - primeras conclusiones - -¿Qué notas sobre estos datos? Ya viste que hay una mezcla de cadenas, números, espacios en blanco y valores extraños que necesitas interpretar. - -¿Qué pregunta puedes hacer a estos datos, utilizando una técnica de regresión? ¿Qué tal "Predecir el precio de una calabaza en venta durante un mes determinado"? Mirando nuevamente los datos, hay algunos cambios que necesitas hacer para crear la estructura de datos necesaria para la tarea. -## Ejercicio - analizar los datos de calabazas - -Vamos a usar [Pandas](https://pandas.pydata.org/), (el nombre significa `Python Data Analysis`) una herramienta muy útil para dar forma a los datos, para analizar y preparar estos datos de calabazas. - -### Primero, verifica si hay fechas faltantes - -Primero necesitarás tomar medidas para verificar si hay fechas faltantes: - -1. Convierte las fechas a un formato de mes (estas son fechas de EE.UU., por lo que el formato es `MM/DD/YYYY`). -2. Extrae el mes a una nueva columna. - -Abre el archivo _notebook.ipynb_ en Visual Studio Code e importa la hoja de cálculo en un nuevo dataframe de Pandas. - -1. Usa la función `head()` para ver las primeras cinco filas. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ ¿Qué función usarías para ver las últimas cinco filas? - -1. Verifica si hay datos faltantes en el dataframe actual: - - ```python - pumpkins.isnull().sum() - ``` - - Hay datos faltantes, pero tal vez no importen para la tarea en cuestión. - -1. Para hacer que tu dataframe sea más fácil de trabajar, selecciona solo las columnas que necesitas, usando `loc` function which extracts from the original dataframe a group of rows (passed as first parameter) and columns (passed as second parameter). The expression `:` en el caso a continuación significa "todas las filas". - - ```python - columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.loc[:, columns_to_select] - ``` - -### Segundo, determina el precio promedio de la calabaza - -Piensa en cómo determinar el precio promedio de una calabaza en un mes dado. ¿Qué columnas elegirías para esta tarea? Pista: necesitarás 3 columnas. - -Solución: toma el promedio de las columnas `Low Price` and `High Price` para llenar la nueva columna Price, y convierte la columna Date para mostrar solo el mes. Afortunadamente, según la verificación anterior, no hay datos faltantes para fechas o precios. - -1. Para calcular el promedio, agrega el siguiente código: - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ Siéntete libre de imprimir cualquier dato que desees verificar usando `print(month)`. - -2. Ahora, copia tus datos convertidos en un nuevo dataframe de Pandas: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - Imprimir tu dataframe mostrará un conjunto de datos limpio y ordenado sobre el cual puedes construir tu nuevo modelo de regresión. - -### Pero espera, hay algo extraño aquí - -Si miras la columna `Package` column, pumpkins are sold in many different configurations. Some are sold in '1 1/9 bushel' measures, and some in '1/2 bushel' measures, some per pumpkin, some per pound, and some in big boxes with varying widths. - -> Pumpkins seem very hard to weigh consistently - -Digging into the original data, it's interesting that anything with `Unit of Sale` equalling 'EACH' or 'PER BIN' also have the `Package` type per inch, per bin, or 'each'. Pumpkins seem to be very hard to weigh consistently, so let's filter them by selecting only pumpkins with the string 'bushel' in their `Package`. - -1. Agrega un filtro en la parte superior del archivo, debajo de la importación inicial del .csv: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Si imprimes los datos ahora, puedes ver que solo estás obteniendo alrededor de 415 filas de datos que contienen calabazas por bushel. - -### Pero espera, hay una cosa más por hacer - -¿Notaste que la cantidad de bushels varía por fila? Necesitas normalizar los precios para que muestres el precio por bushel, así que haz algunos cálculos para estandarizarlo. - -1. Agrega estas líneas después del bloque que crea el dataframe 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) - ``` - -✅ Según [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), el peso de un bushel depende del tipo de producto, ya que es una medida de volumen. "Un bushel de tomates, por ejemplo, debe pesar 56 libras... Las hojas y verduras ocupan más espacio con menos peso, por lo que un bushel de espinacas pesa solo 20 libras." ¡Es todo bastante complicado! No nos molestemos en hacer una conversión de bushel a libra, y en su lugar, fijemos el precio por bushel. ¡Todo este estudio de bushels de calabazas, sin embargo, muestra lo importante que es entender la naturaleza de tus datos! - -Ahora, puedes analizar los precios por unidad basándote en su medida de bushel. Si imprimes los datos una vez más, puedes ver cómo está estandarizado. - -✅ ¿Notaste que las calabazas vendidas por medio bushel son muy caras? ¿Puedes averiguar por qué? Pista: las calabazas pequeñas son mucho más caras que las grandes, probablemente porque hay muchas más por bushel, dado el espacio no utilizado que ocupa una gran calabaza hueca para pastel. - -## Estrategias de Visualización - -Parte del rol del científico de datos es demostrar la calidad y naturaleza de los datos con los que están trabajando. Para hacer esto, a menudo crean visualizaciones interesantes, o gráficos, diagramas y tablas, que muestran diferentes aspectos de los datos. De esta manera, pueden mostrar visualmente relaciones y brechas que de otra manera serían difíciles de descubrir. - -[![ML para principiantes - Cómo visualizar datos con Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para principiantes - Cómo visualizar datos con Matplotlib") - -> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre cómo visualizar los datos para esta lección. - -Las visualizaciones también pueden ayudar a determinar la técnica de aprendizaje automático más adecuada para los datos. Un diagrama de dispersión que parece seguir una línea, por ejemplo, indica que los datos son un buen candidato para un ejercicio de regresión lineal. - -Una biblioteca de visualización de datos que funciona bien en cuadernos de Jupyter es [Matplotlib](https://matplotlib.org/) (que también viste en la lección anterior). - -> Obtén más experiencia con la visualización de datos en [estos tutoriales](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Ejercicio - experimenta con Matplotlib - -Intenta crear algunos gráficos básicos para mostrar el nuevo dataframe que acabas de crear. ¿Qué mostraría un gráfico de líneas básico? - -1. Importa Matplotlib en la parte superior del archivo, debajo de la importación de Pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -1. Vuelve a ejecutar todo el cuaderno para actualizar. -1. Al final del cuaderno, agrega una celda para graficar los datos como un cuadro: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Un diagrama de dispersión que muestra la relación precio-mes](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.es.png) - - ¿Es este un gráfico útil? ¿Hay algo que te sorprenda? - - No es particularmente útil, ya que solo muestra tus datos como una dispersión de puntos en un mes dado. - -### Hazlo útil - -Para que los gráficos muestren datos útiles, generalmente necesitas agrupar los datos de alguna manera. Intentemos crear un gráfico donde el eje y muestre los meses y los datos demuestren la distribución de los datos. - -1. Agrega una celda para crear un gráfico de barras agrupado: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Un gráfico de barras que muestra la relación precio-mes](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.es.png) - - ¡Esta es una visualización de datos más útil! Parece indicar que el precio más alto para las calabazas ocurre en septiembre y octubre. ¿Cumple eso con tus expectativas? ¿Por qué o por qué no? - ---- - -## 🚀Desafío - -Explora los diferentes tipos de visualización que ofrece Matplotlib. ¿Cuáles son los más apropiados para problemas de regresión? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## Revisión y Autoestudio - -Echa un vistazo a las muchas formas de visualizar datos. Haz una lista de las diversas bibliotecas disponibles y nota cuáles son las mejores para ciertos tipos de tareas, por ejemplo, visualizaciones 2D vs. visualizaciones 3D. ¿Qué descubres? - -## Tarea - -[Explorando la visualización](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/2-Data/assignment.md b/translations/es/2-Regression/2-Data/assignment.md deleted file mode 100644 index 5fc7e675..00000000 --- a/translations/es/2-Regression/2-Data/assignment.md +++ /dev/null @@ -1,11 +0,0 @@ -# Explorando Visualizaciones - -Hay varias bibliotecas diferentes disponibles para la visualización de datos. Crea algunas visualizaciones utilizando los datos de Pumpkin en esta lección con matplotlib y seaborn en un cuaderno de muestra. ¿Qué bibliotecas son más fáciles de usar? -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------- | -------- | ---------------- | -| | Se envía un cuaderno con dos exploraciones/visualizaciones | Se envía un cuaderno con una exploración/visualización | No se envía un cuaderno | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/2-Data/solution/Julia/README.md b/translations/es/2-Regression/2-Data/solution/Julia/README.md deleted file mode 100644 index 05d50a82..00000000 --- a/translations/es/2-Regression/2-Data/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/3-Linear/README.md b/translations/es/2-Regression/3-Linear/README.md deleted file mode 100644 index 0b5de2c3..00000000 --- a/translations/es/2-Regression/3-Linear/README.md +++ /dev/null @@ -1,370 +0,0 @@ -# Construye un modelo de regresión usando Scikit-learn: regresión de cuatro maneras - -![Infografía de regresión lineal vs polinómica](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.es.png) -> Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -> ### [¡Esta lección está disponible en R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### Introducción - -Hasta ahora has explorado qué es la regresión con datos de muestra recopilados del conjunto de datos de precios de calabazas que utilizaremos a lo largo de esta lección. También lo has visualizado usando Matplotlib. - -Ahora estás listo para profundizar en la regresión para ML. Mientras que la visualización te permite entender los datos, el verdadero poder del Aprendizaje Automático proviene del _entrenamiento de modelos_. Los modelos se entrenan con datos históricos para capturar automáticamente las dependencias de los datos, y te permiten predecir resultados para nuevos datos, que el modelo no ha visto antes. - -En esta lección, aprenderás más sobre dos tipos de regresión: _regresión lineal básica_ y _regresión polinómica_, junto con algunas de las matemáticas subyacentes a estas técnicas. Esos modelos nos permitirán predecir los precios de las calabazas dependiendo de diferentes datos de entrada. - -[![ML para principiantes - Entendiendo la Regresión Lineal](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML para principiantes - Entendiendo la Regresión Lineal") - -> 🎥 Haz clic en la imagen de arriba para una breve visión general de la regresión lineal. - -> A lo largo de este plan de estudios, asumimos un conocimiento mínimo de matemáticas, y buscamos hacerlo accesible para estudiantes que vienen de otros campos, así que estate atento a notas, 🧮 llamadas, diagramas y otras herramientas de aprendizaje para ayudar en la comprensión. - -### Prerrequisitos - -Deberías estar familiarizado con la estructura de los datos de calabazas que estamos examinando. Puedes encontrarlo precargado y pre-limpiado en el archivo _notebook.ipynb_ de esta lección. En el archivo, el precio de la calabaza se muestra por fanega en un nuevo marco de datos. Asegúrate de poder ejecutar estos cuadernos en kernels en Visual Studio Code. - -### Preparación - -Como recordatorio, estás cargando estos datos para hacerles preguntas. - -- ¿Cuándo es el mejor momento para comprar calabazas? -- ¿Qué precio puedo esperar de una caja de calabazas miniatura? -- ¿Debería comprarlas en cestas de media fanega o en cajas de 1 1/9 fanega? -Sigamos profundizando en estos datos. - -En la lección anterior, creaste un marco de datos de Pandas y lo llenaste con parte del conjunto de datos original, estandarizando los precios por fanega. Sin embargo, al hacerlo, solo pudiste reunir alrededor de 400 puntos de datos y solo para los meses de otoño. - -Echa un vistazo a los datos que precargamos en el cuaderno acompañante de esta lección. Los datos están precargados y se ha graficado un gráfico de dispersión inicial para mostrar los datos por mes. Tal vez podamos obtener un poco más de detalle sobre la naturaleza de los datos limpiándolos más. - -## Una línea de regresión lineal - -Como aprendiste en la Lección 1, el objetivo de un ejercicio de regresión lineal es poder trazar una línea para: - -- **Mostrar relaciones entre variables**. Mostrar la relación entre variables. -- **Hacer predicciones**. Hacer predicciones precisas sobre dónde caería un nuevo punto de datos en relación con esa línea. - -Es típico de la **Regresión de Mínimos Cuadrados** dibujar este tipo de línea. El término 'mínimos cuadrados' significa que todos los puntos de datos que rodean la línea de regresión se elevan al cuadrado y luego se suman. Idealmente, esa suma final es lo más pequeña posible, porque queremos un número bajo de errores, o `least-squares`. - -Hacemos esto ya que queremos modelar una línea que tenga la menor distancia acumulada de todos nuestros puntos de datos. También elevamos al cuadrado los términos antes de sumarlos, ya que nos preocupa su magnitud más que su dirección. - -> **🧮 Muéstrame las matemáticas** -> -> Esta línea, llamada la _línea de mejor ajuste_ puede expresarse por [una ecuación](https://es.wikipedia.org/wiki/Regresión_lineal_simple): -> -> ``` -> Y = a + bX -> ``` -> -> `X` is the 'explanatory variable'. `Y` is the 'dependent variable'. The slope of the line is `b` and `a` is the y-intercept, which refers to the value of `Y` when `X = 0`. -> ->![calculate the slope](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.es.png) -> -> First, calculate the slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> In other words, and referring to our pumpkin data's original question: "predict the price of a pumpkin per bushel by month", `X` would refer to the price and `Y` would refer to the month of sale. -> ->![complete the equation](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.es.png) -> -> Calculate the value of Y. If you're paying around $4, it must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> The math that calculates the line must demonstrate the slope of the line, which is also dependent on the intercept, or where `Y` is situated when `X = 0`. -> -> You can observe the method of calculation for these values on the [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Also visit [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to watch how the numbers' values impact the line. - -## Correlation - -One more term to understand is the **Correlation Coefficient** between given X and Y variables. Using a scatterplot, you can quickly visualize this coefficient. A plot with datapoints scattered in a neat line have high correlation, but a plot with datapoints scattered everywhere between X and Y have a low correlation. - -A good linear regression model will be one that has a high (nearer to 1 than 0) Correlation Coefficient using the Least-Squares Regression method with a line of regression. - -✅ Run the notebook accompanying this lesson and look at the Month to Price scatterplot. Does the data associating Month to Price for pumpkin sales seem to have high or low correlation, according to your visual interpretation of the scatterplot? Does that change if you use more fine-grained measure instead of `Month`, eg. *day of the year* (i.e. number of days since the beginning of the year)? - -In the code below, we will assume that we have cleaned up the data, and obtained a data frame called `new_pumpkins`, similar to the following: - -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 - -> The code to clean the data is available in [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). We have performed the same cleaning steps as in the previous lesson, and have calculated `DayOfYear` columna usando la siguiente expresión: - -```python -day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) -``` - -Ahora que tienes una comprensión de las matemáticas detrás de la regresión lineal, vamos a crear un modelo de Regresión para ver si podemos predecir qué paquete de calabazas tendrá los mejores precios de calabaza. Alguien que compra calabazas para un huerto de calabazas festivo podría querer esta información para poder optimizar sus compras de paquetes de calabazas para el huerto. - -## Buscando correlación - -[![ML para principiantes - Buscando correlación: La clave para la regresión lineal](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML para principiantes - Buscando correlación: La clave para la regresión lineal") - -> 🎥 Haz clic en la imagen de arriba para una breve visión general de la correlación. - -De la lección anterior, probablemente hayas visto que el precio promedio para diferentes meses se ve así: - -Precio promedio por mes - -Esto sugiere que debería haber alguna correlación, y podemos intentar entrenar un modelo de regresión lineal para predecir la relación entre `Month` and `Price`, or between `DayOfYear` and `Price`. Here is the scatter plot that shows the latter relationship: - -Scatter plot of Price vs. Day of Year - -Let's see if there is a correlation using the `corr` función: - -```python -print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) -print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) -``` - -Parece que la correlación es bastante pequeña, -0.15 por `Month` and -0.17 by the `DayOfMonth`, but there could be another important relationship. It looks like there are different clusters of prices corresponding to different pumpkin varieties. To confirm this hypothesis, let's plot each pumpkin category using a different color. By passing an `ax` parameter to the `scatter` función de trazado de dispersión podemos trazar todos los puntos en el mismo gráfico: - -```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) -``` - -Gráfico de dispersión de Precio vs. Día del Año - -Nuestra investigación sugiere que la variedad tiene más efecto en el precio general que la fecha de venta real. Podemos ver esto con un gráfico de barras: - -```python -new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') -``` - -Gráfico de barras de precio vs variedad - -Centrémonos por el momento solo en una variedad de calabaza, el 'tipo para tarta', y veamos qué efecto tiene la fecha en el precio: - -```python -pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] -pie_pumpkins.plot.scatter('DayOfYear','Price') -``` -Gráfico de dispersión de Precio vs. Día del Año - -Si ahora calculamos la correlación entre `Price` and `DayOfYear` using `corr` function, we will get something like `-0.27` - lo que significa que tiene sentido entrenar un modelo predictivo. - -> Antes de entrenar un modelo de regresión lineal, es importante asegurarse de que nuestros datos estén limpios. La regresión lineal no funciona bien con valores faltantes, por lo que tiene sentido deshacerse de todas las celdas vacías: - -```python -pie_pumpkins.dropna(inplace=True) -pie_pumpkins.info() -``` - -Otro enfoque sería llenar esos valores vacíos con valores medios de la columna correspondiente. - -## Regresión Lineal Simple - -[![ML para principiantes - Regresión Lineal y Polinómica usando Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML para principiantes - Regresión Lineal y Polinómica usando Scikit-learn") - -> 🎥 Haz clic en la imagen de arriba para una breve visión general de la regresión lineal y polinómica. - -Para entrenar nuestro modelo de Regresión Lineal, utilizaremos la biblioteca **Scikit-learn**. - -```python -from sklearn.linear_model import LinearRegression -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -``` - -Comenzamos separando los valores de entrada (características) y la salida esperada (etiqueta) en matrices numpy separadas: - -```python -X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) -y = pie_pumpkins['Price'] -``` - -> Nota que tuvimos que realizar `reshape` en los datos de entrada para que el paquete de Regresión Lineal los entienda correctamente. La Regresión Lineal espera una matriz 2D como entrada, donde cada fila de la matriz corresponde a un vector de características de entrada. En nuestro caso, como solo tenemos una entrada, necesitamos una matriz con forma N×1, donde N es el tamaño del conjunto de datos. - -Luego, necesitamos dividir los datos en conjuntos de entrenamiento y prueba, para que podamos validar nuestro modelo después del entrenamiento: - -```python -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) -``` - -Finalmente, entrenar el modelo de Regresión Lineal real toma solo dos líneas de código. Definimos el método `LinearRegression` object, and fit it to our data using the `fit`: - -```python -lin_reg = LinearRegression() -lin_reg.fit(X_train,y_train) -``` - -El `LinearRegression` object after `fit`-ting contains all the coefficients of the regression, which can be accessed using `.coef_` property. In our case, there is just one coefficient, which should be around `-0.017`. It means that prices seem to drop a bit with time, but not too much, around 2 cents per day. We can also access the intersection point of the regression with Y-axis using `lin_reg.intercept_` - it will be around `21` en nuestro caso, indicando el precio al comienzo del año. - -Para ver qué tan preciso es nuestro modelo, podemos predecir precios en un conjunto de datos de prueba, y luego medir qué tan cerca están nuestras predicciones de los valores esperados. Esto se puede hacer usando la métrica de error cuadrático medio (MSE), que es la media de todas las diferencias al cuadrado entre el valor esperado y el valor predicho. - -```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}%)') -``` - -Nuestro error parece ser de alrededor de 2 puntos, lo que es ~17%. No es muy bueno. Otro indicador de la calidad del modelo es el **coeficiente de determinación**, que se puede obtener así: - -```python -score = lin_reg.score(X_train,y_train) -print('Model determination: ', score) -``` -Si el valor es 0, significa que el modelo no toma en cuenta los datos de entrada, y actúa como el *peor predictor lineal*, que es simplemente un valor medio del resultado. El valor de 1 significa que podemos predecir perfectamente todos los resultados esperados. En nuestro caso, el coeficiente es alrededor de 0.06, lo cual es bastante bajo. - -También podemos graficar los datos de prueba junto con la línea de regresión para ver mejor cómo funciona la regresión en nuestro caso: - -```python -plt.scatter(X_test,y_test) -plt.plot(X_test,pred) -``` - -Regresión lineal - -## Regresión Polinómica - -Otro tipo de Regresión Lineal es la Regresión Polinómica. Aunque a veces hay una relación lineal entre variables, como que cuanto mayor es el volumen de la calabaza, mayor es el precio, a veces estas relaciones no se pueden trazar como un plano o una línea recta. - -✅ Aquí hay [algunos ejemplos más](https://online.stat.psu.edu/stat501/lesson/9/9.8) de datos que podrían usar Regresión Polinómica - -Mira nuevamente la relación entre Fecha y Precio. ¿Parece que este gráfico de dispersión debería necesariamente ser analizado por una línea recta? ¿No pueden fluctuar los precios? En este caso, puedes intentar la regresión polinómica. - -✅ Los polinomios son expresiones matemáticas que pueden consistir en una o más variables y coeficientes - -La regresión polinómica crea una línea curva para ajustar mejor los datos no lineales. En nuestro caso, si incluimos una variable `DayOfYear` al cuadrado en los datos de entrada, deberíamos poder ajustar nuestros datos con una curva parabólica, que tendrá un mínimo en un cierto punto dentro del año. - -Scikit-learn incluye una útil [API de pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) para combinar diferentes pasos de procesamiento de datos juntos. Un **pipeline** es una cadena de **estimadores**. En nuestro caso, crearemos un pipeline que primero agregue características polinómicas a nuestro modelo, y luego entrene la regresión: - -```python -from sklearn.preprocessing import PolynomialFeatures -from sklearn.pipeline import make_pipeline - -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) - -pipeline.fit(X_train,y_train) -``` - -Usando `PolynomialFeatures(2)` means that we will include all second-degree polynomials from the input data. In our case it will just mean `DayOfYear`2, but given two input variables X and Y, this will add X2, XY and Y2. We may also use higher degree polynomials if we want. - -Pipelines can be used in the same manner as the original `LinearRegression` object, i.e. we can `fit` the pipeline, and then use `predict` to get the prediction results. Here is the graph showing test data, and the approximation curve: - -Polynomial regression - -Using Polynomial Regression, we can get slightly lower MSE and higher determination, but not significantly. We need to take into account other features! - -> You can see that the minimal pumpkin prices are observed somewhere around Halloween. How can you explain this? - -🎃 Congratulations, you just created a model that can help predict the price of pie pumpkins. You can probably repeat the same procedure for all pumpkin types, but that would be tedious. Let's learn now how to take pumpkin variety into account in our model! - -## Categorical Features - -In the ideal world, we want to be able to predict prices for different pumpkin varieties using the same model. However, the `Variety` column is somewhat different from columns like `Month`, because it contains non-numeric values. Such columns are called **categorical**. - -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") - -> 🎥 Click the image above for a short video overview of using categorical features. - -Here you can see how average price depends on variety: - -Average price by variety - -To take variety into account, we first need to convert it to numeric form, or **encode** it. There are several way we can do it: - -* Simple **numeric encoding** will build a table of different varieties, and then replace the variety name by an index in that table. This is not the best idea for linear regression, because linear regression takes the actual numeric value of the index, and adds it to the result, multiplying by some coefficient. In our case, the relationship between the index number and the price is clearly non-linear, even if we make sure that indices are ordered in some specific way. -* **One-hot encoding** will replace the `Variety` column by 4 different columns, one for each variety. Each column will contain `1` if the corresponding row is of a given variety, and `0` de lo contrario. Esto significa que habrá cuatro coeficientes en la regresión lineal, uno para cada variedad de calabaza, responsable del "precio inicial" (o más bien "precio adicional") para esa variedad en particular. - -El código a continuación muestra cómo podemos codificar una variedad en una sola columna: - -```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 - -Para entrenar la regresión lineal usando la variedad codificada en una sola columna como entrada, solo necesitamos inicializar los datos `X` and `y` correctamente: - -```python -X = pd.get_dummies(new_pumpkins['Variety']) -y = new_pumpkins['Price'] -``` - -El resto del código es el mismo que usamos arriba para entrenar la Regresión Lineal. Si lo pruebas, verás que el error cuadrático medio es aproximadamente el mismo, pero obtenemos un coeficiente de determinación mucho más alto (~77%). Para obtener predicciones aún más precisas, podemos tener en cuenta más características categóricas, así como características numéricas, como `Month` or `DayOfYear`. To get one large array of features, we can use `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'] -``` - -Aquí también tenemos en cuenta `City` and `Package` tipo, lo que nos da un MSE de 2.84 (10%), y una determinación de 0.94! - -## Poniéndolo todo junto - -Para hacer el mejor modelo, podemos usar datos combinados (codificados en una sola columna categórica + numérica) del ejemplo anterior junto con la Regresión Polinómica. Aquí está el código completo para tu conveniencia: - -```python -# set up training data -X = pd.get_dummies(new_pumpkins['Variety']) \ - .join(new_pumpkins['Month']) \ - .join(pd.get_dummies(new_pumpkins['City'])) \ - .join(pd.get_dummies(new_pumpkins['Package'])) -y = new_pumpkins['Price'] - -# make train-test split -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - -# setup and train the pipeline -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) -pipeline.fit(X_train,y_train) - -# predict results for test data -pred = pipeline.predict(X_test) - -# calculate MSE and determination -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') - -score = pipeline.score(X_train,y_train) -print('Model determination: ', score) -``` - -Esto debería darnos el mejor coeficiente de determinación de casi 97%, y MSE=2.23 (~8% de error de predicción). - -| Modelo | MSE | Determinación | -|-------|-----|---------------| -| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | -| `Variety` Lineal | 5.24 (19.7%) | 0.77 | -| Todas las características Lineal | 2.84 (10.5%) | 0.94 | -| Todas las características Polinómica | 2.23 (8.25%) | 0.97 | - -🏆 ¡Bien hecho! Creaste cuatro modelos de Regresión en una lección, y mejoraste la calidad del modelo al 97%. En la sección final sobre Regresión, aprenderás sobre la Regresión Logística para determinar categorías. - ---- -## 🚀Desafío - -Prueba varias variables diferentes en este cuaderno para ver cómo la correlación corresponde a la precisión del modelo. - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## Revisión y Autoestudio - -En esta lección aprendimos sobre la Regresión Lineal. Hay otros tipos importantes de Regresión. Lee sobre las técnicas de Stepwise, Ridge, Lasso y Elasticnet. Un buen curso para estudiar y aprender más es el [curso de Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## Asignación - -[Construye un Modelo](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/3-Linear/assignment.md b/translations/es/2-Regression/3-Linear/assignment.md deleted file mode 100644 index 576d5560..00000000 --- a/translations/es/2-Regression/3-Linear/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Crear un Modelo de Regresión - -## Instrucciones - -En esta lección se te mostró cómo construir un modelo utilizando tanto la Regresión Lineal como la Regresión Polinómica. Usando este conocimiento, encuentra un conjunto de datos o utiliza uno de los conjuntos integrados de Scikit-learn para construir un nuevo modelo. Explica en tu cuaderno por qué elegiste la técnica que utilizaste y demuestra la precisión de tu modelo. Si no es preciso, explica por qué. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | ------------------------------------------------------------ | --------------------------- | ------------------------------- | -| | presenta un cuaderno completo con una solución bien documentada | la solución está incompleta | la solución tiene fallos o errores | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/3-Linear/solution/Julia/README.md b/translations/es/2-Regression/3-Linear/solution/Julia/README.md deleted file mode 100644 index 4da58573..00000000 --- a/translations/es/2-Regression/3-Linear/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o mala interpretación que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/4-Logistic/README.md b/translations/es/2-Regression/4-Logistic/README.md deleted file mode 100644 index 73d72e34..00000000 --- a/translations/es/2-Regression/4-Logistic/README.md +++ /dev/null @@ -1,381 +0,0 @@ -# Regresión logística para predecir categorías - -![Infografía de regresión logística vs. regresión lineal](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.es.png) - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -> ### [¡Esta lección está disponible en R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) - -## Introducción - -En esta última lección sobre Regresión, una de las técnicas básicas _clásicas_ de ML, echaremos un vistazo a la Regresión Logística. Utilizarías esta técnica para descubrir patrones y predecir categorías binarias. ¿Es este caramelo de chocolate o no? ¿Es esta enfermedad contagiosa o no? ¿Elegirá este cliente este producto o no? - -En esta lección, aprenderás: - -- Una nueva biblioteca para visualización de datos -- Técnicas para la regresión logística - -✅ Profundiza tu comprensión sobre el trabajo con este tipo de regresión en este [módulo de aprendizaje](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) - -## Prerrequisito - -Habiendo trabajado con los datos de las calabazas, ahora estamos lo suficientemente familiarizados con ellos para darnos cuenta de que hay una categoría binaria con la que podemos trabajar: `Color`. - -Construyamos un modelo de regresión logística para predecir, dado algunas variables, _de qué color es probable que sea una calabaza_ (naranja 🎃 o blanca 👻). - -> ¿Por qué estamos hablando de clasificación binaria en una lección sobre regresión? Solo por conveniencia lingüística, ya que la regresión logística es [realmente un método de clasificación](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), aunque basado en lo lineal. Aprende sobre otras formas de clasificar datos en el próximo grupo de lecciones. - -## Definir la pregunta - -Para nuestros propósitos, expresaremos esto como un binario: 'Blanco' o 'No Blanco'. También hay una categoría 'rayada' en nuestro conjunto de datos, pero hay pocos casos de ella, por lo que no la usaremos. Desaparece una vez que eliminamos los valores nulos del conjunto de datos, de todos modos. - -> 🎃 Dato curioso, a veces llamamos a las calabazas blancas 'calabazas fantasma'. No son muy fáciles de tallar, por lo que no son tan populares como las naranjas, ¡pero se ven geniales! Así que también podríamos reformular nuestra pregunta como: 'Fantasma' o 'No Fantasma'. 👻 - -## Sobre la regresión logística - -La regresión logística difiere de la regresión lineal, de la que aprendiste anteriormente, en algunos aspectos importantes. - -[![ML para principiantes - Comprender la Regresión Logística para la Clasificación de Aprendizaje Automático](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML para principiantes - Comprender la Regresión Logística para la Clasificación de Aprendizaje Automático") - -> 🎥 Haz clic en la imagen de arriba para una breve descripción en video de la regresión logística. - -### Clasificación binaria - -La regresión logística no ofrece las mismas características que la regresión lineal. La primera ofrece una predicción sobre una categoría binaria ("blanco o no blanco"), mientras que la segunda es capaz de predecir valores continuos, por ejemplo, dado el origen de una calabaza y el tiempo de cosecha, _cuánto subirá su precio_. - -![Modelo de clasificación de calabazas](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.es.png) -> Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Otras clasificaciones - -Hay otros tipos de regresión logística, incluyendo la multinomial y la ordinal: - -- **Multinomial**, que implica tener más de una categoría - "Naranja, Blanco y Rayada". -- **Ordinal**, que implica categorías ordenadas, útil si quisiéramos ordenar nuestros resultados lógicamente, como nuestras calabazas que están ordenadas por un número finito de tamaños (mini,pequeño,mediano,grande,xl,xxl). - -![Regresión multinomial vs ordinal](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.es.png) - -### Las variables NO TIENEN que correlacionar - -¿Recuerdas cómo la regresión lineal funcionaba mejor con variables más correlacionadas? La regresión logística es lo opuesto: las variables no tienen que alinearse. Eso funciona para estos datos que tienen correlaciones algo débiles. - -### Necesitas muchos datos limpios - -La regresión logística dará resultados más precisos si usas más datos; nuestro pequeño conjunto de datos no es óptimo para esta tarea, así que tenlo en cuenta. - -[![ML para principiantes - Análisis y Preparación de Datos para Regresión Logística](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML para principiantes - Análisis y Preparación de Datos para Regresión Logística") - -> 🎥 Haz clic en la imagen de arriba para una breve descripción en video de la preparación de datos para la regresión lineal - -✅ Piensa en los tipos de datos que se prestarían bien a la regresión logística - -## Ejercicio - limpiar los datos - -Primero, limpia un poco los datos, eliminando los valores nulos y seleccionando solo algunas de las columnas: - -1. Agrega el siguiente código: - - ```python - - columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] - pumpkins = full_pumpkins.loc[:, columns_to_select] - - pumpkins.dropna(inplace=True) - ``` - - Siempre puedes echar un vistazo a tu nuevo dataframe: - - ```python - pumpkins.info - ``` - -### Visualización - gráfico categórico - -Para este momento, ya has cargado el [cuaderno inicial](../../../../2-Regression/4-Logistic/notebook.ipynb) con los datos de las calabazas una vez más y los has limpiado para preservar un conjunto de datos que contiene algunas variables, incluyendo `Color`. Vamos a visualizar el dataframe en el cuaderno utilizando una biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que está construida sobre Matplotlib que usamos anteriormente. - -Seaborn ofrece algunas formas interesantes de visualizar tus datos. Por ejemplo, puedes comparar distribuciones de los datos para cada `Variety` y `Color` en un gráfico categórico. - -1. Crea un gráfico de este tipo usando `catplot` function, using our pumpkin data `pumpkins`, y especificando un mapeo de color para cada categoría de calabaza (naranja o blanca): - - ```python - import seaborn as sns - - palette = { - 'ORANGE': 'orange', - 'WHITE': 'wheat', - } - - sns.catplot( - data=pumpkins, y="Variety", hue="Color", kind="count", - palette=palette, - ) - ``` - - ![Una cuadrícula de datos visualizados](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.es.png) - - Al observar los datos, puedes ver cómo los datos de Color se relacionan con Variety. - - ✅ Dado este gráfico categórico, ¿cuáles son algunas exploraciones interesantes que puedes imaginar? - -### Preprocesamiento de datos: codificación de características y etiquetas - -Nuestro conjunto de datos de calabazas contiene valores de cadena para todas sus columnas. Trabajar con datos categóricos es intuitivo para los humanos pero no para las máquinas. Los algoritmos de aprendizaje automático funcionan bien con números. Por eso la codificación es un paso muy importante en la fase de preprocesamiento de datos, ya que nos permite convertir datos categóricos en datos numéricos, sin perder información. Una buena codificación lleva a construir un buen modelo. - -Para la codificación de características hay dos tipos principales de codificadores: - -1. Codificador ordinal: se adapta bien a las variables ordinales, que son variables categóricas donde sus datos siguen un orden lógico, como la columna `Item Size` en nuestro conjunto de datos. Crea un mapeo tal que cada categoría está representada por un número, que es el orden de la categoría en la columna. - - ```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. Codificador categórico: se adapta bien a las variables nominales, que son variables categóricas donde sus datos no siguen un orden lógico, como todas las características diferentes de `Item Size` en nuestro conjunto de datos. Es una codificación de una sola vez, lo que significa que cada categoría está representada por una columna binaria: la variable codificada es igual a 1 si la calabaza pertenece a esa Variety y 0 en caso contrario. - - ```python - from sklearn.preprocessing import OneHotEncoder - - categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] - categorical_encoder = OneHotEncoder(sparse_output=False) - ``` -Luego, `ColumnTransformer` se utiliza para combinar múltiples codificadores en un solo paso y aplicarlos a las columnas apropiadas. - -```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) -``` -Por otro lado, para codificar la etiqueta, utilizamos la clase `LabelEncoder` de scikit-learn, que es una clase de utilidad para ayudar a normalizar las etiquetas de modo que contengan solo valores entre 0 y n_clases-1 (aquí, 0 y 1). - -```python - from sklearn.preprocessing import LabelEncoder - - label_encoder = LabelEncoder() - encoded_label = label_encoder.fit_transform(pumpkins['Color']) -``` -Una vez que hemos codificado las características y la etiqueta, podemos fusionarlas en un nuevo dataframe `encoded_pumpkins`. - -```python - encoded_pumpkins = encoded_features.assign(Color=encoded_label) -``` -✅ ¿Cuáles son las ventajas de usar un codificador ordinal para la columna `Item Size` column? - -### Analyse relationships between variables - -Now that we have pre-processed our data, we can analyse the relationships between the features and the label to grasp an idea of how well the model will be able to predict the label given the features. -The best way to perform this kind of analysis is plotting the data. We'll be using again the Seaborn `catplot` function, to visualize the relationships between `Item Size`, `Variety` y `Color` en un gráfico categórico? Para plotear mejor los datos, usaremos la columna codificada `Item Size` column and the unencoded `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}") -``` -![Un catplot de datos visualizados](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.es.png) - -### Usar un gráfico de enjambre - -Dado que Color es una categoría binaria (Blanco o No), necesita 'un [enfoque especializado](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) para la visualización'. Hay otras formas de visualizar la relación de esta categoría con otras variables. - -Puedes visualizar variables una al lado de la otra con gráficos de Seaborn. - -1. Prueba un gráfico de 'enjambre' para mostrar la distribución de valores: - - ```python - palette = { - 0: 'orange', - 1: 'wheat' - } - sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) - ``` - - ![Un enjambre de datos visualizados](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.es.png) - -**Ten cuidado**: el código anterior puede generar una advertencia, ya que Seaborn no puede representar tal cantidad de puntos de datos en un gráfico de enjambre. Una posible solución es disminuir el tamaño del marcador, utilizando el parámetro 'size'. Sin embargo, ten en cuenta que esto afecta la legibilidad del gráfico. - -> **🧮 Muéstrame las matemáticas** -> -> La regresión logística se basa en el concepto de 'máxima verosimilitud' utilizando [funciones sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Una 'Función Sigmoide' en un gráfico se ve como una forma de 'S'. Toma un valor y lo mapea a algún lugar entre 0 y 1. Su curva también se llama 'curva logística'. Su fórmula se ve así: -> -> ![función logística](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.es.png) -> -> donde el punto medio de la sigmoide se encuentra en el punto 0 de x, L es el valor máximo de la curva, y k es la inclinación de la curva. Si el resultado de la función es mayor a 0.5, la etiqueta en cuestión recibirá la clase '1' de la elección binaria. Si no, se clasificará como '0'. - -## Construye tu modelo - -Construir un modelo para encontrar estas clasificaciones binarias es sorprendentemente sencillo en Scikit-learn. - -[![ML para principiantes - Regresión Logística para la clasificación de datos](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML para principiantes - Regresión Logística para la clasificación de datos") - -> 🎥 Haz clic en la imagen de arriba para una breve descripción en video de la construcción de un modelo de regresión lineal - -1. Selecciona las variables que deseas utilizar en tu modelo de clasificación y divide los conjuntos de entrenamiento y prueba llamando a `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. Ahora puedes entrenar tu modelo, llamando a `fit()` con tus datos de entrenamiento, e imprimir su resultado: - - ```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)) - ``` - - Echa un vistazo al puntaje de tu modelo. No está mal, considerando que solo tienes alrededor de 1000 filas de datos: - - ```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 - ``` - -## Mejor comprensión mediante una matriz de confusión - -Aunque puedes obtener un informe de puntuación [términos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) imprimiendo los elementos anteriores, podrías entender mejor tu modelo usando una [matriz de confusión](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para ayudarnos a comprender cómo está funcionando el modelo. - -> 🎓 Una '[matriz de confusión](https://wikipedia.org/wiki/Confusion_matrix)' (o 'matriz de error') es una tabla que expresa los verdaderos vs. falsos positivos y negativos de tu modelo, evaluando así la precisión de las predicciones. - -1. Para usar una métrica de confusión, llama a `confusion_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Echa un vistazo a la matriz de confusión de tu modelo: - - ```output - array([[162, 4], - [ 11, 22]]) - ``` - -En Scikit-learn, las filas de las matrices de confusión (eje 0) son etiquetas reales y las columnas (eje 1) son etiquetas predichas. - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -¿Qué está pasando aquí? Digamos que nuestro modelo se le pide clasificar calabazas entre dos categorías binarias, categoría 'blanco' y categoría 'no-blanco'. - -- Si tu modelo predice una calabaza como no blanca y pertenece a la categoría 'no-blanco' en realidad, lo llamamos un verdadero negativo, mostrado por el número superior izquierdo. -- Si tu modelo predice una calabaza como blanca y pertenece a la categoría 'no-blanco' en realidad, lo llamamos un falso negativo, mostrado por el número inferior izquierdo. -- Si tu modelo predice una calabaza como no blanca y pertenece a la categoría 'blanco' en realidad, lo llamamos un falso positivo, mostrado por el número superior derecho. -- Si tu modelo predice una calabaza como blanca y pertenece a la categoría 'blanco' en realidad, lo llamamos un verdadero positivo, mostrado por el número inferior derecho. - -Como habrás adivinado, es preferible tener un mayor número de verdaderos positivos y verdaderos negativos y un menor número de falsos positivos y falsos negativos, lo que implica que el modelo funciona mejor. - -¿Cómo se relaciona la matriz de confusión con la precisión y el recall? Recuerda, el informe de clasificación impreso anteriormente mostró precisión (0.85) y recall (0.67). - -Precisión = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 - -Recall = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 - -✅ P: Según la matriz de confusión, ¿cómo le fue al modelo? R: No está mal; hay un buen número de verdaderos negativos pero también algunos falsos negativos. - -Volvamos a los términos que vimos anteriormente con la ayuda del mapeo TP/TN y FP/FN de la matriz de confusión: - -🎓 Precisión: TP/(TP + FP) La fracción de instancias relevantes entre las instancias recuperadas (por ejemplo, qué etiquetas fueron bien etiquetadas) - -🎓 Recall: TP/(TP + FN) La fracción de instancias relevantes que fueron recuperadas, ya sea bien etiquetadas o no - -🎓 f1-score: (2 * precisión * recall)/(precisión + recall) Un promedio ponderado de la precisión y el recall, siendo el mejor 1 y el peor 0 - -🎓 Soporte: El número de ocurrencias de cada etiqueta recuperada - -🎓 Exactitud: (TP + TN)/(TP + TN + FP + FN) El porcentaje de etiquetas predichas con precisión para una muestra. - -🎓 Promedio Macro: El cálculo de las métricas medias no ponderadas para cada etiqueta, sin tener en cuenta el desequilibrio de las etiquetas. - -🎓 Promedio Ponderado: El cálculo de las métricas medias para cada etiqueta, teniendo en cuenta el desequilibrio de las etiquetas ponderándolas por su soporte (el número de instancias verdaderas para cada etiqueta). - -✅ ¿Puedes pensar en qué métrica deberías observar si deseas que tu modelo reduzca el número de falsos negativos? - -## Visualiza la curva ROC de este modelo - -[![ML para principiantes - Analizando el Rendimiento de la Regresión Logística con Curvas ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML para principiantes - Analizando el Rendimiento de la Regresión Logística con Curvas ROC") - -> 🎥 Haz clic en la imagen de arriba para una breve descripción en video de las curvas ROC - -Hagamos una visualización más para ver la llamada curva '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() -``` - -Usando Matplotlib, grafica la [Curva Característica Operativa del Receptor](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) o ROC del modelo. Las curvas ROC se utilizan a menudo para obtener una vista de la salida de un clasificador en términos de sus verdaderos vs. falsos positivos. "Las curvas ROC generalmente presentan la tasa de verdaderos positivos en el eje Y, y la tasa de falsos positivos en el eje X". Por lo tanto, la inclinación de la curva y el espacio entre la línea del punto medio y la curva importan: deseas una curva que rápidamente se dirija hacia arriba y sobre la línea. En nuestro caso, hay falsos positivos al principio, y luego la línea se dirige hacia arriba y sobre correctamente: - -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.es.png) - -Finalmente, usa la [API `roc_auc_score` de Scikit-learn](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) para calcular el 'Área Bajo la Curva' (AUC): - -```python -auc = roc_auc_score(y_test,y_scores[:,1]) -print(auc) -``` -El resultado es `0.9749908725812341`. Dado que el AUC varía de 0 a 1, deseas un puntaje alto, ya que un modelo que es 100% correcto en sus predicciones tendrá un AUC de 1; en este caso - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/4-Logistic/assignment.md b/translations/es/2-Regression/4-Logistic/assignment.md deleted file mode 100644 index 6148b0b0..00000000 --- a/translations/es/2-Regression/4-Logistic/assignment.md +++ /dev/null @@ -1,13 +0,0 @@ -# Reintentando algo de Regresión - -## Instrucciones - -En la lección, utilizaste un subconjunto de los datos de calabaza. Ahora, vuelve a los datos originales e intenta usar todos ellos, limpios y estandarizados, para construir un modelo de Regresión Logística. -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | ---------------------------------------------------------------------- | ------------------------------------------------------------ | ---------------------------------------------------------- | -| | Se presenta un notebook con un modelo bien explicado y de buen rendimiento | Se presenta un notebook con un modelo que tiene un rendimiento mínimo | Se presenta un notebook con un modelo de bajo rendimiento o ninguno | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/4-Logistic/solution/Julia/README.md b/translations/es/2-Regression/4-Logistic/solution/Julia/README.md deleted file mode 100644 index f2f4f1ea..00000000 --- a/translations/es/2-Regression/4-Logistic/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/2-Regression/README.md b/translations/es/2-Regression/README.md deleted file mode 100644 index 4459454b..00000000 --- a/translations/es/2-Regression/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Modelos de regresión para el aprendizaje automático -## Tema regional: Modelos de regresión para precios de calabazas en América del Norte 🎃 - -En América del Norte, las calabazas a menudo se tallan en caras aterradoras para Halloween. ¡Vamos a descubrir más sobre estos fascinantes vegetales! - -![jack-o-lanterns](../../../translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.es.jpg) -> Foto por Beth Teutschmann en Unsplash - -## Lo que aprenderás - -[![Introducción a la regresión](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Video de introducción a la regresión - ¡Haz clic para ver!") -> 🎥 Haz clic en la imagen de arriba para un video de introducción rápida a esta lección - -Las lecciones en esta sección cubren los tipos de regresión en el contexto del aprendizaje automático. Los modelos de regresión pueden ayudar a determinar la _relación_ entre variables. Este tipo de modelo puede predecir valores como longitud, temperatura o edad, descubriendo así relaciones entre variables mientras analiza puntos de datos. - -En esta serie de lecciones, descubrirás las diferencias entre la regresión lineal y logística, y cuándo deberías preferir una sobre la otra. - -[![ML para principiantes - Introducción a los modelos de regresión para el aprendizaje automático](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML para principiantes - Introducción a los modelos de regresión para el aprendizaje automático") - -> 🎥 Haz clic en la imagen de arriba para un video corto que introduce los modelos de regresión. - -En este grupo de lecciones, te prepararás para comenzar tareas de aprendizaje automático, incluyendo la configuración de Visual Studio Code para gestionar notebooks, el entorno común para los científicos de datos. Descubrirás Scikit-learn, una biblioteca para el aprendizaje automático, y construirás tus primeros modelos, enfocándote en los modelos de regresión en este capítulo. - -> Hay herramientas útiles de bajo código que pueden ayudarte a aprender sobre trabajar con modelos de regresión. Prueba [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Lecciones - -1. [Herramientas del oficio](1-Tools/README.md) -2. [Gestión de datos](2-Data/README.md) -3. [Regresión lineal y polinómica](3-Linear/README.md) -4. [Regresión logística](4-Logistic/README.md) - ---- -### Créditos - -"ML con regresión" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper) - -♥️ Contribuyentes al cuestionario incluyen: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) y [Ornella Altunyan](https://twitter.com/ornelladotcom) - -El conjunto de datos de calabazas es sugerido por [este proyecto en Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) y sus datos provienen de los [Informes estándar de mercados terminales de cultivos especiales](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuidos por el Departamento de Agricultura de los Estados Unidos. Hemos añadido algunos puntos sobre el color basado en la variedad para normalizar la distribución. Estos datos son de dominio público. - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/3-Web-App/1-Web-App/README.md b/translations/es/3-Web-App/1-Web-App/README.md deleted file mode 100644 index 2eb4c4c6..00000000 --- a/translations/es/3-Web-App/1-Web-App/README.md +++ /dev/null @@ -1,348 +0,0 @@ -# Crear una Aplicación Web para Usar un Modelo de ML - -En esta lección, entrenarás un modelo de ML con un conjunto de datos fuera de este mundo: _Avistamientos de OVNIs durante el último siglo_, obtenidos de la base de datos de NUFORC. - -Aprenderás: - -- Cómo 'pickle' un modelo entrenado -- Cómo usar ese modelo en una aplicación Flask - -Continuaremos usando notebooks para limpiar datos y entrenar nuestro modelo, pero puedes llevar el proceso un paso más allá explorando el uso de un modelo 'en el mundo real', por así decirlo: en una aplicación web. - -Para hacer esto, necesitas construir una aplicación web usando Flask. - -## [Cuestionario Previo a la Lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## Construyendo una Aplicación - -Hay varias formas de construir aplicaciones web para consumir modelos de machine learning. Tu arquitectura web puede influir en la forma en que tu modelo está entrenado. Imagina que estás trabajando en una empresa donde el grupo de ciencia de datos ha entrenado un modelo que quieren que uses en una aplicación. - -### Consideraciones - -Hay muchas preguntas que necesitas hacer: - -- **¿Es una aplicación web o una aplicación móvil?** Si estás construyendo una aplicación móvil o necesitas usar el modelo en un contexto de IoT, podrías usar [TensorFlow Lite](https://www.tensorflow.org/lite/) y usar el modelo en una aplicación Android o iOS. -- **¿Dónde residirá el modelo?** ¿En la nube o localmente? -- **Soporte offline.** ¿La aplicación tiene que funcionar sin conexión? -- **¿Qué tecnología se utilizó para entrenar el modelo?** La tecnología elegida puede influir en las herramientas que necesitas usar. - - **Usando TensorFlow.** Si estás entrenando un modelo usando TensorFlow, por ejemplo, ese ecosistema proporciona la capacidad de convertir un modelo de TensorFlow para su uso en una aplicación web usando [TensorFlow.js](https://www.tensorflow.org/js/). - - **Usando PyTorch.** Si estás construyendo un modelo usando una biblioteca como [PyTorch](https://pytorch.org/), tienes la opción de exportarlo en formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) para su uso en aplicaciones web JavaScript que pueden usar el [Onnx Runtime](https://www.onnxruntime.ai/). Esta opción será explorada en una lección futura para un modelo entrenado con Scikit-learn. - - **Usando Lobe.ai o Azure Custom Vision.** Si estás usando un sistema ML SaaS (Software como Servicio) como [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) para entrenar un modelo, este tipo de software proporciona formas de exportar el modelo para muchas plataformas, incluyendo la construcción de una API personalizada para ser consultada en la nube por tu aplicación en línea. - -También tienes la oportunidad de construir una aplicación web completa con Flask que sería capaz de entrenar el modelo por sí misma en un navegador web. Esto también se puede hacer usando TensorFlow.js en un contexto JavaScript. - -Para nuestros propósitos, ya que hemos estado trabajando con notebooks basados en Python, exploremos los pasos que necesitas seguir para exportar un modelo entrenado desde dicho notebook a un formato legible por una aplicación web construida en Python. - -## Herramienta - -Para esta tarea, necesitas dos herramientas: Flask y Pickle, ambas funcionan en Python. - -✅ ¿Qué es [Flask](https://palletsprojects.com/p/flask/)? Definido como un 'micro-framework' por sus creadores, Flask proporciona las características básicas de los frameworks web usando Python y un motor de plantillas para construir páginas web. Echa un vistazo a [este módulo de aprendizaje](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) para practicar la construcción con Flask. - -✅ ¿Qué es [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 es un módulo de Python que serializa y deserializa una estructura de objetos de Python. Cuando 'pickleas' un modelo, serializas o aplastas su estructura para su uso en la web. Ten cuidado: pickle no es intrínsecamente seguro, así que ten cuidado si te piden 'des-picklear' un archivo. Un archivo pickled tiene el sufijo `.pkl`. - -## Ejercicio - limpiar tus datos - -En esta lección usarás datos de 80,000 avistamientos de OVNIs, recopilados por [NUFORC](https://nuforc.org) (El Centro Nacional de Informes de OVNIs). Estos datos tienen algunas descripciones interesantes de avistamientos de OVNIs, por ejemplo: - -- **Descripción larga de ejemplo.** "Un hombre emerge de un rayo de luz que brilla en un campo de hierba por la noche y corre hacia el estacionamiento de Texas Instruments". -- **Descripción corta de ejemplo.** "las luces nos persiguieron". - -La hoja de cálculo [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) incluye columnas sobre el `city`, `state` y `country` donde ocurrió el avistamiento, el `shape` del objeto y su `latitude` y `longitude`. - -En el [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) en blanco incluido en esta lección: - -1. importa `pandas`, `matplotlib`, y `numpy` como hiciste en lecciones anteriores e importa la hoja de cálculo de ufos. Puedes echar un vistazo a un conjunto de datos de muestra: - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -1. Convierte los datos de ufos a un pequeño dataframe con títulos nuevos. Revisa los valores únicos en el campo `Country`. - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. Ahora, puedes reducir la cantidad de datos que necesitamos manejar eliminando cualquier valor nulo e importando solo avistamientos entre 1-60 segundos: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Importa la biblioteca `LabelEncoder` de Scikit-learn para convertir los valores de texto de los países a un número: - - ✅ LabelEncoder codifica datos alfabéticamente - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - Tus datos deberían verse así: - - ```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 - ``` - -## Ejercicio - construir tu modelo - -Ahora puedes prepararte para entrenar un modelo dividiendo los datos en el grupo de entrenamiento y prueba. - -1. Selecciona las tres características que quieres entrenar como tu vector X, y el vector y será el `Country`. You want to be able to input `Seconds`, `Latitude` and `Longitude` y obtén un id de país para devolver. - - ```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. Entrena tu modelo usando regresión logística: - - ```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)) - ``` - -La precisión no está mal **(alrededor del 95%)**, no es sorprendente, ya que `Country` and `Latitude/Longitude` correlate. - -The model you created isn't very revolutionary as you should be able to infer a `Country` from its `Latitude` and `Longitude`, pero es un buen ejercicio intentar entrenar desde datos en bruto que limpiaste, exportaste y luego usar este modelo en una aplicación web. - -## Ejercicio - 'pickle' tu modelo - -¡Ahora, es momento de _pickle_ tu modelo! Puedes hacerlo en unas pocas líneas de código. Una vez que esté _pickled_, carga tu modelo pickled y pruébalo contra un array de datos de muestra que contenga valores para segundos, latitud y longitud, - -```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]])) -``` - -El modelo devuelve **'3'**, que es el código de país para el Reino Unido. ¡Increíble! 👽 - -## Ejercicio - construir una aplicación Flask - -Ahora puedes construir una aplicación Flask para llamar a tu modelo y devolver resultados similares, pero de una manera más visualmente agradable. - -1. Comienza creando una carpeta llamada **web-app** junto al archivo _notebook.ipynb_ donde reside tu archivo _ufo-model.pkl_. - -1. En esa carpeta crea tres carpetas más: **static**, con una carpeta **css** dentro, y **templates**. Ahora deberías tener los siguientes archivos y directorios: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Consulta la carpeta de solución para ver la aplicación terminada - -1. El primer archivo que debes crear en la carpeta _web-app_ es el archivo **requirements.txt**. Al igual que _package.json_ en una aplicación JavaScript, este archivo lista las dependencias requeridas por la aplicación. En **requirements.txt** agrega las líneas: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. Ahora, ejecuta este archivo navegando a _web-app_: - - ```bash - cd web-app - ``` - -1. En tu terminal escribe `pip install`, para instalar las bibliotecas listadas en _requirements.txt_: - - ```bash - pip install -r requirements.txt - ``` - -1. Ahora, estás listo para crear tres archivos más para terminar la aplicación: - - 1. Crea **app.py** en la raíz. - 2. Crea **index.html** en el directorio _templates_. - 3. Crea **styles.css** en el directorio _static/css_. - -1. Construye el archivo _styles.css_ con algunos estilos: - - ```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. Luego, construye el archivo _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 }}

                                        - -
                                        - -
                                        - - - - ``` - - Echa un vistazo a la plantilla en este archivo. Nota la sintaxis 'mustache' alrededor de las variables que serán proporcionadas por la aplicación, como el texto de predicción: `{{}}`. There's also a form that posts a prediction to the `/predict` route. - - Finally, you're ready to build the python file that drives the consumption of the model and the display of predictions: - -1. In `app.py` agrega: - - ```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) - ``` - - > 💡 Consejo: cuando agregas [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) while running the web app using Flask, any changes you make to your application will be reflected immediately without the need to restart the server. Beware! Don't enable this mode in a production app. - -If you run `python app.py` or `python3 app.py` - your web server starts up, locally, and you can fill out a short form to get an answer to your burning question about where UFOs have been sighted! - -Before doing that, take a look at the parts of `app.py`: - -1. First, dependencies are loaded and the app starts. -1. Then, the model is imported. -1. Then, index.html is rendered on the home route. - -On the `/predict` route, several things happen when the form is posted: - -1. The form variables are gathered and converted to a numpy array. They are then sent to the model and a prediction is returned. -2. The Countries that we want displayed are re-rendered as readable text from their predicted country code, and that value is sent back to index.html to be rendered in the template. - -Using a model this way, with Flask and a pickled model, is relatively straightforward. The hardest thing is to understand what shape the data is that must be sent to the model to get a prediction. That all depends on how the model was trained. This one has three data points to be input in order to get a prediction. - -In a professional setting, you can see how good communication is necessary between the folks who train the model and those who consume it in a web or mobile app. In our case, it's only one person, you! - ---- - -## 🚀 Challenge - -Instead of working in a notebook and importing the model to the Flask app, you could train the model right within the Flask app! Try converting your Python code in the notebook, perhaps after your data is cleaned, to train the model from within the app on a route called `train`. ¿Cuáles son los pros y los contras de seguir este método? - -## [Cuestionario Posterior a la Lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## Revisión y Autoestudio - -Hay muchas formas de construir una aplicación web para consumir modelos de ML. Haz una lista de las formas en que podrías usar JavaScript o Python para construir una aplicación web que aproveche el machine learning. Considera la arquitectura: ¿debería el modelo permanecer en la aplicación o vivir en la nube? Si es lo último, ¿cómo lo accederías? Dibuja un modelo arquitectónico para una solución web aplicada de ML. - -## Tarea - -[Prueba un modelo diferente](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/3-Web-App/1-Web-App/assignment.md b/translations/es/3-Web-App/1-Web-App/assignment.md deleted file mode 100644 index 8ff2b4bb..00000000 --- a/translations/es/3-Web-App/1-Web-App/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Prueba un modelo diferente - -## Instrucciones - -Ahora que has construido una aplicación web utilizando un modelo de regresión entrenado, usa uno de los modelos de una lección anterior de regresión para rehacer esta aplicación web. Puedes mantener el estilo o diseñarla de manera diferente para reflejar los datos de calabazas. Ten cuidado de cambiar las entradas para reflejar el método de entrenamiento de tu modelo. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | La aplicación web funciona como se espera y está desplegada en la nube | La aplicación web contiene fallos o muestra resultados inesperados | La aplicación web no funciona correctamente | - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/3-Web-App/README.md b/translations/es/3-Web-App/README.md deleted file mode 100644 index d2a05973..00000000 --- a/translations/es/3-Web-App/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Construye una aplicación web para usar tu modelo de ML - -En esta sección del currículo, se te introducirá a un tema aplicado de ML: cómo guardar tu modelo de Scikit-learn como un archivo que puede ser usado para hacer predicciones dentro de una aplicación web. Una vez que el modelo esté guardado, aprenderás cómo usarlo en una aplicación web construida en Flask. Primero, crearás un modelo usando algunos datos que están relacionados con avistamientos de OVNIs. Luego, construirás una aplicación web que te permitirá ingresar un número de segundos con un valor de latitud y longitud para predecir qué país reportó ver un OVNI. - -![Estacionamiento de OVNIs](../../../translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.es.jpg) - -Foto por Michael Herren en Unsplash - -## Lecciones - -1. [Construye una Aplicación Web](1-Web-App/README.md) - -## Créditos - -"Construye una Aplicación Web" fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper). - -♥️ Los cuestionarios fueron escritos por Rohan Raj. - -El conjunto de datos proviene de [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -La arquitectura de la aplicación web fue sugerida en parte por [este artículo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) y [este repositorio](https://github.com/abhinavsagar/machine-learning-deployment) de Abhinav Sagar. - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/1-Introduction/README.md b/translations/es/4-Classification/1-Introduction/README.md deleted file mode 100644 index 1c516ef8..00000000 --- a/translations/es/4-Classification/1-Introduction/README.md +++ /dev/null @@ -1,302 +0,0 @@ -# Introducción a la clasificación - -En estas cuatro lecciones, explorarás un enfoque fundamental del aprendizaje automático clásico: la _clasificación_. Recorreremos el uso de varios algoritmos de clasificación con un conjunto de datos sobre todas las brillantes cocinas de Asia e India. ¡Espero que tengas hambre! - -![solo una pizca!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.es.png) - -> ¡Celebra las cocinas panasiáticas en estas lecciones! Imagen por [Jen Looper](https://twitter.com/jenlooper) - -La clasificación es una forma de [aprendizaje supervisado](https://wikipedia.org/wiki/Supervised_learning) que tiene mucho en común con las técnicas de regresión. Si el aprendizaje automático se trata de predecir valores o nombres de cosas usando conjuntos de datos, entonces la clasificación generalmente se divide en dos grupos: _clasificación binaria_ y _clasificación multiclase_. - -[![Introducción a la clasificación](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introducción a la clasificación") - -> 🎥 Haz clic en la imagen de arriba para ver un video: John Guttag del MIT introduce la clasificación - -Recuerda: - -- **La regresión lineal** te ayudó a predecir relaciones entre variables y hacer predicciones precisas sobre dónde caería un nuevo punto de datos en relación con esa línea. Por ejemplo, podrías predecir _cuál sería el precio de una calabaza en septiembre vs. diciembre_. -- **La regresión logística** te ayudó a descubrir "categorías binarias": a este precio, _¿esta calabaza es naranja o no-naranja_? - -La clasificación utiliza varios algoritmos para determinar otras formas de determinar la etiqueta o clase de un punto de datos. Trabajemos con estos datos de cocina para ver si, observando un grupo de ingredientes, podemos determinar su cocina de origen. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) - -> ### [¡Esta lección está disponible en R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) - -### Introducción - -La clasificación es una de las actividades fundamentales del investigador en aprendizaje automático y del científico de datos. Desde la clasificación básica de un valor binario ("¿es este correo electrónico spam o no?"), hasta la clasificación y segmentación de imágenes complejas usando visión por computadora, siempre es útil poder clasificar datos en clases y hacer preguntas sobre ellos. - -Para expresar el proceso de una manera más científica, tu método de clasificación crea un modelo predictivo que te permite mapear la relación entre variables de entrada y variables de salida. - -![clasificación binaria vs. multiclase](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.es.png) - -> Problemas binarios vs. multiclase para que los algoritmos de clasificación manejen. Infografía por [Jen Looper](https://twitter.com/jenlooper) - -Antes de comenzar el proceso de limpiar nuestros datos, visualizarlos y prepararlos para nuestras tareas de aprendizaje automático, aprendamos un poco sobre las diversas formas en que se puede utilizar el aprendizaje automático para clasificar datos. - -Derivado de [estadísticas](https://wikipedia.org/wiki/Statistical_classification), la clasificación usando aprendizaje automático clásico utiliza características, como `smoker`, `weight`, y `age` para determinar _la probabilidad de desarrollar X enfermedad_. Como técnica de aprendizaje supervisado similar a los ejercicios de regresión que realizaste anteriormente, tus datos están etiquetados y los algoritmos de aprendizaje automático usan esas etiquetas para clasificar y predecir clases (o 'características') de un conjunto de datos y asignarlas a un grupo o resultado. - -✅ Tómate un momento para imaginar un conjunto de datos sobre cocinas. ¿Qué podría responder un modelo multiclase? ¿Qué podría responder un modelo binario? ¿Qué pasaría si quisieras determinar si una cocina dada es probable que use fenogreco? ¿Y si quisieras ver si, dado un regalo de una bolsa de supermercado llena de anís estrellado, alcachofas, coliflor y rábano picante, podrías crear un plato típico indio? - -[![Cestas misteriosas locas](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Cestas misteriosas locas") - -> 🎥 Haz clic en la imagen de arriba para ver un video. Toda la premisa del programa 'Chopped' es la 'cesta misteriosa' donde los chefs tienen que hacer algún plato con una elección aleatoria de ingredientes. ¡Seguramente un modelo de aprendizaje automático habría ayudado! - -## Hola 'clasificador' - -La pregunta que queremos hacer sobre este conjunto de datos de cocina es en realidad una **pregunta multiclase**, ya que tenemos varias cocinas nacionales potenciales con las que trabajar. Dado un lote de ingredientes, ¿a cuál de estas muchas clases se ajustarán los datos? - -Scikit-learn ofrece varios algoritmos diferentes para clasificar datos, dependiendo del tipo de problema que quieras resolver. En las próximas dos lecciones, aprenderás sobre varios de estos algoritmos. - -## Ejercicio - limpiar y equilibrar tus datos - -La primera tarea a mano, antes de comenzar este proyecto, es limpiar y **equilibrar** tus datos para obtener mejores resultados. Comienza con el archivo _notebook.ipynb_ en la raíz de esta carpeta. - -Lo primero que debes instalar es [imblearn](https://imbalanced-learn.org/stable/). Este es un paquete de Scikit-learn que te permitirá equilibrar mejor los datos (aprenderás más sobre esta tarea en un momento). - -1. Para instalar `imblearn`, ejecuta `pip install`, de la siguiente manera: - - ```python - pip install imblearn - ``` - -1. Importa los paquetes que necesitas para importar tus datos y visualizarlos, también importa `SMOTE` de `imblearn`. - - ```python - import pandas as pd - import matplotlib.pyplot as plt - import matplotlib as mpl - import numpy as np - from imblearn.over_sampling import SMOTE - ``` - - Ahora estás listo para importar los datos. - -1. La siguiente tarea será importar los datos: - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - Usando `read_csv()` will read the content of the csv file _cusines.csv_ and place it in the variable `df`. - -1. Revisa la forma de los datos: - - ```python - df.head() - ``` - - Las primeras cinco filas se ven así: - - ```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. Obtén información sobre estos datos llamando a `info()`: - - ```python - df.info() - ``` - - Tu salida se parece a: - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Ejercicio - aprendiendo sobre cocinas - -Ahora el trabajo empieza a volverse más interesante. Descubramos la distribución de los datos, por cocina. - -1. Grafica los datos como barras llamando a `barh()`: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![distribución de datos de cocina](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.es.png) - - Hay un número finito de cocinas, pero la distribución de los datos es desigual. ¡Puedes arreglar eso! Antes de hacerlo, explora un poco más. - -1. Descubre cuántos datos hay disponibles por cocina e imprímelos: - - ```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}') - ``` - - la salida se ve así: - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Descubriendo ingredientes - -Ahora puedes profundizar en los datos y aprender cuáles son los ingredientes típicos por cocina. Deberías limpiar los datos recurrentes que crean confusión entre cocinas, así que aprendamos sobre este problema. - -1. Crea una función `create_ingredient()` en Python para crear un dataframe de ingredientes. Esta función comenzará eliminando una columna no útil y clasificando los ingredientes por su cantidad: - - ```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 - ``` - - Ahora puedes usar esa función para obtener una idea de los diez ingredientes más populares por cocina. - -1. Llama a `create_ingredient()` and plot it calling `barh()`: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![tailandesa](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.es.png) - -1. Haz lo mismo para los datos japoneses: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![japonesa](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.es.png) - -1. Ahora para los ingredientes chinos: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![china](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.es.png) - -1. Grafica los ingredientes indios: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![india](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.es.png) - -1. Finalmente, grafica los ingredientes coreanos: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![coreana](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.es.png) - -1. Ahora, elimina los ingredientes más comunes que crean confusión entre cocinas distintas, llamando a `drop()`: - - ¡A todos les encanta el arroz, el ajo y el jengibre! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Equilibrar el conjunto de datos - -Ahora que has limpiado los datos, usa [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Técnica de Sobremuestreo de Minorías Sintéticas" - para equilibrarlos. - -1. Llama a `fit_resample()`, esta estrategia genera nuevas muestras mediante interpolación. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - Al equilibrar tus datos, tendrás mejores resultados al clasificarlos. Piensa en una clasificación binaria. Si la mayoría de tus datos son de una clase, un modelo de aprendizaje automático va a predecir esa clase con más frecuencia, simplemente porque hay más datos para ella. El equilibrado de los datos toma cualquier dato sesgado y ayuda a eliminar este desequilibrio. - -1. Ahora puedes revisar el número de etiquetas por ingrediente: - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - Tu salida se ve así: - - ```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 - ``` - - Los datos están bien y limpios, equilibrados y muy deliciosos! - -1. El último paso es guardar tus datos equilibrados, incluyendo etiquetas y características, en un nuevo dataframe que se pueda exportar a un archivo: - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. Puedes echar un último vistazo a los datos usando `transformed_df.head()` and `transformed_df.info()`. Guarda una copia de estos datos para usarlos en futuras lecciones: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisines.csv") - ``` - - Este nuevo CSV se puede encontrar ahora en la carpeta de datos raíz. - ---- - -## 🚀Desafío - -Este plan de estudios contiene varios conjuntos de datos interesantes. Explora las carpetas `data` y ve si alguna contiene conjuntos de datos que serían apropiados para clasificación binaria o multiclase. ¿Qué preguntas harías sobre este conjunto de datos? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) - -## Revisión y autoestudio - -Explora la API de SMOTE. ¿Para qué casos de uso es más adecuado? ¿Qué problemas resuelve? - -## Tarea - -[Explora métodos de clasificación](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/1-Introduction/assignment.md b/translations/es/4-Classification/1-Introduction/assignment.md deleted file mode 100644 index 3904e9e0..00000000 --- a/translations/es/4-Classification/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Explora métodos de clasificación - -## Instrucciones - -En la [documentación de Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) encontrarás una gran lista de formas de clasificar datos. Haz una pequeña búsqueda del tesoro en estos documentos: tu objetivo es buscar métodos de clasificación y emparejar un conjunto de datos en este plan de estudios, una pregunta que puedas hacer sobre él y una técnica de clasificación. Crea una hoja de cálculo o tabla en un archivo .doc y explica cómo funcionaría el conjunto de datos con el algoritmo de clasificación. - -## Rubrica - -| Criterio | Ejemplar | Adecuado | Necesita Mejora | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | se presenta un documento que resume 5 algoritmos junto con una técnica de clasificación. El resumen está bien explicado y detallado. | se presenta un documento que resume 3 algoritmos junto con una técnica de clasificación. El resumen está bien explicado y detallado. | se presenta un documento que resume menos de tres algoritmos junto con una técnica de clasificación y el resumen no está bien explicado ni detallado. | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/1-Introduction/solution/Julia/README.md b/translations/es/4-Classification/1-Introduction/solution/Julia/README.md deleted file mode 100644 index a22a164c..00000000 --- a/translations/es/4-Classification/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/2-Classifiers-1/README.md b/translations/es/4-Classification/2-Classifiers-1/README.md deleted file mode 100644 index f90111e4..00000000 --- a/translations/es/4-Classification/2-Classifiers-1/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Clasificadores de Cocina 1 - -En esta lección, utilizarás el conjunto de datos que guardaste de la última lección, lleno de datos equilibrados y limpios sobre cocinas. - -Utilizarás este conjunto de datos con una variedad de clasificadores para _predecir una cocina nacional dada un grupo de ingredientes_. Mientras lo haces, aprenderás más sobre algunas de las formas en que los algoritmos pueden ser aprovechados para tareas de clasificación. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) -# Preparación - -Asumiendo que completaste [Lección 1](../1-Introduction/README.md), asegúrate de que exista un archivo _cleaned_cuisines.csv_ en la carpeta raíz `/data` para estas cuatro lecciones. - -## Ejercicio - predecir una cocina nacional - -1. Trabajando en la carpeta _notebook.ipynb_ de esta lección, importa ese archivo junto con la biblioteca Pandas: - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") - cuisines_df.head() - ``` - - Los datos se ven así: - -| | 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. Ahora, importa varias bibliotecas más: - - ```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. Divide las coordenadas X e y en dos dataframes para el entrenamiento. `cuisine` puede ser el dataframe de etiquetas: - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - Se verá así: - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. Elimina `Unnamed: 0` column and the `cuisine` column, calling `drop()`. Guarda el resto de los datos como características entrenables: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - Tus características se verán así: - -| | 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 | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/2-Classifiers-1/assignment.md b/translations/es/4-Classification/2-Classifiers-1/assignment.md deleted file mode 100644 index 05a64b0d..00000000 --- a/translations/es/4-Classification/2-Classifiers-1/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# Estudiar los solucionadores -## Instrucciones - -En esta lección aprendiste sobre los diversos solucionadores que combinan algoritmos con un proceso de aprendizaje automático para crear un modelo preciso. Revisa los solucionadores listados en la lección y elige dos. Con tus propias palabras, compara y contrasta estos dos solucionadores. ¿Qué tipo de problema abordan? ¿Cómo trabajan con diversas estructuras de datos? ¿Por qué elegirías uno sobre el otro? -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejora | -| --------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | Se presenta un archivo .doc con dos párrafos, uno sobre cada solucionador, comparándolos cuidadosamente. | Se presenta un archivo .doc con solo un párrafo | La tarea está incompleta | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/es/4-Classification/2-Classifiers-1/solution/Julia/README.md deleted file mode 100644 index 9da98d90..00000000 --- a/translations/es/4-Classification/2-Classifiers-1/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/3-Classifiers-2/README.md b/translations/es/4-Classification/3-Classifiers-2/README.md deleted file mode 100644 index 9acedd86..00000000 --- a/translations/es/4-Classification/3-Classifiers-2/README.md +++ /dev/null @@ -1,238 +0,0 @@ -# Clasificadores de cocina 2 - -En esta segunda lección de clasificación, explorarás más formas de clasificar datos numéricos. También aprenderás sobre las implicaciones de elegir un clasificador sobre otro. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) - -### Requisito previo - -Asumimos que has completado las lecciones anteriores y tienes un conjunto de datos limpiado en tu carpeta `data` llamado _cleaned_cuisines.csv_ en la raíz de esta carpeta de 4 lecciones. - -### Preparación - -Hemos cargado tu archivo _notebook.ipynb_ con el conjunto de datos limpiado y lo hemos dividido en dataframes X e y, listos para el proceso de construcción del modelo. - -## Un mapa de clasificación - -Anteriormente, aprendiste sobre las diversas opciones que tienes al clasificar datos usando la hoja de trucos de Microsoft. Scikit-learn ofrece una hoja de trucos similar, pero más granular, que puede ayudarte a reducir aún más tus estimadores (otro término para clasificadores): - -![Mapa de ML de Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.es.png) -> Tip: [visita este mapa en línea](https://scikit-learn.org/stable/tutorial/machine_learning_map/) y haz clic a lo largo del camino para leer la documentación. - -### El plan - -Este mapa es muy útil una vez que tienes un claro entendimiento de tus datos, ya que puedes 'caminar' por sus caminos hacia una decisión: - -- Tenemos >50 muestras -- Queremos predecir una categoría -- Tenemos datos etiquetados -- Tenemos menos de 100K muestras -- ✨ Podemos elegir un Linear SVC -- Si eso no funciona, ya que tenemos datos numéricos - - Podemos intentar un ✨ KNeighbors Classifier - - Si eso no funciona, prueba con ✨ SVC y ✨ Ensemble Classifiers - -Este es un camino muy útil a seguir. - -## Ejercicio - dividir los datos - -Siguiendo este camino, deberíamos comenzar importando algunas bibliotecas para usar. - -1. Importa las bibliotecas necesarias: - - ```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. Divide tus datos de entrenamiento y prueba: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Clasificador Linear SVC - -El clustering de vectores de soporte (SVC) es un miembro de la familia de técnicas de ML de máquinas de vectores de soporte (aprende más sobre estas a continuación). En este método, puedes elegir un 'kernel' para decidir cómo agrupar las etiquetas. El parámetro 'C' se refiere a 'regularización', que regula la influencia de los parámetros. El kernel puede ser uno de [varios](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aquí lo configuramos en 'linear' para asegurar que aprovechamos el Linear SVC. La probabilidad por defecto es 'false'; aquí la configuramos en 'true' para obtener estimaciones de probabilidad. Configuramos el estado aleatorio en '0' para mezclar los datos y obtener probabilidades. - -### Ejercicio - aplicar un Linear SVC - -Comienza creando un array de clasificadores. Irás agregando progresivamente a este array a medida que probamos. - -1. Comienza con un Linear SVC: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Entrena tu modelo usando el Linear SVC e imprime un informe: - - ```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)) - ``` - - El resultado es bastante bueno: - - ```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 - ``` - -## Clasificador K-Neighbors - -K-Neighbors es parte de la familia de métodos de ML "neighbors", que pueden usarse tanto para aprendizaje supervisado como no supervisado. En este método, se crea un número predefinido de puntos y se recopilan datos alrededor de estos puntos para que se puedan predecir etiquetas generalizadas para los datos. - -### Ejercicio - aplicar el clasificador K-Neighbors - -El clasificador anterior fue bueno y funcionó bien con los datos, pero tal vez podamos obtener mejor precisión. Prueba con un clasificador K-Neighbors. - -1. Agrega una línea a tu array de clasificadores (agrega una coma después del elemento Linear SVC): - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - El resultado es un poco peor: - - ```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 - ``` - - ✅ Aprende sobre [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) - -## Clasificador de vectores de soporte - -Los clasificadores de vectores de soporte son parte de la familia de métodos de ML [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) que se usan para tareas de clasificación y regresión. Los SVM "mapean ejemplos de entrenamiento a puntos en el espacio" para maximizar la distancia entre dos categorías. Los datos subsecuentes se mapean en este espacio para que se pueda predecir su categoría. - -### Ejercicio - aplicar un clasificador de vectores de soporte - -Vamos a intentar obtener una mejor precisión con un clasificador de vectores de soporte. - -1. Agrega una coma después del elemento K-Neighbors, y luego agrega esta línea: - - ```python - 'SVC': SVC(), - ``` - - ¡El resultado es bastante bueno! - - ```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 - ``` - - ✅ Aprende sobre [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) - -## Clasificadores Ensemble - -Sigamos el camino hasta el final, aunque la prueba anterior fue bastante buena. Probemos algunos 'Clasificadores Ensemble', específicamente Random Forest y AdaBoost: - -```python - 'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -El resultado es muy bueno, especialmente para Random Forest: - -```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 -``` - -✅ Aprende sobre [Clasificadores Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) - -Este método de Machine Learning "combina las predicciones de varios estimadores base" para mejorar la calidad del modelo. En nuestro ejemplo, usamos Random Trees y AdaBoost. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), un método de promediado, construye un 'bosque' de 'árboles de decisión' infundidos con aleatoriedad para evitar el sobreajuste. El parámetro n_estimators se establece en el número de árboles. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajusta un clasificador a un conjunto de datos y luego ajusta copias de ese clasificador al mismo conjunto de datos. Se enfoca en los pesos de los elementos clasificados incorrectamente y ajusta el ajuste para el siguiente clasificador para corregir. - ---- - -## 🚀Desafío - -Cada una de estas técnicas tiene una gran cantidad de parámetros que puedes ajustar. Investiga los parámetros predeterminados de cada uno y piensa en lo que significaría ajustar estos parámetros para la calidad del modelo. - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) - -## Revisión y autoestudio - -Hay mucho argot en estas lecciones, así que tómate un minuto para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminología útil. - -## Tarea - -[Juego de parámetros](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/3-Classifiers-2/assignment.md b/translations/es/4-Classification/3-Classifiers-2/assignment.md deleted file mode 100644 index 62029c80..00000000 --- a/translations/es/4-Classification/3-Classifiers-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Juego de Parámetros - -## Instrucciones - -Hay muchos parámetros que se establecen por defecto cuando se trabaja con estos clasificadores. Intellisense en VS Code puede ayudarte a profundizar en ellos. Adopta una de las Técnicas de Clasificación de ML en esta lección y vuelve a entrenar los modelos ajustando varios valores de parámetros. Crea un cuaderno explicando por qué algunos cambios mejoran la calidad del modelo mientras que otros la degradan. Sé detallado en tu respuesta. - -## Rúbrica - -| Criterio | Ejemplar | Adecuado | Necesita Mejorar | -| -------- | ----------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| | Se presenta un cuaderno con un clasificador completamente desarrollado y sus parámetros ajustados y cambios explicados en cuadros de texto | Se presenta un cuaderno parcialmente o mal explicado | El cuaderno tiene errores o fallos | - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/es/4-Classification/3-Classifiers-2/solution/Julia/README.md deleted file mode 100644 index 25e7f2a6..00000000 --- a/translations/es/4-Classification/3-Classifiers-2/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/4-Applied/README.md b/translations/es/4-Classification/4-Applied/README.md deleted file mode 100644 index e3e1ffda..00000000 --- a/translations/es/4-Classification/4-Applied/README.md +++ /dev/null @@ -1,318 +0,0 @@ -# Construir una Aplicación Web de Recomendación de Cocina - -En esta lección, construirás un modelo de clasificación utilizando algunas de las técnicas que has aprendido en lecciones anteriores y con el delicioso conjunto de datos de cocina utilizado a lo largo de esta serie. Además, construirás una pequeña aplicación web para usar un modelo guardado, aprovechando el runtime web de Onnx. - -Uno de los usos prácticos más útiles del aprendizaje automático es construir sistemas de recomendación, ¡y puedes dar el primer paso en esa dirección hoy! - -[![Presentando esta aplicación web](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 Haz clic en la imagen de arriba para ver un video: Jen Looper construye una aplicación web usando datos de cocina clasificados - -## [Cuestionario antes de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) - -En esta lección aprenderás: - -- Cómo construir un modelo y guardarlo como un modelo Onnx -- Cómo usar Netron para inspeccionar el modelo -- Cómo usar tu modelo en una aplicación web para inferencia - -## Construye tu modelo - -Construir sistemas de ML aplicados es una parte importante de aprovechar estas tecnologías para tus sistemas empresariales. Puedes usar modelos dentro de tus aplicaciones web (y así usarlos en un contexto offline si es necesario) utilizando Onnx. - -En una [lección anterior](../../3-Web-App/1-Web-App/README.md), construiste un modelo de Regresión sobre avistamientos de OVNIs, lo "encurtiste" y lo usaste en una aplicación Flask. Si bien esta arquitectura es muy útil de conocer, es una aplicación Python de pila completa, y tus requisitos pueden incluir el uso de una aplicación JavaScript. - -En esta lección, puedes construir un sistema básico basado en JavaScript para la inferencia. Primero, sin embargo, necesitas entrenar un modelo y convertirlo para usarlo con Onnx. - -## Ejercicio - entrenar modelo de clasificación - -Primero, entrena un modelo de clasificación utilizando el conjunto de datos de cocinas limpiado que utilizamos. - -1. Comienza importando bibliotecas útiles: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Necesitas '[skl2onnx](https://onnx.ai/sklearn-onnx/)' para ayudar a convertir tu modelo de Scikit-learn al formato Onnx. - -1. Luego, trabaja con tus datos de la misma manera que lo hiciste en lecciones anteriores, leyendo un archivo CSV usando `read_csv()`: - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -1. Elimina las dos primeras columnas innecesarias y guarda los datos restantes como 'X': - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Guarda las etiquetas como 'y': - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Comienza la rutina de entrenamiento - -Usaremos la biblioteca 'SVC' que tiene buena precisión. - -1. Importa las bibliotecas apropiadas de 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. Separa los conjuntos de entrenamiento y prueba: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Construye un modelo de Clasificación SVC como lo hiciste en la lección anterior: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Ahora, prueba tu modelo, llamando a `predict()`: - - ```python - y_pred = model.predict(X_test) - ``` - -1. Imprime un informe de clasificación para verificar la calidad del modelo: - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Como vimos antes, la precisión es buena: - - ```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 - ``` - -### Convierte tu modelo a Onnx - -Asegúrate de hacer la conversión con el número de Tensor adecuado. Este conjunto de datos tiene 380 ingredientes listados, por lo que necesitas anotar ese número en `FloatTensorType`: - -1. Convierte usando un número de tensor de 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. Crea el archivo onx y guárdalo como **model.onnx**: - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Nota, puedes pasar [opciones](https://onnx.ai/sklearn-onnx/parameterized.html) en tu script de conversión. En este caso, pasamos 'nocl' como True y 'zipmap' como False. Dado que este es un modelo de clasificación, tienes la opción de eliminar ZipMap, que produce una lista de diccionarios (no es necesario). `nocl` refers to class information being included in the model. Reduce your model's size by setting `nocl` to 'True'. - -Running the entire notebook will now build an Onnx model and save it to this folder. - -## View your model - -Onnx models are not very visible in Visual Studio code, but there's a very good free software that many researchers use to visualize the model to ensure that it is properly built. Download [Netron](https://github.com/lutzroeder/Netron) and open your model.onnx file. You can see your simple model visualized, with its 380 inputs and classifier listed: - -![Netron visual](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.es.png) - -Netron is a helpful tool to view your models. - -Now you are ready to use this neat model in a web app. Let's build an app that will come in handy when you look in your refrigerator and try to figure out which combination of your leftover ingredients you can use to cook a given cuisine, as determined by your model. - -## Build a recommender web application - -You can use your model directly in a web app. This architecture also allows you to run it locally and even offline if needed. Start by creating an `index.html` file in the same folder where you stored your `model.onnx` file. - -1. En este archivo _index.html_, agrega el siguiente marcado: - - ```html - - -
                                        - Cuisine Matcher -
                                        - - ... - - - ``` - -1. Ahora, trabajando dentro de las etiquetas `body`, agrega un poco de marcado para mostrar una lista de casillas de verificación que reflejan algunos ingredientes: - - ```html -

                                        Check your refrigerator. What can you create?

                                        -
                                        -
                                        - - -
                                        - -
                                        - - -
                                        - -
                                        - - -
                                        - -
                                        - - -
                                        - -
                                        - - -
                                        - -
                                        - - -
                                        - -
                                        - - -
                                        -
                                        -
                                        - -
                                        - ``` - - Nota que a cada casilla de verificación se le da un valor. Esto refleja el índice donde se encuentra el ingrediente según el conjunto de datos. La manzana, por ejemplo, en esta lista alfabética, ocupa la quinta columna, por lo que su valor es '4' ya que comenzamos a contar desde 0. Puedes consultar la [hoja de cálculo de ingredientes](../../../../4-Classification/data/ingredient_indexes.csv) para descubrir el índice de un ingrediente dado. - - Continuando tu trabajo en el archivo index.html, agrega un bloque de script donde se llama al modelo después del cierre final ``. - -1. Primero, importa el [Runtime de Onnx](https://www.onnxruntime.ai/): - - ```html - - ``` - - > Onnx Runtime se usa para permitir ejecutar tus modelos Onnx en una amplia gama de plataformas de hardware, incluidas optimizaciones y una API para usar. - -1. Una vez que el Runtime esté en su lugar, puedes llamarlo: - - ```html - - ``` - -En este código, están ocurriendo varias cosas: - -1. Creaste una matriz de 380 posibles valores (1 o 0) para ser configurados y enviados al modelo para inferencia, dependiendo de si una casilla de verificación de ingrediente está marcada. -2. Creaste una matriz de casillas de verificación y una forma de determinar si estaban marcadas en un `init` function that is called when the application starts. When a checkbox is checked, the `ingredients` array is altered to reflect the chosen ingredient. -3. You created a `testCheckboxes` function that checks whether any checkbox was checked. -4. You use `startInference` function when the button is pressed and, if any checkbox is checked, you start inference. -5. The inference routine includes: - 1. Setting up an asynchronous load of the model - 2. Creating a Tensor structure to send to the model - 3. Creating 'feeds' that reflects the `float_input` input that you created when training your model (you can use Netron to verify that name) - 4. Sending these 'feeds' to the model and waiting for a response - -## Test your application - -Open a terminal session in Visual Studio Code in the folder where your index.html file resides. Ensure that you have [http-server](https://www.npmjs.com/package/http-server) installed globally, and type `http-server` en el indicador. Debería abrirse un localhost y puedes ver tu aplicación web. Verifica qué cocina se recomienda según varios ingredientes: - -![aplicación web de ingredientes](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.es.png) - -¡Felicidades, has creado una aplicación web de 'recomendación' con unos pocos campos! Tómate un tiempo para desarrollar este sistema. - -## 🚀Desafío - -Tu aplicación web es muy mínima, así que continúa desarrollándola utilizando ingredientes y sus índices de los datos de [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). ¿Qué combinaciones de sabores funcionan para crear un plato nacional dado? - -## [Cuestionario después de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) - -## Revisión y Autoestudio - -Si bien esta lección solo tocó la utilidad de crear un sistema de recomendación para ingredientes alimentarios, esta área de aplicaciones de ML es muy rica en ejemplos. Lee más sobre cómo se construyen estos sistemas: - -- 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/ - -## Asignación - -[Construye un nuevo recomendador](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/4-Applied/assignment.md b/translations/es/4-Classification/4-Applied/assignment.md deleted file mode 100644 index 69f19af8..00000000 --- a/translations/es/4-Classification/4-Applied/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Construye un recomendador - -## Instrucciones - -Dado tus ejercicios en esta lección, ahora sabes cómo construir una aplicación web basada en JavaScript utilizando Onnx Runtime y un modelo convertido a Onnx. Experimenta construyendo un nuevo recomendador usando datos de estas lecciones o de otras fuentes (da crédito, por favor). Podrías crear un recomendador de mascotas dadas varias características de personalidad, o un recomendador de géneros musicales basado en el estado de ánimo de una persona. ¡Sé creativo! - -## Rubrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | --------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | Se presenta una aplicación web y un cuaderno, ambos bien documentados y en funcionamiento | Falta uno de esos dos o tiene errores | Ambos faltan o tienen errores | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/4-Classification/README.md b/translations/es/4-Classification/README.md deleted file mode 100644 index d93c7f88..00000000 --- a/translations/es/4-Classification/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Empezando con la clasificación - -## Tema regional: Deliciosas cocinas asiáticas e indias 🍜 - -En Asia e India, las tradiciones culinarias son extremadamente diversas y ¡muy deliciosas! Veamos datos sobre las cocinas regionales para tratar de entender sus ingredientes. - -![Vendedor de comida tailandesa](../../../translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.es.jpg) -> Foto de Lisheng Chang en Unsplash - -## Lo que aprenderás - -En esta sección, profundizarás en tu estudio anterior de la regresión y aprenderás sobre otros clasificadores que puedes usar para comprender mejor los datos. - -> Existen herramientas útiles de bajo código que pueden ayudarte a aprender a trabajar con modelos de clasificación. Prueba [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lecciones - -1. [Introducción a la clasificación](1-Introduction/README.md) -2. [Más clasificadores](2-Classifiers-1/README.md) -3. [Otros clasificadores](3-Classifiers-2/README.md) -4. [ML aplicado: construir una aplicación web](4-Applied/README.md) - -## Créditos - -"Empezando con la clasificación" fue escrito con ♥️ por [Cassie Breviu](https://www.twitter.com/cassiebreviu) y [Jen Looper](https://www.twitter.com/jenlooper) - -El conjunto de datos de las deliciosas cocinas fue obtenido de [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/1-Visualize/README.md b/translations/es/5-Clustering/1-Visualize/README.md deleted file mode 100644 index be722bc8..00000000 --- a/translations/es/5-Clustering/1-Visualize/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# Introducción a la agrupación - -La agrupación es un tipo de [Aprendizaje No Supervisado](https://wikipedia.org/wiki/Unsupervised_learning) que supone que un conjunto de datos no está etiquetado o que sus entradas no están emparejadas con salidas predefinidas. Utiliza varios algoritmos para clasificar datos no etiquetados y proporcionar agrupaciones según los patrones que discierne en los datos. - -[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") - -> 🎥 Haz clic en la imagen de arriba para ver un video. Mientras estudias el aprendizaje automático con agrupación, disfruta de algunas pistas de Dance Hall nigeriano: esta es una canción muy valorada de 2014 por PSquare. - -## [Cuestionario antes de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) -### Introducción - -[La agrupación](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) es muy útil para la exploración de datos. Veamos si puede ayudar a descubrir tendencias y patrones en la forma en que el público nigeriano consume música. - -✅ Tómate un minuto para pensar en los usos de la agrupación. En la vida real, la agrupación ocurre cada vez que tienes una pila de ropa y necesitas separar la ropa de los miembros de tu familia 🧦👕👖🩲. En ciencia de datos, la agrupación ocurre cuando se intenta analizar las preferencias de un usuario o determinar las características de cualquier conjunto de datos no etiquetado. La agrupación, de alguna manera, ayuda a darle sentido al caos, como un cajón de calcetines. - -[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") - -> 🎥 Haz clic en la imagen de arriba para ver un video: John Guttag del MIT introduce la agrupación - -En un entorno profesional, la agrupación puede usarse para determinar cosas como la segmentación del mercado, determinando qué grupos de edad compran qué artículos, por ejemplo. Otro uso sería la detección de anomalías, tal vez para detectar fraudes en un conjunto de datos de transacciones con tarjetas de crédito. O podrías usar la agrupación para determinar tumores en un lote de escaneos médicos. - -✅ Piensa un minuto sobre cómo podrías haber encontrado la agrupación 'en la naturaleza', en un entorno bancario, de comercio electrónico o de negocios. - -> 🎓 Curiosamente, el análisis de agrupaciones se originó en los campos de la Antropología y la Psicología en la década de 1930. ¿Puedes imaginar cómo podría haberse utilizado? - -Alternativamente, podrías usarlo para agrupar resultados de búsqueda: por enlaces de compras, imágenes o reseñas, por ejemplo. La agrupación es útil cuando tienes un conjunto de datos grande que deseas reducir y sobre el cual deseas realizar un análisis más granular, por lo que la técnica puede usarse para aprender sobre los datos antes de que se construyan otros modelos. - -✅ Una vez que tus datos estén organizados en grupos, les asignas un Id de grupo, y esta técnica puede ser útil para preservar la privacidad del conjunto de datos; en lugar de referirse a un punto de datos por su id de grupo, en lugar de por datos más reveladores e identificables. ¿Puedes pensar en otras razones por las que preferirías referirte a un Id de grupo en lugar de a otros elementos del grupo para identificarlo? - -Profundiza tu comprensión de las técnicas de agrupación en este [módulo de aprendizaje](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) -## Empezando con la agrupación - -[Scikit-learn ofrece una amplia gama](https://scikit-learn.org/stable/modules/clustering.html) de métodos para realizar agrupaciones. El tipo que elijas dependerá de tu caso de uso. Según la documentación, cada método tiene varios beneficios. Aquí hay una tabla simplificada de los métodos compatibles con Scikit-learn y sus casos de uso apropiados: - -| Nombre del método | Caso de uso | -| :--------------------------- | :------------------------------------------------------------------------- | -| K-Means | propósito general, inductivo | -| Affinity propagation | muchos, grupos desiguales, inductivo | -| Mean-shift | muchos, grupos desiguales, inductivo | -| Spectral clustering | pocos, grupos uniformes, transductivo | -| Ward hierarchical clustering | muchos, grupos restringidos, transductivo | -| Agglomerative clustering | muchos, restringidos, distancias no euclidianas, transductivo | -| DBSCAN | geometría no plana, grupos desiguales, transductivo | -| OPTICS | geometría no plana, grupos desiguales con densidad variable, transductivo | -| Gaussian mixtures | geometría plana, inductivo | -| BIRCH | conjunto de datos grande con valores atípicos, inductivo | - -> 🎓 Cómo creamos grupos tiene mucho que ver con cómo reunimos los puntos de datos en grupos. Desempaquemos algo de vocabulario: -> -> 🎓 ['Transductivo' vs. 'inductivo'](https://wikipedia.org/wiki/Transduction_(machine_learning)) -> -> La inferencia transductiva se deriva de casos de entrenamiento observados que se asignan a casos de prueba específicos. La inferencia inductiva se deriva de casos de entrenamiento que se asignan a reglas generales que solo entonces se aplican a casos de prueba. -> -> Un ejemplo: Imagina que tienes un conjunto de datos que solo está parcialmente etiquetado. Algunas cosas son 'discos', algunas 'CDs' y algunas están en blanco. Tu trabajo es proporcionar etiquetas para los vacíos. Si eliges un enfoque inductivo, entrenarías un modelo buscando 'discos' y 'CDs', y aplicarías esas etiquetas a tus datos no etiquetados. Este enfoque tendrá problemas para clasificar cosas que en realidad son 'cassettes'. Un enfoque transductivo, por otro lado, maneja estos datos desconocidos de manera más efectiva, ya que trabaja para agrupar elementos similares y luego aplica una etiqueta a un grupo. En este caso, los grupos podrían reflejar 'cosas musicales redondas' y 'cosas musicales cuadradas'. -> -> 🎓 ['Geometría no plana' vs. 'plana'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> Derivado de la terminología matemática, la geometría no plana vs. plana se refiere a la medida de distancias entre puntos mediante métodos geométricos 'planos' ([Euclidianos](https://wikipedia.org/wiki/Euclidean_geometry)) o 'no planos' (no euclidianos). -> ->'Plana' en este contexto se refiere a la geometría euclidiana (partes de la cual se enseñan como geometría 'plana'), y no plana se refiere a la geometría no euclidiana. ¿Qué tiene que ver la geometría con el aprendizaje automático? Bueno, como dos campos que están arraigados en las matemáticas, debe haber una forma común de medir las distancias entre puntos en grupos, y eso se puede hacer de manera 'plana' o 'no plana', dependiendo de la naturaleza de los datos. Las distancias [euclidianas](https://wikipedia.org/wiki/Euclidean_distance) se miden como la longitud de un segmento de línea entre dos puntos. Las distancias [no euclidianas](https://wikipedia.org/wiki/Non-Euclidean_geometry) se miden a lo largo de una curva. Si tus datos, visualizados, parecen no existir en un plano, es posible que necesites usar un algoritmo especializado para manejarlos. -> -![Flat vs Nonflat Geometry Infographic](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.es.png) -> Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) -> -> 🎓 ['Distancias'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) -> -> Los grupos se definen por su matriz de distancias, es decir, las distancias entre puntos. Esta distancia se puede medir de varias maneras. Los grupos euclidianos se definen por el promedio de los valores de los puntos y contienen un 'centroide' o punto central. Las distancias, por lo tanto, se miden por la distancia a ese centroide. Las distancias no euclidianas se refieren a 'clustroides', el punto más cercano a otros puntos. Los clustroides, a su vez, pueden definirse de varias maneras. -> -> 🎓 ['Restringido'](https://wikipedia.org/wiki/Constrained_clustering) -> -> [La Agrupación Restringida](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduce el aprendizaje 'semi-supervisado' en este método no supervisado. Las relaciones entre puntos se marcan como 'no pueden enlazarse' o 'deben enlazarse', por lo que se imponen algunas reglas al conjunto de datos. -> ->Un ejemplo: Si un algoritmo se libera en un lote de datos no etiquetados o semi-etiquetados, los grupos que produce pueden ser de baja calidad. En el ejemplo anterior, los grupos podrían agrupar 'cosas musicales redondas' y 'cosas musicales cuadradas' y 'cosas triangulares' y 'galletas'. Si se le dan algunas restricciones o reglas a seguir ("el ítem debe estar hecho de plástico", "el ítem debe poder producir música"), esto puede ayudar a 'restringir' el algoritmo para tomar mejores decisiones. -> -> 🎓 'Densidad' -> -> Los datos que son 'ruidosos' se consideran 'densos'. Las distancias entre puntos en cada uno de sus grupos pueden demostrar, al examinarlas, ser más o menos densas, o 'abarrotadas', y por lo tanto, estos datos deben analizarse con el método de agrupación apropiado. [Este artículo](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) demuestra la diferencia entre usar el algoritmo de agrupación K-Means vs. HDBSCAN para explorar un conjunto de datos ruidosos con densidad de grupo desigual. - -## Algoritmos de agrupación - -Existen más de 100 algoritmos de agrupación, y su uso depende de la naturaleza de los datos disponibles. Hablemos de algunos de los principales: - -- **Agrupación jerárquica**. Si un objeto se clasifica por su proximidad a un objeto cercano, en lugar de a uno más lejano, los grupos se forman en función de la distancia de sus miembros a y desde otros objetos. La agrupación aglomerativa de Scikit-learn es jerárquica. - - ![Hierarchical clustering Infographic](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.es.png) - > Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Agrupación de centroides**. Este algoritmo popular requiere la elección de 'k', o el número de grupos a formar, después de lo cual el algoritmo determina el punto central de un grupo y reúne datos alrededor de ese punto. [La agrupación K-means](https://wikipedia.org/wiki/K-means_clustering) es una versión popular de la agrupación de centroides. El centro se determina por la media más cercana, de ahí el nombre. La distancia cuadrada desde el grupo se minimiza. - - ![Centroid clustering Infographic](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.es.png) - > Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Agrupación basada en distribución**. Basada en el modelado estadístico, la agrupación basada en distribución se centra en determinar la probabilidad de que un punto de datos pertenezca a un grupo y asignarlo en consecuencia. Los métodos de mezcla gaussiana pertenecen a este tipo. - -- **Agrupación basada en densidad**. Los puntos de datos se asignan a grupos en función de su densidad o su agrupación entre sí. Los puntos de datos alejados del grupo se consideran valores atípicos o ruido. DBSCAN, Mean-shift y OPTICS pertenecen a este tipo de agrupación. - -- **Agrupación basada en cuadrícula**. Para conjuntos de datos multidimensionales, se crea una cuadrícula y los datos se dividen entre las celdas de la cuadrícula, creando así grupos. - -## Ejercicio - agrupa tus datos - -La técnica de agrupación se ve muy beneficiada por la visualización adecuada, así que comencemos visualizando nuestros datos musicales. Este ejercicio nos ayudará a decidir cuál de los métodos de agrupación deberíamos usar más eficazmente para la naturaleza de estos datos. - -1. Abre el archivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) en esta carpeta. - -1. Importa el paquete `Seaborn` para una buena visualización de datos. - - ```python - !pip install seaborn - ``` - -1. Agrega los datos de las canciones desde [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Carga un dataframe con algunos datos sobre las canciones. Prepárate para explorar estos datos importando las bibliotecas y descargando los datos: - - ```python - import matplotlib.pyplot as plt - import pandas as pd - - df = pd.read_csv("../data/nigerian-songs.csv") - df.head() - ``` - - Revisa las primeras líneas de datos: - - | | nombre | álbum | artista | género_principal_artista | fecha_lanzamiento | duración | popularidad | bailabilidad | acusticidad | energía | instrumentalidad | vivacidad | volumen | locuacidad | tempo | compás | - | --- | ------------------------ | ---------------------------- | ------------------- | ------------------------ | ----------------- | -------- | ----------- | ------------ | ------------ | ------- | ----------------- | --------- | ------- | ----------- | ------- | ------ | - | 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. Obtén información sobre el dataframe, llamando a `info()`: - - ```python - df.info() - ``` - - La salida se verá así: - - ```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. Verifica nuevamente si hay valores nulos, llamando a `isnull()` y verificando que la suma sea 0: - - ```python - df.isnull().sum() - ``` - - Se ve bien: - - ```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. Describe los datos: - - ```python - df.describe() - ``` - - | | fecha_lanzamiento | duración | popularidad | bailabilidad | acusticidad | energía | instrumentalidad | vivacidad | volumen | locuacidad | tempo | compás | - | ----- | ----------------- | ---------- | ----------- | ------------ | ------------ | --------- | ----------------- | --------- | --------- | ----------- | ---------- | ------- | - | 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 -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) - -## Revisión y Autoestudio - -Antes de aplicar algoritmos de clustering, como hemos aprendido, es una buena idea entender la naturaleza de tu conjunto de datos. Lee más sobre este tema [aquí](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) - -[Este artículo útil](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) te guía a través de las diferentes formas en que se comportan varios algoritmos de clustering, dadas diferentes formas de datos. - -## Tarea - -[Investiga otras visualizaciones para clustering](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/1-Visualize/assignment.md b/translations/es/5-Clustering/1-Visualize/assignment.md deleted file mode 100644 index 472250e0..00000000 --- a/translations/es/5-Clustering/1-Visualize/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Investigar otras visualizaciones para clustering - -## Instrucciones - -En esta lección, has trabajado con algunas técnicas de visualización para comprender cómo graficar tus datos en preparación para agruparlos. Los gráficos de dispersión, en particular, son útiles para encontrar grupos de objetos. Investiga diferentes maneras y diferentes bibliotecas para crear gráficos de dispersión y documenta tu trabajo en un cuaderno. Puedes usar los datos de esta lección, de otras lecciones, o datos que obtengas por ti mismo (sin embargo, por favor acredita su fuente en tu cuaderno). Grafica algunos datos usando gráficos de dispersión y explica lo que descubres. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------- | -| | Se presenta un cuaderno con cinco gráficos de dispersión bien documentados | Se presenta un cuaderno con menos de cinco gráficos de dispersión y está menos bien documentado | Se presenta un cuaderno incompleto | - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/es/5-Clustering/1-Visualize/solution/Julia/README.md deleted file mode 100644 index 668ffc76..00000000 --- a/translations/es/5-Clustering/1-Visualize/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/2-K-Means/README.md b/translations/es/5-Clustering/2-K-Means/README.md deleted file mode 100644 index 86988943..00000000 --- a/translations/es/5-Clustering/2-K-Means/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# Agrupamiento K-Means - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) - -En esta lección, aprenderás a crear grupos utilizando Scikit-learn y el conjunto de datos de música nigeriana que importaste anteriormente. Cubriremos los conceptos básicos de K-Means para el agrupamiento. Ten en cuenta que, como aprendiste en la lección anterior, hay muchas formas de trabajar con grupos y el método que utilices depende de tus datos. Intentaremos K-Means ya que es la técnica de agrupamiento más común. ¡Vamos a empezar! - -Términos que aprenderás: - -- Puntuación de Silhouette -- Método del codo -- Inercia -- Varianza - -## Introducción - -[El agrupamiento K-Means](https://wikipedia.org/wiki/K-means_clustering) es un método derivado del procesamiento de señales. Se utiliza para dividir y particionar grupos de datos en 'k' grupos utilizando una serie de observaciones. Cada observación trabaja para agrupar un punto de datos dado lo más cerca posible de su 'media' más cercana, o el punto central de un grupo. - -Los grupos se pueden visualizar como [diagramas de Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), que incluyen un punto (o 'semilla') y su región correspondiente. - -![diagrama de voronoi](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.es.png) - -> infografía por [Jen Looper](https://twitter.com/jenlooper) - -El proceso de agrupamiento K-Means [se ejecuta en un proceso de tres pasos](https://scikit-learn.org/stable/modules/clustering.html#k-means): - -1. El algoritmo selecciona un número k de puntos centrales muestreando del conjunto de datos. Después de esto, se repite: - 1. Asigna cada muestra al centroide más cercano. - 2. Crea nuevos centroides tomando el valor medio de todas las muestras asignadas a los centroides anteriores. - 3. Luego, calcula la diferencia entre los nuevos y antiguos centroides y repite hasta que los centroides se estabilicen. - -Una desventaja de usar K-Means es que necesitarás establecer 'k', es decir, el número de centroides. Afortunadamente, el 'método del codo' ayuda a estimar un buen valor inicial para 'k'. Lo probarás en un momento. - -## Prerrequisitos - -Trabajarás en el archivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) de esta lección que incluye la importación de datos y la limpieza preliminar que hiciste en la última lección. - -## Ejercicio - preparación - -Comienza echando otro vistazo a los datos de las canciones. - -1. Crea un diagrama de caja, llamando a `boxplot()` para cada columna: - - ```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) - ``` - - Estos datos son un poco ruidosos: al observar cada columna como un diagrama de caja, puedes ver valores atípicos. - - ![valores atípicos](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.es.png) - -Podrías recorrer el conjunto de datos y eliminar estos valores atípicos, pero eso haría que los datos fueran bastante mínimos. - -1. Por ahora, elige qué columnas usarás para tu ejercicio de agrupamiento. Escoge aquellas con rangos similares y codifica la columna `artist_top_genre` como datos numéricos: - - ```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. Ahora necesitas elegir cuántos grupos apuntar. Sabes que hay 3 géneros de canciones que extrajimos del conjunto de datos, así que intentemos con 3: - - ```python - from sklearn.cluster import KMeans - - nclusters = 3 - seed = 0 - - km = KMeans(n_clusters=nclusters, random_state=seed) - km.fit(X) - - # Predict the cluster for each data point - - y_cluster_kmeans = km.predict(X) - y_cluster_kmeans - ``` - -Verás un array impreso con los grupos predichos (0, 1 o 2) para cada fila del dataframe. - -1. Usa este array para calcular una 'puntuación de Silhouette': - - ```python - from sklearn import metrics - score = metrics.silhouette_score(X, y_cluster_kmeans) - score - ``` - -## Puntuación de Silhouette - -Busca una puntuación de Silhouette más cercana a 1. Esta puntuación varía de -1 a 1, y si la puntuación es 1, el grupo es denso y está bien separado de otros grupos. Un valor cercano a 0 representa grupos superpuestos con muestras muy cercanas al límite de decisión de los grupos vecinos. [(Fuente)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) - -Nuestra puntuación es **.53**, así que justo en el medio. Esto indica que nuestros datos no son particularmente adecuados para este tipo de agrupamiento, pero sigamos adelante. - -### Ejercicio - construir un modelo - -1. Importa `KMeans` y comienza el proceso de agrupamiento. - - ```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_) - - ``` - - Hay algunas partes aquí que merecen una explicación. - - > 🎓 rango: Estas son las iteraciones del proceso de agrupamiento - - > 🎓 random_state: "Determina la generación de números aleatorios para la inicialización del centroide." [Fuente](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - - > 🎓 WCSS: "suma de cuadrados dentro del grupo" mide la distancia promedio al cuadrado de todos los puntos dentro de un grupo al centroide del grupo. [Fuente](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - - > 🎓 Inercia: Los algoritmos K-Means intentan elegir centroides para minimizar la 'inercia', "una medida de cuán coherentes son internamente los grupos." [Fuente](https://scikit-learn.org/stable/modules/clustering.html). El valor se agrega a la variable wcss en cada iteración. - - > 🎓 k-means++: En [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) puedes usar la optimización 'k-means++', que "inicializa los centroides para que estén (generalmente) distantes entre sí, lo que lleva a probablemente mejores resultados que la inicialización aleatoria. - -### Método del codo - -Anteriormente, dedujiste que, debido a que has apuntado a 3 géneros de canciones, deberías elegir 3 grupos. ¿Pero es ese el caso? - -1. Usa el 'método del codo' para asegurarte. - - ```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() - ``` - - Usa la variable `wcss` que construiste en el paso anterior para crear un gráfico que muestre dónde está el 'doblez' en el codo, lo que indica el número óptimo de grupos. ¡Quizás sí sean 3! - - ![método del codo](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.es.png) - -## Ejercicio - mostrar los grupos - -1. Intenta el proceso nuevamente, esta vez estableciendo tres grupos, y muestra los grupos como un gráfico de dispersión: - - ```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. Verifica la precisión del modelo: - - ```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))) - ``` - - La precisión de este modelo no es muy buena, y la forma de los grupos te da una pista del porqué. - - ![grupos](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.es.png) - - Estos datos están demasiado desequilibrados, poco correlacionados y hay demasiada varianza entre los valores de las columnas para agrupar bien. De hecho, los grupos que se forman probablemente estén fuertemente influenciados o sesgados por las tres categorías de género que definimos anteriormente. ¡Eso fue un proceso de aprendizaje! - - En la documentación de Scikit-learn, puedes ver que un modelo como este, con grupos no muy bien demarcados, tiene un problema de 'varianza': - - ![modelos problemáticos](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.es.png) - > Infografía de Scikit-learn - -## Varianza - -La varianza se define como "el promedio de las diferencias al cuadrado desde la media" [(Fuente)](https://www.mathsisfun.com/data/standard-deviation.html). En el contexto de este problema de agrupamiento, se refiere a datos donde los números de nuestro conjunto de datos tienden a divergir demasiado de la media. - -✅ Este es un buen momento para pensar en todas las formas en que podrías corregir este problema. ¿Ajustar un poco más los datos? ¿Usar diferentes columnas? ¿Usar un algoritmo diferente? Pista: Intenta [escalar tus datos](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) para normalizarlos y probar otras columnas. - -> Prueba este '[calculador de varianza](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' para entender un poco más el concepto. - ---- - -## 🚀Desafío - -Pasa un tiempo con este cuaderno, ajustando parámetros. ¿Puedes mejorar la precisión del modelo limpiando más los datos (eliminando valores atípicos, por ejemplo)? Puedes usar pesos para dar más peso a ciertas muestras de datos. ¿Qué más puedes hacer para crear mejores grupos? - -Pista: Intenta escalar tus datos. Hay código comentado en el cuaderno que agrega escalado estándar para hacer que las columnas de datos se parezcan más en términos de rango. Verás que, aunque la puntuación de Silhouette baja, el 'doblez' en el gráfico del codo se suaviza. Esto se debe a que dejar los datos sin escalar permite que los datos con menos varianza tengan más peso. Lee un poco más sobre este problema [aquí](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) - -## Revisión y autoestudio - -Echa un vistazo a un simulador de K-Means [como este](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Puedes usar esta herramienta para visualizar puntos de datos de muestra y determinar sus centroides. Puedes editar la aleatoriedad de los datos, el número de grupos y el número de centroides. ¿Esto te ayuda a tener una idea de cómo se pueden agrupar los datos? - -También, echa un vistazo a [este folleto sobre K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) de Stanford. - -## Tarea - -[Prueba diferentes métodos de agrupamiento](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/2-K-Means/assignment.md b/translations/es/5-Clustering/2-K-Means/assignment.md deleted file mode 100644 index 4bb135b0..00000000 --- a/translations/es/5-Clustering/2-K-Means/assignment.md +++ /dev/null @@ -1,13 +0,0 @@ -# Prueba diferentes métodos de clustering - -## Instrucciones - -En esta lección aprendiste sobre el clustering de K-Means. A veces, K-Means no es apropiado para tus datos. Crea un cuaderno usando datos ya sea de estas lecciones o de algún otro lugar (da crédito a tu fuente) y muestra un método de clustering diferente que NO use K-Means. ¿Qué aprendiste? -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | ---------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | Se presenta un cuaderno con un modelo de clustering bien documentado | Se presenta un cuaderno sin buena documentación y/o incompleto | Se presenta trabajo incompleto | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/es/5-Clustering/2-K-Means/solution/Julia/README.md deleted file mode 100644 index df385a25..00000000 --- a/translations/es/5-Clustering/2-K-Means/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/5-Clustering/README.md b/translations/es/5-Clustering/README.md deleted file mode 100644 index 9d5a2da3..00000000 --- a/translations/es/5-Clustering/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Modelos de clustering para aprendizaje automático - -El clustering es una tarea de aprendizaje automático que busca encontrar objetos que se asemejan entre sí y agruparlos en grupos llamados clústeres. Lo que diferencia al clustering de otros enfoques en el aprendizaje automático es que las cosas suceden automáticamente, de hecho, es justo decir que es lo opuesto al aprendizaje supervisado. - -## Tema regional: modelos de clustering para el gusto musical de una audiencia nigeriana 🎧 - -La diversa audiencia de Nigeria tiene gustos musicales variados. Utilizando datos extraídos de Spotify (inspirados por [este artículo](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), veamos algunas músicas populares en Nigeria. Este conjunto de datos incluye información sobre varias canciones como la puntuación de 'danceability', 'acousticness', volumen, 'speechiness', popularidad y energía. ¡Será interesante descubrir patrones en estos datos! - -![Un tocadiscos](../../../translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.es.jpg) - -> Foto por Marcela Laskoski en Unsplash - -En esta serie de lecciones, descubrirás nuevas formas de analizar datos utilizando técnicas de clustering. El clustering es particularmente útil cuando tu conjunto de datos carece de etiquetas. Si tiene etiquetas, entonces las técnicas de clasificación como las que aprendiste en lecciones anteriores podrían ser más útiles. Pero en casos donde buscas agrupar datos sin etiquetar, el clustering es una excelente manera de descubrir patrones. - -> Hay herramientas de bajo código útiles que pueden ayudarte a aprender a trabajar con modelos de clustering. Prueba [Azure ML para esta tarea](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lecciones - -1. [Introducción al clustering](1-Visualize/README.md) -2. [Clustering K-Means](2-K-Means/README.md) - -## Créditos - -Estas lecciones fueron escritas con 🎶 por [Jen Looper](https://www.twitter.com/jenlooper) con revisiones útiles de [Rishit Dagli](https://rishit_dagli) y [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). - -El conjunto de datos [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) fue obtenido de Kaggle y extraído de Spotify. - -Ejemplos útiles de K-Means que ayudaron en la creación de esta lección incluyen esta [exploración de iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), este [cuaderno introductorio](https://www.kaggle.com/prashant111/k-means-clustering-with-python), y este [ejemplo hipotético de ONG](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por inteligencia artificial. Si bien nos esforzamos por la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/1-Introduction-to-NLP/README.md b/translations/es/6-NLP/1-Introduction-to-NLP/README.md deleted file mode 100644 index 50abb472..00000000 --- a/translations/es/6-NLP/1-Introduction-to-NLP/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# Introducción al procesamiento de lenguaje natural - -Esta lección cubre una breve historia y conceptos importantes del *procesamiento de lenguaje natural*, un subcampo de la *lingüística computacional*. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) - -## Introducción - -El procesamiento de lenguaje natural (NLP, por sus siglas en inglés), como se le conoce comúnmente, es una de las áreas más conocidas donde se ha aplicado el aprendizaje automático y se utiliza en software de producción. - -✅ ¿Puedes pensar en algún software que uses todos los días que probablemente tenga algo de NLP integrado? ¿Qué hay de tus programas de procesamiento de texto o aplicaciones móviles que usas regularmente? - -Aprenderás sobre: - -- **La idea de los lenguajes**. Cómo se desarrollaron los lenguajes y cuáles han sido las principales áreas de estudio. -- **Definición y conceptos**. También aprenderás definiciones y conceptos sobre cómo las computadoras procesan texto, incluyendo análisis sintáctico, gramática e identificación de sustantivos y verbos. Hay algunas tareas de codificación en esta lección, y se introducen varios conceptos importantes que aprenderás a codificar más adelante en las próximas lecciones. - -## Lingüística computacional - -La lingüística computacional es un área de investigación y desarrollo de muchas décadas que estudia cómo las computadoras pueden trabajar con, e incluso entender, traducir y comunicarse con los lenguajes. El procesamiento de lenguaje natural (NLP) es un campo relacionado enfocado en cómo las computadoras pueden procesar lenguajes 'naturales', o humanos. - -### Ejemplo - dictado por teléfono - -Si alguna vez has dictado a tu teléfono en lugar de escribir o has hecho una pregunta a un asistente virtual, tu discurso se convirtió en una forma de texto y luego se procesó o *analizó* desde el idioma que hablaste. Las palabras clave detectadas se procesaron luego en un formato que el teléfono o asistente pudiera entender y actuar en consecuencia. - -![comprensión](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.es.png) -> ¡La comprensión lingüística real es difícil! Imagen de [Jen Looper](https://twitter.com/jenlooper) - -### ¿Cómo es posible esta tecnología? - -Esto es posible porque alguien escribió un programa de computadora para hacerlo. Hace unas décadas, algunos escritores de ciencia ficción predijeron que la gente hablaría principalmente con sus computadoras, y las computadoras siempre entenderían exactamente lo que querían decir. Lamentablemente, resultó ser un problema más difícil de lo que muchos imaginaron, y aunque hoy en día es un problema mucho mejor comprendido, existen desafíos significativos para lograr un procesamiento de lenguaje natural 'perfecto' cuando se trata de entender el significado de una oración. Esto es particularmente difícil cuando se trata de entender el humor o detectar emociones como el sarcasmo en una oración. - -En este punto, puede que estés recordando las clases escolares donde el maestro cubría las partes de la gramática en una oración. En algunos países, se enseña gramática y lingüística como una asignatura dedicada, pero en muchos, estos temas se incluyen como parte del aprendizaje de un idioma: ya sea tu primer idioma en la escuela primaria (aprender a leer y escribir) y tal vez un segundo idioma en la escuela secundaria. ¡No te preocupes si no eres un experto en diferenciar sustantivos de verbos o adverbios de adjetivos! - -Si te cuesta la diferencia entre el *presente simple* y el *presente progresivo*, no estás solo. Esto es un desafío para muchas personas, incluso para hablantes nativos de un idioma. La buena noticia es que las computadoras son realmente buenas para aplicar reglas formales, y aprenderás a escribir código que pueda *analizar* una oración tan bien como un humano. El mayor desafío que examinarás más adelante es entender el *significado* y el *sentimiento* de una oración. - -## Requisitos previos - -Para esta lección, el requisito principal es poder leer y entender el idioma de esta lección. No hay problemas matemáticos ni ecuaciones que resolver. Aunque el autor original escribió esta lección en inglés, también está traducida a otros idiomas, por lo que podrías estar leyendo una traducción. Hay ejemplos donde se usan varios idiomas diferentes (para comparar las diferentes reglas gramaticales de diferentes idiomas). Estos *no* están traducidos, pero el texto explicativo sí, por lo que el significado debería ser claro. - -Para las tareas de codificación, usarás Python y los ejemplos están usando Python 3.8. - -En esta sección, necesitarás y usarás: - -- **Comprensión de Python 3**. Comprensión del lenguaje de programación en Python 3, esta lección usa entrada, bucles, lectura de archivos, matrices. -- **Visual Studio Code + extensión**. Usaremos Visual Studio Code y su extensión de Python. También puedes usar un IDE de Python de tu elección. -- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) es una biblioteca simplificada de procesamiento de texto para Python. Sigue las instrucciones en el sitio de TextBlob para instalarlo en tu sistema (instala también los corpora, como se muestra a continuación): - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 Consejo: Puedes ejecutar Python directamente en entornos de VS Code. Consulta los [documentos](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) para obtener más información. - -## Hablando con máquinas - -La historia de intentar que las computadoras entiendan el lenguaje humano se remonta a décadas, y uno de los primeros científicos en considerar el procesamiento de lenguaje natural fue *Alan Turing*. - -### La 'prueba de Turing' - -Cuando Turing estaba investigando la *inteligencia artificial* en la década de 1950, consideró si se podría dar una prueba conversacional a un humano y una computadora (a través de correspondencia escrita) donde el humano en la conversación no estuviera seguro si estaba conversando con otro humano o una computadora. - -Si, después de una cierta duración de la conversación, el humano no podía determinar si las respuestas provenían de una computadora o no, ¿se podría decir que la computadora estaba *pensando*? - -### La inspiración - 'el juego de imitación' - -La idea para esto vino de un juego de fiesta llamado *El Juego de Imitación* donde un interrogador está solo en una habitación y tiene la tarea de determinar cuál de dos personas (en otra habitación) es hombre y mujer respectivamente. El interrogador puede enviar notas y debe tratar de pensar en preguntas cuyas respuestas escritas revelen el género de la persona misteriosa. Por supuesto, los jugadores en la otra habitación están tratando de engañar al interrogador respondiendo preguntas de manera que confundan o confundan al interrogador, mientras que también dan la apariencia de responder honestamente. - -### Desarrollando Eliza - -En la década de 1960, un científico del MIT llamado *Joseph Weizenbaum* desarrolló [*Eliza*](https://wikipedia.org/wiki/ELIZA), un 'terapeuta' de computadora que haría preguntas al humano y daría la apariencia de entender sus respuestas. Sin embargo, aunque Eliza podía analizar una oración e identificar ciertos constructos gramaticales y palabras clave para dar una respuesta razonable, no se podía decir que *entendiera* la oración. Si a Eliza se le presentaba una oración siguiendo el formato "**Yo estoy** triste", podría reorganizar y sustituir palabras en la oración para formar la respuesta "¿Cuánto tiempo has **estado** triste?". - -Esto daba la impresión de que Eliza entendía la declaración y estaba haciendo una pregunta de seguimiento, mientras que en realidad, estaba cambiando el tiempo verbal y agregando algunas palabras. Si Eliza no podía identificar una palabra clave para la cual tenía una respuesta, en su lugar daría una respuesta aleatoria que podría ser aplicable a muchas declaraciones diferentes. Eliza podría ser fácilmente engañada, por ejemplo, si un usuario escribía "**Tú eres** una bicicleta", podría responder "¿Cuánto tiempo he **sido** una bicicleta?", en lugar de una respuesta más razonada. - -[![Chateando con Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chateando con Eliza") - -> 🎥 Haz clic en la imagen de arriba para ver un video sobre el programa original ELIZA - -> Nota: Puedes leer la descripción original de [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publicada en 1966 si tienes una cuenta de ACM. Alternativamente, lee sobre Eliza en [wikipedia](https://wikipedia.org/wiki/ELIZA) - -## Ejercicio - codificando un bot conversacional básico - -Un bot conversacional, como Eliza, es un programa que obtiene la entrada del usuario y parece entender y responder inteligentemente. A diferencia de Eliza, nuestro bot no tendrá varias reglas que le den la apariencia de tener una conversación inteligente. En su lugar, nuestro bot tendrá una única habilidad: mantener la conversación con respuestas aleatorias que podrían funcionar en casi cualquier conversación trivial. - -### El plan - -Tus pasos al construir un bot conversacional: - -1. Imprime instrucciones que aconsejen al usuario cómo interactuar con el bot -2. Inicia un bucle - 1. Acepta la entrada del usuario - 2. Si el usuario ha pedido salir, entonces salir - 3. Procesa la entrada del usuario y determina la respuesta (en este caso, la respuesta es una elección aleatoria de una lista de posibles respuestas genéricas) - 4. Imprime la respuesta -3. Vuelve al paso 2 - -### Construyendo el bot - -Vamos a crear el bot a continuación. Comenzaremos definiendo algunas frases. - -1. Crea este bot tú mismo en Python con las siguientes respuestas aleatorias: - - ```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?"] - ``` - - Aquí tienes una salida de muestra para guiarte (la entrada del usuario está en las líneas que comienzan con `>`): - - ```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! - ``` - - Una posible solución a la tarea está [aquí](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) - - ✅ Detente y considera - - 1. ¿Crees que las respuestas aleatorias 'engañarían' a alguien para que piense que el bot realmente los entendió? - 2. ¿Qué características necesitaría el bot para ser más efectivo? - 3. Si un bot realmente pudiera 'entender' el significado de una oración, ¿necesitaría 'recordar' el significado de oraciones anteriores en una conversación también? - ---- - -## 🚀Desafío - -Elige uno de los elementos de "detente y considera" anteriores e intenta implementarlo en código o escribe una solución en papel usando pseudocódigo. - -En la próxima lección, aprenderás sobre varias otras aproximaciones para analizar el lenguaje natural y el aprendizaje automático. - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) - -## Revisión y autoestudio - -Echa un vistazo a las referencias a continuación como oportunidades de lectura adicional. - -### Referencias - -1. Schubert, Lenhart, "Lingüística Computacional", *The Stanford Encyclopedia of Philosophy* (Edición de Primavera 2020), Edward N. Zalta (ed.), URL = . -2. Princeton University "Acerca de WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. - -## Asignación - -[Busca un bot](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/es/6-NLP/1-Introduction-to-NLP/assignment.md deleted file mode 100644 index 293e8f81..00000000 --- a/translations/es/6-NLP/1-Introduction-to-NLP/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Buscar un bot - -## Instrucciones - -Los bots están en todas partes. Tu tarea: ¡encuentra uno y adóptalo! Puedes encontrarlos en sitios web, en aplicaciones bancarias y por teléfono, por ejemplo, cuando llamas a empresas de servicios financieros para obtener asesoramiento o información sobre cuentas. Analiza el bot y ve si puedes confundirlo. Si puedes confundir al bot, ¿por qué crees que ocurrió eso? Escribe un breve informe sobre tu experiencia. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejora | -| --------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | --------------------- | -| | Se escribe un informe de una página completa, explicando la arquitectura presumida del bot y describiendo tu experiencia con él | El informe está incompleto o no está bien investigado | No se presenta un informe | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/2-Tasks/README.md b/translations/es/6-NLP/2-Tasks/README.md deleted file mode 100644 index c8625a33..00000000 --- a/translations/es/6-NLP/2-Tasks/README.md +++ /dev/null @@ -1,217 +0,0 @@ -# Tareas y técnicas comunes de procesamiento de lenguaje natural - -Para la mayoría de las tareas de *procesamiento de lenguaje natural*, el texto a procesar debe descomponerse, examinarse y los resultados deben almacenarse o cruzarse con reglas y conjuntos de datos. Estas tareas permiten al programador derivar el _significado_ o _intención_ o solo la _frecuencia_ de términos y palabras en un texto. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/) - -Vamos a descubrir técnicas comunes utilizadas en el procesamiento de texto. Combinadas con el aprendizaje automático, estas técnicas te ayudan a analizar grandes cantidades de texto de manera eficiente. Sin embargo, antes de aplicar ML a estas tareas, entendamos los problemas que enfrenta un especialista en PLN. - -## Tareas comunes en PLN - -Existen diferentes formas de analizar un texto en el que estás trabajando. Hay tareas que puedes realizar y a través de estas tareas puedes comprender el texto y sacar conclusiones. Normalmente, llevas a cabo estas tareas en una secuencia. - -### Tokenización - -Probablemente, lo primero que la mayoría de los algoritmos de PLN deben hacer es dividir el texto en tokens o palabras. Aunque esto suena simple, tener en cuenta la puntuación y los delimitadores de palabras y oraciones en diferentes idiomas puede complicarlo. Es posible que debas usar varios métodos para determinar las demarcaciones. - -![tokenization](../../../../translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.es.png) -> Tokenizando una oración de **Orgullo y Prejuicio**. Infografía por [Jen Looper](https://twitter.com/jenlooper) - -### Embeddings - -[Embeddings de palabras](https://wikipedia.org/wiki/Word_embedding) son una forma de convertir tus datos de texto numéricamente. Los embeddings se realizan de manera que las palabras con un significado similar o palabras usadas juntas se agrupan. - -![word embeddings](../../../../translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.es.png) -> "Tengo el mayor respeto por tus nervios, son mis viejos amigos." - Embeddings de palabras para una oración en **Orgullo y Prejuicio**. Infografía por [Jen Looper](https://twitter.com/jenlooper) - -✅ Prueba [esta herramienta interesante](https://projector.tensorflow.org/) para experimentar con embeddings de palabras. Hacer clic en una palabra muestra grupos de palabras similares: 'juguete' se agrupa con 'disney', 'lego', 'playstation' y 'consola'. - -### Análisis gramatical y etiquetado de partes del discurso - -Cada palabra que ha sido tokenizada puede etiquetarse como una parte del discurso: un sustantivo, verbo o adjetivo. La oración `the quick red fox jumped over the lazy brown dog` podría etiquetarse como POS: zorro = sustantivo, saltó = verbo. - -![parsing](../../../../translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.es.png) - -> Analizando una oración de **Orgullo y Prejuicio**. Infografía por [Jen Looper](https://twitter.com/jenlooper) - -El análisis gramatical es reconocer qué palabras están relacionadas entre sí en una oración. Por ejemplo, `the quick red fox jumped` es una secuencia adjetivo-sustantivo-verbo que está separada de la secuencia `lazy brown dog`. - -### Frecuencia de palabras y frases - -Un procedimiento útil al analizar un gran cuerpo de texto es construir un diccionario de cada palabra o frase de interés y cuántas veces aparece. La frase `the quick red fox jumped over the lazy brown dog` tiene una frecuencia de palabras de 2 para "the". - -Veamos un ejemplo de texto donde contamos la frecuencia de palabras. El poema de Rudyard Kipling "Los Ganadores" contiene el siguiente verso: - -```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. -``` - -Como las frecuencias de frases pueden ser insensibles a mayúsculas o sensibles a mayúsculas según sea necesario, la frase `a friend` has a frequency of 2 and `the` has a frequency of 6, and `travels` es 2. - -### N-gramas - -Un texto puede dividirse en secuencias de palabras de una longitud establecida, una sola palabra (unigrama), dos palabras (bigramas), tres palabras (trigramas) o cualquier número de palabras (n-gramas). - -Por ejemplo, `the quick red fox jumped over the lazy brown dog` con una puntuación de n-grama de 2 produce los siguientes n-gramas: - -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 - -Podría ser más fácil visualizarlo como una caja deslizante sobre la oración. Aquí está para n-gramas de 3 palabras, el n-grama está en negrita en cada oración: - -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) - -> Valor de n-grama de 3: Infografía por [Jen Looper](https://twitter.com/jenlooper) - -### Extracción de frases nominales - -En la mayoría de las oraciones, hay un sustantivo que es el sujeto u objeto de la oración. En inglés, a menudo se identifica por tener 'a', 'an' o 'the' antes de él. Identificar el sujeto u objeto de una oración extrayendo la frase nominal es una tarea común en PLN cuando se intenta entender el significado de una oración. - -✅ En la oración "No puedo fijar la hora, ni el lugar, ni la mirada ni las palabras, que sentaron las bases. Hace demasiado tiempo. Estaba en medio antes de saber que había comenzado.", ¿puedes identificar las frases nominales? - -En la oración `the quick red fox jumped over the lazy brown dog` hay 2 frases nominales: **quick red fox** y **lazy brown dog**. - -### Análisis de sentimiento - -Una oración o texto puede analizarse para determinar su sentimiento, o cuán *positivo* o *negativo* es. El sentimiento se mide en *polaridad* y *objetividad/subjetividad*. La polaridad se mide de -1.0 a 1.0 (negativo a positivo) y de 0.0 a 1.0 (más objetivo a más subjetivo). - -✅ Más adelante aprenderás que hay diferentes formas de determinar el sentimiento utilizando el aprendizaje automático, pero una forma es tener una lista de palabras y frases categorizadas como positivas o negativas por un experto humano y aplicar ese modelo al texto para calcular una puntuación de polaridad. ¿Puedes ver cómo esto funcionaría en algunas circunstancias y menos en otras? - -### Inflección - -La inflección te permite tomar una palabra y obtener el singular o plural de la palabra. - -### Lematización - -Un *lema* es la raíz o palabra principal de un conjunto de palabras, por ejemplo, *flew*, *flies*, *flying* tienen como lema el verbo *fly*. - -También hay bases de datos útiles disponibles para el investigador de PLN, notablemente: - -### WordNet - -[WordNet](https://wordnet.princeton.edu/) es una base de datos de palabras, sinónimos, antónimos y muchos otros detalles para cada palabra en muchos idiomas diferentes. Es increíblemente útil al intentar construir traducciones, correctores ortográficos o herramientas de lenguaje de cualquier tipo. - -## Bibliotecas de PLN - -Afortunadamente, no tienes que construir todas estas técnicas tú mismo, ya que hay excelentes bibliotecas de Python disponibles que lo hacen mucho más accesible para los desarrolladores que no están especializados en procesamiento de lenguaje natural o aprendizaje automático. Las próximas lecciones incluyen más ejemplos de estas, pero aquí aprenderás algunos ejemplos útiles para ayudarte con la siguiente tarea. - -### Ejercicio - usando `TextBlob` library - -Let's use a library called TextBlob as it contains helpful APIs for tackling these types of tasks. TextBlob "stands on the giant shoulders of [NLTK](https://nltk.org) and [pattern](https://github.com/clips/pattern), and plays nicely with both." It has a considerable amount of ML embedded in its API. - -> Note: A useful [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) guide is available for TextBlob that is recommended for experienced Python developers - -When attempting to identify *noun phrases*, TextBlob offers several options of extractors to find noun phrases. - -1. Take a look at `ConllExtractor`. - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # import and create a Conll extractor to use later - extractor = ConllExtractor() - - # later when you need a noun phrase extractor: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified - np = user_input_blob.noun_phrases - ``` - - > ¿Qué está pasando aquí? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) es "Un extractor de frases nominales que utiliza análisis por fragmentos entrenados con el corpus de entrenamiento ConLL-2000." ConLL-2000 se refiere a la Conferencia de 2000 sobre Aprendizaje Computacional del Lenguaje Natural. Cada año la conferencia organizaba un taller para abordar un problema espinoso de PLN, y en 2000 fue la fragmentación de sustantivos. Se entrenó un modelo en el Wall Street Journal, con "las secciones 15-18 como datos de entrenamiento (211727 tokens) y la sección 20 como datos de prueba (47377 tokens)". Puedes ver los procedimientos utilizados [aquí](https://www.clips.uantwerpen.be/conll2000/chunking/) y los [resultados](https://ifarm.nl/erikt/research/np-chunking.html). - -### Desafío - mejorando tu bot con PLN - -En la lección anterior construiste un bot de preguntas y respuestas muy simple. Ahora, harás que Marvin sea un poco más simpático analizando tu entrada para detectar el sentimiento y mostrando una respuesta que coincida con el sentimiento. También necesitarás identificar una `noun_phrase` y preguntar sobre ella. - -Tus pasos al construir un mejor bot conversacional: - -1. Imprime instrucciones aconsejando al usuario cómo interactuar con el bot -2. Inicia el bucle - 1. Acepta la entrada del usuario - 2. Si el usuario ha pedido salir, entonces salir - 3. Procesa la entrada del usuario y determina la respuesta de sentimiento adecuada - 4. Si se detecta una frase nominal en el sentimiento, pluralízala y pide más información sobre ese tema - 5. Imprime la respuesta -3. vuelve al paso 2 - -Aquí está el fragmento de código para determinar el sentimiento usando TextBlob. Nota que solo hay cuatro *gradientes* de respuesta de sentimiento (podrías tener más si lo deseas): - -```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. " -``` - -Aquí hay un ejemplo de salida para guiarte (la entrada del usuario está en las líneas que comienzan con >): - -```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! -``` - -Una posible solución a la tarea está [aquí](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) - -✅ Verificación de conocimiento - -1. ¿Crees que las respuestas simpáticas podrían 'engañar' a alguien haciéndole pensar que el bot realmente los entendía? -2. ¿Hace que el bot sea más 'creíble' identificar la frase nominal? -3. ¿Por qué sería útil extraer una 'frase nominal' de una oración? - ---- - -Implementa el bot en la verificación de conocimiento previa y pruébalo con un amigo. ¿Puede engañarlo? ¿Puedes hacer que tu bot sea más 'creíble'? - -## 🚀Desafío - -Toma una tarea en la verificación de conocimiento previa e intenta implementarla. Prueba el bot con un amigo. ¿Puede engañarlo? ¿Puedes hacer que tu bot sea más 'creíble'? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/) - -## Revisión y autoestudio - -En las próximas lecciones aprenderás más sobre el análisis de sentimiento. Investiga esta interesante técnica en artículos como estos en [KDNuggets](https://www.kdnuggets.com/tag/nlp) - -## Tarea - -[Haz que un bot responda](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizados por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/2-Tasks/assignment.md b/translations/es/6-NLP/2-Tasks/assignment.md deleted file mode 100644 index 19f553b8..00000000 --- a/translations/es/6-NLP/2-Tasks/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Haz que un Bot responda - -## Instrucciones - -En las lecciones anteriores, programaste un bot básico con el cual chatear. Este bot da respuestas aleatorias hasta que digas 'adiós'. ¿Puedes hacer que las respuestas sean un poco menos aleatorias y que se activen si dices cosas específicas, como 'por qué' o 'cómo'? Piensa un poco en cómo el aprendizaje automático podría hacer este tipo de trabajo menos manual a medida que amplías tu bot. Puedes usar las bibliotecas NLTK o TextBlob para facilitar tus tareas. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | ---------------------------------------------| ------------------------------------------------ | ----------------------- | -| | Se presenta y documenta un nuevo archivo bot.py | Se presenta un nuevo archivo bot pero contiene errores | No se presenta un archivo | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/3-Translation-Sentiment/README.md b/translations/es/6-NLP/3-Translation-Sentiment/README.md deleted file mode 100644 index b7b69339..00000000 --- a/translations/es/6-NLP/3-Translation-Sentiment/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# Traducción y análisis de sentimientos con ML - -En las lecciones anteriores aprendiste a construir un bot básico usando `TextBlob`, una biblioteca que incorpora ML detrás de escena para realizar tareas básicas de NLP como la extracción de frases nominales. Otro desafío importante en la lingüística computacional es la _traducción_ precisa de una oración de un idioma hablado o escrito a otro. - -## [Cuestionario previo a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) - -La traducción es un problema muy difícil debido al hecho de que hay miles de idiomas y cada uno puede tener reglas gramaticales muy diferentes. Un enfoque es convertir las reglas gramaticales formales de un idioma, como el inglés, en una estructura no dependiente del idioma, y luego traducirla volviendo a convertirla a otro idioma. Este enfoque significa que seguirías los siguientes pasos: - -1. **Identificación**. Identificar o etiquetar las palabras en el idioma de entrada como sustantivos, verbos, etc. -2. **Crear traducción**. Producir una traducción directa de cada palabra en el formato del idioma objetivo. - -### Oración de ejemplo, inglés a irlandés - -En 'inglés', la oración _I feel happy_ tiene tres palabras en el orden: - -- **sujeto** (I) -- **verbo** (feel) -- **adjetivo** (happy) - -Sin embargo, en el idioma 'irlandés', la misma oración tiene una estructura gramatical muy diferente: las emociones como "*happy*" o "*sad*" se expresan como estando *sobre* ti. - -La frase en inglés `I feel happy` en irlandés sería `Tá athas orm`. Una traducción *literal* sería `Happy is upon me`. - -Un hablante de irlandés que traduce al inglés diría `I feel happy`, no `Happy is upon me`, porque entiende el significado de la oración, aunque las palabras y la estructura de la oración sean diferentes. - -El orden formal para la oración en irlandés es: - -- **verbo** (Tá o is) -- **adjetivo** (athas, o happy) -- **sujeto** (orm, o upon me) - -## Traducción - -Un programa de traducción ingenuo podría traducir solo palabras, ignorando la estructura de la oración. - -✅ Si has aprendido un segundo (o tercer o más) idioma como adulto, es posible que hayas comenzado pensando en tu idioma nativo, traduciendo un concepto palabra por palabra en tu cabeza al segundo idioma, y luego hablando tu traducción. Esto es similar a lo que hacen los programas de traducción ingenuos. ¡Es importante superar esta fase para alcanzar la fluidez! - -La traducción ingenua lleva a malas (y a veces hilarantes) malas traducciones: `I feel happy` se traduce literalmente como `Mise bhraitheann athas` en irlandés. Eso significa (literalmente) `me feel happy` y no es una oración válida en irlandés. Aunque el inglés y el irlandés son idiomas hablados en dos islas vecinas muy cercanas, son idiomas muy diferentes con estructuras gramaticales diferentes. - -> Puedes ver algunos videos sobre las tradiciones lingüísticas irlandesas como [este](https://www.youtube.com/watch?v=mRIaLSdRMMs) - -### Enfoques de aprendizaje automático - -Hasta ahora, has aprendido sobre el enfoque de reglas formales para el procesamiento del lenguaje natural. Otro enfoque es ignorar el significado de las palabras y _en su lugar usar el aprendizaje automático para detectar patrones_. Esto puede funcionar en la traducción si tienes muchos textos (un *corpus*) o textos (*corpora*) en ambos idiomas de origen y objetivo. - -Por ejemplo, considera el caso de *Orgullo y Prejuicio*, una novela inglesa bien conocida escrita por Jane Austen en 1813. Si consultas el libro en inglés y una traducción humana del libro en *francés*, podrías detectar frases en uno que se traducen _idiomáticamente_ en el otro. Lo harás en un momento. - -Por ejemplo, cuando una frase en inglés como `I have no money` se traduce literalmente al francés, podría convertirse en `Je n'ai pas de monnaie`. "Monnaie" es un falso amigo francés complicado, ya que 'money' y 'monnaie' no son sinónimos. Una mejor traducción que un humano podría hacer sería `Je n'ai pas d'argent`, porque transmite mejor el significado de que no tienes dinero (en lugar de 'cambio suelto' que es el significado de 'monnaie'). - -![monnaie](../../../../translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.es.png) - -> Imagen de [Jen Looper](https://twitter.com/jenlooper) - -Si un modelo de ML tiene suficientes traducciones humanas para construir un modelo, puede mejorar la precisión de las traducciones identificando patrones comunes en textos que han sido previamente traducidos por hablantes humanos expertos de ambos idiomas. - -### Ejercicio - traducción - -Puedes usar `TextBlob` para traducir oraciones. Prueba la famosa primera línea de **Orgullo y Prejuicio**: - -```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` hace un buen trabajo con la traducción: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". - -Se puede argumentar que la traducción de TextBlob es mucho más exacta, de hecho, que la traducción francesa de 1932 del libro por V. Leconte y 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." - -En este caso, la traducción informada por ML hace un mejor trabajo que el traductor humano que está poniendo palabras innecesarias en la boca del autor original para 'claridad'. - -> ¿Qué está pasando aquí? y ¿por qué TextBlob es tan bueno en la traducción? Bueno, detrás de escena, está usando Google Translate, una IA sofisticada capaz de analizar millones de frases para predecir las mejores cadenas para la tarea en cuestión. No hay nada manual en esto y necesitas una conexión a internet para usar `blob.translate`. - -✅ Try some more sentences. Which is better, ML or human translation? In which cases? - -## Sentiment analysis - -Another area where machine learning can work very well is sentiment analysis. A non-ML approach to sentiment is to identify words and phrases which are 'positive' and 'negative'. Then, given a new piece of text, calculate the total value of the positive, negative and neutral words to identify the overall sentiment. - -This approach is easily tricked as you may have seen in the Marvin task - the sentence `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` es una oración sarcástica y de sentimiento negativo, pero el algoritmo simple detecta 'great', 'wonderful', 'glad' como positivas y 'waste', 'lost' y 'dark' como negativas. El sentimiento general se ve influenciado por estas palabras contradictorias. - -✅ Detente un segundo y piensa en cómo transmitimos sarcasmo como hablantes humanos. La inflexión del tono juega un papel importante. Intenta decir la frase "Well, that film was awesome" de diferentes maneras para descubrir cómo tu voz transmite significado. - -### Enfoques de ML - -El enfoque de ML sería recopilar manualmente cuerpos de texto negativos y positivos: tweets, reseñas de películas, o cualquier cosa donde el humano haya dado una puntuación *y* una opinión escrita. Luego, se pueden aplicar técnicas de NLP a las opiniones y puntuaciones, de modo que surjan patrones (por ejemplo, las reseñas de películas positivas tienden a tener la frase 'Oscar worthy' más que las reseñas de películas negativas, o las reseñas de restaurantes positivos dicen 'gourmet' mucho más que 'disgusting'). - -> ⚖️ **Ejemplo**: Si trabajas en la oficina de un político y se está debatiendo una nueva ley, los constituyentes podrían escribir a la oficina con correos electrónicos a favor o en contra de la nueva ley en particular. Supongamos que te encargan leer los correos electrónicos y clasificarlos en 2 montones, *a favor* y *en contra*. Si hubiera muchos correos electrónicos, podrías sentirte abrumado intentando leerlos todos. ¿No sería genial si un bot pudiera leerlos todos por ti, entenderlos y decirte en qué montón pertenece cada correo electrónico? -> -> Una forma de lograr eso es usar Machine Learning. Entrenarías el modelo con una porción de los correos electrónicos *en contra* y una porción de los correos electrónicos *a favor*. El modelo tendería a asociar frases y palabras con el lado en contra y el lado a favor, *pero no entendería ninguno de los contenidos*, solo que ciertas palabras y patrones eran más probables de aparecer en un correo electrónico *en contra* o *a favor*. Podrías probarlo con algunos correos electrónicos que no usaste para entrenar el modelo y ver si llegaba a la misma conclusión que tú. Luego, una vez que estuvieras satisfecho con la precisión del modelo, podrías procesar futuros correos electrónicos sin tener que leer cada uno. - -✅ ¿Este proceso te suena similar a los procesos que has utilizado en lecciones anteriores? - -## Ejercicio - oraciones sentimentales - -El sentimiento se mide con una *polaridad* de -1 a 1, lo que significa que -1 es el sentimiento más negativo y 1 es el más positivo. El sentimiento también se mide con una puntuación de 0 a 1 para objetividad (0) y subjetividad (1). - -Echa otro vistazo a *Orgullo y Prejuicio* de Jane Austen. El texto está disponible aquí en [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). El siguiente ejemplo muestra un programa corto que analiza el sentimiento de las primeras y últimas oraciones del libro y muestra su polaridad de sentimiento y puntuación de subjetividad/objetividad. - -Deberías usar la biblioteca `TextBlob` (descrita arriba) para determinar `sentimiento` (no tienes que escribir tu propio calculador de sentimientos) en la siguiente tarea. - -```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)) -``` - -Ves la siguiente salida: - -```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) -``` - -## Desafío - comprobar la polaridad del sentimiento - -Tu tarea es determinar, utilizando la polaridad del sentimiento, si *Orgullo y Prejuicio* tiene más oraciones absolutamente positivas que absolutamente negativas. Para esta tarea, puedes asumir que una puntuación de polaridad de 1 o -1 es absolutamente positiva o negativa respectivamente. - -**Pasos:** - -1. Descarga una [copia de Orgullo y Prejuicio](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) de Project Gutenberg como un archivo .txt. Elimina los metadatos al principio y al final del archivo, dejando solo el texto original. -2. Abre el archivo en Python y extrae el contenido como una cadena. -3. Crea un TextBlob usando la cadena del libro. -4. Analiza cada oración en el libro en un bucle. - 1. Si la polaridad es 1 o -1, almacena la oración en una matriz o lista de mensajes positivos o negativos. -5. Al final, imprime todas las oraciones positivas y negativas (por separado) y el número de cada una. - -Aquí hay una [solución de ejemplo](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). - -✅ Comprobación de Conocimientos - -1. El sentimiento se basa en las palabras utilizadas en la oración, pero ¿entiende el código *las palabras*? -2. ¿Crees que la polaridad del sentimiento es precisa o, en otras palabras, estás *de acuerdo* con las puntuaciones? - 1. En particular, ¿estás de acuerdo o en desacuerdo con la polaridad **positiva** absoluta de las siguientes oraciones? - * “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. Las siguientes 3 oraciones fueron puntuadas con un sentimiento absolutamente positivo, pero al leerlas detenidamente, no son oraciones positivas. ¿Por qué el análisis de sentimiento pensó que eran oraciones positivas? - * 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. ¿Estás de acuerdo o en desacuerdo con la polaridad **negativa** absoluta de las siguientes oraciones? - - 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! - -✅ Cualquier aficionado a Jane Austen entenderá que ella a menudo usa sus libros para criticar los aspectos más ridículos de la sociedad de la Regencia inglesa. Elizabeth Bennett, el personaje principal en *Orgullo y Prejuicio*, es una observadora social perspicaz (como la autora) y su lenguaje a menudo está muy matizado. Incluso Mr. Darcy (el interés amoroso en la historia) nota el uso juguetón y burlón del lenguaje de Elizabeth: "He tenido el placer de conocerte lo suficiente como para saber que disfrutas mucho ocasionalmente profesando opiniones que de hecho no son tuyas." - ---- - -## 🚀Desafío - -¿Puedes mejorar a Marvin aún más extrayendo otras características de la entrada del usuario? - -## [Cuestionario posterior a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) - -## Revisión y Autoestudio - -Hay muchas maneras de extraer sentimientos de un texto. Piensa en las aplicaciones comerciales que podrían hacer uso de esta técnica. Piensa en cómo puede salir mal. Lee más sobre sistemas empresariales sofisticados que analizan sentimientos como [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). Prueba algunas de las oraciones de Orgullo y Prejuicio anteriores y ve si puede detectar matices. - -## Asignación - -[Licencia poética](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/3-Translation-Sentiment/assignment.md b/translations/es/6-NLP/3-Translation-Sentiment/assignment.md deleted file mode 100644 index 9bae1a8f..00000000 --- a/translations/es/6-NLP/3-Translation-Sentiment/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Licencia poética - -## Instrucciones - -En [este cuaderno](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) puedes encontrar más de 500 poemas de Emily Dickinson previamente analizados para determinar su sentimiento usando Azure text analytics. Utilizando este conjunto de datos, analízalo utilizando las técnicas descritas en la lección. ¿El sentimiento sugerido de un poema coincide con la decisión del servicio más sofisticado de Azure? ¿Por qué o por qué no, en tu opinión? ¿Hay algo que te sorprenda? - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | -| | Se presenta un cuaderno con un análisis sólido de una muestra del autor | El cuaderno está incompleto o no realiza análisis | No se presenta cuaderno | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/es/6-NLP/3-Translation-Sentiment/solution/Julia/README.md deleted file mode 100644 index 7a9955f5..00000000 --- a/translations/es/6-NLP/3-Translation-Sentiment/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizados por inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/es/6-NLP/3-Translation-Sentiment/solution/R/README.md deleted file mode 100644 index 98b1e6b7..00000000 --- a/translations/es/6-NLP/3-Translation-Sentiment/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/4-Hotel-Reviews-1/README.md b/translations/es/6-NLP/4-Hotel-Reviews-1/README.md deleted file mode 100644 index 1cc6d778..00000000 --- a/translations/es/6-NLP/4-Hotel-Reviews-1/README.md +++ /dev/null @@ -1,303 +0,0 @@ -# Análisis de sentimiento con reseñas de hoteles - procesando los datos - -En esta sección, usarás las técnicas de las lecciones anteriores para realizar un análisis exploratorio de datos de un conjunto de datos grande. Una vez que tengas una buena comprensión de la utilidad de las diversas columnas, aprenderás: - -- cómo eliminar las columnas innecesarias -- cómo calcular algunos datos nuevos basados en las columnas existentes -- cómo guardar el conjunto de datos resultante para usarlo en el desafío final - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/) - -### Introducción - -Hasta ahora has aprendido que los datos de texto son bastante diferentes a los datos numéricos. Si es un texto escrito o hablado por un humano, puede analizarse para encontrar patrones y frecuencias, sentimiento y significado. Esta lección te lleva a un conjunto de datos real con un desafío real: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** e incluye una [licencia CC0: Public Domain](https://creativecommons.org/publicdomain/zero/1.0/). Fue recopilado de Booking.com de fuentes públicas. El creador del conjunto de datos fue Jiashen Liu. - -### Preparación - -Necesitarás: - -* La capacidad de ejecutar notebooks .ipynb usando Python 3 -* pandas -* NLTK, [que deberías instalar localmente](https://www.nltk.org/install.html) -* El conjunto de datos que está disponible en Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Pesa alrededor de 230 MB descomprimido. Descárgalo en la carpeta raíz `/data` asociada con estas lecciones de PLN. - -## Análisis exploratorio de datos - -Este desafío asume que estás construyendo un bot de recomendaciones de hoteles utilizando análisis de sentimiento y puntuaciones de reseñas de huéspedes. El conjunto de datos que utilizarás incluye reseñas de 1493 hoteles diferentes en 6 ciudades. - -Usando Python, un conjunto de datos de reseñas de hoteles, y el análisis de sentimiento de NLTK podrías descubrir: - -* ¿Cuáles son las palabras y frases más frecuentemente utilizadas en las reseñas? -* ¿Los *tags* oficiales que describen un hotel se correlacionan con las puntuaciones de las reseñas (por ejemplo, hay más reseñas negativas para un hotel particular por *Familia con niños pequeños* que por *Viajero solo*, tal vez indicando que es mejor para *Viajeros solos*)? -* ¿Las puntuaciones de sentimiento de NLTK 'coinciden' con la puntuación numérica del revisor del hotel? - -#### Conjunto de datos - -Vamos a explorar el conjunto de datos que has descargado y guardado localmente. Abre el archivo en un editor como VS Code o incluso Excel. - -Los encabezados en el conjunto de datos son los siguientes: - -*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* - -Aquí están agrupados de una manera que podría ser más fácil de examinar: -##### Columnas del hotel - -* `Hotel_Name`, `Hotel_Address`, `lat` (latitud), `lng` (longitud) - * Usando *lat* y *lng* podrías trazar un mapa con Python mostrando las ubicaciones de los hoteles (quizás codificado por colores para reseñas negativas y positivas) - * Hotel_Address no es obviamente útil para nosotros, y probablemente lo reemplazaremos con un país para facilitar la clasificación y búsqueda - -**Columnas de meta-reseña del hotel** - -* `Average_Score` - * Según el creador del conjunto de datos, esta columna es el *Puntaje promedio del hotel, calculado en base al último comentario en el último año*. Esto parece una forma inusual de calcular el puntaje, pero es el dato recopilado, así que lo tomaremos como válido por ahora. - - ✅ Basado en las otras columnas en estos datos, ¿puedes pensar en otra manera de calcular el puntaje promedio? - -* `Total_Number_of_Reviews` - * El número total de reseñas que ha recibido este hotel - no está claro (sin escribir algo de código) si esto se refiere a las reseñas en el conjunto de datos. -* `Additional_Number_of_Scoring` - * Esto significa que se dio un puntaje de reseña pero el revisor no escribió una reseña positiva o negativa - -**Columnas de reseñas** - -- `Reviewer_Score` - - Este es un valor numérico con hasta 1 decimal entre los valores mínimos y máximos 2.5 y 10 - - No se explica por qué 2.5 es el puntaje más bajo posible -- `Negative_Review` - - Si un revisor no escribió nada, este campo tendrá "**No Negative**" - - Ten en cuenta que un revisor puede escribir una reseña positiva en la columna de reseña negativa (por ejemplo, "no hay nada malo en este hotel") -- `Review_Total_Negative_Word_Counts` - - Un mayor conteo de palabras negativas indica un puntaje más bajo (sin verificar la sentimentalidad) -- `Positive_Review` - - Si un revisor no escribió nada, este campo tendrá "**No Positive**" - - Ten en cuenta que un revisor puede escribir una reseña negativa en la columna de reseña positiva (por ejemplo, "no hay nada bueno en este hotel en absoluto") -- `Review_Total_Positive_Word_Counts` - - Un mayor conteo de palabras positivas indica un puntaje más alto (sin verificar la sentimentalidad) -- `Review_Date` y `days_since_review` - - Se podría aplicar una medida de frescura o antigüedad a una reseña (las reseñas más antiguas podrían no ser tan precisas como las más nuevas porque la administración del hotel cambió, o se realizaron renovaciones, o se agregó una piscina, etc.) -- `Tags` - - Son descriptores cortos que un revisor puede seleccionar para describir el tipo de huésped que eran (por ejemplo, solo o familia), el tipo de habitación que tenían, la duración de la estancia y cómo se envió la reseña. - - Desafortunadamente, usar estos tags es problemático, revisa la sección a continuación que discute su utilidad - -**Columnas del revisor** - -- `Total_Number_of_Reviews_Reviewer_Has_Given` - - Esto podría ser un factor en un modelo de recomendación, por ejemplo, si pudieras determinar que los revisores más prolíficos con cientos de reseñas eran más propensos a ser negativos en lugar de positivos. Sin embargo, el revisor de cualquier reseña en particular no está identificado con un código único, y por lo tanto no puede vincularse a un conjunto de reseñas. Hay 30 revisores con 100 o más reseñas, pero es difícil ver cómo esto puede ayudar al modelo de recomendación. -- `Reviewer_Nationality` - - Algunas personas podrían pensar que ciertas nacionalidades son más propensas a dar una reseña positiva o negativa debido a una inclinación nacional. Ten cuidado al construir tales opiniones anecdóticas en tus modelos. Estos son estereotipos nacionales (y a veces raciales), y cada revisor fue un individuo que escribió una reseña basada en su experiencia. Puede haber sido filtrado a través de muchas lentes como sus estancias anteriores en hoteles, la distancia viajada, y su temperamento personal. Pensar que su nacionalidad fue la razón de una puntuación de reseña es difícil de justificar. - -##### Ejemplos - -| Puntaje Promedio | Número Total de Reseñas | Puntaje del Revisor | Reseña Negativa | Reseña Positiva | Tags | -| ---------------- | ----------------------- | ------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------- | ----------------------------------------------------------------------------------------- | -| 7.8 | 1945 | 2.5 | Este no es actualmente un hotel sino un sitio de construcción. Fui aterrorizado desde temprano en la mañana y todo el día con ruidos de construcción inaceptables mientras descansaba después de un largo viaje y trabajaba en la habitación. La gente trabajaba todo el día, es decir, con martillos neumáticos en las habitaciones contiguas. Pedí un cambio de habitación pero no había una habitación silenciosa disponible. Para empeorar las cosas, me cobraron de más. Me fui en la noche ya que tenía que salir muy temprano en vuelo y recibí una factura apropiada. Un día después, el hotel hizo otro cargo sin mi consentimiento en exceso del precio reservado. Es un lugar terrible. No te castigues reservando aquí. | Nada. Lugar terrible. Aléjate. | Viaje de negocios. Pareja. Habitación Doble Estándar. Se hospedó 2 noches. | - -Como puedes ver, este huésped no tuvo una estancia feliz en este hotel. El hotel tiene un buen puntaje promedio de 7.8 y 1945 reseñas, pero este revisor le dio 2.5 y escribió 115 palabras sobre lo negativa que fue su estancia. Si no escribió nada en la columna de Reseña Positiva, podrías suponer que no había nada positivo, pero escribió 7 palabras de advertencia. Si solo contáramos palabras en lugar del significado o sentimiento de las palabras, podríamos tener una visión sesgada de la intención del revisor. Curiosamente, su puntaje de 2.5 es confuso, porque si esa estancia en el hotel fue tan mala, ¿por qué darle algún punto? Investigando el conjunto de datos de cerca, verás que el puntaje más bajo posible es 2.5, no 0. El puntaje más alto posible es 10. - -##### Tags - -Como se mencionó anteriormente, a primera vista, la idea de usar `Tags` para categorizar los datos tiene sentido. Desafortunadamente, estos tags no están estandarizados, lo que significa que en un hotel dado, las opciones podrían ser *Single room*, *Twin room*, y *Double room*, pero en el siguiente hotel, son *Deluxe Single Room*, *Classic Queen Room*, y *Executive King Room*. Estos podrían ser las mismas cosas, pero hay tantas variaciones que la elección se convierte en: - -1. Intentar cambiar todos los términos a un estándar único, lo cual es muy difícil, porque no está claro cuál sería el camino de conversión en cada caso (por ejemplo, *Classic single room* se mapea a *Single room* pero *Superior Queen Room with Courtyard Garden or City View* es mucho más difícil de mapear) - -1. Podemos tomar un enfoque de PLN y medir la frecuencia de ciertos términos como *Solo*, *Business Traveller*, o *Family with young kids* a medida que se aplican a cada hotel, y factorizar eso en la recomendación - -Los tags son usualmente (pero no siempre) un solo campo que contiene una lista de 5 a 6 valores separados por comas alineados a *Tipo de viaje*, *Tipo de huéspedes*, *Tipo de habitación*, *Número de noches*, y *Tipo de dispositivo en el que se envió la reseña*. Sin embargo, debido a que algunos revisores no completan cada campo (pueden dejar uno en blanco), los valores no siempre están en el mismo orden. - -Como ejemplo, toma *Tipo de grupo*. Hay 1025 posibilidades únicas en este campo en la columna `Tags`, y desafortunadamente solo algunos de ellos se refieren a un grupo (algunos son el tipo de habitación, etc.). Si filtras solo los que mencionan familia, los resultados contienen muchos resultados del tipo *Family room*. Si incluyes el término *with*, es decir, cuentas los valores de *Family with*, los resultados son mejores, con más de 80,000 de los 515,000 resultados que contienen la frase "Family with young children" o "Family with older children". - -Esto significa que la columna de tags no es completamente inútil para nosotros, pero tomará algo de trabajo hacerla útil. - -##### Puntaje promedio del hotel - -Hay una serie de rarezas o discrepancias con el conjunto de datos que no puedo descifrar, pero están ilustradas aquí para que estés al tanto de ellas al construir tus modelos. Si las descifras, por favor háznoslo saber en la sección de discusión. - -El conjunto de datos tiene las siguientes columnas relacionadas con el puntaje promedio y el número de reseñas: - -1. Hotel_Name -2. Additional_Number_of_Scoring -3. Average_Score -4. Total_Number_of_Reviews -5. Reviewer_Score - -El único hotel con más reseñas en este conjunto de datos es *Britannia International Hotel Canary Wharf* con 4789 reseñas de 515,000. Pero si miramos el valor de `Total_Number_of_Reviews` para este hotel, es 9086. Podrías suponer que hay muchas más puntuaciones sin reseñas, así que tal vez deberíamos agregar el valor de la columna `Additional_Number_of_Scoring`. Ese valor es 2682, y sumándolo a 4789 nos da 7,471, lo cual sigue estando 1615 por debajo de `Total_Number_of_Reviews`. - -Si tomas las columnas `Average_Score`, podrías suponer que es el promedio de las reseñas en el conjunto de datos, pero la descripción de Kaggle es "*Puntaje Promedio del hotel, calculado en base al último comentario en el último año*". Eso no parece tan útil, pero podemos calcular nuestro propio promedio basado en las puntuaciones de las reseñas en el conjunto de datos. Usando el mismo hotel como ejemplo, el puntaje promedio del hotel se da como 7.1 pero el puntaje calculado (promedio de las puntuaciones de los revisores *en* el conjunto de datos) es 6.8. Esto es cercano, pero no el mismo valor, y solo podemos suponer que las puntuaciones dadas en las reseñas `Additional_Number_of_Scoring` aumentaron el promedio a 7.1. Desafortunadamente, sin una forma de probar o demostrar esa afirmación, es difícil usar o confiar en `Average_Score`, `Additional_Number_of_Scoring` y `Total_Number_of_Reviews` cuando se basan en, o se refieren a, datos que no tenemos. - -Para complicar las cosas aún más, el hotel con el segundo mayor número de reseñas tiene un puntaje promedio calculado de 8.12 y el `Average_Score` del conjunto de datos es 8.1. ¿Es esta coincidencia del puntaje correcto o es el primer hotel una discrepancia? - -En la posibilidad de que estos hoteles puedan ser un caso atípico, y que tal vez la mayoría de los valores coincidan (pero algunos no por alguna razón), escribiremos un programa corto a continuación para explorar los valores en el conjunto de datos y determinar el uso correcto (o no uso) de los valores. - -> 🚨 Una nota de precaución -> -> Al trabajar con este conjunto de datos, escribirás código que calcule algo a partir del texto sin tener que leer o analizar el texto tú mismo. Esta es la esencia del PLN, interpretar el significado o sentimiento sin que un humano tenga que hacerlo. Sin embargo, es posible que leas algunas de las reseñas negativas. Te insto a no hacerlo, porque no tienes que hacerlo. Algunas de ellas son tontas o irrelevantes, como "El clima no fue bueno", algo fuera del control del hotel, o de hecho, de cualquiera. Pero hay un lado oscuro en algunas reseñas también. A veces las reseñas negativas son racistas, sexistas, o discriminatorias por edad. Esto es desafortunado pero de esperarse en un conjunto de datos recopilado de un sitio web público. Algunos revisores dejan reseñas que encontrarías de mal gusto, incómodas, o molestas. Es mejor dejar que el código mida el sentimiento que leerlas tú mismo y molestarte. Dicho esto, es una minoría la que escribe tales cosas, pero existen de todas formas. - -## Ejercicio - Exploración de datos -### Cargar los datos - -Eso es suficiente examinando los datos visualmente, ¡ahora escribirás algo de código y obtendrás algunas respuestas! Esta sección usa la biblioteca pandas. Tu primera tarea es asegurarte de que puedes cargar y leer los datos CSV. La biblioteca pandas tiene un cargador de CSV rápido, y el resultado se coloca en un dataframe, como en lecciones anteriores. El CSV que estamos cargando tiene más de medio millón de filas, pero solo 17 columnas. Pandas te da muchas formas poderosas de interactuar con un dataframe, incluyendo la capacidad de realizar operaciones en cada fila. - -De aquí en adelante en esta lección, habrá fragmentos de código y algunas explicaciones del código y algunas discusiones sobre lo que significan los resultados. Usa el _notebook.ipynb_ incluido para tu código. - -Comencemos cargando el archivo de datos que estarás usando: - -```python -# Load the hotel reviews from CSV -import pandas as pd -import time -# importing time so the start and end time can be used to calculate file loading time -print("Loading data file now, this could take a while depending on file size") -start = time.time() -# df is 'DataFrame' - make sure you downloaded the file to the data folder -df = pd.read_csv('../../data/Hotel_Reviews.csv') -end = time.time() -print("Loading took " + str(round(end - start, 2)) + " seconds") -``` - -Ahora que los datos están cargados, podemos realizar algunas operaciones sobre ellos. Mantén este código en la parte superior de tu programa para la siguiente parte. - -## Explorar los datos - -En este caso, los datos ya están *limpios*, eso significa que están listos para trabajar, y no tienen caracteres en otros idiomas que puedan hacer tropezar a los algoritmos que esperan solo caracteres en inglés. - -✅ Puede que tengas que trabajar con datos que requieran algún procesamiento inicial para formatearlos antes de aplicar técnicas de PLN, pero no esta vez. Si tuvieras que hacerlo, ¿cómo manejarías los caracteres no ingleses? - -Tómate un momento para asegurarte de que una vez que los datos estén cargados, puedas explorarlos con código. Es muy fácil querer enfocarse en las columnas `Negative_Review` y `Positive_Review`. Están llenas de texto natural para que tus algoritmos de PLN los procesen. ¡Pero espera! Antes de saltar al PLN y el sentimiento, deberías seguir el código a continuación para verificar si los valores dados en el conjunto de datos coinciden con los valores que calculas con pandas. - -## Operaciones con dataframes - -La primera tarea en esta lección es verificar si las siguientes afirmaciones son correctas escribiendo algo de código que examine el dataframe (sin cambiarlo). - -> Como muchas tareas de programación, hay varias formas de completarlo, pero un buen consejo es hacerlo de la manera más simple y fácil posible, especialmente si será más fácil de entender cuando vuelvas a este código en el futuro. Con dataframes, hay una API completa que a menudo tendrá una manera de hacer lo que deseas de manera eficiente. -Trata las siguientes preguntas como tareas de codificación e intenta responderlas sin mirar la solución. 1. Imprime la *forma* del dataframe que acabas de cargar ( -rows have column `Positive_Review` values of "No Positive" 9. Calculate and print out how many rows have column `Positive_Review` values of "No Positive" **and** `Negative_Review` values of "No Negative" ### Respuestas de código 1. Imprime la *forma* del marco de datos que acabas de cargar (la forma es el número de filas y columnas) ```python - print("The shape of the data (rows, cols) is " + str(df.shape)) - > The shape of the data (rows, cols) is (515738, 17) - ``` 2. Calcula el conteo de frecuencia para las nacionalidades de los revisores: 1. ¿Cuántos valores distintos hay para la columna `Reviewer_Nationality` y cuáles son? 2. ¿Qué nacionalidad de revisor es la más común en el conjunto de datos (imprime el país y el número de reseñas)? ```python - # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality - nationality_freq = df["Reviewer_Nationality"].value_counts() - print("There are " + str(nationality_freq.size) + " different nationalities") - # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data - print(nationality_freq) - - There are 227 different nationalities - United Kingdom 245246 - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - ... - Comoros 1 - Palau 1 - Northern Mariana Islands 1 - Cape Verde 1 - Guinea 1 - Name: Reviewer_Nationality, Length: 227, dtype: int64 - ``` 3. ¿Cuáles son las siguientes 10 nacionalidades más frecuentemente encontradas, y su conteo de frecuencia? ```python - print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") - # Notice there is a leading space on the values, strip() removes that for printing - # What is the top 10 most common nationalities and their frequencies? - print("The next 10 highest frequency reviewer nationalities are:") - print(nationality_freq[1:11].to_string()) - - The highest frequency reviewer nationality is United Kingdom with 245246 reviews. - The next 10 highest frequency reviewer nationalities are: - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - Saudi Arabia 8951 - Netherlands 8772 - Switzerland 8678 - Germany 7941 - Canada 7894 - France 7296 - ``` 3. ¿Cuál fue el hotel más frecuentemente revisado para cada una de las 10 nacionalidades de revisores más comunes? ```python - # What was the most frequently reviewed hotel for the top 10 nationalities - # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) - for nat in nationality_freq[:10].index: - # First, extract all the rows that match the criteria into a new dataframe - nat_df = df[df["Reviewer_Nationality"] == nat] - # Now get the hotel freq - freq = nat_df["Hotel_Name"].value_counts() - print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") - - The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. - The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. - The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. - The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. - The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. - The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. - The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. - The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. - The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. - The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. - ``` 4. ¿Cuántas reseñas hay por hotel (conteo de frecuencia de hotel) en el conjunto de datos? ```python - # First create a new dataframe based on the old one, removing the uneeded columns - hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) - - # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found - hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') - - # Get rid of all the duplicated rows - hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) - display(hotel_freq_df) - ``` | Nombre_Hotel | Número_Total_de_Reseñas | Reseñas_Encontradas | | :----------------------------------------: | :---------------------: | :-----------------: | | 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 | Puedes notar que los *contados en el conjunto de datos* resultados no coinciden con el valor en `Total_Number_of_Reviews`. No está claro si este valor en el conjunto de datos representaba el número total de reseñas que tenía el hotel, pero no todas fueron extraídas, o algún otro cálculo. `Total_Number_of_Reviews` no se usa en el modelo debido a esta falta de claridad. 5. Aunque hay una columna `Average_Score` para cada hotel en el conjunto de datos, también puedes calcular un puntaje promedio (obteniendo el promedio de todas las puntuaciones de los revisores en el conjunto de datos para cada hotel). Agrega una nueva columna a tu marco de datos con el encabezado de columna `Calc_Average_Score` que contenga ese promedio calculado. Imprime las columnas `Hotel_Name`, `Average_Score`, y `Calc_Average_Score`. ```python - # define a function that takes a row and performs some calculation with it - def get_difference_review_avg(row): - return row["Average_Score"] - row["Calc_Average_Score"] - - # 'mean' is mathematical word for 'average' - df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - - # Add a new column with the difference between the two average scores - df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) - - # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) - review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) - - # Sort the dataframe to find the lowest and highest average score difference - review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) - - display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) - ``` También puedes preguntarte sobre el valor de `Average_Score` y por qué a veces es diferente del puntaje promedio calculado. Como no podemos saber por qué algunos de los valores coinciden, pero otros tienen una diferencia, es más seguro en este caso usar las puntuaciones de las reseñas que tenemos para calcular el promedio nosotros mismos. Dicho esto, las diferencias son generalmente muy pequeñas, aquí están los hoteles con la mayor desviación del promedio del conjunto de datos y el promedio calculado: | Diferencia_Promedio_Puntaje | Promedio_Puntaje | Calc_Average_Score | Nombre_Hotel | | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | | -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 | Con solo 1 hotel teniendo una diferencia de puntaje mayor a 1, significa que probablemente podemos ignorar la diferencia y usar el puntaje promedio calculado. 6. Calcula e imprime cuántas filas tienen valores de columna `Negative_Review` de "No Negative" 7. Calcula e imprime cuántas filas tienen valores de columna `Positive_Review` de "No Positive" 8. Calcula e imprime cuántas filas tienen valores de columna `Positive_Review` de "No Positive" **y** valores de columna `Negative_Review` de "No Negative" ```python - # with lambdas: - start = time.time() - no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) - print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) - - no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) - - both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) - end = time.time() - print("Lambdas took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Lambdas took 9.64 seconds - ``` ## Otra manera Otra manera de contar ítems sin Lambdas, y usar sum para contar las filas: ```python - # without lambdas (using a mixture of notations to show you can use both) - start = time.time() - no_negative_reviews = sum(df.Negative_Review == "No Negative") - print("Number of No Negative reviews: " + str(no_negative_reviews)) - - no_positive_reviews = sum(df["Positive_Review"] == "No Positive") - print("Number of No Positive reviews: " + str(no_positive_reviews)) - - both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) - print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) - - end = time.time() - print("Sum took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Sum took 0.19 seconds - ``` Puedes haber notado que hay 127 filas que tienen tanto "No Negative" como "No Positive" valores para las columnas `Negative_Review` y `Positive_Review` respectivamente. Eso significa que el revisor dio al hotel un puntaje numérico, pero se negó a escribir una reseña positiva o negativa. Afortunadamente, esta es una pequeña cantidad de filas (127 de 515738, o 0.02%), por lo que probablemente no sesgará nuestro modelo o resultados en ninguna dirección particular, pero podrías no haber esperado que un conjunto de datos de reseñas tuviera filas sin reseñas, por lo que vale la pena explorar los datos para descubrir filas como esta. Ahora que has explorado el conjunto de datos, en la próxima lección filtrarás los datos y agregarás algún análisis de sentimiento. --- ## 🚀Desafío Esta lección demuestra, como vimos en lecciones anteriores, lo críticamente importante que es entender tus datos y sus peculiaridades antes de realizar operaciones sobre ellos. Los datos basados en texto, en particular, requieren un escrutinio cuidadoso. Profundiza en varios conjuntos de datos pesados en texto y ve si puedes descubrir áreas que podrían introducir sesgo o sentimiento sesgado en un modelo. ## [Cuestionario post-lectura](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/) ## Revisión y autoestudio Toma [este Camino de Aprendizaje sobre NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) para descubrir herramientas que probar al construir modelos de habla y texto pesados. ## Asignación [NLTK](assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/es/6-NLP/4-Hotel-Reviews-1/assignment.md deleted file mode 100644 index cfb78fce..00000000 --- a/translations/es/6-NLP/4-Hotel-Reviews-1/assignment.md +++ /dev/null @@ -1,8 +0,0 @@ -# NLTK - -## Instrucciones - -NLTK es una biblioteca bien conocida para su uso en lingüística computacional y PLN. Aprovecha esta oportunidad para leer el '[libro de NLTK](https://www.nltk.org/book/)' y probar sus ejercicios. En esta tarea no calificada, conocerás esta biblioteca más a fondo. - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/es/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md deleted file mode 100644 index a367ddc2..00000000 --- a/translations/es/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/es/6-NLP/4-Hotel-Reviews-1/solution/R/README.md deleted file mode 100644 index 21d8685e..00000000 --- a/translations/es/6-NLP/4-Hotel-Reviews-1/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/5-Hotel-Reviews-2/README.md b/translations/es/6-NLP/5-Hotel-Reviews-2/README.md deleted file mode 100644 index 4e06976b..00000000 --- a/translations/es/6-NLP/5-Hotel-Reviews-2/README.md +++ /dev/null @@ -1,377 +0,0 @@ -# Análisis de sentimiento con reseñas de hoteles - -Ahora que has explorado el conjunto de datos en detalle, es hora de filtrar las columnas y luego usar técnicas de PLN en el conjunto de datos para obtener nuevas perspectivas sobre los hoteles. -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/) - -### Operaciones de filtrado y análisis de sentimiento - -Como probablemente has notado, el conjunto de datos tiene algunos problemas. Algunas columnas están llenas de información inútil, otras parecen incorrectas. Si son correctas, no está claro cómo fueron calculadas, y las respuestas no pueden ser verificadas independientemente por tus propios cálculos. - -## Ejercicio: un poco más de procesamiento de datos - -Limpia los datos un poco más. Agrega columnas que serán útiles más adelante, cambia los valores en otras columnas y elimina ciertas columnas por completo. - -1. Procesamiento inicial de columnas - - 1. Elimina `lat` y `lng` - - 2. Reemplaza los valores de `Hotel_Address` con los siguientes valores (si la dirección contiene el nombre de la ciudad y el país, cámbialo solo por la ciudad y el país). - - Estas son las únicas ciudades y países en el conjunto de datos: - - Ámsterdam, Países Bajos - - Barcelona, España - - Londres, Reino Unido - - Milán, Italia - - París, Francia - - Viena, Austria - - ```python - def replace_address(row): - if "Netherlands" in row["Hotel_Address"]: - return "Amsterdam, Netherlands" - elif "Barcelona" in row["Hotel_Address"]: - return "Barcelona, Spain" - elif "United Kingdom" in row["Hotel_Address"]: - return "London, United Kingdom" - elif "Milan" in row["Hotel_Address"]: - return "Milan, Italy" - elif "France" in row["Hotel_Address"]: - return "Paris, France" - elif "Vienna" in row["Hotel_Address"]: - return "Vienna, Austria" - - # Replace all the addresses with a shortened, more useful form - df["Hotel_Address"] = df.apply(replace_address, axis = 1) - # The sum of the value_counts() should add up to the total number of reviews - print(df["Hotel_Address"].value_counts()) - ``` - - Ahora puedes consultar datos a nivel de país: - - ```python - display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) - ``` - - | Hotel_Address | Hotel_Name | - | :--------------------- | :--------: | - | Amsterdam, Netherlands | 105 | - | Barcelona, Spain | 211 | - | London, United Kingdom | 400 | - | Milan, Italy | 162 | - | Paris, France | 458 | - | Vienna, Austria | 158 | - -2. Procesa las columnas de Meta-reseñas del hotel - - 1. Elimina `Additional_Number_of_Scoring` - - 1. Replace `Total_Number_of_Reviews` with the total number of reviews for that hotel that are actually in the dataset - - 1. Replace `Average_Score` con nuestro propio puntaje calculado - - ```python - # Drop `Additional_Number_of_Scoring` - df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) - # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values - df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') - df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - ``` - -3. Procesa las columnas de reseñas - - 1. Elimina `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` and `days_since_review` - - 2. Keep `Reviewer_Score`, `Negative_Review`, and `Positive_Review` as they are, - - 3. Keep `Tags` for now - - - We'll be doing some additional filtering operations on the tags in the next section and then tags will be dropped - -4. Process reviewer columns - - 1. Drop `Total_Number_of_Reviews_Reviewer_Has_Given` - - 2. Keep `Reviewer_Nationality` - -### Tag columns - -The `Tag` column is problematic as it is a list (in text form) stored in the column. Unfortunately the order and number of sub sections in this column are not always the same. It's hard for a human to identify the correct phrases to be interested in, because there are 515,000 rows, and 1427 hotels, and each has slightly different options a reviewer could choose. This is where NLP shines. You can scan the text and find the most common phrases, and count them. - -Unfortunately, we are not interested in single words, but multi-word phrases (e.g. *Business trip*). Running a multi-word frequency distribution algorithm on that much data (6762646 words) could take an extraordinary amount of time, but without looking at the data, it would seem that is a necessary expense. This is where exploratory data analysis comes in useful, because you've seen a sample of the tags such as `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, puedes comenzar a preguntarte si es posible reducir significativamente el procesamiento que tienes que hacer. Afortunadamente, es posible, pero primero necesitas seguir algunos pasos para determinar las etiquetas de interés. - -### Filtrando etiquetas - -Recuerda que el objetivo del conjunto de datos es agregar sentimiento y columnas que te ayudarán a elegir el mejor hotel (para ti o tal vez para un cliente que te pide que hagas un bot de recomendación de hoteles). Necesitas preguntarte si las etiquetas son útiles o no en el conjunto de datos final. Aquí hay una interpretación (si necesitaras el conjunto de datos por otras razones, diferentes etiquetas podrían quedarse o salir de la selección): - -1. El tipo de viaje es relevante, y eso debería quedarse -2. El tipo de grupo de huéspedes es importante, y eso debería quedarse -3. El tipo de habitación, suite o estudio en el que se alojó el huésped es irrelevante (todos los hoteles tienen básicamente las mismas habitaciones) -4. El dispositivo desde el cual se envió la reseña es irrelevante -5. El número de noches que el revisor se quedó *podría* ser relevante si atribuyes estancias más largas a que les gustó más el hotel, pero es un poco exagerado y probablemente irrelevante - -En resumen, **mantén 2 tipos de etiquetas y elimina las demás**. - -Primero, no quieres contar las etiquetas hasta que estén en un mejor formato, lo que significa eliminar los corchetes y las comillas. Puedes hacer esto de varias maneras, pero quieres la más rápida ya que podría llevar mucho tiempo procesar muchos datos. Afortunadamente, pandas tiene una manera fácil de hacer cada uno de estos pasos. - -```Python -# Remove opening and closing brackets -df.Tags = df.Tags.str.strip("[']") -# remove all quotes too -df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) -``` - -Cada etiqueta se convierte en algo como: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. - -Next we find a problem. Some reviews, or rows, have 5 columns, some 3, some 6. This is a result of how the dataset was created, and hard to fix. You want to get a frequency count of each phrase, but they are in different order in each review, so the count might be off, and a hotel might not get a tag assigned to it that it deserved. - -Instead you will use the different order to our advantage, because each tag is multi-word but also separated by a comma! The simplest way to do this is to create 6 temporary columns with each tag inserted in to the column corresponding to its order in the tag. You can then merge the 6 columns into one big column and run the `value_counts()` method on the resulting column. Printing that out, you'll see there was 2428 unique tags. Here is a small sample: - -| Tag | Count | -| ------------------------------ | ------ | -| Leisure trip | 417778 | -| Submitted from a mobile device | 307640 | -| Couple | 252294 | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Solo traveler | 108545 | -| Stayed 3 nights | 95821 | -| Business trip | 82939 | -| Group | 65392 | -| Family with young children | 61015 | -| Stayed 4 nights | 47817 | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Family with older children | 26349 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Stayed 5 nights | 20845 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | -| 2 rooms | 12393 | - -Some of the common tags like `Submitted from a mobile device` are of no use to us, so it might be a smart thing to remove them before counting phrase occurrence, but it is such a fast operation you can leave them in and ignore them. - -### Removing the length of stay tags - -Removing these tags is step 1, it reduces the total number of tags to be considered slightly. Note you do not remove them from the dataset, just choose to remove them from consideration as values to count/keep in the reviews dataset. - -| Length of stay | Count | -| ---------------- | ------ | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Stayed 3 nights | 95821 | -| Stayed 4 nights | 47817 | -| Stayed 5 nights | 20845 | -| Stayed 6 nights | 9776 | -| Stayed 7 nights | 7399 | -| Stayed 8 nights | 2502 | -| Stayed 9 nights | 1293 | -| ... | ... | - -There are a huge variety of rooms, suites, studios, apartments and so on. They all mean roughly the same thing and not relevant to you, so remove them from consideration. - -| Type of room | Count | -| ----------------------------- | ----- | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | - -Finally, and this is delightful (because it didn't take much processing at all), you will be left with the following *useful* tags: - -| Tag | Count | -| --------------------------------------------- | ------ | -| Leisure trip | 417778 | -| Couple | 252294 | -| Solo traveler | 108545 | -| Business trip | 82939 | -| Group (combined with Travellers with friends) | 67535 | -| Family with young children | 61015 | -| Family with older children | 26349 | -| With a pet | 1405 | - -You could argue that `Travellers with friends` is the same as `Group` more or less, and that would be fair to combine the two as above. The code for identifying the correct tags is [the Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). - -The final step is to create new columns for each of these tags. Then, for every review row, if the `Tag` columna coincide con una de las nuevas columnas, agrega un 1, si no, agrega un 0. El resultado final será un recuento de cuántos revisores eligieron este hotel (en conjunto) para, por ejemplo, negocios vs ocio, o para llevar una mascota, y esta es información útil al recomendar un hotel. - -```python -# Process the Tags into new columns -# The file Hotel_Reviews_Tags.py, identifies the most important tags -# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, -# Family with young children, Family with older children, With a pet -df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) -df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) -df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) -df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) -df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) -df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) -df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) -df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) - -``` - -### Guarda tu archivo - -Finalmente, guarda el conjunto de datos tal como está ahora con un nuevo nombre. - -```python -df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) - -# Saving new data file with calculated columns -print("Saving results to Hotel_Reviews_Filtered.csv") -df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) -``` - -## Operaciones de análisis de sentimiento - -En esta sección final, aplicarás análisis de sentimiento a las columnas de reseñas y guardarás los resultados en un conjunto de datos. - -## Ejercicio: carga y guarda los datos filtrados - -Ten en cuenta que ahora estás cargando el conjunto de datos filtrado que se guardó en la sección anterior, **no** el conjunto de datos original. - -```python -import time -import pandas as pd -import nltk as nltk -from nltk.corpus import stopwords -from nltk.sentiment.vader import SentimentIntensityAnalyzer -nltk.download('vader_lexicon') - -# Load the filtered hotel reviews from CSV -df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') - -# You code will be added here - - -# Finally remember to save the hotel reviews with new NLP data added -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) -``` - -### Eliminando palabras vacías - -Si fueras a ejecutar el Análisis de Sentimiento en las columnas de reseñas negativas y positivas, podría llevar mucho tiempo. Probado en un portátil de prueba potente con CPU rápida, tomó 12 - 14 minutos dependiendo de la biblioteca de sentimiento utilizada. Eso es un tiempo (relativamente) largo, por lo que vale la pena investigar si se puede acelerar. - -Eliminar palabras vacías, o palabras comunes en inglés que no cambian el sentimiento de una oración, es el primer paso. Al eliminarlas, el análisis de sentimiento debería ejecutarse más rápido, pero no ser menos preciso (ya que las palabras vacías no afectan el sentimiento, pero sí ralentizan el análisis). - -La reseña negativa más larga tenía 395 palabras, pero después de eliminar las palabras vacías, tiene 195 palabras. - -Eliminar las palabras vacías también es una operación rápida, eliminar las palabras vacías de 2 columnas de reseñas sobre 515,000 filas tomó 3.3 segundos en el dispositivo de prueba. Podría tomar un poco más o menos tiempo para ti dependiendo de la velocidad de tu CPU, RAM, si tienes un SSD o no, y algunos otros factores. La relativa brevedad de la operación significa que si mejora el tiempo de análisis de sentimiento, entonces vale la pena hacerlo. - -```python -from nltk.corpus import stopwords - -# Load the hotel reviews from CSV -df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") - -# Remove stop words - can be slow for a lot of text! -# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches -# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends -start = time.time() -cache = set(stopwords.words("english")) -def remove_stopwords(review): - text = " ".join([word for word in review.split() if word not in cache]) - return text - -# Remove the stop words from both columns -df.Negative_Review = df.Negative_Review.apply(remove_stopwords) -df.Positive_Review = df.Positive_Review.apply(remove_stopwords) -``` - -### Realizando análisis de sentimiento - -Ahora deberías calcular el análisis de sentimiento para ambas columnas de reseñas negativas y positivas, y almacenar el resultado en 2 nuevas columnas. La prueba del sentimiento será compararlo con la puntuación del revisor para la misma reseña. Por ejemplo, si el sentimiento piensa que la reseña negativa tuvo un sentimiento de 1 (sentimiento extremadamente positivo) y el sentimiento de la reseña positiva de 1, pero el revisor le dio al hotel la puntuación más baja posible, entonces o el texto de la reseña no coincide con la puntuación, o el analizador de sentimientos no pudo reconocer el sentimiento correctamente. Deberías esperar que algunos puntajes de sentimiento estén completamente equivocados, y a menudo eso será explicable, por ejemplo, la reseña podría ser extremadamente sarcástica "Por supuesto que ME ENCANTÓ dormir en una habitación sin calefacción" y el analizador de sentimientos piensa que eso es un sentimiento positivo, aunque un humano que lo lea sabría que era sarcasmo. - -NLTK proporciona diferentes analizadores de sentimiento para aprender, y puedes sustituirlos y ver si el sentimiento es más o menos preciso. El análisis de sentimiento VADER se utiliza aquí. - -> Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -```python -from nltk.sentiment.vader import SentimentIntensityAnalyzer - -# Create the vader sentiment analyser (there are others in NLTK you can try too) -vader_sentiment = SentimentIntensityAnalyzer() -# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -# There are 3 possibilities of input for a review: -# It could be "No Negative", in which case, return 0 -# It could be "No Positive", in which case, return 0 -# It could be a review, in which case calculate the sentiment -def calc_sentiment(review): - if review == "No Negative" or review == "No Positive": - return 0 - return vader_sentiment.polarity_scores(review)["compound"] -``` - -Más adelante en tu programa, cuando estés listo para calcular el sentimiento, puedes aplicarlo a cada reseña de la siguiente manera: - -```python -# Add a negative sentiment and positive sentiment column -print("Calculating sentiment columns for both positive and negative reviews") -start = time.time() -df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) -df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) -end = time.time() -print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") -``` - -Esto toma aproximadamente 120 segundos en mi computadora, pero variará en cada computadora. Si deseas imprimir los resultados y ver si el sentimiento coincide con la reseña: - -```python -df = df.sort_values(by=["Negative_Sentiment"], ascending=True) -print(df[["Negative_Review", "Negative_Sentiment"]]) -df = df.sort_values(by=["Positive_Sentiment"], ascending=True) -print(df[["Positive_Review", "Positive_Sentiment"]]) -``` - -Lo último que debes hacer con el archivo antes de usarlo en el desafío, es guardarlo. También deberías considerar reorganizar todas tus nuevas columnas para que sean fáciles de trabajar (para un humano, es un cambio cosmético). - -```python -# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) -df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) - -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) -``` - -Debes ejecutar todo el código para [el cuaderno de análisis](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (después de haber ejecutado [tu cuaderno de filtrado](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) para generar el archivo Hotel_Reviews_Filtered.csv). - -Para revisar, los pasos son: - -1. El archivo del conjunto de datos original **Hotel_Reviews.csv** se explora en la lección anterior con [el cuaderno explorador](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) -2. Hotel_Reviews.csv se filtra mediante [el cuaderno de filtrado](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) resultando en **Hotel_Reviews_Filtered.csv** -3. Hotel_Reviews_Filtered.csv se procesa mediante [el cuaderno de análisis de sentimiento](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) resultando en **Hotel_Reviews_NLP.csv** -4. Usa Hotel_Reviews_NLP.csv en el Desafío de PLN a continuación - -### Conclusión - -Cuando comenzaste, tenías un conjunto de datos con columnas y datos, pero no todo podía ser verificado o utilizado. Has explorado los datos, filtrado lo que no necesitas, convertido etiquetas en algo útil, calculado tus propios promedios, agregado algunas columnas de sentimiento y, con suerte, aprendido algunas cosas interesantes sobre el procesamiento de texto natural. - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) - -## Desafío - -Ahora que tienes tu conjunto de datos analizado para sentimiento, ve si puedes usar estrategias que has aprendido en este currículo (¿quizás clustering?) para determinar patrones en torno al sentimiento. - -## Revisión y autoestudio - -Toma [este módulo de Learn](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) para aprender más y usar diferentes herramientas para explorar el sentimiento en el texto. -## Tarea - -[Prueba con un conjunto de datos diferente](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/es/6-NLP/5-Hotel-Reviews-2/assignment.md deleted file mode 100644 index 5c9c826b..00000000 --- a/translations/es/6-NLP/5-Hotel-Reviews-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Prueba con un conjunto de datos diferente - -## Instrucciones - -Ahora que has aprendido a usar NLTK para asignar sentimiento a un texto, prueba con un conjunto de datos diferente. Probablemente necesitarás hacer algo de procesamiento de datos, así que crea un cuaderno y documenta tu proceso de pensamiento. ¿Qué descubres? - -## Rubrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejora | -| --------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | -| | Se presenta un cuaderno completo y un conjunto de datos con celdas bien documentadas que explican cómo se asigna el sentimiento | Al cuaderno le faltan buenas explicaciones | El cuaderno tiene fallos | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/es/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md deleted file mode 100644 index d10af765..00000000 --- a/translations/es/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/es/6-NLP/5-Hotel-Reviews-2/solution/R/README.md deleted file mode 100644 index 964d9a93..00000000 --- a/translations/es/6-NLP/5-Hotel-Reviews-2/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/README.md b/translations/es/6-NLP/README.md deleted file mode 100644 index 1fc7fe8c..00000000 --- a/translations/es/6-NLP/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Empezando con el procesamiento del lenguaje natural - -El procesamiento del lenguaje natural (PLN) es la capacidad de un programa de computadora para entender el lenguaje humano tal como se habla y se escribe, referido como lenguaje natural. Es un componente de la inteligencia artificial (IA). El PLN ha existido por más de 50 años y tiene raíces en el campo de la lingüística. Todo el campo está dirigido a ayudar a las máquinas a entender y procesar el lenguaje humano. Esto se puede usar para realizar tareas como la corrección ortográfica o la traducción automática. Tiene una variedad de aplicaciones en el mundo real en varios campos, incluyendo la investigación médica, motores de búsqueda e inteligencia empresarial. - -## Tema regional: Idiomas y literatura europeos y hoteles románticos de Europa ❤️ - -En esta sección del currículo, se te introducirá a uno de los usos más extendidos del aprendizaje automático: el procesamiento del lenguaje natural (PLN). Derivado de la lingüística computacional, esta categoría de inteligencia artificial es el puente entre humanos y máquinas a través de la comunicación por voz o textual. - -En estas lecciones aprenderemos los conceptos básicos del PLN construyendo pequeños bots conversacionales para aprender cómo el aprendizaje automático ayuda a hacer estas conversaciones cada vez más 'inteligentes'. Viajarás en el tiempo, conversando con Elizabeth Bennett y el Sr. Darcy del clásico de Jane Austen, **Orgullo y Prejuicio**, publicado en 1813. Luego, ampliarás tus conocimientos aprendiendo sobre el análisis de sentimientos a través de reseñas de hoteles en Europa. - -![Libro y té de Orgullo y Prejuicio](../../../translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.es.jpg) -> Foto por Elaine Howlin en Unsplash - -## Lecciones - -1. [Introducción al procesamiento del lenguaje natural](1-Introduction-to-NLP/README.md) -2. [Tareas y técnicas comunes del PLN](2-Tasks/README.md) -3. [Traducción y análisis de sentimientos con aprendizaje automático](3-Translation-Sentiment/README.md) -4. [Preparando tus datos](4-Hotel-Reviews-1/README.md) -5. [NLTK para el análisis de sentimientos](5-Hotel-Reviews-2/README.md) - -## Créditos - -Estas lecciones de procesamiento del lenguaje natural fueron escritas con ☕ por [Stephen Howell](https://twitter.com/Howell_MSFT) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/6-NLP/data/README.md b/translations/es/6-NLP/data/README.md deleted file mode 100644 index f32f259a..00000000 --- a/translations/es/6-NLP/data/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/1-Introduction/README.md b/translations/es/7-TimeSeries/1-Introduction/README.md deleted file mode 100644 index 37f3cf5b..00000000 --- a/translations/es/7-TimeSeries/1-Introduction/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# Introducción a la predicción de series temporales - -![Resumen de series temporales en un sketchnote](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.es.png) - -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -En esta lección y la siguiente, aprenderás un poco sobre la predicción de series temporales, una parte interesante y valiosa del repertorio de un científico de ML que es un poco menos conocida que otros temas. La predicción de series temporales es una especie de 'bola de cristal': basada en el rendimiento pasado de una variable como el precio, puedes predecir su valor potencial futuro. - -[![Introducción a la predicción de series temporales](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introducción a la predicción de series temporales") - -> 🎥 Haz clic en la imagen de arriba para ver un video sobre la predicción de series temporales - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/) - -Es un campo útil e interesante con un valor real para los negocios, dada su aplicación directa a problemas de precios, inventarios y problemas de la cadena de suministro. Aunque las técnicas de aprendizaje profundo han comenzado a usarse para obtener más información y predecir mejor el rendimiento futuro, la predicción de series temporales sigue siendo un campo muy informado por técnicas clásicas de ML. - -> El útil plan de estudios de series temporales de Penn State se puede encontrar [aquí](https://online.stat.psu.edu/stat510/lesson/1) - -## Introducción - -Supón que mantienes una serie de parquímetros inteligentes que proporcionan datos sobre con qué frecuencia se utilizan y por cuánto tiempo a lo largo del tiempo. - -> ¿Qué pasaría si pudieras predecir, basándote en el rendimiento pasado del parquímetro, su valor futuro de acuerdo con las leyes de oferta y demanda? - -Predecir con precisión cuándo actuar para lograr tu objetivo es un desafío que podría abordarse mediante la predicción de series temporales. ¡No haría feliz a la gente que se les cobrara más en momentos de alta demanda cuando están buscando un lugar para estacionar, pero sería una forma segura de generar ingresos para limpiar las calles! - -Vamos a explorar algunos de los tipos de algoritmos de series temporales y comenzar un cuaderno para limpiar y preparar algunos datos. Los datos que analizarás están tomados de la competencia de predicción GEFCom2014. Consisten en 3 años de carga eléctrica horaria y valores de temperatura entre 2012 y 2014. Dado los patrones históricos de carga eléctrica y temperatura, puedes predecir los valores futuros de carga eléctrica. - -En este ejemplo, aprenderás cómo predecir un paso temporal adelante, utilizando solo datos históricos de carga. Sin embargo, antes de comenzar, es útil entender qué está sucediendo detrás de escena. - -## Algunas definiciones - -Cuando encuentres el término 'serie temporal' necesitas entender su uso en varios contextos diferentes. - -🎓 **Serie temporal** - -En matemáticas, "una serie temporal es una serie de puntos de datos indexados (o listados o graficados) en orden temporal. Más comúnmente, una serie temporal es una secuencia tomada en puntos de tiempo sucesivos equidistantes." Un ejemplo de una serie temporal es el valor de cierre diario del [Promedio Industrial Dow Jones](https://wikipedia.org/wiki/Time_series). El uso de gráficos de series temporales y modelado estadístico se encuentra frecuentemente en procesamiento de señales, predicción del clima, predicción de terremotos y otros campos donde ocurren eventos y se pueden graficar puntos de datos a lo largo del tiempo. - -🎓 **Análisis de series temporales** - -El análisis de series temporales es el análisis de los datos de series temporales mencionados anteriormente. Los datos de series temporales pueden tomar formas distintas, incluyendo 'series temporales interrumpidas' que detectan patrones en la evolución de una serie temporal antes y después de un evento interruptor. El tipo de análisis necesario para la serie temporal depende de la naturaleza de los datos. Los datos de series temporales en sí pueden tomar la forma de series de números o caracteres. - -El análisis a realizar utiliza una variedad de métodos, incluyendo dominio de frecuencia y dominio de tiempo, lineal y no lineal, y más. [Aprende más](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) sobre las muchas formas de analizar este tipo de datos. - -🎓 **Predicción de series temporales** - -La predicción de series temporales es el uso de un modelo para predecir valores futuros basados en patrones mostrados por datos previamente recopilados tal como ocurrieron en el pasado. Aunque es posible usar modelos de regresión para explorar datos de series temporales, con índices de tiempo como variables x en un gráfico, tales datos se analizan mejor utilizando tipos especiales de modelos. - -Los datos de series temporales son una lista de observaciones ordenadas, a diferencia de los datos que pueden analizarse mediante regresión lineal. El más común es ARIMA, un acrónimo que significa "Promedio Móvil Integrado Autoregresivo". - -[Modelos ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "relacionan el valor presente de una serie con valores pasados y errores de predicción pasados." Son más apropiados para analizar datos de dominio temporal, donde los datos están ordenados a lo largo del tiempo. - -> Hay varios tipos de modelos ARIMA, que puedes aprender [aquí](https://people.duke.edu/~rnau/411arim.htm) y que tocarás en la próxima lección. - -En la próxima lección, construirás un modelo ARIMA utilizando [Series Temporales Univariadas](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), que se enfoca en una variable que cambia su valor a lo largo del tiempo. Un ejemplo de este tipo de datos es [este conjunto de datos](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) que registra la concentración mensual de CO2 en el Observatorio Mauna Loa: - -| CO2 | YearMonth | Year | Month | -| :----: | :-------: | :---: | :---: | -| 330.62 | 1975.04 | 1975 | 1 | -| 331.40 | 1975.13 | 1975 | 2 | -| 331.87 | 1975.21 | 1975 | 3 | -| 333.18 | 1975.29 | 1975 | 4 | -| 333.92 | 1975.38 | 1975 | 5 | -| 333.43 | 1975.46 | 1975 | 6 | -| 331.85 | 1975.54 | 1975 | 7 | -| 330.01 | 1975.63 | 1975 | 8 | -| 328.51 | 1975.71 | 1975 | 9 | -| 328.41 | 1975.79 | 1975 | 10 | -| 329.25 | 1975.88 | 1975 | 11 | -| 330.97 | 1975.96 | 1975 | 12 | - -✅ Identifica la variable que cambia a lo largo del tiempo en este conjunto de datos - -## Características de los datos de series temporales a considerar - -Al observar los datos de series temporales, podrías notar que tienen [ciertas características](https://online.stat.psu.edu/stat510/lesson/1/1.1) que necesitas tener en cuenta y mitigar para comprender mejor sus patrones. Si consideras los datos de series temporales como potencialmente proporcionando una 'señal' que deseas analizar, estas características pueden considerarse 'ruido'. A menudo necesitarás reducir este 'ruido' compensando algunas de estas características utilizando algunas técnicas estadísticas. - -Aquí hay algunos conceptos que debes conocer para poder trabajar con series temporales: - -🎓 **Tendencias** - -Las tendencias se definen como aumentos y disminuciones medibles a lo largo del tiempo. [Lee más](https://machinelearningmastery.com/time-series-trends-in-python). En el contexto de las series temporales, se trata de cómo usar y, si es necesario, eliminar las tendencias de tu serie temporal. - -🎓 **[Estacionalidad](https://machinelearningmastery.com/time-series-seasonality-with-python/)** - -La estacionalidad se define como fluctuaciones periódicas, como las temporadas de compras navideñas que podrían afectar las ventas, por ejemplo. [Echa un vistazo](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) a cómo diferentes tipos de gráficos muestran la estacionalidad en los datos. - -🎓 **Valores atípicos** - -Los valores atípicos están muy alejados de la varianza estándar de los datos. - -🎓 **Ciclo a largo plazo** - -Independientemente de la estacionalidad, los datos podrían mostrar un ciclo a largo plazo, como una recesión económica que dura más de un año. - -🎓 **Varianza constante** - -Con el tiempo, algunos datos muestran fluctuaciones constantes, como el uso de energía por día y noche. - -🎓 **Cambios abruptos** - -Los datos podrían mostrar un cambio abrupto que podría necesitar un análisis más detallado. El cierre abrupto de negocios debido al COVID, por ejemplo, causó cambios en los datos. - -✅ Aquí hay un [ejemplo de gráfico de series temporales](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) que muestra el gasto diario en moneda dentro del juego durante algunos años. ¿Puedes identificar alguna de las características mencionadas anteriormente en estos datos? - -![Gasto en moneda dentro del juego](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.es.png) - -## Ejercicio - comenzando con datos de uso de energía - -Vamos a comenzar creando un modelo de series temporales para predecir el uso futuro de energía dado el uso pasado. - -> Los datos en este ejemplo están tomados de la competencia de predicción GEFCom2014. Consisten en 3 años de carga eléctrica horaria y valores de temperatura entre 2012 y 2014. -> -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli y Rob J. Hyndman, "Predicción probabilística de energía: Competencia de predicción de energía global 2014 y más allá", International Journal of Forecasting, vol.32, no.3, pp 896-913, julio-septiembre, 2016. - -1. En la carpeta `working` de esta lección, abre el archivo _notebook.ipynb_. Comienza agregando bibliotecas que te ayudarán a cargar y visualizar datos - - ```python - import os - import matplotlib.pyplot as plt - from common.utils import load_data - %matplotlib inline - ``` - - Nota, estás usando los archivos del `common` folder which set up your environment and handle downloading the data. - -2. Next, examine the data as a dataframe calling `load_data()` and `head()` incluidos: - - ```python - data_dir = './data' - energy = load_data(data_dir)[['load']] - energy.head() - ``` - - Puedes ver que hay dos columnas que representan fecha y carga: - - | | load | - | :-----------------: | :----: | - | 2012-01-01 00:00:00 | 2698.0 | - | 2012-01-01 01:00:00 | 2558.0 | - | 2012-01-01 02:00:00 | 2444.0 | - | 2012-01-01 03:00:00 | 2402.0 | - | 2012-01-01 04:00:00 | 2403.0 | - -3. Ahora, grafica los datos llamando a `plot()`: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![gráfico de energía](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.es.png) - -4. Ahora, grafica la primera semana de julio de 2014, proporcionándola como entrada al patrón `energy` in `[from date]: [to date]`: - - ```python - energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![julio](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.es.png) - - ¡Un gráfico hermoso! Echa un vistazo a estos gráficos y ve si puedes determinar alguna de las características mencionadas anteriormente. ¿Qué podemos deducir visualizando los datos? - -En la próxima lección, crearás un modelo ARIMA para hacer algunas predicciones. - ---- - -## 🚀Desafío - -Haz una lista de todas las industrias y áreas de investigación que puedas pensar que se beneficiarían de la predicción de series temporales. ¿Puedes pensar en una aplicación de estas técnicas en las artes? ¿En Econometría? ¿Ecología? ¿Comercio minorista? ¿Industria? ¿Finanzas? ¿Dónde más? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) - -## Repaso y autoestudio - -Aunque no los cubriremos aquí, las redes neuronales a veces se usan para mejorar los métodos clásicos de predicción de series temporales. Lee más sobre ellas [en este artículo](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) - -## Tarea - -[Visualiza algunas series temporales más](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/1-Introduction/assignment.md b/translations/es/7-TimeSeries/1-Introduction/assignment.md deleted file mode 100644 index edf4be85..00000000 --- a/translations/es/7-TimeSeries/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Visualizar algunas series temporales más - -## Instrucciones - -Has comenzado a aprender sobre la previsión de series temporales al observar el tipo de datos que requieren este modelado especial. Has visualizado algunos datos sobre energía. Ahora, busca otros datos que se beneficiarían de la previsión de series temporales. Encuentra tres ejemplos (prueba [Kaggle](https://kaggle.com) y [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) y crea un notebook para visualizarlos. Anota cualquier característica especial que tengan (estacionalidad, cambios abruptos u otras tendencias) en el notebook. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejora | -| --------- | ------------------------------------------------------ | ---------------------------------------------------- | ---------------------------------------------------------------------------------------- | -| | Tres conjuntos de datos están graficados y explicados en un notebook | Dos conjuntos de datos están graficados y explicados en un notebook | Pocos conjuntos de datos están graficados o explicados en un notebook o los datos presentados son insuficientes | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/es/7-TimeSeries/1-Introduction/solution/Julia/README.md deleted file mode 100644 index 5bad49ff..00000000 --- a/translations/es/7-TimeSeries/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/es/7-TimeSeries/1-Introduction/solution/R/README.md deleted file mode 100644 index c76b8497..00000000 --- a/translations/es/7-TimeSeries/1-Introduction/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de cualquier malentendido o mala interpretación que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/2-ARIMA/README.md b/translations/es/7-TimeSeries/2-ARIMA/README.md deleted file mode 100644 index e529b351..00000000 --- a/translations/es/7-TimeSeries/2-ARIMA/README.md +++ /dev/null @@ -1,396 +0,0 @@ -# Pronóstico de series temporales con ARIMA - -En la lección anterior, aprendiste un poco sobre el pronóstico de series temporales y cargaste un conjunto de datos que muestra las fluctuaciones de la carga eléctrica a lo largo de un período de tiempo. - -[![Introducción a ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introducción a ARIMA") - -> 🎥 Haz clic en la imagen de arriba para ver un video: Una breve introducción a los modelos ARIMA. El ejemplo está hecho en R, pero los conceptos son universales. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/) - -## Introducción - -En esta lección, descubrirás una forma específica de construir modelos con [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Los modelos ARIMA son particularmente adecuados para ajustar datos que muestran [no estacionariedad](https://wikipedia.org/wiki/Stationary_process). - -## Conceptos generales - -Para poder trabajar con ARIMA, hay algunos conceptos que necesitas conocer: - -- 🎓 **Estacionariedad**. Desde un contexto estadístico, la estacionariedad se refiere a datos cuya distribución no cambia cuando se desplazan en el tiempo. Los datos no estacionarios, entonces, muestran fluctuaciones debido a tendencias que deben transformarse para ser analizadas. La estacionalidad, por ejemplo, puede introducir fluctuaciones en los datos y puede eliminarse mediante un proceso de 'diferenciación estacional'. - -- 🎓 **[Diferenciación](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Diferenciar datos, nuevamente desde un contexto estadístico, se refiere al proceso de transformar datos no estacionarios para hacerlos estacionarios eliminando su tendencia no constante. "La diferenciación elimina los cambios en el nivel de una serie temporal, eliminando la tendencia y la estacionalidad y, en consecuencia, estabilizando la media de la serie temporal." [Documento de Shixiong et al](https://arxiv.org/abs/1904.07632) - -## ARIMA en el contexto de series temporales - -Desglosamos las partes de ARIMA para entender mejor cómo nos ayuda a modelar series temporales y nos ayuda a hacer predicciones. - -- **AR - de AutoRegresivo**. Los modelos autorregresivos, como su nombre indica, miran 'hacia atrás' en el tiempo para analizar valores anteriores en tus datos y hacer suposiciones sobre ellos. Estos valores anteriores se llaman 'rezagos'. Un ejemplo sería datos que muestran ventas mensuales de lápices. El total de ventas de cada mes se consideraría una 'variable evolutiva' en el conjunto de datos. Este modelo se construye como "la variable evolutiva de interés se regresa sobre sus propios valores rezagados (es decir, anteriores)." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) - -- **I - de Integrado**. A diferencia de los modelos similares 'ARMA', la 'I' en ARIMA se refiere a su aspecto *[integrado](https://wikipedia.org/wiki/Order_of_integration)*. Los datos se 'integran' cuando se aplican pasos de diferenciación para eliminar la no estacionariedad. - -- **MA - de Promedio Móvil**. El aspecto de [promedio móvil](https://wikipedia.org/wiki/Moving-average_model) de este modelo se refiere a la variable de salida que se determina observando los valores actuales y pasados de los rezagos. - -En resumen: ARIMA se usa para ajustar un modelo lo más cerca posible a la forma especial de los datos de series temporales. - -## Ejercicio - construir un modelo ARIMA - -Abre la carpeta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) en esta lección y encuentra el archivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). - -1. Ejecuta el notebook para cargar la biblioteca de Python `statsmodels`; necesitarás esto para los modelos ARIMA. - -1. Carga las bibliotecas necesarias - -1. Ahora, carga varias bibliotecas más útiles para graficar datos: - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from pandas.plotting import autocorrelation_plot - from statsmodels.tsa.statespace.sarimax import SARIMAX - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - from IPython.display import Image - - %matplotlib inline - pd.options.display.float_format = '{:,.2f}'.format - np.set_printoptions(precision=2) - warnings.filterwarnings("ignore") # specify to ignore warning messages - ``` - -1. Carga los datos del archivo `/data/energy.csv` en un dataframe de Pandas y échale un vistazo: - - ```python - energy = load_data('./data')[['load']] - energy.head(10) - ``` - -1. Grafica todos los datos de energía disponibles desde enero de 2012 hasta diciembre de 2014. No debería haber sorpresas, ya que vimos estos datos en la última lección: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ¡Ahora, vamos a construir un modelo! - -### Crear conjuntos de datos de entrenamiento y prueba - -Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenamiento y prueba. Entrenarás tu modelo en el conjunto de entrenamiento. Como de costumbre, después de que el modelo haya terminado de entrenarse, evaluarás su precisión usando el conjunto de prueba. Necesitas asegurarte de que el conjunto de prueba cubra un período posterior en el tiempo al del conjunto de entrenamiento para asegurarte de que el modelo no obtenga información de períodos futuros. - -1. Asigna un período de dos meses desde el 1 de septiembre hasta el 31 de octubre de 2014 al conjunto de entrenamiento. El conjunto de prueba incluirá el período de dos meses del 1 de noviembre al 31 de diciembre de 2014: - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - - Dado que estos datos reflejan el consumo diario de energía, hay un fuerte patrón estacional, pero el consumo es más similar al consumo en días más recientes. - -1. Visualiza las diferencias: - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![datos de entrenamiento y prueba](../../../../translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.es.png) - - Por lo tanto, usar una ventana de tiempo relativamente pequeña para entrenar los datos debería ser suficiente. - - > Nota: Dado que la función que usamos para ajustar el modelo ARIMA utiliza validación en la muestra durante el ajuste, omitiremos los datos de validación. - -### Preparar los datos para el entrenamiento - -Ahora, necesitas preparar los datos para el entrenamiento realizando el filtrado y escalado de tus datos. Filtra tu conjunto de datos para incluir solo los períodos de tiempo y columnas que necesitas, y escala para asegurarte de que los datos se proyecten en el intervalo 0,1. - -1. Filtra el conjunto de datos original para incluir solo los períodos de tiempo mencionados por conjunto y solo incluye la columna necesaria 'load' más la fecha: - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - Puedes ver la forma de los datos: - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -1. Escala los datos para que estén en el rango (0, 1). - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - train.head(10) - ``` - -1. Visualiza los datos originales vs. los escalados: - - ```python - energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) - train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) - plt.show() - ``` - - ![original](../../../../translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.es.png) - - > Los datos originales - - ![escalado](../../../../translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.es.png) - - > Los datos escalados - -1. Ahora que has calibrado los datos escalados, puedes escalar los datos de prueba: - - ```python - test['load'] = scaler.transform(test) - test.head() - ``` - -### Implementar ARIMA - -¡Es hora de implementar ARIMA! Ahora usarás la biblioteca `statsmodels` que instalaste anteriormente. - -Ahora necesitas seguir varios pasos - - 1. Define el modelo llamando a `SARIMAX()` and passing in the model parameters: p, d, and q parameters, and P, D, and Q parameters. - 2. Prepare the model for the training data by calling the fit() function. - 3. Make predictions calling the `forecast()` function and specifying the number of steps (the `horizon`) to forecast. - -> 🎓 What are all these parameters for? In an ARIMA model there are 3 parameters that are used to help model the major aspects of a time series: seasonality, trend, and noise. These parameters are: - -`p`: the parameter associated with the auto-regressive aspect of the model, which incorporates *past* values. -`d`: the parameter associated with the integrated part of the model, which affects the amount of *differencing* (🎓 remember differencing 👆?) to apply to a time series. -`q`: the parameter associated with the moving-average part of the model. - -> Note: If your data has a seasonal aspect - which this one does - , we use a seasonal ARIMA model (SARIMA). In that case you need to use another set of parameters: `P`, `D`, and `Q` which describe the same associations as `p`, `d`, and `q`, pero corresponden a los componentes estacionales del modelo. - -1. Comienza configurando tu valor de horizonte preferido. Probemos 3 horas: - - ```python - # Specify the number of steps to forecast ahead - HORIZON = 3 - print('Forecasting horizon:', HORIZON, 'hours') - ``` - - Seleccionar los mejores valores para los parámetros de un modelo ARIMA puede ser un desafío, ya que es algo subjetivo y requiere tiempo. Podrías considerar usar una biblioteca `auto_arima()` function from the [`pyramid` library](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html), - -1. Por ahora, prueba algunas selecciones manuales para encontrar un buen modelo. - - ```python - order = (4, 1, 0) - seasonal_order = (1, 1, 0, 24) - - model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) - results = model.fit() - - print(results.summary()) - ``` - - Se imprime una tabla de resultados. - -¡Has construido tu primer modelo! Ahora necesitamos encontrar una manera de evaluarlo. - -### Evaluar tu modelo - -Para evaluar tu modelo, puedes realizar la llamada validación `walk forward`. En la práctica, los modelos de series temporales se reentrenan cada vez que se dispone de nuevos datos. Esto permite que el modelo haga la mejor predicción en cada paso de tiempo. - -Comenzando desde el principio de la serie temporal usando esta técnica, entrena el modelo en el conjunto de datos de entrenamiento. Luego haz una predicción en el siguiente paso de tiempo. La predicción se evalúa en función del valor conocido. Luego, el conjunto de entrenamiento se expande para incluir el valor conocido y se repite el proceso. - -> Nota: Debes mantener fija la ventana del conjunto de entrenamiento para un entrenamiento más eficiente, de modo que cada vez que agregues una nueva observación al conjunto de entrenamiento, elimines la observación del comienzo del conjunto. - -Este proceso proporciona una estimación más robusta de cómo se desempeñará el modelo en la práctica. Sin embargo, tiene el costo computacional de crear tantos modelos. Esto es aceptable si los datos son pequeños o si el modelo es simple, pero podría ser un problema a gran escala. - -La validación walk-forward es el estándar de oro de la evaluación de modelos de series temporales y se recomienda para tus propios proyectos. - -1. Primero, crea un punto de datos de prueba para cada paso de HORIZON. - - ```python - test_shifted = test.copy() - - for t in range(1, HORIZON+1): - test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') - - test_shifted = test_shifted.dropna(how='any') - test_shifted.head(5) - ``` - - | | | load | load+1 | load+2 | - | ---------- | -------- | ---- | ------ | ------ | - | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | - | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | - | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | - | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | - | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | - - Los datos se desplazan horizontalmente según su punto de horizonte. - -1. Haz predicciones en tus datos de prueba usando este enfoque de ventana deslizante en un bucle del tamaño de la longitud de los datos de prueba: - - ```python - %%time - training_window = 720 # dedicate 30 days (720 hours) for training - - train_ts = train['load'] - test_ts = test_shifted - - history = [x for x in train_ts] - history = history[(-training_window):] - - predictions = list() - - order = (2, 1, 0) - seasonal_order = (1, 1, 0, 24) - - for t in range(test_ts.shape[0]): - model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) - model_fit = model.fit() - yhat = model_fit.forecast(steps = HORIZON) - predictions.append(yhat) - obs = list(test_ts.iloc[t]) - # move the training window - history.append(obs[0]) - history.pop(0) - print(test_ts.index[t]) - print(t+1, ': predicted =', yhat, 'expected =', obs) - ``` - - Puedes ver el entrenamiento ocurriendo: - - ```output - 2014-12-30 00:00:00 - 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] - - 2014-12-30 01:00:00 - 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] - - 2014-12-30 02:00:00 - 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] - ``` - -1. Compara las predicciones con la carga real: - - ```python - eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) - eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] - eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') - eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() - eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) - eval_df.head() - ``` - - Salida - | | | timestamp | h | prediction | actual | - | --- | ---------- | --------- | --- | ---------- | -------- | - | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | - | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | - | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | - | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | - | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | - - Observa la predicción de los datos horarios, en comparación con la carga real. ¿Qué tan precisa es? - -### Verificar la precisión del modelo - -Verifica la precisión de tu modelo probando su error porcentual absoluto medio (MAPE) sobre todas las predicciones. - -> **🧮 Muéstrame las matemáticas** -> -> ![MAPE](../../../../translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.es.png) -> -> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) se utiliza para mostrar la precisión de la predicción como una proporción definida por la fórmula anterior. La diferencia entre actualt y predichot se divide por el actualt. "El valor absoluto en este cálculo se suma para cada punto de pronóstico en el tiempo y se divide por el número de puntos ajustados n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) - -1. Expresa la ecuación en código: - - ```python - if(HORIZON > 1): - eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] - print(eval_df.groupby('h')['APE'].mean()) - ``` - -1. Calcula el MAPE de un paso: - - ```python - print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') - ``` - - MAPE de pronóstico de un paso: 0.5570581332313952 % - -1. Imprime el MAPE de pronóstico de múltiples pasos: - - ```python - print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') - ``` - - ```output - Multi-step forecast MAPE: 1.1460048657704118 % - ``` - - Un número bajo es mejor: considera que un pronóstico que tiene un MAPE de 10 está desviado en un 10%. - -1. Pero como siempre, es más fácil ver este tipo de medición de precisión visualmente, así que vamos a graficarlo: - - ```python - if(HORIZON == 1): - ## Plotting single step forecast - eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) - - else: - ## Plotting multi step forecast - plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] - for t in range(1, HORIZON+1): - plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values - - fig = plt.figure(figsize=(15, 8)) - ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) - ax = fig.add_subplot(111) - for t in range(1, HORIZON+1): - x = plot_df['timestamp'][(t-1):] - y = plot_df['t+'+str(t)][0:len(x)] - ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) - - ax.legend(loc='best') - - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![un modelo de series temporales](../../../../translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.es.png) - -🏆 Una gráfica muy bonita, que muestra un modelo con buena precisión. ¡Bien hecho! - ---- - -## 🚀Desafío - -Investiga las formas de probar la precisión de un modelo de series temporales. Tocamos el MAPE en esta lección, pero ¿hay otros métodos que podrías usar? Investígalos y anótalos. Un documento útil se puede encontrar [aquí](https://otexts.com/fpp2/accuracy.html) - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/) - -## Repaso y autoestudio - -Esta lección toca solo lo básico del pronóstico de series temporales con ARIMA. Tómate un tiempo para profundizar tu conocimiento explorando [este repositorio](https://microsoft.github.io/forecasting/) y sus diversos tipos de modelos para aprender otras formas de construir modelos de series temporales. - -## Tarea - -[Un nuevo modelo ARIMA](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/2-ARIMA/assignment.md b/translations/es/7-TimeSeries/2-ARIMA/assignment.md deleted file mode 100644 index 3ddebeba..00000000 --- a/translations/es/7-TimeSeries/2-ARIMA/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Un nuevo modelo ARIMA - -## Instrucciones - -Ahora que has construido un modelo ARIMA, construye uno nuevo con datos frescos (prueba uno de [estos conjuntos de datos de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anota tu trabajo en un cuaderno, visualiza los datos y tu modelo, y prueba su precisión utilizando MAPE. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | ------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------- | ----------------------------------- | -| | Se presenta un cuaderno con un nuevo modelo ARIMA construido, probado y explicado con visualizaciones y precisión indicada. | El cuaderno presentado no está anotado o contiene errores | Se presenta un cuaderno incompleto | - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/es/7-TimeSeries/2-ARIMA/solution/Julia/README.md deleted file mode 100644 index 85529d6f..00000000 --- a/translations/es/7-TimeSeries/2-ARIMA/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/es/7-TimeSeries/2-ARIMA/solution/R/README.md deleted file mode 100644 index c138f145..00000000 --- a/translations/es/7-TimeSeries/2-ARIMA/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/3-SVR/README.md b/translations/es/7-TimeSeries/3-SVR/README.md deleted file mode 100644 index 910ad7b0..00000000 --- a/translations/es/7-TimeSeries/3-SVR/README.md +++ /dev/null @@ -1,382 +0,0 @@ -# Pronóstico de Series Temporales con Regressor de Máquinas de Vectores de Soporte - -En la lección anterior, aprendiste a usar el modelo ARIMA para hacer predicciones de series temporales. Ahora veremos el modelo Regressor de Máquinas de Vectores de Soporte, que es un modelo de regresión utilizado para predecir datos continuos. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/51/) - -## Introducción - -En esta lección, descubrirás una forma específica de construir modelos con [**SVM**: **M**áquina de **V**ectores de **S**oporte](https://en.wikipedia.org/wiki/Support-vector_machine) para regresión, o **SVR: Regressor de Máquinas de Vectores de Soporte**. - -### SVR en el contexto de series temporales [^1] - -Antes de entender la importancia del SVR en la predicción de series temporales, aquí hay algunos conceptos importantes que necesitas conocer: - -- **Regresión:** Técnica de aprendizaje supervisado para predecir valores continuos a partir de un conjunto dado de entradas. La idea es ajustar una curva (o línea) en el espacio de características que tenga el mayor número de puntos de datos. [Haz clic aquí](https://en.wikipedia.org/wiki/Regression_analysis) para más información. -- **Máquina de Vectores de Soporte (SVM):** Un tipo de modelo de aprendizaje supervisado utilizado para clasificación, regresión y detección de valores atípicos. El modelo es un hiperplano en el espacio de características, que en el caso de la clasificación actúa como una frontera, y en el caso de la regresión actúa como la línea de mejor ajuste. En SVM, generalmente se usa una función Kernel para transformar el conjunto de datos a un espacio de mayor número de dimensiones, para que puedan ser fácilmente separables. [Haz clic aquí](https://en.wikipedia.org/wiki/Support-vector_machine) para más información sobre las SVM. -- **Regressor de Máquinas de Vectores de Soporte (SVR):** Un tipo de SVM, para encontrar la línea de mejor ajuste (que en el caso de SVM es un hiperplano) que tiene el mayor número de puntos de datos. - -### ¿Por qué SVR? [^1] - -En la última lección aprendiste sobre ARIMA, que es un método estadístico lineal muy exitoso para pronosticar datos de series temporales. Sin embargo, en muchos casos, los datos de series temporales tienen *no linealidad*, que no puede ser mapeada por modelos lineales. En tales casos, la capacidad de SVM para considerar la no linealidad en los datos para tareas de regresión hace que SVR tenga éxito en el pronóstico de series temporales. - -## Ejercicio - construir un modelo SVR - -Los primeros pasos para la preparación de datos son los mismos que en la lección anterior sobre [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). - -Abre la carpeta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) en esta lección y encuentra el archivo [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb).[^2] - -1. Ejecuta el notebook e importa las bibliotecas necesarias: [^2] - - ```python - import sys - sys.path.append('../../') - ``` - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from sklearn.svm import SVR - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - ``` - -2. Carga los datos del archivo `/data/energy.csv` en un dataframe de Pandas y échale un vistazo: [^2] - - ```python - energy = load_data('../../data')[['load']] - ``` - -3. Grafica todos los datos de energía disponibles desde enero de 2012 hasta diciembre de 2014: [^2] - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![full data](../../../../translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.es.png) - - Ahora, construyamos nuestro modelo SVR. - -### Crear conjuntos de datos de entrenamiento y prueba - -Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenamiento y prueba. Luego, remodelarás los datos para crear un conjunto de datos basado en pasos de tiempo que será necesario para el SVR. Entrenarás tu modelo en el conjunto de entrenamiento. Después de que el modelo haya terminado de entrenar, evaluarás su precisión en el conjunto de entrenamiento, en el conjunto de prueba y luego en el conjunto de datos completo para ver el rendimiento general. Necesitas asegurarte de que el conjunto de prueba cubra un período posterior en el tiempo del conjunto de entrenamiento para asegurar que el modelo no obtenga información de períodos de tiempo futuros [^2] (una situación conocida como *sobreajuste*). - -1. Asigna un período de dos meses desde el 1 de septiembre hasta el 31 de octubre de 2014 al conjunto de entrenamiento. El conjunto de prueba incluirá el período de dos meses del 1 de noviembre al 31 de diciembre de 2014: [^2] - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - -2. Visualiza las diferencias: [^2] - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![training and testing data](../../../../translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.es.png) - -### Preparar los datos para el entrenamiento - -Ahora, necesitas preparar los datos para el entrenamiento realizando el filtrado y la escalación de tus datos. Filtra tu conjunto de datos para incluir solo los períodos de tiempo y columnas que necesitas, y escala para asegurar que los datos se proyecten en el intervalo 0,1. - -1. Filtra el conjunto de datos original para incluir solo los períodos de tiempo mencionados por conjunto e incluyendo solo la columna necesaria 'load' más la fecha: [^2] - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -2. Escala los datos de entrenamiento para que estén en el rango (0, 1): [^2] - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - ``` - -4. Ahora, escala los datos de prueba: [^2] - - ```python - test['load'] = scaler.transform(test) - ``` - -### Crear datos con pasos de tiempo [^1] - -Para el SVR, transformas los datos de entrada para que sean de la forma `[batch, timesteps]`. So, you reshape the existing `train_data` and `test_data` de manera que haya una nueva dimensión que se refiere a los pasos de tiempo. - -```python -# Converting to numpy arrays -train_data = train.values -test_data = test.values -``` - -Para este ejemplo, tomamos `timesteps = 5`. Así que, las entradas al modelo son los datos para los primeros 4 pasos de tiempo, y la salida serán los datos para el quinto paso de tiempo. - -```python -timesteps=5 -``` - -Convirtiendo los datos de entrenamiento a tensor 2D usando comprensión de listas anidadas: - -```python -train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] -train_data_timesteps.shape -``` - -```output -(1412, 5) -``` - -Convirtiendo los datos de prueba a tensor 2D: - -```python -test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] -test_data_timesteps.shape -``` - -```output -(44, 5) -``` - -Seleccionando entradas y salidas de los datos de entrenamiento y prueba: - -```python -x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] -x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] - -print(x_train.shape, y_train.shape) -print(x_test.shape, y_test.shape) -``` - -```output -(1412, 4) (1412, 1) -(44, 4) (44, 1) -``` - -### Implementar SVR [^1] - -Ahora, es momento de implementar SVR. Para leer más sobre esta implementación, puedes consultar [esta documentación](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Para nuestra implementación, seguimos estos pasos: - - 1. Define el modelo llamando a `SVR()` and passing in the model hyperparameters: kernel, gamma, c and epsilon - 2. Prepare the model for the training data by calling the `fit()` function - 3. Make predictions calling the `predict()` function - -Ahora creamos un modelo SVR. Aquí usamos el [kernel RBF](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), y establecemos los hiperparámetros gamma, C y epsilon en 0.5, 10 y 0.05 respectivamente. - -```python -model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) -``` - -#### Ajustar el modelo en los datos de entrenamiento [^1] - -```python -model.fit(x_train, y_train[:,0]) -``` - -```output -SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, - kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) -``` - -#### Hacer predicciones con el modelo [^1] - -```python -y_train_pred = model.predict(x_train).reshape(-1,1) -y_test_pred = model.predict(x_test).reshape(-1,1) - -print(y_train_pred.shape, y_test_pred.shape) -``` - -```output -(1412, 1) (44, 1) -``` - -¡Has construido tu SVR! Ahora necesitamos evaluarlo. - -### Evaluar tu modelo [^1] - -Para la evaluación, primero escalaremos los datos a nuestra escala original. Luego, para verificar el rendimiento, graficaremos la serie temporal original y la predicha, y también imprimiremos el resultado de MAPE. - -Escala la salida predicha y la original: - -```python -# Scaling the predictions -y_train_pred = scaler.inverse_transform(y_train_pred) -y_test_pred = scaler.inverse_transform(y_test_pred) - -print(len(y_train_pred), len(y_test_pred)) -``` - -```python -# Scaling the original values -y_train = scaler.inverse_transform(y_train) -y_test = scaler.inverse_transform(y_test) - -print(len(y_train), len(y_test)) -``` - -#### Verificar el rendimiento del modelo en los datos de entrenamiento y prueba [^1] - -Extraemos las marcas de tiempo del conjunto de datos para mostrar en el eje x de nuestro gráfico. Nota que estamos usando los primeros ```timesteps-1``` valores como entrada para la primera salida, por lo que las marcas de tiempo para la salida comenzarán después de eso. - -```python -train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] -test_timestamps = energy[test_start_dt:].index[timesteps-1:] - -print(len(train_timestamps), len(test_timestamps)) -``` - -```output -1412 44 -``` - -Graficar las predicciones para los datos de entrenamiento: - -```python -plt.figure(figsize=(25,6)) -plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.title("Training data prediction") -plt.show() -``` - -![training data prediction](../../../../translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.es.png) - -Imprimir MAPE para los datos de entrenamiento - -```python -print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') -``` - -```output -MAPE for training data: 1.7195710200875551 % -``` - -Graficar las predicciones para los datos de prueba - -```python -plt.figure(figsize=(10,3)) -plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.show() -``` - -![testing data prediction](../../../../translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.es.png) - -Imprimir MAPE para los datos de prueba - -```python -print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') -``` - -```output -MAPE for testing data: 1.2623790187854018 % -``` - -🏆 ¡Tienes un muy buen resultado en el conjunto de datos de prueba! - -### Verificar el rendimiento del modelo en el conjunto de datos completo [^1] - -```python -# Extracting load values as numpy array -data = energy.copy().values - -# Scaling -data = scaler.transform(data) - -# Transforming to 2D tensor as per model input requirement -data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] -print("Tensor shape: ", data_timesteps.shape) - -# Selecting inputs and outputs from data -X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] -print("X shape: ", X.shape,"\nY shape: ", Y.shape) -``` - -```output -Tensor shape: (26300, 5) -X shape: (26300, 4) -Y shape: (26300, 1) -``` - -```python -# Make model predictions -Y_pred = model.predict(X).reshape(-1,1) - -# Inverse scale and reshape -Y_pred = scaler.inverse_transform(Y_pred) -Y = scaler.inverse_transform(Y) -``` - -```python -plt.figure(figsize=(30,8)) -plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(Y_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.show() -``` - -![full data prediction](../../../../translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.es.png) - -```python -print('MAPE: ', mape(Y_pred, Y)*100, '%') -``` - -```output -MAPE: 2.0572089029888656 % -``` - -🏆 Muy buenos gráficos, mostrando un modelo con buena precisión. ¡Bien hecho! - ---- - -## 🚀Desafío - -- Intenta ajustar los hiperparámetros (gamma, C, epsilon) al crear el modelo y evalúalo en los datos para ver qué conjunto de hiperparámetros da los mejores resultados en los datos de prueba. Para saber más sobre estos hiperparámetros, puedes consultar el documento [aquí](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). -- Intenta usar diferentes funciones kernel para el modelo y analiza su rendimiento en el conjunto de datos. Un documento útil se puede encontrar [aquí](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). -- Intenta usar diferentes valores para `timesteps` para que el modelo mire hacia atrás para hacer la predicción. - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/) - -## Revisión y autoestudio - -Esta lección fue para introducir la aplicación de SVR para el pronóstico de series temporales. Para leer más sobre SVR, puedes consultar [este blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Esta [documentación en scikit-learn](https://scikit-learn.org/stable/modules/svm.html) proporciona una explicación más completa sobre las SVM en general, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) y también otros detalles de implementación como las diferentes [funciones kernel](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) que se pueden usar, y sus parámetros. - -## Tarea - -[Un nuevo modelo SVR](assignment.md) - -## Créditos - -[^1]: El texto, código y salida en esta sección fueron contribuidos por [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) -[^2]: El texto, código y salida en esta sección fueron tomados de [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/3-SVR/assignment.md b/translations/es/7-TimeSeries/3-SVR/assignment.md deleted file mode 100644 index 93821ea6..00000000 --- a/translations/es/7-TimeSeries/3-SVR/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Un nuevo modelo SVR - -## Instrucciones [^1] - -Ahora que has construido un modelo SVR, construye uno nuevo con datos frescos (prueba uno de [estos conjuntos de datos de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anota tu trabajo en un cuaderno, visualiza los datos y tu modelo, y prueba su precisión utilizando gráficos apropiados y MAPE. También intenta ajustar los diferentes hiperparámetros y usar diferentes valores para los pasos de tiempo. - -## Rúbrica [^1] - -| Criterios | Ejemplar | Adecuado | Necesita Mejora | -| --------- | ------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------- | -| | Se presenta un cuaderno con un modelo SVR construido, probado y explicado con visualizaciones y precisión indicada. | El cuaderno presentado no está anotado o contiene errores. | Se presenta un cuaderno incompleto | - -[^1]: El texto en esta sección se basó en la [asignación de ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/7-TimeSeries/README.md b/translations/es/7-TimeSeries/README.md deleted file mode 100644 index 80b081ec..00000000 --- a/translations/es/7-TimeSeries/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Introducción a la predicción de series temporales - -¿Qué es la predicción de series temporales? Se trata de predecir eventos futuros analizando las tendencias del pasado. - -## Tema regional: uso de electricidad a nivel mundial ✨ - -En estas dos lecciones, se te presentará la predicción de series temporales, un área algo menos conocida del aprendizaje automático que, no obstante, es extremadamente valiosa para aplicaciones industriales y comerciales, entre otros campos. Aunque las redes neuronales pueden usarse para mejorar la utilidad de estos modelos, los estudiaremos en el contexto del aprendizaje automático clásico, ya que los modelos ayudan a predecir el rendimiento futuro basándose en el pasado. - -Nuestro enfoque regional es el uso eléctrico en el mundo, un conjunto de datos interesante para aprender sobre la predicción del uso futuro de energía basado en patrones de carga pasados. Puedes ver cómo este tipo de predicción puede ser extremadamente útil en un entorno empresarial. - -![red eléctrica](../../../translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.es.jpg) - -Foto por [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) de torres eléctricas en una carretera en Rajasthan en [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## Lecciones - -1. [Introducción a la predicción de series temporales](1-Introduction/README.md) -2. [Construcción de modelos de series temporales ARIMA](2-ARIMA/README.md) -3. [Construcción de un Regresor de Vectores de Soporte para la predicción de series temporales](3-SVR/README.md) - -## Créditos - -"La introducción a la predicción de series temporales" fue escrita con ⚡️ por [Francesca Lazzeri](https://twitter.com/frlazzeri) y [Jen Looper](https://twitter.com/jenlooper). Los notebooks aparecieron por primera vez en línea en el [repositorio "Deep Learning For Time Series" de Azure](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) originalmente escrito por Francesca Lazzeri. La lección de SVR fue escrita por [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/1-QLearning/README.md b/translations/es/8-Reinforcement/1-QLearning/README.md deleted file mode 100644 index 92f08a67..00000000 --- a/translations/es/8-Reinforcement/1-QLearning/README.md +++ /dev/null @@ -1,320 +0,0 @@ -## Introducción al Aprendizaje por Refuerzo y Q-Learning - -![Resumen del refuerzo en el aprendizaje automático en un sketchnote](../../../../translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.es.png) -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -El aprendizaje por refuerzo implica tres conceptos importantes: el agente, algunos estados y un conjunto de acciones por estado. Al ejecutar una acción en un estado especificado, el agente recibe una recompensa. Imagina de nuevo el videojuego Super Mario. Eres Mario, estás en un nivel del juego, parado al borde de un acantilado. Encima de ti hay una moneda. Tú, siendo Mario, en un nivel del juego, en una posición específica... ese es tu estado. Mover un paso a la derecha (una acción) te llevará al borde y te daría una puntuación baja. Sin embargo, presionar el botón de salto te permitiría obtener un punto y seguirías vivo. Ese es un resultado positivo y debería otorgarte una puntuación numérica positiva. - -Usando el aprendizaje por refuerzo y un simulador (el juego), puedes aprender a jugar el juego para maximizar la recompensa, que es mantenerte vivo y obtener tantos puntos como sea posible. - -[![Intro al Aprendizaje por Refuerzo](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) - -> 🎥 Haz clic en la imagen de arriba para escuchar a Dmitry hablar sobre el Aprendizaje por Refuerzo - -## [Cuestionario antes de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/) - -## Requisitos y Configuración - -En esta lección, experimentaremos con algo de código en Python. Deberías poder ejecutar el código del Jupyter Notebook de esta lección, ya sea en tu computadora o en algún lugar en la nube. - -Puedes abrir [el notebook de la lección](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) y seguir esta lección para construir. - -> **Nota:** Si estás abriendo este código desde la nube, también necesitas obtener el archivo [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), que se usa en el código del notebook. Agrégalo al mismo directorio que el notebook. - -## Introducción - -En esta lección, exploraremos el mundo de **[Pedro y el lobo](https://es.wikipedia.org/wiki/Pedro_y_el_lobo)**, inspirado en un cuento musical de hadas por un compositor ruso, [Sergei Prokofiev](https://es.wikipedia.org/wiki/Serguéi_Prokófiev). Usaremos **Aprendizaje por Refuerzo** para permitir que Pedro explore su entorno, recoja manzanas sabrosas y evite encontrarse con el lobo. - -El **Aprendizaje por Refuerzo** (RL) es una técnica de aprendizaje que nos permite aprender un comportamiento óptimo de un **agente** en algún **entorno** mediante la ejecución de muchos experimentos. Un agente en este entorno debe tener algún **objetivo**, definido por una **función de recompensa**. - -## El entorno - -Para simplificar, consideremos que el mundo de Pedro es un tablero cuadrado de tamaño `width` x `height`, como este: - -![Entorno de Pedro](../../../../translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.es.png) - -Cada celda en este tablero puede ser: - -* **suelo**, sobre el cual Pedro y otras criaturas pueden caminar. -* **agua**, sobre la cual obviamente no se puede caminar. -* un **árbol** o **hierba**, un lugar donde puedes descansar. -* una **manzana**, que representa algo que Pedro estaría encantado de encontrar para alimentarse. -* un **lobo**, que es peligroso y debe evitarse. - -Hay un módulo de Python separado, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), que contiene el código para trabajar con este entorno. Debido a que este código no es importante para entender nuestros conceptos, importaremos el módulo y lo usaremos para crear el tablero de muestra (bloque de código 1): - -```python -from rlboard import * - -width, height = 8,8 -m = Board(width,height) -m.randomize(seed=13) -m.plot() -``` - -Este código debería imprimir una imagen del entorno similar a la anterior. - -## Acciones y política - -En nuestro ejemplo, el objetivo de Pedro sería encontrar una manzana, evitando al lobo y otros obstáculos. Para hacer esto, esencialmente puede caminar hasta encontrar una manzana. - -Por lo tanto, en cualquier posición, puede elegir entre una de las siguientes acciones: arriba, abajo, izquierda y derecha. - -Definiremos esas acciones como un diccionario y las mapearemos a pares de cambios de coordenadas correspondientes. Por ejemplo, moverse a la derecha (`R`) would correspond to a pair `(1,0)`. (bloque de código 2): - -```python -actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } -action_idx = { a : i for i,a in enumerate(actions.keys()) } -``` - -Para resumir, la estrategia y el objetivo de este escenario son los siguientes: - -- **La estrategia** de nuestro agente (Pedro) está definida por una llamada **política**. Una política es una función que devuelve la acción en cualquier estado dado. En nuestro caso, el estado del problema está representado por el tablero, incluyendo la posición actual del jugador. - -- **El objetivo** del aprendizaje por refuerzo es eventualmente aprender una buena política que nos permita resolver el problema de manera eficiente. Sin embargo, como línea base, consideremos la política más simple llamada **caminar aleatorio**. - -## Caminar aleatorio - -Primero resolvamos nuestro problema implementando una estrategia de caminar aleatorio. Con caminar aleatorio, elegiremos aleatoriamente la siguiente acción de las acciones permitidas, hasta que lleguemos a la manzana (bloque de código 3). - -1. Implementa el caminar aleatorio con el siguiente código: - - ```python - def random_policy(m): - return random.choice(list(actions)) - - def walk(m,policy,start_position=None): - n = 0 # number of steps - # set initial position - if start_position: - m.human = start_position - else: - m.random_start() - while True: - if m.at() == Board.Cell.apple: - return n # success! - if m.at() in [Board.Cell.wolf, Board.Cell.water]: - return -1 # eaten by wolf or drowned - while True: - a = actions[policy(m)] - new_pos = m.move_pos(m.human,a) - if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: - m.move(a) # do the actual move - break - n+=1 - - walk(m,random_policy) - ``` - - La llamada a `walk` debería devolver la longitud del camino correspondiente, que puede variar de una ejecución a otra. - -1. Ejecuta el experimento de caminar varias veces (digamos, 100), y imprime las estadísticas resultantes (bloque de código 4): - - ```python - def print_statistics(policy): - s,w,n = 0,0,0 - for _ in range(100): - z = walk(m,policy) - if z<0: - w+=1 - else: - s += z - n += 1 - print(f"Average path length = {s/n}, eaten by wolf: {w} times") - - print_statistics(random_policy) - ``` - - Nota que la longitud promedio de un camino es de alrededor de 30-40 pasos, lo cual es bastante, dado el hecho de que la distancia promedio a la manzana más cercana es de alrededor de 5-6 pasos. - - También puedes ver cómo se ve el movimiento de Pedro durante el caminar aleatorio: - - ![Caminar aleatorio de Pedro](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) - -## Función de recompensa - -Para hacer nuestra política más inteligente, necesitamos entender qué movimientos son "mejores" que otros. Para hacer esto, necesitamos definir nuestro objetivo. - -El objetivo puede definirse en términos de una **función de recompensa**, que devolverá algún valor de puntuación para cada estado. Cuanto mayor sea el número, mejor será la función de recompensa. (bloque de código 5) - -```python -move_reward = -0.1 -goal_reward = 10 -end_reward = -10 - -def reward(m,pos=None): - pos = pos or m.human - if not m.is_valid(pos): - return end_reward - x = m.at(pos) - if x==Board.Cell.water or x == Board.Cell.wolf: - return end_reward - if x==Board.Cell.apple: - return goal_reward - return move_reward -``` - -Una cosa interesante sobre las funciones de recompensa es que en la mayoría de los casos, *solo se nos da una recompensa sustancial al final del juego*. Esto significa que nuestro algoritmo debe recordar de alguna manera los pasos "buenos" que conducen a una recompensa positiva al final, y aumentar su importancia. De manera similar, todos los movimientos que conducen a malos resultados deben desalentarse. - -## Q-Learning - -Un algoritmo que discutiremos aquí se llama **Q-Learning**. En este algoritmo, la política está definida por una función (o una estructura de datos) llamada **Q-Table**. Registra la "bondad" de cada una de las acciones en un estado dado. - -Se llama Q-Table porque a menudo es conveniente representarla como una tabla, o matriz multidimensional. Dado que nuestro tablero tiene dimensiones `width` x `height`, podemos representar la Q-Table usando una matriz numpy con forma `width` x `height` x `len(actions)`: (bloque de código 6) - -```python -Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) -``` - -Nota que inicializamos todos los valores de la Q-Table con un valor igual, en nuestro caso - 0.25. Esto corresponde a la política de "caminar aleatorio", porque todos los movimientos en cada estado son igualmente buenos. Podemos pasar la Q-Table a la `plot` function in order to visualize the table on the board: `m.plot(Q)`. - -![Peter's Environment](../../../../translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.es.png) - -In the center of each cell there is an "arrow" that indicates the preferred direction of movement. Since all directions are equal, a dot is displayed. - -Now we need to run the simulation, explore our environment, and learn a better distribution of Q-Table values, which will allow us to find the path to the apple much faster. - -## Essence of Q-Learning: Bellman Equation - -Once we start moving, each action will have a corresponding reward, i.e. we can theoretically select the next action based on the highest immediate reward. However, in most states, the move will not achieve our goal of reaching the apple, and thus we cannot immediately decide which direction is better. - -> Remember that it is not the immediate result that matters, but rather the final result, which we will obtain at the end of the simulation. - -In order to account for this delayed reward, we need to use the principles of **[dynamic programming](https://en.wikipedia.org/wiki/Dynamic_programming)**, which allow us to think about out problem recursively. - -Suppose we are now at the state *s*, and we want to move to the next state *s'*. By doing so, we will receive the immediate reward *r(s,a)*, defined by the reward function, plus some future reward. If we suppose that our Q-Table correctly reflects the "attractiveness" of each action, then at state *s'* we will chose an action *a* that corresponds to maximum value of *Q(s',a')*. Thus, the best possible future reward we could get at state *s* will be defined as `max`a'*Q(s',a')* (maximum here is computed over all possible actions *a'* at state *s'*). - -This gives the **Bellman formula** for calculating the value of the Q-Table at state *s*, given action *a*: - - - -Here γ is the so-called **discount factor** that determines to which extent you should prefer the current reward over the future reward and vice versa. - -## Learning Algorithm - -Given the equation above, we can now write pseudo-code for our learning algorithm: - -* Initialize Q-Table Q with equal numbers for all states and actions -* Set learning rate α ← 1 -* Repeat simulation many times - 1. Start at random position - 1. Repeat - 1. Select an action *a* at state *s* - 2. Execute action by moving to a new state *s'* - 3. If we encounter end-of-game condition, or total reward is too small - exit simulation - 4. Compute reward *r* at the new state - 5. Update Q-Function according to Bellman equation: *Q(s,a)* ← *(1-α)Q(s,a)+α(r+γ maxa'Q(s',a'))* - 6. *s* ← *s'* - 7. Update the total reward and decrease α. - -## Exploit vs. explore - -In the algorithm above, we did not specify how exactly we should choose an action at step 2.1. If we are choosing the action randomly, we will randomly **explore** the environment, and we are quite likely to die often as well as explore areas where we would not normally go. An alternative approach would be to **exploit** the Q-Table values that we already know, and thus to choose the best action (with higher Q-Table value) at state *s*. This, however, will prevent us from exploring other states, and it's likely we might not find the optimal solution. - -Thus, the best approach is to strike a balance between exploration and exploitation. This can be done by choosing the action at state *s* with probabilities proportional to values in the Q-Table. In the beginning, when Q-Table values are all the same, it would correspond to a random selection, but as we learn more about our environment, we would be more likely to follow the optimal route while allowing the agent to choose the unexplored path once in a while. - -## Python implementation - -We are now ready to implement the learning algorithm. Before we do that, we also need some function that will convert arbitrary numbers in the Q-Table into a vector of probabilities for corresponding actions. - -1. Create a function `probs()`: - - ```python - def probs(v,eps=1e-4): - v = v-v.min()+eps - v = v/v.sum() - return v - ``` - - Agregamos algunos `eps` al vector original para evitar la división por 0 en el caso inicial, cuando todos los componentes del vector son idénticos. - -Ejecuta el algoritmo de aprendizaje a través de 5000 experimentos, también llamados **épocas**: (bloque de código 8) -```python - for epoch in range(5000): - - # Pick initial point - m.random_start() - - # Start travelling - n=0 - cum_reward = 0 - while True: - x,y = m.human - v = probs(Q[x,y]) - a = random.choices(list(actions),weights=v)[0] - dpos = actions[a] - m.move(dpos,check_correctness=False) # we allow player to move outside the board, which terminates episode - r = reward(m) - cum_reward += r - if r==end_reward or cum_reward < -1000: - lpath.append(n) - break - alpha = np.exp(-n / 10e5) - gamma = 0.5 - ai = action_idx[a] - Q[x,y,ai] = (1 - alpha) * Q[x,y,ai] + alpha * (r + gamma * Q[x+dpos[0], y+dpos[1]].max()) - n+=1 -``` - -Después de ejecutar este algoritmo, la Q-Table debería actualizarse con valores que definan la atractividad de diferentes acciones en cada paso. Podemos intentar visualizar la Q-Table dibujando un vector en cada celda que apunte en la dirección deseada del movimiento. Para simplificar, dibujamos un pequeño círculo en lugar de una punta de flecha. -Estás entrenado con datos hasta octubre de 2023. - -## Verificando la política - -Dado que la Q-Table enumera la "atractividad" de cada acción en cada estado, es bastante fácil usarla para definir la navegación eficiente en nuestro mundo. En el caso más simple, podemos seleccionar la acción correspondiente al valor más alto de la Q-Table: (bloque de código 9) - -```python -def qpolicy_strict(m): - x,y = m.human - v = probs(Q[x,y]) - a = list(actions)[np.argmax(v)] - return a - -walk(m,qpolicy_strict) -``` - -> Si intentas el código anterior varias veces, puedes notar que a veces se "cuelga", y necesitas presionar el botón de DETENER en el notebook para interrumpirlo. Esto sucede porque podría haber situaciones en las que dos estados "señalen" entre sí en términos de Q-Value óptimo, en cuyo caso el agente termina moviéndose entre esos estados indefinidamente. - -## 🚀Desafío - -> **Tarea 1:** Modifica el `walk` function to limit the maximum length of path by a certain number of steps (say, 100), and watch the code above return this value from time to time. - -> **Task 2:** Modify the `walk` function so that it does not go back to the places where it has already been previously. This will prevent `walk` from looping, however, the agent can still end up being "trapped" in a location from which it is unable to escape. - -## Navigation - -A better navigation policy would be the one that we used during training, which combines exploitation and exploration. In this policy, we will select each action with a certain probability, proportional to the values in the Q-Table. This strategy may still result in the agent returning back to a position it has already explored, but, as you can see from the code below, it results in a very short average path to the desired location (remember that `print_statistics` ejecuta la simulación 100 veces): (bloque de código 10) - -```python -def qpolicy(m): - x,y = m.human - v = probs(Q[x,y]) - a = random.choices(list(actions),weights=v)[0] - return a - -print_statistics(qpolicy) -``` - -Después de ejecutar este código, deberías obtener una longitud promedio de camino mucho menor que antes, en el rango de 3-6. - -## Investigando el proceso de aprendizaje - -Como hemos mencionado, el proceso de aprendizaje es un equilibrio entre la exploración y la explotación del conocimiento adquirido sobre la estructura del espacio del problema. Hemos visto que los resultados del aprendizaje (la capacidad de ayudar a un agente a encontrar un camino corto hacia el objetivo) han mejorado, pero también es interesante observar cómo se comporta la longitud promedio del camino durante el proceso de aprendizaje: - -Las conclusiones se pueden resumir como: - -- **La longitud promedio del camino aumenta**. Lo que vemos aquí es que al principio, la longitud promedio del camino aumenta. Esto probablemente se deba al hecho de que cuando no sabemos nada sobre el entorno, es probable que quedemos atrapados en estados malos, agua o lobo. A medida que aprendemos más y comenzamos a usar este conocimiento, podemos explorar el entorno por más tiempo, pero aún no sabemos muy bien dónde están las manzanas. - -- **La longitud del camino disminuye, a medida que aprendemos más**. Una vez que aprendemos lo suficiente, se vuelve más fácil para el agente lograr el objetivo, y la longitud del camino comienza a disminuir. Sin embargo, todavía estamos abiertos a la exploración, por lo que a menudo nos desviamos del mejor camino y exploramos nuevas opciones, haciendo que el camino sea más largo de lo óptimo. - -- **La longitud aumenta abruptamente**. Lo que también observamos en este gráfico es que en algún momento, la longitud aumentó abruptamente. Esto indica la naturaleza estocástica del proceso, y que en algún momento podemos "estropear" los coeficientes de la Q-Table sobrescribiéndolos con nuevos valores. Esto idealmente debería minimizarse disminuyendo la tasa de aprendizaje (por ejemplo, hacia el final del entrenamiento, solo ajustamos los valores de la Q-Table por un pequeño valor). - -En general, es importante recordar que el éxito y la calidad del proceso de aprendizaje dependen significativamente de los parámetros, como la tasa de aprendizaje, la disminución de la tasa de aprendizaje y el factor de descuento. Estos a menudo se llaman **hiperparámetros**, para distinguirlos de **parámetros**, que optimizamos durante el entrenamiento (por ejemplo, coeficientes de la Q-Table). El proceso de encontrar los mejores valores de hiperparámetros se llama **optimización de hiperparámetros**, y merece un tema aparte. - -## [Cuestionario después de la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) - -## Asignación -[Un Mundo Más Realista](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/1-QLearning/assignment.md b/translations/es/8-Reinforcement/1-QLearning/assignment.md deleted file mode 100644 index 67cdc23f..00000000 --- a/translations/es/8-Reinforcement/1-QLearning/assignment.md +++ /dev/null @@ -1,30 +0,0 @@ -# Un Mundo Más Realista - -En nuestra situación, Peter podía moverse casi sin cansarse ni tener hambre. En un mundo más realista, tiene que sentarse y descansar de vez en cuando, y también alimentarse. Hagamos nuestro mundo más realista implementando las siguientes reglas: - -1. Al moverse de un lugar a otro, Peter pierde **energía** y gana algo de **fatiga**. -2. Peter puede ganar más energía comiendo manzanas. -3. Peter puede deshacerse de la fatiga descansando bajo el árbol o en el césped (es decir, caminando hacia una ubicación en el tablero con un árbol o césped - campo verde). -4. Peter necesita encontrar y matar al lobo. -5. Para matar al lobo, Peter necesita tener ciertos niveles de energía y fatiga, de lo contrario pierde la batalla. - -## Instrucciones - -Usa el cuaderno original [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) como punto de partida para tu solución. - -Modifica la función de recompensa anterior de acuerdo con las reglas del juego, ejecuta el algoritmo de aprendizaje por refuerzo para aprender la mejor estrategia para ganar el juego y compara los resultados del paseo aleatorio con tu algoritmo en términos de número de juegos ganados y perdidos. - -> **Note**: En tu nuevo mundo, el estado es más complejo y, además de la posición del humano, también incluye los niveles de fatiga y energía. Puedes elegir representar el estado como una tupla (Board, energy, fatigue), o definir una clase para el estado (también puedes derivarla de `Board`), o incluso modificar la clase original `Board` dentro de [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). - -En tu solución, por favor mantén el código responsable de la estrategia de paseo aleatorio y compara los resultados de tu algoritmo con el paseo aleatorio al final. - -> **Note**: Es posible que necesites ajustar los hiperparámetros para que funcione, especialmente el número de épocas. Debido a que el éxito del juego (luchar contra el lobo) es un evento raro, puedes esperar un tiempo de entrenamiento mucho más largo. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | -| | Se presenta un cuaderno con la definición de las nuevas reglas del mundo, el algoritmo de Q-Learning y algunas explicaciones textuales. Q-Learning es capaz de mejorar significativamente los resultados en comparación con el paseo aleatorio. | Se presenta un cuaderno, se implementa Q-Learning y mejora los resultados en comparación con el paseo aleatorio, pero no significativamente; o el cuaderno está mal documentado y el código no está bien estructurado. | Se hace algún intento de redefinir las reglas del mundo, pero el algoritmo de Q-Learning no funciona, o la función de recompensa no está completamente definida. | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/es/8-Reinforcement/1-QLearning/solution/Julia/README.md deleted file mode 100644 index d42dd876..00000000 --- a/translations/es/8-Reinforcement/1-QLearning/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/es/8-Reinforcement/1-QLearning/solution/R/README.md deleted file mode 100644 index 2920cc9c..00000000 --- a/translations/es/8-Reinforcement/1-QLearning/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/2-Gym/README.md b/translations/es/8-Reinforcement/2-Gym/README.md deleted file mode 100644 index 3b3c4ad0..00000000 --- a/translations/es/8-Reinforcement/2-Gym/README.md +++ /dev/null @@ -1,342 +0,0 @@ -## CartPole Patinaje - -El problema que hemos estado resolviendo en la lección anterior podría parecer un problema de juguete, no realmente aplicable a escenarios de la vida real. Este no es el caso, porque muchos problemas del mundo real también comparten este escenario, incluyendo jugar al Ajedrez o al Go. Son similares, porque también tenemos un tablero con reglas dadas y un **estado discreto**. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/47/) - -## Introducción - -En esta lección aplicaremos los mismos principios de Q-Learning a un problema con **estado continuo**, es decir, un estado que se da por uno o más números reales. Abordaremos el siguiente problema: - -> **Problema**: Si Peter quiere escapar del lobo, necesita poder moverse más rápido. Veremos cómo Peter puede aprender a patinar, en particular, a mantener el equilibrio, utilizando Q-Learning. - -![¡La gran escapada!](../../../../translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.es.png) - -> ¡Peter y sus amigos se ponen creativos para escapar del lobo! Imagen de [Jen Looper](https://twitter.com/jenlooper) - -Usaremos una versión simplificada del equilibrio conocida como el problema **CartPole**. En el mundo de CartPole, tenemos un deslizador horizontal que puede moverse hacia la izquierda o hacia la derecha, y el objetivo es equilibrar un poste vertical sobre el deslizador. - -## Requisitos previos - -En esta lección, utilizaremos una biblioteca llamada **OpenAI Gym** para simular diferentes **entornos**. Puedes ejecutar el código de esta lección localmente (por ejemplo, desde Visual Studio Code), en cuyo caso la simulación se abrirá en una nueva ventana. Al ejecutar el código en línea, es posible que necesites hacer algunos ajustes en el código, como se describe [aquí](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). - -## OpenAI Gym - -En la lección anterior, las reglas del juego y el estado fueron dados por la clase `Board` que definimos nosotros mismos. Aquí utilizaremos un **entorno de simulación** especial, que simulará la física detrás del poste en equilibrio. Uno de los entornos de simulación más populares para entrenar algoritmos de aprendizaje por refuerzo se llama [Gym](https://gym.openai.com/), que es mantenido por [OpenAI](https://openai.com/). Usando este gym, podemos crear diferentes **entornos** desde una simulación de CartPole hasta juegos de Atari. - -> **Nota**: Puedes ver otros entornos disponibles en OpenAI Gym [aquí](https://gym.openai.com/envs/#classic_control). - -Primero, instalemos el gym e importemos las bibliotecas requeridas (bloque de código 1): - -```python -import sys -!{sys.executable} -m pip install gym - -import gym -import matplotlib.pyplot as plt -import numpy as np -import random -``` - -## Ejercicio - inicializar un entorno de CartPole - -Para trabajar con un problema de equilibrio de CartPole, necesitamos inicializar el entorno correspondiente. Cada entorno está asociado con: - -- **Espacio de observación** que define la estructura de la información que recibimos del entorno. Para el problema de CartPole, recibimos la posición del poste, la velocidad y otros valores. - -- **Espacio de acción** que define las posibles acciones. En nuestro caso, el espacio de acción es discreto y consta de dos acciones: **izquierda** y **derecha**. (bloque de código 2) - -1. Para inicializar, escribe el siguiente código: - - ```python - env = gym.make("CartPole-v1") - print(env.action_space) - print(env.observation_space) - print(env.action_space.sample()) - ``` - -Para ver cómo funciona el entorno, ejecutemos una simulación corta de 100 pasos. En cada paso, proporcionamos una de las acciones a realizar; en esta simulación simplemente seleccionamos aleatoriamente una acción de `action_space`. - -1. Ejecuta el código a continuación y observa qué sucede. - - ✅ Recuerda que es preferible ejecutar este código en una instalación local de Python. (bloque de código 3) - - ```python - env.reset() - - for i in range(100): - env.render() - env.step(env.action_space.sample()) - env.close() - ``` - - Deberías estar viendo algo similar a esta imagen: - - ![CartPole sin equilibrio](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) - -1. Durante la simulación, necesitamos obtener observaciones para decidir cómo actuar. De hecho, la función step devuelve las observaciones actuales, una función de recompensa y una bandera de finalización que indica si tiene sentido continuar la simulación o no: (bloque de código 4) - - ```python - env.reset() - - done = False - while not done: - env.render() - obs, rew, done, info = env.step(env.action_space.sample()) - print(f"{obs} -> {rew}") - env.close() - ``` - - Terminarás viendo algo como esto en la salida del notebook: - - ```text - [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 - [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 - [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 - [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 - [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 - ... - [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 - [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 - ``` - - El vector de observación que se devuelve en cada paso de la simulación contiene los siguientes valores: - - Posición del carrito - - Velocidad del carrito - - Ángulo del poste - - Tasa de rotación del poste - -1. Obtén el valor mínimo y máximo de esos números: (bloque de código 5) - - ```python - print(env.observation_space.low) - print(env.observation_space.high) - ``` - - También puedes notar que el valor de recompensa en cada paso de la simulación es siempre 1. Esto se debe a que nuestro objetivo es sobrevivir el mayor tiempo posible, es decir, mantener el poste en una posición razonablemente vertical durante el mayor tiempo posible. - - ✅ De hecho, la simulación de CartPole se considera resuelta si logramos obtener una recompensa promedio de 195 durante 100 pruebas consecutivas. - -## Discretización del estado - -En Q-Learning, necesitamos construir una Q-Table que defina qué hacer en cada estado. Para poder hacer esto, necesitamos que el estado sea **discreto**, más precisamente, debe contener un número finito de valores discretos. Por lo tanto, necesitamos de alguna manera **discretizar** nuestras observaciones, mapeándolas a un conjunto finito de estados. - -Hay algunas formas de hacer esto: - -- **Dividir en contenedores**. Si conocemos el intervalo de un cierto valor, podemos dividir este intervalo en un número de **contenedores**, y luego reemplazar el valor por el número del contenedor al que pertenece. Esto se puede hacer utilizando el método [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) de numpy. En este caso, conoceremos precisamente el tamaño del estado, porque dependerá del número de contenedores que seleccionemos para la digitalización. - -✅ Podemos usar la interpolación lineal para llevar los valores a un intervalo finito (digamos, de -20 a 20), y luego convertir los números en enteros redondeándolos. Esto nos da un poco menos de control sobre el tamaño del estado, especialmente si no conocemos los rangos exactos de los valores de entrada. Por ejemplo, en nuestro caso, 2 de los 4 valores no tienen límites superiores/inferiores en sus valores, lo que puede resultar en un número infinito de estados. - -En nuestro ejemplo, utilizaremos el segundo enfoque. Como puedes notar más adelante, a pesar de los límites superiores/inferiores indefinidos, esos valores rara vez toman valores fuera de ciertos intervalos finitos, por lo que esos estados con valores extremos serán muy raros. - -1. Aquí está la función que tomará la observación de nuestro modelo y producirá una tupla de 4 valores enteros: (bloque de código 6) - - ```python - def discretize(x): - return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) - ``` - -1. Exploremos también otro método de discretización utilizando contenedores: (bloque de código 7) - - ```python - def create_bins(i,num): - return np.arange(num+1)*(i[1]-i[0])/num+i[0] - - print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) - - ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter - nbins = [20,20,10,10] # number of bins for each parameter - bins = [create_bins(ints[i],nbins[i]) for i in range(4)] - - def discretize_bins(x): - return tuple(np.digitize(x[i],bins[i]) for i in range(4)) - ``` - -1. Ahora ejecutemos una simulación corta y observemos esos valores discretos del entorno. Siéntete libre de probar ambos `discretize` and `discretize_bins` y ver si hay alguna diferencia. - - ✅ discretize_bins devuelve el número del contenedor, que es basado en 0. Por lo tanto, para valores de la variable de entrada alrededor de 0, devuelve el número del medio del intervalo (10). En discretize, no nos preocupamos por el rango de valores de salida, permitiéndoles ser negativos, por lo que los valores del estado no están desplazados, y 0 corresponde a 0. (bloque de código 8) - - ```python - env.reset() - - done = False - while not done: - #env.render() - obs, rew, done, info = env.step(env.action_space.sample()) - #print(discretize_bins(obs)) - print(discretize(obs)) - env.close() - ``` - - ✅ Descomenta la línea que comienza con env.render si deseas ver cómo se ejecuta el entorno. De lo contrario, puedes ejecutarlo en segundo plano, lo cual es más rápido. Usaremos esta ejecución "invisible" durante nuestro proceso de Q-Learning. - -## La estructura de la Q-Table - -En nuestra lección anterior, el estado era un simple par de números del 0 al 8, y por lo tanto era conveniente representar la Q-Table con un tensor numpy con una forma de 8x8x2. Si usamos la discretización de contenedores, el tamaño de nuestro vector de estado también es conocido, por lo que podemos usar el mismo enfoque y representar el estado con un array de forma 20x20x10x10x2 (aquí 2 es la dimensión del espacio de acción, y las primeras dimensiones corresponden al número de contenedores que hemos seleccionado para usar para cada uno de los parámetros en el espacio de observación). - -Sin embargo, a veces las dimensiones precisas del espacio de observación no son conocidas. En el caso de la función `discretize`, nunca podemos estar seguros de que nuestro estado se mantenga dentro de ciertos límites, porque algunos de los valores originales no están limitados. Por lo tanto, usaremos un enfoque ligeramente diferente y representaremos la Q-Table con un diccionario. - -1. Usa el par *(estado, acción)* como la clave del diccionario, y el valor correspondería al valor de entrada de la Q-Table. (bloque de código 9) - - ```python - Q = {} - actions = (0,1) - - def qvalues(state): - return [Q.get((state,a),0) for a in actions] - ``` - - Aquí también definimos una función `qvalues()`, que devuelve una lista de valores de la Q-Table para un estado dado que corresponde a todas las posibles acciones. Si la entrada no está presente en la Q-Table, devolveremos 0 como valor predeterminado. - -## Comencemos con el Q-Learning - -¡Ahora estamos listos para enseñar a Peter a mantener el equilibrio! - -1. Primero, establezcamos algunos hiperparámetros: (bloque de código 10) - - ```python - # hyperparameters - alpha = 0.3 - gamma = 0.9 - epsilon = 0.90 - ``` - - Aquí, `alpha` is the **learning rate** that defines to which extent we should adjust the current values of Q-Table at each step. In the previous lesson we started with 1, and then decreased `alpha` to lower values during training. In this example we will keep it constant just for simplicity, and you can experiment with adjusting `alpha` values later. - - `gamma` is the **discount factor** that shows to which extent we should prioritize future reward over current reward. - - `epsilon` is the **exploration/exploitation factor** that determines whether we should prefer exploration to exploitation or vice versa. In our algorithm, we will in `epsilon` percent of the cases select the next action according to Q-Table values, and in the remaining number of cases we will execute a random action. This will allow us to explore areas of the search space that we have never seen before. - - ✅ In terms of balancing - choosing random action (exploration) would act as a random punch in the wrong direction, and the pole would have to learn how to recover the balance from those "mistakes" - -### Improve the algorithm - -We can also make two improvements to our algorithm from the previous lesson: - -- **Calculate average cumulative reward**, over a number of simulations. We will print the progress each 5000 iterations, and we will average out our cumulative reward over that period of time. It means that if we get more than 195 point - we can consider the problem solved, with even higher quality than required. - -- **Calculate maximum average cumulative result**, `Qmax`, and we will store the Q-Table corresponding to that result. When you run the training you will notice that sometimes the average cumulative result starts to drop, and we want to keep the values of Q-Table that correspond to the best model observed during training. - -1. Collect all cumulative rewards at each simulation at `rewards` vector para su posterior representación gráfica. (bloque de código 11) - - ```python - def probs(v,eps=1e-4): - v = v-v.min()+eps - v = v/v.sum() - return v - - Qmax = 0 - cum_rewards = [] - rewards = [] - for epoch in range(100000): - obs = env.reset() - done = False - cum_reward=0 - # == do the simulation == - while not done: - s = discretize(obs) - if random.random() Qmax: - Qmax = np.average(cum_rewards) - Qbest = Q - cum_rewards=[] - ``` - -Lo que puedes notar de esos resultados: - -- **Cerca de nuestro objetivo**. Estamos muy cerca de alcanzar el objetivo de obtener 195 recompensas acumuladas en más de 100 ejecuciones consecutivas de la simulación, ¡o podríamos haberlo logrado! Incluso si obtenemos números más pequeños, aún no lo sabemos, porque promediamos sobre 5000 ejecuciones, y solo se requieren 100 ejecuciones en el criterio formal. - -- **La recompensa comienza a disminuir**. A veces la recompensa comienza a disminuir, lo que significa que podemos "destruir" valores ya aprendidos en la Q-Table con los que empeoran la situación. - -Esta observación es más claramente visible si graficamos el progreso del entrenamiento. - -## Graficando el progreso del entrenamiento - -Durante el entrenamiento, hemos recopilado el valor de recompensa acumulada en cada una de las iteraciones en el vector `rewards`. Así es como se ve cuando lo graficamos contra el número de iteración: - -```python -plt.plot(rewards) -``` - -![progreso bruto](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.es.png) - -De este gráfico, no es posible decir nada, porque debido a la naturaleza del proceso de entrenamiento estocástico, la duración de las sesiones de entrenamiento varía mucho. Para darle más sentido a este gráfico, podemos calcular el **promedio móvil** sobre una serie de experimentos, digamos 100. Esto se puede hacer convenientemente usando `np.convolve`: (bloque de código 12) - -```python -def running_average(x,window): - return np.convolve(x,np.ones(window)/window,mode='valid') - -plt.plot(running_average(rewards,100)) -``` - -![progreso del entrenamiento](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.es.png) - -## Variando los hiperparámetros - -Para hacer el aprendizaje más estable, tiene sentido ajustar algunos de nuestros hiperparámetros durante el entrenamiento. En particular: - -- **Para la tasa de aprendizaje**, `alpha`, we may start with values close to 1, and then keep decreasing the parameter. With time, we will be getting good probability values in the Q-Table, and thus we should be adjusting them slightly, and not overwriting completely with new values. - -- **Increase epsilon**. We may want to increase the `epsilon` slowly, in order to explore less and exploit more. It probably makes sense to start with lower value of `epsilon`, y subir hasta casi 1. - -> **Tarea 1**: Juega con los valores de los hiperparámetros y ve si puedes lograr una mayor recompensa acumulada. ¿Estás obteniendo más de 195? - -> **Tarea 2**: Para resolver formalmente el problema, necesitas obtener una recompensa promedio de 195 en 100 ejecuciones consecutivas. Mide eso durante el entrenamiento y asegúrate de haber resuelto formalmente el problema. - -## Viendo el resultado en acción - -Sería interesante ver cómo se comporta el modelo entrenado. Ejecutemos la simulación y sigamos la misma estrategia de selección de acciones que durante el entrenamiento, muestreando según la distribución de probabilidad en la Q-Table: (bloque de código 13) - -```python -obs = env.reset() -done = False -while not done: - s = discretize(obs) - env.render() - v = probs(np.array(qvalues(s))) - a = random.choices(actions,weights=v)[0] - obs,_,done,_ = env.step(a) -env.close() -``` - -Deberías ver algo como esto: - -![un CartPole equilibrado](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) - ---- - -## 🚀Desafío - -> **Tarea 3**: Aquí, estábamos usando la copia final de la Q-Table, que puede no ser la mejor. Recuerda que hemos almacenado la Q-Table con mejor rendimiento en `Qbest` variable! Try the same example with the best-performing Q-Table by copying `Qbest` over to `Q` and see if you notice the difference. - -> **Task 4**: Here we were not selecting the best action on each step, but rather sampling with corresponding probability distribution. Would it make more sense to always select the best action, with the highest Q-Table value? This can be done by using `np.argmax` para encontrar el número de acción correspondiente al valor más alto de la Q-Table. Implementa esta estrategia y ve si mejora el equilibrio. - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) - -## Tarea -[Entrena un Mountain Car](assignment.md) - -## Conclusión - -Ahora hemos aprendido cómo entrenar agentes para lograr buenos resultados simplemente proporcionándoles una función de recompensa que define el estado deseado del juego, y dándoles la oportunidad de explorar inteligentemente el espacio de búsqueda. Hemos aplicado con éxito el algoritmo de Q-Learning en los casos de entornos discretos y continuos, pero con acciones discretas. - -Es importante también estudiar situaciones donde el estado de la acción también es continuo, y cuando el espacio de observación es mucho más complejo, como la imagen de la pantalla del juego de Atari. En esos problemas a menudo necesitamos usar técnicas de aprendizaje automático más poderosas, como redes neuronales, para lograr buenos resultados. Esos temas más avanzados son el tema de nuestro próximo curso más avanzado de IA. - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/2-Gym/assignment.md b/translations/es/8-Reinforcement/2-Gym/assignment.md deleted file mode 100644 index e240f5c4..00000000 --- a/translations/es/8-Reinforcement/2-Gym/assignment.md +++ /dev/null @@ -1,43 +0,0 @@ -# Entrenar Mountain Car - -[OpenAI Gym](http://gym.openai.com) ha sido diseñado de tal manera que todos los entornos proporcionan la misma API - es decir, los mismos métodos `reset`, `step` y `render`, y las mismas abstracciones de **espacio de acción** y **espacio de observación**. Por lo tanto, debería ser posible adaptar los mismos algoritmos de aprendizaje por refuerzo a diferentes entornos con mínimos cambios en el código. - -## Un Entorno de Mountain Car - -El [entorno de Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) contiene un coche atrapado en un valle: -El objetivo es salir del valle y capturar la bandera, realizando en cada paso una de las siguientes acciones: - -| Valor | Significado | -|---|---| -| 0 | Acelerar hacia la izquierda | -| 1 | No acelerar | -| 2 | Acelerar hacia la derecha | - -El truco principal de este problema es, sin embargo, que el motor del coche no es lo suficientemente fuerte como para escalar la montaña en un solo intento. Por lo tanto, la única manera de tener éxito es conducir de un lado a otro para acumular impulso. - -El espacio de observación consta de solo dos valores: - -| Num | Observación | Mín | Máx | -|-----|--------------|-----|-----| -| 0 | Posición del coche | -1.2| 0.6 | -| 1 | Velocidad del coche | -0.07 | 0.07 | - -El sistema de recompensas para el coche de montaña es bastante complicado: - - * Se otorga una recompensa de 0 si el agente alcanza la bandera (posición = 0.5) en la cima de la montaña. - * Se otorga una recompensa de -1 si la posición del agente es menor que 0.5. - -El episodio termina si la posición del coche es mayor que 0.5, o si la duración del episodio es mayor que 200. -## Instrucciones - -Adapta nuestro algoritmo de aprendizaje por refuerzo para resolver el problema del coche de montaña. Comienza con el código existente en [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), sustituye el nuevo entorno, cambia las funciones de discretización del estado, e intenta hacer que el algoritmo existente entrene con mínimas modificaciones de código. Optimiza el resultado ajustando los hiperparámetros. - -> **Nota**: Es probable que sea necesario ajustar los hiperparámetros para que el algoritmo converja. -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------- | -------- | ---------------- | -| | El algoritmo Q-Learning se adapta exitosamente desde el ejemplo de CartPole, con mínimas modificaciones de código, y es capaz de resolver el problema de capturar la bandera en menos de 200 pasos. | Se ha adoptado un nuevo algoritmo Q-Learning de Internet, pero está bien documentado; o se ha adoptado el algoritmo existente, pero no alcanza los resultados deseados. | El estudiante no pudo adoptar exitosamente ningún algoritmo, pero ha dado pasos sustanciales hacia la solución (implementó discretización del estado, estructura de datos Q-Table, etc.) | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/es/8-Reinforcement/2-Gym/solution/Julia/README.md deleted file mode 100644 index c0099743..00000000 --- a/translations/es/8-Reinforcement/2-Gym/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática por inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/2-Gym/solution/R/README.md b/translations/es/8-Reinforcement/2-Gym/solution/R/README.md deleted file mode 100644 index f2cb375d..00000000 --- a/translations/es/8-Reinforcement/2-Gym/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/8-Reinforcement/README.md b/translations/es/8-Reinforcement/README.md deleted file mode 100644 index b0b4ed22..00000000 --- a/translations/es/8-Reinforcement/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# Introducción al aprendizaje por refuerzo - -El aprendizaje por refuerzo, RL, es visto como uno de los paradigmas básicos del aprendizaje automático, junto con el aprendizaje supervisado y el aprendizaje no supervisado. RL trata sobre decisiones: tomar las decisiones correctas o al menos aprender de ellas. - -Imagina que tienes un entorno simulado como el mercado de valores. ¿Qué pasa si impones una regulación determinada? ¿Tiene un efecto positivo o negativo? Si ocurre algo negativo, necesitas tomar este _refuerzo negativo_, aprender de él y cambiar de rumbo. Si es un resultado positivo, necesitas construir sobre ese _refuerzo positivo_. - -![Pedro y el lobo](../../../translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.es.png) - -> ¡Pedro y sus amigos necesitan escapar del lobo hambriento! Imagen por [Jen Looper](https://twitter.com/jenlooper) - -## Tema regional: Pedro y el lobo (Rusia) - -[Pedro y el lobo](https://es.wikipedia.org/wiki/Pedro_y_el_lobo) es un cuento musical escrito por el compositor ruso [Sergei Prokofiev](https://es.wikipedia.org/wiki/Serguéi_Prokófiev). Es una historia sobre el joven pionero Pedro, que valientemente sale de su casa hacia el claro del bosque para perseguir al lobo. En esta sección, entrenaremos algoritmos de aprendizaje automático que ayudarán a Pedro: - -- **Explorar** el área circundante y construir un mapa de navegación óptimo. -- **Aprender** a usar una patineta y equilibrarse en ella, para moverse más rápido. - -[![Pedro y el lobo](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 Haz clic en la imagen de arriba para escuchar Pedro y el lobo por Prokofiev - -## Aprendizaje por refuerzo - -En secciones anteriores, has visto dos ejemplos de problemas de aprendizaje automático: - -- **Supervisado**, donde tenemos conjuntos de datos que sugieren soluciones de muestra al problema que queremos resolver. [Clasificación](../4-Classification/README.md) y [regresión](../2-Regression/README.md) son tareas de aprendizaje supervisado. -- **No supervisado**, en el cual no tenemos datos de entrenamiento etiquetados. El principal ejemplo de aprendizaje no supervisado es [Agrupamiento](../5-Clustering/README.md). - -En esta sección, te presentaremos un nuevo tipo de problema de aprendizaje que no requiere datos de entrenamiento etiquetados. Hay varios tipos de estos problemas: - -- **[Aprendizaje semi-supervisado](https://es.wikipedia.org/wiki/Aprendizaje_semi-supervisado)**, donde tenemos muchos datos no etiquetados que pueden usarse para pre-entrenar el modelo. -- **[Aprendizaje por refuerzo](https://es.wikipedia.org/wiki/Aprendizaje_por_refuerzo)**, en el cual un agente aprende cómo comportarse realizando experimentos en algún entorno simulado. - -### Ejemplo - juego de computadora - -Supongamos que quieres enseñar a una computadora a jugar un juego, como el ajedrez, o [Super Mario](https://es.wikipedia.org/wiki/Super_Mario). Para que la computadora juegue un juego, necesitamos que prediga qué movimiento hacer en cada uno de los estados del juego. Aunque esto pueda parecer un problema de clasificación, no lo es, porque no tenemos un conjunto de datos con estados y acciones correspondientes. Aunque podamos tener algunos datos como partidas de ajedrez existentes o grabaciones de jugadores jugando Super Mario, es probable que esos datos no cubran suficientemente un número grande de estados posibles. - -En lugar de buscar datos de juego existentes, el **Aprendizaje por Refuerzo** (RL) se basa en la idea de *hacer que la computadora juegue* muchas veces y observar el resultado. Así, para aplicar el Aprendizaje por Refuerzo, necesitamos dos cosas: - -- **Un entorno** y **un simulador** que nos permitan jugar un juego muchas veces. Este simulador definiría todas las reglas del juego, así como los posibles estados y acciones. - -- **Una función de recompensa**, que nos diría qué tan bien lo hicimos durante cada movimiento o juego. - -La principal diferencia entre otros tipos de aprendizaje automático y RL es que en RL típicamente no sabemos si ganamos o perdemos hasta que terminamos el juego. Por lo tanto, no podemos decir si un cierto movimiento solo es bueno o no - solo recibimos una recompensa al final del juego. Y nuestro objetivo es diseñar algoritmos que nos permitan entrenar un modelo bajo condiciones inciertas. Aprenderemos sobre un algoritmo de RL llamado **Q-learning**. - -## Lecciones - -1. [Introducción al aprendizaje por refuerzo y Q-Learning](1-QLearning/README.md) -2. [Uso de un entorno de simulación de gimnasio](2-Gym/README.md) - -## Créditos - -"La Introducción al Aprendizaje por Refuerzo" fue escrita con ♥️ por [Dmitry Soshnikov](http://soshnikov.com) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/9-Real-World/1-Applications/README.md b/translations/es/9-Real-World/1-Applications/README.md deleted file mode 100644 index 853cf7b9..00000000 --- a/translations/es/9-Real-World/1-Applications/README.md +++ /dev/null @@ -1,150 +0,0 @@ -# Posdata: Aprendizaje automático en el mundo real - -![Resumen del aprendizaje automático en el mundo real en un sketchnote](../../../../translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.es.png) -> Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) - -En este plan de estudios, has aprendido muchas formas de preparar datos para el entrenamiento y crear modelos de aprendizaje automático. Construiste una serie de modelos clásicos de regresión, clustering, clasificación, procesamiento de lenguaje natural y series temporales. ¡Felicidades! Ahora, podrías preguntarte para qué sirve todo esto... ¿cuáles son las aplicaciones reales de estos modelos? - -Aunque la inteligencia artificial ha generado mucho interés en la industria, generalmente utilizando aprendizaje profundo, todavía hay aplicaciones valiosas para los modelos clásicos de aprendizaje automático. ¡Incluso podrías estar utilizando algunas de estas aplicaciones hoy en día! En esta lección, explorarás cómo ocho industrias y dominios diferentes utilizan estos tipos de modelos para hacer que sus aplicaciones sean más eficientes, confiables, inteligentes y valiosas para los usuarios. - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) - -## 💰 Finanzas - -El sector financiero ofrece muchas oportunidades para el aprendizaje automático. Muchos problemas en esta área se prestan a ser modelados y resueltos utilizando ML. - -### Detección de fraude con tarjetas de crédito - -Aprendimos sobre [k-means clustering](../../5-Clustering/2-K-Means/README.md) anteriormente en el curso, pero ¿cómo se puede utilizar para resolver problemas relacionados con el fraude con tarjetas de crédito? - -El k-means clustering es útil durante una técnica de detección de fraude con tarjetas de crédito llamada **detección de valores atípicos**. Los valores atípicos, o desviaciones en las observaciones sobre un conjunto de datos, pueden indicarnos si una tarjeta de crédito se está utilizando de manera normal o si algo inusual está ocurriendo. Como se muestra en el artículo enlazado a continuación, puedes clasificar los datos de tarjetas de crédito utilizando un algoritmo de k-means clustering y asignar cada transacción a un clúster según cuán atípica parezca ser. Luego, puedes evaluar los clústeres más riesgosos para transacciones fraudulentas versus legítimas. -[Referencia](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) - -### Gestión de patrimonio - -En la gestión de patrimonio, un individuo o empresa maneja inversiones en nombre de sus clientes. Su trabajo es mantener y hacer crecer la riqueza a largo plazo, por lo que es esencial elegir inversiones que tengan un buen desempeño. - -Una forma de evaluar cómo se desempeña una inversión particular es a través de la regresión estadística. La [regresión lineal](../../2-Regression/1-Tools/README.md) es una herramienta valiosa para entender cómo se desempeña un fondo en relación con algún punto de referencia. También podemos deducir si los resultados de la regresión son estadísticamente significativos o cuánto afectarían las inversiones de un cliente. Incluso podrías expandir tu análisis utilizando regresión múltiple, donde se pueden tener en cuenta factores de riesgo adicionales. Para un ejemplo de cómo esto funcionaría para un fondo específico, consulta el artículo a continuación sobre la evaluación del rendimiento de fondos utilizando regresión. -[Referencia](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) - -## 🎓 Educación - -El sector educativo también es un área muy interesante donde se puede aplicar el ML. Hay problemas interesantes por resolver, como detectar trampas en exámenes o ensayos o gestionar sesgos, intencionados o no, en el proceso de corrección. - -### Predicción del comportamiento estudiantil - -[Coursera](https://coursera.com), un proveedor de cursos abiertos en línea, tiene un excelente blog tecnológico donde discuten muchas decisiones de ingeniería. En este estudio de caso, trazaron una línea de regresión para intentar explorar cualquier correlación entre una baja calificación de NPS (Net Promoter Score) y la retención o abandono del curso. -[Referencia](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) - -### Mitigación de sesgos - -[Grammarly](https://grammarly.com), un asistente de escritura que revisa errores ortográficos y gramaticales, utiliza sofisticados [sistemas de procesamiento de lenguaje natural](../../6-NLP/README.md) en todos sus productos. Publicaron un interesante estudio de caso en su blog tecnológico sobre cómo lidiaron con el sesgo de género en el aprendizaje automático, que aprendiste en nuestra [lección introductoria sobre equidad](../../1-Introduction/3-fairness/README.md). -[Referencia](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) - -## 👜 Retail - -El sector minorista definitivamente puede beneficiarse del uso de ML, desde crear una mejor experiencia del cliente hasta gestionar el inventario de manera óptima. - -### Personalización del recorrido del cliente - -En Wayfair, una empresa que vende artículos para el hogar como muebles, ayudar a los clientes a encontrar los productos adecuados para sus gustos y necesidades es primordial. En este artículo, los ingenieros de la empresa describen cómo utilizan ML y NLP para "mostrar los resultados correctos a los clientes". Notablemente, su Motor de Intención de Consulta ha sido construido para usar extracción de entidades, entrenamiento de clasificadores, extracción de activos y opiniones, y etiquetado de sentimientos en las reseñas de los clientes. Este es un caso clásico de cómo funciona el NLP en el comercio minorista en línea. -[Referencia](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) - -### Gestión de inventario - -Empresas innovadoras y ágiles como [StitchFix](https://stitchfix.com), un servicio de cajas que envía ropa a los consumidores, dependen en gran medida del ML para recomendaciones y gestión de inventario. Sus equipos de estilistas trabajan juntos con sus equipos de comercialización, de hecho: "uno de nuestros científicos de datos experimentó con un algoritmo genético y lo aplicó a la ropa para predecir qué sería una prenda exitosa que no existe hoy. Llevamos eso al equipo de comercialización y ahora pueden usarlo como una herramienta." -[Referencia](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) - -## 🏥 Atención Médica - -El sector de la salud puede aprovechar el ML para optimizar tareas de investigación y también problemas logísticos como la readmisión de pacientes o detener la propagación de enfermedades. - -### Gestión de ensayos clínicos - -La toxicidad en los ensayos clínicos es una gran preocupación para los fabricantes de medicamentos. ¿Cuánta toxicidad es tolerable? En este estudio, el análisis de varios métodos de ensayos clínicos llevó al desarrollo de un nuevo enfoque para predecir las probabilidades de resultados de ensayos clínicos. Específicamente, pudieron usar random forest para producir un [clasificador](../../4-Classification/README.md) que es capaz de distinguir entre grupos de medicamentos. -[Referencia](https://www.sciencedirect.com/science/article/pii/S2451945616302914) - -### Gestión de readmisiones hospitalarias - -La atención hospitalaria es costosa, especialmente cuando los pacientes tienen que ser readmitidos. Este artículo discute una empresa que utiliza ML para predecir el potencial de readmisión utilizando algoritmos de [clustering](../../5-Clustering/README.md). Estos clústeres ayudan a los analistas a "descubrir grupos de readmisiones que pueden compartir una causa común". -[Referencia](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) - -### Gestión de enfermedades - -La reciente pandemia ha puesto de relieve las formas en que el aprendizaje automático puede ayudar a detener la propagación de enfermedades. En este artículo, reconocerás el uso de ARIMA, curvas logísticas, regresión lineal y SARIMA. "Este trabajo es un intento de calcular la tasa de propagación de este virus y, por lo tanto, predecir las muertes, recuperaciones y casos confirmados, para que pueda ayudarnos a prepararnos mejor y sobrevivir." -[Referencia](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) - -## 🌲 Ecología y Tecnología Verde - -La naturaleza y la ecología consisten en muchos sistemas sensibles donde la interacción entre animales y naturaleza entra en foco. Es importante poder medir estos sistemas con precisión y actuar adecuadamente si algo sucede, como un incendio forestal o una disminución en la población animal. - -### Gestión forestal - -Aprendiste sobre el [Aprendizaje por Refuerzo](../../8-Reinforcement/README.md) en lecciones anteriores. Puede ser muy útil al intentar predecir patrones en la naturaleza. En particular, se puede usar para rastrear problemas ecológicos como incendios forestales y la propagación de especies invasoras. En Canadá, un grupo de investigadores utilizó el Aprendizaje por Refuerzo para construir modelos de dinámica de incendios forestales a partir de imágenes satelitales. Utilizando un innovador "proceso de propagación espacial (SSP)", visualizaron un incendio forestal como "el agente en cualquier celda del paisaje". "El conjunto de acciones que el fuego puede tomar desde una ubicación en cualquier momento incluye propagarse hacia el norte, sur, este u oeste o no propagarse." - -Este enfoque invierte la configuración habitual del RL, ya que la dinámica del Proceso de Decisión de Markov (MDP) correspondiente es una función conocida para la propagación inmediata del incendio forestal." Lee más sobre los algoritmos clásicos utilizados por este grupo en el enlace a continuación. -[Referencia](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) - -### Detección de movimiento de animales - -Aunque el aprendizaje profundo ha creado una revolución en el seguimiento visual de los movimientos de los animales (puedes construir tu propio [rastreador de osos polares](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) aquí), el ML clásico todavía tiene un lugar en esta tarea. - -Los sensores para rastrear los movimientos de los animales de granja y el IoT hacen uso de este tipo de procesamiento visual, pero las técnicas más básicas de ML son útiles para preprocesar datos. Por ejemplo, en este artículo, se monitorearon y analizaron las posturas de las ovejas utilizando varios algoritmos de clasificación. Podrías reconocer la curva ROC en la página 335. -[Referencia](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) - -### ⚡️ Gestión de Energía - -En nuestras lecciones sobre [pronóstico de series temporales](../../7-TimeSeries/README.md), invocamos el concepto de parquímetros inteligentes para generar ingresos para una ciudad basándonos en la comprensión de la oferta y la demanda. Este artículo discute en detalle cómo la combinación de clustering, regresión y pronóstico de series temporales ayudó a predecir el uso futuro de energía en Irlanda, basándose en la medición inteligente. -[Referencia](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) - -## 💼 Seguros - -El sector de seguros es otro sector que utiliza ML para construir y optimizar modelos financieros y actuariales viables. - -### Gestión de Volatilidad - -MetLife, un proveedor de seguros de vida, es abierto con la forma en que analizan y mitigan la volatilidad en sus modelos financieros. En este artículo, notarás visualizaciones de clasificación binaria y ordinal. También descubrirás visualizaciones de pronóstico. -[Referencia](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) - -## 🎨 Artes, Cultura y Literatura - -En las artes, por ejemplo en el periodismo, hay muchos problemas interesantes. Detectar noticias falsas es un gran problema, ya que se ha demostrado que influye en la opinión de las personas e incluso puede derribar democracias. Los museos también pueden beneficiarse del uso de ML en todo, desde encontrar vínculos entre artefactos hasta la planificación de recursos. - -### Detección de noticias falsas - -Detectar noticias falsas se ha convertido en un juego del gato y el ratón en los medios de comunicación de hoy. En este artículo, los investigadores sugieren que se puede probar un sistema que combine varias de las técnicas de ML que hemos estudiado y desplegar el mejor modelo: "Este sistema se basa en el procesamiento de lenguaje natural para extraer características de los datos y luego estas características se utilizan para el entrenamiento de clasificadores de aprendizaje automático como Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), y Logistic Regression (LR)." -[Referencia](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) - -Este artículo muestra cómo la combinación de diferentes dominios de ML puede producir resultados interesantes que pueden ayudar a detener la propagación de noticias falsas y crear daños reales; en este caso, el impulso fue la propagación de rumores sobre tratamientos de COVID que incitaron a la violencia de multitudes. - -### ML en museos - -Los museos están en la cúspide de una revolución de IA en la que catalogar y digitalizar colecciones y encontrar vínculos entre artefactos se está volviendo más fácil a medida que avanza la tecnología. Proyectos como [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) están ayudando a desbloquear los misterios de colecciones inaccesibles como los Archivos del Vaticano. Pero, el aspecto comercial de los museos también se beneficia de los modelos de ML. - -Por ejemplo, el Art Institute of Chicago construyó modelos para predecir en qué están interesados los visitantes y cuándo asistirán a las exposiciones. El objetivo es crear experiencias de visita individualizadas y optimizadas cada vez que el usuario visite el museo. "Durante el año fiscal 2017, el modelo predijo la asistencia y las admisiones con un 1 por ciento de precisión, dice Andrew Simnick, vicepresidente senior en el Art Institute." - -[Referencia](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) - -## 🏷 Marketing - -### Segmentación de clientes - -Las estrategias de marketing más efectivas dirigen a los clientes de diferentes maneras basadas en varios agrupamientos. En este artículo, se discuten los usos de los algoritmos de Clustering para apoyar el marketing diferenciado. El marketing diferenciado ayuda a las empresas a mejorar el reconocimiento de la marca, alcanzar a más clientes y ganar más dinero. -[Referencia](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) - -## 🚀 Desafío - -Identifica otro sector que se beneficie de algunas de las técnicas que aprendiste en este currículo y descubre cómo utiliza ML. - -## [Cuestionario post-lectura](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) - -## Revisión y Autoestudio - -El equipo de ciencia de datos de Wayfair tiene varios videos interesantes sobre cómo utilizan ML en su empresa. Vale la pena [echar un vistazo](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! - -## Tarea - -[Una búsqueda del tesoro de ML](assignment.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/9-Real-World/1-Applications/assignment.md b/translations/es/9-Real-World/1-Applications/assignment.md deleted file mode 100644 index 00f9beac..00000000 --- a/translations/es/9-Real-World/1-Applications/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Una Búsqueda del Tesoro de ML - -## Instrucciones - -En esta lección, aprendiste sobre muchos casos de uso en la vida real que se resolvieron utilizando ML clásico. Aunque el uso de deep learning, nuevas técnicas y herramientas en IA, y el aprovechamiento de redes neuronales han ayudado a acelerar la producción de herramientas para ayudar en estos sectores, el ML clásico utilizando las técnicas de este currículo aún tiene un gran valor. - -En esta tarea, imagina que estás participando en un hackathon. Usa lo que aprendiste en el currículo para proponer una solución utilizando ML clásico para resolver un problema en uno de los sectores discutidos en esta lección. Crea una presentación donde discutas cómo implementarás tu idea. ¡Puntos extra si puedes recopilar datos de muestra y construir un modelo de ML para apoyar tu concepto! - -## Rubrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------------------------------------------------------------------- | -------------------------------------------------- | ---------------------- | -| | Se presenta una presentación en PowerPoint - bono por construir un modelo | Se presenta una presentación básica y no innovadora | El trabajo está incompleto | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/9-Real-World/2-Debugging-ML-Models/README.md b/translations/es/9-Real-World/2-Debugging-ML-Models/README.md deleted file mode 100644 index 0432b260..00000000 --- a/translations/es/9-Real-World/2-Debugging-ML-Models/README.md +++ /dev/null @@ -1,158 +0,0 @@ -# Posdata: Depuración de Modelos en Aprendizaje Automático usando Componentes del Tablero de IA Responsable - -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## Introducción - -El aprendizaje automático impacta nuestras vidas cotidianas. La IA está encontrando su camino en algunos de los sistemas más importantes que nos afectan tanto a nivel individual como a nuestra sociedad, desde la atención médica, las finanzas, la educación y el empleo. Por ejemplo, los sistemas y modelos están involucrados en tareas diarias de toma de decisiones, como diagnósticos médicos o la detección de fraudes. En consecuencia, los avances en IA junto con la adopción acelerada están siendo recibidos con expectativas sociales en evolución y una creciente regulación en respuesta. Constantemente vemos áreas donde los sistemas de IA siguen sin cumplir las expectativas; exponen nuevos desafíos; y los gobiernos están comenzando a regular las soluciones de IA. Por lo tanto, es importante que estos modelos sean analizados para proporcionar resultados justos, fiables, inclusivos, transparentes y responsables para todos. - -En este currículo, veremos herramientas prácticas que se pueden usar para evaluar si un modelo tiene problemas de IA responsable. Las técnicas tradicionales de depuración de aprendizaje automático tienden a basarse en cálculos cuantitativos como la precisión agregada o la pérdida de error promedio. Imagina lo que puede suceder cuando los datos que estás utilizando para construir estos modelos carecen de ciertos datos demográficos, como raza, género, visión política, religión, o representan desproporcionadamente estos datos demográficos. ¿Qué pasa cuando la salida del modelo se interpreta para favorecer a algunos demográficos? Esto puede introducir una representación excesiva o insuficiente de estos grupos de características sensibles, resultando en problemas de equidad, inclusión o fiabilidad del modelo. Otro factor es que los modelos de aprendizaje automático se consideran cajas negras, lo que dificulta entender y explicar qué impulsa la predicción de un modelo. Todos estos son desafíos que enfrentan los científicos de datos y desarrolladores de IA cuando no tienen herramientas adecuadas para depurar y evaluar la equidad o confiabilidad de un modelo. - -En esta lección, aprenderás sobre la depuración de tus modelos usando: - -- **Análisis de Errores**: identificar dónde en la distribución de tus datos el modelo tiene altas tasas de error. -- **Visión General del Modelo**: realizar un análisis comparativo entre diferentes cohortes de datos para descubrir disparidades en las métricas de rendimiento de tu modelo. -- **Análisis de Datos**: investigar dónde podría haber una representación excesiva o insuficiente de tus datos que puedan sesgar tu modelo para favorecer a un demográfico de datos sobre otro. -- **Importancia de Características**: entender qué características están impulsando las predicciones de tu modelo a nivel global o local. - -## Requisito previo - -Como requisito previo, revisa [Herramientas de IA Responsable para desarrolladores](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) - -> ![Gif sobre Herramientas de IA Responsable](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) - -## Análisis de Errores - -Las métricas tradicionales de rendimiento del modelo utilizadas para medir la precisión son principalmente cálculos basados en predicciones correctas vs incorrectas. Por ejemplo, determinar que un modelo es preciso el 89% del tiempo con una pérdida de error de 0.001 puede considerarse un buen rendimiento. Los errores a menudo no se distribuyen uniformemente en tu conjunto de datos subyacente. Puedes obtener una puntuación de precisión del modelo del 89%, pero descubrir que hay diferentes regiones de tus datos en las que el modelo falla el 42% del tiempo. La consecuencia de estos patrones de falla con ciertos grupos de datos puede llevar a problemas de equidad o fiabilidad. Es esencial entender las áreas donde el modelo está funcionando bien o no. Las regiones de datos donde hay un alto número de inexactitudes en tu modelo pueden resultar ser un demográfico de datos importante. - -![Analizar y depurar errores del modelo](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.es.png) - -El componente de Análisis de Errores en el tablero de RAI ilustra cómo la falla del modelo se distribuye a través de varios cohortes con una visualización en árbol. Esto es útil para identificar características o áreas donde hay una alta tasa de error en tu conjunto de datos. Al ver de dónde provienen la mayoría de las inexactitudes del modelo, puedes comenzar a investigar la causa raíz. También puedes crear cohortes de datos para realizar análisis. Estos cohortes de datos ayudan en el proceso de depuración para determinar por qué el rendimiento del modelo es bueno en un cohorte, pero erróneo en otro. - -![Análisis de Errores](../../../../translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.es.png) - -Los indicadores visuales en el mapa de árbol ayudan a localizar las áreas problemáticas más rápidamente. Por ejemplo, cuanto más oscuro es el tono de color rojo en un nodo del árbol, mayor es la tasa de error. - -El mapa de calor es otra funcionalidad de visualización que los usuarios pueden usar para investigar la tasa de error usando una o dos características para encontrar un contribuyente a los errores del modelo en todo el conjunto de datos o cohortes. - -![Mapa de calor de Análisis de Errores](../../../../translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.es.png) - -Usa el análisis de errores cuando necesites: - -* Obtener una comprensión profunda de cómo se distribuyen las fallas del modelo en un conjunto de datos y a través de varias dimensiones de entrada y características. -* Desglosar las métricas de rendimiento agregadas para descubrir automáticamente cohortes erróneos que informen tus pasos de mitigación específicos. - -## Visión General del Modelo - -Evaluar el rendimiento de un modelo de aprendizaje automático requiere obtener una comprensión holística de su comportamiento. Esto se puede lograr revisando más de una métrica, como tasa de error, precisión, recall, precisión, o MAE (Error Absoluto Medio) para encontrar disparidades entre las métricas de rendimiento. Una métrica de rendimiento puede verse excelente, pero las inexactitudes pueden exponerse en otra métrica. Además, comparar las métricas por disparidades en todo el conjunto de datos o cohortes ayuda a arrojar luz sobre dónde el modelo está funcionando bien o no. Esto es especialmente importante al ver el rendimiento del modelo entre características sensibles vs insensibles (por ejemplo, raza del paciente, género o edad) para descubrir posibles injusticias que el modelo pueda tener. Por ejemplo, descubrir que el modelo es más erróneo en un cohorte que tiene características sensibles puede revelar posibles injusticias que el modelo pueda tener. - -El componente de Visión General del Modelo del tablero de RAI ayuda no solo a analizar las métricas de rendimiento de la representación de datos en un cohorte, sino que da a los usuarios la capacidad de comparar el comportamiento del modelo entre diferentes cohortes. - -![Cohortes de conjunto de datos - visión general del modelo en el tablero de RAI](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.es.png) - -La funcionalidad de análisis basada en características del componente permite a los usuarios reducir subgrupos de datos dentro de una característica particular para identificar anomalías a nivel granular. Por ejemplo, el tablero tiene inteligencia incorporada para generar automáticamente cohortes para una característica seleccionada por el usuario (por ejemplo, *"time_in_hospital < 3"* o *"time_in_hospital >= 7"*). Esto permite a un usuario aislar una característica particular de un grupo de datos más grande para ver si es un influenciador clave de los resultados erróneos del modelo. - -![Cohortes de características - visión general del modelo en el tablero de RAI](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.es.png) - -El componente de Visión General del Modelo soporta dos clases de métricas de disparidad: - -**Disparidad en el rendimiento del modelo**: Estos conjuntos de métricas calculan la disparidad (diferencia) en los valores de la métrica de rendimiento seleccionada entre subgrupos de datos. Aquí hay algunos ejemplos: - -* Disparidad en la tasa de precisión -* Disparidad en la tasa de error -* Disparidad en la precisión -* Disparidad en el recall -* Disparidad en el error absoluto medio (MAE) - -**Disparidad en la tasa de selección**: Esta métrica contiene la diferencia en la tasa de selección (predicción favorable) entre subgrupos. Un ejemplo de esto es la disparidad en las tasas de aprobación de préstamos. La tasa de selección significa la fracción de puntos de datos en cada clase clasificados como 1 (en clasificación binaria) o la distribución de valores de predicción (en regresión). - -## Análisis de Datos - -> "Si torturas los datos lo suficiente, confesarán cualquier cosa" - Ronald Coase - -Esta declaración suena extrema, pero es cierto que los datos pueden ser manipulados para apoyar cualquier conclusión. Tal manipulación a veces puede ocurrir de manera no intencional. Como humanos, todos tenemos sesgos, y a menudo es difícil saber conscientemente cuándo estás introduciendo sesgo en los datos. Garantizar la equidad en la IA y el aprendizaje automático sigue siendo un desafío complejo. - -Los datos son un gran punto ciego para las métricas tradicionales de rendimiento del modelo. Puedes tener altas puntuaciones de precisión, pero esto no siempre refleja el sesgo subyacente en tus datos. Por ejemplo, si un conjunto de datos de empleados tiene el 27% de mujeres en puestos ejecutivos en una empresa y el 73% de hombres en el mismo nivel, un modelo de publicidad de empleo de IA entrenado en estos datos puede dirigirse principalmente a una audiencia masculina para puestos de trabajo de alto nivel. Tener este desequilibrio en los datos sesgó la predicción del modelo para favorecer a un género. Esto revela un problema de equidad donde hay un sesgo de género en el modelo de IA. - -El componente de Análisis de Datos en el tablero de RAI ayuda a identificar áreas donde hay una sobre- y sub-representación en el conjunto de datos. Ayuda a los usuarios a diagnosticar la causa raíz de errores y problemas de equidad introducidos por desequilibrios de datos o falta de representación de un grupo de datos particular. Esto da a los usuarios la capacidad de visualizar conjuntos de datos basados en resultados predichos y reales, grupos de errores y características específicas. A veces, descubrir un grupo de datos subrepresentado también puede revelar que el modelo no está aprendiendo bien, de ahí las altas inexactitudes. Tener un modelo con sesgo de datos no es solo un problema de equidad, sino que muestra que el modelo no es inclusivo ni confiable. - -![Componente de Análisis de Datos en el Tablero de RAI](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.es.png) - -Usa el análisis de datos cuando necesites: - -* Explorar las estadísticas de tu conjunto de datos seleccionando diferentes filtros para dividir tus datos en diferentes dimensiones (también conocidas como cohortes). -* Entender la distribución de tu conjunto de datos a través de diferentes cohortes y grupos de características. -* Determinar si tus hallazgos relacionados con la equidad, el análisis de errores y la causalidad (derivados de otros componentes del tablero) son el resultado de la distribución de tu conjunto de datos. -* Decidir en qué áreas recolectar más datos para mitigar errores que provienen de problemas de representación, ruido de etiquetas, ruido de características, sesgo de etiquetas y factores similares. - -## Interpretabilidad del Modelo - -Los modelos de aprendizaje automático tienden a ser cajas negras. Entender qué características clave de los datos impulsan la predicción de un modelo puede ser un desafío. Es importante proporcionar transparencia sobre por qué un modelo hace una cierta predicción. Por ejemplo, si un sistema de IA predice que un paciente diabético está en riesgo de ser readmitido en un hospital en menos de 30 días, debería poder proporcionar datos de apoyo que llevaron a su predicción. Tener indicadores de datos de apoyo aporta transparencia para ayudar a los clínicos u hospitales a tomar decisiones bien informadas. Además, poder explicar por qué un modelo hizo una predicción para un paciente individual permite la responsabilidad con las regulaciones de salud. Cuando estás utilizando modelos de aprendizaje automático de maneras que afectan la vida de las personas, es crucial entender y explicar qué influye en el comportamiento de un modelo. La explicabilidad e interpretabilidad del modelo ayuda a responder preguntas en escenarios como: - -* Depuración del modelo: ¿Por qué mi modelo cometió este error? ¿Cómo puedo mejorar mi modelo? -* Colaboración humano-IA: ¿Cómo puedo entender y confiar en las decisiones del modelo? -* Cumplimiento regulatorio: ¿Cumple mi modelo con los requisitos legales? - -El componente de Importancia de Características del tablero de RAI te ayuda a depurar y obtener una comprensión integral de cómo un modelo hace predicciones. También es una herramienta útil para profesionales de aprendizaje automático y tomadores de decisiones para explicar y mostrar evidencia de características que influyen en el comportamiento de un modelo para el cumplimiento regulatorio. A continuación, los usuarios pueden explorar tanto explicaciones globales como locales para validar qué características impulsan la predicción de un modelo. Las explicaciones globales enumeran las principales características que afectaron la predicción general de un modelo. Las explicaciones locales muestran qué características llevaron a la predicción de un modelo para un caso individual. La capacidad de evaluar explicaciones locales también es útil para depurar o auditar un caso específico para comprender mejor y interpretar por qué un modelo hizo una predicción precisa o inexacta. - -![Componente de Importancia de Características del tablero de RAI](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.es.png) - -* Explicaciones globales: Por ejemplo, ¿qué características afectan el comportamiento general de un modelo de readmisión hospitalaria para diabetes? -* Explicaciones locales: Por ejemplo, ¿por qué se predijo que un paciente diabético mayor de 60 años con hospitalizaciones previas sería readmitido o no readmitido dentro de los 30 días en un hospital? - -En el proceso de depuración de examinar el rendimiento de un modelo a través de diferentes cohortes, la Importancia de Características muestra qué nivel de impacto tiene una característica a través de los cohortes. Ayuda a revelar anomalías al comparar el nivel de influencia que tiene la característica en impulsar las predicciones erróneas de un modelo. El componente de Importancia de Características puede mostrar qué valores en una característica influyeron positiva o negativamente en el resultado del modelo. Por ejemplo, si un modelo hizo una predicción inexacta, el componente te da la capacidad de profundizar y señalar qué características o valores de características impulsaron la predicción. Este nivel de detalle ayuda no solo en la depuración, sino que proporciona transparencia y responsabilidad en situaciones de auditoría. Finalmente, el componente puede ayudarte a identificar problemas de equidad. Para ilustrar, si una característica sensible como la etnia o el género es altamente influyente en impulsar la predicción de un modelo, esto podría ser un indicio de sesgo de raza o género en el modelo. - -![Importancia de características](../../../../translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.es.png) - -Usa la interpretabilidad cuando necesites: - -* Determinar cuán confiables son las predicciones de tu sistema de IA al entender qué características son más importantes para las predicciones. -* Abordar la depuración de tu modelo entendiéndolo primero e identificando si el modelo está utilizando características saludables o meramente correlaciones falsas. -* Descubrir posibles fuentes de injusticia al entender si el modelo está basando predicciones en características sensibles o en características que están altamente correlacionadas con ellas. -* Construir confianza en las decisiones de tu modelo generando explicaciones locales para ilustrar sus resultados. -* Completar una auditoría regulatoria de un sistema de IA para validar modelos y monitorear el impacto de las decisiones del modelo en los humanos. - -## Conclusión - -Todos los componentes del tablero de RAI son herramientas prácticas para ayudarte a construir modelos de aprendizaje automático que sean menos dañinos y más confiables para la sociedad. Mejora la prevención de amenazas a los derechos humanos; discriminar o excluir a ciertos grupos de oportunidades de vida; y el riesgo de daño físico o psicológico. También ayuda a construir confianza en las decisiones de tu modelo generando explicaciones locales para ilustrar sus resultados. Algunos de los posibles daños se pueden clasificar como: - -- **Asignación**, si un género o etnia, por ejemplo, es favorecido sobre otro. -- **Calidad del servicio**. Si entrenas los datos para un escenario específico pero la realidad es mucho más compleja, lleva a un servicio de bajo rendimiento. -- **Estereotipado**. Asociar a un grupo dado con atributos preasignados. -- **Denigración**. Criticar injustamente y etiquetar algo o a alguien. -- **Sobre- o sub- representación**. La idea es que un cierto grupo no se ve en una cierta profesión, y cualquier servicio o función que siga promoviendo eso está contribuyendo al daño. - -### Tablero de RAI de Azure - -[El tablero de RAI de Azure](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) está construido sobre herramientas de código abierto desarrolladas por las principales instituciones académicas y organizaciones, incluidas Microsoft, que son instrumentales para que los científicos de datos y desarrolladores de IA comprendan mejor el comportamiento del modelo, descubran y mitiguen problemas indeseables de los modelos de IA. - -- Aprende a usar los diferentes componentes consultando la [documentación del tablero de RAI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) - -- Consulta algunos [cuadernos de muestra del tablero de RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) para depurar más escenarios de IA responsable en Azure Machine Learning. - ---- -## 🚀 Desafío - -Para evitar que se introduzcan sesgos estadísticos o de datos en primer lugar, debemos: - -- tener una diversidad de antecedentes y perspectivas entre las personas que trabajan en los sistemas -- invertir en conjuntos de datos que reflejen la diversidad de nuestra sociedad -- desarrollar mejores métodos para detectar y corregir el sesgo cuando ocurra - -Piensa en escenarios de la vida real donde la injusticia es evidente en la construcción y uso de modelos. ¿Qué más deberíamos considerar? - -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## Revisión y Autoestudio - -En esta lección, has aprendido algunas de las herramientas prácticas para incorporar IA responsable en el aprendizaje automático. - -Mira este taller para profundizar en los temas: - -- Tablero de IA Responsable: Un centro integral para operacionalizar la RAI en la práctica por Besmira Nushi y Mehrnoosh Sameki - -[![Tablero de IA Responsable: Un centro integral para operacionalizar la RAI en la práctica](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Tablero de IA Responsable: Un centro integral para operacionalizar la RAI en la práctica") - -> 🎥 Haz clic en la imagen de arriba para ver un video: Tablero de IA Responsable: Un centro integral para operacionalizar la RAI en la práctica por Bes - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/es/9-Real-World/2-Debugging-ML-Models/assignment.md deleted file mode 100644 index 3e00d7b6..00000000 --- a/translations/es/9-Real-World/2-Debugging-ML-Models/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Explorar el tablero de IA Responsable (RAI) - -## Instrucciones - -En esta lección aprendiste sobre el tablero de RAI, un conjunto de componentes construidos sobre herramientas "de código abierto" para ayudar a los científicos de datos a realizar análisis de errores, exploración de datos, evaluación de equidad, interpretabilidad de modelos, evaluaciones contrafactuales/what-if y análisis causal en sistemas de IA. Para esta tarea, explora algunos de los [notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) de muestra del tablero de RAI y reporta tus hallazgos en un documento o presentación. - -## Rúbrica - -| Criterios | Ejemplar | Adecuado | Necesita Mejorar | -| --------- | -------- | -------- | ---------------- | -| | Se presenta un documento o una presentación en PowerPoint discutiendo los componentes del tablero de RAI, el notebook que se ejecutó y las conclusiones obtenidas al ejecutarlo | Se presenta un documento sin conclusiones | No se presenta ningún documento | - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/9-Real-World/README.md b/translations/es/9-Real-World/README.md deleted file mode 100644 index 13a60b51..00000000 --- a/translations/es/9-Real-World/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Postscript: Aplicaciones del mundo real del aprendizaje automático clásico - -En esta sección del currículo, se te presentarán algunas aplicaciones del mundo real del aprendizaje automático clásico. Hemos recorrido internet para encontrar documentos técnicos y artículos sobre aplicaciones que han utilizado estas estrategias, evitando redes neuronales, aprendizaje profundo e inteligencia artificial tanto como sea posible. Aprende cómo se utiliza el aprendizaje automático en sistemas empresariales, aplicaciones ecológicas, finanzas, artes y cultura, y más. - -![chess](../../../translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.es.jpg) - -> Foto de Alexis Fauvet en Unsplash - -## Lección - -1. [Aplicaciones del mundo real para el aprendizaje automático](1-Applications/README.md) -2. [Depuración de modelos en el aprendizaje automático usando componentes del tablero de IA Responsable](2-Debugging-ML-Models/README.md) - -## Créditos - -"Aplicaciones del mundo real" fue escrito por un equipo de personas, incluyendo a [Jen Looper](https://twitter.com/jenlooper) y [Ornella Altunyan](https://twitter.com/ornelladotcom). - -"Depuración de modelos en el aprendizaje automático usando componentes del tablero de IA Responsable" fue escrito por [Ruth Yakubu](https://twitter.com/ruthieyakubu) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/CODE_OF_CONDUCT.md b/translations/es/CODE_OF_CONDUCT.md deleted file mode 100644 index f07208e2..00000000 --- a/translations/es/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,12 +0,0 @@ -# Código de Conducta de Código Abierto de Microsoft - -Este proyecto ha adoptado el [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/). - -Recursos: - -- [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/) -- [Preguntas Frecuentes sobre el Código de Conducta de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) -- Contacta a [opencode@microsoft.com](mailto:opencode@microsoft.com) para preguntas o inquietudes - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/CONTRIBUTING.md b/translations/es/CONTRIBUTING.md deleted file mode 100644 index 1659d59b..00000000 --- a/translations/es/CONTRIBUTING.md +++ /dev/null @@ -1,14 +0,0 @@ -# Contribuyendo - -Este proyecto da la bienvenida a contribuciones y sugerencias. La mayoría de las contribuciones requieren que aceptes un Acuerdo de Licencia de Contribuidor (CLA) declarando que tienes el derecho de, y efectivamente, nos otorgas los derechos para usar tu contribución. Para más detalles, visita https://cla.microsoft.com. - -> Importante: cuando traduzcas texto en este repositorio, asegúrate de no usar traducción automática. Verificaremos las traducciones a través de la comunidad, así que solo ofrécete como voluntario para traducciones en idiomas en los que seas competente. - -Cuando envíes una solicitud de extracción (pull request), un bot de CLA determinará automáticamente si necesitas proporcionar un CLA y decorará el PR apropiadamente (por ejemplo, etiqueta, comentario). Simplemente sigue las instrucciones proporcionadas por el bot. Solo necesitarás hacer esto una vez en todos los repositorios que usen nuestro CLA. - -Este proyecto ha adoptado el [Código de Conducta de Código Abierto de Microsoft](https://opensource.microsoft.com/codeofconduct/). -Para más información, consulta las [Preguntas Frecuentes del Código de Conducta](https://opensource.microsoft.com/codeofconduct/faq/) -o contacta a [opencode@microsoft.com](mailto:opencode@microsoft.com) con cualquier pregunta o comentario adicional. - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/README.md b/translations/es/README.md deleted file mode 100644 index f61e34df..00000000 --- a/translations/es/README.md +++ /dev/null @@ -1,155 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) - -# Aprendizaje Automático para Principiantes - Un Currículo - -> 🌍 Viaja por el mundo mientras exploramos el Aprendizaje Automático a través de las culturas del mundo 🌍 - -Los Cloud Advocates en Microsoft están encantados de ofrecer un currículo de 12 semanas y 26 lecciones sobre **Aprendizaje Automático**. En este currículo, aprenderás sobre lo que a veces se llama **aprendizaje automático clásico**, utilizando principalmente Scikit-learn como biblioteca y evitando el aprendizaje profundo, que se cubre en nuestro [currículo de AI para Principiantes](https://aka.ms/ai4beginners). ¡Combina estas lecciones con nuestro [currículo de Ciencia de Datos para Principiantes](https://aka.ms/ds4beginners), también! - -Viaja con nosotros alrededor del mundo mientras aplicamos estas técnicas clásicas a datos de muchas áreas del mundo. Cada lección incluye cuestionarios antes y después de la lección, instrucciones escritas para completar la lección, una solución, una tarea y más. Nuestra pedagogía basada en proyectos te permite aprender mientras construyes, una manera comprobada para que las nuevas habilidades 'se queden'. - -**✍️ Agradecimientos de corazón a nuestros autores** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu y Amy Boyd - -**🎨 Gracias también a nuestros ilustradores** Tomomi Imura, Dasani Madipalli y Jen Looper - -**🙏 Agradecimientos especiales 🙏 a nuestros autores, revisores y colaboradores de contenido Microsoft Student Ambassador**, notablemente Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila y Snigdha Agarwal - -**🤩 Extra gratitud a los Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi y Vidushi Gupta por nuestras lecciones de R!** - -# Empezando - -Sigue estos pasos: -1. **Haz un Fork del Repositorio**: Haz clic en el botón "Fork" en la esquina superior derecha de esta página. -2. **Clona el Repositorio**: `git clone https://github.com/microsoft/ML-For-Beginners.git` - -> [encuentra todos los recursos adicionales para este curso en nuestra colección de Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) - -**[Estudiantes](https://aka.ms/student-page)**, para usar este currículo, haz un fork del repositorio completo a tu propia cuenta de GitHub y completa los ejercicios por tu cuenta o en grupo: - -- Empieza con un cuestionario previo a la lección. -- Lee la lección y completa las actividades, haciendo pausas y reflexionando en cada verificación de conocimiento. -- Trata de crear los proyectos comprendiendo las lecciones en lugar de ejecutar el código de solución; sin embargo, ese código está disponible en las carpetas `/solution` en cada lección orientada a proyectos. -- Realiza el cuestionario posterior a la lección. -- Completa el desafío. -- Completa la tarea. -- Después de completar un grupo de lecciones, visita el [Tablero de Discusión](https://github.com/microsoft/ML-For-Beginners/discussions) y "aprende en voz alta" llenando la rúbrica PAT apropiada. Un 'PAT' es una Herramienta de Evaluación de Progreso que es una rúbrica que llenas para avanzar en tu aprendizaje. También puedes reaccionar a otros PATs para que podamos aprender juntos. - -> Para un estudio adicional, recomendamos seguir estos módulos y rutas de aprendizaje de [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). - -**Profesores**, hemos [incluido algunas sugerencias](for-teachers.md) sobre cómo usar este currículo. - ---- - -## Recorridos en video - -Algunas de las lecciones están disponibles en formato de video corto. Puedes encontrar todos estos videos en las lecciones, o en la [lista de reproducción de ML para Principiantes en el canal de YouTube de Microsoft Developer](https://aka.ms/ml-beginners-videos) haciendo clic en la imagen a continuación. - -[![Banner de ML para principiantes](../../translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.es.png)](https://aka.ms/ml-beginners-videos) - ---- - -## Conoce al Equipo - -[![Video promocional](../../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Video promocional") - -**Gif por** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) - -> 🎥 ¡Haz clic en la imagen de arriba para ver un video sobre el proyecto y las personas que lo crearon! - ---- - -## Pedagogía - -Hemos elegido dos principios pedagógicos al construir este currículo: asegurar que sea **basado en proyectos** y que incluya **cuestionarios frecuentes**. Además, este currículo tiene un **tema común** para darle cohesión. - -Al asegurar que el contenido se alinee con los proyectos, el proceso se hace más atractivo para los estudiantes y se aumenta la retención de conceptos. Además, un cuestionario de baja presión antes de la clase establece la intención del estudiante hacia el aprendizaje de un tema, mientras que un segundo cuestionario después de la clase asegura una mayor retención. Este currículo fue diseñado para ser flexible y divertido y puede tomarse en su totalidad o en parte. Los proyectos comienzan pequeños y se vuelven cada vez más complejos al final del ciclo de 12 semanas. Este currículo también incluye un postscript sobre aplicaciones del mundo real del aprendizaje automático, que puede usarse como crédito adicional o como base para la discusión. - -> Encuentra nuestro [Código de Conducta](CODE_OF_CONDUCT.md), [Contribución](CONTRIBUTING.md) y [Pautas de Traducción](TRANSLATIONS.md). ¡Agradecemos tus comentarios constructivos! - -## Cada lección incluye - -- sketchnote opcional -- video complementario opcional -- recorrido en video (algunas lecciones solamente) -- cuestionario de calentamiento previo a la lección -- lección escrita -- para lecciones basadas en proyectos, guías paso a paso sobre cómo construir el proyecto -- verificaciones de conocimiento -- un desafío -- lectura complementaria -- tarea -- cuestionario posterior a la lección - -> **Una nota sobre los idiomas**: Estas lecciones están escritas principalmente en Python, pero muchas también están disponibles en R. Para completar una lección en R, ve a la carpeta `/solution` y busca lecciones en R. Incluyen una extensión .rmd que representa un archivo **R Markdown** que puede definirse simplemente como una incrustación de `code chunks` (de R u otros lenguajes) y una `YAML header` (que guía cómo formatear las salidas como PDF) en un `Markdown document`. Como tal, sirve como un marco de autoría ejemplar para la ciencia de datos, ya que te permite combinar tu código, su salida y tus pensamientos al permitirte escribirlos en Markdown. Además, los documentos R Markdown pueden renderizarse a formatos de salida como PDF, HTML o Word. - -> **Una nota sobre los cuestionarios**: Todos los cuestionarios están contenidos en la [carpeta de la aplicación de cuestionarios](../../quiz-app), para un total de 52 cuestionarios de tres preguntas cada uno. Están vinculados desde dentro de las lecciones, pero la aplicación de cuestionarios puede ejecutarse localmente; sigue las instrucciones en la carpeta `quiz-app` para alojarla localmente o desplegarla en Azure. - -| Número de Lección | Tema | Agrupación de Lección | Objetivos de Aprendizaje | Lección Vinculada | Autor | -| :---------------: | :------------------------------------------------------------: | :-------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | -| 01 | Introducción al aprendizaje automático | [Introducción](1-Introduction/README.md) | Aprende los conceptos básicos detrás del aprendizaje automático | [Lección](1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | La Historia del aprendizaje automático | [Introducción](1-Introduction/README.md) | Aprende la historia subyacente a este campo | [Lección](1-Introduction/2-history-of-ML/README.md) | Jen y Amy | -| 03 | Equidad y aprendizaje automático | [Introducción](1-Introduction/README.md) | ¿Cuáles son los importantes problemas filosóficos sobre la equidad que los estudiantes deben considerar al construir y aplicar modelos de aprendizaje automático? | [Lección](1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | Técnicas para el aprendizaje automático | [Introduction](1-Introduction/README.md) | ¿Qué técnicas utilizan los investigadores de ML para construir modelos de ML? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris y Jen | -| 05 | Introducción a la regresión | [Regression](2-Regression/README.md) | Comienza con Python y Scikit-learn para modelos de regresión |
                                        • [Python](2-Regression/1-Tools/README.md)
                                        • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                        |
                                        • Jen
                                        • Eric Wanjau
                                        | -| 06 | Precios de calabazas en Norteamérica 🎃 | [Regression](2-Regression/README.md) | Visualiza y limpia datos en preparación para ML |
                                        • [Python](2-Regression/2-Data/README.md)
                                        • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                        |
                                        • Jen
                                        • Eric Wanjau
                                        | -| 07 | Precios de calabazas en Norteamérica 🎃 | [Regression](2-Regression/README.md) | Construye modelos de regresión lineal y polinómica |
                                        • [Python](2-Regression/3-Linear/README.md)
                                        • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                        |
                                        • Jen y Dmitry
                                        • Eric Wanjau
                                        | -| 08 | Precios de calabazas en Norteamérica 🎃 | [Regression](2-Regression/README.md) | Construye un modelo de regresión logística |
                                        • [Python](2-Regression/4-Logistic/README.md)
                                        • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                        |
                                        • Jen
                                        • Eric Wanjau
                                        | -| 09 | Una aplicación web 🔌 | [Web App](3-Web-App/README.md) | Construye una aplicación web para usar tu modelo entrenado | [Python](3-Web-App/1-Web-App/README.md) | Jen | -| 10 | Introducción a la clasificación | [Classification](4-Classification/README.md) | Limpia, prepara y visualiza tus datos; introducción a la clasificación |
                                        • [Python](4-Classification/1-Introduction/README.md)
                                        • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                          • Jen y Cassie
                                          • Eric Wanjau
                                          | -| 11 | Deliciosas cocinas asiáticas e indias 🍜 | [Classification](4-Classification/README.md) | Introducción a los clasificadores |
                                          • [Python](4-Classification/2-Classifiers-1/README.md)
                                          • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                                            • Jen y Cassie
                                            • Eric Wanjau
                                            | -| 12 | Deliciosas cocinas asiáticas e indias 🍜 | [Classification](4-Classification/README.md) | Más clasificadores |
                                            • [Python](4-Classification/3-Classifiers-2/README.md)
                                            • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                                              • Jen y Cassie
                                              • Eric Wanjau
                                              | -| 13 | Deliciosas cocinas asiáticas e indias 🍜 | [Classification](4-Classification/README.md) | Construye una aplicación web de recomendación usando tu modelo | [Python](4-Classification/4-Applied/README.md) | Jen | -| 14 | Introducción al clustering | [Clustering](5-Clustering/README.md) | Limpia, prepara y visualiza tus datos; introducción al clustering |
                                              • [Python](5-Clustering/1-Visualize/README.md)
                                              • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                                • Jen
                                                • Eric Wanjau
                                                | -| 15 | Explorando los gustos musicales nigerianos 🎧 | [Clustering](5-Clustering/README.md) | Explora el método de agrupamiento K-Means |
                                                • [Python](5-Clustering/2-K-Means/README.md)
                                                • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                                  • Jen
                                                  • Eric Wanjau
                                                  | -| 16 | Introducción al procesamiento de lenguaje natural ☕️ | [Natural language processing](6-NLP/README.md) | Aprende los conceptos básicos sobre NLP construyendo un bot sencillo | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Tareas comunes de NLP ☕️ | [Natural language processing](6-NLP/README.md) | Profundiza tu conocimiento de NLP entendiendo las tareas comunes requeridas al tratar con estructuras de lenguaje | [Python](6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Traducción y análisis de sentimiento ♥️ | [Natural language processing](6-NLP/README.md) | Traducción y análisis de sentimiento con Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | Hoteles románticos de Europa ♥️ | [Natural language processing](6-NLP/README.md) | Análisis de sentimiento con reseñas de hoteles 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | Hoteles románticos de Europa ♥️ | [Natural language processing](6-NLP/README.md) | Análisis de sentimiento con reseñas de hoteles 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | Introducción a la predicción de series temporales | [Time series](7-TimeSeries/README.md) | Introducción a la predicción de series temporales | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ Uso de energía mundial ⚡️ - predicción de series temporales con ARIMA | [Time series](7-TimeSeries/README.md) | Predicción de series temporales con ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | ⚡️ Uso de energía mundial ⚡️ - predicción de series temporales con SVR | [Time series](7-TimeSeries/README.md) | Predicción de series temporales con Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | -| 24 | Introducción al aprendizaje por refuerzo | [Reinforcement learning](8-Reinforcement/README.md) | Introducción al aprendizaje por refuerzo con Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 25 | ¡Ayuda a Peter a evitar al lobo! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Gimnasio de aprendizaje por refuerzo | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | -| Postscript | Escenarios y aplicaciones de ML en el mundo real | [ML in the Wild](9-Real-World/README.md) | Aplicaciones interesantes y reveladoras de ML clásico en el mundo real | [Lesson](9-Real-World/1-Applications/README.md) | Team | -| Postscript | Depuración de modelos en ML usando el panel de control de RAI | [ML in the Wild](9-Real-World/README.md) | Depuración de modelos en Machine Learning usando componentes del panel de control de IA responsable | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | - -> [encuentra todos los recursos adicionales para este curso en nuestra colección de Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) - -## Acceso sin conexión - -Puedes ejecutar esta documentación sin conexión utilizando [Docsify](https://docsify.js.org/#/). Haz un fork de este repositorio, [instala Docsify](https://docsify.js.org/#/quickstart) en tu máquina local, y luego en la carpeta raíz de este repositorio, escribe `docsify serve`. El sitio web se servirá en el puerto 3000 en tu localhost: `localhost:3000`. - -## PDFs -Encuentra un pdf del currículo con enlaces [aquí](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). - -## Se Busca Ayuda - -¿Te gustaría contribuir con una traducción? Por favor, lee nuestras [directrices de traducción](TRANSLATIONS.md) y añade un issue con plantilla para gestionar la carga de trabajo [aquí](https://github.com/microsoft/ML-For-Beginners/issues). - -## Otros Currículos - -¡Nuestro equipo produce otros currículos! Echa un vistazo a: - -- [AI for Beginners](https://aka.ms/ai4beginners) -- [Data Science for Beginners](https://aka.ms/datascience-beginners) -- [**Nueva Versión 2.0** - Generative AI for Beginners](https://aka.ms/genai-beginners) -- [**NUEVO** Cybersecurity for Beginners](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -- [Web Dev for Beginners](https://aka.ms/webdev-beginners) -- [IoT for Beginners](https://aka.ms/iot-beginners) -- [Machine Learning for Beginners](https://aka.ms/ml4beginners) -- [XR Development for Beginners](https://aka.ms/xr-dev-for-beginners) -- [Mastering GitHub Copilot for AI Paired Programming](https://aka.ms/GitHubCopilotAI) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/SECURITY.md b/translations/es/SECURITY.md deleted file mode 100644 index a0235362..00000000 --- a/translations/es/SECURITY.md +++ /dev/null @@ -1,40 +0,0 @@ -## Seguridad - -Microsoft toma en serio la seguridad de nuestros productos y servicios de software, lo cual incluye todos los repositorios de código fuente gestionados a través de nuestras organizaciones en GitHub, que incluyen [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin) y [nuestras organizaciones en GitHub](https://opensource.microsoft.com/). - -Si crees que has encontrado una vulnerabilidad de seguridad en algún repositorio propiedad de Microsoft que cumpla con [la definición de vulnerabilidad de seguridad de Microsoft](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), por favor repórtalo como se describe a continuación. - -## Reporte de Problemas de Seguridad - -**Por favor, no reportes vulnerabilidades de seguridad a través de issues públicos en GitHub.** - -En su lugar, repórtalas al Centro de Respuesta de Seguridad de Microsoft (MSRC) en [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). - -Si prefieres enviar el reporte sin iniciar sesión, envía un correo electrónico a [secure@microsoft.com](mailto:secure@microsoft.com). Si es posible, encripta tu mensaje con nuestra clave PGP; por favor descárgala desde la [página de Clave PGP del Centro de Respuesta de Seguridad de Microsoft](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). - -Deberías recibir una respuesta dentro de 24 horas. Si por alguna razón no la recibes, por favor haz un seguimiento vía correo electrónico para asegurarte de que recibimos tu mensaje original. Información adicional puede encontrarse en [microsoft.com/msrc](https://www.microsoft.com/msrc). - -Por favor, incluye la información solicitada a continuación (tanto como puedas proporcionar) para ayudarnos a entender mejor la naturaleza y el alcance del posible problema: - - * Tipo de problema (por ejemplo, desbordamiento de búfer, inyección SQL, scripting entre sitios, etc.) - * Rutas completas de los archivos fuente relacionados con la manifestación del problema - * La ubicación del código fuente afectado (etiqueta/rama/commit o URL directa) - * Cualquier configuración especial requerida para reproducir el problema - * Instrucciones paso a paso para reproducir el problema - * Código de prueba de concepto o de explotación (si es posible) - * Impacto del problema, incluyendo cómo un atacante podría explotar el problema - -Esta información nos ayudará a priorizar tu reporte más rápidamente. - -Si estás reportando para una recompensa por errores, reportes más completos pueden contribuir a una mayor recompensa. Por favor visita nuestra página del [Programa de Recompensas por Errores de Microsoft](https://microsoft.com/msrc/bounty) para más detalles sobre nuestros programas activos. - -## Idiomas Preferidos - -Preferimos que todas las comunicaciones sean en inglés. - -## Política - -Microsoft sigue el principio de [Divulgación Coordinada de Vulnerabilidades](https://www.microsoft.com/en-us/msrc/cvd). - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/SUPPORT.md b/translations/es/SUPPORT.md deleted file mode 100644 index 8854f528..00000000 --- a/translations/es/SUPPORT.md +++ /dev/null @@ -1,15 +0,0 @@ -# Soporte -## Cómo reportar problemas y obtener ayuda - -Este proyecto utiliza GitHub Issues para rastrear errores y solicitudes de características. Por favor, busca en los -problemas existentes antes de reportar nuevos problemas para evitar duplicados. Para nuevos problemas, reporta tu error o -solicitud de característica como un nuevo Issue. - -Para obtener ayuda y preguntas sobre el uso de este proyecto, reporta un issue. - -## Política de Soporte de Microsoft - -El soporte para este repositorio se limita a los recursos listados arriba. - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/TRANSLATIONS.md b/translations/es/TRANSLATIONS.md deleted file mode 100644 index 813e1503..00000000 --- a/translations/es/TRANSLATIONS.md +++ /dev/null @@ -1,37 +0,0 @@ -# Contribuye traduciendo lecciones - -¡Agradecemos las traducciones para las lecciones en este currículo! -## Pautas - -Hay carpetas en cada carpeta de lección y carpeta de introducción a la lección que contienen los archivos markdown traducidos. - -> Nota, por favor no traduzcas ningún código en los archivos de ejemplos de código; las únicas cosas que deben traducirse son README, tareas y los cuestionarios. ¡Gracias! - -Los archivos traducidos deben seguir esta convención de nombres: - -**README._[language]_.md** - -donde _[language]_ es una abreviatura de dos letras del idioma siguiendo el estándar ISO 639-1 (por ejemplo, `README.es.md` para español y `README.nl.md` para neerlandés). - -**assignment._[language]_.md** - -Similar a los Readme, por favor traduce también las tareas. - -> Importante: cuando traduzcas texto en este repositorio, por favor asegúrate de no usar traducción automática. Verificaremos las traducciones a través de la comunidad, así que por favor solo ofrécete para traducir en idiomas en los que seas competente. - -**Cuestionarios** - -1. Agrega tu traducción a la aplicación de cuestionarios añadiendo un archivo aquí: https://github.com/microsoft/ML-For-Beginners/tree/main/quiz-app/src/assets/translations, con la convención de nombres adecuada (en.json, fr.json). **Por favor no localices las palabras 'true' o 'false'. ¡Gracias!** - -2. Agrega tu código de idioma al menú desplegable en el archivo App.vue de la aplicación de cuestionarios. - -3. Edita el [archivo index.js de traducciones](https://github.com/microsoft/ML-For-Beginners/blob/main/quiz-app/src/assets/translations/index.js) de la aplicación de cuestionarios para agregar tu idioma. - -4. Finalmente, edita TODOS los enlaces de los cuestionarios en tus archivos README.md traducidos para que apunten directamente a tu cuestionario traducido: https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1 se convierte en https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=id - -**GRACIAS** - -¡Realmente apreciamos tus esfuerzos! - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automatizada por IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/docs/_sidebar.md b/translations/es/docs/_sidebar.md deleted file mode 100644 index 89a96b24..00000000 --- a/translations/es/docs/_sidebar.md +++ /dev/null @@ -1,46 +0,0 @@ -- Introducción - - [Introducción al Aprendizaje Automático](../1-Introduction/1-intro-to-ML/README.md) - - [Historia del Aprendizaje Automático](../1-Introduction/2-history-of-ML/README.md) - - [AA y Equidad](../1-Introduction/3-fairness/README.md) - - [Técnicas de AA](../1-Introduction/4-techniques-of-ML/README.md) - -- Regresión - - [Herramientas del Oficio](../2-Regression/1-Tools/README.md) - - [Datos](../2-Regression/2-Data/README.md) - - [Regresión Lineal](../2-Regression/3-Linear/README.md) - - [Regresión Logística](../2-Regression/4-Logistic/README.md) - -- Construir una Aplicación Web - - [Aplicación Web](../3-Web-App/1-Web-App/README.md) - -- Clasificación - - [Introducción a la Clasificación](../4-Classification/1-Introduction/README.md) - - [Clasificadores 1](../4-Classification/2-Classifiers-1/README.md) - - [Clasificadores 2](../4-Classification/3-Classifiers-2/README.md) - - [AA Aplicado](../4-Classification/4-Applied/README.md) - -- Agrupamiento - - [Visualiza tus Datos](../5-Clustering/1-Visualize/README.md) - - [K-Means](../5-Clustering/2-K-Means/README.md) - -- PLN - - [Introducción al PLN](../6-NLP/1-Introduction-to-NLP/README.md) - - [Tareas de PLN](../6-NLP/2-Tasks/README.md) - - [Traducción y Sentimiento](../6-NLP/3-Translation-Sentiment/README.md) - - [Reseñas de Hoteles 1](../6-NLP/4-Hotel-Reviews-1/README.md) - - [Reseñas de Hoteles 2](../6-NLP/5-Hotel-Reviews-2/README.md) - -- Pronóstico de Series Temporales - - [Introducción al Pronóstico de Series Temporales](../7-TimeSeries/1-Introduction/README.md) - - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) - - [SVR](../7-TimeSeries/3-SVR/README.md) - -- Aprendizaje por Refuerzo - - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) - - [Gym](../8-Reinforcement/2-Gym/README.md) - -- AA en el Mundo Real - - [Aplicaciones](../9-Real-World/1-Applications/README.md) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de cualquier malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/for-teachers.md b/translations/es/for-teachers.md deleted file mode 100644 index defc0aa9..00000000 --- a/translations/es/for-teachers.md +++ /dev/null @@ -1,26 +0,0 @@ -## Para Educadores - -¿Te gustaría usar este plan de estudios en tu aula? ¡Adelante! - -De hecho, puedes usarlo dentro de GitHub mismo utilizando GitHub Classroom. - -Para hacerlo, haz un fork de este repositorio. Vas a necesitar crear un repositorio para cada lección, así que necesitarás extraer cada carpeta en un repositorio separado. De esa manera, [GitHub Classroom](https://classroom.github.com/classrooms) puede recoger cada lección por separado. - -Estas [instrucciones completas](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) te darán una idea de cómo configurar tu aula. - -## Usar el repositorio tal como está - -Si te gustaría usar este repositorio tal como está, sin usar GitHub Classroom, también se puede hacer. Necesitarías comunicarte con tus estudiantes sobre cuál lección trabajar juntos. - -En un formato en línea (Zoom, Teams, u otro) podrías formar salas de trabajo para los cuestionarios, y mentorear a los estudiantes para ayudarles a prepararse para aprender. Luego, invitar a los estudiantes a realizar los cuestionarios y enviar sus respuestas como 'issues' a una hora determinada. Podrías hacer lo mismo con las tareas, si quieres que los estudiantes trabajen colaborativamente en público. - -Si prefieres un formato más privado, pide a tus estudiantes que hagan fork del plan de estudios, lección por lección, a sus propios repositorios de GitHub como repositorios privados, y te den acceso. Luego pueden completar cuestionarios y tareas de manera privada y enviártelos a través de issues en tu repositorio de aula. - -Hay muchas maneras de hacer que esto funcione en un formato de aula en línea. ¡Por favor, háznos saber qué funciona mejor para ti! - -## ¡Por favor danos tu opinión! - -Queremos que este plan de estudios funcione para ti y tus estudiantes. Por favor, danos tu [opinión](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática por IA. Aunque nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/quiz-app/README.md b/translations/es/quiz-app/README.md deleted file mode 100644 index 87948bf8..00000000 --- a/translations/es/quiz-app/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Cuestionarios - -Estos cuestionarios son los cuestionarios pre y post-lectura para el currículo de ML en https://aka.ms/ml-beginners - -## Configuración del proyecto - -``` -npm install -``` - -### Compila y recarga en caliente para desarrollo - -``` -npm run serve -``` - -### Compila y minimiza para producción - -``` -npm run build -``` - -### Lint y corrige archivos - -``` -npm run lint -``` - -### Personaliza la configuración - -Consulta la [Referencia de Configuración](https://cli.vuejs.org/config/). - -Créditos: Gracias a la versión original de esta aplicación de cuestionarios: https://github.com/arpan45/simple-quiz-vue - -## Desplegando en Azure - -Aquí tienes una guía paso a paso para ayudarte a empezar: - -1. Haz un fork del Repositorio de GitHub -Asegúrate de que el código de tu aplicación web estática está en tu repositorio de GitHub. Haz un fork de este repositorio. - -2. Crea una Aplicación Web Estática de Azure -- Crea una [cuenta de Azure](http://azure.microsoft.com) -- Ve al [portal de Azure](https://portal.azure.com) -- Haz clic en “Crear un recurso” y busca “Aplicación Web Estática”. -- Haz clic en “Crear”. - -3. Configura la Aplicación Web Estática -- Básicos: Suscripción: Selecciona tu suscripción de Azure. -- Grupo de Recursos: Crea un nuevo grupo de recursos o usa uno existente. -- Nombre: Proporciona un nombre para tu aplicación web estática. -- Región: Elige la región más cercana a tus usuarios. - -- #### Detalles de Despliegue: -- Fuente: Selecciona “GitHub”. -- Cuenta de GitHub: Autoriza a Azure para acceder a tu cuenta de GitHub. -- Organización: Selecciona tu organización de GitHub. -- Repositorio: Elige el repositorio que contiene tu aplicación web estática. -- Rama: Selecciona la rama desde la que quieres desplegar. - -- #### Detalles de Construcción: -- Presets de Construcción: Elige el framework con el que está construida tu aplicación (por ejemplo, React, Angular, Vue, etc.). -- Ubicación de la Aplicación: Especifica la carpeta que contiene el código de tu aplicación (por ejemplo, / si está en la raíz). -- Ubicación de la API: Si tienes una API, especifica su ubicación (opcional). -- Ubicación de Salida: Especifica la carpeta donde se genera la salida de la construcción (por ejemplo, build o dist). - -4. Revisa y Crea -Revisa tus configuraciones y haz clic en “Crear”. Azure configurará los recursos necesarios y creará un flujo de trabajo de GitHub Actions en tu repositorio. - -5. Flujo de Trabajo de GitHub Actions -Azure creará automáticamente un archivo de flujo de trabajo de GitHub Actions en tu repositorio (.github/workflows/azure-static-web-apps-.yml). Este flujo de trabajo manejará el proceso de construcción y despliegue. - -6. Monitorea el Despliegue -Ve a la pestaña “Actions” en tu repositorio de GitHub. -Deberías ver un flujo de trabajo en ejecución. Este flujo de trabajo construirá y desplegará tu aplicación web estática en Azure. -Una vez que el flujo de trabajo se complete, tu aplicación estará en vivo en la URL proporcionada por Azure. - -### Archivo de Flujo de Trabajo de Ejemplo - -Aquí tienes un ejemplo de cómo podría verse el archivo de flujo de trabajo de GitHub Actions: -name: Azure Static Web Apps CI/CD -``` -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - main - -jobs: - build_and_deploy_job: - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v2 - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} - repo_token: ${{ secrets.GITHUB_TOKEN }} - action: "upload" - app_location: "/quiz-app" # App source code path - api_location: ""API source code path optional - output_location: "dist" #Built app content directory - optional -``` - -### Recursos Adicionales -- [Documentación de Aplicaciones Web Estáticas de Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [Documentación de GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/sketchnotes/LICENSE.md b/translations/es/sketchnotes/LICENSE.md deleted file mode 100644 index a83b61da..00000000 --- a/translations/es/sketchnotes/LICENSE.md +++ /dev/null @@ -1,172 +0,0 @@ -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") no es un bufete de abogados y no proporciona servicios legales ni asesoramiento legal. La distribución de licencias públicas de Creative Commons no crea una relación abogado-cliente u otra relación. Creative Commons pone a disposición sus licencias y la información relacionada "tal cual". Creative Commons no ofrece garantías respecto a sus licencias, cualquier material licenciado bajo sus términos y condiciones, o cualquier información relacionada. Creative Commons no se hace responsable de los daños resultantes de su uso en la máxima medida posible. - -Uso de licencias públicas de Creative Commons - -Las licencias públicas de Creative Commons proporcionan un conjunto estándar de términos y condiciones que los creadores y otros titulares de derechos pueden utilizar para compartir obras originales sujetas a derechos de autor y ciertos otros derechos especificados en la licencia pública a continuación. Las siguientes consideraciones son solo para fines informativos, no son exhaustivas y no forman parte de nuestras licencias. - - Consideraciones para los licenciadores: Nuestras licencias públicas están destinadas a ser utilizadas por aquellos autorizados a otorgar al público permiso para utilizar material de maneras que de otro modo estarían restringidas por los derechos de autor y ciertos otros derechos. Nuestras licencias son irrevocables. Los licenciadores deben leer y comprender los términos y condiciones de la licencia que elijan antes de aplicarla. Los licenciadores también deben asegurar todos los derechos necesarios antes de aplicar nuestras licencias para que el público pueda reutilizar el material según lo esperado. Los licenciadores deben marcar claramente cualquier material no sujeto a la licencia. Esto incluye otro material licenciado por CC o material utilizado bajo una excepción o limitación a los derechos de autor. Más consideraciones para los licenciadores: wiki.creativecommons.org/Considerations_for_licensors - - Consideraciones para el público: Al utilizar una de nuestras licencias públicas, un licenciante otorga al público permiso para usar el material licenciado bajo los términos y condiciones especificados. Si el permiso del licenciante no es necesario por alguna razón, por ejemplo, debido a una excepción o limitación aplicable a los derechos de autor, entonces ese uso no está regulado por la licencia. Nuestras licencias solo otorgan permisos bajo derechos de autor y ciertos otros derechos que un licenciante tiene autoridad para otorgar. El uso del material licenciado aún puede estar restringido por otras razones, incluyendo porque otros tienen derechos de autor u otros derechos en el material. Un licenciante puede hacer solicitudes especiales, como pedir que todos los cambios se marquen o describan. Aunque no es requerido por nuestras licencias, se le anima a respetar esas solicitudes cuando sean razonables. Más consideraciones para el público: wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Licencia Pública Internacional de Creative Commons Attribution-ShareAlike 4.0 - -Al ejercer los Derechos Licenciados (definidos a continuación), Usted acepta y se compromete a cumplir con los términos y condiciones de esta Licencia Pública Internacional de Creative Commons Attribution-ShareAlike 4.0 ("Licencia Pública"). En la medida en que esta Licencia Pública pueda interpretarse como un contrato, se le otorgan los Derechos Licenciados en consideración a su aceptación de estos términos y condiciones, y el Licenciante le otorga dichos derechos en consideración a los beneficios que el Licenciante recibe al poner el Material Licenciado a disposición bajo estos términos y condiciones. - -Sección 1 -- Definiciones. - - a. Material Adaptado significa material sujeto a Derechos de Autor y Derechos Similares que se deriva o basa en el Material Licenciado y en el que el Material Licenciado se traduce, altera, arregla, transforma o modifica de otro modo de una manera que requiere permiso bajo los Derechos de Autor y Derechos Similares que posee el Licenciante. A los efectos de esta Licencia Pública, cuando el Material Licenciado es una obra musical, interpretación o grabación sonora, siempre se produce Material Adaptado cuando el Material Licenciado se sincroniza en relación temporal con una imagen en movimiento. - - b. Licencia del Adaptador significa la licencia que Usted aplica a sus Derechos de Autor y Derechos Similares en sus contribuciones al Material Adaptado de acuerdo con los términos y condiciones de esta Licencia Pública. - - c. Licencia Compatible BY-SA significa una licencia enumerada en creativecommons.org/compatiblelicenses, aprobada por Creative Commons como esencialmente equivalente a esta Licencia Pública. - - d. Derechos de Autor y Derechos Similares significa derechos de autor y/o derechos similares estrechamente relacionados con los derechos de autor, incluidos, entre otros, interpretación, radiodifusión, grabación sonora y Derechos de Bases de Datos Sui Generis, sin importar cómo se etiqueten o categoricen los derechos. A los efectos de esta Licencia Pública, los derechos especificados en la Sección 2(b)(1)-(2) no son Derechos de Autor y Derechos Similares. - - e. Medidas Tecnológicas Efectivas significa aquellas medidas que, en ausencia de la autoridad adecuada, no pueden ser eludidas bajo leyes que cumplen con las obligaciones bajo el Artículo 11 del Tratado de la OMPI sobre Derechos de Autor adoptado el 20 de diciembre de 1996, y/o acuerdos internacionales similares. - - f. Excepciones y Limitaciones significa uso justo, trato justo y/o cualquier otra excepción o limitación a los Derechos de Autor y Derechos Similares que se aplica a su uso del Material Licenciado. - - g. Elementos de la Licencia significa los atributos de la licencia enumerados en el nombre de una Licencia Pública de Creative Commons. Los Elementos de la Licencia de esta Licencia Pública son Atribución y CompartirIgual. - - h. Material Licenciado significa la obra artística o literaria, base de datos u otro material al que el Licenciante aplicó esta Licencia Pública. - - i. Derechos Licenciados significa los derechos que se le otorgan a Usted sujeto a los términos y condiciones de esta Licencia Pública, que se limitan a todos los Derechos de Autor y Derechos Similares que se aplican a su uso del Material Licenciado y que el Licenciante tiene autoridad para licenciar. - - j. Licenciante significa la(s) persona(s) o entidad(es) que otorgan derechos bajo esta Licencia Pública. - - k. Compartir significa proporcionar material al público por cualquier medio o proceso que requiera permiso bajo los Derechos Licenciados, como reproducción, exhibición pública, interpretación pública, distribución, difusión, comunicación o importación, y poner material a disposición del público, incluyendo de maneras que los miembros del público puedan acceder al material desde un lugar y en un momento elegido individualmente por ellos. - - l. Derechos de Bases de Datos Sui Generis significa derechos distintos de los derechos de autor resultantes de la Directiva 96/9/CE del Parlamento Europeo y del Consejo de 11 de marzo de 1996 sobre la protección jurídica de las bases de datos, en su versión modificada y/o sucedida, así como otros derechos esencialmente equivalentes en cualquier parte del mundo. - - m. Usted significa la persona o entidad que ejerce los Derechos Licenciados bajo esta Licencia Pública. Su tiene un significado correspondiente. - -Sección 2 -- Alcance. - - a. Concesión de la licencia. - - 1. Sujeto a los términos y condiciones de esta Licencia Pública, el Licenciante le otorga por la presente una licencia mundial, libre de regalías, no sublicenciable, no exclusiva e irrevocable para ejercer los Derechos Licenciados en el Material Licenciado para: - - a. reproducir y Compartir el Material Licenciado, en su totalidad o en parte; y - - b. producir, reproducir y Compartir Material Adaptado. - - 2. Excepciones y Limitaciones. Para evitar dudas, cuando se apliquen Excepciones y Limitaciones a su uso, esta Licencia Pública no se aplica y Usted no necesita cumplir con sus términos y condiciones. - - 3. Plazo. El plazo de esta Licencia Pública se especifica en la Sección 6(a). - - 4. Medios y formatos; modificaciones técnicas permitidas. El Licenciante le autoriza a ejercer los Derechos Licenciados en todos los medios y formatos, ya sean conocidos ahora o creados en el futuro, y a realizar las modificaciones técnicas necesarias para hacerlo. El Licenciante renuncia y/o acuerda no hacer valer ningún derecho o autoridad para prohibirle realizar las modificaciones técnicas necesarias para ejercer los Derechos Licenciados, incluidas las modificaciones técnicas necesarias para eludir las Medidas Tecnológicas Efectivas. A los efectos de esta Licencia Pública, simplemente realizar modificaciones autorizadas por esta Sección 2(a)(4) nunca produce Material Adaptado. - - 5. Destinatarios posteriores. - - a. Oferta del Licenciante -- Material Licenciado. Cada destinatario del Material Licenciado recibe automáticamente una oferta del Licenciante para ejercer los Derechos Licenciados bajo los términos y condiciones de esta Licencia Pública. - - b. Oferta adicional del Licenciante -- Material Adaptado. Cada destinatario de Material Adaptado de Usted recibe automáticamente una oferta del Licenciante para ejercer los Derechos Licenciados en el Material Adaptado bajo las condiciones de la Licencia del Adaptador que Usted aplique. - - c. Sin restricciones posteriores. Usted no puede ofrecer ni imponer ningún término o condición adicional o diferente, ni aplicar ninguna Medida Tecnológica Efectiva al Material Licenciado si hacerlo restringe el ejercicio de los Derechos Licenciados por parte de cualquier destinatario del Material Licenciado. - - 6. Sin respaldo. Nada en esta Licencia Pública constituye o puede interpretarse como permiso para afirmar o implicar que Usted está, o que su uso del Material Licenciado está, conectado con, o patrocinado, respaldado, o con estatus oficial otorgado por el Licenciante u otros designados para recibir atribución como se indica en la Sección 3(a)(1)(A)(i). - - b. Otros derechos. - - 1. Los derechos morales, como el derecho a la integridad, no están licenciados bajo esta Licencia Pública, ni los derechos de publicidad, privacidad y/o otros derechos de personalidad similares; sin embargo, en la medida de lo posible, el Licenciante renuncia y/o acuerda no hacer valer tales derechos que posea el Licenciante en la medida limitada necesaria para permitirle ejercer los Derechos Licenciados, pero no de otra manera. - - 2. Los derechos de patente y marca registrada no están licenciados bajo esta Licencia Pública. - - 3. En la medida de lo posible, el Licenciante renuncia a cualquier derecho a cobrar regalías de Usted por el ejercicio de los Derechos Licenciados, ya sea directamente o a través de una sociedad de gestión colectiva bajo cualquier esquema de licencia voluntaria o renunciable legal o obligatoria. En todos los demás casos, el Licenciante se reserva expresamente cualquier derecho a cobrar tales regalías. - -Sección 3 -- Condiciones de la Licencia. - -Su ejercicio de los Derechos Licenciados está expresamente sujeto a las siguientes condiciones. - - a. Atribución. - - 1. Si Usted comparte el Material Licenciado (incluyendo en forma modificada), debe: - - a. conservar lo siguiente si es proporcionado por el Licenciante con el Material Licenciado: - - i. identificación del creador(es) del Material Licenciado y cualquier otro designado para recibir atribución, de cualquier manera razonable solicitada por el Licenciante (incluyendo por seudónimo si se designa); - - ii. un aviso de derechos de autor; - - iii. un aviso que haga referencia a esta Licencia Pública; - - iv. un aviso que haga referencia a la exención de garantías; - - v. un URI o hipervínculo al Material Licenciado en la medida razonablemente practicable; - - b. indicar si Usted modificó el Material Licenciado y conservar una indicación de cualquier modificación previa; y - - c. indicar que el Material Licenciado está licenciado bajo esta Licencia Pública, e incluir el texto de, o el URI o hipervínculo a, esta Licencia Pública. - - 2. Usted puede cumplir con las condiciones en la Sección 3(a)(1) de cualquier manera razonable según el medio, los medios y el contexto en el que Usted comparta el Material Licenciado. Por ejemplo, puede ser razonable cumplir con las condiciones proporcionando un URI o hipervínculo a un recurso que incluya la información requerida. - - 3. Si el Licenciante lo solicita, Usted debe eliminar cualquier información requerida por la Sección 3(a)(1)(A) en la medida razonablemente practicable. - - b. CompartirIgual. - - Además de las condiciones en la Sección 3(a), si Usted comparte Material Adaptado que produce, también se aplican las siguientes condiciones. - - 1. La Licencia del Adaptador que Usted aplique debe ser una licencia de Creative Commons con los mismos Elementos de la Licencia, esta versión o posterior, o una Licencia Compatible BY-SA. - - 2. Usted debe incluir el texto de, o el URI o hipervínculo a, la Licencia del Adaptador que aplique. Usted puede cumplir con esta condición de cualquier manera razonable según el medio, los medios y el contexto en el que Usted comparta el Material Adaptado. - - 3. Usted no puede ofrecer ni imponer ningún término o condición adicional o diferente, ni aplicar ninguna Medida Tecnológica Efectiva al Material Adaptado que restrinja el ejercicio de los derechos otorgados bajo la Licencia del Adaptador que aplique. - -Sección 4 -- Derechos de Bases de Datos Sui Generis. - -Cuando los Derechos Licenciados incluyen Derechos de Bases de Datos Sui Generis que se aplican a su uso del Material Licenciado: - - a. para evitar dudas, la Sección 2(a)(1) le otorga el derecho a extraer, reutilizar, reproducir y compartir todo o una parte sustancial del contenido de la base de datos; - - b. si Usted incluye todo o una parte sustancial del contenido de la base de datos en una base de datos en la que Usted tiene Derechos de Bases de Datos Sui Generis, entonces la base de datos en la que Usted tiene Derechos de Bases de Datos Sui Generis (pero no su contenido individual) es Material Adaptado, incluyendo para los propósitos de la Sección 3(b); y - - c. Usted debe cumplir con las condiciones en la Sección 3(a) si comparte todo o una parte sustancial del contenido de la base de datos. - -Para evitar dudas, esta Sección 4 complementa y no reemplaza sus obligaciones bajo esta Licencia Pública cuando los Derechos Licenciados incluyen otros Derechos de Autor y Derechos Similares. - -Sección 5 -- Renuncia de Garantías y Limitación de Responsabilidad. - - a. A MENOS QUE EL LICENCIANTE LO HAYA ASUMIDO SEPARADAMENTE, EN LA MEDIDA DE LO POSIBLE, EL LICENCIANTE OFRECE EL MATERIAL LICENCIADO "TAL CUAL" Y "SEGÚN DISPONIBILIDAD", Y NO HACE REPRESENTACIONES NI GARANTÍAS DE NINGÚN TIPO RESPECTO AL MATERIAL LICENCIADO, YA SEA EXPRESAS, IMPLÍCITAS, ESTATUTARIAS U OTRAS. ESTO INCLUYE, SIN LIMITACIÓN, GARANTÍAS DE TÍTULO, COMERCIABILIDAD, IDONEIDAD PARA UN PROPÓSITO PARTICULAR, NO INFRACCIÓN, AUSENCIA DE DEFECTOS LATENTES U OTROS, PRECISIÓN, O LA PRESENCIA O AUSENCIA DE ERRORES, YA SEAN CONOCIDOS O DESCUBRIBLES. DONDE LAS RENUNCIAS DE GARANTÍAS NO ESTÉN PERMITIDAS EN SU TOTALIDAD O EN PARTE, ESTA RENUNCIA PUEDE NO APLICARSE A USTED. - - b. EN LA MEDIDA DE LO POSIBLE, EN NINGÚN CASO EL LICENCIANTE SERÁ RESPONSABLE ANTE USTED POR NINGUNA TEORÍA LEGAL (INCLUYENDO, SIN LIMITACIÓN, NEGLIGENCIA) O DE OTRO TIPO POR CUALQUIER PÉRDIDA, COSTO, GASTO O DAÑO DIRECTO, ESPECIAL, INDIRECTO, INCIDENTAL, CONSECUENTE, PUNITIVO, EJEMPLAR U OTRO QUE SURJA DE ESTA LICENCIA PÚBLICA O DEL USO DEL MATERIAL LICENCIADO, INCLUSO SI EL LICENCIANTE HA SIDO ADVERTIDO DE LA POSIBILIDAD DE TALES PÉRDIDAS, COSTOS, GASTOS O DAÑOS. DONDE UNA LIMITACIÓN DE RESPONSABILIDAD NO ESTÉ PERMITIDA EN SU TOTALIDAD O EN PARTE, ESTA LIMITACIÓN PUEDE NO APLICARSE A USTED. - - c. La renuncia de garantías y la limitación de responsabilidad proporcionadas anteriormente se interpretarán de una manera que, en la medida de lo posible, se aproxime más a una renuncia absoluta y exención de toda responsabilidad. - -Sección 6 -- Plazo y Terminación. - - a. Esta Licencia Pública se aplica por el plazo de los Derechos de Autor y Derechos Similares licenciados aquí. Sin embargo, si Usted no cumple con esta Licencia Pública, sus derechos bajo esta Licencia Pública terminan automáticamente. - - b. Cuando su derecho a usar el Material Licenciado haya terminado bajo la Sección 6(a), se reinstala: - - 1. automáticamente a partir de la fecha en que se subsana la violación, siempre que se subsane dentro de los 30 días posteriores a su descubrimiento de la violación; o - - 2. mediante reinstalación expresa por parte del Licenciante. - - Para evitar dudas, esta Sección 6(b) no afecta ningún derecho que el Licenciante pueda tener para buscar remedios por sus violaciones de esta Licencia Pública. - - c. Para evitar dudas, el Licenciante también puede ofrecer el Material Licenciado bajo términos o condiciones separados o dejar de distribuir el Material Licenciado en cualquier momento; sin embargo, hacerlo no terminará esta Licencia Pública. - - d. Las Secciones 1, 5, 6, 7 y 8 sobreviven a la terminación de esta Licencia Pública. - -Sección 7 -- Otros Términos y Condiciones. - - a. El Licenciante no estará obligado por ningún término o condición adicional o diferente comunicado por Usted a menos que se acuerde expresamente. - - b. Cualquier arreglo, entendimiento o acuerdo con respecto al Material Licenciado no mencionado aquí es separado e independiente de los términos y condiciones de esta Licencia Pública. - -Sección 8 -- Interpretación. - - a. Para evitar dudas, esta Licencia Pública no reduce, limita, restringe ni impone condiciones sobre ningún uso del Material Licenciado que pudiera hacerse legalmente sin permiso bajo esta Licencia Pública. - - b. En la medida de lo posible, si alguna disposición de esta Licencia Pública se considera inaplicable, se reformará automáticamente en la medida mínima necesaria para hacerla aplicable. Si la disposición no puede reformarse, se separará de esta Licencia Pública sin afectar la aplicabilidad de los términos y condiciones restantes. - - c. Ningún término o condición de esta Licencia Pública será renunciado y ningún incumplimiento será consentido a menos que el Licenciante - - **Descargo de responsabilidad**: - Este documento ha sido traducido utilizando servicios de traducción automática basados en IA. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción humana profesional. No somos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/es/sketchnotes/README.md b/translations/es/sketchnotes/README.md deleted file mode 100644 index e48a0654..00000000 --- a/translations/es/sketchnotes/README.md +++ /dev/null @@ -1,10 +0,0 @@ -Todo el material de sketchnotes del currículo se puede descargar aquí. - -🖨 Para imprimir en alta resolución, las versiones TIFF están disponibles en [este repositorio](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). - -🎨 Creado por: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) - -[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) - -**Descargo de responsabilidad**: -Este documento ha sido traducido utilizando servicios de traducción automática basados en inteligencia artificial. Si bien nos esforzamos por lograr precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o inexactitudes. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda la traducción profesional humana. No nos hacemos responsables de ningún malentendido o interpretación errónea que surja del uso de esta traducción. \ No newline at end of file diff --git a/translations/fr/1-Introduction/1-intro-to-ML/README.md b/translations/fr/1-Introduction/1-intro-to-ML/README.md deleted file mode 100644 index 1bbd3839..00000000 --- a/translations/fr/1-Introduction/1-intro-to-ML/README.md +++ /dev/null @@ -1,146 +0,0 @@ -# Introduction à l'apprentissage automatique - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - ---- - -[![L'apprentissage automatique pour les débutants - Introduction à l'apprentissage automatique pour les débutants](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "L'apprentissage automatique pour les débutants - Introduction à l'apprentissage automatique pour les débutants") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo présentant cette leçon. - -Bienvenue dans ce cours sur l'apprentissage automatique classique pour les débutants ! Que vous soyez complètement nouveau dans ce domaine ou un praticien expérimenté de l'apprentissage automatique cherchant à réviser un sujet, nous sommes ravis de vous avoir parmi nous ! Nous voulons créer un point de départ amical pour vos études en apprentissage automatique et serions heureux d'évaluer, de répondre et d'incorporer vos [retours](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introduction à l'apprentissage automatique](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction à l'apprentissage automatique") - ---- -## Commencer avec l'apprentissage automatique - -Avant de commencer ce programme, vous devez configurer votre ordinateur et être prêt à exécuter des notebooks localement. - -- **Configurez votre machine avec ces vidéos**. Utilisez les liens suivants pour apprendre [comment installer Python](https://youtu.be/CXZYvNRIAKM) sur votre système et [configurer un éditeur de texte](https://youtu.be/EU8eayHWoZg) pour le développement. -- **Apprenez Python**. Il est également recommandé d'avoir une compréhension de base de [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un langage de programmation utile pour les data scientists que nous utilisons dans ce cours. -- **Apprenez Node.js et JavaScript**. Nous utilisons également JavaScript à plusieurs reprises dans ce cours lors de la création d'applications web, donc vous devrez avoir [node](https://nodejs.org) et [npm](https://www.npmjs.com/) installés, ainsi que [Visual Studio Code](https://code.visualstudio.com/) disponible pour le développement en Python et JavaScript. -- **Créez un compte GitHub**. Puisque vous nous avez trouvés ici sur [GitHub](https://github.com), vous avez peut-être déjà un compte, mais sinon, créez-en un et ensuite forkez ce programme pour l'utiliser par vous-même. (N'hésitez pas à nous donner une étoile aussi 😊) -- **Explorez Scikit-learn**. Familiarisez-vous avec [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), un ensemble de bibliothèques d'apprentissage automatique que nous mentionnons dans ces leçons. - ---- -## Qu'est-ce que l'apprentissage automatique ? - -Le terme 'apprentissage automatique' est l'un des termes les plus populaires et fréquemment utilisés aujourd'hui. Il y a une possibilité non négligeable que vous ayez entendu ce terme au moins une fois si vous avez une certaine familiarité avec la technologie, peu importe le domaine dans lequel vous travaillez. Cependant, les mécanismes de l'apprentissage automatique demeurent un mystère pour la plupart des gens. Pour un débutant en apprentissage automatique, le sujet peut parfois sembler écrasant. Par conséquent, il est important de comprendre ce qu'est réellement l'apprentissage automatique et d'apprendre à ce sujet étape par étape, à travers des exemples pratiques. - ---- -## La courbe de l'engouement - -![courbe de l'engouement ml](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.fr.png) - -> Google Trends montre la récente 'courbe de l'engouement' du terme 'apprentissage automatique' - ---- -## Un univers mystérieux - -Nous vivons dans un univers rempli de mystères fascinants. De grands scientifiques tels que Stephen Hawking, Albert Einstein et bien d'autres ont consacré leur vie à la recherche d'informations significatives qui dévoilent les mystères du monde qui nous entoure. C'est la condition humaine d'apprendre : un enfant humain apprend de nouvelles choses et découvre la structure de son monde année après année en grandissant. - ---- -## Le cerveau de l'enfant - -Le cerveau d'un enfant et ses sens perçoivent les faits de leur environnement et apprennent progressivement les schémas cachés de la vie qui aident l'enfant à élaborer des règles logiques pour identifier les modèles appris. Le processus d'apprentissage du cerveau humain fait des humains la créature vivante la plus sophistiquée de ce monde. Apprendre continuellement en découvrant des schémas cachés et en innovant sur ces schémas nous permet de nous améliorer de plus en plus tout au long de notre vie. Cette capacité d'apprentissage et cette capacité d'évolution sont liées à un concept appelé [plasticité cérébrale](https://www.simplypsychology.org/brain-plasticity.html). Superficiellement, nous pouvons établir certaines similitudes motivantes entre le processus d'apprentissage du cerveau humain et les concepts d'apprentissage automatique. - ---- -## Le cerveau humain - -Le [cerveau humain](https://www.livescience.com/29365-human-brain.html) perçoit des choses du monde réel, traite les informations perçues, prend des décisions rationnelles et effectue certaines actions en fonction des circonstances. C'est ce que nous appelons un comportement intelligent. Lorsque nous programmons une imitation du processus de comportement intelligent dans une machine, on l'appelle intelligence artificielle (IA). - ---- -## Quelques terminologies - -Bien que les termes puissent prêter à confusion, l'apprentissage automatique (AA) est un sous-ensemble important de l'intelligence artificielle. **L'AA concerne l'utilisation d'algorithmes spécialisés pour découvrir des informations significatives et trouver des schémas cachés à partir de données perçues pour corroborer le processus de prise de décision rationnelle**. - ---- -## IA, AA, apprentissage profond - -![IA, AA, apprentissage profond, science des données](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.fr.png) - -> Un diagramme montrant les relations entre IA, AA, apprentissage profond et science des données. Infographie par [Jen Looper](https://twitter.com/jenlooper) inspirée par [ce graphique](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - ---- -## Concepts à couvrir - -Dans ce programme, nous allons couvrir uniquement les concepts fondamentaux de l'apprentissage automatique que tout débutant doit connaître. Nous abordons ce que nous appelons 'l'apprentissage automatique classique' principalement en utilisant Scikit-learn, une excellente bibliothèque que de nombreux étudiants utilisent pour apprendre les bases. Pour comprendre des concepts plus larges d'intelligence artificielle ou d'apprentissage profond, une solide connaissance fondamentale de l'apprentissage automatique est indispensable, et nous souhaitons donc l'offrir ici. - ---- -## Dans ce cours, vous apprendrez : - -- les concepts fondamentaux de l'apprentissage automatique -- l'histoire de l'AA -- l'AA et l'équité -- les techniques d'AA par régression -- les techniques d'AA par classification -- les techniques d'AA par clustering -- les techniques d'AA en traitement du langage naturel -- les techniques d'AA pour les prévisions de séries temporelles -- l'apprentissage par renforcement -- les applications concrètes de l'AA - ---- -## Ce que nous ne couvrirons pas - -- apprentissage profond -- réseaux de neurones -- IA - -Pour améliorer l'expérience d'apprentissage, nous éviterons les complexités des réseaux de neurones, de l'apprentissage profond - la construction de modèles à plusieurs couches utilisant des réseaux de neurones - et de l'IA, que nous aborderons dans un autre programme. Nous proposerons également un programme de science des données à venir pour nous concentrer sur cet aspect de ce domaine plus vaste. - ---- -## Pourquoi étudier l'apprentissage automatique ? - -L'apprentissage automatique, d'un point de vue systémique, est défini comme la création de systèmes automatisés capables d'apprendre des schémas cachés à partir de données pour aider à prendre des décisions intelligentes. - -Cette motivation est vaguement inspirée par la manière dont le cerveau humain apprend certaines choses en fonction des données qu'il perçoit du monde extérieur. - -✅ Réfléchissez un instant à pourquoi une entreprise voudrait essayer d'utiliser des stratégies d'apprentissage automatique plutôt que de créer un moteur basé sur des règles codées en dur. - ---- -## Applications de l'apprentissage automatique - -Les applications de l'apprentissage automatique sont désormais presque partout, et sont aussi omniprésentes que les données qui circulent dans nos sociétés, générées par nos smartphones, appareils connectés et autres systèmes. Compte tenu de l'immense potentiel des algorithmes d'apprentissage automatique à la pointe de la technologie, les chercheurs ont exploré leur capacité à résoudre des problèmes réels multidimensionnels et multidisciplinaires avec d'excellents résultats. - ---- -## Exemples d'AA appliqué - -**Vous pouvez utiliser l'apprentissage automatique de nombreuses manières** : - -- Pour prédire la probabilité de maladie à partir de l'historique médical ou des rapports d'un patient. -- Pour tirer parti des données météorologiques afin de prédire des événements météorologiques. -- Pour comprendre le sentiment d'un texte. -- Pour détecter les fausses nouvelles afin d'arrêter la propagation de la propagande. - -La finance, l'économie, les sciences de la terre, l'exploration spatiale, l'ingénierie biomédicale, la science cognitive et même des domaines des sciences humaines ont adapté l'apprentissage automatique pour résoudre les problèmes lourds en traitement de données de leur domaine. - ---- -## Conclusion - -L'apprentissage automatique automatise le processus de découverte de schémas en trouvant des idées significatives à partir de données réelles ou générées. Il a prouvé sa grande valeur dans les applications commerciales, de santé et financières, entre autres. - -Dans un avenir proche, comprendre les bases de l'apprentissage automatique sera indispensable pour les personnes de tous les domaines en raison de son adoption généralisée. - ---- -# 🚀 Défi - -Esquissez, sur papier ou en utilisant une application en ligne comme [Excalidraw](https://excalidraw.com/), votre compréhension des différences entre IA, AA, apprentissage profond et science des données. Ajoutez quelques idées de problèmes que chacune de ces techniques est bonne à résoudre. - -# [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - ---- -# Revue & Auto-étude - -Pour en savoir plus sur la façon dont vous pouvez travailler avec des algorithmes d'AA dans le cloud, suivez ce [Parcours d'apprentissage](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -Suivez un [Parcours d'apprentissage](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sur les bases de l'AA. - ---- -# Devoir - -[Commencez et exécutez](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/1-intro-to-ML/assignment.md b/translations/fr/1-Introduction/1-intro-to-ML/assignment.md deleted file mode 100644 index 2837336d..00000000 --- a/translations/fr/1-Introduction/1-intro-to-ML/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# Prêt à démarrer - -## Instructions - -Dans ce devoir non noté, vous devriez réviser Python et préparer votre environnement pour pouvoir exécuter des notebooks. - -Suivez ce [Parcours d'apprentissage Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), puis configurez vos systèmes en regardant ces vidéos d'introduction : - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/2-history-of-ML/README.md b/translations/fr/1-Introduction/2-history-of-ML/README.md deleted file mode 100644 index b80232a0..00000000 --- a/translations/fr/1-Introduction/2-history-of-ML/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# Histoire de l'apprentissage automatique - -![Résumé de l'histoire de l'apprentissage automatique dans un sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.fr.png) -> Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - ---- - -[![ML pour les débutants - Histoire de l'apprentissage automatique](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML pour les débutants - Histoire de l'apprentissage automatique") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo qui accompagne cette leçon. - -Dans cette leçon, nous allons passer en revue les principales étapes de l'histoire de l'apprentissage automatique et de l'intelligence artificielle. - -L'histoire de l'intelligence artificielle (IA) en tant que domaine est étroitement liée à l'histoire de l'apprentissage automatique, car les algorithmes et les avancées computationnelles qui sous-tendent l'apprentissage automatique ont contribué au développement de l'IA. Il est utile de se rappeler que, bien que ces domaines aient commencé à se cristalliser dans les années 1950, d'importantes [découvertes algorithmiques, statistiques, mathématiques, computationnelles et techniques](https://wikipedia.org/wiki/Timeline_of_machine_learning) ont précédé et chevauché cette époque. En fait, les gens réfléchissent à ces questions depuis [des centaines d'années](https://wikipedia.org/wiki/History_of_artificial_intelligence) : cet article discute des bases intellectuelles historiques de l'idée d'une 'machine pensante'. - ---- -## Découvertes notables - -- 1763, 1812 [Théorème de Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) et ses prédécesseurs. Ce théorème et ses applications sous-tendent l'inférence, décrivant la probabilité qu'un événement se produise en fonction des connaissances antérieures. -- 1805 [Théorie des moindres carrés](https://wikipedia.org/wiki/Least_squares) par le mathématicien français Adrien-Marie Legendre. Cette théorie, que vous découvrirez dans notre unité de Régression, aide à l'ajustement des données. -- 1913 [Chaînes de Markov](https://wikipedia.org/wiki/Markov_chain), nommées d'après le mathématicien russe Andrey Markov, sont utilisées pour décrire une séquence d'événements possibles basée sur un état précédent. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) est un type de classificateur linéaire inventé par le psychologue américain Frank Rosenblatt qui sous-tend les avancées en apprentissage profond. - ---- - -- 1967 [Voisin le plus proche](https://wikipedia.org/wiki/Nearest_neighbor) est un algorithme initialement conçu pour cartographier des itinéraires. Dans un contexte d'apprentissage automatique, il est utilisé pour détecter des motifs. -- 1970 [Rétropropagation](https://wikipedia.org/wiki/Backpropagation) est utilisée pour entraîner [des réseaux de neurones à propagation avant](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Réseaux de neurones récurrents](https://wikipedia.org/wiki/Recurrent_neural_network) sont des réseaux de neurones artificiels dérivés de réseaux de neurones à propagation avant qui créent des graphes temporels. - -✅ Faites un peu de recherche. Quelles autres dates se démarquent comme étant décisives dans l'histoire de l'apprentissage automatique et de l'IA ? - ---- -## 1950 : Machines qui pensent - -Alan Turing, une personne vraiment remarquable qui a été votée [par le public en 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) comme le plus grand scientifique du 20e siècle, est crédité d'avoir aidé à poser les bases du concept de 'machine capable de penser.' Il a dû faire face à des sceptiques et à son propre besoin de preuves empiriques de ce concept en partie en créant le [Test de Turing](https://www.bbc.com/news/technology-18475646), que vous explorerez dans nos leçons de NLP. - ---- -## 1956 : Projet de recherche d'été de Dartmouth - -"Le projet de recherche d'été de Dartmouth sur l'intelligence artificielle a été un événement marquant pour l'intelligence artificielle en tant que domaine," et c'est ici que le terme 'intelligence artificielle' a été inventé ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Chaque aspect de l'apprentissage ou toute autre caractéristique de l'intelligence peut en principe être décrit de manière si précise qu'une machine peut être faite pour le simuler. - ---- - -Le chercheur principal, le professeur de mathématiques John McCarthy, espérait "progresser sur la base de la conjecture selon laquelle chaque aspect de l'apprentissage ou toute autre caractéristique de l'intelligence peut en principe être décrit de manière si précise qu'une machine peut être faite pour le simuler." Les participants comprenaient un autre luminaire du domaine, Marvin Minsky. - -L'atelier est crédité d'avoir initié et encouragé plusieurs discussions, y compris "l'essor des méthodes symboliques, des systèmes axés sur des domaines limités (les premiers systèmes experts), et des systèmes déductifs par rapport aux systèmes inductifs." ([source](https://wikipedia.org/wiki/Dartmouth_workshop)). - ---- -## 1956 - 1974 : "Les années d'or" - -Des années 1950 au milieu des années 70, l'optimisme était fort dans l'espoir que l'IA pourrait résoudre de nombreux problèmes. En 1967, Marvin Minsky a déclaré avec confiance que "Dans une génération ... le problème de la création de 'l'intelligence artificielle' sera substantiellement résolu." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -La recherche en traitement du langage naturel a prospéré, la recherche a été affinée et rendue plus puissante, et le concept de 'micro-mondes' a été créé, où des tâches simples étaient accomplies à l'aide d'instructions en langage clair. - ---- - -La recherche était bien financée par des agences gouvernementales, des avancées ont été réalisées dans la computation et les algorithmes, et des prototypes de machines intelligentes ont été construits. Certaines de ces machines comprennent : - -* [Shakey le robot](https://wikipedia.org/wiki/Shakey_the_robot), qui pouvait manœuvrer et décider comment accomplir des tâches 'intelligemment'. - - ![Shakey, un robot intelligent](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.fr.jpg) - > Shakey en 1972 - ---- - -* Eliza, un 'chatterbot' précoce, pouvait converser avec des gens et agir comme un 'thérapeute' primitif. Vous en apprendrez davantage sur Eliza dans les leçons de NLP. - - ![Eliza, un bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.fr.png) - > Une version d'Eliza, un chatbot - ---- - -* "Le monde des blocs" était un exemple d'un micro-monde où des blocs pouvaient être empilés et triés, et des expériences sur l'enseignement aux machines de prendre des décisions pouvaient être testées. Des avancées réalisées avec des bibliothèques telles que [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ont contribué à faire progresser le traitement du langage. - - [![monde des blocs avec SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "monde des blocs avec SHRDLU") - - > 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Monde des blocs avec SHRDLU - ---- -## 1974 - 1980 : "L'hiver de l'IA" - -Au milieu des années 1970, il était devenu évident que la complexité de la création de 'machines intelligentes' avait été sous-estimée et que sa promesse, compte tenu de la puissance de calcul disponible, avait été exagérée. Le financement a diminué et la confiance dans le domaine a ralenti. Certains problèmes qui ont impacté la confiance incluent : ---- -- **Limitations**. La puissance de calcul était trop limitée. -- **Explosion combinatoire**. Le nombre de paramètres à entraîner a augmenté de manière exponentielle à mesure que l'on demandait davantage aux ordinateurs, sans évolution parallèle de la puissance et des capacités de calcul. -- **Pénurie de données**. Il y avait une pénurie de données qui entravait le processus de test, de développement et de perfectionnement des algorithmes. -- **Posons-nous les bonnes questions ?**. Les questions mêmes qui étaient posées ont commencé à être remises en question. Les chercheurs ont commencé à faire face à des critiques concernant leurs approches : - - Les tests de Turing ont été remis en question par des moyens, parmi d'autres idées, de la 'théorie de la chambre chinoise' qui postulait que "programmer un ordinateur numérique peut donner l'apparence de comprendre le langage mais ne peut produire une réelle compréhension." ([source](https://plato.stanford.edu/entries/chinese-room/)) - - L'éthique de l'introduction d'intelligences artificielles telles que le "thérapeute" ELIZA dans la société a été contestée. - ---- - -En même temps, diverses écoles de pensée en IA ont commencé à se former. Une dichotomie a été établie entre les pratiques de l'IA ["en désordre" vs. "propre"](https://wikipedia.org/wiki/Neats_and_scruffies). Les laboratoires _en désordre_ ajustaient les programmes pendant des heures jusqu'à obtenir les résultats souhaités. Les laboratoires _propres_ "se concentraient sur la logique et la résolution formelle de problèmes". ELIZA et SHRDLU étaient des systèmes _en désordre_ bien connus. Dans les années 1980, alors que la demande émergeait pour rendre les systèmes d'apprentissage automatique reproductibles, l'approche _propre_ a progressivement pris le devant de la scène, car ses résultats sont plus explicables. - ---- -## Systèmes experts des années 1980 - -À mesure que le domaine grandissait, son utilité pour les entreprises devenait plus claire, et dans les années 1980, la prolifération des 'systèmes experts' a également eu lieu. "Les systèmes experts étaient parmi les premières formes véritablement réussies de logiciels d'intelligence artificielle (IA)." ([source](https://wikipedia.org/wiki/Expert_system)). - -Ce type de système est en réalité _hybride_, consistant partiellement en un moteur de règles définissant les exigences commerciales, et un moteur d'inférence qui exploitait le système de règles pour déduire de nouveaux faits. - -Cette époque a également vu une attention croissante portée aux réseaux de neurones. - ---- -## 1987 - 1993 : "Refroidissement de l'IA" - -La prolifération de matériel spécialisé pour les systèmes experts a eu l'effet malheureux de devenir trop spécialisé. L'essor des ordinateurs personnels a également concurrencé ces grands systèmes centralisés et spécialisés. La démocratisation de l'informatique avait commencé, et cela a finalement ouvert la voie à l'explosion moderne des big data. - ---- -## 1993 - 2011 - -Cette époque a vu une nouvelle ère pour l'apprentissage automatique et l'IA, capables de résoudre certains des problèmes causés plus tôt par le manque de données et de puissance de calcul. La quantité de données a commencé à augmenter rapidement et à devenir plus largement disponible, pour le meilleur et pour le pire, surtout avec l'avènement du smartphone autour de 2007. La puissance de calcul a augmenté de manière exponentielle, et les algorithmes ont évolué en parallèle. Le domaine a commencé à gagner en maturité alors que les jours désinvoltes du passé commençaient à se cristalliser en une véritable discipline. - ---- -## Maintenant - -Aujourd'hui, l'apprentissage automatique et l'IA touchent presque tous les aspects de nos vies. Cette époque appelle à une compréhension attentive des risques et des effets potentiels de ces algorithmes sur la vie humaine. Comme l'a déclaré Brad Smith de Microsoft, "La technologie de l'information soulève des questions qui touchent au cœur des protections fondamentales des droits de l'homme, comme la vie privée et la liberté d'expression. Ces questions accroissent la responsabilité des entreprises technologiques qui créent ces produits. À notre avis, elles appellent également à une réglementation gouvernementale réfléchie et au développement de normes autour des usages acceptables" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - ---- - -Il reste à voir ce que l'avenir nous réserve, mais il est important de comprendre ces systèmes informatiques et les logiciels et algorithmes qu'ils exécutent. Nous espérons que ce programme vous aidera à acquérir une meilleure compréhension afin que vous puissiez décider par vous-même. - -[![L'histoire de l'apprentissage profond](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "L'histoire de l'apprentissage profond") -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Yann LeCun discute de l'histoire de l'apprentissage profond dans cette conférence - ---- -## 🚀Défi - -Explorez l'un de ces moments historiques et apprenez-en davantage sur les personnes qui les ont marqués. Il y a des personnages fascinants, et aucune découverte scientifique n'a jamais été réalisée dans un vide culturel. Qu'est-ce que vous découvrez ? - -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - ---- -## Revue & Auto-apprentissage - -Voici des éléments à regarder et à écouter : - -[Ce podcast où Amy Boyd discute de l'évolution de l'IA](http://runasradio.com/Shows/Show/739) -[![L'histoire de l'IA par Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "L'histoire de l'IA par Amy Boyd") - ---- - -## Tâche - -[Créer une chronologie](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/2-history-of-ML/assignment.md b/translations/fr/1-Introduction/2-history-of-ML/assignment.md deleted file mode 100644 index e342121e..00000000 --- a/translations/fr/1-Introduction/2-history-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Créer une chronologie - -## Instructions - -En utilisant [ce dépôt](https://github.com/Digital-Humanities-Toolkit/timeline-builder), créez une chronologie d'un aspect de l'histoire des algorithmes, des mathématiques, des statistiques, de l'IA ou du ML, ou une combinaison de ceux-ci. Vous pouvez vous concentrer sur une personne, une idée ou une période de réflexion prolongée. Assurez-vous d'ajouter des éléments multimédias. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| --------- | ------------------------------------------------ | ------------------------------------- | ------------------------------------------------------------------ | -| | Une chronologie déployée est présentée sous forme de page GitHub | Le code est incomplet et non déployé | La chronologie est incomplète, mal recherchée et non déployée | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/3-fairness/README.md b/translations/fr/1-Introduction/3-fairness/README.md deleted file mode 100644 index 4382d1fd..00000000 --- a/translations/fr/1-Introduction/3-fairness/README.md +++ /dev/null @@ -1,159 +0,0 @@ -# Construire des solutions d'apprentissage automatique avec une IA responsable - -![Résumé de l'IA responsable dans l'apprentissage automatique dans une sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.fr.png) -> Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz pré-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## Introduction - -Dans ce programme, vous commencerez à découvrir comment l'apprentissage automatique impacte notre vie quotidienne. Même maintenant, des systèmes et des modèles sont impliqués dans des tâches de prise de décision quotidiennes, telles que les diagnostics médicaux, les approbations de prêts ou la détection de fraudes. Il est donc important que ces modèles fonctionnent bien pour fournir des résultats fiables. Tout comme toute application logicielle, les systèmes d'IA peuvent ne pas répondre aux attentes ou avoir des résultats indésirables. C'est pourquoi il est essentiel de comprendre et d'expliquer le comportement d'un modèle d'IA. - -Imaginez ce qui peut se passer lorsque les données que vous utilisez pour construire ces modèles manquent de certaines démographies, comme la race, le sexe, les opinions politiques, la religion, ou représentent de manière disproportionnée ces démographies. Que se passe-t-il lorsque la sortie du modèle est interprétée comme favorisant une certaine démographie ? Quelle est la conséquence pour l'application ? De plus, que se passe-t-il lorsque le modèle a un résultat négatif et nuit aux personnes ? Qui est responsable du comportement des systèmes d'IA ? Ce sont quelques-unes des questions que nous explorerons dans ce programme. - -Dans cette leçon, vous allez : - -- Prendre conscience de l'importance de l'équité dans l'apprentissage automatique et des préjudices liés à l'équité. -- Vous familiariser avec la pratique d'explorer des valeurs aberrantes et des scénarios inhabituels pour garantir la fiabilité et la sécurité. -- Comprendre la nécessité de responsabiliser tout le monde en concevant des systèmes inclusifs. -- Explorer à quel point il est vital de protéger la vie privée et la sécurité des données et des personnes. -- Voir l'importance d'adopter une approche en "boîte de verre" pour expliquer le comportement des modèles d'IA. -- Être conscient de l'importance de la responsabilité pour instaurer la confiance dans les systèmes d'IA. - -## Prérequis - -Comme prérequis, veuillez suivre le parcours d'apprentissage "Principes de l'IA responsable" et regarder la vidéo ci-dessous sur le sujet : - -En savoir plus sur l'IA responsable en suivant ce [parcours d'apprentissage](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) - -[![L'approche de Microsoft en matière d'IA responsable](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "L'approche de Microsoft en matière d'IA responsable") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : L'approche de Microsoft en matière d'IA responsable - -## Équité - -Les systèmes d'IA doivent traiter tout le monde de manière équitable et éviter d'affecter des groupes de personnes similaires de manières différentes. Par exemple, lorsque les systèmes d'IA fournissent des recommandations sur des traitements médicaux, des demandes de prêt ou des emplois, ils doivent faire les mêmes recommandations à tous ceux qui ont des symptômes, des circonstances financières ou des qualifications professionnelles similaires. Chacun de nous, en tant qu'humains, porte des biais hérités qui influencent nos décisions et actions. Ces biais peuvent être évidents dans les données que nous utilisons pour entraîner les systèmes d'IA. Une telle manipulation peut parfois se produire de manière involontaire. Il est souvent difficile de savoir consciemment quand vous introduisez un biais dans les données. - -**“L'inéquité”** englobe les impacts négatifs, ou “préjudices”, pour un groupe de personnes, comme ceux définis en termes de race, de sexe, d'âge ou de statut de handicap. Les principaux préjudices liés à l'équité peuvent être classés comme suit : - -- **Allocation**, si un sexe ou une ethnie, par exemple, est favorisé par rapport à un autre. -- **Qualité de service**. Si vous entraînez les données pour un scénario spécifique mais que la réalité est beaucoup plus complexe, cela entraîne un service de mauvaise qualité. Par exemple, un distributeur de savon liquide qui ne semble pas être capable de détecter les personnes à la peau foncée. [Référence](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **Dénigrement**. Critiquer et étiqueter injustement quelque chose ou quelqu'un. Par exemple, une technologie de labellisation d'images a tristement étiqueté des images de personnes à la peau foncée comme des gorilles. -- **Sur- ou sous-représentation**. L'idée est qu'un certain groupe n'est pas vu dans une certaine profession, et tout service ou fonction qui continue à promouvoir cela contribue à nuire. -- **Stéréotypage**. Associer un groupe donné à des attributs préassignés. Par exemple, un système de traduction entre l'anglais et le turc peut avoir des inexactitudes en raison de mots ayant des associations stéréotypées avec le sexe. - -![traduction en turc](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.fr.png) -> traduction en turc - -![traduction en anglais](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.fr.png) -> traduction en anglais - -Lors de la conception et des tests des systèmes d'IA, nous devons nous assurer que l'IA est équitable et qu'elle n'est pas programmée pour prendre des décisions biaisées ou discriminatoires, ce qui est également interdit aux êtres humains. Garantir l'équité dans l'IA et l'apprentissage automatique reste un défi sociotechnique complexe. - -### Fiabilité et sécurité - -Pour établir la confiance, les systèmes d'IA doivent être fiables, sûrs et cohérents dans des conditions normales et inattendues. Il est important de savoir comment les systèmes d'IA se comporteront dans une variété de situations, surtout lorsqu'ils sont confrontés à des cas particuliers. Lors de la création de solutions d'IA, il est nécessaire de se concentrer sur la manière de gérer une grande variété de circonstances que les solutions d'IA pourraient rencontrer. Par exemple, une voiture autonome doit placer la sécurité des personnes comme une priorité absolue. En conséquence, l'IA qui alimente la voiture doit prendre en compte tous les scénarios possibles que la voiture pourrait rencontrer, tels que la nuit, les tempêtes, les blizzards, les enfants traversant la rue, les animaux de compagnie, les travaux routiers, etc. La capacité d'un système d'IA à gérer une large gamme de conditions de manière fiable et sécurisée reflète le niveau d'anticipation que le data scientist ou le développeur d'IA a pris en compte lors de la conception ou des tests du système. - -> [🎥 Cliquez ici pour une vidéo : ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) - -### Inclusivité - -Les systèmes d'IA doivent être conçus pour engager et responsabiliser tout le monde. Lors de la conception et de la mise en œuvre de systèmes d'IA, les data scientists et les développeurs d'IA identifient et abordent les barrières potentielles dans le système qui pourraient involontairement exclure des personnes. Par exemple, il y a 1 milliard de personnes handicapées dans le monde. Avec l'avancement de l'IA, elles peuvent accéder plus facilement à une large gamme d'informations et d'opportunités dans leur vie quotidienne. En s'attaquant aux barrières, cela crée des opportunités d'innover et de développer des produits d'IA offrant de meilleures expériences qui bénéficient à tous. - -> [🎥 Cliquez ici pour une vidéo : inclusivité dans l'IA](https://www.microsoft.com/videoplayer/embed/RE4vl9v) - -### Sécurité et vie privée - -Les systèmes d'IA doivent être sûrs et respecter la vie privée des personnes. Les gens ont moins confiance dans les systèmes qui mettent en danger leur vie privée, leurs informations ou leur vie. Lors de l'entraînement de modèles d'apprentissage automatique, nous nous appuyons sur des données pour produire les meilleurs résultats. Dans ce faisant, l'origine des données et leur intégrité doivent être prises en compte. Par exemple, les données ont-elles été soumises par l'utilisateur ou sont-elles disponibles publiquement ? Ensuite, lors du traitement des données, il est crucial de développer des systèmes d'IA capables de protéger les informations confidentielles et de résister aux attaques. À mesure que l'IA devient plus répandue, la protection de la vie privée et la sécurisation des informations personnelles et professionnelles importantes deviennent de plus en plus critiques et complexes. Les problèmes de confidentialité et de sécurité des données nécessitent une attention particulièrement étroite pour l'IA, car l'accès aux données est essentiel pour que les systèmes d'IA puissent faire des prédictions et des décisions précises et éclairées concernant les personnes. - -> [🎥 Cliquez ici pour une vidéo : sécurité dans l'IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - -- En tant qu'industrie, nous avons fait des avancées significatives en matière de confidentialité et de sécurité, alimentées en grande partie par des réglementations comme le RGPD (Règlement général sur la protection des données). -- Pourtant, avec les systèmes d'IA, nous devons reconnaître la tension entre le besoin de plus de données personnelles pour rendre les systèmes plus personnels et efficaces – et la vie privée. -- Tout comme avec la naissance des ordinateurs connectés à Internet, nous assistons également à une forte augmentation des problèmes de sécurité liés à l'IA. -- En même temps, nous avons vu l'IA utilisée pour améliorer la sécurité. Par exemple, la plupart des scanners antivirus modernes sont aujourd'hui alimentés par des heuristiques d'IA. -- Nous devons veiller à ce que nos processus de science des données s'harmonisent avec les dernières pratiques en matière de confidentialité et de sécurité. - -### Transparence - -Les systèmes d'IA doivent être compréhensibles. Une partie cruciale de la transparence consiste à expliquer le comportement des systèmes d'IA et de leurs composants. Améliorer la compréhension des systèmes d'IA nécessite que les parties prenantes comprennent comment et pourquoi ils fonctionnent afin qu'elles puissent identifier les problèmes de performance potentiels, les préoccupations en matière de sécurité et de confidentialité, les biais, les pratiques d'exclusion ou les résultats inattendus. Nous croyons également que ceux qui utilisent des systèmes d'IA doivent être honnêtes et transparents sur quand, pourquoi et comment ils choisissent de les déployer, ainsi que sur les limites des systèmes qu'ils utilisent. Par exemple, si une banque utilise un système d'IA pour soutenir ses décisions de prêt à la consommation, il est important d'examiner les résultats et de comprendre quelles données influencent les recommandations du système. Les gouvernements commencent à réglementer l'IA dans divers secteurs, donc les data scientists et les organisations doivent expliquer si un système d'IA respecte les exigences réglementaires, surtout lorsqu'il y a un résultat indésirable. - -> [🎥 Cliquez ici pour une vidéo : transparence dans l'IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - -- En raison de la complexité des systèmes d'IA, il est difficile de comprendre comment ils fonctionnent et d'interpréter les résultats. -- Ce manque de compréhension affecte la manière dont ces systèmes sont gérés, opérationnalisés et documentés. -- Ce manque de compréhension affecte plus important encore les décisions prises en utilisant les résultats produits par ces systèmes. - -### Responsabilité - -Les personnes qui conçoivent et déploient des systèmes d'IA doivent être responsables du fonctionnement de leurs systèmes. Le besoin de responsabilité est particulièrement crucial avec des technologies d'utilisation sensible comme la reconnaissance faciale. Récemment, il y a eu une demande croissante pour la technologie de reconnaissance faciale, en particulier de la part des organisations d'application de la loi qui voient le potentiel de la technologie dans des utilisations comme la recherche d'enfants disparus. Cependant, ces technologies pourraient potentiellement être utilisées par un gouvernement pour mettre en danger les libertés fondamentales de ses citoyens en permettant, par exemple, une surveillance continue de personnes spécifiques. Par conséquent, les data scientists et les organisations doivent être responsables de l'impact de leur système d'IA sur les individus ou la société. - -[![Un chercheur en IA avertit de la surveillance de masse par la reconnaissance faciale](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.fr.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "L'approche de Microsoft en matière d'IA responsable") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Avertissements de surveillance de masse par la reconnaissance faciale - -En fin de compte, l'une des plus grandes questions pour notre génération, en tant que première génération qui intègre l'IA dans la société, est comment s'assurer que les ordinateurs restent responsables envers les personnes et comment s'assurer que les personnes qui conçoivent des ordinateurs restent responsables envers tout le monde. - -## Évaluation d'impact - -Avant d'entraîner un modèle d'apprentissage automatique, il est important de réaliser une évaluation d'impact pour comprendre le but du système d'IA ; quelle est son utilisation prévue ; où il sera déployé ; et qui interagira avec le système. Ces éléments sont utiles pour les examinateurs ou les testeurs évaluant le système afin de savoir quels facteurs prendre en compte lors de l'identification des risques potentiels et des conséquences attendues. - -Les domaines suivants sont des axes d'attention lors de la réalisation d'une évaluation d'impact : - -* **Impact négatif sur les individus**. Être conscient de toute restriction ou exigence, d'une utilisation non prise en charge ou de toute limitation connue entravant les performances du système est vital pour s'assurer que le système n'est pas utilisé d'une manière qui pourrait nuire aux individus. -* **Exigences en matière de données**. Comprendre comment et où le système utilisera des données permet aux examinateurs d'explorer les exigences en matière de données dont vous devez tenir compte (par exemple, les réglementations sur les données RGPD ou HIPPA). De plus, examinez si la source ou la quantité de données est suffisante pour l'entraînement. -* **Résumé de l'impact**. Rassembler une liste de préjudices potentiels qui pourraient découler de l'utilisation du système. Tout au long du cycle de vie de l'apprentissage automatique, vérifiez si les problèmes identifiés sont atténués ou traités. -* **Objectifs applicables** pour chacun des six principes fondamentaux. Évaluer si les objectifs de chacun des principes sont atteints et s'il existe des lacunes. - -## Débogage avec l'IA responsable - -Tout comme le débogage d'une application logicielle, le débogage d'un système d'IA est un processus nécessaire d'identification et de résolution des problèmes dans le système. De nombreux facteurs peuvent affecter un modèle qui ne fonctionne pas comme prévu ou de manière responsable. La plupart des métriques de performance des modèles traditionnels sont des agrégats quantitatifs de la performance d'un modèle, qui ne suffisent pas à analyser comment un modèle viole les principes de l'IA responsable. De plus, un modèle d'apprentissage automatique est une boîte noire qui rend difficile la compréhension des éléments qui influencent son résultat ou de fournir une explication lorsqu'il commet une erreur. Plus tard dans ce cours, nous apprendrons comment utiliser le tableau de bord de l'IA responsable pour aider à déboguer les systèmes d'IA. Le tableau de bord fournit un outil holistique pour les data scientists et les développeurs d'IA afin de réaliser : - -* **Analyse des erreurs**. Identifier la distribution des erreurs du modèle qui peuvent affecter l'équité ou la fiabilité du système. -* **Aperçu du modèle**. Découvrir où se trouvent les disparités dans la performance du modèle à travers les cohortes de données. -* **Analyse des données**. Comprendre la distribution des données et identifier tout biais potentiel dans les données qui pourrait entraîner des problèmes d'équité, d'inclusivité et de fiabilité. -* **Interprétabilité du modèle**. Comprendre ce qui affecte ou influence les prédictions du modèle. Cela aide à expliquer le comportement du modèle, ce qui est important pour la transparence et la responsabilité. - -## 🚀 Défi - -Pour éviter que des préjudices ne soient introduits dès le départ, nous devrions : - -- avoir une diversité de parcours et de perspectives parmi les personnes travaillant sur les systèmes -- investir dans des ensembles de données qui reflètent la diversité de notre société -- développer de meilleures méthodes tout au long du cycle de vie de l'apprentissage automatique pour détecter et corriger l'IA responsable lorsqu'elle se produit - -Pensez à des scénarios réels où le manque de confiance dans un modèle est évident lors de la construction et de l'utilisation du modèle. Quoi d'autre devrions-nous considérer ? - -## [Quiz post-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## Revue & Auto-apprentissage - -Dans cette leçon, vous avez appris quelques bases des concepts d'équité et d'inéquité dans l'apprentissage automatique. - -Regardez cet atelier pour approfondir les sujets : - -- À la recherche d'une IA responsable : Mettre les principes en pratique par Besmira Nushi, Mehrnoosh Sameki et Amit Sharma - -[![Boîte à outils d'IA responsable : un cadre open-source pour construire une IA responsable](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "Boîte à outils RAI : un cadre open-source pour construire une IA responsable") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Boîte à outils RAI : un cadre open-source pour construire une IA responsable par Besmira Nushi, Mehrnoosh Sameki et Amit Sharma - -Aussi, lisez : - -- Centre de ressources RAI de Microsoft : [Ressources d'IA responsable – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) - -- Groupe de recherche FATE de Microsoft : [FATE : Équité, Responsabilité, Transparence et Éthique dans l'IA - Microsoft Research](https://www.microsoft.com/research/theme/fate/) - -Boîte à outils RAI : - -- [Dépôt GitHub de la boîte à outils d'IA responsable](https://github.com/microsoft/responsible-ai-toolbox) - -Lisez à propos des outils d'Azure Machine Learning pour garantir l'équité : - -- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) - -## Devoir - -[Explorez la boîte à outils R - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/3-fairness/assignment.md b/translations/fr/1-Introduction/3-fairness/assignment.md deleted file mode 100644 index 2a031d2d..00000000 --- a/translations/fr/1-Introduction/3-fairness/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Explorer la Boîte à Outils de l'IA Responsable - -## Instructions - -Dans cette leçon, vous avez appris sur la Boîte à Outils de l'IA Responsable, un "projet open-source, dirigé par la communauté, pour aider les data scientists à analyser et améliorer les systèmes d'IA." Pour ce devoir, explorez l'un des [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) de la Boîte à Outils RAI et faites un rapport sur vos découvertes dans un document ou une présentation. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| -------- | ---------- | ------- | --------------------- | -| | Un document ou une présentation PowerPoint est présenté, discutant des systèmes de Fairlearn, du notebook qui a été exécuté, et des conclusions tirées de son exécution | Un document est présenté sans conclusions | Aucun document n'est présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/4-techniques-of-ML/README.md b/translations/fr/1-Introduction/4-techniques-of-ML/README.md deleted file mode 100644 index edbc944a..00000000 --- a/translations/fr/1-Introduction/4-techniques-of-ML/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Techniques de l'apprentissage automatique - -Le processus de construction, d'utilisation et de maintenance des modèles d'apprentissage automatique et des données qu'ils utilisent est très différent de nombreux autres flux de travail de développement. Dans cette leçon, nous allons démystifier le processus et décrire les principales techniques que vous devez connaître. Vous allez : - -- Comprendre les processus sous-jacents à l'apprentissage automatique à un niveau élevé. -- Explorer des concepts de base tels que les 'modèles', les 'prédictions' et les 'données d'entraînement'. - -## [Quiz pré-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) - -[![ML pour les débutants - Techniques de l'apprentissage automatique](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML pour les débutants - Techniques de l'apprentissage automatique") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo sur cette leçon. - -## Introduction - -À un niveau élevé, l'art de créer des processus d'apprentissage automatique (ML) est composé de plusieurs étapes : - -1. **Décidez de la question**. La plupart des processus ML commencent par poser une question qui ne peut pas être répondue par un simple programme conditionnel ou un moteur basé sur des règles. Ces questions tournent souvent autour des prédictions basées sur une collection de données. -2. **Collectez et préparez les données**. Pour pouvoir répondre à votre question, vous avez besoin de données. La qualité et, parfois, la quantité de vos données détermineront la manière dont vous pouvez répondre à votre question initiale. La visualisation des données est un aspect important de cette phase. Cette phase comprend également la division des données en un groupe d'entraînement et un groupe de test pour construire un modèle. -3. **Choisissez une méthode d'entraînement**. En fonction de votre question et de la nature de vos données, vous devez choisir comment vous souhaitez entraîner un modèle pour refléter au mieux vos données et faire des prédictions précises. C'est la partie de votre processus ML qui nécessite une expertise spécifique et, souvent, une quantité considérable d'expérimentation. -4. **Entraînez le modèle**. En utilisant vos données d'entraînement, vous utiliserez divers algorithmes pour entraîner un modèle à reconnaître des motifs dans les données. Le modèle pourrait tirer parti de poids internes qui peuvent être ajustés pour privilégier certaines parties des données par rapport à d'autres afin de construire un meilleur modèle. -5. **Évaluez le modèle**. Vous utilisez des données jamais vues auparavant (vos données de test) de votre ensemble collecté pour voir comment le modèle fonctionne. -6. **Réglage des paramètres**. En fonction de la performance de votre modèle, vous pouvez reprendre le processus en utilisant différents paramètres, ou variables, qui contrôlent le comportement des algorithmes utilisés pour entraîner le modèle. -7. **Prédire**. Utilisez de nouvelles entrées pour tester la précision de votre modèle. - -## Quelle question poser - -Les ordinateurs sont particulièrement doués pour découvrir des motifs cachés dans les données. Cette utilité est très utile pour les chercheurs qui ont des questions sur un domaine donné qui ne peuvent pas être facilement répondues en créant un moteur de règles basé sur des conditions. Par exemple, dans une tâche actuarielle, un data scientist pourrait être en mesure de construire des règles élaborées autour de la mortalité des fumeurs par rapport aux non-fumeurs. - -Cependant, lorsque de nombreuses autres variables sont introduites dans l'équation, un modèle ML pourrait s'avérer plus efficace pour prédire les taux de mortalité futurs basés sur l'historique de santé passé. Un exemple plus joyeux pourrait être de faire des prévisions météorologiques pour le mois d'avril dans un endroit donné en fonction de données incluant la latitude, la longitude, le changement climatique, la proximité de l'océan, les motifs du jet stream, et plus encore. - -✅ Ce [diaporama](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sur les modèles météorologiques offre une perspective historique sur l'utilisation de ML dans l'analyse météorologique. - -## Tâches pré-construction - -Avant de commencer à construire votre modèle, plusieurs tâches doivent être accomplies. Pour tester votre question et formuler une hypothèse basée sur les prédictions d'un modèle, vous devez identifier et configurer plusieurs éléments. - -### Données - -Pour pouvoir répondre à votre question avec une certaine certitude, vous avez besoin d'une bonne quantité de données du bon type. Il y a deux choses que vous devez faire à ce stade : - -- **Collecter des données**. En gardant à l'esprit la leçon précédente sur l'équité dans l'analyse des données, collectez vos données avec soin. Soyez conscient des sources de ces données, de tout biais inhérent qu'elles pourraient avoir, et documentez leur origine. -- **Préparer les données**. Il y a plusieurs étapes dans le processus de préparation des données. Vous devrez peut-être rassembler les données et les normaliser si elles proviennent de sources diverses. Vous pouvez améliorer la qualité et la quantité des données par divers moyens, comme convertir des chaînes en nombres (comme nous le faisons dans [Clustering](../../5-Clustering/1-Visualize/README.md)). Vous pourriez également générer de nouvelles données, basées sur les originales (comme nous le faisons dans [Classification](../../4-Classification/1-Introduction/README.md)). Vous pouvez nettoyer et modifier les données (comme nous le ferons avant la leçon sur [Web App](../../3-Web-App/README.md)). Enfin, vous pourriez également avoir besoin de les randomiser et de les mélanger, en fonction de vos techniques d'entraînement. - -✅ Après avoir collecté et traité vos données, prenez un moment pour voir si leur forme vous permettra de répondre à votre question prévue. Il se peut que les données ne fonctionnent pas bien pour votre tâche donnée, comme nous le découvrons dans nos leçons sur [Clustering](../../5-Clustering/1-Visualize/README.md) ! - -### Caractéristiques et Cible - -Une [caractéristique](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) est une propriété mesurable de vos données. Dans de nombreux ensembles de données, elle est exprimée sous forme de titre de colonne comme 'date', 'taille' ou 'couleur'. Votre variable de caractéristique, généralement représentée par `X` dans le code, représente la variable d'entrée qui sera utilisée pour entraîner le modèle. - -Une cible est une chose que vous essayez de prédire. La cible est généralement représentée par `y` dans le code, et représente la réponse à la question que vous essayez de poser à vos données : en décembre, quelle **couleur** de citrouilles sera la moins chère ? à San Francisco, quels quartiers auront le meilleur **prix** immobilier ? Parfois, la cible est également appelée attribut étiquette. - -### Sélectionner votre variable de caractéristique - -🎓 **Sélection de caractéristiques et extraction de caractéristiques** Comment savez-vous quelle variable choisir lors de la construction d'un modèle ? Vous allez probablement passer par un processus de sélection de caractéristiques ou d'extraction de caractéristiques pour choisir les bonnes variables pour le modèle le plus performant. Ce ne sont cependant pas la même chose : "L'extraction de caractéristiques crée de nouvelles caractéristiques à partir de fonctions des caractéristiques originales, tandis que la sélection de caractéristiques retourne un sous-ensemble des caractéristiques." ([source](https://wikipedia.org/wiki/Feature_selection)) - -### Visualisez vos données - -Un aspect important de la boîte à outils du data scientist est la capacité de visualiser les données à l'aide de plusieurs bibliothèques excellentes telles que Seaborn ou MatPlotLib. Représenter vos données visuellement pourrait vous permettre de découvrir des corrélations cachées que vous pouvez exploiter. Vos visualisations pourraient également vous aider à découvrir des biais ou des données déséquilibrées (comme nous le découvrons dans [Classification](../../4-Classification/2-Classifiers-1/README.md)). - -### Divisez votre ensemble de données - -Avant l'entraînement, vous devez diviser votre ensemble de données en deux ou plusieurs parties de taille inégale qui représentent néanmoins bien les données. - -- **Entraînement**. Cette partie de l'ensemble de données est ajustée à votre modèle pour l'entraîner. Cet ensemble constitue la majorité de l'ensemble de données original. -- **Test**. Un ensemble de données de test est un groupe indépendant de données, souvent recueilli à partir des données originales, que vous utilisez pour confirmer la performance du modèle construit. -- **Validation**. Un ensemble de validation est un plus petit groupe indépendant d'exemples que vous utilisez pour ajuster les hyperparamètres du modèle, ou son architecture, afin d'améliorer le modèle. En fonction de la taille de vos données et de la question que vous posez, vous pourriez ne pas avoir besoin de construire cet ensemble supplémentaire (comme nous le notons dans [Prévisions de séries temporelles](../../7-TimeSeries/1-Introduction/README.md)). - -## Construction d'un modèle - -En utilisant vos données d'entraînement, votre objectif est de construire un modèle, ou une représentation statistique de vos données, en utilisant divers algorithmes pour **l'entraîner**. Entraîner un modèle l'expose aux données et lui permet de faire des hypothèses sur les motifs perçus qu'il découvre, valide et accepte ou rejette. - -### Décidez d'une méthode d'entraînement - -En fonction de votre question et de la nature de vos données, vous choisirez une méthode pour l'entraîner. En parcourant [la documentation de Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - que nous utilisons dans ce cours - vous pouvez explorer de nombreuses façons d'entraîner un modèle. Selon votre expérience, vous devrez peut-être essayer plusieurs méthodes différentes pour construire le meilleur modèle. Vous êtes susceptible de passer par un processus où les data scientists évaluent la performance d'un modèle en lui fournissant des données non vues, vérifiant la précision, les biais et d'autres problèmes dégradants de qualité, et sélectionnant la méthode d'entraînement la plus appropriée pour la tâche à accomplir. - -### Entraînez un modèle - -Armé de vos données d'entraînement, vous êtes prêt à 'ajuster' pour créer un modèle. Vous remarquerez que dans de nombreuses bibliothèques ML, vous trouverez le code 'model.fit' - c'est à ce moment que vous envoyez votre variable de caractéristique sous forme de tableau de valeurs (généralement 'X') et une variable cible (généralement 'y'). - -### Évaluez le modèle - -Une fois le processus d'entraînement terminé (cela peut prendre de nombreuses itérations, ou 'époques', pour entraîner un grand modèle), vous pourrez évaluer la qualité du modèle en utilisant des données de test pour évaluer sa performance. Ces données constituent un sous-ensemble des données originales que le modèle n'a pas analysées auparavant. Vous pouvez imprimer un tableau de métriques sur la qualité de votre modèle. - -🎓 **Ajustement du modèle** - -Dans le contexte de l'apprentissage automatique, l'ajustement du modèle fait référence à la précision de la fonction sous-jacente du modèle alors qu'il tente d'analyser des données avec lesquelles il n'est pas familier. - -🎓 **Sous-ajustement** et **surajustement** sont des problèmes courants qui dégradent la qualité du modèle, car le modèle s'ajuste soit pas assez bien, soit trop bien. Cela fait que le modèle fait des prédictions soit trop étroitement alignées, soit trop librement alignées avec ses données d'entraînement. Un modèle surajusté prédit trop bien les données d'entraînement parce qu'il a appris les détails et le bruit des données trop bien. Un modèle sous-ajusté n'est pas précis car il ne peut ni analyser correctement ses données d'entraînement ni les données qu'il n'a pas encore 'vues'. - -![modèle surajusté](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.fr.png) -> Infographie par [Jen Looper](https://twitter.com/jenlooper) - -## Réglage des paramètres - -Une fois votre entraînement initial terminé, observez la qualité du modèle et envisagez de l'améliorer en ajustant ses 'hyperparamètres'. Lisez-en plus sur le processus [dans la documentation](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Prédiction - -C'est le moment où vous pouvez utiliser des données complètement nouvelles pour tester la précision de votre modèle. Dans un cadre ML 'appliqué', où vous construisez des actifs web pour utiliser le modèle en production, ce processus pourrait impliquer de recueillir des entrées utilisateur (une pression sur un bouton, par exemple) pour définir une variable et l'envoyer au modèle pour inférence, ou évaluation. - -Dans ces leçons, vous découvrirez comment utiliser ces étapes pour préparer, construire, tester, évaluer et prédire - tous les gestes d'un data scientist et plus encore, à mesure que vous progressez dans votre parcours pour devenir un ingénieur ML 'full stack'. - ---- - -## 🚀Défi - -Dessinez un organigramme reflétant les étapes d'un praticien ML. Où vous voyez-vous actuellement dans le processus ? Où prévoyez-vous de rencontrer des difficultés ? Qu'est-ce qui vous semble facile ? - -## [Quiz post-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## Révision et auto-apprentissage - -Recherchez en ligne des interviews avec des data scientists qui discutent de leur travail quotidien. Voici [une](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Devoir - -[Interviewez un data scientist](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle effectuée par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/4-techniques-of-ML/assignment.md b/translations/fr/1-Introduction/4-techniques-of-ML/assignment.md deleted file mode 100644 index 123262fe..00000000 --- a/translations/fr/1-Introduction/4-techniques-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Interviewez un data scientist - -## Instructions - -Dans votre entreprise, dans un groupe d'utilisateurs, ou parmi vos amis ou camarades de classe, parlez à quelqu'un qui travaille professionnellement en tant que data scientist. Rédigez un court article (500 mots) sur ses occupations quotidiennes. Sont-ils des spécialistes, ou travaillent-ils en 'full stack' ? - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| --------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------- | ---------------------- | -| | Un essai de la bonne longueur, avec des sources attribuées, est présenté sous forme de fichier .doc | L'essai est mal attribué ou plus court que la longueur requise | Aucun essai n'est présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/1-Introduction/README.md b/translations/fr/1-Introduction/README.md deleted file mode 100644 index 4cd4dda5..00000000 --- a/translations/fr/1-Introduction/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Introduction au machine learning - -Dans cette section du programme, vous serez introduit aux concepts de base sous-jacents au domaine du machine learning, ce que c'est, et vous découvrirez son histoire ainsi que les techniques que les chercheurs utilisent pour travailler avec. Explorons ensemble ce nouveau monde du ML ! - -![globe](../../../translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.fr.jpg) -> Photo par Bill Oxford sur Unsplash - -### Leçons - -1. [Introduction au machine learning](1-intro-to-ML/README.md) -1. [L'histoire du machine learning et de l'IA](2-history-of-ML/README.md) -1. [Équité et machine learning](3-fairness/README.md) -1. [Techniques de machine learning](4-techniques-of-ML/README.md) -### Crédits - -"Introduction au Machine Learning" a été écrit avec ♥️ par une équipe de personnes incluant [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) et [Jen Looper](https://twitter.com/jenlooper) - -"L'Histoire du Machine Learning" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper) et [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Équité et Machine Learning" a été écrit avec ♥️ par [Tomomi Imura](https://twitter.com/girliemac) - -"Techniques de Machine Learning" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper) et [Chris Noring](https://twitter.com/softchris) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/1-Tools/README.md b/translations/fr/2-Regression/1-Tools/README.md deleted file mode 100644 index 36125132..00000000 --- a/translations/fr/2-Regression/1-Tools/README.md +++ /dev/null @@ -1,228 +0,0 @@ -# Commencez avec Python et Scikit-learn pour les modèles de régression - -![Résumé des régressions dans un sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.fr.png) - -> Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz pré-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -> ### [Cette leçon est disponible en R !](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) - -## Introduction - -Dans ces quatre leçons, vous découvrirez comment construire des modèles de régression. Nous discuterons bientôt de leur utilité. Mais avant de commencer, assurez-vous d'avoir les bons outils en place pour entamer le processus ! - -Dans cette leçon, vous apprendrez à : - -- Configurer votre ordinateur pour des tâches d'apprentissage automatique locales. -- Travailler avec des notebooks Jupyter. -- Utiliser Scikit-learn, y compris l'installation. -- Explorer la régression linéaire avec un exercice pratique. - -## Installations et configurations - -[![ML pour débutants - Configurez vos outils pour construire des modèles d'apprentissage automatique](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML pour débutants - Configurez vos outils pour construire des modèles d'apprentissage automatique") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo sur la configuration de votre ordinateur pour l'apprentissage automatique. - -1. **Installez Python**. Assurez-vous que [Python](https://www.python.org/downloads/) est installé sur votre ordinateur. Vous utiliserez Python pour de nombreuses tâches de science des données et d'apprentissage automatique. La plupart des systèmes informatiques incluent déjà une installation de Python. Il existe également des [packs de codage Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) utiles pour faciliter la configuration pour certains utilisateurs. - - Certaines utilisations de Python nécessitent cependant une version spécifique du logiciel, tandis que d'autres nécessitent une version différente. Pour cette raison, il est utile de travailler dans un [environnement virtuel](https://docs.python.org/3/library/venv.html). - -2. **Installez Visual Studio Code**. Assurez-vous d'avoir Visual Studio Code installé sur votre ordinateur. Suivez ces instructions pour [installer Visual Studio Code](https://code.visualstudio.com/) pour l'installation de base. Vous allez utiliser Python dans Visual Studio Code dans ce cours, donc vous voudrez peut-être revoir comment [configurer Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) pour le développement Python. - - > Familiarisez-vous avec Python en parcourant cette collection de [modules d'apprentissage](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - > - > [![Configurer Python avec Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configurer Python avec Visual Studio Code") - > - > 🎥 Cliquez sur l'image ci-dessus pour une vidéo : utiliser Python dans VS Code. - -3. **Installez Scikit-learn**, en suivant [ces instructions](https://scikit-learn.org/stable/install.html). Comme vous devez vous assurer d'utiliser Python 3, il est recommandé d'utiliser un environnement virtuel. Notez que si vous installez cette bibliothèque sur un Mac M1, il y a des instructions spéciales sur la page liée ci-dessus. - -4. **Installez Jupyter Notebook**. Vous devrez [installer le package Jupyter](https://pypi.org/project/jupyter/). - -## Votre environnement d'écriture ML - -Vous allez utiliser des **notebooks** pour développer votre code Python et créer des modèles d'apprentissage automatique. Ce type de fichier est un outil courant pour les data scientists, et ils peuvent être identifiés par leur suffixe ou extension `.ipynb`. - -Les notebooks sont un environnement interactif qui permet au développeur de coder, d'ajouter des notes et d'écrire de la documentation autour du code, ce qui est très utile pour les projets expérimentaux ou orientés recherche. - -[![ML pour débutants - Configurez Jupyter Notebooks pour commencer à construire des modèles de régression](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML pour débutants - Configurez Jupyter Notebooks pour commencer à construire des modèles de régression") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo sur cet exercice. - -### Exercice - travailler avec un notebook - -Dans ce dossier, vous trouverez le fichier _notebook.ipynb_. - -1. Ouvrez _notebook.ipynb_ dans Visual Studio Code. - - Un serveur Jupyter démarrera avec Python 3+. Vous trouverez des zones du notebook qui peuvent être `run`, des morceaux de code. Vous pouvez exécuter un bloc de code en sélectionnant l'icône qui ressemble à un bouton de lecture. - -2. Sélectionnez l'icône `md` et ajoutez un peu de markdown, et le texte suivant **# Bienvenue dans votre notebook**. - - Ensuite, ajoutez un peu de code Python. - -3. Tapez **print('hello notebook')** dans le bloc de code. -4. Sélectionnez la flèche pour exécuter le code. - - Vous devriez voir l'instruction imprimée : - - ```output - hello notebook - ``` - -![VS Code avec un notebook ouvert](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.fr.jpg) - -Vous pouvez entrelacer votre code avec des commentaires pour auto-documenter le notebook. - -✅ Pensez un instant à la différence entre l'environnement de travail d'un développeur web et celui d'un data scientist. - -## Prêt à l'emploi avec Scikit-learn - -Maintenant que Python est configuré dans votre environnement local, et que vous êtes à l'aise avec les notebooks Jupyter, mettons-nous également à l'aise avec Scikit-learn (prononcez-le `sci` as in `science`). Scikit-learn fournit une [API étendue](https://scikit-learn.org/stable/modules/classes.html#api-ref) pour vous aider à réaliser des tâches d'apprentissage automatique. - -Selon leur [site web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn est une bibliothèque d'apprentissage automatique open source qui prend en charge l'apprentissage supervisé et non supervisé. Elle fournit également divers outils pour l'ajustement de modèles, le prétraitement des données, la sélection et l'évaluation de modèles, ainsi que de nombreuses autres utilités." - -Dans ce cours, vous utiliserez Scikit-learn et d'autres outils pour construire des modèles d'apprentissage automatique afin de réaliser ce que nous appelons des tâches d'« apprentissage automatique traditionnel ». Nous avons délibérément évité les réseaux neuronaux et l'apprentissage profond, car ils sont mieux couverts dans notre futur programme "IA pour débutants". - -Scikit-learn facilite la construction de modèles et leur évaluation pour une utilisation. Elle se concentre principalement sur l'utilisation de données numériques et contient plusieurs ensembles de données prêts à l'emploi pour être utilisés comme outils d'apprentissage. Elle inclut également des modèles pré-construits pour que les étudiants puissent les essayer. Explorons le processus de chargement de données préemballées et d'utilisation d'un estimateur intégré pour le premier modèle ML avec Scikit-learn avec quelques données de base. - -## Exercice - votre premier notebook Scikit-learn - -> Ce tutoriel a été inspiré par l'[exemple de régression linéaire](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sur le site de Scikit-learn. - -[![ML pour débutants - Votre premier projet de régression linéaire en Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML pour débutants - Votre premier projet de régression linéaire en Python") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo sur cet exercice. - -Dans le fichier _notebook.ipynb_ associé à cette leçon, effacez toutes les cellules en appuyant sur l'icône 'poubelle'. - -Dans cette section, vous travaillerez avec un petit ensemble de données sur le diabète qui est intégré à Scikit-learn à des fins d'apprentissage. Imaginez que vous vouliez tester un traitement pour des patients diabétiques. Les modèles d'apprentissage automatique pourraient vous aider à déterminer quels patients répondraient mieux au traitement, en fonction de combinaisons de variables. Même un modèle de régression très basique, lorsqu'il est visualisé, pourrait montrer des informations sur des variables qui vous aideraient à organiser vos essais cliniques théoriques. - -✅ Il existe de nombreux types de méthodes de régression, et le choix dépend de la réponse que vous recherchez. Si vous souhaitez prédire la taille probable d'une personne d'un certain âge, vous utiliseriez la régression linéaire, car vous recherchez une **valeur numérique**. Si vous êtes intéressé à découvrir si un type de cuisine doit être considéré comme végétalien ou non, vous recherchez une **assignation de catégorie**, donc vous utiliseriez la régression logistique. Vous en apprendrez plus sur la régression logistique plus tard. Réfléchissez un peu à certaines questions que vous pouvez poser aux données, et lesquelles de ces méthodes seraient les plus appropriées. - -Commençons cette tâche. - -### Importer des bibliothèques - -Pour cette tâche, nous allons importer quelques bibliothèques : - -- **matplotlib**. C'est un [outil de graphisme](https://matplotlib.org/) utile et nous l'utiliserons pour créer un graphique en ligne. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) est une bibliothèque utile pour gérer des données numériques en Python. -- **sklearn**. C'est la bibliothèque [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). - -Importez quelques bibliothèques pour vous aider dans vos tâches. - -1. Ajoutez les imports en tapant le code suivant : - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Ci-dessus, vous importez `matplotlib`, `numpy` and you are importing `datasets`, `linear_model` and `model_selection` from `sklearn`. `model_selection` is used for splitting data into training and test sets. - -### The diabetes dataset - -The built-in [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) includes 442 samples of data around diabetes, with 10 feature variables, some of which include: - -- age: age in years -- bmi: body mass index -- bp: average blood pressure -- s1 tc: T-Cells (a type of white blood cells) - -✅ This dataset includes the concept of 'sex' as a feature variable important to research around diabetes. Many medical datasets include this type of binary classification. Think a bit about how categorizations such as this might exclude certain parts of a population from treatments. - -Now, load up the X and y data. - -> 🎓 Remember, this is supervised learning, and we need a named 'y' target. - -In a new code cell, load the diabetes dataset by calling `load_diabetes()`. The input `return_X_y=True` signals that `X` will be a data matrix, and `y` sera la cible de régression. - -2. Ajoutez quelques commandes print pour montrer la forme de la matrice de données et son premier élément : - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Ce que vous obtenez en réponse est un tuple. Ce que vous faites, c'est assigner les deux premières valeurs du tuple à `X` and `y` respectivement. En savoir plus [sur les tuples](https://wikipedia.org/wiki/Tuple). - - Vous pouvez voir que ces données contiennent 442 éléments formés en tableaux de 10 éléments : - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Réfléchissez un peu à la relation entre les données et la cible de régression. La régression linéaire prédit les relations entre la caractéristique X et la variable cible y. Pouvez-vous trouver la [cible](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) pour l'ensemble de données sur le diabète dans la documentation ? Que démontre cet ensemble de données, étant donné cette cible ? - -3. Ensuite, sélectionnez une portion de cet ensemble de données à tracer en sélectionnant la 3ème colonne de l'ensemble de données. Vous pouvez le faire en utilisant `:` operator to select all rows, and then selecting the 3rd column using the index (2). You can also reshape the data to be a 2D array - as required for plotting - by using `reshape(n_rows, n_columns)`. Si l'un des paramètres est -1, la dimension correspondante est calculée automatiquement. - - ```python - X = X[:, 2] - X = X.reshape((-1,1)) - ``` - - ✅ À tout moment, imprimez les données pour vérifier leur forme. - -4. Maintenant que vous avez des données prêtes à être tracées, vous pouvez voir si une machine peut aider à déterminer une séparation logique entre les nombres de cet ensemble de données. Pour ce faire, vous devez diviser à la fois les données (X) et la cible (y) en ensembles de test et d'entraînement. Scikit-learn propose un moyen simple de le faire ; vous pouvez diviser vos données de test à un point donné. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -5. Maintenant, vous êtes prêt à entraîner votre modèle ! Chargez le modèle de régression linéaire et entraînez-le avec vos ensembles d'entraînement X et y en utilisant `model.fit()` : - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` is a function you'll see in many ML libraries such as TensorFlow - -5. Then, create a prediction using test data, using the function `predict()`. Cela sera utilisé pour tracer la ligne entre les groupes de données. - - ```python - y_pred = model.predict(X_test) - ``` - -6. Il est maintenant temps de montrer les données dans un graphique. Matplotlib est un outil très utile pour cette tâche. Créez un nuage de points de toutes les données de test X et y, et utilisez la prédiction pour tracer une ligne à l'endroit le plus approprié, entre les regroupements de données du modèle. - - ```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() - ``` - - ![un nuage de points montrant des points de données autour du diabète](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.fr.png) - - ✅ Réfléchissez un peu à ce qui se passe ici. Une ligne droite traverse de nombreux petits points de données, mais que fait-elle exactement ? Pouvez-vous voir comment vous devriez pouvoir utiliser cette ligne pour prédire où un nouveau point de données non vu devrait se situer par rapport à l'axe y du graphique ? Essayez de mettre en mots l'utilisation pratique de ce modèle. - -Félicitations, vous avez construit votre premier modèle de régression linéaire, créé une prédiction avec celui-ci et l'avez affiché dans un graphique ! - ---- -## 🚀Défi - -Tracez une variable différente de cet ensemble de données. Indice : modifiez cette ligne : `X = X[:,2]`. Étant donné la cible de cet ensemble de données, que pouvez-vous découvrir sur la progression du diabète en tant que maladie ? -## [Quiz post-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## Revue & Auto-apprentissage - -Dans ce tutoriel, vous avez travaillé avec une régression linéaire simple, plutôt qu'avec une régression linéaire univariée ou multiple. Lisez un peu sur les différences entre ces méthodes, ou jetez un œil à [cette vidéo](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) - -Lisez davantage sur le concept de régression et réfléchissez aux types de questions auxquelles cette technique peut répondre. Suivez ce [tutoriel](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) pour approfondir votre compréhension. - -## Devoir - -[Un autre ensemble de données](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/1-Tools/assignment.md b/translations/fr/2-Regression/1-Tools/assignment.md deleted file mode 100644 index c6d0db2a..00000000 --- a/translations/fr/2-Regression/1-Tools/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Régression avec Scikit-learn - -## Instructions - -Jetez un œil au [jeu de données Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) dans Scikit-learn. Ce jeu de données contient plusieurs [cibles](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset) : 'Il se compose de trois variables d'exercice (données) et de trois variables physiologiques (cibles) collectées auprès de vingt hommes d'âge moyen dans un club de fitness'. - -Avec vos propres mots, décrivez comment créer un modèle de régression qui tracerait la relation entre le tour de taille et le nombre de redressements assis réalisés. Faites de même pour les autres points de données de ce jeu de données. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| ------------------------------- | ----------------------------------- | ----------------------------- | -------------------------- | -| Soumettre un paragraphe descriptif | Un paragraphe bien rédigé est soumis | Quelques phrases sont soumises | Aucune description n'est fournie | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/1-Tools/solution/Julia/README.md b/translations/fr/2-Regression/1-Tools/solution/Julia/README.md deleted file mode 100644 index 36441023..00000000 --- a/translations/fr/2-Regression/1-Tools/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/2-Data/README.md b/translations/fr/2-Regression/2-Data/README.md deleted file mode 100644 index cf0c7d6f..00000000 --- a/translations/fr/2-Regression/2-Data/README.md +++ /dev/null @@ -1,215 +0,0 @@ -# Construire un modèle de régression avec Scikit-learn : préparer et visualiser les données - -![Infographie de visualisation des données](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.fr.png) - -Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Quiz pré-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -> ### [Cette leçon est disponible en R !](../../../../2-Regression/2-Data/solution/R/lesson_2.html) - -## Introduction - -Maintenant que vous êtes équipé des outils nécessaires pour commencer à aborder la construction de modèles d'apprentissage automatique avec Scikit-learn, vous êtes prêt à commencer à poser des questions sur vos données. En travaillant avec des données et en appliquant des solutions ML, il est très important de comprendre comment poser la bonne question pour exploiter pleinement le potentiel de votre ensemble de données. - -Dans cette leçon, vous apprendrez : - -- Comment préparer vos données pour la construction de modèles. -- Comment utiliser Matplotlib pour la visualisation des données. - -## Poser la bonne question à vos données - -La question à laquelle vous devez répondre déterminera quel type d'algorithmes ML vous allez utiliser. Et la qualité de la réponse que vous obtiendrez dépendra fortement de la nature de vos données. - -Jetez un œil aux [données](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) fournies pour cette leçon. Vous pouvez ouvrir ce fichier .csv dans VS Code. Une rapide inspection montre immédiatement qu'il y a des blancs et un mélange de chaînes et de données numériques. Il y a aussi une colonne étrange appelée 'Package' où les données sont un mélange entre 'sacs', 'bacs' et d'autres valeurs. Les données, en fait, sont un peu en désordre. - -[![ML pour les débutants - Comment analyser et nettoyer un ensemble de données](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML pour les débutants - Comment analyser et nettoyer un ensemble de données") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo montrant comment préparer les données pour cette leçon. - -En fait, il n'est pas très courant de recevoir un ensemble de données complètement prêt à être utilisé pour créer un modèle ML. Dans cette leçon, vous apprendrez comment préparer un ensemble de données brut en utilisant des bibliothèques Python standard. Vous apprendrez également diverses techniques pour visualiser les données. - -## Étude de cas : 'le marché de la citrouille' - -Dans ce dossier, vous trouverez un fichier .csv dans le dossier racine `data` appelé [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) qui comprend 1757 lignes de données sur le marché des citrouilles, triées par ville. Il s'agit de données brutes extraites des [Rapports standards des marchés des cultures spécialisées](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribués par le Département de l'Agriculture des États-Unis. - -### Préparation des données - -Ces données sont dans le domaine public. Elles peuvent être téléchargées dans de nombreux fichiers séparés, par ville, depuis le site web de l'USDA. Pour éviter trop de fichiers séparés, nous avons concaténé toutes les données des villes en une seule feuille de calcul, ainsi nous avons déjà _préparé_ un peu les données. Ensuite, examinons de plus près les données. - -### Les données sur les citrouilles - premières conclusions - -Que remarquez-vous à propos de ces données ? Vous avez déjà vu qu'il y a un mélange de chaînes, de nombres, de blancs et de valeurs étranges que vous devez comprendre. - -Quelle question pouvez-vous poser à ces données, en utilisant une technique de régression ? Que diriez-vous de "Prédire le prix d'une citrouille à vendre durant un mois donné". En regardant à nouveau les données, il y a quelques modifications que vous devez apporter pour créer la structure de données nécessaire à la tâche. - -## Exercice - analyser les données sur les citrouilles - -Utilisons [Pandas](https://pandas.pydata.org/), (le nom signifie `Python Data Analysis`) un outil très utile pour façonner les données, pour analyser et préparer ces données sur les citrouilles. - -### D'abord, vérifiez les dates manquantes - -Vous devrez d'abord prendre des mesures pour vérifier les dates manquantes : - -1. Convertir les dates au format mois (ce sont des dates américaines, donc le format est `MM/DD/YYYY`). -2. Extraire le mois dans une nouvelle colonne. - -Ouvrez le fichier _notebook.ipynb_ dans Visual Studio Code et importez la feuille de calcul dans un nouveau dataframe Pandas. - -1. Utilisez la fonction `head()` pour afficher les cinq premières lignes. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ Quelle fonction utiliseriez-vous pour afficher les cinq dernières lignes ? - -1. Vérifiez s'il y a des données manquantes dans le dataframe actuel : - - ```python - pumpkins.isnull().sum() - ``` - - Il y a des données manquantes, mais peut-être que cela n'aura pas d'importance pour la tâche à accomplir. - -1. Pour faciliter le travail avec votre dataframe, sélectionnez uniquement les colonnes dont vous avez besoin, en utilisant `loc` function which extracts from the original dataframe a group of rows (passed as first parameter) and columns (passed as second parameter). The expression `:` dans le cas ci-dessous signifie "toutes les lignes". - - ```python - columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.loc[:, columns_to_select] - ``` - -### Ensuite, déterminez le prix moyen de la citrouille - -Réfléchissez à la façon de déterminer le prix moyen d'une citrouille dans un mois donné. Quelles colonnes choisiriez-vous pour cette tâche ? Indice : vous aurez besoin de 3 colonnes. - -Solution : prenez la moyenne des colonnes `Low Price` and `High Price` pour remplir la nouvelle colonne Price, et convertissez la colonne Date pour n'afficher que le mois. Heureusement, selon la vérification ci-dessus, il n'y a pas de données manquantes pour les dates ou les prix. - -1. Pour calculer la moyenne, ajoutez le code suivant : - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ N'hésitez pas à imprimer toutes les données que vous aimeriez vérifier en utilisant `print(month)`. - -2. Maintenant, copiez vos données converties dans un nouveau dataframe Pandas : - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - L'impression de votre dataframe vous montrera un ensemble de données propre et bien rangé sur lequel vous pouvez construire votre nouveau modèle de régression. - -### Mais attendez ! Il y a quelque chose d'étrange ici - -Si vous regardez la colonne `Package` column, pumpkins are sold in many different configurations. Some are sold in '1 1/9 bushel' measures, and some in '1/2 bushel' measures, some per pumpkin, some per pound, and some in big boxes with varying widths. - -> Pumpkins seem very hard to weigh consistently - -Digging into the original data, it's interesting that anything with `Unit of Sale` equalling 'EACH' or 'PER BIN' also have the `Package` type per inch, per bin, or 'each'. Pumpkins seem to be very hard to weigh consistently, so let's filter them by selecting only pumpkins with the string 'bushel' in their `Package`. - -1. Ajoutez un filtre en haut du fichier, sous l'importation initiale du .csv : - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Si vous imprimez les données maintenant, vous pouvez voir que vous ne recevez que les 415 lignes de données contenant des citrouilles par le boisseau. - -### Mais attendez ! Il y a encore une chose à faire - -Avez-vous remarqué que la quantité par boisseau varie par ligne ? Vous devez normaliser les prix afin de montrer le prix par boisseau, donc faites quelques calculs pour le standardiser. - -1. Ajoutez ces lignes après le bloc créant le nouveau dataframe 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) - ``` - -✅ Selon [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), le poids d'un boisseau dépend du type de produit, car c'est une mesure de volume. "Un boisseau de tomates, par exemple, est censé peser 56 livres... Les feuilles et les légumes prennent plus de place avec moins de poids, donc un boisseau d'épinards ne pèse que 20 livres." C'est assez compliqué ! Ne nous embêtons pas à faire une conversion boisseau-livre, et plutôt à établir les prix par boisseau. Toute cette étude des boisseaux de citrouilles montre cependant à quel point il est très important de comprendre la nature de vos données ! - -Maintenant, vous pouvez analyser le prix par unité en fonction de leur mesure par boisseau. Si vous imprimez à nouveau les données, vous pouvez voir comment elles sont normalisées. - -✅ Avez-vous remarqué que les citrouilles vendues par demi-boisseau sont très chères ? Pouvez-vous deviner pourquoi ? Indice : les petites citrouilles sont beaucoup plus chères que les grosses, probablement parce qu'il y en a beaucoup plus par boisseau, compte tenu de l'espace inutilisé pris par une grosse citrouille creuse. - -## Stratégies de visualisation - -Une partie du rôle du data scientist est de démontrer la qualité et la nature des données avec lesquelles ils travaillent. Pour ce faire, ils créent souvent des visualisations intéressantes, ou des graphiques, des diagrammes et des tableaux, montrant différents aspects des données. De cette manière, ils peuvent montrer visuellement des relations et des lacunes qui seraient autrement difficiles à découvrir. - -[![ML pour les débutants - Comment visualiser des données avec Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML pour les débutants - Comment visualiser des données avec Matplotlib") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo montrant comment visualiser les données pour cette leçon. - -Les visualisations peuvent également aider à déterminer la technique d'apprentissage automatique la plus appropriée pour les données. Un nuage de points qui semble suivre une ligne, par exemple, indique que les données sont un bon candidat pour un exercice de régression linéaire. - -Une bibliothèque de visualisation de données qui fonctionne bien dans les notebooks Jupyter est [Matplotlib](https://matplotlib.org/) (que vous avez également vue dans la leçon précédente). - -> Obtenez plus d'expérience avec la visualisation des données dans [ces tutoriels](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Exercice - expérimenter avec Matplotlib - -Essayez de créer quelques graphiques de base pour afficher le nouveau dataframe que vous venez de créer. Que montrerait un graphique linéaire de base ? - -1. Importez Matplotlib en haut du fichier, sous l'importation de Pandas : - - ```python - import matplotlib.pyplot as plt - ``` - -1. Relancez l'ensemble du notebook pour le rafraîchir. -1. En bas du notebook, ajoutez une cellule pour tracer les données sous forme de boîte : - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Un nuage de points montrant la relation prix/mois](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.fr.png) - - Ce graphique est-il utile ? Y a-t-il quelque chose qui vous surprend ? - - Ce n'est pas particulièrement utile car tout ce qu'il fait est d'afficher vos données sous forme de dispersion de points dans un mois donné. - -### Rendez-le utile - -Pour que les graphiques affichent des données utiles, vous devez généralement regrouper les données d'une manière ou d'une autre. Essayons de créer un graphique où l'axe y montre les mois et les données démontrent la distribution des données. - -1. Ajoutez une cellule pour créer un graphique à barres groupées : - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Un graphique à barres montrant la relation prix/mois](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.fr.png) - - C'est une visualisation de données plus utile ! Il semble indiquer que le prix le plus élevé des citrouilles se produit en septembre et octobre. Cela correspond-il à vos attentes ? Pourquoi ou pourquoi pas ? - ---- - -## 🚀Défi - -Explorez les différents types de visualisation que Matplotlib propose. Quels types sont les plus appropriés pour les problèmes de régression ? - -## [Quiz post-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## Revue et auto-apprentissage - -Examinez les nombreuses façons de visualiser les données. Faites une liste des différentes bibliothèques disponibles et notez lesquelles sont les meilleures pour certains types de tâches, par exemple les visualisations 2D contre les visualisations 3D. Qu'est-ce que vous découvrez ? - -## Devoir - -[Explorer la visualisation](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/2-Data/assignment.md b/translations/fr/2-Regression/2-Data/assignment.md deleted file mode 100644 index 1eb4547b..00000000 --- a/translations/fr/2-Regression/2-Data/assignment.md +++ /dev/null @@ -1,11 +0,0 @@ -# Exploration des Visualisations - -Il existe plusieurs bibliothèques différentes disponibles pour la visualisation des données. Créez quelques visualisations en utilisant les données de Pumpkin dans cette leçon avec matplotlib et seaborn dans un carnet d'exemples. Quelles bibliothèques sont les plus faciles à utiliser ? -## Critères d'évaluation - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| -------- | --------- | -------- | ----------------- | -| | Un carnet est soumis avec deux explorations/visualisations | Un carnet est soumis avec une exploration/visualisation | Un carnet n'est pas soumis | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'atteindre une précision, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/2-Data/solution/Julia/README.md b/translations/fr/2-Regression/2-Data/solution/Julia/README.md deleted file mode 100644 index 54af1850..00000000 --- a/translations/fr/2-Regression/2-Data/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaire. Veuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/3-Linear/README.md b/translations/fr/2-Regression/3-Linear/README.md deleted file mode 100644 index ea44490e..00000000 --- a/translations/fr/2-Regression/3-Linear/README.md +++ /dev/null @@ -1,370 +0,0 @@ -# Construire un modèle de régression avec Scikit-learn : régression de quatre manières - -![Infographie sur la régression linéaire vs polynomiale](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.fr.png) -> Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -> ### [Cette leçon est disponible en R !](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### Introduction - -Jusqu'à présent, vous avez exploré ce qu'est la régression avec des données d'exemple tirées du jeu de données sur les prix des citrouilles que nous utiliserons tout au long de cette leçon. Vous l'avez également visualisé en utilisant Matplotlib. - -Vous êtes maintenant prêt à approfondir la régression pour le ML. Bien que la visualisation vous permette de comprendre les données, le véritable pouvoir de l'apprentissage automatique provient de _l'entraînement des modèles_. Les modèles sont entraînés sur des données historiques pour capturer automatiquement les dépendances des données, et ils vous permettent de prédire des résultats pour de nouvelles données que le modèle n'a pas encore vues. - -Dans cette leçon, vous en apprendrez davantage sur deux types de régression : _la régression linéaire de base_ et _la régression polynomiale_, ainsi que sur quelques mathématiques sous-jacentes à ces techniques. Ces modèles nous permettront de prédire les prix des citrouilles en fonction de différentes données d'entrée. - -[![ML pour les débutants - Comprendre la régression linéaire](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML pour les débutants - Comprendre la régression linéaire") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo présentant la régression linéaire. - -> Tout au long de ce programme, nous supposons une connaissance minimale des mathématiques et cherchons à le rendre accessible aux étudiants venant d'autres domaines. Soyez donc attentif aux notes, aux 🧮 appels, aux diagrammes et à d'autres outils d'apprentissage pour aider à la compréhension. - -### Prérequis - -Vous devriez maintenant être familiarisé avec la structure des données sur les citrouilles que nous examinons. Vous pouvez les trouver préchargées et pré-nettoyées dans le fichier _notebook.ipynb_ de cette leçon. Dans le fichier, le prix des citrouilles est affiché par boisseau dans un nouveau cadre de données. Assurez-vous de pouvoir exécuter ces notebooks dans des noyaux dans Visual Studio Code. - -### Préparation - -Pour rappel, vous chargez ces données afin de poser des questions à leur sujet. - -- Quand est le meilleur moment pour acheter des citrouilles ? -- Quel prix puis-je attendre pour un cas de citrouilles miniatures ? -- Devrais-je les acheter dans des paniers de demi-boisseau ou dans une boîte de 1 1/9 boisseau ? -Continuons à explorer ces données. - -Dans la leçon précédente, vous avez créé un cadre de données Pandas et l'avez peuplé avec une partie du jeu de données d'origine, en standardisant les prix par boisseau. Cependant, ce faisant, vous n'avez pu rassembler qu'environ 400 points de données et uniquement pour les mois d'automne. - -Jetez un œil aux données que nous avons préchargées dans le notebook accompagnant cette leçon. Les données sont préchargées et un premier nuage de points est tracé pour montrer les données mensuelles. Peut-être pouvons-nous obtenir un peu plus de détails sur la nature des données en les nettoyant davantage. - -## Une ligne de régression linéaire - -Comme vous l'avez appris dans la leçon 1, l'objectif d'un exercice de régression linéaire est de pouvoir tracer une ligne pour : - -- **Montrer les relations entre variables**. Montrer la relation entre les variables -- **Faire des prédictions**. Faire des prédictions précises sur l'endroit où un nouveau point de données se situerait par rapport à cette ligne. - -Il est typique de la **régression des moindres carrés** de tracer ce type de ligne. Le terme "moindres carrés" signifie que tous les points de données entourant la ligne de régression sont mis au carré puis additionnés. Idéalement, cette somme finale est aussi petite que possible, car nous voulons un faible nombre d'erreurs, ou `least-squares`. - -Nous le faisons car nous voulons modéliser une ligne qui a la distance cumulative la plus faible de tous nos points de données. Nous mettons également les termes au carré avant de les additionner, car nous sommes préoccupés par leur magnitude plutôt que par leur direction. - -> **🧮 Montrez-moi les mathématiques** -> -> Cette ligne, appelée _ligne de meilleur ajustement_, peut être exprimée par [une équation](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` is the 'explanatory variable'. `Y` is the 'dependent variable'. The slope of the line is `b` and `a` is the y-intercept, which refers to the value of `Y` when `X = 0`. -> ->![calculate the slope](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.fr.png) -> -> First, calculate the slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> In other words, and referring to our pumpkin data's original question: "predict the price of a pumpkin per bushel by month", `X` would refer to the price and `Y` would refer to the month of sale. -> ->![complete the equation](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.fr.png) -> -> Calculate the value of Y. If you're paying around $4, it must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> The math that calculates the line must demonstrate the slope of the line, which is also dependent on the intercept, or where `Y` is situated when `X = 0`. -> -> You can observe the method of calculation for these values on the [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Also visit [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to watch how the numbers' values impact the line. - -## Correlation - -One more term to understand is the **Correlation Coefficient** between given X and Y variables. Using a scatterplot, you can quickly visualize this coefficient. A plot with datapoints scattered in a neat line have high correlation, but a plot with datapoints scattered everywhere between X and Y have a low correlation. - -A good linear regression model will be one that has a high (nearer to 1 than 0) Correlation Coefficient using the Least-Squares Regression method with a line of regression. - -✅ Run the notebook accompanying this lesson and look at the Month to Price scatterplot. Does the data associating Month to Price for pumpkin sales seem to have high or low correlation, according to your visual interpretation of the scatterplot? Does that change if you use more fine-grained measure instead of `Month`, eg. *day of the year* (i.e. number of days since the beginning of the year)? - -In the code below, we will assume that we have cleaned up the data, and obtained a data frame called `new_pumpkins`, similar to the following: - -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 - -> The code to clean the data is available in [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). We have performed the same cleaning steps as in the previous lesson, and have calculated `DayOfYear` colonne en utilisant l'expression suivante : - -```python -day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) -``` - -Maintenant que vous comprenez les mathématiques derrière la régression linéaire, créons un modèle de régression pour voir si nous pouvons prédire quel paquet de citrouilles aura les meilleurs prix. Quelqu'un achetant des citrouilles pour un champ de citrouilles de vacances pourrait vouloir cette information pour optimiser ses achats de paquets de citrouilles pour le champ. - -## À la recherche de corrélations - -[![ML pour les débutants - À la recherche de corrélations : La clé de la régression linéaire](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML pour les débutants - À la recherche de corrélations : La clé de la régression linéaire") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo présentant la corrélation. - -Dans la leçon précédente, vous avez probablement vu que le prix moyen pour différents mois ressemble à ceci : - -Prix moyen par mois - -Cela suggère qu'il devrait y avoir une certaine corrélation, et nous pouvons essayer d'entraîner un modèle de régression linéaire pour prédire la relation entre la fonction `Month` and `Price`, or between `DayOfYear` and `Price`. Here is the scatter plot that shows the latter relationship: - -Scatter plot of Price vs. Day of Year - -Let's see if there is a correlation using the `corr` : - -```python -print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) -print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) -``` - -Il semble que la corrélation soit assez faible, -0.15 par la fonction de traçage `Month` and -0.17 by the `DayOfMonth`, but there could be another important relationship. It looks like there are different clusters of prices corresponding to different pumpkin varieties. To confirm this hypothesis, let's plot each pumpkin category using a different color. By passing an `ax` parameter to the `scatter`, nous pouvons tracer tous les points sur le même graphique : - -```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) -``` - -Nuage de points de Prix vs. Jour de l'année - -Notre enquête suggère que la variété a plus d'effet sur le prix global que la date de vente réelle. Nous pouvons voir cela avec un graphique à barres : - -```python -new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') -``` - -Graphique à barres de prix vs variété - -Concentrons-nous pour le moment uniquement sur une variété de citrouille, le 'type tarte', et voyons quel effet la date a sur le prix : - -```python -pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] -pie_pumpkins.plot.scatter('DayOfYear','Price') -``` -Nuage de points de Prix vs. Jour de l'année - -Si nous calculons maintenant la corrélation entre `Price` and `DayOfYear` using `corr` function, we will get something like `-0.27`, cela signifie que l'entraînement d'un modèle prédictif a du sens. - -> Avant d'entraîner un modèle de régression linéaire, il est important de s'assurer que nos données sont propres. La régression linéaire ne fonctionne pas bien avec des valeurs manquantes, il est donc logique de se débarrasser de toutes les cellules vides : - -```python -pie_pumpkins.dropna(inplace=True) -pie_pumpkins.info() -``` - -Une autre approche consisterait à remplir ces valeurs vides avec des valeurs moyennes de la colonne correspondante. - -## Régression linéaire simple - -[![ML pour les débutants - Régression linéaire et polynomiale avec Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML pour les débutants - Régression linéaire et polynomiale avec Scikit-learn") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo présentant la régression linéaire et polynomiale. - -Pour entraîner notre modèle de régression linéaire, nous utiliserons la bibliothèque **Scikit-learn**. - -```python -from sklearn.linear_model import LinearRegression -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -``` - -Nous commençons par séparer les valeurs d'entrée (caractéristiques) et la sortie attendue (étiquette) en tableaux numpy distincts : - -```python -X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) -y = pie_pumpkins['Price'] -``` - -> Notez que nous avons dû effectuer `reshape` sur les données d'entrée afin que le package de régression linéaire puisse les comprendre correctement. La régression linéaire attend un tableau 2D en entrée, où chaque ligne du tableau correspond à un vecteur de caractéristiques d'entrée. Dans notre cas, comme nous n'avons qu'une seule entrée - nous avons besoin d'un tableau de forme N×1, où N est la taille du jeu de données. - -Ensuite, nous devons diviser les données en ensembles d'entraînement et de test, afin que nous puissions valider notre modèle après l'entraînement : - -```python -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) -``` - -Enfin, l'entraînement du modèle de régression linéaire réel ne prend que deux lignes de code. Nous définissons la méthode `LinearRegression` object, and fit it to our data using the `fit` : - -```python -lin_reg = LinearRegression() -lin_reg.fit(X_train,y_train) -``` - -Le `LinearRegression` object after `fit`-ting contains all the coefficients of the regression, which can be accessed using `.coef_` property. In our case, there is just one coefficient, which should be around `-0.017`. It means that prices seem to drop a bit with time, but not too much, around 2 cents per day. We can also access the intersection point of the regression with Y-axis using `lin_reg.intercept_` - it will be around `21` dans notre cas, indiquant le prix au début de l'année. - -Pour voir à quel point notre modèle est précis, nous pouvons prédire les prix sur un ensemble de test, puis mesurer à quel point nos prédictions sont proches des valeurs attendues. Cela peut être fait en utilisant les métriques d'erreur quadratique moyenne (MSE), qui est la moyenne de toutes les différences au carré entre la valeur attendue et la valeur prédite. - -```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}%)') -``` - -Notre erreur semble être d'environ 2 points, ce qui représente ~17%. Pas terrible. Un autre indicateur de la qualité du modèle est le **coefficient de détermination**, qui peut être obtenu de cette manière : - -```python -score = lin_reg.score(X_train,y_train) -print('Model determination: ', score) -``` -Si la valeur est 0, cela signifie que le modèle ne prend pas en compte les données d'entrée et agit comme le *pire prédicteur linéaire*, qui est simplement une valeur moyenne du résultat. La valeur de 1 signifie que nous pouvons prédire parfaitement toutes les sorties attendues. Dans notre cas, le coefficient est d'environ 0.06, ce qui est assez faible. - -Nous pouvons également tracer les données de test avec la ligne de régression pour mieux voir comment la régression fonctionne dans notre cas : - -```python -plt.scatter(X_test,y_test) -plt.plot(X_test,pred) -``` - -Régression linéaire - -## Régression polynomiale - -Un autre type de régression linéaire est la régression polynomiale. Bien qu'il y ait parfois une relation linéaire entre les variables - plus la citrouille est grande en volume, plus le prix est élevé - parfois ces relations ne peuvent pas être tracées comme un plan ou une ligne droite. - -✅ Voici [d'autres exemples](https://online.stat.psu.edu/stat501/lesson/9/9.8) de données qui pourraient utiliser la régression polynomiale. - -Regardons à nouveau la relation entre la date et le prix. Ce nuage de points semble-t-il nécessairement devoir être analysé par une ligne droite ? Les prix ne peuvent-ils pas fluctuer ? Dans ce cas, vous pouvez essayer la régression polynomiale. - -✅ Les polynômes sont des expressions mathématiques qui peuvent consister en une ou plusieurs variables et coefficients. - -La régression polynomiale crée une ligne courbe pour mieux ajuster les données non linéaires. Dans notre cas, si nous incluons une variable `DayOfYear` au carré dans les données d'entrée, nous devrions être capables d'ajuster nos données avec une courbe parabolique, qui aura un minimum à un certain point de l'année. - -Scikit-learn inclut une [API de pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) utile pour combiner différentes étapes de traitement des données. Un **pipeline** est une chaîne d'**estimateurs**. Dans notre cas, nous allons créer un pipeline qui ajoute d'abord des caractéristiques polynomiales à notre modèle, puis entraîne la régression : - -```python -from sklearn.preprocessing import PolynomialFeatures -from sklearn.pipeline import make_pipeline - -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) - -pipeline.fit(X_train,y_train) -``` - -En utilisant `PolynomialFeatures(2)` means that we will include all second-degree polynomials from the input data. In our case it will just mean `DayOfYear`2, but given two input variables X and Y, this will add X2, XY and Y2. We may also use higher degree polynomials if we want. - -Pipelines can be used in the same manner as the original `LinearRegression` object, i.e. we can `fit` the pipeline, and then use `predict` to get the prediction results. Here is the graph showing test data, and the approximation curve: - -Polynomial regression - -Using Polynomial Regression, we can get slightly lower MSE and higher determination, but not significantly. We need to take into account other features! - -> You can see that the minimal pumpkin prices are observed somewhere around Halloween. How can you explain this? - -🎃 Congratulations, you just created a model that can help predict the price of pie pumpkins. You can probably repeat the same procedure for all pumpkin types, but that would be tedious. Let's learn now how to take pumpkin variety into account in our model! - -## Categorical Features - -In the ideal world, we want to be able to predict prices for different pumpkin varieties using the same model. However, the `Variety` column is somewhat different from columns like `Month`, because it contains non-numeric values. Such columns are called **categorical**. - -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") - -> 🎥 Click the image above for a short video overview of using categorical features. - -Here you can see how average price depends on variety: - -Average price by variety - -To take variety into account, we first need to convert it to numeric form, or **encode** it. There are several way we can do it: - -* Simple **numeric encoding** will build a table of different varieties, and then replace the variety name by an index in that table. This is not the best idea for linear regression, because linear regression takes the actual numeric value of the index, and adds it to the result, multiplying by some coefficient. In our case, the relationship between the index number and the price is clearly non-linear, even if we make sure that indices are ordered in some specific way. -* **One-hot encoding** will replace the `Variety` column by 4 different columns, one for each variety. Each column will contain `1` if the corresponding row is of a given variety, and `0` autrement. Cela signifie qu'il y aura quatre coefficients dans la régression linéaire, un pour chaque variété de citrouille, responsable du "prix de départ" (ou plutôt du "prix supplémentaire") pour cette variété particulière. - -Le code ci-dessous montre comment nous pouvons encoder une variété en one-hot : - -```python -pd.get_dummies(new_pumpkins['Variety']) -``` - - ID | FAIRYTALE | MINIATURE | VARIÉTÉS HEIRLOOM MIXTES | TYPE TARTE -----|-----------|-----------|--------------------------|---------- -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 - -Pour entraîner la régression linéaire en utilisant la variété encodée en one-hot comme entrée, nous devons simplement initialiser correctement les données `X` and `y` : - -```python -X = pd.get_dummies(new_pumpkins['Variety']) -y = new_pumpkins['Price'] -``` - -Le reste du code est le même que celui que nous avons utilisé ci-dessus pour entraîner la régression linéaire. Si vous essayez, vous verrez que l'erreur quadratique moyenne est à peu près la même, mais nous obtenons un coefficient de détermination beaucoup plus élevé (~77%). Pour obtenir des prédictions encore plus précises, nous pouvons prendre en compte d'autres caractéristiques catégorielles, ainsi que des caractéristiques numériques, telles que `Month` or `DayOfYear`. To get one large array of features, we can use `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'] -``` - -Ici, nous prenons également en compte le type de `City` and `Package`, ce qui nous donne un MSE de 2.84 (10%) et une détermination de 0.94 ! - -## Mettre le tout ensemble - -Pour créer le meilleur modèle, nous pouvons utiliser des données combinées (catégorielles encodées en one-hot + numériques) de l'exemple ci-dessus avec la régression polynomiale. Voici le code complet pour votre commodité : - -```python -# set up training data -X = pd.get_dummies(new_pumpkins['Variety']) \ - .join(new_pumpkins['Month']) \ - .join(pd.get_dummies(new_pumpkins['City'])) \ - .join(pd.get_dummies(new_pumpkins['Package'])) -y = new_pumpkins['Price'] - -# make train-test split -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - -# setup and train the pipeline -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) -pipeline.fit(X_train,y_train) - -# predict results for test data -pred = pipeline.predict(X_test) - -# calculate MSE and determination -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') - -score = pipeline.score(X_train,y_train) -print('Model determination: ', score) -``` - -Cela devrait nous donner le meilleur coefficient de détermination de presque 97%, et un MSE de 2.23 (~8% d'erreur de prédiction). - -| Modèle | MSE | Détermination | -|-------|-----|---------------| -| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | -| `Variety` Linéaire | 5.24 (19.7%) | 0.77 | -| Toutes les caractéristiques Linéaire | 2.84 (10.5%) | 0.94 | -| Toutes les caractéristiques Polynomiale | 2.23 (8.25%) | 0.97 | - -🏆 Bien joué ! Vous avez créé quatre modèles de régression en une leçon et amélioré la qualité du modèle à 97%. Dans la section finale sur la régression, vous apprendrez la régression logistique pour déterminer des catégories. - ---- -## 🚀Défi - -Testez plusieurs variables différentes dans ce notebook pour voir comment la corrélation correspond à la précision du modèle. - -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## Révision & Auto-apprentissage - -Dans cette leçon, nous avons appris sur la régression linéaire. Il existe d'autres types importants de régression. Lisez sur les techniques Stepwise, Ridge, Lasso et Elasticnet. Un bon cours à étudier pour en savoir plus est le [cours de Stanford sur l'apprentissage statistique](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## Devoir - -[Construire un modèle](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous visons à atteindre une précision, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/3-Linear/assignment.md b/translations/fr/2-Regression/3-Linear/assignment.md deleted file mode 100644 index 5cd76d96..00000000 --- a/translations/fr/2-Regression/3-Linear/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Créer un Modèle de Régression - -## Instructions - -Dans cette leçon, vous avez appris à construire un modèle en utilisant à la fois la Régression Linéaire et la Régression Polynomiale. En utilisant ces connaissances, trouvez un ensemble de données ou utilisez l'un des ensembles intégrés de Scikit-learn pour construire un nouveau modèle. Expliquez dans votre carnet de notes pourquoi vous avez choisi la technique que vous avez utilisée et démontrez la précision de votre modèle. S'il n'est pas précis, expliquez pourquoi. - -## Critères d'évaluation - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| ---------- | ------------------------------------------------------------ | ------------------------- | ----------------------------------- | -| | présente un carnet de notes complet avec une solution bien documentée | la solution est incomplète | la solution est défectueuse ou comporte des bogues | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/3-Linear/solution/Julia/README.md b/translations/fr/2-Regression/3-Linear/solution/Julia/README.md deleted file mode 100644 index 633cb2cc..00000000 --- a/translations/fr/2-Regression/3-Linear/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaire. Veuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/4-Logistic/README.md b/translations/fr/2-Regression/4-Logistic/README.md deleted file mode 100644 index e0afdd76..00000000 --- a/translations/fr/2-Regression/4-Logistic/README.md +++ /dev/null @@ -1,370 +0,0 @@ -# Régression logistique pour prédire des catégories - -![Infographie sur la régression logistique vs. régression linéaire](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.fr.png) - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -> ### [Cette leçon est disponible en R !](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) - -## Introduction - -Dans cette dernière leçon sur la régression, l'une des techniques ML _classiques_ de base, nous allons examiner la régression logistique. Vous utiliseriez cette technique pour découvrir des motifs afin de prédire des catégories binaires. Ce bonbon est-il en chocolat ou non ? Cette maladie est-elle contagieuse ou non ? Ce client choisira-t-il ce produit ou non ? - -Dans cette leçon, vous apprendrez : - -- Une nouvelle bibliothèque pour la visualisation des données -- Des techniques pour la régression logistique - -✅ Approfondissez votre compréhension de ce type de régression dans ce [module d'apprentissage](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) - -## Prérequis - -Ayant travaillé avec les données sur les citrouilles, nous sommes maintenant suffisamment familiarisés avec celles-ci pour réaliser qu'il y a une catégorie binaire avec laquelle nous pouvons travailler : `Color`. - -Construisons un modèle de régression logistique pour prédire, étant donné certaines variables, _de quelle couleur une citrouille donnée est susceptible d'être_ (orange 🎃 ou blanche 👻). - -> Pourquoi parlons-nous de classification binaire dans un groupe de leçons sur la régression ? Seulement pour des raisons linguistiques, car la régression logistique est [réellement une méthode de classification](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bien qu'elle soit basée sur une approche linéaire. Découvrez d'autres façons de classer les données dans le prochain groupe de leçons. - -## Définir la question - -Pour nos besoins, nous allons l'exprimer sous forme binaire : 'Blanc' ou 'Pas Blanc'. Il y a aussi une catégorie 'rayée' dans notre ensemble de données, mais il y a peu d'instances, donc nous ne l'utiliserons pas. De toute façon, elle disparaît une fois que nous avons supprimé les valeurs nulles de l'ensemble de données. - -> 🎃 Fait amusant, nous appelons parfois les citrouilles blanches des citrouilles 'fantômes'. Elles ne sont pas très faciles à sculpter, donc elles ne sont pas aussi populaires que les oranges, mais elles sont vraiment belles ! Nous pourrions donc également reformuler notre question comme suit : 'Fantôme' ou 'Pas Fantôme'. 👻 - -## À propos de la régression logistique - -La régression logistique diffère de la régression linéaire, que vous avez étudiée précédemment, de plusieurs manières importantes. - -[![ML pour débutants - Comprendre la régression logistique pour la classification en apprentissage automatique](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML pour débutants - Comprendre la régression logistique pour la classification en apprentissage automatique") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo d'introduction à la régression logistique. - -### Classification binaire - -La régression logistique n'offre pas les mêmes fonctionnalités que la régression linéaire. La première fournit une prédiction sur une catégorie binaire ("blanc ou pas blanc"), tandis que la seconde est capable de prédire des valeurs continues, par exemple, étant donné l'origine d'une citrouille et le moment de la récolte, _quel sera l'augmentation de son prix_. - -![Modèle de classification des citrouilles](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.fr.png) -> Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Autres classifications - -Il existe d'autres types de régression logistique, y compris multinomiale et ordinale : - -- **Multinomiale**, qui implique d'avoir plus d'une catégorie - "Orange, Blanc et Rayé". -- **Ordinale**, qui implique des catégories ordonnées, utile si nous voulons ordonner nos résultats logiquement, comme nos citrouilles qui sont classées par un nombre fini de tailles (mini, sm, med, lg, xl, xxl). - -![Régression multinomiale vs ordinale](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.fr.png) - -### Les variables N'ONT PAS besoin de corréler - -Rappelez-vous comment la régression linéaire fonctionnait mieux avec des variables plus corrélées ? La régression logistique est l'opposée - les variables n'ont pas besoin de s'aligner. Cela fonctionne pour ces données qui présentent des corrélations relativement faibles. - -### Vous avez besoin de beaucoup de données propres - -La régression logistique donnera des résultats plus précis si vous utilisez plus de données ; notre petit ensemble de données n'est pas optimal pour cette tâche, alors gardez cela à l'esprit. - -[![ML pour débutants - Analyse et préparation des données pour la régression logistique](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML pour débutants - Analyse et préparation des données pour la régression logistique") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo d'introduction à la préparation des données pour la régression linéaire - -✅ Pensez aux types de données qui se prêteraient bien à la régression logistique. - -## Exercice - nettoyer les données - -Tout d'abord, nettoyez un peu les données, en supprimant les valeurs nulles et en sélectionnant seulement certaines colonnes : - -1. Ajoutez le code suivant : - - ```python - - columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] - pumpkins = full_pumpkins.loc[:, columns_to_select] - - pumpkins.dropna(inplace=True) - ``` - - Vous pouvez toujours jeter un œil à votre nouveau dataframe : - - ```python - pumpkins.info - ``` - -### Visualisation - graphique catégorique - -À ce stade, vous avez à nouveau chargé le [carnet de démarrage](../../../../2-Regression/4-Logistic/notebook.ipynb) avec les données sur les citrouilles et l'avez nettoyé afin de préserver un ensemble de données contenant quelques variables, y compris `Color`. Visualisons le dataframe dans le carnet en utilisant une autre bibliothèque : [Seaborn](https://seaborn.pydata.org/index.html), qui est construite sur Matplotlib que nous avons utilisée précédemment. - -Seaborn propose des moyens intéressants de visualiser vos données. Par exemple, vous pouvez comparer les distributions des données pour chaque `Variety` et `Color` dans un graphique catégorique. - -1. Créez un tel graphique en utilisant le `catplot` function, using our pumpkin data `pumpkins`, et en spécifiant un mappage des couleurs pour chaque catégorie de citrouille (orange ou blanche) : - - ```python - import seaborn as sns - - palette = { - 'ORANGE': 'orange', - 'WHITE': 'wheat', - } - - sns.catplot( - data=pumpkins, y="Variety", hue="Color", kind="count", - palette=palette, - ) - ``` - - ![Une grille de données visualisées](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.fr.png) - - En observant les données, vous pouvez voir comment les données de couleur se rapportent à la variété. - - ✅ Étant donné ce graphique catégorique, quelles explorations intéressantes pouvez-vous envisager ? - -### Prétraitement des données : encodage des caractéristiques et des étiquettes -Notre ensemble de données sur les citrouilles contient des valeurs de chaîne pour toutes ses colonnes. Travailler avec des données catégorielles est intuitif pour les humains mais pas pour les machines. Les algorithmes d'apprentissage automatique fonctionnent bien avec des chiffres. C'est pourquoi l'encodage est une étape très importante dans la phase de prétraitement des données, car il nous permet de transformer les données catégorielles en données numériques, sans perdre d'informations. Un bon encodage conduit à la construction d'un bon modèle. - -Pour l'encodage des caractéristiques, il existe deux principaux types d'encodeurs : - -1. Encodeur ordinal : il convient bien aux variables ordinales, qui sont des variables catégorielles dont les données suivent un ordre logique, comme la colonne `Item Size` dans notre ensemble de données. Il crée un mappage tel que chaque catégorie est représentée par un nombre, qui est l'ordre de la catégorie dans la colonne. - - ```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. Encodeur catégorique : il convient bien aux variables nominales, qui sont des variables catégorielles dont les données ne suivent pas un ordre logique, comme toutes les caractéristiques différentes de `Item Size` dans notre ensemble de données. C'est un encodage one-hot, ce qui signifie que chaque catégorie est représentée par une colonne binaire : la variable encodée est égale à 1 si la citrouille appartient à cette variété et 0 sinon. - - ```python - from sklearn.preprocessing import OneHotEncoder - - categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] - categorical_encoder = OneHotEncoder(sparse_output=False) - ``` -Ensuite, `ColumnTransformer` est utilisé pour combiner plusieurs encodeurs en une seule étape et les appliquer aux colonnes appropriées. - -```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) -``` -D'autre part, pour encoder l'étiquette, nous utilisons la classe `LabelEncoder` de scikit-learn, qui est une classe utilitaire pour aider à normaliser les étiquettes afin qu'elles ne contiennent que des valeurs comprises entre 0 et n_classes-1 (ici, 0 et 1). - -```python - from sklearn.preprocessing import LabelEncoder - - label_encoder = LabelEncoder() - encoded_label = label_encoder.fit_transform(pumpkins['Color']) -``` -Une fois que nous avons encodé les caractéristiques et l'étiquette, nous pouvons les fusionner dans un nouveau dataframe `encoded_pumpkins`. - -```python - encoded_pumpkins = encoded_features.assign(Color=encoded_label) -``` -✅ Quels sont les avantages d'utiliser un encodeur ordinal pour le `Item Size` column? - -### Analyse relationships between variables - -Now that we have pre-processed our data, we can analyse the relationships between the features and the label to grasp an idea of how well the model will be able to predict the label given the features. -The best way to perform this kind of analysis is plotting the data. We'll be using again the Seaborn `catplot` function, to visualize the relationships between `Item Size`, `Variety` et `Color` dans un graphique catégorique. Pour mieux tracer les données, nous utiliserons la colonne encodée `Item Size` column and the unencoded `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}") -``` -![Un catplot de données visualisées](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.fr.png) - -### Utiliser un graphique en essaim - -Puisque la couleur est une catégorie binaire (Blanc ou Pas Blanc), elle nécessite 'une [approche spécialisée](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) pour la visualisation'. Il existe d'autres façons de visualiser la relation de cette catégorie avec d'autres variables. - -Vous pouvez visualiser les variables côte à côte avec les graphiques Seaborn. - -1. Essayez un graphique 'en essaim' pour montrer la distribution des valeurs : - - ```python - palette = { - 0: 'orange', - 1: 'wheat' - } - sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) - ``` - - ![Un essaim de données visualisées](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.fr.png) - -**Attention** : le code ci-dessus pourrait générer un avertissement, car seaborn échoue à représenter une telle quantité de points de données dans un graphique en essaim. Une solution possible consiste à diminuer la taille du marqueur, en utilisant le paramètre 'size'. Cependant, soyez conscient que cela affecte la lisibilité du graphique. - -> **🧮 Montrez-moi les mathématiques** -> -> La régression logistique repose sur le concept de 'vraisemblance maximale' utilisant des [fonctions sigmoïdes](https://wikipedia.org/wiki/Sigmoid_function). Une 'Fonction Sigmoïde' sur un graphique ressemble à une forme en 'S'. Elle prend une valeur et la mappe quelque part entre 0 et 1. Sa courbe est également appelée 'courbe logistique'. Sa formule ressemble à ceci : -> -> ![fonction logistique](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.fr.png) -> -> où le point médian de la sigmoïde se trouve au point 0 des x, L est la valeur maximale de la courbe, et k est la pente de la courbe. Si le résultat de la fonction est supérieur à 0,5, l'étiquette en question sera classée comme '1' de la choix binaire. Sinon, elle sera classée comme '0'. - -## Construisez votre modèle - -Construire un modèle pour trouver ces classifications binaires est étonnamment simple dans Scikit-learn. - -[![ML pour débutants - Régression logistique pour la classification des données](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML pour débutants - Régression logistique pour la classification des données") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo d'introduction à la construction d'un modèle de régression linéaire - -1. Sélectionnez les variables que vous souhaitez utiliser dans votre modèle de classification et divisez les ensembles d'entraînement et de test en appelant `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. Maintenant, vous pouvez entraîner votre modèle, en appelant `fit()` avec vos données d'entraînement, et imprimez son résultat : - - ```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)) - ``` - - Jetez un œil au tableau de bord de votre modèle. Ce n'est pas mal, étant donné que vous avez seulement environ 1000 lignes de données : - - ```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 - ``` - -## Meilleure compréhension via une matrice de confusion - -Bien que vous puissiez obtenir un rapport de score [termes](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) en imprimant les éléments ci-dessus, vous pourriez être en mesure de comprendre votre modèle plus facilement en utilisant une [matrice de confusion](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) pour nous aider à comprendre comment le modèle fonctionne. - -> 🎓 Une '[matrice de confusion](https://wikipedia.org/wiki/Confusion_matrix)' (ou 'matrice d'erreur') est un tableau qui exprime les vrais positifs et négatifs et les faux positifs de votre modèle, permettant ainsi d'évaluer la précision des prédictions. - -1. Pour utiliser une matrice de confusion, appelez `confusion_matrix()` : - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Jetez un œil à la matrice de confusion de votre modèle : - - ```output - array([[162, 4], - [ 11, 22]]) - ``` - -Dans Scikit-learn, les lignes de la matrice de confusion (axe 0) sont les étiquettes réelles et les colonnes (axe 1) sont les étiquettes prédites. - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -Que se passe-t-il ici ? Supposons que notre modèle soit chargé de classifier des citrouilles entre deux catégories binaires, la catégorie 'blanche' et la catégorie 'non-blanche'. - -- Si votre modèle prédit qu'une citrouille n'est pas blanche et qu'elle appartient en réalité à la catégorie 'non-blanche', nous l'appelons un vrai négatif, représenté par le nombre en haut à gauche. -- Si votre modèle prédit qu'une citrouille est blanche et qu'elle appartient en réalité à la catégorie 'non-blanche', nous l'appelons un faux négatif, représenté par le nombre en bas à gauche. -- Si votre modèle prédit qu'une citrouille n'est pas blanche et qu'elle appartient en réalité à la catégorie 'blanche', nous l'appelons un faux positif, représenté par le nombre en haut à droite. -- Si votre modèle prédit qu'une citrouille est blanche et qu'elle appartient en réalité à la catégorie 'blanche', nous l'appelons un vrai positif, représenté par le nombre en bas à droite. - -Comme vous l'avez peut-être deviné, il est préférable d'avoir un plus grand nombre de vrais positifs et de vrais négatifs et un nombre plus faible de faux positifs et de faux négatifs, ce qui implique que le modèle fonctionne mieux. - -Comment la matrice de confusion est-elle liée à la précision et au rappel ? Rappelez-vous, le rapport de classification imprimé ci-dessus montrait la précision (0,85) et le rappel (0,67). - -Précision = tp / (tp + fp) = 22 / (22 + 4) = 0,8461538461538461 - -Rappel = tp / (tp + fn) = 22 / (22 + 11) = 0,6666666666666666 - -✅ Q : Selon la matrice de confusion, comment le modèle a-t-il fonctionné ? R : Pas mal ; il y a un bon nombre de vrais négatifs mais aussi quelques faux négatifs. - -Revisitons les termes que nous avons vus plus tôt avec l'aide du mappage de la matrice de confusion TP/TN et FP/FN : - -🎓 Précision : TP/(TP + FP) La fraction d'instances pertinentes parmi les instances récupérées (par exemple, quelles étiquettes étaient bien étiquetées) - -🎓 Rappel : TP/(TP + FN) La fraction d'instances pertinentes qui ont été récupérées, qu'elles soient bien étiquetées ou non - -🎓 f1-score : (2 * précision * rappel)/(précision + rappel) Une moyenne pondérée de la précision et du rappel, avec 1 étant le meilleur et 0 étant le pire - -🎓 Support : Le nombre d'occurrences de chaque étiquette récupérée - -🎓 Précision : (TP + TN)/(TP + TN + FP + FN) Le pourcentage d'étiquettes prédites avec précision pour un échantillon. - -🎓 Moyenne Macro : Le calcul de la moyenne non pondérée des métriques pour chaque étiquette, sans tenir compte du déséquilibre des étiquettes. - -🎓 Moyenne Pondérée : Le calcul de la moyenne des métriques pour chaque étiquette, en tenant compte du déséquilibre des étiquettes en les pondérant par leur support (le nombre d'instances réelles pour chaque étiquette). - -✅ Pouvez-vous penser à la métrique que vous devriez surveiller si vous souhaitez que votre modèle réduise le nombre de faux négatifs ? - -## Visualisez la courbe ROC de ce modèle - -[![ML pour débutants - Analyser la performance de la régression logistique avec les courbes ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML pour débutants - Analyser la performance de la régression logistique avec les courbes ROC") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo d'introduction aux courbes ROC - -Faisons une visualisation supplémentaire pour voir la fameuse courbe '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() -``` - -En utilisant Matplotlib, tracez le [Caractéristique de fonctionnement du récepteur](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ou ROC. Les courbes ROC sont souvent utilisées pour obtenir une vue de la sortie d'un classificateur en termes de vrais vs faux positifs. "Les courbes ROC présentent généralement le taux de vrais positifs sur l'axe Y et le - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/4-Logistic/assignment.md b/translations/fr/2-Regression/4-Logistic/assignment.md deleted file mode 100644 index b6f9d04c..00000000 --- a/translations/fr/2-Regression/4-Logistic/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Réessayer une régression - -## Instructions - -Dans la leçon, vous avez utilisé un sous-ensemble des données sur les citrouilles. Maintenant, revenez aux données originales et essayez d'utiliser l'ensemble complet, nettoyé et standardisé, pour construire un modèle de régression logistique. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -|-----------|-----------------------------------------------------------------------|-------------------------------------------------------------|-----------------------------------------------------------| -| | Un carnet est présenté avec un modèle bien expliqué et performant | Un carnet est présenté avec un modèle qui performe minimalement | Un carnet est présenté avec un modèle sous-performant ou aucun | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'atteindre l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/4-Logistic/solution/Julia/README.md b/translations/fr/2-Regression/4-Logistic/solution/Julia/README.md deleted file mode 100644 index cc2389d8..00000000 --- a/translations/fr/2-Regression/4-Logistic/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous visons à l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/2-Regression/README.md b/translations/fr/2-Regression/README.md deleted file mode 100644 index 95968bd9..00000000 --- a/translations/fr/2-Regression/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Modèles de régression pour l'apprentissage automatique -## Sujet régional : Modèles de régression pour les prix des citrouilles en Amérique du Nord 🎃 - -En Amérique du Nord, les citrouilles sont souvent sculptées en visages effrayants pour Halloween. Découvrons-en davantage sur ces légumes fascinants ! - -![jack-o-lanterns](../../../translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.fr.jpg) -> Photo par Beth Teutschmann sur Unsplash - -## Ce que vous apprendrez - -[![Introduction à la régression](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Vidéo d'introduction à la régression - Cliquez pour regarder !") -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo d'introduction rapide à cette leçon - -Les leçons de cette section portent sur les types de régression dans le contexte de l'apprentissage automatique. Les modèles de régression peuvent aider à déterminer la _relation_ entre des variables. Ce type de modèle peut prédire des valeurs telles que la longueur, la température ou l'âge, révélant ainsi des relations entre les variables tout en analysant les points de données. - -Dans cette série de leçons, vous découvrirez les différences entre la régression linéaire et logistique, et quand vous devriez préférer l'un à l'autre. - -[![Apprentissage automatique pour les débutants - Introduction aux modèles de régression pour l'apprentissage automatique](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "Apprentissage automatique pour les débutants - Introduction aux modèles de régression pour l'apprentissage automatique") - -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo présentant les modèles de régression. - -Dans ce groupe de leçons, vous serez préparé à commencer des tâches d'apprentissage automatique, y compris la configuration de Visual Studio Code pour gérer les notebooks, l'environnement commun pour les scientifiques des données. Vous découvrirez Scikit-learn, une bibliothèque pour l'apprentissage automatique, et vous construirez vos premiers modèles, en vous concentrant sur les modèles de régression dans ce chapitre. - -> Il existe des outils à faible code utiles qui peuvent vous aider à apprendre à travailler avec des modèles de régression. Essayez [Azure ML pour cette tâche](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Leçons - -1. [Outils du métier](1-Tools/README.md) -2. [Gestion des données](2-Data/README.md) -3. [Régression linéaire et polynomiale](3-Linear/README.md) -4. [Régression logistique](4-Logistic/README.md) - ---- -### Crédits - -"ML avec régression" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper) - -♥️ Les contributeurs du quiz incluent : [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) et [Ornella Altunyan](https://twitter.com/ornelladotcom) - -Le jeu de données sur les citrouilles est suggéré par [ce projet sur Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) et ses données proviennent des [Rapports Standards des Marchés de Cultures Spécialisées](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribués par le Département de l'Agriculture des États-Unis. Nous avons ajouté quelques points autour de la couleur en fonction de la variété pour normaliser la distribution. Ces données sont dans le domaine public. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par intelligence artificielle. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/3-Web-App/1-Web-App/README.md b/translations/fr/3-Web-App/1-Web-App/README.md deleted file mode 100644 index 886b4b6e..00000000 --- a/translations/fr/3-Web-App/1-Web-App/README.md +++ /dev/null @@ -1,348 +0,0 @@ -# Construire une application Web pour utiliser un modèle ML - -Dans cette leçon, vous allez entraîner un modèle ML sur un ensemble de données qui sort de l'ordinaire : _les observations d'OVNIs au cours du siècle dernier_, provenant de la base de données de NUFORC. - -Vous apprendrez : - -- Comment "pickle" un modèle entraîné -- Comment utiliser ce modèle dans une application Flask - -Nous continuerons à utiliser des notebooks pour nettoyer les données et entraîner notre modèle, mais vous pouvez pousser le processus un peu plus loin en explorant l'utilisation d'un modèle "dans la nature", pour ainsi dire : dans une application web. - -Pour ce faire, vous devez construire une application web en utilisant Flask. - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## Construction d'une application - -Il existe plusieurs façons de construire des applications web pour consommer des modèles d'apprentissage automatique. Votre architecture web peut influencer la façon dont votre modèle est entraîné. Imaginez que vous travaillez dans une entreprise où le groupe de science des données a entraîné un modèle qu'il souhaite que vous utilisiez dans une application. - -### Considérations - -Il y a beaucoup de questions à poser : - -- **Est-ce une application web ou une application mobile ?** Si vous construisez une application mobile ou si vous devez utiliser le modèle dans un contexte IoT, vous pourriez utiliser [TensorFlow Lite](https://www.tensorflow.org/lite/) et utiliser le modèle dans une application Android ou iOS. -- **Où résidera le modèle ?** Dans le cloud ou localement ? -- **Support hors ligne.** L'application doit-elle fonctionner hors ligne ? -- **Quelle technologie a été utilisée pour entraîner le modèle ?** La technologie choisie peut influencer les outils que vous devez utiliser. - - **Utilisation de TensorFlow.** Si vous entraînez un modèle en utilisant TensorFlow, par exemple, cet écosystème offre la possibilité de convertir un modèle TensorFlow pour une utilisation dans une application web en utilisant [TensorFlow.js](https://www.tensorflow.org/js/). - - **Utilisation de PyTorch.** Si vous construisez un modèle en utilisant une bibliothèque telle que [PyTorch](https://pytorch.org/), vous avez la possibilité de l'exporter au format [ONNX](https://onnx.ai/) (Open Neural Network Exchange) pour une utilisation dans des applications web JavaScript qui peuvent utiliser [Onnx Runtime](https://www.onnxruntime.ai/). Cette option sera explorée dans une leçon future pour un modèle entraîné avec Scikit-learn. - - **Utilisation de Lobe.ai ou Azure Custom Vision.** Si vous utilisez un système ML SaaS (Software as a Service) tel que [Lobe.ai](https://lobe.ai/) ou [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) pour entraîner un modèle, ce type de logiciel propose des moyens d'exporter le modèle pour de nombreuses plateformes, y compris la construction d'une API sur mesure à interroger dans le cloud par votre application en ligne. - -Vous avez également l'opportunité de construire une application web Flask entière qui serait capable d'entraîner le modèle elle-même dans un navigateur web. Cela peut également être fait en utilisant TensorFlow.js dans un contexte JavaScript. - -Pour nos besoins, étant donné que nous avons travaillé avec des notebooks basés sur Python, explorons les étapes que vous devez suivre pour exporter un modèle entraîné depuis un tel notebook vers un format lisible par une application web construite en Python. - -## Outil - -Pour cette tâche, vous avez besoin de deux outils : Flask et Pickle, tous deux fonctionnant sur Python. - -✅ Qu'est-ce que [Flask](https://palletsprojects.com/p/flask/) ? Défini comme un "micro-framework" par ses créateurs, Flask fournit les fonctionnalités de base des frameworks web utilisant Python et un moteur de template pour construire des pages web. Jetez un œil à [ce module Learn](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) pour pratiquer la construction avec Flask. - -✅ Qu'est-ce que [Pickle](https://docs.python.org/3/library/pickle.html) ? Pickle 🥒 est un module Python qui sérialise et désérialise une structure d'objet Python. Lorsque vous "pickle" un modèle, vous sérialisez ou aplatissez sa structure pour une utilisation sur le web. Faites attention : pickle n'est pas intrinsèquement sécurisé, donc soyez prudent si vous êtes invité à "un-pickle" un fichier. Un fichier picklé a le suffixe `.pkl`. - -## Exercice - nettoyez vos données - -Dans cette leçon, vous utiliserez des données provenant de 80 000 observations d'OVNIs, collectées par [NUFORC](https://nuforc.org) (Le Centre national de rapport sur les OVNIs). Ces données contiennent des descriptions intéressantes d'observations d'OVNIs, par exemple : - -- **Longue description d'exemple.** "Un homme émerge d'un faisceau de lumière qui brille sur un champ herbeux la nuit et il court vers le parking de Texas Instruments". -- **Courte description d'exemple.** "les lumières nous ont poursuivis". - -Le tableau [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) comprend des colonnes sur le `city`, `state` et `country` où l'observation a eu lieu, l'`shape` de l'objet et son `latitude` et `longitude`. - -Dans le [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) vierge inclus dans cette leçon : - -1. importez `pandas`, `matplotlib`, et `numpy` comme vous l'avez fait dans les leçons précédentes et importez le tableau ufos. Vous pouvez jeter un œil à un échantillon de données : - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -1. Convertissez les données ufos en un petit dataframe avec de nouveaux titres. Vérifiez les valeurs uniques dans le champ `Country`. - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. Maintenant, vous pouvez réduire la quantité de données avec lesquelles nous devons travailler en supprimant toutes les valeurs nulles et en n'importing que les observations entre 1 et 60 secondes : - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Importez la bibliothèque `LabelEncoder` de Scikit-learn pour convertir les valeurs textuelles des pays en un nombre : - - ✅ LabelEncoder encode les données par ordre alphabétique - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - Vos données devraient ressembler à ceci : - - ```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 - ``` - -## Exercice - construisez votre modèle - -Maintenant, vous pouvez vous préparer à entraîner un modèle en divisant les données en groupes d'entraînement et de test. - -1. Sélectionnez les trois caractéristiques sur lesquelles vous souhaitez vous entraîner en tant que vecteur X, et le vecteur y sera le `Country`. You want to be able to input `Seconds`, `Latitude` and `Longitude` et obtenez un identifiant de pays à retourner. - - ```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. Entraînez votre modèle en utilisant la régression logistique : - - ```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)) - ``` - -La précision n'est pas mauvaise **(environ 95%)**, sans surprise, car `Country` and `Latitude/Longitude` correlate. - -The model you created isn't very revolutionary as you should be able to infer a `Country` from its `Latitude` and `Longitude`, mais c'est un bon exercice d'essayer d'entraîner à partir de données brutes que vous avez nettoyées, exportées, puis d'utiliser ce modèle dans une application web. - -## Exercice - 'pickle' votre modèle - -Maintenant, il est temps de _pickle_ votre modèle ! Vous pouvez le faire en quelques lignes de code. Une fois qu'il est _picklé_, chargez votre modèle picklé et testez-le contre un tableau de données échantillon contenant des valeurs pour les secondes, la latitude et la longitude, - -```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]])) -``` - -Le modèle renvoie **'3'**, qui est le code pays pour le Royaume-Uni. Incroyable ! 👽 - -## Exercice - construisez une application Flask - -Maintenant, vous pouvez construire une application Flask pour appeler votre modèle et renvoyer des résultats similaires, mais d'une manière plus visuellement agréable. - -1. Commencez par créer un dossier appelé **web-app** à côté du fichier _notebook.ipynb_ où se trouve votre fichier _ufo-model.pkl_. - -1. Dans ce dossier, créez trois autres dossiers : **static**, avec un dossier **css** à l'intérieur, et **templates**. Vous devriez maintenant avoir les fichiers et répertoires suivants : - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Consultez le dossier de solution pour une vue de l'application terminée - -1. Le premier fichier à créer dans le dossier _web-app_ est le fichier **requirements.txt**. Comme _package.json_ dans une application JavaScript, ce fichier répertorie les dépendances requises par l'application. Dans **requirements.txt**, ajoutez les lignes : - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. Maintenant, exécutez ce fichier en naviguant vers _web-app_ : - - ```bash - cd web-app - ``` - -1. Dans votre terminal, tapez `pip install`, pour installer les bibliothèques répertoriées dans _requirements.txt_ : - - ```bash - pip install -r requirements.txt - ``` - -1. Maintenant, vous êtes prêt à créer trois autres fichiers pour terminer l'application : - - 1. Créez **app.py** à la racine. - 2. Créez **index.html** dans le répertoire _templates_. - 3. Créez **styles.css** dans le répertoire _static/css_. - -1. Développez le fichier _styles.css_ avec quelques styles : - - ```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. Ensuite, développez le fichier _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 }}

                                                  - -
                                                  - -
                                                  - - - - ``` - - Jetez un œil au templating dans ce fichier. Remarquez la syntaxe 'mustache' autour des variables qui seront fournies par l'application, comme le texte de prédiction : `{{}}`. There's also a form that posts a prediction to the `/predict` route. - - Finally, you're ready to build the python file that drives the consumption of the model and the display of predictions: - -1. In `app.py` ajoutez : - - ```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) - ``` - - > 💡 Astuce : lorsque vous ajoutez [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) while running the web app using Flask, any changes you make to your application will be reflected immediately without the need to restart the server. Beware! Don't enable this mode in a production app. - -If you run `python app.py` or `python3 app.py` - your web server starts up, locally, and you can fill out a short form to get an answer to your burning question about where UFOs have been sighted! - -Before doing that, take a look at the parts of `app.py`: - -1. First, dependencies are loaded and the app starts. -1. Then, the model is imported. -1. Then, index.html is rendered on the home route. - -On the `/predict` route, several things happen when the form is posted: - -1. The form variables are gathered and converted to a numpy array. They are then sent to the model and a prediction is returned. -2. The Countries that we want displayed are re-rendered as readable text from their predicted country code, and that value is sent back to index.html to be rendered in the template. - -Using a model this way, with Flask and a pickled model, is relatively straightforward. The hardest thing is to understand what shape the data is that must be sent to the model to get a prediction. That all depends on how the model was trained. This one has three data points to be input in order to get a prediction. - -In a professional setting, you can see how good communication is necessary between the folks who train the model and those who consume it in a web or mobile app. In our case, it's only one person, you! - ---- - -## 🚀 Challenge - -Instead of working in a notebook and importing the model to the Flask app, you could train the model right within the Flask app! Try converting your Python code in the notebook, perhaps after your data is cleaned, to train the model from within the app on a route called `train`. Quels sont les avantages et les inconvénients de cette méthode ? - -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## Révision & Auto-apprentissage - -Il existe de nombreuses façons de construire une application web pour consommer des modèles ML. Faites une liste des façons dont vous pourriez utiliser JavaScript ou Python pour construire une application web exploitant l'apprentissage automatique. Considérez l'architecture : le modèle doit-il rester dans l'application ou vivre dans le cloud ? Si c'est le cas, comment y accéderiez-vous ? Dessinez un modèle architectural pour une solution web ML appliquée. - -## Devoir - -[Essayez un modèle différent](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/3-Web-App/1-Web-App/assignment.md b/translations/fr/3-Web-App/1-Web-App/assignment.md deleted file mode 100644 index a6530a54..00000000 --- a/translations/fr/3-Web-App/1-Web-App/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Essayez un modèle différent - -## Instructions - -Maintenant que vous avez construit une application web en utilisant un modèle de régression entraîné, utilisez l'un des modèles d'une leçon précédente sur la régression pour refaire cette application web. Vous pouvez conserver le style ou le concevoir différemment pour refléter les données sur les citrouilles. Faites attention à changer les entrées pour refléter la méthode d'entraînement de votre modèle. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Nécessite des améliorations | -| -------------------------- | ------------------------------------------------------- | -------------------------------------------------------- | -------------------------------------- | -| | L'application web fonctionne comme prévu et est déployée dans le cloud | L'application web contient des défauts ou présente des résultats inattendus | L'application web ne fonctionne pas correctement | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/3-Web-App/README.md b/translations/fr/3-Web-App/README.md deleted file mode 100644 index 36779089..00000000 --- a/translations/fr/3-Web-App/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Créez une application web pour utiliser votre modèle ML - -Dans cette section du programme, vous serez introduit à un sujet appliqué du ML : comment sauvegarder votre modèle Scikit-learn en tant que fichier pouvant être utilisé pour faire des prédictions au sein d'une application web. Une fois le modèle sauvegardé, vous apprendrez à l'utiliser dans une application web construite avec Flask. Vous commencerez par créer un modèle en utilisant des données concernant les observations d'OVNI ! Ensuite, vous construirez une application web qui vous permettra de saisir un nombre de secondes avec une valeur de latitude et de longitude pour prédire quel pays a signalé avoir vu un OVNI. - -![Stationnement d'OVNI](../../../translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.fr.jpg) - -Photo par Michael Herren sur Unsplash - -## Leçons - -1. [Construire une application web](1-Web-App/README.md) - -## Crédits - -"Construire une application web" a été écrit avec ♥️ par [Jen Looper](https://twitter.com/jenlooper). - -♥️ Les quiz ont été rédigés par Rohan Raj. - -Le jeu de données provient de [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -L'architecture de l'application web a été suggérée en partie par [cet article](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) et [ce dépôt](https://github.com/abhinavsagar/machine-learning-deployment) par Abhinav Sagar. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/1-Introduction/README.md b/translations/fr/4-Classification/1-Introduction/README.md deleted file mode 100644 index fd496f93..00000000 --- a/translations/fr/4-Classification/1-Introduction/README.md +++ /dev/null @@ -1,302 +0,0 @@ -# Introduction à la classification - -Dans ces quatre leçons, vous allez explorer un aspect fondamental de l'apprentissage machine classique - _la classification_. Nous allons parcourir l'utilisation de divers algorithmes de classification avec un ensemble de données sur toutes les cuisines brillantes d'Asie et d'Inde. J'espère que vous avez faim ! - -![juste une pincée !](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.fr.png) - -> Célébrez les cuisines pan-asiatiques dans ces leçons ! Image par [Jen Looper](https://twitter.com/jenlooper) - -La classification est une forme d'[apprentissage supervisé](https://wikipedia.org/wiki/Supervised_learning) qui a beaucoup en commun avec les techniques de régression. Si l'apprentissage machine consiste à prédire des valeurs ou des noms pour des choses en utilisant des ensembles de données, alors la classification se divise généralement en deux groupes : _classification binaire_ et _classification multiclasses_. - -[![Introduction à la classification](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduction à la classification") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : John Guttag du MIT présente la classification - -Rappelez-vous : - -- **La régression linéaire** vous a aidé à prédire les relations entre les variables et à faire des prédictions précises sur l'endroit où un nouveau point de données se situerait par rapport à cette ligne. Par exemple, vous pourriez prédire _quel serait le prix d'une citrouille en septembre par rapport à décembre_. -- **La régression logistique** vous a aidé à découvrir des "catégories binaires" : à ce prix, _cette citrouille est-elle orange ou non-orange_ ? - -La classification utilise divers algorithmes pour déterminer d'autres façons de définir l'étiquette ou la classe d'un point de données. Travaillons avec ces données de cuisine pour voir si, en observant un groupe d'ingrédients, nous pouvons déterminer sa cuisine d'origine. - -## [Quiz pré-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) - -> ### [Cette leçon est disponible en R !](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) - -### Introduction - -La classification est l'une des activités fondamentales du chercheur en apprentissage machine et du data scientist. De la classification de base d'une valeur binaire ("cet e-mail est-il du spam ou non ?"), à la classification et segmentation d'images complexes utilisant la vision par ordinateur, il est toujours utile de pouvoir trier les données en classes et de poser des questions à leur sujet. - -Pour exprimer le processus de manière plus scientifique, votre méthode de classification crée un modèle prédictif qui vous permet de cartographier la relation entre les variables d'entrée et les variables de sortie. - -![classification binaire vs. multiclasses](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.fr.png) - -> Problèmes binaires vs. multiclasses pour que les algorithmes de classification s'en occupent. Infographie par [Jen Looper](https://twitter.com/jenlooper) - -Avant de commencer le processus de nettoyage de nos données, de les visualiser et de les préparer pour nos tâches d'apprentissage machine, apprenons un peu sur les différentes manières dont l'apprentissage machine peut être utilisé pour classifier des données. - -Dérivée des [statistiques](https://wikipedia.org/wiki/Statistical_classification), la classification utilisant l'apprentissage machine classique utilise des caractéristiques, telles que `smoker`, `weight`, et `age` pour déterminer _la probabilité de développer la maladie X_. Comme technique d'apprentissage supervisé similaire aux exercices de régression que vous avez effectués précédemment, vos données sont étiquetées et les algorithmes d'apprentissage machine utilisent ces étiquettes pour classifier et prédire les classes (ou 'caractéristiques') d'un ensemble de données et les assigner à un groupe ou un résultat. - -✅ Prenez un moment pour imaginer un ensemble de données sur les cuisines. Que pourrait répondre un modèle multiclasses ? Que pourrait répondre un modèle binaire ? Que se passerait-il si vous vouliez déterminer si une cuisine donnée est susceptible d'utiliser du fenugrec ? Que se passerait-il si vous vouliez voir si, avec un cadeau d'un sac de courses rempli d'anis étoilé, d'artichauts, de chou-fleur et de raifort, vous pourriez créer un plat indien typique ? - -[![Paniers mystérieux fous](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Paniers mystérieux fous") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo. Le principe de l'émission 'Chopped' est le 'panier mystérieux' où les chefs doivent préparer un plat à partir d'un choix aléatoire d'ingrédients. Un modèle d'apprentissage machine aurait sûrement aidé ! - -## Bonjour 'classificateur' - -La question que nous voulons poser à cet ensemble de données sur les cuisines est en fait une **question multiclasses**, car nous avons plusieurs cuisines nationales potentielles avec lesquelles travailler. Étant donné un lot d'ingrédients, à laquelle de ces nombreuses classes les données correspondront-elles ? - -Scikit-learn propose plusieurs algorithmes différents à utiliser pour classifier des données, en fonction du type de problème que vous souhaitez résoudre. Dans les deux leçons suivantes, vous apprendrez plusieurs de ces algorithmes. - -## Exercice - nettoyer et équilibrer vos données - -La première tâche à accomplir, avant de commencer ce projet, est de nettoyer et **d'équilibrer** vos données pour obtenir de meilleurs résultats. Commencez avec le fichier vide _notebook.ipynb_ à la racine de ce dossier. - -La première chose à installer est [imblearn](https://imbalanced-learn.org/stable/). Il s'agit d'un package Scikit-learn qui vous permettra de mieux équilibrer les données (vous en apprendrez davantage sur cette tâche dans un instant). - -1. Pour installer `imblearn`, exécutez `pip install`, comme ceci : - - ```python - pip install imblearn - ``` - -1. Importez les packages dont vous avez besoin pour importer vos données et les visualiser, importez également `SMOTE` de `imblearn`. - - ```python - import pandas as pd - import matplotlib.pyplot as plt - import matplotlib as mpl - import numpy as np - from imblearn.over_sampling import SMOTE - ``` - - Vous êtes maintenant prêt à lire et à importer les données. - -1. La tâche suivante sera d'importer les données : - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - En utilisant `read_csv()` will read the content of the csv file _cusines.csv_ and place it in the variable `df`. - -1. Vérifiez la forme des données : - - ```python - df.head() - ``` - - Les cinq premières lignes ressemblent à ceci : - - ```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. Obtenez des informations sur ces données en appelant `info()` : - - ```python - df.info() - ``` - - Votre sortie ressemble à : - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Exercice - apprendre sur les cuisines - -Maintenant, le travail commence à devenir plus intéressant. Découvrons la distribution des données, par cuisine - -1. Tracez les données sous forme de barres en appelant `barh()` : - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![distribution des données de cuisine](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.fr.png) - - Il y a un nombre fini de cuisines, mais la distribution des données est inégale. Vous pouvez corriger cela ! Avant de le faire, explorez un peu plus. - -1. Découvrez combien de données sont disponibles par cuisine et imprimez-le : - - ```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}') - ``` - - la sortie ressemble à : - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Découverte des ingrédients - -Maintenant, vous pouvez approfondir les données et apprendre quels sont les ingrédients typiques par cuisine. Vous devriez nettoyer les données récurrentes qui créent de la confusion entre les cuisines, alors apprenons à propos de ce problème. - -1. Créez une fonction `create_ingredient()` en Python pour créer un dataframe d'ingrédients. Cette fonction commencera par supprimer une colonne inutile et triera les ingrédients par leur nombre : - - ```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 - ``` - - Vous pouvez maintenant utiliser cette fonction pour avoir une idée des dix ingrédients les plus populaires par cuisine. - -1. Appelez `create_ingredient()` and plot it calling `barh()` : - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![thaï](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.fr.png) - -1. Faites de même pour les données japonaises : - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![japonais](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.fr.png) - -1. Maintenant pour les ingrédients chinois : - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![chinois](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.fr.png) - -1. Tracez les ingrédients indiens : - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![indien](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.fr.png) - -1. Enfin, tracez les ingrédients coréens : - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![coréen](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.fr.png) - -1. Maintenant, supprimez les ingrédients les plus courants qui créent de la confusion entre des cuisines distinctes, en appelant `drop()` : - - Tout le monde aime le riz, l'ail et le gingembre ! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Équilibrer l'ensemble de données - -Maintenant que vous avez nettoyé les données, utilisez [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - pour les équilibrer. - -1. Appelez `fit_resample()`, cette stratégie génère de nouveaux échantillons par interpolation. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - En équilibrant vos données, vous obtiendrez de meilleurs résultats lors de leur classification. Pensez à une classification binaire. Si la plupart de vos données appartiennent à une seule classe, un modèle d'apprentissage machine prédira cette classe plus fréquemment, simplement parce qu'il y a plus de données pour elle. L'équilibrage des données permet de corriger toute distorsion et aide à éliminer ce déséquilibre. - -1. Maintenant, vous pouvez vérifier le nombre d'étiquettes par ingrédient : - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - Votre sortie ressemble à : - - ```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 - ``` - - Les données sont agréables et propres, équilibrées et très délicieuses ! - -1. La dernière étape consiste à enregistrer vos données équilibrées, y compris les étiquettes et les caractéristiques, dans un nouveau dataframe qui peut être exporté dans un fichier : - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. Vous pouvez jeter un dernier coup d'œil aux données en utilisant `transformed_df.head()` and `transformed_df.info()`. Enregistrez une copie de ces données pour une utilisation dans les leçons futures : - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisines.csv") - ``` - - Ce nouveau CSV peut maintenant être trouvé dans le dossier de données racine. - ---- - -## 🚀Défi - -Ce programme contient plusieurs ensembles de données intéressants. Explorez les dossiers `data` et voyez s'ils contiennent des ensembles de données appropriés pour une classification binaire ou multiclasses ? Quelles questions poseriez-vous à cet ensemble de données ? - -## [Quiz post-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) - -## Revue & Auto-apprentissage - -Explorez l'API de SMOTE. Pour quels cas d'utilisation est-il le mieux adapté ? Quels problèmes résout-il ? - -## Devoir - -[Explorez les méthodes de classification](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/1-Introduction/assignment.md b/translations/fr/4-Classification/1-Introduction/assignment.md deleted file mode 100644 index 9c5b9850..00000000 --- a/translations/fr/4-Classification/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Explorer les méthodes de classification - -## Instructions - -Dans la [documentation de Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html), vous trouverez une grande liste de façons de classifier des données. Faites une petite chasse au trésor dans ces documents : votre objectif est de rechercher des méthodes de classification et de les associer à un ensemble de données dans ce programme, une question que vous pouvez poser à ce sujet, et une technique de classification. Créez une feuille de calcul ou un tableau dans un fichier .doc et expliquez comment l'ensemble de données fonctionnerait avec l'algorithme de classification. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| -------- | ---------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | un document présente un aperçu de 5 algorithmes accompagnés d'une technique de classification. L'aperçu est bien expliqué et détaillé. | un document présente un aperçu de 3 algorithmes accompagnés d'une technique de classification. L'aperçu est bien expliqué et détaillé. | un document présente un aperçu de moins de trois algorithmes accompagnés d'une technique de classification et l'aperçu n'est ni bien expliqué ni détaillé. | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/1-Introduction/solution/Julia/README.md b/translations/fr/4-Classification/1-Introduction/solution/Julia/README.md deleted file mode 100644 index ad1468dc..00000000 --- a/translations/fr/4-Classification/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par intelligence artificielle. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/2-Classifiers-1/README.md b/translations/fr/4-Classification/2-Classifiers-1/README.md deleted file mode 100644 index e48c1984..00000000 --- a/translations/fr/4-Classification/2-Classifiers-1/README.md +++ /dev/null @@ -1,75 +0,0 @@ -# Classificateurs de cuisine 1 - -Dans cette leçon, vous utiliserez le jeu de données que vous avez enregistré lors de la dernière leçon, rempli de données équilibrées et propres sur les cuisines. - -Vous utiliserez ce jeu de données avec une variété de classificateurs pour _prédire une cuisine nationale donnée en fonction d'un groupe d'ingrédients_. Ce faisant, vous apprendrez davantage sur certaines des façons dont les algorithmes peuvent être utilisés pour des tâches de classification. - -## [Quiz pré-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) -# Préparation - -En supposant que vous ayez terminé [la leçon 1](../1-Introduction/README.md), assurez-vous qu'un fichier _cleaned_cuisines.csv_ existe dans le dossier racine `/data` pour ces quatre leçons. - -## Exercice - prédire une cuisine nationale - -1. En travaillant dans le dossier _notebook.ipynb_ de cette leçon, importez ce fichier ainsi que la bibliothèque Pandas : - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") - cuisines_df.head() - ``` - - Les données ressemblent à ceci : - -| | 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 | indien | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -| 1 | 1 | indien | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -| 2 | 2 | indien | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -| 3 | 3 | indien | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | -| 4 | 4 | indien | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | - -1. Maintenant, importez plusieurs autres bibliothèques : - - ```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. Divisez les coordonnées X et y en deux dataframes pour l'entraînement. `cuisine` peut être le dataframe des étiquettes : - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - Cela ressemblera à ceci : - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. Supprimez ce `Unnamed: 0` column and the `cuisine` column, calling `drop()`. Enregistrez le reste des données comme caractéristiques entraînables : - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - Vos caractéristiques ressemblent à ceci : - -| | 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 | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/2-Classifiers-1/assignment.md b/translations/fr/4-Classification/2-Classifiers-1/assignment.md deleted file mode 100644 index ff585429..00000000 --- a/translations/fr/4-Classification/2-Classifiers-1/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# Étudiez les solveurs -## Instructions - -Dans cette leçon, vous avez appris les différents solveurs qui associent des algorithmes à un processus d'apprentissage automatique pour créer un modèle précis. Parcourez les solveurs listés dans la leçon et choisissez-en deux. Dans vos propres mots, comparez et contrastez ces deux solveurs. Quel type de problème abordent-ils ? Comment fonctionnent-ils avec diverses structures de données ? Pourquoi choisiriez-vous l'un plutôt que l'autre ? -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ----------------------------- | -| | Un fichier .doc est présenté avec deux paragraphes, un sur chaque solveur, les comparant de manière réfléchie. | Un fichier .doc est présenté avec seulement un paragraphe | L'affectation est incomplète | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/fr/4-Classification/2-Classifiers-1/solution/Julia/README.md deleted file mode 100644 index ab4be75d..00000000 --- a/translations/fr/4-Classification/2-Classifiers-1/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaire. Veuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/3-Classifiers-2/README.md b/translations/fr/4-Classification/3-Classifiers-2/README.md deleted file mode 100644 index b4164758..00000000 --- a/translations/fr/4-Classification/3-Classifiers-2/README.md +++ /dev/null @@ -1,238 +0,0 @@ -# Classificateurs de cuisine 2 - -Dans cette deuxième leçon de classification, vous explorerez d'autres façons de classifier des données numériques. Vous apprendrez également les implications du choix d'un classificateur plutôt qu'un autre. - -## [Quiz pré-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) - -### Prérequis - -Nous supposons que vous avez terminé les leçons précédentes et que vous disposez d'un ensemble de données nettoyé dans votre dossier `data` appelé _cleaned_cuisines.csv_ à la racine de ce dossier de 4 leçons. - -### Préparation - -Nous avons chargé votre fichier _notebook.ipynb_ avec l'ensemble de données nettoyé et l'avons divisé en dataframes X et y, prêts pour le processus de construction du modèle. - -## Une carte de classification - -Auparavant, vous avez appris les différentes options qui s'offrent à vous lors de la classification des données en utilisant la feuille de triche de Microsoft. Scikit-learn propose une feuille de triche similaire, mais plus détaillée, qui peut encore vous aider à affiner vos estimateurs (un autre terme pour classificateurs) : - -![Carte ML de Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.fr.png) -> Conseil : [visitez cette carte en ligne](https://scikit-learn.org/stable/tutorial/machine_learning_map/) et cliquez le long du chemin pour lire la documentation. - -### Le plan - -Cette carte est très utile une fois que vous avez une bonne compréhension de vos données, car vous pouvez 'marcher' le long de ses chemins vers une décision : - -- Nous avons >50 échantillons -- Nous voulons prédire une catégorie -- Nous avons des données étiquetées -- Nous avons moins de 100K échantillons -- ✨ Nous pouvons choisir un SVC linéaire -- Si cela ne fonctionne pas, puisque nous avons des données numériques - - Nous pouvons essayer un ✨ classificateur KNeighbors - - Si cela ne fonctionne pas, essayez un ✨ SVC et des ✨ classificateurs d'ensemble - -C'est un chemin très utile à suivre. - -## Exercice - diviser les données - -En suivant ce chemin, nous devrions commencer par importer certaines bibliothèques à utiliser. - -1. Importez les bibliothèques nécessaires : - - ```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. Divisez vos données d'entraînement et de test : - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Classificateur SVC linéaire - -Le clustering par Support-Vector (SVC) est un membre de la famille des techniques ML des machines à vecteurs de support (apprenez-en plus sur celles-ci ci-dessous). Dans cette méthode, vous pouvez choisir un 'noyau' pour décider comment regrouper les étiquettes. Le paramètre 'C' fait référence à la 'régularisation' qui régule l'influence des paramètres. Le noyau peut être l'un des [plusieurs](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) ; ici, nous le définissons sur 'linéaire' pour nous assurer que nous tirons parti du SVC linéaire. La probabilité par défaut est 'fausse' ; ici, nous la définissons sur 'vrai' pour recueillir des estimations de probabilité. Nous définissons l'état aléatoire sur '0' pour mélanger les données afin d'obtenir des probabilités. - -### Exercice - appliquer un SVC linéaire - -Commencez par créer un tableau de classificateurs. Vous ajouterez progressivement à ce tableau au fur et à mesure de nos tests. - -1. Commencez avec un SVC linéaire : - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Entraînez votre modèle en utilisant le SVC linéaire et imprimez un rapport : - - ```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)) - ``` - - Le résultat est plutôt bon : - - ```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 - ``` - -## Classificateur K-Neighbors - -K-Neighbors fait partie de la famille des méthodes ML "voisins", qui peuvent être utilisées pour l'apprentissage supervisé et non supervisé. Dans cette méthode, un nombre prédéfini de points est créé et des données sont rassemblées autour de ces points de manière à ce que des étiquettes généralisées puissent être prédites pour les données. - -### Exercice - appliquer le classificateur K-Neighbors - -Le classificateur précédent était bon et a bien fonctionné avec les données, mais peut-être que nous pouvons obtenir une meilleure précision. Essayez un classificateur K-Neighbors. - -1. Ajoutez une ligne à votre tableau de classificateurs (ajoutez une virgule après l'élément SVC linéaire) : - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - Le résultat est un peu moins bon : - - ```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 - ``` - - ✅ Apprenez-en plus sur [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) - -## Classificateur à vecteurs de support - -Les classificateurs à vecteurs de support font partie de la famille des [machines à vecteurs de support](https://wikipedia.org/wiki/Support-vector_machine) des méthodes ML utilisées pour les tâches de classification et de régression. Les SVM "cartographient les exemples d'entraînement en points dans l'espace" pour maximiser la distance entre deux catégories. Les données suivantes sont cartographiées dans cet espace afin que leur catégorie puisse être prédite. - -### Exercice - appliquer un classificateur à vecteurs de support - -Essayons d'obtenir une précision un peu meilleure avec un classificateur à vecteurs de support. - -1. Ajoutez une virgule après l'élément K-Neighbors, puis ajoutez cette ligne : - - ```python - 'SVC': SVC(), - ``` - - Le résultat est assez bon ! - - ```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 - ``` - - ✅ Apprenez-en plus sur [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) - -## Classificateurs d'ensemble - -Suivons le chemin jusqu'à la fin, même si le test précédent était assez bon. Essayons quelques 'classificateurs d'ensemble', en particulier Random Forest et AdaBoost : - -```python - 'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -Le résultat est très bon, surtout pour Random Forest : - -```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 -``` - -✅ Apprenez-en plus sur [classificateurs d'ensemble](https://scikit-learn.org/stable/modules/ensemble.html) - -Cette méthode d'apprentissage automatique "combine les prédictions de plusieurs estimateurs de base" pour améliorer la qualité du modèle. Dans notre exemple, nous avons utilisé des arbres aléatoires et AdaBoost. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), une méthode de moyennage, construit une 'forêt' d'arbres de décision infusés de hasard pour éviter le surajustement. Le paramètre n_estimators est défini sur le nombre d'arbres. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajuste un classificateur à un ensemble de données, puis ajuste des copies de ce classificateur au même ensemble de données. Il se concentre sur les poids des éléments mal classés et ajuste l'ajustement pour le prochain classificateur afin de corriger. - ---- - -## 🚀Défi - -Chacune de ces techniques a un grand nombre de paramètres que vous pouvez ajuster. Renseignez-vous sur les paramètres par défaut de chacun et réfléchissez à ce que l'ajustement de ces paramètres signifierait pour la qualité du modèle. - -## [Quiz post-cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) - -## Révision & Auto-étude - -Il y a beaucoup de jargon dans ces leçons, alors prenez une minute pour revoir [cette liste](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminologie utile ! - -## Devoir - -[Jeu de paramètres](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/3-Classifiers-2/assignment.md b/translations/fr/4-Classification/3-Classifiers-2/assignment.md deleted file mode 100644 index e0b4c3f4..00000000 --- a/translations/fr/4-Classification/3-Classifiers-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Jeu de Paramètres - -## Instructions - -Il existe de nombreux paramètres qui sont définis par défaut lors de l'utilisation de ces classificateurs. Intellisense dans VS Code peut vous aider à les explorer. Adoptez l'une des techniques de classification ML dans cette leçon et réentraînez les modèles en ajustant diverses valeurs de paramètres. Créez un carnet expliquant pourquoi certains changements améliorent la qualité du modèle tandis que d'autres la dégradent. Soyez détaillé dans votre réponse. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| --------- | ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------- | ------------------------------ | -| | Un carnet est présenté avec un classificateur entièrement construit et ses paramètres ajustés, les changements expliqués dans des zones de texte | Un carnet est partiellement présenté ou mal expliqué | Un carnet est bogué ou défectueux | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/fr/4-Classification/3-Classifiers-2/solution/Julia/README.md deleted file mode 100644 index 9dd1f1e7..00000000 --- a/translations/fr/4-Classification/3-Classifiers-2/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/4-Applied/README.md b/translations/fr/4-Classification/4-Applied/README.md deleted file mode 100644 index 49c5947f..00000000 --- a/translations/fr/4-Classification/4-Applied/README.md +++ /dev/null @@ -1,317 +0,0 @@ -# Créer une application Web de recommandation de cuisine - -Dans cette leçon, vous allez construire un modèle de classification en utilisant certaines des techniques que vous avez apprises dans les leçons précédentes et avec le délicieux ensemble de données sur la cuisine utilisé tout au long de cette série. De plus, vous allez créer une petite application web pour utiliser un modèle sauvegardé, en tirant parti de l'exécution web d'Onnx. - -L'un des usages pratiques les plus utiles de l'apprentissage automatique est la construction de systèmes de recommandation, et vous pouvez faire le premier pas dans cette direction aujourd'hui ! - -[![Présentation de cette application web](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "ML appliqué") - -> 🎥 Cliquez sur l'image ci-dessus pour voir une vidéo : Jen Looper construit une application web utilisant des données de cuisine classées - -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) - -Dans cette leçon, vous apprendrez : - -- Comment construire un modèle et le sauvegarder au format Onnx -- Comment utiliser Netron pour inspecter le modèle -- Comment utiliser votre modèle dans une application web pour l'inférence - -## Construisez votre modèle - -Construire des systèmes d'apprentissage automatique appliqués est une partie importante de l'exploitation de ces technologies pour vos systèmes d'entreprise. Vous pouvez utiliser des modèles dans vos applications web (et donc les utiliser dans un contexte hors ligne si nécessaire) en utilisant Onnx. - -Dans une [leçon précédente](../../3-Web-App/1-Web-App/README.md), vous avez construit un modèle de régression sur les observations d'OVNIs, l'avez "picklé" et l'avez utilisé dans une application Flask. Bien que cette architecture soit très utile à connaître, c'est une application Python full-stack, et vos exigences peuvent inclure l'utilisation d'une application JavaScript. - -Dans cette leçon, vous pouvez construire un système de base basé sur JavaScript pour l'inférence. Cependant, d'abord, vous devez entraîner un modèle et le convertir pour une utilisation avec Onnx. - -## Exercice - entraîner un modèle de classification - -Tout d'abord, entraînez un modèle de classification en utilisant l'ensemble de données sur les cuisines nettoyé que nous avons utilisé. - -1. Commencez par importer des bibliothèques utiles : - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Vous avez besoin de '[skl2onnx](https://onnx.ai/sklearn-onnx/)' pour aider à convertir votre modèle Scikit-learn au format Onnx. - -1. Ensuite, travaillez avec vos données de la même manière que vous l'avez fait dans les leçons précédentes, en lisant un fichier CSV avec `read_csv()` : - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -1. Supprimez les deux premières colonnes inutiles et sauvegardez les données restantes sous le nom 'X' : - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Sauvegardez les étiquettes sous le nom 'y' : - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Commencez la routine d'entraînement - -Nous allons utiliser la bibliothèque 'SVC' qui a une bonne précision. - -1. Importez les bibliothèques appropriées de 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. Séparez les ensembles d'entraînement et de test : - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Construisez un modèle de classification SVC comme vous l'avez fait dans la leçon précédente : - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Maintenant, testez votre modèle en appelant `predict()` : - - ```python - y_pred = model.predict(X_test) - ``` - -1. Imprimez un rapport de classification pour vérifier la qualité du modèle : - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Comme nous l'avons vu précédemment, la précision est bonne : - - ```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 - ``` - -### Convertissez votre modèle en Onnx - -Assurez-vous de faire la conversion avec le nombre de Tensor approprié. Cet ensemble de données a 380 ingrédients répertoriés, donc vous devez indiquer ce nombre dans `FloatTensorType` : - -1. Convertissez en utilisant un nombre de tensor de 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. Créez le fichier onx et sauvegardez-le sous le nom **model.onnx** : - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Notez que vous pouvez passer des [options](https://onnx.ai/sklearn-onnx/parameterized.html) dans votre script de conversion. Dans ce cas, nous avons passé 'nocl' à True et 'zipmap' à False. Étant donné qu'il s'agit d'un modèle de classification, vous avez la possibilité de supprimer ZipMap qui produit une liste de dictionnaires (non nécessaire). `nocl` refers to class information being included in the model. Reduce your model's size by setting `nocl` to 'True'. - -Running the entire notebook will now build an Onnx model and save it to this folder. - -## View your model - -Onnx models are not very visible in Visual Studio code, but there's a very good free software that many researchers use to visualize the model to ensure that it is properly built. Download [Netron](https://github.com/lutzroeder/Netron) and open your model.onnx file. You can see your simple model visualized, with its 380 inputs and classifier listed: - -![Netron visual](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.fr.png) - -Netron is a helpful tool to view your models. - -Now you are ready to use this neat model in a web app. Let's build an app that will come in handy when you look in your refrigerator and try to figure out which combination of your leftover ingredients you can use to cook a given cuisine, as determined by your model. - -## Build a recommender web application - -You can use your model directly in a web app. This architecture also allows you to run it locally and even offline if needed. Start by creating an `index.html` file in the same folder where you stored your `model.onnx` fichier. - -1. Dans ce fichier _index.html_, ajoutez le balisage suivant : - - ```html - - -
                                                  - Cuisine Matcher -
                                                  - - ... - - - ``` - -1. Maintenant, en travaillant dans les balises `body`, ajoutez un peu de balisage pour montrer une liste de cases à cocher reflétant certains ingrédients : - - ```html -

                                                  Check your refrigerator. What can you create?

                                                  -
                                                  -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  - -
                                                  - - -
                                                  -
                                                  -
                                                  - -
                                                  - ``` - - Remarquez que chaque case à cocher a une valeur. Cela reflète l'index où l'ingrédient est trouvé selon l'ensemble de données. Par exemple, la pomme, dans cette liste alphabétique, occupe la cinquième colonne, donc sa valeur est '4' puisque nous commençons à compter à partir de 0. Vous pouvez consulter le [tableau des ingrédients](../../../../4-Classification/data/ingredient_indexes.csv) pour découvrir l'index d'un ingrédient donné. - - En poursuivant votre travail dans le fichier index.html, ajoutez un bloc de script où le modèle est appelé après la dernière fermeture ``. - -1. Tout d'abord, importez le [Onnx Runtime](https://www.onnxruntime.ai/) : - - ```html - - ``` - - > Onnx Runtime est utilisé pour permettre l'exécution de vos modèles Onnx sur une large gamme de plateformes matérielles, y compris des optimisations et une API à utiliser. - -1. Une fois le Runtime en place, vous pouvez l'appeler : - - ```html - - ``` - -Dans ce code, plusieurs choses se passent : - -1. Vous avez créé un tableau de 380 valeurs possibles (1 ou 0) à définir et à envoyer au modèle pour l'inférence, en fonction de si une case à cocher d'ingrédient est cochée. -2. Vous avez créé un tableau de cases à cocher et un moyen de déterminer si elles étaient cochées dans un `init` function that is called when the application starts. When a checkbox is checked, the `ingredients` array is altered to reflect the chosen ingredient. -3. You created a `testCheckboxes` function that checks whether any checkbox was checked. -4. You use `startInference` function when the button is pressed and, if any checkbox is checked, you start inference. -5. The inference routine includes: - 1. Setting up an asynchronous load of the model - 2. Creating a Tensor structure to send to the model - 3. Creating 'feeds' that reflects the `float_input` input that you created when training your model (you can use Netron to verify that name) - 4. Sending these 'feeds' to the model and waiting for a response - -## Test your application - -Open a terminal session in Visual Studio Code in the folder where your index.html file resides. Ensure that you have [http-server](https://www.npmjs.com/package/http-server) installed globally, and type `http-server` à l'invite. Un localhost devrait s'ouvrir et vous pouvez voir votre application web. Vérifiez quelle cuisine est recommandée en fonction de divers ingrédients : - -![application web des ingrédients](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.fr.png) - -Félicitations, vous avez créé une application web de 'recommandation' avec quelques champs. Prenez le temps de développer ce système ! -## 🚀Défi - -Votre application web est très minimale, alors continuez à l'élargir en utilisant les ingrédients et leurs index de la donnée [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Quelles combinaisons de saveurs fonctionnent pour créer un plat national donné ? - -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) - -## Révision & Auto-apprentissage - -Bien que cette leçon ait seulement effleuré l'utilité de la création d'un système de recommandation pour les ingrédients alimentaires, ce domaine des applications d'apprentissage automatique regorge d'exemples. Lisez un peu plus sur la façon dont ces systèmes sont construits : - -- 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/ - -## Devoir - -[Construire un nouveau système de recommandation](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/4-Applied/assignment.md b/translations/fr/4-Classification/4-Applied/assignment.md deleted file mode 100644 index 83eff54c..00000000 --- a/translations/fr/4-Classification/4-Applied/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Construire un système de recommandation - -## Instructions - -À la suite de vos exercices dans cette leçon, vous savez maintenant comment construire une application web basée sur JavaScript en utilisant Onnx Runtime et un modèle Onnx converti. Expérimentez en créant un nouveau système de recommandation en utilisant des données de ces leçons ou provenant d'autres sources (merci de donner du crédit). Vous pourriez créer un système de recommandation pour les animaux de compagnie en fonction de divers attributs de personnalité, ou un système de recommandation de genres musicaux basé sur l'humeur d'une personne. Soyez créatif ! - -## Critères d'évaluation - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| --------- | ---------------------------------------------------------------------- | ------------------------------------- | -------------------------------- | -| | Une application web et un carnet de notes sont présentés, tous deux bien documentés et fonctionnels | L'un des deux est manquant ou défectueux | Les deux sont soit manquants soit défectueux | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/4-Classification/README.md b/translations/fr/4-Classification/README.md deleted file mode 100644 index 6250aa7d..00000000 --- a/translations/fr/4-Classification/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Introduction à la classification - -## Sujet régional : Délicieuses cuisines asiatique et indienne 🍜 - -En Asie et en Inde, les traditions culinaires sont extrêmement diverses et très savoureuses ! Examinons les données sur les cuisines régionales pour essayer de comprendre leurs ingrédients. - -![Vendeur de nourriture thaïlandaise](../../../translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.fr.jpg) -> Photo par Lisheng Chang sur Unsplash - -## Ce que vous allez apprendre - -Dans cette section, vous allez approfondir votre étude antérieure sur la régression et découvrir d'autres classificateurs que vous pouvez utiliser pour mieux comprendre les données. - -> Il existe des outils low-code utiles qui peuvent vous aider à apprendre à travailler avec des modèles de classification. Essayez [Azure ML pour cette tâche](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Leçons - -1. [Introduction à la classification](1-Introduction/README.md) -2. [D'autres classificateurs](2-Classifiers-1/README.md) -3. [Encore d'autres classificateurs](3-Classifiers-2/README.md) -4. [ML appliqué : créer une application web](4-Applied/README.md) - -## Remerciements - -"Introduction à la classification" a été écrit avec ♥️ par [Cassie Breviu](https://www.twitter.com/cassiebreviu) et [Jen Looper](https://www.twitter.com/jenlooper) - -Le jeu de données sur les cuisines délicieuses a été obtenu sur [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/1-Visualize/README.md b/translations/fr/5-Clustering/1-Visualize/README.md deleted file mode 100644 index 9e9f592e..00000000 --- a/translations/fr/5-Clustering/1-Visualize/README.md +++ /dev/null @@ -1,219 +0,0 @@ -# Introduction au clustering - -Le clustering est un type d'[Apprentissage Non Supervisé](https://wikipedia.org/wiki/Unsupervised_learning) qui suppose qu'un ensemble de données n'est pas étiqueté ou que ses entrées ne sont pas associées à des sorties prédéfinies. Il utilise divers algorithmes pour trier des données non étiquetées et fournir des regroupements selon les motifs qu'il discernent dans les données. - -[![No One Like You par PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You par PSquare") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo. Pendant que vous étudiez l'apprentissage machine avec le clustering, profitez de quelques morceaux de Dance Hall nigérian - c'est une chanson très bien notée de 2014 par PSquare. - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) -### Introduction - -Le [clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) est très utile pour l'exploration des données. Voyons s'il peut aider à découvrir des tendances et des motifs dans la manière dont les auditeurs nigérians consomment la musique. - -✅ Prenez une minute pour réfléchir aux utilisations du clustering. Dans la vie réelle, le clustering se produit chaque fois que vous avez une pile de linge et que vous devez trier les vêtements des membres de votre famille 🧦👕👖🩲. En science des données, le clustering se produit lorsque l'on essaie d'analyser les préférences d'un utilisateur ou de déterminer les caractéristiques d'un ensemble de données non étiqueté. Le clustering, d'une certaine manière, aide à donner un sens au chaos, comme un tiroir à chaussettes. - -[![Introduction au ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction au Clustering") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : John Guttag du MIT introduit le clustering. - -Dans un cadre professionnel, le clustering peut être utilisé pour déterminer des choses comme la segmentation de marché, par exemple, pour déterminer quels groupes d'âge achètent quels articles. Une autre utilisation serait la détection d'anomalies, peut-être pour détecter une fraude à partir d'un ensemble de données de transactions par carte de crédit. Ou vous pourriez utiliser le clustering pour déterminer des tumeurs dans un lot de scans médicaux. - -✅ Réfléchissez une minute à la façon dont vous pourriez avoir rencontré le clustering "dans la nature", dans un cadre bancaire, de commerce électronique ou commercial. - -> 🎓 Fait intéressant, l'analyse des clusters a vu le jour dans les domaines de l'anthropologie et de la psychologie dans les années 1930. Pouvez-vous imaginer comment cela aurait pu être utilisé ? - -Alternativement, vous pourriez l'utiliser pour regrouper des résultats de recherche - par liens d'achat, images ou avis, par exemple. Le clustering est utile lorsque vous avez un grand ensemble de données que vous souhaitez réduire et sur lequel vous souhaitez effectuer une analyse plus granulaire, de sorte que la technique puisse être utilisée pour en apprendre davantage sur les données avant la construction d'autres modèles. - -✅ Une fois vos données organisées en clusters, vous leur assignez un identifiant de cluster, et cette technique peut être utile pour préserver la confidentialité d'un ensemble de données ; vous pouvez plutôt faire référence à un point de données par son identifiant de cluster, plutôt que par des données identifiables plus révélatrices. Pouvez-vous penser à d'autres raisons pour lesquelles vous feriez référence à un identifiant de cluster plutôt qu'à d'autres éléments du cluster pour l'identifier ? - -Approfondissez votre compréhension des techniques de clustering dans ce [module d'apprentissage](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). - -## Commencer avec le clustering - -[Scikit-learn propose un large éventail](https://scikit-learn.org/stable/modules/clustering.html) de méthodes pour effectuer du clustering. Le type que vous choisissez dépendra de votre cas d'utilisation. Selon la documentation, chaque méthode a divers avantages. Voici un tableau simplifié des méthodes prises en charge par Scikit-learn et de leurs cas d'utilisation appropriés : - -| Nom de la méthode | Cas d'utilisation | -| :---------------------------------- | :---------------------------------------------------------------------- | -| K-Means | usage général, inductif | -| Propagation d'affinité | nombreux, clusters inégaux, inductif | -| Mean-shift | nombreux, clusters inégaux, inductif | -| Clustering spectral | peu, clusters égaux, transductif | -| Clustering hiérarchique de Ward | nombreux, clusters contraints, transductif | -| Clustering agglomératif | nombreux, distances non euclidiennes, transductif | -| DBSCAN | géométrie non plate, clusters inégaux, transductif | -| OPTICS | géométrie non plate, clusters inégaux avec densité variable, transductif | -| Mélanges gaussiens | géométrie plate, inductif | -| BIRCH | grand ensemble de données avec des valeurs aberrantes, inductif | - -> 🎓 La façon dont nous créons des clusters a beaucoup à voir avec la manière dont nous regroupons les points de données. Décomposons un peu le vocabulaire : -> -> 🎓 ['Transductif' vs. 'inductif'](https://wikipedia.org/wiki/Transduction_(machine_learning)) -> -> L'inférence transductive est dérivée de cas d'entraînement observés qui se rapportent à des cas de test spécifiques. L'inférence inductive est dérivée de cas d'entraînement qui se rapportent à des règles générales qui ne sont ensuite appliquées qu'aux cas de test. -> -> Un exemple : Imaginez que vous ayez un ensemble de données qui est seulement partiellement étiqueté. Certaines choses sont des 'disques', certaines des 'cd', et certaines sont vides. Votre travail est de fournir des étiquettes pour les vides. Si vous choisissez une approche inductive, vous entraîneriez un modèle à la recherche de 'disques' et de 'cd', et appliqueriez ces étiquettes à vos données non étiquetées. Cette approche aura du mal à classifier des choses qui sont en réalité des 'cassettes'. Une approche transductive, en revanche, gère ces données inconnues de manière plus efficace car elle s'efforce de regrouper des éléments similaires ensemble puis applique une étiquette à un groupe. Dans ce cas, les clusters pourraient refléter des 'objets musicaux ronds' et des 'objets musicaux carrés'. -> -> 🎓 ['Géométrie non plate' vs. 'plate'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> Dérivée de la terminologie mathématique, la géométrie non plate vs. plate fait référence à la mesure des distances entre les points par des méthodes géométriques soit 'plates' ([Euclidienne](https://wikipedia.org/wiki/Euclidean_geometry)) soit 'non plates' (non euclidiennes). -> -> 'Plate' dans ce contexte fait référence à la géométrie euclidienne (dont certaines parties sont enseignées comme 'géométrie plane'), et non plate fait référence à la géométrie non euclidienne. Quel rapport la géométrie a-t-elle avec l'apprentissage machine ? Eh bien, en tant que deux domaines ancrés dans les mathématiques, il doit y avoir un moyen commun de mesurer les distances entre les points dans les clusters, et cela peut être fait de manière 'plate' ou 'non plate', selon la nature des données. Les [distances euclidiennes](https://wikipedia.org/wiki/Euclidean_distance) sont mesurées comme la longueur d'un segment de ligne entre deux points. Les [distances non euclidiennes](https://wikipedia.org/wiki/Non-Euclidean_geometry) sont mesurées le long d'une courbe. Si vos données, visualisées, semblent ne pas exister sur un plan, vous pourriez avoir besoin d'utiliser un algorithme spécialisé pour les gérer. -> -![Infographie sur la géométrie plate vs non plate](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.fr.png) -> Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) -> -> 🎓 ['Distances'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) -> -> Les clusters sont définis par leur matrice de distance, c'est-à-dire les distances entre les points. Cette distance peut être mesurée de plusieurs manières. Les clusters euclidiens sont définis par la moyenne des valeurs des points et contiennent un 'centroïde' ou point central. Les distances sont donc mesurées par rapport à ce centroïde. Les distances non euclidiennes se réfèrent aux 'clustroids', le point le plus proche des autres points. Les clustroids, à leur tour, peuvent être définis de différentes manières. -> -> 🎓 ['Contraint'](https://wikipedia.org/wiki/Constrained_clustering) -> -> Le [Clustering Contraint](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduit l'apprentissage 'semi-supervisé' dans cette méthode non supervisée. Les relations entre les points sont signalées comme 'ne peuvent pas être liées' ou 'doivent être liées', de sorte que certaines règles sont imposées à l'ensemble de données. -> -> Un exemple : Si un algorithme est lâché sur un lot de données non étiquetées ou semi-étiquetées, les clusters qu'il produit peuvent être de mauvaise qualité. Dans l'exemple ci-dessus, les clusters pourraient regrouper des 'objets musicaux ronds', des 'objets musicaux carrés' et des 'objets triangulaires' et des 'biscuits'. Si des contraintes ou des règles à suivre sont données ("l'objet doit être en plastique", "l'objet doit pouvoir produire de la musique"), cela peut aider à 'contraindre' l'algorithme à faire de meilleurs choix. -> -> 🎓 'Densité' -> -> Les données qui sont 'bruyantes' sont considérées comme 'denses'. Les distances entre les points dans chacun de ses clusters peuvent se révéler, après examen, plus ou moins denses, ou 'encombrées', et donc ces données doivent être analysées avec la méthode de clustering appropriée. [Cet article](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) démontre la différence entre l'utilisation des algorithmes de clustering K-Means et HDBSCAN pour explorer un ensemble de données bruyantes avec une densité de cluster inégale. - -## Algorithmes de clustering - -Il existe plus de 100 algorithmes de clustering, et leur utilisation dépend de la nature des données à disposition. Discutons de certains des principaux : - -- **Clustering hiérarchique**. Si un objet est classé par sa proximité à un objet voisin, plutôt qu'à un plus éloigné, des clusters sont formés en fonction de la distance de leurs membres à d'autres objets. Le clustering agglomératif de Scikit-learn est hiérarchique. - - ![Infographie sur le clustering hiérarchique](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.fr.png) - > Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Clustering par centroïde**. Cet algorithme populaire nécessite le choix de 'k', ou le nombre de clusters à former, après quoi l'algorithme détermine le point central d'un cluster et regroupe les données autour de ce point. Le [clustering K-means](https://wikipedia.org/wiki/K-means_clustering) est une version populaire du clustering par centroïde. Le centre est déterminé par la moyenne la plus proche, d'où le nom. La distance au cluster est minimisée. - - ![Infographie sur le clustering par centroïde](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.fr.png) - > Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Clustering basé sur la distribution**. Basé sur la modélisation statistique, le clustering basé sur la distribution se concentre sur la détermination de la probabilité qu'un point de données appartienne à un cluster, et l'assigne en conséquence. Les méthodes de mélange gaussien appartiennent à ce type. - -- **Clustering basé sur la densité**. Les points de données sont assignés à des clusters en fonction de leur densité, ou de leur regroupement autour les uns des autres. Les points de données éloignés du groupe sont considérés comme des valeurs aberrantes ou du bruit. DBSCAN, Mean-shift et OPTICS appartiennent à ce type de clustering. - -- **Clustering basé sur une grille**. Pour des ensembles de données multidimensionnels, une grille est créée et les données sont divisées parmi les cellules de la grille, créant ainsi des clusters. - -## Exercice - cluster vos données - -Le clustering en tant que technique est grandement aidé par une visualisation appropriée, alors commençons par visualiser nos données musicales. Cet exercice nous aidera à décider quelle méthode de clustering nous devrions utiliser le plus efficacement pour la nature de ces données. - -1. Ouvrez le fichier [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) dans ce dossier. - -1. Importez le package `Seaborn` pour une bonne visualisation des données. - - ```python - !pip install seaborn - ``` - -1. Ajoutez les données des chansons depuis [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Chargez un dataframe avec des données sur les chansons. Préparez-vous à explorer ces données en important les bibliothèques et en affichant les données : - - ```python - import matplotlib.pyplot as plt - import pandas as pd - - df = pd.read_csv("../data/nigerian-songs.csv") - df.head() - ``` - - Vérifiez les premières lignes de données : - - | | 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. Obtenez des informations sur le dataframe en appelant `info()` : - - ```python - df.info() - ``` - - La sortie devrait ressembler à ceci : - - ```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. Vérifiez les valeurs nulles, en appelant `isnull()` et en vérifiant que la somme est 0 : - - ```python - df.isnull().sum() - ``` - - Tout semble bon : - - ```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. Décrivez les données : - - ```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 -## [Quiz post-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) - -## Revue et auto-apprentissage - -Avant d'appliquer des algorithmes de clustering, comme nous l'avons appris, il est judicieux de comprendre la nature de votre ensemble de données. Lisez-en plus sur ce sujet [ici](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) - -[Cet article utile](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) vous guide à travers les différentes manières dont divers algorithmes de clustering se comportent, selon les formes de données. - -## Devoir - -[Recherchez d'autres visualisations pour le clustering](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/1-Visualize/assignment.md b/translations/fr/5-Clustering/1-Visualize/assignment.md deleted file mode 100644 index c57bbc68..00000000 --- a/translations/fr/5-Clustering/1-Visualize/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Recherche d'autres visualisations pour le clustering - -## Instructions - -Dans cette leçon, vous avez travaillé avec certaines techniques de visualisation pour vous familiariser avec le tracé de vos données en préparation au clustering. Les nuages de points, en particulier, sont utiles pour trouver des groupes d'objets. Recherchez différentes manières et différentes bibliothèques pour créer des nuages de points et documentez votre travail dans un carnet. Vous pouvez utiliser les données de cette leçon, d'autres leçons ou des données que vous trouvez vous-même (merci de créditer leur source, cependant, dans votre carnet). Tracez quelques données en utilisant des nuages de points et expliquez ce que vous découvrez. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| -------- | -------------------------------------------------------------- | -------------------------------------------------------------------------------------- | ----------------------------------- | -| | Un carnet est présenté avec cinq nuages de points bien documentés | Un carnet est présenté avec moins de cinq nuages de points et il est moins bien documenté | Un carnet incomplet est présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/fr/5-Clustering/1-Visualize/solution/Julia/README.md deleted file mode 100644 index 782d0c2c..00000000 --- a/translations/fr/5-Clustering/1-Visualize/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/2-K-Means/README.md b/translations/fr/5-Clustering/2-K-Means/README.md deleted file mode 100644 index 6224ab37..00000000 --- a/translations/fr/5-Clustering/2-K-Means/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# K-Means clustering - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) - -Dans cette leçon, vous apprendrez comment créer des clusters en utilisant Scikit-learn et le jeu de données de musique nigériane que vous avez importé plus tôt. Nous couvrirons les bases de K-Means pour le clustering. Gardez à l'esprit que, comme vous l'avez appris dans la leçon précédente, il existe de nombreuses façons de travailler avec des clusters et la méthode que vous utilisez dépend de vos données. Nous allons essayer K-Means car c'est la technique de clustering la plus courante. Commençons ! - -Termes que vous apprendrez : - -- Score de silhouette -- Méthode du coude -- Inertie -- Variance - -## Introduction - -[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) est une méthode dérivée du domaine du traitement du signal. Elle est utilisée pour diviser et partitionner des groupes de données en 'k' clusters en utilisant une série d'observations. Chaque observation vise à regrouper un point de données donné le plus près de sa 'moyenne' la plus proche, ou le point central d'un cluster. - -Les clusters peuvent être visualisés sous forme de [diagrammes de Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), qui incluent un point (ou 'graine') et sa région correspondante. - -![diagramme de voronoi](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.fr.png) - -> infographie par [Jen Looper](https://twitter.com/jenlooper) - -Le processus de clustering K-Means [s'exécute en trois étapes](https://scikit-learn.org/stable/modules/clustering.html#k-means) : - -1. L'algorithme sélectionne un nombre k de points centraux en échantillonnant à partir du jeu de données. Après cela, il boucle : - 1. Il assigne chaque échantillon au centroïde le plus proche. - 2. Il crée de nouveaux centroïdes en prenant la valeur moyenne de tous les échantillons assignés aux centroïdes précédents. - 3. Ensuite, il calcule la différence entre les nouveaux et anciens centroïdes et répète jusqu'à ce que les centroïdes soient stabilisés. - -Un inconvénient de l'utilisation de K-Means est le fait que vous devrez établir 'k', c'est-à-dire le nombre de centroïdes. Heureusement, la 'méthode du coude' aide à estimer une bonne valeur de départ pour 'k'. Vous allez l'essayer dans un instant. - -## Prérequis - -Vous travaillerez dans le fichier [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) de cette leçon qui inclut l'importation des données et le nettoyage préliminaire que vous avez effectué dans la leçon précédente. - -## Exercice - préparation - -Commencez par jeter un autre coup d'œil aux données des chansons. - -1. Créez un boxplot, en appelant `boxplot()` pour chaque colonne : - - ```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) - ``` - - Ces données sont un peu bruyantes : en observant chaque colonne sous forme de boxplot, vous pouvez voir des valeurs aberrantes. - - ![valeurs aberrantes](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.fr.png) - -Vous pourriez parcourir le jeu de données et supprimer ces valeurs aberrantes, mais cela rendrait les données plutôt minimales. - -1. Pour l'instant, choisissez les colonnes que vous utiliserez pour votre exercice de clustering. Choisissez celles avec des plages similaires et encodez la colonne `artist_top_genre` en tant que données numériques : - - ```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. Maintenant, vous devez choisir combien de clusters cibler. Vous savez qu'il y a 3 genres musicaux que nous avons extraits du jeu de données, alors essayons 3 : - - ```python - from sklearn.cluster import KMeans - - nclusters = 3 - seed = 0 - - km = KMeans(n_clusters=nclusters, random_state=seed) - km.fit(X) - - # Predict the cluster for each data point - - y_cluster_kmeans = km.predict(X) - y_cluster_kmeans - ``` - -Vous voyez un tableau imprimé avec des clusters prévus (0, 1 ou 2) pour chaque ligne du dataframe. - -1. Utilisez ce tableau pour calculer un 'score de silhouette' : - - ```python - from sklearn import metrics - score = metrics.silhouette_score(X, y_cluster_kmeans) - score - ``` - -## Score de silhouette - -Recherchez un score de silhouette plus proche de 1. Ce score varie de -1 à 1, et si le score est 1, le cluster est dense et bien séparé des autres clusters. Une valeur proche de 0 représente des clusters qui se chevauchent avec des échantillons très proches de la frontière de décision des clusters voisins. [(Source)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) - -Notre score est **.53**, donc juste au milieu. Cela indique que nos données ne sont pas particulièrement bien adaptées à ce type de clustering, mais continuons. - -### Exercice - construire un modèle - -1. Importez `KMeans` et commencez le processus de clustering. - - ```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_) - - ``` - - Il y a quelques parties ici qui méritent d'être expliquées. - - > 🎓 range : Ce sont les itérations du processus de clustering - - > 🎓 random_state : "Détermine la génération de nombres aléatoires pour l'initialisation des centroïdes." [Source](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - - > 🎓 WCSS : "somme des carrés à l'intérieur des clusters" mesure la distance moyenne au carré de tous les points au sein d'un cluster par rapport au centroïde du cluster. [Source](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - - > 🎓 Inertie : Les algorithmes K-Means tentent de choisir des centroïdes pour minimiser 'l'inertie', "une mesure de la cohérence interne des clusters." [Source](https://scikit-learn.org/stable/modules/clustering.html). La valeur est ajoutée à la variable wcss à chaque itération. - - > 🎓 k-means++ : Dans [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means), vous pouvez utiliser l'optimisation 'k-means++', qui "initialise les centroïdes pour être (généralement) éloignés les uns des autres, ce qui conduit probablement à de meilleurs résultats qu'une initialisation aléatoire." - -### Méthode du coude - -Auparavant, vous avez supposé que, parce que vous avez ciblé 3 genres musicaux, vous devriez choisir 3 clusters. Mais est-ce vraiment le cas ? - -1. Utilisez la 'méthode du coude' pour vous en assurer. - - ```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() - ``` - - Utilisez la variable `wcss` que vous avez construite à l'étape précédente pour créer un graphique montrant où se trouve la 'flexion' dans le coude, ce qui indique le nombre optimal de clusters. Peut-être que c'est **3** ! - - ![méthode du coude](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.fr.png) - -## Exercice - afficher les clusters - -1. Essayez à nouveau le processus, cette fois en définissant trois clusters, et affichez les clusters sous forme de nuage de points : - - ```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. Vérifiez l'exactitude du modèle : - - ```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))) - ``` - - L'exactitude de ce modèle n'est pas très bonne, et la forme des clusters vous donne un indice sur la raison. - - ![clusters](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.fr.png) - - Ces données sont trop déséquilibrées, trop peu corrélées et il y a trop de variance entre les valeurs des colonnes pour bien se regrouper. En fait, les clusters qui se forment sont probablement fortement influencés ou biaisés par les trois catégories de genre que nous avons définies ci-dessus. Cela a été un processus d'apprentissage ! - - Dans la documentation de Scikit-learn, vous pouvez voir qu'un modèle comme celui-ci, avec des clusters pas très bien démarqués, a un problème de 'variance' : - - ![modèles problématiques](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.fr.png) - > Infographie de Scikit-learn - -## Variance - -La variance est définie comme "la moyenne des différences au carré par rapport à la moyenne" [(Source)](https://www.mathsisfun.com/data/standard-deviation.html). Dans le contexte de ce problème de clustering, cela fait référence aux données dont les nombres de notre jeu de données tendent à diverger un peu trop de la moyenne. - -✅ C'est un excellent moment pour réfléchir à toutes les manières dont vous pourriez corriger ce problème. Ajuster un peu plus les données ? Utiliser d'autres colonnes ? Utiliser un algorithme différent ? Indice : Essayez [de normaliser vos données](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) et testez d'autres colonnes. - -> Essayez ce '[calculateur de variance](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' pour mieux comprendre le concept. - ---- - -## 🚀Défi - -Passez du temps avec ce notebook, en ajustant les paramètres. Pouvez-vous améliorer l'exactitude du modèle en nettoyant davantage les données (en supprimant les valeurs aberrantes, par exemple) ? Vous pouvez utiliser des poids pour donner plus de poids à certains échantillons de données. Que pouvez-vous faire d'autre pour créer de meilleurs clusters ? - -Indice : Essayez de normaliser vos données. Il y a du code commenté dans le notebook qui ajoute une normalisation standard pour que les colonnes de données se ressemblent davantage en termes de plage. Vous constaterez que, bien que le score de silhouette diminue, la 'flexion' dans le graphique du coude s'adoucit. Cela est dû au fait que laisser les données non normalisées permet aux données avec moins de variance de porter plus de poids. Lisez un peu plus sur ce problème [ici](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). - -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) - -## Révision & Auto-apprentissage - -Jetez un œil à un simulateur K-Means [comme celui-ci](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Vous pouvez utiliser cet outil pour visualiser des points de données d'exemple et déterminer ses centroïdes. Vous pouvez modifier l'aléatoire des données, le nombre de clusters et le nombre de centroïdes. Cela vous aide-t-il à comprendre comment les données peuvent être regroupées ? - -De plus, jetez un œil à [ce document sur K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) de Stanford. - -## Devoir - -[Essayez différentes méthodes de clustering](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/2-K-Means/assignment.md b/translations/fr/5-Clustering/2-K-Means/assignment.md deleted file mode 100644 index 56e94adc..00000000 --- a/translations/fr/5-Clustering/2-K-Means/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Essayez différentes méthodes de clustering - -## Instructions - -Dans cette leçon, vous avez appris sur le clustering K-Means. Parfois, K-Means n'est pas approprié pour vos données. Créez un carnet en utilisant des données provenant soit de ces leçons, soit d'ailleurs (citez votre source) et montrez une méthode de clustering différente SANS utiliser K-Means. Qu'avez-vous appris ? - -## Critères d'évaluation - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| --------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | Un carnet est présenté avec un modèle de clustering bien documenté | Un carnet est présenté sans bonne documentation et/ou incomplet | Un travail incomplet est soumis | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/fr/5-Clustering/2-K-Means/solution/Julia/README.md deleted file mode 100644 index d38d5bf4..00000000 --- a/translations/fr/5-Clustering/2-K-Means/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/5-Clustering/README.md b/translations/fr/5-Clustering/README.md deleted file mode 100644 index 0885844e..00000000 --- a/translations/fr/5-Clustering/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Modèles de clustering pour l'apprentissage automatique - -Le clustering est une tâche d'apprentissage automatique qui vise à trouver des objets semblables et à les regrouper en ensembles appelés clusters. Ce qui distingue le clustering des autres approches en apprentissage automatique, c'est que les choses se passent automatiquement ; en fait, on peut dire que c'est l'opposé de l'apprentissage supervisé. - -## Sujet régional : modèles de clustering pour les goûts musicaux d'un public nigérian 🎧 - -Le public diversifié du Nigéria a des goûts musicaux variés. En utilisant des données extraites de Spotify (inspirées par [cet article](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), examinons quelques musiques populaires au Nigéria. Cet ensemble de données inclut des informations sur le score de 'dansabilité' de diverses chansons, l' 'acoustique', le volume, la 'parole', la popularité et l'énergie. Il sera intéressant de découvrir des motifs dans ces données ! - -![Un tourne-disque](../../../translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.fr.jpg) - -> Photo par Marcela Laskoski sur Unsplash - -Dans cette série de leçons, vous découvrirez de nouvelles façons d'analyser des données en utilisant des techniques de clustering. Le clustering est particulièrement utile lorsque votre ensemble de données manque d'étiquettes. S'il a des étiquettes, alors des techniques de classification, comme celles que vous avez apprises dans les leçons précédentes, pourraient être plus utiles. Mais dans les cas où vous cherchez à regrouper des données non étiquetées, le clustering est un excellent moyen de découvrir des motifs. - -> Il existe des outils low-code utiles qui peuvent vous aider à apprendre à travailler avec des modèles de clustering. Essayez [Azure ML pour cette tâche](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Leçons - -1. [Introduction au clustering](1-Visualize/README.md) -2. [Clustering K-Means](2-K-Means/README.md) - -## Crédits - -Ces leçons ont été écrites avec 🎶 par [Jen Looper](https://www.twitter.com/jenlooper) avec des revues utiles de [Rishit Dagli](https://rishit_dagli) et [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). - -L'ensemble de données [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) a été obtenu sur Kaggle en étant extrait de Spotify. - -Des exemples utiles de K-Means qui ont aidé à créer cette leçon incluent cette [exploration de l'iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), ce [carnet d'introduction](https://www.kaggle.com/prashant111/k-means-clustering-with-python), et cet [exemple d'ONG hypothétique](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/1-Introduction-to-NLP/README.md b/translations/fr/6-NLP/1-Introduction-to-NLP/README.md deleted file mode 100644 index 5529c281..00000000 --- a/translations/fr/6-NLP/1-Introduction-to-NLP/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# Introduction à la traitement du langage naturel - -Cette leçon couvre une brève histoire et des concepts importants du *traitement du langage naturel*, un sous-domaine de la *linguistique computationnelle*. - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) - -## Introduction - -Le PLN, comme on l'appelle couramment, est l'un des domaines les plus connus où l'apprentissage automatique a été appliqué et utilisé dans des logiciels de production. - -✅ Pouvez-vous penser à un logiciel que vous utilisez tous les jours qui a probablement du traitement du langage naturel intégré ? Que diriez-vous de vos programmes de traitement de texte ou des applications mobiles que vous utilisez régulièrement ? - -Vous apprendrez sur : - -- **L'idée des langues**. Comment les langues se sont développées et quels ont été les principaux domaines d'étude. -- **Définitions et concepts**. Vous apprendrez également des définitions et des concepts sur la façon dont les ordinateurs traitent le texte, y compris l'analyse syntaxique, la grammaire et l'identification des noms et des verbes. Il y a quelques tâches de codage dans cette leçon, et plusieurs concepts importants sont introduits que vous apprendrez à coder plus tard dans les leçons suivantes. - -## Linguistique computationnelle - -La linguistique computationnelle est un domaine de recherche et de développement sur plusieurs décennies qui étudie comment les ordinateurs peuvent travailler avec, et même comprendre, traduire et communiquer avec des langues. Le traitement du langage naturel (PLN) est un domaine connexe axé sur la façon dont les ordinateurs peuvent traiter des langues "naturelles", ou humaines. - -### Exemple - dictée téléphonique - -Si vous avez déjà dicté à votre téléphone au lieu de taper ou demandé une question à un assistant virtuel, votre discours a été converti en forme textuelle puis traité ou *analysé* à partir de la langue que vous parliez. Les mots-clés détectés ont ensuite été traités dans un format que le téléphone ou l'assistant pouvait comprendre et sur lequel il pouvait agir. - -![compréhension](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.fr.png) -> La compréhension linguistique réelle est difficile ! Image par [Jen Looper](https://twitter.com/jenlooper) - -### Comment cette technologie est-elle rendue possible ? - -Cela est possible parce que quelqu'un a écrit un programme informatique pour le faire. Il y a quelques décennies, certains écrivains de science-fiction ont prédit que les gens parleraient principalement à leurs ordinateurs, et que les ordinateurs comprendraient toujours exactement ce qu'ils voulaient dire. Malheureusement, il s'est avéré que c'était un problème plus difficile que beaucoup ne l'imaginaient, et bien que ce soit un problème beaucoup mieux compris aujourd'hui, il existe des défis significatifs pour atteindre un traitement du langage naturel "parfait" en ce qui concerne la compréhension du sens d'une phrase. C'est un problème particulièrement difficile lorsqu'il s'agit de comprendre l'humour ou de détecter des émotions telles que le sarcasme dans une phrase. - -À ce stade, vous vous rappelez peut-être des cours d'école où l'enseignant a abordé les parties de la grammaire dans une phrase. Dans certains pays, les élèves apprennent la grammaire et la linguistique comme matière dédiée, mais dans beaucoup d'autres, ces sujets sont inclus dans l'apprentissage d'une langue : soit votre première langue à l'école primaire (apprendre à lire et à écrire) et peut-être une deuxième langue au post-primaire, ou au lycée. Ne vous inquiétez pas si vous n'êtes pas un expert pour différencier les noms des verbes ou les adverbes des adjectifs ! - -Si vous avez du mal avec la différence entre le *présent simple* et le *présent progressif*, vous n'êtes pas seul. C'est une chose difficile pour beaucoup de gens, même des locuteurs natifs d'une langue. La bonne nouvelle est que les ordinateurs sont vraiment bons pour appliquer des règles formelles, et vous apprendrez à écrire du code qui peut *analyser* une phrase aussi bien qu'un humain. Le plus grand défi que vous examinerez plus tard est de comprendre le *sens* et le *sentiment* d'une phrase. - -## Prérequis - -Pour cette leçon, le principal prérequis est de pouvoir lire et comprendre la langue de cette leçon. Il n'y a pas de problèmes mathématiques ou d'équations à résoudre. Bien que l'auteur original ait écrit cette leçon en anglais, elle est également traduite dans d'autres langues, donc vous pourriez lire une traduction. Il y a des exemples où plusieurs langues différentes sont utilisées (pour comparer les différentes règles grammaticales de différentes langues). Celles-ci ne sont *pas* traduites, mais le texte explicatif l'est, donc le sens devrait être clair. - -Pour les tâches de codage, vous utiliserez Python et les exemples utilisent Python 3.8. - -Dans cette section, vous aurez besoin, et utiliserez : - -- **Compréhension de Python 3**. Compréhension du langage de programmation en Python 3, cette leçon utilise les entrées, les boucles, la lecture de fichiers, les tableaux. -- **Visual Studio Code + extension**. Nous utiliserons Visual Studio Code et son extension Python. Vous pouvez également utiliser un IDE Python de votre choix. -- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) est une bibliothèque de traitement de texte simplifiée pour Python. Suivez les instructions sur le site de TextBlob pour l'installer sur votre système (installez également les corpora comme indiqué ci-dessous) : - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 Astuce : Vous pouvez exécuter Python directement dans les environnements VS Code. Consultez la [documentation](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) pour plus d'informations. - -## Parler aux machines - -L'histoire de la tentative de faire comprendre aux ordinateurs le langage humain remonte à des décennies, et l'un des premiers scientifiques à considérer le traitement du langage naturel était *Alan Turing*. - -### Le 'test de Turing' - -Lorsque Turing faisait des recherches sur l'*intelligence artificielle* dans les années 1950, il s'est demandé si un test de conversation pouvait être donné à un humain et un ordinateur (via une correspondance tapée) où l'humain dans la conversation n'était pas sûr s'il conversait avec un autre humain ou un ordinateur. - -Si, après une certaine durée de conversation, l'humain ne pouvait pas déterminer si les réponses provenaient d'un ordinateur ou non, alors pouvait-on dire que l'ordinateur *pensait* ? - -### L'inspiration - 'le jeu de l'imitation' - -L'idée de cela vient d'un jeu de société appelé *Le jeu de l'imitation* où un interrogateur est seul dans une pièce et chargé de déterminer lequel de deux personnes (dans une autre pièce) est masculin et féminin respectivement. L'interrogateur peut envoyer des notes et doit essayer de penser à des questions où les réponses écrites révèlent le genre de la personne mystérieuse. Bien sûr, les joueurs dans l'autre pièce essaient de tromper l'interrogateur en répondant à des questions de manière à induire en erreur ou à confondre l'interrogateur, tout en donnant également l'apparence de répondre honnêtement. - -### Développer Eliza - -Dans les années 1960, un scientifique du MIT nommé *Joseph Weizenbaum* a développé [*Eliza*](https://wikipedia.org/wiki/ELIZA), un 'thérapeute' informatique qui poserait des questions à l'humain et donnerait l'apparence de comprendre ses réponses. Cependant, bien qu'Eliza puisse analyser une phrase et identifier certains constructions grammaticales et mots-clés afin de donner une réponse raisonnable, on ne pouvait pas dire qu'elle *comprenait* la phrase. Si Eliza était confrontée à une phrase suivant le format "**Je suis** triste", elle pourrait réarranger et substituer des mots dans la phrase pour former la réponse "Depuis combien de temps **es-tu** triste ?". - -Cela donnait l'impression qu'Eliza comprenait l'énoncé et posait une question de suivi, alors qu'en réalité, elle changeait le temps et ajoutait quelques mots. Si Eliza ne pouvait pas identifier un mot-clé pour lequel elle avait une réponse, elle donnerait à la place une réponse aléatoire qui pourrait s'appliquer à de nombreuses déclarations différentes. Eliza pouvait être facilement trompée, par exemple si un utilisateur écrivait "**Tu es** un bicyclette", elle pourrait répondre par "Depuis combien de temps **suis-je** une bicyclette ?", au lieu d'une réponse plus raisonnée. - -[![Discuter avec Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Discuter avec Eliza") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo sur le programme ELIZA original - -> Remarque : Vous pouvez lire la description originale de [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publiée en 1966 si vous avez un compte ACM. Alternativement, lisez sur Eliza sur [wikipedia](https://wikipedia.org/wiki/ELIZA) - -## Exercice - coder un bot conversationnel de base - -Un bot conversationnel, comme Eliza, est un programme qui suscite l'entrée de l'utilisateur et semble comprendre et répondre de manière intelligente. Contrairement à Eliza, notre bot n'aura pas plusieurs règles lui donnant l'apparence d'une conversation intelligente. Au lieu de cela, notre bot n'aura qu'une seule capacité, celle de maintenir la conversation avec des réponses aléatoires qui pourraient fonctionner dans presque n'importe quelle conversation triviale. - -### Le plan - -Vos étapes pour construire un bot conversationnel : - -1. Imprimer des instructions conseillant à l'utilisateur comment interagir avec le bot -2. Démarrer une boucle - 1. Accepter l'entrée de l'utilisateur - 2. Si l'utilisateur a demandé à quitter, alors quitter - 3. Traiter l'entrée de l'utilisateur et déterminer la réponse (dans ce cas, la réponse est un choix aléatoire dans une liste de réponses génériques possibles) - 4. Imprimer la réponse -3. revenir à l'étape 2 - -### Construire le bot - -Créons le bot ensuite. Commençons par définir quelques phrases. - -1. Créez ce bot vous-même en Python avec les réponses aléatoires suivantes : - - ```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?"] - ``` - - Voici un exemple de sortie pour vous guider (l'entrée de l'utilisateur est sur les lignes commençant par `>`): - - ```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! - ``` - - Une solution possible à la tâche est [ici](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) - - ✅ Arrêtez-vous et réfléchissez - - 1. Pensez-vous que les réponses aléatoires pourraient "tromper" quelqu'un en lui faisant croire que le bot le comprenait réellement ? - 2. Quelles caractéristiques le bot aurait-il besoin pour être plus efficace ? - 3. Si un bot pouvait vraiment "comprendre" le sens d'une phrase, devrait-il aussi "se souvenir" du sens des phrases précédentes dans une conversation ? - ---- - -## 🚀Défi - -Choisissez l'un des éléments "arrêtez-vous et réfléchissez" ci-dessus et essayez soit de les mettre en œuvre dans le code, soit d'écrire une solution sur papier en utilisant du pseudocode. - -Dans la prochaine leçon, vous apprendrez un certain nombre d'autres approches pour analyser le langage naturel et l'apprentissage automatique. - -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) - -## Révision & Auto-étude - -Jetez un œil aux références ci-dessous comme opportunités de lecture supplémentaire. - -### Références - -1. Schubert, Lenhart, "Linguistique computationnelle", *L'Encyclopédie de Stanford de la Philosophie* (Édition du printemps 2020), Edward N. Zalta (éd.), URL = . -2. Université de Princeton "À propos de WordNet." [WordNet](https://wordnet.princeton.edu/). Université de Princeton. 2010. - -## Devoir - -[Recherche d'un bot](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/fr/6-NLP/1-Introduction-to-NLP/assignment.md deleted file mode 100644 index d6d6baaf..00000000 --- a/translations/fr/6-NLP/1-Introduction-to-NLP/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Recherche d'un bot - -## Instructions - -Les bots sont partout. Votre mission : en trouver un et l'adopter ! Vous pouvez les trouver sur des sites web, dans des applications bancaires, et au téléphone, par exemple lorsque vous appelez des entreprises de services financiers pour des conseils ou des informations sur votre compte. Analysez le bot et voyez si vous pouvez le dérouter. Si vous parvenez à le dérouter, pourquoi pensez-vous que cela s'est produit ? Rédigez un court document sur votre expérience. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| --------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ---------------------- | -| | Un document d'une page complète est rédigé, expliquant l'architecture présumée du bot et décrivant votre expérience avec celui-ci | Un document est incomplet ou mal recherché | Aucun document n'est soumis | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/2-Tasks/README.md b/translations/fr/6-NLP/2-Tasks/README.md deleted file mode 100644 index a32590e8..00000000 --- a/translations/fr/6-NLP/2-Tasks/README.md +++ /dev/null @@ -1,217 +0,0 @@ -# Tâches et techniques courantes en traitement du langage naturel - -Pour la plupart des tâches de *traitement du langage naturel*, le texte à traiter doit être décomposé, examiné, et les résultats stockés ou croisés avec des règles et des ensembles de données. Ces tâches permettent au programmeur de déduire le _sens_ ou l’_intention_ ou simplement la _fréquence_ des termes et des mots dans un texte. - -## [Quiz pré-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/) - -Découvrons les techniques courantes utilisées dans le traitement de texte. Associées à l'apprentissage automatique, ces techniques vous aident à analyser efficacement de grandes quantités de texte. Avant d'appliquer l'apprentissage automatique à ces tâches, comprenons cependant les problèmes rencontrés par un spécialiste en traitement du langage naturel. - -## Tâches courantes en NLP - -Il existe différentes manières d'analyser un texte sur lequel vous travaillez. Il y a des tâches que vous pouvez effectuer et, à travers ces tâches, vous êtes en mesure de comprendre le texte et de tirer des conclusions. Vous effectuez généralement ces tâches dans un certain ordre. - -### Tokenisation - -Probablement la première chose que la plupart des algorithmes de NLP doivent faire est de diviser le texte en tokens, ou mots. Bien que cela semble simple, tenir compte de la ponctuation et des délimiteurs de mots et de phrases dans différentes langues peut rendre cela délicat. Vous devrez peut-être utiliser diverses méthodes pour déterminer les délimitations. - -![tokenisation](../../../../translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.fr.png) -> Tokenisation d'une phrase de **Orgueil et Préjugés**. Infographie par [Jen Looper](https://twitter.com/jenlooper) - -### Embeddings - -[Les embeddings de mots](https://wikipedia.org/wiki/Word_embedding) sont une manière de convertir vos données textuelles numériquement. Les embeddings sont réalisés de manière à ce que les mots ayant un sens similaire ou les mots utilisés ensemble se regroupent. - -![embeddings de mots](../../../../translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.fr.png) -> "J'ai le plus grand respect pour vos nerfs, ce sont mes vieux amis." - Embeddings de mots pour une phrase de **Orgueil et Préjugés**. Infographie par [Jen Looper](https://twitter.com/jenlooper) - -✅ Essayez [cet outil intéressant](https://projector.tensorflow.org/) pour expérimenter avec les embeddings de mots. En cliquant sur un mot, vous voyez des groupes de mots similaires : 'jouet' se regroupe avec 'disney', 'lego', 'playstation', et 'console'. - -### Analyse syntaxique et étiquetage des parties du discours - -Chaque mot qui a été tokenisé peut être étiqueté comme une partie du discours - un nom, un verbe ou un adjectif. La phrase `the quick red fox jumped over the lazy brown dog` pourrait être étiquetée comme suit : renard = nom, a sauté = verbe. - -![analyse syntaxique](../../../../translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.fr.png) - -> Analyse syntaxique d'une phrase de **Orgueil et Préjugés**. Infographie par [Jen Looper](https://twitter.com/jenlooper) - -L'analyse syntaxique consiste à reconnaître quels mots sont liés les uns aux autres dans une phrase - par exemple, `the quick red fox jumped` est une séquence adjectif-nom-verbe qui est distincte de la séquence `lazy brown dog`. - -### Fréquences de mots et de phrases - -Une procédure utile lors de l'analyse d'un grand corpus de texte est de construire un dictionnaire de chaque mot ou phrase d'intérêt et de la fréquence à laquelle il apparaît. La phrase `the quick red fox jumped over the lazy brown dog` a une fréquence de mot de 2 pour le. - -Voyons un exemple de texte où nous comptons la fréquence des mots. Le poème de Rudyard Kipling, The Winners, contient le vers suivant : - -```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. -``` - -Les fréquences de phrases peuvent être insensibles à la casse ou sensibles à la casse selon les besoins, la phrase `un ami` has a frequency of 2 and `le` has a frequency of 6, and `voyages` est 2. - -### N-grams - -Un texte peut être divisé en séquences de mots d'une longueur définie, un seul mot (unigramme), deux mots (bigrammes), trois mots (trigrammes) ou tout nombre de mots (n-grams). - -Par exemple, `the quick red fox jumped over the lazy brown dog` avec un score n-gram de 2 produit les n-grams suivants : - -1. le rapide -2. rapide rouge -3. rouge renard -4. renard a sauté -5. a sauté par-dessus -6. par-dessus le -7. le paresseux -8. paresseux brun -9. brun chien - -Il peut être plus facile de visualiser cela comme une boîte glissante sur la phrase. Voici pour les n-grams de 3 mots, le n-gram est en gras dans chaque phrase : - -1. **le rapide rouge** renard a sauté par-dessus le paresseux brun chien -2. le **rapide rouge renard** a sauté par-dessus le paresseux brun chien -3. le rapide **rouge renard a sauté** par-dessus le paresseux brun chien -4. le rapide rouge **renard a sauté par-dessus** le paresseux brun chien -5. le rapide rouge renard **a sauté par-dessus le** paresseux brun chien -6. le rapide rouge renard a sauté **par-dessus le paresseux** brun chien -7. le rapide rouge renard a sauté par-dessus **le paresseux brun** chien -8. le rapide rouge renard a sauté par-dessus le **paresseux brun chien** - -![fenêtre glissante des n-grams](../../../../6-NLP/2-Tasks/images/n-grams.gif) - -> Valeur n-gram de 3 : Infographie par [Jen Looper](https://twitter.com/jenlooper) - -### Extraction de phrases nominales - -Dans la plupart des phrases, il y a un nom qui est le sujet ou l'objet de la phrase. En anglais, il est souvent identifiable par la présence de 'un' ou 'une' ou 'le' qui le précède. Identifier le sujet ou l'objet d'une phrase en 'extraction de la phrase nominale' est une tâche courante en NLP lorsqu'il s'agit de comprendre le sens d'une phrase. - -✅ Dans la phrase "Je ne peux pas me fixer sur l'heure, ou le lieu, ou le regard ou les mots, qui ont posé les fondations. Cela fait trop longtemps. J'étais au milieu avant de savoir que j'avais commencé.", pouvez-vous identifier les phrases nominales ? - -Dans la phrase `the quick red fox jumped over the lazy brown dog`, il y a 2 phrases nominales : **rapide renard rouge** et **paresseux chien brun**. - -### Analyse des sentiments - -Une phrase ou un texte peut être analysé pour déterminer le sentiment, ou à quel point il est *positif* ou *négatif*. Le sentiment est mesuré en *polarité* et *objectivité/sujetivité*. La polarité est mesurée de -1.0 à 1.0 (négatif à positif) et de 0.0 à 1.0 (le plus objectif au plus subjectif). - -✅ Plus tard, vous apprendrez qu'il existe différentes manières de déterminer le sentiment en utilisant l'apprentissage automatique, mais une manière consiste à avoir une liste de mots et de phrases qui sont catégorisés comme positifs ou négatifs par un expert humain et à appliquer ce modèle au texte pour calculer un score de polarité. Pouvez-vous voir comment cela fonctionnerait dans certaines circonstances et moins bien dans d'autres ? - -### Flexion - -La flexion vous permet de prendre un mot et d'obtenir le singulier ou le pluriel de ce mot. - -### Lemmatisation - -Un *lemme* est la racine ou le mot principal pour un ensemble de mots, par exemple *volé*, *volent*, *volant* ont un lemme du verbe *voler*. - -Il existe également des bases de données utiles disponibles pour le chercheur en NLP, notamment : - -### WordNet - -[WordNet](https://wordnet.princeton.edu/) est une base de données de mots, synonymes, antonymes et de nombreux autres détails pour chaque mot dans de nombreuses langues différentes. Elle est incroyablement utile lorsqu'il s'agit de construire des traductions, des correcteurs orthographiques ou des outils linguistiques de tout type. - -## Bibliothèques NLP - -Heureusement, vous n'avez pas à construire toutes ces techniques vous-même, car il existe d'excellentes bibliothèques Python qui rendent cela beaucoup plus accessible aux développeurs qui ne sont pas spécialisés dans le traitement du langage naturel ou l'apprentissage automatique. Les leçons suivantes incluent davantage d'exemples de celles-ci, mais ici vous apprendrez quelques exemples utiles pour vous aider dans la prochaine tâche. - -### Exercice - utiliser `TextBlob` library - -Let's use a library called TextBlob as it contains helpful APIs for tackling these types of tasks. TextBlob "stands on the giant shoulders of [NLTK](https://nltk.org) and [pattern](https://github.com/clips/pattern), and plays nicely with both." It has a considerable amount of ML embedded in its API. - -> Note: A useful [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) guide is available for TextBlob that is recommended for experienced Python developers - -When attempting to identify *noun phrases*, TextBlob offers several options of extractors to find noun phrases. - -1. Take a look at `ConllExtractor`. - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # import and create a Conll extractor to use later - extractor = ConllExtractor() - - # later when you need a noun phrase extractor: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified - np = user_input_blob.noun_phrases - ``` - - > Que se passe-t-il ici ? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) est "Un extracteur de phrases nominales qui utilise l'analyse de chunks entraînée avec le corpus d'entraînement ConLL-2000." ConLL-2000 fait référence à la Conférence de 2000 sur l'apprentissage automatique du langage naturel. Chaque année, la conférence organisait un atelier pour s'attaquer à un problème épineux en NLP, et en 2000, il s'agissait de l'extraction de chunks nominaux. Un modèle a été entraîné sur le Wall Street Journal, avec "les sections 15-18 comme données d'entraînement (211727 tokens) et la section 20 comme données de test (47377 tokens)". Vous pouvez consulter les procédures utilisées [ici](https://www.clips.uantwerpen.be/conll2000/chunking/) et les [résultats](https://ifarm.nl/erikt/research/np-chunking.html). - -### Défi - améliorer votre bot avec le NLP - -Dans la leçon précédente, vous avez construit un bot de questions-réponses très simple. Maintenant, vous allez rendre Marvin un peu plus sympathique en analysant votre entrée pour le sentiment et en imprimant une réponse correspondant au sentiment. Vous devrez également identifier une `noun_phrase` et poser des questions à son sujet. - -Vos étapes pour construire un bot conversationnel meilleur : - -1. Imprimer des instructions conseillant à l'utilisateur comment interagir avec le bot -2. Démarrer la boucle - 1. Accepter l'entrée de l'utilisateur - 2. Si l'utilisateur a demandé à quitter, alors quitter - 3. Traiter l'entrée de l'utilisateur et déterminer la réponse sentimentale appropriée - 4. Si une phrase nominale est détectée dans le sentiment, la mettre au pluriel et demander plus d'informations sur ce sujet - 5. Imprimer la réponse -3. revenir à l'étape 2 - -Voici le code pour déterminer le sentiment en utilisant TextBlob. Notez qu'il n'y a que quatre *gradients* de réponse au sentiment (vous pourriez en avoir plus si vous le souhaitez) : - -```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. " -``` - -Voici un exemple de sortie pour vous guider (l'entrée de l'utilisateur est sur les lignes commençant par >) : - -```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! -``` - -Une solution possible à la tâche est [ici](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) - -✅ Vérification des connaissances - -1. Pensez-vous que les réponses sympathiques pourraient "tromper" quelqu'un en pensant que le bot les comprenait réellement ? -2. L'identification de la phrase nominale rend-elle le bot plus "crédible" ? -3. Pourquoi l'extraction d'une "phrase nominale" d'une phrase serait-elle une chose utile à faire ? - ---- - -Implémentez le bot dans la vérification des connaissances précédente et testez-le sur un ami. Peut-il les tromper ? Pouvez-vous rendre votre bot plus "crédible" ? - -## 🚀Défi - -Prenez une tâche dans la vérification des connaissances précédente et essayez de l'implémenter. Testez le bot sur un ami. Peut-il les tromper ? Pouvez-vous rendre votre bot plus "crédible" ? - -## [Quiz post-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/) - -## Revue et auto-apprentissage - -Dans les prochaines leçons, vous en apprendrez davantage sur l'analyse des sentiments. Recherchez cette technique intéressante dans des articles comme ceux-ci sur [KDNuggets](https://www.kdnuggets.com/tag/nlp) - -## Devoir - -[Faites parler un bot](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/2-Tasks/assignment.md b/translations/fr/6-NLP/2-Tasks/assignment.md deleted file mode 100644 index a9a544f1..00000000 --- a/translations/fr/6-NLP/2-Tasks/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Faites parler un bot - -## Instructions - -Au cours des dernières leçons, vous avez programmé un bot basique avec lequel discuter. Ce bot donne des réponses aléatoires jusqu'à ce que vous disiez 'au revoir'. Pouvez-vous rendre les réponses un peu moins aléatoires et déclencher des réponses si vous dites des choses spécifiques, comme 'pourquoi' ou 'comment' ? Réfléchissez un peu à la manière dont l'apprentissage automatique pourrait rendre ce type de travail moins manuel à mesure que vous développez votre bot. Vous pouvez utiliser les bibliothèques NLTK ou TextBlob pour faciliter vos tâches. - -## Critères - -| Critères | Exemplaire | Adéquat | Nécessite des améliorations | -| --------- | ---------------------------------------------- | ------------------------------------------------ | --------------------------------- | -| | Un nouveau fichier bot.py est présenté et documenté | Un nouveau fichier bot est présenté mais contient des bugs | Un fichier n'est pas présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/3-Translation-Sentiment/README.md b/translations/fr/6-NLP/3-Translation-Sentiment/README.md deleted file mode 100644 index b3f28a04..00000000 --- a/translations/fr/6-NLP/3-Translation-Sentiment/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# Traduction et analyse de sentiment avec ML - -Dans les leçons précédentes, vous avez appris à construire un bot de base en utilisant `TextBlob`, une bibliothèque qui intègre le ML en arrière-plan pour effectuer des tâches NLP de base telles que l'extraction de phrases nominales. Un autre défi important en linguistique computationnelle est la _traduction_ précise d'une phrase d'une langue parlée ou écrite à une autre. - -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) - -La traduction est un problème très difficile, aggravé par le fait qu'il existe des milliers de langues, chacune pouvant avoir des règles grammaticales très différentes. Une approche consiste à convertir les règles grammaticales formelles d'une langue, comme l'anglais, en une structure non dépendante de la langue, puis à les traduire en les convertissant à nouveau dans une autre langue. Cette approche signifie que vous suivriez les étapes suivantes : - -1. **Identification**. Identifier ou étiqueter les mots dans la langue d'entrée en noms, verbes, etc. -2. **Créer une traduction**. Produire une traduction directe de chaque mot dans le format de la langue cible. - -### Exemple de phrase, de l'anglais à l'irlandais - -En 'anglais', la phrase _I feel happy_ se compose de trois mots dans l'ordre : - -- **sujet** (I) -- **verbe** (feel) -- **adjectif** (happy) - -Cependant, dans la langue 'irlandaise', la même phrase a une structure grammaticale très différente - les émotions comme "*happy*" ou "*sad*" sont exprimées comme étant *sur* vous. - -La phrase anglaise `I feel happy` en irlandais serait `Tá athas orm`. Une traduction *littérale* serait `Happy is upon me`. - -Un locuteur irlandais traduisant en anglais dirait `I feel happy`, et non `Happy is upon me`, car il comprend le sens de la phrase, même si les mots et la structure de la phrase sont différents. - -L'ordre formel de la phrase en irlandais est : - -- **verbe** (Tá ou is) -- **adjectif** (athas, ou happy) -- **sujet** (orm, ou upon me) - -## Traduction - -Un programme de traduction naïf pourrait traduire uniquement les mots, en ignorant la structure de la phrase. - -✅ Si vous avez appris une deuxième (ou troisième ou plus) langue en tant qu'adulte, vous avez peut-être commencé par penser dans votre langue maternelle, traduisant un concept mot à mot dans votre tête vers la deuxième langue, puis exprimant votre traduction. C'est similaire à ce que font les programmes de traduction naïfs. Il est important de dépasser cette phase pour atteindre la fluidité ! - -La traduction naïve conduit à de mauvaises (et parfois hilarantes) mistraductions : `I feel happy` se traduit littéralement par `Mise bhraitheann athas` en irlandais. Cela signifie (littéralement) `me feel happy` et n'est pas une phrase valide en irlandais. Bien que l'anglais et l'irlandais soient des langues parlées sur deux îles voisines, ce sont des langues très différentes avec des structures grammaticales différentes. - -> Vous pouvez regarder quelques vidéos sur les traditions linguistiques irlandaises, comme [celle-ci](https://www.youtube.com/watch?v=mRIaLSdRMMs) - -### Approches de l'apprentissage automatique - -Jusqu'à présent, vous avez appris l'approche des règles formelles pour le traitement du langage naturel. Une autre approche consiste à ignorer le sens des mots et _à utiliser plutôt l'apprentissage automatique pour détecter des motifs_. Cela peut fonctionner dans la traduction si vous avez beaucoup de texte (un *corpus*) ou des textes (*corpora*) dans les langues d'origine et cible. - -Par exemple, considérez le cas de *Pride and Prejudice*, un roman anglais bien connu écrit par Jane Austen en 1813. Si vous consultez le livre en anglais et une traduction humaine du livre en *français*, vous pourriez détecter des phrases dans l'une qui sont _traduits de manière idiomatique_ dans l'autre. Vous le ferez dans un instant. - -Par exemple, lorsqu'une phrase anglaise telle que `I have no money` est traduite littéralement en français, elle pourrait devenir `Je n'ai pas de monnaie`. "Monnaie" est un faux ami français délicat, car 'money' et 'monnaie' ne sont pas synonymes. Une meilleure traduction qu'un humain pourrait faire serait `Je n'ai pas d'argent`, car elle transmet mieux le sens que vous n'avez pas d'argent (plutôt que 'monnaie de poche' qui est le sens de 'monnaie'). - -![monnaie](../../../../translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.fr.png) - -> Image par [Jen Looper](https://twitter.com/jenlooper) - -Si un modèle ML a suffisamment de traductions humaines pour construire un modèle, il peut améliorer l'exactitude des traductions en identifiant des motifs communs dans des textes qui ont été précédemment traduits par des locuteurs humains experts des deux langues. - -### Exercice - traduction - -Vous pouvez utiliser `TextBlob` pour traduire des phrases. Essayez la célèbre première ligne de **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` fait un assez bon travail de traduction : "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme !". - -On peut soutenir que la traduction de TextBlob est en fait beaucoup plus précise que la traduction française de 1932 du livre par V. Leconte et 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 égard, 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." - -Dans ce cas, la traduction informée par le ML fait un meilleur travail que le traducteur humain qui met inutilement des mots dans la bouche de l'auteur original pour 'clarté'. - -> Que se passe-t-il ici ? Et pourquoi TextBlob est-il si bon en traduction ? Eh bien, en arrière-plan, il utilise Google Translate, une IA sophistiquée capable d'analyser des millions de phrases pour prédire les meilleures chaînes pour la tâche à accomplir. Il n'y a rien de manuel ici et vous avez besoin d'une connexion Internet pour utiliser `blob.translate`. - -✅ Try some more sentences. Which is better, ML or human translation? In which cases? - -## Sentiment analysis - -Another area where machine learning can work very well is sentiment analysis. A non-ML approach to sentiment is to identify words and phrases which are 'positive' and 'negative'. Then, given a new piece of text, calculate the total value of the positive, negative and neutral words to identify the overall sentiment. - -This approach is easily tricked as you may have seen in the Marvin task - the sentence `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` est une phrase avec un sentiment sarcastique et négatif, mais l'algorithme simple détecte 'great', 'wonderful', 'glad' comme positifs et 'waste', 'lost' et 'dark' comme négatifs. Le sentiment global est influencé par ces mots contradictoires. - -✅ Arrêtez-vous une seconde et réfléchissez à la façon dont nous exprimons le sarcasme en tant que locuteurs humains. L'inflexion du ton joue un rôle important. Essayez de dire la phrase "Eh bien, ce film était génial" de différentes manières pour découvrir comment votre voix transmet le sens. - -### Approches ML - -L'approche ML consisterait à rassembler manuellement des corpus de textes négatifs et positifs - tweets, critiques de films, ou tout autre contenu où l'humain a donné une note *et* une opinion écrite. Ensuite, des techniques NLP peuvent être appliquées aux opinions et aux notes, afin que des motifs émergent (par exemple, les critiques de films positives tendent à avoir l'expression 'Oscar worthy' plus souvent que les critiques négatives, ou les critiques de restaurants positives disent 'gourmet' beaucoup plus que 'dégoûtant'). - -> ⚖️ **Exemple** : Si vous travailliez dans le bureau d'un politicien et qu'il y avait une nouvelle loi en cours de débat, les électeurs pourraient écrire au bureau avec des courriels soutenant ou contre la nouvelle loi en question. Supposons que vous soyez chargé de lire les courriels et de les trier en 2 piles, *pour* et *contre*. S'il y avait beaucoup de courriels, vous pourriez être submergé en essayant de tous les lire. Ne serait-il pas agréable qu'un bot puisse tous les lire pour vous, les comprendre et vous dire dans quelle pile chaque courriel appartient ? -> -> Une façon d'y parvenir est d'utiliser l'apprentissage automatique. Vous entraîneriez le modèle avec une portion des courriels *contre* et une portion des courriels *pour*. Le modèle tendrait à associer des phrases et des mots avec le côté contre et le côté pour, *mais il ne comprendrait aucun des contenus*, seulement que certains mots et motifs étaient plus susceptibles d'apparaître dans un courriel *contre* ou *pour*. Vous pourriez le tester avec des courriels que vous n'aviez pas utilisés pour entraîner le modèle, et voir s'il parvenait à la même conclusion que vous. Ensuite, une fois que vous étiez satisfait de l'exactitude du modèle, vous pourriez traiter des courriels futurs sans avoir à lire chacun d'eux. - -✅ Ce processus ressemble-t-il à des processus que vous avez utilisés dans des leçons précédentes ? - -## Exercice - phrases sentimentales - -Le sentiment est mesuré avec une *polarité* de -1 à 1, ce qui signifie que -1 est le sentiment le plus négatif, et 1 est le plus positif. Le sentiment est également mesuré avec un score de 0 à 1 pour l'objectivité (0) et la subjectivité (1). - -Jetez un autre coup d'œil à *Pride and Prejudice* de Jane Austen. Le texte est disponible ici sur [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). L'exemple ci-dessous montre un court programme qui analyse le sentiment des premières et dernières phrases du livre et affiche sa polarité de sentiment et son score d'objectivité/subjectivité. - -Vous devriez utiliser la bibliothèque `TextBlob` (décrite ci-dessus) pour déterminer `sentiment` (vous n'avez pas à écrire votre propre calculateur de sentiment) dans la tâche suivante. - -```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)) -``` - -Vous voyez la sortie suivante : - -```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) -``` - -## Défi - vérifier la polarité du sentiment - -Votre tâche est de déterminer, en utilisant la polarité du sentiment, si *Pride and Prejudice* a plus de phrases absolument positives que de phrases absolument négatives. Pour cette tâche, vous pouvez supposer qu'un score de polarité de 1 ou -1 est absolument positif ou négatif respectivement. - -**Étapes :** - -1. Téléchargez une [copie de Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) depuis Project Gutenberg au format .txt. Supprimez les métadonnées au début et à la fin du fichier, ne laissant que le texte original. -2. Ouvrez le fichier en Python et extrayez le contenu sous forme de chaîne. -3. Créez un TextBlob en utilisant la chaîne du livre. -4. Analysez chaque phrase du livre dans une boucle. - 1. Si la polarité est 1 ou -1, stockez la phrase dans un tableau ou une liste de messages positifs ou négatifs. -5. À la fin, imprimez toutes les phrases positives et négatives (séparément) et le nombre de chacune. - -Voici une [solution d'exemple](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). - -✅ Vérification des connaissances - -1. Le sentiment est basé sur les mots utilisés dans la phrase, mais le code *comprend-il* les mots ? -2. Pensez-vous que la polarité du sentiment est précise, ou en d'autres termes, êtes-vous *d'accord* avec les scores ? - 1. En particulier, êtes-vous d'accord ou pas d'accord avec la polarité **positive** absolue des phrases suivantes ? - * “Quel excellent père vous avez, les filles !” dit-elle, lorsque la porte était fermée. - * “Votre examen de M. Darcy est terminé, je présume,” dit Miss Bingley ; “et priez, quel est le résultat ?” “Je suis parfaitement convaincue par cela que M. Darcy n'a aucun défaut.” - * Comme ces choses se produisent merveilleusement ! - * J'ai la plus grande aversion au monde pour ce genre de chose. - * Charlotte est une excellente gestionnaire, je n'en doute pas. - * “C'est en effet délicieux ! - * Je suis si heureux ! - * Votre idée des poneys est délicieuse. - 2. Les 3 phrases suivantes ont été notées avec un sentiment positif absolu, mais à la lecture attentive, elles ne sont pas des phrases positives. Pourquoi l'analyse de sentiment a-t-elle pensé qu'elles étaient des phrases positives ? - * Heureux je serai, lorsque son séjour à Netherfield sera terminé !” “Je souhaite pouvoir dire quoi que ce soit pour vous réconforter,” répondit Elizabeth ; “mais c'est totalement hors de mon pouvoir. - * Si je pouvais vous voir aussi heureux ! - * Notre détresse, ma chère Lizzy, est très grande. - 3. Êtes-vous d'accord ou pas d'accord avec la polarité **négative** absolue des phrases suivantes ? - - Tout le monde est dégoûté par son orgueil. - - “J'aimerais savoir comment il se comporte parmi les étrangers.” “Vous allez entendre alors - mais préparez-vous à quelque chose de très terrible. - - La pause était pour les sentiments d'Elizabeth terrible. - - Ce serait terrible ! - -✅ Tout aficionado de Jane Austen comprendra qu'elle utilise souvent ses livres pour critiquer les aspects les plus ridicules de la société anglaise de la Régence. Elizabeth Bennett, le personnage principal de *Pride and Prejudice*, est une observatrice sociale perspicace (comme l'auteure) et son langage est souvent très nuancé. Même M. Darcy (l'intérêt amoureux de l'histoire) note l'utilisation ludique et taquine du langage par Elizabeth : "J'ai eu le plaisir de votre connaissance assez longtemps pour savoir que vous trouvez un grand plaisir à professant occasionnellement des opinions qui, en fait, ne sont pas les vôtres." - ---- - -## 🚀Défi - -Pouvez-vous rendre Marvin encore meilleur en extrayant d'autres caractéristiques de l'entrée de l'utilisateur ? - -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) - -## Révision & Auto-apprentissage - -Il existe de nombreuses façons d'extraire le sentiment d'un texte. Pensez aux applications commerciales qui pourraient utiliser cette technique. Réfléchissez à la façon dont cela peut mal tourner. Lisez davantage sur des systèmes sophistiqués prêts pour l'entreprise qui analysent le sentiment, tels que [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). Testez certaines des phrases de *Pride and Prejudice* ci-dessus et voyez si cela peut détecter les nuances. - -## Devoir - -[Licence poétique](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/3-Translation-Sentiment/assignment.md b/translations/fr/6-NLP/3-Translation-Sentiment/assignment.md deleted file mode 100644 index 588f6996..00000000 --- a/translations/fr/6-NLP/3-Translation-Sentiment/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Licence poétique - -## Instructions - -Dans [ce carnet](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency), vous pouvez trouver plus de 500 poèmes d'Emily Dickinson précédemment analysés pour leur sentiment à l'aide de l'analyse de texte Azure. En utilisant cet ensemble de données, analysez-le en utilisant les techniques décrites dans la leçon. Le sentiment suggéré d'un poème correspond-il à la décision plus sophistiquée du service Azure ? Pourquoi ou pourquoi pas, selon vous ? Y a-t-il quelque chose qui vous surprend ? - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| -------- | ------------------------------------------------------------------------ | ----------------------------------------------------- | ------------------------ | -| | Un carnet est présenté avec une analyse solide de l'échantillon d'un auteur | Le carnet est incomplet ou ne réalise pas d'analyse | Aucun carnet n'est présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/fr/6-NLP/3-Translation-Sentiment/solution/Julia/README.md deleted file mode 100644 index 59937b8c..00000000 --- a/translations/fr/6-NLP/3-Translation-Sentiment/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/fr/6-NLP/3-Translation-Sentiment/solution/R/README.md deleted file mode 100644 index 8aff7c17..00000000 --- a/translations/fr/6-NLP/3-Translation-Sentiment/solution/R/README.md +++ /dev/null @@ -1,6 +0,0 @@ -ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'atteindre une précision, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/4-Hotel-Reviews-1/README.md b/translations/fr/6-NLP/4-Hotel-Reviews-1/README.md deleted file mode 100644 index 10dd35c2..00000000 --- a/translations/fr/6-NLP/4-Hotel-Reviews-1/README.md +++ /dev/null @@ -1,296 +0,0 @@ -# Analyse de sentiment avec les avis d'hôtels - traitement des données - -Dans cette section, vous utiliserez les techniques des leçons précédentes pour effectuer une analyse exploratoire des données sur un grand ensemble de données. Une fois que vous aurez une bonne compréhension de l'utilité des différentes colonnes, vous apprendrez : - -- comment supprimer les colonnes inutiles -- comment calculer de nouvelles données basées sur les colonnes existantes -- comment sauvegarder l'ensemble de données résultant pour l'utiliser dans le défi final - -## [Quiz pré-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/) - -### Introduction - -Jusqu'à présent, vous avez appris que les données textuelles sont très différentes des types de données numériques. Si le texte a été écrit ou prononcé par un humain, il peut être analysé pour trouver des motifs et des fréquences, des sentiments et des significations. Cette leçon vous plonge dans un ensemble de données réel avec un véritable défi : **[515K Avis d'Hôtels en Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)** et comprend une [licence CC0 : Domaine public](https://creativecommons.org/publicdomain/zero/1.0/). Il a été extrait de Booking.com à partir de sources publiques. Le créateur de l'ensemble de données est Jiashen Liu. - -### Préparation - -Vous aurez besoin de : - -* La capacité d'exécuter des notebooks .ipynb en utilisant Python 3 -* pandas -* NLTK, [que vous devez installer localement](https://www.nltk.org/install.html) -* L'ensemble de données qui est disponible sur Kaggle [515K Avis d'Hôtels en Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Il fait environ 230 Mo une fois décompressé. Téléchargez-le dans le dossier racine `/data` associé à ces leçons de NLP. - -## Analyse exploratoire des données - -Ce défi suppose que vous construisez un bot de recommandation d'hôtels utilisant l'analyse de sentiment et les scores des avis des clients. L'ensemble de données que vous allez utiliser comprend des avis sur 1493 hôtels différents dans 6 villes. - -En utilisant Python, un ensemble de données d'avis d'hôtels et l'analyse de sentiment de NLTK, vous pourriez découvrir : - -* Quels sont les mots et phrases les plus fréquemment utilisés dans les avis ? -* Les *tags* officiels décrivant un hôtel sont-ils corrélés avec les scores des avis (par exemple, les avis plus négatifs pour un hôtel particulier sont-ils pour *Famille avec de jeunes enfants* plutôt que pour *Voyageur solo*, ce qui indiquerait peut-être qu'il est mieux pour les *Voyageurs solo* ?) -* Les scores de sentiment de NLTK 's'accordent-ils' avec le score numérique de l'examinateur de l'hôtel ? - -#### Ensemble de données - -Explorons l'ensemble de données que vous avez téléchargé et sauvegardé localement. Ouvrez le fichier dans un éditeur comme VS Code ou même Excel. - -Les en-têtes dans l'ensemble de données sont les suivants : - -*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* - -Voici comment ils sont regroupés d'une manière qui pourrait être plus facile à examiner : -##### Colonnes de l'hôtel - -* `Hotel_Name`, `Hotel_Address`, `lat` (latitude), `lng` (longitude) - * En utilisant *lat* et *lng*, vous pourriez tracer une carte avec Python montrant les emplacements des hôtels (peut-être codée par couleur pour les avis négatifs et positifs) - * Hotel_Address n'est pas évidemment utile pour nous, et nous allons probablement le remplacer par un pays pour un tri et une recherche plus faciles - -**Colonnes de méta-avis sur l'hôtel** - -* `Average_Score` - * Selon le créateur de l'ensemble de données, cette colonne est le *Score moyen de l'hôtel, calculé sur la base du dernier commentaire dans l'année écoulée*. Cela semble être une manière inhabituelle de calculer le score, mais c'est les données extraites donc nous pouvons le prendre pour ce qu'il est pour l'instant. - - ✅ En vous basant sur les autres colonnes de ces données, pouvez-vous penser à une autre façon de calculer le score moyen ? - -* `Total_Number_of_Reviews` - * Le nombre total d'avis que cet hôtel a reçus - il n'est pas clair (sans écrire un peu de code) si cela fait référence aux avis dans l'ensemble de données. -* `Additional_Number_of_Scoring` - * Cela signifie qu'un score d'avis a été donné mais qu'aucun avis positif ou négatif n'a été écrit par l'examinateur - -**Colonnes d'avis** - -- `Reviewer_Score` - - Il s'agit d'une valeur numérique avec au maximum 1 décimale entre les valeurs minimales et maximales 2.5 et 10 - - Il n'est pas expliqué pourquoi 2.5 est le score le plus bas possible -- `Negative_Review` - - Si un examinateur n'a rien écrit, ce champ aura "**No Negative**" - - Notez qu'un examinateur peut écrire un avis positif dans la colonne Negative review (par exemple, "il n'y a rien de mauvais dans cet hôtel") -- `Review_Total_Negative_Word_Counts` - - Un nombre de mots négatifs plus élevé indique un score plus bas (sans vérifier la sentimentalité) -- `Positive_Review` - - Si un examinateur n'a rien écrit, ce champ aura "**No Positive**" - - Notez qu'un examinateur peut écrire un avis négatif dans la colonne Positive review (par exemple, "il n'y a rien de bon dans cet hôtel") -- `Review_Total_Positive_Word_Counts` - - Un nombre de mots positifs plus élevé indique un score plus élevé (sans vérifier la sentimentalité) -- `Review_Date` et `days_since_review` - - Une mesure de fraîcheur ou de stagnation pourrait être appliquée à un avis (les avis plus anciens pourraient ne pas être aussi précis que les plus récents en raison de changements de gestion d'hôtel, de rénovations effectuées, ou d'une piscine ajoutée, etc.) -- `Tags` - - Ce sont de courts descripteurs qu'un examinateur peut sélectionner pour décrire le type de client qu'il était (par exemple, solo ou famille), le type de chambre qu'il avait, la durée du séjour et comment l'avis a été soumis. - - Malheureusement, l'utilisation de ces tags pose problème, consultez la section ci-dessous qui discute de leur utilité - -**Colonnes d'examinateur** - -- `Total_Number_of_Reviews_Reviewer_Has_Given` - - Cela pourrait être un facteur dans un modèle de recommandation, par exemple, si vous pouviez déterminer que les examinateurs plus prolifiques avec des centaines d'avis étaient plus susceptibles d'être négatifs plutôt que positifs. Cependant, l'examinateur d'un avis particulier n'est pas identifié par un code unique, et ne peut donc pas être lié à un ensemble d'avis. Il y a 30 examinateurs avec 100 avis ou plus, mais il est difficile de voir comment cela peut aider le modèle de recommandation. -- `Reviewer_Nationality` - - Certaines personnes pourraient penser que certaines nationalités sont plus susceptibles de donner un avis positif ou négatif en raison d'une inclination nationale. Faites attention à ne pas intégrer de telles vues anecdotiques dans vos modèles. Ce sont des stéréotypes nationaux (et parfois raciaux), et chaque examinateur était un individu qui a écrit un avis basé sur son expérience. Cela peut avoir été filtré à travers de nombreuses lentilles telles que ses précédents séjours à l'hôtel, la distance parcourue, et son tempérament personnel. Penser que leur nationalité était la raison d'un score d'avis est difficile à justifier. - -##### Exemples - -| Score Moyen | Nombre Total d'Avis | Score de l'Examinateur | Avis Négatif
                                                  | Avis Positif | Tags | -| ------------ | --------------------- | ---------------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------- | ----------------------------------------------------------------------------------------- | -| 7.8 | 1945 | 2.5 | Actuellement, ce n'est pas un hôtel mais un chantier de construction. J'ai été terrorisé dès le matin et toute la journée par un bruit de construction inacceptable tout en essayant de me reposer après un long voyage et de travailler dans la chambre. Des personnes travaillaient toute la journée avec des perceuses dans les chambres adjacentes. J'ai demandé un changement de chambre, mais aucune chambre silencieuse n'était disponible. Pour aggraver les choses, j'ai été surfacturé. J'ai quitté l'hôtel le soir puisque je devais partir très tôt pour un vol et j'ai reçu une facture appropriée. Un jour plus tard, l'hôtel a effectué un autre prélèvement sans mon consentement, supérieur au prix réservé. C'est un endroit terrible. Ne vous punissez pas en réservant ici. | Rien. Endroit terrible. Restez à l'écart. | Voyage d'affaires Couple, Chambre Double Standard, Séjour de 2 nuits | - -Comme vous pouvez le voir, ce client n'a pas eu un séjour heureux dans cet hôtel. L'hôtel a un bon score moyen de 7.8 et 1945 avis, mais cet examinateur lui a donné 2.5 et a écrit 115 mots sur la négativité de son séjour. S'il n'avait rien écrit du tout dans la colonne Positive_Review, vous pourriez supposer qu'il n'y avait rien de positif, mais hélas, il a écrit 7 mots d'avertissement. Si nous ne comptions que les mots au lieu de la signification ou du sentiment des mots, nous pourrions avoir une vision biaisée de l'intention de l'examinateur. Étrangement, leur score de 2.5 est déroutant, car si ce séjour à l'hôtel était si mauvais, pourquoi lui donner des points du tout ? En examinant de près l'ensemble de données, vous verrez que le score le plus bas possible est 2.5, pas 0. Le score le plus élevé possible est 10. - -##### Tags - -Comme mentionné ci-dessus, à première vue, l'idée d'utiliser `Tags` pour catégoriser les données a du sens. Malheureusement, ces tags ne sont pas standardisés, ce qui signifie que dans un hôtel donné, les options pourraient être *Chambre simple*, *Chambre twin*, et *Chambre double*, mais dans l'hôtel suivant, elles sont *Chambre Simple Deluxe*, *Chambre Reine Classique*, et *Chambre Roi Exécutive*. Ces options pourraient être les mêmes, mais il y a tellement de variations que le choix devient : - -1. Essayer de changer tous les termes en une seule norme, ce qui est très difficile, car il n'est pas clair quel serait le chemin de conversion dans chaque cas (par exemple, *Chambre simple classique* correspond à *Chambre simple* mais *Chambre Reine Supérieure avec Jardin Cour ou Vue sur la Ville* est beaucoup plus difficile à mapper) - -2. Nous pouvons adopter une approche NLP et mesurer la fréquence de certains termes comme *Solo*, *Voyageur d'affaires*, ou *Famille avec de jeunes enfants* tels qu'ils s'appliquent à chaque hôtel, et en tenir compte dans la recommandation - -Les tags sont généralement (mais pas toujours) un champ unique contenant une liste de 5 à 6 valeurs séparées par des virgules correspondant à *Type de voyage*, *Type de clients*, *Type de chambre*, *Nombre de nuits*, et *Type de dispositif sur lequel l'avis a été soumis*. Cependant, comme certains examinateurs ne remplissent pas chaque champ (ils peuvent en laisser un vide), les valeurs ne sont pas toujours dans le même ordre. - -Prenons un exemple, le champ *Type de groupe*. Il y a 1025 possibilités uniques dans ce champ de la colonne `Tags`, et malheureusement, seules certaines d'entre elles font référence à un groupe (certaines sont le type de chambre, etc.). Si vous filtrez uniquement celles qui mentionnent la famille, les résultats contiennent de nombreux types de résultats *Chambre familiale*. Si vous incluez le terme *avec*, c'est-à-dire compter les valeurs *Famille avec*, les résultats sont meilleurs, avec plus de 80 000 des 515 000 résultats contenant la phrase "Famille avec de jeunes enfants" ou "Famille avec des enfants plus âgés". - -Cela signifie que la colonne des tags n'est pas complètement inutile pour nous, mais il faudra du travail pour la rendre utile. - -##### Score moyen de l'hôtel - -Il y a un certain nombre d'étrangetés ou de divergences avec l'ensemble de données que je ne peux pas comprendre, mais qui sont illustrées ici afin que vous en soyez conscient lors de la construction de vos modèles. Si vous le comprenez, merci de nous le faire savoir dans la section discussion ! - -L'ensemble de données a les colonnes suivantes concernant le score moyen et le nombre d'avis : - -1. Hotel_Name -2. Additional_Number_of_Scoring -3. Average_Score -4. Total_Number_of_Reviews -5. Reviewer_Score - -L'hôtel avec le plus d'avis dans cet ensemble de données est *Britannia International Hotel Canary Wharf* avec 4789 avis sur 515 000. Mais si nous regardons la valeur `Total_Number_of_Reviews` pour cet hôtel, elle est de 9086. Vous pourriez supposer qu'il y a beaucoup plus de scores sans avis, donc peut-être devrions-nous ajouter la valeur de la colonne `Additional_Number_of_Scoring`. Cette valeur est de 2682, et l'ajouter à 4789 nous donne 7471, ce qui est encore 1615 de moins que le `Total_Number_of_Reviews`. - -Si vous prenez les colonnes `Average_Score`, vous pourriez supposer qu'il s'agit de la moyenne des avis dans l'ensemble de données, mais la description de Kaggle est "*Score moyen de l'hôtel, calculé sur la base du dernier commentaire dans l'année écoulée*". Cela ne semble pas très utile, mais nous pouvons calculer notre propre moyenne basée sur les scores des avis dans l'ensemble de données. En utilisant le même hôtel comme exemple, le score moyen de l'hôtel est donné comme 7.1 mais le score calculé (score moyen des examinateurs *dans* l'ensemble de données) est de 6.8. C'est proche, mais pas la même valeur, et nous ne pouvons que deviner que les scores donnés dans les avis `Additional_Number_of_Scoring` ont augmenté la moyenne à 7.1. Malheureusement, sans moyen de tester ou de prouver cette assertion, il est difficile d'utiliser ou de faire confiance à `Average_Score`, `Additional_Number_of_Scoring` et `Total_Number_of_Reviews` lorsqu'ils sont basés sur, ou se réfèrent à, des données que nous n'avons pas. - -Pour compliquer encore les choses, l'hôtel avec le deuxième plus grand nombre d'avis a un score moyen calculé de 8.12 et l'ensemble de données `Average_Score` est de 8.1. Ce score correct est-il une coïncidence ou le premier hôtel est-il une anomalie ? - -Dans l'éventualité où ces hôtels pourraient être des cas extrêmes, et que peut-être la plupart des valeurs s'additionnent (mais certaines ne le font pas pour une raison quelconque), nous allons écrire un court programme ensuite pour explorer les valeurs dans l'ensemble de données et déterminer l'utilisation correcte (ou non-utilisation) des valeurs. - -> 🚨 Une note de prudence -> -> Lorsque vous travaillez avec cet ensemble de données, vous écrirez du code qui calcule quelque chose à partir du texte sans avoir à lire ou analyser le texte vous-même. C'est l'essence du NLP, interpréter la signification ou le sentiment sans qu'un humain le fasse. Cependant, il est possible que vous lisiez certains des avis négatifs. Je vous conseillerais de ne pas le faire, car vous n'avez pas besoin de. Certains d'entre eux sont ridicules ou des avis négatifs sans pertinence, comme "Le temps n'était pas super", quelque chose qui échappe au contrôle de l'hôtel, ou en effet, de quiconque. Mais il y a aussi un côté sombre à certains avis. Parfois, les avis négatifs sont racistes, sexistes ou âgistes. C'est malheureux mais à prévoir dans un ensemble de données extrait d'un site web public. Certains examinateurs laissent des avis que vous trouveriez de mauvais goût, inconfortables ou troublants. Il vaut mieux laisser le code mesurer le sentiment plutôt que de les lire vous-même et d'être contrarié. Cela dit, c'est une minorité qui écrit de telles choses, mais elles existent néanmoins. - -## Exercice - Exploration des données -### Charger les données - -C'est assez d'examiner les données visuellement, maintenant vous allez écrire un peu de code et obtenir des réponses ! Cette section utilise la bibliothèque pandas. Votre toute première tâche est de vous assurer que vous pouvez charger et lire les données CSV. La bibliothèque pandas a un chargeur CSV rapide, et le résultat est placé dans un dataframe, comme dans les leçons précédentes. Le CSV que nous chargeons a plus d'un demi-million de lignes, mais seulement 17 colonnes. Pandas vous offre de nombreuses façons puissantes d'interagir avec un dataframe, y compris la capacité d'effectuer des opérations sur chaque ligne. - -À partir de maintenant dans cette leçon, il y aura des extraits de code et quelques explications du code ainsi que des discussions sur ce que les résultats signifient. Utilisez le _notebook.ipynb_ inclus pour votre code. - -Commençons par charger le fichier de données que vous allez utiliser : - -```python -# Load the hotel reviews from CSV -import pandas as pd -import time -# importing time so the start and end time can be used to calculate file loading time -print("Loading data file now, this could take a while depending on file size") -start = time.time() -# df is 'DataFrame' - make sure you downloaded the file to the data folder -df = pd.read_csv('../../data/Hotel_Reviews.csv') -end = time.time() -print("Loading took " + str(round(end - start, 2)) + " seconds") -``` - -Maintenant que les données sont chargées, nous pouvons effectuer certaines opérations dessus. Gardez ce code en haut de votre programme pour la prochaine partie. - -## Explorer les données - -Dans ce cas, les données sont déjà *propres*, cela signifie qu'elles sont prêtes à être utilisées, et n'ont pas de caractères dans d'autres langues qui pourraient perturber les algorithmes s'attendant uniquement à des caractères anglais. - -✅ Vous pourriez avoir à travailler avec des données qui nécessitaient un traitement initial pour les formater avant d'appliquer des techniques NLP, mais pas cette fois. Si vous deviez le faire, comment géreriez-vous les caractères non anglais ? - -Prenez un moment pour vous assurer qu'une fois les données chargées, vous pouvez les -les lignes ont des valeurs de colonne `Positive_Review` de "Aucun Positif" 9. Calculez et imprimez combien de lignes ont des valeurs de colonne `Positive_Review` de "Aucun Positif" **et** des valeurs `Negative_Review` de "Aucun Négatif" ### Réponses au code 1. Imprimez la *forme* du cadre de données que vous venez de charger (la forme est le nombre de lignes et de colonnes) ```python - print("The shape of the data (rows, cols) is " + str(df.shape)) - > The shape of the data (rows, cols) is (515738, 17) - ``` 2. Calculez le nombre de fréquences pour les nationalités des examinateurs : 1. Combien de valeurs distinctes y a-t-il pour la colonne `Reviewer_Nationality` et quelles sont-elles ? 2. Quelle nationalité d'examinateur est la plus courante dans l'ensemble de données (imprimez le pays et le nombre de critiques) ? ```python - # value_counts() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality - nationality_freq = df["Reviewer_Nationality"].value_counts() - print("There are " + str(nationality_freq.size) + " different nationalities") - # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data - print(nationality_freq) - - There are 227 different nationalities - United Kingdom 245246 - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - ... - Comoros 1 - Palau 1 - Northern Mariana Islands 1 - Cape Verde 1 - Guinea 1 - Name: Reviewer_Nationality, Length: 227, dtype: int64 - ``` 3. Quelles sont les 10 nationalités les plus fréquemment trouvées, et leur nombre de fréquences ? ```python - print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") - # Notice there is a leading space on the values, strip() removes that for printing - # What is the top 10 most common nationalities and their frequencies? - print("The next 10 highest frequency reviewer nationalities are:") - print(nationality_freq[1:11].to_string()) - - The highest frequency reviewer nationality is United Kingdom with 245246 reviews. - The next 10 highest frequency reviewer nationalities are: - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - Saudi Arabia 8951 - Netherlands 8772 - Switzerland 8678 - Germany 7941 - Canada 7894 - France 7296 - ``` 3. Quel était l'hôtel le plus fréquemment évalué pour chacune des 10 nationalités d'examinateurs les plus représentées ? ```python - # What was the most frequently reviewed hotel for the top 10 nationalities - # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) - for nat in nationality_freq[:10].index: - # First, extract all the rows that match the criteria into a new dataframe - nat_df = df[df["Reviewer_Nationality"] == nat] - # Now get the hotel freq - freq = nat_df["Hotel_Name"].value_counts() - print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") - - The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. - The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. - The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. - The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. - The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. - The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. - The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. - The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. - The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. - The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. - ``` 4. Combien de critiques y a-t-il par hôtel (nombre de fréquences de l'hôtel) dans l'ensemble de données ? ```python - # First create a new dataframe based on the old one, removing the uneeded columns - hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) - - # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found - hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') - - # Get rid of all the duplicated rows - hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) - display(hotel_freq_df) - ``` | Nom_Hôtel | Nombre_Total_de_Critiques | Total_Critiques_Trouvées | | :----------------------------------------: | :---------------------: | :-----------------: | | 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 | | Hôtel Wagner | 135 | 10 | | Hôtel Gallitzinberg | 173 | 8 | Vous remarquerez peut-être que les résultats *comptés dans l'ensemble de données* ne correspondent pas à la valeur dans `Total_Number_of_Reviews`. Il n'est pas clair si cette valeur dans l'ensemble de données représentait le nombre total de critiques que l'hôtel avait, mais que toutes n'ont pas été extraites, ou un autre calcul. `Total_Number_of_Reviews` n'est pas utilisé dans le modèle en raison de cette incertitude. 5. Bien qu'il y ait une colonne `Average_Score` pour chaque hôtel dans l'ensemble de données, vous pouvez également calculer un score moyen (obtenant la moyenne de tous les scores des examinateurs dans l'ensemble de données pour chaque hôtel). Ajoutez une nouvelle colonne à votre cadre de données avec l'en-tête de colonne `Calc_Average_Score` qui contient cette moyenne calculée. Imprimez les colonnes `Hotel_Name`, `Average_Score`, et `Calc_Average_Score`. ```python - # define a function that takes a row and performs some calculation with it - def get_difference_review_avg(row): - return row["Average_Score"] - row["Calc_Average_Score"] - - # 'mean' is mathematical word for 'average' - df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - - # Add a new column with the difference between the two average scores - df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) - - # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) - review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) - - # Sort the dataframe to find the lowest and highest average score difference - review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) - - display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) - ``` Vous vous demandez peut-être également pourquoi la valeur `Average_Score` est parfois différente du score moyen calculé. Comme nous ne pouvons pas savoir pourquoi certaines des valeurs correspondent, mais d'autres ont une différence, il est plus sûr dans ce cas d'utiliser les scores de critique que nous avons pour calculer la moyenne nous-mêmes. Cela dit, les différences sont généralement très petites, voici les hôtels avec la plus grande déviation par rapport à la moyenne de l'ensemble de données et à la moyenne calculée : | Différence_Score_Moyen | Score_Moyen | Calc_Average_Score | Nom_Hôtel | | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | | -0.8 | 7.7 | 8.5 | Best Western Hotel Astoria | | -0.7 | 8.8 | 9.5 | Hôtel 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 Vendôme Hôtel | | -0.5 | 7.0 | 7.5 | Hôtel Royal Élysé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 | Avec seulement 1 hôtel ayant une différence de score supérieure à 1, cela signifie que nous pouvons probablement ignorer la différence et utiliser le score moyen calculé. 6. Calculez et imprimez combien de lignes ont des valeurs de colonne `Negative_Review` de "Aucun Négatif" 7. Calculez et imprimez combien de lignes ont des valeurs de colonne `Positive_Review` de "Aucun Positif" 8. Calculez et imprimez combien de lignes ont des valeurs de colonne `Positive_Review` de "Aucun Positif" **et** des valeurs `Negative_Review` de "Aucun Négatif" ```python - # with lambdas: - start = time.time() - no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) - print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) - - no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) - - both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) - end = time.time() - print("Lambdas took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Lambdas took 9.64 seconds - ``` ## Une autre façon Une autre façon de compter les éléments sans Lambdas, et d'utiliser sum pour compter les lignes : ```python - # without lambdas (using a mixture of notations to show you can use both) - start = time.time() - no_negative_reviews = sum(df.Negative_Review == "No Negative") - print("Number of No Negative reviews: " + str(no_negative_reviews)) - - no_positive_reviews = sum(df["Positive_Review"] == "No Positive") - print("Number of No Positive reviews: " + str(no_positive_reviews)) - - both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) - print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) - - end = time.time() - print("Sum took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Sum took 0.19 seconds - ``` Vous avez peut-être remarqué qu'il y a 127 lignes qui ont à la fois des valeurs "Aucun Négatif" et "Aucun Positif" pour les colonnes `Negative_Review` et `Positive_Review` respectivement. Cela signifie que l'examinateur a donné à l'hôtel un score numérique, mais a refusé d'écrire soit une critique positive, soit une critique négative. Heureusement, c'est un petit nombre de lignes (127 sur 515738, ou 0,02 %), donc cela ne faussera probablement pas notre modèle ou nos résultats dans une direction particulière, mais vous ne vous attendiez peut-être pas à ce qu'un ensemble de données de critiques ait des lignes sans critiques, donc il vaut la peine d'explorer les données pour découvrir des lignes comme celle-ci. Maintenant que vous avez exploré l'ensemble de données, dans la prochaine leçon, vous filtrerez les données et ajouterez une analyse de sentiment. --- ## 🚀Défi Cette leçon démontre, comme nous l'avons vu dans les leçons précédentes, à quel point il est crucial de comprendre vos données et ses caprices avant d'effectuer des opérations dessus. Les données textuelles, en particulier, nécessitent un examen attentif. Fouillez à travers divers ensembles de données riches en texte et voyez si vous pouvez découvrir des domaines qui pourraient introduire des biais ou des sentiments faussés dans un modèle. ## [Quiz post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/) ## Révision & Auto-apprentissage Suivez [ce parcours d'apprentissage sur le NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) pour découvrir des outils à essayer lors de la construction de modèles lourds en discours et en texte. ## Devoir [NLTK](assignment.md) Veuillez écrire la sortie de gauche à droite. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/fr/6-NLP/4-Hotel-Reviews-1/assignment.md deleted file mode 100644 index e31ec9c4..00000000 --- a/translations/fr/6-NLP/4-Hotel-Reviews-1/assignment.md +++ /dev/null @@ -1,8 +0,0 @@ -# NLTK - -## Instructions - -NLTK est une bibliothèque bien connue pour une utilisation en linguistique computationnelle et en PNL. Profitez de cette occasion pour parcourir le '[livre NLTK](https://www.nltk.org/book/)' et essayer ses exercices. Dans cette tâche non notée, vous aurez l'occasion de mieux connaître cette bibliothèque. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/fr/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md deleted file mode 100644 index bdf2b268..00000000 --- a/translations/fr/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/fr/6-NLP/4-Hotel-Reviews-1/solution/R/README.md deleted file mode 100644 index 0e494528..00000000 --- a/translations/fr/6-NLP/4-Hotel-Reviews-1/solution/R/README.md +++ /dev/null @@ -1,6 +0,0 @@ -ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/5-Hotel-Reviews-2/README.md b/translations/fr/6-NLP/5-Hotel-Reviews-2/README.md deleted file mode 100644 index 929e417d..00000000 --- a/translations/fr/6-NLP/5-Hotel-Reviews-2/README.md +++ /dev/null @@ -1,377 +0,0 @@ -# Analyse de sentiment avec les avis d'hôtels - -Maintenant que vous avez exploré le jeu de données en détail, il est temps de filtrer les colonnes et d'utiliser des techniques de NLP sur le jeu de données pour obtenir de nouvelles informations sur les hôtels. -## [Quiz pré-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/) - -### Opérations de filtrage et d'analyse de sentiment - -Comme vous l'avez probablement remarqué, le jeu de données présente quelques problèmes. Certaines colonnes sont remplies d'informations inutiles, d'autres semblent incorrectes. Si elles sont correctes, il n'est pas clair comment elles ont été calculées, et les réponses ne peuvent pas être vérifiées indépendamment par vos propres calculs. - -## Exercice : un peu plus de traitement des données - -Nettoyez les données un peu plus. Ajoutez des colonnes qui seront utiles plus tard, modifiez les valeurs dans d'autres colonnes et supprimez certaines colonnes complètement. - -1. Traitement initial des colonnes - - 1. Supprimez `lat` et `lng` - - 2. Remplacez les valeurs `Hotel_Address` par les valeurs suivantes (si l'adresse contient à la fois la ville et le pays, changez-la simplement en la ville et le pays). - - Voici les seules villes et pays dans le jeu de données : - - Amsterdam, Pays-Bas - - Barcelone, Espagne - - Londres, Royaume-Uni - - Milan, Italie - - Paris, France - - Vienne, Autriche - - ```python - def replace_address(row): - if "Netherlands" in row["Hotel_Address"]: - return "Amsterdam, Netherlands" - elif "Barcelona" in row["Hotel_Address"]: - return "Barcelona, Spain" - elif "United Kingdom" in row["Hotel_Address"]: - return "London, United Kingdom" - elif "Milan" in row["Hotel_Address"]: - return "Milan, Italy" - elif "France" in row["Hotel_Address"]: - return "Paris, France" - elif "Vienna" in row["Hotel_Address"]: - return "Vienna, Austria" - - # Replace all the addresses with a shortened, more useful form - df["Hotel_Address"] = df.apply(replace_address, axis = 1) - # The sum of the value_counts() should add up to the total number of reviews - print(df["Hotel_Address"].value_counts()) - ``` - - Maintenant, vous pouvez interroger les données au niveau du pays : - - ```python - display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) - ``` - - | Hotel_Address | Hotel_Name | - | :--------------------- | :--------: | - | Amsterdam, Pays-Bas | 105 | - | Barcelone, Espagne | 211 | - | Londres, Royaume-Uni | 400 | - | Milan, Italie | 162 | - | Paris, France | 458 | - | Vienne, Autriche | 158 | - -2. Traitement des colonnes de méta-avis d'hôtel - - 1. Supprimez `Additional_Number_of_Scoring` - - 1. Replace `Total_Number_of_Reviews` with the total number of reviews for that hotel that are actually in the dataset - - 1. Replace `Average_Score` avec notre propre score calculé - - ```python - # Drop `Additional_Number_of_Scoring` - df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) - # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values - df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') - df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - ``` - -3. Traitement des colonnes d'avis - - 1. Supprimez `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` and `days_since_review` - - 2. Keep `Reviewer_Score`, `Negative_Review`, and `Positive_Review` as they are, - - 3. Keep `Tags` for now - - - We'll be doing some additional filtering operations on the tags in the next section and then tags will be dropped - -4. Process reviewer columns - - 1. Drop `Total_Number_of_Reviews_Reviewer_Has_Given` - - 2. Keep `Reviewer_Nationality` - -### Tag columns - -The `Tag` column is problematic as it is a list (in text form) stored in the column. Unfortunately the order and number of sub sections in this column are not always the same. It's hard for a human to identify the correct phrases to be interested in, because there are 515,000 rows, and 1427 hotels, and each has slightly different options a reviewer could choose. This is where NLP shines. You can scan the text and find the most common phrases, and count them. - -Unfortunately, we are not interested in single words, but multi-word phrases (e.g. *Business trip*). Running a multi-word frequency distribution algorithm on that much data (6762646 words) could take an extraordinary amount of time, but without looking at the data, it would seem that is a necessary expense. This is where exploratory data analysis comes in useful, because you've seen a sample of the tags such as `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, vous pouvez commencer à vous demander s'il est possible de réduire considérablement le traitement que vous devez effectuer. Heureusement, c'est le cas - mais d'abord, vous devez suivre quelques étapes pour déterminer les tags d'intérêt. - -### Filtrage des tags - -Rappelez-vous que l'objectif du jeu de données est d'ajouter du sentiment et des colonnes qui vous aideront à choisir le meilleur hôtel (pour vous-même ou peut-être pour un client vous demandant de créer un bot de recommandation d'hôtels). Vous devez vous demander si les tags sont utiles ou non dans le jeu de données final. Voici une interprétation (si vous aviez besoin du jeu de données pour d'autres raisons, d'autres tags pourraient rester ou être exclus de la sélection) : - -1. Le type de voyage est pertinent, et cela doit rester -2. Le type de groupe de clients est important, et cela doit rester -3. Le type de chambre, suite ou studio dans lequel le client a séjourné est sans rapport (tous les hôtels ont essentiellement les mêmes chambres) -4. L'appareil sur lequel l'avis a été soumis est sans rapport -5. Le nombre de nuits que le critique a passées *pourrait* être pertinent si vous attribuez des séjours plus longs à un plus grand plaisir de l'hôtel, mais c'est un peu tiré par les cheveux et probablement sans rapport - -En résumé, **conservez 2 types de tags et supprimez les autres**. - -Tout d'abord, vous ne voulez pas compter les tags tant qu'ils ne sont pas dans un meilleur format, donc cela signifie enlever les crochets et les guillemets. Vous pouvez le faire de plusieurs manières, mais vous voulez la méthode la plus rapide car cela pourrait prendre beaucoup de temps pour traiter une grande quantité de données. Heureusement, pandas a un moyen facile de faire chacune de ces étapes. - -```Python -# Remove opening and closing brackets -df.Tags = df.Tags.str.strip("[']") -# remove all quotes too -df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) -``` - -Chaque tag devient quelque chose comme : `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. - -Next we find a problem. Some reviews, or rows, have 5 columns, some 3, some 6. This is a result of how the dataset was created, and hard to fix. You want to get a frequency count of each phrase, but they are in different order in each review, so the count might be off, and a hotel might not get a tag assigned to it that it deserved. - -Instead you will use the different order to our advantage, because each tag is multi-word but also separated by a comma! The simplest way to do this is to create 6 temporary columns with each tag inserted in to the column corresponding to its order in the tag. You can then merge the 6 columns into one big column and run the `value_counts()` method on the resulting column. Printing that out, you'll see there was 2428 unique tags. Here is a small sample: - -| Tag | Count | -| ------------------------------ | ------ | -| Leisure trip | 417778 | -| Submitted from a mobile device | 307640 | -| Couple | 252294 | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Solo traveler | 108545 | -| Stayed 3 nights | 95821 | -| Business trip | 82939 | -| Group | 65392 | -| Family with young children | 61015 | -| Stayed 4 nights | 47817 | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Family with older children | 26349 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Stayed 5 nights | 20845 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | -| 2 rooms | 12393 | - -Some of the common tags like `Submitted from a mobile device` are of no use to us, so it might be a smart thing to remove them before counting phrase occurrence, but it is such a fast operation you can leave them in and ignore them. - -### Removing the length of stay tags - -Removing these tags is step 1, it reduces the total number of tags to be considered slightly. Note you do not remove them from the dataset, just choose to remove them from consideration as values to count/keep in the reviews dataset. - -| Length of stay | Count | -| ---------------- | ------ | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Stayed 3 nights | 95821 | -| Stayed 4 nights | 47817 | -| Stayed 5 nights | 20845 | -| Stayed 6 nights | 9776 | -| Stayed 7 nights | 7399 | -| Stayed 8 nights | 2502 | -| Stayed 9 nights | 1293 | -| ... | ... | - -There are a huge variety of rooms, suites, studios, apartments and so on. They all mean roughly the same thing and not relevant to you, so remove them from consideration. - -| Type of room | Count | -| ----------------------------- | ----- | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | - -Finally, and this is delightful (because it didn't take much processing at all), you will be left with the following *useful* tags: - -| Tag | Count | -| --------------------------------------------- | ------ | -| Leisure trip | 417778 | -| Couple | 252294 | -| Solo traveler | 108545 | -| Business trip | 82939 | -| Group (combined with Travellers with friends) | 67535 | -| Family with young children | 61015 | -| Family with older children | 26349 | -| With a pet | 1405 | - -You could argue that `Travellers with friends` is the same as `Group` more or less, and that would be fair to combine the two as above. The code for identifying the correct tags is [the Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). - -The final step is to create new columns for each of these tags. Then, for every review row, if the `Tag` la colonne correspond à l'une des nouvelles colonnes, ajoutez un 1, sinon, ajoutez un 0. Le résultat final sera un compte du nombre de critiques qui ont choisi cet hôtel (au total) pour, disons, affaires contre loisirs, ou pour amener un animal de compagnie, et c'est une information utile lors de la recommandation d'un hôtel. - -```python -# Process the Tags into new columns -# The file Hotel_Reviews_Tags.py, identifies the most important tags -# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, -# Family with young children, Family with older children, With a pet -df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) -df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) -df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) -df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) -df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) -df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) -df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) -df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) - -``` - -### Enregistrez votre fichier - -Enfin, enregistrez le jeu de données tel qu'il est maintenant avec un nouveau nom. - -```python -df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) - -# Saving new data file with calculated columns -print("Saving results to Hotel_Reviews_Filtered.csv") -df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) -``` - -## Opérations d'analyse de sentiment - -Dans cette dernière section, vous appliquerez une analyse de sentiment aux colonnes d'avis et enregistrerez les résultats dans un jeu de données. - -## Exercice : charger et enregistrer les données filtrées - -Notez que maintenant vous chargez le jeu de données filtré qui a été enregistré dans la section précédente, **pas** le jeu de données original. - -```python -import time -import pandas as pd -import nltk as nltk -from nltk.corpus import stopwords -from nltk.sentiment.vader import SentimentIntensityAnalyzer -nltk.download('vader_lexicon') - -# Load the filtered hotel reviews from CSV -df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') - -# You code will be added here - - -# Finally remember to save the hotel reviews with new NLP data added -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) -``` - -### Suppression des mots vides - -Si vous deviez effectuer une analyse de sentiment sur les colonnes d'avis négatifs et positifs, cela pourrait prendre beaucoup de temps. Testé sur un ordinateur portable puissant avec un processeur rapide, cela a pris 12 à 14 minutes selon la bibliothèque de sentiment utilisée. C'est un temps (relativement) long, donc cela vaut la peine d'enquêter sur la possibilité d'accélérer le processus. - -La suppression des mots vides, ou des mots anglais courants qui ne changent pas le sentiment d'une phrase, est la première étape. En les supprimant, l'analyse de sentiment devrait s'exécuter plus rapidement, mais pas être moins précise (car les mots vides n'affectent pas le sentiment, mais ralentissent l'analyse). - -Le plus long avis négatif faisait 395 mots, mais après suppression des mots vides, il ne fait plus que 195 mots. - -La suppression des mots vides est également une opération rapide, retirer les mots vides de 2 colonnes d'avis sur plus de 515 000 lignes a pris 3,3 secondes sur l'appareil de test. Cela pourrait prendre un peu plus ou moins de temps pour vous en fonction de la vitesse de votre processeur, de votre RAM, de la présence ou non d'un SSD, et d'autres facteurs. La relative brièveté de l'opération signifie que si cela améliore le temps d'analyse de sentiment, cela vaut la peine d'être fait. - -```python -from nltk.corpus import stopwords - -# Load the hotel reviews from CSV -df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") - -# Remove stop words - can be slow for a lot of text! -# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches -# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends -start = time.time() -cache = set(stopwords.words("english")) -def remove_stopwords(review): - text = " ".join([word for word in review.split() if word not in cache]) - return text - -# Remove the stop words from both columns -df.Negative_Review = df.Negative_Review.apply(remove_stopwords) -df.Positive_Review = df.Positive_Review.apply(remove_stopwords) -``` - -### Effectuer l'analyse de sentiment - -Maintenant, vous devez calculer l'analyse de sentiment pour les colonnes d'avis négatifs et positifs, et stocker le résultat dans 2 nouvelles colonnes. Le test du sentiment consistera à le comparer au score du critique pour le même avis. Par exemple, si le sentiment pense que l'avis négatif avait un sentiment de 1 (sentiment extrêmement positif) et un sentiment d'avis positif de 1, mais que le critique a donné à l'hôtel la note la plus basse possible, alors soit le texte de l'avis ne correspond pas au score, soit l'analyste de sentiment n'a pas pu reconnaître correctement le sentiment. Vous devriez vous attendre à ce que certains scores de sentiment soient complètement erronés, et souvent cela sera explicable, par exemple, l'avis pourrait être extrêmement sarcastique "Bien sûr, j'AI ADORÉ dormir dans une chambre sans chauffage" et l'analyste de sentiment pense que c'est un sentiment positif, même si un humain le lirait et comprendrait qu'il s'agit de sarcasme. - -NLTK fournit différents analyseurs de sentiment à apprendre avec, et vous pouvez les substituer et voir si le sentiment est plus ou moins précis. L'analyse de sentiment VADER est utilisée ici. - -> Hutto, C.J. & Gilbert, E.E. (2014). VADER : Un modèle basé sur des règles parcimonieuses pour l'analyse de sentiment de textes sur les médias sociaux. Huitième Conférence internationale sur les blogs et les médias sociaux (ICWSM-14). Ann Arbor, MI, juin 2014. - -```python -from nltk.sentiment.vader import SentimentIntensityAnalyzer - -# Create the vader sentiment analyser (there are others in NLTK you can try too) -vader_sentiment = SentimentIntensityAnalyzer() -# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -# There are 3 possibilities of input for a review: -# It could be "No Negative", in which case, return 0 -# It could be "No Positive", in which case, return 0 -# It could be a review, in which case calculate the sentiment -def calc_sentiment(review): - if review == "No Negative" or review == "No Positive": - return 0 - return vader_sentiment.polarity_scores(review)["compound"] -``` - -Plus tard dans votre programme, lorsque vous êtes prêt à calculer le sentiment, vous pouvez l'appliquer à chaque avis comme suit : - -```python -# Add a negative sentiment and positive sentiment column -print("Calculating sentiment columns for both positive and negative reviews") -start = time.time() -df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) -df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) -end = time.time() -print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") -``` - -Cela prend environ 120 secondes sur mon ordinateur, mais cela variera d'un ordinateur à l'autre. Si vous voulez imprimer les résultats et voir si le sentiment correspond à l'avis : - -```python -df = df.sort_values(by=["Negative_Sentiment"], ascending=True) -print(df[["Negative_Review", "Negative_Sentiment"]]) -df = df.sort_values(by=["Positive_Sentiment"], ascending=True) -print(df[["Positive_Review", "Positive_Sentiment"]]) -``` - -La toute dernière chose à faire avec le fichier avant de l'utiliser dans le défi est de l'enregistrer ! Vous devriez également envisager de réorganiser toutes vos nouvelles colonnes afin qu'elles soient faciles à manipuler (pour un humain, c'est un changement cosmétique). - -```python -# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) -df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) - -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) -``` - -Vous devriez exécuter l'ensemble du code pour [le carnet d'analyse](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (après avoir exécuté [votre carnet de filtrage](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) pour générer le fichier Hotel_Reviews_Filtered.csv). - -Pour résumer, les étapes sont : - -1. Le fichier de jeu de données original **Hotel_Reviews.csv** a été exploré dans la leçon précédente avec [le carnet d'exploration](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) -2. Hotel_Reviews.csv est filtré par [le carnet de filtrage](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) ce qui donne **Hotel_Reviews_Filtered.csv** -3. Hotel_Reviews_Filtered.csv est traité par [le carnet d'analyse de sentiment](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) ce qui donne **Hotel_Reviews_NLP.csv** -4. Utilisez Hotel_Reviews_NLP.csv dans le défi NLP ci-dessous - -### Conclusion - -Lorsque vous avez commencé, vous aviez un jeu de données avec des colonnes et des données, mais tout ne pouvait pas être vérifié ou utilisé. Vous avez exploré les données, filtré ce dont vous n'avez pas besoin, converti les tags en quelque chose d'utile, calculé vos propres moyennes, ajouté quelques colonnes de sentiment et, espérons-le, appris des choses intéressantes sur le traitement du texte naturel. - -## [Quiz post-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) - -## Défi - -Maintenant que vous avez analysé votre jeu de données pour le sentiment, voyez si vous pouvez utiliser des stratégies que vous avez apprises dans ce cursus (clustering, peut-être ?) pour déterminer des motifs autour du sentiment. - -## Revue et auto-apprentissage - -Prenez [ce module Learn](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) pour en savoir plus et utiliser différents outils pour explorer le sentiment dans le texte. -## Mission - -[Essayez un autre jeu de données](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/fr/6-NLP/5-Hotel-Reviews-2/assignment.md deleted file mode 100644 index f8fd2cdb..00000000 --- a/translations/fr/6-NLP/5-Hotel-Reviews-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Essayez un ensemble de données différent - -## Instructions - -Maintenant que vous avez appris à utiliser NLTK pour attribuer un sentiment à un texte, essayez un ensemble de données différent. Vous aurez probablement besoin de faire un certain traitement des données, alors créez un notebook et documentez votre réflexion. Quelles découvertes faites-vous ? - -## Critères d'évaluation - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| --------- | -------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | -------------------------- | -| | Un notebook complet et un ensemble de données sont présentés avec des cellules bien documentées expliquant comment le sentiment est attribué | Le notebook manque de bonnes explications | Le notebook présente des défauts | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/fr/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md deleted file mode 100644 index 212c1a92..00000000 --- a/translations/fr/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaire. Veuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/fr/6-NLP/5-Hotel-Reviews-2/solution/R/README.md deleted file mode 100644 index 0e494528..00000000 --- a/translations/fr/6-NLP/5-Hotel-Reviews-2/solution/R/README.md +++ /dev/null @@ -1,6 +0,0 @@ -ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/README.md b/translations/fr/6-NLP/README.md deleted file mode 100644 index a8ffe48d..00000000 --- a/translations/fr/6-NLP/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# Introduction au traitement du langage naturel - -Le traitement du langage naturel (NLP) est la capacité d'un programme informatique à comprendre la langue humaine telle qu'elle est parlée et écrite - ce qu'on appelle le langage naturel. C'est un composant de l'intelligence artificielle (IA). Le NLP existe depuis plus de 50 ans et a des racines dans le domaine de la linguistique. L'ensemble du domaine vise à aider les machines à comprendre et à traiter la langue humaine. Cela peut ensuite être utilisé pour effectuer des tâches telles que la vérification orthographique ou la traduction automatique. Il a une variété d'applications dans le monde réel dans plusieurs domaines, y compris la recherche médicale, les moteurs de recherche et l'intelligence économique. - -## Sujet régional : Langues et littérature européennes et hôtels romantiques d'Europe ❤️ - -Dans cette section du programme, vous serez introduit à l'un des usages les plus répandus de l'apprentissage automatique : le traitement du langage naturel (NLP). Dérivée de la linguistique computationnelle, cette catégorie d'intelligence artificielle est le pont entre les humains et les machines via la communication vocale ou textuelle. - -Dans ces leçons, nous apprendrons les bases du NLP en construisant de petits bots conversationnels pour comprendre comment l'apprentissage automatique aide à rendre ces conversations de plus en plus "intelligentes". Vous voyagerez dans le temps, discutant avec Elizabeth Bennett et M. Darcy du roman classique de Jane Austen, **Orgueil et Préjugés**, publié en 1813. Ensuite, vous approfondirez vos connaissances en apprenant l'analyse des sentiments à travers les avis d'hôtels en Europe. - -![Livre Orgueil et Préjugés et thé](../../../translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.fr.jpg) -> Photo par Elaine Howlin sur Unsplash - -## Leçons - -1. [Introduction au traitement du langage naturel](1-Introduction-to-NLP/README.md) -2. [Tâches et techniques courantes en NLP](2-Tasks/README.md) -3. [Traduction et analyse des sentiments avec l'apprentissage automatique](3-Translation-Sentiment/README.md) -4. [Préparation de vos données](4-Hotel-Reviews-1/README.md) -5. [NLTK pour l'analyse des sentiments](5-Hotel-Reviews-2/README.md) - -## Crédits - -Ces leçons de traitement du langage naturel ont été écrites avec ☕ par [Stephen Howell](https://twitter.com/Howell_MSFT) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue d'origine doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/6-NLP/data/README.md b/translations/fr/6-NLP/data/README.md deleted file mode 100644 index bf21abf6..00000000 --- a/translations/fr/6-NLP/data/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Téléchargez les données d'évaluation de l'hôtel dans ce dossier. Veuillez écrire la sortie de gauche à droite. - -Téléchargez les données d'évaluation de l'hôtel dans ce dossier. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/1-Introduction/README.md b/translations/fr/7-TimeSeries/1-Introduction/README.md deleted file mode 100644 index 1eac358a..00000000 --- a/translations/fr/7-TimeSeries/1-Introduction/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# Introduction à la prévision des séries temporelles - -![Résumé des séries temporelles dans un sketchnote](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.fr.png) - -> Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) - -Dans cette leçon et la suivante, vous apprendrez un peu sur la prévision des séries temporelles, une partie intéressante et précieuse du répertoire d'un scientifique en ML qui est un peu moins connue que d'autres sujets. La prévision des séries temporelles est une sorte de 'boule de cristal' : basée sur la performance passée d'une variable telle que le prix, vous pouvez prédire sa valeur potentielle future. - -[![Introduction à la prévision des séries temporelles](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introduction à la prévision des séries temporelles") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo sur la prévision des séries temporelles - -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/) - -C'est un domaine utile et intéressant avec une réelle valeur pour les entreprises, étant donné son application directe aux problèmes de tarification, d'inventaire et de chaîne d'approvisionnement. Bien que les techniques d'apprentissage profond aient commencé à être utilisées pour obtenir plus d'informations afin de mieux prédire les performances futures, la prévision des séries temporelles reste un domaine largement informé par des techniques classiques de ML. - -> Le programme de séries temporelles utile de Penn State peut être trouvé [ici](https://online.stat.psu.edu/stat510/lesson/1) - -## Introduction - -Supposons que vous mainteniez un ensemble de parcmètres intelligents qui fournissent des données sur la fréquence à laquelle ils sont utilisés et pendant combien de temps au fil du temps. - -> Que se passerait-il si vous pouviez prédire, en vous basant sur la performance passée du parcmètre, sa valeur future selon les lois de l'offre et de la demande ? - -Prédire avec précision quand agir pour atteindre votre objectif est un défi qui pourrait être relevé par la prévision des séries temporelles. Cela ne rendrait pas les gens heureux d'être facturés davantage pendant les périodes de forte affluence lorsqu'ils cherchent une place de parking, mais ce serait un moyen sûr de générer des revenus pour nettoyer les rues ! - -Explorons certains des types d'algorithmes de séries temporelles et commençons un carnet pour nettoyer et préparer des données. Les données que vous allez analyser proviennent de la compétition de prévision GEFCom2014. Elles consistent en 3 ans de valeurs horaires de charge électrique et de température entre 2012 et 2014. Étant donné les modèles historiques de charge électrique et de température, vous pouvez prédire les valeurs futures de la charge électrique. - -Dans cet exemple, vous apprendrez à prévoir une étape temporelle à l'avance, en utilisant uniquement les données de charge historiques. Cependant, avant de commencer, il est utile de comprendre ce qui se passe en coulisses. - -## Quelques définitions - -Lorsque vous rencontrez le terme 'série temporelle', vous devez comprendre son utilisation dans plusieurs contextes différents. - -🎓 **Série temporelle** - -En mathématiques, "une série temporelle est une série de points de données indexés (ou listés ou représentés graphiquement) dans l'ordre temporel. Le plus souvent, une série temporelle est une séquence prise à des points successifs également espacés dans le temps." Un exemple de série temporelle est la valeur de clôture quotidienne du [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). L'utilisation de graphiques de séries temporelles et de modélisation statistique est fréquemment rencontrée dans le traitement du signal, la prévision météorologique, la prédiction des tremblements de terre et d'autres domaines où des événements se produisent et des points de données peuvent être tracés au fil du temps. - -🎓 **Analyse des séries temporelles** - -L'analyse des séries temporelles est l'analyse des données de séries temporelles mentionnées ci-dessus. Les données de séries temporelles peuvent prendre des formes distinctes, y compris les 'séries temporelles interrompues' qui détectent des modèles dans l'évolution d'une série temporelle avant et après un événement perturbateur. Le type d'analyse nécessaire pour la série temporelle dépend de la nature des données. Les données de séries temporelles elles-mêmes peuvent prendre la forme de séries de nombres ou de caractères. - -L'analyse à réaliser utilise une variété de méthodes, y compris le domaine de fréquence et le domaine temporel, linéaire et non linéaire, et plus encore. [En savoir plus](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) sur les nombreuses façons d'analyser ce type de données. - -🎓 **Prévision des séries temporelles** - -La prévision des séries temporelles est l'utilisation d'un modèle pour prédire des valeurs futures basées sur les modèles affichés par des données précédemment recueillies telles qu'elles se sont produites dans le passé. Bien qu'il soit possible d'utiliser des modèles de régression pour explorer les données de séries temporelles, avec des indices temporels comme variables x sur un graphique, ces données sont mieux analysées à l'aide de types de modèles spéciaux. - -Les données de séries temporelles sont une liste d'observations ordonnées, contrairement aux données qui peuvent être analysées par régression linéaire. Le plus courant est l'ARIMA, un acronyme qui signifie "Moyenne Mobile Intégrée Autoregressive". - -Les [modèles ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "relient la valeur présente d'une série à des valeurs passées et à des erreurs de prédiction passées." Ils sont les plus appropriés pour analyser des données dans le domaine temporel, où les données sont ordonnées dans le temps. - -> Il existe plusieurs types de modèles ARIMA, dont vous pouvez apprendre davantage [ici](https://people.duke.edu/~rnau/411arim.htm) et que vous aborderez dans la prochaine leçon. - -Dans la prochaine leçon, vous construirez un modèle ARIMA en utilisant des [Séries Temporelles Univariées](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), qui se concentre sur une variable qui change de valeur au fil du temps. Un exemple de ce type de données est [cet ensemble de données](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) qui enregistre la concentration mensuelle de CO2 à l'Observatoire de Mauna Loa : - -| CO2 | YearMonth | Année | Mois | -| :----: | :-------: | :---: | :---: | -| 330.62 | 1975.04 | 1975 | 1 | -| 331.40 | 1975.13 | 1975 | 2 | -| 331.87 | 1975.21 | 1975 | 3 | -| 333.18 | 1975.29 | 1975 | 4 | -| 333.92 | 1975.38 | 1975 | 5 | -| 333.43 | 1975.46 | 1975 | 6 | -| 331.85 | 1975.54 | 1975 | 7 | -| 330.01 | 1975.63 | 1975 | 8 | -| 328.51 | 1975.71 | 1975 | 9 | -| 328.41 | 1975.79 | 1975 | 10 | -| 329.25 | 1975.88 | 1975 | 11 | -| 330.97 | 1975.96 | 1975 | 12 | - -✅ Identifiez la variable qui change au fil du temps dans cet ensemble de données - -## Caractéristiques des données de séries temporelles à considérer - -Lorsque vous examinez des données de séries temporelles, vous pourriez remarquer qu'elles possèdent [certaines caractéristiques](https://online.stat.psu.edu/stat510/lesson/1/1.1) que vous devez prendre en compte et atténuer pour mieux comprendre ses modèles. Si vous considérez les données de séries temporelles comme potentiellement fournissant un 'signal' que vous souhaitez analyser, ces caractéristiques peuvent être considérées comme du 'bruit'. Vous devrez souvent réduire ce 'bruit' en compensant certaines de ces caractéristiques à l'aide de techniques statistiques. - -Voici quelques concepts que vous devriez connaître pour pouvoir travailler avec des séries temporelles : - -🎓 **Tendances** - -Les tendances sont définies comme des augmentations et des diminutions mesurables au fil du temps. [En savoir plus](https://machinelearningmastery.com/time-series-trends-in-python). Dans le contexte des séries temporelles, il s'agit de savoir comment utiliser et, si nécessaire, supprimer les tendances de votre série temporelle. - -🎓 **[Saisonnalité](https://machinelearningmastery.com/time-series-seasonality-with-python/)** - -La saisonnalité est définie comme des fluctuations périodiques, telles que les pics de vente pendant les vacances, par exemple. [Jetez un œil](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) à la façon dont différents types de graphiques affichent la saisonnalité dans les données. - -🎓 **Valeurs aberrantes** - -Les valeurs aberrantes sont éloignées de la variance standard des données. - -🎓 **Cycle à long terme** - -Indépendamment de la saisonnalité, les données peuvent afficher un cycle à long terme tel qu'une récession économique qui dure plus d'un an. - -🎓 **Variance constante** - -Au fil du temps, certaines données affichent des fluctuations constantes, comme l'utilisation d'énergie jour et nuit. - -🎓 **Changements brusques** - -Les données peuvent afficher un changement brusque qui pourrait nécessiter une analyse plus approfondie. La fermeture brutale des entreprises en raison de COVID, par exemple, a causé des changements dans les données. - -✅ Voici un [exemple de graphique de séries temporelles](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) montrant les dépenses quotidiennes en monnaie virtuelle sur plusieurs années. Pouvez-vous identifier certaines des caractéristiques énumérées ci-dessus dans ces données ? - -![Dépenses en monnaie virtuelle](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.fr.png) - -## Exercice - démarrer avec les données de consommation d'énergie - -Commençons à créer un modèle de séries temporelles pour prédire la consommation future d'énergie en fonction de la consommation passée. - -> Les données dans cet exemple proviennent de la compétition de prévision GEFCom2014. Elles consistent en 3 ans de valeurs horaires de charge électrique et de température entre 2012 et 2014. -> -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli et Rob J. Hyndman, "Prévision énergétique probabiliste : Compétition mondiale de prévision énergétique 2014 et au-delà", International Journal of Forecasting, vol.32, no.3, pp 896-913, juillet-septembre 2016. - -1. Dans le dossier `working` de cette leçon, ouvrez le fichier _notebook.ipynb_. Commencez par ajouter des bibliothèques qui vous aideront à charger et visualiser les données. - - ```python - import os - import matplotlib.pyplot as plt - from common.utils import load_data - %matplotlib inline - ``` - - Notez que vous utilisez les fichiers de la fonction incluse `common` folder which set up your environment and handle downloading the data. - -2. Next, examine the data as a dataframe calling `load_data()` and `head()` : - - ```python - data_dir = './data' - energy = load_data(data_dir)[['load']] - energy.head() - ``` - - Vous pouvez voir qu'il y a deux colonnes représentant la date et la charge : - - | | charge | - | :-----------------: | :------: | - | 2012-01-01 00:00:00 | 2698.0 | - | 2012-01-01 01:00:00 | 2558.0 | - | 2012-01-01 02:00:00 | 2444.0 | - | 2012-01-01 03:00:00 | 2402.0 | - | 2012-01-01 04:00:00 | 2403.0 | - -3. Maintenant, tracez les données en appelant `plot()` : - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![graphique d'énergie](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.fr.png) - -4. Maintenant, tracez la première semaine de juillet 2014, en la fournissant comme entrée au modèle `energy` in `[de date] : [à date]` : - - ```python - energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![juillet](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.fr.png) - - Un beau graphique ! Jetez un œil à ces graphiques et voyez si vous pouvez déterminer certaines des caractéristiques énumérées ci-dessus. Que pouvons-nous déduire en visualisant les données ? - -Dans la prochaine leçon, vous créerez un modèle ARIMA pour réaliser des prévisions. - ---- - -## 🚀Défi - -Faites une liste de toutes les industries et domaines de recherche que vous pouvez penser qui bénéficieraient de la prévision des séries temporelles. Pouvez-vous penser à une application de ces techniques dans les arts ? En économétrie ? En écologie ? Dans le commerce de détail ? Dans l'industrie ? Dans la finance ? Où d'autre ? - -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) - -## Révision & Auto-apprentissage - -Bien que nous ne les couvrions pas ici, les réseaux neuronaux sont parfois utilisés pour améliorer les méthodes classiques de prévision des séries temporelles. Lisez-en plus [dans cet article](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) - -## Devoir - -[Visualisez d'autres séries temporelles](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/1-Introduction/assignment.md b/translations/fr/7-TimeSeries/1-Introduction/assignment.md deleted file mode 100644 index 3f6c8f8f..00000000 --- a/translations/fr/7-TimeSeries/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Visualisez quelques séries temporelles supplémentaires - -## Instructions - -Vous avez commencé à apprendre sur les prévisions de séries temporelles en examinant le type de données qui nécessite ce modèle particulier. Vous avez visualisé des données liées à l'énergie. Maintenant, recherchez d'autres données qui pourraient bénéficier des prévisions de séries temporelles. Trouvez trois exemples (essayez [Kaggle](https://kaggle.com) et [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) et créez un carnet pour les visualiser. Notez les caractéristiques particulières qu'elles possèdent (saisonnalité, changements brusques ou autres tendances) dans le carnet. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| ---------- | ------------------------------------------------------ | --------------------------------------------------- | --------------------------------------------------------------------------------------------- | -| | Trois ensembles de données sont tracés et expliqués dans un carnet | Deux ensembles de données sont tracés et expliqués dans un carnet | Peu d'ensembles de données sont tracés ou expliqués dans un carnet ou les données présentées sont insuffisantes | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/fr/7-TimeSeries/1-Introduction/solution/Julia/README.md deleted file mode 100644 index b25d9b1a..00000000 --- a/translations/fr/7-TimeSeries/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/fr/7-TimeSeries/1-Introduction/solution/R/README.md deleted file mode 100644 index 6ef877cb..00000000 --- a/translations/fr/7-TimeSeries/1-Introduction/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/2-ARIMA/README.md b/translations/fr/7-TimeSeries/2-ARIMA/README.md deleted file mode 100644 index 3873d436..00000000 --- a/translations/fr/7-TimeSeries/2-ARIMA/README.md +++ /dev/null @@ -1,396 +0,0 @@ -# Prévision de séries temporelles avec ARIMA - -Dans la leçon précédente, vous avez appris un peu sur la prévision de séries temporelles et chargé un ensemble de données montrant les fluctuations de la charge électrique sur une période donnée. - -[![Introduction à ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introduction à ARIMA") - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Une brève introduction aux modèles ARIMA. L'exemple est réalisé en R, mais les concepts sont universels. - -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/) - -## Introduction - -Dans cette leçon, vous découvrirez une méthode spécifique pour construire des modèles avec [ARIMA : *A*uto*R*égressif *I*ntegré *M*oyenne *A*mobile](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Les modèles ARIMA sont particulièrement adaptés pour ajuster des données qui montrent [non-stationnarité](https://wikipedia.org/wiki/Stationary_process). - -## Concepts généraux - -Pour pouvoir travailler avec ARIMA, il y a certains concepts que vous devez connaître : - -- 🎓 **Stationnarité**. Dans un contexte statistique, la stationnarité fait référence à des données dont la distribution ne change pas lorsqu'elle est décalée dans le temps. Les données non stationnaires, en revanche, montrent des fluctuations dues à des tendances qui doivent être transformées pour être analysées. La saisonnalité, par exemple, peut introduire des fluctuations dans les données et peut être éliminée par un processus de "différenciation saisonnière". - -- 🎓 **[Différenciation](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Différencier les données, encore une fois dans un contexte statistique, fait référence au processus de transformation des données non stationnaires pour les rendre stationnaires en supprimant leur tendance non constante. "La différenciation élimine les changements dans le niveau d'une série temporelle, éliminant ainsi tendance et saisonnalité et stabilisant par conséquent la moyenne de la série temporelle." [Article de Shixiong et al](https://arxiv.org/abs/1904.07632) - -## ARIMA dans le contexte des séries temporelles - -Décomposons les parties d'ARIMA pour mieux comprendre comment cela nous aide à modéliser les séries temporelles et à nous aider à faire des prévisions. - -- **AR - pour AutoRégressif**. Les modèles autorégressifs, comme leur nom l'indique, regardent 'en arrière' dans le temps pour analyser les valeurs précédentes de vos données et faire des hypothèses à leur sujet. Ces valeurs précédentes sont appelées 'lags'. Un exemple serait des données montrant les ventes mensuelles de crayons. Le total des ventes de chaque mois serait considéré comme une 'variable évolutive' dans l'ensemble de données. Ce modèle est construit car "la variable évolutive d'intérêt est régressée sur ses propres valeurs retardées (c'est-à-dire antérieures)." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) - -- **I - pour Intégré**. Contrairement aux modèles 'ARMA' similaires, le 'I' dans ARIMA fait référence à son aspect *[intégré](https://wikipedia.org/wiki/Order_of_integration)*. Les données sont 'intégrées' lorsque des étapes de différenciation sont appliquées pour éliminer la non-stationnarité. - -- **MA - pour Moyenne Mobile**. L'aspect [moyenne mobile](https://wikipedia.org/wiki/Moving-average_model) de ce modèle fait référence à la variable de sortie qui est déterminée en observant les valeurs actuelles et passées des lags. - -En résumé : ARIMA est utilisé pour ajuster un modèle à la forme spéciale des données de séries temporelles aussi étroitement que possible. - -## Exercice - construire un modèle ARIMA - -Ouvrez le dossier [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) dans cette leçon et trouvez le fichier [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). - -1. Exécutez le notebook pour charger la bibliothèque Python `statsmodels` ; vous en aurez besoin pour les modèles ARIMA. - -1. Chargez les bibliothèques nécessaires - -1. Maintenant, chargez plusieurs autres bibliothèques utiles pour tracer des données : - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from pandas.plotting import autocorrelation_plot - from statsmodels.tsa.statespace.sarimax import SARIMAX - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - from IPython.display import Image - - %matplotlib inline - pd.options.display.float_format = '{:,.2f}'.format - np.set_printoptions(precision=2) - warnings.filterwarnings("ignore") # specify to ignore warning messages - ``` - -1. Chargez les données à partir du fichier `/data/energy.csv` dans un dataframe Pandas et jetez un œil : - - ```python - energy = load_data('./data')[['load']] - energy.head(10) - ``` - -1. Tracez toutes les données d'énergie disponibles de janvier 2012 à décembre 2014. Il ne devrait pas y avoir de surprises car nous avons vu ces données dans la dernière leçon : - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - Maintenant, construisons un modèle ! - -### Créer des ensembles de données d'entraînement et de test - -Maintenant que vos données sont chargées, vous pouvez les séparer en ensembles d'entraînement et de test. Vous entraînerez votre modèle sur l'ensemble d'entraînement. Comme d'habitude, après que le modèle ait terminé son entraînement, vous évaluerez sa précision en utilisant l'ensemble de test. Vous devez vous assurer que l'ensemble de test couvre une période ultérieure par rapport à l'ensemble d'entraînement pour garantir que le modèle ne tire pas d'informations des périodes futures. - -1. Allouez une période de deux mois allant du 1er septembre au 31 octobre 2014 à l'ensemble d'entraînement. L'ensemble de test inclura la période de deux mois du 1er novembre au 31 décembre 2014 : - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - - Étant donné que ces données reflètent la consommation quotidienne d'énergie, il existe un fort schéma saisonnier, mais la consommation est la plus similaire à celle des jours les plus récents. - -1. Visualisez les différences : - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![données d'entraînement et de test](../../../../translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.fr.png) - - Par conséquent, utiliser une fenêtre de temps relativement petite pour entraîner les données devrait être suffisant. - - > Note : Étant donné que la fonction que nous utilisons pour ajuster le modèle ARIMA utilise la validation en échantillon pendant l'ajustement, nous omettrons les données de validation. - -### Préparer les données pour l'entraînement - -Maintenant, vous devez préparer les données pour l'entraînement en effectuant un filtrage et une mise à l'échelle de vos données. Filtrez votre ensemble de données pour n'inclure que les périodes de temps et les colonnes dont vous avez besoin, et mettez à l'échelle pour garantir que les données sont projetées dans l'intervalle 0,1. - -1. Filtrez l'ensemble de données original pour n'inclure que les périodes de temps mentionnées par ensemble et n'incluez que la colonne nécessaire 'load' ainsi que la date : - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - Vous pouvez voir la forme des données : - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -1. Mettez les données à l'échelle pour qu'elles soient dans la plage (0, 1). - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - train.head(10) - ``` - -1. Visualisez les données originales par rapport aux données mises à l'échelle : - - ```python - energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) - train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) - plt.show() - ``` - - ![original](../../../../translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.fr.png) - - > Les données originales - - ![scaled](../../../../translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.fr.png) - - > Les données mises à l'échelle - -1. Maintenant que vous avez calibré les données mises à l'échelle, vous pouvez mettre à l'échelle les données de test : - - ```python - test['load'] = scaler.transform(test) - test.head() - ``` - -### Implémenter ARIMA - -Il est temps d'implémenter ARIMA ! Vous allez maintenant utiliser la bibliothèque `statsmodels` que vous avez installée plus tôt. - -Vous devez maintenant suivre plusieurs étapes : - -1. Définissez le modèle en appelant `SARIMAX()` and passing in the model parameters: p, d, and q parameters, and P, D, and Q parameters. - 2. Prepare the model for the training data by calling the fit() function. - 3. Make predictions calling the `forecast()` function and specifying the number of steps (the `horizon`) to forecast. - -> 🎓 What are all these parameters for? In an ARIMA model there are 3 parameters that are used to help model the major aspects of a time series: seasonality, trend, and noise. These parameters are: - -`p`: the parameter associated with the auto-regressive aspect of the model, which incorporates *past* values. -`d`: the parameter associated with the integrated part of the model, which affects the amount of *differencing* (🎓 remember differencing 👆?) to apply to a time series. -`q`: the parameter associated with the moving-average part of the model. - -> Note: If your data has a seasonal aspect - which this one does - , we use a seasonal ARIMA model (SARIMA). In that case you need to use another set of parameters: `P`, `D`, and `Q` which describe the same associations as `p`, `d`, and `q`, mais correspondant aux composants saisonniers du modèle. - -1. Commencez par définir votre valeur d'horizon préférée. Essayons 3 heures : - - ```python - # Specify the number of steps to forecast ahead - HORIZON = 3 - print('Forecasting horizon:', HORIZON, 'hours') - ``` - - Sélectionner les meilleures valeurs pour les paramètres d'un modèle ARIMA peut être difficile car c'est quelque peu subjectif et chronophage. Vous pourriez envisager d'utiliser une bibliothèque `auto_arima()` function from the [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html), - -1. Pour l'instant, essayez quelques sélections manuelles pour trouver un bon modèle. - - ```python - order = (4, 1, 0) - seasonal_order = (1, 1, 0, 24) - - model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) - results = model.fit() - - print(results.summary()) - ``` - - Un tableau de résultats est imprimé. - -Vous avez construit votre premier modèle ! Maintenant, nous devons trouver un moyen de l'évaluer. - -### Évaluer votre modèle - -Pour évaluer votre modèle, vous pouvez effectuer la validation dite `walk forward`. En pratique, les modèles de séries temporelles sont réentraînés chaque fois qu'une nouvelle donnée devient disponible. Cela permet au modèle de faire la meilleure prévision à chaque étape temporelle. - -En commençant au début de la série temporelle en utilisant cette technique, entraînez le modèle sur l'ensemble de données d'entraînement. Ensuite, faites une prédiction sur la prochaine étape temporelle. La prédiction est évaluée par rapport à la valeur connue. L'ensemble d'entraînement est ensuite élargi pour inclure la valeur connue et le processus est répété. - -> Note : Vous devriez garder la fenêtre de l'ensemble d'entraînement fixe pour un entraînement plus efficace afin que chaque fois que vous ajoutez une nouvelle observation à l'ensemble d'entraînement, vous supprimiez l'observation du début de l'ensemble. - -Ce processus fournit une estimation plus robuste de la façon dont le modèle se comportera en pratique. Cependant, cela a un coût computationnel en raison de la création de tant de modèles. Cela est acceptable si les données sont petites ou si le modèle est simple, mais cela pourrait poser problème à grande échelle. - -La validation walk-forward est la norme d'or pour l'évaluation des modèles de séries temporelles et est recommandée pour vos propres projets. - -1. Tout d'abord, créez un point de données de test pour chaque étape HORIZON. - - ```python - test_shifted = test.copy() - - for t in range(1, HORIZON+1): - test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') - - test_shifted = test_shifted.dropna(how='any') - test_shifted.head(5) - ``` - - | | | load | load+1 | load+2 | - | ---------- | -------- | ---- | ------ | ------ | - | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | - | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | - | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | - | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | - | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | - - Les données sont décalées horizontalement selon son point d'horizon. - -1. Faites des prédictions sur vos données de test en utilisant cette approche de fenêtre glissante dans une boucle de la taille de la longueur des données de test : - - ```python - %%time - training_window = 720 # dedicate 30 days (720 hours) for training - - train_ts = train['load'] - test_ts = test_shifted - - history = [x for x in train_ts] - history = history[(-training_window):] - - predictions = list() - - order = (2, 1, 0) - seasonal_order = (1, 1, 0, 24) - - for t in range(test_ts.shape[0]): - model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) - model_fit = model.fit() - yhat = model_fit.forecast(steps = HORIZON) - predictions.append(yhat) - obs = list(test_ts.iloc[t]) - # move the training window - history.append(obs[0]) - history.pop(0) - print(test_ts.index[t]) - print(t+1, ': predicted =', yhat, 'expected =', obs) - ``` - - Vous pouvez observer l'entraînement en cours : - - ```output - 2014-12-30 00:00:00 - 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] - - 2014-12-30 01:00:00 - 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] - - 2014-12-30 02:00:00 - 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] - ``` - -1. Comparez les prédictions à la charge réelle : - - ```python - eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) - eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] - eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') - eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() - eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) - eval_df.head() - ``` - - Sortie - | | | timestamp | h | prédiction | réel | - | --- | ---------- | --------- | --- | ---------- | -------- | - | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | - | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | - | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | - | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | - | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | - - Observez la prédiction des données horaires, comparée à la charge réelle. Quelle est la précision de cela ? - -### Vérifier la précision du modèle - -Vérifiez la précision de votre modèle en testant son erreur absolue moyenne en pourcentage (MAPE) sur toutes les prédictions. - -> **🧮 Montrez-moi les mathématiques** -> -> ![MAPE](../../../../translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.fr.png) -> -> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) est utilisé pour montrer la précision des prévisions comme un ratio défini par la formule ci-dessus. La différence entre réelt et préditt est divisée par réelt. "La valeur absolue dans ce calcul est sommée pour chaque point de prévision et divisée par le nombre de points ajustés n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) - -1. Exprimez l'équation en code : - - ```python - if(HORIZON > 1): - eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] - print(eval_df.groupby('h')['APE'].mean()) - ``` - -1. Calculez le MAPE d'un pas : - - ```python - print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') - ``` - - MAPE de prévision d'un pas : 0.5570581332313952 % - -1. Imprimez le MAPE de prévision multi-pas : - - ```python - print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') - ``` - - ```output - Multi-step forecast MAPE: 1.1460048657704118 % - ``` - - Un joli petit nombre est le meilleur : considérez qu'une prévision avec un MAPE de 10 est erronée de 10 %. - -1. Mais comme toujours, il est plus facile de voir ce type de mesure de précision visuellement, alors traçons-le : - - ```python - if(HORIZON == 1): - ## Plotting single step forecast - eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) - - else: - ## Plotting multi step forecast - plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] - for t in range(1, HORIZON+1): - plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values - - fig = plt.figure(figsize=(15, 8)) - ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) - ax = fig.add_subplot(111) - for t in range(1, HORIZON+1): - x = plot_df['timestamp'][(t-1):] - y = plot_df['t+'+str(t)][0:len(x)] - ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) - - ax.legend(loc='best') - - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![un modèle de série temporelle](../../../../translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.fr.png) - -🏆 Un très joli graphique, montrant un modèle avec une bonne précision. Bien joué ! - ---- - -## 🚀Défi - -Explorez les différentes façons de tester la précision d'un modèle de séries temporelles. Nous abordons le MAPE dans cette leçon, mais existe-t-il d'autres méthodes que vous pourriez utiliser ? Recherchez-les et annoter. Un document utile peut être trouvé [ici](https://otexts.com/fpp2/accuracy.html) - -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/) - -## Revue & Auto-apprentissage - -Cette leçon ne couvre que les bases de la prévision de séries temporelles avec ARIMA. Prenez un peu de temps pour approfondir vos connaissances en explorant [ce dépôt](https://microsoft.github.io/forecasting/) et ses différents types de modèles pour apprendre d'autres façons de construire des modèles de séries temporelles. - -## Devoir - -[Un nouveau modèle ARIMA](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/2-ARIMA/assignment.md b/translations/fr/7-TimeSeries/2-ARIMA/assignment.md deleted file mode 100644 index 18fababe..00000000 --- a/translations/fr/7-TimeSeries/2-ARIMA/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Un nouveau modèle ARIMA - -## Instructions - -Maintenant que vous avez construit un modèle ARIMA, créez-en un nouveau avec des données fraîches (essayez l'un [de ces ensembles de données de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Annoter votre travail dans un carnet, visualiser les données et votre modèle, et tester sa précision en utilisant le MAPE. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| -------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ----------------------------------- | -| | Un carnet est présenté avec un nouveau modèle ARIMA construit, testé et expliqué avec des visualisations et une précision indiquée. | Le carnet présenté n'est pas annoté ou contient des erreurs | Un carnet incomplet est présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/fr/7-TimeSeries/2-ARIMA/solution/Julia/README.md deleted file mode 100644 index 4f76f316..00000000 --- a/translations/fr/7-TimeSeries/2-ARIMA/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/fr/7-TimeSeries/2-ARIMA/solution/R/README.md deleted file mode 100644 index 10884fd0..00000000 --- a/translations/fr/7-TimeSeries/2-ARIMA/solution/R/README.md +++ /dev/null @@ -1,6 +0,0 @@ -ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/3-SVR/README.md b/translations/fr/7-TimeSeries/3-SVR/README.md deleted file mode 100644 index cebbeed2..00000000 --- a/translations/fr/7-TimeSeries/3-SVR/README.md +++ /dev/null @@ -1,382 +0,0 @@ -# Prévision de séries temporelles avec le Support Vector Regressor - -Dans la leçon précédente, vous avez appris à utiliser le modèle ARIMA pour faire des prévisions de séries temporelles. Maintenant, vous allez vous intéresser au modèle Support Vector Regressor, qui est un modèle de régression utilisé pour prédire des données continues. - -## [Quiz pré-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/51/) - -## Introduction - -Dans cette leçon, vous découvrirez une méthode spécifique pour construire des modèles avec [**SVM** : **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) pour la régression, ou **SVR : Support Vector Regressor**. - -### SVR dans le contexte des séries temporelles [^1] - -Avant de comprendre l'importance de SVR dans la prévision des séries temporelles, voici quelques concepts importants que vous devez connaître : - -- **Régression :** Technique d'apprentissage supervisé pour prédire des valeurs continues à partir d'un ensemble donné d'entrées. L'idée est d'ajuster une courbe (ou une ligne) dans l'espace des caractéristiques qui a le maximum de points de données. [Cliquez ici](https://en.wikipedia.org/wiki/Regression_analysis) pour plus d'informations. -- **Support Vector Machine (SVM) :** Un type de modèle d'apprentissage automatique supervisé utilisé pour la classification, la régression et la détection d'outliers. Le modèle est un hyperplan dans l'espace des caractéristiques, qui dans le cas de la classification agit comme une frontière, et dans le cas de la régression agit comme la ligne de meilleur ajustement. Dans SVM, une fonction noyau est généralement utilisée pour transformer le jeu de données dans un espace de dimensions supérieures, afin qu'ils puissent être facilement séparables. [Cliquez ici](https://en.wikipedia.org/wiki/Support-vector_machine) pour plus d'informations sur les SVM. -- **Support Vector Regressor (SVR) :** Un type de SVM, pour trouver la ligne de meilleur ajustement (qui dans le cas de SVM est un hyperplan) qui a le maximum de points de données. - -### Pourquoi SVR ? [^1] - -Dans la dernière leçon, vous avez appris sur ARIMA, qui est une méthode statistique linéaire très réussie pour prévoir des données de séries temporelles. Cependant, dans de nombreux cas, les données de séries temporelles présentent *une non-linéarité*, qui ne peut pas être modélisée par des modèles linéaires. Dans de tels cas, la capacité de SVM à prendre en compte la non-linéarité dans les données pour les tâches de régression rend SVR efficace pour la prévision de séries temporelles. - -## Exercice - construire un modèle SVR - -Les premières étapes de préparation des données sont les mêmes que celles de la leçon précédente sur [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). - -Ouvrez le dossier [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) de cette leçon et trouvez le fichier [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb). [^2] - -1. Exécutez le notebook et importez les bibliothèques nécessaires : [^2] - - ```python - import sys - sys.path.append('../../') - ``` - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from sklearn.svm import SVR - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - ``` - -2. Chargez les données à partir du fichier `/data/energy.csv` dans un dataframe Pandas et jetez un œil : [^2] - - ```python - energy = load_data('../../data')[['load']] - ``` - -3. Tracez toutes les données énergétiques disponibles de janvier 2012 à décembre 2014 : [^2] - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![full data](../../../../translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.fr.png) - - Maintenant, construisons notre modèle SVR. - -### Créer des ensembles de données d'entraînement et de test - -Maintenant que vos données sont chargées, vous pouvez les séparer en ensembles d'entraînement et de test. Ensuite, vous allez remodeler les données pour créer un ensemble de données basé sur les étapes temporelles, ce qui sera nécessaire pour le SVR. Vous allez entraîner votre modèle sur l'ensemble d'entraînement. Après que le modèle ait terminé l'entraînement, vous évaluerez sa précision sur l'ensemble d'entraînement, l'ensemble de test, puis sur l'ensemble de données complet pour voir la performance globale. Vous devez vous assurer que l'ensemble de test couvre une période ultérieure par rapport à l'ensemble d'entraînement pour garantir que le modèle ne tire pas d'informations des périodes futures [^2] (une situation connue sous le nom de *Surapprentissage*). - -1. Allouez une période de deux mois du 1er septembre au 31 octobre 2014 à l'ensemble d'entraînement. L'ensemble de test comprendra la période de deux mois du 1er novembre au 31 décembre 2014 : [^2] - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - -2. Visualisez les différences : [^2] - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![training and testing data](../../../../translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.fr.png) - -### Préparer les données pour l'entraînement - -Maintenant, vous devez préparer les données pour l'entraînement en effectuant un filtrage et un redimensionnement de vos données. Filtrez votre ensemble de données pour n'inclure que les périodes et colonnes nécessaires, et redimensionnez pour garantir que les données sont projetées dans l'intervalle 0,1. - -1. Filtrez l'ensemble de données original pour inclure uniquement les périodes mentionnées par ensemble et n'incluez que la colonne nécessaire 'load' ainsi que la date : [^2] - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -2. Redimensionnez les données d'entraînement pour qu'elles soient dans l'intervalle (0, 1) : [^2] - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - ``` - -4. Maintenant, vous redimensionnez les données de test : [^2] - - ```python - test['load'] = scaler.transform(test) - ``` - -### Créer des données avec des étapes temporelles [^1] - -Pour le SVR, vous transformez les données d'entrée pour qu'elles soient de la forme `[batch, timesteps]`. So, you reshape the existing `train_data` and `test_data` de sorte qu'il y ait une nouvelle dimension qui fait référence aux étapes temporelles. - -```python -# Converting to numpy arrays -train_data = train.values -test_data = test.values -``` - -Pour cet exemple, nous prenons `timesteps = 5`. Ainsi, les entrées du modèle sont les données pour les 4 premières étapes temporelles, et la sortie sera les données pour la 5ème étape temporelle. - -```python -timesteps=5 -``` - -Conversion des données d'entraînement en tenseur 2D à l'aide de la compréhension de liste imbriquée : - -```python -train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] -train_data_timesteps.shape -``` - -```output -(1412, 5) -``` - -Conversion des données de test en tenseur 2D : - -```python -test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] -test_data_timesteps.shape -``` - -```output -(44, 5) -``` - -Sélection des entrées et sorties à partir des données d'entraînement et de test : - -```python -x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] -x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] - -print(x_train.shape, y_train.shape) -print(x_test.shape, y_test.shape) -``` - -```output -(1412, 4) (1412, 1) -(44, 4) (44, 1) -``` - -### Implémenter SVR [^1] - -Maintenant, il est temps d'implémenter SVR. Pour en savoir plus sur cette implémentation, vous pouvez consulter [cette documentation](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Pour notre implémentation, nous suivons ces étapes : - - 1. Définir le modèle en appelant la fonction `SVR()` and passing in the model hyperparameters: kernel, gamma, c and epsilon - 2. Prepare the model for the training data by calling the `fit()` function - 3. Make predictions calling the `predict()` - -Maintenant, nous créons un modèle SVR. Ici, nous utilisons le [noyau RBF](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) et fixons les hyperparamètres gamma, C et epsilon respectivement à 0.5, 10 et 0.05. - -```python -model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) -``` - -#### Ajuster le modèle sur les données d'entraînement [^1] - -```python -model.fit(x_train, y_train[:,0]) -``` - -```output -SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, - kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) -``` - -#### Faire des prédictions avec le modèle [^1] - -```python -y_train_pred = model.predict(x_train).reshape(-1,1) -y_test_pred = model.predict(x_test).reshape(-1,1) - -print(y_train_pred.shape, y_test_pred.shape) -``` - -```output -(1412, 1) (44, 1) -``` - -Vous avez construit votre SVR ! Maintenant, nous devons l'évaluer. - -### Évaluer votre modèle [^1] - -Pour l'évaluation, nous allons d'abord redimensionner les données à notre échelle originale. Ensuite, pour vérifier la performance, nous tracerons le graphique des séries temporelles originales et prédites, et nous imprimerons également le résultat MAPE. - -Redimensionnez la sortie prédite et originale : - -```python -# Scaling the predictions -y_train_pred = scaler.inverse_transform(y_train_pred) -y_test_pred = scaler.inverse_transform(y_test_pred) - -print(len(y_train_pred), len(y_test_pred)) -``` - -```python -# Scaling the original values -y_train = scaler.inverse_transform(y_train) -y_test = scaler.inverse_transform(y_test) - -print(len(y_train), len(y_test)) -``` - -#### Vérifier la performance du modèle sur les données d'entraînement et de test [^1] - -Nous extrayons les horodatages de l'ensemble de données pour les afficher sur l'axe des x de notre graphique. Notez que nous utilisons les premières ```timesteps-1``` valeurs comme entrée pour la première sortie, donc les horodatages pour la sortie commenceront après cela. - -```python -train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] -test_timestamps = energy[test_start_dt:].index[timesteps-1:] - -print(len(train_timestamps), len(test_timestamps)) -``` - -```output -1412 44 -``` - -Tracez les prédictions pour les données d'entraînement : - -```python -plt.figure(figsize=(25,6)) -plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.title("Training data prediction") -plt.show() -``` - -![training data prediction](../../../../translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.fr.png) - -Imprimez le MAPE pour les données d'entraînement - -```python -print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') -``` - -```output -MAPE for training data: 1.7195710200875551 % -``` - -Tracez les prédictions pour les données de test - -```python -plt.figure(figsize=(10,3)) -plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.show() -``` - -![testing data prediction](../../../../translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.fr.png) - -Imprimez le MAPE pour les données de test - -```python -print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') -``` - -```output -MAPE for testing data: 1.2623790187854018 % -``` - -🏆 Vous avez obtenu un très bon résultat sur l'ensemble de données de test ! - -### Vérifier la performance du modèle sur l'ensemble de données complet [^1] - -```python -# Extracting load values as numpy array -data = energy.copy().values - -# Scaling -data = scaler.transform(data) - -# Transforming to 2D tensor as per model input requirement -data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] -print("Tensor shape: ", data_timesteps.shape) - -# Selecting inputs and outputs from data -X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] -print("X shape: ", X.shape,"\nY shape: ", Y.shape) -``` - -```output -Tensor shape: (26300, 5) -X shape: (26300, 4) -Y shape: (26300, 1) -``` - -```python -# Make model predictions -Y_pred = model.predict(X).reshape(-1,1) - -# Inverse scale and reshape -Y_pred = scaler.inverse_transform(Y_pred) -Y = scaler.inverse_transform(Y) -``` - -```python -plt.figure(figsize=(30,8)) -plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(Y_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.show() -``` - -![full data prediction](../../../../translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.fr.png) - -```python -print('MAPE: ', mape(Y_pred, Y)*100, '%') -``` - -```output -MAPE: 2.0572089029888656 % -``` - -🏆 De très beaux graphiques, montrant un modèle avec une bonne précision. Bien joué ! - ---- - -## 🚀Défi - -- Essayez d'ajuster les hyperparamètres (gamma, C, epsilon) lors de la création du modèle et évaluez-les sur les données pour voir quel ensemble d'hyperparamètres donne les meilleurs résultats sur les données de test. Pour en savoir plus sur ces hyperparamètres, vous pouvez consulter le document [ici](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). -- Essayez d'utiliser différentes fonctions noyau pour le modèle et analysez leurs performances sur l'ensemble de données. Un document utile peut être trouvé [ici](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). -- Essayez d'utiliser différentes valeurs pour `timesteps` afin que le modèle puisse remonter dans le temps pour faire des prédictions. - -## [Quiz post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/) - -## Revue et auto-apprentissage - -Cette leçon avait pour but d'introduire l'application de SVR pour la prévision de séries temporelles. Pour en savoir plus sur SVR, vous pouvez consulter [ce blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Cette [documentation sur scikit-learn](https://scikit-learn.org/stable/modules/svm.html) fournit une explication plus complète sur les SVM en général, [les SVR](https://scikit-learn.org/stable/modules/svm.html#regression) et également d'autres détails d'implémentation tels que les différentes [fonctions noyau](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) qui peuvent être utilisées, ainsi que leurs paramètres. - -## Devoir - -[Un nouveau modèle SVR](assignment.md) - -## Crédits - -[^1]: Le texte, le code et la sortie de cette section ont été contribué par [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) -[^2]: Le texte, le code et la sortie de cette section ont été pris de [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/3-SVR/assignment.md b/translations/fr/7-TimeSeries/3-SVR/assignment.md deleted file mode 100644 index 7e5b9bc0..00000000 --- a/translations/fr/7-TimeSeries/3-SVR/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Un nouveau modèle SVR - -## Instructions [^1] - -Maintenant que vous avez construit un modèle SVR, créez-en un nouveau avec des données fraîches (essayez l'un de [ces ensembles de données de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Annoter votre travail dans un carnet, visualiser les données et votre modèle, et tester sa précision à l'aide de graphiques appropriés et du MAPE. Essayez également de modifier les différents hyperparamètres et d'utiliser différentes valeurs pour les pas de temps. - -## Critères [^1] - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| --------- | ---------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------- | -| | Un carnet est présenté avec un modèle SVR construit, testé et expliqué avec des visualisations et une précision indiquée. | Le carnet présenté n'est pas annoté ou contient des erreurs. | Un carnet incomplet est présenté | - -[^1]: Le texte de cette section est basé sur l'[assignment from ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/7-TimeSeries/README.md b/translations/fr/7-TimeSeries/README.md deleted file mode 100644 index f29b40c4..00000000 --- a/translations/fr/7-TimeSeries/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# Introduction à la prévision des séries temporelles - -Qu'est-ce que la prévision des séries temporelles ? Il s'agit de prédire des événements futurs en analysant les tendances du passé. - -## Sujet régional : utilisation mondiale de l'électricité ✨ - -Dans ces deux leçons, vous serez introduit à la prévision des séries temporelles, un domaine de l'apprentissage automatique relativement moins connu, mais qui est néanmoins extrêmement précieux pour les applications industrielles et commerciales, entre autres. Bien que les réseaux neuronaux puissent être utilisés pour améliorer l'utilité de ces modèles, nous les étudierons dans le contexte de l'apprentissage automatique classique, car les modèles aident à prédire la performance future en se basant sur le passé. - -Notre focus régional est l'utilisation électrique dans le monde, un ensemble de données intéressant pour apprendre à prévoir la consommation future d'énergie en fonction des schémas de charge passés. Vous pouvez voir comment ce type de prévision peut être extrêmement utile dans un environnement commercial. - -![réseau électrique](../../../translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.fr.jpg) - -Photo de [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) de tours électriques sur une route au Rajasthan sur [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) - -## Leçons - -1. [Introduction à la prévision des séries temporelles](1-Introduction/README.md) -2. [Construction de modèles de séries temporelles ARIMA](2-ARIMA/README.md) -3. [Construction d'un régressseur à vecteurs de support pour la prévision des séries temporelles](3-SVR/README.md) - -## Crédits - -"Introduction à la prévision des séries temporelles" a été écrit avec ⚡️ par [Francesca Lazzeri](https://twitter.com/frlazzeri) et [Jen Looper](https://twitter.com/jenlooper). Les notebooks sont apparus en ligne pour la première fois dans le [repo Azure "Deep Learning For Time Series"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) initialement écrit par Francesca Lazzeri. La leçon SVR a été écrite par [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/1-QLearning/README.md b/translations/fr/8-Reinforcement/1-QLearning/README.md deleted file mode 100644 index f248beda..00000000 --- a/translations/fr/8-Reinforcement/1-QLearning/README.md +++ /dev/null @@ -1,59 +0,0 @@ -## Vérification de la politique - -Puisque la Q-Table répertorie l'« attractivité » de chaque action à chaque état, il est assez facile de l'utiliser pour définir la navigation efficace dans notre monde. Dans le cas le plus simple, nous pouvons sélectionner l'action correspondant à la valeur la plus élevée de la Q-Table : (code block 9) - -```python -def qpolicy_strict(m): - x,y = m.human - v = probs(Q[x,y]) - a = list(actions)[np.argmax(v)] - return a - -walk(m,qpolicy_strict) -``` - -> Si vous essayez le code ci-dessus plusieurs fois, vous remarquerez peut-être qu'il "se bloque" parfois, et que vous devez appuyer sur le bouton STOP dans le notebook pour l'interrompre. Cela se produit car il peut y avoir des situations où deux états "pointent" l'un vers l'autre en termes de valeur Q optimale, auquel cas les agents finissent par se déplacer indéfiniment entre ces états. - -## 🚀Défi - -> **Tâche 1 :** Modifiez le `walk` function to limit the maximum length of path by a certain number of steps (say, 100), and watch the code above return this value from time to time. - -> **Task 2:** Modify the `walk` function so that it does not go back to the places where it has already been previously. This will prevent `walk` from looping, however, the agent can still end up being "trapped" in a location from which it is unable to escape. - -## Navigation - -A better navigation policy would be the one that we used during training, which combines exploitation and exploration. In this policy, we will select each action with a certain probability, proportional to the values in the Q-Table. This strategy may still result in the agent returning back to a position it has already explored, but, as you can see from the code below, it results in a very short average path to the desired location (remember that `print_statistics` pour exécuter la simulation 100 fois : (code block 10) - -```python -def qpolicy(m): - x,y = m.human - v = probs(Q[x,y]) - a = random.choices(list(actions),weights=v)[0] - return a - -print_statistics(qpolicy) -``` - -Après avoir exécuté ce code, vous devriez obtenir une longueur de chemin moyenne beaucoup plus petite qu'auparavant, dans la plage de 3 à 6. - -## Enquête sur le processus d'apprentissage - -Comme nous l'avons mentionné, le processus d'apprentissage est un équilibre entre exploration et exploitation des connaissances acquises sur la structure de l'espace problème. Nous avons vu que les résultats de l'apprentissage (la capacité à aider un agent à trouver un chemin court vers l'objectif) se sont améliorés, mais il est également intéressant d'observer comment la longueur moyenne du chemin se comporte pendant le processus d'apprentissage : - -Les apprentissages peuvent être résumés comme suit : - -- **La longueur moyenne du chemin augmente**. Ce que nous voyons ici, c'est qu'au début, la longueur moyenne du chemin augmente. Cela est probablement dû au fait que lorsque nous ne savons rien sur l'environnement, nous avons tendance à nous retrouver coincés dans de mauvais états, comme l'eau ou le loup. À mesure que nous en apprenons davantage et commençons à utiliser ces connaissances, nous pouvons explorer l'environnement plus longtemps, mais nous ne savons toujours pas très bien où se trouvent les pommes. - -- **La longueur du chemin diminue, à mesure que nous apprenons davantage**. Une fois que nous avons suffisamment appris, il devient plus facile pour l'agent d'atteindre l'objectif, et la longueur du chemin commence à diminuer. Cependant, nous restons ouverts à l'exploration, donc nous nous écartons souvent du meilleur chemin et explorons de nouvelles options, rendant le chemin plus long que l'optimal. - -- **Augmentation brutale de la longueur**. Ce que nous observons également sur ce graphique, c'est qu'à un certain moment, la longueur a augmenté de manière brutale. Cela indique la nature stochastique du processus, et que nous pouvons à un moment "gâcher" les coefficients de la Q-Table en les écrasant avec de nouvelles valeurs. Cela devrait idéalement être minimisé en diminuant le taux d'apprentissage (par exemple, vers la fin de l'entraînement, nous n'ajustons les valeurs de la Q-Table que d'une petite valeur). - -Dans l'ensemble, il est important de se rappeler que le succès et la qualité du processus d'apprentissage dépendent fortement des paramètres, tels que le taux d'apprentissage, la décote du taux d'apprentissage et le facteur d'actualisation. Ceux-ci sont souvent appelés **hyperparamètres**, pour les distinguer des **paramètres**, que nous optimisons pendant l'entraînement (par exemple, les coefficients de la Q-Table). Le processus de recherche des meilleures valeurs d'hyperparamètres est appelé **optimisation des hyperparamètres**, et cela mérite un sujet à part entière. - -## [Quiz post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) - -## Devoir -[Un monde plus réaliste](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autorisée. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/1-QLearning/assignment.md b/translations/fr/8-Reinforcement/1-QLearning/assignment.md deleted file mode 100644 index a51a9d23..00000000 --- a/translations/fr/8-Reinforcement/1-QLearning/assignment.md +++ /dev/null @@ -1,28 +0,0 @@ -# Un Monde Plus Réaliste - -Dans notre situation, Peter pouvait se déplacer presque sans se fatiguer ni avoir faim. Dans un monde plus réaliste, il devait s'asseoir et se reposer de temps en temps, et aussi se nourrir. Rendons notre monde plus réaliste en mettant en œuvre les règles suivantes : - -1. En se déplaçant d'un endroit à un autre, Peter perd de **l'énergie** et accumule de la **fatigue**. -2. Peter peut regagner de l'énergie en mangeant des pommes. -3. Peter peut se débarrasser de sa fatigue en se reposant sous un arbre ou sur l'herbe (c'est-à-dire en se déplaçant vers un emplacement avec un arbre ou de l'herbe - champ vert). -4. Peter doit trouver et tuer le loup. -5. Pour tuer le loup, Peter doit avoir certains niveaux d'énergie et de fatigue, sinon il perd la bataille. -## Instructions - -Utilisez le [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) original comme point de départ pour votre solution. - -Modifiez la fonction de récompense ci-dessus selon les règles du jeu, exécutez l'algorithme d'apprentissage par renforcement pour apprendre la meilleure stratégie pour gagner le jeu, et comparez les résultats de la marche aléatoire avec votre algorithme en termes de nombre de jeux gagnés et perdus. - -> **Note** : Dans votre nouveau monde, l'état est plus complexe et, en plus de la position humaine, inclut également les niveaux de fatigue et d'énergie. Vous pouvez choisir de représenter l'état sous forme de tuple (Board, énergie, fatigue), ou de définir une classe pour l'état (vous pouvez également vouloir en dériver une de `Board`), ou même modifier la classe `Board` originale dans [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). - -Dans votre solution, veuillez garder le code responsable de la stratégie de marche aléatoire et comparez les résultats de votre algorithme avec la marche aléatoire à la fin. - -> **Note** : Vous devrez peut-être ajuster les hyperparamètres pour que cela fonctionne, en particulier le nombre d'époques. Étant donné que le succès du jeu (combattre le loup) est un événement rare, vous pouvez vous attendre à un temps d'entraînement beaucoup plus long. -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -| | Un notebook est présenté avec la définition des nouvelles règles du monde, l'algorithme Q-Learning et quelques explications textuelles. Q-Learning est capable d'améliorer significativement les résultats par rapport à la marche aléatoire. | Le notebook est présenté, Q-Learning est implémenté et améliore les résultats par rapport à la marche aléatoire, mais pas de manière significative ; ou le notebook est mal documenté et le code n'est pas bien structuré | Une certaine tentative de redéfinir les règles du monde est faite, mais l'algorithme Q-Learning ne fonctionne pas, ou la fonction de récompense n'est pas entièrement définie. | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/fr/8-Reinforcement/1-QLearning/solution/Julia/README.md deleted file mode 100644 index 7af9d572..00000000 --- a/translations/fr/8-Reinforcement/1-QLearning/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/fr/8-Reinforcement/1-QLearning/solution/R/README.md deleted file mode 100644 index e1a3565b..00000000 --- a/translations/fr/8-Reinforcement/1-QLearning/solution/R/README.md +++ /dev/null @@ -1,6 +0,0 @@ -ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/2-Gym/README.md b/translations/fr/8-Reinforcement/2-Gym/README.md deleted file mode 100644 index 1e2efea9..00000000 --- a/translations/fr/8-Reinforcement/2-Gym/README.md +++ /dev/null @@ -1,342 +0,0 @@ -# Patinage CartPole - -Le problème que nous avons résolu dans la leçon précédente peut sembler être un problème trivial, pas vraiment applicable à des scénarios de la vie réelle. Ce n'est pas le cas, car de nombreux problèmes du monde réel partagent également ce scénario - y compris le jeu d'échecs ou de go. Ils sont similaires, car nous avons également un plateau avec des règles données et un **état discret**. - -## [Quiz pré-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/47/) - -## Introduction - -Dans cette leçon, nous appliquerons les mêmes principes de Q-Learning à un problème avec un **état continu**, c'est-à-dire un état qui est défini par un ou plusieurs nombres réels. Nous allons traiter le problème suivant : - -> **Problème** : Si Peter veut échapper au loup, il doit être capable de se déplacer plus vite. Nous verrons comment Peter peut apprendre à patiner, en particulier, à garder son équilibre, en utilisant le Q-Learning. - -![La grande évasion !](../../../../translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.fr.png) - -> Peter et ses amis font preuve de créativité pour échapper au loup ! Image par [Jen Looper](https://twitter.com/jenlooper) - -Nous utiliserons une version simplifiée de l'équilibre connue sous le nom de problème **CartPole**. Dans le monde de cartpole, nous avons un curseur horizontal qui peut se déplacer à gauche ou à droite, et l'objectif est de maintenir un poteau vertical au sommet du curseur. - -## Prérequis - -Dans cette leçon, nous utiliserons une bibliothèque appelée **OpenAI Gym** pour simuler différents **environnements**. Vous pouvez exécuter le code de cette leçon localement (par exemple, depuis Visual Studio Code), auquel cas la simulation s'ouvrira dans une nouvelle fenêtre. Lorsque vous exécutez le code en ligne, vous devrez peut-être apporter quelques modifications au code, comme décrit [ici](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). - -## OpenAI Gym - -Dans la leçon précédente, les règles du jeu et l'état étaient donnés par la classe `Board` que nous avons définie nous-mêmes. Ici, nous utiliserons un **environnement de simulation** spécial, qui simulera la physique derrière l'équilibre du poteau. L'un des environnements de simulation les plus populaires pour entraîner des algorithmes d'apprentissage par renforcement est appelé [Gym](https://gym.openai.com/), qui est maintenu par [OpenAI](https://openai.com/). En utilisant ce gym, nous pouvons créer différents **environnements**, allant de la simulation de cartpole aux jeux Atari. - -> **Note** : Vous pouvez voir d'autres environnements disponibles dans OpenAI Gym [ici](https://gym.openai.com/envs/#classic_control). - -Tout d'abord, installons le gym et importons les bibliothèques nécessaires (bloc de code 1) : - -```python -import sys -!{sys.executable} -m pip install gym - -import gym -import matplotlib.pyplot as plt -import numpy as np -import random -``` - -## Exercice - initialiser un environnement cartpole - -Pour travailler avec un problème d'équilibre de cartpole, nous devons initialiser l'environnement correspondant. Chaque environnement est associé à un : - -- **Espace d'observation** qui définit la structure des informations que nous recevons de l'environnement. Pour le problème cartpole, nous recevons la position du poteau, la vitesse et d'autres valeurs. - -- **Espace d'action** qui définit les actions possibles. Dans notre cas, l'espace d'action est discret et se compose de deux actions - **gauche** et **droite**. (bloc de code 2) - -1. Pour initialiser, tapez le code suivant : - - ```python - env = gym.make("CartPole-v1") - print(env.action_space) - print(env.observation_space) - print(env.action_space.sample()) - ``` - -Pour voir comment l'environnement fonctionne, exécutons une courte simulation pendant 100 étapes. À chaque étape, nous fournissons l'une des actions à effectuer - dans cette simulation, nous sélectionnons simplement une action au hasard dans `action_space`. - -1. Exécutez le code ci-dessous et voyez ce que cela donne. - - ✅ Rappelez-vous qu'il est préférable d'exécuter ce code sur une installation Python locale ! (bloc de code 3) - - ```python - env.reset() - - for i in range(100): - env.render() - env.step(env.action_space.sample()) - env.close() - ``` - - Vous devriez voir quelque chose de similaire à cette image : - - ![cartpole non équilibré](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) - -1. Pendant la simulation, nous devons obtenir des observations afin de décider comment agir. En fait, la fonction d'étape renvoie les observations actuelles, une fonction de récompense et le drapeau done qui indique s'il est judicieux de continuer la simulation ou non : (bloc de code 4) - - ```python - env.reset() - - done = False - while not done: - env.render() - obs, rew, done, info = env.step(env.action_space.sample()) - print(f"{obs} -> {rew}") - env.close() - ``` - - Vous finirez par voir quelque chose comme ceci dans la sortie du notebook : - - ```text - [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 - [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 - [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 - [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 - [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 - ... - [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 - [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 - ``` - - Le vecteur d'observation qui est renvoyé à chaque étape de la simulation contient les valeurs suivantes : - - Position du chariot - - Vitesse du chariot - - Angle du poteau - - Taux de rotation du poteau - -1. Obtenez la valeur minimale et maximale de ces nombres : (bloc de code 5) - - ```python - print(env.observation_space.low) - print(env.observation_space.high) - ``` - - Vous remarquerez également que la valeur de la récompense à chaque étape de simulation est toujours 1. Cela est dû au fait que notre objectif est de survivre le plus longtemps possible, c'est-à-dire de maintenir le poteau dans une position raisonnablement verticale pendant la plus longue période de temps. - - ✅ En fait, la simulation CartPole est considérée comme résolue si nous parvenons à obtenir une récompense moyenne de 195 sur 100 essais consécutifs. - -## Discrétisation de l'état - -Dans le Q-Learning, nous devons construire une Q-Table qui définit quoi faire à chaque état. Pour pouvoir le faire, nous avons besoin que l'état soit **discret**, plus précisément, il doit contenir un nombre fini de valeurs discrètes. Ainsi, nous devons d'une manière ou d'une autre **discrétiser** nos observations, en les mappant à un ensemble fini d'états. - -Il existe plusieurs façons de procéder : - -- **Diviser en bacs**. Si nous connaissons l'intervalle d'une certaine valeur, nous pouvons diviser cet intervalle en un certain nombre de **bacs**, puis remplacer la valeur par le numéro du bac auquel elle appartient. Cela peut être fait en utilisant la méthode numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). Dans ce cas, nous connaîtrons précisément la taille de l'état, car elle dépendra du nombre de bacs que nous sélectionnons pour la numérisation. - -✅ Nous pouvons utiliser l'interpolation linéaire pour amener les valeurs à un certain intervalle fini (disons, de -20 à 20), puis convertir les nombres en entiers en les arrondissant. Cela nous donne un peu moins de contrôle sur la taille de l'état, surtout si nous ne connaissons pas les plages exactes des valeurs d'entrée. Par exemple, dans notre cas, 2 des 4 valeurs n'ont pas de limites supérieures/inférieures, ce qui peut entraîner un nombre infini d'états. - -Dans notre exemple, nous allons opter pour la deuxième approche. Comme vous le remarquerez plus tard, malgré l'absence de limites supérieures/inférieures, ces valeurs prennent rarement des valeurs en dehors de certains intervalles finis, donc ces états avec des valeurs extrêmes seront très rares. - -1. Voici la fonction qui prendra l'observation de notre modèle et produira un tuple de 4 valeurs entières : (bloc de code 6) - - ```python - def discretize(x): - return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) - ``` - -1. Explorons également une autre méthode de discrétisation utilisant des bacs : (bloc de code 7) - - ```python - def create_bins(i,num): - return np.arange(num+1)*(i[1]-i[0])/num+i[0] - - print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) - - ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter - nbins = [20,20,10,10] # number of bins for each parameter - bins = [create_bins(ints[i],nbins[i]) for i in range(4)] - - def discretize_bins(x): - return tuple(np.digitize(x[i],bins[i]) for i in range(4)) - ``` - -1. Exécutons maintenant une courte simulation et observons ces valeurs d'environnement discrètes. N'hésitez pas à essayer à la fois `discretize` and `discretize_bins` et voir s'il y a une différence. - - ✅ discretize_bins renvoie le numéro du bac, qui est basé sur 0. Ainsi, pour des valeurs de variable d'entrée autour de 0, cela renvoie le numéro du milieu de l'intervalle (10). Dans discretize, nous ne nous sommes pas souciés de l'intervalle des valeurs de sortie, leur permettant d'être négatives, donc les valeurs d'état ne sont pas décalées, et 0 correspond à 0. (bloc de code 8) - - ```python - env.reset() - - done = False - while not done: - #env.render() - obs, rew, done, info = env.step(env.action_space.sample()) - #print(discretize_bins(obs)) - print(discretize(obs)) - env.close() - ``` - - ✅ Décommentez la ligne commençant par env.render si vous voulez voir comment l'environnement s'exécute. Sinon, vous pouvez l'exécuter en arrière-plan, ce qui est plus rapide. Nous utiliserons cette exécution "invisible" lors de notre processus de Q-Learning. - -## La structure de la Q-Table - -Dans notre leçon précédente, l'état était une simple paire de nombres de 0 à 8, et il était donc pratique de représenter la Q-Table par un tenseur numpy de forme 8x8x2. Si nous utilisons la discrétisation par bacs, la taille de notre vecteur d'état est également connue, donc nous pouvons utiliser la même approche et représenter l'état par un tableau de forme 20x20x10x10x2 (ici 2 est la dimension de l'espace d'action, et les premières dimensions correspondent au nombre de bacs que nous avons sélectionnés pour chacun des paramètres de l'espace d'observation). - -Cependant, parfois, les dimensions précises de l'espace d'observation ne sont pas connues. Dans le cas de la fonction `discretize`, nous ne pouvons jamais être sûrs que notre état reste dans certaines limites, car certaines des valeurs d'origine ne sont pas bornées. Ainsi, nous utiliserons une approche légèrement différente et représenterons la Q-Table par un dictionnaire. - -1. Utilisez la paire *(état, action)* comme clé du dictionnaire, et la valeur correspondra à la valeur d'entrée de la Q-Table. (bloc de code 9) - - ```python - Q = {} - actions = (0,1) - - def qvalues(state): - return [Q.get((state,a),0) for a in actions] - ``` - - Ici, nous définissons également une fonction `qvalues()`, qui renvoie une liste des valeurs de la Q-Table pour un état donné qui correspond à toutes les actions possibles. Si l'entrée n'est pas présente dans la Q-Table, nous renverrons 0 par défaut. - -## Commençons le Q-Learning - -Maintenant, nous sommes prêts à apprendre à Peter à équilibrer ! - -1. Tout d'abord, définissons quelques hyperparamètres : (bloc de code 10) - - ```python - # hyperparameters - alpha = 0.3 - gamma = 0.9 - epsilon = 0.90 - ``` - - Ici, `alpha` is the **learning rate** that defines to which extent we should adjust the current values of Q-Table at each step. In the previous lesson we started with 1, and then decreased `alpha` to lower values during training. In this example we will keep it constant just for simplicity, and you can experiment with adjusting `alpha` values later. - - `gamma` is the **discount factor** that shows to which extent we should prioritize future reward over current reward. - - `epsilon` is the **exploration/exploitation factor** that determines whether we should prefer exploration to exploitation or vice versa. In our algorithm, we will in `epsilon` percent of the cases select the next action according to Q-Table values, and in the remaining number of cases we will execute a random action. This will allow us to explore areas of the search space that we have never seen before. - - ✅ In terms of balancing - choosing random action (exploration) would act as a random punch in the wrong direction, and the pole would have to learn how to recover the balance from those "mistakes" - -### Improve the algorithm - -We can also make two improvements to our algorithm from the previous lesson: - -- **Calculate average cumulative reward**, over a number of simulations. We will print the progress each 5000 iterations, and we will average out our cumulative reward over that period of time. It means that if we get more than 195 point - we can consider the problem solved, with even higher quality than required. - -- **Calculate maximum average cumulative result**, `Qmax`, and we will store the Q-Table corresponding to that result. When you run the training you will notice that sometimes the average cumulative result starts to drop, and we want to keep the values of Q-Table that correspond to the best model observed during training. - -1. Collect all cumulative rewards at each simulation at `rewards` vecteur pour un traçage ultérieur. (bloc de code 11) - - ```python - def probs(v,eps=1e-4): - v = v-v.min()+eps - v = v/v.sum() - return v - - Qmax = 0 - cum_rewards = [] - rewards = [] - for epoch in range(100000): - obs = env.reset() - done = False - cum_reward=0 - # == do the simulation == - while not done: - s = discretize(obs) - if random.random() Qmax: - Qmax = np.average(cum_rewards) - Qbest = Q - cum_rewards=[] - ``` - -Ce que vous pouvez remarquer à partir de ces résultats : - -- **Proche de notre objectif**. Nous sommes très proches d'atteindre l'objectif d'obtenir 195 récompenses cumulées sur 100+ exécutions consécutives de la simulation, ou nous l'avons peut-être déjà atteint ! Même si nous obtenons des chiffres plus petits, nous ne le savons toujours pas, car nous faisons la moyenne sur 5000 exécutions, et seulement 100 exécutions sont requises dans les critères formels. - -- **La récompense commence à diminuer**. Parfois, la récompense commence à diminuer, ce qui signifie que nous pouvons "détruire" les valeurs déjà apprises dans la Q-Table avec celles qui aggravent la situation. - -Cette observation est plus clairement visible si nous traçons les progrès de l'entraînement. - -## Traçage des progrès de l'entraînement - -Pendant l'entraînement, nous avons collecté la valeur de la récompense cumulée à chacune des itérations dans le vecteur `rewards`. Voici à quoi cela ressemble lorsque nous le traçons par rapport au numéro d'itération : - -```python -plt.plot(rewards) -``` - -![progrès brut](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.fr.png) - -À partir de ce graphique, il n'est pas possible de dire quoi que ce soit, car en raison de la nature du processus d'entraînement stochastique, la durée des sessions d'entraînement varie considérablement. Pour donner plus de sens à ce graphique, nous pouvons calculer la **moyenne mobile** sur une série d'expériences, disons 100. Cela peut être fait facilement en utilisant `np.convolve` : (bloc de code 12) - -```python -def running_average(x,window): - return np.convolve(x,np.ones(window)/window,mode='valid') - -plt.plot(running_average(rewards,100)) -``` - -![progrès de l'entraînement](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.fr.png) - -## Variation des hyperparamètres - -Pour rendre l'apprentissage plus stable, il est judicieux d'ajuster certains de nos hyperparamètres pendant l'entraînement. En particulier : - -- **Pour le taux d'apprentissage**, `alpha`, we may start with values close to 1, and then keep decreasing the parameter. With time, we will be getting good probability values in the Q-Table, and thus we should be adjusting them slightly, and not overwriting completely with new values. - -- **Increase epsilon**. We may want to increase the `epsilon` slowly, in order to explore less and exploit more. It probably makes sense to start with lower value of `epsilon`, et passez à presque 1. - -> **Tâche 1** : Jouez avec les valeurs des hyperparamètres et voyez si vous pouvez atteindre une récompense cumulative plus élevée. Obtenez-vous plus de 195 ? - -> **Tâche 2** : Pour résoudre formellement le problème, vous devez obtenir une récompense moyenne de 195 sur 100 exécutions consécutives. Mesurez cela pendant l'entraînement et assurez-vous que vous avez formellement résolu le problème ! - -## Voir le résultat en action - -Il serait intéressant de voir comment le modèle entraîné se comporte. Exécutons la simulation et suivons la même stratégie de sélection d'actions que pendant l'entraînement, en échantillonnant selon la distribution de probabilité dans la Q-Table : (bloc de code 13) - -```python -obs = env.reset() -done = False -while not done: - s = discretize(obs) - env.render() - v = probs(np.array(qvalues(s))) - a = random.choices(actions,weights=v)[0] - obs,_,done,_ = env.step(a) -env.close() -``` - -Vous devriez voir quelque chose comme ceci : - -![un cartpole équilibré](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) - ---- - -## 🚀Défi - -> **Tâche 3** : Ici, nous utilisions la copie finale de la Q-Table, qui peut ne pas être la meilleure. N'oubliez pas que nous avons stocké la Q-Table la plus performante dans `Qbest` variable! Try the same example with the best-performing Q-Table by copying `Qbest` over to `Q` and see if you notice the difference. - -> **Task 4**: Here we were not selecting the best action on each step, but rather sampling with corresponding probability distribution. Would it make more sense to always select the best action, with the highest Q-Table value? This can be done by using `np.argmax` fonction pour découvrir le numéro d'action correspondant à la valeur la plus élevée de la Q-Table. Implémentez cette stratégie et voyez si cela améliore l'équilibre. - -## [Quiz post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) - -## Devoir -[Entraînez une voiture de montagne](assignment.md) - -## Conclusion - -Nous avons maintenant appris comment entraîner des agents pour obtenir de bons résultats simplement en leur fournissant une fonction de récompense qui définit l'état souhaité du jeu, et en leur donnant l'occasion d'explorer intelligemment l'espace de recherche. Nous avons appliqué avec succès l'algorithme Q-Learning dans les cas d'environnements discrets et continus, mais avec des actions discrètes. - -Il est également important d'étudier des situations où l'état d'action est également continu, et lorsque l'espace d'observation est beaucoup plus complexe, comme l'image de l'écran de jeu Atari. Dans ces problèmes, nous devons souvent utiliser des techniques d'apprentissage automatique plus puissantes, telles que les réseaux neuronaux, afin d'obtenir de bons résultats. Ces sujets plus avancés sont le sujet de notre prochain cours d'IA plus avancé. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/2-Gym/assignment.md b/translations/fr/8-Reinforcement/2-Gym/assignment.md deleted file mode 100644 index 8ab418f3..00000000 --- a/translations/fr/8-Reinforcement/2-Gym/assignment.md +++ /dev/null @@ -1,47 +0,0 @@ -# Entraîner la Voiture de Montagne - -[OpenAI Gym](http://gym.openai.com) a été conçu de manière à ce que tous les environnements offrent la même API - c'est-à-dire les mêmes méthodes `reset`, `step` et `render`, ainsi que les mêmes abstractions de **espace d'action** et **espace d'observation**. Ainsi, il devrait être possible d'adapter les mêmes algorithmes d'apprentissage par renforcement à différents environnements avec des modifications de code minimales. - -## Un Environnement de Voiture de Montagne - -L'[environnement de la Voiture de Montagne](https://gym.openai.com/envs/MountainCar-v0/) contient une voiture coincée dans une vallée : -Vous êtes formé sur des données jusqu'en octobre 2023. - -L'objectif est de sortir de la vallée et de capturer le drapeau, en effectuant à chaque étape l'une des actions suivantes : - -| Valeur | Signification | -|---|---| -| 0 | Accélérer vers la gauche | -| 1 | Ne pas accélérer | -| 2 | Accélérer vers la droite | - -Le principal piège de ce problème est, cependant, que le moteur de la voiture n'est pas assez puissant pour gravir la montagne en un seul passage. Par conséquent, le seul moyen de réussir est de faire des allers-retours pour accumuler de l'élan. - -L'espace d'observation se compose de seulement deux valeurs : - -| Num | Observation | Min | Max | -|-----|--------------|-----|-----| -| 0 | Position de la voiture | -1.2| 0.6 | -| 1 | Vitesse de la voiture | -0.07 | 0.07 | - -Le système de récompense pour la voiture de montagne est plutôt délicat : - - * Une récompense de 0 est accordée si l'agent atteint le drapeau (position = 0.5) au sommet de la montagne. - * Une récompense de -1 est accordée si la position de l'agent est inférieure à 0.5. - -L'épisode se termine si la position de la voiture est supérieure à 0.5, ou si la durée de l'épisode est supérieure à 200. - -## Instructions - -Adaptez notre algorithme d'apprentissage par renforcement pour résoudre le problème de la voiture de montagne. Commencez avec le code existant [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), substituez le nouvel environnement, changez les fonctions de discrétisation d'état, et essayez de faire en sorte que l'algorithme existant s'entraîne avec des modifications de code minimales. Optimisez le résultat en ajustant les hyperparamètres. - -> **Note** : L'ajustement des hyperparamètres sera probablement nécessaire pour faire converger l'algorithme. - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| -------- | --------- | -------- | ----------------- | -| | L'algorithme Q-Learning est adapté avec succès de l'exemple CartPole, avec des modifications de code minimales, et est capable de résoudre le problème de capture du drapeau en moins de 200 étapes. | Un nouvel algorithme Q-Learning a été adopté depuis Internet, mais est bien documenté ; ou un algorithme existant a été adopté, mais n'atteint pas les résultats souhaités. | L'étudiant n'a pas réussi à adopter d'algorithme, mais a fait des progrès substantiels vers la solution (implémentation de la discrétisation d'état, structure de données Q-Table, etc.) | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle effectuée par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/fr/8-Reinforcement/2-Gym/solution/Julia/README.md deleted file mode 100644 index da661d79..00000000 --- a/translations/fr/8-Reinforcement/2-Gym/solution/Julia/README.md +++ /dev/null @@ -1,6 +0,0 @@ -Ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -Ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/2-Gym/solution/R/README.md b/translations/fr/8-Reinforcement/2-Gym/solution/R/README.md deleted file mode 100644 index 080b3028..00000000 --- a/translations/fr/8-Reinforcement/2-Gym/solution/R/README.md +++ /dev/null @@ -1,6 +0,0 @@ -ceci est un espace réservé temporaireVeuillez écrire la sortie de gauche à droite. - -ceci est un espace réservé temporaire - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/8-Reinforcement/README.md b/translations/fr/8-Reinforcement/README.md deleted file mode 100644 index e8e4d998..00000000 --- a/translations/fr/8-Reinforcement/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# Introduction à l'apprentissage par renforcement - -L'apprentissage par renforcement, RL, est considéré comme l'un des paradigmes fondamentaux de l'apprentissage automatique, aux côtés de l'apprentissage supervisé et de l'apprentissage non supervisé. Le RL est entièrement axé sur les décisions : prendre les bonnes décisions ou, du moins, apprendre de celles-ci. - -Imaginez que vous avez un environnement simulé comme le marché boursier. Que se passe-t-il si vous imposez une réglementation donnée ? A-t-elle un effet positif ou négatif ? Si quelque chose de négatif se produit, vous devez prendre ce _renforcement négatif_, en tirer des leçons et changer de cap. Si c'est un résultat positif, vous devez capitaliser sur ce _renforcement positif_. - -![peter and the wolf](../../../translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.fr.png) - -> Peter et ses amis doivent échapper au loup affamé ! Image par [Jen Looper](https://twitter.com/jenlooper) - -## Sujet régional : Pierre et le Loup (Russie) - -[Pierre et le Loup](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) est un conte musical écrit par un compositeur russe [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). C'est l'histoire du jeune pionnier Pierre, qui s'aventure courageusement hors de sa maison vers la clairière pour chasser le loup. Dans cette section, nous allons entraîner des algorithmes d'apprentissage automatique qui aideront Pierre : - -- **Explorer** les environs et construire une carte de navigation optimale -- **Apprendre** à utiliser un skateboard et à s'y équilibrer, afin de se déplacer plus rapidement. - -[![Pierre et le Loup](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 Cliquez sur l'image ci-dessus pour écouter Pierre et le Loup de Prokofiev - -## Apprentissage par renforcement - -Dans les sections précédentes, vous avez vu deux exemples de problèmes d'apprentissage automatique : - -- **Supervisé**, où nous avons des ensembles de données qui suggèrent des solutions types au problème que nous voulons résoudre. [Classification](../4-Classification/README.md) et [régression](../2-Regression/README.md) sont des tâches d'apprentissage supervisé. -- **Non supervisé**, où nous n'avons pas de données d'entraînement étiquetées. L'exemple principal de l'apprentissage non supervisé est [Clustering](../5-Clustering/README.md). - -Dans cette section, nous allons vous introduire à un nouveau type de problème d'apprentissage qui ne nécessite pas de données d'entraînement étiquetées. Il existe plusieurs types de tels problèmes : - -- **[Apprentissage semi-supervisé](https://wikipedia.org/wiki/Semi-supervised_learning)**, où nous avons beaucoup de données non étiquetées qui peuvent être utilisées pour préformer le modèle. -- **[Apprentissage par renforcement](https://wikipedia.org/wiki/Reinforcement_learning)**, dans lequel un agent apprend comment se comporter en réalisant des expériences dans un environnement simulé. - -### Exemple - jeu vidéo - -Supposons que vous souhaitiez apprendre à un ordinateur à jouer à un jeu, comme les échecs ou [Super Mario](https://wikipedia.org/wiki/Super_Mario). Pour que l'ordinateur puisse jouer à un jeu, nous devons lui faire prédire quel mouvement effectuer dans chacun des états du jeu. Bien que cela puisse sembler être un problème de classification, ce n'est pas le cas - car nous n'avons pas d'ensemble de données avec des états et des actions correspondantes. Bien que nous puissions avoir des données comme des parties d'échecs existantes ou des enregistrements de joueurs jouant à Super Mario, il est probable que ces données ne couvrent pas suffisamment un nombre assez large d'états possibles. - -Au lieu de chercher des données de jeu existantes, **l'apprentissage par renforcement** (RL) repose sur l'idée de *faire jouer l'ordinateur* de nombreuses fois et d'observer le résultat. Ainsi, pour appliquer l'apprentissage par renforcement, nous avons besoin de deux choses : - -- **Un environnement** et **un simulateur** qui nous permettent de jouer à un jeu plusieurs fois. Ce simulateur définirait toutes les règles du jeu ainsi que les états et actions possibles. - -- **Une fonction de récompense**, qui nous indiquerait à quel point nous avons bien joué à chaque mouvement ou partie. - -La principale différence entre les autres types d'apprentissage automatique et le RL est qu'en RL, nous ne savons généralement pas si nous gagnons ou perdons jusqu'à ce que nous terminions le jeu. Ainsi, nous ne pouvons pas dire si un certain mouvement à lui seul est bon ou non - nous ne recevons une récompense qu'à la fin du jeu. Et notre objectif est de concevoir des algorithmes qui nous permettront de former un modèle dans des conditions d'incertitude. Nous allons apprendre un algorithme de RL appelé **Q-learning**. - -## Leçons - -1. [Introduction à l'apprentissage par renforcement et Q-Learning](1-QLearning/README.md) -2. [Utiliser un environnement de simulation gym](2-Gym/README.md) - -## Crédits - -"Introduction à l'apprentissage par renforcement" a été écrit avec ♥️ par [Dmitry Soshnikov](http://soshnikov.com) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/9-Real-World/1-Applications/README.md b/translations/fr/9-Real-World/1-Applications/README.md deleted file mode 100644 index 74ea8828..00000000 --- a/translations/fr/9-Real-World/1-Applications/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# Postscript : L'apprentissage automatique dans le monde réel - -![Résumé de l'apprentissage automatique dans le monde réel dans un sketchnote](../../../../translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.fr.png) -> Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) - -Dans ce programme, vous avez appris de nombreuses façons de préparer des données pour l'entraînement et de créer des modèles d'apprentissage automatique. Vous avez construit une série de modèles classiques de régression, de clustering, de classification, de traitement du langage naturel et de séries temporelles. Félicitations ! Maintenant, vous vous demandez peut-être à quoi cela sert... quelles sont les applications réelles de ces modèles ? - -Bien qu'un grand intérêt de l'industrie ait été suscité par l'IA, qui utilise généralement l'apprentissage profond, il existe encore des applications précieuses pour les modèles d'apprentissage automatique classiques. Vous pourriez même utiliser certaines de ces applications aujourd'hui ! Dans cette leçon, vous explorerez comment huit secteurs différents et domaines d'expertise utilisent ces types de modèles pour rendre leurs applications plus performantes, fiables, intelligentes et précieuses pour les utilisateurs. - -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) - -## 💰 Finance - -Le secteur financier offre de nombreuses opportunités pour l'apprentissage automatique. De nombreux problèmes dans ce domaine peuvent être modélisés et résolus en utilisant l'apprentissage automatique. - -### Détection de fraude par carte de crédit - -Nous avons appris à propos du [clustering k-means](../../5-Clustering/2-K-Means/README.md) plus tôt dans le cours, mais comment peut-il être utilisé pour résoudre des problèmes liés à la fraude par carte de crédit ? - -Le clustering k-means est utile lors d'une technique de détection de fraude par carte de crédit appelée **détection d'anomalies**. Les anomalies, ou écarts dans les observations d'un ensemble de données, peuvent nous indiquer si une carte de crédit est utilisée normalement ou si quelque chose d'inhabituel se produit. Comme le montre l'article lié ci-dessous, vous pouvez trier les données de carte de crédit en utilisant un algorithme de clustering k-means et attribuer chaque transaction à un cluster en fonction de son caractère d'anomalie. Ensuite, vous pouvez évaluer les clusters les plus risqués pour les transactions frauduleuses par rapport aux transactions légitimes. -[Référence](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) - -### Gestion de patrimoine - -Dans la gestion de patrimoine, un individu ou une entreprise gère des investissements au nom de ses clients. Leur travail consiste à maintenir et à accroître la richesse à long terme, il est donc essentiel de choisir des investissements qui performe bien. - -Une façon d'évaluer la performance d'un investissement particulier est à travers la régression statistique. La [régression linéaire](../../2-Regression/1-Tools/README.md) est un outil précieux pour comprendre comment un fonds performe par rapport à un certain indice de référence. Nous pouvons également déduire si les résultats de la régression sont statistiquement significatifs ou dans quelle mesure ils affecteraient les investissements d'un client. Vous pourriez même approfondir votre analyse en utilisant la régression multiple, où des facteurs de risque supplémentaires peuvent être pris en compte. Pour un exemple de la façon dont cela fonctionnerait pour un fonds spécifique, consultez l'article ci-dessous sur l'évaluation de la performance des fonds à l'aide de la régression. -[Référence](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) - -## 🎓 Éducation - -Le secteur éducatif est également un domaine très intéressant où l'apprentissage automatique peut être appliqué. Il existe des problèmes intéressants à résoudre, comme la détection de tricheries lors des tests ou des essais, ou la gestion des biais, qu'ils soient intentionnels ou non, dans le processus de correction. - -### Prédiction du comportement des étudiants - -[Coursera](https://coursera.com), un fournisseur de cours en ligne, a un excellent blog technique où ils discutent de nombreuses décisions d'ingénierie. Dans cette étude de cas, ils ont tracé une ligne de régression pour essayer d'explorer toute corrélation entre un faible score NPS (Net Promoter Score) et la rétention ou l'abandon des cours. -[Référence](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) - -### Atténuation des biais - -[Grammarly](https://grammarly.com), un assistant d'écriture qui vérifie les erreurs d'orthographe et de grammaire, utilise des systèmes sophistiqués de [traitement du langage naturel](../../6-NLP/README.md) dans ses produits. Ils ont publié une étude de cas intéressante dans leur blog technique sur la manière dont ils ont traité le biais de genre dans l'apprentissage automatique, dont vous avez entendu parler dans notre [leçon d'introduction à l'équité](../../1-Introduction/3-fairness/README.md). -[Référence](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) - -## 👜 Vente au détail - -Le secteur de la vente au détail peut certainement bénéficier de l'utilisation de l'apprentissage automatique, que ce soit pour créer une meilleure expérience client ou pour gérer les stocks de manière optimale. - -### Personnalisation du parcours client - -Chez Wayfair, une entreprise qui vend des articles pour la maison comme des meubles, aider les clients à trouver les bons produits en fonction de leurs goûts et de leurs besoins est primordial. Dans cet article, des ingénieurs de l'entreprise décrivent comment ils utilisent l'apprentissage automatique et le traitement du langage naturel pour "afficher les bons résultats pour les clients". Notamment, leur moteur d'intention de requête a été conçu pour utiliser l'extraction d'entités, l'entraînement de classificateurs, l'extraction d'actifs et d'opinions, ainsi que le marquage de sentiment sur les avis des clients. C'est un cas classique de la façon dont le traitement du langage naturel fonctionne dans le commerce en ligne. -[Référence](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) - -### Gestion des stocks - -Des entreprises innovantes et agiles comme [StitchFix](https://stitchfix.com), un service de boîte qui expédie des vêtements aux consommateurs, s'appuient fortement sur l'apprentissage automatique pour les recommandations et la gestion des stocks. En fait, leurs équipes de stylisme collaborent avec leurs équipes de merchandising : "l'un de nos data scientists a expérimenté un algorithme génétique et l'a appliqué à l'habillement pour prédire quel serait un vêtement réussi qui n'existe pas aujourd'hui. Nous avons présenté cela à l'équipe de merchandising et maintenant ils peuvent l'utiliser comme un outil." -[Référence](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) - -## 🏥 Santé - -Le secteur de la santé peut tirer parti de l'apprentissage automatique pour optimiser les tâches de recherche et également résoudre des problèmes logistiques tels que la réadmission des patients ou l'arrêt de la propagation des maladies. - -### Gestion des essais cliniques - -La toxicité dans les essais cliniques est une préoccupation majeure pour les fabricants de médicaments. Quelle quantité de toxicité est tolérable ? Dans cette étude, l'analyse de diverses méthodes d'essais cliniques a conduit au développement d'une nouvelle approche pour prédire les résultats des essais cliniques. Plus précisément, ils ont pu utiliser des forêts aléatoires pour produire un [classificateur](../../4-Classification/README.md) capable de distinguer entre des groupes de médicaments. -[Référence](https://www.sciencedirect.com/science/article/pii/S2451945616302914) - -### Gestion des réadmissions hospitalières - -Les soins hospitaliers sont coûteux, surtout lorsque les patients doivent être réadmis. Cet article discute d'une entreprise qui utilise l'apprentissage automatique pour prédire le potentiel de réadmission en utilisant des algorithmes de [clustering](../../5-Clustering/README.md). Ces clusters aident les analystes à "découvrir des groupes de réadmissions qui peuvent partager une cause commune". -[Référence](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) - -### Gestion des maladies - -La récente pandémie a mis en lumière les façons dont l'apprentissage automatique peut aider à stopper la propagation des maladies. Dans cet article, vous reconnaîtrez l'utilisation de l'ARIMA, des courbes logistiques, de la régression linéaire et de la SARIMA. "Ce travail est une tentative de calculer le taux de propagation de ce virus et ainsi de prédire les décès, les rétablissements et les cas confirmés, afin de nous aider à mieux nous préparer et à survivre." -[Référence](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) - -## 🌲 Écologie et technologie verte - -La nature et l'écologie consistent en de nombreux systèmes sensibles où l'interaction entre les animaux et la nature est mise en avant. Il est important de pouvoir mesurer ces systèmes avec précision et d'agir de manière appropriée si quelque chose se produit, comme un incendie de forêt ou une diminution de la population animale. - -### Gestion des forêts - -Vous avez appris à propos de [l'apprentissage par renforcement](../../8-Reinforcement/README.md) dans les leçons précédentes. Cela peut être très utile pour essayer de prédire des motifs dans la nature. En particulier, cela peut être utilisé pour suivre des problèmes écologiques tels que les incendies de forêt et la propagation d'espèces envahissantes. Au Canada, un groupe de chercheurs a utilisé l'apprentissage par renforcement pour construire des modèles de dynamique des incendies de forêt à partir d'images satellites. En utilisant un processus innovant de "propagation spatiale (SSP)", ils ont envisagé un incendie de forêt comme "l'agent à n'importe quelle cellule du paysage". "L'ensemble des actions que le feu peut prendre à partir d'un emplacement à un moment donné inclut la propagation vers le nord, le sud, l'est ou l'ouest ou ne pas se propager." - -Cette approche inverse la configuration habituelle de l'apprentissage par renforcement puisque la dynamique du processus de décision de Markov (MDP) correspondant est une fonction connue pour la propagation immédiate des incendies de forêt." Lisez-en plus sur les algorithmes classiques utilisés par ce groupe à l'adresse ci-dessous. -[Référence](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) - -### Détection de mouvements des animaux - -Bien que l'apprentissage profond ait créé une révolution dans le suivi visuel des mouvements des animaux (vous pouvez construire votre propre [suiveur d'ours polaire](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) ici), l'apprentissage automatique classique a toujours sa place dans cette tâche. - -Les capteurs pour suivre les mouvements des animaux de ferme et l'IoT utilisent ce type de traitement visuel, mais des techniques d'apprentissage automatique plus basiques sont utiles pour prétraiter les données. Par exemple, dans cet article, les postures des moutons ont été surveillées et analysées en utilisant divers algorithmes de classification. Vous pourriez reconnaître la courbe ROC à la page 335. -[Référence](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) - -### ⚡️ Gestion de l'énergie - -Dans nos leçons sur [la prévision des séries temporelles](../../7-TimeSeries/README.md), nous avons évoqué le concept de parcmètres intelligents pour générer des revenus pour une ville en comprenant l'offre et la demande. Cet article discute en détail de la manière dont le clustering, la régression et la prévision des séries temporelles se sont combinés pour aider à prédire la consommation future d'énergie en Irlande, basée sur la comptabilisation intelligente. -[Référence](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) - -## 💼 Assurance - -Le secteur de l'assurance est un autre domaine qui utilise l'apprentissage automatique pour construire et optimiser des modèles financiers et actuariels viables. - -### Gestion de la volatilité - -MetLife, un fournisseur d'assurance vie, est transparent sur la manière dont ils analysent et atténuent la volatilité dans leurs modèles financiers. Dans cet article, vous remarquerez des visualisations de classification binaire et ordinale. Vous découvrirez également des visualisations de prévision. -[Référence](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) - -## 🎨 Arts, Culture et Littérature - -Dans les arts, par exemple dans le journalisme, il existe de nombreux problèmes intéressants. La détection de fausses nouvelles est un problème majeur car il a été prouvé qu'elle influence l'opinion des gens et même renverse des démocraties. Les musées peuvent également bénéficier de l'utilisation de l'apprentissage automatique dans tout, depuis la recherche de liens entre les artefacts jusqu'à la planification des ressources. - -### Détection de fausses nouvelles - -La détection de fausses nouvelles est devenue un jeu du chat et de la souris dans les médias d'aujourd'hui. Dans cet article, les chercheurs suggèrent qu'un système combinant plusieurs des techniques d'apprentissage automatique que nous avons étudiées peut être testé et que le meilleur modèle peut être déployé : "Ce système est basé sur le traitement du langage naturel pour extraire des caractéristiques des données et ensuite ces caractéristiques sont utilisées pour l'entraînement de classificateurs d'apprentissage automatique tels que Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) et Régression Logistique (LR)." -[Référence](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) - -Cet article montre comment la combinaison de différents domaines de l'apprentissage automatique peut produire des résultats intéressants qui peuvent aider à arrêter la propagation de fausses nouvelles et à créer des dommages réels ; dans ce cas, l'incitation était la propagation de rumeurs sur les traitements COVID qui incitaient à la violence de masse. - -### ML dans les musées - -Les musées sont à l'aube d'une révolution de l'IA où le catalogage et la numérisation des collections et la recherche de liens entre les artefacts deviennent plus faciles à mesure que la technologie progresse. Des projets tels que [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) aident à déverrouiller les mystères de collections inaccessibles telles que les Archives du Vatican. Mais, l'aspect commercial des musées bénéficie également des modèles d'apprentissage automatique. - -Par exemple, l'Art Institute of Chicago a construit des modèles pour prédire quels publics sont intéressés et quand ils assisteront aux expositions. L'objectif est de créer des expériences visiteurs individualisées et optimisées chaque fois que l'utilisateur visite le musée. "Au cours de l'exercice 2017, le modèle a prédit la fréquentation et les admissions avec une précision de 1 pour cent, déclare Andrew Simnick, vice-président senior de l'Art Institute." -[Reference](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) - -## 🏷 Marketing - -### Segmentation des clients - -Les stratégies marketing les plus efficaces ciblent les clients de différentes manières en fonction de divers groupes. Dans cet article, les utilisations des algorithmes de clustering sont discutées pour soutenir le marketing différencié. Le marketing différencié aide les entreprises à améliorer la reconnaissance de la marque, à atteindre plus de clients et à générer plus de revenus. -[Reference](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) - -## 🚀 Défi - -Identifiez un autre secteur qui bénéficie de certaines des techniques que vous avez apprises dans ce programme, et découvrez comment il utilise le ML. - -## [Quiz post-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) - -## Révision & Auto-apprentissage - -L'équipe de science des données de Wayfair a plusieurs vidéos intéressantes sur la manière dont elle utilise le ML dans son entreprise. Cela vaut la peine [d'y jeter un œil](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos) ! - -## Devoir - -[Une chasse au trésor en ML](assignment.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/9-Real-World/1-Applications/assignment.md b/translations/fr/9-Real-World/1-Applications/assignment.md deleted file mode 100644 index cb20012b..00000000 --- a/translations/fr/9-Real-World/1-Applications/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Une Chasse au Trésor en ML - -## Instructions - -Dans cette leçon, vous avez découvert de nombreux cas d'utilisation réels qui ont été résolus grâce au ML classique. Bien que l'utilisation de l'apprentissage profond, de nouvelles techniques et outils en IA, ainsi que l'exploitation des réseaux neuronaux aient contribué à accélérer la production d'outils pour aider dans ces secteurs, le ML classique utilisant les techniques de ce programme reste d'une grande valeur. - -Dans cette tâche, imaginez que vous participez à un hackathon. Utilisez ce que vous avez appris dans le programme pour proposer une solution utilisant le ML classique afin de résoudre un problème dans l'un des secteurs discutés dans cette leçon. Créez une présentation où vous expliquerez comment vous allez mettre en œuvre votre idée. Des points bonus si vous pouvez rassembler des données d'exemple et construire un modèle de ML pour soutenir votre concept ! - -## Rubrique - -| Critères | Exemplaire | Adéquat | Besoin d'Amélioration | -| -------- | ----------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | -| | Une présentation PowerPoint est présentée - bonus pour la création d'un modèle | Une présentation basique, non innovante est présentée | Le travail est incomplet | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'atteindre l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées découlant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/9-Real-World/2-Debugging-ML-Models/README.md b/translations/fr/9-Real-World/2-Debugging-ML-Models/README.md deleted file mode 100644 index b687a890..00000000 --- a/translations/fr/9-Real-World/2-Debugging-ML-Models/README.md +++ /dev/null @@ -1,134 +0,0 @@ -# Postscript : Débogage de modèle en apprentissage automatique à l'aide des composants du tableau de bord AI responsable - -## [Quiz pré-conférence](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## Introduction - -L'apprentissage automatique impacte notre vie quotidienne. L'IA trouve sa place dans certains des systèmes les plus importants qui nous affectent en tant qu'individus ainsi que notre société, que ce soit dans la santé, la finance, l'éducation ou l'emploi. Par exemple, des systèmes et des modèles sont impliqués dans des tâches de prise de décision quotidiennes, comme les diagnostics médicaux ou la détection de fraudes. Par conséquent, les avancées en IA, accompagnées d'une adoption accélérée, sont confrontées à des attentes sociétales en évolution et à une réglementation croissante en réponse. Nous voyons constamment des domaines où les systèmes d'IA continuent de ne pas répondre aux attentes ; ils exposent de nouveaux défis ; et les gouvernements commencent à réglementer les solutions IA. Il est donc essentiel que ces modèles soient analysés afin de fournir des résultats équitables, fiables, inclusifs, transparents et responsables pour tous. - -Dans ce programme, nous examinerons des outils pratiques qui peuvent être utilisés pour évaluer si un modèle présente des problèmes d'IA responsable. Les techniques de débogage traditionnelles en apprentissage automatique tendent à se baser sur des calculs quantitatifs tels que la précision agrégée ou la perte d'erreur moyenne. Imaginez ce qui peut se passer lorsque les données que vous utilisez pour construire ces modèles manquent de certaines données démographiques, telles que la race, le sexe, l'opinion politique, la religion, ou représentent de manière disproportionnée de telles démographies. Que se passe-t-il lorsque la sortie du modèle est interprétée pour favoriser certaines démographies ? Cela peut introduire une sur ou sous-représentation de ces groupes de caractéristiques sensibles, entraînant des problèmes d'équité, d'inclusivité ou de fiabilité du modèle. Un autre facteur est que les modèles d'apprentissage automatique sont considérés comme des boîtes noires, ce qui rend difficile la compréhension et l'explication des éléments qui influencent la prédiction d'un modèle. Tous ces défis se posent aux scientifiques des données et aux développeurs d'IA lorsqu'ils ne disposent pas d'outils adéquats pour déboguer et évaluer l'équité ou la fiabilité d'un modèle. - -Dans cette leçon, vous apprendrez à déboguer vos modèles en utilisant : - -- **Analyse des erreurs** : identifier où dans votre distribution de données le modèle présente des taux d'erreur élevés. -- **Vue d'ensemble du modèle** : effectuer une analyse comparative à travers différents cohortes de données pour découvrir des disparités dans les métriques de performance de votre modèle. -- **Analyse des données** : examiner où il pourrait y avoir une sur ou sous-représentation de vos données qui peut fausser votre modèle pour favoriser une démographie de données par rapport à une autre. -- **Importance des caractéristiques** : comprendre quelles caractéristiques influencent les prédictions de votre modèle à un niveau global ou local. - -## Prérequis - -Comme prérequis, veuillez consulter la revue [Outils d'IA responsable pour les développeurs](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) - -> ![Gif sur les outils d'IA responsable](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) - -## Analyse des erreurs - -Les métriques traditionnelles de performance des modèles utilisées pour mesurer la précision sont principalement des calculs basés sur des prédictions correctes contre incorrectes. Par exemple, déterminer qu'un modèle est précis à 89 % du temps avec une perte d'erreur de 0,001 peut être considéré comme une bonne performance. Les erreurs ne sont souvent pas réparties uniformément dans votre ensemble de données sous-jacent. Vous pouvez obtenir un score de précision du modèle de 89 % mais découvrir qu'il existe différentes régions de vos données pour lesquelles le modèle échoue 42 % du temps. Les conséquences de ces schémas d'échec avec certains groupes de données peuvent entraîner des problèmes d'équité ou de fiabilité. Il est essentiel de comprendre les domaines où le modèle fonctionne bien ou non. Les régions de données où il y a un grand nombre d'inexactitudes dans votre modèle peuvent se révéler être une démographie de données importante. - -![Analyse et débogage des erreurs du modèle](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.fr.png) - -Le composant d'Analyse des erreurs sur le tableau de bord RAI illustre comment les échecs du modèle sont répartis à travers divers cohortes avec une visualisation en arbre. Cela est utile pour identifier les caractéristiques ou les zones où le taux d'erreur est élevé avec votre ensemble de données. En voyant d'où proviennent la plupart des inexactitudes du modèle, vous pouvez commencer à enquêter sur la cause profonde. Vous pouvez également créer des cohortes de données pour effectuer des analyses. Ces cohortes de données aident dans le processus de débogage à déterminer pourquoi la performance du modèle est bonne dans une cohorte, mais erronée dans une autre. - -![Analyse des erreurs](../../../../translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.fr.png) - -Les indicateurs visuels sur la carte des arbres aident à localiser les zones problématiques plus rapidement. Par exemple, plus la couleur rouge d'un nœud d'arbre est sombre, plus le taux d'erreur est élevé. - -La carte thermique est une autre fonctionnalité de visualisation que les utilisateurs peuvent utiliser pour enquêter sur le taux d'erreur en utilisant une ou deux caractéristiques afin de trouver un contributeur aux erreurs du modèle à travers l'ensemble de données ou les cohortes. - -![Carte thermique d'analyse des erreurs](../../../../translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.fr.png) - -Utilisez l'analyse des erreurs lorsque vous avez besoin de : - -* Acquérir une compréhension approfondie de la façon dont les échecs du modèle sont répartis à travers un ensemble de données et à travers plusieurs dimensions d'entrée et de caractéristiques. -* Décomposer les métriques de performance agrégées pour découvrir automatiquement des cohortes erronées afin d'informer vos étapes de mitigation ciblées. - -## Vue d'ensemble du modèle - -Évaluer la performance d'un modèle d'apprentissage automatique nécessite d'obtenir une compréhension holistique de son comportement. Cela peut être réalisé en examinant plus d'une métrique telle que le taux d'erreur, la précision, le rappel, la précision ou l'Erreur Absolue Moyenne (EAM) pour trouver des disparités parmi les métriques de performance. Une métrique de performance peut sembler excellente, mais des inexactitudes peuvent être révélées dans une autre métrique. De plus, comparer les métriques pour des disparités à travers l'ensemble de données ou les cohortes aide à éclairer où le modèle fonctionne bien ou non. Cela est particulièrement important pour observer la performance du modèle parmi des caractéristiques sensibles par rapport à des caractéristiques non sensibles (par exemple, la race des patients, le sexe ou l'âge) pour découvrir les potentielles injustices que le modèle peut avoir. Par exemple, découvrir que le modèle est plus erroné dans une cohorte qui a des caractéristiques sensibles peut révéler des injustices potentielles que le modèle peut avoir. - -Le composant Vue d'ensemble du modèle du tableau de bord RAI aide non seulement à analyser les métriques de performance de la représentation des données dans une cohorte, mais il donne aux utilisateurs la possibilité de comparer le comportement du modèle à travers différentes cohortes. - -![Cohortes de données - vue d'ensemble du modèle dans le tableau de bord RAI](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.fr.png) - -La fonctionnalité d'analyse basée sur les caractéristiques du composant permet aux utilisateurs de réduire les sous-groupes de données au sein d'une caractéristique particulière pour identifier des anomalies à un niveau granulaire. Par exemple, le tableau de bord dispose d'une intelligence intégrée pour générer automatiquement des cohortes pour une caractéristique sélectionnée par l'utilisateur (par exemple, *"time_in_hospital < 3"* ou *"time_in_hospital >= 7"*). Cela permet à un utilisateur d'isoler une caractéristique particulière d'un groupe de données plus large pour voir si elle est un facteur clé des résultats erronés du modèle. - -![Cohortes de caractéristiques - vue d'ensemble du modèle dans le tableau de bord RAI](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.fr.png) - -Le composant Vue d'ensemble du modèle prend en charge deux classes de métriques de disparité : - -**Disparité dans la performance du modèle** : Ces ensembles de métriques calculent la disparité (différence) dans les valeurs de la métrique de performance sélectionnée à travers les sous-groupes de données. Voici quelques exemples : - -* Disparité dans le taux de précision -* Disparité dans le taux d'erreur -* Disparité dans la précision -* Disparité dans le rappel -* Disparité dans l'erreur absolue moyenne (EAM) - -**Disparité dans le taux de sélection** : Cette métrique contient la différence dans le taux de sélection (prédiction favorable) parmi les sous-groupes. Un exemple de cela est la disparité dans les taux d'approbation de prêts. Le taux de sélection signifie la fraction de points de données dans chaque classe classés comme 1 (en classification binaire) ou distribution des valeurs de prédiction (en régression). - -## Analyse des données - -> "Si vous torturez les données assez longtemps, elles avoueront n'importe quoi" - Ronald Coase - -Cette déclaration semble extrême, mais il est vrai que les données peuvent être manipulées pour soutenir n'importe quelle conclusion. Une telle manipulation peut parfois se produire involontairement. En tant qu'êtres humains, nous avons tous des biais, et il est souvent difficile de savoir consciemment quand vous introduisez un biais dans les données. Garantir l'équité en IA et en apprentissage automatique reste un défi complexe. - -Les données sont un énorme point aveugle pour les métriques de performance traditionnelles des modèles. Vous pouvez avoir des scores de précision élevés, mais cela ne reflète pas toujours le biais sous-jacent des données qui pourrait exister dans votre ensemble de données. Par exemple, si un ensemble de données d'employés a 27 % de femmes occupant des postes de direction dans une entreprise et 73 % d'hommes au même niveau, un modèle d'IA pour la publicité d'emploi formé sur ces données pourrait cibler principalement un public masculin pour les postes de niveau supérieur. Avoir ce déséquilibre dans les données a faussé la prédiction du modèle en faveur d'un sexe. Cela révèle un problème d'équité où il y a un biais de genre dans le modèle d'IA. - -Le composant Analyse des données sur le tableau de bord RAI aide à identifier les zones où il y a une sur- et sous-représentation dans l'ensemble de données. Il aide les utilisateurs à diagnostiquer la cause profonde des erreurs et des problèmes d'équité introduits par des déséquilibres de données ou un manque de représentation d'un groupe de données particulier. Cela donne aux utilisateurs la possibilité de visualiser les ensembles de données en fonction des résultats prévus et réels, des groupes d'erreurs et des caractéristiques spécifiques. Parfois, découvrir un groupe de données sous-représenté peut également révéler que le modèle n'apprend pas bien, d'où les nombreuses inexactitudes. Avoir un modèle présentant un biais de données n'est pas seulement un problème d'équité, mais montre que le modèle n'est ni inclusif ni fiable. - -![Composant d'analyse des données sur le tableau de bord RAI](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.fr.png) - -Utilisez l'analyse des données lorsque vous avez besoin de : - -* Explorer les statistiques de votre ensemble de données en sélectionnant différents filtres pour découper vos données en différentes dimensions (également appelées cohortes). -* Comprendre la distribution de votre ensemble de données à travers différentes cohortes et groupes de caractéristiques. -* Déterminer si vos résultats relatifs à l'équité, à l'analyse des erreurs et à la causalité (dérivés d'autres composants du tableau de bord) sont le résultat de la distribution de votre ensemble de données. -* Décider dans quels domaines collecter plus de données pour atténuer les erreurs résultant de problèmes de représentation, de bruit d'étiquetage, de bruit de caractéristiques, de biais d'étiquetage et de facteurs similaires. - -## Interprétabilité du modèle - -Les modèles d'apprentissage automatique tendent à être des boîtes noires. Comprendre quelles caractéristiques de données clés influencent la prédiction d'un modèle peut être un défi. Il est important de fournir de la transparence sur les raisons pour lesquelles un modèle fait une certaine prédiction. Par exemple, si un système d'IA prédit qu'un patient diabétique risque d'être réadmis à l'hôpital dans moins de 30 jours, il devrait être en mesure de fournir des données à l'appui qui ont conduit à sa prédiction. Avoir des indicateurs de données à l'appui apporte de la transparence pour aider les cliniciens ou les hôpitaux à prendre des décisions éclairées. De plus, être capable d'expliquer pourquoi un modèle a fait une prédiction pour un patient individuel permet d'assurer la responsabilité vis-à-vis des réglementations sanitaires. Lorsque vous utilisez des modèles d'apprentissage automatique de manière à affecter la vie des gens, il est crucial de comprendre et d'expliquer ce qui influence le comportement d'un modèle. L'explicabilité et l'interprétabilité du modèle aident à répondre à des questions dans des scénarios tels que : - -* Débogage de modèle : Pourquoi mon modèle a-t-il fait cette erreur ? Comment puis-je améliorer mon modèle ? -* Collaboration homme-IA : Comment puis-je comprendre et faire confiance aux décisions du modèle ? -* Conformité réglementaire : Mon modèle respecte-t-il les exigences légales ? - -Le composant Importance des caractéristiques du tableau de bord RAI vous aide à déboguer et à obtenir une compréhension complète de la façon dont un modèle fait des prédictions. C'est également un outil utile pour les professionnels de l'apprentissage automatique et les décideurs pour expliquer et montrer des preuves des caractéristiques influençant le comportement d'un modèle pour la conformité réglementaire. Ensuite, les utilisateurs peuvent explorer à la fois des explications globales et locales pour valider quelles caractéristiques influencent la prédiction d'un modèle. Les explications globales énumèrent les principales caractéristiques qui ont affecté la prédiction globale d'un modèle. Les explications locales affichent quelles caractéristiques ont conduit à la prédiction d'un modèle pour un cas individuel. La capacité à évaluer des explications locales est également utile dans le débogage ou l'audit d'un cas spécifique pour mieux comprendre et interpréter pourquoi un modèle a fait une prédiction précise ou inexacte. - -![Composant d'importance des caractéristiques du tableau de bord RAI](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.fr.png) - -* Explications globales : Par exemple, quelles caractéristiques affectent le comportement global d'un modèle de réadmission à l'hôpital pour diabétiques ? -* Explications locales : Par exemple, pourquoi un patient diabétique de plus de 60 ans avec des hospitalisations antérieures a-t-il été prédit comme étant réadmis ou non réadmis dans les 30 jours suivant son retour à l'hôpital ? - -Dans le processus de débogage de l'examen de la performance d'un modèle à travers différentes cohortes, l'Importance des caractéristiques montre quel niveau d'impact une caractéristique a à travers les cohortes. Elle aide à révéler des anomalies lors de la comparaison du niveau d'influence que la caractéristique a sur les prédictions erronées d'un modèle. Le composant Importance des caractéristiques peut montrer quelles valeurs dans une caractéristique ont influencé positivement ou négativement le résultat du modèle. Par exemple, si un modèle a fait une prédiction inexacte, le composant vous donne la possibilité d'approfondir et de déterminer quelles caractéristiques ou valeurs de caractéristiques ont conduit à la prédiction. Ce niveau de détail aide non seulement au débogage, mais fournit également transparence et responsabilité dans les situations d'audit. Enfin, le composant peut vous aider à identifier des problèmes d'équité. Pour illustrer, si une caractéristique sensible telle que l'ethnicité ou le sexe est fortement influente dans la prédiction d'un modèle, cela pourrait être un signe de biais racial ou de genre dans le modèle. - -![Importance des caractéristiques](../../../../translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.fr.png) - -Utilisez l'interprétabilité lorsque vous avez besoin de : - -* Déterminer à quel point les prédictions de votre système d'IA sont fiables en comprenant quelles caractéristiques sont les plus importantes pour les prédictions. -* Aborder le débogage de votre modèle en le comprenant d'abord et en identifiant si le modèle utilise des caractéristiques saines ou simplement de fausses corrélations. -* Découvrir des sources potentielles d'injustice en comprenant si le modèle base ses prédictions sur des caractéristiques sensibles ou sur des caractéristiques qui leur sont fortement corrélées. -* Renforcer la confiance des utilisateurs dans les décisions de votre modèle en générant des explications locales pour illustrer leurs résultats. -* Compléter un audit réglementaire d'un système d'IA pour valider les modèles et surveiller l'impact des décisions du modèle sur les humains. - -## Conclusion - -Tous les composants du tableau de bord RAI sont des outils pratiques pour vous aider à construire des modèles d'apprentissage automatique qui sont moins nuisibles et plus fiables pour la société. Cela améliore la prévention des menaces aux droits de l'homme ; la discrimination ou l'exclusion de certains groupes des opportunités de vie ; et le risque de blessures physiques ou psychologiques. Cela aide également à établir la confiance dans les décisions de votre modèle en générant des explications locales pour illustrer leurs résultats. Certains des dommages potentiels peuvent être classés comme : - -- **Allocation**, si un sexe ou une ethnie, par exemple, est favorisé par rapport à un autre. -- **Qualité du service**. Si vous formez les données pour un scénario spécifique mais que la réalité est beaucoup plus complexe, cela entraîne un service de mauvaise performance. -- **Stéréotypage**. Associer un groupe donné à des attributs préassignés. -- **Dénigrement**. Critiquer et étiqueter injustement quelque chose ou quelqu'un. -- **Sur- ou sous-représentation**. L'idée est qu'un certain groupe n'est pas vu dans une certaine profession, et tout service ou fonction qui continue de promouvoir cela contribue à nuire. - -### Tableau de bord Azure RAI - -Le [tableau de bord Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) est construit sur des outils open-source développés par des institutions académiques et organisations de premier plan, y compris Microsoft, qui sont essentiels pour les scientifiques des données et les développeurs d'IA afin de mieux comprendre le comportement des modèles, découvrir et atténuer les problèmes indésirables des modèles d'IA. - -- Apprenez à utiliser les différents composants en consultant la [documentation du tableau de bord RAI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) - -- Découvrez quelques [carnets d'exemples](https:// - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/fr/9-Real-World/2-Debugging-ML-Models/assignment.md deleted file mode 100644 index 39e8e2e5..00000000 --- a/translations/fr/9-Real-World/2-Debugging-ML-Models/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Explorer le tableau de bord de l'IA responsable (RAI) - -## Instructions - -Dans cette leçon, vous avez appris à propos du tableau de bord RAI, une suite de composants construits sur des outils "open-source" pour aider les data scientists à réaliser des analyses d'erreurs, de l'exploration de données, des évaluations d'équité, de l'interprétabilité des modèles, des évaluations contrefactuelles/what-if et des analyses causales sur les systèmes d'IA. Pour cette tâche, explorez quelques-uns des [carnets](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) d'exemples du tableau de bord RAI et faites un rapport de vos découvertes dans un document ou une présentation. - -## Critères - -| Critères | Exemplaire | Adéquat | Besoin d'amélioration | -| -------- | --------- | -------- | ----------------- | -| | Un document ou une présentation PowerPoint est présenté, discutant des composants du tableau de bord RAI, du carnet qui a été exécuté, et des conclusions tirées de son exécution | Un document est présenté sans conclusions | Aucun document n'est présenté | - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/9-Real-World/README.md b/translations/fr/9-Real-World/README.md deleted file mode 100644 index e6fdb6a1..00000000 --- a/translations/fr/9-Real-World/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Postscript : Applications concrètes de l'apprentissage automatique classique - -Dans cette section du programme, vous découvrirez certaines applications concrètes de l'apprentissage automatique classique. Nous avons parcouru internet pour trouver des documents et des articles sur des applications qui ont utilisé ces stratégies, en évitant autant que possible les réseaux neuronaux, l'apprentissage profond et l'IA. Découvrez comment l'apprentissage automatique est utilisé dans les systèmes d'entreprise, les applications écologiques, la finance, les arts et la culture, et plus encore. - -![échecs](../../../translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.fr.jpg) - -> Photo par Alexis Fauvet sur Unsplash - -## Leçon - -1. [Applications concrètes de l'apprentissage automatique](1-Applications/README.md) -2. [Débogage de modèles en apprentissage automatique utilisant des composants de tableau de bord IA responsable](2-Debugging-ML-Models/README.md) - -## Crédits - -"Applications concrètes" a été écrit par une équipe de personnes, y compris [Jen Looper](https://twitter.com/jenlooper) et [Ornella Altunyan](https://twitter.com/ornelladotcom). - -"Débogage de modèles en apprentissage automatique utilisant des composants de tableau de bord IA responsable" a été écrit par [Ruth Yakubu](https://twitter.com/ruthieyakubu) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/CODE_OF_CONDUCT.md b/translations/fr/CODE_OF_CONDUCT.md deleted file mode 100644 index 573a49df..00000000 --- a/translations/fr/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,12 +0,0 @@ -# Code de conduite open source de Microsoft - -Ce projet a adopté le [Code de conduite open source de Microsoft](https://opensource.microsoft.com/codeofconduct/). - -Ressources : - -- [Code de conduite open source de Microsoft](https://opensource.microsoft.com/codeofconduct/) -- [FAQ sur le code de conduite de Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) -- Contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou préoccupation. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/CONTRIBUTING.md b/translations/fr/CONTRIBUTING.md deleted file mode 100644 index 6b34edc6..00000000 --- a/translations/fr/CONTRIBUTING.md +++ /dev/null @@ -1,12 +0,0 @@ -# Contribuer - -Ce projet accueille les contributions et les suggestions. La plupart des contributions nécessitent que vous acceptiez un Contrat de Licence de Contributeur (CLA) déclarant que vous avez le droit de, et que vous accordez effectivement, les droits d'utiliser votre contribution. Pour plus de détails, visitez https://cla.microsoft.com. - -> Important : lorsque vous traduisez du texte dans ce dépôt, veuillez vous assurer de ne pas utiliser de traduction automatique. Nous vérifierons les traductions via la communauté, alors ne vous portez volontaire pour des traductions que dans les langues où vous êtes compétent. - -Lorsque vous soumettez une demande de tirage (pull request), un bot CLA déterminera automatiquement si vous devez fournir un CLA et décorera la PR en conséquence (par exemple, étiquette, commentaire). Suivez simplement les instructions fournies par le bot. Vous n'aurez besoin de le faire qu'une seule fois dans tous les dépôts utilisant notre CLA. - -Ce projet a adopté le [Code de Conduite Open Source de Microsoft](https://opensource.microsoft.com/codeofconduct/). Pour plus d'informations, consultez la [FAQ sur le Code de Conduite](https://opensource.microsoft.com/codeofconduct/faq/) ou contactez [opencode@microsoft.com](mailto:opencode@microsoft.com) pour toute question ou commentaire supplémentaire. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisés basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/README.md b/translations/fr/README.md deleted file mode 100644 index 2ff95c19..00000000 --- a/translations/fr/README.md +++ /dev/null @@ -1,155 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) - -# Apprentissage Automatique pour Débutants - Un Programme - -> 🌍 Voyagez autour du monde en explorant l'apprentissage automatique à travers les cultures du monde 🌍 - -Les Cloud Advocates de Microsoft sont heureux de proposer un programme de 12 semaines et 26 leçons entièrement consacré à l'**Apprentissage Automatique**. Dans ce programme, vous apprendrez ce que l'on appelle parfois l'**apprentissage automatique classique**, en utilisant principalement Scikit-learn comme bibliothèque et en évitant l'apprentissage profond, qui est abordé dans notre [programme AI pour Débutants](https://aka.ms/ai4beginners). Associez ces leçons à notre [programme 'Data Science pour Débutants'](https://aka.ms/ds4beginners) également ! - -Voyagez avec nous autour du monde alors que nous appliquons ces techniques classiques à des données provenant de nombreuses régions du monde. Chaque leçon comprend des quiz avant et après la leçon, des instructions écrites pour compléter la leçon, une solution, un devoir, et plus encore. Notre pédagogie basée sur des projets vous permet d'apprendre en construisant, une méthode éprouvée pour que les nouvelles compétences 's'ancrent'. - -**✍️ Un grand merci à nos auteurs** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu et Amy Boyd - -**🎨 Merci également à nos illustrateurs** Tomomi Imura, Dasani Madipalli, et Jen Looper - -**🙏 Remerciements spéciaux 🙏 à nos auteurs, réviseurs et contributeurs de contenu Microsoft Student Ambassador**, notamment Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, et Snigdha Agarwal - -**🤩 Une gratitude supplémentaire aux Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi, et Vidushi Gupta pour nos leçons R !** - -# Prise en Main - -Suivez ces étapes : -1. **Forkez le dépôt** : Cliquez sur le bouton "Fork" en haut à droite de cette page. -2. **Clonez le dépôt** : `git clone https://github.com/microsoft/ML-For-Beginners.git` - -> [trouvez toutes les ressources supplémentaires pour ce cours dans notre collection Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) - -**[Étudiants](https://aka.ms/student-page)**, pour utiliser ce programme, forkiez l'intégralité du dépôt sur votre propre compte GitHub et réalisez les exercices seul ou en groupe : - -- Commencez par un quiz pré-conférence. -- Lisez la conférence et complétez les activités, en faisant des pauses et en réfléchissant à chaque vérification des connaissances. -- Essayez de créer les projets en comprenant les leçons plutôt qu'en exécutant le code de solution ; cependant, ce code est disponible dans les dossiers `/solution` de chaque leçon orientée projet. -- Passez le quiz post-conférence. -- Complétez le défi. -- Complétez le devoir. -- Après avoir terminé un groupe de leçons, visitez le [Forum de Discussion](https://github.com/microsoft/ML-For-Beginners/discussions) et "apprenez à haute voix" en remplissant le barème PAT approprié. Un 'PAT' est un Outil d'Évaluation des Progrès qui est un barème que vous remplissez pour approfondir votre apprentissage. Vous pouvez également réagir à d'autres PAT afin que nous puissions apprendre ensemble. - -> Pour des études supplémentaires, nous recommandons de suivre ces modules et parcours d'apprentissage sur [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). - -**Enseignants**, nous avons [inclus quelques suggestions](for-teachers.md) sur la manière d'utiliser ce programme. - ---- - -## Vidéos explicatives - -Certaines des leçons sont disponibles sous forme de courtes vidéos. Vous pouvez les trouver en ligne dans les leçons, ou sur la [playlist ML pour Débutants sur la chaîne YouTube des Développeurs Microsoft](https://aka.ms/ml-beginners-videos) en cliquant sur l'image ci-dessous. - -[![Bannière ML pour débutants](../../translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.fr.png)](https://aka.ms/ml-beginners-videos) - ---- - -## Rencontrez l'Équipe - -[![Vidéo promotionnelle](../../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Vidéo promotionnelle") - -**Gif par** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) - -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo sur le projet et les personnes qui l'ont créé ! - ---- - -## Pédagogie - -Nous avons choisi deux principes pédagogiques lors de la création de ce programme : garantir qu'il soit pratique **basé sur des projets** et qu'il inclue des **quiz fréquents**. De plus, ce programme a un **thème** commun pour lui donner de la cohésion. - -En veillant à ce que le contenu soit aligné avec les projets, le processus devient plus engageant pour les étudiants et la rétention des concepts sera améliorée. De plus, un quiz à faible enjeu avant un cours fixe l'intention de l'étudiant d'apprendre un sujet, tandis qu'un deuxième quiz après le cours assure une rétention supplémentaire. Ce programme a été conçu pour être flexible et amusant et peut être suivi dans son intégralité ou en partie. Les projets commencent petit et deviennent de plus en plus complexes à la fin du cycle de 12 semaines. Ce programme inclut également un post-scriptum sur les applications réelles de l'apprentissage automatique, qui peut être utilisé comme crédit supplémentaire ou comme base de discussion. - -> Trouvez notre [Code de Conduite](CODE_OF_CONDUCT.md), nos directives sur [Contributions](CONTRIBUTING.md), et sur [Traduction](TRANSLATIONS.md). Nous accueillons vos retours constructifs ! - -## Chaque leçon comprend - -- sketchnote optionnelle -- vidéo supplémentaire optionnelle -- vidéo explicative (certaines leçons seulement) -- quiz de réchauffement pré-conférence -- leçon écrite -- pour les leçons basées sur des projets, des guides étape par étape sur comment construire le projet -- vérifications des connaissances -- un défi -- lecture complémentaire -- devoir -- quiz post-conférence - -> **Une note sur les langues** : Ces leçons sont principalement écrites en Python, mais beaucoup sont également disponibles en R. Pour compléter une leçon en R, allez dans le dossier `/solution` et recherchez les leçons R. Elles incluent une extension .rmd qui représente un fichier **R Markdown** qui peut être simplement défini comme une intégration de `code chunks` (de R ou d'autres langages) et un `YAML header` (qui guide comment formater les sorties telles que PDF) dans un `Markdown document`. En tant que tel, il sert de cadre d'édition exemplaire pour la science des données puisqu'il vous permet de combiner votre code, sa sortie, et vos réflexions en vous permettant de les écrire en Markdown. De plus, les documents R Markdown peuvent être rendus dans des formats de sortie tels que PDF, HTML, ou Word. - -> **Une note sur les quiz** : Tous les quiz se trouvent dans le [dossier Quiz App](../../quiz-app), pour un total de 52 quiz de trois questions chacun. Ils sont liés à l'intérieur des leçons, mais l'application de quiz peut être exécutée localement ; suivez les instructions dans le dossier `quiz-app` pour héberger localement ou déployer sur Azure. - -| Numéro de leçon | Sujet | Regroupement de leçons | Objectifs d'apprentissage | Leçon liée | Auteur | -| :-------------: | :------------------------------------------------------------: | :-------------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | -| 01 | Introduction à l'apprentissage automatique | [Introduction](1-Introduction/README.md) | Apprendre les concepts de base de l'apprentissage automatique | [Leçon](1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | L'Histoire de l'apprentissage automatique | [Introduction](1-Introduction/README.md) | Apprendre l'histoire sous-jacente de ce domaine | [Leçon](1-Introduction/2-history-of-ML/README.md) | Jen et Amy | -| 03 | Équité et apprentissage automatique | [Introduction](1-Introduction/README.md) | Quelles sont les questions philosophiques importantes autour de l'équité que les étudiants devraient considérer lors de la construction et de l'application des modèles d'apprentissage automatique ? | [Leçon](1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | Techniques d'apprentissage automatique | [Introduction](1-Introduction/README.md) | Quelles techniques les chercheurs en apprentissage automatique utilisent-ils pour construire des modèles d'apprentissage automatique ? | [Leçon](1-Introduction/4-techniques-of-ML/README.md) | Chris et Jen | -| 05 | Introduction à la régression | [Régression](2-Regression/README.md) | Commencez avec Python et Scikit-learn pour les modèles de régression |
                                                  • [Python](2-Regression/1-Tools/README.md)
                                                  • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                                  |
                                                  • Jen
                                                  • Eric Wanjau
                                                  | -| 06 | Prix des citrouilles en Amérique du Nord 🎃 | [Régression](2-Regression/README.md) | Visualisez et nettoyez les données en préparation pour l'apprentissage automatique |
                                                  • [Python](2-Regression/2-Data/README.md)
                                                  • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                                  |
                                                  • Jen
                                                  • Eric Wanjau
                                                  | -| 07 | Prix des citrouilles en Amérique du Nord 🎃 | [Régression](2-Regression/README.md) | Construisez des modèles de régression linéaire et polynomiale |
                                                  • [Python](2-Regression/3-Linear/README.md)
                                                  • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                                  |
                                                  • Jen et Dmitry
                                                  • Eric Wanjau
                                                  | -| 08 | Prix des citrouilles en Amérique du Nord 🎃 | [Régression](2-Regression/README.md) | Construisez un modèle de régression logistique |
                                                  • [Python](2-Regression/4-Logistic/README.md)
                                                  • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                                  |
                                                  • Jen
                                                  • Eric Wanjau
                                                  | -| 09 | Une application web 🔌 | [Application Web](3-Web-App/README.md) | Créez une application web pour utiliser votre modèle entraîné | [Python](3-Web-App/1-Web-App/README.md) | Jen | -| 10 | Introduction à la classification | [Classification](4-Classification/README.md) | Nettoyez, préparez et visualisez vos données ; introduction à la classification |
                                                  • [Python](4-Classification/1-Introduction/README.md)
                                                  • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                                    • Jen et Cassie
                                                    • Eric Wanjau
                                                    | -| 11 | Délicieuses cuisines asiatiques et indiennes 🍜 | [Classification](4-Classification/README.md) | Introduction aux classificateurs |
                                                    • [Python](4-Classification/2-Classifiers-1/README.md)
                                                    • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                                                      • Jen et Cassie
                                                      • Eric Wanjau
                                                      | -| 12 | Délicieuses cuisines asiatiques et indiennes 🍜 | [Classification](4-Classification/README.md) | Plus de classificateurs |
                                                      • [Python](4-Classification/3-Classifiers-2/README.md)
                                                      • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                                                        • Jen et Cassie
                                                        • Eric Wanjau
                                                        | -| 13 | Délicieuses cuisines asiatiques et indiennes 🍜 | [Classification](4-Classification/README.md) | Créez une application web de recommandation en utilisant votre modèle | [Python](4-Classification/4-Applied/README.md) | Jen | -| 14 | Introduction au clustering | [Clustering](5-Clustering/README.md) | Nettoyez, préparez et visualisez vos données ; Introduction au clustering |
                                                        • [Python](5-Clustering/1-Visualize/README.md)
                                                        • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                                          • Jen
                                                          • Eric Wanjau
                                                          | -| 15 | Exploration des goûts musicaux nigérians 🎧 | [Clustering](5-Clustering/README.md) | Explorez la méthode de clustering K-Means |
                                                          • [Python](5-Clustering/2-K-Means/README.md)
                                                          • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                                            • Jen
                                                            • Eric Wanjau
                                                            | -| 16 | Introduction au traitement du langage naturel ☕️ | [Traitement du langage naturel](6-NLP/README.md) | Apprenez les bases du traitement du langage naturel en construisant un bot simple | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Tâches courantes en traitement du langage naturel ☕️ | [Traitement du langage naturel](6-NLP/README.md) | Approfondissez vos connaissances en traitement du langage naturel en comprenant les tâches courantes liées aux structures linguistiques | [Python](6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Traduction et analyse de sentiment ♥️ | [Traitement du langage naturel](6-NLP/README.md) | Traduction et analyse de sentiment avec Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | Hôtels romantiques d'Europe ♥️ | [Traitement du langage naturel](6-NLP/README.md) | Analyse de sentiment avec des critiques d'hôtels 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | Hôtels romantiques d'Europe ♥️ | [Traitement du langage naturel](6-NLP/README.md) | Analyse de sentiment avec des critiques d'hôtels 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | Introduction à la prévision des séries temporelles | [Séries temporelles](7-TimeSeries/README.md) | Introduction à la prévision des séries temporelles | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ Utilisation mondiale de l'énergie ⚡️ - prévision des séries temporelles avec ARIMA | [Séries temporelles](7-TimeSeries/README.md) | Prévision des séries temporelles avec ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | ⚡️ Utilisation mondiale de l'énergie ⚡️ - prévision des séries temporelles avec SVR | [Séries temporelles](7-TimeSeries/README.md) | Prévision des séries temporelles avec le régressseur à vecteurs de support | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | -| 24 | Introduction à l'apprentissage par renforcement | [Apprentissage par renforcement](8-Reinforcement/README.md) | Introduction à l'apprentissage par renforcement avec Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 25 | Aidez Peter à éviter le loup ! 🐺 | [Apprentissage par renforcement](8-Reinforcement/README.md) | Gym d'apprentissage par renforcement | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | -| Postscript | Scénarios et applications de ML dans le monde réel | [ML dans la nature](9-Real-World/README.md) | Applications intéressantes et révélatrices du ML classique | [Leçon](9-Real-World/1-Applications/README.md) | Équipe | -| Postscript | Débogage de modèles en ML en utilisant le tableau de bord RAI | [ML dans la nature](9-Real-World/README.md) | Débogage de modèles en apprentissage automatique en utilisant les composants du tableau de bord d'IA responsable | [Leçon](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | - -> [trouvez toutes les ressources supplémentaires pour ce cours dans notre collection Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) - -## Accès hors ligne - -Vous pouvez exécuter cette documentation hors ligne en utilisant [Docsify](https://docsify.js.org/#/). Forkez ce dépôt, [installez Docsify](https://docsify.js.org/#/quickstart) sur votre machine locale, puis dans le dossier racine de ce dépôt, tapez `docsify serve`. Le site sera servi sur le port 3000 sur votre localhost : `localhost:3000`. - -## PDFs -Trouvez un PDF du programme avec des liens [ici](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). - -## Aide Requise - -Souhaitez-vous contribuer à une traduction ? Veuillez lire nos [directives de traduction](TRANSLATIONS.md) et ajouter un problème template pour gérer la charge de travail [ici](https://github.com/microsoft/ML-For-Beginners/issues). - -## Autres Programmes - -Notre équipe produit d'autres programmes ! Découvrez : - -- [AI for Beginners](https://aka.ms/ai4beginners) -- [Data Science for Beginners](https://aka.ms/datascience-beginners) -- [**Nouvelle Version 2.0** - AI Génératif pour Débutants](https://aka.ms/genai-beginners) -- [**NOUVEAU** Cyber-sécurité pour Débutants](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -- [Développement Web pour Débutants](https://aka.ms/webdev-beginners) -- [IoT pour Débutants](https://aka.ms/iot-beginners) -- [Apprentissage Automatique pour Débutants](https://aka.ms/ml4beginners) -- [Développement XR pour Débutants](https://aka.ms/xr-dev-for-beginners) -- [Maîtriser GitHub Copilot pour la Programmation Paire AI](https://aka.ms/GitHubCopilotAI) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/SECURITY.md b/translations/fr/SECURITY.md deleted file mode 100644 index 79079a1b..00000000 --- a/translations/fr/SECURITY.md +++ /dev/null @@ -1,40 +0,0 @@ -## Sécurité - -Microsoft prend très au sérieux la sécurité de ses produits et services logiciels, ce qui inclut tous les dépôts de code source gérés par nos organisations GitHub, telles que [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), et [nos organisations GitHub](https://opensource.microsoft.com/). - -Si vous pensez avoir découvert une vulnérabilité de sécurité dans un dépôt appartenant à Microsoft qui répond à la [définition de vulnérabilité de sécurité de Microsoft](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), veuillez nous en faire part comme décrit ci-dessous. - -## Signalement des problèmes de sécurité - -**Veuillez ne pas signaler les vulnérabilités de sécurité via des problèmes publics sur GitHub.** - -À la place, veuillez les signaler au Microsoft Security Response Center (MSRC) à [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). - -Si vous préférez soumettre sans vous connecter, envoyez un e-mail à [secure@microsoft.com](mailto:secure@microsoft.com). Si possible, cryptez votre message avec notre clé PGP ; veuillez la télécharger depuis la [page de clé PGP du Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). - -Vous devriez recevoir une réponse dans les 24 heures. Si, pour une raison quelconque, vous ne recevez pas de réponse, veuillez faire un suivi par e-mail pour vous assurer que nous avons bien reçu votre message initial. Des informations supplémentaires peuvent être trouvées sur [microsoft.com/msrc](https://www.microsoft.com/msrc). - -Veuillez inclure les informations demandées ci-dessous (autant que vous pouvez fournir) pour nous aider à mieux comprendre la nature et l'étendue du problème potentiel : - - * Type de problème (par exemple, débordement de tampon, injection SQL, script inter-sites, etc.) - * Chemins complets des fichiers source liés à la manifestation du problème - * Emplacement du code source affecté (tag/branche/commit ou URL directe) - * Toute configuration spéciale requise pour reproduire le problème - * Instructions étape par étape pour reproduire le problème - * Code de preuve de concept ou d'exploitation (si possible) - * Impact du problème, y compris comment un attaquant pourrait exploiter le problème - -Ces informations nous aideront à traiter votre rapport plus rapidement. - -Si vous signalez pour un programme de récompense de bogues, des rapports plus complets peuvent contribuer à une récompense plus élevée. Veuillez visiter notre page sur le [Programme de Récompense de Bogues Microsoft](https://microsoft.com/msrc/bounty) pour plus de détails sur nos programmes actifs. - -## Langues Préférées - -Nous préférons que toutes les communications soient en anglais. - -## Politique - -Microsoft suit le principe de la [Divulgation Coordinée des Vulnérabilités](https://www.microsoft.com/en-us/msrc/cvd). - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/SUPPORT.md b/translations/fr/SUPPORT.md deleted file mode 100644 index 11dbd8ef..00000000 --- a/translations/fr/SUPPORT.md +++ /dev/null @@ -1,13 +0,0 @@ -# Support -## Comment signaler des problèmes et obtenir de l'aide - -Ce projet utilise les problèmes GitHub pour suivre les bogues et les demandes de fonctionnalités. Veuillez rechercher les problèmes existants avant de signaler de nouveaux problèmes afin d'éviter les doublons. Pour de nouveaux problèmes, signalez votre bogue ou votre demande de fonctionnalité en tant que nouveau problème. - -Pour obtenir de l'aide et poser des questions sur l'utilisation de ce projet, signalez un problème. - -## Politique de support de Microsoft - -Le support pour ce dépôt est limité aux ressources énumérées ci-dessus. - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/TRANSLATIONS.md b/translations/fr/TRANSLATIONS.md deleted file mode 100644 index 500467b1..00000000 --- a/translations/fr/TRANSLATIONS.md +++ /dev/null @@ -1,37 +0,0 @@ -# Contribuer en traduisant des leçons - -Nous accueillons les traductions des leçons de ce programme ! -## Directives - -Il y a des dossiers dans chaque dossier de leçon et dans le dossier d'introduction aux leçons qui contiennent les fichiers markdown traduits. - -> Remarque, veuillez ne pas traduire de code dans les fichiers d'exemple de code ; les seules choses à traduire sont le README, les devoirs et les quiz. Merci ! - -Les fichiers traduits doivent suivre cette convention de nommage : - -**README._[langue]_.md** - -où _[langue]_ est une abréviation de deux lettres suivant la norme ISO 639-1 (par exemple `README.es.md` pour l'espagnol et `README.nl.md` pour le néerlandais). - -**assignment._[langue]_.md** - -Comme pour les README, veuillez également traduire les devoirs. - -> Important : lorsque vous traduisez du texte dans ce dépôt, veuillez vous assurer de ne pas utiliser de traduction automatique. Nous vérifierons les traductions via la communauté, donc veuillez ne vous porter volontaire pour des traductions que dans les langues où vous êtes compétent. - -**Quiz** - -1. Ajoutez votre traduction à l'application quiz en ajoutant un fichier ici : https://github.com/microsoft/ML-For-Beginners/tree/main/quiz-app/src/assets/translations, avec la convention de nommage appropriée (en.json, fr.json). **Veuillez ne pas localiser les mots 'true' ou 'false', cependant. merci !** - -2. Ajoutez votre code de langue dans le menu déroulant du fichier App.vue de l'application quiz. - -3. Modifiez le fichier [translations index.js de l'application quiz](https://github.com/microsoft/ML-For-Beginners/blob/main/quiz-app/src/assets/translations/index.js) pour ajouter votre langue. - -4. Enfin, modifiez TOUS les liens de quiz dans vos fichiers README.md traduits pour pointer directement vers votre quiz traduit : https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1 devient https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=id - -**MERCI** - -Nous apprécions vraiment vos efforts ! - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des erreurs d'interprétation résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/docs/_sidebar.md b/translations/fr/docs/_sidebar.md deleted file mode 100644 index 0eb116c0..00000000 --- a/translations/fr/docs/_sidebar.md +++ /dev/null @@ -1,46 +0,0 @@ -- Introduction - - [Introduction à l'apprentissage automatique](../1-Introduction/1-intro-to-ML/README.md) - - [Histoire de l'apprentissage automatique](../1-Introduction/2-history-of-ML/README.md) - - [Apprentissage automatique et équité](../1-Introduction/3-fairness/README.md) - - [Techniques de l'apprentissage automatique](../1-Introduction/4-techniques-of-ML/README.md) - -- Régression - - [Outils du métier](../2-Regression/1-Tools/README.md) - - [Données](../2-Regression/2-Data/README.md) - - [Régression linéaire](../2-Regression/3-Linear/README.md) - - [Régression logistique](../2-Regression/4-Logistic/README.md) - -- Construire une application Web - - [Application Web](../3-Web-App/1-Web-App/README.md) - -- Classification - - [Introduction à la classification](../4-Classification/1-Introduction/README.md) - - [Classificateurs 1](../4-Classification/2-Classifiers-1/README.md) - - [Classificateurs 2](../4-Classification/3-Classifiers-2/README.md) - - [Apprentissage automatique appliqué](../4-Classification/4-Applied/README.md) - -- Regroupement - - [Visualisez vos données](../5-Clustering/1-Visualize/README.md) - - [K-Means](../5-Clustering/2-K-Means/README.md) - -- PNL - - [Introduction au PNL](../6-NLP/1-Introduction-to-NLP/README.md) - - [Tâches de PNL](../6-NLP/2-Tasks/README.md) - - [Traduction et sentiment](../6-NLP/3-Translation-Sentiment/README.md) - - [Avis d'hôtels 1](../6-NLP/4-Hotel-Reviews-1/README.md) - - [Avis d'hôtels 2](../6-NLP/5-Hotel-Reviews-2/README.md) - -- Prévision des séries temporelles - - [Introduction à la prévision des séries temporelles](../7-TimeSeries/1-Introduction/README.md) - - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) - - [SVR](../7-TimeSeries/3-SVR/README.md) - -- Apprentissage par renforcement - - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) - - [Gym](../8-Reinforcement/2-Gym/README.md) - -- Apprentissage automatique dans le monde réel - - [Applications](../9-Real-World/1-Applications/README.md) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatisées peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle par un humain est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/for-teachers.md b/translations/fr/for-teachers.md deleted file mode 100644 index 2a538281..00000000 --- a/translations/fr/for-teachers.md +++ /dev/null @@ -1,26 +0,0 @@ -## Pour les éducateurs - -Souhaitez-vous utiliser ce programme dans votre classe ? N'hésitez pas ! - -En fait, vous pouvez l'utiliser directement sur GitHub en utilisant GitHub Classroom. - -Pour ce faire, faites un fork de ce repo. Vous devrez créer un repo pour chaque leçon, donc vous allez devoir extraire chaque dossier dans un repo séparé. De cette façon, [GitHub Classroom](https://classroom.github.com/classrooms) pourra prendre chaque leçon séparément. - -Ces [instructions complètes](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) vous donneront une idée de la façon de configurer votre classe. - -## Utiliser le repo tel quel - -Si vous souhaitez utiliser ce repo tel qu'il est actuellement, sans utiliser GitHub Classroom, cela peut également se faire. Vous devrez communiquer avec vos étudiants pour leur indiquer quelle leçon travailler ensemble. - -Dans un format en ligne (Zoom, Teams ou autre), vous pourriez former des salles de discussion pour les quiz et encadrer les étudiants pour les aider à se préparer à apprendre. Ensuite, invitez les étudiants à participer aux quiz et à soumettre leurs réponses en tant que 'problèmes' à un certain moment. Vous pourriez faire de même avec les devoirs, si vous souhaitez que les étudiants travaillent ensemble de manière ouverte. - -Si vous préférez un format plus privé, demandez à vos étudiants de faire un fork du programme, leçon par leçon, vers leurs propres repos GitHub en tant que repos privés, et de vous donner accès. Ainsi, ils peuvent compléter les quiz et les devoirs en privé et vous les soumettre via des problèmes sur votre repo de classe. - -Il existe de nombreuses façons de faire fonctionner cela dans un format de classe en ligne. Faites-nous savoir ce qui fonctionne le mieux pour vous ! - -## Donnez-nous vos impressions ! - -Nous voulons que ce programme fonctionne pour vous et vos étudiants. Veuillez nous donner [votre avis](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction professionnelle humaine est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/quiz-app/README.md b/translations/fr/quiz-app/README.md deleted file mode 100644 index b5d2260c..00000000 --- a/translations/fr/quiz-app/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Quiz - -Ces quiz sont les quiz pré- et post-conférence pour le programme ML sur https://aka.ms/ml-beginners - -## Configuration du projet - -``` -npm install -``` - -### Compile et recharge à chaud pour le développement - -``` -npm run serve -``` - -### Compile et minifie pour la production - -``` -npm run build -``` - -### Lint et corrige les fichiers - -``` -npm run lint -``` - -### Personnaliser la configuration - -Voir [Référence de configuration](https://cli.vuejs.org/config/). - -Crédits : Merci à la version originale de cette application de quiz : https://github.com/arpan45/simple-quiz-vue - -## Déploiement sur Azure - -Voici un guide étape par étape pour vous aider à démarrer : - -1. Forkez un dépôt GitHub -Assurez-vous que le code de votre application web statique est dans votre dépôt GitHub. Forkez ce dépôt. - -2. Créez une application web statique Azure -- Créez un [compte Azure](http://azure.microsoft.com) -- Allez sur le [portail Azure](https://portal.azure.com) -- Cliquez sur « Créer une ressource » et recherchez « Application web statique ». -- Cliquez sur « Créer ». - -3. Configurez l'application web statique -- Bases : Abonnement : Sélectionnez votre abonnement Azure. -- Groupe de ressources : Créez un nouveau groupe de ressources ou utilisez un existant. -- Nom : Fournissez un nom pour votre application web statique. -- Région : Choisissez la région la plus proche de vos utilisateurs. - -- #### Détails du déploiement : -- Source : Sélectionnez « GitHub ». -- Compte GitHub : Autorisez Azure à accéder à votre compte GitHub. -- Organisation : Sélectionnez votre organisation GitHub. -- Dépôt : Choisissez le dépôt contenant votre application web statique. -- Branche : Sélectionnez la branche à partir de laquelle vous souhaitez déployer. - -- #### Détails de la construction : -- Préréglages de construction : Choisissez le framework avec lequel votre application est construite (par exemple, React, Angular, Vue, etc.). -- Emplacement de l'application : Spécifiez le dossier contenant le code de votre application (par exemple, / s'il est à la racine). -- Emplacement de l'API : Si vous avez une API, spécifiez son emplacement (optionnel). -- Emplacement de sortie : Spécifiez le dossier où la sortie de la construction est générée (par exemple, build ou dist). - -4. Examinez et créez -Examinez vos paramètres et cliquez sur « Créer ». Azure mettra en place les ressources nécessaires et créera un workflow GitHub Actions dans votre dépôt. - -5. Workflow GitHub Actions -Azure créera automatiquement un fichier de workflow GitHub Actions dans votre dépôt (.github/workflows/azure-static-web-apps-.yml). Ce workflow gérera le processus de construction et de déploiement. - -6. Surveillez le déploiement -Allez dans l'onglet « Actions » de votre dépôt GitHub. -Vous devriez voir un workflow en cours d'exécution. Ce workflow construira et déploiera votre application web statique sur Azure. -Une fois le workflow terminé, votre application sera en ligne à l'URL Azure fournie. - -### Exemple de fichier de workflow - -Voici un exemple de ce à quoi le fichier de workflow GitHub Actions pourrait ressembler : -name: Azure Static Web Apps CI/CD -``` -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - main - -jobs: - build_and_deploy_job: - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v2 - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} - repo_token: ${{ secrets.GITHUB_TOKEN }} - action: "upload" - app_location: "/quiz-app" # App source code path - api_location: ""API source code path optional - output_location: "dist" #Built app content directory - optional -``` - -### Ressources supplémentaires -- [Documentation des applications web statiques Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [Documentation des actions GitHub](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatisée par IA. Bien que nous visons à garantir l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source autorisée. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/sketchnotes/LICENSE.md b/translations/fr/sketchnotes/LICENSE.md deleted file mode 100644 index 350e4c88..00000000 --- a/translations/fr/sketchnotes/LICENSE.md +++ /dev/null @@ -1,150 +0,0 @@ -# Attribution-ShareAlike 4.0 International - -======================================================================= - -La Creative Commons Corporation ("Creative Commons") n'est pas un cabinet d'avocats et ne fournit pas de services juridiques ni de conseils juridiques. La distribution des licences publiques Creative Commons ne crée pas de relation avocat-client ou autre. Creative Commons met à disposition ses licences et les informations connexes sur une base "telle quelle". Creative Commons ne donne aucune garantie concernant ses licences, tout matériel sous licence en vertu de leurs termes et conditions, ou toute information connexe. Creative Commons décline toute responsabilité pour les dommages résultant de leur utilisation dans toute la mesure permise par la loi. - -## Utilisation des Licences Publiques Creative Commons - -Les licences publiques Creative Commons fournissent un ensemble standard de termes et conditions que les créateurs et autres titulaires de droits peuvent utiliser pour partager des œuvres originales d'auteur et d'autres matériels soumis à des droits d'auteur et à certains autres droits spécifiés dans la licence publique ci-dessous. Les considérations suivantes sont à titre d'information seulement, ne sont pas exhaustives et ne font pas partie de nos licences. - -- Considérations pour les concédants de licence : Nos licences publiques sont destinées à être utilisées par ceux qui sont autorisés à donner au public la permission d'utiliser des matériels de manière autrement restreinte par le droit d'auteur et certains autres droits. Nos licences sont irrévocables. Les concédants de licence doivent lire et comprendre les termes et conditions de la licence qu'ils choisissent avant de l'appliquer. Les concédants de licence doivent également sécuriser tous les droits nécessaires avant d'appliquer nos licences afin que le public puisse réutiliser le matériel comme prévu. Les concédants de licence doivent clairement marquer tout matériel non soumis à la licence. Cela inclut d'autres matériels sous licence CC, ou du matériel utilisé en vertu d'une exception ou d'une limitation au droit d'auteur. Plus de considérations pour les concédants de licence : wiki.creativecommons.org/Considerations_for_licensors - -- Considérations pour le public : En utilisant l'une de nos licences publiques, un concédant de licence accorde au public la permission d'utiliser le matériel sous licence selon les termes et conditions spécifiés. Si la permission du concédant de licence n'est pas nécessaire pour une raison quelconque — par exemple, en raison de toute exception ou limitation applicable au droit d'auteur — alors cette utilisation n'est pas régulée par la licence. Nos licences n'accordent que des permissions en vertu du droit d'auteur et de certains autres droits que le concédant de licence a le pouvoir d'accorder. L'utilisation du matériel sous licence peut encore être restreinte pour d'autres raisons, y compris parce que d'autres ont des droits d'auteur ou d'autres droits sur le matériel. Un concédant de licence peut faire des demandes spéciales, comme demander que tous les changements soient marqués ou décrits. Bien que cela ne soit pas requis par nos licences, il est conseillé de respecter ces demandes lorsque cela est raisonnable. Plus de considérations pour le public : wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -## Licence Publique Creative Commons Attribution-ShareAlike 4.0 International - -En exerçant les Droits Licenciés (définis ci-dessous), vous acceptez et convenez d'être lié par les termes et conditions de cette Licence Publique Creative Commons Attribution-ShareAlike 4.0 International ("Licence Publique"). Dans la mesure où cette Licence Publique peut être interprétée comme un contrat, vous vous voyez accorder les Droits Licenciés en contrepartie de votre acceptation de ces termes et conditions, et le Concédant vous accorde ces droits en contrepartie des avantages que le Concédant reçoit en rendant le Matériel Licencié disponible selon ces termes et conditions. - -### Section 1 -- Définitions. - - a. Matériel Adapté signifie tout matériel soumis au droit d'auteur et aux droits similaires qui est dérivé ou basé sur le Matériel Licencié et dans lequel le Matériel Licencié est traduit, altéré, arrangé, transformé ou modifié d'une autre manière nécessitant une permission en vertu des droits d'auteur et des droits similaires détenus par le Concédant. Aux fins de cette Licence Publique, lorsque le Matériel Licencié est une œuvre musicale, une performance ou un enregistrement sonore, le Matériel Adapté est toujours produit lorsque le Matériel Licencié est synchronisé en relation temporelle avec une image en mouvement. - - b. Licence de l'Adaptateur signifie la licence que vous appliquez à vos droits d'auteur et droits similaires dans vos contributions au Matériel Adapté conformément aux termes et conditions de cette Licence Publique. - - c. Licence Compatible BY-SA signifie une licence listée sur creativecommons.org/compatiblelicenses, approuvée par Creative Commons comme étant essentiellement équivalente à cette Licence Publique. - - d. Droits d'Auteur et Droits Similaires signifie les droits d'auteur et/ou des droits similaires étroitement liés aux droits d'auteur, y compris, sans limitation, la performance, la diffusion, l'enregistrement sonore et les Droits de Base de Données Sui Generis, sans égard à la manière dont les droits sont étiquetés ou catégorisés. Aux fins de cette Licence Publique, les droits spécifiés dans la Section 2(b)(1)-(2) ne sont pas des Droits d'Auteur et Droits Similaires. - - e. Mesures Technologiques Effectives signifie les mesures qui, en l'absence d'une autorité appropriée, ne peuvent pas être contournées en vertu des lois remplissant les obligations de l'Article 11 du Traité de l'OMPI sur le droit d'auteur adopté le 20 décembre 1996, et/ou des accords internationaux similaires. - - f. Exceptions et Limitations signifie l'utilisation équitable, le traitement équitable, et/ou toute autre exception ou limitation aux Droits d'Auteur et Droits Similaires qui s'applique à votre utilisation du Matériel Licencié. - - g. Éléments de Licence signifie les attributs de licence énumérés dans le nom d'une Licence Publique Creative Commons. Les Éléments de Licence de cette Licence Publique sont Attribution et ShareAlike. - - h. Matériel Licencié signifie l'œuvre artistique ou littéraire, la base de données ou tout autre matériel auquel le Concédant a appliqué cette Licence Publique. - - i. Droits Licenciés signifie les droits qui vous sont accordés sous réserve des termes et conditions de cette Licence Publique, qui sont limités à tous les Droits d'Auteur et Droits Similaires qui s'appliquent à votre utilisation du Matériel Licencié et que le Concédant a le pouvoir de concéder. - - j. Concédant signifie la ou les personnes physiques ou entités accordant des droits en vertu de cette Licence Publique. - - k. Partager signifie fournir du matériel au public par tout moyen ou processus nécessitant une permission en vertu des Droits Licenciés, tels que la reproduction, l'affichage public, la performance publique, la distribution, la diffusion, la communication ou l'importation, et rendre le matériel disponible au public y compris de manière à ce que les membres du public puissent accéder au matériel depuis un endroit et à un moment de leur choix. - - l. Droits de Base de Données Sui Generis signifie les droits autres que le droit d'auteur résultant de la Directive 96/9/CE du Parlement Européen et du Conseil du 11 mars 1996 sur la protection juridique des bases de données, telle que modifiée et/ou succédée, ainsi que d'autres droits essentiellement équivalents partout dans le monde. - - m. Vous signifie la personne ou l'entité exerçant les Droits Licenciés en vertu de cette Licence Publique. Votre a un sens correspondant. - -### Section 2 -- Portée. - - a. Octroi de Licence. - - 1. Sous réserve des termes et conditions de cette Licence Publique, le Concédant vous accorde par la présente une licence mondiale, gratuite de redevances, non transférable, non exclusive, irrévocable pour exercer les Droits Licenciés dans le Matériel Licencié pour : - - a. reproduire et Partager le Matériel Licencié, en tout ou en partie ; et - - b. produire, reproduire et Partager du Matériel Adapté. - - 2. Exceptions et Limitations. Pour éviter tout doute, lorsque des Exceptions et Limitations s'appliquent à votre utilisation, cette Licence Publique ne s'applique pas, et vous n'avez pas besoin de vous conformer à ses termes et conditions. - - 3. Durée. La durée de cette Licence Publique est spécifiée dans la Section 6(a). - - 4. Médias et formats ; modifications techniques autorisées. Le Concédant vous autorise à exercer les Droits Licenciés dans tous les médias et formats, qu'ils soient connus aujourd'hui ou créés ultérieurement, et à apporter les modifications techniques nécessaires pour ce faire. Le Concédant renonce et/ou s'engage à ne pas revendiquer tout droit ou autorité pour vous interdire de faire des modifications techniques nécessaires pour exercer les Droits Licenciés, y compris des modifications techniques nécessaires pour contourner les Mesures Technologiques Effectives. Aux fins de cette Licence Publique, le simple fait d'apporter des modifications autorisées par cette Section 2(a)(4) ne produit jamais de Matériel Adapté. - - 5. Destinataires en aval. - - a. Offre du Concédant -- Matériel Licencié. Chaque destinataire du Matériel Licencié reçoit automatiquement une offre du Concédant pour exercer les Droits Licenciés selon les termes et conditions de cette Licence Publique. - - b. Offre supplémentaire du Concédant -- Matériel Adapté. Chaque destinataire de Matériel Adapté de votre part reçoit automatiquement une offre du Concédant pour exercer les Droits Licenciés dans le Matériel Adapté selon les conditions de la Licence de l'Adaptateur que vous appliquez. - - c. Pas de restrictions en aval. Vous ne pouvez pas offrir ou imposer des termes ou conditions supplémentaires ou différents sur, ou appliquer des Mesures Technologiques Effectives à, le Matériel Licencié si cela restreint l'exercice des Droits Licenciés par tout destinataire du Matériel Licencié. - - 6. Pas d'approbation. Rien dans cette Licence Publique ne constitue ou ne peut être interprété comme une permission d'affirmer ou d'impliquer que vous êtes, ou que votre utilisation du Matériel Licencié est, connecté avec, ou sponsorisé, approuvé ou bénéficié d'un statut officiel par, le Concédant ou d'autres désignés pour recevoir une attribution comme prévu dans la Section 3(a)(1)(A)(i). - - b. Autres droits. - - 1. Les droits moraux, tels que le droit à l'intégrité, ne sont pas licenciés en vertu de cette Licence Publique, ni la publicité, la vie privée, et/ou d'autres droits de personnalité similaires ; cependant, dans la mesure du possible, le Concédant renonce et/ou s'engage à ne pas revendiquer de tels droits détenus par le Concédant dans la mesure limitée nécessaire pour vous permettre d'exercer les Droits Licenciés, mais pas autrement. - - 2. Les droits de brevet et de marque ne sont pas licenciés en vertu de cette Licence Publique. - - 3. Dans la mesure du possible, le Concédant renonce à tout droit de percevoir des redevances de votre part pour l'exercice des Droits Licenciés, que ce soit directement ou par l'intermédiaire d'une société de perception sous tout régime de licence statutaire ou obligatoire volontaire ou renonçable. Dans tous les autres cas, le Concédant se réserve expressément tout droit de percevoir de telles redevances. - -### Section 3 -- Conditions de la Licence. - -Votre exercice des Droits Licenciés est expressément soumis aux conditions suivantes. - - a. Attribution. - - 1. Si vous partagez le Matériel Licencié (y compris sous forme modifiée), vous devez : - - a. conserver les éléments suivants s'ils sont fournis par le Concédant avec le Matériel Licencié : - - i. identification du ou des créateurs du Matériel Licencié et de toute autre personne désignée pour recevoir une attribution, de la manière raisonnable demandée par le Concédant (y compris par pseudonyme si désigné) ; - - ii. un avis de droit d'auteur ; - - iii. un avis faisant référence à cette Licence Publique ; - - iv. un avis faisant référence à la clause de non-responsabilité ; - - v. un URI ou un lien hypertexte vers le Matériel Licencié dans la mesure raisonnablement pratique ; - - b. indiquer si vous avez modifié le Matériel Licencié et conserver une indication de toute modification précédente ; et - - c. indiquer que le Matériel Licencié est sous licence en vertu de cette Licence Publique, et inclure le texte de, ou l'URI ou le lien hypertexte vers, cette Licence Publique. - - 2. Vous pouvez satisfaire les conditions de la Section 3(a)(1) de toute manière raisonnable en fonction du média, des moyens et du contexte dans lequel vous partagez le Matériel Licencié. Par exemple, il peut être raisonnable de satisfaire les conditions en fournissant un URI ou un lien hypertexte vers une ressource qui inclut les informations requises. - - 3. Si le Concédant le demande, vous devez supprimer toute information requise par la Section 3(a)(1)(A) dans la mesure raisonnablement pratique. - - b. ShareAlike. - - En plus des conditions de la Section 3(a), si vous partagez le Matériel Adapté que vous produisez, les conditions suivantes s'appliquent également. - - 1. La Licence de l'Adaptateur que vous appliquez doit être une licence Creative Commons avec les mêmes Éléments de Licence, cette version ou ultérieure, ou une Licence Compatible BY-SA. - - 2. Vous devez inclure le texte de, ou l'URI ou le lien hypertexte vers, la Licence de l'Adaptateur que vous appliquez. Vous pouvez satisfaire cette condition de toute manière raisonnable en fonction du média, des moyens et du contexte dans lequel vous partagez le Matériel Adapté. - - 3. Vous ne pouvez pas offrir ou imposer des termes ou conditions supplémentaires ou différents sur, ou appliquer des Mesures Technologiques Effectives à, le Matériel Adapté qui restreignent l'exercice des droits accordés en vertu de la Licence de l'Adaptateur que vous appliquez. - -### Section 4 -- Droits de Base de Données Sui Generis. - -Lorsque les Droits Licenciés incluent des Droits de Base de Données Sui Generis qui s'appliquent à votre utilisation du Matériel Licencié : - - a. pour éviter tout doute, la Section 2(a)(1) vous accorde le droit d'extraire, réutiliser, reproduire et partager tout ou une partie substantielle du contenu de la base de données ; - - b. si vous incluez tout ou une partie substantielle du contenu de la base de données dans une base de données dans laquelle vous détenez des Droits de Base de Données Sui Generis, alors la base de données dans laquelle vous détenez des Droits de Base de Données Sui Generis (mais pas ses contenus individuels) est du Matériel Adapté, - - y compris aux fins de la Section 3(b) ; et - - c. vous devez vous conformer aux conditions de la Section 3(a) si vous partagez tout ou une partie substantielle du contenu de la base de données. - -Pour éviter tout doute, cette Section 4 complète et ne remplace pas vos obligations en vertu de cette Licence Publique lorsque les Droits Licenciés incluent d'autres Droits d'Auteur et Droits Similaires. - -### Section 5 -- Clause de Non-Responsabilité et Limitation de Responsabilité. - - a. À MOINS D'UN ENGAGEMENT SÉPARÉ DU CONCÉDANT, DANS LA MESURE DU POSSIBLE, LE CONCÉDANT OFFRE LE MATÉRIEL LICENCIÉ TEL QUEL ET TEL QU'IL EST DISPONIBLE, ET NE FAIT AUCUNE DÉCLARATION OU GARANTIE D'AUCUNE SORTE CONCERNANT LE MATÉRIEL LICENCIÉ, QU'IL SOIT EXPRIMÉ, IMPLICITE, STATUTAIRE OU AUTRE. CECI INCLUT, SANS LIMITATION, DES GARANTIES DE TITRE, DE COMMERCIALISATION, D'ADAPTATION À UN USAGE PARTICULIER, DE NON-INFRINGEMENT, D'ABSENCE DE DÉFAUTS LATENTS OU AUTRES, D'EXACTITUDE, OU DE LA PRÉSENCE OU DE L'ABSENCE D'ERREURS, QUELLE QUE SOIT LA CONNAISSANCE OU LA DÉCOUVERTE. LÀ OÙ LES CLAUSES DE NON-RESPONSABILITÉ NE SONT PAS AUTORISÉES EN TOTALITÉ OU EN PARTIE, CETTE CLAUSE DE NON-RESPONSABILITÉ PEUT NE PAS S'APPLIQUER À VOUS. - - b. DANS LA MESURE DU POSSIBLE, EN AUCUN CAS LE CONCÉDANT NE SERA RESPONSABLE ENVERS VOUS SUR AUCUNE THÉORIE JURIDIQUE (Y COMPRIS, SANS LIMITATION, LA NÉGLIGENCE) OU AUTRE POUR DES PERTES DIRECTES, SPÉCIALES, INDIRECTES, ACCESSOIRES, CONSÉCUTIVES, PUNITIVES, EXEMPLAIRES, OU AUTRES, COÛTS, DÉPENSES OU DOMMAGES RESSORTANT À CETTE LICENCE PUBLIQUE OU À L'UTILISATION DU MATÉRIEL LICENCIÉ, MÊME SI LE CONCÉDANT A ÉTÉ AVISÉ DE LA POSSIBILITÉ DE TELS PERTES, COÛTS, DÉPENSES OU DOMMAGES. LÀ OÙ UNE LIMITATION DE RESPONSABILITÉ N'EST PAS AUTORISÉE EN TOTALITÉ OU EN PARTIE, CETTE LIMITATION PEUT NE PAS S'APPLIQUER À VOUS. - - c. La clause de non-responsabilité et la limitation de responsabilité fournies ci-dessus doivent être interprétées de manière à, dans la mesure du possible, s'approcher le plus d'une clause de non-responsabilité absolue et d'une renonciation à toute responsabilité. - -### Section 6 -- Durée et Résiliation. - - a. Cette Licence Publique s'applique pour la durée des Droits d'Auteur et Droits Similaires licenciés ici. Cependant, si vous ne vous conformez pas à cette Licence Publique, alors vos droits en vertu de cette Licence Publique prennent fin automatiquement. - - b. Lorsque votre droit d'utiliser le Matériel Licencié a pris fin en vertu de la - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'assurer l'exactitude, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue native doit être considéré comme la source faisant autorité. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/fr/sketchnotes/README.md b/translations/fr/sketchnotes/README.md deleted file mode 100644 index 3e60f3a3..00000000 --- a/translations/fr/sketchnotes/README.md +++ /dev/null @@ -1,10 +0,0 @@ -Tous les sketchnotes du programme peuvent être téléchargés ici. - -🖨 Pour une impression en haute résolution, les versions TIFF sont disponibles dans [ce dépôt](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). - -🎨 Créé par : [Tomomi Imura](https://github.com/girliemac) (Twitter : [@girlie_mac](https://twitter.com/girlie_mac)) - -[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) - -**Avertissement** : -Ce document a été traduit à l'aide de services de traduction automatique basés sur l'IA. Bien que nous nous efforçons d'atteindre une précision, veuillez noter que les traductions automatiques peuvent contenir des erreurs ou des inexactitudes. Le document original dans sa langue natale doit être considéré comme la source autoritaire. Pour des informations critiques, une traduction humaine professionnelle est recommandée. Nous ne sommes pas responsables des malentendus ou des interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file diff --git a/translations/hi/1-Introduction/1-intro-to-ML/README.md b/translations/hi/1-Introduction/1-intro-to-ML/README.md deleted file mode 100644 index 3349ecea..00000000 --- a/translations/hi/1-Introduction/1-intro-to-ML/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# मशीन लर्निंग का परिचय - -## [प्रारंभिक क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - ---- - -[![शुरुआत के लिए मशीन लर्निंग - शुरुआत के लिए मशीन लर्निंग का परिचय](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 "मशीन लर्निंग का परिचय") - -> 🎥 एक वीडियो के लिए ऊपर दी गई छवि पर क्लिक करें: एमआईटी के जॉन गुट्टाग मशीन लर्निंग का परिचय देते हैं - ---- -## मशीन लर्निंग के साथ शुरुआत - -इस पाठ्यक्रम को शुरू करने से पहले, आपको अपने कंप्यूटर को सेट अप और नोटबुक्स को लोकली चलाने के लिए तैयार करना होगा। - -- **इन वीडियो के साथ अपने मशीन को कॉन्फ़िगर करें**। अपने सिस्टम में [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/) को इंस्टॉल करने की आवश्यकता होगी, साथ ही [Visual Studio Code](https://code.visualstudio.com/) को Python और JavaScript विकास दोनों के लिए उपलब्ध रखना होगा। -- **GitHub खाता बनाएं**। चूंकि आपने हमें [GitHub](https://github.com) पर पाया है, आपके पास पहले से एक खाता हो सकता है, लेकिन अगर नहीं है, तो एक खाता बनाएं और फिर इस पाठ्यक्रम को अपने उपयोग के लिए फोर्क करें। (हमें एक स्टार देने में भी संकोच न करें 😊) -- **Scikit-learn को एक्सप्लोर करें**। [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) से परिचित हों, एक सेट एमएल लाइब्रेरीज़ जो हम इन पाठों में संदर्भित करते हैं। - ---- -## मशीन लर्निंग क्या है? - -'मशीन लर्निंग' शब्द आज के सबसे लोकप्रिय और अक्सर उपयोग किए जाने वाले शब्दों में से एक है। यह एक महत्वपूर्ण संभावना है कि आपने इस शब्द को कम से कम एक बार सुना होगा यदि आप किसी प्रकार की प्रौद्योगिकी से परिचित हैं, चाहे आप किसी भी क्षेत्र में काम करते हों। हालांकि, मशीन लर्निंग की यांत्रिकी अधिकांश लोगों के लिए एक रहस्य है। एक मशीन लर्निंग शुरुआती के लिए, विषय कभी-कभी भारी महसूस हो सकता है। इसलिए, यह समझना महत्वपूर्ण है कि मशीन लर्निंग वास्तव में क्या है, और इसे व्यावहारिक उदाहरणों के माध्यम से चरण-दर-चरण सीखना है। - ---- -## प्रचार वक्र - -![ml प्रचार वक्र](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.hi.png) - -> गूगल ट्रेंड्स 'मशीन लर्निंग' शब्द के हाल के 'प्रचार वक्र' को दिखाता है - ---- -## एक रहस्यमय ब्रह्मांड - -हम एक ऐसे ब्रह्मांड में रहते हैं जो आकर्षक रहस्यों से भरा हुआ है। महान वैज्ञानिक जैसे स्टीफन हॉकिंग, अल्बर्ट आइंस्टीन, और कई अन्य ने हमारे चारों ओर की दुनिया के रहस्यों को उजागर करने वाली महत्वपूर्ण जानकारी खोजने के लिए अपना जीवन समर्पित कर दिया है। यह सीखने की मानवीय स्थिति है: एक मानव बच्चा नई चीजें सीखता है और जैसे-जैसे वह वयस्कता की ओर बढ़ता है, अपने विश्व की संरचना को उजागर करता है। - ---- -## बच्चे का मस्तिष्क - -एक बच्चे का मस्तिष्क और इंद्रियां अपने परिवेश के तथ्यों को समझते हैं और धीरे-धीरे जीवन के छिपे हुए पैटर्न को सीखते हैं जो बच्चे को सीखे गए पैटर्न की पहचान करने के लिए तार्किक नियम बनाने में मदद करते हैं। मानव मस्तिष्क की सीखने की प्रक्रिया मनुष्यों को इस दुनिया का सबसे परिष्कृत जीवित प्राणी बनाती है। छिपे हुए पैटर्न की खोज करके लगातार सीखना और फिर उन पैटर्न पर नवाचार करना हमें हमारे जीवनकाल में खुद को बेहतर बनाने में सक्षम बनाता है। यह सीखने की क्षमता और विकसित होने की क्षमता एक अवधारणा से संबंधित है जिसे [मस्तिष्क की प्लास्टिसिटी](https://www.simplypsychology.org/brain-plasticity.html) कहा जाता है। सतही तौर पर, हम मानव मस्तिष्क की सीखने की प्रक्रिया और मशीन लर्निंग की अवधारणाओं के बीच कुछ प्रेरणादायक समानताएं खींच सकते हैं। - ---- -## मानव मस्तिष्क - -[मानव मस्तिष्क](https://www.livescience.com/29365-human-brain.html) वास्तविक दुनिया से चीजों को समझता है, समझी गई जानकारी को संसाधित करता है, तार्किक निर्णय लेता है, और परिस्थितियों के आधार पर कुछ कार्य करता है। इसे हम बुद्धिमानी से व्यवहार करना कहते हैं। जब हम बुद्धिमान व्यवहार प्रक्रिया की नकल को एक मशीन में प्रोग्राम करते हैं, तो इसे कृत्रिम बुद्धिमत्ता (AI) कहा जाता है। - ---- -## कुछ शब्दावली - -हालांकि शब्दों को भ्रमित किया जा सकता है, मशीन लर्निंग (ML) कृत्रिम बुद्धिमत्ता का एक महत्वपूर्ण उपसमूह है। **एमएल का संबंध विशेष एल्गोरिदम का उपयोग करके महत्वपूर्ण जानकारी को उजागर करने और समझी गई डेटा से छिपे हुए पैटर्न को खोजने से है ताकि तार्किक निर्णय लेने की प्रक्रिया को प्रमाणित किया जा सके**। - ---- -## एआई, एमएल, डीप लर्निंग - -![एआई, एमएल, डीप लर्निंग, डेटा साइंस](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.hi.png) - -> एआई, एमएल, डीप लर्निंग, और डेटा साइंस के बीच संबंधों को दिखाने वाला एक आरेख। [Jen Looper](https://twitter.com/jenlooper) द्वारा प्रेरित [इस ग्राफिक](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) से प्रेरित इन्फोग्राफिक - ---- -## कवर करने के लिए अवधारणाएँ - -इस पाठ्यक्रम में, हम केवल मशीन लर्निंग की मुख्य अवधारणाओं को कवर करेंगे जो एक शुरुआती को जानना चाहिए। हम मुख्य रूप से Scikit-learn का उपयोग करके 'क्लासिकल मशीन लर्निंग' को कवर करेंगे, एक उत्कृष्ट लाइब्रेरी जिसका उपयोग कई छात्र बुनियादी बातों को सीखने के लिए करते हैं। कृत्रिम बुद्धिमत्ता या डीप लर्निंग की व्यापक अवधारणाओं को समझने के लिए, मशीन लर्निंग का एक मजबूत बुनियादी ज्ञान अपरिहार्य है, और इसलिए हम इसे यहां पेश करना चाहेंगे। - ---- -## इस कोर्स में आप सीखेंगे: - -- मशीन लर्निंग की मुख्य अवधारणाएँ -- एमएल का इतिहास -- एमएल और निष्पक्षता -- प्रतिगमन एमएल तकनीकें -- वर्गीकरण एमएल तकनीकें -- क्लस्टरिंग एमएल तकनीकें -- प्राकृतिक भाषा प्रसंस्करण एमएल तकनीकें -- समय श्रृंखला पूर्वानुमान एमएल तकनीकें -- सुदृढीकरण सीखना -- एमएल के वास्तविक दुनिया के अनुप्रयोग - ---- -## हम क्या कवर नहीं करेंगे - -- डीप लर्निंग -- न्यूरल नेटवर्क्स -- एआई - -बेहतर सीखने के अनुभव के लिए, हम न्यूरल नेटवर्क्स, 'डीप लर्निंग' - न्यूरल नेटवर्क्स का उपयोग करके कई-स्तरीय मॉडल-निर्माण - और एआई की जटिलताओं से बचेंगे, जिसे हम एक अलग पाठ्यक्रम में चर्चा करेंगे। हम एक आगामी डेटा साइंस पाठ्यक्रम भी पेश करेंगे जो इस बड़े क्षेत्र के उस पहलू पर ध्यान केंद्रित करेगा। - ---- -## मशीन लर्निंग क्यों पढ़ें? - -मशीन लर्निंग, सिस्टम दृष्टिकोण से, डेटा से छिपे हुए पैटर्न को सीखने के लिए स्वचालित सिस्टम बनाने के रूप में परिभाषित किया गया है ताकि बुद्धिमान निर्णय लेने में मदद मिल सके। - -यह प्रेरणा ढीली तौर पर इस बात से प्रेरित है कि मानव मस्तिष्क बाहरी दुनिया से प्राप्त डेटा के आधार पर कुछ चीजें कैसे सीखता है। - -✅ एक मिनट के लिए सोचें कि एक व्यवसाय हार्ड-कोडेड नियम-आधारित इंजन बनाने के बजाय मशीन लर्निंग रणनीतियों का उपयोग क्यों करना चाहेगा। - ---- -## मशीन लर्निंग के अनुप्रयोग - -मशीन लर्निंग के अनुप्रयोग अब लगभग हर जगह हैं, और हमारे समाजों के चारों ओर बहने वाले डेटा के रूप में सर्वव्यापी हैं, जो हमारे स्मार्ट फोन, जुड़े हुए उपकरणों और अन्य प्रणालियों द्वारा उत्पन्न होते हैं। अत्याधुनिक मशीन लर्निंग एल्गोरिदम की अपार संभावनाओं को देखते हुए, शोधकर्ता उनके क्षमता का पता लगा रहे हैं कि वे बहुआयामी और बहु-विषयक वास्तविक जीवन की समस्याओं को सकारात्मक परिणामों के साथ हल करने में सक्षम हैं। - ---- -## लागू एमएल के उदाहरण - -**आप कई तरीकों से मशीन लर्निंग का उपयोग कर सकते हैं**: - -- एक रोगी के चिकित्सा इतिहास या रिपोर्ट से बीमारी की संभावना की भविष्यवाणी करने के लिए। -- मौसम की घटनाओं की भविष्यवाणी करने के लिए मौसम डेटा का लाभ उठाने के लिए। -- एक पाठ की भावना को समझने के लिए। -- प्रचार के प्रसार को रोकने के लिए नकली समाचारों का पता लगाने के लिए। - -वित्त, अर्थशास्त्र, पृथ्वी विज्ञान, अंतरिक्ष अन्वेषण, बायोमेडिकल इंजीनियरिंग, संज्ञानात्मक विज्ञान, और यहां तक कि मानविकी के क्षेत्र भी अपने डोमेन की कठिन, डेटा-प्रसंस्करण भारी समस्याओं को हल करने के लिए मशीन लर्निंग को अनुकूलित कर चुके हैं। - ---- -## निष्कर्ष - -मशीन लर्निंग वास्तविक दुनिया या उत्पन्न डेटा से महत्वपूर्ण अंतर्दृष्टि खोजने के द्वारा पैटर्न-खोज की प्रक्रिया को स्वचालित करता है। इसने व्यापार, स्वास्थ्य, और वित्तीय अनुप्रयोगों में, अन्य क्षेत्रों में, खुद को अत्यधिक मूल्यवान साबित किया है। - -निकट भविष्य में, किसी भी डोमेन के लोगों के लिए मशीन लर्निंग की बुनियादी बातों को समझना एक आवश्यकता बनने जा रहा है क्योंकि इसका व्यापक रूप से अपनाया जा रहा है। - ---- -# 🚀 चुनौती - -कागज पर या [Excalidraw](https://excalidraw.com/) जैसे ऑनलाइन ऐप का उपयोग करके, एआई, एमएल, डीप लर्निंग, और डेटा साइंस के बीच अंतर को समझने के लिए अपना स्केच बनाएं। कुछ समस्याओं के विचार जोड़ें जो इन तकनीकों में से प्रत्येक के हल करने के लिए अच्छे हैं। - -# [पाठ के बाद का क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - ---- -# समीक्षा और आत्म अध्ययन - -क्लाउड में एमएल एल्गोरिदम के साथ कैसे काम कर सकते हैं, यह जानने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) का पालन करें। - -एमएल की मूल बातें के बारे में सीखने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) को लें। - ---- -# असाइनमेंट - -[शुरू करें](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/1-intro-to-ML/assignment.md b/translations/hi/1-Introduction/1-intro-to-ML/assignment.md deleted file mode 100644 index 28d944c5..00000000 --- a/translations/hi/1-Introduction/1-intro-to-ML/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# शुरुआत करें और चलाएं - -## निर्देश - -इस गैर-ग्रेडेड असाइनमेंट में, आपको Python पर पुनः विचार करना चाहिए और अपने पर्यावरण को सेटअप और चलाने के योग्य बनाना चाहिए ताकि नोटबुक्स चला सकें। - -इस [Python Learning Path](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) को लें, और फिर इन प्रारंभिक वीडियो को देखकर अपने सिस्टम्स को सेटअप करें: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/2-history-of-ML/README.md b/translations/hi/1-Introduction/2-history-of-ML/README.md deleted file mode 100644 index dafb61f8..00000000 --- a/translations/hi/1-Introduction/2-history-of-ML/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# मशीन लर्निंग का इतिहास - -![मशीन लर्निंग के इतिहास का सारांश एक स्केच नोट में](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.hi.png) -> स्केच नोट [Tomomi Imura](https://www.twitter.com/girlie_mac) द्वारा - -## [व्याख्यान से पहले का क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - ---- - -[![शुरुआती लोगों के लिए मशीन लर्निंग - मशीन लर्निंग का इतिहास](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) एक एल्गोरिदम है जिसे मूल रूप से मार्गों को मैप करने के लिए डिज़ाइन किया गया था। एमएल संदर्भ में इसका उपयोग पैटर्न का पता लगाने के लिए किया जाता है। -- 1970 [बैकप्रोपेगेशन](https://wikipedia.org/wiki/Backpropagation) का उपयोग [फीडफॉरवर्ड न्यूरल नेटवर्क](https://wikipedia.org/wiki/Feedforward_neural_network) को प्रशिक्षित करने के लिए किया जाता है। -- 1982 [रिकरंट न्यूरल नेटवर्क](https://wikipedia.org/wiki/Recurrent_neural_network) कृत्रिम न्यूरल नेटवर्क हैं जो फीडफॉरवर्ड न्यूरल नेटवर्क से प्राप्त होते हैं और अस्थायी ग्राफ़ बनाते हैं। - -✅ थोड़ा शोध करें। एमएल और एआई के इतिहास में कौन सी अन्य तिथियाँ महत्वपूर्ण हैं? - ---- -## 1950: सोचने वाली मशीनें - -एलन ट्यूरिंग, एक वास्तव में उल्लेखनीय व्यक्ति जिन्हें [2019 में जनता द्वारा](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 20वीं सदी के सबसे महान वैज्ञानिक के रूप में वोट दिया गया, को 'सोचने वाली मशीन' की अवधारणा की नींव रखने में मदद करने का श्रेय दिया जाता है। उन्होंने इस अवधारणा के लिए ठोस प्रमाण की आवश्यकता और नकारात्मक विचारों से निपटने के लिए [ट्यूरिंग टेस्ट](https://www.bbc.com/news/technology-18475646) बनाया, जिसे आप हमारे एनएलपी पाठों में अन्वेषित करेंगे। - ---- -## 1956: डार्टमाउथ समर रिसर्च प्रोजेक्ट - -"कृत्रिम बुद्धिमत्ता पर डार्टमाउथ समर रिसर्च प्रोजेक्ट कृत्रिम बुद्धिमत्ता के क्षेत्र के लिए एक महत्वपूर्ण घटना थी," और यहीं पर 'कृत्रिम बुद्धिमत्ता' शब्द गढ़ा गया ([स्रोत](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth))। - -> सीखने या बुद्धिमत्ता की किसी भी अन्य विशेषता के हर पहलू को सैद्धांतिक रूप से इतनी सटीकता से वर्णित किया जा सकता है कि एक मशीन को इसे अनुकरण करने के लिए बनाया जा सकता है। - ---- - -मुख्य शोधकर्ता, गणित के प्रोफेसर जॉन मैकार्थी ने "इस अनुमान के आधार पर आगे बढ़ने की उम्मीद की कि सीखने या बुद्धिमत्ता की किसी भी अन्य विशेषता के हर पहलू को सैद्धांतिक रूप से इतनी सटीकता से वर्णित किया जा सकता है कि एक मशीन को इसे अनुकरण करने के लिए बनाया जा सकता है।" प्रतिभागियों में इस क्षेत्र के एक अन्य प्रमुख व्यक्ति, मार्विन मिंस्की भी शामिल थे। - -इस कार्यशाला का श्रेय कई चर्चाओं को शुरू करने और प्रोत्साहित करने के लिए दिया जाता है, जिसमें "प्रतीकात्मक तरीकों का उदय, सीमित डोमेन पर केंद्रित सिस्टम (प्रारंभिक विशेषज्ञ सिस्टम), और डिडक्टिव सिस्टम बनाम इंडक्टिव सिस्टम" शामिल हैं। ([स्रोत](https://wikipedia.org/wiki/Dartmouth_workshop))। - ---- -## 1956 - 1974: "स्वर्णिम वर्ष" - -1950 के दशक से लेकर 70 के दशक के मध्य तक, एआई से कई समस्याओं को हल करने की उम्मीद में बहुत आशावाद था। 1967 में, मार्विन मिंस्की ने आत्मविश्वास से कहा कि "एक पीढ़ी के भीतर ... 'कृत्रिम बुद्धिमत्ता' बनाने की समस्या काफी हद तक हल हो जाएगी।" (मिंस्की, मार्विन (1967), कम्प्यूटेशन: फाइनाइट और इनफिनाइट मशीनें, एंगलवुड क्लिफ्स, एन.जे.: प्रेंटिस-हॉल) - -प्राकृतिक भाषा प्रसंस्करण अनुसंधान फल-फूल रहा था, खोज को परिष्कृत और अधिक शक्तिशाली बनाया गया, और 'माइक्रो-वर्ल्ड्स' की अवधारणा बनाई गई, जहां साधारण कार्यों को सादा भाषा निर्देशों का उपयोग करके पूरा किया गया। - ---- - -अनुसंधान को सरकारी एजेंसियों द्वारा अच्छी तरह से वित्त पोषित किया गया था, कम्प्यूटेशन और एल्गोरिदम में प्रगति हुई, और बुद्धिमान मशीनों के प्रोटोटाइप बनाए गए। इनमें से कुछ मशीनें शामिल हैं: - -* [शेकी द रोबोट](https://wikipedia.org/wiki/Shakey_the_robot), जो कार्यों को 'बुद्धिमानी से' करने के लिए निर्णय ले सकता था। - - ![शेकी, एक बुद्धिमान रोबोट](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.hi.jpg) - > 1972 में शेकी - ---- - -* एलिजा, एक प्रारंभिक 'चैटरबॉट', लोगों से बात कर सकता था और एक आदिम 'चिकित्सक' के रूप में कार्य कर सकता था। आप एनएलपी पाठों में एलिजा के बारे में और जानेंगे। - - ![एलिजा, एक बॉट](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.hi.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: "एआई विंटर" - -1970 के दशक के मध्य तक, यह स्पष्ट हो गया था कि 'बुद्धिमान मशीनें' बनाने की जटिलता को कम करके आंका गया था और उपलब्ध कम्प्यूट पावर को देखते हुए इसकी संभावनाओं को बढ़ा-चढ़ा कर पेश किया गया था। वित्त पोषण सूख गया और क्षेत्र में विश्वास धीमा हो गया। कुछ मुद्दे जिन्होंने विश्वास को प्रभावित किया उनमें शामिल थे: ---- -- **सीमाएँ**. कम्प्यूट पावर बहुत सीमित थी। -- **कॉम्बिनेटोरियल विस्फोट**. कंप्यूटरों से अधिक मांग की जाने पर प्रशिक्षित किए जाने वाले मापदंडों की मात्रा तेजी से बढ़ गई, बिना कम्प्यूट पावर और क्षमता के समानांतर विकास के। -- **डेटा की कमी**. परीक्षण, विकास और एल्गोरिदम को परिष्कृत करने की प्रक्रिया में डेटा की कमी बाधा उत्पन्न कर रही थी। -- **क्या हम सही प्रश्न पूछ रहे हैं?**. जिन प्रश्नों को पूछा जा रहा था, वे ही सवालों के घेरे में आने लगे। शोधकर्ताओं ने अपने दृष्टिकोणों के बारे में आलोचना का सामना करना शुरू किया: - - ट्यूरिंग परीक्षणों पर 'चीनी कक्ष सिद्धांत' के माध्यम से प्रश्न उठाए गए, जिसमें कहा गया था कि, "एक डिजिटल कंप्यूटर को प्रोग्राम करना भाषा को समझने का आभास दे सकता है, लेकिन वास्तविक समझ उत्पन्न नहीं कर सकता।" ([स्रोत](https://plato.stanford.edu/entries/chinese-room/)) - - समाज में "चिकित्सक" एलिजा जैसी कृत्रिम बुद्धिमत्ता को पेश करने के नैतिकता पर सवाल उठाया गया। - ---- - -इसी समय, विभिन्न एआई विचारधाराओं का गठन होने लगा। ["स्क्रफी" बनाम "नीट एआई"](https://wikipedia.org/wiki/Neats_and_scruffies) प्रथाओं के बीच एक द्वैतता स्थापित की गई। _स्क्रफी_ प्रयोगशालाएं घंटों तक प्रोग्रामों को तब तक समायोजित करती रहीं जब तक उन्हें वांछित परिणाम नहीं मिल गए। _नीट_ प्रयोगशालाएं "तर्क और औपचारिक समस्या समाधान पर केंद्रित थीं"। एलिजा और SHRDLU प्रसिद्ध _स्क्रफी_ सिस्टम थे। 1980 के दशक में, जब एमएल सिस्टम को पुनरुत्पादन योग्य बनाने की मांग उभरी, तो _नीट_ दृष्टिकोण ने धीरे-धीरे प्रमुखता प्राप्त की क्योंकि इसके परिणाम अधिक व्याख्यात्मक हैं। - ---- -## 1980 के दशक के विशेषज्ञ सिस्टम - -जैसे-जैसे क्षेत्र बढ़ता गया, इसका व्यवसाय के लिए लाभ स्पष्ट होता गया, और 1980 के दशक में 'विशेषज्ञ सिस्टम' का प्रसार भी हुआ। "विशेषज्ञ सिस्टम कृत्रिम बुद्धिमत्ता (एआई) सॉफ़्टवेयर के पहले वास्तव में सफल रूपों में से थे।" ([स्रोत](https://wikipedia.org/wiki/Expert_system))। - -इस प्रकार की प्रणाली वास्तव में _हाइब्रिड_ है, जिसमें आंशिक रूप से व्यापार आवश्यकताओं को परिभाषित करने वाला एक नियम इंजन, और एक अनुमान इंजन शामिल है जो नए तथ्यों को निष्कर्षित करने के लिए नियम प्रणाली का लाभ उठाता है। - -इस युग में न्यूरल नेटवर्क पर भी बढ़ती ध्यान दी गई। - ---- -## 1987 - 1993: एआई 'चिल' - -विशिष्ट विशेषज्ञ सिस्टम हार्डवेयर का प्रसार दुर्भाग्यवश बहुत विशिष्ट हो जाने का प्रभाव था। व्यक्तिगत कंप्यूटरों का उदय भी इन बड़े, विशिष्ट, केंद्रीकृत प्रणालियों के साथ प्रतिस्पर्धा कर रहा था। कंप्यूटिंग का लोकतंत्रीकरण शुरू हो गया था, और इसने अंततः बड़े डेटा के आधुनिक विस्फोट का मार्ग प्रशस्त किया। - ---- -## 1993 - 2011 - -इस युग ने एमएल और एआई के लिए उन समस्याओं को हल करने के लिए एक नए युग की शुरुआत की जो पहले डेटा और कम्प्यूट पावर की कमी के कारण उत्पन्न हुई थीं। डेटा की मात्रा तेजी से बढ़ने लगी और अधिक व्यापक रूप से उपलब्ध होने लगी, बेहतर और बदतर दोनों के लिए, विशेष रूप से 2007 के आसपास स्मार्टफोन के आगमन के साथ। कम्प्यूट पावर तेजी से बढ़ी, और एल्गोरिदम के साथ विकसित हुई। क्षेत्र ने परिपक्वता प्राप्त करना शुरू किया क्योंकि पिछले दिनों की स्वतंत्रता एक सच्चे अनुशासन में क्रिस्टलाइज होने लगी। - ---- -## अब - -आज मशीन लर्निंग और एआई हमारे जीवन के लगभग हर हिस्से को छूते हैं। यह युग इन एल्गोरिदम के मानव जीवन पर संभावित प्रभावों और जोखिमों की सावधानीपूर्वक समझ की मांग करता है। जैसा कि माइक्रोसॉफ्ट के ब्रैड स्मिथ ने कहा है, "सूचना प्रौद्योगिकी ऐसे मुद्दे उठाती है जो गोपनीयता और अभिव्यक्ति की स्वतंत्रता जैसे मौलिक मानवाधिकारों के संरक्षण के मूल में जाते हैं। ये मुद्दे उन तकनीकी कंपनियों के लिए जिम्मेदारी बढ़ाते हैं जो इन उत्पादों का निर्माण करती हैं। हमारे विचार में, वे विचारशील सरकारी विनियमन और स्वीकार्य उपयोगों के आसपास मानदंडों के विकास के लिए भी कहते हैं" ([स्रोत](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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - ---- -## समीक्षा और स्व-अध्ययन - -यहां देखने और सुनने के लिए आइटम हैं: - -[यह पॉडकास्ट जहां एमी बॉयड एआई के विकास पर चर्चा करती हैं](http://runasradio.com/Shows/Show/739) -[![The history of AI by Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "The history of AI by Amy Boyd") - ---- - -## असाइनमेंट - -[एक टाइमलाइन बनाएं](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/2-history-of-ML/assignment.md b/translations/hi/1-Introduction/2-history-of-ML/assignment.md deleted file mode 100644 index 8673c31c..00000000 --- a/translations/hi/1-Introduction/2-history-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक टाइमलाइन बनाएँ - -## निर्देश - -[इस रिपॉजिटरी](https://github.com/Digital-Humanities-Toolkit/timeline-builder) का उपयोग करके, एल्गोरिदम, गणित, सांख्यिकी, एआई, या एमएल के इतिहास के किसी पहलू की एक टाइमलाइन बनाएँ, या इनका संयोजन करें। आप एक व्यक्ति, एक विचार, या विचारों के लंबे समयावधि पर ध्यान केंद्रित कर सकते हैं। सुनिश्चित करें कि आप मल्टीमीडिया तत्व जोड़ें। - -## मूल्यांकन मापदंड - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता है | -| -------- | ------------------------------------------------- | --------------------------------------- | ------------------------------------------------------------ | -| | एक प्रकाशित टाइमलाइन GitHub पेज के रूप में प्रस्तुत की गई है | कोड अधूरा है और प्रकाशित नहीं है | टाइमलाइन अधूरी है, अच्छी तरह से शोध नहीं की गई है और प्रकाशित नहीं है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/3-fairness/README.md b/translations/hi/1-Introduction/3-fairness/README.md deleted file mode 100644 index a2330cff..00000000 --- a/translations/hi/1-Introduction/3-fairness/README.md +++ /dev/null @@ -1,131 +0,0 @@ -# जिम्मेदार AI के साथ मशीन लर्निंग समाधान बनाना - -![मशीन लर्निंग में जिम्मेदार AI का सारांश एक स्केच नोट में](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.hi.png) -> स्केच नोट द्वारा [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [पूर्व-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## परिचय - -इस पाठ्यक्रम में, आप जानेंगे कि मशीन लर्निंग कैसे और किस प्रकार हमारे दैनिक जीवन को प्रभावित कर रही है। आज भी, सिस्टम और मॉडल स्वास्थ्य देखभाल निदान, ऋण स्वीकृति या धोखाधड़ी का पता लगाने जैसे दैनिक निर्णय लेने के कार्यों में शामिल हैं। इसलिए, यह महत्वपूर्ण है कि ये मॉडल अच्छे से काम करें और विश्वसनीय परिणाम प्रदान करें। जैसे किसी भी सॉफ्टवेयर एप्लिकेशन में, AI सिस्टम भी उम्मीदों को पूरा करने में असफल हो सकते हैं या अवांछित परिणाम दे सकते हैं। यही कारण है कि AI मॉडल के व्यवहार को समझना और समझाना आवश्यक है। - -कल्पना करें कि जब आप इन मॉडलों को बनाने के लिए जिस डेटा का उपयोग कर रहे हैं उसमें कुछ जनसांख्यिकी की कमी हो, जैसे कि जाति, लिंग, राजनीतिक दृष्टिकोण, धर्म, या अनुपातहीन रूप से कुछ जनसांख्यिकी का प्रतिनिधित्व करता हो। क्या होगा जब मॉडल के आउटपुट को किसी जनसांख्यिकी के पक्ष में व्याख्या की जाती है? एप्लिकेशन के लिए इसका परिणाम क्या होगा? इसके अलावा, जब मॉडल का प्रतिकूल परिणाम होता है और यह लोगों के लिए हानिकारक होता है, तो क्या होता है? AI सिस्टम के व्यवहार के लिए कौन जिम्मेदार है? ये कुछ सवाल हैं जिन्हें हम इस पाठ्यक्रम में खोजेंगे। - -इस पाठ में, आप: - -- मशीन लर्निंग में निष्पक्षता और निष्पक्षता-संबंधित हानियों के महत्व के बारे में जागरूकता बढ़ाएंगे। -- विश्वसनीयता और सुरक्षा सुनिश्चित करने के लिए अपवादों और असामान्य परिदृश्यों की जांच करने के अभ्यास से परिचित होंगे। -- समावेशी सिस्टम डिज़ाइन करके सभी को सशक्त बनाने की आवश्यकता को समझेंगे। -- डेटा और लोगों की गोपनीयता और सुरक्षा की रक्षा करने के महत्व का अन्वेषण करेंगे। -- AI मॉडल के व्यवहार को समझाने के लिए एक ग्लास बॉक्स दृष्टिकोण के महत्व को देखेंगे। -- यह समझेंगे कि AI सिस्टम में विश्वास बनाने के लिए जवाबदेही कैसे महत्वपूर्ण है। - -## आवश्यकताएं - -एक आवश्यकतानुसार, कृपया "जिम्मेदार AI सिद्धांत" सीख पथ को पूरा करें और नीचे दिए गए वीडियो को देखें: - -जिम्मेदार AI के बारे में अधिक जानने के लिए इस [लर्निंग पाथ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) का अनुसरण करें। - -[![Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण") - -> 🎥 ऊपर की छवि पर क्लिक करें एक वीडियो के लिए: Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण - -## निष्पक्षता - -AI सिस्टम को सभी के साथ निष्पक्षता से पेश आना चाहिए और समान समूहों के लोगों को अलग-अलग तरीके से प्रभावित करने से बचना चाहिए। उदाहरण के लिए, जब AI सिस्टम चिकित्सा उपचार, ऋण आवेदन या रोजगार पर मार्गदर्शन प्रदान करते हैं, तो उन्हें समान लक्षणों, वित्तीय परिस्थितियों या पेशेवर योग्यताओं वाले सभी लोगों को समान सिफारिशें देनी चाहिए। हम में से प्रत्येक व्यक्ति के पास विरासत में मिली पूर्वाग्रह होती है जो हमारे निर्णयों और कार्यों को प्रभावित करती है। ये पूर्वाग्रह उस डेटा में स्पष्ट हो सकते हैं जिसका हम AI सिस्टम को प्रशिक्षित करने के लिए उपयोग करते हैं। ऐसा हेरफेर कभी-कभी अनजाने में हो सकता है। डेटा में पूर्वाग्रह कब प्रस्तुत कर रहे हैं, इसे जानबूझकर समझना अक्सर कठिन होता है। - -**“अन्याय”** में एक समूह के लोगों के लिए नकारात्मक प्रभाव, या “हानियां” शामिल हैं, जैसे कि जाति, लिंग, आयु या विकलांगता स्थिति के संदर्भ में परिभाषित। मुख्य निष्पक्षता-संबंधित हानियों को निम्नलिखित प्रकारों में वर्गीकृत किया जा सकता है: - -- **आवंटन**, यदि उदाहरण के लिए एक लिंग या जातीयता को दूसरे पर प्राथमिकता दी जाती है। -- **सेवा की गुणवत्ता**। यदि आप डेटा को एक विशिष्ट परिदृश्य के लिए प्रशिक्षित करते हैं लेकिन वास्तविकता बहुत अधिक जटिल है, तो यह खराब प्रदर्शन करने वाली सेवा की ओर ले जाता है। उदाहरण के लिए, एक हाथ साबुन डिस्पेंसर जो गहरे रंग की त्वचा वाले लोगों को पहचानने में सक्षम नहीं लगता था। [संदर्भ](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **निंदा**। किसी चीज़ या किसी को अनुचित तरीके से आलोचना और लेबल करना। उदाहरण के लिए, एक छवि लेबलिंग तकनीक ने कुख्यात रूप से गहरे रंग की त्वचा वाले लोगों की छवियों को गोरिल्ला के रूप में गलत लेबल किया। -- **अधिक या कम प्रतिनिधित्व**। विचार यह है कि एक निश्चित समूह को एक निश्चित पेशे में नहीं देखा जाता है, और कोई भी सेवा या कार्य जो इसे बढ़ावा देना जारी रखता है, वह हानि में योगदान दे रहा है। -- **रूढ़िवादिता**। एक दिए गए समूह को पूर्व-निर्धारित गुणों के साथ जोड़ना। उदाहरण के लिए, अंग्रेजी और तुर्की के बीच एक भाषा अनुवाद प्रणाली में लिंग से जुड़े शब्दों के कारण गलतियाँ हो सकती हैं। - -![तुर्की में अनुवाद](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.hi.png) -> तुर्की में अनुवाद - -![अंग्रेजी में अनुवाद](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.hi.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.hi.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft का जिम्मेदार AI के प्रति दृष्टिकोण") - -> 🎥 ऊपर की छवि पर क्लिक करें एक वीडियो के लिए: चेहरे की पहचान के माध्यम से बड़े पैमाने पर निगरानी की चेतावनी - -अंततः हमारी पीढ़ी के लिए सबसे बड़े सवालों में से एक, जो AI को समाज में ला रही है, यह है कि कैसे यह सुनिश्चित किया जाए कि कंप्यूटर लोगों के प्रति जवाबदेह बने रहेंगे और यह सुनिश्चित किया जाए कि कंप्यूटर डिजाइन करने वाले लोग सभी के प्रति जवाबदेह बने रहें। - -## प्रभाव मूल्यांकन - -मशीन लर्निंग मॉडल को प्रशिक्षित करने से पहले, यह समझने के लिए एक प्रभाव मूल्यांकन करना महत्वपूर्ण है कि AI सिस्टम का उद्देश्य क्या है; इसका इरादा उपयोग क्या है; यह कहां तैनात किया जाएगा; और सिस्टम के साथ कौन बातचीत करेगा। ये समीक्षक या परीक्षकों के लिए सहायक होते हैं जो सिस्टम का मूल्यांकन करते समय संभावित जोखिमों और अपेक्षित परिणामों की पहचान करने के लिए विचार करने वाले कारकों को जानने में सहायक होते हैं। - -प्रभाव मूल्यांकन करते समय निम्नलिखित क्षेत्रों पर ध्यान केंद्रित करें: - -* **व्यक्तियों पर प्रतिकूल प्रभाव**। किसी भी प्रतिबंध या आवश्यकताओं, असमर्थित उपयोग या किसी भी ज्ञात सीमाओं से अवगत होना जो सिस्टम के प्रदर्शन को बाधित कर सकते हैं, यह सुनिश्चित करने के लिए महत्वपूर्ण है कि सिस्टम का उपयोग इस तरह से नहीं किया जाए जिससे व्यक्तियों को नुकसान हो। -* **डेटा आवश्यकताएं**। सिस्टम डेटा का उपयोग कैसे और कहां करेगा, इसे समझने से समीक्षकों को किसी भी डेटा आवश्यकताओं का पता लगाने में मदद मिलती है जिनके प्रति आपको सावधान रहना चाहिए (जैसे, GDPR या HIPPA डेटा विनियम)। इसके अलावा, यह जांचें कि प्रशिक्षण के लिए डेटा का स्रोत या मात्रा पर्याप्त है या नहीं। -* **प्रभाव का सारांश**। सिस्टम का उपयोग करने से उत्पन्न होने वाली संभावित हानियों की सूची एकत्र करें। ML जीवनचक्र के दौरान, यह समीक्षा करें कि पहचानी गई समस्याओं को कम किया गया है या संबोधित किया गया है। -* **छह मुख्य सिद्धांतों के लिए लागू लक्ष्य**। प्रत्येक सिद्धांत के लक्ष्यों का आकलन करें कि क्या वे मिले हैं और यदि कोई अंतराल हैं। - -## जिम्मेदार AI के साथ डीबगिंग - -किसी सॉफ्टवेयर एप्लिकेशन को डीबग करने की तरह, AI सिस्टम को डीबग करना सिस्टम में समस्याओं की पहचान करने और उन्हें हल करने की एक आवश्यक प्रक्रिया है। कई कारक हो सकते हैं जो मॉडल के अपेक्षित या जिम्मेदार तरीके से प्रदर्शन न करने को प्रभावित करते हैं। अधिकांश पारंपरिक मॉडल प्रदर्शन मेट्रिक्स मॉडल के प्रदर्शन के मात्रात्मक समुच्चय होते हैं, जो जिम्मेदार AI सिद्धांतों का उल्लंघन कैसे करते हैं, इसका विश्लेषण करने के लिए पर्याप्त नहीं होते। इसके अलावा, एक मशीन लर्निंग मॉडल एक ब्लैक बॉक्स है जो यह समझना मुश्किल बनाता है कि इसके परिणामों को क्या प्रेरित करता है या जब यह गलती करता है तो स्पष्टीकरण प्रदान करता है। इस पाठ्यक्रम में आगे, हम जिम्मेदार AI डैशबोर्ड का उपयोग करके AI सिस्टम को डीबग करना सीखेंगे। डैशबोर्ड डेटा वैज्ञानिकों और AI डेवलपर्स के लिए एक समग्र उपकरण प्रदान करता है: - -* **त्रुटि विश्लेषण**। मॉडल की त्रुटि वितरण की पहचान करने के लिए जो सिस्टम की निष्पक्षता या विश्वसनीयता को प्रभावित कर सकता है। -* **मॉडल अवलोकन**। यह पता लगाने के लिए कि डेटा समूहों के प्रदर्शन में कहां असमानताएं हैं। -* **डेटा विश्लेषण**। डेटा वितरण को समझने के लिए और डेटा में किसी भी संभावित पूर्वाग्रह की पहचान करने के लिए जो निष्पक्षता, समावेशिता और विश्वसनीयता मुद्दों का कारण बन सकता है। -* **मॉडल व्याख्या**। यह समझने के लिए कि मॉडल की भविष्यवाणियों को क्या प्रभावित करता है। यह मॉडल के व्यवहार को समझाने में मदद करता है, जो पारदर्शिता और जवाबदेही के लिए महत्वपूर्ण है। - -## 🚀 चुनौती - -हानियों को पहले स्थान पर प्रस्तुत होने से रोकने के लिए, हमें: - -- सिस्टम पर काम करने वाले लोगों के बीच विविध पृष्ठभूमि और दृष्टिकोण होने चाहिए। -- हमारे समाज की विविधता को दर्शाने वाले डेटा सेटों में निवेश करना चाहिए। -- मशीन लर्निंग जीवनचक्र के दौरान जिम्मेदार AI का पता लगाने और सुधारने के लिए बेहतर तरीकों का विकास करना चाहिए। - -वास्तविक जीवन के परिदृश्यों के बारे में सोचें जहां मॉडल की अविश्वसनीयता मॉडल-निर्माण और उपयोग में स्पष्ट है। और क्या विचार करना चाहिए? - -## [पोस्ट-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## समीक्षा और स्व - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/3-fairness/assignment.md b/translations/hi/1-Introduction/3-fairness/assignment.md deleted file mode 100644 index 4eb3725d..00000000 --- a/translations/hi/1-Introduction/3-fairness/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# जिम्मेदार AI टूलबॉक्स का अन्वेषण करें - -## निर्देश - -इस पाठ में आपने जिम्मेदार AI टूलबॉक्स के बारे में सीखा, जो "डेटा वैज्ञानिकों को AI सिस्टम का विश्लेषण और सुधार करने में मदद करने के लिए एक ओपन-सोर्स, समुदाय-संचालित परियोजना है।" इस असाइनमेंट के लिए, RAI टूलबॉक्स के [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) में से एक का अन्वेषण करें और अपने निष्कर्षों को एक पेपर या प्रस्तुति में रिपोर्ट करें। - -## मूल्यांकन - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| ------ | -------- | -------- | ----------------- | -| | एक पेपर या पॉवरपॉइंट प्रस्तुति प्रस्तुत की जाती है जिसमें Fairlearn के सिस्टम, चलाए गए नोटबुक, और इसे चलाने से प्राप्त निष्कर्षों पर चर्चा की जाती है | निष्कर्षों के बिना एक पेपर प्रस्तुत किया जाता है | कोई पेपर प्रस्तुत नहीं किया गया है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/4-techniques-of-ML/README.md b/translations/hi/1-Introduction/4-techniques-of-ML/README.md deleted file mode 100644 index 09d44576..00000000 --- a/translations/hi/1-Introduction/4-techniques-of-ML/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# मशीन लर्निंग की तकनीकें - -मशीन लर्निंग मॉडल और उनके डेटा को बनाने, उपयोग करने और बनाए रखने की प्रक्रिया कई अन्य विकास वर्कफ़्लो से बहुत अलग है। इस पाठ में, हम इस प्रक्रिया को सरल बनाएंगे, और मुख्य तकनीकों का वर्णन करेंगे जिन्हें आपको जानने की आवश्यकता है। आप: - -- उच्च स्तर पर मशीन लर्निंग के अंतर्निहित प्रक्रियाओं को समझेंगे। -- 'मॉडल', 'प्रेडिक्शन', और 'ट्रेनिंग डेटा' जैसे आधारभूत अवधारणाओं का अन्वेषण करेंगे। - -## [पाठ से पहले की क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) - -[![शुरुआती लोगों के लिए मशीन लर्निंग - मशीन लर्निंग की तकनीकें](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "शुरुआती लोगों के लिए मशीन लर्निंग - मशीन लर्निंग की तकनीकें") - -> 🎥 इस पाठ के माध्यम से काम करने के लिए ऊपर दी गई छवि पर क्लिक करें। - -## परिचय - -उच्च स्तर पर, मशीन लर्निंग (एमएल) प्रक्रियाओं को बनाने की कला कई चरणों में विभाजित होती है: - -1. **प्रश्न तय करें**। अधिकांश एमएल प्रक्रियाएं एक प्रश्न पूछने से शुरू होती हैं जिसे एक साधारण कंडीशनल प्रोग्राम या नियम-आधारित इंजन द्वारा उत्तर नहीं दिया जा सकता। ये प्रश्न अक्सर डेटा के संग्रह के आधार पर भविष्यवाणियों के इर्द-गिर्द घूमते हैं। -2. **डेटा एकत्र करें और तैयार करें**। अपने प्रश्न का उत्तर देने के लिए, आपको डेटा की आवश्यकता होती है। आपके डेटा की गुणवत्ता और, कभी-कभी, मात्रा यह निर्धारित करेगी कि आप अपने प्रारंभिक प्रश्न का उत्तर कितनी अच्छी तरह दे सकते हैं। डेटा का विज़ुअलाइज़ेशन इस चरण का एक महत्वपूर्ण पहलू है। इस चरण में डेटा को प्रशिक्षण और परीक्षण समूह में विभाजित करना भी शामिल है ताकि एक मॉडल बनाया जा सके। -3. **प्रशिक्षण विधि चुनें**। आपके प्रश्न और आपके डेटा की प्रकृति के आधार पर, आपको यह चुनना होगा कि आप अपने डेटा को सर्वोत्तम रूप से प्रतिबिंबित करने और इसके खिलाफ सटीक भविष्यवाणी करने के लिए एक मॉडल को कैसे प्रशिक्षित करना चाहते हैं। यह आपके एमएल प्रक्रिया का वह हिस्सा है जिसके लिए विशिष्ट विशेषज्ञता की आवश्यकता होती है और अक्सर, काफी मात्रा में प्रयोग की आवश्यकता होती है। -4. **मॉडल को प्रशिक्षित करें**। अपने प्रशिक्षण डेटा का उपयोग करके, आप डेटा में पैटर्न को पहचानने के लिए विभिन्न एल्गोरिदम का उपयोग करके एक मॉडल को प्रशिक्षित करेंगे। मॉडल आंतरिक वज़नों का लाभ उठा सकता है जिन्हें डेटा के कुछ हिस्सों को दूसरों पर प्राथमिकता देने के लिए समायोजित किया जा सकता है ताकि एक बेहतर मॉडल बनाया जा सके। -5. **मॉडल का मूल्यांकन करें**। आप अपने एकत्र किए गए सेट से पहले कभी नहीं देखे गए डेटा (अपने परीक्षण डेटा) का उपयोग करके देखेंगे कि मॉडल कैसे प्रदर्शन कर रहा है। -6. **पैरामीटर ट्यूनिंग**। आपके मॉडल के प्रदर्शन के आधार पर, आप विभिन्न पैरामीटर या वेरिएबल का उपयोग करके प्रक्रिया को दोबारा कर सकते हैं जो मॉडल को प्रशिक्षित करने के लिए उपयोग किए गए एल्गोरिदम के व्यवहार को नियंत्रित करते हैं। -7. **भविष्यवाणी करें**। अपने मॉडल की सटीकता का परीक्षण करने के लिए नए इनपुट का उपयोग करें। - -## कौन सा प्रश्न पूछना है - -कंप्यूटर डेटा में छिपे पैटर्न की खोज करने में विशेष रूप से कुशल होते हैं। यह उपयोगिता उन शोधकर्ताओं के लिए बहुत सहायक होती है जिनके पास किसी दिए गए डोमेन के बारे में प्रश्न होते हैं जिन्हें एक शर्त-आधारित नियम इंजन बनाकर आसानी से उत्तर नहीं दिया जा सकता। उदाहरण के लिए, एक एक्चुरियल कार्य को देखते हुए, एक डेटा वैज्ञानिक धूम्रपान करने वालों बनाम गैर-धूम्रपान करने वालों की मृत्यु दर के आसपास हस्तनिर्मित नियम बना सकता है। - -हालांकि, जब कई अन्य वेरिएबल को समीकरण में लाया जाता है, तो एक एमएल मॉडल पिछले स्वास्थ्य इतिहास के आधार पर भविष्य की मृत्यु दर की भविष्यवाणी करने में अधिक कुशल साबित हो सकता है। एक अधिक प्रसन्नता भरा उदाहरण हो सकता है कि किसी दिए गए स्थान में अप्रैल महीने के लिए मौसम की भविष्यवाणी करना जिसमें अक्षांश, देशांतर, जलवायु परिवर्तन, महासागर की निकटता, जेट स्ट्रीम के पैटर्न और अन्य डेटा शामिल हो। - -✅ मौसम मॉडल पर यह [स्लाइड डेक](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) मौसम विश्लेषण में एमएल के उपयोग के लिए एक ऐतिहासिक परिप्रेक्ष्य प्रदान करता है। - -## मॉडल बनाने से पहले के कार्य - -अपने मॉडल को बनाना शुरू करने से पहले, आपको कई कार्यों को पूरा करना होगा। अपने प्रश्न का परीक्षण करने और एक मॉडल की भविष्यवाणियों के आधार पर एक परिकल्पना बनाने के लिए, आपको कई तत्वों की पहचान और कॉन्फ़िगर करने की आवश्यकता है। - -### डेटा - -किसी भी प्रकार की निश्चितता के साथ अपने प्रश्न का उत्तर देने के लिए, आपको सही प्रकार के पर्याप्त डेटा की आवश्यकता होती है। इस समय आपको दो चीजें करनी होंगी: - -- **डेटा एकत्र करें**। डेटा विश्लेषण में निष्पक्षता पर पिछले पाठ को ध्यान में रखते हुए, अपने डेटा को सावधानी से एकत्र करें। इस डेटा के स्रोतों, इसके अंतर्निहित पूर्वाग्रहों के बारे में जागरूक रहें और इसके स्रोत का दस्तावेज़ीकरण करें। -- **डेटा तैयार करें**। डेटा तैयारी प्रक्रिया में कई चरण होते हैं। यदि डेटा विविध स्रोतों से आता है, तो आपको डेटा को संकलित और सामान्यीकृत करने की आवश्यकता हो सकती है। आप विभिन्न तरीकों से डेटा की गुणवत्ता और मात्रा में सुधार कर सकते हैं जैसे कि स्ट्रिंग्स को नंबरों में बदलना (जैसा कि हम [क्लस्टरिंग](../../5-Clustering/1-Visualize/README.md) में करते हैं)। आप मूल डेटा के आधार पर नया डेटा भी उत्पन्न कर सकते हैं (जैसा कि हम [क्लासिफिकेशन](../../4-Classification/1-Introduction/README.md) में करते हैं)। आप डेटा को साफ और संपादित कर सकते हैं (जैसा कि हम [वेब ऐप](../../3-Web-App/README.md) पाठ से पहले करेंगे)। अंत में, आप इसे यादृच्छिक और शफल भी कर सकते हैं, आपके प्रशिक्षण तकनीकों के आधार पर। - -✅ अपने डेटा को एकत्र और संसाधित करने के बाद, यह देखने के लिए एक क्षण लें कि क्या इसका आकार आपको अपने इच्छित प्रश्न को संबोधित करने की अनुमति देगा। यह हो सकता है कि डेटा आपके दिए गए कार्य में अच्छा प्रदर्शन न करे, जैसा कि हम अपने [क्लस्टरिंग](../../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 शामिल हैं। अपने डेटा को दृश्य रूप में प्रस्तुत करने से आपको छिपे हुए संबंधों का पता लगाने में मदद मिल सकती है जिन्हें आप लाभ उठा सकते हैं। आपके विज़ुअलाइज़ेशन आपको पूर्वाग्रह या असंतुलित डेटा का भी पता लगाने में मदद कर सकते हैं (जैसा कि हम [क्लासिफिकेशन](../../4-Classification/2-Classifiers-1/README.md) में खोजते हैं)। - -### अपने डेटासेट को विभाजित करें - -प्रशिक्षण से पहले, आपको अपने डेटासेट को असमान आकार के दो या अधिक भागों में विभाजित करने की आवश्यकता है जो डेटा का अच्छी तरह से प्रतिनिधित्व करते हैं। - -- **प्रशिक्षण**। डेटासेट का यह हिस्सा आपके मॉडल को प्रशिक्षित करने के लिए फिट होता है। यह सेट मूल डेटासेट का अधिकांश भाग बनाता है। -- **परीक्षण**। एक परीक्षण डेटासेट डेटा का एक स्वतंत्र समूह है, जो अक्सर मूल डेटा से एकत्र किया जाता है, जिसे आप निर्मित मॉडल के प्रदर्शन की पुष्टि करने के लिए उपयोग करते हैं। -- **मान्यकरण**। एक मान्यकरण सेट उदाहरणों का एक छोटा स्वतंत्र समूह है जिसका उपयोग आप मॉडल के हाइपरपैरामीटर्स या आर्किटेक्चर को ट्यून करने के लिए करते हैं ताकि मॉडल में सुधार किया जा सके। आपके डेटा के आकार और आपके पूछे गए प्रश्न के आधार पर, आपको इस तीसरे सेट को बनाने की आवश्यकता नहीं हो सकती (जैसा कि हम [टाइम सीरीज़ फोरकास्टिंग](../../7-TimeSeries/1-Introduction/README.md) में नोट करते हैं)। - -## एक मॉडल बनाना - -अपने प्रशिक्षण डेटा का उपयोग करके, आपका लक्ष्य विभिन्न एल्गोरिदम का उपयोग करके एक मॉडल या आपके डेटा का एक सांख्यिकीय प्रतिनिधित्व बनाना है ताकि इसे **प्रशिक्षित** किया जा सके। एक मॉडल को प्रशिक्षण देना इसे डेटा के संपर्क में लाता है और इसे खोजे गए पैटर्न के बारे में धारणाएं बनाने, मान्य करने और स्वीकार करने या अस्वीकार करने की अनुमति देता है। - -### एक प्रशिक्षण विधि तय करें - -आपके प्रश्न और आपके डेटा की प्रकृति के आधार पर, आप इसे प्रशिक्षित करने के लिए एक विधि चुनेंगे। [Scikit-learn के दस्तावेज़](https://scikit-learn.org/stable/user_guide.html) के माध्यम से कदम बढ़ाते हुए - जिसका हम इस कोर्स में उपयोग करते हैं - आप एक मॉडल को प्रशिक्षित करने के कई तरीके खोज सकते हैं। आपके अनुभव के आधार पर, आपको सबसे अच्छा मॉडल बनाने के लिए कई अलग-अलग तरीकों को आज़माना पड़ सकता है। आप एक ऐसी प्रक्रिया से गुजरने की संभावना रखते हैं जिसमें डेटा वैज्ञानिक मॉडल के प्रदर्शन का मूल्यांकन करते हैं, इसे अनदेखे डेटा को खिलाते हैं, सटीकता, पूर्वाग्रह और अन्य गुणवत्ता-घटाने वाले मुद्दों की जांच करते हैं, और हाथ में कार्य के लिए सबसे उपयुक्त प्रशिक्षण विधि का चयन करते हैं। - -### एक मॉडल को प्रशिक्षित करें - -अपने प्रशिक्षण डेटा के साथ सशस्त्र, आप इसे 'फिट' करने के लिए तैयार हैं ताकि एक मॉडल बनाया जा सके। आप देखेंगे कि कई एमएल लाइब्रेरी में आप कोड 'model.fit' पाएंगे - यह उस समय है जब आप अपने फीचर वेरिएबल को मानों की एक सरणी (आमतौर पर 'X') और एक टारगेट वेरिएबल (आमतौर पर 'y') के रूप में भेजते हैं। - -### मॉडल का मूल्यांकन करें - -एक बार प्रशिक्षण प्रक्रिया पूरी हो जाने के बाद (एक बड़े मॉडल को प्रशिक्षित करने के लिए कई पुनरावृत्तियों, या 'एपोक्स' लग सकते हैं), आप परीक्षण डेटा का उपयोग करके मॉडल की गुणवत्ता का मूल्यांकन करने में सक्षम होंगे ताकि इसके प्रदर्शन का मूल्यांकन किया जा सके। यह डेटा मूल डेटा का एक उपसमूह है जिसे मॉडल ने पहले कभी विश्लेषण नहीं किया है। आप अपने मॉडल की गुणवत्ता के बारे में मेट्रिक्स की एक तालिका प्रिंट कर सकते हैं। - -🎓 **मॉडल फिटिंग** - -मशीन लर्निंग के संदर्भ में, मॉडल फिटिंग उस मॉडल के अंतर्निहित फ़ंक्शन की सटीकता को संदर्भित करता है क्योंकि यह डेटा का विश्लेषण करने का प्रयास करता है जिससे यह परिचित नहीं है। - -🎓 **अंडरफिटिंग** और **ओवरफिटिंग** सामान्य समस्याएं हैं जो मॉडल की गुणवत्ता को घटाती हैं, क्योंकि मॉडल या तो पर्याप्त रूप से फिट नहीं होता है या बहुत अच्छी तरह से फिट होता है। यह मॉडल को या तो अपने प्रशिक्षण डेटा के साथ बहुत अधिक या बहुत ढीले तरीके से संरेखित भविष्यवाणियां करने का कारण बनता है। एक ओवरफिट मॉडल प्रशिक्षण डेटा को बहुत अच्छी तरह से भविष्यवाणी करता है क्योंकि इसने डेटा के विवरण और शोर को बहुत अच्छी तरह से सीखा है। एक अंडरफिट मॉडल सटीक नहीं है क्योंकि यह न तो अपने प्रशिक्षण डेटा का सही तरीके से विश्लेषण कर सकता है और न ही डेटा जिसे इसने अभी तक 'देखा' नहीं है। - -![ओवरफिटिंग मॉडल](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.hi.png) -> [Jen Looper](https://twitter.com/jenlooper) द्वारा इन्फोग्राफिक - -## पैरामीटर ट्यूनिंग - -एक बार आपका प्रारंभिक प्रशिक्षण पूरा हो जाने के बाद, मॉडल की गुणवत्ता का अवलोकन करें और इसके 'हाइपरपैरामीटर्स' को ट्वीक करके इसे सुधारने पर विचार करें। इस प्रक्रिया के बारे में और पढ़ें [दस्तावेज़ में](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott)। - -## भविष्यवाणी - -यह वह क्षण है जब आप अपने मॉडल की सटीकता का परीक्षण करने के लिए पूरी तरह से नए डेटा का उपयोग कर सकते हैं। एक 'एप्लाइड' एमएल सेटिंग में, जहां आप उत्पादन में मॉडल का उपयोग करने के लिए वेब संपत्तियों का निर्माण कर रहे हैं, इस प्रक्रिया में एक वेरिएबल सेट करने और मॉडल को इन्फेरेंस या मूल्यांकन के लिए भेजने के लिए उपयोगकर्ता इनपुट (उदाहरण के लिए एक बटन दबाना) एकत्र करना शामिल हो सकता है। - -इन पाठों में, आप यह जानेंगे कि इन चरणों का उपयोग कैसे करें - डेटा वैज्ञानिक के सभी इशारों और अधिक के रूप में तैयार करने, बनाने, परीक्षण करने, मूल्यांकन करने और भविष्यवाणी करने के लिए, जैसे-जैसे आप 'फुल स्टैक' एमएल इंजीनियर बनने की अपनी यात्रा में आगे बढ़ते हैं। - ---- - -## 🚀चुनौती - -एक फ्लो चार्ट बनाएं जो एक एमएल प्रैक्टिशनर के चरणों को दर्शाता है। आप इस प्रक्रिया में अभी खुद को कहां देखते हैं? आपको कहां कठिनाई का सामना करने की संभावना है? आपको क्या आसान लगता है? - -## [पाठ के बाद की क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## समीक्षा और स्व-अध्ययन - -ऑनलाइन खोजें डेटा वैज्ञानिकों के साक्षात्कार जो अपने दैनिक कार्य पर चर्चा करते हैं। यहाँ एक [साक्षात्कार](https://www.youtube.com/watch?v=Z3IjgbbCEfs) है। - -## असाइनमेंट - -[एक डेटा वैज्ञानिक का साक्षात्कार लें](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/4-techniques-of-ML/assignment.md b/translations/hi/1-Introduction/4-techniques-of-ML/assignment.md deleted file mode 100644 index f15b66a0..00000000 --- a/translations/hi/1-Introduction/4-techniques-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक डेटा वैज्ञानिक का साक्षात्कार - -## निर्देश - -अपनी कंपनी में, किसी यूजर ग्रुप में, या अपने दोस्तों या सहपाठियों के बीच, किसी ऐसे व्यक्ति से बात करें जो पेशेवर रूप से डेटा वैज्ञानिक के रूप में काम करता हो। उनके दैनिक कार्यों के बारे में एक छोटा पेपर (500 शब्द) लिखें। क्या वे विशेषज्ञ हैं, या वे 'फुल स्टैक' काम करते हैं? - -## मूल्यांकन मानदंड - -| मापदंड | उत्कृष्टता | पर्याप्त | सुधार की आवश्यकता | -| -------| ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | सही लंबाई का एक निबंध, जिसमें उद्धृत स्रोत शामिल हैं, एक .doc फ़ाइल के रूप में प्रस्तुत किया गया है | निबंध खराब तरीके से उद्धृत किया गया है या आवश्यक लंबाई से छोटा है | कोई निबंध प्रस्तुत नहीं किया गया | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/1-Introduction/README.md b/translations/hi/1-Introduction/README.md deleted file mode 100644 index 5b1de7d3..00000000 --- a/translations/hi/1-Introduction/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# मशीन लर्निंग का परिचय - -इस पाठ्यक्रम के इस भाग में, आपको मशीन लर्निंग के क्षेत्र के आधारभूत सिद्धांतों से परिचित कराया जाएगा, यह क्या है, और इसके इतिहास और शोधकर्ता इसके साथ काम करने के लिए किन तकनीकों का उपयोग करते हैं, इसके बारे में जानेंगे। चलिए साथ मिलकर इस नए ML की दुनिया की खोज करते हैं! - -![globe](../../../translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.hi.jpg) -> Photo by Bill Oxford on Unsplash - -### पाठ - -1. [मशीन लर्निंग का परिचय](1-intro-to-ML/README.md) -1. [मशीन लर्निंग और AI का इतिहास](2-history-of-ML/README.md) -1. [न्याय और मशीन लर्निंग](3-fairness/README.md) -1. [मशीन लर्निंग की तकनीकें](4-techniques-of-ML/README.md) - -### श्रेय - -"Introduction to Machine Learning" को ♥️ के साथ [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) और [Jen Looper](https://twitter.com/jenlooper) सहित कई लोगों की टीम द्वारा लिखा गया है। - -"The History of Machine Learning" को ♥️ के साथ [Jen Looper](https://twitter.com/jenlooper) और [Amy Boyd](https://twitter.com/AmyKateNicho) द्वारा लिखा गया है। - -"Fairness and Machine Learning" को ♥️ के साथ [Tomomi Imura](https://twitter.com/girliemac) द्वारा लिखा गया है। - -"Techniques of Machine Learning" को ♥️ के साथ [Jen Looper](https://twitter.com/jenlooper) और [Chris Noring](https://twitter.com/softchris) द्वारा लिखा गया है। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित AI अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/1-Tools/README.md b/translations/hi/2-Regression/1-Tools/README.md deleted file mode 100644 index 8259ba23..00000000 --- a/translations/hi/2-Regression/1-Tools/README.md +++ /dev/null @@ -1,228 +0,0 @@ -# Python और Scikit-learn के साथ Regression Models की शुरुआत करें - -![Regression का एक sketchnote में सारांश](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.hi.png) - -> Sketchnote [Tomomi Imura](https://www.twitter.com/girlie_mac) द्वारा - -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) - -## परिचय - -इन चार पाठों में, आप जानेंगे कि regression models कैसे बनाते हैं। हम जल्द ही चर्चा करेंगे कि ये क्या होते हैं। लेकिन इससे पहले कि आप कुछ भी करें, यह सुनिश्चित करें कि आपके पास सही उपकरण हैं ताकि आप प्रक्रिया शुरू कर सकें! - -इस पाठ में, आप सीखेंगे कि कैसे: - -- अपने कंप्यूटर को स्थानीय मशीन लर्निंग कार्यों के लिए कॉन्फ़िगर करें। -- Jupyter notebooks के साथ काम करें। -- Scikit-learn का उपयोग करें, जिसमें इंस्टॉलेशन भी शामिल है। -- एक hands-on exercise के साथ linear regression का अन्वेषण करें। - -## इंस्टॉलेशन और कॉन्फ़िगरेशन - -[![ML for beginners - मशीन लर्निंग मॉडल बनाने के लिए अपने उपकरण सेट करें](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML for beginners - मशीन लर्निंग मॉडल बनाने के लिए अपने उपकरण सेट करें") - -> 🎥 ऊपर दी गई छवि पर क्लिक करें अपने कंप्यूटर को ML के लिए कॉन्फ़िगर करने के लिए एक छोटे वीडियो के लिए। - -1. **Python इंस्टॉल करें**। सुनिश्चित करें कि [Python](https://www.python.org/downloads/) आपके कंप्यूटर पर इंस्टॉल है। आप Python का उपयोग कई डेटा विज्ञान और मशीन लर्निंग कार्यों के लिए करेंगे। अधिकांश कंप्यूटर सिस्टम पहले से ही एक Python इंस्टॉलेशन शामिल करते हैं। कुछ उपयोगकर्ताओं के लिए सेटअप को आसान बनाने के लिए उपयोगी [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) भी उपलब्ध हैं। - - हालांकि, Python के कुछ उपयोगों के लिए सॉफ़्टवेयर का एक संस्करण आवश्यक होता है, जबकि अन्य के लिए एक अलग संस्करण की आवश्यकता होती है। इस कारण से, एक [virtual environment](https://docs.python.org/3/library/venv.html) में काम करना उपयोगी है। - -2. **Visual Studio Code इंस्टॉल करें**। सुनिश्चित करें कि Visual Studio Code आपके कंप्यूटर पर इंस्टॉल है। [Visual Studio Code इंस्टॉल करने के लिए](https://code.visualstudio.com/) इन निर्देशों का पालन करें। आप इस कोर्स में Visual Studio Code में Python का उपयोग करने जा रहे हैं, इसलिए आपको [Visual Studio Code को Python विकास के लिए कॉन्फ़िगर करने](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) के बारे में जानकारी होनी चाहिए। - - > Python के साथ आरामदायक होने के लिए इस [Learn modules](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) संग्रह को काम करके देखें - > - > [![Visual Studio Code के साथ Python सेटअप करें](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Visual Studio Code के साथ Python सेटअप करें") - > - > 🎥 ऊपर दी गई छवि पर क्लिक करें: VS Code में Python का उपयोग करने के लिए एक वीडियो। - -3. **Scikit-learn इंस्टॉल करें**, इन [निर्देशों](https://scikit-learn.org/stable/install.html) का पालन करके। चूंकि आपको यह सुनिश्चित करने की आवश्यकता है कि आप Python 3 का उपयोग कर रहे हैं, यह अनुशंसा की जाती है कि आप एक virtual environment का उपयोग करें। ध्यान दें, यदि आप इस लाइब्रेरी को M1 Mac पर इंस्टॉल कर रहे हैं, तो ऊपर दिए गए पेज पर विशेष निर्देश हैं। - -1. **Jupyter Notebook इंस्टॉल करें**। आपको [Jupyter package इंस्टॉल करना](https://pypi.org/project/jupyter/) होगा। - -## आपका ML लेखन वातावरण - -आप अपने Python कोड को विकसित करने और मशीन लर्निंग मॉडल बनाने के लिए **notebooks** का उपयोग करेंगे। इस प्रकार की फ़ाइल डेटा वैज्ञानिकों के लिए एक सामान्य उपकरण है, और इन्हें उनके प्रत्यय या एक्सटेंशन `.ipynb` द्वारा पहचाना जा सकता है। - -Notebooks एक इंटरैक्टिव वातावरण हैं जो डेवलपर को कोड और नोट्स दोनों जोड़ने और कोड के चारों ओर दस्तावेज़ लिखने की अनुमति देते हैं, जो प्रयोगात्मक या अनुसंधान-उन्मुख परियोजनाओं के लिए काफी सहायक होता है। - -[![ML for beginners - Jupyter Notebooks सेट करें ताकि regression models बनाना शुरू कर सकें](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML for beginners - Jupyter Notebooks सेट करें ताकि regression models बनाना शुरू कर सकें") - -> 🎥 ऊपर दी गई छवि पर क्लिक करें इस अभ्यास को करने के लिए एक छोटे वीडियो के लिए। - -### अभ्यास - एक notebook के साथ काम करें - -इस फ़ोल्डर में, आपको _notebook.ipynb_ फ़ाइल मिलेगी। - -1. Visual Studio Code में _notebook.ipynb_ खोलें। - - एक Jupyter सर्वर Python 3+ के साथ शुरू होगा। आपको notebook के क्षेत्रों में `run` कोड के टुकड़े मिलेंगे। आप एक कोड ब्लॉक चला सकते हैं, प्ले बटन जैसे दिखने वाले आइकन का चयन करके। - -1. `md` आइकन का चयन करें और थोड़ा मार्कडाउन जोड़ें, और निम्नलिखित पाठ **# Welcome to your notebook** जोड़ें। - - अगला, कुछ Python कोड जोड़ें। - -1. कोड ब्लॉक में **print('hello notebook')** टाइप करें। -1. कोड चलाने के लिए तीर का चयन करें। - - आपको प्रिंट किया हुआ बयान देखना चाहिए: - - ```output - hello notebook - ``` - -![VS Code के साथ एक notebook खुली हुई](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.hi.jpg) - -आप अपने कोड को टिप्पणियों के साथ इंटरलीफ कर सकते हैं ताकि notebook को स्वयं-प्रलेखित किया जा सके। - -✅ एक मिनट के लिए सोचें कि एक वेब डेवलपर का कार्य वातावरण डेटा वैज्ञानिक के कार्य वातावरण से कितना अलग है। - -## Scikit-learn के साथ शुरू करें - -अब जब Python आपके स्थानीय वातावरण में सेट हो गया है, और आप Jupyter notebooks के साथ सहज हैं, तो चलिए Scikit-learn के साथ भी उतने ही सहज होते हैं (इसे `sci` as in `science` उच्चारित करें)। Scikit-learn आपको ML कार्य करने में मदद करने के लिए एक [विस्तृत API](https://scikit-learn.org/stable/modules/classes.html#api-ref) प्रदान करता है। - -उनकी [वेबसाइट](https://scikit-learn.org/stable/getting_started.html) के अनुसार, "Scikit-learn एक ओपन सोर्स मशीन लर्निंग लाइब्रेरी है जो सुपरवाइज्ड और अनसुपरवाइज्ड लर्निंग का समर्थन करती है। यह मॉडल फिटिंग, डेटा प्रीप्रोसेसिंग, मॉडल चयन और मूल्यांकन के लिए विभिन्न उपकरण भी प्रदान करती है, और कई अन्य उपयोगिताओं।" - -इस कोर्स में, आप Scikit-learn और अन्य उपकरणों का उपयोग करेंगे ताकि आप मशीन लर्निंग मॉडल बना सकें जिन्हें हम 'पारंपरिक मशीन लर्निंग' कार्य कहते हैं। हमने जानबूझकर न्यूरल नेटवर्क और डीप लर्निंग से परहेज किया है, क्योंकि उन्हें हमारे आगामी 'AI for Beginners' पाठ्यक्रम में बेहतर कवर किया गया है। - -Scikit-learn मॉडल बनाना और उनका मूल्यांकन करना सरल बनाता है। यह मुख्य रूप से संख्यात्मक डेटा का उपयोग करने पर केंद्रित है और कई तैयार किए गए डेटासेट प्रदान करता है जो सीखने के उपकरण के रूप में उपयोग किए जा सकते हैं। इसमें छात्रों के लिए आज़माने के लिए प्री-बिल्ट मॉडल भी शामिल हैं। चलिए प्रीपैकेज्ड डेटा को लोड करने की प्रक्रिया का अन्वेषण करते हैं और कुछ बुनियादी डेटा के साथ Scikit-learn के पहले ML मॉडल का उपयोग करते हैं। - -## अभ्यास - आपका पहला Scikit-learn notebook - -> यह ट्यूटोरियल Scikit-learn की वेबसाइट पर [linear regression example](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) से प्रेरित था। - -[![ML for beginners - Python में आपका पहला Linear Regression प्रोजेक्ट](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML for beginners - Python में आपका पहला Linear Regression प्रोजेक्ट") - -> 🎥 ऊपर दी गई छवि पर क्लिक करें इस अभ्यास को करने के लिए एक छोटे वीडियो के लिए। - -इस पाठ से संबंधित _notebook.ipynb_ फ़ाइल में, सभी सेल्स को 'trash can' आइकन दबाकर साफ़ करें। - -इस खंड में, आप एक छोटे डेटासेट के साथ काम करेंगे जो Scikit-learn में सीखने के उद्देश्यों के लिए बनाया गया है। कल्पना करें कि आप मधुमेह रोगियों के लिए एक उपचार का परीक्षण करना चाहते थे। मशीन लर्निंग मॉडल आपको यह निर्धारित करने में मदद कर सकते हैं कि कौन से रोगी उपचार का बेहतर उत्तर देंगे, चर के संयोजन के आधार पर। यहां तक कि एक बहुत ही बुनियादी regression model, जब दृश्यीकृत किया जाता है, तो चर के बारे में जानकारी दिखा सकता है जो आपको अपने सैद्धांतिक क्लिनिकल परीक्षणों को व्यवस्थित करने में मदद कर सकता है। - -✅ कई प्रकार के regression methods होते हैं, और आप किसे चुनते हैं यह आपके उत्तर पर निर्भर करता है। यदि आप किसी दिए गए उम्र के व्यक्ति के लिए संभावित ऊंचाई की भविष्यवाणी करना चाहते हैं, तो आप linear regression का उपयोग करेंगे, क्योंकि आप एक **संख्यात्मक मान** की तलाश कर रहे हैं। यदि आप यह जानने में रुचि रखते हैं कि किसी प्रकार के भोजन को शाकाहारी माना जाना चाहिए या नहीं, तो आप एक **श्रेणी असाइनमेंट** की तलाश कर रहे हैं, इसलिए आप logistic regression का उपयोग करेंगे। आप बाद में logistic regression के बारे में अधिक जानेंगे। कुछ प्रश्नों के बारे में सोचें जो आप डेटा से पूछ सकते हैं, और इनमें से कौन सी विधियाँ अधिक उपयुक्त होंगी। - -आइए इस कार्य पर शुरुआत करें। - -### लाइब्रेरीज़ इंपोर्ट करें - -इस कार्य के लिए हम कुछ लाइब्रेरीज़ इंपोर्ट करेंगे: - -- **matplotlib**। यह एक उपयोगी [ग्राफिंग टूल](https://matplotlib.org/) है और हम इसका उपयोग एक लाइन प्लॉट बनाने के लिए करेंगे। -- **numpy**। [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) Python में संख्यात्मक डेटा को संभालने के लिए एक उपयोगी लाइब्रेरी है। -- **sklearn**। यह [Scikit-learn](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` and you are importing `datasets`, `linear_model` and `model_selection` from `sklearn`. `model_selection` is used for splitting data into training and test sets. - -### The diabetes dataset - -The built-in [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) includes 442 samples of data around diabetes, with 10 feature variables, some of which include: - -- age: age in years -- bmi: body mass index -- bp: average blood pressure -- s1 tc: T-Cells (a type of white blood cells) - -✅ This dataset includes the concept of 'sex' as a feature variable important to research around diabetes. Many medical datasets include this type of binary classification. Think a bit about how categorizations such as this might exclude certain parts of a population from treatments. - -Now, load up the X and y data. - -> 🎓 Remember, this is supervised learning, and we need a named 'y' target. - -In a new code cell, load the diabetes dataset by calling `load_diabetes()`. The input `return_X_y=True` signals that `X` will be a data matrix, and `y` को इंपोर्ट कर रहे हैं जो regression target होगा। - -1. डेटा मैट्रिक्स के आकार और इसके पहले तत्व को दिखाने के लिए कुछ प्रिंट कमांड जोड़ें: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - जो प्रतिक्रिया आपको मिल रही है, वह एक टपल है। आप जो कर रहे हैं वह टपल के पहले दो मानों को `X` and `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] - ``` - - ✅ डेटा और regression target के बीच के संबंध के बारे में सोचें। Linear regression फीचर X और टारगेट वेरिएबल y के बीच संबंधों की भविष्यवाणी करता है। क्या आप दस्तावेज़ में मधुमेह डेटासेट के लिए [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) पा सकते हैं? इस डेटासेट का लक्ष्य क्या है, यह डेटा क्या प्रदर्शित कर रहा है? - -2. इसके बाद, इस डेटासेट के एक हिस्से का चयन करें जिसे तीसरे कॉलम का चयन करके प्लॉट किया जा सकता है। आप `:` operator to select all rows, and then selecting the 3rd column using the index (2). You can also reshape the data to be a 2D array - as required for plotting - by using `reshape(n_rows, n_columns)` का उपयोग करके ऐसा कर सकते हैं। यदि पैरामीटर में से एक -1 है, तो संबंधित आयाम स्वचालित रूप से गणना किया जाता है। - - ```python - X = X[:, 2] - X = X.reshape((-1,1)) - ``` - - ✅ किसी भी समय, डेटा का आकार जांचने के लिए इसे प्रिंट करें। - -3. अब जब आपके पास प्लॉट करने के लिए डेटा तैयार है, तो आप देख सकते हैं कि क्या एक मशीन इस डेटासेट में संख्याओं के बीच एक तार्किक विभाजन निर्धारित करने में मदद कर सकती है। ऐसा करने के लिए, आपको डेटा (X) और टारगेट (y) दोनों को परीक्षण और प्रशिक्षण सेटों में विभाजित करना होगा। Scikit-learn में इसे करने का एक सरल तरीका है; आप अपने परीक्षण डेटा को एक दिए गए बिंदु पर विभाजित कर सकते हैं। - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -4. अब आप अपने मॉडल को प्रशिक्षित करने के लिए तैयार हैं! Linear regression मॉडल लोड करें और अपने X और y प्रशिक्षण सेटों के साथ इसे `model.fit()` का उपयोग करके प्रशिक्षित करें: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` is a function you'll see in many ML libraries such as TensorFlow - -5. Then, create a prediction using test data, using the function `predict()`। इसका उपयोग डेटा समूहों के बीच लाइन खींचने के लिए किया जाएगा - - ```python - y_pred = model.predict(X_test) - ``` - -6. अब डेटा को एक प्लॉट में दिखाने का समय है। Matplotlib इस कार्य के लिए एक बहुत उपयोगी उपकरण है। सभी X और y परीक्षण डेटा का एक scatterplot बनाएं, और मॉडल के डेटा समूहों के बीच सबसे उपयुक्त स्थान पर एक लाइन खींचने के लिए भविष्यवाणी का उपयोग करें। - - ```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() - ``` - - ![मधुमेह के चारों ओर डेटा पॉइंट्स दिखाने वाला एक scatterplot](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.hi.png) - - ✅ यहाँ क्या हो रहा है इसके बारे में सोचें। कई छोटे डेटा बिंदुओं के माध्यम से एक सीधी रेखा चल रही है, लेकिन यह वास्तव में क्या कर रही है? क्या आप देख सकते हैं कि आपको इस रेखा का उपयोग करके एक नया, अनदेखा डेटा बिंदु प्लॉट के y अक्ष के संबंध में कहां फिट होना चाहिए, यह भविष्यवाणी करने में सक्षम होना चाहिए? इस मॉडल के व्यावहारिक उपयोग को शब्दों में डालने का प्रयास करें। - -बधाई हो, आपने अपना पहला linear regression model बनाया, इसके साथ एक भविष्यवाणी बनाई, और इसे एक प्लॉट में प्रदर्शित किया! - ---- -## 🚀चुनौती - -इस डेटासेट से एक अलग वेरिएबल को प्लॉट करें। संकेत: इस पंक्ति को संपादित करें: `X = X[:,2]`। इस डेटासेट के लक्ष्य को देखते हुए, आप मधुमेह के एक रोग के रूप में प्रगति के बारे में क्या खोज सकते हैं? -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## समीक्षा और आत्म-अध्ययन - -इस ट्यूटोरियल में, आपने सरल linear regression के साथ काम किया, बजाय univariate या multiple linear regression के। इन तरीकों के बीच के अंतर के बारे में थोड़ा पढ़ें, या [इस वीडियो](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) को देखें - -regression की अवधारणा के बारे में और पढ़ें और सोचें कि इस तकनीक द्वारा किन प्रकार के प्रश्नों का उत्तर दिया जा सकता है। अपनी समझ को गहरा करने के लिए इस [ट्यूटोरियल](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) को लें। - -## असाइनमेंट - -[एक अलग डेटासेट](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/1-Tools/assignment.md b/translations/hi/2-Regression/1-Tools/assignment.md deleted file mode 100644 index f56134fc..00000000 --- a/translations/hi/2-Regression/1-Tools/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# स्किकिट-लर्न के साथ प्रतिगमन - -## निर्देश - -स्किकिट-लर्न में [लिनेरुड डेटासेट](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 अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/1-Tools/solution/Julia/README.md b/translations/hi/2-Regression/1-Tools/solution/Julia/README.md deleted file mode 100644 index 633bb77e..00000000 --- a/translations/hi/2-Regression/1-Tools/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/2-Data/README.md b/translations/hi/2-Regression/2-Data/README.md deleted file mode 100644 index 7cd770f6..00000000 --- a/translations/hi/2-Regression/2-Data/README.md +++ /dev/null @@ -1,215 +0,0 @@ -# Scikit-learn का उपयोग करके एक रिग्रेशन मॉडल बनाएं: डेटा तैयार करें और विज़ुअलाइज़ करें - -![Data visualization infographic](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.hi.png) - -इंफोग्राफिक द्वारा [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) - -## परिचय - -अब जब आपके पास Scikit-learn के साथ मशीन लर्निंग मॉडल बनाने के लिए आवश्यक उपकरण हैं, तो आप अपने डेटा से सवाल पूछने के लिए तैयार हैं। जब आप डेटा के साथ काम करते हैं और एमएल समाधान लागू करते हैं, तो सही सवाल पूछना बहुत महत्वपूर्ण होता है ताकि आप अपने डेटा सेट की संभावनाओं को सही ढंग से खोल सकें। - -इस पाठ में, आप सीखेंगे: - -- अपने डेटा को मॉडल-बिल्डिंग के लिए कैसे तैयार करें। -- डेटा विज़ुअलाइज़ेशन के लिए Matplotlib का उपयोग कैसे करें। - -## अपने डेटा से सही सवाल पूछना - -आपको किस सवाल का जवाब चाहिए, यह निर्धारित करेगा कि आप किस प्रकार के एमएल एल्गोरिदम का उपयोग करेंगे। और आपको जो उत्तर मिलेगा, उसकी गुणवत्ता काफी हद तक आपके डेटा की प्रकृति पर निर्भर करेगी। - -इस पाठ के लिए प्रदान किए गए [डेटा](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") - -> 🎥 इस पाठ के लिए डेटा तैयार करने के लिए ऊपर की छवि पर क्लिक करें। - -वास्तव में, ऐसा बहुत कम होता है कि आपको एक ऐसा डेटा सेट मिलता है जो पूरी तरह से तैयार हो ताकि आप तुरंत एक एमएल मॉडल बना सकें। इस पाठ में, आप मानक पायथन लाइब्रेरी का उपयोग करके एक कच्चे डेटा सेट को तैयार करना सीखेंगे। आप डेटा को विज़ुअलाइज़ करने की विभिन्न तकनीकों को भी सीखेंगे। - -## केस स्टडी: 'कद्दू का बाजार' - -इस फोल्डर में आपको रूट `data` फोल्डर में एक .csv फ़ाइल मिलेगी जिसका नाम [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) है जिसमें कद्दू के बाजार के बारे में 1757 लाइनें डेटा शामिल हैं, जो शहर के अनुसार समूहित हैं। यह डेटा संयुक्त राज्य अमेरिका के कृषि विभाग द्वारा वितरित [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से निकाला गया कच्चा डेटा है। - -### डेटा तैयार करना - -यह डेटा सार्वजनिक डोमेन में है। इसे USDA वेबसाइट से कई अलग-अलग फाइलों में, प्रति शहर, डाउनलोड किया जा सकता है। बहुत अधिक अलग-अलग फाइलों से बचने के लिए, हमने सभी शहरों के डेटा को एक स्प्रेडशीट में संयोजित कर दिया है, इस प्रकार हमने पहले ही डेटा को थोड़ा _तैयार_ कर लिया है। अब, आइए डेटा पर करीब से नज़र डालें। - -### कद्दू डेटा - प्रारंभिक निष्कर्ष - -आप इस डेटा के बारे में क्या देखते हैं? आपने पहले ही देखा कि इसमें स्ट्रिंग, नंबर, खाली स्थान और अजीब मानों का मिश्रण है जिसे आपको समझना होगा। - -आप रिग्रेशन तकनीक का उपयोग करके इस डेटा से कौन सा सवाल पूछ सकते हैं? "एक दिए गए महीने के दौरान बिक्री के लिए कद्दू की कीमत की भविष्यवाणी करें" के बारे में क्या? डेटा को फिर से देखते हुए, डेटा संरचना बनाने के लिए कुछ परिवर्तन करने की आवश्यकता है। - -## अभ्यास - कद्दू डेटा का विश्लेषण करें - -आइए [Pandas](https://pandas.pydata.org/) का उपयोग करें, (जिसका नाम `Python Data Analysis` है) एक उपकरण जो डेटा को आकार देने के लिए बहुत उपयोगी है, कद्दू डेटा का विश्लेषण और तैयारी करने के लिए। - -### सबसे पहले, गायब तारीखों की जाँच करें - -आपको पहले गायब तारीखों की जाँच करने के लिए कदम उठाने होंगे: - -1. तारीखों को महीने के प्रारूप में बदलें (ये अमेरिकी तारीखें हैं, इसलिए प्रारूप `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` function which extracts from the original dataframe a group of rows (passed as first parameter) and columns (passed as second parameter). The expression `:` का उपयोग करके। नीचे दिए गए मामले में इसका अर्थ है "सभी पंक्तियाँ"। - - ```python - columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.loc[:, columns_to_select] - ``` - -### दूसरा, कद्दू की औसत कीमत निर्धारित करें - -सोचें कि एक दिए गए महीने में कद्दू की औसत कीमत कैसे निर्धारित करें। इस कार्य के लिए आप कौन से कॉलम चुनेंगे? संकेत: आपको 3 कॉलमों की आवश्यकता होगी। - -समाधान: `Low Price` and `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` column, pumpkins are sold in many different configurations. Some are sold in '1 1/9 bushel' measures, and some in '1/2 bushel' measures, some per pumpkin, some per pound, and some in big boxes with varying widths. - -> Pumpkins seem very hard to weigh consistently - -Digging into the original data, it's interesting that anything with `Unit of Sale` equalling 'EACH' or 'PER BIN' also have the `Package` type per inch, per bin, or 'each'. Pumpkins seem to be very hard to weigh consistently, so let's filter them by selecting only pumpkins with the string 'bushel' in their `Package` कॉलम को देखते हैं। - -1. फ़ाइल के शीर्ष पर, प्रारंभिक .csv इंपोर्ट के तहत एक फ़िल्टर जोड़ें: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - यदि आप अब डेटा प्रिंट करते हैं, तो आप देख सकते हैं कि आपको केवल 415 या इतने डेटा पंक्तियाँ मिल रही हैं जिनमें कद्दू बाय द बसल है। - -### लेकिन रुको! एक और चीज़ करनी है - -क्या आपने देखा कि बसल राशि प्रति पंक्ति भिन्न होती है? आपको मूल्य निर्धारण को सामान्य करने की आवश्यकता है ताकि आप बसल के अनुसार मूल्य दिखा सकें, इसलिए इसे मानकीकृत करने के लिए कुछ गणना करें। - -1. नई_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() - ``` - - ![A scatterplot showing price to month relationship](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.hi.png) - - क्या यह एक उपयोगी प्लॉट है? क्या इसके बारे में कुछ आपको आश्चर्यचकित करता है? - - यह विशेष रूप से उपयोगी नहीं है क्योंकि यह केवल आपके डेटा को एक दिए गए महीने में बिंदुओं के प्रसार के रूप में प्रदर्शित करता है। - -### इसे उपयोगी बनाएं - -उपयोगी डेटा प्रदर्शित करने के लिए चार्ट्स को आमतौर पर किसी न किसी तरह से डेटा को समूहबद्ध करने की आवश्यकता होती है। आइए एक ऐसा प्लॉट बनाते हैं जहाँ y अक्ष महीनों को दिखाता है और डेटा वितरण को प्रदर्शित करता है। - -1. एक सेल जोड़ें ताकि एक समूहित बार चार्ट बनाया जा सके: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![A bar chart showing price to month relationship](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.hi.png) - - यह एक अधिक उपयोगी डेटा विज़ुअलाइज़ेशन है! ऐसा लगता है कि कद्दू की सबसे अधिक कीमत सितंबर और अक्टूबर में होती है। क्या यह आपकी अपेक्षा के अनुरूप है? क्यों या क्यों नहीं? - ---- - -## 🚀चुनौती - -Matplotlib द्वारा पेश किए गए विभिन्न प्रकार के विज़ुअलाइज़ेशन का अन्वेषण करें। कौन से प्रकार रिग्रेशन समस्याओं के लिए सबसे उपयुक्त हैं? - -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## समीक्षा और स्व-अध्ययन - -डेटा को विज़ुअलाइज़ करने के कई तरीकों पर एक नज़र डालें। उपलब्ध विभिन्न लाइब्रेरी की एक सूची बनाएं और ध्यान दें कि कौन से प्रकार के कार्यों के लिए सबसे अच्छे हैं, उदाहरण के लिए 2D विज़ुअलाइज़ेशन बनाम 3D विज़ुअलाइज़ेशन। आप क्या खोजते हैं? - -## असाइनमेंट - -[विज़ुअलाइज़ेशन का अन्वेषण](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/2-Data/assignment.md b/translations/hi/2-Regression/2-Data/assignment.md deleted file mode 100644 index 489d8ba4..00000000 --- a/translations/hi/2-Regression/2-Data/assignment.md +++ /dev/null @@ -1,11 +0,0 @@ -# विज़ुअलाइज़ेशन का अन्वेषण - -डेटा विज़ुअलाइज़ेशन के लिए कई अलग-अलग लाइब्रेरी उपलब्ध हैं। इस पाठ में कद्दू डेटा का उपयोग करके matplotlib और seaborn के साथ एक नमूना नोटबुक में कुछ विज़ुअलाइज़ेशन बनाएं। किन लाइब्रेरियों के साथ काम करना आसान है? -## मूल्यांकन - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | --------- | -------- | ----------------- | -| | दो अन्वेषण/विज़ुअलाइज़ेशन के साथ एक नोटबुक सबमिट की गई है | एक अन्वेषण/विज़ुअलाइज़ेशन के साथ एक नोटबुक सबमिट की गई है | एक नोटबुक सबमिट नहीं की गई है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/2-Data/solution/Julia/README.md b/translations/hi/2-Regression/2-Data/solution/Julia/README.md deleted file mode 100644 index 065a31c7..00000000 --- a/translations/hi/2-Regression/2-Data/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/3-Linear/README.md b/translations/hi/2-Regression/3-Linear/README.md deleted file mode 100644 index 9212f520..00000000 --- a/translations/hi/2-Regression/3-Linear/README.md +++ /dev/null @@ -1,349 +0,0 @@ -# Scikit-learn का उपयोग करके एक रिग्रेशन मॉडल बनाएं: रिग्रेशन के चार तरीके - -![Linear vs polynomial regression infographic](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.hi.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### परिचय - -अब तक आपने इस पाठ में उपयोग किए जाने वाले कद्दू मूल्य निर्धारण डेटासेट से एकत्र किए गए नमूना डेटा के साथ रिग्रेशन क्या है, इसका पता लगाया है। आपने इसे Matplotlib का उपयोग करके भी विज़ुअलाइज़ किया है। - -अब आप एमएल के लिए रिग्रेशन में गहराई से गोता लगाने के लिए तैयार हैं। जबकि विज़ुअलाइज़ेशन आपको डेटा को समझने की अनुमति देता है, मशीन लर्निंग की वास्तविक शक्ति _मॉडल प्रशिक्षण_ से आती है। मॉडल ऐतिहासिक डेटा पर प्रशिक्षित होते हैं ताकि डेटा निर्भरताओं को स्वचालित रूप से कैप्चर किया जा सके, और वे आपको नए डेटा के लिए परिणामों की भविष्यवाणी करने की अनुमति देते हैं, जिसे मॉडल ने पहले नहीं देखा है। - -इस पाठ में, आप दो प्रकार के रिग्रेशन के बारे में अधिक जानेंगे: _बेसिक लीनियर रिग्रेशन_ और _पोलिनोमियल रिग्रेशन_, साथ ही इन तकनीकों के अंतर्निहित गणित के कुछ पहलू। ये मॉडल हमें विभिन्न इनपुट डेटा के आधार पर कद्दू की कीमतों की भविष्यवाणी करने की अनुमति देंगे। - -[![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 बुशल बॉक्स में? -आइए इस डेटा में और गहराई से जांच करें। - -पिछले पाठ में, आपने एक Pandas डेटा फ्रेम बनाया और इसे मूल डेटासेट के एक हिस्से से आबाद किया, बुशल द्वारा मूल्य निर्धारण को मानकीकृत किया। ऐसा करने से, हालांकि, आप केवल लगभग 400 डेटा पॉइंट्स एकत्र करने में सक्षम थे और केवल पतझड़ के महीनों के लिए। - -इस पाठ के साथ आने वाली नोटबुक में हमने जो डेटा पहले से लोड किया है, उस पर एक नज़र डालें। डेटा पहले से लोड है और एक प्रारंभिक बिखराव प्लॉट महीने के डेटा को दिखाने के लिए चार्ट किया गया है। हो सकता है कि हम इसे और अधिक साफ करके डेटा की प्रकृति के बारे में थोड़ी अधिक जानकारी प्राप्त कर सकें। - -## एक लीनियर रिग्रेशन रेखा - -जैसा कि आपने पाठ 1 में सीखा, लीनियर रिग्रेशन अभ्यास का लक्ष्य एक रेखा को प्लॉट करने में सक्षम होना है: - -- **चर संबंध दिखाएं**। चर के बीच संबंध दिखाएं -- **भविष्यवाणियाँ करें**। यह भविष्यवाणी करें कि एक नया डेटा पॉइंट उस रेखा के संबंध में कहाँ गिर सकता है। - -इस प्रकार की रेखा खींचने के लिए **लीस्ट-स्क्वेर्स रिग्रेशन** का उपयोग किया जाता है। 'लीस्ट-स्क्वेर्स' शब्द का अर्थ है कि रिग्रेशन रेखा के चारों ओर के सभी डेटा पॉइंट्स को वर्गाकार किया जाता है और फिर जोड़ा जाता है। आदर्श रूप से, वह अंतिम योग जितना संभव हो उतना छोटा होता है, क्योंकि हम कम संख्या में त्रुटियों, या `least-squares` चाहते हैं। - -हम ऐसा इसलिए करते हैं क्योंकि हम एक ऐसी रेखा को मॉडल बनाना चाहते हैं जिसमें हमारे सभी डेटा पॉइंट्स से सबसे कम संचयी दूरी हो। हम उन्हें जोड़ने से पहले शब्दों को वर्गाकार भी करते हैं क्योंकि हम इसकी दिशा के बजाय इसके परिमाण से चिंतित हैं। - -> **🧮 गणित दिखाएं** -> -> इस रेखा को, जिसे _सबसे अच्छा फिट_ कहा जाता है, [एक समीकरण](https://en.wikipedia.org/wiki/Simple_linear_regression) द्वारा व्यक्त किया जा सकता है: -> -> ``` -> Y = a + bX -> ``` -> -> `X` is the 'explanatory variable'. `Y` is the 'dependent variable'. The slope of the line is `b` and `a` is the y-intercept, which refers to the value of `Y` when `X = 0`. -> ->![calculate the slope](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.hi.png) -> -> First, calculate the slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> In other words, and referring to our pumpkin data's original question: "predict the price of a pumpkin per bushel by month", `X` would refer to the price and `Y` would refer to the month of sale. -> ->![complete the equation](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.hi.png) -> -> Calculate the value of Y. If you're paying around $4, it must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> The math that calculates the line must demonstrate the slope of the line, which is also dependent on the intercept, or where `Y` is situated when `X = 0`. -> -> You can observe the method of calculation for these values on the [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Also visit [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to watch how the numbers' values impact the line. - -## Correlation - -One more term to understand is the **Correlation Coefficient** between given X and Y variables. Using a scatterplot, you can quickly visualize this coefficient. A plot with datapoints scattered in a neat line have high correlation, but a plot with datapoints scattered everywhere between X and Y have a low correlation. - -A good linear regression model will be one that has a high (nearer to 1 than 0) Correlation Coefficient using the Least-Squares Regression method with a line of regression. - -✅ Run the notebook accompanying this lesson and look at the Month to Price scatterplot. Does the data associating Month to Price for pumpkin sales seem to have high or low correlation, according to your visual interpretation of the scatterplot? Does that change if you use more fine-grained measure instead of `Month`, eg. *day of the year* (i.e. number of days since the beginning of the year)? - -In the code below, we will assume that we have cleaned up the data, and obtained a data frame called `new_pumpkins`, similar to the following: - -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 - -> The code to clean the data is available in [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). We have performed the same cleaning steps as in the previous lesson, and have calculated `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") - -> 🎥 ऊपर दी गई छवि पर क्लिक करें सहसंबंध का एक संक्षिप्त वीडियो अवलोकन देखने के लिए। - -पिछले पाठ से आपने शायद देखा है कि विभिन्न महीनों के लिए औसत कीमत इस प्रकार दिखती है: - -Average price by month - -यह सुझाव देता है कि कुछ सहसंबंध होना चाहिए, और हम `Month` and `Price`, or between `DayOfYear` and `Price`. Here is the scatter plot that shows the latter relationship: - -Scatter plot of Price vs. Day of Year - -Let's see if there is a correlation using the `corr` फ़ंक्शन का उपयोग करके `Month` and `Price` के बीच संबंध की भविष्यवाणी करने के लिए लीनियर रिग्रेशन मॉडल को प्रशिक्षित करने का प्रयास कर सकते हैं: - -```python -print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) -print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) -``` - -ऐसा लगता है कि सहसंबंध काफी छोटा है, -0.15 `Month` and -0.17 by the `DayOfMonth`, but there could be another important relationship. It looks like there are different clusters of prices corresponding to different pumpkin varieties. To confirm this hypothesis, let's plot each pumpkin category using a different color. By passing an `ax` parameter to the `scatter` प्लॉटिंग फ़ंक्शन का उपयोग करके हम सभी पॉइंट्स को एक ही ग्राफ पर प्लॉट कर सकते हैं: - -```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) -``` - -Scatter plot of Price vs. Day of Year - -हमारी जांच से पता चलता है कि विविधता का वास्तविक बिक्री तिथि की तुलना में समग्र मूल्य पर अधिक प्रभाव है। हम इसे एक बार ग्राफ के साथ देख सकते हैं: - -```python -new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') -``` - -Bar graph of price vs variety - -आइए फिलहाल केवल एक कद्दू की किस्म, 'पाई प्रकार', पर ध्यान केंद्रित करें और देखें कि तारीख का मूल्य पर क्या प्रभाव पड़ता है: - -```python -pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] -pie_pumpkins.plot.scatter('DayOfYear','Price') -``` -Scatter plot of Price vs. Day of Year - -यदि हम अब `Price` and `DayOfYear` using `corr` function, we will get something like `-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 arrays में अलग करके शुरू करते हैं: - -```python -X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) -y = pie_pumpkins['Price'] -``` - -> ध्यान दें कि हमें इनपुट डेटा पर `reshape` करना पड़ा ताकि लीनियर रिग्रेशन पैकेज इसे सही ढंग से समझ सके। लीनियर रिग्रेशन एक इनपुट के रूप में 2D-array की अपेक्षा करता है, जहां array की प्रत्येक पंक्ति इनपुट फीचर्स के वेक्टर के अनुरूप होती है। हमारे मामले में, चूंकि हमारे पास केवल एक इनपुट है - हमें आकार N×1 के साथ एक array की आवश्यकता है, जहां N डेटासेट का आकार है। - -फिर, हमें डेटा को ट्रेन और टेस्ट डेटासेट्स में विभाजित करने की आवश्यकता है, ताकि हम प्रशिक्षण के बाद अपने मॉडल को मान्य कर सकें: - -```python -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) -``` - -अंत में, वास्तविक लीनियर रिग्रेशन मॉडल को प्रशिक्षित करना केवल दो पंक्तियों का कोड लेता है। हम `LinearRegression` object, and fit it to our data using the `fit` मेथड को परिभाषित करते हैं: - -```python -lin_reg = LinearRegression() -lin_reg.fit(X_train,y_train) -``` - -`LinearRegression` object after `fit`-ting contains all the coefficients of the regression, which can be accessed using `.coef_` property. In our case, there is just one coefficient, which should be around `-0.017`. It means that prices seem to drop a bit with time, but not too much, around 2 cents per day. We can also access the intersection point of the regression with Y-axis using `lin_reg.intercept_` - it will be around `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` चर शामिल करते हैं, तो हमें अपने डेटा को एक परवलयिक वक्र के साथ फिट करने में सक्षम होना चाहिए, जिसमें वर्ष के एक निश्चित बिंदु पर न्यूनतम होगा। - -Scikit-learn में विभिन्न डेटा प्रोसेसिंग चरणों को एक साथ संयोजित करने के लिए एक उपयोगी [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) शामिल है। एक **pipeline** **अनुमानकों** की एक श्रृंखला है। हमारे मामले में, हम एक pipeline बनाएंगे जो पहले हमारे मॉडल में पोलिनोमियल फीचर्स जोड़ता है, और फिर रिग्रेशन को प्रशिक्षित करता है: - -```python -from sklearn.preprocessing import PolynomialFeatures -from sklearn.pipeline import make_pipeline - -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) - -pipeline.fit(X_train,y_train) -``` - -`PolynomialFeatures(2)` means that we will include all second-degree polynomials from the input data. In our case it will just mean `DayOfYear`2, but given two input variables X and Y, this will add X2, XY and Y2. We may also use higher degree polynomials if we want. - -Pipelines can be used in the same manner as the original `LinearRegression` object, i.e. we can `fit` the pipeline, and then use `predict` to get the prediction results. Here is the graph showing test data, and the approximation curve: - -Polynomial regression - -Using Polynomial Regression, we can get slightly lower MSE and higher determination, but not significantly. We need to take into account other features! - -> You can see that the minimal pumpkin prices are observed somewhere around Halloween. How can you explain this? - -🎃 Congratulations, you just created a model that can help predict the price of pie pumpkins. You can probably repeat the same procedure for all pumpkin types, but that would be tedious. Let's learn now how to take pumpkin variety into account in our model! - -## Categorical Features - -In the ideal world, we want to be able to predict prices for different pumpkin varieties using the same model. However, the `Variety` column is somewhat different from columns like `Month`, because it contains non-numeric values. Such columns are called **categorical**. - -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") - -> 🎥 Click the image above for a short video overview of using categorical features. - -Here you can see how average price depends on variety: - -Average price by variety - -To take variety into account, we first need to convert it to numeric form, or **encode** it. There are several way we can do it: - -* Simple **numeric encoding** will build a table of different varieties, and then replace the variety name by an index in that table. This is not the best idea for linear regression, because linear regression takes the actual numeric value of the index, and adds it to the result, multiplying by some coefficient. In our case, the relationship between the index number and the price is clearly non-linear, even if we make sure that indices are ordered in some specific way. -* **One-hot encoding** will replace the `Variety` column by 4 different columns, one for each variety. Each column will contain `1` if the corresponding row is of a given variety, and `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` and `y` डेटा को सही ढंग से प्रारंभ करने की आवश्यकता है: - -```python -X = pd.get_dummies(new_pumpkins['Variety']) -y = new_pumpkins['Price'] -``` - -बाकी कोड वही है जो हमने लीनियर रिग्रेशन को प्रशिक्षित करने के लिए ऊपर उपयोग किया था। यदि आप इसे आजमाते हैं, तो आप देखेंगे कि मीन स्क्वायर एरर लगभग समान है, लेकिन हमें बहुत अधिक निर्धारण गुणांक (~77%) मिलता है। और अधिक सटीक भविष्यवाणियाँ प्राप्त करने के लिए, हम अधिक श्रेणीबद्ध फीचर्स को ध्यान में रख सकते हैं, साथ ही संख्यात्मक फीचर्स, जैसे `Month` or `DayOfYear`. To get one large array of features, we can use `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` and `Package` प्रकार को भी ध्यान में रखते हैं, जो हमें MSE 2.84 (10%) और निर्धारण 0.94 देता है! - -## सब कुछ एक साथ रखना - -सर्वश्रेष्ठ मॉडल बनाने के लिए, हम ऊपर दिए गए उदाहरण से संयुक्त (वन-हॉट एन्कोड श्रेणीबद्ध + संख्यात्मक) डेटा का उपयोग पोलिनोमियल रिग्रेशन के साथ कर सकते हैं। आपकी सुविधा के लिए यहां पूरा कोड दिया गया है: - -```python -# set up training data -X = pd.get_dummies(new_pumpkins['Variety']) \ - .join(new_pumpkins['Month']) \ - .join(pd.get_dummies(new_pumpkins['City'])) \ - .join(pd.get_dummies(new_pumpkins['Package'])) -y = new_pumpkins['Price'] - -# make train-test split -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - -# setup and train the pipeline -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) -pipeline.fit(X_train,y_train) - -# predict results for test data -pred = pipeline.predict(X_test) - -# calculate MSE and determination -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') - -score = pipeline.score(X_train,y_train) -print('Model determination: ', score) -``` - -यह हमें लगभग 97% का सर्वोत्तम निर्धारण गुणांक और MSE=2.23 (~8% भविष्यवाणी त्रुटि) देना चाहिए। - -| मॉडल | MSE | निर्धारण | -|-------|-----|---------------| -| `DayOfYear@@INLINE_CODE - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/3-Linear/assignment.md b/translations/hi/2-Regression/3-Linear/assignment.md deleted file mode 100644 index c20edc51..00000000 --- a/translations/hi/2-Regression/3-Linear/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक रिग्रेशन मॉडल बनाएं - -## निर्देश - -इस पाठ में आपको लीनियर और पॉलीनोमियल रिग्रेशन दोनों का उपयोग करके एक मॉडल बनाने का तरीका दिखाया गया था। इस ज्ञान का उपयोग करते हुए, एक डेटासेट खोजें या Scikit-learn के अंतर्निर्मित सेटों में से एक का उपयोग करके एक नया मॉडल बनाएं। अपने नोटबुक में समझाएं कि आपने जिस तकनीक को चुना है, वह क्यों चुनी, और अपने मॉडल की सटीकता का प्रदर्शन करें। यदि यह सटीक नहीं है, तो समझाएं क्यों। - -## मूल्यांकन मापदंड - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| ------- | ----------------------------------------------------------- | ------------------------- | ------------------------------- | -| | अच्छी तरह से दस्तावेज़ित समाधान के साथ एक पूरा नोटबुक प्रस्तुत करता है | समाधान अधूरा है | समाधान त्रुटिपूर्ण या बग्गी है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/3-Linear/solution/Julia/README.md b/translations/hi/2-Regression/3-Linear/solution/Julia/README.md deleted file mode 100644 index ccba6ad6..00000000 --- a/translations/hi/2-Regression/3-Linear/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/4-Logistic/README.md b/translations/hi/2-Regression/4-Logistic/README.md deleted file mode 100644 index 41325c82..00000000 --- a/translations/hi/2-Regression/4-Logistic/README.md +++ /dev/null @@ -1,314 +0,0 @@ -# श्रेणियों की भविष्यवाणी के लिए लॉजिस्टिक रिग्रेशन - -![लॉजिस्टिक बनाम रैखिक रिग्रेशन इन्फोग्राफिक](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.hi.png) - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -> ### [यह पाठ R में उपलब्ध है!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) - -## परिचय - -रिग्रेशन पर इस अंतिम पाठ में, जो कि एक बुनियादी _क्लासिक_ एमएल तकनीक है, हम लॉजिस्टिक रिग्रेशन पर नज़र डालेंगे। आप इस तकनीक का उपयोग बाइनरी श्रेणियों की भविष्यवाणी के लिए पैटर्न खोजने के लिए करेंगे। क्या यह कैंडी चॉकलेट है या नहीं? क्या यह बीमारी संक्रामक है या नहीं? क्या यह ग्राहक इस उत्पाद को चुनेगा या नहीं? - -इस पाठ में, आप सीखेंगे: - -- डेटा विज़ुअलाइज़ेशन के लिए एक नई लाइब्रेरी -- लॉजिस्टिक रिग्रेशन के तकनीकें - -✅ इस प्रकार के रिग्रेशन के साथ काम करने की अपनी समझ को गहरा करें इस [Learn module](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.hi.png) -> इन्फोग्राफिक [दसानी मदीपल्ली](https://twitter.com/dasani_decoded) द्वारा - -### अन्य क्लासिफिकेशन - -लॉजिस्टिक रिग्रेशन के अन्य प्रकार भी हैं, जिनमें मल्टीनोमियल और ऑर्डिनल शामिल हैं: - -- **मल्टीनोमियल**, जिसमें एक से अधिक श्रेणियां होती हैं - "नारंगी, सफेद, और धारीदार"। -- **ऑर्डिनल**, जिसमें क्रमबद्ध श्रेणियां होती हैं, उपयोगी होती हैं यदि हम अपने परिणामों को तार्किक रूप से क्रमबद्ध करना चाहते हैं, जैसे हमारे कद्दू जो एक सीमित संख्या में आकारों (मिनी, स्मॉल, मीडियम, लार्ज, एक्सएल, एक्सएक्सएल) द्वारा क्रमबद्ध होते हैं। - -![मल्टीनोमियल बनाम ऑर्डिनल रिग्रेशन](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.hi.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 - ``` - -### विज़ुअलाइज़ेशन - श्रेणीबद्ध प्लॉट - -अब तक आपने [स्टार्टर नोटबुक](../../../../2-Regression/4-Logistic/notebook.ipynb) को कद्दू डेटा के साथ फिर से लोड कर लिया है और इसे इस प्रकार साफ कर लिया है कि इसमें कुछ वेरिएबल्स सहित एक डेटा सेट संरक्षित हो। आइए नोटबुक में डेटा फ्रेम को एक अलग लाइब्रेरी का उपयोग करके विज़ुअलाइज़ करें: [Seaborn](https://seaborn.pydata.org/index.html), जो पहले उपयोग की गई Matplotlib पर आधारित है। - -Seaborn आपके डेटा को विज़ुअलाइज़ करने के कुछ शानदार तरीके प्रदान करता है। उदाहरण के लिए, आप श्रेणीबद्ध प्लॉट में `Variety` और `Color` के लिए डेटा के वितरण की तुलना कर सकते हैं। - -1. एक श्रेणीबद्ध प्लॉट बनाएं `catplot` function, using our pumpkin data `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.hi.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` से भिन्न सभी फीचर्स। यह एक हॉट एन्कोडिंग है, जिसका अर्थ है कि प्रत्येक श्रेणी को एक बाइनरी कॉलम द्वारा दर्शाया जाता है: एन्कोडेड वेरिएबल उस Variety से संबंधित होने पर 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) -``` -दूसरी ओर, लेबल को एन्कोड करने के लिए, हम scikit-learn `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` column? - -### Analyse relationships between variables - -Now that we have pre-processed our data, we can analyse the relationships between the features and the label to grasp an idea of how well the model will be able to predict the label given the features. -The best way to perform this kind of analysis is plotting the data. We'll be using again the Seaborn `catplot` function, to visualize the relationships between `Item Size`, `Variety` और `Color` को श्रेणीबद्ध प्लॉट में बेहतर तरीके से प्लॉट करने के लिए एन्कोडेड `Item Size` column and the unencoded `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.hi.png) - -### स्वार्म प्लॉट का उपयोग करें - -चूंकि रंग एक बाइनरी श्रेणी (सफेद या न) है, इसे विज़ुअलाइज़ेशन के लिए 'एक [विशेष दृष्टिकोण](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)' की आवश्यकता होती है। इस श्रेणी के अन्य वेरिएबल्स के साथ संबंध को विज़ुअलाइज़ करने के अन्य तरीके भी हैं। - -आप 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.hi.png) - -**सावधान रहें**: ऊपर का कोड एक चेतावनी उत्पन्न कर सकता है, क्योंकि seaborn इतनी मात्रा में डेटा पॉइंट्स को स्वार्म प्लॉट में प्रदर्शित करने में विफल हो सकता है। एक संभावित समाधान मार्कर के आकार को कम करना है, 'size' पैरामीटर का उपयोग करके। हालांकि, ध्यान दें कि यह प्लॉट की पठनीयता को प्रभावित करता है। - -> **🧮 मुझे गणित दिखाओ** -> -> लॉजिस्टिक रिग्रेशन 'अधिकतम संभावना' की अवधारणा पर निर्भर करता है, [सिग्मॉइड फंक्शन्स](https://wikipedia.org/wiki/Sigmoid_function) का उपयोग करके। एक 'सिग्मॉइड फंक्शन' एक प्लॉट पर 'S' आकार की तरह दिखता है। यह एक मान लेता है और इसे 0 और 1 के बीच कहीं मैप करता है। इसका कर्व भी 'लॉजिस्टिक कर्व' कहलाता है। इसका सूत्र इस प्रकार दिखता है: -> -> ![लॉजिस्टिक फंक्शन](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.hi.png) -> -> जहां सिग्मॉइड का मध्यबिंदु x के 0 बिंदु पर होता है, L कर्व का अधिकतम मान होता है, और k कर्व की तीव्रता होती है। यदि फंक्शन का परिणाम 0.5 से अधिक होता है, तो संबंधित लेबल को बाइनरी विकल्प के '1' वर्ग में दिया जाएगा। यदि नहीं, तो इसे '0' के रूप में वर्गीकृत किया जाएगा। - -## अपना मॉडल बनाएं - -Scikit-learn में इन बाइनरी क्लासिफिकेशन्स को खोजने के लिए एक मॉडल बनाना आश्चर्यजनक रूप से सीधा है। - -[![शुरुआती लोगों के लिए एमएल - डेटा के क्लासिफिकेशन के लिए लॉजिस्टिक रिग्रेशन](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/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) प्राप्त कर सकते हैं, आप अपने मॉडल को एक [भ्रम मैट्रिक्स](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]]) - ``` - -Scikit-learn में, भ्रम मैट्रिक्स की पंक्तियाँ (अक्ष 0) वास्तविक लेबल हैं और कॉलम (अक्ष 1) भविष्यवाणी किए गए लेबल हैं। - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -यहाँ क्या हो रहा है? मान लें कि हमारे मॉडल से कद्दू को दो बाइनरी श्रेणियों के बीच वर्गीकृत करने के लिए कहा जाता है, श्रेणी 'सफेद' और श्रेणी 'न-सफेद'। - -- यदि आपका मॉडल कद्दू को न-सफेद के रूप में भविष्यवाणी करता है और यह वास्तव में श्रेणी 'न-सफेद' से संबंधित है, तो हम इसे एक सच्चा नकारात्मक कहते हैं, जो शीर्ष बाएँ संख्या द्वारा दिखाया गया है। -- यदि आपका मॉडल कद्दू को सफेद के रूप में भविष्यवाणी करता है और यह वास्तव में श्रेणी 'न-सफेद' से संबंधित है, तो हम इसे एक झूठा नकारात्मक कहते हैं, जो नीचे बाएँ संख्या द्वारा दिखाया गया है। -- यदि आपका मॉडल कद्दू को न-सफेद के रूप में भविष्यवाणी करता है और यह वास्तव में श्रेणी 'सफेद' से संबंधित है, तो हम इसे एक झूठा सकारात्मक कहते हैं, जो शीर्ष दाएँ संख्या द्वारा दिखाया गया है। -- यदि आपका मॉडल कद्दू को - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/4-Logistic/assignment.md b/translations/hi/2-Regression/4-Logistic/assignment.md deleted file mode 100644 index c26bdf42..00000000 --- a/translations/hi/2-Regression/4-Logistic/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# कुछ पुनः प्रयास करते हुए प्रतिगमन - -## निर्देश - -पाठ में, आपने कद्दू डेटा का एक उपसमुच्चय उपयोग किया था। अब, मूल डेटा पर वापस जाएं और सभी डेटा का उपयोग करें, जो साफ और मानकीकृत हो, एक Logistic Regression मॉडल बनाने के लिए। - -## मूल्यांकन - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | -| | एक नोटबुक प्रस्तुत की गई है जिसमें एक अच्छी तरह से समझाया गया और अच्छी तरह से प्रदर्शन करने वाला मॉडल है | एक नोटबुक प्रस्तुत की गई है जिसमें एक न्यूनतम प्रदर्शन करने वाला मॉडल है | एक नोटबुक प्रस्तुत की गई है जिसमें एक उप-प्रदर्शन करने वाला मॉडल है या कोई मॉडल नहीं है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/4-Logistic/solution/Julia/README.md b/translations/hi/2-Regression/4-Logistic/solution/Julia/README.md deleted file mode 100644 index 4ce20f47..00000000 --- a/translations/hi/2-Regression/4-Logistic/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित AI अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/2-Regression/README.md b/translations/hi/2-Regression/README.md deleted file mode 100644 index 0623a344..00000000 --- a/translations/hi/2-Regression/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# मशीन लर्निंग के लिए रिग्रेशन मॉडल्स -## क्षेत्रीय विषय: उत्तरी अमेरिका में कद्दू की कीमतों के लिए रिग्रेशन मॉडल्स 🎃 - -उत्तरी अमेरिका में, कद्दू अक्सर हैलोवीन के लिए डरावने चेहरों में तराशे जाते हैं। आइए इन आकर्षक सब्जियों के बारे में और जानें! - -![jack-o-lanterns](../../../translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.hi.jpg) -> फोटो बेथ टेउत्स्चमैन द्वारा अनस्प्लैश पर - -## आप क्या सीखेंगे - -[![रिग्रेशन का परिचय](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "रिग्रेशन परिचय वीडियो - देखने के लिए क्लिक करें!") -> 🎥 ऊपर की छवि पर क्लिक करें इस पाठ के लिए एक त्वरित परिचय वीडियो के लिए - -इस खंड में पाठ मशीन लर्निंग के संदर्भ में रिग्रेशन के प्रकारों को कवर करते हैं। रिग्रेशन मॉडल्स वेरिएबल्स के बीच _संबंध_ को निर्धारित करने में मदद कर सकते हैं। इस प्रकार का मॉडल लंबाई, तापमान, या उम्र जैसी मानों का पूर्वानुमान लगा सकता है, इस प्रकार डेटा बिंदुओं का विश्लेषण करते समय वेरिएबल्स के बीच संबंधों का पता लगा सकता है। - -इस श्रृंखला के पाठों में, आप रेखीय और लॉजिस्टिक रिग्रेशन के बीच के अंतर को जानेंगे, और कब आपको एक को दूसरे पर प्राथमिकता देनी चाहिए। - -[![शुरुआती के लिए एमएल - मशीन लर्निंग के लिए रिग्रेशन मॉडल्स का परिचय](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "शुरुआती के लिए एमएल - मशीन लर्निंग के लिए रिग्रेशन मॉडल्स का परिचय") - -> 🎥 ऊपर की छवि पर क्लिक करें रिग्रेशन मॉडल्स का परिचय देने वाले एक छोटे वीडियो के लिए। - -इस पाठ समूह में, आप मशीन लर्निंग कार्यों को शुरू करने के लिए सेट अप करेंगे, जिसमें नोटबुक्स को प्रबंधित करने के लिए 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) - ---- -### क्रेडिट्स - -"रिग्रेशन के साथ एमएल" को ♥️ के साथ [जेन लूपर](https://twitter.com/jenlooper) द्वारा लिखा गया था - -♥️ क्विज़ योगदानकर्ताओं में शामिल हैं: [मुहम्मद साकिब खान इनान](https://twitter.com/Sakibinan) और [ऑर्नेला अल्टुन्यान](https://twitter.com/ornelladotcom) - -कद्दू डेटासेट का सुझाव [इस प्रोजेक्ट द्वारा कागल पर](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) दिया गया है और इसका डेटा [विशेष फसलों के टर्मिनल मार्केट्स स्टैंडर्ड रिपोर्ट्स](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) से लिया गया है, जिसे संयुक्त राज्य अमेरिका के कृषि विभाग द्वारा वितरित किया गया है। हमने वितरण को सामान्य करने के लिए विविधता के आधार पर कुछ रंग बिंदु जोड़े हैं। यह डेटा सार्वजनिक डोमेन में है। - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-Web-App/1-Web-App/README.md b/translations/hi/3-Web-App/1-Web-App/README.md deleted file mode 100644 index 198bfc72..00000000 --- a/translations/hi/3-Web-App/1-Web-App/README.md +++ /dev/null @@ -1,348 +0,0 @@ -# एक वेब ऐप बनाएं जो एमएल मॉडल का उपयोग करती है - -इस पाठ में, आप एक डेटा सेट पर एक एमएल मॉडल को प्रशिक्षित करेंगे जो इस दुनिया से बाहर है: _पिछले सदी के यूएफओ देखे जाने_, जो NUFORC के डेटाबेस से लिया गया है। - -आप सीखेंगे: - -- एक प्रशिक्षित मॉडल को 'pickle' कैसे करें -- उस मॉडल को एक Flask ऐप में कैसे उपयोग करें - -हम अपने नोटबुक का उपयोग डेटा को साफ करने और हमारे मॉडल को प्रशिक्षित करने के लिए जारी रखेंगे, लेकिन आप प्रक्रिया को एक कदम आगे ले जा सकते हैं और एक वेब ऐप में एक मॉडल का उपयोग करने की खोज कर सकते हैं। - -ऐसा करने के लिए, आपको Flask का उपयोग करके एक वेब ऐप बनाना होगा। - -## [Pre-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## एक ऐप बनाना - -मशीन लर्निंग मॉडल का उपभोग करने के लिए वेब ऐप बनाने के कई तरीके हैं। आपकी वेब आर्किटेक्चर आपके मॉडल के प्रशिक्षित होने के तरीके को प्रभावित कर सकती है। कल्पना करें कि आप एक व्यवसाय में काम कर रहे हैं जहां डेटा साइंस समूह ने एक मॉडल प्रशिक्षित किया है जिसे वे चाहते हैं कि आप एक ऐप में उपयोग करें। - -### विचार - -कई प्रश्न हैं जिन्हें आपको पूछना चाहिए: - -- **क्या यह एक वेब ऐप है या मोबाइल ऐप?** यदि आप एक मोबाइल ऐप बना रहे हैं या IoT संदर्भ में मॉडल का उपयोग करने की आवश्यकता है, तो आप [TensorFlow Lite](https://www.tensorflow.org/lite/) का उपयोग कर सकते हैं और मॉडल को एक Android या iOS ऐप में उपयोग कर सकते हैं। -- **मॉडल कहाँ रहेगा?** क्लाउड में या स्थानीय रूप से? -- **ऑफलाइन समर्थन।** क्या ऐप को ऑफलाइन काम करना है? -- **मॉडल को प्रशिक्षित करने के लिए कौन सी तकनीक का उपयोग किया गया था?** चुनी गई तकनीक आपके द्वारा उपयोग किए जाने वाले टूलिंग को प्रभावित कर सकती है। - - **TensorFlow का उपयोग करना।** यदि आप TensorFlow का उपयोग करके एक मॉडल को प्रशिक्षित कर रहे हैं, उदाहरण के लिए, वह इकोसिस्टम एक TensorFlow मॉडल को एक वेब ऐप में उपयोग के लिए परिवर्तित करने की क्षमता प्रदान करता है [TensorFlow.js](https://www.tensorflow.org/js/) का उपयोग करके। - - **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 का उपयोग करना।** यदि आप एक एमएल SaaS (Software as a Service) सिस्टम जैसे [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 का निर्माण शामिल है। - -आपके पास एक संपूर्ण Flask वेब ऐप बनाने का अवसर भी है जो स्वयं वेब ब्राउज़र में मॉडल को प्रशिक्षित कर सकता है। यह भी TensorFlow.js का उपयोग करके एक जावास्क्रिप्ट संदर्भ में किया जा सकता है। - -हमारे उद्देश्यों के लिए, चूंकि हम Python-आधारित नोटबुक के साथ काम कर रहे हैं, आइए उन चरणों का अन्वेषण करें जिन्हें आपको एक प्रशिक्षित मॉडल को ऐसे नोटबुक से Python-निर्मित वेब ऐप द्वारा पढ़े जाने योग्य प्रारूप में निर्यात करने के लिए लेने की आवश्यकता है। - -## उपकरण - -इस कार्य के लिए, आपको दो उपकरणों की आवश्यकता है: Flask और Pickle, दोनों Python पर चलते हैं। - -✅ [Flask](https://palletsprojects.com/p/flask/) क्या है? इसके निर्माताओं द्वारा एक 'माइक्रो-फ्रेमवर्क' के रूप में परिभाषित, Flask Python का उपयोग करके वेब फ्रेमवर्क की बुनियादी विशेषताएं और वेब पेज बनाने के लिए एक टेम्पलेटिंग इंजन प्रदान करता है। Flask के साथ निर्माण का अभ्यास करने के लिए [इस Learn module](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) को देखें। - -✅ [Pickle](https://docs.python.org/3/library/pickle.html) क्या है? Pickle 🥒 एक Python मॉड्यूल है जो एक Python ऑब्जेक्ट संरचना को सीरियलाइज़ और डी-सीरियलाइज़ करता है। जब आप एक मॉडल को 'pickle' करते हैं, तो आप उसकी संरचना को वेब पर उपयोग के लिए सीरियलाइज़ या फ्लैटन करते हैं। सावधान रहें: pickle स्वाभाविक रूप से सुरक्षित नहीं है, इसलिए यदि किसी फाइल को 'अन-पिकल' करने के लिए प्रेरित किया जाता है तो सावधान रहें। एक पिकल की गई फाइल का उपसर्ग `.pkl` होता है। - -## अभ्यास - अपने डेटा को साफ करें - -इस पाठ में आप 80,000 यूएफओ देखे जाने के डेटा का उपयोग करेंगे, जो [NUFORC](https://nuforc.org) (The National UFO Reporting Center) द्वारा एकत्र किया गया है। इस डेटा में यूएफओ देखे जाने के कुछ दिलचस्प विवरण हैं, उदाहरण के लिए: - -- **लंबा उदाहरण विवरण।** "एक आदमी रात में एक घास के मैदान पर चमकने वाली रोशनी की एक किरण से उभरता है और वह टेक्सास इंस्ट्रूमेंट्स पार्किंग स्थल की ओर दौड़ता है"। -- **छोटा उदाहरण विवरण।** "रोशनी ने हमारा पीछा किया"। - -[ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) स्प्रेडशीट में `city`, `state` और `country` के बारे में कॉलम शामिल हैं जहां देखे जाने की घटना हुई, वस्तु का `shape` और उसका `latitude` और `longitude`। - -इस पाठ में शामिल खाली [notebook](../../../../3-Web-App/1-Web-App/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. अब, आप उन डेटा की मात्रा को कम कर सकते हैं जिनसे हमें निपटना है, किसी भी null मानों को हटा कर और केवल 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`. You want to be able to input `Seconds`, `Latitude` and `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` and `Latitude/Longitude` correlate. - -The model you created isn't very revolutionary as you should be able to infer a `Country` from its `Latitude` and `Longitude`, लेकिन यह एक अच्छा अभ्यास है कच्चे डेटा से प्रशिक्षित करने का प्रयास करना जिसे आपने साफ किया, निर्यात किया, और फिर इस मॉडल को एक वेब ऐप में उपयोग करें। - -## अभ्यास - अपने मॉडल को 'pickle' करें - -अब, अपने मॉडल को _pickle_ करने का समय है! आप इसे कुछ लाइनों के कोड में कर सकते हैं। एक बार जब यह _pickled_ हो जाए, तो अपने pickled मॉडल को लोड करें और इसे सेकंड, अक्षांश और देशांतर के मानों वाली एक नमूना डेटा सरणी के खिलाफ परीक्षण करें, - -```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'** लौटाता है, जो यूके के लिए देश कोड है। अद्भुत! 👽 - -## अभ्यास - एक Flask ऐप बनाएं - -अब आप अपने मॉडल को कॉल करने और समान परिणाम लौटाने के लिए एक Flask ऐप बना सकते हैं, लेकिन एक अधिक दृष्टिगत रूप से आकर्षक तरीके से। - -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. अपने टर्मिनल में _requirements.txt_ में सूचीबद्ध लाइब्रेरीज़ को स्थापित करने के लिए `pip install` टाइप करें: - - ```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 }}

                                                            - -
                                                            - -
                                                            - - - - ``` - - इस फाइल में टेम्पलेटिंग पर एक नज़र डालें। उन वेरिएबल्स के चारों ओर 'मस्टैच' सिंटैक्स पर ध्यान दें जिन्हें ऐप द्वारा प्रदान किया जाएगा, जैसे भविष्यवाणी टेक्स्ट: `{{}}`. There's also a form that posts a prediction to the `/predict` route. - - Finally, you're ready to build the python file that drives the consumption of the model and the display of predictions: - -1. In `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) while running the web app using Flask, any changes you make to your application will be reflected immediately without the need to restart the server. Beware! Don't enable this mode in a production app. - -If you run `python app.py` or `python3 app.py` - your web server starts up, locally, and you can fill out a short form to get an answer to your burning question about where UFOs have been sighted! - -Before doing that, take a look at the parts of `app.py`: - -1. First, dependencies are loaded and the app starts. -1. Then, the model is imported. -1. Then, index.html is rendered on the home route. - -On the `/predict` route, several things happen when the form is posted: - -1. The form variables are gathered and converted to a numpy array. They are then sent to the model and a prediction is returned. -2. The Countries that we want displayed are re-rendered as readable text from their predicted country code, and that value is sent back to index.html to be rendered in the template. - -Using a model this way, with Flask and a pickled model, is relatively straightforward. The hardest thing is to understand what shape the data is that must be sent to the model to get a prediction. That all depends on how the model was trained. This one has three data points to be input in order to get a prediction. - -In a professional setting, you can see how good communication is necessary between the folks who train the model and those who consume it in a web or mobile app. In our case, it's only one person, you! - ---- - -## 🚀 Challenge - -Instead of working in a notebook and importing the model to the Flask app, you could train the model right within the Flask app! Try converting your Python code in the notebook, perhaps after your data is cleaned, to train the model from within the app on a route called `train` जोड़ते हैं तो इसके फायदे और नुकसान क्या हैं? - -## [Post-lecture quiz](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## समीक्षा और आत्म-अध्ययन - -मशीन लर्निंग मॉडल का उपभोग करने के लिए एक वेब ऐप बनाने के कई तरीके हैं। उन तरीकों की एक सूची बनाएं जिनसे आप जावास्क्रिप्ट या पायथन का उपयोग करके एक वेब ऐप बना सकते हैं ताकि मशीन लर्निंग का लाभ उठाया जा सके। आर्किटेक्चर पर विचार करें: क्या मॉडल को ऐप में रहना चाहिए या क्लाउड में रहना चाहिए? यदि बाद वाला, तो आप इसे कैसे एक्सेस करेंगे? एक लागू एमएल वेब समाधान के लिए एक आर्किटेक्चरल मॉडल बनाएं। - -## असाइनमेंट - -[एक अलग मॉडल आज़माएं](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-Web-App/1-Web-App/assignment.md b/translations/hi/3-Web-App/1-Web-App/assignment.md deleted file mode 100644 index 23e3eb17..00000000 --- a/translations/hi/3-Web-App/1-Web-App/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक अलग मॉडल आज़माएं - -## निर्देश - -अब जब आपने एक प्रशिक्षित Regression मॉडल का उपयोग करके एक वेब ऐप बना लिया है, तो पहले के Regression पाठ से एक मॉडल का उपयोग करके इस वेब ऐप को फिर से बनाएं। आप शैली को बनाए रख सकते हैं या इसे कद्दू डेटा को दर्शाने के लिए अलग तरीके से डिज़ाइन कर सकते हैं। अपने मॉडल के प्रशिक्षण विधि को प्रतिबिंबित करने के लिए इनपुट्स को बदलने में सावधानी बरतें। - -## मूल्यांकन - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | वेब ऐप अपेक्षित रूप से चलता है और क्लाउड में तैनात है | वेब ऐप में खामियां हैं या अप्रत्याशित परिणाम दिखाता है | वेब ऐप सही ढंग से कार्य नहीं करता है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/3-Web-App/README.md b/translations/hi/3-Web-App/README.md deleted file mode 100644 index 501a1bac..00000000 --- a/translations/hi/3-Web-App/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# अपने ML मॉडल का उपयोग करने के लिए एक वेब ऐप बनाएं - -इस पाठ्यक्रम के इस भाग में, आपको एक लागू ML विषय से परिचित कराया जाएगा: अपने Scikit-learn मॉडल को एक फ़ाइल के रूप में कैसे सहेजें जिसे वेब एप्लिकेशन के भीतर भविष्यवाणियां करने के लिए उपयोग किया जा सकता है। एक बार जब मॉडल सहेजा जाता है, तो आप सीखेंगे कि इसे Flask में निर्मित एक वेब ऐप में कैसे उपयोग किया जाए। आप सबसे पहले कुछ डेटा का उपयोग करके एक मॉडल बनाएंगे जो यूएफओ देखे जाने के बारे में है! फिर, आप एक वेब ऐप बनाएंगे जो आपको एक संख्या में सेकंड के साथ अक्षांश और देशांतर मान दर्ज करने की अनुमति देगा ताकि यह भविष्यवाणी की जा सके कि किस देश ने यूएफओ देखने की रिपोर्ट की है। - -![UFO Parking](../../../translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.hi.jpg) - -Michael Herren द्वारा Unsplash पर फोटो - -## पाठ - -1. [एक वेब ऐप बनाएं](1-Web-App/README.md) - -## श्रेय - -"Build a Web App" को ♥️ से [Jen Looper](https://twitter.com/jenlooper) द्वारा लिखा गया था। - -♥️ क्विज़ को Rohan Raj द्वारा लिखा गया था। - -डेटासेट [Kaggle](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) द्वारा Abhinav Sagar द्वारा सुझाया गया था। - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/1-Introduction/README.md b/translations/hi/4-Classification/1-Introduction/README.md deleted file mode 100644 index 086ad8ea..00000000 --- a/translations/hi/4-Classification/1-Introduction/README.md +++ /dev/null @@ -1,302 +0,0 @@ -# वर्गीकरण का परिचय - -इन चार पाठों में, आप क्लासिक मशीन लर्निंग के एक मौलिक फोकस - _वर्गीकरण_ का अन्वेषण करेंगे। हम एशिया और भारत के सभी शानदार व्यंजनों के बारे में एक डेटासेट का उपयोग करके विभिन्न वर्गीकरण एल्गोरिदम का उपयोग करेंगे। आशा है कि आप भूखे हैं! - -![बस एक चुटकी!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.hi.png) - -> इन पाठों में पैन-एशियाई व्यंजनों का जश्न मनाएं! छवि [Jen Looper](https://twitter.com/jenlooper) द्वारा - -वर्गीकरण [सुपरवाइज्ड लर्निंग](https://wikipedia.org/wiki/Supervised_learning) का एक रूप है जो प्रतिगमन तकनीकों के साथ बहुत कुछ समानता रखता है। यदि मशीन लर्निंग का सार यह है कि यह डेटा सेट्स का उपयोग करके चीजों के मान या नामों की भविष्यवाणी करता है, तो वर्गीकरण आमतौर पर दो समूहों में आता है: _बाइनरी वर्गीकरण_ और _मल्टीक्लास वर्गीकरण_। - -[![वर्गीकरण का परिचय](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "वर्गीकरण का परिचय") - -> 🎥 ऊपर की छवि पर क्लिक करें: MIT के John Guttag वर्गीकरण का परिचय देते हैं - -याद रखें: - -- **लिनियर रिग्रेशन** ने आपको चर के बीच संबंधों की भविष्यवाणी करने और यह सटीक भविष्यवाणी करने में मदद की कि एक नया डेटा पॉइंट उस रेखा के संबंध में कहाँ गिरेगा। तो, आप भविष्यवाणी कर सकते थे कि _सितंबर और दिसंबर में कद्दू की कीमत क्या होगी_। -- **लॉजिस्टिक रिग्रेशन** ने आपको "बाइनरी श्रेणियाँ" खोजने में मदद की: इस मूल्य बिंदु पर, _क्या यह कद्दू नारंगी है या नहीं_? - -वर्गीकरण विभिन्न एल्गोरिदम का उपयोग करके यह निर्धारित करता है कि किसी डेटा पॉइंट का लेबल या वर्ग क्या हो सकता है। आइए इस व्यंजन डेटा के साथ काम करें और देखें कि क्या हम सामग्री के समूह का अवलोकन करके इसके मूल व्यंजन का निर्धारण कर सकते हैं। - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) - -> ### [यह पाठ R में भी उपलब्ध है!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) - -### परिचय - -वर्गीकरण मशीन लर्निंग शोधकर्ता और डेटा वैज्ञानिक की मौलिक गतिविधियों में से एक है। एक बाइनरी मूल्य का बुनियादी वर्गीकरण ("क्या यह ईमेल स्पैम है या नहीं?") से लेकर जटिल छवि वर्गीकरण और कंप्यूटर दृष्टि का उपयोग करके विभाजन तक, डेटा को वर्गों में क्रमबद्ध करने और उससे प्रश्न पूछने में सक्षम होना हमेशा उपयोगी होता है। - -इस प्रक्रिया को अधिक वैज्ञानिक तरीके से बताने के लिए, आपकी वर्गीकरण विधि एक भविष्यवाणी मॉडल बनाती है जो आपको इनपुट चर और आउटपुट चर के बीच संबंध को मैप करने में सक्षम बनाती है। - -![बाइनरी बनाम मल्टीक्लास वर्गीकरण](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.hi.png) - -> वर्गीकरण एल्गोरिदम को संभालने के लिए बाइनरी बनाम मल्टीक्लास समस्याएं। इन्फोग्राफिक [Jen Looper](https://twitter.com/jenlooper) द्वारा - -हमारे डेटा को साफ करने, उसे विज़ुअलाइज़ करने और हमारे एमएल कार्यों के लिए तैयार करने की प्रक्रिया शुरू करने से पहले, आइए जानें कि मशीन लर्निंग का उपयोग करके डेटा को वर्गीकृत करने के विभिन्न तरीके क्या हैं। - -[सांख्यिकी](https://wikipedia.org/wiki/Statistical_classification) से व्युत्पन्न, क्लासिक मशीन लर्निंग का उपयोग करके वर्गीकरण सुविधाओं का उपयोग करता है, जैसे कि `smoker`, `weight`, और `age` यह निर्धारित करने के लिए कि _X बीमारी के विकास की संभावना_। एक सुपरवाइज्ड लर्निंग तकनीक के रूप में, जो आपने पहले किए गए रिग्रेशन अभ्यासों के समान है, आपका डेटा लेबल किया गया है और एमएल एल्गोरिदम उन लेबलों का उपयोग डेटासेट की श्रेणियों (या 'फीचर्स') को वर्गीकृत करने और उन्हें एक समूह या परिणाम में असाइन करने के लिए करते हैं। - -✅ कल्पना करें कि आपके पास व्यंजनों के बारे में एक डेटासेट है। एक मल्टीक्लास मॉडल किस प्रकार के प्रश्नों का उत्तर दे सकता है? एक बाइनरी मॉडल किस प्रकार के प्रश्नों का उत्तर दे सकता है? यदि आप यह निर्धारित करना चाहते हैं कि कोई विशेष व्यंजन मेथी का उपयोग करता है या नहीं? या यदि आप यह देखना चाहते हैं कि, एक उपहार में स्टार ऐनीज़, आर्टिचोक, फूलगोभी, और हॉर्सरैडिश से भरी एक किराने की थैली प्राप्त करने पर, आप एक विशिष्ट भारतीय व्यंजन बना सकते हैं? - -[![पागल रहस्यमय बास्केट](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "पागल रहस्यमय बास्केट") - -> 🎥 ऊपर की छवि पर क्लिक करें। शो 'चॉप्ड' का पूरा आधार 'मिस्ट्री बास्केट' है जहां शेफ को कुछ यादृच्छिक सामग्री से कोई डिश बनानी होती है। निश्चित रूप से एक एमएल मॉडल ने मदद की होगी! - -## हैलो 'क्लासिफायर' - -इस व्यंजन डेटासेट से हम जो प्रश्न पूछना चाहते हैं वह वास्तव में एक **मल्टीक्लास प्रश्न** है, क्योंकि हमारे पास काम करने के लिए कई संभावित राष्ट्रीय व्यंजन हैं। सामग्री के एक बैच को देखते हुए, इन कई वर्गों में से कौन सा डेटा फिट होगा? - -स्किट-लर्न विभिन्न प्रकार की समस्याओं को हल करने के लिए डेटा को वर्गीकृत करने के लिए कई अलग-अलग एल्गोरिदम प्रदान करता है। अगले दो पाठों में, आप इनमें से कई एल्गोरिदम के बारे में जानेंगे। - -## अभ्यास - अपने डेटा को साफ और संतुलित करें - -इस प्रोजेक्ट को शुरू करने से पहले पहला कार्य अपने डेटा को साफ और **संतुलित** करना है ताकि बेहतर परिणाम मिल सकें। इस फ़ोल्डर की रूट में खाली _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()` will read the content of the csv file _cusines.csv_ and place it in the variable `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.hi.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()` and plot it calling `barh()` कॉल करें: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![थाई](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.hi.png) - -1. जापानी डेटा के लिए भी ऐसा ही करें: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![जापानी](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.hi.png) - -1. अब चीनी सामग्री के लिए: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![चीनी](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.hi.png) - -1. भारतीय सामग्री को प्लॉट करें: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![भारतीय](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.hi.png) - -1. अंत में, कोरियाई सामग्री को प्लॉट करें: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![कोरियाई](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.hi.png) - -1. अब, `drop()` कॉल करके उन सामान्य सामग्रियों को हटा दें जो विभिन्न व्यंजनों के बीच भ्रम पैदा करती हैं: - - हर कोई चावल, लहसुन और अदरक से प्यार करता है! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - 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) - ``` - - अपने डेटा को संतुलित करके, आपके पास इसे वर्गीकृत करने में बेहतर परिणाम होंगे। एक बाइनरी वर्गीकरण के बारे में सोचें। यदि आपके अधिकांश डेटा एक वर्ग के हैं, तो एक एमएल मॉडल उस वर्ग की अधिक बार भविष्यवाणी करेगा, सिर्फ इसलिए कि उसके लिए अधिक डेटा है। डेटा को संतुलित करना किसी भी विकृत डेटा को लेता है और इस असंतुलन को हटाने में मदद करता है। - -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()` and `transformed_df.info()` का उपयोग करके डेटा पर एक और नज़र डाल सकते हैं। भविष्य के पाठों में उपयोग के लिए इस डेटा की एक प्रति सहेजें: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisines.csv") - ``` - - यह ताज़ा CSV अब रूट डेटा फ़ोल्डर में पाई जा सकती है। - ---- - -## 🚀चुनौती - -इस पाठ्यक्रम में कई दिलचस्प डेटासेट शामिल हैं। `data` फ़ोल्डरों के माध्यम से खुदाई करें और देखें कि क्या कोई ऐसा डेटासेट है जो बाइनरी या मल्टी-क्लास वर्गीकरण के लिए उपयुक्त होगा? आप इस डेटासेट से कौन से प्रश्न पूछेंगे? - -## [पोस्ट-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) - -## समीक्षा और आत्म-अध्ययन - -SMOTE के API का अन्वेषण करें। इसे किस प्रकार के उपयोग मामलों के लिए सबसे अच्छा उपयोग किया जाता है? यह किन समस्याओं का समाधान करता है? - -## असाइनमेंट - -[वर्गीकरण विधियों का अन्वेषण करें](assignment.md) - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/1-Introduction/assignment.md b/translations/hi/4-Classification/1-Introduction/assignment.md deleted file mode 100644 index c9a30566..00000000 --- a/translations/hi/4-Classification/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# वर्गीकरण विधियों का अन्वेषण करें - -## निर्देश - -[Scikit-learn दस्तावेज़](https://scikit-learn.org/stable/supervised_learning.html) में आपको डेटा को वर्गीकृत करने के कई तरीके मिलेंगे। इन दस्तावेज़ों में थोड़ा सा खोज करें: आपका लक्ष्य वर्गीकरण विधियों को खोजना और इस पाठ्यक्रम में एक डेटासेट, एक प्रश्न जिसे आप इससे पूछ सकते हैं, और एक वर्गीकरण तकनीक को मिलाना है। एक स्प्रेडशीट या तालिका एक .doc फ़ाइल में बनाएं और समझाएं कि डेटासेट वर्गीकरण एल्गोरिदम के साथ कैसे काम करेगा। - -## मूल्यांकन - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -|--------|-----------------------------------------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------| -| | एक दस्तावेज़ प्रस्तुत किया गया है जिसमें 5 एल्गोरिदम के साथ एक वर्गीकरण तकनीक का अवलोकन है। अवलोकन अच्छी तरह से समझाया गया है और विस्तृत है। | एक दस्तावेज़ प्रस्तुत किया गया है जिसमें 3 एल्गोरिदम के साथ एक वर्गीकरण तकनीक का अवलोकन है। अवलोकन अच्छी तरह से समझाया गया है और विस्तृत है। | एक दस्तावेज़ प्रस्तुत किया गया है जिसमें तीन से कम एल्गोरिदम के साथ एक वर्गीकरण तकनीक का अवलोकन है और अवलोकन न तो अच्छी तरह से समझाया गया है और न ही विस्तृत है। | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/1-Introduction/solution/Julia/README.md b/translations/hi/4-Classification/1-Introduction/solution/Julia/README.md deleted file mode 100644 index 9acee712..00000000 --- a/translations/hi/4-Classification/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/2-Classifiers-1/README.md b/translations/hi/4-Classification/2-Classifiers-1/README.md deleted file mode 100644 index b4433125..00000000 --- a/translations/hi/4-Classification/2-Classifiers-1/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# व्यंजन वर्गीकरणकर्ता 1 - -इस पाठ में, आप पिछले पाठ से सहेजे गए संतुलित और साफ डेटा से भरे डेटासेट का उपयोग करेंगे, जो सभी व्यंजनों के बारे में है। - -आप इस डेटासेट का उपयोग विभिन्न वर्गीकरणकर्ताओं के साथ करेंगे ताकि _सामग्री के एक समूह के आधार पर किसी दिए गए राष्ट्रीय व्यंजन की भविष्यवाणी की जा सके_। ऐसा करते समय, आप उन तरीकों के बारे में अधिक जानेंगे जिनसे एल्गोरिदम को वर्गीकरण कार्यों के लिए उपयोग किया जा सकता है। - -## [पाठ पूर्व क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) -# तैयारी - -मान लेते हैं कि आपने [पाठ 1](../1-Introduction/README.md) पूरा कर लिया है, सुनिश्चित करें कि इन चार पाठों के लिए रूट `/data` फ़ोल्डर में एक _cleaned_cuisines.csv_ फ़ाइल मौजूद है। - -## अभ्यास - एक राष्ट्रीय व्यंजन की भविष्यवाणी करें - -1. इस पाठ के _notebook.ipynb_ फ़ोल्डर में काम करते हुए, उस फ़ाइल को पांडस लाइब्रेरी के साथ आयात करें: - - ```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` column and the `cuisine` column, calling `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 | ... | - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित AI अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या गलतियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/2-Classifiers-1/assignment.md b/translations/hi/4-Classification/2-Classifiers-1/assignment.md deleted file mode 100644 index 5ae52e09..00000000 --- a/translations/hi/4-Classification/2-Classifiers-1/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# सॉल्वर्स का अध्ययन करें -## निर्देश - -इस पाठ में आपने विभिन्न सॉल्वर्स के बारे में सीखा जो एल्गोरिदम को मशीन लर्निंग प्रक्रिया के साथ जोड़ते हैं ताकि एक सटीक मॉडल बनाया जा सके। पाठ में सूचीबद्ध सॉल्वर्स का अवलोकन करें और उनमें से दो का चयन करें। अपने शब्दों में, इन दो सॉल्वर्स की तुलना और विरोधाभास करें। वे किस प्रकार की समस्या का समाधान करते हैं? वे विभिन्न डेटा संरचनाओं के साथ कैसे काम करते हैं? आप एक को दूसरे के ऊपर क्यों चुनेंगे? -## मूल्यांकन मानदंड - -| मानदंड | उत्कृष्टता | पर्याप्तता | सुधार की आवश्यकता | -| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | एक .doc फ़ाइल प्रस्तुत की गई है जिसमें प्रत्येक सॉल्वर पर विचारशील तुलना के साथ दो पैराग्राफ हैं। | एक .doc फ़ाइल प्रस्तुत की गई है जिसमें केवल एक पैराग्राफ है | असाइनमेंट अधूरा है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/hi/4-Classification/2-Classifiers-1/solution/Julia/README.md deleted file mode 100644 index 1f1876a2..00000000 --- a/translations/hi/4-Classification/2-Classifiers-1/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित AI अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/3-Classifiers-2/README.md b/translations/hi/4-Classification/3-Classifiers-2/README.md deleted file mode 100644 index 5c815d65..00000000 --- a/translations/hi/4-Classification/3-Classifiers-2/README.md +++ /dev/null @@ -1,238 +0,0 @@ -# क्यूज़ीन वर्गीकरणकर्ता 2 - -इस दूसरे वर्गीकरण पाठ में, आप संख्यात्मक डेटा को वर्गीकृत करने के और भी तरीके जानेंगे। आप यह भी सीखेंगे कि एक वर्गीकरणकर्ता को दूसरे पर चुनने के परिणाम क्या हो सकते हैं। - -## [पाठ-पूर्व क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) - -### पूर्वापेक्षा - -हम मानते हैं कि आपने पिछले पाठों को पूरा कर लिया है और आपके पास आपके `data` फ़ोल्डर में _cleaned_cuisines.csv_ नामक एक साफ़ किया हुआ डेटासेट है, जो इस 4-पाठ वाले फ़ोल्डर की जड़ में है। - -### तैयारी - -हमने आपके _notebook.ipynb_ फ़ाइल को साफ़ किए गए डेटासेट के साथ लोड कर दिया है और इसे X और y डेटा फ्रेम में विभाजित कर दिया है, जो मॉडल निर्माण प्रक्रिया के लिए तैयार हैं। - -## एक वर्गीकरण मानचित्र - -पहले, आपने माइक्रोसॉफ्ट के चीट शीट का उपयोग करके डेटा को वर्गीकृत करने के विभिन्न विकल्पों के बारे में सीखा था। Scikit-learn एक समान, लेकिन अधिक विस्तृत चीट शीट प्रदान करता है जो आपके वर्गीकरणकर्ताओं (वर्गीकरणकर्ताओं के लिए एक और शब्द) को और अधिक संकीर्ण करने में मदद कर सकता है: - -![Scikit-learn से ML मानचित्र](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.hi.png) -> टिप: [इस मानचित्र को ऑनलाइन देखें](https://scikit-learn.org/stable/tutorial/machine_learning_map/) और दस्तावेज़ पढ़ने के लिए रास्ते पर क्लिक करें। - -### योजना - -यह मानचित्र आपके डेटा की स्पष्ट समझ होने के बाद बहुत सहायक होता है, क्योंकि आप इसके रास्तों पर 'चल' सकते हैं और निर्णय ले सकते हैं: - -- हमारे पास >50 नमूने हैं -- हम एक श्रेणी की भविष्यवाणी करना चाहते हैं -- हमारे पास लेबल किया हुआ डेटा है -- हमारे पास 100K से कम नमूने हैं -- ✨ हम एक Linear SVC चुन सकते हैं -- यदि यह काम नहीं करता है, क्योंकि हमारे पास संख्यात्मक डेटा है - - हम ✨ KNeighbors Classifier आज़मा सकते हैं - - यदि यह काम नहीं करता है, तो ✨ SVC और ✨ Ensemble Classifiers आज़माएं - -यह अनुसरण करने के लिए एक बहुत ही सहायक मार्ग है। - -## अभ्यास - डेटा विभाजित करें - -इस मार्ग का अनुसरण करते हुए, हमें कुछ पुस्तकालयों को आयात करके शुरू करना चाहिए। - -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) - ``` - -## Linear SVC वर्गीकरणकर्ता - -सपोर्ट-वेेक्टर क्लस्टरिंग (SVC) सपोर्ट-वेेक्टर मशीनों के परिवार का एक हिस्सा है (इनके बारे में नीचे और जानें)। इस विधि में, आप लेबल्स को क्लस्टर करने के लिए एक 'कर्नेल' चुन सकते हैं। 'C' पैरामीटर 'रेगुलराइजेशन' को संदर्भित करता है जो पैरामीटरों के प्रभाव को नियंत्रित करता है। कर्नेल [कई](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) में से एक हो सकता है; यहाँ हम इसे 'linear' पर सेट करते हैं ताकि हम linear SVC का लाभ उठा सकें। Probability डिफ़ॉल्ट रूप से 'false' है; यहाँ हम इसे 'true' पर सेट करते हैं ताकि संभाव्यता अनुमान प्राप्त कर सकें। हम रैंडम स्टेट को '0' पर सेट करते हैं ताकि डेटा को शफल किया जा सके और संभाव्यताओं को प्राप्त किया जा सके। - -### अभ्यास - एक linear SVC लागू करें - -क्लासिफ़ायरों की एक array बनाकर शुरू करें। हम परीक्षण करते समय इस array में क्रमशः जोड़ते जाएंगे। - -1. एक Linear SVC के साथ शुरू करें: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. अपने मॉडल को Linear 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-Neighbors वर्गीकरणकर्ता - -K-Neighbors "पड़ोसियों" परिवार का हिस्सा है, जिसका उपयोग पर्यवेक्षित और बिना पर्यवेक्षण दोनों प्रकार के शिक्षण के लिए किया जा सकता है। इस विधि में, एक पूर्वनिर्धारित संख्या के बिंदु बनाए जाते हैं और डेटा को इन बिंदुओं के चारों ओर एकत्र किया जाता है ताकि डेटा के लिए सामान्यीकृत लेबल की भविष्यवाणी की जा सके। - -### अभ्यास - K-Neighbors वर्गीकरणकर्ता लागू करें - -पिछला वर्गीकरणकर्ता अच्छा था और डेटा के साथ अच्छी तरह से काम किया, लेकिन शायद हम बेहतर सटीकता प्राप्त कर सकते हैं। एक K-Neighbors वर्गीकरणकर्ता आज़माएं। - -1. अपने क्लासिफ़ायर array में एक लाइन जोड़ें (Linear 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-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) के बारे में जानें - -## सपोर्ट वेक्टर क्लासिफायर - -सपोर्ट-वेेक्टर क्लासिफायर [सपोर्ट-वेेक्टर मशीन](https://wikipedia.org/wiki/Support-vector_machine) परिवार का हिस्सा हैं, जिनका उपयोग वर्गीकरण और प्रतिगमन कार्यों के लिए किया जाता है। SVMs "प्रशिक्षण उदाहरणों को स्थान में बिंदुओं पर मैप करते हैं" ताकि दो श्रेणियों के बीच की दूरी को अधिकतम किया जा सके। इसके बाद का डेटा इस स्थान में मैप किया जाता है ताकि उनकी श्रेणी की भविष्यवाणी की जा सके। - -### अभ्यास - सपोर्ट वेक्टर क्लासिफायर लागू करें - -आइए सपोर्ट वेक्टर क्लासिफायर के साथ थोड़ी बेहतर सटीकता प्राप्त करने का प्रयास करें। - -1. K-Neighbors आइटम के बाद एक कॉमा जोड़ें, और फिर इस लाइन को जोड़ें: - - ```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) के बारे में जानें - -## एन्सेम्बल क्लासिफायर - -आइए इस रास्ते के अंत तक जाएं, भले ही पिछला परीक्षण काफी अच्छा था। आइए कुछ 'एन्सेम्बल क्लासिफायर', विशेष रूप से रैंडम फॉरेस्ट और AdaBoost आज़माएं: - -```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) के बारे में जानें - -इस मशीन लर्निंग विधि में "कई बेस एस्टिमेटर्स की भविष्यवाणियों को मिलाया जाता है" ताकि मॉडल की गुणवत्ता में सुधार हो सके। हमारे उदाहरण में, हमने रैंडम ट्री और AdaBoost का उपयोग किया। - -- [रैंडम फॉरेस्ट](https://scikit-learn.org/stable/modules/ensemble.html#forest), एक एवरेजिंग विधि, एक 'फॉरेस्ट' बनाता है जिसमें 'डिसीजन ट्री' होते हैं, जो ओवरफिटिंग से बचने के लिए रैंडमनेस से भरे होते हैं। n_estimators पैरामीटर पेड़ों की संख्या पर सेट होता है। - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) एक क्लासिफायर को डेटासेट पर फिट करता है और फिर उसी डेटासेट पर उस क्लासिफायर की प्रतियों को फिट करता है। यह गलत तरीके से वर्गीकृत आइटमों के वज़न पर ध्यान केंद्रित करता है और अगले क्लासिफायर के लिए फिट को समायोजित करता है ताकि उसे सही किया जा सके। - ---- - -## 🚀चुनौती - -इनमें से प्रत्येक तकनीक में बहुत सारे पैरामीटर होते हैं जिन्हें आप समायोजित कर सकते हैं। प्रत्येक के डिफ़ॉल्ट पैरामीटरों के बारे में शोध करें और सोचें कि इन पैरामीटरों को समायोजित करने से मॉडल की गुणवत्ता के लिए क्या मतलब होगा। - -## [पाठ-उत्तर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) - -## समीक्षा और स्व-अध्ययन - -इन पाठों में बहुत सारा शब्दजाल है, इसलिए एक मिनट लें और [इस सूची](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) को देखें, जिसमें उपयोगी शब्दावली है! - -## असाइनमेंट - -[पैरामीटर खेल](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/3-Classifiers-2/assignment.md b/translations/hi/4-Classification/3-Classifiers-2/assignment.md deleted file mode 100644 index f5b6b317..00000000 --- a/translations/hi/4-Classification/3-Classifiers-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# पैरामीटर प्ले - -## निर्देश - -जब आप इन क्लासिफायर के साथ काम करते हैं तो कई पैरामीटर डिफ़ॉल्ट रूप से सेट होते हैं। VS Code में Intellisense आपकी मदद कर सकता है उन्हें गहराई से समझने में। इस पाठ में से किसी एक ML Classification Technique को अपनाएं और विभिन्न पैरामीटर मानों को बदलते हुए मॉडल्स को फिर से प्रशिक्षित करें। एक नोटबुक बनाएं जिसमें बताया जाए कि कुछ बदलाव मॉडल की गुणवत्ता को कैसे सुधारते हैं जबकि अन्य इसे खराब करते हैं। अपने उत्तर में विस्तृत रहें। - -## मूल्यांकन मापदंड - -| मापदंड | उत्कृष्टता | पर्याप्तता | सुधार की आवश्यकता | -| ------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| | एक नोटबुक प्रस्तुत की गई है जिसमें एक क्लासिफायर पूरी तरह से निर्मित है और उसके पैरामीटर समायोजित किए गए हैं और टेक्स्टबॉक्स में बदलावों की व्याख्या की गई है | एक नोटबुक आंशिक रूप से प्रस्तुत की गई है या खराब तरीके से समझाई गई है | एक नोटबुक बग्गी या दोषपूर्ण है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/hi/4-Classification/3-Classifiers-2/solution/Julia/README.md deleted file mode 100644 index b1eca0f2..00000000 --- a/translations/hi/4-Classification/3-Classifiers-2/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या गलतियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/4-Applied/README.md b/translations/hi/4-Classification/4-Applied/README.md deleted file mode 100644 index 87dd7b3e..00000000 --- a/translations/hi/4-Classification/4-Applied/README.md +++ /dev/null @@ -1,317 +0,0 @@ -# एक व्यंजन सिफारिश वेब ऐप बनाएं - -इस पाठ में, आप कुछ तकनीकों का उपयोग करके एक वर्गीकरण मॉडल बनाएंगे, जिन्हें आपने पिछले पाठों में सीखा है और इस श्रृंखला में उपयोग किए गए स्वादिष्ट व्यंजन डेटासेट के साथ। इसके अतिरिक्त, आप एक छोटा वेब ऐप बनाएंगे जो एक सहेजे गए मॉडल का उपयोग करेगा, Onnx के वेब रनटाइम का लाभ उठाते हुए। - -मशीन लर्निंग का सबसे उपयोगी व्यावहारिक उपयोग सिफारिश प्रणाली बनाना है, और आप आज उस दिशा में पहला कदम उठा सकते हैं! - -[![इस वेब ऐप को प्रस्तुत करते हुए](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 ऊपर की छवि पर क्लिक करें एक वीडियो के लिए: Jen Looper वर्गीकृत व्यंजन डेटा का उपयोग करके एक वेब ऐप बनाती हैं - -## [पाठ पूर्व क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) - -इस पाठ में आप सीखेंगे: - -- एक मॉडल कैसे बनाएं और इसे एक Onnx मॉडल के रूप में सहेजें -- Netron का उपयोग करके मॉडल का निरीक्षण कैसे करें -- अपने मॉडल को एक वेब ऐप में अनुमान के लिए कैसे उपयोग करें - -## अपना मॉडल बनाएं - -लागू एमएल सिस्टम का निर्माण इन तकनीकों का उपयोग करके आपके व्यावसायिक सिस्टम के लिए महत्वपूर्ण है। आप Onnx का उपयोग करके अपने वेब एप्लिकेशन में मॉडल का उपयोग कर सकते हैं (और इस प्रकार आवश्यकता पड़ने पर उन्हें ऑफ़लाइन संदर्भ में उपयोग कर सकते हैं)। - -एक [पिछले पाठ](../../3-Web-App/1-Web-App/README.md) में, आपने यूएफओ देखे जाने के बारे में एक प्रतिगमन मॉडल बनाया, इसे "पिकल्ड" किया, और इसे एक 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` refers to class information being included in the model. Reduce your model's size by setting `nocl` to 'True'. - -Running the entire notebook will now build an Onnx model and save it to this folder. - -## View your model - -Onnx models are not very visible in Visual Studio code, but there's a very good free software that many researchers use to visualize the model to ensure that it is properly built. Download [Netron](https://github.com/lutzroeder/Netron) and open your model.onnx file. You can see your simple model visualized, with its 380 inputs and classifier listed: - -![Netron visual](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.hi.png) - -Netron is a helpful tool to view your models. - -Now you are ready to use this neat model in a web app. Let's build an app that will come in handy when you look in your refrigerator and try to figure out which combination of your leftover ingredients you can use to cook a given cuisine, as determined by your model. - -## Build a recommender web application - -You can use your model directly in a web app. This architecture also allows you to run it locally and even offline if needed. Start by creating an `index.html` file in the same folder where you stored your `model.onnx` फ़ाइल। - -1. इस फ़ाइल _index.html_ में, निम्नलिखित मार्कअप जोड़ें: - - ```html - - -
                                                            - Cuisine Matcher -
                                                            - - ... - - - ``` - -1. अब, `body` टैग के भीतर काम करते हुए, कुछ अवयवों को दर्शाने वाले चेकबॉक्स की एक सूची दिखाने के लिए थोड़ा मार्कअप जोड़ें: - - ```html -

                                                            Check your refrigerator. What can you create?

                                                            -
                                                            -
                                                            - - -
                                                            - -
                                                            - - -
                                                            - -
                                                            - - -
                                                            - -
                                                            - - -
                                                            - -
                                                            - - -
                                                            - -
                                                            - - -
                                                            - -
                                                            - - -
                                                            -
                                                            -
                                                            - -
                                                            - ``` - - ध्यान दें कि प्रत्येक चेकबॉक्स को एक मान दिया गया है। यह उस इंडेक्स को दर्शाता है जहां अवयव डेटासेट के अनुसार पाए जाते हैं। उदाहरण के लिए, इस वर्णमाला सूची में, Apple पांचवें स्तंभ पर है, इसलिए इसका मान '4' है क्योंकि हम 0 से गिनती शुरू करते हैं। आप [अवयव स्प्रेडशीट](../../../../4-Classification/data/ingredient_indexes.csv) को परामर्श कर सकते हैं ताकि किसी दिए गए अवयव का इंडेक्स खोजा जा सके। - - _index.html_ फ़ाइल में अपने काम को जारी रखते हुए, एक स्क्रिप्ट ब्लॉक जोड़ें जहां अंतिम समापन `` के बाद मॉडल को कॉल किया जाता है। - -1. सबसे पहले, [Onnx Runtime](https://www.onnxruntime.ai/) को आयात करें: - - ```html - - ``` - - > Onnx Runtime का उपयोग आपके Onnx मॉडलों को हार्डवेयर प्लेटफार्मों की एक विस्तृत श्रृंखला में चलाने के लिए किया जाता है, जिसमें अनुकूलन और उपयोग के लिए एक एपीआई शामिल है। - -1. एक बार Runtime सेट हो जाने के बाद, आप इसे कॉल कर सकते हैं: - - ```html - - ``` - -इस कोड में, कई चीजें हो रही हैं: - -1. आपने 380 संभावित मानों (1 या 0) का एक सरणी बनाया है जिसे सेट किया जाएगा और मॉडल को अनुमान के लिए भेजा जाएगा, इस पर निर्भर करता है कि कोई अवयव चेकबॉक्स चेक किया गया है या नहीं। -2. आपने चेकबॉक्स की एक सरणी बनाई और यह निर्धारित करने का एक तरीका कि क्या वे `init` function that is called when the application starts. When a checkbox is checked, the `ingredients` array is altered to reflect the chosen ingredient. -3. You created a `testCheckboxes` function that checks whether any checkbox was checked. -4. You use `startInference` function when the button is pressed and, if any checkbox is checked, you start inference. -5. The inference routine includes: - 1. Setting up an asynchronous load of the model - 2. Creating a Tensor structure to send to the model - 3. Creating 'feeds' that reflects the `float_input` input that you created when training your model (you can use Netron to verify that name) - 4. Sending these 'feeds' to the model and waiting for a response - -## Test your application - -Open a terminal session in Visual Studio Code in the folder where your index.html file resides. Ensure that you have [http-server](https://www.npmjs.com/package/http-server) installed globally, and type `http-server` पर संकेत पर चेक किए गए थे। एक लोकलहोस्ट खुल जाना चाहिए और आप अपने वेब ऐप को देख सकते हैं। विभिन्न अवयवों के आधार पर कौन सा व्यंजन अनुशंसित है, इसकी जांच करें: - -![अवयव वेब ऐप](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.hi.png) - -बधाई हो, आपने कुछ फ़ील्ड के साथ एक 'सिफारिश' वेब ऐप बनाया है। इस सिस्टम को बनाने के लिए कुछ समय निकालें! -## 🚀चुनौती - -आपका वेब ऐप बहुत न्यूनतम है, इसलिए [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) डेटा से अवयवों और उनके इंडेक्स का उपयोग करके इसे बनाना जारी रखें। कौन से स्वाद संयोजन एक दिए गए राष्ट्रीय व्यंजन को बनाने के लिए काम करते हैं? - -## [पाठ के बाद क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) - -## समीक्षा और स्व-अध्ययन - -जबकि इस पाठ ने खाद्य अवयवों के लिए एक सिफारिश प्रणाली बनाने की उपयोगिता को छुआ, एमएल अनुप्रयोगों का यह क्षेत्र उदाहरणों में बहुत समृद्ध है। पढ़ें कि इन प्रणालियों को कैसे बनाया जाता है: - -- 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) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया अवगत रहें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/4-Applied/assignment.md b/translations/hi/4-Classification/4-Applied/assignment.md deleted file mode 100644 index 30907c53..00000000 --- a/translations/hi/4-Classification/4-Applied/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक सिफारिशकर्ता बनाएं - -## निर्देश - -इस पाठ में अपने अभ्यासों को देखते हुए, अब आप Onnx Runtime और एक परिवर्तित Onnx मॉडल का उपयोग करके जावास्क्रिप्ट-आधारित वेब ऐप बनाना जानते हैं। इन पाठों से या अन्य स्रोतों से डेटा का उपयोग करके एक नया सिफारिशकर्ता बनाने के साथ प्रयोग करें (कृपया श्रेय दें)। आप विभिन्न व्यक्तित्व विशेषताओं के आधार पर एक पालतू सिफारिशकर्ता बना सकते हैं, या किसी व्यक्ति के मूड के आधार पर संगीत शैली सिफारिशकर्ता बना सकते हैं। रचनात्मक बनें! - -## मूल्यांकन मानदंड - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | एक वेब ऐप और नोटबुक प्रस्तुत किए गए हैं, दोनों अच्छी तरह से प्रलेखित और चल रहे हैं | इनमें से एक गायब है या त्रुटिपूर्ण है | दोनों या तो गायब हैं या त्रुटिपूर्ण हैं | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/4-Classification/README.md b/translations/hi/4-Classification/README.md deleted file mode 100644 index 9474860c..00000000 --- a/translations/hi/4-Classification/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# वर्गीकरण के साथ शुरुआत करना - -## क्षेत्रीय विषय: स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 - -एशिया और भारत में, खाद्य परंपराएँ अत्यधिक विविध और बहुत स्वादिष्ट हैं! चलिए क्षेत्रीय व्यंजनों के बारे में डेटा देखते हैं और उनके अवयवों को समझने की कोशिश करते हैं। - -![थाई फूड विक्रेता](../../../translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.hi.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) से लिया गया था। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/1-Visualize/README.md b/translations/hi/5-Clustering/1-Visualize/README.md deleted file mode 100644 index 8bd9a461..00000000 --- a/translations/hi/5-Clustering/1-Visualize/README.md +++ /dev/null @@ -1,140 +0,0 @@ -# क्लस्टरिंग का परिचय - -क्लस्टरिंग एक प्रकार का [अनसुपरवाइज्ड लर्निंग](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") - -> 🎥 ऊपर की छवि पर क्लिक करें वीडियो के लिए। क्लस्टरिंग के साथ मशीन लर्निंग का अध्ययन करते समय, कुछ नाइजीरियाई डांस हॉल ट्रैक्स का आनंद लें - यह PSquare का 2014 का एक उच्च रेटेड गीत है। -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) -### परिचय - -[क्लस्टरिंग](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) को एक वक्र के साथ मापा जाता है। यदि आपका डेटा, विज़ुअलाइज़ किया गया, एक प्लेन पर मौजूद नहीं लगता है, तो आपको इसे संभालने के लिए एक विशेष एल्गोरिदम का उपयोग करने की आवश्यकता हो सकती है। -> -![Flat vs Nonflat Geometry Infographic](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.hi.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 की एग्लोमरेटिव क्लस्टरिंग हाइरार्किकल है। - - ![Hierarchical clustering Infographic](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.hi.png) - > इंफोग्राफिक द्वारा [दसानी मदीपल्ली](https://twitter.com/dasani_decoded) - -- **सेंट्रोइड क्लस्टरिंग**। यह लोकप्रिय एल्गोरिदम 'k' की पसंद की आवश्यकता होती है, या क्लस्टर की संख्या को बनाने के लिए, जिसके बाद एल्गोरिदम क्लस्टर के केंद्र बिंदु को निर्धारित करता है और उस बिंदु के चारों ओर डेटा एकत्र करता है। [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) सेंट्रोइड क्लस्टरिंग का एक लोकप्रिय संस्करण है। केंद्र को निकटतम औसत द्वारा निर्धारित किया जाता है, इसलिए नाम। क्लस्टर से वर्ग दूरी को कम किया जाता है। - - ![Centroid clustering Infographic](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.hi.png) - > इंफोग्राफिक द्वारा [दसानी मदीपल्ली](https://twitter.com/dasani_decoded) - -- **वितरण-आधारित क्लस्टरिंग**। सांख्यिकीय मॉडलिंग पर आधारित, वितरण-आधारित क्लस्टरिंग एक डेटा बिंदु के क्लस्टर से संबंधित होने की संभावना को निर्धारित करने और तदनुसार असाइन करने पर केंद्रित होती है। Gaussian मिश्रण विधियाँ इस प्रकार से संबंधित हैं। - -- **घनत्व-आधारित क्लस्टरिंग**। डेटा बिंदुओं को उनके घनत्व, या उनके आसपास के समूहों के आधार पर क्लस्टर में असाइन किया जाता है। समूह से दूर डेटा बिंदुओं को आउटलेर्स या शोर माना जाता है। 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() - ``` - - डेटा की पहली कुछ पंक्तियों की जांच करें: - - | | नाम | एल्बम | कलाकार | कलाकार का शीर्ष शैली | रिलीज़ की तारीख | लंबाई | लोकप्रियता | नृत्ययोग्यता | ध्वनिकता | ऊर्जा | वाद्य यंत्र | जीवंतता | जोर | बोलना | गति | समय हस्ताक्षर | - | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | - | 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 -## [व्याख्यान के बाद का क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) - -## समीक्षा और आत्म-अध्ययन - -जैसा कि हमने सीखा है, क्लस्टरिंग एल्गोरिदम लागू करने से पहले अपने डेटा सेट की प्रकृति को समझना एक अच्छा विचार है। इस विषय पर अधिक पढ़ें [यहाँ](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) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/1-Visualize/assignment.md b/translations/hi/5-Clustering/1-Visualize/assignment.md deleted file mode 100644 index 22f0736a..00000000 --- a/translations/hi/5-Clustering/1-Visualize/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# क्लस्टरिंग के लिए अन्य विज़ुअलाइज़ेशन पर शोध - -## निर्देश - -इस पाठ में, आपने अपने डेटा को क्लस्टरिंग के लिए तैयार करने के लिए कुछ विज़ुअलाइज़ेशन तकनीकों के साथ काम किया है। विशेष रूप से, स्कैटरप्लॉट्स वस्तुओं के समूहों को खोजने के लिए उपयोगी होते हैं। विभिन्न तरीकों और विभिन्न लाइब्रेरियों का उपयोग करके स्कैटरप्लॉट्स बनाने पर शोध करें और अपने कार्य को एक नोटबुक में दस्तावेज़ करें। आप इस पाठ के डेटा, अन्य पाठों के डेटा, या स्वयं के स्रोत से डेटा का उपयोग कर सकते हैं (कृपया इसके स्रोत का अपनी नोटबुक में उल्लेख करें)। स्कैटरप्लॉट्स का उपयोग करके कुछ डेटा प्लॉट करें और बताएं कि आपने क्या खोजा। - -## मूल्यांकन - -| मापदंड | उत्कृष्टता | पर्याप्तता | सुधार की आवश्यकता | -| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | -| | पांच अच्छी तरह से दस्तावेज़ किए गए स्कैटरप्लॉट्स के साथ एक नोटबुक प्रस्तुत की गई है | पांच से कम स्कैटरप्लॉट्स के साथ एक नोटबुक प्रस्तुत की गई है और यह कम अच्छी तरह से दस्तावेज़ है | एक अधूरी नोटबुक प्रस्तुत की गई है | - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/hi/5-Clustering/1-Visualize/solution/Julia/README.md deleted file mode 100644 index 087d1758..00000000 --- a/translations/hi/5-Clustering/1-Visualize/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/2-K-Means/README.md b/translations/hi/5-Clustering/2-K-Means/README.md deleted file mode 100644 index 831472ec..00000000 --- a/translations/hi/5-Clustering/2-K-Means/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# K-Means क्लस्टरिंग - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) - -इस पाठ में, आप सीखेंगे कि Scikit-learn और पहले से आयात किए गए नाइजीरियाई संगीत डेटा सेट का उपयोग करके क्लस्टर कैसे बनाएं। हम क्लस्टरिंग के लिए K-Means की मूल बातें कवर करेंगे। ध्यान रखें कि, जैसा कि आपने पिछले पाठ में सीखा था, क्लस्टरों के साथ काम करने के कई तरीके हैं और आपके डेटा पर निर्भर करता है कि आप कौन सा तरीका उपयोग करते हैं। हम K-Means को आजमाएंगे क्योंकि यह सबसे सामान्य क्लस्टरिंग तकनीक है। चलिए शुरू करते हैं! - -आप जिन शर्तों के बारे में जानेंगे: - -- सिल्हूट स्कोरिंग -- एल्बो विधि -- जड़ता -- वैरिएंस - -## परिचय - -[K-Means क्लस्टरिंग](https://wikipedia.org/wiki/K-means_clustering) सिग्नल प्रोसेसिंग के क्षेत्र से व्युत्पन्न एक विधि है। इसका उपयोग डेटा समूहों को 'k' क्लस्टरों में विभाजित और विभाजन करने के लिए किया जाता है। प्रत्येक अवलोकन एक दिए गए डेटा बिंदु को उसके निकटतम 'मीन', या एक क्लस्टर के केंद्र बिंदु के निकटतम समूह में रखने का कार्य करता है। - -क्लस्टरों को [वोरोनोई आरेख](https://wikipedia.org/wiki/Voronoi_diagram) के रूप में देखा जा सकता है, जिसमें एक बिंदु (या 'बीज') और उसका संबंधित क्षेत्र शामिल होता है। - -![वोरोनोई आरेख](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.hi.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) - ``` - - यह डेटा थोड़ा शोरयुक्त है: प्रत्येक कॉलम को एक बॉक्सप्लॉट के रूप में देखकर, आप बाहरी मान देख सकते हैं। - - ![बाहरी मान](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.hi.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) - - # Predict the cluster for each data point - - 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 है! - - ![एल्बो विधि](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.hi.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))) - ``` - - इस मॉडल की सटीकता बहुत अच्छी नहीं है, और क्लस्टरों का आकार आपको एक संकेत देता है कि क्यों। - - ![क्लस्टर](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.hi.png) - - यह डेटा बहुत असंतुलित है, बहुत कम सहसंबद्ध है और क्लस्टर करने के लिए कॉलम मानों के बीच बहुत अधिक वैरिएंस है। वास्तव में, जो क्लस्टर बनते हैं, वे शायद भारी रूप से ऊपर परिभाषित की गई तीन शैली श्रेणियों से प्रभावित या तिरछे होते हैं। यह एक सीखने की प्रक्रिया थी! - - Scikit-learn के दस्तावेज़ों में, आप देख सकते हैं कि इस तरह के मॉडल, जिसमें क्लस्टर बहुत अच्छी तरह से चिह्नित नहीं होते हैं, में 'वैरिएंस' की समस्या होती है: - - ![समस्या मॉडल](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.hi.png) - > इन्फोग्राफिक स्किकिट-लर्न से - -## वैरिएंस - -वैरिएंस को "मीन से वर्गीकृत अंतर का औसत" के रूप में परिभाषित किया गया है [(स्रोत)](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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) - -## समीक्षा और स्व-अध्ययन - -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) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/2-K-Means/assignment.md b/translations/hi/5-Clustering/2-K-Means/assignment.md deleted file mode 100644 index 48831b99..00000000 --- a/translations/hi/5-Clustering/2-K-Means/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# विभिन्न क्लस्टरिंग विधियों को आजमाएं - -## निर्देश - -इस पाठ में आपने K-Means क्लस्टरिंग के बारे में सीखा। कभी-कभी K-Means आपके डेटा के लिए उपयुक्त नहीं होता है। इन पाठों से या कहीं और से डेटा का उपयोग करके एक नोटबुक बनाएं (अपने स्रोत को श्रेय दें) और K-Means का उपयोग किए बिना एक अलग क्लस्टरिंग विधि दिखाएं। आपने क्या सीखा? - -## मूल्यांकन - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | एक अच्छी तरह से प्रलेखित क्लस्टरिंग मॉडल के साथ एक नोटबुक प्रस्तुत की जाती है | बिना अच्छे प्रलेखन और/या अधूरी नोटबुक प्रस्तुत की जाती है | अधूरा काम प्रस्तुत किया जाता है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/hi/5-Clustering/2-K-Means/solution/Julia/README.md deleted file mode 100644 index a0f39397..00000000 --- a/translations/hi/5-Clustering/2-K-Means/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/5-Clustering/README.md b/translations/hi/5-Clustering/README.md deleted file mode 100644 index f09a1c12..00000000 --- a/translations/hi/5-Clustering/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# मशीन लर्निंग के लिए क्लस्टरिंग मॉडल - -क्लस्टरिंग एक मशीन लर्निंग कार्य है जिसमें यह उन वस्तुओं को खोजने का प्रयास करता है जो एक-दूसरे से मिलती-जुलती हैं और इन्हें समूहों में विभाजित करता है जिन्हें क्लस्टर कहा जाता है। क्लस्टरिंग को मशीन लर्निंग के अन्य दृष्टिकोणों से जो चीज अलग करती है, वह यह है कि चीजें स्वचालित रूप से होती हैं, वास्तव में, यह कहना उचित है कि यह सुपरवाइज्ड लर्निंग के विपरीत है। - -## क्षेत्रीय विषय: नाइजीरियाई दर्शकों के संगीत स्वाद के लिए क्लस्टरिंग मॉडल 🎧 - -नाइजीरिया के विविध दर्शकों के विविध संगीत स्वाद हैं। स्पॉटिफाई से स्क्रैप किए गए डेटा का उपयोग करते हुए (इस [लेख](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421) से प्रेरित होकर), आइए नाइजीरिया में कुछ लोकप्रिय संगीत देखें। इस डेटासेट में विभिन्न गीतों के 'डांसबिलिटी' स्कोर, 'एकॉस्टिकनेस', लाउडनेस, 'स्पीचनेस', लोकप्रियता और ऊर्जा के बारे में डेटा शामिल है। इस डेटा में पैटर्न की खोज करना दिलचस्प होगा! - -![एक टर्नटेबल](../../../translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.hi.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. [K-Means क्लस्टरिंग](2-K-Means/README.md) - -## क्रेडिट्स - -ये पाठ 🎶 के साथ [Jen Looper](https://www.twitter.com/jenlooper) द्वारा लिखे गए थे और [Rishit Dagli](https://rishit_dagli) और [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) द्वारा सहायक समीक्षाओं के साथ। - -[Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) डेटासेट को Kaggle से स्पॉटिफाई से स्क्रैप किया गया था। - -उपयोगी K-Means उदाहरण जिन्होंने इस पाठ को बनाने में सहायता की, उनमें यह [iris exploration](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), यह [introductory notebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python), और यह [hypothetical NGO example](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering) शामिल हैं। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/1-Introduction-to-NLP/README.md b/translations/hi/6-NLP/1-Introduction-to-NLP/README.md deleted file mode 100644 index 4b2f5819..00000000 --- a/translations/hi/6-NLP/1-Introduction-to-NLP/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# प्राकृतिक भाषा प्रसंस्करण का परिचय - -यह पाठ *प्राकृतिक भाषा प्रसंस्करण*, जो *कंप्यूटेशनल लिंग्विस्टिक्स* का एक उपक्षेत्र है, के संक्षिप्त इतिहास और महत्वपूर्ण अवधारणाओं को कवर करता है। - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) - -## परिचय - -NLP, जैसा कि आमतौर पर जाना जाता है, उन सबसे प्रसिद्ध क्षेत्रों में से एक है जहाँ मशीन लर्निंग को लागू किया गया है और उत्पादन सॉफ्टवेयर में उपयोग किया गया है। - -✅ क्या आप किसी सॉफ्टवेयर के बारे में सोच सकते हैं जिसका आप हर दिन उपयोग करते हैं जिसमें शायद कुछ NLP एम्बेडेड है? आपके वर्ड प्रोसेसिंग प्रोग्राम या मोबाइल ऐप्स के बारे में क्या जो आप नियमित रूप से उपयोग करते हैं? - -आप निम्नलिखित के बारे में जानेंगे: - -- **भाषाओं का विचार**. भाषाएँ कैसे विकसित हुईं और अध्ययन के प्रमुख क्षेत्र क्या रहे हैं। -- **परिभाषा और अवधारणाएँ**. आप यह भी सीखेंगे कि कंप्यूटर टेक्स्ट को कैसे प्रोसेस करते हैं, जिसमें पार्सिंग, ग्रामर, और संज्ञा और क्रियाओं की पहचान शामिल है। इस पाठ में कुछ कोडिंग कार्य हैं, और कई महत्वपूर्ण अवधारणाओं को पेश किया गया है जिन्हें आप अगले पाठों में कोड करना सीखेंगे। - -## कंप्यूटेशनल लिंग्विस्टिक्स - -कंप्यूटेशनल लिंग्विस्टिक्स एक अनुसंधान और विकास का क्षेत्र है जो कई दशकों से यह अध्ययन करता है कि कंप्यूटर कैसे भाषाओं के साथ काम कर सकते हैं, और यहां तक कि समझ सकते हैं, अनुवाद कर सकते हैं, और संवाद कर सकते हैं। प्राकृतिक भाषा प्रसंस्करण (NLP) एक संबंधित क्षेत्र है जो इस बात पर केंद्रित है कि कंप्यूटर 'प्राकृतिक', या मानव, भाषाओं को कैसे प्रोसेस कर सकते हैं। - -### उदाहरण - फोन डिक्टेशन - -यदि आपने कभी टाइपिंग के बजाय अपने फोन पर बोला है या एक वर्चुअल असिस्टेंट से प्रश्न पूछा है, तो आपकी आवाज़ को टेक्स्ट में परिवर्तित किया गया और फिर उस भाषा से प्रोसेस या *पार्स* किया गया जिसे आपने बोला। फिर पहचाने गए कीवर्ड को एक फॉर्मेट में प्रोसेस किया गया जिसे फोन या असिस्टेंट समझ सके और उस पर कार्य कर सके। - -![समझ](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.hi.png) -> वास्तविक भाषाई समझना कठिन है! छवि [Jen Looper](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 - ``` - -> 💡 टिप: आप सीधे VS Code वातावरण में Python चला सकते हैं। अधिक जानकारी के लिए [docs](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) देखें। - -## मशीनों से बात करना - -मानव भाषा को समझने के लिए कंप्यूटर बनाने का इतिहास दशकों पुराना है, और सबसे पहले वैज्ञानिकों में से एक जिन्होंने प्राकृतिक भाषा प्रसंस्करण पर विचार किया था, वे *Alan Turing* थे। - -### 'ट्यूरिंग टेस्ट' - -जब ट्यूरिंग 1950 के दशक में *कृत्रिम बुद्धिमत्ता* पर शोध कर रहे थे, तो उन्होंने सोचा कि क्या एक संवादात्मक परीक्षण दिया जा सकता है जिसमें एक मानव और एक कंप्यूटर (टाइप किए गए संवाद के माध्यम से) शामिल हों जहां बातचीत में मानव यह सुनिश्चित न कर सके कि वे किसी अन्य मानव या कंप्यूटर से बात कर रहे हैं। - -यदि, एक निश्चित अवधि की बातचीत के बाद, मानव यह निर्धारित नहीं कर सकता कि उत्तर कंप्यूटर से आ रहे हैं या नहीं, तो क्या कहा जा सकता है कि कंप्यूटर *सोच* रहा है? - -### प्रेरणा - 'द इमिटेशन गेम' - -इस विचार की प्रेरणा एक पार्टी गेम *द इमिटेशन गेम* से आई थी जिसमें एक पूछताछकर्ता अकेले एक कमरे में होता है और उसे यह निर्धारित करना होता है कि दो लोगों (दूसरे कमरे में) में से कौन पुरुष और कौन महिला है। पूछताछकर्ता नोट भेज सकता है, और उसे ऐसे प्रश्न सोचने होते हैं जिनके लिखित उत्तर रहस्यमय व्यक्ति के लिंग का खुलासा करें। बेशक, दूसरे कमरे में खिलाड़ी पूछताछकर्ता को भ्रमित या गुमराह करने की कोशिश कर रहे होते हैं, जबकि ईमानदारी से उत्तर देने की कोशिश कर रहे होते हैं। - -### Eliza का विकास - -1960 के दशक में MIT के एक वैज्ञानिक *Joseph Weizenbaum* ने [*Eliza*](https://wikipedia.org/wiki/ELIZA) नामक एक कंप्यूटर 'थेरेपिस्ट' विकसित किया जो मानव से प्रश्न पूछता था और उनके उत्तरों को समझने का आभास देता था। हालांकि, जबकि Eliza एक वाक्य को पार्स कर सकता था और कुछ व्याकरणिक संरचनाओं और कीवर्ड की पहचान कर सकता था ताकि एक उचित उत्तर दे सके, इसे वाक्य को *समझने* के रूप में नहीं कहा जा सकता था। यदि Eliza को एक वाक्य इस प्रारूप में प्रस्तुत किया गया "**I am** sad", तो यह वाक्य को पुनर्व्यवस्थित और प्रतिस्थापित कर सकता है और प्रतिक्रिया में "How long have **you been** sad" बना सकता है। - -इससे ऐसा आभास होता था कि Eliza ने कथन को समझा और एक अनुवर्ती प्रश्न पूछ रहा है, जबकि वास्तव में, यह केवल काल को बदल रहा था और कुछ शब्द जोड़ रहा था। यदि Eliza को कोई कीवर्ड नहीं मिलता था जिसके लिए उसके पास उत्तर होता, तो यह इसके बजाय एक रैंडम उत्तर देता जो कई विभिन्न कथनों पर लागू हो सकता था। Eliza को आसानी से मूर्ख बनाया जा सकता था, उदाहरण के लिए यदि उपयोगकर्ता लिखता "**You are** a bicycle", तो यह प्रतिक्रिया देता "How long have **I been** a bicycle?", बजाय एक अधिक तर्कसंगत प्रतिक्रिया के। - -[![Eliza से बातचीत](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Eliza से बातचीत") - -> 🎥 ऊपर की छवि पर क्लिक करें मूल ELIZA प्रोग्राम के बारे में वीडियो के लिए - -> नोट: आप [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) के 1966 में प्रकाशित मूल विवरण को पढ़ सकते हैं यदि आपके पास ACM खाता है। वैकल्पिक रूप से, [wikipedia](https://wikipedia.org/wiki/ELIZA) पर Eliza के बारे में पढ़ें। - -## व्यायाम - एक बुनियादी संवादात्मक बॉट को कोड करना - -एक संवादात्मक बॉट, जैसे Eliza, एक प्रोग्राम है जो उपयोगकर्ता इनपुट को प्राप्त करता है और समझने और बुद्धिमानी से प्रतिक्रिया देने का आभास देता है। 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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) - -## समीक्षा और आत्म-अध्ययन - -नीचे दिए गए संदर्भों को आगे पढ़ने के अवसरों के रूप में देखें। - -### संदर्भ - -1. शुबर्ट, लेनहार्ट, "कंप्यूटेशनल लिंग्विस्टिक्स", *द स्टैनफोर्ड एन्साइक्लोपीडिया ऑफ फिलॉसफी* (स्प्रिंग 2020 संस्करण), एडवर्ड एन. ज़ाल्टा (संपादक), URL = . -2. प्रिंसटन यूनिवर्सिटी "वर्डनेट के बारे में।" [WordNet](https://wordnet.princeton.edu/). प्रिंसटन यूनिवर्सिटी। 2010। - -## असाइनमेंट - -[एक बॉट खोजें](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/hi/6-NLP/1-Introduction-to-NLP/assignment.md deleted file mode 100644 index fb648413..00000000 --- a/translations/hi/6-NLP/1-Introduction-to-NLP/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# बॉट की खोज - -## निर्देश - -बॉट हर जगह होते हैं। आपका कार्य: एक बॉट ढूंढें और उसे अपनाएं! आप उन्हें वेबसाइटों, बैंकिंग एप्लिकेशनों, और फोन पर पा सकते हैं, उदाहरण के लिए जब आप वित्तीय सेवाओं की कंपनियों को सलाह या खाता जानकारी के लिए कॉल करते हैं। बॉट का विश्लेषण करें और देखें कि क्या आप उसे भ्रमित कर सकते हैं। अगर आप बॉट को भ्रमित कर सकते हैं, तो आपको क्यों लगता है कि ऐसा हुआ? अपने अनुभव के बारे में एक छोटा पेपर लिखें। - -## मूल्यांकन मानदंड - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | ------------------------ | -| | एक पूरा पेज का पेपर लिखा गया है, जिसमें अनुमानित बॉट आर्किटेक्चर को समझाया गया है और आपके अनुभव को रेखांकित किया गया है | पेपर अधूरा है या अच्छी तरह से शोधित नहीं है | कोई पेपर जमा नहीं किया गया | - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या गलतियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/2-Tasks/README.md b/translations/hi/6-NLP/2-Tasks/README.md deleted file mode 100644 index d25a06b2..00000000 --- a/translations/hi/6-NLP/2-Tasks/README.md +++ /dev/null @@ -1,217 +0,0 @@ -# सामान्य प्राकृतिक भाषा प्रसंस्करण कार्य और तकनीकें - -अधिकांश *प्राकृतिक भाषा प्रसंस्करण* कार्यों के लिए, प्रसंस्करण के लिए पाठ को तोड़ना, जांचना और परिणामों को संग्रहीत या नियमों और डेटा सेट के साथ क्रॉस रेफरेंस करना आवश्यक होता है। ये कार्य प्रोग्रामर को एक पाठ में शब्दों और शब्दों की _आवृत्ति_ या _अर्थ_ या केवल _इरादा_ प्राप्त करने की अनुमति देते हैं। - -## [पूर्व-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/) - -आइए उन सामान्य तकनीकों की खोज करें जो पाठ प्रसंस्करण में उपयोग की जाती हैं। मशीन लर्निंग के साथ मिलकर, ये तकनीकें आपको बड़े पैमाने पर पाठ को कुशलता से विश्लेषण करने में मदद करती हैं। हालांकि, इन कार्यों पर एमएल लागू करने से पहले, आइए समझें कि एक एनएलपी विशेषज्ञ द्वारा सामना की जाने वाली समस्याएं क्या हैं। - -## एनएलपी के सामान्य कार्य - -आप जिस पाठ पर काम कर रहे हैं, उसका विश्लेषण करने के विभिन्न तरीके हैं। ऐसे कार्य हैं जिन्हें आप कर सकते हैं और इन कार्यों के माध्यम से आप पाठ की समझ का अनुमान लगा सकते हैं और निष्कर्ष निकाल सकते हैं। आप आमतौर पर इन कार्यों को क्रम में करते हैं। - -### टोकनाइजेशन - -शायद सबसे पहली चीज जो अधिकांश एनएलपी एल्गोरिदम को करनी होती है वह है पाठ को टोकन या शब्दों में विभाजित करना। जबकि यह सरल लगता है, विराम चिह्नों और विभिन्न भाषाओं के शब्द और वाक्य सीमांककों को ध्यान में रखना इसे जटिल बना सकता है। आपको सीमांकन निर्धारित करने के लिए विभिन्न तरीकों का उपयोग करना पड़ सकता है। - -![टोकनाइजेशन](../../../../translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.hi.png) -> **Pride and Prejudice** से एक वाक्य को टोकनाइज़ करना। [Jen Looper](https://twitter.com/jenlooper) द्वारा इन्फोग्राफिक - -### एम्बेडिंग्स - -[शब्द एम्बेडिंग्स](https://wikipedia.org/wiki/Word_embedding) आपके पाठ डेटा को संख्यात्मक रूप में बदलने का एक तरीका है। एम्बेडिंग्स इस तरह से की जाती हैं ताकि समान अर्थ वाले या एक साथ उपयोग किए जाने वाले शब्द एक साथ समूहित हो जाएं। - -![शब्द एम्बेडिंग्स](../../../../translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.hi.png) -> "I have the highest respect for your nerves, they are my old friends." - **Pride and Prejudice** में एक वाक्य के लिए शब्द एम्बेडिंग्स। [Jen Looper](https://twitter.com/jenlooper) द्वारा इन्फोग्राफिक - -✅ शब्द एम्बेडिंग्स के साथ प्रयोग करने के लिए [यह दिलचस्प उपकरण](https://projector.tensorflow.org/) आज़माएं। एक शब्द पर क्लिक करने से समान शब्दों के समूह दिखते हैं: 'toy' 'disney', 'lego', 'playstation', और 'console' के साथ समूहित होता है। - -### पार्सिंग और पार्ट-ऑफ-स्पीच टैगिंग - -प्रत्येक शब्द जिसे टोकनाइज़ किया गया है, उसे एक भाग-ऑफ-स्पीच के रूप में टैग किया जा सकता है - एक संज्ञा, क्रिया, या विशेषण। वाक्य `the quick red fox jumped over the lazy brown dog` को पीओएस टैग किया जा सकता है जैसे fox = noun, jumped = verb. - -![पार्सिंग](../../../../translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.hi.png) - -> **Pride and Prejudice** से एक वाक्य पार्स करना। [Jen Looper](https://twitter.com/jenlooper) द्वारा इन्फोग्राफिक - -पार्सिंग यह पहचानना है कि एक वाक्य में कौन से शब्द एक-दूसरे से संबंधित हैं - उदाहरण के लिए `the quick red fox jumped` एक विशेषण-संज्ञा-क्रिया अनुक्रम है जो `lazy brown dog` अनुक्रम से अलग है। - -### शब्द और वाक्यांश आवृत्तियाँ - -एक बड़े पाठ का विश्लेषण करते समय एक उपयोगी प्रक्रिया यह है कि प्रत्येक रुचिकर शब्द या वाक्यांश की एक डिक्शनरी बनाई जाए और यह कितनी बार प्रकट होता है। वाक्यांश `the quick red fox jumped over the lazy brown dog` में the के लिए शब्द आवृत्ति 2 है। - -आइए एक उदाहरण पाठ देखें जहां हम शब्दों की आवृत्ति की गणना करते हैं। रुडयार्ड किपलिंग की कविता द विनर्स में निम्नलिखित श्लोक है: - -```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` has a frequency of 2 and `the` has a frequency of 6, and `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** - -![एन-ग्राम्स स्लाइडिंग विंडो](../../../../6-NLP/2-Tasks/images/n-grams.gif) - -> एन-ग्राम मान 3: [Jen Looper](https://twitter.com/jenlooper) द्वारा इन्फोग्राफिक - -### संज्ञा वाक्यांश निष्कर्षण - -अधिकांश वाक्यों में एक संज्ञा होती है जो वाक्य का विषय या वस्तु होती है। अंग्रेजी में, इसे अक्सर 'a' या 'an' या 'the' के पहले होने के रूप में पहचाना जा सकता है। वाक्य के अर्थ को समझने का प्रयास करते समय एनएलपी में 'संज्ञा वाक्यांश को निकालकर' वाक्य के विषय या वस्तु की पहचान करना एक सामान्य कार्य है। - -✅ वाक्य "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 (सबसे वस्तुनिष्ठ से सबसे अवस्तुनिष्ठ) में मापा जाता है। - -✅ बाद में आप सीखेंगे कि मशीन लर्निंग का उपयोग करके भावना निर्धारित करने के विभिन्न तरीके हैं, लेकिन एक तरीका यह है कि किसी मानव विशेषज्ञ द्वारा सकारात्मक या नकारात्मक के रूप में वर्गीकृत किए गए शब्दों और वाक्यांशों की एक सूची हो और उस मॉडल को पाठ पर लागू करें ताकि ध्रुवीयता स्कोर की गणना की जा सके। क्या आप देख सकते हैं कि यह कुछ परिस्थितियों में कैसे काम करेगा और दूसरों में कम काम करेगा? - -### इंफ्लेक्शन - -इंफ्लेक्शन आपको एक शब्द लेने और उस शब्द के एकवचन या बहुवचन को प्राप्त करने में सक्षम बनाता है। - -### लेमाटाइजेशन - -एक *लेम्मा* एक सेट के शब्दों के लिए मूल या हेडवर्ड है, उदाहरण के लिए *flew*, *flies*, *flying* का लेम्मा क्रिया *fly* है। - -एनएलपी शोधकर्ता के लिए कुछ उपयोगी डेटाबेस भी उपलब्ध हैं, विशेष रूप से: - -### वर्डनेट - -[वर्डनेट](https://wordnet.princeton.edu/) शब्दों, पर्यायवाची, विलोम और कई अन्य विवरणों का डेटाबेस है जो विभिन्न भाषाओं में हर शब्द के लिए है। अनुवाद, वर्तनी परीक्षक, या किसी भी प्रकार के भाषा उपकरण बनाने का प्रयास करते समय यह अविश्वसनीय रूप से उपयोगी है। - -## एनएलपी लाइब्रेरीज़ - -सौभाग्य से, आपको इन सभी तकनीकों को स्वयं बनाने की आवश्यकता नहीं है, क्योंकि उत्कृष्ट पायथन लाइब्रेरीज़ उपलब्ध हैं जो इसे उन डेवलपर्स के लिए अधिक सुलभ बनाती हैं जो प्राकृतिक भाषा प्रसंस्करण या मशीन लर्निंग में विशेषज्ञ नहीं हैं। अगला पाठ इनमें से अधिक उदाहरण शामिल करता है, लेकिन यहां आप अगले कार्य में मदद करने के लिए कुछ उपयोगी उदाहरण सीखेंगे। - -### व्यायाम - `TextBlob` library - -Let's use a library called TextBlob as it contains helpful APIs for tackling these types of tasks. TextBlob "stands on the giant shoulders of [NLTK](https://nltk.org) and [pattern](https://github.com/clips/pattern), and plays nicely with both." It has a considerable amount of ML embedded in its API. - -> Note: A useful [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) guide is available for TextBlob that is recommended for experienced Python developers - -When attempting to identify *noun phrases*, TextBlob offers several options of extractors to find noun phrases. - -1. Take a look at `ConllExtractor` का उपयोग करना - - ```python - from textblob import TextBlob - from textblob.np_extractors import ConllExtractor - # import and create a Conll extractor to use later - extractor = ConllExtractor() - - # later when you need a noun phrase extractor: - user_input = input("> ") - user_input_blob = TextBlob(user_input, np_extractor=extractor) # note non-default extractor specified - np = user_input_blob.noun_phrases - ``` - - > यहाँ क्या हो रहा है? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) "एक संज्ञा वाक्यांश निष्कर्षण है जो ConLL-2000 प्रशिक्षण कॉर्पस के साथ प्रशिक्षित चंक पार्सिंग का उपयोग करता है।" ConLL-2000 कंप्यूटेशनल नेचुरल लैंग्वेज लर्निंग पर 2000 सम्मेलन को संदर्भित करता है। हर साल सम्मेलन ने एक कांटेदार एनएलपी समस्या को हल करने के लिए एक कार्यशाला की मेजबानी की, और 2000 में यह संज्ञा चंकिंग थी। एक मॉडल को वॉल स्ट्रीट जर्नल पर प्रशिक्षित किया गया था, "अनुभाग 15-18 को प्रशिक्षण डेटा (211727 टोकन) और अनुभाग 20 को परीक्षण डेटा (47377 टोकन) के रूप में।" आप उपयोग की गई प्रक्रियाओं को [यहां](https://www.clips.uantwerpen.be/conll2000/chunking/) और [परिणाम](https://ifarm.nl/erikt/research/np-chunking.html) देख सकते हैं। - -### चुनौती - अपने बॉट को एनएलपी के साथ सुधारना - -पिछले पाठ में आपने एक बहुत ही सरल प्रश्नोत्तर बॉट बनाया था। अब, आप अपनी इनपुट का विश्लेषण करके और भावना के अनुसार प्रतिक्रिया प्रिंट करके मार्विन को थोड़ा और सहानुभूतिपूर्ण बनाएंगे। आपको एक `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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/) - -## समीक्षा और स्व-अध्ययन - -अगले कुछ पाठों में आप भावना विश्लेषण के बारे में अधिक जानेंगे। [KDNuggets](https://www.kdnuggets.com/tag/nlp) पर इन लेखों जैसे लेखों में इस दिलचस्प तकनीक पर शोध करें। - -## असाइनमेंट - -[बॉट को बात करना सिखाएं](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/2-Tasks/assignment.md b/translations/hi/6-NLP/2-Tasks/assignment.md deleted file mode 100644 index 1a135cbb..00000000 --- a/translations/hi/6-NLP/2-Tasks/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक बॉट को जवाब देना सिखाएं - -## निर्देश - -पिछले कुछ पाठों में, आपने एक बेसिक बॉट प्रोग्राम किया था जिससे आप चैट कर सकते हैं। यह बॉट रैंडम उत्तर देता है जब तक आप 'बाय' नहीं कहते। क्या आप उत्तरों को थोड़ा कम रैंडम बना सकते हैं, और विशेष चीजें कहने पर उत्तर ट्रिगर कर सकते हैं, जैसे 'क्यों' या 'कैसे'? सोचें कि मशीन लर्निंग कैसे इस प्रकार के काम को कम मैनुअल बना सकता है जब आप अपने बॉट को विस्तारित करेंगे। आप अपने कार्यों को आसान बनाने के लिए NLTK या TextBlob लाइब्रेरी का उपयोग कर सकते हैं। - -## मूल्यांकन - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | -| | एक नया bot.py फ़ाइल प्रस्तुत की गई है और दस्तावेज़ित है | एक नई बॉट फ़ाइल प्रस्तुत की गई है लेकिन इसमें बग्स हैं | एक फ़ाइल प्रस्तुत नहीं की गई | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/3-Translation-Sentiment/README.md b/translations/hi/6-NLP/3-Translation-Sentiment/README.md deleted file mode 100644 index b3a65752..00000000 --- a/translations/hi/6-NLP/3-Translation-Sentiment/README.md +++ /dev/null @@ -1,190 +0,0 @@ -# मशीन लर्निंग के साथ अनुवाद और भाव विश्लेषण - -पिछले पाठों में आपने सीखा कि कैसे एक बेसिक बॉट बनाना है, जो `TextBlob` का उपयोग करता है, जो कि एक लाइब्रेरी है जो बेसिक एनएलपी कार्यों जैसे कि संज्ञा वाक्यांश निष्कर्षण को पूरा करने के लिए पर्दे के पीछे एमएल को एम्बेड करती है। कम्प्यूटेशनल लिंग्विस्टिक्स में एक और महत्वपूर्ण चुनौती एक भाषा से दूसरी भाषा में वाक्य का सटीक _अनुवाद_ करना है। - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) - -अनुवाद एक बहुत ही कठिन समस्या है क्योंकि दुनिया में हजारों भाषाएँ हैं और प्रत्येक की व्याकरणिक नियम बहुत अलग हो सकते हैं। एक दृष्टिकोण यह है कि एक भाषा, जैसे अंग्रेज़ी, के औपचारिक व्याकरण नियमों को एक गैर-भाषा निर्भर संरचना में परिवर्तित किया जाए, और फिर इसे दूसरी भाषा में परिवर्तित करके अनुवाद किया जाए। इस दृष्टिकोण का मतलब है कि आप निम्नलिखित चरणों का पालन करेंगे: - -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) - -### मशीन लर्निंग दृष्टिकोण - -अब तक, आपने प्राकृतिक भाषा प्रसंस्करण के औपचारिक नियम दृष्टिकोण के बारे में सीखा है। एक और दृष्टिकोण यह है कि शब्दों का अर्थ नजरअंदाज कर दिया जाए, और _इसके बजाय पैटर्न का पता लगाने के लिए मशीन लर्निंग का उपयोग किया जाए_। यदि आपके पास बहुत सारे टेक्स्ट (एक *कॉर्पस*) या टेक्स्ट (*कॉर्पोरा*) दोनों मूल और लक्षित भाषाओं में हैं, तो यह अनुवाद में काम कर सकता है। - -उदाहरण के लिए, *Pride and Prejudice* के मामले पर विचार करें, जो कि 1813 में जेन ऑस्टेन द्वारा लिखी गई एक प्रसिद्ध अंग्रेजी उपन्यास है। यदि आप पुस्तक को अंग्रेजी में और पुस्तक का मानव अनुवाद *फ्रेंच* में देखें, तो आप एक में वाक्यांशों का पता लगा सकते हैं जो दूसरे में _मुहावरेदार_ रूप से अनुवादित हैं। आप इसे कुछ ही समय में करेंगे। - -उदाहरण के लिए, जब एक अंग्रेजी वाक्यांश जैसे `I have no money` को शाब्दिक रूप से फ्रेंच में अनुवादित किया जाता है, तो यह `Je n'ai pas de monnaie` बन सकता है। "Monnaie" एक मुश्किल फ्रेंच 'झूठा समानार्थक शब्द' है, क्योंकि 'money' और 'monnaie' पर्यायवाची नहीं हैं। एक बेहतर अनुवाद जो एक मानव कर सकता है वह होगा `Je n'ai pas d'argent`, क्योंकि यह बेहतर तरीके से इस अर्थ को व्यक्त करता है कि आपके पास पैसे नहीं हैं (बल्कि 'ढीला परिवर्तन' जो 'monnaie' का अर्थ है)। - -![monnaie](../../../../translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.hi.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 अनुवाद का उपयोग कर रहा है, जो एक परिष्कृत एआई है जो लाखों वाक्यांशों को पार्स कर सकता है ताकि कार्य के लिए सबसे अच्छे स्ट्रिंग्स की भविष्यवाणी की जा सके। यहाँ कुछ भी मैन्युअल नहीं हो रहा है और आपको `blob.translate`. - -✅ Try some more sentences. Which is better, ML or human translation? In which cases? - -## Sentiment analysis - -Another area where machine learning can work very well is sentiment analysis. A non-ML approach to sentiment is to identify words and phrases which are 'positive' and 'negative'. Then, given a new piece of text, calculate the total value of the positive, negative and neutral words to identify the overall sentiment. - -This approach is easily tricked as you may have seen in the Marvin task - the sentence `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" को अलग-अलग तरीकों से कहने की कोशिश करें ताकि पता चल सके कि आपकी आवाज़ कैसे अर्थ व्यक्त करती है। - -### एमएल दृष्टिकोण - -एमएल दृष्टिकोण यह होगा कि नकारात्मक और सकारात्मक पाठों का मैन्युअल रूप से संग्रह किया जाए - ट्वीट्स, या मूवी समीक्षाएँ, या कुछ भी जहाँ मानव ने एक स्कोर *और* एक लिखित राय दी हो। फिर एनएलपी तकनीकों को राय और स्कोर पर लागू किया जा सकता है, ताकि पैटर्न उभर सकें (जैसे, सकारात्मक मूवी समीक्षाओं में 'ऑस्कर योग्य' वाक्यांश नकारात्मक मूवी समीक्षाओं की तुलना में अधिक होता है, या सकारात्मक रेस्तरां समीक्षाएँ 'गौर्मेट' शब्द का उपयोग 'घृणास्पद' की तुलना में अधिक करती हैं)। - -> ⚖️ **उदाहरण**: यदि आप एक राजनेता के कार्यालय में काम करते हैं और कोई नया कानून बहस के लिए है, तो मतदाता कार्यालय को उस विशेष नए कानून का समर्थन करने वाले या उसके खिलाफ ईमेल लिख सकते हैं। मान लीजिए कि आपको ईमेल पढ़ने और उन्हें 2 ढेरियों में छांटने का काम सौंपा गया है, *समर्थन में* और *विरोध में*। यदि बहुत सारे ईमेल होते, तो आप सभी को पढ़ने की कोशिश में अभिभूत हो सकते थे। क्या यह अच्छा नहीं होगा कि एक बॉट आपके लिए सभी ईमेल पढ़ सके, उन्हें समझ सके और आपको बता सके कि कौन सा ईमेल किस ढेरी में जाना चाहिए? -> -> इसे प्राप्त करने का एक तरीका मशीन लर्निंग का उपयोग करना है। आप मॉडल को *विरोध में* ईमेल के एक हिस्से और *समर्थन में* ईमेल के एक हिस्से के साथ प्रशिक्षित करेंगे। मॉडल उन वाक्यांशों और शब्दों को *विरोध में* या *समर्थन में* ईमेल के साथ अधिक संभावित रूप से प्रकट होने वाले शब्दों और पैटर्नों के साथ जोड़ देगा, *लेकिन यह किसी भी सामग्री को नहीं समझेगा*, केवल यह कि कुछ शब्द और पैटर्न एक *विरोध में* या *समर्थन में* ईमेल में अधिक संभावना से प्रकट होते हैं। आप इसे उन ईमेल के साथ परीक्षण कर सकते हैं जिन्हें आपने मॉडल को प्रशिक्षित करने के लिए उपयोग नहीं किया था, और देख सकते हैं कि क्या यह आपके समान निष्कर्ष पर पहुंचता है। फिर, एक बार जब आप मॉडल की सटीकता से संतुष्ट हो जाते हैं, तो आप भविष्य के ईमेल को बिना प्रत्येक को पढ़े संसाधित कर सकते हैं। - -✅ क्या यह प्रक्रिया उन प्रक्रियाओं जैसी लगती है जिन्हें आपने पिछले पाठों में उपयोग किया है? - -## अभ्यास - भावनात्मक वाक्य - -भावना को -1 से 1 की *ध्रुवता* के साथ मापा जाता है, जिसका मतलब है कि -1 सबसे नकारात्मक भावना है, और 1 सबसे सकारात्मक। भावना को 0 - 1 के स्कोर के साथ वस्तुनिष्ठता (0) और व्यक्तिनिष्ठता (1) के साथ भी मापा जाता है। - -जेन ऑस्टेन की *Pride and Prejudice* पर एक और नज़र डालें। पाठ यहाँ [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) पर उपलब्ध है। नीचे दिया गया नमूना एक छोटा कार्यक्रम दिखाता है जो पुस्तक के पहले और अंतिम वाक्यों की भावना का विश्लेषण करता है और इसकी भावना ध्रुवता और व्यक्तिनिष्ठता/वस्तुनिष्ठता स्कोर प्रदर्शित करता है। - -आपको `sentiment` निर्धारित करने के लिए `TextBlob` लाइब्रेरी (ऊपर वर्णित) का उपयोग करना चाहिए (आपको अपना खुद का भावना कैलकुलेटर लिखने की आवश्यकता नहीं है) निम्नलिखित कार्य में। - -```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. [Pride and Prejudice की एक प्रति](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) Project Gutenberg से .txt फ़ाइल के रूप में डाउनलोड करें। फ़ाइल की शुरुआत और अंत में मेटाडेटा को हटा दें, केवल मूल पाठ को छोड़ दें -2. फ़ाइल को पायथन में खोलें और सामग्री को एक स्ट्रिंग के रूप में निकालें -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://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) - -## समीक्षा और आत्म-अध्ययन - -पाठ से भावना निकालने के कई तरीके हैं। उन व्यावसायिक अनुप्रयोगों के बारे में सोचें जो इस तकनीक का उपयोग कर सकते हैं। सोचें कि यह कैसे गलत हो सकता है। ऐसे परिष्कृत एंटरप्राइज़-तैयार सिस्टम के बारे में और पढ़ें जो भावना का विश्लेषण करते हैं जैसे [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)। ऊपर दिए गए Pride and Prejudice वाक्यों में से कुछ का परीक्षण करें और देखें कि क्या यह सूक्ष्मता का पता लगा सकता है। - -## असाइनमेंट - -[काव्यात्मक लाइसेंस](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/3-Translation-Sentiment/assignment.md b/translations/hi/6-NLP/3-Translation-Sentiment/assignment.md deleted file mode 100644 index c83a7883..00000000 --- a/translations/hi/6-NLP/3-Translation-Sentiment/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# काव्यात्मक स्वतंत्रता - -## निर्देश - -[इस नोटबुक](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) में आप 500 से अधिक एमिली डिकिंसन की कविताओं को पा सकते हैं जिन्हें पहले से Azure टेक्स्ट एनालिटिक्स का उपयोग करके भावना के लिए विश्लेषित किया गया है। इस डेटा सेट का उपयोग करके, इसे पाठ में वर्णित तकनीकों का उपयोग करके विश्लेषित करें। क्या कविता का सुझाया गया भावना अधिक परिष्कृत Azure सेवा के निर्णय से मेल खाता है? क्यों या क्यों नहीं, आपके विचार में? क्या कुछ आपको आश्चर्यचकित करता है? - -## मूल्यांकन मापदंड - -| मापदंड | उत्कृष्टता | पर्याप्तता | सुधार की आवश्यकता | -| -------- | ------------------------------------------------------------------------- | -------------------------------------------------------- | ------------------------ | -| | लेखक के नमूना आउटपुट का ठोस विश्लेषण के साथ एक नोटबुक प्रस्तुत की जाती है | नोटबुक अधूरी है या विश्लेषण नहीं करती | कोई नोटबुक प्रस्तुत नहीं की जाती | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/hi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md deleted file mode 100644 index e402e584..00000000 --- a/translations/hi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/hi/6-NLP/3-Translation-Sentiment/solution/R/README.md deleted file mode 100644 index 01b9baf6..00000000 --- a/translations/hi/6-NLP/3-Translation-Sentiment/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/4-Hotel-Reviews-1/README.md b/translations/hi/6-NLP/4-Hotel-Reviews-1/README.md deleted file mode 100644 index 208eb177..00000000 --- a/translations/hi/6-NLP/4-Hotel-Reviews-1/README.md +++ /dev/null @@ -1,264 +0,0 @@ -# होटल समीक्षाओं के साथ भावना विश्लेषण - डेटा प्रोसेसिंग - -इस खंड में आप पिछले पाठों में सीखी गई तकनीकों का उपयोग करके एक बड़े डेटा सेट का कुछ खोजपूर्ण डेटा विश्लेषण करेंगे। एक बार जब आप विभिन्न स्तंभों की उपयोगिता को अच्छी तरह से समझ लेंगे, तो आप सीखेंगे: - -- अनावश्यक स्तंभों को कैसे हटाएं -- मौजूदा स्तंभों के आधार पर कुछ नए डेटा कैसे गणना करें -- अंतिम चुनौती में उपयोग के लिए परिणामी डेटा सेट को कैसे सहेजें - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/) - -### परिचय - -अब तक आपने सीखा है कि पाठ डेटा संख्यात्मक प्रकार के डेटा के बिल्कुल विपरीत होता है। यदि यह पाठ किसी मानव द्वारा लिखा या बोला गया है, तो इसे पैटर्न और आवृत्तियों, भावना और अर्थ खोजने के लिए विश्लेषण किया जा सकता है। यह पाठ आपको एक वास्तविक डेटा सेट और एक वास्तविक चुनौती में ले जाता है: **[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` - - यह एक संख्यात्मक मान है जिसमें न्यूनतम और अधिकतम मान 2.5 और 10 के बीच सबसे अधिक 1 दशमलव स्थान है - - यह स्पष्ट नहीं किया गया है कि 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 शब्द लिखे कि यह कितना नकारात्मक था। यदि उन्होंने सकारात्मक समीक्षा कॉलम में कुछ भी नहीं लिखा, तो आप अनुमान लगा सकते हैं कि कुछ भी सकारात्मक नहीं था, लेकिन अफसोस, उन्होंने चेतावनी के 7 शब्द लिखे। यदि हम शब्दों की बजाय शब्दों का अर्थ या भावना गिनते हैं, तो हमें समीक्षक के इरादे का विकृत दृश्य मिल सकता है। अजीब तरह से, उनका स्कोर 2.5 भ्रमित करने वाला है, क्योंकि यदि वह होटल ठहराव इतना बुरा था, तो उन्होंने इसे कोई अंक क्यों दिए? डेटा सेट का बारीकी से निरीक्षण करने पर, आप देखेंगे कि सबसे कम संभव स्कोर 2.5 है, 0 नहीं। सबसे अधिक संभव स्कोर 10 है। - -##### टैग्स - -जैसा कि ऊपर उल्लेख किया गया है, पहली नज़र में, डेटा को वर्गीकृत करने के लिए `Tags` का उपयोग करने का विचार समझ में आता है। दुर्भाग्य से ये टैग मानकीकृत नहीं हैं, जिसका अर्थ है कि किसी दिए गए होटल में, विकल्प *एकल कमरा*, *जुड़वां कमरा*, और *डबल कमरा* हो सकते हैं, लेकिन अगले होटल में वे *डीलक्स एकल कमरा*, *क्लासिक क्वीन कमरा*, और *एक्जीक्यूटिव किंग कमरा* हो सकते हैं। ये वही चीजें हो सकती हैं, लेकिन इतनी सारी विविधताएं हैं कि विकल्प बन जाता है: - -1. सभी शर्तों को एकल मानक में बदलने का प्रयास करें, जो बहुत कठिन है, क्योंकि यह स्पष्ट नहीं है कि प्रत्येक मामले में रूपांतरण पथ क्या होगा (जैसे *क्लासिक सिंगल रूम* को *सिंगल रूम* से मैप करता है लेकिन *आंगन गार्डन या सिटी व्यू के साथ सुपीरियर क्वीन रूम* को मैप करना बहुत कठिन है) - -1. हम एक NLP दृष्टिकोण ले सकते हैं और प्रत्येक होटल पर लागू होने वाले *सोलो*, *बिजनेस ट्रैवलर*, या *युवा बच्चों के साथ परिवार* जैसे कुछ शब्दों की आवृत्ति को माप सकते हैं, और इसे सिफारिश में कारक बना सकते हैं - -टैग आमतौर पर (लेकिन हमेशा नहीं) एकल फ़ील्ड होते हैं जिनमें *यात्रा का प्रकार*, *अतिथियों का प्रकार*, *कमरे का प्रकार*, *रातों की संख्या*, और *प्रकार का डिवाइस समीक्षा प्रस्तुत की गई थी* के अनुरूप 5 से 6 अल्पविराम से अलग मानों की सूची होती है। हालाँकि, क्योंकि कुछ समीक्षक प्रत्येक फ़ील्ड को नहीं भरते हैं (वे एक को खाली छोड़ सकते हैं), मान हमेशा एक ही क्रम में नहीं होते हैं। - -उदाहरण के लिए, *समूह का प्रकार* लें। `Tags` स्तंभ में इस फ़ील्ड में 1025 अनूठी संभावनाएं हैं, और दुर्भाग्य से उनमें से केवल कुछ ही समूह को संदर्भित करती हैं (कुछ कमरे के प्रकार आदि हैं)। यदि आप केवल उन लोगों को फ़िल्टर करते हैं जो परिवार का उल्लेख करते हैं, तो परिणामों में कई *फैमिली रूम* प्रकार के परिणाम होते हैं। यदि आप *साथ* शब्द को शामिल करते हैं, यानी *फैमिली विथ* मानों की गणना करें, तो परिणाम बेहतर होते हैं, 515,000 परिणामों में से 80,000 से अधिक में "युवा बच्चों के साथ परिवार" या "बड़े बच्चों के साथ परिवार" वाक्यांश होता है। - -इसका मतलब है कि टैग कॉलम हमारे लिए पूरी तरह से बेकार नहीं है, लेकिन इसे उपयोगी बनाने के लिए कुछ काम करना होगा। - -##### औसत होटल स्कोर - -डेटा सेट के साथ कई विचित्रताएँ या विसंगतियाँ हैं जिन्हें मैं समझ नहीं पा रहा हूँ, लेकिन जब आप अपने मॉडल बना रहे हैं तो आप उनसे अवगत रहें इसके लिए यहाँ चित्रित किया गया है। यदि आप इसका पता लगाते हैं, तो कृपया हमें चर्चा अनुभाग में बताएं! - -डेटा सेट में औसत स्कोर और समीक्षाओं की संख्या से संबंधित निम्नलिखित स्तंभ हैं: - -1. Hotel_Name -2. Additional_Number_of_Scoring -3. Average_Score -4. Total_Number_of_Reviews -5. Reviewer_Score - -इस डेटा सेट में सबसे अधिक समीक्षाओं वाला एकल होटल *ब्रिटानिया इंटरनेशनल होटल कैनरी व्हार्फ* है जिसमें 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 का सार है, बिना किसी मानव को यह करने की आवश्यकता के अर्थ या भावना की व्याख्या करना। हालाँकि, यह संभव है कि आप कुछ नकारात्मक समीक्षाएँ पढ़ेंगे। मैं आपसे आग्रह करूंगा कि आप ऐसा न करें, क्योंकि आपको ऐसा करने की आवश्यकता नहीं है। उनमें से कुछ बेवकूफी भरी हैं, या अप्रासंगिक नकारात्मक होटल समीक्षाएँ हैं, जैसे "मौसम अच्छा नहीं था", जो होटल के नियंत्रण से परे कुछ है, या वास्तव में, किसी का भी। लेकिन कुछ समीक्षाओं का एक काला पक्ष भी है। कभी-कभी नकारात्मक समीक्षाएँ नस्लवादी, सेक्सिस्ट या आयुर्वादी होती हैं। यह दुर्भाग्यपूर्ण है लेकिन सार्वजनिक वेबसाइट से स्क्रैप किए गए डेटा सेट में अपेक्षित है। कुछ समीक्षक ऐसी समीक्षाएँ छोड़ते हैं जिन्हें आप घृणित, असहज या परेशान करने वाली पाते हैं। भावना को मापने के लिए कोड को पढ़ने के बजाय उन्हें स्वयं पढ़ना और परेशान होना बेहतर है। ऐसा कहा जा रहा है, यह एक अल्प -पंक्तियों में कॉलम `Positive_Review` के मान "No Positive" हैं 9. गणना करें और प्रिंट करें कि कितनी पंक्तियों में कॉलम `Positive_Review` के मान "No Positive" **और** `Negative_Review` के मान "No Negative" हैं ### कोड उत्तर 1. आपने जो डेटा फ्रेम लोड किया है उसका *आकार* प्रिंट करें (आकार पंक्तियों और कॉलमों की संख्या है) ```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() creates a Series object that has index and values in this case, the country and the frequency they occur in reviewer nationality - nationality_freq = df["Reviewer_Nationality"].value_counts() - print("There are " + str(nationality_freq.size) + " different nationalities") - # print first and last rows of the Series. Change to nationality_freq.to_string() to print all of the data - print(nationality_freq) - - There are 227 different nationalities - United Kingdom 245246 - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - ... - Comoros 1 - Palau 1 - Northern Mariana Islands 1 - Cape Verde 1 - Guinea 1 - Name: Reviewer_Nationality, Length: 227, dtype: int64 - ``` 3. अगली 10 सबसे अधिक बार पाई जाने वाली राष्ट्रीयताएँ और उनकी आवृत्ति गणना क्या हैं? ```python - print("The highest frequency reviewer nationality is " + str(nationality_freq.index[0]).strip() + " with " + str(nationality_freq[0]) + " reviews.") - # Notice there is a leading space on the values, strip() removes that for printing - # What is the top 10 most common nationalities and their frequencies? - print("The next 10 highest frequency reviewer nationalities are:") - print(nationality_freq[1:11].to_string()) - - The highest frequency reviewer nationality is United Kingdom with 245246 reviews. - The next 10 highest frequency reviewer nationalities are: - United States of America 35437 - Australia 21686 - Ireland 14827 - United Arab Emirates 10235 - Saudi Arabia 8951 - Netherlands 8772 - Switzerland 8678 - Germany 7941 - Canada 7894 - France 7296 - ``` 3. शीर्ष 10 सबसे समीक्षक राष्ट्रीयताओं में से प्रत्येक के लिए सबसे अधिक बार समीक्षा किया गया होटल कौन सा था? ```python - # What was the most frequently reviewed hotel for the top 10 nationalities - # Normally with pandas you will avoid an explicit loop, but wanted to show creating a new dataframe using criteria (don't do this with large amounts of data because it could be very slow) - for nat in nationality_freq[:10].index: - # First, extract all the rows that match the criteria into a new dataframe - nat_df = df[df["Reviewer_Nationality"] == nat] - # Now get the hotel freq - freq = nat_df["Hotel_Name"].value_counts() - print("The most reviewed hotel for " + str(nat).strip() + " was " + str(freq.index[0]) + " with " + str(freq[0]) + " reviews.") - - The most reviewed hotel for United Kingdom was Britannia International Hotel Canary Wharf with 3833 reviews. - The most reviewed hotel for United States of America was Hotel Esther a with 423 reviews. - The most reviewed hotel for Australia was Park Plaza Westminster Bridge London with 167 reviews. - The most reviewed hotel for Ireland was Copthorne Tara Hotel London Kensington with 239 reviews. - The most reviewed hotel for United Arab Emirates was Millennium Hotel London Knightsbridge with 129 reviews. - The most reviewed hotel for Saudi Arabia was The Cumberland A Guoman Hotel with 142 reviews. - The most reviewed hotel for Netherlands was Jaz Amsterdam with 97 reviews. - The most reviewed hotel for Switzerland was Hotel Da Vinci with 97 reviews. - The most reviewed hotel for Germany was Hotel Da Vinci with 86 reviews. - The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. - ``` 4. डेटासेट में प्रति होटल कितनी समीक्षाएँ हैं (होटल की आवृत्ति गणना)? ```python - # First create a new dataframe based on the old one, removing the uneeded columns - hotel_freq_df = df.drop(["Hotel_Address", "Additional_Number_of_Scoring", "Review_Date", "Average_Score", "Reviewer_Nationality", "Negative_Review", "Review_Total_Negative_Word_Counts", "Positive_Review", "Review_Total_Positive_Word_Counts", "Total_Number_of_Reviews_Reviewer_Has_Given", "Reviewer_Score", "Tags", "days_since_review", "lat", "lng"], axis = 1) - - # Group the rows by Hotel_Name, count them and put the result in a new column Total_Reviews_Found - hotel_freq_df['Total_Reviews_Found'] = hotel_freq_df.groupby('Hotel_Name').transform('count') - - # Get rid of all the duplicated rows - hotel_freq_df = hotel_freq_df.drop_duplicates(subset = ["Hotel_Name"]) - display(hotel_freq_df) - ``` | Hotel_Name | Total_Number_of_Reviews | Total_Reviews_Found | | :----------------------------------------: | :---------------------: | :-----------------: | | Britannia International Hotel Canary Wharf | 9086 | 4789 | | Park Plaza Westminster Bridge London | 12158 | 4169 | | Copthorne Tara Hotel London Kensington | 7105 | 3578 | | ... | ... | ... | | Mercure Paris Porte d Orleans | 110 | 10 | | Hotel Wagner | 135 | 10 | | Hotel Gallitzinberg | 173 | 8 | आप देख सकते हैं कि *डेटासेट में गिना गया* परिणाम `Total_Number_of_Reviews` में मान से मेल नहीं खाता है। यह स्पष्ट नहीं है कि क्या डेटासेट में यह मान होटल की कुल समीक्षाओं का प्रतिनिधित्व करता था, लेकिन सभी स्क्रैप नहीं की गईं, या कुछ अन्य गणना। इस अस्पष्टता के कारण `Total_Number_of_Reviews` को मॉडल में उपयोग नहीं किया गया है। 5. जबकि डेटासेट में प्रत्येक होटल के लिए एक `Average_Score` कॉलम है, आप एक औसत स्कोर भी गणना कर सकते हैं (प्रत्येक होटल के लिए डेटासेट में सभी समीक्षक स्कोर का औसत प्राप्त करना)। अपने डेटा फ्रेम में एक नया कॉलम जोड़ें जिसका कॉलम हेडर `Calc_Average_Score` हो और जिसमें वह गणना किया गया औसत हो। कॉलम `Hotel_Name`, `Average_Score`, और `Calc_Average_Score` प्रिंट करें। ```python - # define a function that takes a row and performs some calculation with it - def get_difference_review_avg(row): - return row["Average_Score"] - row["Calc_Average_Score"] - - # 'mean' is mathematical word for 'average' - df['Calc_Average_Score'] = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - - # Add a new column with the difference between the two average scores - df["Average_Score_Difference"] = df.apply(get_difference_review_avg, axis = 1) - - # Create a df without all the duplicates of Hotel_Name (so only 1 row per hotel) - review_scores_df = df.drop_duplicates(subset = ["Hotel_Name"]) - - # Sort the dataframe to find the lowest and highest average score difference - review_scores_df = review_scores_df.sort_values(by=["Average_Score_Difference"]) - - display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) - ``` आप `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 होटल के साथ जिसका स्कोर अंतर 1 से अधिक है, इसका मतलब है कि हम संभवतः अंतर को अनदेखा कर सकते हैं और गणना किए गए औसत स्कोर का उपयोग कर सकते हैं। 6. गणना करें और प्रिंट करें कि कितनी पंक्तियों में कॉलम `Negative_Review` के मान "No Negative" हैं 7. गणना करें और प्रिंट करें कि कितनी पंक्तियों में कॉलम `Positive_Review` के मान "No Positive" हैं 8. गणना करें और प्रिंट करें कि कितनी पंक्तियों में कॉलम `Positive_Review` के मान "No Positive" **और** `Negative_Review` के मान "No Negative" हैं ```python - # with lambdas: - start = time.time() - no_negative_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" else False , axis=1) - print("Number of No Negative reviews: " + str(len(no_negative_reviews[no_negative_reviews == True].index))) - - no_positive_reviews = df.apply(lambda x: True if x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of No Positive reviews: " + str(len(no_positive_reviews[no_positive_reviews == True].index))) - - both_no_reviews = df.apply(lambda x: True if x['Negative_Review'] == "No Negative" and x['Positive_Review'] == "No Positive" else False , axis=1) - print("Number of both No Negative and No Positive reviews: " + str(len(both_no_reviews[both_no_reviews == True].index))) - end = time.time() - print("Lambdas took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Lambdas took 9.64 seconds - ``` ## एक और तरीका एक और तरीका बिना लैम्ब्डास के आइटम गिनना, और पंक्तियों को गिनने के लिए सम का उपयोग करना: ```python - # without lambdas (using a mixture of notations to show you can use both) - start = time.time() - no_negative_reviews = sum(df.Negative_Review == "No Negative") - print("Number of No Negative reviews: " + str(no_negative_reviews)) - - no_positive_reviews = sum(df["Positive_Review"] == "No Positive") - print("Number of No Positive reviews: " + str(no_positive_reviews)) - - both_no_reviews = sum((df.Negative_Review == "No Negative") & (df.Positive_Review == "No Positive")) - print("Number of both No Negative and No Positive reviews: " + str(both_no_reviews)) - - end = time.time() - print("Sum took " + str(round(end - start, 2)) + " seconds") - - Number of No Negative reviews: 127890 - Number of No Positive reviews: 35946 - Number of both No Negative and No Positive reviews: 127 - Sum took 0.19 seconds - ``` आपने देखा होगा कि कॉलम `Negative_Review` और `Positive_Review` के लिए क्रमशः "No Negative" और "No Positive" मानों वाली 127 पंक्तियाँ हैं। इसका मतलब है कि समीक्षक ने होटल को एक संख्यात्मक स्कोर दिया, लेकिन सकारात्मक या नकारात्मक समीक्षा लिखने से इनकार कर दिया। सौभाग्य से यह एक छोटी मात्रा की पंक्तियाँ हैं (515738 में से 127, या 0.02%), इसलिए यह संभवतः हमारे मॉडल या परिणामों को किसी विशेष दिशा में नहीं ले जाएगा, लेकिन आप एक डेटा सेट की समीक्षा करने की उम्मीद नहीं कर सकते जिसमें कोई समीक्षा नहीं है, इसलिए यह डेटा का पता लगाने लायक है ताकि ऐसी पंक्तियों की खोज की जा सके। अब जब आपने डेटासेट का पता लगा लिया है, अगली कक्षा में आप डेटा को फ़िल्टर करेंगे और कुछ भावना विश्लेषण जोड़ेंगे। --- ## 🚀चुनौती यह पाठ प्रदर्शित करता है, जैसा कि हमने पिछले पाठों में देखा, डेटा और इसकी खामियों को समझना कितना महत्वपूर्ण है इससे पहले कि आप उस पर संचालन करें। विशेष रूप से, टेक्स्ट-आधारित डेटा सावधानीपूर्वक जांच का सामना करता है। विभिन्न टेक्स्ट-भारी डेटा सेटों के माध्यम से खुदाई करें और देखें कि क्या आप ऐसे क्षेत्र खोज सकते हैं जो मॉडल में पूर्वाग्रह या विकृत भावना ला सकते हैं। ## [पोस्ट-व्याख्यान प्रश्नोत्तरी](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/) ## समीक्षा और आत्म अध्ययन [इस NLP लर्निंग पाथ](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) को लें और भाषण और टेक्स्ट-भारी मॉडल बनाने के लिए प्रयास करने के लिए उपकरण खोजें। ## असाइनमेंट [NLTK](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/hi/6-NLP/4-Hotel-Reviews-1/assignment.md deleted file mode 100644 index 58bf4dd4..00000000 --- a/translations/hi/6-NLP/4-Hotel-Reviews-1/assignment.md +++ /dev/null @@ -1,8 +0,0 @@ -# NLTK - -## निर्देश - -NLTK एक प्रसिद्ध लाइब्रेरी है जिसका उपयोग कम्प्यूटेशनल लिंग्विस्टिक्स और NLP में किया जाता है। इस अवसर का लाभ उठाकर '[NLTK किताब](https://www.nltk.org/book/)' को पढ़ें और इसके अभ्यासों को आजमाएं। इस बिना ग्रेड वाली असाइनमेंट में, आप इस लाइब्रेरी को और अधिक गहराई से जान पाएंगे। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/hi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md deleted file mode 100644 index f8ed09fd..00000000 --- a/translations/hi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/hi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md deleted file mode 100644 index 9acee712..00000000 --- a/translations/hi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/5-Hotel-Reviews-2/README.md b/translations/hi/6-NLP/5-Hotel-Reviews-2/README.md deleted file mode 100644 index 1850399a..00000000 --- a/translations/hi/6-NLP/5-Hotel-Reviews-2/README.md +++ /dev/null @@ -1,377 +0,0 @@ -# होटल समीक्षा के साथ भावना विश्लेषण - -अब जब आपने डेटासेट का विस्तार से अन्वेषण कर लिया है, तो समय आ गया है कि आप कॉलम को फ़िल्टर करें और फिर होटल के बारे में नई अंतर्दृष्टि प्राप्त करने के लिए एनएलपी तकनीकों का उपयोग करें। -## [पूर्व-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/) - -### फ़िल्टरिंग और भावना विश्लेषण संचालन - -जैसा कि आपने शायद देखा होगा, डेटासेट में कुछ समस्याएं हैं। कुछ कॉलम बेकार की जानकारी से भरे हुए हैं, जबकि अन्य गलत लगते हैं। अगर वे सही भी हैं, तो यह स्पष्ट नहीं है कि उनकी गणना कैसे की गई थी, और आपके अपने गणनाओं द्वारा उत्तरों को स्वतंत्र रूप से सत्यापित नहीं किया जा सकता। - -## अभ्यास: थोड़ा और डेटा प्रोसेसिंग - -डेटा को थोड़ा और साफ करें। उन कॉलम को जोड़ें जो बाद में उपयोगी होंगे, अन्य कॉलम में मान बदलें, और कुछ कॉलम को पूरी तरह से हटा दें। - -1. प्रारंभिक कॉलम प्रोसेसिंग - - 1. `lat` और `lng` को हटा दें - - 2. `Hotel_Address` मानों को निम्नलिखित मानों के साथ बदलें (यदि पता शहर और देश का नाम शामिल करता है, तो इसे केवल शहर और देश में बदलें)। - - ये डेटासेट में केवल शहर और देश हैं: - - एम्स्टर्डम, नीदरलैंड्स - - बार्सिलोना, स्पेन - - लंदन, यूनाइटेड किंगडम - - मिलान, इटली - - पेरिस, फ्रांस - - वियना, ऑस्ट्रिया - - ```python - def replace_address(row): - if "Netherlands" in row["Hotel_Address"]: - return "Amsterdam, Netherlands" - elif "Barcelona" in row["Hotel_Address"]: - return "Barcelona, Spain" - elif "United Kingdom" in row["Hotel_Address"]: - return "London, United Kingdom" - elif "Milan" in row["Hotel_Address"]: - return "Milan, Italy" - elif "France" in row["Hotel_Address"]: - return "Paris, France" - elif "Vienna" in row["Hotel_Address"]: - return "Vienna, Austria" - - # Replace all the addresses with a shortened, more useful form - df["Hotel_Address"] = df.apply(replace_address, axis = 1) - # The sum of the value_counts() should add up to the total number of reviews - print(df["Hotel_Address"].value_counts()) - ``` - - अब आप देश स्तर का डेटा क्वेरी कर सकते हैं: - - ```python - display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) - ``` - - | होटल_पता | होटल_नाम | - | :--------------------- | :--------: | - | एम्स्टर्डम, नीदरलैंड्स | 105 | - | बार्सिलोना, स्पेन | 211 | - | लंदन, यूनाइटेड किंगडम | 400 | - | मिलान, इटली | 162 | - | पेरिस, फ्रांस | 458 | - | वियना, ऑस्ट्रिया | 158 | - -2. होटल मेटा-रिव्यू कॉलम प्रोसेस करें - - 1. `Additional_Number_of_Scoring` - - 1. Replace `Total_Number_of_Reviews` with the total number of reviews for that hotel that are actually in the dataset - - 1. Replace `Average_Score` को हमारे अपने गणना किए गए स्कोर के साथ हटा दें - - ```python - # Drop `Additional_Number_of_Scoring` - df.drop(["Additional_Number_of_Scoring"], axis = 1, inplace=True) - # Replace `Total_Number_of_Reviews` and `Average_Score` with our own calculated values - df.Total_Number_of_Reviews = df.groupby('Hotel_Name').transform('count') - df.Average_Score = round(df.groupby('Hotel_Name').Reviewer_Score.transform('mean'), 1) - ``` - -3. समीक्षा कॉलम प्रोसेस करें - - 1. `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` and `days_since_review` - - 2. Keep `Reviewer_Score`, `Negative_Review`, and `Positive_Review` as they are, - - 3. Keep `Tags` for now - - - We'll be doing some additional filtering operations on the tags in the next section and then tags will be dropped - -4. Process reviewer columns - - 1. Drop `Total_Number_of_Reviews_Reviewer_Has_Given` - - 2. Keep `Reviewer_Nationality` - -### Tag columns - -The `Tag` column is problematic as it is a list (in text form) stored in the column. Unfortunately the order and number of sub sections in this column are not always the same. It's hard for a human to identify the correct phrases to be interested in, because there are 515,000 rows, and 1427 hotels, and each has slightly different options a reviewer could choose. This is where NLP shines. You can scan the text and find the most common phrases, and count them. - -Unfortunately, we are not interested in single words, but multi-word phrases (e.g. *Business trip*). Running a multi-word frequency distribution algorithm on that much data (6762646 words) could take an extraordinary amount of time, but without looking at the data, it would seem that is a necessary expense. This is where exploratory data analysis comes in useful, because you've seen a sample of the tags such as `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']` को हटा दें, आप पूछ सकते हैं कि क्या प्रोसेसिंग को काफी हद तक कम करना संभव है। सौभाग्य से, यह संभव है - लेकिन पहले आपको यह सुनिश्चित करने के लिए कुछ कदम उठाने की आवश्यकता है कि कौन से टैग प्रासंगिक हैं। - -### टैग फ़िल्टरिंग - -याद रखें कि डेटासेट का लक्ष्य भावना और कॉलम जोड़ना है जो आपको सर्वश्रेष्ठ होटल चुनने में मदद करेगा (अपने लिए या शायद किसी क्लाइंट के लिए जो आपसे होटल सिफारिश बॉट बनाने का काम सौंप रहा है)। आपको खुद से पूछना होगा कि क्या टैग अंतिम डेटासेट में उपयोगी हैं या नहीं। यहां एक व्याख्या है (यदि आपको डेटासेट अन्य कारणों से चाहिए तो विभिन्न टैग चयन में रह सकते हैं/नहीं रह सकते): - -1. यात्रा का प्रकार प्रासंगिक है, और इसे रहना चाहिए -2. अतिथि समूह का प्रकार महत्वपूर्ण है, और इसे रहना चाहिए -3. अतिथि ने जिस प्रकार के कमरे, सुइट या स्टूडियो में ठहराव किया वह अप्रासंगिक है (सभी होटलों में मूल रूप से समान कमरे होते हैं) -4. समीक्षा जिस डिवाइस से सबमिट की गई वह अप्रासंगिक है -5. समीक्षक ने कितनी रातें ठहराई यह प्रासंगिक हो सकता है अगर आप मानते हैं कि लंबे ठहराव का मतलब है कि उन्हें होटल अधिक पसंद आया, लेकिन यह एक खिंचाव है, और शायद अप्रासंगिक - -संक्षेप में, **2 प्रकार के टैग रखें और अन्य को हटा दें**। - -पहले, आप टैग की गिनती तब तक नहीं करना चाहेंगे जब तक वे बेहतर प्रारूप में न हों, इसलिए इसका मतलब है कोष्ठकों और उद्धरणों को हटाना। आप इसे कई तरीकों से कर सकते हैं, लेकिन आप सबसे तेज़ तरीका चाहते हैं क्योंकि बहुत सारा डेटा प्रोसेस करने में बहुत समय लग सकता है। सौभाग्य से, पांडा के पास इन चरणों में से प्रत्येक को करने का एक आसान तरीका है। - -```Python -# Remove opening and closing brackets -df.Tags = df.Tags.str.strip("[']") -# remove all quotes too -df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) -``` - -प्रत्येक टैग कुछ इस प्रकार बन जाता है: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. - -Next we find a problem. Some reviews, or rows, have 5 columns, some 3, some 6. This is a result of how the dataset was created, and hard to fix. You want to get a frequency count of each phrase, but they are in different order in each review, so the count might be off, and a hotel might not get a tag assigned to it that it deserved. - -Instead you will use the different order to our advantage, because each tag is multi-word but also separated by a comma! The simplest way to do this is to create 6 temporary columns with each tag inserted in to the column corresponding to its order in the tag. You can then merge the 6 columns into one big column and run the `value_counts()` method on the resulting column. Printing that out, you'll see there was 2428 unique tags. Here is a small sample: - -| Tag | Count | -| ------------------------------ | ------ | -| Leisure trip | 417778 | -| Submitted from a mobile device | 307640 | -| Couple | 252294 | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Solo traveler | 108545 | -| Stayed 3 nights | 95821 | -| Business trip | 82939 | -| Group | 65392 | -| Family with young children | 61015 | -| Stayed 4 nights | 47817 | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Family with older children | 26349 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Stayed 5 nights | 20845 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | -| 2 rooms | 12393 | - -Some of the common tags like `Submitted from a mobile device` are of no use to us, so it might be a smart thing to remove them before counting phrase occurrence, but it is such a fast operation you can leave them in and ignore them. - -### Removing the length of stay tags - -Removing these tags is step 1, it reduces the total number of tags to be considered slightly. Note you do not remove them from the dataset, just choose to remove them from consideration as values to count/keep in the reviews dataset. - -| Length of stay | Count | -| ---------------- | ------ | -| Stayed 1 night | 193645 | -| Stayed 2 nights | 133937 | -| Stayed 3 nights | 95821 | -| Stayed 4 nights | 47817 | -| Stayed 5 nights | 20845 | -| Stayed 6 nights | 9776 | -| Stayed 7 nights | 7399 | -| Stayed 8 nights | 2502 | -| Stayed 9 nights | 1293 | -| ... | ... | - -There are a huge variety of rooms, suites, studios, apartments and so on. They all mean roughly the same thing and not relevant to you, so remove them from consideration. - -| Type of room | Count | -| ----------------------------- | ----- | -| Double Room | 35207 | -| Standard Double Room | 32248 | -| Superior Double Room | 31393 | -| Deluxe Double Room | 24823 | -| Double or Twin Room | 22393 | -| Standard Double or Twin Room | 17483 | -| Classic Double Room | 16989 | -| Superior Double or Twin Room | 13570 | - -Finally, and this is delightful (because it didn't take much processing at all), you will be left with the following *useful* tags: - -| Tag | Count | -| --------------------------------------------- | ------ | -| Leisure trip | 417778 | -| Couple | 252294 | -| Solo traveler | 108545 | -| Business trip | 82939 | -| Group (combined with Travellers with friends) | 67535 | -| Family with young children | 61015 | -| Family with older children | 26349 | -| With a pet | 1405 | - -You could argue that `Travellers with friends` is the same as `Group` more or less, and that would be fair to combine the two as above. The code for identifying the correct tags is [the Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). - -The final step is to create new columns for each of these tags. Then, for every review row, if the `Tag` कॉलम नए कॉलम में से एक से मेल खाता है, तो 1 जोड़ें, यदि नहीं, तो 0 जोड़ें। अंतिम परिणाम यह होगा कि कितने समीक्षकों ने इस होटल को (कुल मिलाकर) व्यापार बनाम अवकाश के लिए चुना, या पालतू जानवर को लाने के लिए चुना, और यह होटल की सिफारिश करते समय उपयोगी जानकारी है। - -```python -# Process the Tags into new columns -# The file Hotel_Reviews_Tags.py, identifies the most important tags -# Leisure trip, Couple, Solo traveler, Business trip, Group combined with Travelers with friends, -# Family with young children, Family with older children, With a pet -df["Leisure_trip"] = df.Tags.apply(lambda tag: 1 if "Leisure trip" in tag else 0) -df["Couple"] = df.Tags.apply(lambda tag: 1 if "Couple" in tag else 0) -df["Solo_traveler"] = df.Tags.apply(lambda tag: 1 if "Solo traveler" in tag else 0) -df["Business_trip"] = df.Tags.apply(lambda tag: 1 if "Business trip" in tag else 0) -df["Group"] = df.Tags.apply(lambda tag: 1 if "Group" in tag or "Travelers with friends" in tag else 0) -df["Family_with_young_children"] = df.Tags.apply(lambda tag: 1 if "Family with young children" in tag else 0) -df["Family_with_older_children"] = df.Tags.apply(lambda tag: 1 if "Family with older children" in tag else 0) -df["With_a_pet"] = df.Tags.apply(lambda tag: 1 if "With a pet" in tag else 0) - -``` - -### अपनी फ़ाइल सहेजें - -अंत में, अब जैसा है वैसा ही डेटासेट एक नए नाम से सहेजें। - -```python -df.drop(["Review_Total_Negative_Word_Counts", "Review_Total_Positive_Word_Counts", "days_since_review", "Total_Number_of_Reviews_Reviewer_Has_Given"], axis = 1, inplace=True) - -# Saving new data file with calculated columns -print("Saving results to Hotel_Reviews_Filtered.csv") -df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) -``` - -## भावना विश्लेषण संचालन - -इस अंतिम अनुभाग में, आप समीक्षा कॉलम पर भावना विश्लेषण लागू करेंगे और परिणामों को एक डेटासेट में सहेजेंगे। - -## अभ्यास: फ़िल्टर किया गया डेटा लोड और सहेजें - -ध्यान दें कि अब आप वह फ़िल्टर किया गया डेटासेट लोड कर रहे हैं जिसे पिछले अनुभाग में सहेजा गया था, **मूल** डेटासेट नहीं। - -```python -import time -import pandas as pd -import nltk as nltk -from nltk.corpus import stopwords -from nltk.sentiment.vader import SentimentIntensityAnalyzer -nltk.download('vader_lexicon') - -# Load the filtered hotel reviews from CSV -df = pd.read_csv('../../data/Hotel_Reviews_Filtered.csv') - -# You code will be added here - - -# Finally remember to save the hotel reviews with new NLP data added -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) -``` - -### स्टॉप शब्द हटाना - -यदि आप नकारात्मक और सकारात्मक समीक्षा कॉलम पर भावना विश्लेषण चलाते हैं, तो इसमें बहुत समय लग सकता है। एक शक्तिशाली परीक्षण लैपटॉप पर तेज़ सीपीयू के साथ परीक्षण किया गया, इसमें 12 - 14 मिनट लगे, जो भावना पुस्तकालय पर निर्भर करता है। यह (सापेक्ष) लंबा समय है, इसलिए यह जांचने योग्य है कि क्या इसे तेज किया जा सकता है। - -स्टॉप शब्दों, या सामान्य अंग्रेजी शब्दों को हटाना जो वाक्य की भावना को नहीं बदलते, पहला कदम है। उन्हें हटाकर, भावना विश्लेषण को तेज़ी से चलाना चाहिए, लेकिन कम सटीक नहीं होना चाहिए (क्योंकि स्टॉप शब्द भावना को प्रभावित नहीं करते, लेकिन वे विश्लेषण को धीमा कर देते हैं)। - -सबसे लंबी नकारात्मक समीक्षा 395 शब्दों की थी, लेकिन स्टॉप शब्दों को हटाने के बाद, यह 195 शब्दों की हो गई। - -स्टॉप शब्दों को हटाना भी एक तेज़ ऑपरेशन है, 515,000 पंक्तियों में से 2 समीक्षा कॉलम से स्टॉप शब्दों को हटाने में परीक्षण डिवाइस पर 3.3 सेकंड लगे। आपके लिए इसमें थोड़ा अधिक या कम समय लग सकता है, जो आपके डिवाइस के सीपीयू गति, रैम, एसएसडी होने या न होने और कुछ अन्य कारकों पर निर्भर करता है। ऑपरेशन की सापेक्ष कम समय की वजह से अगर यह भावना विश्लेषण समय में सुधार करता है, तो यह करने लायक है। - -```python -from nltk.corpus import stopwords - -# Load the hotel reviews from CSV -df = pd.read_csv("../../data/Hotel_Reviews_Filtered.csv") - -# Remove stop words - can be slow for a lot of text! -# Ryan Han (ryanxjhan on Kaggle) has a great post measuring performance of different stop words removal approaches -# https://www.kaggle.com/ryanxjhan/fast-stop-words-removal # using the approach that Ryan recommends -start = time.time() -cache = set(stopwords.words("english")) -def remove_stopwords(review): - text = " ".join([word for word in review.split() if word not in cache]) - return text - -# Remove the stop words from both columns -df.Negative_Review = df.Negative_Review.apply(remove_stopwords) -df.Positive_Review = df.Positive_Review.apply(remove_stopwords) -``` - -### भावना विश्लेषण करना - -अब आपको नकारात्मक और सकारात्मक समीक्षा कॉलम के लिए भावना विश्लेषण की गणना करनी चाहिए, और परिणाम को 2 नए कॉलम में सहेजना चाहिए। भावना की परीक्षा यह होगी कि इसे समीक्षक के स्कोर से तुलना की जाए। उदाहरण के लिए, यदि भावना विश्लेषण नकारात्मक समीक्षा को 1 (अत्यधिक सकारात्मक भावना) और सकारात्मक समीक्षा भावना को 1 मानता है, लेकिन समीक्षक ने होटल को सबसे कम संभव स्कोर दिया, तो या तो समीक्षा पाठ स्कोर से मेल नहीं खाता, या भावना विश्लेषक भावना को सही से पहचान नहीं पाया। आपको उम्मीद करनी चाहिए कि कुछ भावना स्कोर पूरी तरह से गलत होंगे, और अक्सर यह समझाने योग्य होगा, जैसे कि समीक्षा अत्यधिक व्यंग्यात्मक हो सकती है "बेशक मुझे बिना हीटिंग वाले कमरे में सोना बहुत पसंद आया" और भावना विश्लेषक सोचता है कि यह सकारात्मक भावना है, जबकि एक इंसान इसे पढ़कर जानता होगा कि यह व्यंग्य है। - -एनएलटीके विभिन्न भावना विश्लेषक प्रदान करता है, और आप उन्हें बदल सकते हैं और देख सकते हैं कि भावना अधिक या कम सटीक है। यहां VADER भावना विश्लेषण का उपयोग किया गया है। - -> हुट्टो, सी.जे. और गिल्बर्ट, ई.ई. (2014)। VADER: सोशल मीडिया टेक्स्ट के भावना विश्लेषण के लिए एक सरल नियम-आधारित मॉडल। आठवीं अंतर्राष्ट्रीय सम्मेलन पर वेबलॉग्स और सोशल मीडिया (आईसीडब्ल्यूएसएम-14)। एन आर्बर, एमआई, जून 2014। - -```python -from nltk.sentiment.vader import SentimentIntensityAnalyzer - -# Create the vader sentiment analyser (there are others in NLTK you can try too) -vader_sentiment = SentimentIntensityAnalyzer() -# Hutto, C.J. & Gilbert, E.E. (2014). VADER: A Parsimonious Rule-based Model for Sentiment Analysis of Social Media Text. Eighth International Conference on Weblogs and Social Media (ICWSM-14). Ann Arbor, MI, June 2014. - -# There are 3 possibilities of input for a review: -# It could be "No Negative", in which case, return 0 -# It could be "No Positive", in which case, return 0 -# It could be a review, in which case calculate the sentiment -def calc_sentiment(review): - if review == "No Negative" or review == "No Positive": - return 0 - return vader_sentiment.polarity_scores(review)["compound"] -``` - -बाद में अपने प्रोग्राम में जब आप भावना की गणना करने के लिए तैयार हों, तो आप इसे प्रत्येक समीक्षा पर इस प्रकार लागू कर सकते हैं: - -```python -# Add a negative sentiment and positive sentiment column -print("Calculating sentiment columns for both positive and negative reviews") -start = time.time() -df["Negative_Sentiment"] = df.Negative_Review.apply(calc_sentiment) -df["Positive_Sentiment"] = df.Positive_Review.apply(calc_sentiment) -end = time.time() -print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") -``` - -यह मेरे कंप्यूटर पर लगभग 120 सेकंड लेता है, लेकिन यह प्रत्येक कंप्यूटर पर भिन्न होगा। यदि आप परिणामों को प्रिंट करना चाहते हैं और देखना चाहते हैं कि क्या भावना समीक्षा से मेल खाती है: - -```python -df = df.sort_values(by=["Negative_Sentiment"], ascending=True) -print(df[["Negative_Review", "Negative_Sentiment"]]) -df = df.sort_values(by=["Positive_Sentiment"], ascending=True) -print(df[["Positive_Review", "Positive_Sentiment"]]) -``` - -फाइल का उपयोग करने से पहले आखिरी चीज जो करनी है, वह इसे सहेजना है! आपको अपने सभी नए कॉलम को फिर से क्रमबद्ध करने पर भी विचार करना चाहिए ताकि वे काम करने में आसान हों (एक इंसान के लिए, यह एक सौंदर्य परिवर्तन है)। - -```python -# Reorder the columns (This is cosmetic, but to make it easier to explore the data later) -df = df.reindex(["Hotel_Name", "Hotel_Address", "Total_Number_of_Reviews", "Average_Score", "Reviewer_Score", "Negative_Sentiment", "Positive_Sentiment", "Reviewer_Nationality", "Leisure_trip", "Couple", "Solo_traveler", "Business_trip", "Group", "Family_with_young_children", "Family_with_older_children", "With_a_pet", "Negative_Review", "Positive_Review"], axis=1) - -print("Saving results to Hotel_Reviews_NLP.csv") -df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) -``` - -आपको [विश्लेषण नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) के लिए पूरा कोड चलाना चाहिए (जैसा कि आपने [अपनी फ़िल्टरिंग नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) चलाने के बाद Hotel_Reviews_Filtered.csv फाइल बनाने के लिए किया था)। - -समीक्षा करने के लिए, चरण हैं: - -1. मूल डेटासेट फाइल **Hotel_Reviews.csv** को पिछले पाठ में [एक्सप्लोरर नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) के साथ अन्वेषण किया गया है -2. Hotel_Reviews.csv को [फ़िल्टरिंग नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) द्वारा फ़िल्टर किया गया है जिसके परिणामस्वरूप **Hotel_Reviews_Filtered.csv** बनता है -3. Hotel_Reviews_Filtered.csv को [भावना विश्लेषण नोटबुक](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) द्वारा प्रोसेस किया गया है जिसके परिणामस्वरूप **Hotel_Reviews_NLP.csv** बनता है -4. नीचे दिए गए एनएलपी चैलेंज में Hotel_Reviews_NLP.csv का उपयोग करें - -### निष्कर्ष - -जब आपने शुरू किया, तो आपके पास कॉलम और डेटा के साथ एक डेटासेट था, लेकिन इसका सारा हिस्सा सत्यापित या उपयोग नहीं किया जा सकता था। आपने डेटा का अन्वेषण किया, जो आवश्यक नहीं था उसे फ़िल्टर किया, टैग को उपयोगी चीजों में परिवर्तित किया, अपने औसत की गणना की, कुछ भावना कॉलम जोड़े और उम्मीद है, प्राकृतिक पाठ प्रोसेसिंग के बारे में कुछ रोचक चीजें सीखी हैं। - -## [पोस्ट-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) - -## चुनौती - -अब जब आपने अपने डेटासेट का भावना के लिए विश्लेषण कर लिया है, तो देखें कि क्या आप इस पाठ्यक्रम में सीखी गई रणनीतियों (शायद क्लस्टरिंग?) का उपयोग करके भावना के आसपास पैटर्न निर्धारित कर सकते हैं। - -## समीक्षा और स्व-अध्ययन - -[इस लर्न मॉड्यूल](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) को लें ताकि आप अधिक जान सकें और पाठ में भावना का पता लगाने के लिए विभिन्न उपकरणों का उपयोग कर सकें। -## असाइनमेंट - -[एक अलग डेटासेट आज़माएं](assignment.md) - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/hi/6-NLP/5-Hotel-Reviews-2/assignment.md deleted file mode 100644 index c7567d89..00000000 --- a/translations/hi/6-NLP/5-Hotel-Reviews-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक अलग डेटासेट आज़माएं - -## निर्देश - -अब जब आपने टेक्स्ट को सेंटिमेंट असाइन करने के लिए NLTK का उपयोग करना सीख लिया है, तो एक अलग डेटासेट आज़माएं। आपको शायद इसके चारों ओर कुछ डेटा प्रोसेसिंग करनी पड़ेगी, इसलिए एक नोटबुक बनाएं और अपनी सोच प्रक्रिया को दस्तावेज करें। आपको क्या पता चलता है? - -## रूब्रिक - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| ------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | -| | एक पूरी नोटबुक और डेटासेट प्रस्तुत किए गए हैं, जिनमें अच्छी तरह से दस्तावेजित सेल्स बताते हैं कि सेंटिमेंट कैसे असाइन किया गया है | नोटबुक में अच्छे स्पष्टीकरण गायब हैं | नोटबुक में खामियां हैं | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/hi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md deleted file mode 100644 index 69521982..00000000 --- a/translations/hi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/hi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md deleted file mode 100644 index 01b9baf6..00000000 --- a/translations/hi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/README.md b/translations/hi/6-NLP/README.md deleted file mode 100644 index d6baa5ae..00000000 --- a/translations/hi/6-NLP/README.md +++ /dev/null @@ -1,27 +0,0 @@ -# प्राकृतिक भाषा प्रसंस्करण के साथ शुरुआत - -प्राकृतिक भाषा प्रसंस्करण (NLP) एक कंप्यूटर प्रोग्राम की क्षमता है जो मानव भाषा को समझता है जैसे कि वह बोली और लिखी जाती है -- इसे प्राकृतिक भाषा कहा जाता है। यह कृत्रिम बुद्धिमत्ता (AI) का एक घटक है। NLP 50 से अधिक वर्षों से अस्तित्व में है और इसका जड़ें भाषाविज्ञान के क्षेत्र में हैं। पूरा क्षेत्र मशीनों को मानव भाषा को समझने और संसाधित करने में मदद करने पर केंद्रित है। इसका उपयोग तब वर्तनी जांच या मशीन अनुवाद जैसे कार्यों को करने के लिए किया जा सकता है। इसमें चिकित्सा अनुसंधान, खोज इंजन और व्यापार बुद्धिमत्ता सहित कई क्षेत्रों में वास्तविक दुनिया के अनुप्रयोगों की विविधता है। - -## क्षेत्रीय विषय: यूरोपीय भाषाएं और साहित्य और यूरोप के रोमांटिक होटल ❤️ - -इस पाठ्यक्रम के इस खंड में, आपको मशीन लर्निंग के सबसे व्यापक उपयोगों में से एक से परिचित कराया जाएगा: प्राकृतिक भाषा प्रसंस्करण (NLP)। कंप्यूटेशनल भाषाविज्ञान से व्युत्पन्न, कृत्रिम बुद्धिमत्ता की यह श्रेणी आवाज़ या पाठ्य संचार के माध्यम से मनुष्यों और मशीनों के बीच पुल है। - -इन पाठों में हम छोटे संवादात्मक बॉट्स बनाकर NLP की मूल बातें सीखेंगे ताकि यह समझ सकें कि मशीन लर्निंग इन वार्तालापों को और अधिक 'स्मार्ट' बनाने में कैसे मदद करती है। आप समय में पीछे की यात्रा करेंगे, जेन ऑस्टेन के क्लासिक उपन्यास, **प्राइड एंड प्रेजुडिस**, जो 1813 में प्रकाशित हुआ था, के एलिजाबेथ बेनेट और मिस्टर डार्सी से बातचीत करेंगे। फिर, आप होटल समीक्षाओं के माध्यम से भावना विश्लेषण के बारे में सीखकर अपने ज्ञान को और बढ़ाएंगे। - -![Pride and Prejudice book and tea](../../../translated_images/p&p.279f1c49ecd889419e4ce6206525e9aa30d32a976955cd24daa636c361c6391f.hi.jpg) -> Photo by Elaine Howlin on Unsplash - -## पाठ - -1. [प्राकृतिक भाषा प्रसंस्करण का परिचय](1-Introduction-to-NLP/README.md) -2. [सामान्य NLP कार्य और तकनीकें](2-Tasks/README.md) -3. [मशीन लर्निंग के साथ अनुवाद और भावना विश्लेषण](3-Translation-Sentiment/README.md) -4. [अपने डेटा की तैयारी](4-Hotel-Reviews-1/README.md) -5. [भावना विश्लेषण के लिए NLTK](5-Hotel-Reviews-2/README.md) - -## श्रेय - -ये प्राकृतिक भाषा प्रसंस्करण पाठ ☕ के साथ [Stephen Howell](https://twitter.com/Howell_MSFT) द्वारा लिखे गए थे। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/6-NLP/data/README.md b/translations/hi/6-NLP/data/README.md deleted file mode 100644 index 2d89e051..00000000 --- a/translations/hi/6-NLP/data/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/1-Introduction/README.md b/translations/hi/7-TimeSeries/1-Introduction/README.md deleted file mode 100644 index 4e73881c..00000000 --- a/translations/hi/7-TimeSeries/1-Introduction/README.md +++ /dev/null @@ -1,188 +0,0 @@ -# टाइम सीरीज़ पूर्वानुमान का परिचय - -![टाइम सीरीज़ का स्केच नोट में सारांश](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.hi.png) - -> स्केच नोट [Tomomi Imura](https://www.twitter.com/girlie_mac) द्वारा - -इस पाठ और अगले पाठ में, आप टाइम सीरीज़ पूर्वानुमान के बारे में थोड़ा जानेंगे, जो एक एमएल वैज्ञानिक के शस्त्रागार का एक दिलचस्प और मूल्यवान हिस्सा है, जो अन्य विषयों की तुलना में थोड़ा कम जाना जाता है। टाइम सीरीज़ पूर्वानुमान एक प्रकार का 'क्रिस्टल बॉल' है: जैसे मूल्य जैसी चर के पिछले प्रदर्शन के आधार पर, आप इसके भविष्य के संभावित मूल्य की भविष्यवाणी कर सकते हैं। - -[![टाइम सीरीज़ पूर्वानुमान का परिचय](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "टाइम सीरीज़ पूर्वानुमान का परिचय") - -> 🎥 टाइम सीरीज़ पूर्वानुमान के बारे में वीडियो के लिए ऊपर की छवि पर क्लिक करें - -## [पूर्व-व्याख्यान प्रश्नोत्तरी](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/41/) - -यह एक उपयोगी और दिलचस्प क्षेत्र है जिसका व्यवसाय में वास्तविक मूल्य है, इसकी मूल्य निर्धारण, इन्वेंटरी और आपूर्ति श्रृंखला समस्याओं के प्रत्यक्ष अनुप्रयोग को देखते हुए। जबकि गहन सीखने की तकनीकों का उपयोग भविष्य के प्रदर्शन को बेहतर ढंग से पूर्वानुमान लगाने के लिए अधिक अंतर्दृष्टि प्राप्त करने के लिए किया जाने लगा है, टाइम सीरीज़ पूर्वानुमान एक ऐसा क्षेत्र है जो क्लासिक एमएल तकनीकों द्वारा बहुत सूचित है। - -> पेन स्टेट का उपयोगी टाइम सीरीज़ पाठ्यक्रम [यहाँ](https://online.stat.psu.edu/stat510/lesson/1) पाया जा सकता है - -## परिचय - -मान लीजिए कि आप स्मार्ट पार्किंग मीटर की एक श्रृंखला बनाए रखते हैं जो समय के साथ कितनी बार उपयोग किए जाते हैं और कितनी देर तक उपयोग किए जाते हैं, इसका डेटा प्रदान करते हैं। - -> क्या होगा यदि आप मीटर के पिछले प्रदर्शन के आधार पर आपूर्ति और मांग के नियमों के अनुसार इसके भविष्य के मूल्य की भविष्यवाणी कर सकते हैं? - -अपने लक्ष्य को प्राप्त करने के लिए कब कार्य करना है, इसका सटीक पूर्वानुमान लगाना एक चुनौती है जिसे टाइम सीरीज़ पूर्वानुमान द्वारा निपटाया जा सकता है। व्यस्त समय में जब लोग पार्किंग स्थान की तलाश कर रहे हों तो अधिक शुल्क लेना लोगों को खुश नहीं करेगा, लेकिन यह सड़कों की सफाई के लिए राजस्व उत्पन्न करने का एक निश्चित तरीका होगा! - -आइए टाइम सीरीज़ एल्गोरिदम के कुछ प्रकारों का अन्वेषण करें और कुछ डेटा को साफ और तैयार करने के लिए एक नोटबुक शुरू करें। जिस डेटा का आप विश्लेषण करेंगे वह GEFCom2014 पूर्वानुमान प्रतियोगिता से लिया गया है। इसमें 2012 और 2014 के बीच 3 वर्षों के प्रति घंटे के बिजली लोड और तापमान के मान शामिल हैं। बिजली लोड और तापमान के ऐतिहासिक पैटर्न को देखते हुए, आप बिजली लोड के भविष्य के मानों की भविष्यवाणी कर सकते हैं। - -इस उदाहरण में, आप केवल ऐतिहासिक लोड डेटा का उपयोग करके एक समय कदम आगे का पूर्वानुमान लगाना सीखेंगे। हालाँकि, शुरू करने से पहले, यह समझना उपयोगी है कि पर्दे के पीछे क्या चल रहा है। - -## कुछ परिभाषाएँ - -जब 'टाइम सीरीज़' शब्द का सामना करना पड़ता है तो आपको इसे कई अलग-अलग संदर्भों में समझने की आवश्यकता होती है। - -🎓 **टाइम सीरीज़** - -गणित में, "एक टाइम सीरीज़ समय क्रम में अनुक्रमित (या सूचीबद्ध या ग्राफ़) डेटा बिंदुओं की एक श्रृंखला है। सबसे सामान्यतः, एक टाइम सीरीज़ एक अनुक्रम है जिसे समय में समान अंतराल पर लिया गया है।" टाइम सीरीज़ का एक उदाहरण [डॉव जोन्स इंडस्ट्रियल एवरेज](https://wikipedia.org/wiki/Time_series) का दैनिक समापन मूल्य है। टाइम सीरीज़ प्लॉट्स और सांख्यिकीय मॉडलिंग का उपयोग अक्सर सिग्नल प्रोसेसिंग, मौसम पूर्वानुमान, भूकंप पूर्वानुमान और अन्य क्षेत्रों में होता है जहाँ घटनाएँ होती हैं और डेटा बिंदुओं को समय के साथ प्लॉट किया जा सकता है। - -🎓 **टाइम सीरीज़ विश्लेषण** - -टाइम सीरीज़ विश्लेषण, उपर्युक्त टाइम सीरीज़ डेटा का विश्लेषण है। टाइम सीरीज़ डेटा विभिन्न रूपों में हो सकता है, जिसमें 'अवरोधित टाइम सीरीज़' भी शामिल है जो किसी अवरोधक घटना से पहले और बाद में टाइम सीरीज़ के विकास में पैटर्न का पता लगाता है। टाइम सीरीज़ के लिए आवश्यक विश्लेषण, डेटा की प्रकृति पर निर्भर करता है। टाइम सीरीज़ डेटा स्वयं संख्याओं या वर्णों की श्रृंखला के रूप में हो सकता है। - -जो विश्लेषण किया जाना है, उसमें विभिन्न विधियाँ शामिल हैं, जिनमें आवृत्ति-डोमेन और समय-डोमेन, रैखिक और गैर-रैखिक, और अधिक शामिल हैं। इस प्रकार के डेटा का विश्लेषण करने के कई तरीकों के बारे में [अधिक जानें](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm)। - -🎓 **टाइम सीरीज़ पूर्वानुमान** - -टाइम सीरीज़ पूर्वानुमान एक मॉडल का उपयोग करके भविष्य के मानों की भविष्यवाणी करना है जो पहले एकत्रित डेटा द्वारा प्रदर्शित पैटर्न पर आधारित है जैसा कि अतीत में हुआ था। जबकि समय सूचकांक को x चर के रूप में प्लॉट पर उपयोग करके टाइम सीरीज़ डेटा का पता लगाने के लिए प्रतिगमन मॉडल का उपयोग करना संभव है, ऐसे डेटा का विश्लेषण विशेष प्रकार के मॉडलों का उपयोग करके सबसे अच्छा किया जाता है। - -टाइम सीरीज़ डेटा क्रमबद्ध टिप्पणियों की एक सूची है, जो डेटा के विपरीत है जिसे रैखिक प्रतिगमन द्वारा विश्लेषण किया जा सकता है। सबसे सामान्य एक एआरआईएमए है, एक संक्षिप्त नाम जो "ऑटोरेग्रेसिव इंटीग्रेटेड मूविंग एवरेज" के लिए खड़ा है। - -[एआरआईएमए मॉडल](https://online.stat.psu.edu/stat510/lesson/1/1.1) "श्रृंखला के वर्तमान मूल्य को पिछले मूल्यों और पिछले पूर्वानुमान त्रुटियों से संबंधित करते हैं।" वे समय-डोमेन डेटा का विश्लेषण करने के लिए सबसे उपयुक्त हैं, जहाँ डेटा समय के साथ क्रमबद्ध होता है। - -> एआरआईएमए मॉडलों के कई प्रकार हैं, जिनके बारे में आप [यहाँ](https://people.duke.edu/~rnau/411arim.htm) और अगले पाठ में जान सकते हैं। - -अगले पाठ में, आप [एकवचनीय टाइम सीरीज़](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm) का उपयोग करके एक एआरआईएमए मॉडल बनाएंगे, जो एक चर पर केंद्रित है जो समय के साथ अपने मान को बदलता है। इस प्रकार के डेटा का एक उदाहरण [यह डेटासेट](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) है जो माउना लोआ वेधशाला में मासिक CO2 सांद्रता को रिकॉर्ड करता है: - -| CO2 | YearMonth | Year | Month | -| :----: | :-------: | :---: | :---: | -| 330.62 | 1975.04 | 1975 | 1 | -| 331.40 | 1975.13 | 1975 | 2 | -| 331.87 | 1975.21 | 1975 | 3 | -| 333.18 | 1975.29 | 1975 | 4 | -| 333.92 | 1975.38 | 1975 | 5 | -| 333.43 | 1975.46 | 1975 | 6 | -| 331.85 | 1975.54 | 1975 | 7 | -| 330.01 | 1975.63 | 1975 | 8 | -| 328.51 | 1975.71 | 1975 | 9 | -| 328.41 | 1975.79 | 1975 | 10 | -| 329.25 | 1975.88 | 1975 | 11 | -| 330.97 | 1975.96 | 1975 | 12 | - -✅ इस डेटासेट में वह चर पहचानें जो समय के साथ बदलता है - -## टाइम सीरीज़ डेटा की विशेषताएँ जिन पर विचार करना चाहिए - -जब आप टाइम सीरीज़ डेटा को देखते हैं, तो आप देख सकते हैं कि इसमें [कुछ विशेषताएँ](https://online.stat.psu.edu/stat510/lesson/1/1.1) हैं जिन्हें आपको बेहतर समझने के लिए ध्यान में रखना और कम करना होगा। यदि आप टाइम सीरीज़ डेटा को संभावित रूप से एक 'सिग्नल' प्रदान करने के रूप में मानते हैं जिसे आप विश्लेषण करना चाहते हैं, तो इन विशेषताओं को 'शोर' के रूप में माना जा सकता है। आपको अक्सर कुछ सांख्यिकीय तकनीकों का उपयोग करके इन विशेषताओं को ऑफसेट करके इस 'शोर' को कम करने की आवश्यकता होगी। - -यहाँ कुछ अवधारणाएँ दी गई हैं जिन्हें आपको टाइम सीरीज़ के साथ काम करने में सक्षम होने के लिए जानना चाहिए: - -🎓 **रुझान** - -रुझान को समय के साथ मापने योग्य वृद्धि और कमी के रूप में परिभाषित किया गया है। [और पढ़ें](https://machinelearningmastery.com/time-series-trends-in-python)। टाइम सीरीज़ के संदर्भ में, यह इस बारे में है कि आपके टाइम सीरीज़ से रुझानों का उपयोग कैसे करें और, यदि आवश्यक हो, उन्हें कैसे हटाएँ। - -🎓 **[मौसमी](https://machinelearningmastery.com/time-series-seasonality-with-python/)** - -मौसमी को आवधिक उतार-चढ़ाव के रूप में परिभाषित किया गया है, जैसे कि छुट्टियों की भीड़ जो बिक्री को प्रभावित कर सकती है, उदाहरण के लिए। डेटा में मौसमी को प्रदर्शित करने वाले विभिन्न प्रकार के प्लॉट्स को [देखें](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm)। - -🎓 **असामान्य मान** - -असामान्य मान मानक डेटा भिन्नता से बहुत दूर होते हैं। - -🎓 **दीर्घकालिक चक्र** - -मौसमी से स्वतंत्र, डेटा एक दीर्घकालिक चक्र प्रदर्शित कर सकता है जैसे कि एक आर्थिक मंदी जो एक वर्ष से अधिक समय तक चलती है। - -🎓 **स्थिर विचलन** - -समय के साथ, कुछ डेटा स्थिर उतार-चढ़ाव प्रदर्शित करते हैं, जैसे दिन और रात के प्रति ऊर्जा उपयोग। - -🎓 **अचानक परिवर्तन** - -डेटा अचानक परिवर्तन प्रदर्शित कर सकता है जिसे आगे के विश्लेषण की आवश्यकता हो सकती है। उदाहरण के लिए, COVID के कारण व्यवसायों के अचानक बंद होने से डेटा में परिवर्तन हुआ। - -✅ यहाँ एक [नमूना टाइम सीरीज़ प्लॉट](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) है जो कुछ वर्षों में दैनिक इन-गेम मुद्रा खर्च दिखाता है। क्या आप इस डेटा में ऊपर सूचीबद्ध किसी भी विशेषता की पहचान कर सकते हैं? - -![इन-गेम मुद्रा खर्च](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.hi.png) - -## व्यायाम - बिजली उपयोग डेटा के साथ शुरुआत करना - -आइए पिछले उपयोग को देखते हुए भविष्य के बिजली उपयोग की भविष्यवाणी करने के लिए एक टाइम सीरीज़ मॉडल बनाना शुरू करें। - -> इस उदाहरण में डेटा GEFCom2014 पूर्वानुमान प्रतियोगिता से लिया गया है। इसमें 2012 और 2014 के बीच 3 वर्षों के प्रति घंटे के बिजली लोड और तापमान के मान शामिल हैं। -> -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli और Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, जुलाई-सितंबर, 2016. - -1. इस पाठ के `working` फ़ोल्डर में, _notebook.ipynb_ फ़ाइल खोलें। डेटा लोड और विज़ुअलाइज़ करने में मदद करने के लिए लाइब्रेरी जोड़कर शुरू करें - - ```python - import os - import matplotlib.pyplot as plt - from common.utils import load_data - %matplotlib inline - ``` - - ध्यान दें, आप शामिल `common` folder which set up your environment and handle downloading the data. - -2. Next, examine the data as a dataframe calling `load_data()` and `head()` से फ़ाइलों का उपयोग कर रहे हैं: - - ```python - data_dir = './data' - energy = load_data(data_dir)[['load']] - energy.head() - ``` - - आप देख सकते हैं कि दो कॉलम हैं जो तिथि और लोड का प्रतिनिधित्व करते हैं: - - | | लोड | - | :-----------------: | :----: | - | 2012-01-01 00:00:00 | 2698.0 | - | 2012-01-01 01:00:00 | 2558.0 | - | 2012-01-01 02:00:00 | 2444.0 | - | 2012-01-01 03:00:00 | 2402.0 | - | 2012-01-01 04:00:00 | 2403.0 | - -3. अब, `plot()` को कॉल करके डेटा प्लॉट करें: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![ऊर्जा प्लॉट](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.hi.png) - -4. अब, जुलाई 2014 के पहले सप्ताह को `energy` in `[from date]: [to date]` पैटर्न को इनपुट के रूप में प्रदान करके प्लॉट करें: - - ```python - energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![जुलाई](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.hi.png) - - एक सुंदर प्लॉट! इन प्लॉट्स को देखें और देखें कि क्या आप ऊपर सूचीबद्ध किसी भी विशेषता की पहचान कर सकते हैं। डेटा को विज़ुअलाइज़ करके हम क्या निष्कर्ष निकाल सकते हैं? - -अगले पाठ में, आप कुछ पूर्वानुमान बनाने के लिए एक एआरआईएमए मॉडल बनाएंगे। - ---- - -## 🚀चुनौती - -उन सभी उद्योगों और पूछताछ के क्षेत्रों की एक सूची बनाएं जिनका आप सोच सकते हैं कि टाइम सीरीज़ पूर्वानुमान से लाभ होगा। क्या आप कला में इन तकनीकों के किसी अनुप्रयोग के बारे में सोच सकते हैं? अर्थमिति में? पारिस्थितिकी में? खुदरा? उद्योग? वित्त? और कहाँ? - -## [पोस्ट-व्याख्यान प्रश्नोत्तरी](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) - -## समीक्षा और स्व-अध्ययन - -हालाँकि हम यहाँ उन्हें कवर नहीं करेंगे, लेकिन कभी-कभी टाइम सीरीज़ पूर्वानुमान के क्लासिक तरीकों को बढ़ाने के लिए न्यूरल नेटवर्क का उपयोग किया जाता है। उनके बारे में [इस लेख](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) में और पढ़ें - -## असाइनमेंट - -[कुछ और टाइम सीरीज़ को विज़ुअलाइज़ करें](assignment.md) - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/1-Introduction/assignment.md b/translations/hi/7-TimeSeries/1-Introduction/assignment.md deleted file mode 100644 index 0d2134cc..00000000 --- a/translations/hi/7-TimeSeries/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# कुछ और समय श्रृंखला का दृश्य प्रदर्शन करें - -## निर्देश - -आपने समय श्रृंखला पूर्वानुमान के बारे में सीखना शुरू कर दिया है, जो इस विशेष मॉडलिंग की आवश्यकता वाले डेटा के प्रकार को देखकर आता है। आपने ऊर्जा के आसपास कुछ डेटा को दृश्यात्मक रूप से प्रदर्शित किया है। अब, कुछ और डेटा ढूंढें जो समय श्रृंखला पूर्वानुमान से लाभान्वित हो सकते हैं। तीन उदाहरण खोजें (प्रयास करें [Kaggle](https://kaggle.com) और [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) और उन्हें दृश्यात्मक बनाने के लिए एक नोटबुक बनाएं। नोटबुक में उनके किसी भी विशेष गुण (मौसमी, अचानक परिवर्तन, या अन्य रुझान) को नोट करें। - -## मूल्यांकन - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| ------- | ------------------------------------------------------- | --------------------------------------------------- | ----------------------------------------------------------------------------------------- | -| | तीन डेटा सेट नोटबुक में प्लॉट और समझाए गए हैं | दो डेटा सेट नोटबुक में प्लॉट और समझाए गए हैं | कुछ डेटा सेट नोटबुक में प्लॉट या समझाए गए हैं या प्रस्तुत डेटा अपर्याप्त है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियां हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/hi/7-TimeSeries/1-Introduction/solution/Julia/README.md deleted file mode 100644 index a4c41c9c..00000000 --- a/translations/hi/7-TimeSeries/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/hi/7-TimeSeries/1-Introduction/solution/R/README.md deleted file mode 100644 index 80f2072e..00000000 --- a/translations/hi/7-TimeSeries/1-Introduction/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/2-ARIMA/README.md b/translations/hi/7-TimeSeries/2-ARIMA/README.md deleted file mode 100644 index cf1a3ebf..00000000 --- a/translations/hi/7-TimeSeries/2-ARIMA/README.md +++ /dev/null @@ -1,397 +0,0 @@ -# एआरआईएमए के साथ टाइम सीरीज भविष्यवाणी - -पिछले पाठ में, आपने टाइम सीरीज भविष्यवाणी के बारे में थोड़ा सीखा और एक डेटासेट लोड किया जो एक समय अवधि में विद्युत भार के उतार-चढ़ाव को दर्शाता है। - -[![एआरआईएमए का परिचय](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introduction to ARIMA") - -> 🎥 वीडियो के लिए ऊपर की छवि पर क्लिक करें: एआरआईएमए मॉडल्स का संक्षिप्त परिचय। उदाहरण R में किया गया है, लेकिन अवधारणाएँ सार्वभौमिक हैं। - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/) - -## परिचय - -इस पाठ में, आप [एआरआईएमए: *ऑटो*रेग्रेसिव *इंटीग्रेटेड *मूविंग *एवरेज](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) के साथ मॉडल बनाने का एक विशिष्ट तरीका खोजेंगे। एआरआईएमए मॉडल विशेष रूप से [गैर-स्टेशनरिटी](https://wikipedia.org/wiki/Stationary_process) दिखाने वाले डेटा को फिट करने के लिए उपयुक्त होते हैं। - -## सामान्य अवधारणाएँ - -एआरआईएमए के साथ काम करने में सक्षम होने के लिए, कुछ अवधारणाएँ हैं जिन्हें आपको जानना आवश्यक है: - -- 🎓 **स्टेशनरिटी**। सांख्यिकीय संदर्भ से, स्टेशनरिटी उन डेटा को संदर्भित करता है जिनका वितरण समय में स्थानांतरित होने पर नहीं बदलता है। गैर-स्टेशनरी डेटा, फिर, रुझानों के कारण उतार-चढ़ाव दिखाता है जिसे विश्लेषण करने के लिए परिवर्तित करना आवश्यक है। उदाहरण के लिए, सीजनलिटी डेटा में उतार-चढ़ाव ला सकती है और इसे 'सीजनल-डिफरेंसिंग' की प्रक्रिया द्वारा समाप्त किया जा सकता है। - -- 🎓 **[डिफरेंसिंग](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**। सांख्यिकीय संदर्भ से फिर से, डिफरेंसिंग डेटा को स्थिर बनाने के लिए गैर-स्टेशनरी डेटा को परिवर्तित करने की प्रक्रिया को संदर्भित करता है। "डिफरेंसिंग समय श्रृंखला के स्तर में बदलाव को हटा देता है, रुझान और सीजनलिटी को समाप्त करता है और परिणामस्वरूप समय श्रृंखला के माध्य को स्थिर करता है।" [शिक्सिओंग एट अल का पेपर](https://arxiv.org/abs/1904.07632) - -## टाइम सीरीज के संदर्भ में एआरआईएमए - -आइए एआरआईएमए के भागों को समझें ताकि यह समझ सकें कि यह हमें टाइम सीरीज मॉडल बनाने और इसके खिलाफ भविष्यवाणियाँ करने में कैसे मदद करता है। - -- **एआर - ऑटोरेग्रेसिव के लिए**। जैसा कि नाम से पता चलता है, ऑटोरेग्रेसिव मॉडल आपके डेटा में पिछली मानों को 'पीछे' देखने और उनके बारे में धारणाएँ बनाने के लिए देखता है। इन पिछली मानों को 'लैग्स' कहा जाता है। एक उदाहरण पेंसिल की मासिक बिक्री दिखाने वाले डेटा का होगा। प्रत्येक महीने की बिक्री कुल को डेटासेट में एक 'विकसित हो रहा चर' माना जाएगा। यह मॉडल इस प्रकार बनाया गया है कि "रुचि का विकसित चर अपने स्वयं के लैग्ड (यानी, पूर्व) मानों पर पुनरावृत्त होता है।" [विकिपीडिया](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) - -- **आई - इंटीग्रेटेड के लिए**। समान 'एआरएमए' मॉडल के विपरीत, एआरआईएमए में 'आई' इसके *[इंटीग्रेटेड](https://wikipedia.org/wiki/Order_of_integration)* पहलू को संदर्भित करता है। गैर-स्टेशनरिटी को समाप्त करने के लिए डिफरेंसिंग चरणों को लागू करने पर डेटा 'इंटीग्रेटेड' हो जाता है। - -- **एमए - मूविंग एवरेज के लिए**। इस मॉडल के [मूविंग-एवरेज](https://wikipedia.org/wiki/Moving-average_model) पहलू का तात्पर्य आउटपुट वेरिएबल से है जो लैग्स के वर्तमान और पिछले मानों का निरीक्षण करके निर्धारित होता है। - -निचला रेखा: एआरआईएमए का उपयोग विशेष प्रकार के टाइम सीरीज डेटा को यथासंभव निकटता से फिट करने के लिए किया जाता है। - -## व्यायाम - एक एआरआईएमए मॉडल बनाएं - -इस पाठ में [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) फ़ोल्डर खोलें और [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb) फ़ाइल खोजें। - -1. नोटबुक चलाएं ताकि आप `statsmodels` Python लाइब्रेरी को लोड कर सकें; आपको एआरआईएमए मॉडल के लिए इसकी आवश्यकता होगी। - -1. आवश्यक लाइब्रेरी लोड करें - -1. अब, डेटा को प्लॉट करने के लिए उपयोगी कई और लाइब्रेरी लोड करें: - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from pandas.plotting import autocorrelation_plot - from statsmodels.tsa.statespace.sarimax import SARIMAX - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - from IPython.display import Image - - %matplotlib inline - pd.options.display.float_format = '{:,.2f}'.format - np.set_printoptions(precision=2) - warnings.filterwarnings("ignore") # specify to ignore warning messages - ``` - -1. `/data/energy.csv` फ़ाइल से डेटा को एक पांडा डेटा फ्रेम में लोड करें और एक नज़र डालें: - - ```python - energy = load_data('./data')[['load']] - energy.head(10) - ``` - -1. जनवरी 2012 से दिसंबर 2014 तक सभी उपलब्ध ऊर्जा डेटा को प्लॉट करें। कोई आश्चर्य नहीं होना चाहिए क्योंकि हमने इस डेटा को पिछले पाठ में देखा था: - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - अब, आइए एक मॉडल बनाएं! - -### प्रशिक्षण और परीक्षण डेटासेट बनाएं - -अब आपका डेटा लोड हो गया है, इसलिए आप इसे ट्रेन और टेस्ट सेट में अलग कर सकते हैं। आप अपने मॉडल को ट्रेन सेट पर प्रशिक्षित करेंगे। हमेशा की तरह, मॉडल के प्रशिक्षण समाप्त होने के बाद, आप इसके सटीकता का मूल्यांकन परीक्षण सेट का उपयोग करके करेंगे। आपको यह सुनिश्चित करने की आवश्यकता है कि परीक्षण सेट प्रशिक्षण सेट की तुलना में समय की एक बाद की अवधि को कवर करता है ताकि यह सुनिश्चित हो सके कि मॉडल भविष्य की समय अवधि से जानकारी प्राप्त नहीं करता है। - -1. 1 सितंबर से 31 अक्टूबर, 2014 की दो महीने की अवधि को ट्रेनिंग सेट में आवंटित करें। परीक्षण सेट में 1 नवंबर से 31 दिसंबर, 2014 की दो महीने की अवधि शामिल होगी: - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - - चूंकि यह डेटा ऊर्जा की दैनिक खपत को दर्शाता है, इसलिए एक मजबूत मौसमी पैटर्न है, लेकिन खपत हाल के दिनों में खपत के समान है। - -1. अंतर को दृश्य रूप में देखें: - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![प्रशिक्षण और परीक्षण डेटा](../../../../translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.hi.png) - - इसलिए, डेटा को प्रशिक्षित करने के लिए अपेक्षाकृत छोटे समय विंडो का उपयोग करना पर्याप्त होना चाहिए। - - > नोट: चूंकि हम एआरआईएमए मॉडल को फिट करने के लिए जिस फ़ंक्शन का उपयोग करते हैं वह फिटिंग के दौरान इन-सैंपल सत्यापन का उपयोग करता है, हम सत्यापन डेटा को छोड़ देंगे। - -### प्रशिक्षण के लिए डेटा तैयार करें - -अब, आपको अपने डेटा को फिल्टर और स्केल करके प्रशिक्षण के लिए तैयार करना होगा। अपने डेटासेट को केवल आवश्यक समय अवधि और कॉलम को शामिल करने के लिए फिल्टर करें, और यह सुनिश्चित करने के लिए स्केलिंग करें कि डेटा को 0,1 के अंतराल में प्रक्षेपित किया गया है। - -1. मूल डेटासेट को केवल उपरोक्त समय अवधि प्रति सेट और केवल आवश्यक कॉलम 'लोड' और तारीख को शामिल करने के लिए फिल्टर करें: - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - आप डेटा का आकार देख सकते हैं: - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -1. डेटा को (0, 1) के रेंज में स्केल करें। - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - train.head(10) - ``` - -1. मूल बनाम स्केल डेटा को दृश्य रूप में देखें: - - ```python - energy[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']].rename(columns={'load':'original load'}).plot.hist(bins=100, fontsize=12) - train.rename(columns={'load':'scaled load'}).plot.hist(bins=100, fontsize=12) - plt.show() - ``` - - ![मूल](../../../../translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.hi.png) - - > मूल डेटा - - ![स्केल किया हुआ](../../../../translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.hi.png) - - > स्केल किया हुआ डेटा - -1. अब जब आपने स्केल किए गए डेटा को कैलिब्रेट कर लिया है, तो आप परीक्षण डेटा को स्केल कर सकते हैं: - - ```python - test['load'] = scaler.transform(test) - test.head() - ``` - -### एआरआईएमए लागू करें - -अब एआरआईएमए लागू करने का समय है! अब आप `statsmodels` लाइब्रेरी का उपयोग करेंगे जिसे आपने पहले इंस्टॉल किया था। - -अब आपको कई चरणों का पालन करना होगा - - 1. `SARIMAX()` and passing in the model parameters: p, d, and q parameters, and P, D, and Q parameters. - 2. Prepare the model for the training data by calling the fit() function. - 3. Make predictions calling the `forecast()` function and specifying the number of steps (the `horizon`) to forecast. - -> 🎓 What are all these parameters for? In an ARIMA model there are 3 parameters that are used to help model the major aspects of a time series: seasonality, trend, and noise. These parameters are: - -`p`: the parameter associated with the auto-regressive aspect of the model, which incorporates *past* values. -`d`: the parameter associated with the integrated part of the model, which affects the amount of *differencing* (🎓 remember differencing 👆?) to apply to a time series. -`q`: the parameter associated with the moving-average part of the model. - -> Note: If your data has a seasonal aspect - which this one does - , we use a seasonal ARIMA model (SARIMA). In that case you need to use another set of parameters: `P`, `D`, and `Q` which describe the same associations as `p`, `d`, and `q` कॉल करके मॉडल को परिभाषित करें, लेकिन मॉडल के मौसमी घटकों से संबंधित हैं। - -1. अपनी पसंदीदा क्षितिज मान सेट करके प्रारंभ करें। आइए 3 घंटे आजमाएं: - - ```python - # Specify the number of steps to forecast ahead - HORIZON = 3 - print('Forecasting horizon:', HORIZON, 'hours') - ``` - - एआरआईएमए मॉडल के पैरामीटर के लिए सर्वोत्तम मानों का चयन करना चुनौतीपूर्ण हो सकता है क्योंकि यह कुछ हद तक व्यक्तिपरक और समय लेने वाला है। आप `auto_arima()` function from the [`pyramid` लाइब्रेरी](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html) का उपयोग करने पर विचार कर सकते हैं, - -1. अभी के लिए कुछ मैनुअल चयन आजमाएं ताकि एक अच्छा मॉडल मिल सके। - - ```python - order = (4, 1, 0) - seasonal_order = (1, 1, 0, 24) - - model = SARIMAX(endog=train, order=order, seasonal_order=seasonal_order) - results = model.fit() - - print(results.summary()) - ``` - - परिणामों की एक तालिका मुद्रित होती है। - -आपने अपना पहला मॉडल बना लिया है! अब हमें इसे मूल्यांकन करने का तरीका खोजना होगा। - -### अपने मॉडल का मूल्यांकन करें - -अपने मॉडल का मूल्यांकन करने के लिए, आप तथाकथित `वॉक फॉरवर्ड` सत्यापन कर सकते हैं। व्यवहार में, टाइम सीरीज मॉडल को हर बार एक नया डेटा उपलब्ध होने पर पुन: प्रशिक्षित किया जाता है। यह मॉडल को प्रत्येक समय चरण पर सर्वोत्तम पूर्वानुमान बनाने की अनुमति देता है। - -इस तकनीक का उपयोग करके टाइम सीरीज की शुरुआत में शुरू करते हुए, ट्रेन डेटा सेट पर मॉडल को प्रशिक्षित करें। फिर अगले समय चरण पर एक भविष्यवाणी करें। भविष्यवाणी ज्ञात मान के खिलाफ मूल्यांकित की जाती है। फिर ट्रेनिंग सेट को ज्ञात मान को शामिल करने के लिए विस्तारित किया जाता है और प्रक्रिया को दोहराया जाता है। - -> नोट: आपको अधिक कुशल प्रशिक्षण के लिए प्रशिक्षण सेट विंडो को स्थिर रखना चाहिए ताकि हर बार जब आप प्रशिक्षण सेट में एक नया अवलोकन जोड़ते हैं, तो आप सेट की शुरुआत से अवलोकन को हटा देते हैं। - -यह प्रक्रिया इस बात का अधिक मजबूत अनुमान प्रदान करती है कि मॉडल व्यवहार में कैसा प्रदर्शन करेगा। हालाँकि, यह इतने सारे मॉडल बनाने की गणना लागत पर आता है। यदि डेटा छोटा है या मॉडल सरल है तो यह स्वीकार्य है, लेकिन पैमाने पर एक समस्या हो सकती है। - -वॉक-फॉरवर्ड वैलिडेशन टाइम सीरीज मॉडल मूल्यांकन का स्वर्ण मानक है और आपके अपने प्रोजेक्ट के लिए अनुशंसित है। - -1. सबसे पहले, प्रत्येक HORIZON चरण के लिए एक परीक्षण डेटा बिंदु बनाएं। - - ```python - test_shifted = test.copy() - - for t in range(1, HORIZON+1): - test_shifted['load+'+str(t)] = test_shifted['load'].shift(-t, freq='H') - - test_shifted = test_shifted.dropna(how='any') - test_shifted.head(5) - ``` - - | | | लोड | लोड+1 | लोड+2 | - | ---------- | -------- | ---- | ------ | ------ | - | 2014-12-30 | 00:00:00 | 0.33 | 0.29 | 0.27 | - | 2014-12-30 | 01:00:00 | 0.29 | 0.27 | 0.27 | - | 2014-12-30 | 02:00:00 | 0.27 | 0.27 | 0.30 | - | 2014-12-30 | 03:00:00 | 0.27 | 0.30 | 0.41 | - | 2014-12-30 | 04:00:00 | 0.30 | 0.41 | 0.57 | - - डेटा को उसके क्षितिज बिंदु के अनुसार क्षैतिज रूप से स्थानांतरित किया गया है। - -1. इस स्लाइडिंग विंडो दृष्टिकोण का उपयोग करके अपने परीक्षण डेटा पर भविष्यवाणियाँ करें और परीक्षण डेटा की लंबाई के आकार में एक लूप में करें: - - ```python - %%time - training_window = 720 # dedicate 30 days (720 hours) for training - - train_ts = train['load'] - test_ts = test_shifted - - history = [x for x in train_ts] - history = history[(-training_window):] - - predictions = list() - - order = (2, 1, 0) - seasonal_order = (1, 1, 0, 24) - - for t in range(test_ts.shape[0]): - model = SARIMAX(endog=history, order=order, seasonal_order=seasonal_order) - model_fit = model.fit() - yhat = model_fit.forecast(steps = HORIZON) - predictions.append(yhat) - obs = list(test_ts.iloc[t]) - # move the training window - history.append(obs[0]) - history.pop(0) - print(test_ts.index[t]) - print(t+1, ': predicted =', yhat, 'expected =', obs) - ``` - - आप प्रशिक्षण होते हुए देख सकते हैं: - - ```output - 2014-12-30 00:00:00 - 1 : predicted = [0.32 0.29 0.28] expected = [0.32945389435989236, 0.2900626678603402, 0.2739480752014323] - - 2014-12-30 01:00:00 - 2 : predicted = [0.3 0.29 0.3 ] expected = [0.2900626678603402, 0.2739480752014323, 0.26812891674127126] - - 2014-12-30 02:00:00 - 3 : predicted = [0.27 0.28 0.32] expected = [0.2739480752014323, 0.26812891674127126, 0.3025962399283795] - ``` - -1. भविष्यवाणियों की तुलना वास्तविक लोड से करें: - - ```python - eval_df = pd.DataFrame(predictions, columns=['t+'+str(t) for t in range(1, HORIZON+1)]) - eval_df['timestamp'] = test.index[0:len(test.index)-HORIZON+1] - eval_df = pd.melt(eval_df, id_vars='timestamp', value_name='prediction', var_name='h') - eval_df['actual'] = np.array(np.transpose(test_ts)).ravel() - eval_df[['prediction', 'actual']] = scaler.inverse_transform(eval_df[['prediction', 'actual']]) - eval_df.head() - ``` - - आउटपुट - | | | टाइमस्टैम्प | एच | भविष्यवाणी | वास्तविक | - | --- | ---------- | --------- | --- | ---------- | -------- | - | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | - | 1 | 2014-12-30 | 01:00:00 | t+1 | 2,955.53 | 2,935.00 | - | 2 | 2014-12-30 | 02:00:00 | t+1 | 2,900.17 | 2,899.00 | - | 3 | 2014-12-30 | 03:00:00 | t+1 | 2,917.69 | 2,886.00 | - | 4 | 2014-12-30 | 04:00:00 | t+1 | 2,946.99 | 2,963.00 | - - - वास्तविक लोड की तुलना में प्रति घंटे डेटा की भविष्यवाणी देखें। यह कितना सटीक है? - -### मॉडल सटीकता की जांच करें - -सभी भविष्यवाणियों पर अपने मॉडल की सटीकता की जांच उसके माध्य पूर्ण प्रतिशत त्रुटि (MAPE) का परीक्षण करके करें। - -> **🧮 गणित दिखाओ** -> -> ![MAPE](../../../../translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.hi.png) -> -> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) को उपरोक्त सूत्र द्वारा परिभाषित अनुपात के रूप में पूर्वानुमान सटीकता दिखाने के लिए उपयोग किया जाता है। वास्तविकt और पूर्वानुमानितt के बीच का अंतर वास्तविकt द्वारा विभाजित किया जाता है। "इस गणना में पूर्ण मान को समय में प्रत्येक पूर्वानुमानित बिंदु के लिए जोड़ा जाता है और फिट किए गए बिंदुओं n की संख्या से विभाजित किया जाता है।" [विकिपीडिया](https://wikipedia.org/wiki/Mean_absolute_percentage_error) - -1. कोड में समीकरण व्यक्त करें: - - ```python - if(HORIZON > 1): - eval_df['APE'] = (eval_df['prediction'] - eval_df['actual']).abs() / eval_df['actual'] - print(eval_df.groupby('h')['APE'].mean()) - ``` - -1. एक चरण का MAPE गणना करें: - - ```python - print('One step forecast MAPE: ', (mape(eval_df[eval_df['h'] == 't+1']['prediction'], eval_df[eval_df['h'] == 't+1']['actual']))*100, '%') - ``` - - एक चरण पूर्वानुमान MAPE: 0.5570581332313952 % - -1. बहु-चरण पूर्वानुमान MAPE प्रिंट करें: - - ```python - print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') - ``` - - ```output - Multi-step forecast MAPE: 1.1460048657704118 % - ``` - - एक अच्छा कम संख्या सबसे अच्छा है: विचार करें कि 10 का MAPE वाला पूर्वानुमान 10% से बंद है। - -1. लेकिन हमेशा की तरह, इस प्रकार की सटीकता माप को दृश्य रूप से देखना आसान होता है, इसलिए आइए इसे प्लॉट करें: - - ```python - if(HORIZON == 1): - ## Plotting single step forecast - eval_df.plot(x='timestamp', y=['actual', 'prediction'], style=['r', 'b'], figsize=(15, 8)) - - else: - ## Plotting multi step forecast - plot_df = eval_df[(eval_df.h=='t+1')][['timestamp', 'actual']] - for t in range(1, HORIZON+1): - plot_df['t+'+str(t)] = eval_df[(eval_df.h=='t+'+str(t))]['prediction'].values - - fig = plt.figure(figsize=(15, 8)) - ax = plt.plot(plot_df['timestamp'], plot_df['actual'], color='red', linewidth=4.0) - ax = fig.add_subplot(111) - for t in range(1, HORIZON+1): - x = plot_df['timestamp'][(t-1):] - y = plot_df['t+'+str(t)][0:len(x)] - ax.plot(x, y, color='blue', linewidth=4*math.pow(.9,t), alpha=math.pow(0.8,t)) - - ax.legend(loc='best') - - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![एक टाइम सीरीज मॉडल](../../../../translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.hi.png) - -🏆 एक बहुत ही अच्छा प्लॉट, जो एक अच्छे सटीकता वाले मॉडल को दिखा रहा है। बहुत बढ़िया! - ---- - -## 🚀चुनौती - -टाइम सीरीज मॉडल की सटीकता का परीक्षण करने के तरीकों में गहराई से जाएं। हम इस पाठ में MAPE को छूते हैं, लेकिन क्या अन्य विधियाँ हैं जिन्हें आप उपयोग कर सकते हैं? उनका शोध करें और उन्हें एनोटेट करें। एक सहायक दस्तावेज़ [यहां](https://otexts.com/fpp2/accuracy.html) पाया जा सकता है - -## [पोस्ट-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/) - -## समीक्षा और स्व-अध्ययन - -यह पाठ एआरआईएमए के साथ टाइम सीरीज भविष्यवाणी की केवल मूल बातें छूता है। [इस भंडार](https://microsoft.github.io/forecasting/) और इसके विभिन्न मॉडल प्रकारों में गहराई से जानकारी लेकर अन्य तरीकों से टाइम सीरीज मॉडल बनाने के तरीकों को सीखने के लिए अपना ज्ञान बढ़ाने के लिए समय निकालें। - -## असाइनमेंट - -[एक नया एआरआईएमए मॉडल](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/2-ARIMA/assignment.md b/translations/hi/7-TimeSeries/2-ARIMA/assignment.md deleted file mode 100644 index a1d47ae0..00000000 --- a/translations/hi/7-TimeSeries/2-ARIMA/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# एक नया ARIMA मॉडल - -## निर्देश - -अब जब आपने एक ARIMA मॉडल बना लिया है, तो ताज़ा डेटा के साथ एक नया मॉडल बनाएं (इनमें से किसी एक [ड्यूक के डेटासेट्स](http://www2.stat.duke.edu/~mw/ts_data_sets.html) को आज़माएं)। अपने काम को एक नोटबुक में एनोटेट करें, डेटा और अपने मॉडल को विज़ुअलाइज़ करें, और इसकी सटीकता को MAPE का उपयोग करके परीक्षण करें। - -## मूल्यांकन मानदंड - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता है | -| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | --------------------------------- | -| | एक नोटबुक प्रस्तुत की गई है जिसमें एक नया ARIMA मॉडल बनाया गया है, परीक्षण किया गया है और विज़ुअलाइज़ेशन और सटीकता के साथ समझाया गया है। | प्रस्तुत नोटबुक एनोटेट नहीं है या इसमें बग्स हैं | एक अधूरी नोटबुक प्रस्तुत की गई है | - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/hi/7-TimeSeries/2-ARIMA/solution/Julia/README.md deleted file mode 100644 index 69521982..00000000 --- a/translations/hi/7-TimeSeries/2-ARIMA/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/hi/7-TimeSeries/2-ARIMA/solution/R/README.md deleted file mode 100644 index 9acee712..00000000 --- a/translations/hi/7-TimeSeries/2-ARIMA/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/3-SVR/README.md b/translations/hi/7-TimeSeries/3-SVR/README.md deleted file mode 100644 index 2ba4db7b..00000000 --- a/translations/hi/7-TimeSeries/3-SVR/README.md +++ /dev/null @@ -1,382 +0,0 @@ -# सपोर्ट वेक्टर रिग्रेशर के साथ टाइम सीरीज फोरकास्टिंग - -पिछले पाठ में, आपने ARIMA मॉडल का उपयोग करके टाइम सीरीज प्रेडिक्शन करना सीखा था। अब आप सपोर्ट वेक्टर रिग्रेशर मॉडल को देखेंगे, जो एक रिग्रेशर मॉडल है जिसका उपयोग निरंतर डेटा की भविष्यवाणी करने के लिए किया जाता है। - -## [पूर्व-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/51/) - -## परिचय - -इस पाठ में, आप रिग्रेशन के लिए [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) के साथ मॉडल बनाने का एक विशिष्ट तरीका खोजेंगे, जिसे **SVR: Support Vector Regressor** कहा जाता है। - -### टाइम सीरीज के संदर्भ में SVR [^1] - -टाइम सीरीज प्रेडिक्शन में SVR के महत्व को समझने से पहले, यहाँ कुछ महत्वपूर्ण अवधारणाएँ हैं जिन्हें आपको जानना आवश्यक है: - -- **रिग्रेशन:** सुपरवाइज्ड लर्निंग तकनीक जो दिए गए इनपुट सेट से निरंतर मानों की भविष्यवाणी करती है। विचार यह है कि फीचर स्पेस में एक कर्व (या लाइन) फिट करना जिसमें अधिकतम संख्या में डेटा पॉइंट्स हों। अधिक जानकारी के लिए [यहाँ क्लिक करें](https://en.wikipedia.org/wiki/Regression_analysis)। -- **सपोर्ट वेक्टर मशीन (SVM):** एक प्रकार का सुपरवाइज्ड मशीन लर्निंग मॉडल जो वर्गीकरण, रिग्रेशन और आउटलेयर डिटेक्शन के लिए उपयोग किया जाता है। मॉडल फीचर स्पेस में एक हाइपरप्लेन होता है, जो वर्गीकरण के मामले में एक सीमा के रूप में कार्य करता है, और रिग्रेशन के मामले में बेस्ट-फिट लाइन के रूप में कार्य करता है। SVM में, आमतौर पर एक कर्नल फंक्शन का उपयोग करके डेटासेट को उच्च आयामों की जगह में बदल दिया जाता है, ताकि उन्हें आसानी से विभाजित किया जा सके। SVMs पर अधिक जानकारी के लिए [यहाँ क्लिक करें](https://en.wikipedia.org/wiki/Support-vector_machine)। -- **सपोर्ट वेक्टर रिग्रेशर (SVR):** SVM का एक प्रकार, जो बेस्ट फिट लाइन (जो SVM के मामले में एक हाइपरप्लेन है) खोजने के लिए उपयोग किया जाता है जिसमें अधिकतम संख्या में डेटा पॉइंट्स होते हैं। - -### SVR क्यों? [^1] - -पिछले पाठ में आपने ARIMA के बारे में सीखा, जो टाइम सीरीज डेटा की भविष्यवाणी के लिए एक बहुत ही सफल सांख्यिकीय रैखिक विधि है। हालाँकि, कई मामलों में, टाइम सीरीज डेटा में *नॉन-लाइनियरिटी* होती है, जिसे रैखिक मॉडलों द्वारा मैप नहीं किया जा सकता। ऐसे मामलों में, रिग्रेशन कार्यों के लिए डेटा में नॉन-लाइनियरिटी पर विचार करने की SVM की क्षमता SVR को टाइम सीरीज फोरकास्टिंग में सफल बनाती है। - -## अभ्यास - एक SVR मॉडल बनाना - -डेटा तैयारी के पहले कुछ चरण पिछले पाठ [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) के समान हैं। - -इस पाठ में [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) फ़ोल्डर खोलें और [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb) फ़ाइल खोजें।[^2] - -1. नोटबुक चलाएं और आवश्यक लाइब्रेरीज़ इम्पोर्ट करें: [^2] - - ```python - import sys - sys.path.append('../../') - ``` - - ```python - import os - import warnings - import matplotlib.pyplot as plt - import numpy as np - import pandas as pd - import datetime as dt - import math - - from sklearn.svm import SVR - from sklearn.preprocessing import MinMaxScaler - from common.utils import load_data, mape - ``` - -2. `/data/energy.csv` फ़ाइल से डेटा को एक पांडास डेटा फ्रेम में लोड करें और एक नज़र डालें: [^2] - - ```python - energy = load_data('../../data')[['load']] - ``` - -3. जनवरी 2012 से दिसंबर 2014 तक उपलब्ध सभी ऊर्जा डेटा को प्लॉट करें: [^2] - - ```python - energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![full data](../../../../translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.hi.png) - - अब, चलिए हमारा SVR मॉडल बनाते हैं। - -### प्रशिक्षण और परीक्षण डेटा सेट बनाएं - -अब आपका डेटा लोड हो गया है, इसलिए आप इसे ट्रेन और टेस्ट सेट में विभाजित कर सकते हैं। फिर आप डेटा को समय-चरण आधारित डेटासेट बनाने के लिए रीशेप करेंगे, जो SVR के लिए आवश्यक होगा। आप अपने मॉडल को ट्रेन सेट पर प्रशिक्षित करेंगे। मॉडल के प्रशिक्षण के बाद, आप इसके सटीकता का मूल्यांकन ट्रेनिंग सेट, टेस्टिंग सेट और फिर पूरे डेटासेट पर करेंगे ताकि समग्र प्रदर्शन देखा जा सके। आपको यह सुनिश्चित करने की आवश्यकता है कि टेस्ट सेट ट्रेनिंग सेट से एक बाद की अवधि को कवर करता है ताकि यह सुनिश्चित किया जा सके कि मॉडल भविष्य की समय अवधि से जानकारी प्राप्त न करे [^2] (एक स्थिति जिसे *ओवरफिटिंग* के रूप में जाना जाता है)। - -1. 1 सितंबर से 31 अक्टूबर 2014 की दो महीने की अवधि को ट्रेनिंग सेट के लिए आवंटित करें। टेस्ट सेट में 1 नवंबर से 31 दिसंबर 2014 की दो महीने की अवधि शामिल होगी: [^2] - - ```python - train_start_dt = '2014-11-01 00:00:00' - test_start_dt = '2014-12-30 00:00:00' - ``` - -2. अंतर को विज़ुअलाइज़ करें: [^2] - - ```python - energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ - .join(energy[test_start_dt:][['load']].rename(columns={'load':'test'}), how='outer') \ - .plot(y=['train', 'test'], figsize=(15, 8), fontsize=12) - plt.xlabel('timestamp', fontsize=12) - plt.ylabel('load', fontsize=12) - plt.show() - ``` - - ![training and testing data](../../../../translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.hi.png) - -### प्रशिक्षण के लिए डेटा तैयार करें - -अब, आपको अपने डेटा को फ़िल्टर और स्केल करके प्रशिक्षण के लिए तैयार करने की आवश्यकता है। अपने डेटासेट को केवल उन समय अवधि और कॉलम को शामिल करने के लिए फ़िल्टर करें जिन्हें आपको चाहिए, और यह सुनिश्चित करने के लिए स्केलिंग करें कि डेटा 0,1 के अंतराल में प्रक्षेपित हो। - -1. मूल डेटासेट को फ़िल्टर करें ताकि केवल उपर्युक्त समय अवधि प्रति सेट और केवल आवश्यक कॉलम 'लोड' और तारीख शामिल हों: [^2] - - ```python - train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] - test = energy.copy()[energy.index >= test_start_dt][['load']] - - print('Training data shape: ', train.shape) - print('Test data shape: ', test.shape) - ``` - - ```output - Training data shape: (1416, 1) - Test data shape: (48, 1) - ``` - -2. ट्रेनिंग डेटा को (0, 1) की सीमा में स्केल करें: [^2] - - ```python - scaler = MinMaxScaler() - train['load'] = scaler.fit_transform(train) - ``` - -4. अब, आप टेस्टिंग डेटा को स्केल करें: [^2] - - ```python - test['load'] = scaler.transform(test) - ``` - -### समय-चरणों के साथ डेटा बनाएं [^1] - -SVR के लिए, आप इनपुट डेटा को `[batch, timesteps]`. So, you reshape the existing `train_data` and `test_data` के रूप में बदलते हैं ताकि एक नया आयाम हो जो समय-चरणों को संदर्भित करता है। - -```python -# Converting to numpy arrays -train_data = train.values -test_data = test.values -``` - -इस उदाहरण के लिए, हम `timesteps = 5` लेते हैं। इसलिए, मॉडल के इनपुट पहले 4 समय-चरणों के डेटा हैं, और आउटपुट 5वें समय-चरण का डेटा होगा। - -```python -timesteps=5 -``` - -नेस्टेड सूची समग्रण का उपयोग करके प्रशिक्षण डेटा को 2D टेंसर में परिवर्तित करना: - -```python -train_data_timesteps=np.array([[j for j in train_data[i:i+timesteps]] for i in range(0,len(train_data)-timesteps+1)])[:,:,0] -train_data_timesteps.shape -``` - -```output -(1412, 5) -``` - -टेस्टिंग डेटा को 2D टेंसर में परिवर्तित करना: - -```python -test_data_timesteps=np.array([[j for j in test_data[i:i+timesteps]] for i in range(0,len(test_data)-timesteps+1)])[:,:,0] -test_data_timesteps.shape -``` - -```output -(44, 5) -``` - -प्रशिक्षण और परीक्षण डेटा से इनपुट और आउटपुट का चयन करना: - -```python -x_train, y_train = train_data_timesteps[:,:timesteps-1],train_data_timesteps[:,[timesteps-1]] -x_test, y_test = test_data_timesteps[:,:timesteps-1],test_data_timesteps[:,[timesteps-1]] - -print(x_train.shape, y_train.shape) -print(x_test.shape, y_test.shape) -``` - -```output -(1412, 4) (1412, 1) -(44, 4) (44, 1) -``` - -### SVR लागू करें [^1] - -अब, SVR को लागू करने का समय है। इस कार्यान्वयन के बारे में अधिक पढ़ने के लिए, आप [इस दस्तावेज़](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html) को संदर्भित कर सकते हैं। हमारे कार्यान्वयन के लिए, हम इन चरणों का पालन करते हैं: - - 1. मॉडल को `SVR()` and passing in the model hyperparameters: kernel, gamma, c and epsilon - 2. Prepare the model for the training data by calling the `fit()` function - 3. Make predictions calling the `predict()` फ़ंक्शन को कॉल करके परिभाषित करें - -अब हम एक SVR मॉडल बनाते हैं। यहाँ हम [RBF कर्नल](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) का उपयोग करते हैं, और हाइपरपैरामीटर गामा, C और एप्सिलॉन को क्रमशः 0.5, 10 और 0.05 के रूप में सेट करते हैं। - -```python -model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) -``` - -#### प्रशिक्षण डेटा पर मॉडल फिट करें [^1] - -```python -model.fit(x_train, y_train[:,0]) -``` - -```output -SVR(C=10, cache_size=200, coef0=0.0, degree=3, epsilon=0.05, gamma=0.5, - kernel='rbf', max_iter=-1, shrinking=True, tol=0.001, verbose=False) -``` - -#### मॉडल प्रेडिक्शन बनाएं [^1] - -```python -y_train_pred = model.predict(x_train).reshape(-1,1) -y_test_pred = model.predict(x_test).reshape(-1,1) - -print(y_train_pred.shape, y_test_pred.shape) -``` - -```output -(1412, 1) (44, 1) -``` - -आपने अपना SVR बना लिया है! अब हमें इसका मूल्यांकन करना है। - -### अपने मॉडल का मूल्यांकन करें [^1] - -मूल्यांकन के लिए, पहले हम डेटा को हमारे मूल पैमाने पर वापस स्केल करेंगे। फिर, प्रदर्शन की जांच करने के लिए, हम मूल और भविष्यवाणी किए गए समय श्रृंखला प्लॉट को प्लॉट करेंगे, और MAPE परिणाम भी प्रिंट करेंगे। - -भविष्यवाणी और मूल आउटपुट को स्केल करें: - -```python -# Scaling the predictions -y_train_pred = scaler.inverse_transform(y_train_pred) -y_test_pred = scaler.inverse_transform(y_test_pred) - -print(len(y_train_pred), len(y_test_pred)) -``` - -```python -# Scaling the original values -y_train = scaler.inverse_transform(y_train) -y_test = scaler.inverse_transform(y_test) - -print(len(y_train), len(y_test)) -``` - -#### प्रशिक्षण और परीक्षण डेटा पर मॉडल प्रदर्शन की जांच करें [^1] - -हम अपने प्लॉट के x-अक्ष में दिखाने के लिए डेटासेट से टाइमस्टैम्प निकालते हैं। ध्यान दें कि हम पहले ```timesteps-1``` मानों का उपयोग पहले आउटपुट के लिए इनपुट के रूप में कर रहे हैं, इसलिए आउटपुट के लिए टाइमस्टैम्प उसके बाद शुरू होंगे। - -```python -train_timestamps = energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)].index[timesteps-1:] -test_timestamps = energy[test_start_dt:].index[timesteps-1:] - -print(len(train_timestamps), len(test_timestamps)) -``` - -```output -1412 44 -``` - -प्रशिक्षण डेटा के लिए भविष्यवाणियों को प्लॉट करें: - -```python -plt.figure(figsize=(25,6)) -plt.plot(train_timestamps, y_train, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(train_timestamps, y_train_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.title("Training data prediction") -plt.show() -``` - -![training data prediction](../../../../translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.hi.png) - -प्रशिक्षण डेटा के लिए MAPE प्रिंट करें - -```python -print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') -``` - -```output -MAPE for training data: 1.7195710200875551 % -``` - -परीक्षण डेटा के लिए भविष्यवाणियों को प्लॉट करें - -```python -plt.figure(figsize=(10,3)) -plt.plot(test_timestamps, y_test, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(test_timestamps, y_test_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.show() -``` - -![testing data prediction](../../../../translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.hi.png) - -परीक्षण डेटा के लिए MAPE प्रिंट करें - -```python -print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') -``` - -```output -MAPE for testing data: 1.2623790187854018 % -``` - -🏆 आपके पास परीक्षण डेटासेट पर बहुत अच्छा परिणाम है! - -### पूर्ण डेटासेट पर मॉडल प्रदर्शन की जांच करें [^1] - -```python -# Extracting load values as numpy array -data = energy.copy().values - -# Scaling -data = scaler.transform(data) - -# Transforming to 2D tensor as per model input requirement -data_timesteps=np.array([[j for j in data[i:i+timesteps]] for i in range(0,len(data)-timesteps+1)])[:,:,0] -print("Tensor shape: ", data_timesteps.shape) - -# Selecting inputs and outputs from data -X, Y = data_timesteps[:,:timesteps-1],data_timesteps[:,[timesteps-1]] -print("X shape: ", X.shape,"\nY shape: ", Y.shape) -``` - -```output -Tensor shape: (26300, 5) -X shape: (26300, 4) -Y shape: (26300, 1) -``` - -```python -# Make model predictions -Y_pred = model.predict(X).reshape(-1,1) - -# Inverse scale and reshape -Y_pred = scaler.inverse_transform(Y_pred) -Y = scaler.inverse_transform(Y) -``` - -```python -plt.figure(figsize=(30,8)) -plt.plot(Y, color = 'red', linewidth=2.0, alpha = 0.6) -plt.plot(Y_pred, color = 'blue', linewidth=0.8) -plt.legend(['Actual','Predicted']) -plt.xlabel('Timestamp') -plt.show() -``` - -![full data prediction](../../../../translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.hi.png) - -```python -print('MAPE: ', mape(Y_pred, Y)*100, '%') -``` - -```output -MAPE: 2.0572089029888656 % -``` - -🏆 बहुत अच्छे प्लॉट्स, एक अच्छे सटीकता वाले मॉडल को दिखाते हुए। बहुत बढ़िया! - ---- - -## 🚀चुनौती - -- मॉडल बनाते समय हाइपरपैरामीटर (गामा, C, एप्सिलॉन) को ट्वीक करने का प्रयास करें और डेटा पर मूल्यांकन करें कि कौन सा हाइपरपैरामीटर सेट परीक्षण डेटा पर सर्वोत्तम परिणाम देता है। इन हाइपरपैरामीटर के बारे में अधिक जानने के लिए, आप [यहाँ](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) दस्तावेज़ संदर्भित कर सकते हैं। -- मॉडल के लिए विभिन्न कर्नल फंक्शन का उपयोग करने का प्रयास करें और उनके प्रदर्शन का विश्लेषण करें। एक सहायक दस्तावेज़ [यहाँ](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) पाया जा सकता है। -- मॉडल को भविष्यवाणी करने के लिए पीछे देखने के लिए `timesteps` के विभिन्न मानों का उपयोग करने का प्रयास करें। - -## [व्याख्यान के बाद का क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/) - -## समीक्षा और स्व-अध्ययन - -यह पाठ टाइम सीरीज फोरकास्टिंग के लिए SVR के अनुप्रयोग को प्रस्तुत करने के लिए था। SVR के बारे में अधिक पढ़ने के लिए, आप [इस ब्लॉग](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/) को संदर्भित कर सकते हैं। यह [scikit-learn पर दस्तावेज़](https://scikit-learn.org/stable/modules/svm.html) सामान्य रूप से SVMs के बारे में अधिक व्यापक स्पष्टीकरण प्रदान करता है, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) और अन्य कार्यान्वयन विवरण जैसे कि विभिन्न [कर्नल फंक्शन](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) जो उपयोग किए जा सकते हैं, और उनके पैरामीटर। - -## असाइनमेंट - -[एक नया SVR मॉडल](assignment.md) - -## क्रेडिट्स - -[^1]: इस अनुभाग में पाठ, कोड और आउटपुट [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) द्वारा योगदान किया गया था -[^2]: इस अनुभाग में पाठ, कोड और आउटपुट [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) से लिया गया था - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/3-SVR/assignment.md b/translations/hi/7-TimeSeries/3-SVR/assignment.md deleted file mode 100644 index 70ccd713..00000000 --- a/translations/hi/7-TimeSeries/3-SVR/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# एक नया SVR मॉडल - -## निर्देश [^1] - -अब जब आपने एक SVR मॉडल बना लिया है, तो नए डेटा के साथ एक नया मॉडल बनाएं (इनमें से किसी एक [Duke के डेटासेट्स](http://www2.stat.duke.edu/~mw/ts_data_sets.html) को आज़माएं)। अपने काम को एक नोटबुक में एनोटेट करें, डेटा और अपने मॉडल को विज़ुअलाइज़ करें, और उचित प्लॉट्स और MAPE का उपयोग करके इसकी सटीकता का परीक्षण करें। विभिन्न हाइपरपैरामीटर्स को ट्वीक करने और टाइमस्टेप्स के लिए अलग-अलग मानों का उपयोग करने की भी कोशिश करें। - -## मूल्यांकन [^1] - -| मानदंड | उत्कृष्टता | पर्याप्त | सुधार की आवश्यकता | -| ------- | -------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | -| | एक नोटबुक प्रस्तुत की गई है जिसमें SVR मॉडल बनाया गया है, परीक्षण किया गया है और विज़ुअलाइज़ेशन और सटीकता के साथ समझाया गया है। | प्रस्तुत की गई नोटबुक एनोटेट नहीं है या इसमें बग्स हैं। | एक अधूरी नोटबुक प्रस्तुत की गई है | - -[^1]:इस अनुभाग का पाठ [ARIMA से असाइनमेंट](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) पर आधारित है। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया अवगत रहें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/7-TimeSeries/README.md b/translations/hi/7-TimeSeries/README.md deleted file mode 100644 index a2233676..00000000 --- a/translations/hi/7-TimeSeries/README.md +++ /dev/null @@ -1,26 +0,0 @@ -# समय श्रृंखला पूर्वानुमान का परिचय - -समय श्रृंखला पूर्वानुमान क्या है? यह अतीत के रुझानों का विश्लेषण करके भविष्य की घटनाओं की भविष्यवाणी करने के बारे में है। - -## क्षेत्रीय विषय: वैश्विक बिजली उपयोग ✨ - -इन दो पाठों में, आपको समय श्रृंखला पूर्वानुमान से परिचित कराया जाएगा, जो मशीन लर्निंग का एक अपेक्षाकृत कम ज्ञात क्षेत्र है, लेकिन फिर भी उद्योग और व्यापार अनुप्रयोगों के लिए बेहद मूल्यवान है, अन्य क्षेत्रों के अलावा। जबकि न्यूरल नेटवर्क का उपयोग इन मॉडलों की उपयोगिता बढ़ाने के लिए किया जा सकता है, हम इन्हें पारंपरिक मशीन लर्निंग के संदर्भ में अध्ययन करेंगे क्योंकि मॉडल अतीत के आधार पर भविष्य के प्रदर्शन की भविष्यवाणी करने में मदद करते हैं। - -हमारा क्षेत्रीय ध्यान दुनिया में विद्युत उपयोग पर है, जो भविष्य के विद्युत उपयोग की भविष्यवाणी करने के लिए अतीत के लोड पैटर्न के आधार पर सीखने के लिए एक दिलचस्प डेटासेट है। आप देख सकते हैं कि इस प्रकार का पूर्वानुमान व्यावसायिक वातावरण में कितना सहायक हो सकता है। - -![electric grid](../../../translated_images/electric-grid.0c21d5214db09ffae93c06a87ca2abbb9ba7475ef815129c5b423d7f9a7cf136.hi.jpg) - -[Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) द्वारा राजस्थान में सड़क पर विद्युत टावरों की तस्वीर [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) पर। - -## पाठ - -1. [समय श्रृंखला पूर्वानुमान का परिचय](1-Introduction/README.md) -2. [ARIMA समय श्रृंखला मॉडल बनाना](2-ARIMA/README.md) -3. [समय श्रृंखला पूर्वानुमान के लिए सपोर्ट वेक्टर रिग्रेसर बनाना](3-SVR/README.md) - -## श्रेय - -"समय श्रृंखला पूर्वानुमान का परिचय" ⚡️ के साथ [Francesca Lazzeri](https://twitter.com/frlazzeri) और [Jen Looper](https://twitter.com/jenlooper) द्वारा लिखा गया था। नोटबुक्स पहली बार ऑनलाइन [Azure "Deep Learning For Time Series" repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) में दिखाई दिए, जो मूल रूप से Francesca Lazzeri द्वारा लिखे गए थे। SVR पाठ [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) द्वारा लिखा गया था। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/1-QLearning/README.md b/translations/hi/8-Reinforcement/1-QLearning/README.md deleted file mode 100644 index 2fe964fb..00000000 --- a/translations/hi/8-Reinforcement/1-QLearning/README.md +++ /dev/null @@ -1,59 +0,0 @@ -## नीति की जाँच करना - -चूंकि Q-Table प्रत्येक स्थिति में प्रत्येक क्रिया की "आकर्षण" सूचीबद्ध करता है, इसलिए इसका उपयोग हमारे विश्व में कुशल नेविगेशन को परिभाषित करने के लिए काफी आसान है। सबसे सरल मामले में, हम उस क्रिया का चयन कर सकते हैं जो Q-Table के उच्चतम मूल्य से मेल खाती है: (कोड ब्लॉक 9) - -```python -def qpolicy_strict(m): - x,y = m.human - v = probs(Q[x,y]) - a = list(actions)[np.argmax(v)] - return a - -walk(m,qpolicy_strict) -``` - -> यदि आप ऊपर दिए गए कोड को कई बार आजमाते हैं, तो आप देख सकते हैं कि कभी-कभी यह "लटक" जाता है, और आपको इसे बाधित करने के लिए नोटबुक में STOP बटन दबाने की आवश्यकता होती है। ऐसा इसलिए होता है क्योंकि ऐसी स्थितियाँ हो सकती हैं जब दो राज्य इष्टतम Q-Value के संदर्भ में एक-दूसरे की ओर "इशारा" करते हैं, इस स्थिति में एजेंट उन राज्यों के बीच अनिश्चितकाल तक चलता रहता है। - -## 🚀चुनौती - -> **कार्य 1:** `walk` function to limit the maximum length of path by a certain number of steps (say, 100), and watch the code above return this value from time to time. - -> **Task 2:** Modify the `walk` function so that it does not go back to the places where it has already been previously. This will prevent `walk` from looping, however, the agent can still end up being "trapped" in a location from which it is unable to escape. - -## Navigation - -A better navigation policy would be the one that we used during training, which combines exploitation and exploration. In this policy, we will select each action with a certain probability, proportional to the values in the Q-Table. This strategy may still result in the agent returning back to a position it has already explored, but, as you can see from the code below, it results in a very short average path to the desired location (remember that `print_statistics` को संशोधित करें ताकि यह सिमुलेशन को 100 बार चलाए: (कोड ब्लॉक 10) - -```python -def qpolicy(m): - x,y = m.human - v = probs(Q[x,y]) - a = random.choices(list(actions),weights=v)[0] - return a - -print_statistics(qpolicy) -``` - -इस कोड को चलाने के बाद, आपको पहले की तुलना में औसत पथ लंबाई बहुत कम मिलनी चाहिए, जो 3-6 की सीमा में होगी। - -## सीखने की प्रक्रिया की जांच - -जैसा कि हमने उल्लेख किया है, सीखने की प्रक्रिया समस्या स्थान की संरचना के बारे में प्राप्त ज्ञान की खोज और अन्वेषण के बीच एक संतुलन है। हमने देखा है कि सीखने के परिणाम (एक एजेंट को लक्ष्य तक पहुँचने के लिए एक छोटा रास्ता खोजने की क्षमता) में सुधार हुआ है, लेकिन यह भी देखना दिलचस्प है कि सीखने की प्रक्रिया के दौरान औसत पथ लंबाई कैसे व्यवहार करती है: - -## सीखने को इस प्रकार संक्षेपित किया जा सकता है: - -- **औसत पथ लंबाई बढ़ जाती है**। यहां हम देखते हैं कि पहले औसत पथ लंबाई बढ़ जाती है। ऐसा शायद इसलिए होता है क्योंकि जब हमें पर्यावरण के बारे में कुछ नहीं पता होता है, तो हम खराब राज्यों, पानी या भेड़िये में फंसने की संभावना रखते हैं। जैसे-जैसे हम अधिक सीखते हैं और इस ज्ञान का उपयोग करना शुरू करते हैं, हम लंबे समय तक पर्यावरण का पता लगा सकते हैं, लेकिन हमें अभी भी सेब कहाँ हैं इसके बारे में अच्छी तरह से पता नहीं होता है। - -- **जैसे-जैसे हम अधिक सीखते हैं, पथ की लंबाई कम हो जाती है**। एक बार जब हम पर्याप्त सीख लेते हैं, तो एजेंट के लिए लक्ष्य प्राप्त करना आसान हो जाता है, और पथ लंबाई कम होने लगती है। हालांकि, हम अभी भी अन्वेषण के लिए खुले हैं, इसलिए हम अक्सर सबसे अच्छे रास्ते से भटकते हैं, और नए विकल्पों का पता लगाते हैं, जिससे रास्ता इष्टतम से लंबा हो जाता है। - -- **लंबाई अचानक बढ़ जाती है**। इस ग्राफ पर हम यह भी देखते हैं कि किसी बिंदु पर, लंबाई अचानक बढ़ जाती है। यह प्रक्रिया की यादृच्छिक प्रकृति को इंगित करता है, और यह कि हम किसी बिंदु पर Q-Table गुणांक को नए मानों के साथ अधिलेखित करके "बिगाड़" सकते हैं। आदर्श रूप से इसे सीखने की दर को कम करके कम किया जाना चाहिए (उदाहरण के लिए, प्रशिक्षण के अंत की ओर, हम Q-Table मानों को एक छोटे मान से ही समायोजित करते हैं)। - -कुल मिलाकर, यह याद रखना महत्वपूर्ण है कि सीखने की प्रक्रिया की सफलता और गुणवत्ता काफी हद तक मापदंडों पर निर्भर करती है, जैसे सीखने की दर, सीखने की दर में कमी, और छूट कारक। इन्हें अक्सर **हाइपरपैरामीटर्स** कहा जाता है, ताकि उन्हें **पैरामीटर्स** से अलग किया जा सके, जिन्हें हम प्रशिक्षण के दौरान अनुकूलित करते हैं (उदाहरण के लिए, Q-Table गुणांक)। सर्वोत्तम हाइपरपैरामीटर मानों को खोजने की प्रक्रिया को **हाइपरपैरामीटर ऑप्टिमाइज़ेशन** कहा जाता है, और यह एक अलग विषय का हकदार है। - -## [पोस्ट-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) - -## असाइनमेंट -[एक अधिक यथार्थवादी दुनिया](assignment.md) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/1-QLearning/assignment.md b/translations/hi/8-Reinforcement/1-QLearning/assignment.md deleted file mode 100644 index 462cbabe..00000000 --- a/translations/hi/8-Reinforcement/1-QLearning/assignment.md +++ /dev/null @@ -1,30 +0,0 @@ -# एक अधिक यथार्थवादी दुनिया - -हमारी स्थिति में, पीटर लगभग बिना थके या भूखे हुए इधर-उधर घूम सकता था। एक अधिक यथार्थवादी दुनिया में, उसे समय-समय पर बैठकर आराम करना पड़ता है और खुद को खिलाना भी पड़ता है। आइए निम्नलिखित नियमों को लागू करके हमारी दुनिया को अधिक यथार्थवादी बनाएं: - -1. एक स्थान से दूसरे स्थान पर जाने से पीटर की **ऊर्जा** कम हो जाती है और कुछ **थकान** बढ़ जाती है। -2. पीटर सेब खाकर अधिक ऊर्जा प्राप्त कर सकता है। -3. पीटर पेड़ के नीचे या घास पर आराम करके थकान से छुटकारा पा सकता है (यानी, बोर्ड के किसी स्थान पर जाकर जहां पेड़ या घास हो - हरा क्षेत्र) -4. पीटर को भेड़िये को खोजना और मारना होगा। -5. भेड़िये को मारने के लिए, पीटर के पास ऊर्जा और थकान के निश्चित स्तर होने चाहिए, अन्यथा वह लड़ाई हार जाएगा। - -## निर्देश - -अपने समाधान के लिए मूल [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) नोटबुक का उपयोग प्रारंभिक बिंदु के रूप में करें। - -ऊपर दिए गए गेम के नियमों के अनुसार इनाम फ़ंक्शन को संशोधित करें, गेम जीतने की सर्वोत्तम रणनीति सीखने के लिए पुनर्बलन सीखने के एल्गोरिदम को चलाएं, और रैंडम वॉक के परिणामों की तुलना अपने एल्गोरिदम के साथ करें कि कितने गेम जीते और हारे गए। - -> **Note**: आपकी नई दुनिया में, स्थिति अधिक जटिल है, और मानव स्थिति के अलावा थकान और ऊर्जा स्तर भी शामिल हैं। आप स्थिति का प्रतिनिधित्व एक ट्यूपल (Board, energy, fatigue) के रूप में कर सकते हैं, या स्थिति के लिए एक क्लास परिभाषित कर सकते हैं (आप इसे `Board` से भी व्युत्पन्न कर सकते हैं), या यहां तक कि मूल `Board` क्लास को [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py) के अंदर संशोधित कर सकते हैं। - -अपने समाधान में, कृपया रैंडम वॉक रणनीति के लिए जिम्मेदार कोड को बनाए रखें, और अंत में अपने एल्गोरिदम के परिणामों की तुलना रैंडम वॉक से करें। - -> **Note**: आपको इसे काम करने के लिए हाइपरपैरामीटर को समायोजित करने की आवश्यकता हो सकती है, विशेष रूप से युगों की संख्या। क्योंकि गेम की सफलता (भेड़िये से लड़ाई) एक दुर्लभ घटना है, आप बहुत अधिक प्रशिक्षण समय की उम्मीद कर सकते हैं। - -## मूल्यांकन मानदंड - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | -| | एक नोटबुक प्रस्तुत की गई है जिसमें नई दुनिया के नियमों की परिभाषा, Q-लर्निंग एल्गोरिदम और कुछ पाठ्य विवरण शामिल हैं। Q-लर्निंग रैंडम वॉक की तुलना में परिणामों को महत्वपूर्ण रूप से सुधारने में सक्षम है। | नोटबुक प्रस्तुत की गई है, Q-लर्निंग लागू किया गया है और रैंडम वॉक की तुलना में परिणामों में सुधार करता है, लेकिन महत्वपूर्ण रूप से नहीं; या नोटबुक खराब तरीके से प्रलेखित है और कोड अच्छी तरह से संरचित नहीं है | दुनिया के नियमों को फिर से परिभाषित करने का कुछ प्रयास किया गया है, लेकिन Q-लर्निंग एल्गोरिदम काम नहीं करता, या इनाम फ़ंक्शन पूरी तरह से परिभाषित नहीं है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/hi/8-Reinforcement/1-QLearning/solution/Julia/README.md deleted file mode 100644 index 89b5e8f2..00000000 --- a/translations/hi/8-Reinforcement/1-QLearning/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित AI अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/hi/8-Reinforcement/1-QLearning/solution/R/README.md deleted file mode 100644 index 64cc9fa5..00000000 --- a/translations/hi/8-Reinforcement/1-QLearning/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/2-Gym/README.md b/translations/hi/8-Reinforcement/2-Gym/README.md deleted file mode 100644 index 6255e576..00000000 --- a/translations/hi/8-Reinforcement/2-Gym/README.md +++ /dev/null @@ -1,342 +0,0 @@ -# CartPole स्केटिंग - -पिछले पाठ में हमने जिस समस्या को हल किया था, वह एक खिलौना समस्या की तरह लग सकती है, जो वास्तव में वास्तविक जीवन परिदृश्यों के लिए लागू नहीं होती है। ऐसा नहीं है, क्योंकि कई वास्तविक दुनिया की समस्याएं भी इस परिदृश्य को साझा करती हैं - जिसमें शतरंज या गो खेलना भी शामिल है। वे समान हैं, क्योंकि हमारे पास दिए गए नियमों के साथ एक बोर्ड भी है और एक **डिस्क्रीट स्टेट**। - -## [प्री-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/47/) - -## परिचय - -इस पाठ में हम Q-लर्निंग के समान सिद्धांतों को एक समस्या पर लागू करेंगे जिसमें **कंटीन्यूअस स्टेट** होता है, यानी एक स्टेट जो एक या अधिक वास्तविक संख्याओं द्वारा दी जाती है। हम निम्नलिखित समस्या से निपटेंगे: - -> **समस्या**: अगर पीटर को भेड़िये से बचना है, तो उसे तेजी से चलने में सक्षम होना चाहिए। हम देखेंगे कि पीटर कैसे स्केट करना सीख सकता है, विशेष रूप से संतुलन बनाए रखना, Q-लर्निंग का उपयोग करके। - -![The great escape!](../../../../translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.hi.png) - -> पीटर और उसके दोस्त भेड़िये से बचने के लिए रचनात्मक हो जाते हैं! चित्र [Jen Looper](https://twitter.com/jenlooper) द्वारा - -हम संतुलन के रूप में ज्ञात एक सरलीकृत संस्करण का उपयोग करेंगे जिसे **CartPole** समस्या कहा जाता है। CartPole की दुनिया में, हमारे पास एक क्षैतिज स्लाइडर है जो बाएं या दाएं चल सकता है, और लक्ष्य स्लाइडर के ऊपर एक लंबवत पोल को संतुलित करना है। - -## आवश्यकताएँ - -इस पाठ में, हम **OpenAI Gym** नामक एक लाइब्रेरी का उपयोग करेंगे विभिन्न **एनवायरनमेंट्स** का अनुकरण करने के लिए। आप इस पाठ के कोड को स्थानीय रूप से (जैसे कि Visual Studio Code से) चला सकते हैं, इस स्थिति में अनुकरण एक नई विंडो में खुलेगा। ऑनलाइन कोड चलाते समय, आपको कोड में कुछ समायोजन करने की आवश्यकता हो सकती है, जैसा कि [यहाँ](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) वर्णित है। - -## OpenAI Gym - -पिछले पाठ में, खेल के नियम और स्टेट `Board` क्लास द्वारा दिए गए थे जिसे हमने स्वयं परिभाषित किया था। यहाँ हम एक विशेष **सिमुलेशन एनवायरनमेंट** का उपयोग करेंगे, जो संतुलन पोल के पीछे के भौतिकी का अनुकरण करेगा। सबसे लोकप्रिय सिमुलेशन एनवायरनमेंट्स में से एक जिसे रिइनफोर्समेंट लर्निंग एल्गोरिदम के प्रशिक्षण के लिए उपयोग किया जाता है, उसे [Gym](https://gym.openai.com/) कहा जाता है, जो [OpenAI](https://openai.com/) द्वारा बनाए रखा जाता है। इस जिम का उपयोग करके हम कार्टपोल सिमुलेशन से लेकर अटारी गेम्स तक विभिन्न **एनवायरनमेंट्स** बना सकते हैं। - -> **नोट**: आप OpenAI Gym से उपलब्ध अन्य एनवायरनमेंट्स को [यहाँ](https://gym.openai.com/envs/#classic_control) देख सकते हैं। - -पहले, जिम को इंस्टॉल करें और आवश्यक लाइब्रेरीज़ को इम्पोर्ट करें (कोड ब्लॉक 1): - -```python -import sys -!{sys.executable} -m pip install gym - -import gym -import matplotlib.pyplot as plt -import numpy as np -import random -``` - -## व्यायाम - एक कार्टपोल एनवायरनमेंट को प्रारंभ करें - -कार्टपोल संतुलन समस्या के साथ काम करने के लिए, हमें संबंधित एनवायरनमेंट को प्रारंभ करना होगा। प्रत्येक एनवायरनमेंट के साथ एक: - -- **ऑब्जर्वेशन स्पेस** जुड़ा होता है जो उस जानकारी की संरचना को परिभाषित करता है जो हमें एनवायरनमेंट से प्राप्त होती है। कार्टपोल समस्या के लिए, हमें पोल की स्थिति, वेग और कुछ अन्य मान प्राप्त होते हैं। - -- **एक्शन स्पेस** जो संभावित कार्यों को परिभाषित करता है। हमारे मामले में एक्शन स्पेस डिस्क्रीट है, और इसमें दो कार्य शामिल हैं - **बाएं** और **दाएं**। (कोड ब्लॉक 2) - -1. प्रारंभ करने के लिए, निम्नलिखित कोड टाइप करें: - - ```python - env = gym.make("CartPole-v1") - print(env.action_space) - print(env.observation_space) - print(env.action_space.sample()) - ``` - -एनवायरनमेंट कैसे काम करता है यह देखने के लिए, चलिए 100 चरणों के लिए एक छोटी सिमुलेशन चलाते हैं। प्रत्येक चरण में, हम एक कार्य प्रदान करते हैं - इस सिमुलेशन में हम बस `action_space` से एक कार्य को यादृच्छिक रूप से चुनते हैं। - -1. नीचे दिए गए कोड को चलाएं और देखें कि इसका परिणाम क्या है। - - ✅ याद रखें कि इस कोड को स्थानीय Python इंस्टॉलेशन पर चलाना बेहतर है! (कोड ब्लॉक 3) - - ```python - env.reset() - - for i in range(100): - env.render() - env.step(env.action_space.sample()) - env.close() - ``` - - आपको इस छवि के समान कुछ देखना चाहिए: - - ![non-balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) - -1. सिमुलेशन के दौरान, हमें यह तय करने के लिए ऑब्जर्वेशन प्राप्त करने की आवश्यकता होती है कि कैसे कार्य करना है। वास्तव में, स्टेप फ़ंक्शन वर्तमान ऑब्जर्वेशन, एक रिवार्ड फ़ंक्शन और डन फ्लैग लौटाता है जो इंगित करता है कि सिमुलेशन जारी रखने का कोई मतलब है या नहीं: (कोड ब्लॉक 4) - - ```python - env.reset() - - done = False - while not done: - env.render() - obs, rew, done, info = env.step(env.action_space.sample()) - print(f"{obs} -> {rew}") - env.close() - ``` - - आपको नोटबुक आउटपुट में कुछ ऐसा ही देखना चाहिए: - - ```text - [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 - [ 0.02917248 -0.04828055 0.03248977 0.00543839] -> 1.0 - [ 0.02820687 0.14636075 0.03259854 -0.27681916] -> 1.0 - [ 0.03113408 0.34100283 0.02706215 -0.55904489] -> 1.0 - [ 0.03795414 0.53573468 0.01588125 -0.84308041] -> 1.0 - ... - [ 0.17299878 0.15868546 -0.20754175 -0.55975453] -> 1.0 - [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 - ``` - - सिमुलेशन के प्रत्येक चरण में लौटाए गए ऑब्जर्वेशन वेक्टर में निम्नलिखित मान शामिल होते हैं: - - कार्ट की स्थिति - - कार्ट की वेग - - पोल का कोण - - पोल का रोटेशन दर - -1. उन संख्याओं का न्यूनतम और अधिकतम मान प्राप्त करें: (कोड ब्लॉक 5) - - ```python - print(env.observation_space.low) - print(env.observation_space.high) - ``` - - आप यह भी देख सकते हैं कि प्रत्येक सिमुलेशन चरण पर रिवार्ड मान हमेशा 1 होता है। इसका कारण यह है कि हमारा लक्ष्य जितना संभव हो सके जीवित रहना है, यानी पोल को यथासंभव लंबवत स्थिति में रखना है। - - ✅ वास्तव में, यदि हम 100 लगातार परीक्षणों में 195 का औसत रिवार्ड प्राप्त करने में सफल होते हैं तो CartPole सिमुलेशन को हल किया जाता है। - -## स्टेट का डिस्क्रीटाइजेशन - -Q-लर्निंग में, हमें Q-टेबल बनाना होता है जो परिभाषित करता है कि प्रत्येक स्टेट पर क्या करना है। ऐसा करने में सक्षम होने के लिए, हमें स्टेट को **डिस्क्रीट** बनाना होगा, अधिक सटीक रूप से, इसमें सीमित संख्या में डिस्क्रीट मान शामिल होने चाहिए। इस प्रकार, हमें किसी प्रकार से अपने ऑब्जर्वेशन को **डिस्क्रीटाइज** करना होगा, उन्हें सीमित स्टेट सेट में मैप करना होगा। - -हम इसे करने के कुछ तरीके हैं: - -- **बिन्स में विभाजित करें**। यदि हमें किसी मान का अंतराल पता है, तो हम इस अंतराल को कई **बिन्स** में विभाजित कर सकते हैं, और फिर उस मान को बिन नंबर से बदल सकते हैं जिसमें यह आता है। यह numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) विधि का उपयोग करके किया जा सकता है। इस मामले में, हम स्टेट आकार को ठीक से जानेंगे, क्योंकि यह उन बिन्स की संख्या पर निर्भर करेगा जिन्हें हम डिजिटलीकरण के लिए चुनते हैं। - -✅ हम मूल्यों को किसी सीमित अंतराल (कहें, -20 से 20 तक) में लाने के लिए रैखिक इंटरपोलेशन का उपयोग कर सकते हैं, और फिर उन्हें गोल करके पूर्णांकों में बदल सकते हैं। इससे हमें स्टेट के आकार पर थोड़ा कम नियंत्रण मिलता है, विशेष रूप से यदि हमें इनपुट मूल्यों की सटीक रेंज नहीं पता है। उदाहरण के लिए, हमारे मामले में 4 में से 2 मानों की कोई ऊपरी/निचली सीमा नहीं है, जिससे असीमित संख्या में स्टेट हो सकते हैं। - -हमारे उदाहरण में, हम दूसरे दृष्टिकोण के साथ जाएंगे। जैसा कि आप बाद में देख सकते हैं, अपरिभाषित ऊपरी/निचली सीमाओं के बावजूद, वे मान शायद ही कभी कुछ सीमित अंतरालों के बाहर मान लेते हैं, इस प्रकार उन स्टेट्स के साथ चरम मान बहुत दुर्लभ होंगे। - -1. यहाँ वह फ़ंक्शन है जो हमारे मॉडल से ऑब्जर्वेशन लेगा और 4 पूर्णांक मानों का एक ट्यूपल उत्पन्न करेगा: (कोड ब्लॉक 6) - - ```python - def discretize(x): - return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) - ``` - -1. चलिए बिन्स का उपयोग करके एक और डिस्क्रीटाइजेशन विधि का भी अन्वेषण करते हैं: (कोड ब्लॉक 7) - - ```python - def create_bins(i,num): - return np.arange(num+1)*(i[1]-i[0])/num+i[0] - - print("Sample bins for interval (-5,5) with 10 bins\n",create_bins((-5,5),10)) - - ints = [(-5,5),(-2,2),(-0.5,0.5),(-2,2)] # intervals of values for each parameter - nbins = [20,20,10,10] # number of bins for each parameter - bins = [create_bins(ints[i],nbins[i]) for i in range(4)] - - def discretize_bins(x): - return tuple(np.digitize(x[i],bins[i]) for i in range(4)) - ``` - -1. अब चलिए एक छोटी सिमुलेशन चलाते हैं और उन डिस्क्रीट एनवायरनमेंट मूल्यों का अवलोकन करते हैं। `discretize` and `discretize_bins` दोनों का उपयोग करने का प्रयास करें और देखें कि क्या कोई अंतर है। - - ✅ discretize_bins बिन नंबर लौटाता है, जो 0-आधारित होता है। इस प्रकार इनपुट वेरिएबल के चारों ओर 0 के मानों के लिए यह अंतराल के मध्य से संख्या लौटाता है (10)। डिस्क्रीटाइज में, हमने आउटपुट मानों की रेंज की परवाह नहीं की, उन्हें नकारात्मक होने की अनुमति दी, इस प्रकार स्टेट मान स्थानांतरित नहीं होते, और 0 का मतलब 0 होता है। (कोड ब्लॉक 8) - - ```python - env.reset() - - done = False - while not done: - #env.render() - obs, rew, done, info = env.step(env.action_space.sample()) - #print(discretize_bins(obs)) - print(discretize(obs)) - env.close() - ``` - - ✅ यदि आप देखना चाहते हैं कि एनवायरनमेंट कैसे निष्पादित होता है तो env.render से शुरू होने वाली पंक्ति को अनकमेंट करें। अन्यथा आप इसे पृष्ठभूमि में निष्पादित कर सकते हैं, जो तेज है। हम इस "अदृश्य" निष्पादन का उपयोग Q-लर्निंग प्रक्रिया के दौरान करेंगे। - -## Q-टेबल संरचना - -हमारे पिछले पाठ में, स्टेट एक साधारण संख्या जोड़ी थी 0 से 8 तक, और इस प्रकार Q-टेबल को 8x8x2 आकार के numpy टेंसर द्वारा प्रस्तुत करना सुविधाजनक था। यदि हम बिन्स डिस्क्रीटाइजेशन का उपयोग करते हैं, तो हमारे स्टेट वेक्टर का आकार भी ज्ञात होता है, इसलिए हम उसी दृष्टिकोण का उपयोग कर सकते हैं और स्टेट को 20x20x10x10x2 आकार के एक सरणी द्वारा प्रस्तुत कर सकते हैं (यहाँ 2 एक्शन स्पेस का आयाम है, और पहले आयाम ऑब्जर्वेशन स्पेस में प्रत्येक पैरामीटर के लिए उपयोग किए गए बिन्स की संख्या से मेल खाते हैं)। - -हालांकि, कभी-कभी ऑब्जर्वेशन स्पेस के सटीक आयाम ज्ञात नहीं होते हैं। `discretize` फ़ंक्शन के मामले में, हम कभी भी यह सुनिश्चित नहीं कर सकते कि हमारा स्टेट निश्चित सीमाओं के भीतर रहता है, क्योंकि कुछ मूल मान बाउंड नहीं होते। इस प्रकार, हम एक अलग दृष्टिकोण का उपयोग करेंगे और Q-टेबल को एक डिक्शनरी द्वारा प्रस्तुत करेंगे। - -1. *(state,action)* जोड़ी का उपयोग डिक्शनरी की कुंजी के रूप में करें, और मान Q-टेबल प्रविष्टि मान से मेल खाता होगा। (कोड ब्लॉक 9) - - ```python - Q = {} - actions = (0,1) - - def qvalues(state): - return [Q.get((state,a),0) for a in actions] - ``` - - यहाँ हम एक फ़ंक्शन `qvalues()` भी परिभाषित करते हैं, जो एक दिए गए स्टेट के लिए सभी संभावित कार्यों से मेल खाने वाले Q-टेबल मानों की एक सूची लौटाता है। यदि प्रविष्टि Q-टेबल में मौजूद नहीं है, तो हम डिफ़ॉल्ट रूप से 0 लौटाएंगे। - -## चलिए Q-लर्निंग शुरू करते हैं - -अब हम पीटर को संतुलन सिखाने के लिए तैयार हैं! - -1. पहले, कुछ हाइपरपैरामीटर्स सेट करें: (कोड ब्लॉक 10) - - ```python - # hyperparameters - alpha = 0.3 - gamma = 0.9 - epsilon = 0.90 - ``` - - यहाँ, `alpha` is the **learning rate** that defines to which extent we should adjust the current values of Q-Table at each step. In the previous lesson we started with 1, and then decreased `alpha` to lower values during training. In this example we will keep it constant just for simplicity, and you can experiment with adjusting `alpha` values later. - - `gamma` is the **discount factor** that shows to which extent we should prioritize future reward over current reward. - - `epsilon` is the **exploration/exploitation factor** that determines whether we should prefer exploration to exploitation or vice versa. In our algorithm, we will in `epsilon` percent of the cases select the next action according to Q-Table values, and in the remaining number of cases we will execute a random action. This will allow us to explore areas of the search space that we have never seen before. - - ✅ In terms of balancing - choosing random action (exploration) would act as a random punch in the wrong direction, and the pole would have to learn how to recover the balance from those "mistakes" - -### Improve the algorithm - -We can also make two improvements to our algorithm from the previous lesson: - -- **Calculate average cumulative reward**, over a number of simulations. We will print the progress each 5000 iterations, and we will average out our cumulative reward over that period of time. It means that if we get more than 195 point - we can consider the problem solved, with even higher quality than required. - -- **Calculate maximum average cumulative result**, `Qmax`, and we will store the Q-Table corresponding to that result. When you run the training you will notice that sometimes the average cumulative result starts to drop, and we want to keep the values of Q-Table that correspond to the best model observed during training. - -1. Collect all cumulative rewards at each simulation at `rewards` वेक्टर आगे की प्लॉटिंग के लिए। (कोड ब्लॉक 11) - - ```python - def probs(v,eps=1e-4): - v = v-v.min()+eps - v = v/v.sum() - return v - - Qmax = 0 - cum_rewards = [] - rewards = [] - for epoch in range(100000): - obs = env.reset() - done = False - cum_reward=0 - # == do the simulation == - while not done: - s = discretize(obs) - if random.random() Qmax: - Qmax = np.average(cum_rewards) - Qbest = Q - cum_rewards=[] - ``` - -आप उन परिणामों से क्या नोटिस कर सकते हैं: - -- **हमारे लक्ष्य के करीब**। हम 100+ लगातार सिमुलेशन रन के दौरान 195 संचयी रिवार्ड प्राप्त करने के लक्ष्य को प्राप्त करने के बहुत करीब हैं, या हम वास्तव में इसे प्राप्त कर चुके हो सकते हैं! भले ही हमें छोटे नंबर मिलें, हम अभी भी नहीं जानते, क्योंकि हम 5000 रन के औसत पर जा रहे हैं, और केवल 100 रन औपचारिक मानदंड में आवश्यक हैं। - -- **रिवार्ड गिरना शुरू होता है**। कभी-कभी रिवार्ड गिरना शुरू हो जाता है, जिसका मतलब है कि हम Q-टेबल में पहले से सीखे गए मानों को उन मानों से "नष्ट" कर सकते हैं जो स्थिति को बदतर बनाते हैं। - -यह अवलोकन अधिक स्पष्ट रूप से दिखाई देता है यदि हम प्रशिक्षण प्रगति का ग्राफ़ बनाते हैं। - -## प्रशिक्षण प्रगति का ग्राफ़ बनाना - -प्रशिक्षण के दौरान, हमने प्रत्येक पुनरावृत्ति में संचयी रिवार्ड मान को `rewards` वेक्टर में एकत्र किया है। यहाँ यह कैसा दिखता है जब हम इसे पुनरावृत्ति संख्या के खिलाफ प्लॉट करते हैं: - -```python -plt.plot(rewards) -``` - -![raw progress](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.hi.png) - -इस ग्राफ़ से, कुछ भी बताना संभव नहीं है, क्योंकि स्टोचैस्टिक प्रशिक्षण प्रक्रिया की प्रकृति के कारण प्रशिक्षण सत्रों की लंबाई बहुत भिन्न होती है। इस ग्राफ़ को अधिक समझने योग्य बनाने के लिए, हम प्रयोगों की एक श्रृंखला पर **रनिंग एवरेज** की गणना कर सकते हैं, कहें 100। इसे `np.convolve` का उपयोग करके आसानी से किया जा सकता है: (कोड ब्लॉक 12) - -```python -def running_average(x,window): - return np.convolve(x,np.ones(window)/window,mode='valid') - -plt.plot(running_average(rewards,100)) -``` - -![training progress](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.hi.png) - -## हाइपरपैरामीटर्स को बदलना - -प्रशिक्षण को अधिक स्थिर बनाने के लिए, यह समझ में आता है कि हमारे कुछ हाइपरपैरामीटर्स को प्रशिक्षण के दौरान समायोजित किया जाए। विशेष रूप से: - -- **लर्निंग रेट** के लिए, `alpha`, we may start with values close to 1, and then keep decreasing the parameter. With time, we will be getting good probability values in the Q-Table, and thus we should be adjusting them slightly, and not overwriting completely with new values. - -- **Increase epsilon**. We may want to increase the `epsilon` slowly, in order to explore less and exploit more. It probably makes sense to start with lower value of `epsilon`, और लगभग 1 तक बढ़ें। - -> **कार्य 1**: हाइपरपैरामीटर मानों के साथ खेलें और देखें कि क्या आप उच्च संचयी रिवार्ड प्राप्त कर सकते हैं। क्या आप 195 से ऊपर जा रहे हैं? - -> **कार्य 2**: समस्या को औपचारिक रूप से हल करने के लिए, आपको 100 लगातार रन के दौरान 195 औसत रिवार्ड प्राप्त करने की आवश्यकता है। प्रशिक्षण के दौरान इसे मापें और सुनिश्चित करें कि आपने समस्या को औपचारिक रूप से हल कर लिया है! - -## परिणाम को क्रियान्वित में देखना - -यह देखना दिलचस्प होगा कि प्रशिक्षित मॉडल वास्तव में कैसे व्यवहार करता है। चलिए सिमुलेशन चलाते हैं और Q-टेबल में संभाव्यता वितरण के अनुसार कार्य चयन रणनीति का पालन करते हैं: (कोड ब्लॉक 13) - -```python -obs = env.reset() -done = False -while not done: - s = discretize(obs) - env.render() - v = probs(np.array(qvalues(s))) - a = random.choices(actions,weights=v)[0] - obs,_,done,_ = env.step(a) -env.close() -``` - -आपको कुछ ऐसा दिखना चाहिए: - -![a balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) - ---- - -## 🚀चुनौती - -> **कार्य 3**: यहाँ, हम Q-टेबल की अंतिम प्रति का उपयोग कर रहे थे, जो सबसे अच्छी नहीं हो सकती। याद रखें कि हमने सबसे अच्छा प्रदर्शन करने वाले Q-टेबल को `Qbest` variable! Try the same example with the best-performing Q-Table by copying `Qbest` over to `Q` and see if you notice the difference. - -> **Task 4**: Here we were not selecting the best action on each step, but rather sampling with corresponding probability distribution. Would it make more sense to always select the best action, with the highest Q-Table value? This can be done by using `np.argmax` फ़ंक्शन का उपयोग करके सबसे अधिक Q-टेबल मान से मेल खाने वाले कार्य संख्या को खोजने के लिए। इस रणनीति को लागू करें और देखें कि क्या यह संतुलन में सुधार करता है। - -## [पोस्ट-लेक्चर क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) - -## असाइनमेंट -[Train a Mountain Car](assignment.md) - -## निष्कर्ष - -अब हमने सीखा है कि एजेंटों को अच्छे परिणाम प्राप्त करने के लिए कैसे प्रशिक्षित किया जाए, बस उन्हें एक रिवार्ड फ़ंक्शन प्रदान करके जो खेल की वांछित स्थिति को परिभाषित करता है, और उन्हें खोज स्थान को बुद्धिमानी से अन्वेषण करने का अवसर देकर। हमने डिस्क्रीट और कंटीन्यूअस एनवायरनमेंट्स के मामलों में Q-लर्निंग एल्गोरिदम को सफलतापूर्वक लागू किया है, लेकिन डिस्क्रीट एक्शन्स के साथ। - -यह अध्ययन करना भी महत्वपूर्ण है कि जब एक्शन स्टेट भी कंटीन्यूअस होता है, और जब ऑब्जर्वेशन स्पेस बहुत अधिक जटिल होता है, जैसे कि अटारी गेम स्क्रीन से छवि। उन समस्याओं में हमें अक्सर अच्छे परिणाम प्राप्त करने के लिए अधिक शक्तिशाली मशीन लर्निंग तकनीकों, जैसे कि न्यूरल नेटवर्क्स, का उपयोग करने की आवश्यकता होती है। ये अधिक उन्नत विषय हमारे आगामी अधिक उन्नत एआई कोर्स के विषय हैं। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/2-Gym/assignment.md b/translations/hi/8-Reinforcement/2-Gym/assignment.md deleted file mode 100644 index 559b3b05..00000000 --- a/translations/hi/8-Reinforcement/2-Gym/assignment.md +++ /dev/null @@ -1,43 +0,0 @@ -# ट्रेन माउंटेन कार - -[OpenAI Gym](http://gym.openai.com) को इस तरह से डिज़ाइन किया गया है कि सभी परिवेश एक ही API प्रदान करते हैं - अर्थात् एक ही तरीके `reset`, `step` और `render`, और **क्रिया स्थान** और **अवलोकन स्थान** के समान अमूर्तता। इस प्रकार, न्यूनतम कोड परिवर्तनों के साथ विभिन्न परिवेशों के लिए समान सुदृढीकरण शिक्षण एल्गोरिदम को अनुकूलित करना संभव होना चाहिए। - -## एक माउंटेन कार पर्यावरण - -[Mountain Car environment](https://gym.openai.com/envs/MountainCar-v0/) में एक कार एक घाटी में फंसी होती है: -लक्ष्य है घाटी से बाहर निकलना और झंडा पकड़ना, प्रत्येक कदम पर निम्नलिखित क्रियाओं में से एक करके: - -| मूल्य | अर्थ | -|---|---| -| 0 | बाईं ओर तेजी लाएं | -| 1 | तेजी न लाएं | -| 2 | दाईं ओर तेजी लाएं | - -हालांकि, इस समस्या की मुख्य चाल यह है कि कार का इंजन एक ही पास में पहाड़ पर चढ़ने के लिए पर्याप्त मजबूत नहीं है। इसलिए, सफल होने का एकमात्र तरीका है गति बढ़ाने के लिए आगे-पीछे चलाना। - -अवलोकन स्थान में केवल दो मान होते हैं: - -| संख्या | अवलोकन | न्यूनतम | अधिकतम | -|-----|--------------|-----|-----| -| 0 | कार की स्थिति | -1.2| 0.6 | -| 1 | कार की वेग | -0.07 | 0.07 | - -माउंटेन कार के लिए इनाम प्रणाली काफी पेचीदा है: - - * यदि एजेंट ने पहाड़ के ऊपर झंडे तक पहुंच (स्थिति = 0.5) प्राप्त कर लिया है तो 0 का इनाम दिया जाता है। - * यदि एजेंट की स्थिति 0.5 से कम है तो -1 का इनाम दिया जाता है। - -एपिसोड समाप्त हो जाता है यदि कार की स्थिति 0.5 से अधिक है, या एपिसोड की लंबाई 200 से अधिक है। -## निर्देश - -हमारे सुदृढीकरण शिक्षण एल्गोरिदम को माउंटेन कार समस्या को हल करने के लिए अनुकूलित करें। मौजूदा [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb) कोड से शुरू करें, नए पर्यावरण को प्रतिस्थापित करें, राज्य विवर्तनिकीकरण कार्यों को बदलें, और मौजूदा एल्गोरिदम को न्यूनतम कोड संशोधनों के साथ प्रशिक्षित करने का प्रयास करें। हाइपरपैरामीटर समायोजित करके परिणाम का अनुकूलन करें। - -> **Note**: एल्गोरिदम को अभिसरण करने के लिए हाइपरपैरामीटर समायोजन की आवश्यकता हो सकती है। -## रूब्रिक - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | --------- | -------- | ----------------- | -| | Q-Learning एल्गोरिदम को सफलतापूर्वक CartPole उदाहरण से अनुकूलित किया गया है, न्यूनतम कोड संशोधनों के साथ, जो 200 कदमों के भीतर झंडा पकड़ने की समस्या को हल करने में सक्षम है। | इंटरनेट से एक नया Q-Learning एल्गोरिदम अपनाया गया है, लेकिन अच्छी तरह से प्रलेखित है; या मौजूदा एल्गोरिदम अपनाया गया है, लेकिन वांछित परिणाम नहीं प्राप्त करता है | छात्र किसी भी एल्गोरिदम को सफलतापूर्वक अपनाने में सक्षम नहीं था, लेकिन समाधान की ओर महत्वपूर्ण कदम उठाए हैं (राज्य विवर्तनिकीकरण, Q-Table डेटा संरचना, आदि को लागू किया है) | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/hi/8-Reinforcement/2-Gym/solution/Julia/README.md deleted file mode 100644 index 0cff07e4..00000000 --- a/translations/hi/8-Reinforcement/2-Gym/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियां हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/2-Gym/solution/R/README.md b/translations/hi/8-Reinforcement/2-Gym/solution/R/README.md deleted file mode 100644 index 01805e4d..00000000 --- a/translations/hi/8-Reinforcement/2-Gym/solution/R/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/8-Reinforcement/README.md b/translations/hi/8-Reinforcement/README.md deleted file mode 100644 index 96451f05..00000000 --- a/translations/hi/8-Reinforcement/README.md +++ /dev/null @@ -1,56 +0,0 @@ -# परिचय: सुदृढीकरण शिक्षण - -सुदृढीकरण शिक्षण, RL, को पर्यवेक्षित शिक्षण और अप्रशिक्षित शिक्षण के साथ एक बुनियादी मशीन लर्निंग प्रतिमान के रूप में देखा जाता है। RL निर्णयों के बारे में है: सही निर्णय देना या कम से कम उनसे सीखना। - -कल्पना कीजिए कि आपके पास एक सिम्युलेटेड वातावरण है जैसे कि शेयर बाजार। अगर आप एक विशेष नियम लागू करते हैं तो क्या होता है? क्या इसका सकारात्मक या नकारात्मक प्रभाव होता है? यदि कुछ नकारात्मक होता है, तो आपको इस _नकारात्मक सुदृढीकरण_ को लेना होगा, उससे सीखना होगा, और दिशा बदलनी होगी। यदि यह एक सकारात्मक परिणाम है, तो आपको उस _सकारात्मक सुदृढीकरण_ पर निर्माण करना होगा। - -![peter and the wolf](../../../translated_images/peter.779730f9ba3a8a8d9290600dcf55f2e491c0640c785af7ac0d64f583c49b8864.hi.png) - -> पीटर और उसके दोस्तों को भूखे भेड़िये से बचना है! चित्र [Jen Looper](https://twitter.com/jenlooper) द्वारा - -## क्षेत्रीय विषय: पीटर और भेड़िया (रूस) - -[पीटर और भेड़िया](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) एक संगीत परी कथा है जिसे रूसी संगीतकार [सर्गेई प्रोकोफिएव](https://en.wikipedia.org/wiki/Sergei_Prokofiev) ने लिखा है। यह एक युवा अग्रणी पीटर की कहानी है, जो बहादुरी से अपने घर से बाहर जंगल की साफ़ जगह पर भेड़िये का पीछा करने के लिए जाता है। इस अनुभाग में, हम मशीन लर्निंग एल्गोरिदम को प्रशिक्षित करेंगे जो पीटर की मदद करेंगे: - -- **आसपास के क्षेत्र का अन्वेषण करें** और एक इष्टतम नेविगेशन मानचित्र बनाएं -- **सीखें** कि स्केटबोर्ड का उपयोग कैसे करें और उस पर संतुलन बनाए रखें, ताकि तेजी से घूम सकें। - -[![Peter and the Wolf](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) - -> 🎥 प्रोकोफिएव द्वारा पीटर और भेड़िया सुनने के लिए ऊपर की छवि पर क्लिक करें - -## सुदृढीकरण शिक्षण - -पिछले अनुभागों में, आपने मशीन लर्निंग समस्याओं के दो उदाहरण देखे हैं: - -- **पर्यवेक्षित**, जहाँ हमारे पास डेटा सेट होते हैं जो उस समस्या का समाधान सुझाते हैं जिसे हम हल करना चाहते हैं। [वर्गीकरण](../4-Classification/README.md) और [प्रतिगमन](../2-Regression/README.md) पर्यवेक्षित शिक्षण कार्य हैं। -- **अप्रशिक्षित**, जिसमें हमारे पास लेबल किया हुआ प्रशिक्षण डेटा नहीं होता है। अप्रशिक्षित शिक्षण का मुख्य उदाहरण [क्लस्टरिंग](../5-Clustering/README.md) है। - -इस अनुभाग में, हम आपको एक नए प्रकार की शिक्षण समस्या से परिचित कराएंगे जिसके लिए लेबल किया हुआ प्रशिक्षण डेटा आवश्यक नहीं है। ऐसे कई प्रकार की समस्याएं हैं: - -- **[अर्ध-पर्यवेक्षित शिक्षण](https://wikipedia.org/wiki/Semi-supervised_learning)**, जिसमें हमारे पास बहुत सारा बिना लेबल का डेटा होता है जिसका उपयोग मॉडल को पूर्व-प्रशिक्षित करने के लिए किया जा सकता है। -- **[सुदृढीकरण शिक्षण](https://wikipedia.org/wiki/Reinforcement_learning)**, जिसमें एक एजेंट कुछ सिम्युलेटेड वातावरण में प्रयोग करके व्यवहार करना सीखता है। - -### उदाहरण - कंप्यूटर गेम - -मान लीजिए आप कंप्यूटर को कोई गेम खेलना सिखाना चाहते हैं, जैसे शतरंज, या [सुपर मारियो](https://wikipedia.org/wiki/Super_Mario)। कंप्यूटर को गेम खेलने के लिए, हमें उसे यह अनुमान लगाना होगा कि प्रत्येक गेम स्थिति में कौन सा कदम उठाना है। जबकि यह एक वर्गीकरण समस्या की तरह लग सकता है, ऐसा नहीं है - क्योंकि हमारे पास स्थिति और संबंधित क्रियाओं के साथ एक डेटा सेट नहीं है। हमारे पास कुछ डेटा हो सकता है जैसे मौजूदा शतरंज मैच या खिलाड़ी सुपर मारियो खेलते हुए, लेकिन संभावना है कि वह डेटा पर्याप्त रूप से बड़ी संख्या में संभावित स्थितियों को कवर नहीं करेगा। - -मौजूदा गेम डेटा की तलाश करने के बजाय, **सुदृढीकरण शिक्षण** (RL) *कंप्यूटर को कई बार खेल खेलने और परिणाम का अवलोकन करने* के विचार पर आधारित है। इस प्रकार, सुदृढीकरण शिक्षण को लागू करने के लिए, हमें दो चीजों की आवश्यकता होती है: - -- **एक वातावरण** और **एक सिम्युलेटर** जो हमें कई बार गेम खेलने की अनुमति देता है। यह सिम्युलेटर सभी गेम नियमों के साथ-साथ संभावित स्थितियों और क्रियाओं को परिभाषित करेगा। - -- **एक पुरस्कार फ़ंक्शन**, जो हमें यह बताएगा कि प्रत्येक चाल या गेम के दौरान हमने कितना अच्छा किया। - -अन्य प्रकार की मशीन लर्निंग और RL के बीच मुख्य अंतर यह है कि RL में हम आमतौर पर यह नहीं जानते कि हम जीतेंगे या हारेंगे जब तक कि हम गेम समाप्त नहीं करते। इस प्रकार, हम यह नहीं कह सकते कि एक निश्चित चाल अकेले अच्छी है या नहीं - हमें केवल गेम के अंत में एक पुरस्कार प्राप्त होता है। और हमारा लक्ष्य ऐसे एल्गोरिदम डिजाइन करना है जो हमें अनिश्चित परिस्थितियों में एक मॉडल को प्रशिक्षित करने की अनुमति देंगे। हम एक RL एल्गोरिदम के बारे में जानेंगे जिसे **Q-लर्निंग** कहा जाता है। - -## पाठ - -1. [सुदृढीकरण शिक्षण और Q-लर्निंग का परिचय](1-QLearning/README.md) -2. [जिम सिम्युलेशन वातावरण का उपयोग करना](2-Gym/README.md) - -## श्रेय - -"सुदृढीकरण शिक्षण का परिचय" ♥️ के साथ [Dmitry Soshnikov](http://soshnikov.com) द्वारा लिखा गया था - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/9-Real-World/1-Applications/README.md b/translations/hi/9-Real-World/1-Applications/README.md deleted file mode 100644 index 6542ba14..00000000 --- a/translations/hi/9-Real-World/1-Applications/README.md +++ /dev/null @@ -1,149 +0,0 @@ -# परिशिष्ट: वास्तविक दुनिया में मशीन लर्निंग - -![वास्तविक दुनिया में मशीन लर्निंग का सारांश एक स्केच नोट में](../../../../translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.hi.png) -> स्केच नोट [Tomomi Imura](https://www.twitter.com/girlie_mac) द्वारा - -इस पाठ्यक्रम में, आपने डेटा को प्रशिक्षण के लिए तैयार करने और मशीन लर्निंग मॉडल बनाने के कई तरीके सीखे हैं। आपने शास्त्रीय रिग्रेशन, क्लस्टरिंग, क्लासिफिकेशन, नेचुरल लैंग्वेज प्रोसेसिंग, और टाइम सीरीज मॉडल की एक श्रृंखला बनाई। बधाई हो! अब, आप सोच रहे होंगे कि यह सब किस लिए है... इन मॉडलों के वास्तविक दुनिया में क्या अनुप्रयोग हैं? - -जबकि उद्योग में एआई में बहुत रुचि है, जो आमतौर पर डीप लर्निंग का उपयोग करता है, फिर भी क्लासिकल मशीन लर्निंग मॉडलों के लिए मूल्यवान अनुप्रयोग हैं। आप आज इनमें से कुछ अनुप्रयोगों का भी उपयोग कर सकते हैं! इस पाठ में, आप जानेंगे कि आठ विभिन्न उद्योग और विषय-विशेषज्ञता डोमेन इन प्रकार के मॉडलों का उपयोग कैसे करते हैं ताकि उनके अनुप्रयोग अधिक प्रभावी, विश्वसनीय, बुद्धिमान, और उपयोगकर्ताओं के लिए मूल्यवान बन सकें। - -## [पूर्व-व्याख्यान क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) - -## 💰 वित्त - -वित्त क्षेत्र में मशीन लर्निंग के कई अवसर हैं। इस क्षेत्र में कई समस्याएं एमएल का उपयोग करके मॉडल और हल की जा सकती हैं। - -### क्रेडिट कार्ड धोखाधड़ी का पता लगाना - -हमने पाठ्यक्रम में पहले [k-means क्लस्टरिंग](../../5-Clustering/2-K-Means/README.md) के बारे में सीखा, लेकिन इसे क्रेडिट कार्ड धोखाधड़ी से संबंधित समस्याओं को हल करने के लिए कैसे उपयोग किया जा सकता है? - -K-means क्लस्टरिंग क्रेडिट कार्ड धोखाधड़ी का पता लगाने की तकनीक में सहायक होती है जिसे **आउटलायर डिटेक्शन** कहा जाता है। आउटलायर, या डेटा सेट के बारे में अवलोकनों में विचलन, हमें बता सकते हैं कि क्या एक क्रेडिट कार्ड सामान्य क्षमता में उपयोग हो रहा है या कुछ असामान्य हो रहा है। नीचे लिंक किए गए पेपर में दिखाए गए अनुसार, आप k-means क्लस्टरिंग एल्गोरिदम का उपयोग करके क्रेडिट कार्ड डेटा को सॉर्ट कर सकते हैं और प्रत्येक लेनदेन को एक क्लस्टर में असाइन कर सकते हैं कि यह कितना आउटलायर लगता है। फिर, आप धोखाधड़ी और वैध लेनदेन के लिए सबसे जोखिम भरे क्लस्टर का मूल्यांकन कर सकते हैं। -[संदर्भ](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) - -### धन प्रबंधन - -धन प्रबंधन में, एक व्यक्ति या फर्म अपने ग्राहकों की ओर से निवेश संभालती है। उनका काम दीर्घकालिक में धन को बनाए रखना और बढ़ाना है, इसलिए यह आवश्यक है कि वे निवेशों का चयन करें जो अच्छा प्रदर्शन करें। - -किसी विशेष निवेश के प्रदर्शन का मूल्यांकन करने का एक तरीका सांख्यिकीय रिग्रेशन के माध्यम से है। [लिनियर रिग्रेशन](../../2-Regression/1-Tools/README.md) यह समझने के लिए एक मूल्यवान उपकरण है कि एक फंड कुछ बेंचमार्क के सापेक्ष कैसा प्रदर्शन करता है। हम यह भी अनुमान लगा सकते हैं कि रिग्रेशन के परिणाम सांख्यिकीय रूप से महत्वपूर्ण हैं या नहीं, या वे ग्राहक के निवेश को कितना प्रभावित करेंगे। आप अपने विश्लेषण को मल्टीपल रिग्रेशन का उपयोग करके और भी विस्तार कर सकते हैं, जहां अतिरिक्त जोखिम कारकों को ध्यान में रखा जा सकता है। एक विशिष्ट फंड के लिए यह कैसे काम करेगा, इसका एक उदाहरण देखने के लिए नीचे दिए गए पेपर को देखें। -[संदर्भ](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) - -## 🎓 शिक्षा - -शैक्षिक क्षेत्र भी एक बहुत ही दिलचस्प क्षेत्र है जहां एमएल लागू किया जा सकता है। यहां कई दिलचस्प समस्याएं हैं जैसे परीक्षाओं या निबंधों में धोखाधड़ी का पता लगाना या सुधार प्रक्रिया में पूर्वाग्रह का प्रबंधन करना। - -### छात्र व्यवहार की भविष्यवाणी - -[Coursera](https://coursera.com), एक ऑनलाइन ओपन कोर्स प्रोवाइडर, के पास एक शानदार टेक ब्लॉग है जहां वे कई इंजीनियरिंग निर्णयों पर चर्चा करते हैं। इस केस स्टडी में, उन्होंने एक रिग्रेशन लाइन को प्लॉट किया ताकि यह पता लगाया जा सके कि कम एनपीएस (नेट प्रमोटर स्कोर) रेटिंग और कोर्स रिटेंशन या ड्रॉप-ऑफ के बीच कोई संबंध है या नहीं। -[संदर्भ](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) - -### पूर्वाग्रह को कम करना - -[Grammarly](https://grammarly.com), एक लेखन सहायक जो वर्तनी और व्याकरण की त्रुटियों की जांच करता है, अपने उत्पादों में उन्नत [प्राकृतिक भाषा प्रसंस्करण प्रणालियों](../../6-NLP/README.md) का उपयोग करता है। उन्होंने अपने टेक ब्लॉग में एक दिलचस्प केस स्टडी प्रकाशित की है कि उन्होंने मशीन लर्निंग में जेंडर पूर्वाग्रह से कैसे निपटा, जिसके बारे में आपने हमारे [प्रारंभिक निष्पक्षता पाठ](../../1-Introduction/3-fairness/README.md) में सीखा। -[संदर्भ](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) - -## 👜 रिटेल - -रिटेल सेक्टर निश्चित रूप से एमएल के उपयोग से लाभ उठा सकता है, बेहतर ग्राहक यात्रा बनाने से लेकर इन्वेंटरी को इष्टतम तरीके से स्टॉक करने तक। - -### ग्राहक यात्रा को व्यक्तिगत बनाना - -Wayfair, एक कंपनी जो फर्नीचर जैसी घरेलू वस्तुएं बेचती है, के लिए ग्राहकों को उनके स्वाद और आवश्यकताओं के अनुसार सही उत्पाद खोजने में मदद करना महत्वपूर्ण है। इस लेख में, कंपनी के इंजीनियर बताते हैं कि वे एमएल और एनएलपी का उपयोग कैसे करते हैं ताकि "ग्राहकों के लिए सही परिणाम सामने आएं"। विशेष रूप से, उनका क्वेरी इंटेंट इंजन इकाई निष्कर्षण, क्लासिफायर प्रशिक्षण, एसेट और राय निष्कर्षण, और ग्राहक समीक्षाओं पर भावना टैगिंग का उपयोग करने के लिए बनाया गया है। यह ऑनलाइन रिटेल में एनएलपी के काम करने का एक क्लासिक उपयोग मामला है। -[संदर्भ](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) - -### इन्वेंटरी प्रबंधन - -[StitchFix](https://stitchfix.com) जैसी अभिनव, फुर्तीली कंपनियां, जो उपभोक्ताओं को कपड़े भेजने वाली एक बॉक्स सेवा है, अनुशंसाओं और इन्वेंटरी प्रबंधन के लिए बड़े पैमाने पर एमएल पर निर्भर करती हैं। उनकी स्टाइलिंग टीमें उनके मर्चेंडाइजिंग टीमों के साथ मिलकर काम करती हैं, वास्तव में: "हमारे एक डेटा वैज्ञानिक ने एक जेनेटिक एल्गोरिदम के साथ छेड़छाड़ की और इसे परिधान पर लागू किया ताकि यह अनुमान लगाया जा सके कि कौन सा कपड़ा आज सफल होगा। हमने इसे मर्चेंडाइज टीम के पास लाया और अब वे इसे एक उपकरण के रूप में उपयोग कर सकते हैं।" -[संदर्भ](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) - -## 🏥 स्वास्थ्य देखभाल - -स्वास्थ्य देखभाल क्षेत्र अनुसंधान कार्यों को अनुकूलित करने और साथ ही रोगियों को फिर से भर्ती करने या रोगों के फैलने से रोकने जैसी लॉजिस्टिक समस्याओं को हल करने के लिए एमएल का लाभ उठा सकता है। - -### क्लिनिकल ट्रायल का प्रबंधन - -क्लिनिकल ट्रायल में विषाक्तता दवा निर्माताओं के लिए एक प्रमुख चिंता है। कितनी विषाक्तता सहनशील है? इस अध्ययन में, विभिन्न क्लिनिकल ट्रायल विधियों का विश्लेषण करने से क्लिनिकल ट्रायल परिणामों की संभावनाओं की भविष्यवाणी के लिए एक नया दृष्टिकोण विकसित हुआ। विशेष रूप से, वे एक [क्लासिफायर](../../4-Classification/README.md) का उपयोग करने में सक्षम थे जो दवाओं के समूहों के बीच अंतर कर सकता है। -[संदर्भ](https://www.sciencedirect.com/science/article/pii/S2451945616302914) - -### अस्पताल पुन: प्रवेश प्रबंधन - -अस्पताल देखभाल महंगी है, विशेष रूप से जब मरीजों को फिर से भर्ती करना पड़ता है। इस पेपर में एक कंपनी पर चर्चा की गई है जो [क्लस्टरिंग](../../5-Clustering/README.md) एल्गोरिदम का उपयोग करके पुन: प्रवेश की संभावना की भविष्यवाणी करने के लिए एमएल का उपयोग करती है। ये क्लस्टर विश्लेषकों को "पुन: प्रवेश के समूहों की खोज करने में मदद करते हैं जिनके पास एक सामान्य कारण हो सकता है"। -[संदर्भ](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) - -### रोग प्रबंधन - -हालिया महामारी ने यह उजागर किया है कि मशीन लर्निंग रोग के फैलाव को रोकने में कैसे मदद कर सकती है। इस लेख में, आप ARIMA, लॉजिस्टिक कर्व्स, लिनियर रिग्रेशन, और SARIMA के उपयोग को पहचानेंगे। "यह काम इस वायरस के फैलाव की दर की गणना करने और इस प्रकार मौतों, रिकवरी, और पुष्टि किए गए मामलों की भविष्यवाणी करने का एक प्रयास है, ताकि यह हमें बेहतर तैयार करने और जीवित रहने में मदद कर सके।" -[संदर्भ](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) - -## 🌲 पारिस्थितिकी और ग्रीन टेक - -प्रकृति और पारिस्थितिकी में कई संवेदनशील प्रणालियाँ होती हैं जहाँ जानवरों और प्रकृति के बीच का अंतःक्रिया ध्यान में आता है। इन प्रणालियों को सटीक रूप से मापना और कुछ होने पर उचित कार्य करना महत्वपूर्ण है, जैसे कि जंगल की आग या जानवरों की आबादी में गिरावट। - -### वन प्रबंधन - -आपने पिछले पाठों में [रिइनफोर्समेंट लर्निंग](../../8-Reinforcement/README.md) के बारे में सीखा। यह प्रकृति में पैटर्न की भविष्यवाणी करने में बहुत उपयोगी हो सकता है। विशेष रूप से, इसका उपयोग जंगल की आग और आक्रामक प्रजातियों के फैलाव जैसी पारिस्थितिक समस्याओं को ट्रैक करने के लिए किया जा सकता है। कनाडा में, एक समूह ने उपग्रह चित्रों से जंगल की आग की गतिशीलता मॉडल बनाने के लिए रिइनफोर्समेंट लर्निंग का उपयोग किया। एक अभिनव "स्थानिक रूप से फैलने वाली प्रक्रिया (SSP)" का उपयोग करके, उन्होंने एक जंगल की आग को "परिदृश्य में किसी भी सेल में एजेंट" के रूप में देखा। "किसी स्थान से किसी भी समय पर आग द्वारा लिए जा सकने वाले क्रियाओं का सेट उत्तर, दक्षिण, पूर्व, या पश्चिम में फैलना या न फैलना शामिल है। - -इस दृष्टिकोण ने सामान्य RL सेटअप को उलट दिया क्योंकि संबंधित मार्कोव निर्णय प्रक्रिया (MDP) का गतिशीलता एक ज्ञात कार्य है।" इस समूह द्वारा उपयोग किए गए क्लासिक एल्गोरिदम के बारे में अधिक पढ़ने के लिए नीचे दिए गए लिंक पर जाएं। -[संदर्भ](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) - -### जानवरों की गति का पता लगाना - -जबकि डीप लर्निंग ने जानवरों की गति को दृश्य रूप से ट्रैक करने में क्रांति ला दी है (आप अपना खुद का [ध्रुवीय भालू ट्रैकर](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) यहाँ बना सकते हैं), क्लासिकल एमएल का इस कार्य में अभी भी एक स्थान है। - -फार्म जानवरों की गति को ट्रैक करने और आईओटी सेंसर इस प्रकार की दृश्य प्रसंस्करण का उपयोग करते हैं, लेकिन अधिक बुनियादी एमएल तकनीकें डेटा को पूर्व-प्रसंस्करण करने के लिए उपयोगी हैं। उदाहरण के लिए, इस पेपर में, भेड़ों की मुद्राओं की निगरानी और विभिन्न क्लासिफायर एल्गोरिदम का उपयोग करके विश्लेषण किया गया। आप पृष्ठ 335 पर आरओसी कर्व को पहचान सकते हैं। -[संदर्भ](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) - -### ⚡️ ऊर्जा प्रबंधन - -हमारे [टाइम सीरीज फोरकास्टिंग](../../7-TimeSeries/README.md) पर पाठों में, हमने एक शहर के लिए आपूर्ति और मांग को समझकर राजस्व उत्पन्न करने के लिए स्मार्ट पार्किंग मीटर की अवधारणा को लागू किया। इस लेख में, क्लस्टरिंग, रिग्रेशन और टाइम सीरीज फोरकास्टिंग को मिलाकर आयरलैंड में भविष्य की ऊर्जा उपयोग की भविष्यवाणी करने में कैसे मदद की गई, इसका विवरण दिया गया है, स्मार्ट मीटरिंग पर आधारित। -[संदर्भ](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) - -## 💼 बीमा - -बीमा क्षेत्र एक और क्षेत्र है जो एमएल का उपयोग करके व्यवहार्य वित्तीय और अंकेक्षणीय मॉडल का निर्माण और अनुकूलन करता है। - -### अस्थिरता प्रबंधन - -MetLife, एक जीवन बीमा प्रदाता, अपने वित्तीय मॉडलों में अस्थिरता का विश्लेषण और शमन करने के तरीके के बारे में खुलकर बताता है। इस लेख में आप बाइनरी और ऑर्डिनल क्लासिफिकेशन विज़ुअलाइज़ेशन देखेंगे। आप फोरकास्टिंग विज़ुअलाइज़ेशन भी खोजेंगे। -[संदर्भ](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) - -## 🎨 कला, संस्कृति, और साहित्य - -कला में, उदाहरण के लिए पत्रकारिता में, कई दिलचस्प समस्याएं हैं। फेक न्यूज़ का पता लगाना एक बड़ी समस्या है क्योंकि यह साबित हो चुका है कि यह लोगों की राय को प्रभावित कर सकता है और यहां तक कि लोकतंत्रों को भी गिरा सकता है। संग्रहालय भी एमएल का उपयोग करके लाभ उठा सकते हैं, जैसे कि कलाकृतियों के बीच लिंक खोजने से लेकर संसाधन योजना तक। - -### फेक न्यूज़ का पता लगाना - -आज के मीडिया में फेक न्यूज़ का पता लगाना बिल्ली और चूहे का खेल बन गया है। इस लेख में, शोधकर्ता सुझाव देते हैं कि एक प्रणाली जिसमें हमने अध्ययन किए गए कई एमएल तकनीकों का संयोजन किया जा सकता है और सबसे अच्छा मॉडल तैनात किया जा सकता है: "यह प्रणाली डेटा से विशेषताएं निकालने के लिए प्राकृतिक भाषा प्रसंस्करण पर आधारित है और फिर इन विशेषताओं का उपयोग मशीन लर्निंग क्लासिफायर जैसे Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), और Logistic Regression(LR) के प्रशिक्षण के लिए किया जाता है।" -[संदर्भ](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) - -यह लेख दिखाता है कि विभिन्न एमएल डोमेन को मिलाकर दिलचस्प परिणाम प्राप्त किए जा सकते हैं जो फेक न्यूज़ को फैलने और वास्तविक नुकसान से बचाने में मदद कर सकते हैं; इस मामले में, प्रेरणा COVID उपचारों के बारे में अफवाहों के फैलाव से हुई हिंसा थी। - -### संग्रहालय एमएल - -संग्रहालय एआई क्रांति के कगार पर हैं जिसमें संग्रहों को सूचीबद्ध और डिजिटाइज़ करना और कलाकृतियों के बीच लिंक खोजना तकनीक के उन्नति के साथ आसान हो रहा है। [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) जैसे प्रोजेक्ट्स वेटिकन आर्काइव्स जैसी अप्राप्य संग्रहों के रहस्यों को उजागर करने में मदद कर रहे हैं। लेकिन, संग्रहालयों के व्यावसायिक पहलू भी एमएल मॉडल से लाभान्वित होते हैं। - -उदाहरण के लिए, शिकागो का आर्ट इंस्टीट्यूट मॉडल बनाता है ताकि यह अनुमान लगाया जा सके कि दर्शक किसमें रुचि रखते हैं और वे कब प्रदर्शनियों में आएंगे। लक्ष्य प्रत्येक बार जब उपयोगकर्ता संग्रहालय का दौरा करता है तो व्यक्तिगत और अनुकूलित आगंतुक अनुभव बनाना है। "वित्तीय 2017 के दौरान, मॉडल ने उपस्थिति और प्रवेश को 1 प्रतिशत सटीकता के भीतर भविष्यवाणी की, एंड्रयू सिमनिक, आर्ट इंस्टीट्यूट के वरिष्ठ उपाध्यक्ष कहते हैं।" -[Reference](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) - -## 🏷 मार्केटिंग - -### ग्राहक विभाजन - -सबसे प्रभावी मार्केटिंग रणनीतियाँ विभिन्न समूहों के आधार पर ग्राहकों को अलग-अलग तरीकों से लक्षित करती हैं। इस लेख में, विभेदित मार्केटिंग का समर्थन करने के लिए क्लस्टरिंग एल्गोरिदम के उपयोगों पर चर्चा की गई है। विभेदित मार्केटिंग कंपनियों को ब्रांड पहचान में सुधार करने, अधिक ग्राहकों तक पहुँचने और अधिक पैसा कमाने में मदद करती है। -[Reference](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) - -## 🚀 चुनौती - -उस अन्य क्षेत्र की पहचान करें जो इस पाठ्यक्रम में सीखी गई कुछ तकनीकों से लाभान्वित होता है, और खोजें कि यह ML का उपयोग कैसे करता है। - -## [व्याख्यान के बाद का क्विज़](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) - -## समीक्षा और आत्म-अध्ययन - -Wayfair डेटा साइंस टीम के पास कई दिलचस्प वीडियो हैं कि वे अपनी कंपनी में ML का उपयोग कैसे करते हैं। यह [देखने लायक](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos) है! - -## असाइनमेंट - -[A ML scavenger hunt](assignment.md) - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में अधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/9-Real-World/1-Applications/assignment.md b/translations/hi/9-Real-World/1-Applications/assignment.md deleted file mode 100644 index 04699ff5..00000000 --- a/translations/hi/9-Real-World/1-Applications/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# एक एमएल स्कैवेंजर हंट - -## निर्देश - -इस पाठ में, आपने कई वास्तविक जीवन के उपयोग मामलों के बारे में सीखा जो क्लासिकल एमएल का उपयोग करके हल किए गए थे। जबकि डीप लर्निंग, एआई में नई तकनीकों और उपकरणों का उपयोग, और न्यूरल नेटवर्क का लाभ उठाने से इन क्षेत्रों में मदद करने वाले उपकरणों के उत्पादन में तेजी आई है, इस पाठ्यक्रम में तकनीकों का उपयोग करके क्लासिक एमएल अभी भी बहुत मूल्य रखता है। - -इस असाइनमेंट में, कल्पना करें कि आप एक हैकाथॉन में भाग ले रहे हैं। पाठ्यक्रम में आपने जो सीखा है उसका उपयोग करके इस पाठ में चर्चा किए गए किसी एक क्षेत्र में समस्या को हल करने के लिए क्लासिक एमएल का उपयोग करके एक समाधान प्रस्तावित करें। एक प्रस्तुति बनाएं जिसमें आप अपने विचार को लागू करने के तरीके पर चर्चा करें। बोनस अंक यदि आप नमूना डेटा एकत्र कर सकते हैं और अपनी अवधारणा का समर्थन करने के लिए एक एमएल मॉडल बना सकते हैं! - -## मूल्यांकन - -| मानदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | -| | एक पावरपॉइंट प्रस्तुति प्रस्तुत की गई है - मॉडल बनाने के लिए बोनस | एक गैर-नवीन, बुनियादी प्रस्तुति प्रस्तुत की गई है | काम अधूरा है | - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/9-Real-World/2-Debugging-ML-Models/README.md b/translations/hi/9-Real-World/2-Debugging-ML-Models/README.md deleted file mode 100644 index d2c38508..00000000 --- a/translations/hi/9-Real-World/2-Debugging-ML-Models/README.md +++ /dev/null @@ -1,114 +0,0 @@ -# पोस्टस्क्रिप्ट: मशीन लर्निंग में मॉडल डिबगिंग का उपयोग जिम्मेदार एआई डैशबोर्ड घटकों के साथ - -## [प्री-लेक्चर क्विज](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## परिचय - -मशीन लर्निंग हमारे रोजमर्रा के जीवन को प्रभावित करता है। एआई हमारे समाज के सबसे महत्वपूर्ण सिस्टमों में अपनी जगह बना रहा है, जैसे कि स्वास्थ्य सेवा, वित्त, शिक्षा, और रोजगार। उदाहरण के लिए, सिस्टम और मॉडल दैनिक निर्णय लेने के कार्यों में शामिल होते हैं, जैसे कि स्वास्थ्य देखभाल निदान या धोखाधड़ी का पता लगाना। परिणामस्वरूप, एआई में प्रगति के साथ-साथ तेजी से अपनाने के साथ सामाजिक अपेक्षाएं और बढ़ती विनियमन बदल रहे हैं। हम लगातार देखते हैं कि एआई सिस्टम किस प्रकार अपेक्षाओं को पूरा नहीं करते हैं; वे नई चुनौतियों को उजागर करते हैं; और सरकारें एआई समाधानों को विनियमित करना शुरू कर रही हैं। इसलिए, यह महत्वपूर्ण है कि इन मॉडलों का विश्लेषण किया जाए ताकि सभी के लिए निष्पक्ष, विश्वसनीय, समावेशी, पारदर्शी, और जवाबदेह परिणाम प्रदान किए जा सकें। - -इस पाठ्यक्रम में, हम व्यावहारिक उपकरणों को देखेंगे जिनका उपयोग यह आकलन करने के लिए किया जा सकता है कि क्या किसी मॉडल में जिम्मेदार एआई मुद्दे हैं। पारंपरिक मशीन लर्निंग डिबगिंग तकनीकें आमतौर पर मात्रात्मक गणनाओं पर आधारित होती हैं, जैसे कि संपूर्ण सटीकता या औसत त्रुटि हानि। कल्पना करें कि जब आप इन मॉडलों को बनाने के लिए उपयोग कर रहे डेटा में कुछ जनसांख्यिकी की कमी हो, जैसे कि नस्ल, लिंग, राजनीतिक दृष्टिकोण, धर्म, या असंतुलित रूप से प्रतिनिधित्व करता हो। जब मॉडल का आउटपुट किसी जनसांख्यिकी को पक्षपाती रूप से व्याख्या किया जाता है, तो क्या होगा? इससे संवेदनशील विशेषता समूहों की अधिक या कम प्रतिनिधित्व की संभावना होती है, जिससे मॉडल में निष्पक्षता, समावेशिता, या विश्वसनीयता के मुद्दे उत्पन्न हो सकते हैं। एक और कारक है, मशीन लर्निंग मॉडल को ब्लैक बॉक्स माना जाता है, जिससे यह समझना और समझाना मुश्किल हो जाता है कि मॉडल की भविष्यवाणी को क्या प्रेरित करता है। ये सभी चुनौतियां डेटा वैज्ञानिकों और एआई डेवलपर्स का सामना करती हैं जब उनके पास मॉडल की निष्पक्षता या विश्वसनीयता का डिबग और आकलन करने के लिए पर्याप्त उपकरण नहीं होते हैं। - -इस पाठ में, आप अपने मॉडलों को डिबग करने के बारे में जानेंगे: - -- **त्रुटि विश्लेषण**: यह पहचानें कि आपके डेटा वितरण में मॉडल की उच्च त्रुटि दर कहाँ है। -- **मॉडल ओवरव्यू**: विभिन्न डेटा समूहों के बीच तुलनात्मक विश्लेषण करें ताकि आपके मॉडल के प्रदर्शन मेट्रिक्स में असमानताएं खोजी जा सकें। -- **डेटा विश्लेषण**: यह जांचें कि आपके डेटा में कहाँ अधिक या कम प्रतिनिधित्व हो सकता है जो आपके मॉडल को एक डेटा जनसांख्यिकी के पक्ष में कर सकता है। -- **फीचर महत्व**: समझें कि कौन सी विशेषताएं आपके मॉडल की भविष्यवाणियों को वैश्विक स्तर या स्थानीय स्तर पर प्रेरित कर रही हैं। - -## पूर्वापेक्षा - -पूर्वापेक्षा के रूप में, कृपया [डेवलपर्स के लिए जिम्मेदार एआई उपकरण](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) की समीक्षा करें। - -> ![जिम्मेदार एआई उपकरण पर गिफ](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) - -## त्रुटि विश्लेषण - -सटीकता मापने के लिए पारंपरिक मॉडल प्रदर्शन मेट्रिक्स आमतौर पर सही और गलत भविष्यवाणियों पर आधारित गणनाएं होती हैं। उदाहरण के लिए, यह निर्धारित करना कि एक मॉडल 89% समय सटीक है और त्रुटि हानि 0.001 है, एक अच्छा प्रदर्शन माना जा सकता है। त्रुटियां अक्सर आपके आधारभूत डेटा सेट में समान रूप से वितरित नहीं होती हैं। आपको 89% मॉडल सटीकता स्कोर मिल सकता है लेकिन पता चलता है कि आपके डेटा के विभिन्न क्षेत्रों में मॉडल 42% समय विफल हो रहा है। इन विफलता पैटर्न के परिणामस्वरूप कुछ डेटा समूहों के साथ निष्पक्षता या विश्वसनीयता के मुद्दे हो सकते हैं। यह समझना आवश्यक है कि मॉडल कहाँ अच्छा प्रदर्शन कर रहा है और कहाँ नहीं। डेटा क्षेत्रों में जहाँ आपके मॉडल में बड़ी संख्या में गलतियाँ हैं, वे एक महत्वपूर्ण डेटा जनसांख्यिकी हो सकते हैं। - -![मॉडल त्रुटियों का विश्लेषण और डिबग करें](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.hi.png) - -RAI डैशबोर्ड पर त्रुटि विश्लेषण घटक विभिन्न समूहों के बीच मॉडल विफलता को एक पेड़ दृश्य के साथ दिखाता है। यह आपके डेटा सेट में उच्च त्रुटि दर वाले क्षेत्रों या विशेषताओं की पहचान करने में सहायक होता है। यह देखकर कि अधिकांश मॉडल की गलतियाँ कहाँ से आ रही हैं, आप मूल कारण की जांच शुरू कर सकते हैं। आप डेटा के समूह भी बना सकते हैं जिन पर विश्लेषण किया जा सके। ये डेटा समूह डिबगिंग प्रक्रिया में मदद करते हैं यह निर्धारित करने में कि एक समूह में मॉडल का प्रदर्शन अच्छा क्यों है और दूसरे में गलत क्यों है। - -![त्रुटि विश्लेषण](../../../../translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.hi.png) - -पेड़ मानचित्र पर दृश्य संकेतक समस्या क्षेत्रों को तेजी से खोजने में मदद करते हैं। उदाहरण के लिए, पेड़ नोड का गहरा लाल रंग जितना गहरा होता है, त्रुटि दर उतनी ही अधिक होती है। - -हीट मैप एक और दृश्य कार्यक्षमता है जिसका उपयोग उपयोगकर्ता त्रुटि दर की जांच करने के लिए एक या दो विशेषताओं का उपयोग करके कर सकते हैं ताकि मॉडल की त्रुटियों में योगदानकर्ता का पता लगाया जा सके। - -![त्रुटि विश्लेषण हीटमैप](../../../../translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.hi.png) - -त्रुटि विश्लेषण का उपयोग करें जब आपको आवश्यकता हो: - -* यह गहराई से समझें कि मॉडल विफलताएँ डेटा सेट और कई इनपुट और फीचर आयामों में कैसे वितरित होती हैं। -* समग्र प्रदर्शन मेट्रिक्स को तोड़ें ताकि त्रुटिपूर्ण समूहों की स्वचालित रूप से खोज की जा सके और लक्षित सुधारात्मक कदमों की जानकारी प्राप्त हो सके। - -## मॉडल ओवरव्यू - -एक मशीन लर्निंग मॉडल के प्रदर्शन का मूल्यांकन करने के लिए इसके व्यवहार की समग्र समझ प्राप्त करना आवश्यक है। यह त्रुटि दर, सटीकता, रिकॉल, प्रिसिजन, या MAE (मीन एब्सोल्यूट एरर) जैसे एक से अधिक मेट्रिक्स की समीक्षा करके प्राप्त किया जा सकता है ताकि प्रदर्शन मेट्रिक्स में असमानताएं पाई जा सकें। एक प्रदर्शन मेट्रिक बहुत अच्छा लग सकता है, लेकिन एक अन्य मेट्रिक में गलतियाँ उजागर हो सकती हैं। इसके अलावा, पूरे डेटा सेट या समूहों में मेट्रिक्स की तुलना करने से यह पता चलता है कि मॉडल कहाँ अच्छा प्रदर्शन कर रहा है और कहाँ नहीं। यह विशेष रूप से महत्वपूर्ण है संवेदनशील और असंवेदनशील विशेषताओं (जैसे, रोगी की नस्ल, लिंग, या आयु) के बीच मॉडल के प्रदर्शन को देखने के लिए ताकि संभावित अनुचितता को उजागर किया जा सके जो मॉडल में हो सकती है। उदाहरण के लिए, यह पता लगाना कि मॉडल एक समूह में अधिक गलत है जिसमें संवेदनशील विशेषताएं हैं, मॉडल में संभावित अनुचितता को उजागर कर सकता है। - -RAI डैशबोर्ड के मॉडल ओवरव्यू घटक न केवल समूह में डेटा प्रतिनिधित्व के प्रदर्शन मेट्रिक्स का विश्लेषण करने में मदद करते हैं, बल्कि यह उपयोगकर्ताओं को विभिन्न समूहों के बीच मॉडल के व्यवहार की तुलना करने की क्षमता भी देता है। - -![डेटासेट समूह - RAI डैशबोर्ड में मॉडल ओवरव्यू](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.hi.png) - -घटक की फीचर-आधारित विश्लेषण कार्यक्षमता उपयोगकर्ताओं को एक विशेष फीचर के भीतर डेटा उपसमूहों को संकीर्ण करने की अनुमति देती है ताकि सूक्ष्म स्तर पर विसंगतियों की पहचान की जा सके। उदाहरण के लिए, डैशबोर्ड में उपयोगकर्ता-चयनित फीचर (जैसे, *"time_in_hospital < 3"* या *"time_in_hospital >= 7"*) के लिए स्वचालित रूप से समूह उत्पन्न करने के लिए अंतर्निहित बुद्धिमत्ता है। यह उपयोगकर्ता को बड़े डेटा समूह से एक विशेष फीचर को अलग करने की अनुमति देता है ताकि यह देखा जा सके कि क्या यह मॉडल के गलत परिणामों का प्रमुख प्रभावक है। - -![फीचर समूह - RAI डैशबोर्ड में मॉडल ओवरव्यू](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.hi.png) - -मॉडल ओवरव्यू घटक दो प्रकार के असमानता मेट्रिक्स का समर्थन करता है: - -**मॉडल प्रदर्शन में असमानता**: ये मेट्रिक्स का सेट डेटा के उपसमूहों में चयनित प्रदर्शन मेट्रिक के मानों में असमानता (अंतर) की गणना करता है। यहाँ कुछ उदाहरण हैं: - -* सटीकता दर में असमानता -* त्रुटि दर में असमानता -* प्रिसिजन में असमानता -* रिकॉल में असमानता -* मीन एब्सोल्यूट एरर (MAE) में असमानता - -**चयन दर में असमानता**: यह मेट्रिक उपसमूहों के बीच चयन दर (अनुकूल भविष्यवाणी) में अंतर को शामिल करता है। इसका एक उदाहरण ऋण स्वीकृति दरों में असमानता है। चयन दर का अर्थ है प्रत्येक वर्ग में डेटा बिंदुओं का अंश जिसे 1 के रूप में वर्गीकृत किया गया है (बाइनरी वर्गीकरण में) या भविष्यवाणी मानों का वितरण (पुनरावृत्ति में)। - -## डेटा विश्लेषण - -> "यदि आप डेटा को लंबे समय तक प्रताड़ित करेंगे, तो यह किसी भी चीज़ को स्वीकार कर लेगा" - रोनाल्ड कोस - -यह कथन अत्यधिक लगता है, लेकिन यह सच है कि डेटा को किसी भी निष्कर्ष का समर्थन करने के लिए हेरफेर किया जा सकता है। ऐसी हेरफेर कभी-कभी अनजाने में हो सकती है। हम सभी मनुष्य हैं, और हमारे पास पूर्वाग्रह होते हैं, और यह अक्सर कठिन होता है यह जानना कि कब आप डेटा में पूर्वाग्रह ला रहे हैं। एआई और मशीन लर्निंग में निष्पक्षता सुनिश्चित करना एक जटिल चुनौती बनी हुई है। - -डेटा पारंपरिक मॉडल प्रदर्शन मेट्रिक्स के लिए एक बड़ा अंधा स्थान है। आपके पास उच्च सटीकता स्कोर हो सकते हैं, लेकिन यह हमेशा आपके डेटा सेट में मौजूद अंतर्निहित डेटा पूर्वाग्रह को प्रतिबिंबित नहीं करता है। उदाहरण के लिए, यदि किसी कंपनी में कार्यकारी पदों पर 27% महिलाएं और 73% पुरुष हैं, तो एक नौकरी विज्ञापन एआई मॉडल जो इस डेटा पर प्रशिक्षित है, वरिष्ठ स्तर की नौकरी पदों के लिए मुख्य रूप से पुरुष दर्शकों को लक्षित कर सकता है। इस डेटा में असंतुलन ने मॉडल की भविष्यवाणी को एक लिंग के पक्ष में झुका दिया। यह एक निष्पक्षता मुद्दा प्रकट करता है जहाँ एआई मॉडल में लिंग पूर्वाग्रह है। - -RAI डैशबोर्ड पर डेटा विश्लेषण घटक उन क्षेत्रों की पहचान करने में मदद करता है जहाँ डेटा सेट में अधिक या कम प्रतिनिधित्व है। यह उपयोगकर्ताओं को डेटा असंतुलन या किसी विशेष डेटा समूह की कमी से उत्पन्न त्रुटियों और निष्पक्षता मुद्दों के मूल कारण का निदान करने में मदद करता है। यह उपयोगकर्ताओं को पूर्वानुमानित और वास्तविक परिणामों, त्रुटि समूहों, और विशिष्ट विशेषताओं के आधार पर डेटा सेट को देखने की क्षमता देता है। कभी-कभी एक कम प्रतिनिधित्व वाले डेटा समूह की खोज यह भी प्रकट कर सकती है कि मॉडल अच्छी तरह से नहीं सीख रहा है, इसलिए उच्च त्रुटियां हैं। एक मॉडल में डेटा पूर्वाग्रह का होना न केवल एक निष्पक्षता मुद्दा है बल्कि यह दिखाता है कि मॉडल समावेशी या विश्वसनीय नहीं है। - -![RAI डैशबोर्ड पर डेटा विश्लेषण घटक](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.hi.png) - -डेटा विश्लेषण का उपयोग करें जब आपको आवश्यकता हो: - -* विभिन्न फिल्टर का चयन करके अपने डेटा सेट के आंकड़ों का अन्वेषण करें ताकि अपने डेटा को विभिन्न आयामों (जिसे समूह भी कहा जाता है) में विभाजित किया जा सके। -* विभिन्न समूहों और फीचर समूहों के बीच अपने डेटा सेट का वितरण समझें। -* यह निर्धारित करें कि क्या आपके निष्कर्ष जो निष्पक्षता, त्रुटि विश्लेषण, और कारणता से संबंधित हैं (अन्य डैशबोर्ड घटकों से प्राप्त) आपके डेटा सेट के वितरण का परिणाम हैं। -* यह तय करें कि प्रतिनिधित्व मुद्दों, लेबल शोर, फीचर शोर, लेबल पूर्वाग्रह, और समान कारकों से उत्पन्न त्रुटियों को कम करने के लिए किन क्षेत्रों में अधिक डेटा एकत्र करना है। - -## मॉडल व्याख्यात्मकता - -मशीन लर्निंग मॉडल अक्सर ब्लैक बॉक्स होते हैं। यह समझना कि कौन सी प्रमुख डेटा विशेषताएँ मॉडल की भविष्यवाणी को प्रेरित करती हैं, चुनौतीपूर्ण हो सकता है। यह महत्वपूर्ण है कि एक मॉडल क्यों एक निश्चित भविष्यवाणी करता है, इसके लिए पारदर्शिता प्रदान की जाए। उदाहरण के लिए, यदि एक एआई सिस्टम भविष्यवाणी करता है कि एक मधुमेह रोगी 30 दिनों से कम समय में अस्पताल में फिर से भर्ती होने के जोखिम में है, तो इसे अपनी भविष्यवाणी का समर्थन करने वाला डेटा प्रदान करने में सक्षम होना चाहिए। सहायक डेटा संकेतक पारदर्शिता लाते हैं ताकि चिकित्सक या अस्पताल सूचित निर्णय लेने में सक्षम हों। इसके अलावा, एक व्यक्तिगत रोगी के लिए मॉडल ने भविष्यवाणी क्यों की, इसे समझाने में सक्षम होना स्वास्थ्य विनियमों के साथ जवाबदेही सक्षम करता है। जब आप मशीन लर्निंग मॉडलों का उपयोग ऐसे तरीकों से करते हैं जो लोगों के जीवन को प्रभावित करते हैं, तो यह समझना और समझाना महत्वपूर्ण है कि मॉडल के व्यवहार को क्या प्रेरित करता है। मॉडल व्याख्यात्मकता और व्याख्यात्मकता निम्नलिखित परिदृश्यों में प्रश्नों का उत्तर देने में मदद करती है: - -* मॉडल डिबगिंग: मेरे मॉडल ने यह गलती क्यों की? मैं अपने मॉडल को कैसे सुधार सकता हूँ? -* मानव-एआई सहयोग: मैं मॉडल के निर्णयों को कैसे समझ सकता हूँ और उन पर विश्वास कर सकता हूँ? -* नियामक अनुपालन: क्या मेरा मॉडल कानूनी आवश्यकताओं को पूरा करता है? - -RAI डैशबोर्ड का फीचर महत्व घटक आपको डिबग करने और यह समझने में मदद करता है कि एक मॉडल भविष्यवाणियाँ कैसे करता है। यह मशीन लर्निंग पेशेवरों और निर्णयकर्ताओं के लिए एक उपयोगी उपकरण भी है ताकि वे यह समझा सकें और दिखा सकें कि कौन सी विशेषताएँ मॉडल के व्यवहार को प्रभावित कर रही हैं, ताकि नियामक अनुपालन के लिए सबूत प्रदान किया जा सके। इसके बाद, उपयोगकर्ता वैश्विक और स्थानीय व्याख्याओं दोनों का अन्वेषण कर सकते हैं ताकि यह सत्यापित किया जा सके कि कौन सी विशेषताएँ मॉडल की भविष्यवाणी को प्रेरित करती हैं। वैश्विक व्याख्याएँ शीर्ष विशेषताओं को सूचीबद्ध करती हैं जिन्होंने मॉडल की समग्र भविष्यवाणी को प्रभावित किया। स्थानीय व्याख्याएँ यह दिखाती हैं कि कौन सी विशेषताएँ एक व्यक्तिगत मामले के लिए मॉडल की भविष्यवाणी को प्रेरित करती हैं। स्थानीय व्याख्याओं का मूल्यांकन करने की क्षमता एक विशिष्ट मामले को डिबग या ऑडिट करने में भी सहायक होती है ताकि यह बेहतर समझा जा सके और व्याख्या की जा सके कि मॉडल ने एक सटीक या गलत भविष्यवाणी क्यों की। - -![RAI डैशबोर्ड का फीचर महत्व घटक](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.hi.png) - -* वैश्विक व्याख्याएँ: उदाहरण के लिए, कौन सी विशेषताएँ मधुमेह अस्पताल पुनः भर्ती मॉडल के समग्र व्यवहार को प्रभावित करती हैं? -* स्थानीय व्याख्याएँ: उदाहरण के लिए, एक 60 वर्ष से अधिक आयु के मधुमेह रोगी के साथ पूर्व अस्पताल में भर्ती होने वाले को 30 दिनों के भीतर अस्पताल में पुनः भर्ती होने की भविष्यवाणी क्यों की गई? - -विभिन्न समूहों के बीच मॉडल के प्रदर्शन की जांच करने की प्रक्रिया में, फीचर महत्व यह दिखाता है कि समूहों में एक फीचर का कितना प्रभाव है। यह तुलना करते समय विसंगतियों को प्रकट करने में मदद करता है कि मॉडल की गलत भविष्यवाणियों को प्रेरित करने में फीचर का कितना प्रभाव है। फीचर महत्व घटक यह दिखा सकता है कि एक फीचर में कौन सी मानें मॉडल के परिणाम को सकारात्मक या नकारात्मक रूप से प्रभावित करती हैं। उदाहरण के लिए, यदि मॉडल ने एक गलत भविष्यवाणी की, तो घटक आपको यह ड्रिल करने और यह पता लगाने की क्षमता देता है कि भविष्यवाणी को कौन सी विशेषताएँ या विशेषता मानें प्रेरित करती हैं। यह स्तर का विवरण न केवल डिबगिंग में मदद करता है बल्कि ऑडिटिंग स्थितियों में पारदर्शिता और जवाबदेही प्रदान करता है। अंत में, घटक आपको निष्पक्षता मुद्दों की पहचान करने में मदद कर सकता है। उदाहरण के लिए, यदि एक संवेदनशील विशेषता जैसे कि जातीयता या लिंग मॉडल की भविष्यवाणी को प्रेरित करने में अत्यधिक प्रभावशाली है, तो यह मॉडल में नस्ल या लिंग पूर्वाग्रह का संकेत हो सकता है। - -![फीचर महत्व](../../../../translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.hi.png) - -व्याख्यात्मकता का उपयोग करें जब आपको आवश्यकता हो: - -* यह निर्धारित करें कि आपके एआई सिस्टम की भविष्यवाणियाँ कितनी विश्वसनीय हैं यह समझकर कि कौन सी विशेषताएँ भविष्यवाणियों के लिए सबसे महत्वपूर्ण हैं। -* अपने मॉडल को समझकर और यह पहचानकर कि क्या मॉडल स्वस्थ विशेषताओं का उपयोग कर रहा है या केवल झूठे सहसंबंधों का उपयोग कर रहा है, अपने मॉडल को डिबग करने के लिए दृष्टिकोण अपनाएँ। -* यह समझकर संभावित अनुचितता के स्रोतों का पता लगाएँ कि क्या मॉडल संवेदनशील विशेषताओं या उनके साथ - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियां या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/hi/9-Real-World/2-Debugging-ML-Models/assignment.md deleted file mode 100644 index 95e1de42..00000000 --- a/translations/hi/9-Real-World/2-Debugging-ML-Models/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Responsible AI (RAI) डैशबोर्ड का अन्वेषण करें - -## निर्देश - -इस पाठ में आपने RAI डैशबोर्ड के बारे में सीखा, जो "ओपन-सोर्स" टूल्स पर आधारित घटकों का एक समूह है जो डेटा वैज्ञानिकों को एरर विश्लेषण, डेटा अन्वेषण, निष्पक्षता मूल्यांकन, मॉडल व्याख्यात्मकता, काउंटरफैक्ट/व्हाट-इफ आकलन और AI सिस्टम पर कारण विश्लेषण करने में मदद करता है। इस असाइनमेंट के लिए, RAI डैशबोर्ड के कुछ नमूना [notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) का अन्वेषण करें और अपने निष्कर्षों को एक पेपर या प्रस्तुति में रिपोर्ट करें। - -## मूल्यांकन - -| मापदंड | उत्कृष्ट | पर्याप्त | सुधार की आवश्यकता | -| ------- | --------- | -------- | ----------------- | -| | एक पेपर या पॉवरपॉइंट प्रस्तुति प्रस्तुत की जाती है जिसमें RAI डैशबोर्ड के घटकों, चलाए गए नोटबुक और उससे निकाले गए निष्कर्षों पर चर्चा की जाती है | निष्कर्षों के बिना एक पेपर प्रस्तुत किया जाता है | कोई पेपर प्रस्तुत नहीं किया गया है | - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया अवगत रहें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/9-Real-World/README.md b/translations/hi/9-Real-World/README.md deleted file mode 100644 index 5884b6d6..00000000 --- a/translations/hi/9-Real-World/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# पोस्टस्क्रिप्ट: क्लासिक मशीन लर्निंग के वास्तविक दुनिया के अनुप्रयोग - -इस पाठ्यक्रम के इस भाग में, आपको क्लासिकल एमएल के कुछ वास्तविक दुनिया के अनुप्रयोगों से परिचित कराया जाएगा। हमने इंटरनेट को खंगाला है ताकि ऐसे अनुप्रयोगों के बारे में श्वेतपत्र और लेख मिल सकें जिन्होंने इन रणनीतियों का उपयोग किया है, न्यूरल नेटवर्क, डीप लर्निंग और एआई से यथासंभव बचते हुए। जानें कि कैसे एमएल का उपयोग व्यावसायिक प्रणालियों, पारिस्थितिक अनुप्रयोगों, वित्त, कला और संस्कृति, और अधिक में किया जाता है। - -![chess](../../../translated_images/chess.e704a268781bdad85d1876b6c2295742fa0d856e7dcf3659147052df9d3db205.hi.jpg) - -> फोटो एलेक्सिस फाउवेट द्वारा अनस्प्लैश पर - -## पाठ - -1. [एमएल के वास्तविक दुनिया के अनुप्रयोग](1-Applications/README.md) -2. [जिम्मेदार एआई डैशबोर्ड घटकों का उपयोग करके मशीन लर्निंग में मॉडल डीबगिंग](2-Debugging-ML-Models/README.md) - -## श्रेय - -"वास्तविक दुनिया के अनुप्रयोग" को [Jen Looper](https://twitter.com/jenlooper) और [Ornella Altunyan](https://twitter.com/ornelladotcom) सहित कई लोगों की एक टीम द्वारा लिखा गया था। - -"जिम्मेदार एआई डैशबोर्ड घटकों का उपयोग करके मशीन लर्निंग में मॉडल डीबगिंग" को [Ruth Yakubu](https://twitter.com/ruthieyakubu) द्वारा लिखा गया था। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/CODE_OF_CONDUCT.md b/translations/hi/CODE_OF_CONDUCT.md deleted file mode 100644 index 95b3c7d9..00000000 --- a/translations/hi/CODE_OF_CONDUCT.md +++ /dev/null @@ -1,12 +0,0 @@ -# Microsoft ओपन सोर्स कोड ऑफ कंडक्ट - -इस प्रोजेक्ट ने [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) को अपनाया है। - -संसाधन: - -- [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) -- [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) -- प्रश्नों या चिंताओं के लिए [opencode@microsoft.com](mailto:opencode@microsoft.com) से संपर्क करें - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/CONTRIBUTING.md b/translations/hi/CONTRIBUTING.md deleted file mode 100644 index ec659d3d..00000000 --- a/translations/hi/CONTRIBUTING.md +++ /dev/null @@ -1,14 +0,0 @@ -# योगदान - -यह प्रोजेक्ट योगदान और सुझावों का स्वागत करता है। अधिकांश योगदानों के लिए आपको एक योगदानकर्ता लाइसेंस समझौते (CLA) से सहमत होना आवश्यक है जो यह घोषित करता है कि आपके पास अधिकार हैं, और वास्तव में, हमें आपके योगदान का उपयोग करने के अधिकार प्रदान करते हैं। विवरण के लिए, https://cla.microsoft.com पर जाएं। - -> महत्वपूर्ण: इस रिपो में टेक्स्ट का अनुवाद करते समय, कृपया सुनिश्चित करें कि आप मशीन अनुवाद का उपयोग न करें। हम अनुवादों को समुदाय के माध्यम से सत्यापित करेंगे, इसलिए कृपया केवल उन भाषाओं में अनुवाद के लिए स्वयंसेवक बनें जिनमें आप प्रवीण हैं। - -जब आप एक पुल अनुरोध सबमिट करते हैं, तो एक CLA-बॉट स्वचालित रूप से यह निर्धारित करेगा कि क्या आपको CLA प्रदान करने की आवश्यकता है और PR को उपयुक्त रूप से सजाएगा (जैसे, लेबल, टिप्पणी)। बस बॉट द्वारा प्रदान किए गए निर्देशों का पालन करें। आपको हमारे CLA का उपयोग करने वाले सभी रिपोजिटरी में यह केवल एक बार करने की आवश्यकता होगी। - -इस प्रोजेक्ट ने [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/) को अपनाया है। -अधिक जानकारी के लिए [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) देखें -या किसी भी अतिरिक्त प्रश्न या टिप्पणियों के साथ [opencode@microsoft.com](mailto:opencode@microsoft.com) से संपर्क करें। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियां या अशुद्धियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/README.md b/translations/hi/README.md deleted file mode 100644 index eabaaf13..00000000 --- a/translations/hi/README.md +++ /dev/null @@ -1,156 +0,0 @@ -[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) -[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) -[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) -[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) -[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) - -[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) -[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) -[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) - -[![](https://dcbadge.vercel.app/api/server/ByRwuEEgH4)](https://discord.gg/zxKYvhSnVp?WT.mc_id=academic-000002-leestott) - -# शुरुआती लोगों के लिए मशीन लर्निंग - एक पाठ्यक्रम - -> 🌍 दुनिया की संस्कृतियों के माध्यम से मशीन लर्निंग का अन्वेषण करते हुए हमारे साथ दुनिया की यात्रा करें 🌍 - -Microsoft के क्लाउड एडवोकेट्स एक 12-सप्ताह, 26-पाठ का पाठ्यक्रम प्रदान करने के लिए प्रसन्न हैं जो पूरी तरह से **मशीन लर्निंग** के बारे में है। इस पाठ्यक्रम में, आप कभी-कभी **क्लासिक मशीन लर्निंग** कहलाने वाली चीजों के बारे में जानेंगे, जिसमें मुख्य रूप से Scikit-learn का एक पुस्तकालय के रूप में उपयोग किया जाएगा और डीप लर्निंग से बचा जाएगा, जिसे हमारे [AI for Beginners' पाठ्यक्रम](https://aka.ms/ai4beginners) में कवर किया गया है। इन पाठों को हमारे ['Data Science for Beginners' पाठ्यक्रम](https://aka.ms/ds4beginners) के साथ भी जोड़ें! - -हमारे साथ दुनिया भर में यात्रा करें क्योंकि हम इन क्लासिक तकनीकों को दुनिया के विभिन्न क्षेत्रों से डेटा पर लागू करते हैं। प्रत्येक पाठ में पाठ से पहले और बाद के क्विज़, पाठ को पूरा करने के लिए लिखित निर्देश, एक समाधान, एक असाइनमेंट, और अधिक शामिल हैं। हमारे प्रोजेक्ट-आधारित शिक्षाशास्त्र आपको निर्माण करते समय सीखने की अनुमति देते हैं, नए कौशल को 'स्टिक' करने का एक सिद्ध तरीका। - -**✍️ हमारे लेखकों का हार्दिक धन्यवाद** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu और Amy Boyd - -**🎨 हमारे चित्रकारों का भी धन्यवाद** Tomomi Imura, Dasani Madipalli, और Jen Looper - -**🙏 विशेष धन्यवाद 🙏 हमारे Microsoft Student Ambassador लेखकों, समीक्षकों, और सामग्री योगदानकर्ताओं को**, विशेष रूप से Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, और Snigdha Agarwal - -**🤩 हमारे R पाठों के लिए Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi, और Vidushi Gupta को अतिरिक्त आभार!** - -# शुरुआत करना - -इन चरणों का पालन करें: -1. **रिपॉजिटरी को फोर्क करें**: इस पृष्ठ के ऊपर-दाईं ओर "Fork" बटन पर क्लिक करें। -2. **रिपॉजिटरी को क्लोन करें**: `git clone https://github.com/microsoft/ML-For-Beginners.git` - -> [इस पाठ्यक्रम के लिए सभी अतिरिक्त संसाधनों को हमारे Microsoft Learn संग्रह में खोजें](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) - - -**[विद्यार्थियों](https://aka.ms/student-page)**, इस पाठ्यक्रम का उपयोग करने के लिए, पूरे रिपॉजिटरी को अपने GitHub खाते में फोर्क करें और अपने या समूह के साथ अभ्यास करें: - -- लेक्चर से पहले का क्विज़ शुरू करें। -- लेक्चर पढ़ें और गतिविधियों को पूरा करें, प्रत्येक ज्ञान जांच पर रुकें और विचार करें। -- पाठों को समझकर प्रोजेक्ट बनाने का प्रयास करें बजाय समाधान कोड चलाने के; हालांकि वह कोड प्रत्येक प्रोजेक्ट-उन्मुख पाठ में `/solution` फ़ोल्डरों में उपलब्ध है। -- लेक्चर के बाद का क्विज़ लें। -- चुनौती को पूरा करें। -- असाइनमेंट को पूरा करें। -- एक पाठ समूह को पूरा करने के बाद, [चर्चा बोर्ड](https://github.com/microsoft/ML-For-Beginners/discussions) पर जाएं और उचित PAT रूब्रिक को भरकर "जोर से सीखें"। 'PAT' एक प्रगति मूल्यांकन उपकरण है जो एक रूब्रिक है जिसे आप अपने सीखने को आगे बढ़ाने के लिए भरते हैं। आप अन्य PATs पर प्रतिक्रिया भी दे सकते हैं ताकि हम एक साथ सीख सकें। - -> आगे की पढ़ाई के लिए, हम इन [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) मॉड्यूल और लर्निंग पाथ का पालन करने की सलाह देते हैं। - -**शिक्षकों**, हमने इस पाठ्यक्रम का उपयोग कैसे करें पर [कुछ सुझाव शामिल किए हैं](for-teachers.md)। - ---- - -## वीडियो वॉकथ्रू - -कुछ पाठ छोटे वीडियो के रूप में उपलब्ध हैं। आप इन सभी को पाठों में इन-लाइन पा सकते हैं, या Microsoft Developer YouTube चैनल पर [ML for Beginners प्लेलिस्ट](https://aka.ms/ml-beginners-videos) पर क्लिक करके देख सकते हैं। - -[![शुरुआती लोगों के लिए ML बैनर](../../translated_images/ml-for-beginners-video-banner.279f2a268d2130758668f4044f8c252d42f7c0a141c2cb56294c1ccc157cdd1c.hi.png)](https://aka.ms/ml-beginners-videos) - ---- - -## टीम से मिलें - -[![प्रोमो वीडियो](../../ml.gif)](https://youtu.be/Tj1XWrDSYJU "प्रोमो वीडियो") - -**Gif द्वारा** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) - -> 🎥 परियोजना और इसे बनाने वाले लोगों के बारे में वीडियो के लिए ऊपर की छवि पर क्लिक करें! - ---- - -## शिक्षाशास्त्र - -हमने इस पाठ्यक्रम का निर्माण करते समय दो शैक्षिक सिद्धांतों को चुना है: यह सुनिश्चित करना कि यह व्यावहारिक **प्रोजेक्ट-आधारित** है और इसमें **बार-बार क्विज़** शामिल हैं। इसके अलावा, इस पाठ्यक्रम में इसे एकजुटता देने के लिए एक सामान्य **थीम** है। - -यह सुनिश्चित करके कि सामग्री परियोजनाओं के साथ संरेखित है, प्रक्रिया छात्रों के लिए अधिक आकर्षक बन जाती है और अवधारणाओं का प्रतिधारण बढ़ेगा। इसके अलावा, कक्षा से पहले एक कम-दांव क्विज़ छात्र के इरादे को एक विषय की ओर सेट करता है, जबकि कक्षा के बाद का दूसरा क्विज़ आगे के प्रतिधारण को सुनिश्चित करता है। यह पाठ्यक्रम लचीला और मजेदार बनाने के लिए डिज़ाइन किया गया था और इसे पूरे या आंशिक रूप से लिया जा सकता है। परियोजनाएं छोटी शुरू होती हैं और 12-सप्ताह के चक्र के अंत तक बढ़ती जटिल होती जाती हैं। इस पाठ्यक्रम में एमएल के वास्तविक दुनिया के अनुप्रयोगों पर एक परिशिष्ट भी शामिल है, जिसका उपयोग अतिरिक्त क्रेडिट या चर्चा के आधार के रूप में किया जा सकता है। - -> हमारे [आचार संहिता](CODE_OF_CONDUCT.md), [योगदान](CONTRIBUTING.md), और [अनुवाद](TRANSLATIONS.md) दिशानिर्देश खोजें। हम आपके रचनात्मक प्रतिक्रिया का स्वागत करते हैं! - -## प्रत्येक पाठ में शामिल हैं - -- वैकल्पिक स्केच नोट -- वैकल्पिक पूरक वीडियो -- वीडियो वॉकथ्रू (कुछ पाठों में ही) -- लेक्चर से पहले का वार्मअप क्विज़ -- लिखित पाठ -- प्रोजेक्ट-आधारित पाठों के लिए, प्रोजेक्ट कैसे बनाएं इसके चरण-दर-चरण मार्गदर्शिका -- ज्ञान जांच -- एक चुनौती -- पूरक पठन -- असाइनमेंट -- लेक्चर के बाद का क्विज़ - -> **भाषाओं के बारे में एक नोट**: ये पाठ मुख्य रूप से Python में लिखे गए हैं, लेकिन कई R में भी उपलब्ध हैं। एक R पाठ को पूरा करने के लिए, `/solution` फ़ोल्डर में जाएं और R पाठ खोजें। इनमें एक .rmd एक्सटेंशन होता है जो एक **R मार्कडाउन** फ़ाइल का प्रतिनिधित्व करता है जिसे आसानी से परिभाषित किया जा सकता है जैसे कि `code chunks` (R या अन्य भाषाओं का) और एक `YAML header` (जो आउटपुट को प्रारूपित करने के तरीके को मार्गदर्शित करता है जैसे कि PDF) एक `Markdown document` में। इस प्रकार, यह डेटा विज्ञान के लिए एक उत्कृष्ट लेखन ढांचा के रूप में कार्य करता है क्योंकि यह आपको अपने कोड, उसके आउटपुट और अपने विचारों को एक साथ लिखने की अनुमति देता है। इसके अलावा, R मार्कडाउन दस्तावेज़ों को PDF, HTML, या Word जैसे आउटपुट प्रारूपों में प्रस्तुत किया जा सकता है। - -> **क्विज़ के बारे में एक नोट**: सभी क्विज़ [क्विज़ ऐप फ़ोल्डर](../../quiz-app) में निहित हैं, प्रत्येक में तीन प्रश्नों के कुल 52 क्विज़ हैं। वे पाठों के भीतर से जुड़े हुए हैं लेकिन क्विज़ ऐप को स्थानीय रूप से चलाया जा सकता है; स्थानीय रूप से होस्ट करने या Azure पर तैनात करने के निर्देश `quiz-app` फ़ोल्डर में पाए जा सकते हैं। - -| पाठ संख्या | विषय | पाठ समूह | सीखने के उद्देश्य | लिंक्ड पाठ | लेखक | -| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | -| 01 | मशीन लर्निंग का परिचय | [परिचय](1-Introduction/README.md) | मशीन लर्निंग के पीछे के मूलभूत अवधारणाओं को जानें | [पाठ](1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | मशीन लर्निंग का इतिहास | [परिचय](1-Introduction/README.md) | इस क्षेत्र के पीछे के इतिहास को जानें | [पाठ](1-Introduction/2-history-of-ML/README.md) | Jen और Amy | -| 03 | निष्पक्षता और मशीन लर्निंग | [परिचय](1-Introduction/README.md) | मशीन लर्निंग मॉडल बनाते और लागू करते समय छात्रों को निष्पक्षता के महत्वपूर्ण दार्शनिक मुद्दों पर विचार करना चाहिए? | [पाठ](1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | मशीन लर्निंग के लिए तकनीकें | [Introduction](1-Introduction/README.md) | एमएल शोधकर्ता एमएल मॉडल बनाने के लिए किन तकनीकों का उपयोग करते हैं? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | क्रिस और जेन | -| 05 | प्रतिगमन का परिचय | [Regression](2-Regression/README.md) | प्रतिगमन मॉडल के लिए पाइथन और स्किकिट-लर्न के साथ शुरुआत करें |
                                                            • [Python](2-Regression/1-Tools/README.md)
                                                            • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                                            |
                                                            • जेन
                                                            • एरिक वंजाउ
                                                            | -| 06 | उत्तरी अमेरिकी कद्दू की कीमतें 🎃 | [Regression](2-Regression/README.md) | एमएल के लिए डेटा को विज़ुअलाइज़ और साफ करें |
                                                            • [Python](2-Regression/2-Data/README.md)
                                                            • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                                            |
                                                            • जेन
                                                            • एरिक वंजाउ
                                                            | -| 07 | उत्तरी अमेरिकी कद्दू की कीमतें 🎃 | [Regression](2-Regression/README.md) | रैखिक और बहुपद प्रतिगमन मॉडल बनाएं |
                                                            • [Python](2-Regression/3-Linear/README.md)
                                                            • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                                            |
                                                            • जेन और दिमित्री
                                                            • एरिक वंजाउ
                                                            | -| 08 | उत्तरी अमेरिकी कद्दू की कीमतें 🎃 | [Regression](2-Regression/README.md) | एक लॉजिस्टिक प्रतिगमन मॉडल बनाएं |
                                                            • [Python](2-Regression/4-Logistic/README.md)
                                                            • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                                            |
                                                            • जेन
                                                            • एरिक वंजाउ
                                                            | -| 09 | एक वेब ऐप 🔌 | [Web App](3-Web-App/README.md) | अपने प्रशिक्षित मॉडल का उपयोग करने के लिए एक वेब ऐप बनाएं | [Python](3-Web-App/1-Web-App/README.md) | जेन | -| 10 | वर्गीकरण का परिचय | [Classification](4-Classification/README.md) | अपने डेटा को साफ करें, तैयार करें, और विज़ुअलाइज़ करें; वर्गीकरण का परिचय |
                                                            • [Python](4-Classification/1-Introduction/README.md)
                                                            • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                                              • जेन और कैसी
                                                              • एरिक वंजाउ
                                                              | -| 11 | स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 | [Classification](4-Classification/README.md) | वर्गीकरणकर्ताओं का परिचय |
                                                              • [Python](4-Classification/2-Classifiers-1/README.md)
                                                              • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                                                                • जेन और कैसी
                                                                • एरिक वंजाउ
                                                                | -| 12 | स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 | [Classification](4-Classification/README.md) | अधिक वर्गीकरणकर्ता |
                                                                • [Python](4-Classification/3-Classifiers-2/README.md)
                                                                • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                                                                  • जेन और कैसी
                                                                  • एरिक वंजाउ
                                                                  | -| 13 | स्वादिष्ट एशियाई और भारतीय व्यंजन 🍜 | [Classification](4-Classification/README.md) | अपने मॉडल का उपयोग करके एक अनुशंसा वेब ऐप बनाएं | [Python](4-Classification/4-Applied/README.md) | जेन | -| 14 | क्लस्टरिंग का परिचय | [Clustering](5-Clustering/README.md) | अपने डेटा को साफ करें, तैयार करें, और विज़ुअलाइज़ करें; क्लस्टरिंग का परिचय |
                                                                  • [Python](5-Clustering/1-Visualize/README.md)
                                                                  • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                                                    • जेन
                                                                    • एरिक वंजाउ
                                                                    | -| 15 | नाइजीरियाई संगीत स्वादों का अन्वेषण 🎧 | [Clustering](5-Clustering/README.md) | K-Means क्लस्टरिंग विधि का अन्वेषण करें |
                                                                    • [Python](5-Clustering/2-K-Means/README.md)
                                                                    • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                                                      • Jen
                                                                      • Eric Wanjau
                                                                      | -| 16 | प्राकृतिक भाषा प्रसंस्करण का परिचय ☕️ | [Natural language processing](6-NLP/README.md) | एक साधारण बॉट बनाकर NLP के बारे में बुनियादी बातें सीखें | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | सामान्य NLP कार्य ☕️ | [Natural language processing](6-NLP/README.md) | भाषा संरचनाओं के साथ काम करते समय आवश्यक सामान्य कार्यों को समझकर अपने NLP ज्ञान को गहरा करें | [Python](6-NLP/2-Tasks/README.md) | Stephen | -| 18 | अनुवाद और भावना विश्लेषण ♥️ | [Natural language processing](6-NLP/README.md) | जेन ऑस्टेन के साथ अनुवाद और भावना विश्लेषण | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | यूरोप के रोमांटिक होटल ♥️ | [Natural language processing](6-NLP/README.md) | होटल समीक्षाओं के साथ भावना विश्लेषण 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | यूरोप के रोमांटिक होटल ♥️ | [Natural language processing](6-NLP/README.md) | होटल समीक्षाओं के साथ भावना विश्लेषण 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | समय श्रृंखला पूर्वानुमान का परिचय | [Time series](7-TimeSeries/README.md) | समय श्रृंखला पूर्वानुमान का परिचय | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ विश्व पावर उपयोग ⚡️ - ARIMA के साथ समय श्रृंखला पूर्वानुमान | [Time series](7-TimeSeries/README.md) | ARIMA के साथ समय श्रृंखला पूर्वानुमान | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | ⚡️ विश्व पावर उपयोग ⚡️ - SVR के साथ समय श्रृंखला पूर्वानुमान | [Time series](7-TimeSeries/README.md) | सपोर्ट वेक्टर रेग्रेसर के साथ समय श्रृंखला पूर्वानुमान | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | -| 24 | सुदृढीकरण अधिगम का परिचय | [Reinforcement learning](8-Reinforcement/README.md) | Q-लर्निंग के साथ सुदृढीकरण अधिगम का परिचय | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 25 | पीटर को भेड़िये से बचाएं! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | सुदृढीकरण अधिगम जिम | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | -| Postscript | वास्तविक दुनिया के ML परिदृश्य और अनुप्रयोग | [ML in the Wild](9-Real-World/README.md) | शास्त्रीय ML के दिलचस्प और प्रकट करने वाले वास्तविक दुनिया के अनुप्रयोग | [Lesson](9-Real-World/1-Applications/README.md) | Team | -| Postscript | RAI डैशबोर्ड का उपयोग करके ML में मॉडल डिबगिंग | [ML in the Wild](9-Real-World/README.md) | जिम्मेदार AI डैशबोर्ड घटकों का उपयोग करके मशीन लर्निंग में मॉडल डिबगिंग | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | - -> [इस पाठ्यक्रम के लिए सभी अतिरिक्त संसाधनों को हमारे Microsoft Learn संग्रह में खोजें](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) - -## ऑफलाइन एक्सेस - -आप [Docsify](https://docsify.js.org/#/) का उपयोग करके इस दस्तावेज़ को ऑफ़लाइन चला सकते हैं। इस रिपॉजिटरी को फोर्क करें, [Docsify इंस्टॉल करें](https://docsify.js.org/#/quickstart) अपने स्थानीय मशीन पर, और फिर इस रिपॉजिटरी के रूट फ़ोल्डर में, टाइप करें `docsify serve`। वेबसाइट आपके localhost पर पोर्ट 3000 पर सर्व होगी: `localhost:3000`। - -## PDFs -Find a pdf of the curriculum with links [here](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). - -## सहायता की आवश्यकता - -क्या आप अनुवाद में योगदान देना चाहेंगे? कृपया हमारे [अनुवाद दिशानिर्देश](TRANSLATIONS.md) पढ़ें और कार्यभार प्रबंधन के लिए एक टेम्पलेटेड मुद्दा [यहां](https://github.com/microsoft/ML-For-Beginners/issues) जोड़ें। - -## अन्य पाठ्यक्रम - -हमारी टीम अन्य पाठ्यक्रम भी तैयार करती है! इन्हें देखें: - -- [AI for Beginners](https://aka.ms/ai4beginners) -- [Data Science for Beginners](https://aka.ms/datascience-beginners) -- [**New Version 2.0** - Generative AI for Beginners](https://aka.ms/genai-beginners) -- [**NEW** Cybersecurity for Beginners](https://github.com/microsoft/Security-101??WT.mc_id=academic-96948-sayoung) -- [Web Dev for Beginners](https://aka.ms/webdev-beginners) -- [IoT for Beginners](https://aka.ms/iot-beginners) -- [Machine Learning for Beginners](https://aka.ms/ml4beginners) -- [XR Development for Beginners](https://aka.ms/xr-dev-for-beginners) -- [Mastering GitHub Copilot for AI Paired Programming](https://aka.ms/GitHubCopilotAI) - - **अस्वीकरण**: - इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/SECURITY.md b/translations/hi/SECURITY.md deleted file mode 100644 index b0a66a06..00000000 --- a/translations/hi/SECURITY.md +++ /dev/null @@ -1,40 +0,0 @@ -## सुरक्षा - -Microsoft हमारे सॉफ़्टवेयर उत्पादों और सेवाओं की सुरक्षा को गंभीरता से लेता है, जिसमें हमारे GitHub संगठनों के माध्यम से प्रबंधित सभी स्रोत कोड रिपॉज़िटरी शामिल हैं, जिनमें [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), और [हमारे GitHub संगठन](https://opensource.microsoft.com/) शामिल हैं। - -यदि आपको किसी Microsoft-स्वामित्व वाली रिपॉज़िटरी में कोई सुरक्षा भेद्यता मिली है जो [Microsoft की सुरक्षा भेद्यता की परिभाषा](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott) को पूरा करती है, तो कृपया नीचे वर्णित के अनुसार हमें रिपोर्ट करें। - -## सुरक्षा मुद्दों की रिपोर्टिंग - -**कृपया सार्वजनिक GitHub मुद्दों के माध्यम से सुरक्षा भेद्यताओं की रिपोर्ट न करें।** - -इसके बजाय, कृपया उन्हें Microsoft Security Response Center (MSRC) पर [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report) पर रिपोर्ट करें। - -यदि आप लॉग इन किए बिना सबमिट करना पसंद करते हैं, तो [secure@microsoft.com](mailto:secure@microsoft.com) पर ईमेल भेजें। यदि संभव हो, तो हमारे PGP कुंजी के साथ अपने संदेश को एन्क्रिप्ट करें; कृपया इसे [Microsoft Security Response Center PGP Key page](https://www.microsoft.com/en-us/msrc/pgp-key-msrc) से डाउनलोड करें। - -आपको 24 घंटों के भीतर एक प्रतिक्रिया प्राप्त होनी चाहिए। यदि किसी कारणवश आपको प्रतिक्रिया नहीं मिलती है, तो कृपया सुनिश्चित करने के लिए ईमेल के माध्यम से फॉलो अप करें कि हमें आपका मूल संदेश प्राप्त हुआ है। अतिरिक्त जानकारी [microsoft.com/msrc](https://www.microsoft.com/msrc) पर पाई जा सकती है। - -कृपया नीचे सूचीबद्ध अनुरोधित जानकारी (जितना आप प्रदान कर सकते हैं) शामिल करें ताकि हमें संभावित मुद्दे की प्रकृति और दायरे को बेहतर ढंग से समझने में मदद मिल सके: - - * मुद्दे का प्रकार (जैसे बफर ओवरफ्लो, SQL इंजेक्शन, क्रॉस-साइट स्क्रिप्टिंग, आदि) - * मुद्दे के प्रकट होने से संबंधित स्रोत फ़ाइल(फ़ाइलों) के पूर्ण पथ - * प्रभावित स्रोत कोड का स्थान (टैग/ब्रांच/कमिट या डायरेक्ट URL) - * मुद्दे को पुन: उत्पन्न करने के लिए आवश्यक कोई विशेष कॉन्फ़िगरेशन - * मुद्दे को पुन: उत्पन्न करने के लिए चरण-दर-चरण निर्देश - * प्रूफ-ऑफ-कॉन्सेप्ट या एक्सप्लॉइट कोड (यदि संभव हो) - * मुद्दे का प्रभाव, जिसमें हमलावर द्वारा मुद्दे का उपयोग कैसे किया जा सकता है - -यह जानकारी हमें आपकी रिपोर्ट को अधिक तेजी से ट्रायज करने में मदद करेगी। - -यदि आप बग बाउंटी के लिए रिपोर्ट कर रहे हैं, तो अधिक पूर्ण रिपोर्टें उच्च बाउंटी पुरस्कार में योगदान कर सकती हैं। हमारे सक्रिय कार्यक्रमों के बारे में अधिक विवरण के लिए कृपया हमारे [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) पृष्ठ पर जाएं। - -## प्राथमिकताएँ भाषाएँ - -हम सभी संचार अंग्रेजी में करने को प्राथमिकता देते हैं। - -## नीति - -Microsoft [Coordinated Vulnerability Disclosure](https://www.microsoft.com/en-us/msrc/cvd) के सिद्धांत का पालन करता है। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। इसकी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/SUPPORT.md b/translations/hi/SUPPORT.md deleted file mode 100644 index d04aafb3..00000000 --- a/translations/hi/SUPPORT.md +++ /dev/null @@ -1,13 +0,0 @@ -# समर्थन -## समस्याओं को दर्ज करने और सहायता प्राप्त करने का तरीका - -यह परियोजना बग और फीचर अनुरोधों को ट्रैक करने के लिए GitHub Issues का उपयोग करती है। कृपया नए मुद्दों को दर्ज करने से पहले मौजूदा मुद्दों की खोज करें ताकि डुप्लिकेट से बचा जा सके। नए मुद्दों के लिए, अपने बग या फीचर अनुरोध को एक नए Issue के रूप में दर्ज करें। - -इस परियोजना का उपयोग करने के बारे में सहायता और प्रश्नों के लिए, एक Issue दर्ज करें। - -## Microsoft समर्थन नीति - -इस रिपॉजिटरी के लिए समर्थन ऊपर सूचीबद्ध संसाधनों तक सीमित है। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/TRANSLATIONS.md b/translations/hi/TRANSLATIONS.md deleted file mode 100644 index c0a32919..00000000 --- a/translations/hi/TRANSLATIONS.md +++ /dev/null @@ -1,37 +0,0 @@ -# पाठों का अनुवाद करके योगदान दें - -हम इस पाठ्यक्रम में पाठों के लिए अनुवादों का स्वागत करते हैं! -## दिशानिर्देश - -प्रत्येक पाठ फ़ोल्डर और पाठ परिचय फ़ोल्डर में फ़ोल्डर होते हैं जिनमें अनुवादित मार्कडाउन फ़ाइलें होती हैं। - -> नोट, कृपया कोड नमूना फ़ाइलों में किसी भी कोड का अनुवाद न करें; अनुवाद करने के लिए केवल README, असाइनमेंट और क्विज़ हैं। धन्यवाद! - -अनुवादित फ़ाइलों को इस नामकरण परंपरा का पालन करना चाहिए: - -**README._[language]_.md** - -जहां _[language]_ ISO 639-1 मानक का पालन करने वाला दो अक्षरों का भाषा संक्षेपण है (उदा. `README.es.md` स्पेनिश के लिए और `README.nl.md` डच के लिए)। - -**assignment._[language]_.md** - -README's की तरह, कृपया असाइनमेंट का भी अनुवाद करें। - -> महत्वपूर्ण: इस रेपो में पाठ का अनुवाद करते समय, कृपया सुनिश्चित करें कि आप मशीन अनुवाद का उपयोग न करें। हम समुदाय के माध्यम से अनुवादों को सत्यापित करेंगे, इसलिए कृपया केवल उन भाषाओं में अनुवाद के लिए स्वयंसेवक बनें जिनमें आप प्रवीण हैं। - -**क्विज़** - -1. क्विज़-ऐप में अपना अनुवाद यहां एक फ़ाइल जोड़कर जोड़ें: https://github.com/microsoft/ML-For-Beginners/tree/main/quiz-app/src/assets/translations, उचित नामकरण परंपरा के साथ (en.json, fr.json)। **कृपया 'true' या 'false' शब्दों का स्थानीयकरण न करें। धन्यवाद!** - -2. क्विज़-ऐप के App.vue फ़ाइल में ड्रॉपडाउन में अपना भाषा कोड जोड़ें। - -3. क्विज़-ऐप के [translations index.js file](https://github.com/microsoft/ML-For-Beginners/blob/main/quiz-app/src/assets/translations/index.js) को संपादित करें और अपनी भाषा जोड़ें। - -4. अंत में, अपनी अनुवादित README.md फ़ाइलों में सभी क्विज़ लिंक को सीधे आपके अनुवादित क्विज़ की ओर इंगित करने के लिए संपादित करें: https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1 becomes https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1?loc=id - -**धन्यवाद** - -हम वास्तव में आपके प्रयासों की सराहना करते हैं! - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया अवगत रहें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को आधिकारिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/docs/_sidebar.md b/translations/hi/docs/_sidebar.md deleted file mode 100644 index a89f8bea..00000000 --- a/translations/hi/docs/_sidebar.md +++ /dev/null @@ -1,46 +0,0 @@ -- परिचय - - [मशीन लर्निंग का परिचय](../1-Introduction/1-intro-to-ML/README.md) - - [मशीन लर्निंग का इतिहास](../1-Introduction/2-history-of-ML/README.md) - - [एमएल और निष्पक्षता](../1-Introduction/3-fairness/README.md) - - [एमएल की तकनीकें](../1-Introduction/4-techniques-of-ML/README.md) - -- प्रतिगमन - - [टूल्स ऑफ द ट्रेड](../2-Regression/1-Tools/README.md) - - [डेटा](../2-Regression/2-Data/README.md) - - [रेखीय प्रतिगमन](../2-Regression/3-Linear/README.md) - - [लॉजिस्टिक प्रतिगमन](../2-Regression/4-Logistic/README.md) - -- एक वेब ऐप बनाएं - - [वेब ऐप](../3-Web-App/1-Web-App/README.md) - -- वर्गीकरण - - [वर्गीकरण का परिचय](../4-Classification/1-Introduction/README.md) - - [वर्गीकरणकर्ता 1](../4-Classification/2-Classifiers-1/README.md) - - [वर्गीकरणकर्ता 2](../4-Classification/3-Classifiers-2/README.md) - - [लागू एमएल](../4-Classification/4-Applied/README.md) - -- क्लस्टरिंग - - [अपने डेटा को विज़ुअलाइज़ करें](../5-Clustering/1-Visualize/README.md) - - [के-मीन](../5-Clustering/2-K-Means/README.md) - -- एनएलपी - - [एनएलपी का परिचय](../6-NLP/1-Introduction-to-NLP/README.md) - - [एनएलपी कार्य](../6-NLP/2-Tasks/README.md) - - [अनुवाद और भावना](../6-NLP/3-Translation-Sentiment/README.md) - - [होटल समीक्षाएँ 1](../6-NLP/4-Hotel-Reviews-1/README.md) - - [होटल समीक्षाएँ 2](../6-NLP/5-Hotel-Reviews-2/README.md) - -- समय श्रृंखला पूर्वानुमान - - [समय श्रृंखला पूर्वानुमान का परिचय](../7-TimeSeries/1-Introduction/README.md) - - [एआरआईएमए](../7-TimeSeries/2-ARIMA/README.md) - - [एसवीआर](../7-TimeSeries/3-SVR/README.md) - -- सुदृढीकरण शिक्षण - - [क्यू-लर्निंग](../8-Reinforcement/1-QLearning/README.md) - - [जिम](../8-Reinforcement/2-Gym/README.md) - -- वास्तविक दुनिया का एमएल - - [अनुप्रयोग](../9-Real-World/1-Applications/README.md) - -**अस्वीकरण**: -इस दस्तावेज़ का अनुवाद मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल भाषा में मूल दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/for-teachers.md b/translations/hi/for-teachers.md deleted file mode 100644 index e6e44b54..00000000 --- a/translations/hi/for-teachers.md +++ /dev/null @@ -1,26 +0,0 @@ -## शिक्षकों के लिए - -क्या आप इस पाठ्यक्रम का उपयोग अपने कक्षा में करना चाहेंगे? कृपया बेहिचक इसका उपयोग करें! - -वास्तव में, आप इसे GitHub Classroom का उपयोग करके स्वयं GitHub के भीतर उपयोग कर सकते हैं। - -ऐसा करने के लिए, इस रिपॉजिटरी को फोर्क करें। आपको प्रत्येक पाठ के लिए एक रिपॉजिटरी बनाने की आवश्यकता होगी, इसलिए आपको प्रत्येक फ़ोल्डर को एक अलग रिपॉजिटरी में निकालना होगा। इस तरह, [GitHub Classroom](https://classroom.github.com/classrooms) प्रत्येक पाठ को अलग से उठा सकेगा। - -ये [पूर्ण निर्देश](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) आपको बताएंगे कि अपने कक्षा को कैसे सेट अप करें। - -## रिपॉजिटरी का वर्तमान रूप में उपयोग करना - -यदि आप इस रिपॉजिटरी का उपयोग इसके वर्तमान रूप में करना चाहते हैं, बिना GitHub Classroom का उपयोग किए, तो वह भी किया जा सकता है। आपको अपने छात्रों के साथ संवाद करना होगा कि किस पाठ को एक साथ पढ़ना है। - -एक ऑनलाइन प्रारूप (Zoom, Teams, या अन्य) में आप क्विज़ के लिए ब्रेकआउट रूम बना सकते हैं, और छात्रों को सीखने के लिए तैयार करने में मदद कर सकते हैं। फिर छात्रों को क्विज़ के लिए आमंत्रित करें और निश्चित समय पर उनके उत्तर 'issues' के रूप में सबमिट करें। आप असाइनमेंट्स के साथ भी ऐसा कर सकते हैं, यदि आप चाहते हैं कि छात्र खुले में सहयोगात्मक रूप से काम करें। - -यदि आप एक अधिक निजी प्रारूप पसंद करते हैं, तो अपने छात्रों को पाठ्यक्रम को फोर्क करने के लिए कहें, पाठ दर पाठ, उनके अपने GitHub रिपॉजिटरीज़ में निजी रिपॉजिटरीज़ के रूप में, और आपको एक्सेस दें। फिर वे निजी तौर पर क्विज़ और असाइनमेंट्स को पूरा कर सकते हैं और उन्हें आपके कक्षा रिपॉजिटरी पर issues के माध्यम से आपको सबमिट कर सकते हैं। - -एक ऑनलाइन कक्षा प्रारूप में इसे काम करने के कई तरीके हैं। कृपया हमें बताएं कि आपके लिए सबसे अच्छा क्या काम करता है! - -## कृपया हमें अपने विचार बताएं! - -हम इस पाठ्यक्रम को आपके और आपके छात्रों के लिए उपयोगी बनाना चाहते हैं। कृपया हमें [प्रतिक्रिया दें](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u)। - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम जिम्मेदार नहीं हैं। \ No newline at end of file diff --git a/translations/hi/quiz-app/README.md b/translations/hi/quiz-app/README.md deleted file mode 100644 index 40c1b9a5..00000000 --- a/translations/hi/quiz-app/README.md +++ /dev/null @@ -1,115 +0,0 @@ -# Quizzes - -ये क्विज़ https://aka.ms/ml-beginners पर ML पाठ्यक्रम के लिए प्री- और पोस्ट-लेक्चर क्विज़ हैं। - -## प्रोजेक्ट सेटअप - -``` -npm install -``` - -### विकास के लिए संकलन और हॉट-रीलोड - -``` -npm run serve -``` - -### उत्पादन के लिए संकलन और संक्षिप्त - -``` -npm run build -``` - -### फाइलों को लिंट और ठीक करता है - -``` -npm run lint -``` - -### कॉन्फ़िगरेशन को कस्टमाइज़ करें - -[Configuration Reference](https://cli.vuejs.org/config/) देखें। - -श्रेय: इस क्विज़ ऐप के मूल संस्करण के लिए धन्यवाद: https://github.com/arpan45/simple-quiz-vue - -## Azure पर तैनाती - -यहां एक चरण-दर-चरण मार्गदर्शिका है जो आपको आरंभ करने में मदद करेगी: - -1. एक GitHub रिपॉजिटरी को फोर्क करें -सुनिश्चित करें कि आपका स्थिर वेब ऐप कोड आपके GitHub रिपॉजिटरी में है। इस रिपॉजिटरी को फोर्क करें। - -2. एक Azure Static Web App बनाएं -- एक [Azure खाता](http://azure.microsoft.com) बनाएं -- [Azure पोर्टल](https://portal.azure.com) पर जाएं -- “Create a resource” पर क्लिक करें और “Static Web App” खोजें। -- “Create” पर क्लिक करें। - -3. Static Web App को कॉन्फ़िगर करें -- मूलभूत जानकारी: Subscription: अपनी Azure सब्सक्रिप्शन चुनें। -- Resource Group: एक नया संसाधन समूह बनाएं या मौजूदा का उपयोग करें। -- नाम: अपने स्थिर वेब ऐप के लिए एक नाम प्रदान करें। -- क्षेत्र: अपने उपयोगकर्ताओं के निकटतम क्षेत्र चुनें। - -- #### तैनाती विवरण: -- स्रोत: “GitHub” चुनें। -- GitHub खाता: Azure को आपके GitHub खाते तक पहुंचने के लिए अधिकृत करें। -- संगठन: अपना GitHub संगठन चुनें। -- रिपॉजिटरी: वह रिपॉजिटरी चुनें जिसमें आपका स्थिर वेब ऐप है। -- शाखा: वह शाखा चुनें जिससे आप तैनात करना चाहते हैं। - -- #### निर्माण विवरण: -- निर्माण प्रीसेट: उस फ्रेमवर्क को चुनें जिससे आपका ऐप बनाया गया है (उदा., React, Angular, Vue, आदि)। -- ऐप स्थान: उस फ़ोल्डर को निर्दिष्ट करें जिसमें आपका ऐप कोड है (उदा., / यदि यह रूट में है)। -- API स्थान: यदि आपके पास API है, तो उसका स्थान निर्दिष्ट करें (वैकल्पिक)। -- आउटपुट स्थान: उस फ़ोल्डर को निर्दिष्ट करें जहां निर्माण आउटपुट उत्पन्न होता है (उदा., build या dist)। - -4. समीक्षा और निर्माण -अपनी सेटिंग्स की समीक्षा करें और “Create” पर क्लिक करें। Azure आवश्यक संसाधनों को सेटअप करेगा और आपके रिपॉजिटरी में एक GitHub Actions वर्कफ़्लो बनाएगा। - -5. GitHub Actions वर्कफ़्लो -Azure स्वचालित रूप से आपके रिपॉजिटरी में एक GitHub Actions वर्कफ़्लो फ़ाइल बनाएगा (.github/workflows/azure-static-web-apps-.yml)। यह वर्कफ़्लो निर्माण और तैनाती प्रक्रिया को संभालेगा। - -6. तैनाती की निगरानी करें -अपने GitHub रिपॉजिटरी में “Actions” टैब पर जाएं। -आपको एक वर्कफ़्लो चलता हुआ दिखाई देना चाहिए। यह वर्कफ़्लो आपके स्थिर वेब ऐप को Azure पर निर्माण और तैनात करेगा। -एक बार वर्कफ़्लो पूरा हो जाने पर, आपका ऐप प्रदान किए गए Azure URL पर लाइव हो जाएगा। - -### उदाहरण वर्कफ़्लो फ़ाइल - -यहां एक उदाहरण है कि GitHub Actions वर्कफ़्लो फ़ाइल कैसी दिख सकती है: -name: Azure Static Web Apps CI/CD -``` -on: - push: - branches: - - main - pull_request: - types: [opened, synchronize, reopened, closed] - branches: - - main - -jobs: - build_and_deploy_job: - runs-on: ubuntu-latest - name: Build and Deploy Job - steps: - - uses: actions/checkout@v2 - - name: Build And Deploy - id: builddeploy - uses: Azure/static-web-apps-deploy@v1 - with: - azure_static_web_apps_api_token: ${{ secrets.AZURE_STATIC_WEB_APPS_API_TOKEN }} - repo_token: ${{ secrets.GITHUB_TOKEN }} - action: "upload" - app_location: "/quiz-app" # App source code path - api_location: ""API source code path optional - output_location: "dist" #Built app content directory - optional -``` - -### अतिरिक्त संसाधन -- [Azure Static Web Apps Documentation](https://learn.microsoft.com/azure/static-web-apps/getting-started) -- [GitHub Actions Documentation](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन-आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवाद में त्रुटियाँ या गलतियाँ हो सकती हैं। अपनी मूल भाषा में मूल दस्तावेज़ को प्राधिकृत स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/sketchnotes/LICENSE.md b/translations/hi/sketchnotes/LICENSE.md deleted file mode 100644 index 1f07a327..00000000 --- a/translations/hi/sketchnotes/LICENSE.md +++ /dev/null @@ -1,139 +0,0 @@ -Attribution-ShareAlike 4.0 International - -======================================================================= - -Creative Commons Corporation ("Creative Commons") कोई कानून फर्म नहीं है और कानूनी सेवाएं या कानूनी सलाह नहीं प्रदान करता है। Creative Commons सार्वजनिक लाइसेंस का वितरण वकील-ग्राहक या अन्य संबंध नहीं बनाता है। Creative Commons अपने लाइसेंस और संबंधित जानकारी "जैसा है" के आधार पर उपलब्ध कराता है। Creative Commons अपने लाइसेंस, उनके नियमों और शर्तों के तहत लाइसेंस प्राप्त किसी भी सामग्री, या किसी भी संबंधित जानकारी के संबंध में कोई वारंटी नहीं देता है। Creative Commons उनके उपयोग से होने वाले नुकसान के लिए पूरी हद तक किसी भी जिम्मेदारी से इनकार करता है। - -Creative Commons सार्वजनिक लाइसेंस का उपयोग करना - -Creative Commons सार्वजनिक लाइसेंस रचनाकारों और अन्य अधिकार धारकों द्वारा मौलिक लेखन कार्यों और अन्य सामग्री को साझा करने के लिए उपयोग किए जाने वाले एक मानक सेट की शर्तें और शर्तें प्रदान करते हैं, जो कॉपीराइट और नीचे निर्दिष्ट सार्वजनिक लाइसेंस में निर्दिष्ट कुछ अन्य अधिकारों के अधीन हैं। निम्नलिखित विचार केवल जानकारी के लिए हैं, पूर्ण नहीं हैं, और हमारे लाइसेंस का हिस्सा नहीं हैं। - - लाइसेंसदाताओं के लिए विचार: हमारे सार्वजनिक लाइसेंस उन लोगों द्वारा उपयोग के लिए अभिप्रेत हैं जिन्हें सामग्री को सार्वजनिक रूप से उपयोग करने की अनुमति देने के लिए अधिकृत किया गया है, अन्यथा कॉपीराइट और कुछ अन्य अधिकारों द्वारा प्रतिबंधित। हमारे लाइसेंस अपरिवर्तनीय हैं। लाइसेंसदाताओं को लाइसेंस को लागू करने से पहले चुने गए लाइसेंस की शर्तों और शर्तों को पढ़ना और समझना चाहिए। लाइसेंसदाताओं को लाइसेंस लागू करने से पहले सभी आवश्यक अधिकार सुरक्षित करने चाहिए ताकि जनता अपेक्षित रूप से सामग्री का पुन: उपयोग कर सके। लाइसेंसदाताओं को स्पष्ट रूप से किसी भी सामग्री को चिह्नित करना चाहिए जो लाइसेंस के अधीन नहीं है। इसमें अन्य CC-लाइसेंस प्राप्त सामग्री या कॉपीराइट के अपवाद या सीमा के तहत उपयोग की गई सामग्री शामिल है। लाइसेंसदाताओं के लिए अधिक विचार: wiki.creativecommons.org/Considerations_for_licensors - - जनता के लिए विचार: हमारे सार्वजनिक लाइसेंस में से एक का उपयोग करके, एक लाइसेंसदाता जनता को निर्दिष्ट शर्तों और शर्तों के तहत लाइसेंस प्राप्त सामग्री का उपयोग करने की अनुमति देता है। यदि किसी कारण से लाइसेंसदाता की अनुमति आवश्यक नहीं है - उदाहरण के लिए, किसी लागू अपवाद या कॉपीराइट की सीमा के कारण - तो उस उपयोग को लाइसेंस द्वारा विनियमित नहीं किया जाता है। हमारे लाइसेंस केवल कॉपीराइट और कुछ अन्य अधिकारों के तहत अनुमति देते हैं जिन्हें एक लाइसेंसदाता देने का अधिकार रखता है। लाइसेंस प्राप्त सामग्री का उपयोग अभी भी अन्य कारणों से प्रतिबंधित हो सकता है, जिसमें अन्य लोगों के पास सामग्री में कॉपीराइट या अन्य अधिकार हैं। एक लाइसेंसदाता विशेष अनुरोध कर सकता है, जैसे कि सभी परिवर्तनों को चिह्नित या वर्णित किया जाए। यद्यपि हमारे लाइसेंस द्वारा आवश्यक नहीं है, आपसे अनुरोधों का सम्मान करने के लिए प्रोत्साहित किया जाता है जहां उचित हो। जनता के लिए अधिक विचार: wiki.creativecommons.org/Considerations_for_licensees - -======================================================================= - -Creative Commons Attribution-ShareAlike 4.0 International Public License - -लाइसेंस प्राप्त अधिकारों (नीचे परिभाषित) का उपयोग करके, आप इस Creative Commons Attribution-ShareAlike 4.0 International Public License ("Public License") की शर्तों और शर्तों से बंधे होने के लिए सहमति देते हैं। जहां तक इस सार्वजनिक लाइसेंस को एक अनुबंध के रूप में व्याख्यायित किया जा सकता है, आपको इन शर्तों और शर्तों की स्वीकृति के बदले में लाइसेंस प्राप्त अधिकार दिए जाते हैं, और लाइसेंसदाता आपको इन शर्तों और शर्तों के तहत उपलब्ध कराई गई सामग्री से प्राप्त लाभों के बदले में ऐसे अधिकार प्रदान करता है। - -अनुभाग 1 -- परिभाषाएं। - - a. अनुकूलित सामग्री का अर्थ है कॉपीराइट और समान अधिकारों के अधीन सामग्री जो लाइसेंस प्राप्त सामग्री से व्युत्पन्न है या उस पर आधारित है और जिसमें लाइसेंस प्राप्त सामग्री का अनुवाद, परिवर्तन, व्यवस्था, रूपांतरण, या अन्यथा संशोधन किया गया है, जिसके लिए लाइसेंसदाता द्वारा रखे गए कॉपीराइट और समान अधिकारों के तहत अनुमति की आवश्यकता होती है। इस सार्वजनिक लाइसेंस के प्रयोजनों के लिए, जहां लाइसेंस प्राप्त सामग्री एक संगीत कार्य, प्रदर्शन, या ध्वनि रिकॉर्डिंग है, अनुकूलित सामग्री हमेशा उत्पन्न होती है जहां लाइसेंस प्राप्त सामग्री को एक चलती छवि के साथ समयबद्ध संबंध में समकालीन किया जाता है। - - b. अनुकूलक का लाइसेंस का अर्थ है आपके द्वारा आपके योगदान के अनुकूलित सामग्री में आपके कॉपीराइट और समान अधिकारों को इस सार्वजनिक लाइसेंस की शर्तों और शर्तों के अनुसार लागू किया गया लाइसेंस। - - c. BY-SA संगत लाइसेंस का अर्थ है एक लाइसेंस जो creativecommons.org/compatiblelicenses पर सूचीबद्ध है, जिसे Creative Commons द्वारा इस सार्वजनिक लाइसेंस के समकक्ष के रूप में स्वीकृत किया गया है। - - d. कॉपीराइट और समान अधिकार का अर्थ है कॉपीराइट और/या समान अधिकार जो कॉपीराइट से निकटता से संबंधित हैं, जिसमें प्रदर्शन, प्रसारण, ध्वनि रिकॉर्डिंग, और सूई जेनेरिस डेटाबेस अधिकार शामिल हैं, बिना यह ध्यान दिए कि अधिकारों को कैसे लेबल किया गया है या वर्गीकृत किया गया है। इस सार्वजनिक लाइसेंस के प्रयोजनों के लिए, अनुभाग 2(b)(1)-(2) में निर्दिष्ट अधिकार कॉपीराइट और समान अधिकार नहीं हैं। - - e. प्रभावी तकनीकी उपाय का अर्थ है वे उपाय जो, उचित प्राधिकरण के अभाव में, 20 दिसंबर 1996 को अपनाई गई WIPO कॉपीराइट संधि के अनुच्छेद 11 के तहत दायित्वों को पूरा करने वाले कानूनों के तहत दरकिनार नहीं किए जा सकते हैं, और/या समान अंतर्राष्ट्रीय समझौतों के तहत। - - f. अपवाद और सीमाएं का अर्थ है उचित उपयोग, उचित व्यवहार, और/या कोई अन्य अपवाद या सीमा जो कॉपीराइट और समान अधिकारों पर लागू होती है जो आपके द्वारा लाइसेंस प्राप्त सामग्री के उपयोग पर लागू होती है। - - g. लाइसेंस तत्वों का अर्थ है एक Creative Commons सार्वजनिक लाइसेंस के नाम में सूचीबद्ध लाइसेंस गुण। इस सार्वजनिक लाइसेंस के लाइसेंस तत्व हैं Attribution और ShareAlike। - - h. लाइसेंस प्राप्त सामग्री का अर्थ है वह कलात्मक या साहित्यिक कार्य, डेटाबेस, या अन्य सामग्री जिस पर लाइसेंसदाता ने इस सार्वजनिक लाइसेंस को लागू किया है। - - i. लाइसेंस प्राप्त अधिकार का अर्थ है इस सार्वजनिक लाइसेंस की शर्तों और शर्तों के अधीन आपको दिए गए अधिकार, जो आपके द्वारा लाइसेंस प्राप्त सामग्री के उपयोग पर लागू सभी कॉपीराइट और समान अधिकारों तक सीमित हैं और जिनके लाइसेंसदाता को लाइसेंस देने का अधिकार है। - - j. लाइसेंसदाता का अर्थ है वह व्यक्ति(यों) या इकाई(यों) जो इस सार्वजनिक लाइसेंस के तहत अधिकार प्रदान कर रहे हैं। - - k. साझा करना का अर्थ है किसी भी माध्यम या प्रक्रिया द्वारा जनता को सामग्री प्रदान करना जिसके लिए लाइसेंस प्राप्त अधिकारों के तहत अनुमति की आवश्यकता होती है, जैसे पुनरुत्पादन, सार्वजनिक प्रदर्शन, सार्वजनिक प्रदर्शन, वितरण, प्रसार, संचार, या आयात, और जनता को सामग्री उपलब्ध कराना जिसमें वे सामग्री को एक स्थान और समय पर व्यक्तिगत रूप से चुन सकते हैं। - - l. सूई जेनेरिस डेटाबेस अधिकार का अर्थ है कॉपीराइट के अलावा अन्य अधिकार जो 11 मार्च 1996 को यूरोपीय संसद और परिषद के निर्देश 96/9/EC से उत्पन्न होते हैं, जैसा कि संशोधित और/या सफल हुआ है, साथ ही दुनिया में कहीं भी अन्य समान अधिकार। - - m. आप का अर्थ है वह व्यक्ति या इकाई जो इस सार्वजनिक लाइसेंस के तहत लाइसेंस प्राप्त अधिकारों का उपयोग कर रहा है। आपका का एक संबंधित अर्थ है। - -अनुभाग 2 -- दायरा। - - a. लाइसेंस अनुदान। - - 1. इस सार्वजनिक लाइसेंस की शर्तों और शर्तों के अधीन, लाइसेंसदाता आपको एक विश्वव्यापी, रॉयल्टी-मुक्त, गैर-सब-लाइसेंस योग्य, गैर-विशेष, अपरिवर्तनीय लाइसेंस प्रदान करता है ताकि लाइसेंस प्राप्त सामग्री में लाइसेंस प्राप्त अधिकारों का उपयोग किया जा सके: - - a. लाइसेंस प्राप्त सामग्री का पुनरुत्पादन और साझा करना, पूरे या आंशिक रूप में; और - - b. अनुकूलित सामग्री का उत्पादन, पुनरुत्पादन, और साझा करना। - - 2. अपवाद और सीमाएं। संदेह से बचने के लिए, जहां अपवाद और सीमाएं आपके उपयोग पर लागू होती हैं, यह सार्वजनिक लाइसेंस लागू नहीं होता है, और आपको इसकी शर्तों और शर्तों का पालन करने की आवश्यकता नहीं है। - - 3. अवधि। इस सार्वजनिक लाइसेंस की अवधि अनुभाग 6(a) में निर्दिष्ट है। - - 4. मीडिया और प्रारूप; तकनीकी संशोधनों की अनुमति। लाइसेंसदाता आपको सभी मीडिया और प्रारूपों में लाइसेंस प्राप्त अधिकारों का उपयोग करने के लिए अधिकृत करता है, चाहे अब ज्ञात हो या बाद में बनाया गया हो, और ऐसा करने के लिए आवश्यक तकनीकी संशोधन करने के लिए। लाइसेंसदाता किसी भी अधिकार या प्राधिकरण को छोड़ देता है और/या सहमत होता है कि आपको लाइसेंस प्राप्त अधिकारों का उपयोग करने के लिए आवश्यक तकनीकी संशोधन करने से मना नहीं करेगा, जिसमें प्रभावी तकनीकी उपायों को दरकिनार करने के लिए आवश्यक तकनीकी संशोधन शामिल हैं। इस सार्वजनिक लाइसेंस के प्रयोजनों के लिए, इस अनुभाग 2(a)(4) द्वारा अधिकृत संशोधन करने से कभी भी अनुकूलित सामग्री उत्पन्न नहीं होती है। - - 5. डाउनस्ट्रीम प्राप्तकर्ता। - - a. लाइसेंसदाता से प्रस्ताव -- लाइसेंस प्राप्त सामग्री। लाइसेंस प्राप्त सामग्री के हर प्राप्तकर्ता को स्वचालित रूप से लाइसेंसदाता से इस सार्वजनिक लाइसेंस की शर्तों और शर्तों के तहत लाइसेंस प्राप्त अधिकारों का उपयोग करने का प्रस्ताव मिलता है। - - b. लाइसेंसदाता से अतिरिक्त प्रस्ताव -- अनुकूलित सामग्री। आपसे अनुकूलित सामग्री के हर प्राप्तकर्ता को स्वचालित रूप से लाइसेंसदाता से अनुकूलित सामग्री में लाइसेंस प्राप्त अधिकारों का उपयोग करने का प्रस्ताव मिलता है, जिस शर्तों के तहत आप अनुकूलक का लाइसेंस लागू करते हैं। - - c. डाउनस्ट्रीम प्रतिबंध नहीं। आप किसी भी प्राप्तकर्ता को लाइसेंस प्राप्त सामग्री के किसी भी अतिरिक्त या अलग शर्तों और शर्तों की पेशकश या लागू नहीं कर सकते हैं, या लाइसेंस प्राप्त सामग्री पर कोई प्रभावी तकनीकी उपाय लागू नहीं कर सकते हैं, यदि ऐसा करने से लाइसेंस प्राप्त सामग्री के किसी भी प्राप्तकर्ता द्वारा लाइसेंस प्राप्त अधिकारों का उपयोग प्रतिबंधित होता है। - - 6. अनुमोदन नहीं। इस सार्वजनिक लाइसेंस में कुछ भी ऐसा नहीं है या ऐसा व्याख्यायित किया जा सकता है कि आपसे यह अनुमति दी जाए या यह संकेत दिया जाए कि आप, या आपका लाइसेंस प्राप्त सामग्री का उपयोग, लाइसेंसदाता या अन्य द्वारा अनुमोदित, प्रायोजित, या आधिकारिक स्थिति प्राप्त है, जैसा कि अनुभाग 3(a)(1)(A)(i) में निर्दिष्ट किया गया है। - - b. अन्य अधिकार। - - 1. नैतिक अधिकार, जैसे अखंडता का अधिकार, इस सार्वजनिक लाइसेंस के तहत लाइसेंस प्राप्त नहीं हैं, न ही प्रचार, गोपनीयता, और/या अन्य समान व्यक्तित्व अधिकार; हालांकि, जहां तक संभव हो, लाइसेंसदाता ऐसे किसी भी अधिकार को छोड़ देता है और/या सहमत होता है कि लाइसेंसदाता द्वारा रखे गए ऐसे अधिकारों को इस हद तक सीमित करने के लिए आवश्यक है ताकि आपको लाइसेंस प्राप्त अधिकारों का उपयोग करने की अनुमति दी जा सके, लेकिन अन्यथा नहीं। - - 2. पेटेंट और ट्रेडमार्क अधिकार इस सार्वजनिक लाइसेंस के तहत लाइसेंस प्राप्त नहीं हैं। - - 3. जहां तक संभव हो, लाइसेंसदाता किसी भी स्वैच्छिक या छोड़े जाने योग्य सांविधिक या अनिवार्य लाइसेंसिंग योजना के तहत सीधे या किसी संग्रहण समाज के माध्यम से लाइसेंस प्राप्त अधिकारों के उपयोग के लिए रॉयल्टी एकत्र करने के किसी भी अधिकार को छोड़ देता है। अन्य सभी मामलों में, लाइसेंसदाता स्पष्ट रूप से ऐसे रॉयल्टी एकत्र करने के किसी भी अधिकार को सुरक्षित रखता है। - -अनुभाग 3 -- लाइसेंस शर्तें। - -आपके द्वारा लाइसेंस प्राप्त अधिकारों का उपयोग विशेष रूप से निम्नलिखित शर्तों के अधीन किया गया है। - - a. श्रेय। - - 1. यदि आप लाइसेंस प्राप्त सामग्री को साझा करते हैं (संशोधित रूप में भी), तो आपको निम्नलिखित को बनाए रखना चाहिए यदि यह लाइसेंसदाता द्वारा लाइसेंस प्राप्त सामग्री के साथ प्रदान किया गया है: - - a. लाइसेंस प्राप्त सामग्री के निर्माता(यों) की पहचान और किसी भी अन्य को श्रेय प्राप्त करने के लिए निर्दिष्ट किया गया है, किसी भी उचित तरीके से जैसा कि लाइसेंसदाता द्वारा अनुरोध किया गया है (छद्म नाम द्वारा भी यदि निर्दिष्ट है); - - ii. एक कॉपीराइट नोटिस; - - iii. एक नोटिस जो इस सार्वजनिक लाइसेंस का उल्लेख करता है; - - iv. एक नोटिस जो वारंटी के अस्वीकरण का उल्लेख करता है; - - v. एक URI या हाइपरलिंक लाइसेंस प्राप्त सामग्री के लिए जहां तक ​​सम्भव हो; - - b. यदि आपने लाइसेंस प्राप्त सामग्री को संशोधित किया है तो संकेत दें और किसी भी पिछले संशोधनों का संकेत बनाए रखें; और - - c. संकेत दें कि लाइसेंस प्राप्त सामग्री इस सार्वजनिक लाइसेंस के तहत लाइसेंस प्राप्त है, और इस सार्वजनिक लाइसेंस के पाठ, या URI या हाइपरलिंक को शामिल करें। - - 2. आप अनुभाग 3(a)(1) में शर्तों को किसी भी उचित तरीके से पूरा कर सकते हैं, जिस माध्यम, साधन, और संदर्भ के आधार पर जिसमें आप लाइसेंस प्राप्त सामग्री साझा करते हैं। उदाहरण के लिए, यह शर्तों को पूरा करने के लिए एक संसाधन के URI या हाइपरलिंक प्रदान करके उचित हो सकता है जिसमें आवश्यक जानकारी शामिल है। - - 3. यदि लाइसेंसदाता द्वारा अनुरोध किया गया है, तो आपको अनुभाग 3(a)(1)(A) द्वारा आवश्यक किसी भी जानकारी को हटाना होगा जहां तक ​​सम्भव हो। - - b. ShareAlike। - - अनुभाग 3(a) में शर्तों के अलावा, यदि आप अनुकूलित सामग्री साझा करते हैं जिसे आपने उत्पादित किया है, तो निम्नलिखित शर्तें भी लागू होती हैं। - - 1. अनुकूलक का लाइसेंस जिसे आप लागू करते हैं वह Creative Commons लाइसेंस होना चाहिए जिसमें वही लाइसेंस तत्व हों, यह संस्करण या बाद का, या एक BY-SA संगत लाइसेंस। - - 2. आपको अनुकूलक का लाइसेंस जिसे आप लागू करते हैं, के पाठ, या URI या हाइपरलिंक को शामिल करना होगा। आप इस शर्त को किसी भी उचित तरीके से पूरा कर सकते हैं, जिस माध्यम, साधन, और संदर्भ के आधार पर जिसमें आप अनुकूलित सामग्री साझा करते हैं। - - 3. आप अनुकूलित सामग्री पर कोई अतिरिक्त या अलग शर्तें या शर्तें लागू नहीं कर सकते हैं, या कोई प्रभावी तकनीकी उपाय लागू नहीं कर सकते हैं, जो अनुकूलक के लाइसेंस के तहत दिए गए अधिकारों के उपयोग को प्रतिबंधित करते हैं जिसे आप लागू करते हैं। - -अनुभाग 4 -- सूई जेनेरिस डेटाबेस अधिकार। - -जहां लाइसेंस प्राप्त अधिकारों में सूई जेनेरिस डेटाबेस अधिकार शामिल हैं जो आपके द्वारा लाइसेंस प्राप्त सामग्री के उपयोग पर लागू होते हैं: - - a. संदेह से बचने के लिए, अनुभाग 2(a)(1) आपको डेटाबेस की सामग्री का निष्कर्षण, पुन: उपयोग, पुनरुत्पादन, और साझा करने का अधिकार देता है; - - b. यदि आप डेटाबेस की सभी या एक महत्वपूर्ण हिस्से की सामग्री को एक डेटाबेस में शामिल करते हैं जिसमें आपके पास सूई जेनेरिस डेटाबेस अधिकार हैं, तो आपके पास सूई जेनेरिस डेटाबेस अधिकार (लेकिन इसकी व्यक्तिगत सामग्री नहीं) वाले डेटाबेस को अनुकूलित सामग्री माना जाता है, - - अनुभाग 3(b) के प्रयोजनों के लिए; और - c. आपको अनुभाग 3(a) में शर्तों का पालन करना होगा यदि आप डेटाबेस की सभी या एक महत्वपूर्ण हिस्से की सामग्री को साझा करते हैं। - -संदेह से बचने के लिए, यह अनुभाग 4 आपके दायित्वों को इस सार्वजनिक लाइसेंस के तहत पूरक करता है जहां लाइसेंस प्राप्त अधिकारों में अन्य कॉपीराइट और समान अधिकार शामिल हैं। - -अनुभाग 5 -- वारंटी अस्वीकरण और देयता की सीमा। - - a. जब तक लाइसेंसदाता द्वारा अलग से नहीं किया गया है, जहां तक ​​संभव हो, लाइसेंसदाता लाइसेंस प्राप्त सामग्री को "जैसा है" और "जहां उपलब्ध है" के आधार पर प्रदान करता है, और लाइसेंस प्राप्त सामग्री के संबंध में किसी भी प्रकार की कोई प्रतिनिधित्व या वारंटी नहीं देता है, चाहे वह स्पष्ट हो, निहित हो, सांविधिक हो, या अन्य। इसमें, बिना सीमा के, शीर्षक की वारंटी, व्यापारिकता, किसी विशेष उद्देश्य के लिए उपयुक्तता, गैर-उल्लंघन, छिपे हुए या अन्य दोषों की अनुपस्थिति, सटीकता, या त्रुटियों की उपस्थिति या अनुपस्थिति, चाहे ज्ञात हो या खोज योग्य हो। जहां वारंटी अस्वीकरण पूरी तरह से या आंशिक रूप से अनुमति नहीं है, यह अस्वीकरण आप पर लागू नहीं हो सकता है। - - b. जहां तक ​​संभव हो, किसी भी स्थिति में लाइसेंसदाता आपके लिए किसी भी कानूनी सिद्धांत (शामिल, बिना सीमा के, लापरवाही) या अन्यथा किसी भी प्रत्यक्ष, विशेष, अप्रत्यक्ष, आकस्मिक, परिणामी, दंडात्मक, अनुकरणीय, या अन्य हानि, लागत, खर्च - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयास करते हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या अशुद्धियाँ हो सकती हैं। मूल दस्तावेज़ को उसकी मूल भाषा में प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/hi/sketchnotes/README.md b/translations/hi/sketchnotes/README.md deleted file mode 100644 index a4b53d9c..00000000 --- a/translations/hi/sketchnotes/README.md +++ /dev/null @@ -1,10 +0,0 @@ -सभी पाठ्यक्रम की स्केच नोट्स यहाँ से डाउनलोड की जा सकती हैं। - -🖨 उच्च-रिज़ॉल्यूशन में प्रिंटिंग के लिए, TIFF संस्करण [इस रिपॉज़िटरी](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff) पर उपलब्ध हैं। - -🎨 बनाया गया: [Tomomi Imura](https://github.com/girliemac) (Twitter: [@girlie_mac](https://twitter.com/girlie_mac)) - -[![CC BY-SA 4.0](https://img.shields.io/badge/License-CC%20BY--SA%204.0-lightgrey.svg)](https://creativecommons.org/licenses/by-sa/4.0/) - -**अस्वीकरण**: -यह दस्तावेज़ मशीन आधारित एआई अनुवाद सेवाओं का उपयोग करके अनुवादित किया गया है। जबकि हम सटीकता के लिए प्रयासरत हैं, कृपया ध्यान दें कि स्वचालित अनुवादों में त्रुटियाँ या गलतियाँ हो सकती हैं। मूल भाषा में दस्तावेज़ को प्रामाणिक स्रोत माना जाना चाहिए। महत्वपूर्ण जानकारी के लिए, पेशेवर मानव अनुवाद की सिफारिश की जाती है। इस अनुवाद के उपयोग से उत्पन्न किसी भी गलतफहमी या गलत व्याख्या के लिए हम उत्तरदायी नहीं हैं। \ No newline at end of file diff --git a/translations/it/1-Introduction/1-intro-to-ML/README.md b/translations/it/1-Introduction/1-intro-to-ML/README.md deleted file mode 100644 index 0941b011..00000000 --- a/translations/it/1-Introduction/1-intro-to-ML/README.md +++ /dev/null @@ -1,148 +0,0 @@ -# Introduzione al machine learning - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) - ---- - -[![ML per principianti - Introduzione al Machine Learning per Principianti](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML per principianti - Introduzione al Machine Learning per Principianti") - -> 🎥 Clicca sull'immagine sopra per un breve video che esplora questa lezione. - -Benvenuto a questo corso sul machine learning classico per principianti! Che tu sia completamente nuovo a questo argomento o un praticante esperto di ML che vuole rinfrescare alcune conoscenze, siamo felici che tu ti unisca a noi! Vogliamo creare un punto di partenza accogliente per il tuo studio del ML e saremmo felici di valutare, rispondere e incorporare i tuoi [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). - -[![Introduzione al ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduzione al ML") - -> 🎥 Clicca sull'immagine sopra per un video: John Guttag del MIT introduce il machine learning - ---- -## Iniziare con il machine learning - -Prima di iniziare con questo curriculum, è necessario configurare il computer e prepararlo per eseguire notebook localmente. - -- **Configura il tuo computer con questi video**. Utilizza i seguenti link per imparare [come installare Python](https://youtu.be/CXZYvNRIAKM) nel tuo sistema e [configurare un editor di testo](https://youtu.be/EU8eayHWoZg) per lo sviluppo. -- **Impara Python**. È anche raccomandato avere una comprensione di base di [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), un linguaggio di programmazione utile per i data scientist che utilizziamo in questo corso. -- **Impara Node.js e JavaScript**. Utilizziamo anche JavaScript alcune volte in questo corso quando costruiamo applicazioni web, quindi sarà necessario avere [node](https://nodejs.org) e [npm](https://www.npmjs.com/) installati, oltre a [Visual Studio Code](https://code.visualstudio.com/) disponibile per lo sviluppo sia in Python che in JavaScript. -- **Crea un account GitHub**. Dato che ci hai trovato qui su [GitHub](https://github.com), potresti già avere un account, ma se non lo hai, creane uno e poi fork questo curriculum per utilizzarlo da solo. (Sentiti libero di darci una stella, 😊) -- **Esplora Scikit-learn**. Familiarizza con [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), un insieme di librerie ML che citiamo in queste lezioni. - ---- -## Cos'è il machine learning? - -Il termine 'machine learning' è uno dei più popolari e frequentemente utilizzati al giorno d'oggi. È molto probabile che tu abbia sentito questo termine almeno una volta se hai una certa familiarità con la tecnologia, indipendentemente dal settore in cui lavori. La meccanica del machine learning, tuttavia, è un mistero per la maggior parte delle persone. Per un principiante del machine learning, l'argomento può a volte sembrare travolgente. Pertanto, è importante capire cosa sia realmente il machine learning e impararlo passo dopo passo, attraverso esempi pratici. - ---- -## La curva dell'hype - -![curva dell'hype del ml](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.it.png) - -> Google Trends mostra la recente 'curva dell'hype' del termine 'machine learning' - ---- -## Un universo misterioso - -Viviamo in un universo pieno di misteri affascinanti. Grandi scienziati come Stephen Hawking, Albert Einstein e molti altri hanno dedicato la loro vita alla ricerca di informazioni significative che svelino i misteri del mondo che ci circonda. Questa è la condizione umana dell'apprendimento: un bambino umano impara nuove cose e scopre la struttura del suo mondo anno dopo anno mentre cresce fino all'età adulta. - ---- -## Il cervello del bambino - -Il cervello e i sensi di un bambino percepiscono i fatti del loro ambiente e gradualmente apprendono i modelli nascosti della vita che aiutano il bambino a creare regole logiche per identificare i modelli appresi. Il processo di apprendimento del cervello umano rende gli esseri umani la creatura vivente più sofisticata di questo mondo. Imparare continuamente scoprendo modelli nascosti e poi innovando su quei modelli ci permette di migliorare sempre di più nel corso della nostra vita. Questa capacità di apprendimento e capacità di evoluzione è correlata a un concetto chiamato [plasticità cerebrale](https://www.simplypsychology.org/brain-plasticity.html). Superficialmente, possiamo tracciare alcune somiglianze motivazionali tra il processo di apprendimento del cervello umano e i concetti del machine learning. - ---- -## Il cervello umano - -Il [cervello umano](https://www.livescience.com/29365-human-brain.html) percepisce le cose dal mondo reale, elabora le informazioni percepite, prende decisioni razionali e compie determinate azioni in base alle circostanze. Questo è ciò che chiamiamo comportarsi in modo intelligente. Quando programmiamo una copia del processo comportamentale intelligente su una macchina, viene chiamata intelligenza artificiale (AI). - ---- -## Alcuni termini - -Sebbene i termini possano essere confusi, il machine learning (ML) è un sottoinsieme importante dell'intelligenza artificiale. **ML si occupa di utilizzare algoritmi specializzati per scoprire informazioni significative e trovare modelli nascosti dai dati percepiti per corroborare il processo decisionale razionale**. - ---- -## AI, ML, Deep Learning - -![AI, ML, deep learning, data science](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.it.png) - -> Un diagramma che mostra le relazioni tra AI, ML, deep learning e data science. Infografica di [Jen Looper](https://twitter.com/jenlooper) ispirata da [questa grafica](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) - ---- -## Concetti da coprire - -In questo curriculum, copriremo solo i concetti fondamentali del machine learning che un principiante deve conoscere. Copriamo ciò che chiamiamo 'machine learning classico' utilizzando principalmente Scikit-learn, un'ottima libreria che molti studenti utilizzano per imparare le basi. Per comprendere concetti più ampi di intelligenza artificiale o deep learning, è indispensabile una solida conoscenza fondamentale del machine learning, e quindi vorremmo offrirla qui. - ---- -## In questo corso imparerai: - -- concetti fondamentali del machine learning -- la storia del ML -- ML e equità -- tecniche di regressione ML -- tecniche di classificazione ML -- tecniche di clustering ML -- tecniche di elaborazione del linguaggio naturale ML -- tecniche di previsione delle serie temporali ML -- apprendimento per rinforzo -- applicazioni reali per ML - ---- -## Cosa non copriremo - -- deep learning -- reti neurali -- AI - -Per migliorare l'esperienza di apprendimento, eviteremo le complessità delle reti neurali, del 'deep learning' - costruzione di modelli a più strati utilizzando reti neurali - e dell'AI, che discuteremo in un curriculum diverso. Offriremo anche un prossimo curriculum di data science per concentrarci su quell'aspetto di questo campo più ampio. - ---- -## Perché studiare il machine learning? - -Il machine learning, da una prospettiva di sistemi, è definito come la creazione di sistemi automatizzati che possono apprendere modelli nascosti dai dati per aiutare a prendere decisioni intelligenti. - -Questa motivazione è vagamente ispirata da come il cervello umano apprende certe cose basate sui dati che percepisce dal mondo esterno. - -✅ Pensa per un minuto perché un'azienda vorrebbe provare a utilizzare strategie di machine learning rispetto a creare un motore basato su regole codificate. - ---- -## Applicazioni del machine learning - -Le applicazioni del machine learning sono ora quasi ovunque e sono tanto onnipresenti quanto i dati che fluiscono nelle nostre società, generati dai nostri smartphone, dispositivi connessi e altri sistemi. Considerando l'immenso potenziale degli algoritmi di machine learning all'avanguardia, i ricercatori hanno esplorato la loro capacità di risolvere problemi reali multidimensionali e multidisciplinari con grandi risultati positivi. - ---- -## Esempi di ML applicato - -**Puoi utilizzare il machine learning in molti modi**: - -- Per prevedere la probabilità di una malattia dalla storia medica di un paziente o dai rapporti. -- Per sfruttare i dati meteorologici per prevedere eventi meteorologici. -- Per comprendere il sentimento di un testo. -- Per rilevare notizie false per fermare la diffusione della propaganda. - -Finanza, economia, scienze della terra, esplorazione spaziale, ingegneria biomedica, scienze cognitive e persino campi nelle scienze umane hanno adattato il machine learning per risolvere i problemi ardui e pesanti di elaborazione dei dati del loro settore. - ---- -## Conclusione - -Il machine learning automatizza il processo di scoperta dei modelli trovando intuizioni significative dai dati reali o generati. Si è dimostrato altamente prezioso in applicazioni aziendali, sanitarie e finanziarie, tra le altre. - -Nel prossimo futuro, comprendere le basi del machine learning sarà un must per le persone di qualsiasi settore a causa della sua adozione diffusa. - ---- -# 🚀 Sfida - -Disegna, su carta o utilizzando un'app online come [Excalidraw](https://excalidraw.com/), la tua comprensione delle differenze tra AI, ML, deep learning e data science. Aggiungi alcune idee sui problemi che ciascuna di queste tecniche è brava a risolvere. - -# [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) - ---- -# Revisione & Studio Autonomo - -Per saperne di più su come puoi lavorare con gli algoritmi ML nel cloud, segui questo [Percorso di Apprendimento](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). - -Segui un [Percorso di Apprendimento](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sui fondamenti del ML. - ---- -# Compito - -[Inizia a lavorare](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzata basati su intelligenza artificiale. Sebbene ci impegniamo per l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/1-intro-to-ML/assignment.md b/translations/it/1-Introduction/1-intro-to-ML/assignment.md deleted file mode 100644 index 6af698e0..00000000 --- a/translations/it/1-Introduction/1-intro-to-ML/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# Iniziare a Lavorare - -## Istruzioni - -In questo compito non valutato, dovresti ripassare Python e configurare il tuo ambiente per eseguire i notebook. - -Segui questo [Percorso di Apprendimento Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), e poi configura i tuoi sistemi guardando questi video introduttivi: - -https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/2-history-of-ML/README.md b/translations/it/1-Introduction/2-history-of-ML/README.md deleted file mode 100644 index 7f4c5a2a..00000000 --- a/translations/it/1-Introduction/2-history-of-ML/README.md +++ /dev/null @@ -1,152 +0,0 @@ -# Storia del machine learning - -![Riepilogo della storia del machine learning in uno schizzo](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.it.png) -> Schizzo di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) - ---- - -[![ML per principianti - Storia del Machine Learning](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML per principianti - Storia del Machine Learning") - -> 🎥 Clicca sull'immagine qui sopra per un breve video su questa lezione. - -In questa lezione, passeremo in rassegna i principali traguardi nella storia del machine learning e dell'intelligenza artificiale. - -La storia dell'intelligenza artificiale (AI) come campo è intrecciata con la storia del machine learning, poiché gli algoritmi e i progressi computazionali che sostengono il ML hanno alimentato lo sviluppo dell'AI. È utile ricordare che, sebbene questi campi come aree di indagine distinte abbiano iniziato a cristallizzarsi negli anni '50, importanti [scoperte algoritmiche, statistiche, matematiche, computazionali e tecniche](https://wikipedia.org/wiki/Timeline_of_machine_learning) hanno preceduto e si sono sovrapposte a questa era. In effetti, le persone hanno pensato a queste domande per [centinaia di anni](https://wikipedia.org/wiki/History_of_artificial_intelligence): questo articolo discute le basi intellettuali storiche dell'idea di una 'macchina pensante'. - ---- -## Scoperte notevoli - -- 1763, 1812 [Teorema di Bayes](https://wikipedia.org/wiki/Bayes%27_theorem) e i suoi predecessori. Questo teorema e le sue applicazioni sono alla base dell'inferenza, descrivendo la probabilità che un evento si verifichi basandosi su conoscenze pregresse. -- 1805 [Teoria dei minimi quadrati](https://wikipedia.org/wiki/Least_squares) del matematico francese Adrien-Marie Legendre. Questa teoria, che imparerai nella nostra unità sulla Regressione, aiuta nell'adattamento dei dati. -- 1913 [Catene di Markov](https://wikipedia.org/wiki/Markov_chain), chiamate così in onore del matematico russo Andrey Markov, vengono utilizzate per descrivere una sequenza di eventi possibili basati su uno stato precedente. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) è un tipo di classificatore lineare inventato dallo psicologo americano Frank Rosenblatt che è alla base dei progressi nel deep learning. - ---- - -- 1967 [Nearest Neighbor](https://wikipedia.org/wiki/Nearest_neighbor) è un algoritmo originariamente progettato per mappare percorsi. In un contesto ML viene utilizzato per rilevare modelli. -- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) viene utilizzato per addestrare le [reti neurali feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Reti Neurali Ricorrenti](https://wikipedia.org/wiki/Recurrent_neural_network) sono reti neurali artificiali derivate dalle reti neurali feedforward che creano grafici temporali. - -✅ Fai una piccola ricerca. Quali altre date si distinguono come fondamentali nella storia del ML e dell'AI? - ---- -## 1950: Macchine che pensano - -Alan Turing, una persona davvero straordinaria che è stata votata [dal pubblico nel 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) come il più grande scienziato del XX secolo, è accreditato di aver contribuito a gettare le basi per il concetto di 'macchina che può pensare'. Ha lottato con i detrattori e con il proprio bisogno di prove empiriche di questo concetto in parte creando il [Test di Turing](https://www.bbc.com/news/technology-18475646), che esplorerai nelle nostre lezioni di NLP. - ---- -## 1956: Progetto di ricerca estivo di Dartmouth - -"Il Progetto di ricerca estivo di Dartmouth sull'intelligenza artificiale è stato un evento fondamentale per l'intelligenza artificiale come campo," ed è stato qui che il termine 'intelligenza artificiale' è stato coniato ([fonte](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). - -> Ogni aspetto dell'apprendimento o di qualsiasi altra caratteristica dell'intelligenza può, in linea di principio, essere descritto così precisamente che una macchina può essere costruita per simularlo. - ---- - -Il ricercatore principale, il professore di matematica John McCarthy, sperava "di procedere sulla base dell'ipotesi che ogni aspetto dell'apprendimento o di qualsiasi altra caratteristica dell'intelligenza possa, in linea di principio, essere descritto così precisamente che una macchina può essere costruita per simularlo." I partecipanti includevano un'altra luminare nel campo, Marvin Minsky. - -Il workshop è accreditato di aver avviato e incoraggiato diverse discussioni, tra cui "l'ascesa dei metodi simbolici, sistemi focalizzati su domini limitati (primi sistemi esperti) e sistemi deduttivi contro sistemi induttivi." ([fonte](https://wikipedia.org/wiki/Dartmouth_workshop)). - ---- -## 1956 - 1974: "Gli anni d'oro" - -Dagli anni '50 fino alla metà degli anni '70, l'ottimismo era alto nella speranza che l'AI potesse risolvere molti problemi. Nel 1967, Marvin Minsky affermava con sicurezza che "Entro una generazione ... il problema di creare 'intelligenza artificiale' sarà sostanzialmente risolto." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) - -la ricerca sul natural language processing fiorì, la ricerca fu perfezionata e resa più potente, e fu creato il concetto di 'micro-mondi', dove compiti semplici venivano completati usando istruzioni in linguaggio naturale. - ---- - -La ricerca era ben finanziata da agenzie governative, si fecero progressi nel calcolo e negli algoritmi, e furono costruiti prototipi di macchine intelligenti. Alcune di queste macchine includono: - -* [Shakey il robot](https://wikipedia.org/wiki/Shakey_the_robot), che poteva manovrare e decidere come eseguire i compiti 'intelligentemente'. - - ![Shakey, un robot intelligente](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.it.jpg) - > Shakey nel 1972 - ---- - -* Eliza, un primo 'chatterbot', poteva conversare con le persone e agire come un primitivo 'terapeuta'. Imparerai di più su Eliza nelle lezioni di NLP. - - ![Eliza, un bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.it.png) - > Una versione di Eliza, un chatbot - ---- - -* "Blocks world" era un esempio di micro-mondo dove i blocchi potevano essere impilati e ordinati, e si potevano testare esperimenti nell'insegnare alle macchine a prendere decisioni. I progressi costruiti con librerie come [SHRDLU](https://wikipedia.org/wiki/SHRDLU) hanno aiutato a spingere avanti l'elaborazione del linguaggio. - - [![blocks world con SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world con SHRDLU") - - > 🎥 Clicca sull'immagine qui sopra per un video: Blocks world con SHRDLU - ---- -## 1974 - 1980: "AI Winter" - -Entro la metà degli anni '70, era diventato evidente che la complessità di creare 'macchine intelligenti' era stata sottovalutata e che la sua promessa, data la potenza di calcolo disponibile, era stata sopravvalutata. I finanziamenti si prosciugarono e la fiducia nel campo rallentò. Alcuni problemi che hanno influenzato la fiducia includevano: ---- -- **Limitazioni**. La potenza di calcolo era troppo limitata. -- **Esplosione combinatoria**. La quantità di parametri che dovevano essere addestrati cresceva esponenzialmente man mano che si chiedeva di più ai computer, senza un'evoluzione parallela della potenza di calcolo e delle capacità. -- **Scarsità di dati**. C'era una scarsità di dati che ostacolava il processo di test, sviluppo e raffinamento degli algoritmi. -- **Stiamo facendo le domande giuste?**. Le stesse domande che venivano poste cominciarono a essere messe in discussione. I ricercatori iniziarono a ricevere critiche sui loro approcci: - - I test di Turing furono messi in discussione tramite, tra le altre idee, la 'teoria della stanza cinese' che postulava che, "programmare un computer digitale può farlo apparire come se comprendesse il linguaggio ma non potrebbe produrre una vera comprensione." ([fonte](https://plato.stanford.edu/entries/chinese-room/)) - - L'etica dell'introduzione di intelligenze artificiali come il "terapeuta" ELIZA nella società fu messa in discussione. - ---- - -Allo stesso tempo, varie scuole di pensiero sull'AI cominciarono a formarsi. Si stabilì una dicotomia tra le pratiche ["scruffy" e "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). I laboratori _scruffy_ modificavano i programmi per ore fino a ottenere i risultati desiderati. I laboratori _neat_ "si concentravano sulla logica e sulla risoluzione formale dei problemi". ELIZA e SHRDLU erano sistemi _scruffy_ ben noti. Negli anni '80, con l'emergere della domanda di rendere i sistemi ML riproducibili, l'approccio _neat_ prese gradualmente il sopravvento poiché i suoi risultati sono più spiegabili. - ---- -## Sistemi esperti degli anni '80 - -Man mano che il campo cresceva, il suo beneficio per il business diventava più chiaro, e negli anni '80 proliferarono i 'sistemi esperti'. "I sistemi esperti furono tra le prime forme di software di intelligenza artificiale (AI) veramente di successo." ([fonte](https://wikipedia.org/wiki/Expert_system)). - -Questo tipo di sistema è in realtà _ibrido_, costituito in parte da un motore di regole che definisce i requisiti aziendali, e un motore di inferenza che sfruttava il sistema di regole per dedurre nuovi fatti. - -Quest'era vide anche una crescente attenzione rivolta alle reti neurali. - ---- -## 1987 - 1993: "Chill" dell'AI - -La proliferazione dell'hardware specializzato dei sistemi esperti ebbe l'effetto sfortunato di diventare troppo specializzata. L'ascesa dei personal computer competeva anche con questi grandi, specializzati, sistemi centralizzati. La democratizzazione del calcolo era iniziata, e alla fine spianò la strada all'esplosione moderna dei big data. - ---- -## 1993 - 2011 - -Quest'epoca vide una nuova era per il ML e l'AI per poter risolvere alcuni dei problemi che erano stati causati in precedenza dalla mancanza di dati e potenza di calcolo. La quantità di dati iniziò a crescere rapidamente e a diventare più ampiamente disponibile, nel bene e nel male, soprattutto con l'avvento dello smartphone intorno al 2007. La potenza di calcolo si espanse esponenzialmente, e gli algoritmi si evolvettero di pari passo. Il campo iniziò a maturare man mano che i giorni liberi del passato cominciarono a cristallizzarsi in una vera disciplina. - ---- -## Oggi - -Oggi il machine learning e l'AI toccano quasi ogni parte delle nostre vite. Quest'era richiede una comprensione attenta dei rischi e degli effetti potenziali di questi algoritmi sulle vite umane. Come ha affermato Brad Smith di Microsoft, "La tecnologia dell'informazione solleva questioni che vanno al cuore delle protezioni fondamentali dei diritti umani come la privacy e la libertà di espressione. Queste questioni aumentano la responsabilità delle aziende tecnologiche che creano questi prodotti. A nostro avviso, richiedono anche una regolamentazione governativa ponderata e lo sviluppo di norme sull'uso accettabile" ([fonte](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). - ---- - -Resta da vedere cosa riserva il futuro, ma è importante comprendere questi sistemi informatici e il software e gli algoritmi che eseguono. Speriamo che questo curriculum ti aiuti a ottenere una migliore comprensione in modo che tu possa decidere da solo. - -[![La storia del deep learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "La storia del deep learning") -> 🎥 Clicca sull'immagine qui sopra per un video: Yann LeCun discute la storia del deep learning in questa lezione - ---- -## 🚀Sfida - -Approfondisci uno di questi momenti storici e scopri di più sulle persone dietro di essi. Ci sono personaggi affascinanti, e nessuna scoperta scientifica è mai stata creata in un vuoto culturale. Cosa scopri? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) - ---- -## Revisione e studio autonomo - -Ecco alcuni elementi da guardare e ascoltare: - -[Questo podcast dove Amy Boyd discute l'evoluzione dell'AI](http://runasradio.com/Shows/Show/739) -[![La storia dell'IA di Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "La storia dell'IA di Amy Boyd") - ---- - -## Compito - -[Crea una timeline](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/2-history-of-ML/assignment.md b/translations/it/1-Introduction/2-history-of-ML/assignment.md deleted file mode 100644 index 25253706..00000000 --- a/translations/it/1-Introduction/2-history-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Creare una timeline - -## Istruzioni - -Usando [questo repo](https://github.com/Digital-Humanities-Toolkit/timeline-builder), crea una timeline di qualche aspetto della storia degli algoritmi, della matematica, della statistica, dell'AI o del ML, o una combinazione di questi. Puoi concentrarti su una persona, un'idea o un lungo periodo di pensiero. Assicurati di aggiungere elementi multimediali. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Necessita Miglioramenti | -| -------- | -------------------------------------------------- | --------------------------------------- | ---------------------------------------------------------------- | -| | Una timeline pubblicata è presentata come pagina GitHub | Il codice è incompleto e non pubblicato | La timeline è incompleta, non ben ricercata e non pubblicata | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Anche se ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/3-fairness/README.md b/translations/it/1-Introduction/3-fairness/README.md deleted file mode 100644 index 08ddc1ab..00000000 --- a/translations/it/1-Introduction/3-fairness/README.md +++ /dev/null @@ -1,151 +0,0 @@ -# Costruire soluzioni di Machine Learning con AI responsabile - -![Riassunto dell'AI responsabile nel Machine Learning in uno sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.it.png) -> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) - -## Introduzione - -In questo curriculum, inizierai a scoprire come il machine learning può influenzare e sta influenzando le nostre vite quotidiane. Anche ora, sistemi e modelli sono coinvolti in compiti decisionali quotidiani, come diagnosi sanitarie, approvazioni di prestiti o rilevamento di frodi. Pertanto, è importante che questi modelli funzionino bene per fornire risultati affidabili. Come qualsiasi applicazione software, i sistemi AI possono non soddisfare le aspettative o avere un esito indesiderato. Ecco perché è essenziale essere in grado di comprendere e spiegare il comportamento di un modello AI. - -Immagina cosa può accadere quando i dati che usi per costruire questi modelli mancano di determinate demografie, come razza, genere, opinione politica, religione, o rappresentano queste demografie in modo sproporzionato. E se l'output del modello fosse interpretato in modo da favorire alcune demografie? Quali sono le conseguenze per l'applicazione? Inoltre, cosa succede quando il modello ha un esito negativo e danneggia le persone? Chi è responsabile del comportamento dei sistemi AI? Queste sono alcune delle domande che esploreremo in questo curriculum. - -In questa lezione, tu: - -- Aumenterai la consapevolezza dell'importanza dell'equità nel machine learning e dei danni correlati all'equità. -- Diventerai familiare con la pratica di esplorare casi anomali e scenari insoliti per garantire affidabilità e sicurezza. -- Capirai la necessità di potenziare tutti progettando sistemi inclusivi. -- Esplorerai quanto sia vitale proteggere la privacy e la sicurezza dei dati e delle persone. -- Vedrai l'importanza di avere un approccio a scatola trasparente per spiegare il comportamento dei modelli AI. -- Sarai consapevole di come la responsabilità sia essenziale per costruire fiducia nei sistemi AI. - -## Prerequisito - -Come prerequisito, segui il percorso di apprendimento "Principi di AI Responsabile" e guarda il video qui sotto sull'argomento: - -Scopri di più sull'AI Responsabile seguendo questo [Percorso di Apprendimento](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) - -[![Approccio di Microsoft all'AI Responsabile](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Approccio di Microsoft all'AI Responsabile") - -> 🎥 Clicca sull'immagine sopra per un video: Approccio di Microsoft all'AI Responsabile - -## Equità - -I sistemi AI dovrebbero trattare tutti in modo equo ed evitare di influenzare gruppi simili di persone in modi diversi. Ad esempio, quando i sistemi AI forniscono indicazioni su trattamenti medici, domande di prestito o occupazione, dovrebbero fare le stesse raccomandazioni a tutti con sintomi simili, circostanze finanziarie o qualifiche professionali. Ognuno di noi come esseri umani porta con sé pregiudizi ereditati che influenzano le nostre decisioni e azioni. Questi pregiudizi possono essere evidenti nei dati che usiamo per addestrare i sistemi AI. Tale manipolazione può a volte accadere involontariamente. È spesso difficile sapere consapevolmente quando stai introducendo pregiudizi nei dati. - -**"Ingiustizia"** comprende impatti negativi, o "danni", per un gruppo di persone, come quelli definiti in termini di razza, genere, età o stato di disabilità. I principali danni correlati all'equità possono essere classificati come: - -- **Allocazione**, se un genere o un'etnia, ad esempio, è favorita rispetto a un'altra. -- **Qualità del servizio**. Se addestri i dati per uno scenario specifico ma la realtà è molto più complessa, porta a un servizio di scarsa qualità. Ad esempio, un dispenser di sapone per le mani che non riesce a rilevare persone con pelle scura. [Riferimento](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **Denigrazione**. Criticare e etichettare ingiustamente qualcosa o qualcuno. Ad esempio, una tecnologia di etichettatura delle immagini ha infamemente etichettato erroneamente immagini di persone con pelle scura come gorilla. -- **Sovra- o sotto-rappresentazione**. L'idea è che un certo gruppo non sia visto in una certa professione, e qualsiasi servizio o funzione che continua a promuovere ciò sta contribuendo al danno. -- **Stereotipizzazione**. Associare un determinato gruppo con attributi preassegnati. Ad esempio, un sistema di traduzione linguistica tra inglese e turco può avere inesattezze dovute a parole con associazioni stereotipate al genere. - -![traduzione in turco](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.it.png) -> traduzione in turco - -![traduzione di ritorno in inglese](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.it.png) -> traduzione di ritorno in inglese - -Quando progettiamo e testiamo sistemi AI, dobbiamo garantire che l'AI sia equa e non programmata per prendere decisioni pregiudizievoli o discriminatorie, che anche gli esseri umani sono proibiti dal prendere. Garantire l'equità nell'AI e nel machine learning rimane una sfida socio-tecnica complessa. - -### Affidabilità e sicurezza - -Per costruire fiducia, i sistemi AI devono essere affidabili, sicuri e coerenti in condizioni normali e inattese. È importante sapere come si comporteranno i sistemi AI in una varietà di situazioni, specialmente quando sono anomali. Quando si costruiscono soluzioni AI, è necessario concentrarsi notevolmente su come gestire una vasta gamma di circostanze che le soluzioni AI incontreranno. Ad esempio, un'auto a guida autonoma deve mettere la sicurezza delle persone come priorità assoluta. Di conseguenza, l'AI che alimenta l'auto deve considerare tutti gli scenari possibili che l'auto potrebbe incontrare come notte, temporali o bufere di neve, bambini che attraversano la strada, animali domestici, lavori stradali ecc. Quanto bene un sistema AI può gestire una vasta gamma di condizioni in modo affidabile e sicuro riflette il livello di anticipazione che lo scienziato dei dati o lo sviluppatore AI ha considerato durante la progettazione o il test del sistema. - -> [🎥 Clicca qui per un video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) - -### Inclusività - -I sistemi AI dovrebbero essere progettati per coinvolgere e potenziare tutti. Quando progettano e implementano sistemi AI, gli scienziati dei dati e gli sviluppatori AI identificano e affrontano potenziali barriere nel sistema che potrebbero escludere involontariamente le persone. Ad esempio, ci sono 1 miliardo di persone con disabilità in tutto il mondo. Con l'avanzamento dell'AI, possono accedere a una vasta gamma di informazioni e opportunità più facilmente nella loro vita quotidiana. Affrontando le barriere, si creano opportunità per innovare e sviluppare prodotti AI con migliori esperienze che beneficiano tutti. - -> [🎥 Clicca qui per un video: inclusività nell'AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) - -### Sicurezza e privacy - -I sistemi AI devono essere sicuri e rispettare la privacy delle persone. Le persone hanno meno fiducia nei sistemi che mettono a rischio la loro privacy, le loro informazioni o le loro vite. Quando addestriamo modelli di machine learning, ci affidiamo ai dati per ottenere i migliori risultati. Facendo ciò, è necessario considerare l'origine dei dati e la loro integrità. Ad esempio, i dati sono stati inviati dagli utenti o sono pubblicamente disponibili? Inoltre, mentre si lavora con i dati, è cruciale sviluppare sistemi AI che possano proteggere le informazioni riservate e resistere agli attacchi. Con l'aumento della diffusione dell'AI, proteggere la privacy e garantire la sicurezza delle informazioni personali e aziendali sta diventando sempre più critico e complesso. Le questioni di privacy e sicurezza dei dati richiedono un'attenzione particolarmente attenta per l'AI perché l'accesso ai dati è essenziale per i sistemi AI per fare previsioni e decisioni accurate e informate sulle persone. - -> [🎥 Clicca qui per un video: sicurezza nell'AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) - -- Come industria, abbiamo fatto significativi progressi in Privacy e Sicurezza, alimentati significativamente da regolamenti come il GDPR (Regolamento Generale sulla Protezione dei Dati). -- Tuttavia, con i sistemi AI dobbiamo riconoscere la tensione tra la necessità di più dati personali per rendere i sistemi più personali ed efficaci - e la privacy. -- Proprio come con la nascita dei computer connessi a Internet, stiamo anche vedendo un enorme aumento del numero di problemi di sicurezza legati all'AI. -- Allo stesso tempo, abbiamo visto l'AI essere utilizzata per migliorare la sicurezza. Ad esempio, la maggior parte degli scanner antivirus moderni sono guidati da euristiche AI. -- Dobbiamo garantire che i nostri processi di Data Science si armonizzino con le più recenti pratiche di privacy e sicurezza. - -### Trasparenza - -I sistemi AI devono essere comprensibili. Una parte cruciale della trasparenza è spiegare il comportamento dei sistemi AI e dei loro componenti. Migliorare la comprensione dei sistemi AI richiede che gli stakeholder comprendano come e perché funzionano in modo che possano identificare potenziali problemi di prestazione, preoccupazioni sulla sicurezza e sulla privacy, pregiudizi, pratiche esclusive o risultati indesiderati. Crediamo anche che coloro che usano i sistemi AI debbano essere onesti e trasparenti su quando, perché e come scelgono di utilizzarli. Così come i limiti dei sistemi che utilizzano. Ad esempio, se una banca utilizza un sistema AI per supportare le sue decisioni di prestito ai consumatori, è importante esaminare i risultati e capire quali dati influenzano le raccomandazioni del sistema. I governi stanno iniziando a regolamentare l'AI in vari settori, quindi gli scienziati dei dati e le organizzazioni devono spiegare se un sistema AI soddisfa i requisiti normativi, specialmente quando c'è un risultato indesiderato. - -> [🎥 Clicca qui per un video: trasparenza nell'AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) - -- Poiché i sistemi AI sono così complessi, è difficile capire come funzionano e interpretare i risultati. -- Questa mancanza di comprensione influisce sul modo in cui questi sistemi sono gestiti, operazionalizzati e documentati. -- Questa mancanza di comprensione influisce soprattutto sulle decisioni prese utilizzando i risultati prodotti da questi sistemi. - -### Responsabilità - -Le persone che progettano e implementano sistemi AI devono essere responsabili del modo in cui i loro sistemi operano. La necessità di responsabilità è particolarmente cruciale con tecnologie sensibili come il riconoscimento facciale. Recentemente, c'è stata una crescente domanda di tecnologia di riconoscimento facciale, soprattutto da parte delle organizzazioni di applicazione della legge che vedono il potenziale della tecnologia in usi come la ricerca di bambini scomparsi. Tuttavia, queste tecnologie potrebbero potenzialmente essere utilizzate da un governo per mettere a rischio le libertà fondamentali dei cittadini, ad esempio, consentendo la sorveglianza continua di individui specifici. Pertanto, gli scienziati dei dati e le organizzazioni devono essere responsabili di come il loro sistema AI impatta sugli individui o sulla società. - -[![Leading AI Researcher Warns of Mass Surveillance Through Facial Recognition](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.it.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Approccio di Microsoft all'AI Responsabile") - -> 🎥 Clicca sull'immagine sopra per un video: Avvertimenti sulla Sorveglianza di Massa Attraverso il Riconoscimento Facciale - -Alla fine, una delle domande più grandi per la nostra generazione, come la prima generazione che sta portando l'AI nella società, è come garantire che i computer rimangano responsabili verso le persone e come garantire che le persone che progettano i computer rimangano responsabili verso tutti gli altri. - -## Valutazione dell'impatto - -Prima di addestrare un modello di machine learning, è importante condurre una valutazione dell'impatto per comprendere lo scopo del sistema AI; qual è l'uso previsto; dove sarà implementato; e chi interagirà con il sistema. Questi sono utili per il revisore o i tester che valutano il sistema per sapere quali fattori considerare quando identificano potenziali rischi e conseguenze attese. - -Le seguenti sono aree di interesse quando si conduce una valutazione dell'impatto: - -* **Impatto negativo sugli individui**. Essere consapevoli di eventuali restrizioni o requisiti, uso non supportato o eventuali limitazioni note che ostacolano le prestazioni del sistema è vitale per garantire che il sistema non venga utilizzato in modo da causare danni agli individui. -* **Requisiti dei dati**. Capire come e dove il sistema utilizzerà i dati consente ai revisori di esplorare eventuali requisiti dei dati di cui bisogna essere consapevoli (ad esempio, regolamenti sui dati GDPR o HIPPA). Inoltre, esaminare se la fonte o la quantità di dati è sufficiente per l'addestramento. -* **Sintesi dell'impatto**. Raccogliere un elenco di potenziali danni che potrebbero derivare dall'uso del sistema. Durante tutto il ciclo di vita del ML, verificare se i problemi identificati sono mitigati o affrontati. -* **Obiettivi applicabili** per ciascuno dei sei principi fondamentali. Valutare se gli obiettivi di ciascun principio sono soddisfatti e se ci sono eventuali lacune. - -## Debugging con AI responsabile - -Simile al debugging di un'applicazione software, il debugging di un sistema AI è un processo necessario per identificare e risolvere i problemi nel sistema. Ci sono molti fattori che potrebbero influenzare un modello che non performa come previsto o in modo responsabile. La maggior parte delle metriche di prestazione dei modelli tradizionali sono aggregati quantitativi delle prestazioni di un modello, che non sono sufficienti per analizzare come un modello viola i principi dell'AI responsabile. Inoltre, un modello di machine learning è una scatola nera che rende difficile capire cosa guida il suo risultato o fornire spiegazioni quando commette un errore. Più avanti in questo corso, impareremo come utilizzare la dashboard AI Responsabile per aiutare a fare debugging dei sistemi AI. La dashboard fornisce uno strumento olistico per gli scienziati dei dati e gli sviluppatori AI per eseguire: - -* **Analisi degli errori**. Per identificare la distribuzione degli errori del modello che può influenzare l'equità o l'affidabilità del sistema. -* **Panoramica del modello**. Per scoprire dove ci sono disparità nelle prestazioni del modello tra i vari gruppi di dati. -* **Analisi dei dati**. Per comprendere la distribuzione dei dati e identificare eventuali pregiudizi nei dati che potrebbero portare a problemi di equità, inclusività e affidabilità. -* **Interpretabilità del modello**. Per capire cosa influenza o influenza le previsioni del modello. Questo aiuta a spiegare il comportamento del modello, che è importante per la trasparenza e la responsabilità. - -## 🚀 Sfida - -Per prevenire i danni fin dall'inizio, dovremmo: - -- avere una diversità di background e prospettive tra le persone che lavorano sui sistemi -- investire in dataset che riflettano la diversità della nostra società -- sviluppare metodi migliori lungo tutto il ciclo di vita del machine learning per rilevare e correggere l'AI responsabile quando si verifica - -Pensa a scenari reali in cui l'inaffidabilità di un modello è evidente nella costruzione e nell'uso del modello. Cos'altro dovremmo considerare? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## Revisione e Autoapprendimento - -In questa lezione, hai appreso alcune basi dei concetti di equità e iniquità nel machine learning. - -Guarda questo workshop per approfondire gli argomenti: - -- Alla ricerca di AI responsabile: portare i principi in pratica di Besmira Nushi, Mehrnoosh Sameki e Amit Sharma - -[![RAI Toolbox: Un framework open-source per costruire AI responsabile](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Un framework open-source per costruire AI responsabile") - -> 🎥 Clicca sull'immagine sopra per un video: RAI Toolbox: Un framework open-source per costruire AI responsabile di Besmira Nushi, Mehrnoosh Sameki e Amit Sharma - -Leggi anche: - -- Centro risorse RAI di Microsoft: [Risorse di AI Responsabile – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) - -- Gruppo di ricerca FATE di Microsoft: [FATE: Equità, Responsabilità, Trasparenza ed Etica nell'AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) - -RAI Toolbox: - -- [Repository GitHub di Responsible AI Toolbox](https://github.com/microsoft/responsible-ai - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Anche se ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/3-fairness/assignment.md b/translations/it/1-Introduction/3-fairness/assignment.md deleted file mode 100644 index dea4bd6e..00000000 --- a/translations/it/1-Introduction/3-fairness/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Esplora il Responsible AI Toolbox - -## Istruzioni - -In questa lezione hai appreso del Responsible AI Toolbox, un "progetto open-source guidato dalla comunità per aiutare i data scientist ad analizzare e migliorare i sistemi di intelligenza artificiale." Per questo compito, esplora uno dei [notebook](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) del RAI Toolbox e riporta le tue scoperte in un documento o in una presentazione. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da Migliorare | -| ------- | --------- | -------- | ------------- | -| | Viene presentato un documento o una presentazione PowerPoint che discute i sistemi di Fairlearn, il notebook eseguito e le conclusioni tratte dall'esecuzione | Viene presentato un documento senza conclusioni | Non viene presentato alcun documento | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su AI. Anche se ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/4-techniques-of-ML/README.md b/translations/it/1-Introduction/4-techniques-of-ML/README.md deleted file mode 100644 index d207da0f..00000000 --- a/translations/it/1-Introduction/4-techniques-of-ML/README.md +++ /dev/null @@ -1,121 +0,0 @@ -# Tecniche di Machine Learning - -Il processo di costruzione, utilizzo e mantenimento dei modelli di machine learning e dei dati che utilizzano è molto diverso da molti altri flussi di lavoro di sviluppo. In questa lezione, demistificheremo il processo e delineeremo le principali tecniche che devi conoscere. Imparerai a: - -- Comprendere i processi che stanno alla base del machine learning a un livello alto. -- Esplorare concetti di base come 'modelli', 'predizioni' e 'dati di addestramento'. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) - -[![ML per principianti - Tecniche di Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML per principianti - Tecniche di Machine Learning") - -> 🎥 Clicca sull'immagine sopra per un breve video che illustra questa lezione. - -## Introduzione - -A un livello alto, l'arte di creare processi di machine learning (ML) è composta da diversi passaggi: - -1. **Decidere la domanda**. La maggior parte dei processi ML inizia ponendo una domanda che non può essere risolta da un semplice programma condizionale o da un motore basato su regole. Queste domande spesso ruotano attorno a predizioni basate su una raccolta di dati. -2. **Raccogliere e preparare i dati**. Per poter rispondere alla tua domanda, hai bisogno di dati. La qualità e, a volte, la quantità dei tuoi dati determineranno quanto bene puoi rispondere alla tua domanda iniziale. Visualizzare i dati è un aspetto importante di questa fase. Questa fase include anche la suddivisione dei dati in un gruppo di addestramento e un gruppo di test per costruire un modello. -3. **Scegliere un metodo di addestramento**. A seconda della tua domanda e della natura dei tuoi dati, devi scegliere come vuoi addestrare un modello per riflettere al meglio i tuoi dati e fare predizioni accurate. Questa è la parte del tuo processo ML che richiede competenze specifiche e, spesso, una notevole quantità di sperimentazione. -4. **Addestrare il modello**. Utilizzando i tuoi dati di addestramento, userai vari algoritmi per addestrare un modello a riconoscere schemi nei dati. Il modello potrebbe sfruttare pesi interni che possono essere regolati per privilegiare certe parti dei dati rispetto ad altre per costruire un modello migliore. -5. **Valutare il modello**. Usi dati mai visti prima (i tuoi dati di test) dal tuo set raccolto per vedere come il modello sta performando. -6. **Ottimizzazione dei parametri**. In base alle prestazioni del tuo modello, puoi rifare il processo utilizzando parametri diversi, o variabili, che controllano il comportamento degli algoritmi utilizzati per addestrare il modello. -7. **Predire**. Utilizza nuovi input per testare l'accuratezza del tuo modello. - -## Quale domanda porre - -I computer sono particolarmente abili nello scoprire schemi nascosti nei dati. Questa capacità è molto utile per i ricercatori che hanno domande su un dato dominio che non possono essere facilmente risolte creando un motore basato su regole condizionali. Data un'attività attuariale, per esempio, un data scientist potrebbe essere in grado di costruire regole artigianali sulla mortalità dei fumatori rispetto ai non fumatori. - -Quando molti altri variabili vengono inserite nell'equazione, tuttavia, un modello ML potrebbe risultare più efficiente nel predire i tassi di mortalità futuri basandosi sulla storia sanitaria passata. Un esempio più allegro potrebbe essere fare previsioni meteorologiche per il mese di aprile in una data località basandosi su dati che includono latitudine, longitudine, cambiamenti climatici, prossimità all'oceano, schemi della corrente a getto e altro. - -✅ Questa [presentazione](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) sui modelli meteorologici offre una prospettiva storica sull'uso del ML nell'analisi meteorologica. - -## Compiti pre-costruzione - -Prima di iniziare a costruire il tuo modello, ci sono diversi compiti che devi completare. Per testare la tua domanda e formare un'ipotesi basata sulle predizioni di un modello, devi identificare e configurare diversi elementi. - -### Dati - -Per poter rispondere alla tua domanda con una certa sicurezza, hai bisogno di una buona quantità di dati del tipo giusto. Ci sono due cose che devi fare a questo punto: - -- **Raccogliere dati**. Tenendo presente la lezione precedente sull'equità nell'analisi dei dati, raccogli i tuoi dati con cura. Sii consapevole delle fonti di questi dati, di eventuali bias intrinseci che potrebbero avere e documenta la loro origine. -- **Preparare i dati**. Ci sono diversi passaggi nel processo di preparazione dei dati. Potresti dover unire i dati e normalizzarli se provengono da fonti diverse. Puoi migliorare la qualità e la quantità dei dati attraverso vari metodi come convertire stringhe in numeri (come facciamo in [Clustering](../../5-Clustering/1-Visualize/README.md)). Potresti anche generare nuovi dati, basandoti sugli originali (come facciamo in [Classification](../../4-Classification/1-Introduction/README.md)). Puoi pulire e modificare i dati (come faremo prima della lezione sulla [Web App](../../3-Web-App/README.md)). Infine, potresti anche doverli randomizzare e mescolarli, a seconda delle tue tecniche di addestramento. - -✅ Dopo aver raccolto e processato i tuoi dati, prenditi un momento per vedere se la loro forma ti permetterà di affrontare la tua domanda prevista. Potrebbe essere che i dati non performino bene nel tuo compito dato, come scopriamo nelle nostre lezioni di [Clustering](../../5-Clustering/1-Visualize/README.md)! - -### Caratteristiche e Target - -Una [caratteristica](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) è una proprietà misurabile dei tuoi dati. In molti set di dati è espressa come un'intestazione di colonna come 'data', 'dimensione' o 'colore'. La tua variabile caratteristica, solitamente rappresentata come `X` nel codice, rappresenta la variabile di input che verrà utilizzata per addestrare il modello. - -Un target è ciò che stai cercando di predire. Il target solitamente rappresentato come `y` nel codice, rappresenta la risposta alla domanda che stai cercando di fare ai tuoi dati: a dicembre, quale **colore** delle zucche sarà il più economico? a San Francisco, quali quartieri avranno il miglior **prezzo** immobiliare? A volte il target è anche indicato come attributo etichetta. - -### Selezionare la tua variabile caratteristica - -🎓 **Selezione delle caratteristiche ed Estrazione delle caratteristiche** Come fai a sapere quale variabile scegliere quando costruisci un modello? Probabilmente passerai attraverso un processo di selezione delle caratteristiche o estrazione delle caratteristiche per scegliere le variabili giuste per il modello più performante. Tuttavia, non sono la stessa cosa: "L'estrazione delle caratteristiche crea nuove caratteristiche da funzioni delle caratteristiche originali, mentre la selezione delle caratteristiche restituisce un sottoinsieme delle caratteristiche." ([fonte](https://wikipedia.org/wiki/Feature_selection)) - -### Visualizzare i tuoi dati - -Un aspetto importante dell'arsenale del data scientist è il potere di visualizzare i dati utilizzando diverse eccellenti librerie come Seaborn o MatPlotLib. Rappresentare i tuoi dati visivamente potrebbe permetterti di scoprire correlazioni nascoste che puoi sfruttare. Le tue visualizzazioni potrebbero anche aiutarti a scoprire bias o dati sbilanciati (come scopriamo in [Classification](../../4-Classification/2-Classifiers-1/README.md)). - -### Dividere il tuo dataset - -Prima di addestrare, devi dividere il tuo dataset in due o più parti di dimensioni disuguali che rappresentino comunque bene i dati. - -- **Addestramento**. Questa parte del dataset viene adattata al tuo modello per addestrarlo. Questo set costituisce la maggior parte del dataset originale. -- **Test**. Un dataset di test è un gruppo indipendente di dati, spesso raccolti dai dati originali, che usi per confermare le prestazioni del modello costruito. -- **Validazione**. Un set di validazione è un gruppo indipendente più piccolo di esempi che usi per regolare i parametri del modello, o l'architettura, per migliorare il modello. A seconda delle dimensioni dei tuoi dati e della domanda che stai ponendo, potresti non avere bisogno di costruire questo terzo set (come notiamo in [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). - -## Costruire un modello - -Utilizzando i tuoi dati di addestramento, il tuo obiettivo è costruire un modello, o una rappresentazione statistica dei tuoi dati, utilizzando vari algoritmi per **addestrarlo**. Addestrare un modello lo espone ai dati e gli permette di fare assunzioni sugli schemi percepiti che scopre, valida e accetta o rifiuta. - -### Decidere un metodo di addestramento - -A seconda della tua domanda e della natura dei tuoi dati, sceglierai un metodo per addestrarlo. Scorrendo la [documentazione di Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - che usiamo in questo corso - puoi esplorare molti modi per addestrare un modello. A seconda della tua esperienza, potresti dover provare diversi metodi per costruire il miglior modello. Probabilmente passerai attraverso un processo in cui i data scientist valutano le prestazioni di un modello alimentandolo con dati non visti, controllando l'accuratezza, i bias e altri problemi di degrado della qualità, e selezionando il metodo di addestramento più appropriato per il compito in questione. - -### Addestrare un modello - -Armato dei tuoi dati di addestramento, sei pronto a 'adattarli' per creare un modello. Noterai che in molte librerie ML troverai il codice 'model.fit' - è in questo momento che invii la tua variabile caratteristica come un array di valori (solitamente 'X') e una variabile target (solitamente 'y'). - -### Valutare il modello - -Una volta completato il processo di addestramento (possono essere necessarie molte iterazioni, o 'epoche', per addestrare un grande modello), sarai in grado di valutare la qualità del modello utilizzando dati di test per valutarne le prestazioni. Questi dati sono un sottoinsieme dei dati originali che il modello non ha precedentemente analizzato. Puoi stampare una tabella di metriche sulla qualità del tuo modello. - -🎓 **Adattamento del modello** - -Nel contesto del machine learning, l'adattamento del modello si riferisce all'accuratezza della funzione sottostante del modello mentre tenta di analizzare dati con cui non ha familiarità. - -🎓 **Underfitting** e **overfitting** sono problemi comuni che degradano la qualità del modello, poiché il modello si adatta troppo bene o troppo poco. Questo causa il modello a fare predizioni troppo allineate o troppo poco allineate con i suoi dati di addestramento. Un modello sovradattato predice i dati di addestramento troppo bene perché ha imparato troppo bene i dettagli e il rumore dei dati. Un modello sotto-adattato non è accurato poiché non può analizzare accuratamente né i suoi dati di addestramento né i dati che non ha ancora 'visto'. - -![modello sovradattato](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.it.png) -> Infografica di [Jen Looper](https://twitter.com/jenlooper) - -## Ottimizzazione dei parametri - -Una volta completato l'addestramento iniziale, osserva la qualità del modello e considera di migliorarlo regolando i suoi 'iperparametri'. Leggi di più sul processo [nella documentazione](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). - -## Predizione - -Questo è il momento in cui puoi utilizzare dati completamente nuovi per testare l'accuratezza del tuo modello. In un contesto ML 'applicato', dove stai costruendo asset web per utilizzare il modello in produzione, questo processo potrebbe coinvolgere la raccolta di input utente (una pressione di un pulsante, per esempio) per impostare una variabile e inviarla al modello per inferenza, o valutazione. - -In queste lezioni, scoprirai come utilizzare questi passaggi per preparare, costruire, testare, valutare e predire - tutti i gesti di un data scientist e altro, mentre progredisci nel tuo viaggio per diventare un ingegnere ML 'full stack'. - ---- - -## 🚀Sfida - -Disegna un diagramma di flusso che rifletta i passaggi di un praticante ML. Dove ti vedi in questo momento nel processo? Dove prevedi che troverai difficoltà? Cosa ti sembra facile? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) - -## Revisione & Studio Autonomo - -Cerca online interviste con data scientist che discutono del loro lavoro quotidiano. Eccone [una](https://www.youtube.com/watch?v=Z3IjgbbCEfs). - -## Compito - -[Intervista a un data scientist](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/4-techniques-of-ML/assignment.md b/translations/it/1-Introduction/4-techniques-of-ML/assignment.md deleted file mode 100644 index 2e437a12..00000000 --- a/translations/it/1-Introduction/4-techniques-of-ML/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Intervista a un data scientist - -## Istruzioni - -Nella tua azienda, in un gruppo di utenti, o tra i tuoi amici o compagni di studio, parla con qualcuno che lavora professionalmente come data scientist. Scrivi un breve articolo (500 parole) sulle loro occupazioni quotidiane. Sono specialisti o lavorano come 'full stack'? - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------- | ------------------------------------------------------------------------------------ | ------------------------------------------------------------------ | --------------------- | -| | Un saggio della lunghezza corretta, con fonti attribuite, presentato come file .doc | Il saggio è attribuito in modo approssimativo o più corto della lunghezza richiesta | Nessun saggio presentato | - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/1-Introduction/README.md b/translations/it/1-Introduction/README.md deleted file mode 100644 index 79666f90..00000000 --- a/translations/it/1-Introduction/README.md +++ /dev/null @@ -1,25 +0,0 @@ -# Introduzione al machine learning - -In questa sezione del curriculum, verranno introdotti i concetti base che stanno alla base del campo del machine learning, cos'è e imparerai la sua storia e le tecniche che i ricercatori usano per lavorarci. Esploriamo insieme questo nuovo mondo del ML! - -![globo](../../../translated_images/globe.59f26379ceb40428672b4d9a568044618a2bf6292ecd53a5c481b90e3fa805eb.it.jpg) -> Foto di Bill Oxford su Unsplash - -### Lezioni - -1. [Introduzione al machine learning](1-intro-to-ML/README.md) -1. [La storia del machine learning e dell'AI](2-history-of-ML/README.md) -1. [Equità e machine learning](3-fairness/README.md) -1. [Tecniche di machine learning](4-techniques-of-ML/README.md) -### Crediti - -"L'introduzione al Machine Learning" è stata scritta con ♥️ da un team di persone tra cui [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) e [Jen Looper](https://twitter.com/jenlooper) - -"La storia del Machine Learning" è stata scritta con ♥️ da [Jen Looper](https://twitter.com/jenlooper) e [Amy Boyd](https://twitter.com/AmyKateNicho) - -"Equità e Machine Learning" è stata scritta con ♥️ da [Tomomi Imura](https://twitter.com/girliemac) - -"Tecniche di Machine Learning" è stata scritta con ♥️ da [Jen Looper](https://twitter.com/jenlooper) e [Chris Noring](https://twitter.com/softchris) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/1-Tools/README.md b/translations/it/2-Regression/1-Tools/README.md deleted file mode 100644 index ce4ada36..00000000 --- a/translations/it/2-Regression/1-Tools/README.md +++ /dev/null @@ -1,228 +0,0 @@ -# Inizia con Python e Scikit-learn per modelli di regressione - -![Riepilogo delle regressioni in uno sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.it.png) - -> Sketchnote di [Tomomi Imura](https://www.twitter.com/girlie_mac) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) - -> ### [Questa lezione è disponibile in R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) - -## Introduzione - -In queste quattro lezioni, scoprirai come costruire modelli di regressione. Discuteremo presto a cosa servono. Ma prima di fare qualsiasi cosa, assicurati di avere gli strumenti giusti per iniziare il processo! - -In questa lezione, imparerai come: - -- Configurare il tuo computer per attività di machine learning locale. -- Lavorare con Jupyter notebooks. -- Usare Scikit-learn, inclusa l'installazione. -- Esplorare la regressione lineare con un esercizio pratico. - -## Installazioni e configurazioni - -[![ML per principianti - Configura i tuoi strumenti per costruire modelli di Machine Learning](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML per principianti - Configura i tuoi strumenti per costruire modelli di Machine Learning") - -> 🎥 Clicca sull'immagine sopra per un breve video che ti guida nella configurazione del tuo computer per ML. - -1. **Installa Python**. Assicurati che [Python](https://www.python.org/downloads/) sia installato sul tuo computer. Userai Python per molte attività di data science e machine learning. La maggior parte dei sistemi informatici include già un'installazione di Python. Sono disponibili anche utili [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) per facilitare la configurazione per alcuni utenti. - - Alcuni utilizzi di Python, tuttavia, richiedono una versione del software, mentre altri ne richiedono una diversa. Per questo motivo, è utile lavorare all'interno di un [ambiente virtuale](https://docs.python.org/3/library/venv.html). - -2. **Installa Visual Studio Code**. Assicurati di avere Visual Studio Code installato sul tuo computer. Segui queste istruzioni per [installare Visual Studio Code](https://code.visualstudio.com/) per l'installazione di base. Userai Python in Visual Studio Code in questo corso, quindi potrebbe essere utile ripassare come [configurare Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) per lo sviluppo in Python. - - > Familiarizza con Python lavorando attraverso questa raccolta di [moduli di apprendimento](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) - > - > [![Configura Python con Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configura Python con Visual Studio Code") - > - > 🎥 Clicca sull'immagine sopra per un video: usare Python all'interno di VS Code. - -3. **Installa Scikit-learn**, seguendo [queste istruzioni](https://scikit-learn.org/stable/install.html). Poiché devi assicurarti di usare Python 3, si consiglia di usare un ambiente virtuale. Nota, se stai installando questa libreria su un Mac M1, ci sono istruzioni speciali sulla pagina linkata sopra. - -4. **Installa Jupyter Notebook**. Dovrai [installare il pacchetto Jupyter](https://pypi.org/project/jupyter/). - -## Il tuo ambiente di sviluppo ML - -Utilizzerai **notebooks** per sviluppare il tuo codice Python e creare modelli di machine learning. Questo tipo di file è uno strumento comune per i data scientist e possono essere identificati dalla loro estensione `.ipynb`. - -I notebooks sono un ambiente interattivo che permette al sviluppatore di codificare e aggiungere note e scrivere documentazione intorno al codice, il che è molto utile per progetti sperimentali o orientati alla ricerca. - -[![ML per principianti - Configura Jupyter Notebooks per iniziare a costruire modelli di regressione](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML per principianti - Configura Jupyter Notebooks per iniziare a costruire modelli di regressione") - -> 🎥 Clicca sull'immagine sopra per un breve video che ti guida attraverso questo esercizio. - -### Esercizio - lavorare con un notebook - -In questa cartella, troverai il file _notebook.ipynb_. - -1. Apri _notebook.ipynb_ in Visual Studio Code. - - Un server Jupyter si avvierà con Python 3+. Troverai aree del notebook che possono essere `run`, pezzi di codice. Puoi eseguire un blocco di codice, selezionando l'icona che sembra un pulsante di riproduzione. - -2. Seleziona l'icona `md` e aggiungi un po' di markdown, e il seguente testo **# Benvenuto nel tuo notebook**. - - Successivamente, aggiungi del codice Python. - -3. Scrivi **print('hello notebook')** nel blocco di codice. -4. Seleziona la freccia per eseguire il codice. - - Dovresti vedere la dichiarazione stampata: - - ```output - hello notebook - ``` - -![VS Code con un notebook aperto](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.it.jpg) - -Puoi intercalare il tuo codice con commenti per auto-documentare il notebook. - -✅ Pensa per un momento a quanto è diverso l'ambiente di lavoro di uno sviluppatore web rispetto a quello di un data scientist. - -## Iniziare con Scikit-learn - -Ora che Python è configurato nel tuo ambiente locale e ti senti a tuo agio con i Jupyter notebooks, prendiamo confidenza anche con Scikit-learn (pronuncialo `sci` as in `science`). Scikit-learn fornisce una [API estesa](https://scikit-learn.org/stable/modules/classes.html#api-ref) per aiutarti a svolgere compiti di ML. - -Secondo il loro [sito web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn è una libreria open source di machine learning che supporta l'apprendimento supervisionato e non supervisionato. Fornisce anche vari strumenti per l'adattamento dei modelli, la pre-elaborazione dei dati, la selezione e la valutazione dei modelli e molte altre utilità." - -In questo corso, utilizzerai Scikit-learn e altri strumenti per costruire modelli di machine learning per eseguire quelli che chiamiamo compiti di 'machine learning tradizionale'. Abbiamo deliberatamente evitato le reti neurali e il deep learning, poiché sono meglio trattati nel nostro prossimo curriculum 'AI for Beginners'. - -Scikit-learn rende semplice costruire modelli e valutarli per l'uso. È principalmente focalizzato sull'utilizzo di dati numerici e contiene diversi dataset pronti all'uso come strumenti di apprendimento. Include anche modelli pre-costruiti per gli studenti da provare. Esploriamo il processo di caricamento dei dati preconfezionati e l'uso di un estimatore incorporato per il primo modello di ML con Scikit-learn con alcuni dati di base. - -## Esercizio - il tuo primo notebook con Scikit-learn - -> Questo tutorial è stato ispirato dall'[esempio di regressione lineare](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) sul sito web di Scikit-learn. - -[![ML per principianti - Il tuo primo progetto di regressione lineare in Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML per principianti - Il tuo primo progetto di regressione lineare in Python") - -> 🎥 Clicca sull'immagine sopra per un breve video che ti guida attraverso questo esercizio. - -Nel file _notebook.ipynb_ associato a questa lezione, cancella tutte le celle premendo l'icona del 'cestino'. - -In questa sezione, lavorerai con un piccolo dataset sul diabete che è integrato in Scikit-learn per scopi didattici. Immagina di voler testare un trattamento per pazienti diabetici. I modelli di Machine Learning potrebbero aiutarti a determinare quali pazienti risponderebbero meglio al trattamento, in base a combinazioni di variabili. Anche un modello di regressione molto semplice, quando visualizzato, potrebbe mostrare informazioni sulle variabili che ti aiuterebbero a organizzare i tuoi studi clinici teorici. - -✅ Esistono molti tipi di metodi di regressione e quale scegli dipende dalla risposta che stai cercando. Se vuoi prevedere l'altezza probabile di una persona di una certa età, useresti la regressione lineare, poiché stai cercando un **valore numerico**. Se sei interessato a scoprire se un tipo di cucina dovrebbe essere considerato vegano o meno, stai cercando un **assegnazione di categoria** quindi useresti la regressione logistica. Imparerai di più sulla regressione logistica più avanti. Pensa un po' a delle domande che puoi fare ai dati e quale di questi metodi sarebbe più appropriato. - -Iniziamo con questo compito. - -### Importa le librerie - -Per questo compito importeremo alcune librerie: - -- **matplotlib**. È uno strumento utile per [grafici](https://matplotlib.org/) e lo useremo per creare un grafico a linee. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) è una libreria utile per la gestione dei dati numerici in Python. -- **sklearn**. Questa è la libreria [Scikit-learn](https://scikit-learn.org/stable/user_guide.html). - -Importa alcune librerie per aiutarti con i tuoi compiti. - -1. Aggiungi gli import digitando il seguente codice: - - ```python - import matplotlib.pyplot as plt - import numpy as np - from sklearn import datasets, linear_model, model_selection - ``` - - Sopra stai importando `matplotlib`, `numpy` and you are importing `datasets`, `linear_model` and `model_selection` from `sklearn`. `model_selection` is used for splitting data into training and test sets. - -### The diabetes dataset - -The built-in [diabetes dataset](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) includes 442 samples of data around diabetes, with 10 feature variables, some of which include: - -- age: age in years -- bmi: body mass index -- bp: average blood pressure -- s1 tc: T-Cells (a type of white blood cells) - -✅ This dataset includes the concept of 'sex' as a feature variable important to research around diabetes. Many medical datasets include this type of binary classification. Think a bit about how categorizations such as this might exclude certain parts of a population from treatments. - -Now, load up the X and y data. - -> 🎓 Remember, this is supervised learning, and we need a named 'y' target. - -In a new code cell, load the diabetes dataset by calling `load_diabetes()`. The input `return_X_y=True` signals that `X` will be a data matrix, and `y` sarà il target della regressione. - -2. Aggiungi alcuni comandi di stampa per mostrare la forma della matrice dei dati e il suo primo elemento: - - ```python - X, y = datasets.load_diabetes(return_X_y=True) - print(X.shape) - print(X[0]) - ``` - - Quello che ottieni come risposta è una tupla. Quello che stai facendo è assegnare i primi due valori della tupla a `X` and `y` rispettivamente. Scopri di più [sulle tuple](https://wikipedia.org/wiki/Tuple). - - Puoi vedere che questi dati hanno 442 elementi formati in array di 10 elementi: - - ```text - (442, 10) - [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 - -0.04340085 -0.00259226 0.01990842 -0.01764613] - ``` - - ✅ Pensa un po' alla relazione tra i dati e il target della regressione. La regressione lineare prevede relazioni tra la caratteristica X e la variabile target y. Puoi trovare il [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) per il dataset del diabete nella documentazione? Cosa sta dimostrando questo dataset, dato quel target? - -3. Successivamente, seleziona una porzione di questo dataset da tracciare selezionando la 3ª colonna del dataset. Puoi farlo usando il `:` operator to select all rows, and then selecting the 3rd column using the index (2). You can also reshape the data to be a 2D array - as required for plotting - by using `reshape(n_rows, n_columns)`. Se uno dei parametri è -1, la dimensione corrispondente viene calcolata automaticamente. - - ```python - X = X[:, 2] - X = X.reshape((-1,1)) - ``` - - ✅ In qualsiasi momento, stampa i dati per controllarne la forma. - -4. Ora che hai i dati pronti per essere tracciati, puoi vedere se una macchina può aiutare a determinare una divisione logica tra i numeri in questo dataset. Per fare ciò, devi dividere sia i dati (X) che il target (y) in set di test e di addestramento. Scikit-learn ha un modo semplice per farlo; puoi dividere i tuoi dati di test in un punto dato. - - ```python - X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) - ``` - -5. Ora sei pronto per addestrare il tuo modello! Carica il modello di regressione lineare e addestralo con i tuoi set di addestramento X e y usando `model.fit()`: - - ```python - model = linear_model.LinearRegression() - model.fit(X_train, y_train) - ``` - - ✅ `model.fit()` is a function you'll see in many ML libraries such as TensorFlow - -5. Then, create a prediction using test data, using the function `predict()`. Questo sarà usato per tracciare la linea tra i gruppi di dati del modello - - ```python - y_pred = model.predict(X_test) - ``` - -6. Ora è il momento di mostrare i dati in un grafico. Matplotlib è uno strumento molto utile per questo compito. Crea un grafico a dispersione di tutti i dati di test X e y, e usa la previsione per tracciare una linea nel punto più appropriato, tra i gruppi di dati del modello. - - ```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() - ``` - - ![un grafico a dispersione che mostra punti dati intorno al diabete](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.it.png) - - ✅ Pensa un po' a cosa sta succedendo qui. Una linea retta sta attraversando molti piccoli punti di dati, ma cosa sta facendo esattamente? Riesci a vedere come dovresti essere in grado di usare questa linea per prevedere dove un nuovo punto dati non visto dovrebbe adattarsi in relazione all'asse y del grafico? Prova a mettere in parole l'uso pratico di questo modello. - -Congratulazioni, hai costruito il tuo primo modello di regressione lineare, creato una previsione con esso e l'hai visualizzata in un grafico! - ---- -## 🚀Sfida - -Traccia una variabile diversa da questo dataset. Suggerimento: modifica questa linea: `X = X[:,2]`. Dato il target di questo dataset, cosa sei in grado di scoprire sulla progressione del diabete come malattia? -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) - -## Revisione & Studio Individuale - -In questo tutorial, hai lavorato con la regressione lineare semplice, piuttosto che con la regressione univariata o multipla. Leggi un po' sulle differenze tra questi metodi, o guarda [questo video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) - -Leggi di più sul concetto di regressione e pensa a quali tipi di domande possono essere risposte con questa tecnica. Segui questo [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) per approfondire la tua comprensione. - -## Compito - -[Un dataset diverso](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/1-Tools/assignment.md b/translations/it/2-Regression/1-Tools/assignment.md deleted file mode 100644 index 45f44603..00000000 --- a/translations/it/2-Regression/1-Tools/assignment.md +++ /dev/null @@ -1,16 +0,0 @@ -# Regressione con Scikit-learn - -## Istruzioni - -Dai un'occhiata al [dataset Linnerud](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) in Scikit-learn. Questo dataset ha diversi [target](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Consiste in tre variabili di esercizio (dati) e tre variabili fisiologiche (target) raccolte da venti uomini di mezza età in un club di fitness'. - -Con parole tue, descrivi come creare un modello di Regressione che possa tracciare la relazione tra la circonferenza della vita e quanti sit-up vengono eseguiti. Fai lo stesso per gli altri punti dati in questo dataset. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Bisogno di miglioramento | -| ------------------------------ | ------------------------------------ | ----------------------------- | -------------------------- | -| Invia un paragrafo descrittivo | Viene inviato un paragrafo ben scritto | Vengono inviate alcune frasi | Nessuna descrizione fornita | - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/1-Tools/solution/Julia/README.md b/translations/it/2-Regression/1-Tools/solution/Julia/README.md deleted file mode 100644 index b3b9d777..00000000 --- a/translations/it/2-Regression/1-Tools/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/2-Data/README.md b/translations/it/2-Regression/2-Data/README.md deleted file mode 100644 index ce18148c..00000000 --- a/translations/it/2-Regression/2-Data/README.md +++ /dev/null @@ -1,215 +0,0 @@ -# Costruisci un modello di regressione usando Scikit-learn: prepara e visualizza i dati - -![Infografica di visualizzazione dei dati](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.it.png) - -Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) - -> ### [Questa lezione è disponibile in R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) - -## Introduzione - -Ora che hai a disposizione gli strumenti necessari per iniziare a costruire modelli di machine learning con Scikit-learn, sei pronto per iniziare a fare domande ai tuoi dati. Quando lavori con i dati e applichi soluzioni di ML, è molto importante capire come porre la domanda giusta per sbloccare correttamente il potenziale del tuo dataset. - -In questa lezione imparerai: - -- Come preparare i tuoi dati per la costruzione di modelli. -- Come usare Matplotlib per la visualizzazione dei dati. - -## Porre la domanda giusta ai tuoi dati - -La domanda a cui hai bisogno di rispondere determinerà il tipo di algoritmi di ML che utilizzerai. E la qualità della risposta che ottieni sarà fortemente dipendente dalla natura dei tuoi dati. - -Dai un'occhiata ai [dati](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) forniti per questa lezione. Puoi aprire questo file .csv in VS Code. Una rapida occhiata mostra subito che ci sono spazi vuoti e un mix di stringhe e dati numerici. C'è anche una colonna strana chiamata 'Package' dove i dati sono un mix tra 'sacks', 'bins' e altri valori. In effetti, i dati sono un po' un disastro. - -[![ML per principianti - Come analizzare e pulire un dataset](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML per principianti - Come analizzare e pulire un dataset") - -> 🎥 Clicca sull'immagine sopra per un breve video su come preparare i dati per questa lezione. - -In effetti, non è molto comune ricevere un dataset completamente pronto per essere utilizzato per creare un modello di ML. In questa lezione, imparerai come preparare un dataset grezzo usando librerie Python standard. Imparerai anche varie tecniche per visualizzare i dati. - -## Caso di studio: 'il mercato delle zucche' - -In questa cartella troverai un file .csv nella cartella principale `data` chiamato [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) che include 1757 righe di dati sul mercato delle zucche, ordinati per città. Questi sono dati grezzi estratti dai [Rapporti Standard dei Mercati Terminali delle Colture Speciali](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuiti dal Dipartimento dell'Agricoltura degli Stati Uniti. - -### Preparazione dei dati - -Questi dati sono di dominio pubblico. Possono essere scaricati in molti file separati, per città, dal sito web dell'USDA. Per evitare troppi file separati, abbiamo concatenato tutti i dati delle città in un unico foglio di calcolo, quindi abbiamo già _preparato_ un po' i dati. Ora, diamo un'occhiata più da vicino ai dati. - -### I dati delle zucche - prime conclusioni - -Cosa noti riguardo a questi dati? Hai già visto che c'è un mix di stringhe, numeri, spazi vuoti e valori strani che devi capire. - -Che domanda puoi fare a questi dati, usando una tecnica di Regressione? Che ne dici di "Prevedere il prezzo di una zucca in vendita durante un dato mese". Guardando di nuovo i dati, ci sono alcune modifiche che devi fare per creare la struttura dei dati necessaria per il compito. - -## Esercizio - analizzare i dati delle zucche - -Usiamo [Pandas](https://pandas.pydata.org/), (il nome sta per `Python Data Analysis`) uno strumento molto utile per modellare i dati, per analizzare e preparare questi dati sulle zucche. - -### Prima di tutto, controlla le date mancanti - -Per prima cosa dovrai prendere provvedimenti per controllare le date mancanti: - -1. Converti le date in un formato mensile (queste sono date statunitensi, quindi il formato è `MM/DD/YYYY`). -2. Estrai il mese in una nuova colonna. - -Apri il file _notebook.ipynb_ in Visual Studio Code e importa il foglio di calcolo in un nuovo dataframe Pandas. - -1. Usa la funzione `head()` per visualizzare le prime cinque righe. - - ```python - import pandas as pd - pumpkins = pd.read_csv('../data/US-pumpkins.csv') - pumpkins.head() - ``` - - ✅ Quale funzione useresti per visualizzare le ultime cinque righe? - -1. Controlla se ci sono dati mancanti nel dataframe corrente: - - ```python - pumpkins.isnull().sum() - ``` - - Ci sono dati mancanti, ma forse non sarà importante per il compito in questione. - -1. Per rendere il tuo dataframe più facile da gestire, seleziona solo le colonne di cui hai bisogno, usando `loc` function which extracts from the original dataframe a group of rows (passed as first parameter) and columns (passed as second parameter). The expression `:` nel caso sotto significa "tutte le righe". - - ```python - columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] - pumpkins = pumpkins.loc[:, columns_to_select] - ``` - -### Secondo, determina il prezzo medio delle zucche - -Pensa a come determinare il prezzo medio di una zucca in un dato mese. Quali colonne sceglieresti per questo compito? Suggerimento: avrai bisogno di 3 colonne. - -Soluzione: prendi la media delle colonne `Low Price` and `High Price` per popolare la nuova colonna Price e converti la colonna Date per mostrare solo il mese. Fortunatamente, secondo il controllo sopra, non ci sono dati mancanti per le date o i prezzi. - -1. Per calcolare la media, aggiungi il seguente codice: - - ```python - price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 - - month = pd.DatetimeIndex(pumpkins['Date']).month - - ``` - - ✅ Sentiti libero di stampare qualsiasi dato che desideri controllare usando `print(month)`. - -2. Ora, copia i tuoi dati convertiti in un nuovo dataframe Pandas: - - ```python - new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) - ``` - - Stampando il tuo dataframe, vedrai un dataset pulito e ordinato su cui puoi costruire il tuo nuovo modello di regressione. - -### Ma aspetta! C'è qualcosa di strano qui - -Se guardi la colonna `Package` column, pumpkins are sold in many different configurations. Some are sold in '1 1/9 bushel' measures, and some in '1/2 bushel' measures, some per pumpkin, some per pound, and some in big boxes with varying widths. - -> Pumpkins seem very hard to weigh consistently - -Digging into the original data, it's interesting that anything with `Unit of Sale` equalling 'EACH' or 'PER BIN' also have the `Package` type per inch, per bin, or 'each'. Pumpkins seem to be very hard to weigh consistently, so let's filter them by selecting only pumpkins with the string 'bushel' in their `Package`. - -1. Aggiungi un filtro in cima al file, sotto l'importazione iniziale del .csv: - - ```python - pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] - ``` - - Se stampi i dati ora, puoi vedere che stai ottenendo solo circa 415 righe di dati contenenti zucche al bushel. - -### Ma aspetta! C'è un'altra cosa da fare - -Hai notato che la quantità di bushel varia per riga? Devi normalizzare i prezzi in modo da mostrare il prezzo per bushel, quindi fai qualche calcolo per standardizzarlo. - -1. Aggiungi queste righe dopo il blocco che crea il dataframe 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) - ``` - -✅ Secondo [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), il peso di un bushel dipende dal tipo di prodotto, poiché è una misura di volume. "Un bushel di pomodori, ad esempio, dovrebbe pesare 56 libbre... Le foglie e le verdure occupano più spazio con meno peso, quindi un bushel di spinaci pesa solo 20 libbre." È tutto piuttosto complicato! Non preoccupiamoci di fare una conversione bushel-libbre e invece calcoliamo il prezzo per bushel. Tutto questo studio sui bushel di zucche, tuttavia, dimostra quanto sia importante capire la natura dei tuoi dati! - -Ora, puoi analizzare i prezzi per unità in base alla loro misura di bushel. Se stampi i dati un'altra volta, puoi vedere come sono standardizzati. - -✅ Hai notato che le zucche vendute a mezzo bushel sono molto costose? Riesci a capire perché? Suggerimento: le zucche piccole sono molto più costose di quelle grandi, probabilmente perché ce ne sono molte di più per bushel, dato lo spazio inutilizzato occupato da una grande zucca vuota per torta. - -## Strategie di visualizzazione - -Parte del ruolo del data scientist è dimostrare la qualità e la natura dei dati con cui stanno lavorando. Per fare ciò, spesso creano visualizzazioni interessanti, o grafici, diagrammi e chart, mostrando diversi aspetti dei dati. In questo modo, sono in grado di mostrare visivamente relazioni e lacune che altrimenti sarebbero difficili da scoprire. - -[![ML per principianti - Come visualizzare i dati con Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML per principianti - Come visualizzare i dati con Matplotlib") - -> 🎥 Clicca sull'immagine sopra per un breve video su come visualizzare i dati per questa lezione. - -Le visualizzazioni possono anche aiutare a determinare la tecnica di machine learning più appropriata per i dati. Un grafico a dispersione che sembra seguire una linea, ad esempio, indica che i dati sono un buon candidato per un esercizio di regressione lineare. - -Una libreria di visualizzazione dei dati che funziona bene nei notebook Jupyter è [Matplotlib](https://matplotlib.org/) (che hai visto anche nella lezione precedente). - -> Ottieni più esperienza con la visualizzazione dei dati in [questi tutorial](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). - -## Esercizio - sperimenta con Matplotlib - -Prova a creare alcuni grafici di base per visualizzare il nuovo dataframe che hai appena creato. Cosa mostrerebbe un grafico a linee di base? - -1. Importa Matplotlib in cima al file, sotto l'importazione di Pandas: - - ```python - import matplotlib.pyplot as plt - ``` - -1. Rilancia l'intero notebook per aggiornare. -1. In fondo al notebook, aggiungi una cella per tracciare i dati come un box: - - ```python - price = new_pumpkins.Price - month = new_pumpkins.Month - plt.scatter(price, month) - plt.show() - ``` - - ![Un grafico a dispersione che mostra la relazione tra prezzo e mese](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.it.png) - - Questo grafico è utile? C'è qualcosa che ti sorprende? - - Non è particolarmente utile poiché tutto ciò che fa è mostrare i tuoi dati come una distribuzione di punti in un dato mese. - -### Rendilo utile - -Per ottenere grafici che mostrino dati utili, di solito è necessario raggruppare i dati in qualche modo. Proviamo a creare un grafico in cui l'asse y mostra i mesi e i dati dimostrano la distribuzione dei dati. - -1. Aggiungi una cella per creare un grafico a barre raggruppato: - - ```python - new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') - plt.ylabel("Pumpkin Price") - ``` - - ![Un grafico a barre che mostra la relazione tra prezzo e mese](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.it.png) - - Questa è una visualizzazione dei dati più utile! Sembra indicare che il prezzo più alto delle zucche si verifica a settembre e ottobre. Questo soddisfa le tue aspettative? Perché o perché no? - ---- - -## 🚀Sfida - -Esplora i diversi tipi di visualizzazione che Matplotlib offre. Quali tipi sono più appropriati per i problemi di regressione? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) - -## Revisione e studio autonomo - -Dai un'occhiata ai molti modi per visualizzare i dati. Fai un elenco delle varie librerie disponibili e annota quali sono le migliori per determinati tipi di compiti, ad esempio visualizzazioni 2D vs. visualizzazioni 3D. Cosa scopri? - -## Compito - -[Esplorazione della visualizzazione](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/2-Data/assignment.md b/translations/it/2-Regression/2-Data/assignment.md deleted file mode 100644 index 900782dd..00000000 --- a/translations/it/2-Regression/2-Data/assignment.md +++ /dev/null @@ -1,11 +0,0 @@ -# Esplorare le Visualizzazioni - -Ci sono diverse librerie disponibili per la visualizzazione dei dati. Crea alcune visualizzazioni utilizzando i dati delle Zucche in questa lezione con matplotlib e seaborn in un notebook di esempio. Quali librerie sono più facili da usare? -## Rubrica - -| Criteri | Esemplare | Adeguato | Da Migliorare | -| ------- | --------- | -------- | ------------- | -| | Viene inviato un notebook con due esplorazioni/visualizzazioni | Viene inviato un notebook con una esplorazione/visualizzazione | Non viene inviato alcun notebook | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/2-Data/solution/Julia/README.md b/translations/it/2-Regression/2-Data/solution/Julia/README.md deleted file mode 100644 index a547fe18..00000000 --- a/translations/it/2-Regression/2-Data/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/3-Linear/README.md b/translations/it/2-Regression/3-Linear/README.md deleted file mode 100644 index 65dcf136..00000000 --- a/translations/it/2-Regression/3-Linear/README.md +++ /dev/null @@ -1,370 +0,0 @@ -# Costruire un modello di regressione usando Scikit-learn: quattro modi di fare regressione - -![Infografica della regressione lineare vs polinomiale](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.it.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) - -> ### [Questa lezione è disponibile in R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### Introduzione - -Finora hai esplorato cosa sia la regressione con dati di esempio raccolti dal dataset dei prezzi delle zucche che useremo durante questa lezione. Hai anche visualizzato questi dati usando Matplotlib. - -Ora sei pronto per approfondire la regressione per il Machine Learning. Mentre la visualizzazione ti permette di comprendere i dati, il vero potere del Machine Learning deriva dall'addestramento dei modelli. I modelli vengono addestrati su dati storici per catturare automaticamente le dipendenze dei dati e ti permettono di prevedere i risultati per nuovi dati che il modello non ha mai visto prima. - -In questa lezione, imparerai di più su due tipi di regressione: _regressione lineare di base_ e _regressione polinomiale_, insieme ad alcune delle matematiche sottostanti queste tecniche. Questi modelli ci permetteranno di prevedere i prezzi delle zucche in base a diversi dati di input. - -[![ML per principianti - Comprendere la Regressione Lineare](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML per principianti - Comprendere la Regressione Lineare") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulla regressione lineare. - -> In tutto questo curriculum, assumiamo una conoscenza minima della matematica e cerchiamo di renderla accessibile per gli studenti provenienti da altri campi, quindi presta attenzione alle note, 🧮 callout, diagrammi e altri strumenti di apprendimento per aiutare nella comprensione. - -### Prerequisiti - -Dovresti essere ormai familiare con la struttura dei dati delle zucche che stiamo esaminando. Puoi trovarli pre-caricati e pre-puliti nel file _notebook.ipynb_ di questa lezione. Nel file, il prezzo delle zucche è mostrato per bushel in un nuovo dataframe. Assicurati di poter eseguire questi notebook nei kernel in Visual Studio Code. - -### Preparazione - -Come promemoria, stai caricando questi dati per fare delle domande su di essi. - -- Qual è il momento migliore per comprare zucche? -- Quale prezzo posso aspettarmi per una cassa di zucche in miniatura? -- Dovrei comprarle in cesti da mezzo bushel o in scatole da 1 1/9 bushel? -Continuiamo a scavare in questi dati. - -Nella lezione precedente, hai creato un dataframe Pandas e lo hai popolato con parte del dataset originale, standardizzando i prezzi per bushel. Facendo così, tuttavia, sei riuscito a raccogliere solo circa 400 punti dati e solo per i mesi autunnali. - -Dai un'occhiata ai dati che abbiamo pre-caricato nel notebook allegato a questa lezione. I dati sono pre-caricati e un primo scatterplot è tracciato per mostrare i dati mensili. Forse possiamo ottenere un po' più di dettaglio sulla natura dei dati pulendoli ulteriormente. - -## Una linea di regressione lineare - -Come hai appreso nella Lezione 1, l'obiettivo di un esercizio di regressione lineare è essere in grado di tracciare una linea per: - -- **Mostrare le relazioni tra le variabili**. Mostrare la relazione tra le variabili -- **Fare previsioni**. Fare previsioni accurate su dove un nuovo punto dati cadrebbe in relazione a quella linea. - -È tipico della **Regressione dei Minimi Quadrati** tracciare questo tipo di linea. Il termine 'minimi quadrati' significa che tutti i punti dati che circondano la linea di regressione vengono quadrati e poi sommati. Idealmente, quella somma finale è il più piccola possibile, perché vogliamo un numero basso di errori, o `least-squares`. - -Facciamo così poiché vogliamo modellare una linea che abbia la minima distanza cumulativa da tutti i nostri punti dati. Inoltre, quadratiamo i termini prima di aggiungerli poiché siamo interessati alla loro grandezza piuttosto che alla loro direzione. - -> **🧮 Mostrami la matematica** -> -> Questa linea, chiamata _linea di miglior adattamento_ può essere espressa da [un'equazione](https://en.wikipedia.org/wiki/Simple_linear_regression): -> -> ``` -> Y = a + bX -> ``` -> -> `X` is the 'explanatory variable'. `Y` is the 'dependent variable'. The slope of the line is `b` and `a` is the y-intercept, which refers to the value of `Y` when `X = 0`. -> ->![calculate the slope](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.it.png) -> -> First, calculate the slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> In other words, and referring to our pumpkin data's original question: "predict the price of a pumpkin per bushel by month", `X` would refer to the price and `Y` would refer to the month of sale. -> ->![complete the equation](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.it.png) -> -> Calculate the value of Y. If you're paying around $4, it must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper) -> -> The math that calculates the line must demonstrate the slope of the line, which is also dependent on the intercept, or where `Y` is situated when `X = 0`. -> -> You can observe the method of calculation for these values on the [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Also visit [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to watch how the numbers' values impact the line. - -## Correlation - -One more term to understand is the **Correlation Coefficient** between given X and Y variables. Using a scatterplot, you can quickly visualize this coefficient. A plot with datapoints scattered in a neat line have high correlation, but a plot with datapoints scattered everywhere between X and Y have a low correlation. - -A good linear regression model will be one that has a high (nearer to 1 than 0) Correlation Coefficient using the Least-Squares Regression method with a line of regression. - -✅ Run the notebook accompanying this lesson and look at the Month to Price scatterplot. Does the data associating Month to Price for pumpkin sales seem to have high or low correlation, according to your visual interpretation of the scatterplot? Does that change if you use more fine-grained measure instead of `Month`, eg. *day of the year* (i.e. number of days since the beginning of the year)? - -In the code below, we will assume that we have cleaned up the data, and obtained a data frame called `new_pumpkins`, similar to the following: - -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 - -> The code to clean the data is available in [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). We have performed the same cleaning steps as in the previous lesson, and have calculated `DayOfYear` colonna usando la seguente espressione: - -```python -day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) -``` - -Ora che hai compreso la matematica dietro la regressione lineare, creiamo un modello di Regressione per vedere se possiamo prevedere quale pacchetto di zucche avrà i migliori prezzi delle zucche. Qualcuno che acquista zucche per un campo di zucche per le vacanze potrebbe voler avere questa informazione per ottimizzare i propri acquisti di pacchetti di zucche per il campo. - -## Cercare la Correlazione - -[![ML per principianti - Cercare la Correlazione: La Chiave per la Regressione Lineare](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML per principianti - Cercare la Correlazione: La Chiave per la Regressione Lineare") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulla correlazione. - -Dalla lezione precedente hai probabilmente visto che il prezzo medio per i diversi mesi appare così: - -Prezzo medio per mese - -Questo suggerisce che ci dovrebbe essere una certa correlazione, e possiamo provare ad addestrare un modello di regressione lineare per prevedere la relazione tra `Month` and `Price`, or between `DayOfYear` and `Price`. Here is the scatter plot that shows the latter relationship: - -Scatter plot of Price vs. Day of Year - -Let's see if there is a correlation using the `corr` funzione: - -```python -print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) -print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) -``` - -Sembra che la correlazione sia piuttosto bassa, -0.15 da `Month` and -0.17 by the `DayOfMonth`, but there could be another important relationship. It looks like there are different clusters of prices corresponding to different pumpkin varieties. To confirm this hypothesis, let's plot each pumpkin category using a different color. By passing an `ax` parameter to the `scatter` funzione di tracciamento possiamo tracciare tutti i punti sullo stesso grafico: - -```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) -``` - -Scatter plot di Prezzo vs. Giorno dell'Anno - -La nostra indagine suggerisce che la varietà ha più effetto sul prezzo complessivo rispetto alla data effettiva di vendita. Possiamo vedere questo con un grafico a barre: - -```python -new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') -``` - -Grafico a barre di prezzo vs varietà - -Concentriamoci per il momento solo su una varietà di zucca, il 'tipo torta', e vediamo quale effetto ha la data sul prezzo: - -```python -pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] -pie_pumpkins.plot.scatter('DayOfYear','Price') -``` -Scatter plot di Prezzo vs. Giorno dell'Anno - -Se ora calcoliamo la correlazione tra `Price` and `DayOfYear` using `corr` function, we will get something like `-0.27` - il che significa che addestrare un modello predittivo ha senso. - -> Prima di addestrare un modello di regressione lineare, è importante assicurarsi che i nostri dati siano puliti. La regressione lineare non funziona bene con valori mancanti, quindi ha senso eliminare tutte le celle vuote: - -```python -pie_pumpkins.dropna(inplace=True) -pie_pumpkins.info() -``` - -Un altro approccio sarebbe riempire quei valori vuoti con valori medi dalla colonna corrispondente. - -## Regressione Lineare Semplice - -[![ML per principianti - Regressione Lineare e Polinomiale usando Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML per principianti - Regressione Lineare e Polinomiale usando Scikit-learn") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulla regressione lineare e polinomiale. - -Per addestrare il nostro modello di Regressione Lineare, useremo la libreria **Scikit-learn**. - -```python -from sklearn.linear_model import LinearRegression -from sklearn.metrics import mean_squared_error -from sklearn.model_selection import train_test_split -``` - -Iniziamo separando i valori di input (caratteristiche) e l'output atteso (etichetta) in array numpy separati: - -```python -X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) -y = pie_pumpkins['Price'] -``` - -> Nota che abbiamo dovuto eseguire `reshape` sui dati di input affinché il pacchetto di Regressione Lineare li comprenda correttamente. La Regressione Lineare si aspetta un array 2D come input, dove ogni riga dell'array corrisponde a un vettore di caratteristiche di input. Nel nostro caso, poiché abbiamo solo un input, abbiamo bisogno di un array con forma N×1, dove N è la dimensione del dataset. - -Poi, dobbiamo dividere i dati in dataset di addestramento e di test, in modo da poter validare il nostro modello dopo l'addestramento: - -```python -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) -``` - -Infine, l'addestramento del vero e proprio modello di Regressione Lineare richiede solo due righe di codice. Definiamo il metodo `LinearRegression` object, and fit it to our data using the `fit`: - -```python -lin_reg = LinearRegression() -lin_reg.fit(X_train,y_train) -``` - -Il `LinearRegression` object after `fit`-ting contains all the coefficients of the regression, which can be accessed using `.coef_` property. In our case, there is just one coefficient, which should be around `-0.017`. It means that prices seem to drop a bit with time, but not too much, around 2 cents per day. We can also access the intersection point of the regression with Y-axis using `lin_reg.intercept_` - it will be around `21` nel nostro caso, indicando il prezzo all'inizio dell'anno. - -Per vedere quanto è accurato il nostro modello, possiamo prevedere i prezzi su un dataset di test, e poi misurare quanto le nostre previsioni siano vicine ai valori attesi. Questo può essere fatto usando la metrica dell'errore quadratico medio (MSE), che è la media di tutte le differenze quadrate tra il valore atteso e quello previsto. - -```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}%)') -``` - -Il nostro errore sembra essere intorno ai 2 punti, che è ~17%. Non troppo buono. Un altro indicatore della qualità del modello è il **coefficiente di determinazione**, che può essere ottenuto così: - -```python -score = lin_reg.score(X_train,y_train) -print('Model determination: ', score) -``` -Se il valore è 0, significa che il modello non tiene conto dei dati di input e agisce come il *peggior predittore lineare*, che è semplicemente un valore medio del risultato. Il valore di 1 significa che possiamo prevedere perfettamente tutti gli output attesi. Nel nostro caso, il coefficiente è intorno a 0.06, che è piuttosto basso. - -Possiamo anche tracciare i dati di test insieme alla linea di regressione per vedere meglio come funziona la regressione nel nostro caso: - -```python -plt.scatter(X_test,y_test) -plt.plot(X_test,pred) -``` - -Regressione lineare - -## Regressione Polinomiale - -Un altro tipo di Regressione Lineare è la Regressione Polinomiale. Mentre a volte c'è una relazione lineare tra le variabili - più grande è la zucca in volume, più alto è il prezzo - a volte queste relazioni non possono essere tracciate come un piano o una linea retta. - -✅ Ecco [alcuni esempi](https://online.stat.psu.edu/stat501/lesson/9/9.8) di dati che potrebbero usare la Regressione Polinomiale - -Dai un'altra occhiata alla relazione tra Data e Prezzo. Questo scatterplot sembra necessariamente essere analizzato con una linea retta? I prezzi non possono fluttuare? In questo caso, puoi provare la regressione polinomiale. - -✅ I polinomi sono espressioni matematiche che potrebbero consistere in una o più variabili e coefficienti - -La regressione polinomiale crea una linea curva per adattarsi meglio ai dati non lineari. Nel nostro caso, se includiamo una variabile quadrata `DayOfYear` nei dati di input, dovremmo essere in grado di adattare i nostri dati con una curva parabolica, che avrà un minimo in un certo punto dell'anno. - -Scikit-learn include una utile [API pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) per combinare diversi passaggi di elaborazione dei dati insieme. Una **pipeline** è una catena di **stimatori**. Nel nostro caso, creeremo una pipeline che prima aggiunge caratteristiche polinomiali al nostro modello, e poi addestra la regressione: - -```python -from sklearn.preprocessing import PolynomialFeatures -from sklearn.pipeline import make_pipeline - -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) - -pipeline.fit(X_train,y_train) -``` - -Usando `PolynomialFeatures(2)` means that we will include all second-degree polynomials from the input data. In our case it will just mean `DayOfYear`2, but given two input variables X and Y, this will add X2, XY and Y2. We may also use higher degree polynomials if we want. - -Pipelines can be used in the same manner as the original `LinearRegression` object, i.e. we can `fit` the pipeline, and then use `predict` to get the prediction results. Here is the graph showing test data, and the approximation curve: - -Polynomial regression - -Using Polynomial Regression, we can get slightly lower MSE and higher determination, but not significantly. We need to take into account other features! - -> You can see that the minimal pumpkin prices are observed somewhere around Halloween. How can you explain this? - -🎃 Congratulations, you just created a model that can help predict the price of pie pumpkins. You can probably repeat the same procedure for all pumpkin types, but that would be tedious. Let's learn now how to take pumpkin variety into account in our model! - -## Categorical Features - -In the ideal world, we want to be able to predict prices for different pumpkin varieties using the same model. However, the `Variety` column is somewhat different from columns like `Month`, because it contains non-numeric values. Such columns are called **categorical**. - -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") - -> 🎥 Click the image above for a short video overview of using categorical features. - -Here you can see how average price depends on variety: - -Average price by variety - -To take variety into account, we first need to convert it to numeric form, or **encode** it. There are several way we can do it: - -* Simple **numeric encoding** will build a table of different varieties, and then replace the variety name by an index in that table. This is not the best idea for linear regression, because linear regression takes the actual numeric value of the index, and adds it to the result, multiplying by some coefficient. In our case, the relationship between the index number and the price is clearly non-linear, even if we make sure that indices are ordered in some specific way. -* **One-hot encoding** will replace the `Variety` column by 4 different columns, one for each variety. Each column will contain `1` if the corresponding row is of a given variety, and `0` altrimenti. Questo significa che ci saranno quattro coefficienti nella regressione lineare, uno per ogni varietà di zucca, responsabile del "prezzo iniziale" (o piuttosto "prezzo aggiuntivo") per quella particolare varietà. - -Il codice qui sotto mostra come possiamo codificare una varietà con one-hot encoding: - -```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 - -Per addestrare la regressione lineare usando la varietà codificata con one-hot come input, dobbiamo solo inizializzare correttamente i dati `X` and `y`: - -```python -X = pd.get_dummies(new_pumpkins['Variety']) -y = new_pumpkins['Price'] -``` - -Il resto del codice è lo stesso di quello che abbiamo usato sopra per addestrare la Regressione Lineare. Se lo provi, vedrai che l'errore quadratico medio è più o meno lo stesso, ma otteniamo un coefficiente di determinazione molto più alto (~77%). Per ottenere previsioni ancora più accurate, possiamo tenere conto di più caratteristiche categoriche, così come di caratteristiche numeriche, come `Month` or `DayOfYear`. To get one large array of features, we can use `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'] -``` - -Qui teniamo anche conto di `City` and `Package` tipo, che ci dà un MSE di 2.84 (10%), e una determinazione di 0.94! - -## Mettere tutto insieme - -Per fare il miglior modello, possiamo usare dati combinati (categorici codificati con one-hot + numerici) dall'esempio sopra insieme alla Regressione Polinomiale. Ecco il codice completo per tua comodità: - -```python -# set up training data -X = pd.get_dummies(new_pumpkins['Variety']) \ - .join(new_pumpkins['Month']) \ - .join(pd.get_dummies(new_pumpkins['City'])) \ - .join(pd.get_dummies(new_pumpkins['Package'])) -y = new_pumpkins['Price'] - -# make train-test split -X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) - -# setup and train the pipeline -pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) -pipeline.fit(X_train,y_train) - -# predict results for test data -pred = pipeline.predict(X_test) - -# calculate MSE and determination -mse = np.sqrt(mean_squared_error(y_test,pred)) -print(f'Mean error: {mse:3.3} ({mse/np.mean(pred)*100:3.3}%)') - -score = pipeline.score(X_train,y_train) -print('Model determination: ', score) -``` - -Questo dovrebbe darci il miglior coefficiente di determinazione di quasi il 97%, e MSE=2.23 (~8% di errore di previsione). - -| Modello | MSE | Determinazione | -|---------|-----|----------------| -| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | -| `Variety` Lineare | 5.24 (19.7%) | 0.77 | -| Tutte le caratteristiche Lineare | 2.84 (10.5%) | 0.94 | -| Tutte le caratteristiche Polinomiale | 2.23 (8.25%) | 0.97 | - -🏆 Ben fatto! Hai creato quattro modelli di Regressione in una lezione e hai migliorato la qualità del modello al 97%. Nell'ultima sezione sulla Regressione, imparerai la Regressione Logistica per determinare le categorie. - ---- -## 🚀Sfida - -Testa diverse variabili in questo notebook per vedere come la correlazione corrisponde alla precisione del modello. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) - -## Revisione e Studio Autonomo - -In questa lezione abbiamo imparato la Regressione Lineare. Ci sono altri tipi importanti di Regressione. Leggi delle tecniche Stepwise, Ridge, Lasso e Elasticnet. Un buon corso da seguire per saperne di più è il [corso di Stanford Statistical Learning](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) - -## Compito - -[Costruisci un Modello](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/3-Linear/assignment.md b/translations/it/2-Regression/3-Linear/assignment.md deleted file mode 100644 index 579c6ec9..00000000 --- a/translations/it/2-Regression/3-Linear/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Creare un Modello di Regressione - -## Istruzioni - -In questa lezione ti è stato mostrato come costruire un modello utilizzando sia la Regressione Lineare che quella Polinomiale. Utilizzando queste conoscenze, trova un dataset o usa uno dei set integrati di Scikit-learn per costruire un nuovo modello. Spiega nel tuo notebook perché hai scelto la tecnica che hai utilizzato e dimostra l'accuratezza del tuo modello. Se non è accurato, spiega il perché. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da Migliorare | -| -------- | ------------------------------------------------------------ | --------------------------- | ------------------------------- | -| | presenta un notebook completo con una soluzione ben documentata | la soluzione è incompleta | la soluzione è difettosa o presenta bug | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/3-Linear/solution/Julia/README.md b/translations/it/2-Regression/3-Linear/solution/Julia/README.md deleted file mode 100644 index 1a7bc435..00000000 --- a/translations/it/2-Regression/3-Linear/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Anche se ci sforziamo di ottenere la massima precisione, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/4-Logistic/README.md b/translations/it/2-Regression/4-Logistic/README.md deleted file mode 100644 index c291dc30..00000000 --- a/translations/it/2-Regression/4-Logistic/README.md +++ /dev/null @@ -1,371 +0,0 @@ -# Regressione logistica per predire categorie - -![Infografica regressione logistica vs. lineare](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.it.png) - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) - -> ### [Questa lezione è disponibile in R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) - -## Introduzione - -In questa ultima lezione sulla Regressione, una delle tecniche di ML _classiche_ di base, esamineremo la Regressione Logistica. Utilizzeresti questa tecnica per scoprire schemi per prevedere categorie binarie. Questa caramella è cioccolato o no? Questa malattia è contagiosa o no? Questo cliente sceglierà questo prodotto o no? - -In questa lezione, imparerai: - -- Una nuova libreria per la visualizzazione dei dati -- Tecniche per la regressione logistica - -✅ Approfondisci la tua comprensione del lavoro con questo tipo di regressione in questo [modulo di apprendimento](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) - -## Prerequisiti - -Avendo lavorato con i dati della zucca, ora siamo abbastanza familiari con essi da capire che c'è una categoria binaria con cui possiamo lavorare: `Color`. - -Costruiamo un modello di regressione logistica per prevedere, date alcune variabili, _di che colore è probabile che sia una data zucca_ (arancione 🎃 o bianca 👻). - -> Perché stiamo parlando di classificazione binaria in una lezione raggruppata sulla regressione? Solo per convenienza linguistica, poiché la regressione logistica è [in realtà un metodo di classificazione](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), sebbene basato su un modello lineare. Impara altri modi per classificare i dati nel prossimo gruppo di lezioni. - -## Definire la domanda - -Per i nostri scopi, esprimeremo questo come un binario: 'Bianco' o 'Non Bianco'. C'è anche una categoria 'a strisce' nel nostro dataset, ma ci sono pochi casi, quindi non la useremo. Scompare comunque una volta rimosse le nullità dal dataset. - -> 🎃 Curiosità, a volte chiamiamo le zucche bianche 'zucche fantasma'. Non sono molto facili da intagliare, quindi non sono popolari come quelle arancioni, ma hanno un aspetto interessante! Quindi potremmo anche riformulare la nostra domanda come: 'Fantasma' o 'Non Fantasma'. 👻 - -## Sulla regressione logistica - -La regressione logistica differisce dalla regressione lineare, di cui hai già appreso, in alcuni modi importanti. - -[![ML per principianti - Comprendere la Regressione Logistica per la Classificazione del Machine Learning](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML per principianti - Comprendere la Regressione Logistica per la Classificazione del Machine Learning") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulla regressione logistica. - -### Classificazione binaria - -La regressione logistica non offre le stesse funzionalità della regressione lineare. La prima offre una previsione su una categoria binaria ("bianco o non bianco") mentre la seconda è in grado di prevedere valori continui, ad esempio data l'origine di una zucca e il tempo del raccolto, _quanto aumenterà il suo prezzo_. - -![Modello di classificazione delle zucche](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.it.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -### Altre classificazioni - -Ci sono altri tipi di regressione logistica, inclusi multinomiale e ordinale: - -- **Multinomiale**, che implica avere più di una categoria - "Arancione, Bianco e a Strisce". -- **Ordinale**, che implica categorie ordinate, utile se volessimo ordinare i nostri risultati in modo logico, come le nostre zucche ordinate per un numero finito di dimensioni (mini, sm, med, lg, xl, xxl). - -![Regressione multinomiale vs ordinale](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.it.png) - -### Le variabili NON devono correlare - -Ricordi come la regressione lineare funzionava meglio con variabili più correlate? La regressione logistica è l'opposto - le variabili non devono allinearsi. Questo funziona per questi dati che hanno correlazioni piuttosto deboli. - -### Hai bisogno di molti dati puliti - -La regressione logistica darà risultati più accurati se usi più dati; il nostro piccolo dataset non è ottimale per questo compito, quindi tienilo a mente. - -[![ML per principianti - Analisi e Preparazione dei Dati per la Regressione Logistica](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML per principianti - Analisi e Preparazione dei Dati per la Regressione Logistica") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulla preparazione dei dati per la regressione lineare - -✅ Pensa ai tipi di dati che si presterebbero bene alla regressione logistica - -## Esercizio - pulire i dati - -Per prima cosa, pulisci un po' i dati, eliminando i valori nulli e selezionando solo alcune delle colonne: - -1. Aggiungi il seguente codice: - - ```python - - columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] - pumpkins = full_pumpkins.loc[:, columns_to_select] - - pumpkins.dropna(inplace=True) - ``` - - Puoi sempre dare un'occhiata al tuo nuovo dataframe: - - ```python - pumpkins.info - ``` - -### Visualizzazione - grafico categorico - -A questo punto hai caricato il [notebook iniziale](../../../../2-Regression/4-Logistic/notebook.ipynb) con i dati delle zucche ancora una volta e li hai puliti in modo da preservare un dataset contenente alcune variabili, inclusa `Color`. Visualizziamo il dataframe nel notebook usando una libreria diversa: [Seaborn](https://seaborn.pydata.org/index.html), che è costruita su Matplotlib che abbiamo usato in precedenza. - -Seaborn offre modi interessanti per visualizzare i tuoi dati. Ad esempio, puoi confrontare le distribuzioni dei dati per ogni `Variety` e `Color` in un grafico categorico. - -1. Crea un tale grafico usando `catplot` function, using our pumpkin data `pumpkins`, specificando una mappatura dei colori per ogni categoria di zucca (arancione o bianca): - - ```python - import seaborn as sns - - palette = { - 'ORANGE': 'orange', - 'WHITE': 'wheat', - } - - sns.catplot( - data=pumpkins, y="Variety", hue="Color", kind="count", - palette=palette, - ) - ``` - - ![Una griglia di dati visualizzati](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.it.png) - - Osservando i dati, puoi vedere come i dati di Colore si relazionano a Variety. - - ✅ Data questa trama categorica, quali sono alcune esplorazioni interessanti che puoi immaginare? - -### Pre-elaborazione dei dati: codifica delle caratteristiche e delle etichette -Il nostro dataset di zucche contiene valori stringa per tutte le sue colonne. Lavorare con dati categorici è intuitivo per gli esseri umani ma non per le macchine. Gli algoritmi di machine learning funzionano bene con i numeri. Ecco perché la codifica è un passaggio molto importante nella fase di pre-elaborazione dei dati, poiché ci consente di trasformare i dati categorici in dati numerici, senza perdere alcuna informazione. Una buona codifica porta alla costruzione di un buon modello. - -Per la codifica delle caratteristiche ci sono due principali tipi di encoder: - -1. Encoder ordinale: si adatta bene alle variabili ordinali, che sono variabili categoriche in cui i loro dati seguono un ordine logico, come la colonna `Item Size` nel nostro dataset. Crea una mappatura tale che ogni categoria sia rappresentata da un numero, che è l'ordine della categoria nella colonna. - - ```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. Encoder categorico: si adatta bene alle variabili nominali, che sono variabili categoriche in cui i loro dati non seguono un ordine logico, come tutte le caratteristiche diverse da `Item Size` nel nostro dataset. È una codifica one-hot, il che significa che ogni categoria è rappresentata da una colonna binaria: la variabile codificata è uguale a 1 se la zucca appartiene a quella Variety e 0 altrimenti. - - ```python - from sklearn.preprocessing import OneHotEncoder - - categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] - categorical_encoder = OneHotEncoder(sparse_output=False) - ``` -Quindi, `ColumnTransformer` viene utilizzato per combinare più encoder in un unico passaggio e applicarli alle colonne appropriate. - -```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) -``` -D'altra parte, per codificare l'etichetta, utilizziamo la classe `LabelEncoder` di scikit-learn, che è una classe di utilità per aiutare a normalizzare le etichette in modo che contengano solo valori tra 0 e n_classi-1 (qui, 0 e 1). - -```python - from sklearn.preprocessing import LabelEncoder - - label_encoder = LabelEncoder() - encoded_label = label_encoder.fit_transform(pumpkins['Color']) -``` -Una volta codificate le caratteristiche e l'etichetta, possiamo unirle in un nuovo dataframe `encoded_pumpkins`. - -```python - encoded_pumpkins = encoded_features.assign(Color=encoded_label) -``` -✅ Quali sono i vantaggi dell'utilizzo di un encoder ordinale per la colonna `Item Size` column? - -### Analyse relationships between variables - -Now that we have pre-processed our data, we can analyse the relationships between the features and the label to grasp an idea of how well the model will be able to predict the label given the features. -The best way to perform this kind of analysis is plotting the data. We'll be using again the Seaborn `catplot` function, to visualize the relationships between `Item Size`, `Variety` e `Color` in un grafico categorico. Per meglio rappresentare i dati utilizzeremo la colonna codificata `Item Size` column and the unencoded `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}") -``` -![Un catplot di dati visualizzati](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.it.png) - -### Utilizza un grafico a sciame - -Poiché Color è una categoria binaria (Bianco o Non Bianco), necessita di 'un [approccio specializzato](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) per la visualizzazione'. Ci sono altri modi per visualizzare la relazione di questa categoria con altre variabili. - -Puoi visualizzare le variabili fianco a fianco con i grafici di Seaborn. - -1. Prova un grafico a 'sciame' per mostrare la distribuzione dei valori: - - ```python - palette = { - 0: 'orange', - 1: 'wheat' - } - sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) - ``` - - ![Uno sciame di dati visualizzati](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.it.png) - -**Attenzione**: il codice sopra potrebbe generare un avviso, poiché Seaborn non riesce a rappresentare una tale quantità di punti dati in un grafico a sciame. Una possibile soluzione è ridurre la dimensione del marcatore, utilizzando il parametro 'size'. Tuttavia, tieni presente che ciò influisce sulla leggibilità del grafico. - - -> **🧮 Mostrami la Matematica** -> -> La regressione logistica si basa sul concetto di 'massima verosimiglianza' utilizzando [funzioni sigmoidi](https://wikipedia.org/wiki/Sigmoid_function). Una 'Funzione Sigmoide' su un grafico appare come una forma a 'S'. Prende un valore e lo mappa tra 0 e 1. La sua curva è anche chiamata 'curva logistica'. La sua formula appare così: -> -> ![funzione logistica](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.it.png) -> -> dove il punto medio della sigmoide si trova nel punto 0 di x, L è il valore massimo della curva, e k è la pendenza della curva. Se il risultato della funzione è superiore a 0.5, l'etichetta in questione verrà assegnata alla classe '1' della scelta binaria. In caso contrario, sarà classificata come '0'. - -## Costruisci il tuo modello - -Costruire un modello per trovare queste classificazioni binarie è sorprendentemente semplice in Scikit-learn. - -[![ML per principianti - Regressione Logistica per la classificazione dei dati](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML per principianti - Regressione Logistica per la classificazione dei dati") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulla costruzione di un modello di regressione lineare - -1. Seleziona le variabili che vuoi utilizzare nel tuo modello di classificazione e dividi i set di addestramento e test chiamando `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. Ora puoi addestrare il tuo modello, chiamando `fit()` con i tuoi dati di addestramento, e stampare il suo risultato: - - ```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)) - ``` - - Dai un'occhiata al punteggio del tuo modello. Non è male, considerando che hai solo circa 1000 righe di dati: - - ```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 - ``` - -## Migliore comprensione tramite una matrice di confusione - -Sebbene tu possa ottenere un rapporto sul punteggio [termini](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) stampando gli elementi sopra, potresti riuscire a comprendere meglio il tuo modello utilizzando una [matrice di confusione](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) per aiutarci a capire come sta performando il modello. - -> 🎓 Una '[matrice di confusione](https://wikipedia.org/wiki/Confusion_matrix)' (o 'matrice degli errori') è una tabella che esprime i veri vs. falsi positivi e negativi del tuo modello, valutando così l'accuratezza delle previsioni. - -1. Per utilizzare una matrice di confusione, chiama `confusion_matrix()`: - - ```python - from sklearn.metrics import confusion_matrix - confusion_matrix(y_test, predictions) - ``` - - Dai un'occhiata alla matrice di confusione del tuo modello: - - ```output - array([[162, 4], - [ 11, 22]]) - ``` - -In Scikit-learn, le righe delle matrici di confusione (asse 0) sono etichette reali e le colonne (asse 1) sono etichette previste. - -| | 0 | 1 | -| :---: | :---: | :---: | -| 0 | TN | FP | -| 1 | FN | TP | - -Cosa sta succedendo qui? Supponiamo che il nostro modello sia chiamato a classificare le zucche tra due categorie binarie, categoria 'bianco' e categoria 'non-bianco'. - -- Se il tuo modello prevede una zucca come non bianca e appartiene alla categoria 'non-bianco' in realtà, la chiamiamo un vero negativo, mostrato dal numero in alto a sinistra. -- Se il tuo modello prevede una zucca come bianca e appartiene alla categoria 'non-bianco' in realtà, la chiamiamo un falso negativo, mostrato dal numero in basso a sinistra. -- Se il tuo modello prevede una zucca come non bianca e appartiene alla categoria 'bianco' in realtà, la chiamiamo un falso positivo, mostrato dal numero in alto a destra. -- Se il tuo modello prevede una zucca come bianca e appartiene alla categoria 'bianco' in realtà, la chiamiamo un vero positivo, mostrato dal numero in basso a destra. - -Come avrai intuito, è preferibile avere un numero maggiore di veri positivi e veri negativi e un numero inferiore di falsi positivi e falsi negativi, il che implica che il modello performa meglio. - -Come si relaziona la matrice di confusione con la precisione e il richiamo? Ricorda, il rapporto di classificazione stampato sopra ha mostrato precisione (0.85) e richiamo (0.67). - -Precisione = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 - -Richiamo = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 - -✅ Q: Secondo la matrice di confusione, come ha fatto il modello? A: Non male; ci sono un buon numero di veri negativi ma anche alcuni falsi negativi. - -Rivediamo i termini che abbiamo visto in precedenza con l'aiuto della mappatura della matrice di confusione di TP/TN e FP/FN: - -🎓 Precisione: TP/(TP + FP) La frazione di istanze rilevanti tra le istanze recuperate (ad esempio quali etichette erano ben etichettate) - -🎓 Richiamo: TP/(TP + FN) La frazione di istanze rilevanti che sono state recuperate, che siano ben etichettate o meno - -🎓 f1-score: (2 * precision * recall)/(precision + recall) Una media ponderata della precisione e del richiamo, con il migliore essendo 1 e il peggiore essendo 0 - -🎓 Supporto: Il numero di occorrenze di ciascuna etichetta recuperata - -🎓 Accuratezza: (TP + TN)/(TP + TN + FP + FN) La percentuale di etichette previste accuratamente per un campione. - -🎓 Macro Avg: Il calcolo delle metriche medie non ponderate per ciascuna etichetta, senza tenere conto dello squilibrio delle etichette. - -🎓 Weighted Avg: Il calcolo delle metriche medie per ciascuna etichetta, tenendo conto dello squilibrio delle etichette ponderandole in base al loro supporto (il numero di istanze vere per ciascuna etichetta). - -✅ Riesci a pensare a quale metrica dovresti guardare se vuoi che il tuo modello riduca il numero di falsi negativi? - -## Visualizza la curva ROC di questo modello - -[![ML per principianti - Analisi delle Prestazioni della Regressione Logistica con le Curve ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML per principianti - Analisi delle Prestazioni della Regressione Logistica con le Curve ROC") - -> 🎥 Clicca sull'immagine sopra per una breve panoramica sulle curve ROC - -Facciamo un'ultima visualizzazione per vedere la cosiddetta curva '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() -``` - -Usando Matplotlib, traccia la [Curva di Ricezione Operativa](https://scikit-learn.org/stable/auto_examples/model - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/4-Logistic/assignment.md b/translations/it/2-Regression/4-Logistic/assignment.md deleted file mode 100644 index b75f9bff..00000000 --- a/translations/it/2-Regression/4-Logistic/assignment.md +++ /dev/null @@ -1,13 +0,0 @@ -# Riprovare una Regressione - -## Istruzioni - -Nella lezione, hai utilizzato un sottoinsieme dei dati sulle zucche. Ora, torna ai dati originali e prova a usarli tutti, puliti e standardizzati, per costruire un modello di Regressione Logistica. -## Rubrica - -| Criteri | Esemplare | Adeguato | Da Migliorare | -| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------- | -| | Viene presentato un notebook con un modello ben spiegato e performante | Viene presentato un notebook con un modello che performa minimamente | Viene presentato un notebook con un modello sotto-performante o nessuno | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Anche se ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/4-Logistic/solution/Julia/README.md b/translations/it/2-Regression/4-Logistic/solution/Julia/README.md deleted file mode 100644 index e97b5ec6..00000000 --- a/translations/it/2-Regression/4-Logistic/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Anche se ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/2-Regression/README.md b/translations/it/2-Regression/README.md deleted file mode 100644 index 4700801e..00000000 --- a/translations/it/2-Regression/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# Modelli di regressione per il machine learning -## Argomento regionale: Modelli di regressione per i prezzi delle zucche in Nord America 🎃 - -In Nord America, le zucche vengono spesso intagliate in volti spaventosi per Halloween. Scopriamo di più su questi affascinanti ortaggi! - -![jack-o-lanterns](../../../translated_images/jack-o-lanterns.181c661a9212457d7756f37219f660f1358af27554d856e5a991f16b4e15337c.it.jpg) -> Foto di Beth Teutschmann su Unsplash - -## Cosa imparerai - -[![Introduzione alla Regressione](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Video introduttivo sulla Regressione - Clicca per guardare!") -> 🎥 Clicca sull'immagine sopra per un breve video introduttivo a questa lezione - -Le lezioni in questa sezione coprono i tipi di regressione nel contesto del machine learning. I modelli di regressione possono aiutare a determinare la _relazione_ tra variabili. Questo tipo di modello può prevedere valori come lunghezza, temperatura o età, rivelando così le relazioni tra le variabili mentre analizza i punti dati. - -In questa serie di lezioni, scoprirai le differenze tra la regressione lineare e quella logistica, e quando preferire l'una rispetto all'altra. - -[![ML per principianti - Introduzione ai modelli di regressione per il Machine Learning](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML per principianti - Introduzione ai modelli di regressione per il Machine Learning") - -> 🎥 Clicca sull'immagine sopra per un breve video che introduce i modelli di regressione. - -In questo gruppo di lezioni, ti preparerai per iniziare i compiti di machine learning, incluso configurare Visual Studio Code per gestire i notebook, l'ambiente comune per i data scientist. Scoprirai Scikit-learn, una libreria per il machine learning, e costruirai i tuoi primi modelli, concentrandoti sui modelli di regressione in questo capitolo. - -> Esistono utili strumenti low-code che possono aiutarti a imparare a lavorare con i modelli di regressione. Prova [Azure ML per questo compito](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -### Lezioni - -1. [Strumenti del mestiere](1-Tools/README.md) -2. [Gestione dei dati](2-Data/README.md) -3. [Regressione lineare e polinomiale](3-Linear/README.md) -4. [Regressione logistica](4-Logistic/README.md) - ---- -### Crediti - -"ML con la regressione" è stato scritto con ♥️ da [Jen Looper](https://twitter.com/jenlooper) - -♥️ I contributori ai quiz includono: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) e [Ornella Altunyan](https://twitter.com/ornelladotcom) - -Il dataset delle zucche è suggerito da [questo progetto su Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices) e i suoi dati provengono dai [Rapporti standard dei mercati terminali delle colture speciali](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuiti dal Dipartimento dell'Agricoltura degli Stati Uniti. Abbiamo aggiunto alcuni punti relativi al colore in base alla varietà per normalizzare la distribuzione. Questi dati sono di dominio pubblico. - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/3-Web-App/1-Web-App/README.md b/translations/it/3-Web-App/1-Web-App/README.md deleted file mode 100644 index 145537b5..00000000 --- a/translations/it/3-Web-App/1-Web-App/README.md +++ /dev/null @@ -1,348 +0,0 @@ -# Costruisci un'app Web per utilizzare un modello ML - -In questa lezione, addestrerai un modello ML su un set di dati fuori dal comune: _avvistamenti UFO nell'ultimo secolo_, provenienti dal database di NUFORC. - -Imparerai: - -- Come 'pickle' un modello addestrato -- Come utilizzare quel modello in un'app Flask - -Continueremo a usare i notebook per pulire i dati e addestrare il nostro modello, ma puoi fare un ulteriore passo avanti esplorando l'uso di un modello "nel mondo reale", per così dire: in un'app web. - -Per fare questo, è necessario costruire un'app web utilizzando Flask. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) - -## Costruzione di un'app - -Ci sono diversi modi per costruire app web che consumano modelli di machine learning. La tua architettura web potrebbe influenzare il modo in cui il tuo modello viene addestrato. Immagina di lavorare in un'azienda in cui il gruppo di data science ha addestrato un modello che vogliono tu usi in un'app. - -### Considerazioni - -Ci sono molte domande che devi farti: - -- **È un'app web o un'app mobile?** Se stai costruendo un'app mobile o hai bisogno di utilizzare il modello in un contesto IoT, potresti usare [TensorFlow Lite](https://www.tensorflow.org/lite/) e utilizzare il modello in un'app Android o iOS. -- **Dove risiederà il modello?** Nel cloud o localmente? -- **Supporto offline.** L'app deve funzionare offline? -- **Quale tecnologia è stata utilizzata per addestrare il modello?** La tecnologia scelta potrebbe influenzare gli strumenti che devi usare. - - **Usando TensorFlow.** Se stai addestrando un modello usando TensorFlow, ad esempio, quell'ecosistema offre la possibilità di convertire un modello TensorFlow per l'uso in un'app web utilizzando [TensorFlow.js](https://www.tensorflow.org/js/). - - **Usando PyTorch.** Se stai costruendo un modello usando una libreria come [PyTorch](https://pytorch.org/), hai l'opzione di esportarlo in formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) per l'uso in app web JavaScript che possono utilizzare [Onnx Runtime](https://www.onnxruntime.ai/). Questa opzione verrà esplorata in una lezione futura per un modello addestrato con Scikit-learn. - - **Usando Lobe.ai o Azure Custom Vision.** Se stai usando un sistema ML SaaS (Software as a Service) come [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) per addestrare un modello, questo tipo di software fornisce modi per esportare il modello per molte piattaforme, incluso la costruzione di un'API su misura da interrogare nel cloud dalla tua applicazione online. - -Hai anche l'opportunità di costruire un'intera app web Flask che sarebbe in grado di addestrare il modello stesso in un browser web. Questo può essere fatto anche utilizzando TensorFlow.js in un contesto JavaScript. - -Per i nostri scopi, poiché abbiamo lavorato con notebook basati su Python, esploriamo i passaggi necessari per esportare un modello addestrato da un tale notebook in un formato leggibile da un'app web costruita in Python. - -## Strumenti - -Per questo compito, hai bisogno di due strumenti: Flask e Pickle, entrambi funzionanti su Python. - -✅ Cos'è [Flask](https://palletsprojects.com/p/flask/)? Definito come un 'micro-framework' dai suoi creatori, Flask fornisce le caratteristiche di base dei framework web utilizzando Python e un motore di template per costruire pagine web. Dai un'occhiata a [questo modulo di apprendimento](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) per esercitarti a costruire con Flask. - -✅ Cos'è [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 è un modulo Python che serializza e deserializza una struttura di oggetti Python. Quando 'pickle' un modello, ne serializzi o appiattisci la struttura per l'uso sul web. Attenzione: pickle non è intrinsecamente sicuro, quindi fai attenzione se ti viene chiesto di 'un-pickle' un file. Un file pickled ha il suffisso `.pkl`. - -## Esercizio - pulisci i tuoi dati - -In questa lezione userai dati provenienti da 80.000 avvistamenti UFO, raccolti da [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Questi dati contengono alcune descrizioni interessanti degli avvistamenti UFO, ad esempio: - -- **Descrizione lunga.** "Un uomo emerge da un raggio di luce che brilla su un campo erboso di notte e corre verso il parcheggio della Texas Instruments". -- **Descrizione breve.** "le luci ci hanno inseguito". - -Il foglio di calcolo [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) include colonne riguardanti `city`, `state` e `country` dove è avvenuto l'avvistamento, l'`shape` dell'oggetto e il suo `latitude` e `longitude`. - -Nel [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) incluso in questa lezione: - -1. importa `pandas`, `matplotlib`, e `numpy` come hai fatto nelle lezioni precedenti e importa il foglio di calcolo ufos. Puoi dare un'occhiata a un set di dati di esempio: - - ```python - import pandas as pd - import numpy as np - - ufos = pd.read_csv('./data/ufos.csv') - ufos.head() - ``` - -1. Converti i dati ufos in un piccolo dataframe con nuovi titoli. Controlla i valori unici nel campo `Country`. - - ```python - ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) - - ufos.Country.unique() - ``` - -1. Ora, puoi ridurre la quantità di dati con cui dobbiamo lavorare eliminando eventuali valori nulli e importando solo gli avvistamenti tra 1-60 secondi: - - ```python - ufos.dropna(inplace=True) - - ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] - - ufos.info() - ``` - -1. Importa la libreria `LabelEncoder` di Scikit-learn per convertire i valori di testo per i paesi in un numero: - - ✅ LabelEncoder codifica i dati in ordine alfabetico - - ```python - from sklearn.preprocessing import LabelEncoder - - ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) - - ufos.head() - ``` - - I tuoi dati dovrebbero apparire così: - - ```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 - ``` - -## Esercizio - costruisci il tuo modello - -Ora puoi prepararti ad addestrare un modello dividendo i dati nel gruppo di addestramento e nel gruppo di test. - -1. Seleziona le tre caratteristiche su cui vuoi addestrarti come il tuo vettore X, e il vettore y sarà `Country`. You want to be able to input `Seconds`, `Latitude` and `Longitude` e ottieni un id paese da restituire. - - ```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. Addestra il tuo modello utilizzando la regressione logistica: - - ```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)) - ``` - -La precisione non è male **(circa il 95%)**, non sorprende, poiché `Country` and `Latitude/Longitude` correlate. - -The model you created isn't very revolutionary as you should be able to infer a `Country` from its `Latitude` and `Longitude`, ma è un buon esercizio provare ad addestrare partendo da dati grezzi che hai pulito, esportato e poi usare questo modello in un'app web. - -## Esercizio - 'pickle' il tuo modello - -Ora, è il momento di _pickle_ il tuo modello! Puoi farlo in poche righe di codice. Una volta che è _pickled_, carica il tuo modello pickled e testalo contro un array di dati di esempio contenente valori per secondi, latitudine e longitudine, - -```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]])) -``` - -Il modello restituisce **'3'**, che è il codice paese per il Regno Unito. Incredibile! 👽 - -## Esercizio - costruisci un'app Flask - -Ora puoi costruire un'app Flask per chiamare il tuo modello e restituire risultati simili, ma in un modo più visivamente piacevole. - -1. Inizia creando una cartella chiamata **web-app** accanto al file _notebook.ipynb_ dove risiede il tuo file _ufo-model.pkl_. - -1. In quella cartella crea altre tre cartelle: **static**, con una cartella **css** all'interno, e **templates**. Ora dovresti avere i seguenti file e directory: - - ```output - web-app/ - static/ - css/ - templates/ - notebook.ipynb - ufo-model.pkl - ``` - - ✅ Consulta la cartella della soluzione per una visuale dell'app finita - -1. Il primo file da creare nella cartella _web-app_ è il file **requirements.txt**. Come _package.json_ in un'app JavaScript, questo file elenca le dipendenze richieste dall'app. In **requirements.txt** aggiungi le righe: - - ```text - scikit-learn - pandas - numpy - flask - ``` - -1. Ora, esegui questo file navigando fino a _web-app_: - - ```bash - cd web-app - ``` - -1. Nel tuo terminale digita `pip install`, per installare le librerie elencate in _requirements.txt_: - - ```bash - pip install -r requirements.txt - ``` - -1. Ora, sei pronto per creare altri tre file per completare l'app: - - 1. Crea **app.py** nella root. - 2. Crea **index.html** nella directory _templates_. - 3. Crea **styles.css** nella directory _static/css_. - -1. Costruisci il file _styles.css_ con alcuni stili: - - ```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. Successivamente, costruisci il file _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 }}

                                                                      - -
                                                                      - -
                                                                      - - - - ``` - - Dai un'occhiata al templating in questo file. Nota la sintassi 'mustache' attorno alle variabili che verranno fornite dall'app, come il testo della previsione: `{{}}`. There's also a form that posts a prediction to the `/predict` route. - - Finally, you're ready to build the python file that drives the consumption of the model and the display of predictions: - -1. In `app.py` aggiungi: - - ```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) - ``` - - > 💡 Suggerimento: quando aggiungi [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) while running the web app using Flask, any changes you make to your application will be reflected immediately without the need to restart the server. Beware! Don't enable this mode in a production app. - -If you run `python app.py` or `python3 app.py` - your web server starts up, locally, and you can fill out a short form to get an answer to your burning question about where UFOs have been sighted! - -Before doing that, take a look at the parts of `app.py`: - -1. First, dependencies are loaded and the app starts. -1. Then, the model is imported. -1. Then, index.html is rendered on the home route. - -On the `/predict` route, several things happen when the form is posted: - -1. The form variables are gathered and converted to a numpy array. They are then sent to the model and a prediction is returned. -2. The Countries that we want displayed are re-rendered as readable text from their predicted country code, and that value is sent back to index.html to be rendered in the template. - -Using a model this way, with Flask and a pickled model, is relatively straightforward. The hardest thing is to understand what shape the data is that must be sent to the model to get a prediction. That all depends on how the model was trained. This one has three data points to be input in order to get a prediction. - -In a professional setting, you can see how good communication is necessary between the folks who train the model and those who consume it in a web or mobile app. In our case, it's only one person, you! - ---- - -## 🚀 Challenge - -Instead of working in a notebook and importing the model to the Flask app, you could train the model right within the Flask app! Try converting your Python code in the notebook, perhaps after your data is cleaned, to train the model from within the app on a route called `train`. Quali sono i pro e i contro di perseguire questo metodo? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) - -## Revisione & Studio autonomo - -Ci sono molti modi per costruire un'app web che consumi modelli ML. Fai un elenco dei modi in cui potresti usare JavaScript o Python per costruire un'app web che sfrutti il machine learning. Considera l'architettura: il modello dovrebbe rimanere nell'app o vivere nel cloud? Se la seconda opzione, come lo accederesti? Disegna un modello architettonico per una soluzione ML applicata. - -## Compito - -[Prova un modello diverso](assignment.md) - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o inesattezze. Il documento originale nella sua lingua madre deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/3-Web-App/1-Web-App/assignment.md b/translations/it/3-Web-App/1-Web-App/assignment.md deleted file mode 100644 index 8699f1c6..00000000 --- a/translations/it/3-Web-App/1-Web-App/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Prova un modello diverso - -## Istruzioni - -Ora che hai costruito una web app utilizzando un modello di regressione addestrato, usa uno dei modelli di una lezione precedente sulla regressione per rifare questa web app. Puoi mantenere lo stile o progettarla diversamente per riflettere i dati sulla zucca. Fai attenzione a cambiare gli input per riflettere il metodo di addestramento del tuo modello. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | -| | La web app funziona come previsto ed è distribuita nel cloud | La web app contiene errori o presenta risultati inaspettati | La web app non funziona correttamente | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/3-Web-App/README.md b/translations/it/3-Web-App/README.md deleted file mode 100644 index 764358cd..00000000 --- a/translations/it/3-Web-App/README.md +++ /dev/null @@ -1,24 +0,0 @@ -# Crea un'app web per utilizzare il tuo modello di ML - -In questa sezione del curriculum, verrà introdotto un argomento di ML applicato: come salvare il tuo modello Scikit-learn come un file che può essere utilizzato per fare previsioni all'interno di un'applicazione web. Una volta che il modello è salvato, imparerai come utilizzarlo in un'app web costruita con Flask. Per prima cosa creerai un modello utilizzando alcuni dati riguardanti avvistamenti di UFO! Poi, costruirai un'app web che ti permetterà di inserire un numero di secondi insieme a un valore di latitudine e longitudine per prevedere quale paese ha segnalato di aver visto un UFO. - -![Parcheggio UFO](../../../translated_images/ufo.9e787f5161da9d4d1dafc537e1da09be8210f2ee996cb638aa5cee1d92867a04.it.jpg) - -Foto di Michael Herren su Unsplash - -## Lezioni - -1. [Crea un'App Web](1-Web-App/README.md) - -## Crediti - -"Crea un'App Web" è stato scritto con ♥️ da [Jen Looper](https://twitter.com/jenlooper). - -♥️ I quiz sono stati scritti da Rohan Raj. - -Il dataset è stato fornito da [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). - -L'architettura dell'app web è stata suggerita in parte da [questo articolo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) e [questo repo](https://github.com/abhinavsagar/machine-learning-deployment) di Abhinav Sagar. - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Anche se ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/1-Introduction/README.md b/translations/it/4-Classification/1-Introduction/README.md deleted file mode 100644 index 8ea5da26..00000000 --- a/translations/it/4-Classification/1-Introduction/README.md +++ /dev/null @@ -1,302 +0,0 @@ -# Introduzione alla classificazione - -In queste quattro lezioni esplorerai un aspetto fondamentale del machine learning classico - la _classificazione_. Analizzeremo l'uso di vari algoritmi di classificazione con un dataset che riguarda tutte le brillanti cucine dell'Asia e dell'India. Speriamo che tu abbia fame! - -![just a pinch!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.it.png) - -> Celebra le cucine pan-asiatiche in queste lezioni! Immagine di [Jen Looper](https://twitter.com/jenlooper) - -La classificazione è una forma di [apprendimento supervisionato](https://wikipedia.org/wiki/Supervised_learning) che ha molto in comune con le tecniche di regressione. Se il machine learning riguarda la previsione di valori o nomi per le cose utilizzando dataset, allora la classificazione generalmente si divide in due gruppi: _classificazione binaria_ e _classificazione multiclasse_. - -[![Introduzione alla classificazione](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduzione alla classificazione") - -> 🎥 Clicca sull'immagine sopra per un video: John Guttag del MIT introduce la classificazione - -Ricorda: - -- **La regressione lineare** ti ha aiutato a prevedere le relazioni tra variabili e fare previsioni accurate su dove un nuovo punto dati cadrebbe in relazione a quella linea. Ad esempio, potresti prevedere _che prezzo avrà una zucca a settembre rispetto a dicembre_. -- **La regressione logistica** ti ha aiutato a scoprire "categorie binarie": a questo prezzo, _questa zucca è arancione o non-arancione_? - -La classificazione utilizza vari algoritmi per determinare altri modi di determinare l'etichetta o la classe di un punto dati. Lavoriamo con questi dati sulle cucine per vedere se, osservando un gruppo di ingredienti, possiamo determinare la cucina di origine. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) - -> ### [Questa lezione è disponibile in R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) - -### Introduzione - -La classificazione è una delle attività fondamentali del ricercatore di machine learning e del data scientist. Dalla classificazione di base di un valore binario ("questa email è spam o no?"), alla complessa classificazione e segmentazione delle immagini utilizzando la visione artificiale, è sempre utile poter ordinare i dati in classi e porre domande su di essi. - -Per esprimere il processo in modo più scientifico, il tuo metodo di classificazione crea un modello predittivo che ti consente di mappare la relazione tra variabili di input e variabili di output. - -![classificazione binaria vs. multiclasse](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.it.png) - -> Problemi binari vs. multiclasse per gli algoritmi di classificazione. Infografica di [Jen Looper](https://twitter.com/jenlooper) - -Prima di iniziare il processo di pulizia dei dati, visualizzazione e preparazione per i nostri compiti di ML, impariamo un po' sui vari modi in cui il machine learning può essere utilizzato per classificare i dati. - -Derivata dalla [statistica](https://wikipedia.org/wiki/Statistical_classification), la classificazione utilizzando il machine learning classico utilizza caratteristiche, come `smoker`, `weight` e `age` per determinare la _probabilità di sviluppare X malattia_. Come tecnica di apprendimento supervisionato simile agli esercizi di regressione che hai eseguito in precedenza, i tuoi dati sono etichettati e gli algoritmi di ML utilizzano queste etichette per classificare e prevedere classi (o 'caratteristiche') di un dataset e assegnarle a un gruppo o risultato. - -✅ Prenditi un momento per immaginare un dataset sulle cucine. Cosa potrebbe rispondere un modello multiclasse? Cosa potrebbe rispondere un modello binario? E se volessi determinare se una determinata cucina è probabile che utilizzi il fieno greco? E se volessi vedere se, dato un sacchetto di spesa pieno di anice stellato, carciofi, cavolfiori e rafano, potresti creare un piatto tipico indiano? - -[![Crazy mystery baskets](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Crazy mystery baskets") - -> 🎥 Clicca sull'immagine sopra per un video. L'intera premessa dello show 'Chopped' è il 'cestino misterioso' dove gli chef devono preparare un piatto con una scelta casuale di ingredienti. Sicuramente un modello di ML avrebbe aiutato! - -## Ciao 'classificatore' - -La domanda che vogliamo porre a questo dataset di cucina è in realtà una **domanda multiclasse**, poiché abbiamo diverse potenziali cucine nazionali con cui lavorare. Dato un gruppo di ingredienti, a quale di queste molte classi si adatteranno i dati? - -Scikit-learn offre diversi algoritmi per classificare i dati, a seconda del tipo di problema che vuoi risolvere. Nelle prossime due lezioni imparerai a conoscere alcuni di questi algoritmi. - -## Esercizio - pulire e bilanciare i tuoi dati - -Il primo compito da svolgere, prima di iniziare questo progetto, è pulire e **bilanciare** i tuoi dati per ottenere risultati migliori. Inizia con il file _notebook.ipynb_ vuoto nella radice di questa cartella. - -La prima cosa da installare è [imblearn](https://imbalanced-learn.org/stable/). Questo è un pacchetto di Scikit-learn che ti permetterà di bilanciare meglio i dati (imparerai di più su questo compito tra un minuto). - -1. Per installare `imblearn`, esegui `pip install`, come segue: - - ```python - pip install imblearn - ``` - -1. Importa i pacchetti necessari per importare i tuoi dati e visualizzarli, importa anche `SMOTE` da `imblearn`. - - ```python - import pandas as pd - import matplotlib.pyplot as plt - import matplotlib as mpl - import numpy as np - from imblearn.over_sampling import SMOTE - ``` - - Ora sei pronto per importare i dati. - -1. Il prossimo compito sarà importare i dati: - - ```python - df = pd.read_csv('../data/cuisines.csv') - ``` - - Utilizzando `read_csv()` will read the content of the csv file _cusines.csv_ and place it in the variable `df`. - -1. Controlla la forma dei dati: - - ```python - df.head() - ``` - - Le prime cinque righe sembrano così: - - ```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. Ottieni informazioni su questi dati chiamando `info()`: - - ```python - df.info() - ``` - - Il tuo output somiglia a: - - ```output - - RangeIndex: 2448 entries, 0 to 2447 - Columns: 385 entries, Unnamed: 0 to zucchini - dtypes: int64(384), object(1) - memory usage: 7.2+ MB - ``` - -## Esercizio - imparare sulle cucine - -Ora il lavoro inizia a diventare più interessante. Scopriamo la distribuzione dei dati, per cucina. - -1. Traccia i dati come barre chiamando `barh()`: - - ```python - df.cuisine.value_counts().plot.barh() - ``` - - ![distribuzione dei dati di cucina](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.it.png) - - Ci sono un numero finito di cucine, ma la distribuzione dei dati è disomogenea. Puoi risolverlo! Prima di farlo, esplora un po' di più. - -1. Scopri quanti dati sono disponibili per cucina e stampali: - - ```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}') - ``` - - l'output sembra così: - - ```output - thai df: (289, 385) - japanese df: (320, 385) - chinese df: (442, 385) - indian df: (598, 385) - korean df: (799, 385) - ``` - -## Scoprire gli ingredienti - -Ora puoi approfondire i dati e scoprire quali sono gli ingredienti tipici per cucina. Dovresti pulire i dati ricorrenti che creano confusione tra le cucine, quindi impariamo a conoscere questo problema. - -1. Crea una funzione `create_ingredient()` in Python per creare un dataframe di ingredienti. Questa funzione inizierà eliminando una colonna non utile e ordinando gli ingredienti in base al loro conteggio: - - ```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 - ``` - - Ora puoi usare quella funzione per farti un'idea dei dieci ingredienti più popolari per cucina. - -1. Chiama `create_ingredient()` and plot it calling `barh()`: - - ```python - thai_ingredient_df = create_ingredient_df(thai_df) - thai_ingredient_df.head(10).plot.barh() - ``` - - ![thai](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.it.png) - -1. Fai lo stesso per i dati giapponesi: - - ```python - japanese_ingredient_df = create_ingredient_df(japanese_df) - japanese_ingredient_df.head(10).plot.barh() - ``` - - ![japanese](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.it.png) - -1. Ora per gli ingredienti cinesi: - - ```python - chinese_ingredient_df = create_ingredient_df(chinese_df) - chinese_ingredient_df.head(10).plot.barh() - ``` - - ![chinese](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.it.png) - -1. Traccia gli ingredienti indiani: - - ```python - indian_ingredient_df = create_ingredient_df(indian_df) - indian_ingredient_df.head(10).plot.barh() - ``` - - ![indian](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.it.png) - -1. Infine, traccia gli ingredienti coreani: - - ```python - korean_ingredient_df = create_ingredient_df(korean_df) - korean_ingredient_df.head(10).plot.barh() - ``` - - ![korean](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.it.png) - -1. Ora, elimina gli ingredienti più comuni che creano confusione tra cucine distinte, chiamando `drop()`: - - Tutti amano il riso, l'aglio e lo zenzero! - - ```python - feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) - labels_df = df.cuisine #.unique() - feature_df.head() - ``` - -## Bilanciare il dataset - -Ora che hai pulito i dati, utilizza [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - per bilanciarli. - -1. Chiama `fit_resample()`, questa strategia genera nuovi campioni per interpolazione. - - ```python - oversample = SMOTE() - transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) - ``` - - Bilanciando i tuoi dati, otterrai risultati migliori quando li classifichi. Pensa a una classificazione binaria. Se la maggior parte dei tuoi dati appartiene a una classe, un modello di ML predirà quella classe più frequentemente, solo perché ci sono più dati per essa. Bilanciare i dati rimuove qualsiasi squilibrio nei dati e aiuta a rimuovere questo squilibrio. - -1. Ora puoi controllare il numero di etichette per ingrediente: - - ```python - print(f'new label count: {transformed_label_df.value_counts()}') - print(f'old label count: {df.cuisine.value_counts()}') - ``` - - Il tuo output sembra così: - - ```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 - ``` - - I dati sono belli, puliti, bilanciati e molto deliziosi! - -1. L'ultimo passaggio è salvare i tuoi dati bilanciati, inclusi etichette e caratteristiche, in un nuovo dataframe che può essere esportato in un file: - - ```python - transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') - ``` - -1. Puoi dare un'ultima occhiata ai dati utilizzando `transformed_df.head()` and `transformed_df.info()`. Salva una copia di questi dati per usarli nelle lezioni future: - - ```python - transformed_df.head() - transformed_df.info() - transformed_df.to_csv("../data/cleaned_cuisines.csv") - ``` - - Questo nuovo CSV si trova ora nella cartella principale dei dati. - ---- - -## 🚀Sfida - -Questo curriculum contiene diversi dataset interessanti. Esplora le cartelle `data` e verifica se qualcuno contiene dataset che potrebbero essere appropriati per una classificazione binaria o multiclasse. Quali domande potresti porre a questo dataset? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) - -## Revisione & Autoapprendimento - -Esplora l'API di SMOTE. Per quali casi d'uso è meglio utilizzato? Quali problemi risolve? - -## Compito - -[Esplora i metodi di classificazione](assignment.md) - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/1-Introduction/assignment.md b/translations/it/4-Classification/1-Introduction/assignment.md deleted file mode 100644 index d5f01f43..00000000 --- a/translations/it/4-Classification/1-Introduction/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Esplora i metodi di classificazione - -## Istruzioni - -Nella [documentazione di Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) troverai una lunga lista di modi per classificare i dati. Fai una piccola caccia al tesoro in questi documenti: il tuo obiettivo è cercare i metodi di classificazione e abbinarli a un dataset in questo curriculum, una domanda che puoi porre su di esso, e una tecnica di classificazione. Crea un foglio di calcolo o una tabella in un file .doc e spiega come il dataset funzionerebbe con l'algoritmo di classificazione. - -## Valutazione - -| Criteri | Esemplare | Adeguato | Bisogna Migliorare | -| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| | viene presentato un documento che fornisce una panoramica di 5 algoritmi insieme a una tecnica di classificazione. La panoramica è ben spiegata e dettagliata. | viene presentato un documento che fornisce una panoramica di 3 algoritmi insieme a una tecnica di classificazione. La panoramica è ben spiegata e dettagliata. | viene presentato un documento che fornisce una panoramica di meno di tre algoritmi insieme a una tecnica di classificazione e la panoramica non è ben spiegata né dettagliata. | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/1-Introduction/solution/Julia/README.md b/translations/it/4-Classification/1-Introduction/solution/Julia/README.md deleted file mode 100644 index 02bff495..00000000 --- a/translations/it/4-Classification/1-Introduction/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/2-Classifiers-1/README.md b/translations/it/4-Classification/2-Classifiers-1/README.md deleted file mode 100644 index 69fc323e..00000000 --- a/translations/it/4-Classification/2-Classifiers-1/README.md +++ /dev/null @@ -1,77 +0,0 @@ -# Classificatori di Cucine 1 - -In questa lezione, utilizzerai il dataset che hai salvato dalla lezione precedente, pieno di dati bilanciati e puliti sulle cucine. - -Utilizzerai questo dataset con una varietà di classificatori per _prevedere una cucina nazionale data un gruppo di ingredienti_. Durante questo processo, imparerai di più su alcuni dei modi in cui gli algoritmi possono essere utilizzati per compiti di classificazione. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) -# Preparazione - -Assumendo che tu abbia completato [Lezione 1](../1-Introduction/README.md), assicurati che esista un file _cleaned_cuisines.csv_ nella cartella radice `/data` per queste quattro lezioni. - -## Esercizio - prevedere una cucina nazionale - -1. Lavorando nella cartella _notebook.ipynb_ di questa lezione, importa quel file insieme alla libreria Pandas: - - ```python - import pandas as pd - cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") - cuisines_df.head() - ``` - - I dati appaiono così: - -| | 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. Ora, importa diverse altre librerie: - - ```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. Dividi le coordinate X e y in due dataframe per l'addestramento. `cuisine` può essere il dataframe delle etichette: - - ```python - cuisines_label_df = cuisines_df['cuisine'] - cuisines_label_df.head() - ``` - - Sarà così: - - ```output - 0 indian - 1 indian - 2 indian - 3 indian - 4 indian - Name: cuisine, dtype: object - ``` - -1. Elimina `Unnamed: 0` column and the `cuisine` column, calling `drop()`. Salva il resto dei dati come caratteristiche addestrabili: - - ```python - cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) - cuisines_feature_df.head() - ``` - - Le tue caratteristiche appaiono così: - -| | 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 | - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/2-Classifiers-1/assignment.md b/translations/it/4-Classification/2-Classifiers-1/assignment.md deleted file mode 100644 index 32ddd2ae..00000000 --- a/translations/it/4-Classification/2-Classifiers-1/assignment.md +++ /dev/null @@ -1,12 +0,0 @@ -# Studiare i solvers -## Istruzioni - -In questa lezione hai imparato a conoscere i vari solvers che abbinano algoritmi a un processo di machine learning per creare un modello accurato. Esamina i solvers elencati nella lezione e scegli due. Con parole tue, confronta e contrappone questi due solvers. Che tipo di problema affrontano? Come funzionano con varie strutture di dati? Perché sceglieresti uno rispetto all'altro? -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | Viene presentato un file .doc con due paragrafi, uno per ciascun solver, confrontandoli in modo approfondito. | Viene presentato un file .doc con un solo paragrafo | Il compito è incompleto | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/it/4-Classification/2-Classifiers-1/solution/Julia/README.md deleted file mode 100644 index 8b4a4d7e..00000000 --- a/translations/it/4-Classification/2-Classifiers-1/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su AI. Sebbene ci impegniamo per l'accuratezza, si prega di notare che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/3-Classifiers-2/README.md b/translations/it/4-Classification/3-Classifiers-2/README.md deleted file mode 100644 index ec7f3297..00000000 --- a/translations/it/4-Classification/3-Classifiers-2/README.md +++ /dev/null @@ -1,238 +0,0 @@ -# Classificatori di cucina 2 - -In questa seconda lezione sulla classificazione, esplorerai ulteriori metodi per classificare i dati numerici. Imparerai anche le conseguenze della scelta di un classificatore rispetto a un altro. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) - -### Prerequisito - -Presumiamo che tu abbia completato le lezioni precedenti e che tu abbia un dataset pulito nella tua cartella `data` chiamato _cleaned_cuisines.csv_ nella radice di questa cartella di 4 lezioni. - -### Preparazione - -Abbiamo caricato il tuo file _notebook.ipynb_ con il dataset pulito e lo abbiamo diviso in dataframe X e y, pronti per il processo di costruzione del modello. - -## Una mappa della classificazione - -In precedenza, hai imparato delle varie opzioni disponibili per classificare i dati utilizzando il cheat sheet di Microsoft. Scikit-learn offre un cheat sheet simile, ma più dettagliato, che può aiutare ulteriormente a restringere i tuoi stimatori (un altro termine per classificatori): - -![Mappa ML di Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.it.png) -> Suggerimento: [visita questa mappa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) e clicca lungo il percorso per leggere la documentazione. - -### Il piano - -Questa mappa è molto utile una volta che hai una chiara comprensione dei tuoi dati, poiché puoi 'camminare' lungo i suoi percorsi verso una decisione: - -- Abbiamo >50 campioni -- Vogliamo prevedere una categoria -- Abbiamo dati etichettati -- Abbiamo meno di 100K campioni -- ✨ Possiamo scegliere un Linear SVC -- Se non funziona, poiché abbiamo dati numerici - - Possiamo provare un ✨ Classificatore KNeighbors - - Se non funziona, prova ✨ SVC e ✨ Classificatori Ensemble - -Questo è un percorso molto utile da seguire. - -## Esercizio - dividere i dati - -Seguendo questo percorso, dovremmo iniziare importando alcune librerie da utilizzare. - -1. Importa le librerie necessarie: - - ```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. Dividi i tuoi dati di addestramento e di test: - - ```python - X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) - ``` - -## Classificatore Linear SVC - -Il clustering Support-Vector (SVC) è un componente della famiglia delle macchine Support-Vector (SVM) di tecniche ML (scopri di più su queste di seguito). In questo metodo, puoi scegliere un 'kernel' per decidere come raggruppare le etichette. Il parametro 'C' si riferisce alla 'regolarizzazione' che regola l'influenza dei parametri. Il kernel può essere uno di [diversi](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); qui lo impostiamo su 'lineare' per assicurarci di sfruttare Linear SVC. La probabilità di default è 'false'; qui la impostiamo su 'true' per raccogliere stime di probabilità. Impostiamo lo stato casuale su '0' per mescolare i dati e ottenere probabilità. - -### Esercizio - applica un Linear SVC - -Inizia creando un array di classificatori. Aggiungerai progressivamente a questo array man mano che testiamo. - -1. Inizia con un Linear SVC: - - ```python - C = 10 - # Create different classifiers. - classifiers = { - 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) - } - ``` - -2. Addestra il tuo modello utilizzando il Linear SVC e stampa un report: - - ```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)) - ``` - - Il risultato è piuttosto buono: - - ```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 - ``` - -## Classificatore K-Neighbors - -K-Neighbors fa parte della famiglia di metodi ML "vicini", che può essere utilizzata sia per l'apprendimento supervisionato che non supervisionato. In questo metodo, viene creato un numero predefinito di punti e i dati vengono raccolti attorno a questi punti in modo tale che possano essere previste etichette generalizzate per i dati. - -### Esercizio - applica il classificatore K-Neighbors - -Il classificatore precedente era buono e funzionava bene con i dati, ma forse possiamo ottenere una precisione migliore. Prova un classificatore K-Neighbors. - -1. Aggiungi una riga al tuo array di classificatori (aggiungi una virgola dopo l'elemento Linear SVC): - - ```python - 'KNN classifier': KNeighborsClassifier(C), - ``` - - Il risultato è un po' peggiore: - - ```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 - ``` - - ✅ Scopri di più su [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) - -## Classificatore Support Vector - -I classificatori Support-Vector fanno parte della famiglia delle [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) di metodi ML che vengono utilizzati per compiti di classificazione e regressione. Le SVM "mappano esempi di addestramento su punti nello spazio" per massimizzare la distanza tra due categorie. I dati successivi vengono mappati in questo spazio in modo che la loro categoria possa essere prevista. - -### Esercizio - applica un Support Vector Classifier - -Proviamo a ottenere una precisione leggermente migliore con un Support Vector Classifier. - -1. Aggiungi una virgola dopo l'elemento K-Neighbors, e poi aggiungi questa riga: - - ```python - 'SVC': SVC(), - ``` - - Il risultato è piuttosto buono! - - ```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 - ``` - - ✅ Scopri di più su [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) - -## Classificatori Ensemble - -Seguiamo il percorso fino alla fine, anche se il test precedente era piuttosto buono. Proviamo alcuni 'Classificatori Ensemble', in particolare Random Forest e AdaBoost: - -```python - 'RFST': RandomForestClassifier(n_estimators=100), - 'ADA': AdaBoostClassifier(n_estimators=100) -``` - -Il risultato è molto buono, specialmente per Random Forest: - -```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 -``` - -✅ Scopri di più sui [Classificatori Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) - -Questo metodo di Machine Learning "combina le previsioni di diversi stimatori di base" per migliorare la qualità del modello. Nel nostro esempio, abbiamo utilizzato Random Trees e AdaBoost. - -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), un metodo di mediazione, costruisce una 'foresta' di 'alberi decisionali' infusi di casualità per evitare l'overfitting. Il parametro n_estimators è impostato sul numero di alberi. - -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) adatta un classificatore a un dataset e poi adatta copie di quel classificatore allo stesso dataset. Si concentra sui pesi degli elementi classificati in modo errato e regola l'adattamento per il classificatore successivo per correggere. - ---- - -## 🚀Sfida - -Ognuna di queste tecniche ha un gran numero di parametri che puoi modificare. Ricerca i parametri di default di ciascuna e pensa a cosa significherebbe modificare questi parametri per la qualità del modello. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) - -## Revisione & Studio Autonomo - -C'è molto gergo in queste lezioni, quindi prenditi un momento per rivedere [questa lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) di terminologia utile! - -## Compito - -[Gioca con i parametri](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su AI. Sebbene ci impegniamo per l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/3-Classifiers-2/assignment.md b/translations/it/4-Classification/3-Classifiers-2/assignment.md deleted file mode 100644 index 521ce9c6..00000000 --- a/translations/it/4-Classification/3-Classifiers-2/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Giocare con i Parametri - -## Istruzioni - -Ci sono molti parametri che vengono impostati di default quando si lavora con questi classificatori. Intellisense in VS Code può aiutarti a esplorarli. Adotta una delle Tecniche di Classificazione ML in questa lezione e addestra nuovamente i modelli modificando vari valori dei parametri. Crea un notebook spiegando perché alcune modifiche migliorano la qualità del modello mentre altre la peggiorano. Sii dettagliato nella tua risposta. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da Migliorare | -| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | -| | Viene presentato un notebook con un classificatore completamente costruito e i suoi parametri modificati e spiegati nei textboxes | Viene presentato un notebook parzialmente o spiegato male | Il notebook presenta bug o errori | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzata basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/it/4-Classification/3-Classifiers-2/solution/Julia/README.md deleted file mode 100644 index e38d44d3..00000000 --- a/translations/it/4-Classification/3-Classifiers-2/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre deve essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda la traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/4-Applied/README.md b/translations/it/4-Classification/4-Applied/README.md deleted file mode 100644 index ad3a46a3..00000000 --- a/translations/it/4-Classification/4-Applied/README.md +++ /dev/null @@ -1,317 +0,0 @@ -# Costruisci un'app web per consigliare cucine - -In questa lezione, costruirai un modello di classificazione utilizzando alcune delle tecniche che hai imparato nelle lezioni precedenti e con il delizioso dataset di cucine utilizzato in tutta questa serie. Inoltre, costruirai una piccola app web per utilizzare un modello salvato, sfruttando il runtime web di Onnx. - -Uno degli usi pratici più utili del machine learning è la costruzione di sistemi di raccomandazione, e oggi puoi fare il primo passo in quella direzione! - -[![Presentazione di questa app web](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") - -> 🎥 Clicca sull'immagine sopra per un video: Jen Looper costruisce un'app web utilizzando dati classificati di cucina - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) - -In questa lezione imparerai: - -- Come costruire un modello e salvarlo come modello Onnx -- Come usare Netron per ispezionare il modello -- Come utilizzare il tuo modello in un'app web per inferenza - -## Costruisci il tuo modello - -Costruire sistemi di ML applicati è una parte importante per sfruttare queste tecnologie nei tuoi sistemi aziendali. Puoi utilizzare modelli all'interno delle tue applicazioni web (e quindi usarli in un contesto offline se necessario) utilizzando Onnx. - -In una [lezione precedente](../../3-Web-App/1-Web-App/README.md), hai costruito un modello di regressione sulle osservazioni UFO, lo hai "pickled" e utilizzato in un'app Flask. Sebbene questa architettura sia molto utile da conoscere, è un'app Python full-stack, e i tuoi requisiti potrebbero includere l'uso di un'applicazione JavaScript. - -In questa lezione, puoi costruire un sistema di base basato su JavaScript per l'inferenza. Tuttavia, prima devi addestrare un modello e convertirlo per l'uso con Onnx. - -## Esercizio - addestra il modello di classificazione - -Prima di tutto, addestra un modello di classificazione utilizzando il dataset di cucine pulito che abbiamo usato. - -1. Inizia importando le librerie utili: - - ```python - !pip install skl2onnx - import pandas as pd - ``` - - Ti serve '[skl2onnx](https://onnx.ai/sklearn-onnx/)' per aiutarti a convertire il tuo modello Scikit-learn in formato Onnx. - -1. Poi, lavora con i tuoi dati nello stesso modo in cui hai fatto nelle lezioni precedenti, leggendo un file CSV usando `read_csv()`: - - ```python - data = pd.read_csv('../data/cleaned_cuisines.csv') - data.head() - ``` - -1. Rimuovi le prime due colonne non necessarie e salva i dati rimanenti come 'X': - - ```python - X = data.iloc[:,2:] - X.head() - ``` - -1. Salva le etichette come 'y': - - ```python - y = data[['cuisine']] - y.head() - - ``` - -### Inizia la routine di addestramento - -Utilizzeremo la libreria 'SVC' che ha una buona accuratezza. - -1. Importa le librerie appropriate da 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. Separa i set di addestramento e test: - - ```python - X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) - ``` - -1. Costruisci un modello di classificazione SVC come hai fatto nella lezione precedente: - - ```python - model = SVC(kernel='linear', C=10, probability=True,random_state=0) - model.fit(X_train,y_train.values.ravel()) - ``` - -1. Ora, testa il tuo modello, chiamando `predict()`: - - ```python - y_pred = model.predict(X_test) - ``` - -1. Stampa un rapporto di classificazione per verificare la qualità del modello: - - ```python - print(classification_report(y_test,y_pred)) - ``` - - Come abbiamo visto prima, l'accuratezza è buona: - - ```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 - ``` - -### Converti il tuo modello in Onnx - -Assicurati di fare la conversione con il numero corretto di Tensor. Questo dataset ha 380 ingredienti elencati, quindi devi annotare quel numero in `FloatTensorType`: - -1. Converti usando un numero di tensor di 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. Crea il file onx e salvalo come **model.onnx**: - - ```python - onx = convert_sklearn(model, initial_types=initial_type, options=options) - with open("./model.onnx", "wb") as f: - f.write(onx.SerializeToString()) - ``` - - > Nota, puoi passare [opzioni](https://onnx.ai/sklearn-onnx/parameterized.html) nel tuo script di conversione. In questo caso, abbiamo passato 'nocl' come True e 'zipmap' come False. Poiché questo è un modello di classificazione, hai l'opzione di rimuovere ZipMap che produce un elenco di dizionari (non necessario). `nocl` refers to class information being included in the model. Reduce your model's size by setting `nocl` to 'True'. - -Running the entire notebook will now build an Onnx model and save it to this folder. - -## View your model - -Onnx models are not very visible in Visual Studio code, but there's a very good free software that many researchers use to visualize the model to ensure that it is properly built. Download [Netron](https://github.com/lutzroeder/Netron) and open your model.onnx file. You can see your simple model visualized, with its 380 inputs and classifier listed: - -![Netron visual](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.it.png) - -Netron is a helpful tool to view your models. - -Now you are ready to use this neat model in a web app. Let's build an app that will come in handy when you look in your refrigerator and try to figure out which combination of your leftover ingredients you can use to cook a given cuisine, as determined by your model. - -## Build a recommender web application - -You can use your model directly in a web app. This architecture also allows you to run it locally and even offline if needed. Start by creating an `index.html` file in the same folder where you stored your `model.onnx` file. - -1. In questo file _index.html_, aggiungi il seguente markup: - - ```html - - -
                                                                      - Cuisine Matcher -
                                                                      - - ... - - - ``` - -1. Ora, lavorando all'interno dei tag `body`, aggiungi un po' di markup per mostrare un elenco di caselle di controllo che riflettono alcuni ingredienti: - - ```html -

                                                                      Check your refrigerator. What can you create?

                                                                      -
                                                                      -
                                                                      - - -
                                                                      - -
                                                                      - - -
                                                                      - -
                                                                      - - -
                                                                      - -
                                                                      - - -
                                                                      - -
                                                                      - - -
                                                                      - -
                                                                      - - -
                                                                      - -
                                                                      - - -
                                                                      -
                                                                      -
                                                                      - -
                                                                      - ``` - - Nota che ogni casella di controllo ha un valore. Questo riflette l'indice dove l'ingrediente si trova secondo il dataset. La mela, per esempio, in questa lista alfabetica, occupa la quinta colonna, quindi il suo valore è '4' poiché iniziamo a contare da 0. Puoi consultare il [foglio di calcolo degli ingredienti](../../../../4-Classification/data/ingredient_indexes.csv) per scoprire l'indice di un dato ingrediente. - - Continuando il tuo lavoro nel file index.html, aggiungi un blocco di script dove il modello viene chiamato dopo l'ultimo `` di chiusura. - -1. Prima, importa il [Runtime Onnx](https://www.onnxruntime.ai/): - - ```html - - ``` - - > Onnx Runtime è utilizzato per abilitare l'esecuzione dei tuoi modelli Onnx su una vasta gamma di piattaforme hardware, inclusi ottimizzazioni e un'API da utilizzare. - -1. Una volta che il Runtime è in posizione, puoi chiamarlo: - - ```html - - ``` - -In questo codice, ci sono diverse cose che stanno succedendo: - -1. Hai creato un array di 380 valori possibili (1 o 0) da impostare e inviare al modello per l'inferenza, a seconda che una casella di controllo dell'ingrediente sia selezionata. -2. Hai creato un array di caselle di controllo e un modo per determinare se sono state selezionate in un `init` function that is called when the application starts. When a checkbox is checked, the `ingredients` array is altered to reflect the chosen ingredient. -3. You created a `testCheckboxes` function that checks whether any checkbox was checked. -4. You use `startInference` function when the button is pressed and, if any checkbox is checked, you start inference. -5. The inference routine includes: - 1. Setting up an asynchronous load of the model - 2. Creating a Tensor structure to send to the model - 3. Creating 'feeds' that reflects the `float_input` input that you created when training your model (you can use Netron to verify that name) - 4. Sending these 'feeds' to the model and waiting for a response - -## Test your application - -Open a terminal session in Visual Studio Code in the folder where your index.html file resides. Ensure that you have [http-server](https://www.npmjs.com/package/http-server) installed globally, and type `http-server` al prompt. Si dovrebbe aprire un localhost e puoi visualizzare la tua app web. Controlla quale cucina viene consigliata in base a vari ingredienti: - -![app web degli ingredienti](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.it.png) - -Congratulazioni, hai creato un'app web di 'raccomandazione' con alcuni campi. Prenditi del tempo per sviluppare ulteriormente questo sistema! -## 🚀Sfida - -La tua app web è molto minimale, quindi continua a svilupparla utilizzando gli ingredienti e i loro indici dai dati [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Quali combinazioni di sapori funzionano per creare un piatto nazionale dato? - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) - -## Revisione e auto-studio - -Mentre questa lezione ha solo toccato l'utilità di creare un sistema di raccomandazione per gli ingredienti alimentari, quest'area delle applicazioni ML è molto ricca di esempi. Leggi di più su come vengono costruiti questi sistemi: - -- 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/ - -## Compito - -[Costruisci un nuovo raccomandatore](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzata basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/4-Applied/assignment.md b/translations/it/4-Classification/4-Applied/assignment.md deleted file mode 100644 index bb69021b..00000000 --- a/translations/it/4-Classification/4-Applied/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Costruisci un sistema di raccomandazione - -## Istruzioni - -Considerando i tuoi esercizi in questa lezione, ora sai come costruire un'app web basata su JavaScript utilizzando Onnx Runtime e un modello Onnx convertito. Sperimenta costruendo un nuovo sistema di raccomandazione utilizzando i dati di queste lezioni o provenienti da altre fonti (dai credito, per favore). Potresti creare un sistema di raccomandazione per animali domestici basato su vari attributi di personalità, oppure un sistema di raccomandazione di generi musicali basato sull'umore di una persona. Sii creativo! - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | -| | Vengono presentati un'app web e un notebook, entrambi ben documentati e funzionanti | Uno dei due manca o è difettoso | Entrambi mancano o sono difettosi | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/4-Classification/README.md b/translations/it/4-Classification/README.md deleted file mode 100644 index d8b83d72..00000000 --- a/translations/it/4-Classification/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# Introduzione alla classificazione - -## Argomento regionale: Deliziose cucine asiatiche e indiane 🍜 - -In Asia e India, le tradizioni culinarie sono estremamente diverse e molto deliziose! Esaminiamo i dati sulle cucine regionali per cercare di capire i loro ingredienti. - -![Venditore di cibo thailandese](../../../translated_images/thai-food.c47a7a7f9f05c21892a1f9dc7bf30669e6d18dfda420c5c7ebb4153f6a304edd.it.jpg) -> Foto di Lisheng Chang su Unsplash - -## Cosa imparerai - -In questa sezione, approfondirai il tuo studio della Regressione e imparerai a conoscere altri classificatori che puoi utilizzare per comprendere meglio i dati. - -> Esistono utili strumenti low-code che possono aiutarti a imparare a lavorare con i modelli di classificazione. Prova [Azure ML per questo compito](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lezioni - -1. [Introduzione alla classificazione](1-Introduction/README.md) -2. [Altri classificatori](2-Classifiers-1/README.md) -3. [Ancora altri classificatori](3-Classifiers-2/README.md) -4. [ML applicato: costruisci un'app web](4-Applied/README.md) - -## Crediti - -"Introduzione alla classificazione" è stato scritto con ♥️ da [Cassie Breviu](https://www.twitter.com/cassiebreviu) e [Jen Looper](https://www.twitter.com/jenlooper) - -Il dataset delle deliziose cucine è stato ottenuto da [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/1-Visualize/README.md b/translations/it/5-Clustering/1-Visualize/README.md deleted file mode 100644 index ff60513b..00000000 --- a/translations/it/5-Clustering/1-Visualize/README.md +++ /dev/null @@ -1,215 +0,0 @@ -# Introduzione al clustering - -Il clustering è un tipo di [Apprendimento Non Supervisionato](https://wikipedia.org/wiki/Unsupervised_learning) che presuppone che un dataset sia non etichettato o che i suoi input non siano associati a output predefiniti. Utilizza vari algoritmi per ordinare i dati non etichettati e fornire raggruppamenti secondo i pattern che rileva nei dati. - -[![No One Like You di PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You di PSquare") - -> 🎥 Clicca sull'immagine sopra per un video. Mentre studi il machine learning con il clustering, goditi alcuni brani Dance Hall nigeriani - questa è una canzone molto apprezzata del 2014 di PSquare. -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) -### Introduzione - -Il [clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) è molto utile per l'esplorazione dei dati. Vediamo se può aiutare a scoprire tendenze e pattern nel modo in cui il pubblico nigeriano consuma musica. - -✅ Prenditi un minuto per pensare agli usi del clustering. Nella vita reale, il clustering avviene ogni volta che hai un mucchio di biancheria e devi separare i vestiti dei membri della tua famiglia 🧦👕👖🩲. In data science, il clustering avviene quando si cerca di analizzare le preferenze di un utente o di determinare le caratteristiche di qualsiasi dataset non etichettato. Il clustering, in un certo senso, aiuta a dare un senso al caos, come un cassetto dei calzini. - -[![Introduzione al ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduzione al Clustering") - -> 🎥 Clicca sull'immagine sopra per un video: John Guttag del MIT introduce il clustering - -In un contesto professionale, il clustering può essere utilizzato per determinare cose come la segmentazione del mercato, determinare quali fasce d'età acquistano quali articoli, per esempio. Un altro uso sarebbe il rilevamento delle anomalie, forse per rilevare frodi in un dataset di transazioni con carta di credito. Oppure potresti usare il clustering per determinare i tumori in un lotto di scansioni mediche. - -✅ Pensa un minuto a come potresti aver incontrato il clustering 'nel mondo reale', in un contesto bancario, di e-commerce o aziendale. - -> 🎓 Interessante, l'analisi dei cluster ha avuto origine nei campi dell'Antropologia e della Psicologia negli anni '30. Riesci a immaginare come potrebbe essere stata utilizzata? - -In alternativa, potresti usarlo per raggruppare i risultati di ricerca - per link di shopping, immagini o recensioni, per esempio. Il clustering è utile quando hai un grande dataset che vuoi ridurre e su cui vuoi eseguire un'analisi più granulare, quindi la tecnica può essere utilizzata per conoscere i dati prima che vengano costruiti altri modelli. - -✅ Una volta che i tuoi dati sono organizzati in cluster, gli assegni un Id di cluster, e questa tecnica può essere utile quando si preserva la privacy di un dataset; puoi invece fare riferimento a un punto dati tramite il suo Id di cluster, piuttosto che tramite dati identificabili più rivelatori. Riesci a pensare ad altri motivi per cui faresti riferimento a un Id di cluster piuttosto che ad altri elementi del cluster per identificarlo? - -Approfondisci la tua comprensione delle tecniche di clustering in questo [modulo di apprendimento](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) -## Iniziare con il clustering - -[Scikit-learn offre una vasta gamma](https://scikit-learn.org/stable/modules/clustering.html) di metodi per eseguire il clustering. Il tipo che scegli dipenderà dal tuo caso d'uso. Secondo la documentazione, ogni metodo ha vari vantaggi. Ecco una tabella semplificata dei metodi supportati da Scikit-learn e i loro casi d'uso appropriati: - -| Nome del metodo | Caso d'uso | -| :--------------------------- | :--------------------------------------------------------------------- | -| K-Means | uso generale, induttivo | -| Affinity propagation | molti, cluster irregolari, induttivo | -| Mean-shift | molti, cluster irregolari, induttivo | -| Spectral clustering | pochi, cluster regolari, transduttivo | -| Ward hierarchical clustering | molti, cluster vincolati, transduttivo | -| Agglomerative clustering | molti, vincolati, distanze non euclidee, transduttivo | -| DBSCAN | geometria non piatta, cluster irregolari, transduttivo | -| OPTICS | geometria non piatta, cluster irregolari con densità variabile, transduttivo | -| Gaussian mixtures | geometria piatta, induttivo | -| BIRCH | grande dataset con outlier, induttivo | - -> 🎓 Come creiamo i cluster ha molto a che fare con come raccogliamo i punti dati nei gruppi. Esploriamo un po' di vocabolario: -> -> 🎓 ['Transduttivo' vs. 'induttivo'](https://wikipedia.org/wiki/Transduction_(machine_learning)) -> -> L'inferenza transduttiva è derivata dai casi di addestramento osservati che mappano su casi di test specifici. L'inferenza induttiva è derivata dai casi di addestramento che mappano su regole generali che vengono poi applicate ai casi di test. -> -> Un esempio: Immagina di avere un dataset parzialmente etichettato. Alcune cose sono 'dischi', altre 'cd', e alcune sono vuote. Il tuo compito è fornire etichette per i vuoti. Se scegli un approccio induttivo, addestreresti un modello cercando 'dischi' e 'cd', e applichi quelle etichette ai tuoi dati non etichettati. Questo approccio avrà difficoltà a classificare cose che sono effettivamente 'cassette'. Un approccio transduttivo, d'altra parte, gestisce questi dati sconosciuti in modo più efficace poiché lavora per raggruppare oggetti simili e poi applica un'etichetta a un gruppo. In questo caso, i cluster potrebbero riflettere 'oggetti musicali rotondi' e 'oggetti musicali quadrati'. -> -> 🎓 ['Geometria non piatta' vs. 'piatta'](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) -> -> Derivato dalla terminologia matematica, la geometria non piatta vs. piatta si riferisce alla misura delle distanze tra punti tramite metodi geometrici 'piatti' ([Euclidei](https://wikipedia.org/wiki/Euclidean_geometry)) o 'non piatti' (non Euclidei). -> ->'Piatta' in questo contesto si riferisce alla geometria euclidea (parti della quale sono insegnate come geometria 'piana'), e non piatta si riferisce alla geometria non euclidea. Cosa c'entra la geometria con il machine learning? Beh, come due campi che sono radicati nella matematica, deve esserci un modo comune per misurare le distanze tra punti nei cluster, e ciò può essere fatto in modo 'piatto' o 'non piatto', a seconda della natura dei dati. Le [distanze euclidee](https://wikipedia.org/wiki/Euclidean_distance) sono misurate come la lunghezza di un segmento di linea tra due punti. Le [distanze non euclidee](https://wikipedia.org/wiki/Non-Euclidean_geometry) sono misurate lungo una curva. Se i tuoi dati, visualizzati, sembrano non esistere su un piano, potresti dover usare un algoritmo specializzato per gestirli. -> -![Infografica Geometria Piatta vs Non Piatta](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.it.png) -> Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) -> -> 🎓 ['Distanze'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) -> -> I cluster sono definiti dalla loro matrice di distanze, ad esempio le distanze tra i punti. Questa distanza può essere misurata in vari modi. I cluster euclidei sono definiti dalla media dei valori dei punti e contengono un 'centroide' o punto centrale. Le distanze sono quindi misurate dalla distanza da quel centroide. Le distanze non euclidee si riferiscono ai 'clustroidi', il punto più vicino ad altri punti. I clustroidi a loro volta possono essere definiti in vari modi. -> -> 🎓 ['Vincolato'](https://wikipedia.org/wiki/Constrained_clustering) -> -> Il [Clustering Vincolato](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introduce l'apprendimento 'semi-supervisionato' in questo metodo non supervisionato. Le relazioni tra i punti sono segnate come 'non può collegare' o 'deve collegare' quindi alcune regole vengono imposte sul dataset. -> ->Un esempio: Se un algoritmo viene lasciato libero su un lotto di dati non etichettati o semi-etichettati, i cluster che produce possono essere di scarsa qualità. Nell'esempio sopra, i cluster potrebbero raggruppare 'oggetti musicali rotondi' e 'oggetti musicali quadrati' e 'oggetti triangolari' e 'biscotti'. Se vengono dati alcuni vincoli, o regole da seguire ("l'oggetto deve essere fatto di plastica", "l'oggetto deve essere in grado di produrre musica") ciò può aiutare a 'vincolare' l'algoritmo a fare scelte migliori. -> -> 🎓 'Densità' -> -> I dati che sono 'rumorosi' sono considerati 'densi'. Le distanze tra i punti in ciascuno dei suoi cluster possono risultare, all'esame, più o meno dense, o 'affollate' e quindi questi dati devono essere analizzati con il metodo di clustering appropriato. [Questo articolo](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) dimostra la differenza tra l'uso del clustering K-Means e gli algoritmi HDBSCAN per esplorare un dataset rumoroso con densità di cluster irregolare. - -## Algoritmi di clustering - -Esistono oltre 100 algoritmi di clustering, e il loro utilizzo dipende dalla natura dei dati in questione. Discutiamo alcuni dei principali: - -- **Clustering gerarchico**. Se un oggetto è classificato in base alla sua prossimità a un oggetto vicino, piuttosto che a uno più lontano, i cluster sono formati in base alla distanza dei loro membri da e verso altri oggetti. Il clustering agglomerativo di Scikit-learn è gerarchico. - - ![Infografica Clustering Gerarchico](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.it.png) - > Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Clustering del centroide**. Questo popolare algoritmo richiede la scelta di 'k', ovvero il numero di cluster da formare, dopo di che l'algoritmo determina il punto centrale di un cluster e raccoglie i dati attorno a quel punto. Il [clustering K-means](https://wikipedia.org/wiki/K-means_clustering) è una versione popolare del clustering del centroide. Il centro è determinato dalla media più vicina, da cui il nome. La distanza quadrata dal cluster è minimizzata. - - ![Infografica Clustering del Centroide](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.it.png) - > Infografica di [Dasani Madipalli](https://twitter.com/dasani_decoded) - -- **Clustering basato sulla distribuzione**. Basato sulla modellazione statistica, il clustering basato sulla distribuzione si concentra sulla determinazione della probabilità che un punto dati appartenga a un cluster e lo assegna di conseguenza. I metodi di miscele gaussiane appartengono a questo tipo. - -- **Clustering basato sulla densità**. I punti dati sono assegnati ai cluster in base alla loro densità, o al loro raggruppamento tra di loro. I punti dati lontani dal gruppo sono considerati outlier o rumore. DBSCAN, Mean-shift e OPTICS appartengono a questo tipo di clustering. - -- **Clustering basato sulla griglia**. Per dataset multidimensionali, viene creata una griglia e i dati vengono divisi tra le celle della griglia, creando così i cluster. - -## Esercizio - raggruppa i tuoi dati - -Il clustering come tecnica è notevolmente facilitato da una visualizzazione adeguata, quindi iniziamo visualizzando i nostri dati musicali. Questo esercizio ci aiuterà a decidere quale dei metodi di clustering utilizzare in modo più efficace per la natura di questi dati. - -1. Apri il file [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) in questa cartella. - -1. Importa il pacchetto `Seaborn` per una buona visualizzazione dei dati. - - ```python - !pip install seaborn - ``` - -1. Aggiungi i dati delle canzoni dal file [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Carica un dataframe con alcuni dati sulle canzoni. Preparati a esplorare questi dati importando le librerie e scaricando i dati: - - ```python - import matplotlib.pyplot as plt - import pandas as pd - - df = pd.read_csv("../data/nigerian-songs.csv") - df.head() - ``` - - Controlla le prime righe di dati: - - | | nome | album | artista | genere_top_artista | data_rilascio | durata | popolarità | ballabilità | acusticità | energia | strumentalità | vivacità | volume | parlato | tempo | firma_temporale | - | --- | ----------------------- | ---------------------------- | ------------------- | ------------------ | ------------- | ------ | ---------- | ----------- | ----------- | ------- | -------------- | -------- | -------- | ----------- | ------- | -------------- | - | 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. Ottieni alcune informazioni sul dataframe, chiamando `info()`: - - ```python - df.info() - ``` - - L'output appare così: - - ```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. Controlla di nuovo per valori nulli, chiamando `isnull()` e verificando che la somma sia 0: - - ```python - df.isnull().sum() - ``` - - Sembra tutto a posto: - - ```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. Descrivi i dati: - - ```python - df.describe() - ``` - - | | data_rilascio | durata | popolarità | ballabilità | acusticità | energia | strumentalità | vivacità | volume | parlato | tempo | firma_temporale | - | ----- | ------------- | ----------- | ---------- | ----------- | ----------- | -------- | -------------- | -------- | --------- | ----------- | ---------- | -------------- | - | 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 | -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) - -## Revisione e Autoapprendimento - -Prima di applicare gli algoritmi di clustering, come abbiamo imparato, è una buona idea comprendere la natura del tuo dataset. Leggi di più su questo argomento [qui](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) - -[Questo articolo utile](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) ti guida attraverso i diversi modi in cui vari algoritmi di clustering si comportano, date diverse forme di dati. - -## Compito - -[Esplora altre visualizzazioni per il clustering](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci impegniamo per l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/1-Visualize/assignment.md b/translations/it/5-Clustering/1-Visualize/assignment.md deleted file mode 100644 index 02c9d5d4..00000000 --- a/translations/it/5-Clustering/1-Visualize/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Ricerca di altre visualizzazioni per il clustering - -## Istruzioni - -In questa lezione, hai lavorato con alcune tecniche di visualizzazione per comprendere come rappresentare graficamente i tuoi dati in preparazione per il clustering. Gli scatterplot, in particolare, sono utili per trovare gruppi di oggetti. Ricerca diversi modi e librerie per creare scatterplot e documenta il tuo lavoro in un notebook. Puoi utilizzare i dati di questa lezione, di altre lezioni, o dati che procuri tu stesso (per favore, accredita comunque la loro fonte nel tuo notebook). Traccia alcuni dati usando scatterplot e spiega cosa scopri. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | -| | Viene presentato un notebook con cinque scatterplot ben documentati | Viene presentato un notebook con meno di cinque scatterplot ed è meno ben documentato | Viene presentato un notebook incompleto | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su AI. Sebbene ci sforziamo di garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/it/5-Clustering/1-Visualize/solution/Julia/README.md deleted file mode 100644 index 5c56a1b9..00000000 --- a/translations/it/5-Clustering/1-Visualize/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Sebbene ci sforziamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/2-K-Means/README.md b/translations/it/5-Clustering/2-K-Means/README.md deleted file mode 100644 index ef9c4afa..00000000 --- a/translations/it/5-Clustering/2-K-Means/README.md +++ /dev/null @@ -1,250 +0,0 @@ -# Clustering K-Means - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) - -In questa lezione, imparerai come creare cluster utilizzando Scikit-learn e il dataset della musica nigeriana che hai importato in precedenza. Copriremo le basi del K-Means per il clustering. Tieni presente che, come hai appreso nella lezione precedente, ci sono molti modi per lavorare con i cluster e il metodo che usi dipende dai tuoi dati. Proveremo il K-Means poiché è la tecnica di clustering più comune. Iniziamo! - -Termini che imparerai: - -- Silhouette scoring -- Metodo dell'Elbow -- Inerzia -- Varianza - -## Introduzione - -[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) è un metodo derivato dal campo dell'elaborazione del segnale. Viene utilizzato per dividere e partizionare gruppi di dati in 'k' cluster utilizzando una serie di osservazioni. Ogni osservazione lavora per raggruppare un dato punto dati più vicino al suo 'mean' più vicino, o il punto centrale di un cluster. - -I cluster possono essere visualizzati come [diagrammi di Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), che includono un punto (o 'seme') e la sua corrispondente regione. - -![diagramma di voronoi](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.it.png) - -> infografica di [Jen Looper](https://twitter.com/jenlooper) - -Il processo di clustering K-Means [si esegue in tre fasi](https://scikit-learn.org/stable/modules/clustering.html#k-means): - -1. L'algoritmo seleziona un numero k di punti centrali campionando dal dataset. Dopo questo, cicla: - 1. Assegna ogni campione al centroide più vicino. - 2. Crea nuovi centroidi prendendo il valore medio di tutti i campioni assegnati ai centroidi precedenti. - 3. Poi, calcola la differenza tra i nuovi e i vecchi centroidi e ripete finché i centroidi non si stabilizzano. - -Uno svantaggio dell'utilizzo del K-Means è che dovrai stabilire 'k', cioè il numero di centroidi. Fortunatamente, il 'metodo dell'Elbow' aiuta a stimare un buon valore di partenza per 'k'. Lo proverai tra un minuto. - -## Prerequisito - -Lavorerai nel file [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) di questa lezione che include l'importazione dei dati e la pulizia preliminare che hai fatto nella lezione precedente. - -## Esercizio - preparazione - -Inizia dando un'altra occhiata ai dati delle canzoni. - -1. Crea un boxplot, chiamando `boxplot()` per ogni colonna: - - ```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) - ``` - - Questi dati sono un po' rumorosi: osservando ogni colonna come un boxplot, puoi vedere i valori anomali. - - ![valori anomali](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.it.png) - -Potresti passare attraverso il dataset e rimuovere questi valori anomali, ma ciò renderebbe i dati piuttosto minimi. - -1. Per ora, scegli quali colonne utilizzerai per il tuo esercizio di clustering. Scegli quelle con intervalli simili e codifica la colonna `artist_top_genre` come dati numerici: - - ```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. Ora devi scegliere quanti cluster mirare. Sai che ci sono 3 generi di canzoni che abbiamo estratto dal dataset, quindi proviamo con 3: - - ```python - from sklearn.cluster import KMeans - - nclusters = 3 - seed = 0 - - km = KMeans(n_clusters=nclusters, random_state=seed) - km.fit(X) - - # Predict the cluster for each data point - - y_cluster_kmeans = km.predict(X) - y_cluster_kmeans - ``` - -Vedrai un array stampato con cluster previsti (0, 1 o 2) per ogni riga del dataframe. - -1. Usa questo array per calcolare un 'silhouette score': - - ```python - from sklearn import metrics - score = metrics.silhouette_score(X, y_cluster_kmeans) - score - ``` - -## Silhouette score - -Cerca un silhouette score vicino a 1. Questo punteggio varia da -1 a 1, e se il punteggio è 1, il cluster è denso e ben separato dagli altri cluster. Un valore vicino a 0 rappresenta cluster sovrapposti con campioni molto vicini al confine decisionale dei cluster vicini. [(Fonte)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) - -Il nostro punteggio è **.53**, quindi a metà strada. Questo indica che i nostri dati non sono particolarmente adatti a questo tipo di clustering, ma continuiamo. - -### Esercizio - costruisci un modello - -1. Importa `KMeans` e inizia il processo di clustering. - - ```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_) - - ``` - - Ci sono alcune parti qui che meritano spiegazioni. - - > 🎓 range: Queste sono le iterazioni del processo di clustering - - > 🎓 random_state: "Determina la generazione di numeri casuali per l'inizializzazione dei centroidi." [Fonte](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) - - > 🎓 WCSS: "within-cluster sums of squares" misura la distanza media quadratica di tutti i punti all'interno di un cluster dal centroide del cluster. [Fonte](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). - - > 🎓 Inerzia: Gli algoritmi K-Means tentano di scegliere i centroidi per minimizzare l'inerzia, "una misura di quanto siano coerenti internamente i cluster." [Fonte](https://scikit-learn.org/stable/modules/clustering.html). Il valore viene aggiunto alla variabile wcss a ogni iterazione. - - > 🎓 k-means++: In [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) puoi usare l'ottimizzazione 'k-means++', che "inizializza i centroidi in modo che siano (generalmente) distanti tra loro, portando probabilmente a risultati migliori rispetto all'inizializzazione casuale." - -### Metodo dell'Elbow - -In precedenza, avevi ipotizzato che, poiché hai mirato a 3 generi di canzoni, dovresti scegliere 3 cluster. Ma è davvero così? - -1. Usa il 'metodo dell'Elbow' per essere sicuro. - - ```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() - ``` - - Usa la variabile `wcss` che hai costruito nel passaggio precedente per creare un grafico che mostra dove si trova la 'curva' nell'Elbow, che indica il numero ottimale di cluster. Forse è davvero 3! - - ![metodo dell'Elbow](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.it.png) - -## Esercizio - visualizza i cluster - -1. Prova di nuovo il processo, questa volta impostando tre cluster, e visualizza i cluster come uno scatterplot: - - ```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. Controlla l'accuratezza del modello: - - ```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))) - ``` - - L'accuratezza di questo modello non è molto buona, e la forma dei cluster ti dà un indizio del perché. - - ![cluster](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.it.png) - - Questi dati sono troppo sbilanciati, troppo poco correlati e c'è troppa varianza tra i valori delle colonne per clusterizzare bene. Infatti, i cluster che si formano sono probabilmente fortemente influenzati o distorti dalle tre categorie di generi che abbiamo definito sopra. È stato un processo di apprendimento! - - Nella documentazione di Scikit-learn, puoi vedere che un modello come questo, con cluster non molto ben demarcati, ha un problema di 'varianza': - - ![modelli problematici](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.it.png) - > Infografica da Scikit-learn - -## Varianza - -La varianza è definita come "la media delle differenze quadrate dalla media" [(Fonte)](https://www.mathsisfun.com/data/standard-deviation.html). Nel contesto di questo problema di clustering, si riferisce a dati in cui i numeri del nostro dataset tendono a divergere un po' troppo dalla media. - -✅ Questo è un ottimo momento per pensare a tutti i modi in cui potresti correggere questo problema. Modificare un po' di più i dati? Utilizzare colonne diverse? Usare un algoritmo diverso? Suggerimento: Prova a [scalare i tuoi dati](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) per normalizzarli e testare altre colonne. - -> Prova questo '[calcolatore di varianza](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' per comprendere meglio il concetto. - ---- - -## 🚀Sfida - -Trascorri un po' di tempo con questo notebook, modificando i parametri. Puoi migliorare l'accuratezza del modello pulendo di più i dati (rimuovendo i valori anomali, ad esempio)? Puoi usare i pesi per dare più peso a determinati campioni di dati. Cos'altro puoi fare per creare cluster migliori? - -Suggerimento: Prova a scalare i tuoi dati. C'è del codice commentato nel notebook che aggiunge la scalatura standard per far sembrare le colonne dei dati più simili tra loro in termini di intervallo. Scoprirai che, mentre il silhouette score diminuisce, la 'curva' nel grafico dell'Elbow si appiana. Questo perché lasciare i dati non scalati permette ai dati con meno varianza di avere più peso. Leggi un po' di più su questo problema [qui](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/30/) - -## Revisione e studio autonomo - -Dai un'occhiata a un simulatore di K-Means [come questo](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Puoi usare questo strumento per visualizzare i punti dati campione e determinare i suoi centroidi. Puoi modificare la casualità dei dati, il numero di cluster e il numero di centroidi. Questo ti aiuta a farti un'idea di come i dati possono essere raggruppati? - -Dai anche un'occhiata a [questo documento sul K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) di Stanford. - -## Compito - -[Prova diversi metodi di clustering](assignment.md) - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci sforziamo di garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatizzate possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/2-K-Means/assignment.md b/translations/it/5-Clustering/2-K-Means/assignment.md deleted file mode 100644 index 4609689c..00000000 --- a/translations/it/5-Clustering/2-K-Means/assignment.md +++ /dev/null @@ -1,13 +0,0 @@ -# Prova diversi metodi di clustering - -## Istruzioni - -In questa lezione hai imparato il clustering K-Means. A volte K-Means non è appropriato per i tuoi dati. Crea un notebook utilizzando dati provenienti da queste lezioni o da altre fonti (cita la tua fonte) e mostra un metodo di clustering diverso da K-Means. Cosa hai imparato? -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | -| | Viene presentato un notebook con un modello di clustering ben documentato | Viene presentato un notebook senza una buona documentazione e/o incompleto | Viene presentato un lavoro incompleto | - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione basati su intelligenza artificiale. Sebbene ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali fraintendimenti o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/it/5-Clustering/2-K-Means/solution/Julia/README.md deleted file mode 100644 index ef10d169..00000000 --- a/translations/it/5-Clustering/2-K-Means/solution/Julia/README.md +++ /dev/null @@ -1,4 +0,0 @@ - - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su AI. Anche se ci impegniamo per l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali incomprensioni o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/5-Clustering/README.md b/translations/it/5-Clustering/README.md deleted file mode 100644 index 7f576f96..00000000 --- a/translations/it/5-Clustering/README.md +++ /dev/null @@ -1,31 +0,0 @@ -# Modelli di clustering per il machine learning - -Il clustering è un compito di machine learning che cerca di trovare oggetti che si somigliano e raggrupparli in gruppi chiamati cluster. Ciò che differenzia il clustering da altri approcci nel machine learning è che le cose avvengono automaticamente; infatti, si può dire che è l'opposto dell'apprendimento supervisionato. - -## Argomento regionale: modelli di clustering per i gusti musicali del pubblico nigeriano 🎧 - -Il pubblico nigeriano è molto variegato e ha gusti musicali diversi. Utilizzando dati estratti da Spotify (ispirati da [questo articolo](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), diamo un'occhiata ad alcune delle musiche popolari in Nigeria. Questo dataset include dati su vari aspetti delle canzoni come il punteggio di 'ballabilità', 'acousticness', volume, 'speechiness', popolarità ed energia. Sarà interessante scoprire dei pattern in questi dati! - -![Un giradischi](../../../translated_images/turntable.f2b86b13c53302dc106aa741de9dc96ac372864cf458dd6f879119857aab01da.it.jpg) - -> Foto di Marcela Laskoski su Unsplash - -In questa serie di lezioni, scoprirai nuovi modi per analizzare i dati utilizzando tecniche di clustering. Il clustering è particolarmente utile quando il tuo dataset manca di etichette. Se ha etichette, allora tecniche di classificazione come quelle apprese nelle lezioni precedenti potrebbero essere più utili. Ma nei casi in cui si desidera raggruppare dati non etichettati, il clustering è un ottimo modo per scoprire pattern. - -> Ci sono utili strumenti low-code che possono aiutarti a imparare a lavorare con i modelli di clustering. Prova [Azure ML per questo compito](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) - -## Lezioni - -1. [Introduzione al clustering](1-Visualize/README.md) -2. [Clustering K-Means](2-K-Means/README.md) - -## Crediti - -Queste lezioni sono state scritte con 🎶 da [Jen Looper](https://www.twitter.com/jenlooper) con utili recensioni di [Rishit Dagli](https://rishit_dagli) e [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). - -Il dataset [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) è stato ottenuto da Kaggle come estratto da Spotify. - -Esempi utili di K-Means che hanno aiutato nella creazione di questa lezione includono questa [esplorazione dell'iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), questo [notebook introduttivo](https://www.kaggle.com/prashant111/k-means-clustering-with-python), e questo [esempio ipotetico di ONG](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). - -**Avvertenza**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Anche se ci impegniamo per l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/6-NLP/1-Introduction-to-NLP/README.md b/translations/it/6-NLP/1-Introduction-to-NLP/README.md deleted file mode 100644 index 59dcbb83..00000000 --- a/translations/it/6-NLP/1-Introduction-to-NLP/README.md +++ /dev/null @@ -1,168 +0,0 @@ -# Introduzione all'elaborazione del linguaggio naturale - -Questa lezione copre una breve storia e i concetti importanti dell'*elaborazione del linguaggio naturale*, un sotto-campo della *linguistica computazionale*. - -## [Quiz pre-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) - -## Introduzione - -L'NLP, come è comunemente conosciuto, è una delle aree più note in cui il machine learning è stato applicato e utilizzato nel software di produzione. - -✅ Riesci a pensare a un software che usi ogni giorno che probabilmente ha dell'NLP integrato? Che dire dei tuoi programmi di elaborazione testi o delle app mobili che usi regolarmente? - -Imparerai a conoscere: - -- **L'idea delle lingue**. Come si sono sviluppate le lingue e quali sono state le principali aree di studio. -- **Definizione e concetti**. Imparerai anche definizioni e concetti su come i computer elaborano il testo, inclusi il parsing, la grammatica e l'identificazione di nomi e verbi. Ci sono alcuni compiti di codifica in questa lezione e vengono introdotti diversi concetti importanti che imparerai a programmare nelle prossime lezioni. - -## Linguistica computazionale - -La linguistica computazionale è un'area di ricerca e sviluppo che studia da decenni come i computer possono lavorare con le lingue, comprenderle, tradurle e comunicare con esse. L'elaborazione del linguaggio naturale (NLP) è un campo correlato che si concentra su come i computer possono elaborare le lingue 'naturali', o umane. - -### Esempio - dettatura telefonica - -Se hai mai dettato al tuo telefono invece di digitare o hai fatto una domanda a un assistente virtuale, il tuo discorso è stato convertito in una forma di testo e poi elaborato o *analizzato* dalla lingua che hai parlato. Le parole chiave rilevate sono state quindi elaborate in un formato che il telefono o l'assistente poteva comprendere e su cui poteva agire. - -![comprensione](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.it.png) -> La vera comprensione linguistica è difficile! Immagine di [Jen Looper](https://twitter.com/jenlooper) - -### Come è possibile questa tecnologia? - -Questo è possibile perché qualcuno ha scritto un programma per computer per farlo. Alcuni decenni fa, alcuni scrittori di fantascienza prevedevano che le persone avrebbero parlato principalmente ai loro computer, e i computer avrebbero sempre capito esattamente cosa intendevano. Purtroppo, si è rivelato un problema più difficile di quanto molti immaginassero, e sebbene oggi sia un problema molto meglio compreso, ci sono sfide significative nel raggiungere una 'perfetta' elaborazione del linguaggio naturale quando si tratta di comprendere il significato di una frase. Questo è un problema particolarmente difficile quando si tratta di comprendere l'umorismo o di rilevare emozioni come il sarcasmo in una frase. - -A questo punto, potresti ricordare le lezioni scolastiche in cui l'insegnante copriva le parti della grammatica in una frase. In alcuni paesi, agli studenti viene insegnata la grammatica e la linguistica come materia dedicata, ma in molti, questi argomenti sono inclusi come parte dell'apprendimento di una lingua: sia la tua prima lingua nella scuola primaria (imparare a leggere e scrivere) e forse una seconda lingua nella scuola post-primaria, o superiore. Non preoccuparti se non sei un esperto nel distinguere i nomi dai verbi o gli avverbi dagli aggettivi! - -Se hai difficoltà con la differenza tra il *presente semplice* e il *presente progressivo*, non sei solo. Questo è un problema impegnativo per molte persone, anche per i madrelingua di una lingua. La buona notizia è che i computer sono davvero bravi ad applicare regole formali, e imparerai a scrivere codice che può *analizzare* una frase così bene come un essere umano. La sfida più grande che esaminerai in seguito è comprendere il *significato* e il *sentimento* di una frase. - -## Prerequisiti - -Per questa lezione, il prerequisito principale è essere in grado di leggere e comprendere la lingua di questa lezione. Non ci sono problemi matematici o equazioni da risolvere. Sebbene l'autore originale abbia scritto questa lezione in inglese, è anche tradotta in altre lingue, quindi potresti leggere una traduzione. Ci sono esempi in cui vengono utilizzate diverse lingue (per confrontare le diverse regole grammaticali delle diverse lingue). Questi non sono tradotti, ma il testo esplicativo sì, quindi il significato dovrebbe essere chiaro. - -Per i compiti di codifica, utilizzerai Python e gli esempi utilizzano Python 3.8. - -In questa sezione, avrai bisogno e utilizzerai: - -- **Comprensione di Python 3**. Comprensione del linguaggio di programmazione in Python 3, questa lezione utilizza input, loop, lettura di file, array. -- **Visual Studio Code + estensione**. Utilizzeremo Visual Studio Code e la sua estensione Python. Puoi anche utilizzare un IDE Python di tua scelta. -- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) è una libreria semplificata per l'elaborazione del testo in Python. Segui le istruzioni sul sito di TextBlob per installarlo sul tuo sistema (installa anche i corpora, come mostrato di seguito): - - ```bash - pip install -U textblob - python -m textblob.download_corpora - ``` - -> 💡 Suggerimento: Puoi eseguire Python direttamente negli ambienti VS Code. Consulta i [documenti](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) per maggiori informazioni. - -## Parlare con le macchine - -La storia del tentativo di far comprendere ai computer il linguaggio umano risale a decenni fa, e uno dei primi scienziati a considerare l'elaborazione del linguaggio naturale è stato *Alan Turing*. - -### Il 'test di Turing' - -Quando Turing stava ricercando l'*intelligenza artificiale* negli anni '50, considerò se potesse essere somministrato un test conversazionale a un essere umano e a un computer (tramite corrispondenza scritta) in cui l'umano nella conversazione non fosse sicuro se stesse conversando con un altro umano o un computer. - -Se, dopo una certa lunghezza della conversazione, l'umano non riusciva a determinare se le risposte provenissero da un computer o meno, allora si poteva dire che il computer stesse *pensando*? - -### L'ispirazione - 'il gioco dell'imitazione' - -L'idea per questo venne da un gioco di società chiamato *Il gioco dell'imitazione* in cui un interrogatore è solo in una stanza e incaricato di determinare quali delle due persone (in un'altra stanza) sono rispettivamente maschio e femmina. L'interrogatore può inviare note e deve cercare di pensare a domande in cui le risposte scritte rivelino il genere della persona misteriosa. Naturalmente, i giocatori nell'altra stanza cercano di ingannare l'interrogatore rispondendo alle domande in modo tale da fuorviare o confondere l'interrogatore, pur dando l'apparenza di rispondere onestamente. - -### Sviluppare Eliza - -Negli anni '60, uno scienziato del MIT chiamato *Joseph Weizenbaum* sviluppò [*Eliza*](https://wikipedia.org/wiki/ELIZA), un 'terapeuta' computerizzato che faceva domande all'umano e dava l'impressione di comprendere le loro risposte. Tuttavia, mentre Eliza poteva analizzare una frase e identificare certi costrutti grammaticali e parole chiave in modo da dare una risposta ragionevole, non si poteva dire che *comprendesse* la frase. Se a Eliza veniva presentata una frase seguendo il formato "**Io sono** triste" poteva riorganizzare e sostituire le parole nella frase per formare la risposta "Da quanto tempo **sei** triste". - -Questo dava l'impressione che Eliza comprendesse l'affermazione e stesse facendo una domanda di follow-up, mentre in realtà stava cambiando il tempo verbale e aggiungendo alcune parole. Se Eliza non riusciva a identificare una parola chiave per cui aveva una risposta, dava invece una risposta casuale che poteva essere applicabile a molte affermazioni diverse. Eliza poteva essere facilmente ingannata, ad esempio se un utente scriveva "**Tu sei** una bicicletta" poteva rispondere con "Da quanto tempo **sono** una bicicletta?", invece di una risposta più ragionata. - -[![Chattare con Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chattare con Eliza") - -> 🎥 Clicca sull'immagine sopra per un video sul programma originale ELIZA - -> Nota: Puoi leggere la descrizione originale di [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) pubblicata nel 1966 se hai un account ACM. In alternativa, leggi di Eliza su [wikipedia](https://wikipedia.org/wiki/ELIZA) - -## Esercizio - codificare un bot conversazionale di base - -Un bot conversazionale, come Eliza, è un programma che sollecita input dall'utente e sembra comprendere e rispondere in modo intelligente. A differenza di Eliza, il nostro bot non avrà diverse regole che gli danno l'apparenza di avere una conversazione intelligente. Invece, il nostro bot avrà una sola abilità, quella di mantenere la conversazione con risposte casuali che potrebbero funzionare in quasi qualsiasi conversazione banale. - -### Il piano - -I tuoi passaggi quando costruisci un bot conversazionale: - -1. Stampa istruzioni che avvisano l'utente su come interagire con il bot -2. Avvia un ciclo - 1. Accetta input dall'utente - 2. Se l'utente ha chiesto di uscire, allora esci - 3. Elabora l'input dell'utente e determina la risposta (in questo caso, la risposta è una scelta casuale da un elenco di possibili risposte generiche) - 4. Stampa la risposta -3. torna al passaggio 2 - -### Costruire il bot - -Creiamo il bot. Inizieremo definendo alcune frasi. - -1. Crea questo bot in Python con le seguenti risposte casuali: - - ```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?"] - ``` - - Ecco un esempio di output per guidarti (l'input dell'utente è sulle righe che iniziano con `>`): - - ```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! - ``` - - Una possibile soluzione al compito è [qui](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) - - ✅ Fermati e rifletti - - 1. Pensi che le risposte casuali 'ingannerebbero' qualcuno facendogli credere che il bot li comprenda veramente? - 2. Quali caratteristiche avrebbe bisogno il bot per essere più efficace? - 3. Se un bot potesse davvero 'comprendere' il significato di una frase, avrebbe bisogno di 'ricordare' anche il significato delle frasi precedenti in una conversazione? - ---- - -## 🚀Sfida - -Scegli uno degli elementi "fermati e rifletti" sopra e prova a implementarlo nel codice o scrivi una soluzione su carta usando pseudocodice. - -Nella prossima lezione, imparerai su numerosi altri approcci per analizzare il linguaggio naturale e il machine learning. - -## [Quiz post-lezione](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) - -## Revisione e studio autonomo - -Dai un'occhiata alle referenze qui sotto come ulteriori opportunità di lettura. - -### Referenze - -1. Schubert, Lenhart, "Computational Linguistics", *The Stanford Encyclopedia of Philosophy* (Spring 2020 Edition), Edward N. Zalta (ed.), URL = . -2. Princeton University "About WordNet." [WordNet](https://wordnet.princeton.edu/). Princeton University. 2010. - -## Compito - -[Search for a bot](assignment.md) - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatizzati basati su intelligenza artificiale. Anche se ci impegniamo per garantire l'accuratezza, si prega di essere consapevoli che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua madre dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione umana professionale. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file diff --git a/translations/it/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/it/6-NLP/1-Introduction-to-NLP/assignment.md deleted file mode 100644 index f4cab41a..00000000 --- a/translations/it/6-NLP/1-Introduction-to-NLP/assignment.md +++ /dev/null @@ -1,14 +0,0 @@ -# Cerca un bot - -## Istruzioni - -I bot sono ovunque. Il tuo compito: trovarne uno e adottarlo! Puoi trovarli su siti web, in applicazioni bancarie e al telefono, ad esempio quando chiami le aziende di servizi finanziari per consigli o informazioni sull'account. Analizza il bot e vedi se riesci a confonderlo. Se riesci a confondere il bot, perché pensi che sia successo? Scrivi un breve documento sulla tua esperienza. - -## Rubrica - -| Criteri | Esemplare | Adeguato | Da migliorare | -| -------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | --------------------- | -| | È stato scritto un documento completo, che spiega la presunta architettura del bot e descrive la tua esperienza | Il documento è incompleto o non ben ricercato | Nessun documento è stato presentato | - -**Disclaimer**: -Questo documento è stato tradotto utilizzando servizi di traduzione automatica basati su intelligenza artificiale. Sebbene ci impegniamo per garantire l'accuratezza, si prega di notare che le traduzioni automatiche possono contenere errori o imprecisioni. Il documento originale nella sua lingua nativa dovrebbe essere considerato la fonte autorevole. Per informazioni critiche, si raccomanda una traduzione professionale umana. Non siamo responsabili per eventuali malintesi o interpretazioni errate derivanti dall'uso di questa traduzione. \ No newline at end of file