From e4050807fbfb1d0ff89c875ceed965de03b35368 Mon Sep 17 00:00:00 2001 From: leestott Date: Fri, 5 Sep 2025 01:48:15 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=8C=90=20Update=20translations=20via=20Co?= =?UTF-8?q?-op=20Translator?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ar/1-Introduction/1-intro-to-ML/README.md | 96 ++-- .../1-Introduction/2-history-of-ML/README.md | 94 ++-- .../ar/1-Introduction/3-fairness/README.md | 95 ++-- .../4-techniques-of-ML/README.md | 80 ++-- .../ar/2-Regression/1-Tools/README.md | 92 ++-- translations/ar/2-Regression/2-Data/README.md | 64 +-- .../ar/2-Regression/3-Linear/README.md | 130 +++--- .../ar/2-Regression/4-Logistic/README.md | 138 +++--- translations/ar/3-Web-App/1-Web-App/README.md | 92 ++-- .../4-Classification/1-Introduction/README.md | 108 +++-- .../2-Classifiers-1/README.md | 101 +++-- .../3-Classifiers-2/README.md | 68 +-- .../ar/4-Classification/4-Applied/README.md | 84 ++-- .../ar/5-Clustering/1-Visualize/README.md | 132 +++--- .../ar/5-Clustering/2-K-Means/README.md | 104 ++--- .../ar/6-NLP/1-Introduction-to-NLP/README.md | 98 ++-- translations/ar/6-NLP/2-Tasks/README.md | 134 +++--- .../6-NLP/3-Translation-Sentiment/README.md | 58 +-- .../ar/6-NLP/4-Hotel-Reviews-1/README.md | 207 +++++---- .../ar/6-NLP/5-Hotel-Reviews-2/README.md | 159 +++---- .../ar/7-TimeSeries/1-Introduction/README.md | 80 ++-- .../ar/7-TimeSeries/2-ARIMA/README.md | 99 +++-- translations/ar/7-TimeSeries/3-SVR/README.md | 94 ++-- .../ar/8-Reinforcement/1-QLearning/README.md | 64 +-- .../ar/8-Reinforcement/2-Gym/README.md | 215 +++------ .../ar/9-Real-World/1-Applications/README.md | 82 ++-- .../2-Debugging-ML-Models/README.md | 136 +++--- translations/ar/README.md | 58 +-- .../bg/1-Introduction/1-intro-to-ML/README.md | 159 +++++++ .../1-intro-to-ML/assignment.md | 23 + .../1-Introduction/2-history-of-ML/README.md | 164 +++++++ .../2-history-of-ML/assignment.md | 25 ++ .../bg/1-Introduction/3-fairness/README.md | 149 +++++++ .../1-Introduction/3-fairness/assignment.md | 25 ++ .../4-techniques-of-ML/README.md | 132 ++++++ .../4-techniques-of-ML/assignment.md | 25 ++ translations/bg/1-Introduction/README.md | 37 ++ .../bg/2-Regression/1-Tools/README.md | 238 ++++++++++ .../bg/2-Regression/1-Tools/assignment.md | 27 ++ .../1-Tools/solution/Julia/README.md | 15 + translations/bg/2-Regression/2-Data/README.md | 226 ++++++++++ .../bg/2-Regression/2-Data/assignment.md | 23 + .../2-Data/solution/Julia/README.md | 15 + .../bg/2-Regression/3-Linear/README.md | 373 ++++++++++++++++ .../bg/2-Regression/3-Linear/assignment.md | 25 ++ .../3-Linear/solution/Julia/README.md | 15 + .../bg/2-Regression/4-Logistic/README.md | 410 +++++++++++++++++ .../bg/2-Regression/4-Logistic/assignment.md | 25 ++ .../4-Logistic/solution/Julia/README.md | 15 + translations/bg/2-Regression/README.md | 54 +++ translations/bg/3-Web-App/1-Web-App/README.md | 359 +++++++++++++++ .../bg/3-Web-App/1-Web-App/assignment.md | 25 ++ translations/bg/3-Web-App/README.md | 35 ++ .../4-Classification/1-Introduction/README.md | 313 +++++++++++++ .../1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../2-Classifiers-1/README.md | 253 +++++++++++ .../2-Classifiers-1/assignment.md | 23 + .../2-Classifiers-1/solution/Julia/README.md | 15 + .../3-Classifiers-2/README.md | 249 +++++++++++ .../3-Classifiers-2/assignment.md | 25 ++ .../3-Classifiers-2/solution/Julia/README.md | 15 + .../bg/4-Classification/4-Applied/README.md | 329 ++++++++++++++ .../4-Classification/4-Applied/assignment.md | 25 ++ translations/bg/4-Classification/README.md | 41 ++ .../bg/5-Clustering/1-Visualize/README.md | 347 +++++++++++++++ .../bg/5-Clustering/1-Visualize/assignment.md | 25 ++ .../1-Visualize/solution/Julia/README.md | 15 + .../bg/5-Clustering/2-K-Means/README.md | 261 +++++++++++ .../bg/5-Clustering/2-K-Means/assignment.md | 25 ++ .../2-K-Means/solution/Julia/README.md | 15 + translations/bg/5-Clustering/README.md | 42 ++ .../bg/6-NLP/1-Introduction-to-NLP/README.md | 179 ++++++++ .../6-NLP/1-Introduction-to-NLP/assignment.md | 25 ++ translations/bg/6-NLP/2-Tasks/README.md | 224 ++++++++++ translations/bg/6-NLP/2-Tasks/assignment.md | 25 ++ .../6-NLP/3-Translation-Sentiment/README.md | 200 +++++++++ .../3-Translation-Sentiment/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../solution/R/README.md | 15 + .../bg/6-NLP/4-Hotel-Reviews-1/README.md | 415 +++++++++++++++++ .../bg/6-NLP/4-Hotel-Reviews-1/assignment.md | 19 + .../solution/Julia/README.md | 15 + .../4-Hotel-Reviews-1/solution/R/README.md | 15 + .../bg/6-NLP/5-Hotel-Reviews-2/README.md | 389 ++++++++++++++++ .../bg/6-NLP/5-Hotel-Reviews-2/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../5-Hotel-Reviews-2/solution/R/README.md | 15 + translations/bg/6-NLP/README.md | 38 ++ translations/bg/6-NLP/data/README.md | 15 + .../bg/7-TimeSeries/1-Introduction/README.md | 199 +++++++++ .../7-TimeSeries/1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../1-Introduction/solution/R/README.md | 15 + .../bg/7-TimeSeries/2-ARIMA/README.md | 407 +++++++++++++++++ .../bg/7-TimeSeries/2-ARIMA/assignment.md | 25 ++ .../2-ARIMA/solution/Julia/README.md | 15 + .../7-TimeSeries/2-ARIMA/solution/R/README.md | 15 + translations/bg/7-TimeSeries/3-SVR/README.md | 393 +++++++++++++++++ .../bg/7-TimeSeries/3-SVR/assignment.md | 29 ++ translations/bg/7-TimeSeries/README.md | 37 ++ .../bg/8-Reinforcement/1-QLearning/README.md | 256 +++++++++++ .../8-Reinforcement/1-QLearning/assignment.md | 41 ++ .../1-QLearning/solution/Julia/README.md | 15 + .../1-QLearning/solution/R/README.md | 15 + .../bg/8-Reinforcement/2-Gym/README.md | 351 +++++++++++++++ .../bg/8-Reinforcement/2-Gym/assignment.md | 55 +++ .../2-Gym/solution/Julia/README.md | 15 + .../2-Gym/solution/R/README.md | 15 + translations/bg/8-Reinforcement/README.md | 67 +++ .../bg/9-Real-World/1-Applications/README.md | 147 ++++++ .../9-Real-World/1-Applications/assignment.md | 27 ++ .../2-Debugging-ML-Models/README.md | 162 +++++++ .../2-Debugging-ML-Models/assignment.md | 25 ++ translations/bg/9-Real-World/README.md | 32 ++ translations/bg/CODE_OF_CONDUCT.md | 23 + translations/bg/CONTRIBUTING.md | 25 ++ translations/bg/README.md | 177 ++++++++ translations/bg/SECURITY.md | 51 +++ translations/bg/SUPPORT.md | 26 ++ translations/bg/docs/_sidebar.md | 57 +++ translations/bg/for-teachers.md | 37 ++ translations/bg/quiz-app/README.md | 127 ++++++ translations/bg/sketchnotes/LICENSE.md | 200 +++++++++ translations/bg/sketchnotes/README.md | 21 + .../bn/1-Introduction/1-intro-to-ML/README.md | 114 ++--- .../1-Introduction/2-history-of-ML/README.md | 86 ++-- .../bn/1-Introduction/3-fairness/README.md | 107 +++-- .../4-techniques-of-ML/README.md | 66 +-- .../bn/2-Regression/1-Tools/README.md | 86 ++-- translations/bn/2-Regression/2-Data/README.md | 134 +++--- .../bn/2-Regression/3-Linear/README.md | 212 ++++----- .../bn/2-Regression/4-Logistic/README.md | 188 ++++---- translations/bn/3-Web-App/1-Web-App/README.md | 88 ++-- .../4-Classification/1-Introduction/README.md | 116 ++--- .../2-Classifiers-1/README.md | 78 ++-- .../3-Classifiers-2/README.md | 34 +- .../bn/4-Classification/4-Applied/README.md | 110 ++--- .../bn/5-Clustering/1-Visualize/README.md | 137 +++--- .../bn/5-Clustering/2-K-Means/README.md | 70 +-- .../bn/6-NLP/1-Introduction-to-NLP/README.md | 102 ++--- translations/bn/6-NLP/2-Tasks/README.md | 90 ++-- .../6-NLP/3-Translation-Sentiment/README.md | 88 ++-- .../bn/6-NLP/4-Hotel-Reviews-1/README.md | 167 ++++--- .../bn/6-NLP/5-Hotel-Reviews-2/README.md | 112 ++--- .../bn/7-TimeSeries/1-Introduction/README.md | 98 ++-- .../bn/7-TimeSeries/2-ARIMA/README.md | 101 +++-- translations/bn/7-TimeSeries/3-SVR/README.md | 84 ++-- .../bn/8-Reinforcement/1-QLearning/README.md | 128 +++--- .../bn/8-Reinforcement/2-Gym/README.md | 122 ++--- .../bn/9-Real-World/1-Applications/README.md | 96 ++-- .../2-Debugging-ML-Models/README.md | 155 +++---- translations/bn/README.md | 128 +++--- .../br/1-Introduction/1-intro-to-ML/README.md | 38 +- .../1-Introduction/2-history-of-ML/README.md | 38 +- .../br/1-Introduction/3-fairness/README.md | 92 ++-- .../4-techniques-of-ML/README.md | 50 +-- .../br/2-Regression/1-Tools/README.md | 56 +-- translations/br/2-Regression/2-Data/README.md | 78 ++-- .../br/2-Regression/3-Linear/README.md | 62 +-- .../br/2-Regression/4-Logistic/README.md | 117 +++-- translations/br/3-Web-App/1-Web-App/README.md | 38 +- .../4-Classification/1-Introduction/README.md | 64 +-- .../2-Classifiers-1/README.md | 44 +- .../3-Classifiers-2/README.md | 50 +-- .../br/4-Classification/4-Applied/README.md | 58 +-- .../br/5-Clustering/1-Visualize/README.md | 76 ++-- .../br/5-Clustering/2-K-Means/README.md | 42 +- .../br/6-NLP/1-Introduction-to-NLP/README.md | 92 ++-- translations/br/6-NLP/2-Tasks/README.md | 40 +- .../6-NLP/3-Translation-Sentiment/README.md | 80 ++-- .../br/6-NLP/4-Hotel-Reviews-1/README.md | 137 +++--- .../br/6-NLP/5-Hotel-Reviews-2/README.md | 230 +++++----- .../br/7-TimeSeries/1-Introduction/README.md | 94 ++-- .../br/7-TimeSeries/2-ARIMA/README.md | 47 +- translations/br/7-TimeSeries/3-SVR/README.md | 80 ++-- .../br/8-Reinforcement/1-QLearning/README.md | 60 +-- .../br/8-Reinforcement/2-Gym/README.md | 60 +-- .../br/9-Real-World/1-Applications/README.md | 68 +-- .../2-Debugging-ML-Models/README.md | 59 +-- translations/br/README.md | 129 +++--- .../cs/1-Introduction/1-intro-to-ML/README.md | 159 +++++++ .../1-intro-to-ML/assignment.md | 23 + .../1-Introduction/2-history-of-ML/README.md | 164 +++++++ .../2-history-of-ML/assignment.md | 25 ++ .../cs/1-Introduction/3-fairness/README.md | 153 +++++++ .../1-Introduction/3-fairness/assignment.md | 25 ++ .../4-techniques-of-ML/README.md | 132 ++++++ .../4-techniques-of-ML/assignment.md | 25 ++ translations/cs/1-Introduction/README.md | 37 ++ .../cs/2-Regression/1-Tools/README.md | 238 ++++++++++ .../cs/2-Regression/1-Tools/assignment.md | 27 ++ .../1-Tools/solution/Julia/README.md | 15 + translations/cs/2-Regression/2-Data/README.md | 226 ++++++++++ .../cs/2-Regression/2-Data/assignment.md | 22 + .../2-Data/solution/Julia/README.md | 15 + .../cs/2-Regression/3-Linear/README.md | 380 ++++++++++++++++ .../cs/2-Regression/3-Linear/assignment.md | 25 ++ .../3-Linear/solution/Julia/README.md | 15 + .../cs/2-Regression/4-Logistic/README.md | 408 +++++++++++++++++ .../cs/2-Regression/4-Logistic/assignment.md | 25 ++ .../4-Logistic/solution/Julia/README.md | 15 + translations/cs/2-Regression/README.md | 54 +++ translations/cs/3-Web-App/1-Web-App/README.md | 359 +++++++++++++++ .../cs/3-Web-App/1-Web-App/assignment.md | 25 ++ translations/cs/3-Web-App/README.md | 35 ++ .../4-Classification/1-Introduction/README.md | 313 +++++++++++++ .../1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../2-Classifiers-1/README.md | 253 +++++++++++ .../2-Classifiers-1/assignment.md | 23 + .../2-Classifiers-1/solution/Julia/README.md | 15 + .../3-Classifiers-2/README.md | 249 +++++++++++ .../3-Classifiers-2/assignment.md | 25 ++ .../3-Classifiers-2/solution/Julia/README.md | 15 + .../cs/4-Classification/4-Applied/README.md | 329 ++++++++++++++ .../4-Classification/4-Applied/assignment.md | 25 ++ translations/cs/4-Classification/README.md | 41 ++ .../cs/5-Clustering/1-Visualize/README.md | 347 +++++++++++++++ .../cs/5-Clustering/1-Visualize/assignment.md | 25 ++ .../1-Visualize/solution/Julia/README.md | 15 + .../cs/5-Clustering/2-K-Means/README.md | 261 +++++++++++ .../cs/5-Clustering/2-K-Means/assignment.md | 25 ++ .../2-K-Means/solution/Julia/README.md | 15 + translations/cs/5-Clustering/README.md | 42 ++ .../cs/6-NLP/1-Introduction-to-NLP/README.md | 179 ++++++++ .../6-NLP/1-Introduction-to-NLP/assignment.md | 25 ++ translations/cs/6-NLP/2-Tasks/README.md | 222 ++++++++++ translations/cs/6-NLP/2-Tasks/assignment.md | 25 ++ .../6-NLP/3-Translation-Sentiment/README.md | 200 +++++++++ .../3-Translation-Sentiment/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../solution/R/README.md | 15 + .../cs/6-NLP/4-Hotel-Reviews-1/README.md | 417 ++++++++++++++++++ .../cs/6-NLP/4-Hotel-Reviews-1/assignment.md | 19 + .../solution/Julia/README.md | 15 + .../4-Hotel-Reviews-1/solution/R/README.md | 15 + .../cs/6-NLP/5-Hotel-Reviews-2/README.md | 389 ++++++++++++++++ .../cs/6-NLP/5-Hotel-Reviews-2/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../5-Hotel-Reviews-2/solution/R/README.md | 15 + translations/cs/6-NLP/README.md | 38 ++ translations/cs/6-NLP/data/README.md | 15 + .../cs/7-TimeSeries/1-Introduction/README.md | 199 +++++++++ .../7-TimeSeries/1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../1-Introduction/solution/R/README.md | 15 + .../cs/7-TimeSeries/2-ARIMA/README.md | 406 +++++++++++++++++ .../cs/7-TimeSeries/2-ARIMA/assignment.md | 25 ++ .../2-ARIMA/solution/Julia/README.md | 15 + .../7-TimeSeries/2-ARIMA/solution/R/README.md | 15 + translations/cs/7-TimeSeries/3-SVR/README.md | 393 +++++++++++++++++ .../cs/7-TimeSeries/3-SVR/assignment.md | 29 ++ translations/cs/7-TimeSeries/README.md | 37 ++ .../cs/8-Reinforcement/1-QLearning/README.md | 256 +++++++++++ .../8-Reinforcement/1-QLearning/assignment.md | 41 ++ .../1-QLearning/solution/Julia/README.md | 15 + .../1-QLearning/solution/R/README.md | 15 + .../cs/8-Reinforcement/2-Gym/README.md | 351 +++++++++++++++ .../cs/8-Reinforcement/2-Gym/assignment.md | 57 +++ .../2-Gym/solution/Julia/README.md | 15 + .../2-Gym/solution/R/README.md | 15 + translations/cs/8-Reinforcement/README.md | 67 +++ .../cs/9-Real-World/1-Applications/README.md | 159 +++++++ .../9-Real-World/1-Applications/assignment.md | 27 ++ .../2-Debugging-ML-Models/README.md | 164 +++++++ .../2-Debugging-ML-Models/assignment.md | 25 ++ translations/cs/9-Real-World/README.md | 32 ++ translations/cs/CODE_OF_CONDUCT.md | 23 + translations/cs/CONTRIBUTING.md | 25 ++ translations/cs/README.md | 178 ++++++++ translations/cs/SECURITY.md | 51 +++ translations/cs/SUPPORT.md | 24 + translations/cs/docs/_sidebar.md | 57 +++ translations/cs/for-teachers.md | 37 ++ translations/cs/quiz-app/README.md | 127 ++++++ translations/cs/sketchnotes/LICENSE.md | 204 +++++++++ translations/cs/sketchnotes/README.md | 21 + .../da/1-Introduction/1-intro-to-ML/README.md | 159 +++++++ .../1-intro-to-ML/assignment.md | 23 + .../1-Introduction/2-history-of-ML/README.md | 164 +++++++ .../2-history-of-ML/assignment.md | 25 ++ .../da/1-Introduction/3-fairness/README.md | 170 +++++++ .../1-Introduction/3-fairness/assignment.md | 25 ++ .../4-techniques-of-ML/README.md | 132 ++++++ .../4-techniques-of-ML/assignment.md | 25 ++ translations/da/1-Introduction/README.md | 37 ++ .../da/2-Regression/1-Tools/README.md | 238 ++++++++++ .../da/2-Regression/1-Tools/assignment.md | 27 ++ .../1-Tools/solution/Julia/README.md | 15 + translations/da/2-Regression/2-Data/README.md | 226 ++++++++++ .../da/2-Regression/2-Data/assignment.md | 23 + .../2-Data/solution/Julia/README.md | 15 + .../da/2-Regression/3-Linear/README.md | 380 ++++++++++++++++ .../da/2-Regression/3-Linear/assignment.md | 25 ++ .../3-Linear/solution/Julia/README.md | 15 + .../da/2-Regression/4-Logistic/README.md | 413 +++++++++++++++++ .../da/2-Regression/4-Logistic/assignment.md | 25 ++ .../4-Logistic/solution/Julia/README.md | 15 + translations/da/2-Regression/README.md | 54 +++ translations/da/3-Web-App/1-Web-App/README.md | 359 +++++++++++++++ .../da/3-Web-App/1-Web-App/assignment.md | 25 ++ translations/da/3-Web-App/README.md | 35 ++ .../4-Classification/1-Introduction/README.md | 313 +++++++++++++ .../1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../2-Classifiers-1/README.md | 253 +++++++++++ .../2-Classifiers-1/assignment.md | 23 + .../2-Classifiers-1/solution/Julia/README.md | 15 + .../3-Classifiers-2/README.md | 249 +++++++++++ .../3-Classifiers-2/assignment.md | 25 ++ .../3-Classifiers-2/solution/Julia/README.md | 15 + .../da/4-Classification/4-Applied/README.md | 329 ++++++++++++++ .../4-Classification/4-Applied/assignment.md | 25 ++ translations/da/4-Classification/README.md | 41 ++ .../da/5-Clustering/1-Visualize/README.md | 347 +++++++++++++++ .../da/5-Clustering/1-Visualize/assignment.md | 25 ++ .../1-Visualize/solution/Julia/README.md | 15 + .../da/5-Clustering/2-K-Means/README.md | 261 +++++++++++ .../da/5-Clustering/2-K-Means/assignment.md | 25 ++ .../2-K-Means/solution/Julia/README.md | 15 + translations/da/5-Clustering/README.md | 42 ++ .../da/6-NLP/1-Introduction-to-NLP/README.md | 179 ++++++++ .../6-NLP/1-Introduction-to-NLP/assignment.md | 25 ++ translations/da/6-NLP/2-Tasks/README.md | 228 ++++++++++ translations/da/6-NLP/2-Tasks/assignment.md | 25 ++ .../6-NLP/3-Translation-Sentiment/README.md | 200 +++++++++ .../3-Translation-Sentiment/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../solution/R/README.md | 15 + .../da/6-NLP/4-Hotel-Reviews-1/README.md | 417 ++++++++++++++++++ .../da/6-NLP/4-Hotel-Reviews-1/assignment.md | 19 + .../solution/Julia/README.md | 15 + .../4-Hotel-Reviews-1/solution/R/README.md | 15 + .../da/6-NLP/5-Hotel-Reviews-2/README.md | 389 ++++++++++++++++ .../da/6-NLP/5-Hotel-Reviews-2/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../5-Hotel-Reviews-2/solution/R/README.md | 15 + translations/da/6-NLP/README.md | 38 ++ translations/da/6-NLP/data/README.md | 15 + .../da/7-TimeSeries/1-Introduction/README.md | 199 +++++++++ .../7-TimeSeries/1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../1-Introduction/solution/R/README.md | 15 + .../da/7-TimeSeries/2-ARIMA/README.md | 405 +++++++++++++++++ .../da/7-TimeSeries/2-ARIMA/assignment.md | 25 ++ .../2-ARIMA/solution/Julia/README.md | 15 + .../7-TimeSeries/2-ARIMA/solution/R/README.md | 15 + translations/da/7-TimeSeries/3-SVR/README.md | 393 +++++++++++++++++ .../da/7-TimeSeries/3-SVR/assignment.md | 27 ++ translations/da/7-TimeSeries/README.md | 37 ++ .../da/8-Reinforcement/1-QLearning/README.md | 256 +++++++++++ .../8-Reinforcement/1-QLearning/assignment.md | 41 ++ .../1-QLearning/solution/Julia/README.md | 15 + .../1-QLearning/solution/R/README.md | 15 + .../da/8-Reinforcement/2-Gym/README.md | 351 +++++++++++++++ .../da/8-Reinforcement/2-Gym/assignment.md | 55 +++ .../2-Gym/solution/Julia/README.md | 15 + .../2-Gym/solution/R/README.md | 15 + translations/da/8-Reinforcement/README.md | 67 +++ .../da/9-Real-World/1-Applications/README.md | 159 +++++++ .../9-Real-World/1-Applications/assignment.md | 27 ++ .../2-Debugging-ML-Models/README.md | 183 ++++++++ .../2-Debugging-ML-Models/assignment.md | 25 ++ translations/da/9-Real-World/README.md | 32 ++ translations/da/CODE_OF_CONDUCT.md | 23 + translations/da/CONTRIBUTING.md | 30 ++ translations/da/README.md | 178 ++++++++ translations/da/SECURITY.md | 51 +++ translations/da/SUPPORT.md | 26 ++ translations/da/docs/_sidebar.md | 57 +++ translations/da/for-teachers.md | 37 ++ translations/da/quiz-app/README.md | 127 ++++++ translations/da/sketchnotes/LICENSE.md | 112 +++++ translations/da/sketchnotes/README.md | 21 + .../de/1-Introduction/1-intro-to-ML/README.md | 84 ++-- .../1-Introduction/2-history-of-ML/README.md | 87 ++-- .../de/1-Introduction/3-fairness/README.md | 128 +++--- .../4-techniques-of-ML/README.md | 64 +-- .../de/2-Regression/1-Tools/README.md | 120 ++--- translations/de/2-Regression/2-Data/README.md | 88 ++-- .../de/2-Regression/3-Linear/README.md | 195 ++++---- .../de/2-Regression/4-Logistic/README.md | 154 +++---- translations/de/3-Web-App/1-Web-App/README.md | 92 ++-- .../4-Classification/1-Introduction/README.md | 92 ++-- .../2-Classifiers-1/README.md | 80 ++-- .../3-Classifiers-2/README.md | 64 +-- .../de/4-Classification/4-Applied/README.md | 126 +++--- .../de/5-Clustering/1-Visualize/README.md | 88 ++-- .../de/5-Clustering/2-K-Means/README.md | 98 ++-- .../de/6-NLP/1-Introduction-to-NLP/README.md | 100 ++--- translations/de/6-NLP/2-Tasks/README.md | 105 ++--- .../6-NLP/3-Translation-Sentiment/README.md | 82 ++-- .../de/6-NLP/4-Hotel-Reviews-1/README.md | 171 ++++--- .../de/6-NLP/5-Hotel-Reviews-2/README.md | 117 ++--- .../de/7-TimeSeries/1-Introduction/README.md | 114 ++--- .../de/7-TimeSeries/2-ARIMA/README.md | 110 +++-- translations/de/7-TimeSeries/3-SVR/README.md | 90 ++-- .../de/8-Reinforcement/1-QLearning/README.md | 90 ++-- .../de/8-Reinforcement/2-Gym/README.md | 118 +++-- .../de/9-Real-World/1-Applications/README.md | 90 ++-- .../2-Debugging-ML-Models/README.md | 114 ++--- translations/de/README.md | 170 +++---- .../el/1-Introduction/1-intro-to-ML/README.md | 159 +++++++ .../1-intro-to-ML/assignment.md | 23 + .../1-Introduction/2-history-of-ML/README.md | 141 ++++++ .../2-history-of-ML/assignment.md | 25 ++ .../el/1-Introduction/3-fairness/README.md | 128 ++++++ .../1-Introduction/3-fairness/assignment.md | 25 ++ .../4-techniques-of-ML/README.md | 110 +++++ .../4-techniques-of-ML/assignment.md | 25 ++ translations/el/1-Introduction/README.md | 37 ++ .../el/2-Regression/1-Tools/README.md | 197 +++++++++ .../el/2-Regression/1-Tools/assignment.md | 27 ++ .../1-Tools/solution/Julia/README.md | 15 + translations/el/2-Regression/2-Data/README.md | 226 ++++++++++ .../el/2-Regression/2-Data/assignment.md | 23 + .../2-Data/solution/Julia/README.md | 15 + .../el/2-Regression/3-Linear/README.md | 350 +++++++++++++++ .../el/2-Regression/3-Linear/assignment.md | 25 ++ .../3-Linear/solution/Julia/README.md | 15 + .../el/2-Regression/4-Logistic/README.md | 344 +++++++++++++++ .../el/2-Regression/4-Logistic/assignment.md | 25 ++ .../4-Logistic/solution/Julia/README.md | 15 + translations/el/2-Regression/README.md | 54 +++ translations/el/3-Web-App/1-Web-App/README.md | 359 +++++++++++++++ .../el/3-Web-App/1-Web-App/assignment.md | 25 ++ translations/el/3-Web-App/README.md | 35 ++ .../4-Classification/1-Introduction/README.md | 313 +++++++++++++ .../1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../2-Classifiers-1/README.md | 253 +++++++++++ .../2-Classifiers-1/assignment.md | 23 + .../2-Classifiers-1/solution/Julia/README.md | 15 + .../3-Classifiers-2/README.md | 249 +++++++++++ .../3-Classifiers-2/assignment.md | 25 ++ .../3-Classifiers-2/solution/Julia/README.md | 15 + .../el/4-Classification/4-Applied/README.md | 329 ++++++++++++++ .../4-Classification/4-Applied/assignment.md | 25 ++ translations/el/4-Classification/README.md | 41 ++ .../el/5-Clustering/1-Visualize/README.md | 322 ++++++++++++++ .../el/5-Clustering/1-Visualize/assignment.md | 25 ++ .../1-Visualize/solution/Julia/README.md | 15 + .../el/5-Clustering/2-K-Means/README.md | 261 +++++++++++ .../el/5-Clustering/2-K-Means/assignment.md | 25 ++ .../2-K-Means/solution/Julia/README.md | 15 + translations/el/5-Clustering/README.md | 42 ++ .../el/6-NLP/1-Introduction-to-NLP/README.md | 179 ++++++++ .../6-NLP/1-Introduction-to-NLP/assignment.md | 25 ++ translations/el/6-NLP/2-Tasks/README.md | 228 ++++++++++ translations/el/6-NLP/2-Tasks/assignment.md | 25 ++ .../6-NLP/3-Translation-Sentiment/README.md | 180 ++++++++ .../3-Translation-Sentiment/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../solution/R/README.md | 15 + .../el/6-NLP/4-Hotel-Reviews-1/README.md | 411 +++++++++++++++++ .../el/6-NLP/4-Hotel-Reviews-1/assignment.md | 19 + .../solution/Julia/README.md | 15 + .../4-Hotel-Reviews-1/solution/R/README.md | 15 + .../el/6-NLP/5-Hotel-Reviews-2/README.md | 359 +++++++++++++++ .../el/6-NLP/5-Hotel-Reviews-2/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../5-Hotel-Reviews-2/solution/R/README.md | 15 + translations/el/6-NLP/README.md | 38 ++ translations/el/6-NLP/data/README.md | 15 + .../el/7-TimeSeries/1-Introduction/README.md | 195 ++++++++ .../7-TimeSeries/1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../1-Introduction/solution/R/README.md | 15 + .../el/7-TimeSeries/2-ARIMA/README.md | 399 +++++++++++++++++ .../el/7-TimeSeries/2-ARIMA/assignment.md | 25 ++ .../2-ARIMA/solution/Julia/README.md | 15 + .../7-TimeSeries/2-ARIMA/solution/R/README.md | 15 + translations/el/7-TimeSeries/3-SVR/README.md | 400 +++++++++++++++++ .../el/7-TimeSeries/3-SVR/assignment.md | 27 ++ translations/el/7-TimeSeries/README.md | 37 ++ .../el/8-Reinforcement/1-QLearning/README.md | 256 +++++++++++ .../8-Reinforcement/1-QLearning/assignment.md | 41 ++ .../1-QLearning/solution/Julia/README.md | 15 + .../1-QLearning/solution/R/README.md | 15 + .../el/8-Reinforcement/2-Gym/README.md | 331 ++++++++++++++ .../el/8-Reinforcement/2-Gym/assignment.md | 57 +++ .../2-Gym/solution/Julia/README.md | 15 + .../2-Gym/solution/R/README.md | 15 + translations/el/8-Reinforcement/README.md | 67 +++ .../el/9-Real-World/1-Applications/README.md | 130 ++++++ .../9-Real-World/1-Applications/assignment.md | 27 ++ .../2-Debugging-ML-Models/README.md | 151 +++++++ .../2-Debugging-ML-Models/assignment.md | 25 ++ translations/el/9-Real-World/README.md | 32 ++ translations/el/CODE_OF_CONDUCT.md | 23 + translations/el/CONTRIBUTING.md | 25 ++ translations/el/README.md | 177 ++++++++ translations/el/SECURITY.md | 51 +++ translations/el/SUPPORT.md | 26 ++ translations/el/docs/_sidebar.md | 57 +++ translations/el/for-teachers.md | 37 ++ translations/el/quiz-app/README.md | 127 ++++++ translations/el/sketchnotes/LICENSE.md | 96 ++++ translations/el/sketchnotes/README.md | 21 + .../es/1-Introduction/1-intro-to-ML/README.md | 36 +- .../1-Introduction/2-history-of-ML/README.md | 38 +- .../es/1-Introduction/3-fairness/README.md | 72 +-- .../4-techniques-of-ML/README.md | 56 +-- .../es/2-Regression/1-Tools/README.md | 36 +- translations/es/2-Regression/2-Data/README.md | 46 +- .../es/2-Regression/3-Linear/README.md | 216 ++++----- .../es/2-Regression/4-Logistic/README.md | 118 +++-- translations/es/3-Web-App/1-Web-App/README.md | 50 +-- .../4-Classification/1-Introduction/README.md | 52 +-- .../2-Classifiers-1/README.md | 70 +-- .../3-Classifiers-2/README.md | 58 +-- .../es/4-Classification/4-Applied/README.md | 30 +- .../es/5-Clustering/1-Visualize/README.md | 98 ++-- .../es/5-Clustering/2-K-Means/README.md | 62 +-- .../es/6-NLP/1-Introduction-to-NLP/README.md | 40 +- translations/es/6-NLP/2-Tasks/README.md | 48 +- .../6-NLP/3-Translation-Sentiment/README.md | 74 ++-- .../es/6-NLP/4-Hotel-Reviews-1/README.md | 113 +++-- .../es/6-NLP/5-Hotel-Reviews-2/README.md | 251 +++++------ .../es/7-TimeSeries/1-Introduction/README.md | 94 ++-- .../es/7-TimeSeries/2-ARIMA/README.md | 82 ++-- translations/es/7-TimeSeries/3-SVR/README.md | 46 +- .../es/8-Reinforcement/1-QLearning/README.md | 48 +- .../es/8-Reinforcement/2-Gym/README.md | 84 ++-- .../es/9-Real-World/1-Applications/README.md | 78 ++-- .../2-Debugging-ML-Models/README.md | 70 +-- translations/es/README.md | 127 +++--- .../fa/1-Introduction/1-intro-to-ML/README.md | 54 +-- .../1-Introduction/2-history-of-ML/README.md | 96 ++-- .../fa/1-Introduction/3-fairness/README.md | 127 +++--- .../4-techniques-of-ML/README.md | 80 ++-- .../fa/2-Regression/1-Tools/README.md | 130 +++--- translations/fa/2-Regression/2-Data/README.md | 108 ++--- .../fa/2-Regression/3-Linear/README.md | 110 ++--- .../fa/2-Regression/4-Logistic/README.md | 112 ++--- translations/fa/3-Web-App/1-Web-App/README.md | 76 ++-- .../4-Classification/1-Introduction/README.md | 80 ++-- .../2-Classifiers-1/README.md | 82 ++-- .../3-Classifiers-2/README.md | 74 ++-- .../fa/4-Classification/4-Applied/README.md | 78 ++-- .../fa/5-Clustering/1-Visualize/README.md | 100 ++--- .../fa/5-Clustering/2-K-Means/README.md | 62 +-- .../fa/6-NLP/1-Introduction-to-NLP/README.md | 76 ++-- translations/fa/6-NLP/2-Tasks/README.md | 94 ++-- .../6-NLP/3-Translation-Sentiment/README.md | 130 +++--- .../fa/6-NLP/4-Hotel-Reviews-1/README.md | 159 ++++--- .../fa/6-NLP/5-Hotel-Reviews-2/README.md | 135 +++--- .../fa/7-TimeSeries/1-Introduction/README.md | 56 +-- .../fa/7-TimeSeries/2-ARIMA/README.md | 133 +++--- translations/fa/7-TimeSeries/3-SVR/README.md | 64 +-- .../fa/8-Reinforcement/1-QLearning/README.md | 60 +-- .../fa/8-Reinforcement/2-Gym/README.md | 130 +++--- .../fa/9-Real-World/1-Applications/README.md | 92 ++-- .../2-Debugging-ML-Models/README.md | 92 ++-- translations/fa/README.md | 122 ++--- .../fi/1-Introduction/1-intro-to-ML/README.md | 159 +++++++ .../1-intro-to-ML/assignment.md | 23 + .../1-Introduction/2-history-of-ML/README.md | 164 +++++++ .../2-history-of-ML/assignment.md | 25 ++ .../fi/1-Introduction/3-fairness/README.md | 152 +++++++ .../1-Introduction/3-fairness/assignment.md | 25 ++ .../4-techniques-of-ML/README.md | 132 ++++++ .../4-techniques-of-ML/assignment.md | 25 ++ translations/fi/1-Introduction/README.md | 37 ++ .../fi/2-Regression/1-Tools/README.md | 239 ++++++++++ .../fi/2-Regression/1-Tools/assignment.md | 27 ++ .../1-Tools/solution/Julia/README.md | 15 + translations/fi/2-Regression/2-Data/README.md | 226 ++++++++++ .../fi/2-Regression/2-Data/assignment.md | 23 + .../2-Data/solution/Julia/README.md | 15 + .../fi/2-Regression/3-Linear/README.md | 380 ++++++++++++++++ .../fi/2-Regression/3-Linear/assignment.md | 25 ++ .../3-Linear/solution/Julia/README.md | 15 + .../fi/2-Regression/4-Logistic/README.md | 412 +++++++++++++++++ .../fi/2-Regression/4-Logistic/assignment.md | 25 ++ .../4-Logistic/solution/Julia/README.md | 15 + translations/fi/2-Regression/README.md | 54 +++ translations/fi/3-Web-App/1-Web-App/README.md | 359 +++++++++++++++ .../fi/3-Web-App/1-Web-App/assignment.md | 25 ++ translations/fi/3-Web-App/README.md | 35 ++ .../4-Classification/1-Introduction/README.md | 313 +++++++++++++ .../1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../2-Classifiers-1/README.md | 253 +++++++++++ .../2-Classifiers-1/assignment.md | 23 + .../2-Classifiers-1/solution/Julia/README.md | 15 + .../3-Classifiers-2/README.md | 249 +++++++++++ .../3-Classifiers-2/assignment.md | 25 ++ .../3-Classifiers-2/solution/Julia/README.md | 15 + .../fi/4-Classification/4-Applied/README.md | 329 ++++++++++++++ .../4-Classification/4-Applied/assignment.md | 25 ++ translations/fi/4-Classification/README.md | 41 ++ .../fi/5-Clustering/1-Visualize/README.md | 347 +++++++++++++++ .../fi/5-Clustering/1-Visualize/assignment.md | 25 ++ .../1-Visualize/solution/Julia/README.md | 15 + .../fi/5-Clustering/2-K-Means/README.md | 261 +++++++++++ .../fi/5-Clustering/2-K-Means/assignment.md | 25 ++ .../2-K-Means/solution/Julia/README.md | 15 + translations/fi/5-Clustering/README.md | 42 ++ .../fi/6-NLP/1-Introduction-to-NLP/README.md | 179 ++++++++ .../6-NLP/1-Introduction-to-NLP/assignment.md | 25 ++ translations/fi/6-NLP/2-Tasks/README.md | 228 ++++++++++ translations/fi/6-NLP/2-Tasks/assignment.md | 25 ++ .../6-NLP/3-Translation-Sentiment/README.md | 200 +++++++++ .../3-Translation-Sentiment/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../solution/R/README.md | 15 + .../fi/6-NLP/4-Hotel-Reviews-1/README.md | 380 ++++++++++++++++ .../fi/6-NLP/4-Hotel-Reviews-1/assignment.md | 19 + .../solution/Julia/README.md | 15 + .../4-Hotel-Reviews-1/solution/R/README.md | 15 + .../fi/6-NLP/5-Hotel-Reviews-2/README.md | 389 ++++++++++++++++ .../fi/6-NLP/5-Hotel-Reviews-2/assignment.md | 25 ++ .../solution/Julia/README.md | 15 + .../5-Hotel-Reviews-2/solution/R/README.md | 15 + translations/fi/6-NLP/README.md | 38 ++ translations/fi/6-NLP/data/README.md | 15 + .../fi/7-TimeSeries/1-Introduction/README.md | 199 +++++++++ .../7-TimeSeries/1-Introduction/assignment.md | 25 ++ .../1-Introduction/solution/Julia/README.md | 15 + .../1-Introduction/solution/R/README.md | 15 + .../fi/7-TimeSeries/2-ARIMA/README.md | 407 +++++++++++++++++ .../fi/7-TimeSeries/2-ARIMA/assignment.md | 25 ++ .../2-ARIMA/solution/Julia/README.md | 15 + .../7-TimeSeries/2-ARIMA/solution/R/README.md | 15 + translations/fi/7-TimeSeries/3-SVR/README.md | 393 +++++++++++++++++ .../fi/7-TimeSeries/3-SVR/assignment.md | 29 ++ translations/fi/7-TimeSeries/README.md | 37 ++ .../fi/8-Reinforcement/1-QLearning/README.md | 256 +++++++++++ .../8-Reinforcement/1-QLearning/assignment.md | 41 ++ .../1-QLearning/solution/Julia/README.md | 15 + .../1-QLearning/solution/R/README.md | 15 + .../fi/8-Reinforcement/2-Gym/README.md | 333 ++++++++++++++ .../fi/8-Reinforcement/2-Gym/assignment.md | 57 +++ .../2-Gym/solution/Julia/README.md | 15 + .../2-Gym/solution/R/README.md | 15 + translations/fi/8-Reinforcement/README.md | 67 +++ .../fi/9-Real-World/1-Applications/README.md | 159 +++++++ .../9-Real-World/1-Applications/assignment.md | 27 ++ .../2-Debugging-ML-Models/README.md | 167 +++++++ .../2-Debugging-ML-Models/assignment.md | 25 ++ translations/fi/9-Real-World/README.md | 32 ++ translations/fi/CODE_OF_CONDUCT.md | 23 + translations/fi/CONTRIBUTING.md | 25 ++ translations/fi/README.md | 178 ++++++++ translations/fi/SECURITY.md | 51 +++ translations/fi/SUPPORT.md | 26 ++ translations/fi/docs/_sidebar.md | 57 +++ translations/fi/for-teachers.md | 37 ++ translations/fi/quiz-app/README.md | 126 ++++++ translations/fi/sketchnotes/LICENSE.md | 118 +++++ translations/fi/sketchnotes/README.md | 21 + .../fr/1-Introduction/1-intro-to-ML/README.md | 62 +-- .../1-Introduction/2-history-of-ML/README.md | 52 +-- .../fr/1-Introduction/3-fairness/README.md | 90 ++-- .../4-techniques-of-ML/README.md | 80 ++-- .../fr/2-Regression/1-Tools/README.md | 44 +- translations/fr/2-Regression/2-Data/README.md | 34 +- .../fr/2-Regression/3-Linear/README.md | 153 +++---- .../fr/2-Regression/4-Logistic/README.md | 103 ++--- translations/fr/3-Web-App/1-Web-App/README.md | 98 ++-- .../4-Classification/1-Introduction/README.md | 72 +-- .../2-Classifiers-1/README.md | 54 +-- .../3-Classifiers-2/README.md | 36 +- .../fr/4-Classification/4-Applied/README.md | 42 +- .../fr/5-Clustering/1-Visualize/README.md | 130 +++--- .../fr/5-Clustering/2-K-Means/README.md | 42 +- .../fr/6-NLP/1-Introduction-to-NLP/README.md | 72 +-- translations/fr/6-NLP/2-Tasks/README.md | 126 +++--- .../6-NLP/3-Translation-Sentiment/README.md | 58 +-- .../fr/6-NLP/4-Hotel-Reviews-1/README.md | 205 +++++---- .../fr/6-NLP/5-Hotel-Reviews-2/README.md | 100 ++--- .../fr/7-TimeSeries/1-Introduction/README.md | 38 +- .../fr/7-TimeSeries/2-ARIMA/README.md | 96 ++-- translations/fr/7-TimeSeries/3-SVR/README.md | 58 +-- .../fr/8-Reinforcement/1-QLearning/README.md | 54 +-- .../fr/8-Reinforcement/2-Gym/README.md | 42 +- .../fr/9-Real-World/1-Applications/README.md | 44 +- .../2-Debugging-ML-Models/README.md | 52 +-- translations/fr/README.md | 95 ++-- 681 files changed, 55956 insertions(+), 9173 deletions(-) create mode 100644 translations/bg/1-Introduction/1-intro-to-ML/README.md create mode 100644 translations/bg/1-Introduction/1-intro-to-ML/assignment.md create mode 100644 translations/bg/1-Introduction/2-history-of-ML/README.md create mode 100644 translations/bg/1-Introduction/2-history-of-ML/assignment.md create mode 100644 translations/bg/1-Introduction/3-fairness/README.md create mode 100644 translations/bg/1-Introduction/3-fairness/assignment.md create mode 100644 translations/bg/1-Introduction/4-techniques-of-ML/README.md create mode 100644 translations/bg/1-Introduction/4-techniques-of-ML/assignment.md create mode 100644 translations/bg/1-Introduction/README.md create mode 100644 translations/bg/2-Regression/1-Tools/README.md create mode 100644 translations/bg/2-Regression/1-Tools/assignment.md create mode 100644 translations/bg/2-Regression/1-Tools/solution/Julia/README.md create mode 100644 translations/bg/2-Regression/2-Data/README.md create mode 100644 translations/bg/2-Regression/2-Data/assignment.md create mode 100644 translations/bg/2-Regression/2-Data/solution/Julia/README.md create mode 100644 translations/bg/2-Regression/3-Linear/README.md create mode 100644 translations/bg/2-Regression/3-Linear/assignment.md create mode 100644 translations/bg/2-Regression/3-Linear/solution/Julia/README.md create mode 100644 translations/bg/2-Regression/4-Logistic/README.md create mode 100644 translations/bg/2-Regression/4-Logistic/assignment.md create mode 100644 translations/bg/2-Regression/4-Logistic/solution/Julia/README.md create mode 100644 translations/bg/2-Regression/README.md create mode 100644 translations/bg/3-Web-App/1-Web-App/README.md create mode 100644 translations/bg/3-Web-App/1-Web-App/assignment.md create mode 100644 translations/bg/3-Web-App/README.md create mode 100644 translations/bg/4-Classification/1-Introduction/README.md create mode 100644 translations/bg/4-Classification/1-Introduction/assignment.md create mode 100644 translations/bg/4-Classification/1-Introduction/solution/Julia/README.md create mode 100644 translations/bg/4-Classification/2-Classifiers-1/README.md create mode 100644 translations/bg/4-Classification/2-Classifiers-1/assignment.md create mode 100644 translations/bg/4-Classification/2-Classifiers-1/solution/Julia/README.md create mode 100644 translations/bg/4-Classification/3-Classifiers-2/README.md create mode 100644 translations/bg/4-Classification/3-Classifiers-2/assignment.md create mode 100644 translations/bg/4-Classification/3-Classifiers-2/solution/Julia/README.md create mode 100644 translations/bg/4-Classification/4-Applied/README.md create mode 100644 translations/bg/4-Classification/4-Applied/assignment.md create mode 100644 translations/bg/4-Classification/README.md create mode 100644 translations/bg/5-Clustering/1-Visualize/README.md create mode 100644 translations/bg/5-Clustering/1-Visualize/assignment.md create mode 100644 translations/bg/5-Clustering/1-Visualize/solution/Julia/README.md create mode 100644 translations/bg/5-Clustering/2-K-Means/README.md create mode 100644 translations/bg/5-Clustering/2-K-Means/assignment.md create mode 100644 translations/bg/5-Clustering/2-K-Means/solution/Julia/README.md create mode 100644 translations/bg/5-Clustering/README.md create mode 100644 translations/bg/6-NLP/1-Introduction-to-NLP/README.md create mode 100644 translations/bg/6-NLP/1-Introduction-to-NLP/assignment.md create mode 100644 translations/bg/6-NLP/2-Tasks/README.md create mode 100644 translations/bg/6-NLP/2-Tasks/assignment.md create mode 100644 translations/bg/6-NLP/3-Translation-Sentiment/README.md create mode 100644 translations/bg/6-NLP/3-Translation-Sentiment/assignment.md create mode 100644 translations/bg/6-NLP/3-Translation-Sentiment/solution/Julia/README.md create mode 100644 translations/bg/6-NLP/3-Translation-Sentiment/solution/R/README.md create mode 100644 translations/bg/6-NLP/4-Hotel-Reviews-1/README.md create mode 100644 translations/bg/6-NLP/4-Hotel-Reviews-1/assignment.md create mode 100644 translations/bg/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md create mode 100644 translations/bg/6-NLP/4-Hotel-Reviews-1/solution/R/README.md create mode 100644 translations/bg/6-NLP/5-Hotel-Reviews-2/README.md create mode 100644 translations/bg/6-NLP/5-Hotel-Reviews-2/assignment.md create mode 100644 translations/bg/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md create mode 100644 translations/bg/6-NLP/5-Hotel-Reviews-2/solution/R/README.md create mode 100644 translations/bg/6-NLP/README.md create mode 100644 translations/bg/6-NLP/data/README.md create mode 100644 translations/bg/7-TimeSeries/1-Introduction/README.md create mode 100644 translations/bg/7-TimeSeries/1-Introduction/assignment.md create mode 100644 translations/bg/7-TimeSeries/1-Introduction/solution/Julia/README.md create mode 100644 translations/bg/7-TimeSeries/1-Introduction/solution/R/README.md create mode 100644 translations/bg/7-TimeSeries/2-ARIMA/README.md create mode 100644 translations/bg/7-TimeSeries/2-ARIMA/assignment.md create mode 100644 translations/bg/7-TimeSeries/2-ARIMA/solution/Julia/README.md create mode 100644 translations/bg/7-TimeSeries/2-ARIMA/solution/R/README.md create mode 100644 translations/bg/7-TimeSeries/3-SVR/README.md create mode 100644 translations/bg/7-TimeSeries/3-SVR/assignment.md create mode 100644 translations/bg/7-TimeSeries/README.md create mode 100644 translations/bg/8-Reinforcement/1-QLearning/README.md create mode 100644 translations/bg/8-Reinforcement/1-QLearning/assignment.md create mode 100644 translations/bg/8-Reinforcement/1-QLearning/solution/Julia/README.md create mode 100644 translations/bg/8-Reinforcement/1-QLearning/solution/R/README.md create mode 100644 translations/bg/8-Reinforcement/2-Gym/README.md create mode 100644 translations/bg/8-Reinforcement/2-Gym/assignment.md create mode 100644 translations/bg/8-Reinforcement/2-Gym/solution/Julia/README.md create mode 100644 translations/bg/8-Reinforcement/2-Gym/solution/R/README.md create mode 100644 translations/bg/8-Reinforcement/README.md create mode 100644 translations/bg/9-Real-World/1-Applications/README.md create mode 100644 translations/bg/9-Real-World/1-Applications/assignment.md create mode 100644 translations/bg/9-Real-World/2-Debugging-ML-Models/README.md create mode 100644 translations/bg/9-Real-World/2-Debugging-ML-Models/assignment.md create mode 100644 translations/bg/9-Real-World/README.md create mode 100644 translations/bg/CODE_OF_CONDUCT.md create mode 100644 translations/bg/CONTRIBUTING.md create mode 100644 translations/bg/README.md create mode 100644 translations/bg/SECURITY.md create mode 100644 translations/bg/SUPPORT.md create mode 100644 translations/bg/docs/_sidebar.md create mode 100644 translations/bg/for-teachers.md create mode 100644 translations/bg/quiz-app/README.md create mode 100644 translations/bg/sketchnotes/LICENSE.md create mode 100644 translations/bg/sketchnotes/README.md create mode 100644 translations/cs/1-Introduction/1-intro-to-ML/README.md create mode 100644 translations/cs/1-Introduction/1-intro-to-ML/assignment.md create mode 100644 translations/cs/1-Introduction/2-history-of-ML/README.md create mode 100644 translations/cs/1-Introduction/2-history-of-ML/assignment.md create mode 100644 translations/cs/1-Introduction/3-fairness/README.md create mode 100644 translations/cs/1-Introduction/3-fairness/assignment.md create mode 100644 translations/cs/1-Introduction/4-techniques-of-ML/README.md create mode 100644 translations/cs/1-Introduction/4-techniques-of-ML/assignment.md create mode 100644 translations/cs/1-Introduction/README.md create mode 100644 translations/cs/2-Regression/1-Tools/README.md create mode 100644 translations/cs/2-Regression/1-Tools/assignment.md create mode 100644 translations/cs/2-Regression/1-Tools/solution/Julia/README.md create mode 100644 translations/cs/2-Regression/2-Data/README.md create mode 100644 translations/cs/2-Regression/2-Data/assignment.md create mode 100644 translations/cs/2-Regression/2-Data/solution/Julia/README.md create mode 100644 translations/cs/2-Regression/3-Linear/README.md create mode 100644 translations/cs/2-Regression/3-Linear/assignment.md create mode 100644 translations/cs/2-Regression/3-Linear/solution/Julia/README.md create mode 100644 translations/cs/2-Regression/4-Logistic/README.md create mode 100644 translations/cs/2-Regression/4-Logistic/assignment.md create mode 100644 translations/cs/2-Regression/4-Logistic/solution/Julia/README.md create mode 100644 translations/cs/2-Regression/README.md create mode 100644 translations/cs/3-Web-App/1-Web-App/README.md create mode 100644 translations/cs/3-Web-App/1-Web-App/assignment.md create mode 100644 translations/cs/3-Web-App/README.md create mode 100644 translations/cs/4-Classification/1-Introduction/README.md create mode 100644 translations/cs/4-Classification/1-Introduction/assignment.md create mode 100644 translations/cs/4-Classification/1-Introduction/solution/Julia/README.md create mode 100644 translations/cs/4-Classification/2-Classifiers-1/README.md create mode 100644 translations/cs/4-Classification/2-Classifiers-1/assignment.md create mode 100644 translations/cs/4-Classification/2-Classifiers-1/solution/Julia/README.md create mode 100644 translations/cs/4-Classification/3-Classifiers-2/README.md create mode 100644 translations/cs/4-Classification/3-Classifiers-2/assignment.md create mode 100644 translations/cs/4-Classification/3-Classifiers-2/solution/Julia/README.md create mode 100644 translations/cs/4-Classification/4-Applied/README.md create mode 100644 translations/cs/4-Classification/4-Applied/assignment.md create mode 100644 translations/cs/4-Classification/README.md create mode 100644 translations/cs/5-Clustering/1-Visualize/README.md create mode 100644 translations/cs/5-Clustering/1-Visualize/assignment.md create mode 100644 translations/cs/5-Clustering/1-Visualize/solution/Julia/README.md create mode 100644 translations/cs/5-Clustering/2-K-Means/README.md create mode 100644 translations/cs/5-Clustering/2-K-Means/assignment.md create mode 100644 translations/cs/5-Clustering/2-K-Means/solution/Julia/README.md create mode 100644 translations/cs/5-Clustering/README.md create mode 100644 translations/cs/6-NLP/1-Introduction-to-NLP/README.md create mode 100644 translations/cs/6-NLP/1-Introduction-to-NLP/assignment.md create mode 100644 translations/cs/6-NLP/2-Tasks/README.md create mode 100644 translations/cs/6-NLP/2-Tasks/assignment.md create mode 100644 translations/cs/6-NLP/3-Translation-Sentiment/README.md create mode 100644 translations/cs/6-NLP/3-Translation-Sentiment/assignment.md create mode 100644 translations/cs/6-NLP/3-Translation-Sentiment/solution/Julia/README.md create mode 100644 translations/cs/6-NLP/3-Translation-Sentiment/solution/R/README.md create mode 100644 translations/cs/6-NLP/4-Hotel-Reviews-1/README.md create mode 100644 translations/cs/6-NLP/4-Hotel-Reviews-1/assignment.md create mode 100644 translations/cs/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md create mode 100644 translations/cs/6-NLP/4-Hotel-Reviews-1/solution/R/README.md create mode 100644 translations/cs/6-NLP/5-Hotel-Reviews-2/README.md create mode 100644 translations/cs/6-NLP/5-Hotel-Reviews-2/assignment.md create mode 100644 translations/cs/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md create mode 100644 translations/cs/6-NLP/5-Hotel-Reviews-2/solution/R/README.md create mode 100644 translations/cs/6-NLP/README.md create mode 100644 translations/cs/6-NLP/data/README.md create mode 100644 translations/cs/7-TimeSeries/1-Introduction/README.md create mode 100644 translations/cs/7-TimeSeries/1-Introduction/assignment.md create mode 100644 translations/cs/7-TimeSeries/1-Introduction/solution/Julia/README.md create mode 100644 translations/cs/7-TimeSeries/1-Introduction/solution/R/README.md create mode 100644 translations/cs/7-TimeSeries/2-ARIMA/README.md create mode 100644 translations/cs/7-TimeSeries/2-ARIMA/assignment.md create mode 100644 translations/cs/7-TimeSeries/2-ARIMA/solution/Julia/README.md create mode 100644 translations/cs/7-TimeSeries/2-ARIMA/solution/R/README.md create mode 100644 translations/cs/7-TimeSeries/3-SVR/README.md create mode 100644 translations/cs/7-TimeSeries/3-SVR/assignment.md create mode 100644 translations/cs/7-TimeSeries/README.md create mode 100644 translations/cs/8-Reinforcement/1-QLearning/README.md create mode 100644 translations/cs/8-Reinforcement/1-QLearning/assignment.md create mode 100644 translations/cs/8-Reinforcement/1-QLearning/solution/Julia/README.md create mode 100644 translations/cs/8-Reinforcement/1-QLearning/solution/R/README.md create mode 100644 translations/cs/8-Reinforcement/2-Gym/README.md create mode 100644 translations/cs/8-Reinforcement/2-Gym/assignment.md create mode 100644 translations/cs/8-Reinforcement/2-Gym/solution/Julia/README.md create mode 100644 translations/cs/8-Reinforcement/2-Gym/solution/R/README.md create mode 100644 translations/cs/8-Reinforcement/README.md create mode 100644 translations/cs/9-Real-World/1-Applications/README.md create mode 100644 translations/cs/9-Real-World/1-Applications/assignment.md create mode 100644 translations/cs/9-Real-World/2-Debugging-ML-Models/README.md create mode 100644 translations/cs/9-Real-World/2-Debugging-ML-Models/assignment.md create mode 100644 translations/cs/9-Real-World/README.md create mode 100644 translations/cs/CODE_OF_CONDUCT.md create mode 100644 translations/cs/CONTRIBUTING.md create mode 100644 translations/cs/README.md create mode 100644 translations/cs/SECURITY.md create mode 100644 translations/cs/SUPPORT.md create mode 100644 translations/cs/docs/_sidebar.md create mode 100644 translations/cs/for-teachers.md create mode 100644 translations/cs/quiz-app/README.md create mode 100644 translations/cs/sketchnotes/LICENSE.md create mode 100644 translations/cs/sketchnotes/README.md create mode 100644 translations/da/1-Introduction/1-intro-to-ML/README.md create mode 100644 translations/da/1-Introduction/1-intro-to-ML/assignment.md create mode 100644 translations/da/1-Introduction/2-history-of-ML/README.md create mode 100644 translations/da/1-Introduction/2-history-of-ML/assignment.md create mode 100644 translations/da/1-Introduction/3-fairness/README.md create mode 100644 translations/da/1-Introduction/3-fairness/assignment.md create mode 100644 translations/da/1-Introduction/4-techniques-of-ML/README.md create mode 100644 translations/da/1-Introduction/4-techniques-of-ML/assignment.md create mode 100644 translations/da/1-Introduction/README.md create mode 100644 translations/da/2-Regression/1-Tools/README.md create mode 100644 translations/da/2-Regression/1-Tools/assignment.md create mode 100644 translations/da/2-Regression/1-Tools/solution/Julia/README.md create mode 100644 translations/da/2-Regression/2-Data/README.md create mode 100644 translations/da/2-Regression/2-Data/assignment.md create mode 100644 translations/da/2-Regression/2-Data/solution/Julia/README.md create mode 100644 translations/da/2-Regression/3-Linear/README.md create mode 100644 translations/da/2-Regression/3-Linear/assignment.md create mode 100644 translations/da/2-Regression/3-Linear/solution/Julia/README.md create mode 100644 translations/da/2-Regression/4-Logistic/README.md create mode 100644 translations/da/2-Regression/4-Logistic/assignment.md create mode 100644 translations/da/2-Regression/4-Logistic/solution/Julia/README.md create mode 100644 translations/da/2-Regression/README.md create mode 100644 translations/da/3-Web-App/1-Web-App/README.md create mode 100644 translations/da/3-Web-App/1-Web-App/assignment.md create mode 100644 translations/da/3-Web-App/README.md create mode 100644 translations/da/4-Classification/1-Introduction/README.md create mode 100644 translations/da/4-Classification/1-Introduction/assignment.md create mode 100644 translations/da/4-Classification/1-Introduction/solution/Julia/README.md create mode 100644 translations/da/4-Classification/2-Classifiers-1/README.md create mode 100644 translations/da/4-Classification/2-Classifiers-1/assignment.md create mode 100644 translations/da/4-Classification/2-Classifiers-1/solution/Julia/README.md create mode 100644 translations/da/4-Classification/3-Classifiers-2/README.md create mode 100644 translations/da/4-Classification/3-Classifiers-2/assignment.md create mode 100644 translations/da/4-Classification/3-Classifiers-2/solution/Julia/README.md create mode 100644 translations/da/4-Classification/4-Applied/README.md create mode 100644 translations/da/4-Classification/4-Applied/assignment.md create mode 100644 translations/da/4-Classification/README.md create mode 100644 translations/da/5-Clustering/1-Visualize/README.md create mode 100644 translations/da/5-Clustering/1-Visualize/assignment.md create mode 100644 translations/da/5-Clustering/1-Visualize/solution/Julia/README.md create mode 100644 translations/da/5-Clustering/2-K-Means/README.md create mode 100644 translations/da/5-Clustering/2-K-Means/assignment.md create mode 100644 translations/da/5-Clustering/2-K-Means/solution/Julia/README.md create mode 100644 translations/da/5-Clustering/README.md create mode 100644 translations/da/6-NLP/1-Introduction-to-NLP/README.md create mode 100644 translations/da/6-NLP/1-Introduction-to-NLP/assignment.md create mode 100644 translations/da/6-NLP/2-Tasks/README.md create mode 100644 translations/da/6-NLP/2-Tasks/assignment.md create mode 100644 translations/da/6-NLP/3-Translation-Sentiment/README.md create mode 100644 translations/da/6-NLP/3-Translation-Sentiment/assignment.md create mode 100644 translations/da/6-NLP/3-Translation-Sentiment/solution/Julia/README.md create mode 100644 translations/da/6-NLP/3-Translation-Sentiment/solution/R/README.md create mode 100644 translations/da/6-NLP/4-Hotel-Reviews-1/README.md create mode 100644 translations/da/6-NLP/4-Hotel-Reviews-1/assignment.md create mode 100644 translations/da/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md create mode 100644 translations/da/6-NLP/4-Hotel-Reviews-1/solution/R/README.md create mode 100644 translations/da/6-NLP/5-Hotel-Reviews-2/README.md create mode 100644 translations/da/6-NLP/5-Hotel-Reviews-2/assignment.md create mode 100644 translations/da/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md create mode 100644 translations/da/6-NLP/5-Hotel-Reviews-2/solution/R/README.md create mode 100644 translations/da/6-NLP/README.md create mode 100644 translations/da/6-NLP/data/README.md create mode 100644 translations/da/7-TimeSeries/1-Introduction/README.md create mode 100644 translations/da/7-TimeSeries/1-Introduction/assignment.md create mode 100644 translations/da/7-TimeSeries/1-Introduction/solution/Julia/README.md create mode 100644 translations/da/7-TimeSeries/1-Introduction/solution/R/README.md create mode 100644 translations/da/7-TimeSeries/2-ARIMA/README.md create mode 100644 translations/da/7-TimeSeries/2-ARIMA/assignment.md create mode 100644 translations/da/7-TimeSeries/2-ARIMA/solution/Julia/README.md create mode 100644 translations/da/7-TimeSeries/2-ARIMA/solution/R/README.md create mode 100644 translations/da/7-TimeSeries/3-SVR/README.md create mode 100644 translations/da/7-TimeSeries/3-SVR/assignment.md create mode 100644 translations/da/7-TimeSeries/README.md create mode 100644 translations/da/8-Reinforcement/1-QLearning/README.md create mode 100644 translations/da/8-Reinforcement/1-QLearning/assignment.md create mode 100644 translations/da/8-Reinforcement/1-QLearning/solution/Julia/README.md create mode 100644 translations/da/8-Reinforcement/1-QLearning/solution/R/README.md create mode 100644 translations/da/8-Reinforcement/2-Gym/README.md create mode 100644 translations/da/8-Reinforcement/2-Gym/assignment.md create mode 100644 translations/da/8-Reinforcement/2-Gym/solution/Julia/README.md create mode 100644 translations/da/8-Reinforcement/2-Gym/solution/R/README.md create mode 100644 translations/da/8-Reinforcement/README.md create mode 100644 translations/da/9-Real-World/1-Applications/README.md create mode 100644 translations/da/9-Real-World/1-Applications/assignment.md create mode 100644 translations/da/9-Real-World/2-Debugging-ML-Models/README.md create mode 100644 translations/da/9-Real-World/2-Debugging-ML-Models/assignment.md create mode 100644 translations/da/9-Real-World/README.md create mode 100644 translations/da/CODE_OF_CONDUCT.md create mode 100644 translations/da/CONTRIBUTING.md create mode 100644 translations/da/README.md create mode 100644 translations/da/SECURITY.md create mode 100644 translations/da/SUPPORT.md create mode 100644 translations/da/docs/_sidebar.md create mode 100644 translations/da/for-teachers.md create mode 100644 translations/da/quiz-app/README.md create mode 100644 translations/da/sketchnotes/LICENSE.md create mode 100644 translations/da/sketchnotes/README.md create mode 100644 translations/el/1-Introduction/1-intro-to-ML/README.md create mode 100644 translations/el/1-Introduction/1-intro-to-ML/assignment.md create mode 100644 translations/el/1-Introduction/2-history-of-ML/README.md create mode 100644 translations/el/1-Introduction/2-history-of-ML/assignment.md create mode 100644 translations/el/1-Introduction/3-fairness/README.md create mode 100644 translations/el/1-Introduction/3-fairness/assignment.md create mode 100644 translations/el/1-Introduction/4-techniques-of-ML/README.md create mode 100644 translations/el/1-Introduction/4-techniques-of-ML/assignment.md create mode 100644 translations/el/1-Introduction/README.md create mode 100644 translations/el/2-Regression/1-Tools/README.md create mode 100644 translations/el/2-Regression/1-Tools/assignment.md create mode 100644 translations/el/2-Regression/1-Tools/solution/Julia/README.md create mode 100644 translations/el/2-Regression/2-Data/README.md create mode 100644 translations/el/2-Regression/2-Data/assignment.md create mode 100644 translations/el/2-Regression/2-Data/solution/Julia/README.md create mode 100644 translations/el/2-Regression/3-Linear/README.md create mode 100644 translations/el/2-Regression/3-Linear/assignment.md create mode 100644 translations/el/2-Regression/3-Linear/solution/Julia/README.md create mode 100644 translations/el/2-Regression/4-Logistic/README.md create mode 100644 translations/el/2-Regression/4-Logistic/assignment.md create mode 100644 translations/el/2-Regression/4-Logistic/solution/Julia/README.md create mode 100644 translations/el/2-Regression/README.md create mode 100644 translations/el/3-Web-App/1-Web-App/README.md create mode 100644 translations/el/3-Web-App/1-Web-App/assignment.md create mode 100644 translations/el/3-Web-App/README.md create mode 100644 translations/el/4-Classification/1-Introduction/README.md create mode 100644 translations/el/4-Classification/1-Introduction/assignment.md create mode 100644 translations/el/4-Classification/1-Introduction/solution/Julia/README.md create mode 100644 translations/el/4-Classification/2-Classifiers-1/README.md create mode 100644 translations/el/4-Classification/2-Classifiers-1/assignment.md create mode 100644 translations/el/4-Classification/2-Classifiers-1/solution/Julia/README.md create mode 100644 translations/el/4-Classification/3-Classifiers-2/README.md create mode 100644 translations/el/4-Classification/3-Classifiers-2/assignment.md create mode 100644 translations/el/4-Classification/3-Classifiers-2/solution/Julia/README.md create mode 100644 translations/el/4-Classification/4-Applied/README.md create mode 100644 translations/el/4-Classification/4-Applied/assignment.md create mode 100644 translations/el/4-Classification/README.md create mode 100644 translations/el/5-Clustering/1-Visualize/README.md create mode 100644 translations/el/5-Clustering/1-Visualize/assignment.md create mode 100644 translations/el/5-Clustering/1-Visualize/solution/Julia/README.md create mode 100644 translations/el/5-Clustering/2-K-Means/README.md create mode 100644 translations/el/5-Clustering/2-K-Means/assignment.md create mode 100644 translations/el/5-Clustering/2-K-Means/solution/Julia/README.md create mode 100644 translations/el/5-Clustering/README.md create mode 100644 translations/el/6-NLP/1-Introduction-to-NLP/README.md create mode 100644 translations/el/6-NLP/1-Introduction-to-NLP/assignment.md create mode 100644 translations/el/6-NLP/2-Tasks/README.md create mode 100644 translations/el/6-NLP/2-Tasks/assignment.md create mode 100644 translations/el/6-NLP/3-Translation-Sentiment/README.md create mode 100644 translations/el/6-NLP/3-Translation-Sentiment/assignment.md create mode 100644 translations/el/6-NLP/3-Translation-Sentiment/solution/Julia/README.md create mode 100644 translations/el/6-NLP/3-Translation-Sentiment/solution/R/README.md create mode 100644 translations/el/6-NLP/4-Hotel-Reviews-1/README.md create mode 100644 translations/el/6-NLP/4-Hotel-Reviews-1/assignment.md create mode 100644 translations/el/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md create mode 100644 translations/el/6-NLP/4-Hotel-Reviews-1/solution/R/README.md create mode 100644 translations/el/6-NLP/5-Hotel-Reviews-2/README.md create mode 100644 translations/el/6-NLP/5-Hotel-Reviews-2/assignment.md create mode 100644 translations/el/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md create mode 100644 translations/el/6-NLP/5-Hotel-Reviews-2/solution/R/README.md create mode 100644 translations/el/6-NLP/README.md create mode 100644 translations/el/6-NLP/data/README.md create mode 100644 translations/el/7-TimeSeries/1-Introduction/README.md create mode 100644 translations/el/7-TimeSeries/1-Introduction/assignment.md create mode 100644 translations/el/7-TimeSeries/1-Introduction/solution/Julia/README.md create mode 100644 translations/el/7-TimeSeries/1-Introduction/solution/R/README.md create mode 100644 translations/el/7-TimeSeries/2-ARIMA/README.md create mode 100644 translations/el/7-TimeSeries/2-ARIMA/assignment.md create mode 100644 translations/el/7-TimeSeries/2-ARIMA/solution/Julia/README.md create mode 100644 translations/el/7-TimeSeries/2-ARIMA/solution/R/README.md create mode 100644 translations/el/7-TimeSeries/3-SVR/README.md create mode 100644 translations/el/7-TimeSeries/3-SVR/assignment.md create mode 100644 translations/el/7-TimeSeries/README.md create mode 100644 translations/el/8-Reinforcement/1-QLearning/README.md create mode 100644 translations/el/8-Reinforcement/1-QLearning/assignment.md create mode 100644 translations/el/8-Reinforcement/1-QLearning/solution/Julia/README.md create mode 100644 translations/el/8-Reinforcement/1-QLearning/solution/R/README.md create mode 100644 translations/el/8-Reinforcement/2-Gym/README.md create mode 100644 translations/el/8-Reinforcement/2-Gym/assignment.md create mode 100644 translations/el/8-Reinforcement/2-Gym/solution/Julia/README.md create mode 100644 translations/el/8-Reinforcement/2-Gym/solution/R/README.md create mode 100644 translations/el/8-Reinforcement/README.md create mode 100644 translations/el/9-Real-World/1-Applications/README.md create mode 100644 translations/el/9-Real-World/1-Applications/assignment.md create mode 100644 translations/el/9-Real-World/2-Debugging-ML-Models/README.md create mode 100644 translations/el/9-Real-World/2-Debugging-ML-Models/assignment.md create mode 100644 translations/el/9-Real-World/README.md create mode 100644 translations/el/CODE_OF_CONDUCT.md create mode 100644 translations/el/CONTRIBUTING.md create mode 100644 translations/el/README.md create mode 100644 translations/el/SECURITY.md create mode 100644 translations/el/SUPPORT.md create mode 100644 translations/el/docs/_sidebar.md create mode 100644 translations/el/for-teachers.md create mode 100644 translations/el/quiz-app/README.md create mode 100644 translations/el/sketchnotes/LICENSE.md create mode 100644 translations/el/sketchnotes/README.md create mode 100644 translations/fi/1-Introduction/1-intro-to-ML/README.md create mode 100644 translations/fi/1-Introduction/1-intro-to-ML/assignment.md create mode 100644 translations/fi/1-Introduction/2-history-of-ML/README.md create mode 100644 translations/fi/1-Introduction/2-history-of-ML/assignment.md create mode 100644 translations/fi/1-Introduction/3-fairness/README.md create mode 100644 translations/fi/1-Introduction/3-fairness/assignment.md create mode 100644 translations/fi/1-Introduction/4-techniques-of-ML/README.md create mode 100644 translations/fi/1-Introduction/4-techniques-of-ML/assignment.md create mode 100644 translations/fi/1-Introduction/README.md create mode 100644 translations/fi/2-Regression/1-Tools/README.md create mode 100644 translations/fi/2-Regression/1-Tools/assignment.md create mode 100644 translations/fi/2-Regression/1-Tools/solution/Julia/README.md create mode 100644 translations/fi/2-Regression/2-Data/README.md create mode 100644 translations/fi/2-Regression/2-Data/assignment.md create mode 100644 translations/fi/2-Regression/2-Data/solution/Julia/README.md create mode 100644 translations/fi/2-Regression/3-Linear/README.md create mode 100644 translations/fi/2-Regression/3-Linear/assignment.md create mode 100644 translations/fi/2-Regression/3-Linear/solution/Julia/README.md create mode 100644 translations/fi/2-Regression/4-Logistic/README.md create mode 100644 translations/fi/2-Regression/4-Logistic/assignment.md create mode 100644 translations/fi/2-Regression/4-Logistic/solution/Julia/README.md create mode 100644 translations/fi/2-Regression/README.md create mode 100644 translations/fi/3-Web-App/1-Web-App/README.md create mode 100644 translations/fi/3-Web-App/1-Web-App/assignment.md create mode 100644 translations/fi/3-Web-App/README.md create mode 100644 translations/fi/4-Classification/1-Introduction/README.md create mode 100644 translations/fi/4-Classification/1-Introduction/assignment.md create mode 100644 translations/fi/4-Classification/1-Introduction/solution/Julia/README.md create mode 100644 translations/fi/4-Classification/2-Classifiers-1/README.md create mode 100644 translations/fi/4-Classification/2-Classifiers-1/assignment.md create mode 100644 translations/fi/4-Classification/2-Classifiers-1/solution/Julia/README.md create mode 100644 translations/fi/4-Classification/3-Classifiers-2/README.md create mode 100644 translations/fi/4-Classification/3-Classifiers-2/assignment.md create mode 100644 translations/fi/4-Classification/3-Classifiers-2/solution/Julia/README.md create mode 100644 translations/fi/4-Classification/4-Applied/README.md create mode 100644 translations/fi/4-Classification/4-Applied/assignment.md create mode 100644 translations/fi/4-Classification/README.md create mode 100644 translations/fi/5-Clustering/1-Visualize/README.md create mode 100644 translations/fi/5-Clustering/1-Visualize/assignment.md create mode 100644 translations/fi/5-Clustering/1-Visualize/solution/Julia/README.md create mode 100644 translations/fi/5-Clustering/2-K-Means/README.md create mode 100644 translations/fi/5-Clustering/2-K-Means/assignment.md create mode 100644 translations/fi/5-Clustering/2-K-Means/solution/Julia/README.md create mode 100644 translations/fi/5-Clustering/README.md create mode 100644 translations/fi/6-NLP/1-Introduction-to-NLP/README.md create mode 100644 translations/fi/6-NLP/1-Introduction-to-NLP/assignment.md create mode 100644 translations/fi/6-NLP/2-Tasks/README.md create mode 100644 translations/fi/6-NLP/2-Tasks/assignment.md create mode 100644 translations/fi/6-NLP/3-Translation-Sentiment/README.md create mode 100644 translations/fi/6-NLP/3-Translation-Sentiment/assignment.md create mode 100644 translations/fi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md create mode 100644 translations/fi/6-NLP/3-Translation-Sentiment/solution/R/README.md create mode 100644 translations/fi/6-NLP/4-Hotel-Reviews-1/README.md create mode 100644 translations/fi/6-NLP/4-Hotel-Reviews-1/assignment.md create mode 100644 translations/fi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md create mode 100644 translations/fi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md create mode 100644 translations/fi/6-NLP/5-Hotel-Reviews-2/README.md create mode 100644 translations/fi/6-NLP/5-Hotel-Reviews-2/assignment.md create mode 100644 translations/fi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md create mode 100644 translations/fi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md create mode 100644 translations/fi/6-NLP/README.md create mode 100644 translations/fi/6-NLP/data/README.md create mode 100644 translations/fi/7-TimeSeries/1-Introduction/README.md create mode 100644 translations/fi/7-TimeSeries/1-Introduction/assignment.md create mode 100644 translations/fi/7-TimeSeries/1-Introduction/solution/Julia/README.md create mode 100644 translations/fi/7-TimeSeries/1-Introduction/solution/R/README.md create mode 100644 translations/fi/7-TimeSeries/2-ARIMA/README.md create mode 100644 translations/fi/7-TimeSeries/2-ARIMA/assignment.md create mode 100644 translations/fi/7-TimeSeries/2-ARIMA/solution/Julia/README.md create mode 100644 translations/fi/7-TimeSeries/2-ARIMA/solution/R/README.md create mode 100644 translations/fi/7-TimeSeries/3-SVR/README.md create mode 100644 translations/fi/7-TimeSeries/3-SVR/assignment.md create mode 100644 translations/fi/7-TimeSeries/README.md create mode 100644 translations/fi/8-Reinforcement/1-QLearning/README.md create mode 100644 translations/fi/8-Reinforcement/1-QLearning/assignment.md create mode 100644 translations/fi/8-Reinforcement/1-QLearning/solution/Julia/README.md create mode 100644 translations/fi/8-Reinforcement/1-QLearning/solution/R/README.md create mode 100644 translations/fi/8-Reinforcement/2-Gym/README.md create mode 100644 translations/fi/8-Reinforcement/2-Gym/assignment.md create mode 100644 translations/fi/8-Reinforcement/2-Gym/solution/Julia/README.md create mode 100644 translations/fi/8-Reinforcement/2-Gym/solution/R/README.md create mode 100644 translations/fi/8-Reinforcement/README.md create mode 100644 translations/fi/9-Real-World/1-Applications/README.md create mode 100644 translations/fi/9-Real-World/1-Applications/assignment.md create mode 100644 translations/fi/9-Real-World/2-Debugging-ML-Models/README.md create mode 100644 translations/fi/9-Real-World/2-Debugging-ML-Models/assignment.md create mode 100644 translations/fi/9-Real-World/README.md create mode 100644 translations/fi/CODE_OF_CONDUCT.md create mode 100644 translations/fi/CONTRIBUTING.md create mode 100644 translations/fi/README.md create mode 100644 translations/fi/SECURITY.md create mode 100644 translations/fi/SUPPORT.md create mode 100644 translations/fi/docs/_sidebar.md create mode 100644 translations/fi/for-teachers.md create mode 100644 translations/fi/quiz-app/README.md create mode 100644 translations/fi/sketchnotes/LICENSE.md create mode 100644 translations/fi/sketchnotes/README.md diff --git a/translations/ar/1-Introduction/1-intro-to-ML/README.md b/translations/ar/1-Introduction/1-intro-to-ML/README.md index 38b19dbaf..b9d6e24e2 100644 --- a/translations/ar/1-Introduction/1-intro-to-ML/README.md +++ b/translations/ar/1-Introduction/1-intro-to-ML/README.md @@ -1,150 +1,150 @@ # مقدمة في تعلم الآلة -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) --- [![تعلم الآلة للمبتدئين - مقدمة في تعلم الآلة للمبتدئين](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "تعلم الآلة للمبتدئين - مقدمة في تعلم الآلة للمبتدئين") -> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذه الدرس. +> 🎥 اضغط على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذه الدرس. -مرحبًا بكم في هذه الدورة حول تعلم الآلة الكلاسيكي للمبتدئين! سواء كنت جديدًا تمامًا على هذا الموضوع، أو ممارسًا متمرسًا في تعلم الآلة وترغب في تحسين معرفتك في مجال معين، نحن سعداء بانضمامك إلينا! نهدف إلى إنشاء نقطة انطلاق ودية لدراستك في تعلم الآلة، وسنكون سعداء بتقييم ملاحظاتك [هنا](https://github.com/microsoft/ML-For-Beginners/discussions) والاستجابة لها ودمجها. +مرحبًا بكم في هذه الدورة حول تعلم الآلة الكلاسيكي للمبتدئين! سواء كنت جديدًا تمامًا على هذا الموضوع، أو ممارسًا لتعلم الآلة يبحث عن تحسين معرفته في مجال معين، نحن سعداء بانضمامك إلينا! نهدف إلى إنشاء نقطة انطلاق ودية لدراستك في تعلم الآلة، ويسعدنا تقييم ملاحظاتك [وتلقيها](https://github.com/microsoft/ML-For-Beginners/discussions) ودمجها. [![مقدمة في تعلم الآلة](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "مقدمة في تعلم الآلة") -> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: جون غوتاغ من MIT يقدم مقدمة في تعلم الآلة. +> 🎥 اضغط على الصورة أعلاه لمشاهدة فيديو: جون غوتاغ من MIT يقدم تعلم الآلة --- ## البدء مع تعلم الآلة قبل البدء في هذه المنهجية، تحتاج إلى إعداد جهاز الكمبيوتر الخاص بك ليكون جاهزًا لتشغيل الدفاتر محليًا. -- **قم بإعداد جهازك باستخدام هذه الفيديوهات**. استخدم الروابط التالية لتتعلم [كيفية تثبيت Python](https://youtu.be/CXZYvNRIAKM) على نظامك و[إعداد محرر نصوص](https://youtu.be/EU8eayHWoZg) للتطوير. -- **تعلم Python**. يُوصى أيضًا بأن يكون لديك فهم أساسي لـ [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott)، وهي لغة برمجة مفيدة لعلماء البيانات ونستخدمها في هذه الدورة. -- **تعلم Node.js وJavaScript**. نستخدم JavaScript أيضًا في بعض الأحيان في هذه الدورة عند بناء تطبيقات ويب، لذا ستحتاج إلى تثبيت [node](https://nodejs.org) و[npm](https://www.npmjs.com/) بالإضافة إلى [Visual Studio Code](https://code.visualstudio.com/) لتطوير Python وJavaScript. -- **إنشاء حساب GitHub**. بما أنك وجدتنا هنا على [GitHub](https://github.com)، قد يكون لديك حساب بالفعل، ولكن إذا لم يكن لديك، قم بإنشاء حساب ثم قم بعمل fork لهذه المنهجية لاستخدامها بنفسك. (لا تنسَ أن تعطينا نجمة 😊) +- **قم بإعداد جهازك باستخدام هذه الفيديوهات**. استخدم الروابط التالية لتتعلم [كيفية تثبيت بايثون](https://youtu.be/CXZYvNRIAKM) على نظامك و[إعداد محرر نصوص](https://youtu.be/EU8eayHWoZg) للتطوير. +- **تعلم بايثون**. يُوصى أيضًا بأن يكون لديك فهم أساسي لـ [بايثون](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott)، وهي لغة برمجة مفيدة لعلماء البيانات التي نستخدمها في هذه الدورة. +- **تعلم Node.js وجافا سكريبت**. نستخدم أيضًا جافا سكريبت عدة مرات في هذه الدورة عند بناء تطبيقات ويب، لذا ستحتاج إلى تثبيت [node](https://nodejs.org) و[npm](https://www.npmjs.com/) بالإضافة إلى [Visual Studio Code](https://code.visualstudio.com/) لتطوير بايثون وجافا سكريبت. +- **إنشاء حساب GitHub**. بما أنك وجدتنا هنا على [GitHub](https://github.com)، قد يكون لديك حساب بالفعل، ولكن إذا لم يكن لديك، قم بإنشاء حساب ثم قم بعمل fork لهذه المنهجية لاستخدامها بنفسك. (لا تنسَ أن تعطينا نجمة أيضًا 😊) - **استكشاف Scikit-learn**. تعرف على [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)، وهي مجموعة من مكتبات تعلم الآلة التي نستخدمها في هذه الدروس. --- ## ما هو تعلم الآلة؟ -مصطلح "تعلم الآلة" هو واحد من أكثر المصطلحات شيوعًا واستخدامًا في الوقت الحالي. هناك احتمال كبير أنك سمعت هذا المصطلح مرة واحدة على الأقل إذا كنت على دراية بالتكنولوجيا، بغض النظر عن المجال الذي تعمل فيه. ومع ذلك، فإن آليات تعلم الآلة تظل غامضة بالنسبة لمعظم الناس. بالنسبة للمبتدئين في تعلم الآلة، قد يبدو الموضوع أحيانًا مربكًا. لذلك، من المهم فهم ما هو تعلم الآلة فعليًا، وتعلمه خطوة بخطوة من خلال أمثلة عملية. +مصطلح "تعلم الآلة" هو واحد من أكثر المصطلحات شيوعًا واستخدامًا في الوقت الحالي. هناك احتمال كبير أنك سمعت هذا المصطلح على الأقل مرة واحدة إذا كنت على دراية بالتكنولوجيا، بغض النظر عن المجال الذي تعمل فيه. ومع ذلك، فإن آليات تعلم الآلة تظل غامضة بالنسبة لمعظم الناس. بالنسبة للمبتدئين في تعلم الآلة، قد يبدو الموضوع أحيانًا مربكًا. لذلك، من المهم فهم ما هو تعلم الآلة فعليًا، والتعرف عليه خطوة بخطوة من خلال أمثلة عملية. --- ## منحنى الضجة -![منحنى الضجة لتعلم الآلة](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.ar.png) +![منحنى الضجة لتعلم الآلة](../../../../1-Introduction/1-intro-to-ML/images/hype.png) -> يظهر Google Trends منحنى الضجة الأخير لمصطلح "تعلم الآلة". +> يظهر Google Trends منحنى الضجة الأخير لمصطلح "تعلم الآلة" --- ## كون غامض -نعيش في كون مليء بالألغاز المثيرة. علماء عظماء مثل ستيفن هوكينغ وألبرت أينشتاين وغيرهم كرسوا حياتهم للبحث عن معلومات ذات معنى تكشف عن ألغاز العالم من حولنا. هذه هي طبيعة الإنسان في التعلم: يتعلم الطفل البشري أشياء جديدة ويكتشف هيكل العالم من حوله عامًا بعد عام أثناء نموه. +نعيش في كون مليء بالألغاز المثيرة. علماء عظماء مثل ستيفن هوكينغ، ألبرت أينشتاين، وغيرهم كرسوا حياتهم للبحث عن معلومات ذات معنى تكشف عن أسرار العالم من حولنا. هذه هي طبيعة الإنسان في التعلم: يتعلم الطفل البشري أشياء جديدة ويكتشف هيكل عالمه عامًا بعد عام أثناء نموه ليصبح بالغًا. --- ## دماغ الطفل -يدرك دماغ الطفل وحواسه حقائق محيطه ويتعلم تدريجيًا الأنماط المخفية للحياة التي تساعده على صياغة قواعد منطقية للتعرف على الأنماط المكتسبة. عملية التعلم في الدماغ البشري تجعل البشر أكثر الكائنات الحية تطورًا في هذا العالم. التعلم المستمر من خلال اكتشاف الأنماط المخفية ثم الابتكار بناءً عليها يمكننا من تحسين أنفسنا باستمرار طوال حياتنا. هذه القدرة على التعلم والتطور ترتبط بمفهوم يسمى [مرونة الدماغ](https://www.simplypsychology.org/brain-plasticity.html). بشكل سطحي، يمكننا رسم بعض التشابهات التحفيزية بين عملية التعلم في الدماغ البشري ومفاهيم تعلم الآلة. +يدرك دماغ الطفل وحواسه حقائق محيطه ويتعلم تدريجيًا الأنماط المخفية للحياة التي تساعد الطفل على صياغة قواعد منطقية لتحديد الأنماط المكتسبة. عملية التعلم في الدماغ البشري تجعل البشر أكثر الكائنات الحية تطورًا في هذا العالم. التعلم المستمر من خلال اكتشاف الأنماط المخفية ثم الابتكار بناءً عليها يمكننا من تحسين أنفسنا باستمرار طوال حياتنا. هذه القدرة على التعلم والتطور ترتبط بمفهوم يسمى [لدونة الدماغ](https://www.simplypsychology.org/brain-plasticity.html). بشكل سطحي، يمكننا رسم بعض التشابهات التحفيزية بين عملية التعلم في الدماغ البشري ومفاهيم تعلم الآلة. --- ## الدماغ البشري -[الدماغ البشري](https://www.livescience.com/29365-human-brain.html) يدرك الأشياء من العالم الحقيقي، ويعالج المعلومات المدركة، ويتخذ قرارات عقلانية، وينفذ إجراءات معينة بناءً على الظروف. هذا ما نسميه التصرف بذكاء. عندما نبرمج عملية مشابهة للسلوك الذكي في آلة، يُطلق عليها الذكاء الاصطناعي (AI). +[الدماغ البشري](https://www.livescience.com/29365-human-brain.html) يدرك الأشياء من العالم الحقيقي، يعالج المعلومات المدركة، يتخذ قرارات عقلانية، ويقوم بأفعال معينة بناءً على الظروف. هذا ما نسميه التصرف بذكاء. عندما نبرمج عملية سلوك ذكي مشابهة في آلة، يُطلق عليها الذكاء الاصطناعي (AI). --- ## بعض المصطلحات -على الرغم من أن المصطلحات قد تكون مربكة، فإن تعلم الآلة (ML) هو جزء مهم من الذكاء الاصطناعي. **تعلم الآلة يهتم باستخدام خوارزميات متخصصة لاكتشاف معلومات ذات معنى والعثور على أنماط مخفية من البيانات المدركة لدعم عملية اتخاذ القرارات العقلانية**. +على الرغم من أن المصطلحات قد تكون مربكة، فإن تعلم الآلة (ML) هو جزء مهم من الذكاء الاصطناعي. **تعلم الآلة يهتم باستخدام خوارزميات متخصصة لاستخراج معلومات ذات معنى واكتشاف الأنماط المخفية من البيانات المدركة لدعم عملية اتخاذ القرارات العقلانية**. --- ## الذكاء الاصطناعي، تعلم الآلة، التعلم العميق -![الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، علم البيانات](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.ar.png) +![الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، علم البيانات](../../../../1-Introduction/1-intro-to-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). +> رسم بياني يوضح العلاقات بين الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، وعلم البيانات. إنفوجرافيك بواسطة [جين لوبر](https://twitter.com/jenlooper) مستوحى من [هذا الرسم](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) --- ## المفاهيم التي سنغطيها -في هذه المنهجية، سنغطي فقط المفاهيم الأساسية لتعلم الآلة التي يجب أن يعرفها المبتدئ. سنركز على ما نسميه "تعلم الآلة الكلاسيكي" باستخدام مكتبة Scikit-learn الممتازة التي يستخدمها العديد من الطلاب لتعلم الأساسيات. لفهم المفاهيم الأوسع للذكاء الاصطناعي أو التعلم العميق، فإن المعرفة الأساسية القوية بتعلم الآلة لا غنى عنها، ونرغب في تقديمها هنا. +في هذه المنهجية، سنغطي فقط المفاهيم الأساسية لتعلم الآلة التي يجب أن يعرفها المبتدئ. نغطي ما نسميه "تعلم الآلة الكلاسيكي" باستخدام Scikit-learn بشكل أساسي، وهي مكتبة ممتازة يستخدمها العديد من الطلاب لتعلم الأساسيات. لفهم المفاهيم الأوسع للذكاء الاصطناعي أو التعلم العميق، فإن المعرفة الأساسية القوية لتعلم الآلة لا غنى عنها، ونود تقديمها هنا. --- ## في هذه الدورة ستتعلم: -- المفاهيم الأساسية لتعلم الآلة -- تاريخ تعلم الآلة -- تعلم الآلة والإنصاف -- تقنيات الانحدار في تعلم الآلة -- تقنيات التصنيف في تعلم الآلة -- تقنيات التجميع في تعلم الآلة -- تقنيات معالجة اللغة الطبيعية في تعلم الآلة -- تقنيات التنبؤ بالسلاسل الزمنية في تعلم الآلة -- التعلم المعزز -- تطبيقات واقعية لتعلم الآلة +- المفاهيم الأساسية لتعلم الآلة +- تاريخ تعلم الآلة +- تعلم الآلة والإنصاف +- تقنيات الانحدار في تعلم الآلة +- تقنيات التصنيف في تعلم الآلة +- تقنيات التجميع في تعلم الآلة +- تقنيات معالجة اللغة الطبيعية في تعلم الآلة +- تقنيات التنبؤ بالسلاسل الزمنية في تعلم الآلة +- التعلم المعزز +- تطبيقات تعلم الآلة في العالم الحقيقي --- ## ما لن نغطيه -- التعلم العميق -- الشبكات العصبية -- الذكاء الاصطناعي +- التعلم العميق +- الشبكات العصبية +- الذكاء الاصطناعي -لتحسين تجربة التعلم، سنتجنب تعقيدات الشبكات العصبية و"التعلم العميق" - بناء النماذج متعددة الطبقات باستخدام الشبكات العصبية - والذكاء الاصطناعي، الذي سنناقشه في منهجية مختلفة. سنقدم أيضًا منهجية قادمة لعلم البيانات للتركيز على هذا الجانب من هذا المجال الأوسع. +لتحقيق تجربة تعلم أفضل، سنتجنب تعقيدات الشبكات العصبية، "التعلم العميق" - بناء نماذج متعددة الطبقات باستخدام الشبكات العصبية - والذكاء الاصطناعي، الذي سنناقشه في منهجية مختلفة. سنقدم أيضًا منهجية قادمة لعلم البيانات للتركيز على هذا الجانب من هذا المجال الأوسع. --- -## لماذا ندرس تعلم الآلة؟ +## لماذا دراسة تعلم الآلة؟ من منظور الأنظمة، يُعرف تعلم الآلة بأنه إنشاء أنظمة مؤتمتة يمكنها تعلم الأنماط المخفية من البيانات للمساعدة في اتخاذ قرارات ذكية. هذا الدافع مستوحى بشكل فضفاض من كيفية تعلم الدماغ البشري أشياء معينة بناءً على البيانات التي يدركها من العالم الخارجي. -✅ فكر للحظة لماذا قد ترغب شركة ما في استخدام استراتيجيات تعلم الآلة بدلاً من إنشاء محرك يعتمد على قواعد مشفرة يدويًا. +✅ فكر لدقيقة لماذا قد ترغب شركة في استخدام استراتيجيات تعلم الآلة بدلاً من إنشاء محرك يعتمد على قواعد مبرمجة. --- ## تطبيقات تعلم الآلة -تطبيقات تعلم الآلة موجودة الآن في كل مكان، وهي منتشرة بقدر البيانات التي تتدفق في مجتمعاتنا، والتي يتم توليدها من هواتفنا الذكية، والأجهزة المتصلة، والأنظمة الأخرى. بالنظر إلى الإمكانات الهائلة لخوارزميات تعلم الآلة المتقدمة، استكشف الباحثون قدرتها على حل المشكلات الواقعية متعددة الأبعاد والتخصصات بنتائج إيجابية كبيرة. +تطبيقات تعلم الآلة موجودة الآن في كل مكان، وهي منتشرة مثل البيانات التي تتدفق حول مجتمعاتنا، والتي يتم إنشاؤها بواسطة هواتفنا الذكية، الأجهزة المتصلة، وأنظمة أخرى. بالنظر إلى الإمكانات الهائلة لخوارزميات تعلم الآلة الحديثة، استكشف الباحثون قدرتها على حل مشاكل متعددة الأبعاد ومتعددة التخصصات في الحياة الواقعية بنتائج إيجابية كبيرة. --- ## أمثلة على تعلم الآلة المطبق **يمكنك استخدام تعلم الآلة بطرق عديدة**: -- للتنبؤ باحتمالية الإصابة بمرض بناءً على التاريخ الطبي أو التقارير. -- لاستخدام بيانات الطقس للتنبؤ بالأحداث الجوية. -- لفهم مشاعر النصوص. -- لاكتشاف الأخبار المزيفة لوقف انتشار الدعاية. +- للتنبؤ باحتمالية الإصابة بمرض بناءً على التاريخ الطبي أو التقارير. +- للاستفادة من بيانات الطقس للتنبؤ بالأحداث الجوية. +- لفهم مشاعر النصوص. +- لاكتشاف الأخبار المزيفة لوقف انتشار الدعاية. -مجالات مثل التمويل، الاقتصاد، علوم الأرض، استكشاف الفضاء، الهندسة الطبية الحيوية، العلوم الإدراكية، وحتى المجالات الإنسانية، تبنت تعلم الآلة لحل المشكلات الصعبة التي تعتمد على معالجة البيانات بكثافة. +التمويل، الاقتصاد، علوم الأرض، استكشاف الفضاء، الهندسة الطبية الحيوية، العلوم الإدراكية، وحتى المجالات الإنسانية قد تبنت تعلم الآلة لحل المشاكل الصعبة التي تعتمد على معالجة البيانات في مجالاتها. --- -## الخلاصة +## الخاتمة -يعمل تعلم الآلة على أتمتة عملية اكتشاف الأنماط من خلال العثور على رؤى ذات معنى من البيانات الواقعية أو المولدة. وقد أثبتت قيمته العالية في التطبيقات التجارية، الصحية، والمالية، وغيرها. +يعمل تعلم الآلة على أتمتة عملية اكتشاف الأنماط من خلال استخراج رؤى ذات معنى من البيانات الحقيقية أو المولدة. وقد أثبت نفسه كأداة قيمة للغاية في الأعمال التجارية، الصحة، والتطبيقات المالية، وغيرها. -في المستقبل القريب، سيكون فهم أساسيات تعلم الآلة ضرورة للأشخاص من أي مجال نظرًا لاعتماده الواسع. +في المستقبل القريب، سيكون فهم أساسيات تعلم الآلة ضرورة للأشخاص من أي مجال بسبب اعتماده الواسع. --- # 🚀 التحدي -قم برسم، على الورق أو باستخدام تطبيق عبر الإنترنت مثل [Excalidraw](https://excalidraw.com/)، فهمك للاختلافات بين الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، وعلم البيانات. أضف بعض الأفكار حول المشكلات التي يمكن لكل من هذه التقنيات حلها. +قم برسم، على الورق أو باستخدام تطبيق عبر الإنترنت مثل [Excalidraw](https://excalidraw.com/)، فهمك للاختلافات بين الذكاء الاصطناعي، تعلم الآلة، التعلم العميق، وعلم البيانات. أضف بعض الأفكار حول المشاكل التي يمكن لكل من هذه التقنيات حلها. -# [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) --- # المراجعة والدراسة الذاتية -لتعلم المزيد حول كيفية العمل مع خوارزميات تعلم الآلة في السحابة، تابع [مسار التعلم](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/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) حول أساسيات تعلم الآلة. diff --git a/translations/ar/1-Introduction/2-history-of-ML/README.md b/translations/ar/1-Introduction/2-history-of-ML/README.md index 08b678d70..3f412a673 100644 --- a/translations/ar/1-Introduction/2-history-of-ML/README.md +++ b/translations/ar/1-Introduction/2-history-of-ML/README.md @@ -1,18 +1,18 @@ # تاريخ تعلم الآلة -![ملخص تاريخ تعلم الآلة في رسم تخطيطي](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.ar.png) -> رسم تخطيطي بواسطة [تومومي إيمورا](https://www.twitter.com/girlie_mac) +![ملخص تاريخ تعلم الآلة في رسم تخطيطي](../../../../sketchnotes/ml-history.png) +> رسم تخطيطي من إعداد [تومومي إيمورا](https://www.twitter.com/girlie_mac) -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) --- @@ -20,65 +20,65 @@ CO_OP_TRANSLATOR_METADATA: > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير يشرح هذه الدرس. -في هذا الدرس، سنستعرض أهم المحطات في تاريخ تعلم الآلة والذكاء الاصطناعي. +في هذا الدرس، سنستعرض المحطات الرئيسية في تاريخ تعلم الآلة والذكاء الاصطناعي. -تاريخ الذكاء الاصطناعي (AI) كحقل علمي مرتبط ارتباطًا وثيقًا بتاريخ تعلم الآلة، حيث أن الخوارزميات والتطورات الحاسوبية التي تدعم تعلم الآلة ساهمت في تطوير الذكاء الاصطناعي. من المفيد أن نتذكر أنه، على الرغم من أن هذه المجالات بدأت تتبلور كمجالات بحثية متميزة في الخمسينيات، فإن الاكتشافات [الخوارزمية، الإحصائية، الرياضية، الحاسوبية والتقنية](https://wikipedia.org/wiki/Timeline_of_machine_learning) سبقت وتداخلت مع هذه الحقبة. في الواقع، كان الناس يفكرون في هذه الأسئلة منذ [مئات السنين](https://wikipedia.org/wiki/History_of_artificial_intelligence): يناقش هذا المقال الأسس الفكرية التاريخية لفكرة "الآلة المفكرة". +تاريخ الذكاء الاصطناعي (AI) كمجال مرتبط بشكل وثيق بتاريخ تعلم الآلة، حيث أن الخوارزميات والتطورات الحاسوبية التي تدعم تعلم الآلة ساهمت في تطوير الذكاء الاصطناعي. من المفيد أن نتذكر أنه على الرغم من أن هذه المجالات بدأت تتبلور كمجالات بحثية متميزة في الخمسينيات، إلا أن هناك [اكتشافات خوارزمية وإحصائية ورياضية وحاسوبية وتقنية مهمة](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) هو نوع من المصنفات الخطية اخترعه عالم النفس الأمريكي فرانك روزنبلات ويشكل أساس التقدم في التعلم العميق. +- 1763، 1812 [نظرية بايز](https://wikipedia.org/wiki/Bayes%27_theorem) وأسلافها. هذه النظرية وتطبيقاتها تشكل أساس الاستدلال، حيث تصف احتمالية وقوع حدث بناءً على المعرفة السابقة. +- 1805 [نظرية المربعات الصغرى](https://wikipedia.org/wiki/Least_squares) التي قدمها عالم الرياضيات الفرنسي أدريان-ماري ليجيندر. هذه النظرية، التي ستتعلم عنها في وحدة الانحدار، تساعد في ملاءمة البيانات. +- 1913 [سلاسل ماركوف](https://wikipedia.org/wiki/Markov_chain)، التي سميت على اسم عالم الرياضيات الروسي أندريه ماركوف، تُستخدم لوصف تسلسل الأحداث المحتملة بناءً على الحالة السابقة. +- 1957 [Perceptron](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) هي شبكات عصبية اصطناعية مشتقة من الشبكات العصبية الأمامية وتُنشئ رسومًا بيانية زمنية. +- 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: آلات تفكر +## 1950: الآلات التي تفكر -آلان تورينغ، شخصية استثنائية تم التصويت عليها [من قبل الجمهور في عام 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) كأعظم عالم في القرن العشرين، يُنسب إليه المساهمة في وضع الأساس لفكرة "آلة يمكنها التفكير". تعامل مع المشككين وحاجته الشخصية إلى أدلة تجريبية لهذه الفكرة جزئيًا من خلال إنشاء [اختبار تورينغ](https://www.bbc.com/news/technology-18475646)، الذي ستستكشفه في دروس معالجة اللغة الطبيعية. +يُعتبر آلان تورينغ، وهو شخصية استثنائية تم التصويت له [من قبل الجمهور في عام 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) كأعظم عالم في القرن العشرين، أحد المؤسسين لفكرة "الآلة التي يمكن أن تفكر". لقد واجه المشككين وحاجته الشخصية إلى أدلة تجريبية لهذه الفكرة من خلال إنشاء [اختبار تورينغ](https://www.bbc.com/news/technology-18475646)، الذي ستستكشفه في دروس معالجة اللغة الطبيعية. --- -## 1956: مشروع بحث صيف دارتموث +## 1956: مشروع دارتموث الصيفي للبحث -"كان مشروع البحث الصيفي في دارتموث حول الذكاء الاصطناعي حدثًا بارزًا في مجال الذكاء الاصطناعي"، وفيه تم صياغة مصطلح "الذكاء الاصطناعي" ([المصدر](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). +"كان مشروع دارتموث الصيفي للبحث في الذكاء الاصطناعي حدثًا محوريًا في مجال الذكاء الاصطناعي"، حيث تم صياغة مصطلح "الذكاء الاصطناعي" لأول مرة ([المصدر](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). -> يمكن وصف كل جانب من جوانب التعلم أو أي ميزة أخرى للذكاء بدقة بحيث يمكن إنشاء آلة لمحاكاته. +> يمكن وصف كل جانب من جوانب التعلم أو أي ميزة أخرى للذكاء بدقة كافية بحيث يمكن إنشاء آلة لمحاكاتها. --- -كان الباحث الرئيسي، أستاذ الرياضيات جون مكارثي، يأمل "في المضي قدمًا بناءً على فرضية أن كل جانب من جوانب التعلم أو أي ميزة أخرى للذكاء يمكن وصفها بدقة بحيث يمكن إنشاء آلة لمحاكاته." وكان من بين المشاركين شخصية بارزة أخرى في المجال، مارفن مينسكي. +كان الباحث الرئيسي، أستاذ الرياضيات جون مكارثي، يأمل "في المضي قدمًا بناءً على فرضية أن كل جانب من جوانب التعلم أو أي ميزة أخرى للذكاء يمكن وصفها بدقة كافية بحيث يمكن إنشاء آلة لمحاكاتها." وشملت المشاركين شخصية بارزة أخرى في المجال، مارفن مينسكي. -يُنسب إلى الورشة الفضل في بدء وتشجيع العديد من المناقشات بما في ذلك "ظهور الأساليب الرمزية، الأنظمة التي تركز على مجالات محدودة (أنظمة الخبراء المبكرة)، والأنظمة الاستنتاجية مقابل الأنظمة الاستقرائية." ([المصدر](https://wikipedia.org/wiki/Dartmouth_workshop)). +يُنسب إلى الورشة الفضل في بدء وتشجيع العديد من المناقشات، بما في ذلك "ظهور الأساليب الرمزية، الأنظمة التي تركز على مجالات محدودة (أنظمة الخبراء المبكرة)، والأنظمة الاستنتاجية مقابل الأنظمة الاستقرائية." ([المصدر](https://wikipedia.org/wiki/Dartmouth_workshop)). --- ## 1956 - 1974: "السنوات الذهبية" -من الخمسينيات وحتى منتصف السبعينيات، كان هناك تفاؤل كبير بأن الذكاء الاصطناعي يمكن أن يحل العديد من المشاكل. في عام 1967، صرح مارفن مينسكي بثقة أن "في غضون جيل ... سيتم حل مشكلة إنشاء 'الذكاء الاصطناعي' بشكل كبير." (مينسكي، مارفن (1967)، الحساب: الآلات المحدودة واللامحدودة، إنجلوود كليفس، نيوجيرسي: برنتيس-هول) +من الخمسينيات وحتى منتصف السبعينيات، ساد التفاؤل الكبير بأن الذكاء الاصطناعي يمكن أن يحل العديد من المشكلات. في عام 1967، صرح مارفن مينسكي بثقة: "في غضون جيل ... سيتم حل مشكلة إنشاء 'ذكاء اصطناعي' بشكل كبير." (مينسكي، مارفن (1967)، الحساب: الآلات المحدودة واللانهائية، إنغلوود كليفس، نيوجيرسي: برنتيس-هول) -ازدهرت أبحاث معالجة اللغة الطبيعية، وتم تحسين البحث وجعله أكثر قوة، وتم إنشاء مفهوم "العوالم المصغرة"، حيث تم تنفيذ المهام البسيطة باستخدام تعليمات بلغة واضحة. +ازدهرت أبحاث معالجة اللغة الطبيعية، وتم تحسين البحث وجعله أكثر قوة، وتم إنشاء مفهوم "العوالم المصغرة"، حيث تم تنفيذ مهام بسيطة باستخدام تعليمات بلغة بسيطة. --- -تم تمويل الأبحاث بشكل جيد من قبل الوكالات الحكومية، وتم تحقيق تقدم في الحساب والخوارزميات، وتم بناء نماذج أولية للآلات الذكية. بعض هذه الآلات تشمل: +حظيت الأبحاث بتمويل جيد من الوكالات الحكومية، وتم إحراز تقدم في الحوسبة والخوارزميات، وتم بناء نماذج أولية للآلات الذكية. بعض هذه الآلات تشمل: -* [الروبوت شاكي](https://wikipedia.org/wiki/Shakey_the_robot)، الذي كان يمكنه المناورة واتخاذ قرارات لتنفيذ المهام "بذكاء". +* [الروبوت شاكي](https://wikipedia.org/wiki/Shakey_the_robot)، الذي كان بإمكانه المناورة واتخاذ قرارات "ذكية" لتنفيذ المهام. - ![شاكي، روبوت ذكي](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.ar.jpg) + ![شاكي، روبوت ذكي](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > شاكي في عام 1972 --- -* إليزا، "روبوت محادثة" مبكر، كان يمكنه التحدث مع الناس والتصرف كـ "معالج" بدائي. ستتعرف أكثر على إليزا في دروس معالجة اللغة الطبيعية. +* إليزا، وهي "روبوت محادثة" مبكر، كان بإمكانها التحدث مع الناس والعمل كـ "معالج" بدائي. ستتعرف على إليزا أكثر في دروس معالجة اللغة الطبيعية. - ![إليزا، روبوت محادثة](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.ar.png) + ![إليزا، روبوت محادثة](../../../../1-Introduction/2-history-of-ML/images/eliza.png) > نسخة من إليزا، روبوت محادثة --- @@ -92,46 +92,46 @@ CO_OP_TRANSLATOR_METADATA: --- ## 1974 - 1980: "شتاء الذكاء الاصطناعي" -بحلول منتصف السبعينيات، أصبح واضحًا أن تعقيد إنشاء "آلات ذكية" قد تم التقليل من شأنه وأن وعوده، بالنظر إلى قوة الحوسبة المتاحة، قد تم تضخيمها. جف التمويل وتباطأت الثقة في المجال. بعض القضايا التي أثرت على الثقة تشمل: +بحلول منتصف السبعينيات، أصبح من الواضح أن تعقيد إنشاء "آلات ذكية" قد تم التقليل من شأنه وأن الوعود التي قُدمت، بالنظر إلى قوة الحوسبة المتاحة، كانت مبالغًا فيها. جف التمويل وتباطأت الثقة في المجال. بعض القضايا التي أثرت على الثقة تشمل: --- - **القيود**. كانت قوة الحوسبة محدودة للغاية. -- **الانفجار التوافقي**. زاد عدد المعلمات التي يجب تدريبها بشكل كبير مع زيادة الطلبات على الحواسيب، دون تطور موازٍ في قوة الحوسبة والقدرات. -- **ندرة البيانات**. كانت هناك ندرة في البيانات التي أعاقت عملية اختبار وتطوير وتحسين الخوارزميات. -- **هل نطرح الأسئلة الصحيحة؟**. بدأت الأسئلة التي كانت تُطرح في المجال تخضع للتشكيك. بدأ الباحثون في مواجهة النقد حول مناهجهم: - - تم التشكيك في اختبارات تورينغ من خلال نظريات مثل "نظرية الغرفة الصينية" التي افترضت أن "برمجة الكمبيوتر الرقمي قد تجعل الأمر يبدو وكأنه يفهم اللغة ولكنها لا يمكن أن تنتج فهمًا حقيقيًا." ([المصدر](https://plato.stanford.edu/entries/chinese-room/)) +- **الانفجار التوافقي**. نما عدد المعلمات التي يجب تدريبها بشكل أسي مع زيادة الطلبات على الحواسيب، دون تطور موازٍ في قوة وقدرة الحوسبة. +- **ندرة البيانات**. كانت هناك ندرة في البيانات التي أعاقت عملية الاختبار والتطوير وتحسين الخوارزميات. +- **هل نطرح الأسئلة الصحيحة؟**. بدأت الأسئلة نفسها التي كانت تُطرح تخضع للتشكيك. بدأ الباحثون يواجهون انتقادات حول مناهجهم: + - اختبارات تورينغ خضعت للتشكيك من خلال، من بين أفكار أخرى، "نظرية الغرفة الصينية" التي افترضت أن "برمجة حاسوب رقمي قد تجعل الأمر يبدو وكأنه يفهم اللغة ولكنه لا يمكن أن ينتج فهمًا حقيقيًا." ([المصدر](https://plato.stanford.edu/entries/chinese-room/)) - تم تحدي أخلاقيات إدخال ذكاء اصطناعي مثل "المعالج" إليزا إلى المجتمع. --- -في الوقت نفسه، بدأت تتشكل مدارس مختلفة للذكاء الاصطناعي. تم إنشاء تفرقة بين ممارسات ["الذكاء الاصطناعي الفوضوي" مقابل "الذكاء الاصطناعي المنظم"](https://wikipedia.org/wiki/Neats_and_scruffies). كانت المختبرات "الفوضوية" تعدل البرامج لساعات حتى تحصل على النتائج المطلوبة. أما المختبرات "المنظمة" فكانت "تركز على المنطق وحل المشكلات بشكل رسمي". كانت إليزا وSHRDLU من الأنظمة "الفوضوية" المعروفة. في الثمانينيات، مع ظهور الطلب على جعل أنظمة تعلم الآلة قابلة للتكرار، بدأ النهج "المنظم" يأخذ الصدارة لأن نتائجه أكثر قابلية للتفسير. +في الوقت نفسه، بدأت تتشكل مدارس فكرية مختلفة للذكاء الاصطناعي. تم إنشاء تفرقة بين ممارسات ["الذكاء الاصطناعي الفوضوي" و"الذكاء الاصطناعي المنظم"](https://wikipedia.org/wiki/Neats_and_scruffies). كانت المختبرات "الفوضوية" تعدل البرامج لساعات حتى تحصل على النتائج المطلوبة. أما المختبرات "المنظمة" فكانت تركز على المنطق وحل المشكلات الرسمي. كانت إليزا وSHRDLU من الأنظمة "الفوضوية" المعروفة. في الثمانينيات، مع ظهور الحاجة لجعل أنظمة تعلم الآلة قابلة للتكرار، أصبح النهج "المنظم" في المقدمة لأن نتائجه أكثر قابلية للتفسير. --- ## أنظمة الخبراء في الثمانينيات -مع نمو المجال، أصبح واضحًا فائدته للأعمال التجارية، وفي الثمانينيات انتشرت "أنظمة الخبراء". "كانت أنظمة الخبراء من بين أول أشكال البرمجيات الناجحة حقًا للذكاء الاصطناعي (AI)." ([المصدر](https://wikipedia.org/wiki/Expert_system)). +مع نمو المجال، أصبح واضحًا فائدته للأعمال التجارية، وفي الثمانينيات انتشرت "أنظمة الخبراء". "كانت أنظمة الخبراء من بين أول أشكال البرمجيات الناجحة حقًا للذكاء الاصطناعي." ([المصدر](https://wikipedia.org/wiki/Expert_system)). -هذا النوع من الأنظمة هو في الواقع _هجين_، يتكون جزئيًا من محرك قواعد يحدد متطلبات الأعمال، ومحرك استنتاج يستفيد من نظام القواعد لاستنتاج حقائق جديدة. +هذا النوع من الأنظمة هو في الواقع _هجين_، يتكون جزئيًا من محرك قواعد يحدد متطلبات العمل، ومحرك استنتاج يستفيد من نظام القواعد لاستنتاج حقائق جديدة. -شهدت هذه الحقبة أيضًا اهتمامًا متزايدًا بالشبكات العصبية. +شهدت هذه الحقبة أيضًا زيادة الاهتمام بالشبكات العصبية. --- ## 1987 - 1993: "برودة الذكاء الاصطناعي" -كان لتوسع أجهزة أنظمة الخبراء المتخصصة تأثير سلبي حيث أصبحت متخصصة للغاية. كما تنافست أجهزة الكمبيوتر الشخصية مع هذه الأنظمة الكبيرة والمركزية. بدأت ديمقراطية الحوسبة، مما مهد الطريق لانفجار البيانات الضخمة الحديث. +كان لانتشار أجهزة أنظمة الخبراء المتخصصة تأثير سلبي حيث أصبحت متخصصة للغاية. كما تنافست أجهزة الكمبيوتر الشخصية مع هذه الأنظمة الكبيرة والمركزية. بدأت ديمقراطية الحوسبة، مما مهد الطريق في النهاية لانفجار البيانات الضخمة الحديث. --- ## 1993 - 2011 -شهدت هذه الحقبة عصرًا جديدًا لتعلم الآلة والذكاء الاصطناعي لحل بعض المشاكل التي كانت قد ظهرت سابقًا بسبب نقص البيانات وقوة الحوسبة. بدأت كمية البيانات في الزيادة بسرعة وأصبحت أكثر توفرًا، للأفضل وللأسوأ، خاصة مع ظهور الهواتف الذكية حوالي عام 2007. توسعت قوة الحوسبة بشكل كبير، وتطورت الخوارزميات جنبًا إلى جنب. بدأ المجال في اكتساب النضج حيث بدأت الأيام الحرة السابقة تتبلور إلى تخصص حقيقي. +شهدت هذه الحقبة عصرًا جديدًا لتعلم الآلة والذكاء الاصطناعي لحل بعض المشكلات التي كانت ناجمة عن نقص البيانات وقوة الحوسبة في السابق. بدأت كمية البيانات في الزيادة بسرعة وأصبحت متاحة على نطاق واسع، سواء للأفضل أو للأسوأ، خاصة مع ظهور الهواتف الذكية حوالي عام 2007. توسعت قوة الحوسبة بشكل كبير، وتطورت الخوارزميات جنبًا إلى جنب. بدأ المجال في النضوج حيث بدأت الأيام العشوائية الماضية تتبلور إلى تخصص حقيقي. --- ## الآن -اليوم، تعلم الآلة والذكاء الاصطناعي يؤثران على كل جزء تقريبًا من حياتنا. هذه الحقبة تتطلب فهمًا دقيقًا للمخاطر والتأثيرات المحتملة لهذه الخوارزميات على حياة البشر. كما قال براد سميث من مايكروسوفت: "تثير تكنولوجيا المعلومات قضايا تتعلق بجوهر حماية حقوق الإنسان الأساسية مثل الخصوصية وحرية التعبير. هذه القضايا تزيد من مسؤولية شركات التكنولوجيا التي تبتكر هذه المنتجات. في رأينا، تدعو أيضًا إلى تنظيم حكومي مدروس وتطوير معايير حول الاستخدامات المقبولة" ([المصدر](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). +اليوم، يمس تعلم الآلة والذكاء الاصطناعي تقريبًا كل جزء من حياتنا. هذا العصر يتطلب فهمًا دقيقًا للمخاطر والتأثيرات المحتملة لهذه الخوارزميات على حياة البشر. كما صرح براد سميث من مايكروسوفت: "تثير تكنولوجيا المعلومات قضايا تمس جوهر حماية حقوق الإنسان الأساسية مثل الخصوصية وحرية التعبير. هذه القضايا تزيد من مسؤولية شركات التكنولوجيا التي تصنع هذه المنتجات. من وجهة نظرنا، تدعو أيضًا إلى تنظيم حكومي مدروس وتطوير معايير حول الاستخدامات المقبولة" ([المصدر](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 "تاريخ التعلم العميق") > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: يان ليكون يناقش تاريخ التعلم العميق في هذه المحاضرة @@ -139,14 +139,14 @@ CO_OP_TRANSLATOR_METADATA: --- ## 🚀تحدي -استكشف واحدة من هذه اللحظات التاريخية وتعرف أكثر على الأشخاص الذين كانوا وراءها. هناك شخصيات مثيرة للاهتمام، ولم يتم إنشاء أي اكتشاف علمي في فراغ ثقافي. ماذا تكتشف؟ +تعمق في واحدة من هذه اللحظات التاريخية وتعرف أكثر على الأشخاص الذين كانوا وراءها. هناك شخصيات مثيرة للاهتمام، ولم يتم إنشاء أي اكتشاف علمي في فراغ ثقافي. ماذا تكتشف؟ -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) --- ## المراجعة والدراسة الذاتية -إليك بعض العناصر للمشاهدة والاستماع: +إليك بعض المواد للمشاهدة والاستماع: [هذا البودكاست حيث تناقش آمي بويد تطور الذكاء الاصطناعي](http://runasradio.com/Shows/Show/739) @@ -156,9 +156,9 @@ CO_OP_TRANSLATOR_METADATA: ## الواجب -[قم بإنشاء خط زمني](assignment.md) +[إنشاء خط زمني](assignment.md) --- **إخلاء المسؤولية**: -تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-Introduction/3-fairness/README.md b/translations/ar/1-Introduction/3-fairness/README.md index 7f3ec7e9e..3b27eb03c 100644 --- a/translations/ar/1-Introduction/3-fairness/README.md +++ b/translations/ar/1-Introduction/3-fairness/README.md @@ -1,37 +1,37 @@ -# بناء حلول تعلم الآلة باستخدام الذكاء الاصطناعي المسؤول +# بناء حلول التعلم الآلي باستخدام الذكاء الاصطناعي المسؤول -![ملخص الذكاء الاصطناعي المسؤول في تعلم الآلة في رسم تخطيطي](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.ar.png) +![ملخص الذكاء الاصطناعي المسؤول في التعلم الآلي في رسم تخطيطي](../../../../sketchnotes/ml-fairness.png) > رسم تخطيطي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المقدمة -في هذا المنهج، ستبدأ في اكتشاف كيف يؤثر تعلم الآلة على حياتنا اليومية. حتى الآن، يتم استخدام الأنظمة والنماذج في اتخاذ القرارات اليومية مثل تشخيصات الرعاية الصحية، الموافقة على القروض، أو اكتشاف الاحتيال. لذلك، من المهم أن تعمل هذه النماذج بشكل جيد لتقديم نتائج موثوقة. كما هو الحال مع أي تطبيق برمجي، قد تخفق أنظمة الذكاء الاصطناعي في تلبية التوقعات أو تؤدي إلى نتائج غير مرغوبة. لهذا السبب، من الضروري فهم وتفسير سلوك نموذج الذكاء الاصطناعي. +في هذا المنهج، ستبدأ في اكتشاف كيف يؤثر التعلم الآلي على حياتنا اليومية. حتى الآن، تُستخدم الأنظمة والنماذج في اتخاذ قرارات يومية مثل تشخيصات الرعاية الصحية، الموافقة على القروض، أو اكتشاف الاحتيال. لذلك، من المهم أن تعمل هذه النماذج بشكل جيد لتقديم نتائج موثوقة. مثل أي تطبيق برمجي، قد تخفق أنظمة الذكاء الاصطناعي في تلبية التوقعات أو تؤدي إلى نتائج غير مرغوبة. لهذا السبب، من الضروري فهم وتفسير سلوك نموذج الذكاء الاصطناعي. -تخيل ما يمكن أن يحدث عندما تفتقر البيانات التي تستخدمها لبناء هذه النماذج إلى تمثيل بعض الفئات الديموغرافية مثل العرق، الجنس، الرأي السياسي، الدين، أو تمثلها بشكل غير متناسب. ماذا عن عندما يتم تفسير نتائج النموذج لتفضيل فئة ديموغرافية معينة؟ ما هي العواقب على التطبيق؟ بالإضافة إلى ذلك، ماذا يحدث عندما يؤدي النموذج إلى نتائج ضارة؟ من يتحمل المسؤولية عن سلوك أنظمة الذكاء الاصطناعي؟ هذه بعض الأسئلة التي سنستكشفها في هذا المنهج. +تخيل ما يمكن أن يحدث عندما تفتقر البيانات التي تستخدمها لبناء هذه النماذج إلى تمثيل ديموغرافي معين مثل العرق، الجنس، الرؤية السياسية، الدين، أو تمثيل غير متوازن لهذه الفئات. ماذا عن عندما يتم تفسير نتائج النموذج لتفضيل فئة معينة؟ ما هي العواقب على التطبيق؟ بالإضافة إلى ذلك، ماذا يحدث عندما يؤدي النموذج إلى نتائج ضارة تؤثر سلبًا على الناس؟ من المسؤول عن سلوك أنظمة الذكاء الاصطناعي؟ هذه بعض الأسئلة التي سنستكشفها في هذا المنهج. في هذه الدرس، ستتعلم: -- رفع مستوى الوعي بأهمية الإنصاف في تعلم الآلة والأضرار المتعلقة بالإنصاف. +- أهمية الإنصاف في التعلم الآلي والأضرار المرتبطة به. - التعرف على ممارسة استكشاف الحالات الشاذة والسيناريوهات غير المعتادة لضمان الموثوقية والسلامة. - فهم الحاجة إلى تمكين الجميع من خلال تصميم أنظمة شاملة. -- استكشاف أهمية حماية خصوصية وأمان البيانات والأفراد. +- استكشاف أهمية حماية الخصوصية وأمن البيانات والأفراد. - إدراك أهمية النهج الشفاف لتفسير سلوك نماذج الذكاء الاصطناعي. -- التفكير في كيف أن المساءلة ضرورية لبناء الثقة في أنظمة الذكاء الاصطناعي. +- التفكير في كيفية أن تكون المساءلة ضرورية لبناء الثقة في أنظمة الذكاء الاصطناعي. ## المتطلبات الأساسية -كشرط أساسي، يرجى أخذ مسار التعلم "مبادئ الذكاء الاصطناعي المسؤول" ومشاهدة الفيديو أدناه حول الموضوع: +كشرط مسبق، يرجى أخذ مسار التعلم "مبادئ الذكاء الاصطناعي المسؤول" ومشاهدة الفيديو أدناه حول الموضوع: تعرف على المزيد حول الذكاء الاصطناعي المسؤول من خلال متابعة هذا [مسار التعلم](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) @@ -41,27 +41,27 @@ CO_OP_TRANSLATOR_METADATA: ## الإنصاف -يجب أن تعامل أنظمة الذكاء الاصطناعي الجميع بإنصاف وتتجنب التأثير على مجموعات متشابهة من الناس بطرق مختلفة. على سبيل المثال، عندما تقدم أنظمة الذكاء الاصطناعي إرشادات حول العلاج الطبي، طلبات القروض، أو التوظيف، يجب أن تقدم نفس التوصيات للجميع الذين لديهم أعراض مشابهة، ظروف مالية متشابهة، أو مؤهلات مهنية متشابهة. كل واحد منا كبشر يحمل تحيزات موروثة تؤثر على قراراتنا وأفعالنا. يمكن أن تكون هذه التحيزات واضحة في البيانات التي نستخدمها لتدريب أنظمة الذكاء الاصطناعي. قد يحدث هذا التلاعب أحيانًا دون قصد. غالبًا ما يكون من الصعب إدراك متى يتم إدخال التحيز في البيانات. +يجب أن تعامل أنظمة الذكاء الاصطناعي الجميع بإنصاف وتتجنب التأثير على مجموعات متشابهة من الناس بطرق مختلفة. على سبيل المثال، عندما تقدم أنظمة الذكاء الاصطناعي إرشادات حول العلاج الطبي، طلبات القروض، أو التوظيف، يجب أن تقدم نفس التوصيات للجميع بناءً على أعراض مشابهة، ظروف مالية، أو مؤهلات مهنية. كل واحد منا كبشر يحمل تحيزات موروثة تؤثر على قراراتنا وأفعالنا. يمكن أن تكون هذه التحيزات واضحة في البيانات التي نستخدمها لتدريب أنظمة الذكاء الاصطناعي. قد يحدث هذا التلاعب أحيانًا دون قصد. غالبًا ما يكون من الصعب إدراك متى يتم إدخال التحيز في البيانات. -**"عدم الإنصاف"** يشمل التأثيرات السلبية أو "الأضرار" لمجموعة من الناس، مثل تلك المعرفة من حيث العرق، الجنس، العمر، أو حالة الإعاقة. يمكن تصنيف الأضرار الرئيسية المتعلقة بالإنصاف على النحو التالي: +**"عدم الإنصاف"** يشمل التأثيرات السلبية أو "الأضرار" لمجموعة من الناس، مثل تلك المحددة بناءً على العرق، الجنس، العمر، أو حالة الإعاقة. يمكن تصنيف الأضرار الرئيسية المتعلقة بالإنصاف على النحو التالي: - **التخصيص**، إذا تم تفضيل جنس أو عرق معين على آخر. -- **جودة الخدمة**. إذا قمت بتدريب البيانات على سيناريو محدد ولكن الواقع أكثر تعقيدًا، يؤدي ذلك إلى خدمة ضعيفة الأداء. على سبيل المثال، موزع صابون لم يتمكن من التعرف على الأشخاص ذوي البشرة الداكنة. [مرجع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **التقليل**. النقد غير العادل أو تصنيف شيء أو شخص بشكل غير منصف. على سبيل المثال، تقنية تصنيف الصور التي وصفت بشكل خاطئ صور الأشخاص ذوي البشرة الداكنة كغوريلات. +- **جودة الخدمة**. إذا تم تدريب البيانات على سيناريو محدد ولكن الواقع أكثر تعقيدًا، يؤدي ذلك إلى خدمة ضعيفة الأداء. على سبيل المثال، موزع صابون يدوي لم يتمكن من التعرف على الأشخاص ذوي البشرة الداكنة. [مرجع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **التشهير**. انتقاد أو تصنيف شيء أو شخص بشكل غير عادل. على سبيل المثال، تقنية تصنيف الصور التي وصفت بشكل خاطئ صور الأشخاص ذوي البشرة الداكنة كغوريلات. - **التمثيل الزائد أو الناقص**. الفكرة هي أن مجموعة معينة لا تُرى في مهنة معينة، وأي خدمة أو وظيفة تستمر في تعزيز ذلك تساهم في الضرر. -- **التنميط**. ربط مجموعة معينة بصفات محددة مسبقًا. على سبيل المثال، قد يكون هناك أخطاء في نظام ترجمة اللغة بين الإنجليزية والتركية بسبب الكلمات المرتبطة بتنميط الجنس. +- **التنميط**. ربط مجموعة معينة بصفات محددة مسبقًا. على سبيل المثال، قد يكون هناك أخطاء في نظام ترجمة اللغة بين الإنجليزية والتركية بسبب الكلمات المرتبطة بالتحيزات الجندرية. -![الترجمة إلى التركية](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.ar.png) +![الترجمة إلى التركية](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > الترجمة إلى التركية -![الترجمة إلى الإنجليزية](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.ar.png) +![الترجمة إلى الإنجليزية](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) > الترجمة إلى الإنجليزية -عند تصميم واختبار أنظمة الذكاء الاصطناعي، يجب أن نضمن أن الذكاء الاصطناعي عادل وغير مبرمج لاتخاذ قرارات متحيزة أو تمييزية، وهو ما يُحظر على البشر أيضًا القيام به. ضمان الإنصاف في الذكاء الاصطناعي وتعلم الآلة يظل تحديًا اجتماعيًا تقنيًا معقدًا. +عند تصميم واختبار أنظمة الذكاء الاصطناعي، يجب أن نضمن أن الذكاء الاصطناعي عادل وغير مبرمج لاتخاذ قرارات متحيزة أو تمييزية، وهي قرارات يُحظر على البشر اتخاذها أيضًا. ضمان الإنصاف في الذكاء الاصطناعي والتعلم الآلي يظل تحديًا اجتماعيًا تقنيًا معقدًا. ### الموثوقية والسلامة -لبناء الثقة، يجب أن تكون أنظمة الذكاء الاصطناعي موثوقة وآمنة ومتسقة في الظروف العادية وغير المتوقعة. من المهم معرفة كيف ستتصرف أنظمة الذكاء الاصطناعي في مجموعة متنوعة من المواقف، خاصة عندما تكون هناك حالات شاذة. عند بناء حلول الذكاء الاصطناعي، يجب التركيز بشكل كبير على كيفية التعامل مع مجموعة واسعة من الظروف التي قد تواجهها حلول الذكاء الاصطناعي. على سبيل المثال، يجب أن تضع السيارة ذاتية القيادة سلامة الناس كأولوية قصوى. نتيجة لذلك، يجب أن يأخذ الذكاء الاصطناعي الذي يشغل السيارة في الاعتبار جميع السيناريوهات الممكنة التي قد تواجهها السيارة مثل الليل، العواصف الرعدية أو الثلوج، الأطفال الذين يركضون عبر الشارع، الحيوانات الأليفة، أعمال الطرق، إلخ. مدى قدرة نظام الذكاء الاصطناعي على التعامل مع مجموعة واسعة من الظروف بشكل موثوق وآمن يعكس مستوى التوقعات التي أخذها عالم البيانات أو مطور الذكاء الاصطناعي في الاعتبار أثناء تصميم أو اختبار النظام. +لبناء الثقة، يجب أن تكون أنظمة الذكاء الاصطناعي موثوقة وآمنة ومتسقة في الظروف العادية وغير المتوقعة. من المهم معرفة كيف ستتصرف أنظمة الذكاء الاصطناعي في مجموعة متنوعة من المواقف، خاصة عندما تكون هناك حالات شاذة. عند بناء حلول الذكاء الاصطناعي، يجب التركيز بشكل كبير على كيفية التعامل مع مجموعة واسعة من الظروف التي قد تواجهها هذه الحلول. على سبيل المثال، يجب أن تكون السيارة ذاتية القيادة تضع سلامة الناس كأولوية قصوى. نتيجة لذلك، يجب أن يأخذ الذكاء الاصطناعي الذي يشغل السيارة في الاعتبار جميع السيناريوهات الممكنة التي قد تواجهها السيارة مثل الليل، العواصف الرعدية أو الثلوج، الأطفال الذين يركضون عبر الشارع، الحيوانات الأليفة، أعمال الطرق، إلخ. مدى قدرة نظام الذكاء الاصطناعي على التعامل مع مجموعة واسعة من الظروف بشكل موثوق وآمن يعكس مستوى التوقعات التي أخذها عالم البيانات أو مطور الذكاء الاصطناعي في الاعتبار أثناء تصميم أو اختبار النظام. > [🎥 انقر هنا لمشاهدة الفيديو: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) @@ -73,31 +73,31 @@ CO_OP_TRANSLATOR_METADATA: ### الأمن والخصوصية -يجب أن تكون أنظمة الذكاء الاصطناعي آمنة وتحترم خصوصية الناس. الناس لديهم ثقة أقل في الأنظمة التي تعرض خصوصيتهم، معلوماتهم، أو حياتهم للخطر. عند تدريب نماذج تعلم الآلة، نعتمد على البيانات للحصول على أفضل النتائج. أثناء القيام بذلك، يجب مراعاة مصدر البيانات وسلامتها. على سبيل المثال، هل كانت البيانات مقدمة من المستخدم أو متاحة للجمهور؟ بعد ذلك، أثناء العمل مع البيانات، من الضروري تطوير أنظمة الذكاء الاصطناعي التي يمكنها حماية المعلومات السرية ومقاومة الهجمات. مع انتشار الذكاء الاصطناعي، أصبح حماية الخصوصية وتأمين المعلومات الشخصية والتجارية الهامة أكثر أهمية وتعقيدًا. تتطلب قضايا الخصوصية وأمن البيانات اهتمامًا خاصًا للذكاء الاصطناعي لأن الوصول إلى البيانات ضروري لأنظمة الذكاء الاصطناعي لتقديم توقعات وقرارات دقيقة ومستنيرة حول الناس. +يجب أن تكون أنظمة الذكاء الاصطناعي آمنة وتحترم خصوصية الناس. يقل ثقة الناس في الأنظمة التي تعرض خصوصيتهم أو معلوماتهم أو حياتهم للخطر. عند تدريب نماذج التعلم الآلي، نعتمد على البيانات للحصول على أفضل النتائج. أثناء ذلك، يجب مراعاة مصدر البيانات وسلامتها. على سبيل المثال، هل البيانات مقدمة من المستخدم أو متاحة للجمهور؟ بعد ذلك، أثناء العمل مع البيانات، من الضروري تطوير أنظمة الذكاء الاصطناعي التي يمكنها حماية المعلومات السرية ومقاومة الهجمات. مع انتشار الذكاء الاصطناعي، أصبحت حماية الخصوصية وتأمين المعلومات الشخصية والتجارية الهامة أكثر أهمية وتعقيدًا. تتطلب قضايا الخصوصية وأمن البيانات اهتمامًا خاصًا للذكاء الاصطناعي لأن الوصول إلى البيانات ضروري لأنظمة الذكاء الاصطناعي لتقديم توقعات وقرارات دقيقة ومستنيرة حول الناس. > [🎥 انقر هنا لمشاهدة الفيديو: الأمن في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF) -- كصناعة، حققنا تقدمًا كبيرًا في الخصوصية والأمن، مدفوعًا بشكل كبير باللوائح مثل اللائحة العامة لحماية البيانات (GDPR). +- كصناعة، حققنا تقدمًا كبيرًا في الخصوصية والأمن، مدفوعًا بشكل كبير بتنظيمات مثل اللائحة العامة لحماية البيانات (GDPR). - ومع ذلك، مع أنظمة الذكاء الاصطناعي، يجب أن نعترف بالتوتر بين الحاجة إلى المزيد من البيانات الشخصية لجعل الأنظمة أكثر شخصية وفعالية - والخصوصية. -- كما هو الحال مع ولادة أجهزة الكمبيوتر المتصلة بالإنترنت، نشهد أيضًا زيادة كبيرة في عدد القضايا الأمنية المتعلقة بالذكاء الاصطناعي. -- في الوقت نفسه، رأينا استخدام الذكاء الاصطناعي لتحسين الأمن. على سبيل المثال، معظم ماسحات الفيروسات الحديثة تعتمد على استدلالات الذكاء الاصطناعي اليوم. +- تمامًا كما حدث مع ولادة أجهزة الكمبيوتر المتصلة بالإنترنت، نشهد أيضًا زيادة كبيرة في عدد مشكلات الأمن المتعلقة بالذكاء الاصطناعي. +- في الوقت نفسه، رأينا استخدام الذكاء الاصطناعي لتحسين الأمن. على سبيل المثال، معظم ماسحات الفيروسات الحديثة تعتمد اليوم على استدلالات الذكاء الاصطناعي. - يجب أن نضمن أن عمليات علم البيانات لدينا تتناغم بشكل متناغم مع أحدث ممارسات الخصوصية والأمن. ### الشفافية -يجب أن تكون أنظمة الذكاء الاصطناعي مفهومة. جزء أساسي من الشفافية هو تفسير سلوك أنظمة الذكاء الاصطناعي ومكوناتها. تحسين فهم أنظمة الذكاء الاصطناعي يتطلب أن يفهم أصحاب المصلحة كيف ولماذا تعمل حتى يتمكنوا من تحديد مشكلات الأداء المحتملة، مخاوف السلامة والخصوصية، التحيزات، الممارسات الإقصائية، أو النتائج غير المقصودة. نعتقد أيضًا أن أولئك الذين يستخدمون أنظمة الذكاء الاصطناعي يجب أن يكونوا صادقين وصريحين بشأن متى ولماذا وكيف يختارون نشرها. وكذلك حدود الأنظمة التي يستخدمونها. على سبيل المثال، إذا استخدم بنك نظام ذكاء اصطناعي لدعم قرارات الإقراض للمستهلكين، فمن المهم فحص النتائج وفهم البيانات التي تؤثر على توصيات النظام. بدأت الحكومات في تنظيم الذكاء الاصطناعي عبر الصناعات، لذا يجب على علماء البيانات والمنظمات تفسير ما إذا كان نظام الذكاء الاصطناعي يفي بالمتطلبات التنظيمية، خاصة عندما تكون هناك نتيجة غير مرغوبة. +يجب أن تكون أنظمة الذكاء الاصطناعي مفهومة. جزء أساسي من الشفافية هو تفسير سلوك أنظمة الذكاء الاصطناعي ومكوناتها. تحسين فهم أنظمة الذكاء الاصطناعي يتطلب أن يفهم أصحاب المصلحة كيف ولماذا تعمل هذه الأنظمة بحيث يمكنهم تحديد مشكلات الأداء المحتملة، مخاوف السلامة والخصوصية، التحيزات، الممارسات الإقصائية، أو النتائج غير المقصودة. نعتقد أيضًا أن أولئك الذين يستخدمون أنظمة الذكاء الاصطناعي يجب أن يكونوا صادقين وصريحين بشأن متى ولماذا وكيف يختارون نشرها، بالإضافة إلى قيود الأنظمة التي يستخدمونها. على سبيل المثال، إذا استخدم بنك نظام ذكاء اصطناعي لدعم قرارات الإقراض للمستهلكين، فمن المهم فحص النتائج وفهم البيانات التي تؤثر على توصيات النظام. بدأت الحكومات في تنظيم الذكاء الاصطناعي عبر الصناعات، لذا يجب على علماء البيانات والمنظمات تفسير ما إذا كان نظام الذكاء الاصطناعي يفي بالمتطلبات التنظيمية، خاصة عندما تكون هناك نتيجة غير مرغوبة. > [🎥 انقر هنا لمشاهدة الفيديو: الشفافية في الذكاء الاصطناعي](https://www.microsoft.com/videoplayer/embed/RE4voJF) - نظرًا لأن أنظمة الذكاء الاصطناعي معقدة للغاية، من الصعب فهم كيفية عملها وتفسير النتائج. -- يؤثر هذا الفهم المحدود على طريقة إدارة هذه الأنظمة، تشغيلها، وتوثيقها. -- يؤثر هذا الفهم المحدود بشكل أكبر على القرارات التي يتم اتخاذها باستخدام النتائج التي تنتجها هذه الأنظمة. +- يؤثر هذا النقص في الفهم على طريقة إدارة هذه الأنظمة، تشغيلها، وتوثيقها. +- يؤثر هذا النقص في الفهم بشكل أكثر أهمية على القرارات التي تُتخذ باستخدام النتائج التي تنتجها هذه الأنظمة. ### المساءلة -يجب أن يكون الأشخاص الذين يصممون وينشرون أنظمة الذكاء الاصطناعي مسؤولين عن كيفية عمل أنظمتهم. الحاجة إلى المساءلة مهمة بشكل خاص مع التقنيات الحساسة مثل التعرف على الوجه. مؤخرًا، كان هناك طلب متزايد على تقنية التعرف على الوجه، خاصة من المنظمات القانونية التي ترى إمكانات التكنولوجيا في استخدامات مثل العثور على الأطفال المفقودين. ومع ذلك، يمكن أن تُستخدم هذه التقنيات من قبل الحكومات لتعريض الحريات الأساسية للمواطنين للخطر من خلال، على سبيل المثال، تمكين المراقبة المستمرة لأفراد معينين. لذلك، يجب أن يكون علماء البيانات والمنظمات مسؤولين عن كيفية تأثير نظام الذكاء الاصطناعي على الأفراد أو المجتمع. +يجب أن يكون الأشخاص الذين يصممون وينشرون أنظمة الذكاء الاصطناعي مسؤولين عن كيفية عمل أنظمتهم. الحاجة إلى المساءلة مهمة بشكل خاص مع التقنيات الحساسة مثل التعرف على الوجه. مؤخرًا، كان هناك طلب متزايد على تقنية التعرف على الوجه، خاصة من المنظمات القانونية التي ترى إمكانات التكنولوجيا في استخدامات مثل العثور على الأطفال المفقودين. ومع ذلك، يمكن أن تُستخدم هذه التقنيات من قبل الحكومات لتعريض الحريات الأساسية لمواطنيها للخطر، على سبيل المثال، من خلال تمكين المراقبة المستمرة لأفراد معينين. لذلك، يجب أن يكون علماء البيانات والمنظمات مسؤولين عن كيفية تأثير نظام الذكاء الاصطناعي على الأفراد أو المجتمع. -[![باحث بارز في الذكاء الاصطناعي يحذر من المراقبة الجماعية عبر التعرف على الوجه](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.ar.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول") +[![باحث رائد في الذكاء الاصطناعي يحذر من المراقبة الجماعية عبر التعرف على الوجه](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "نهج مايكروسوفت تجاه الذكاء الاصطناعي المسؤول") > 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: تحذيرات من المراقبة الجماعية عبر التعرف على الوجه @@ -105,18 +105,18 @@ CO_OP_TRANSLATOR_METADATA: ## تقييم التأثير -قبل تدريب نموذج تعلم الآلة، من المهم إجراء تقييم للتأثير لفهم الغرض من نظام الذكاء الاصطناعي؛ ما هو الاستخدام المقصود؛ أين سيتم نشره؛ ومن سيتفاعل مع النظام. هذه التقييمات مفيدة للمراجعين أو المختبرين لتقييم النظام ومعرفة العوامل التي يجب أخذها في الاعتبار عند تحديد المخاطر المحتملة والعواقب المتوقعة. +قبل تدريب نموذج التعلم الآلي، من المهم إجراء تقييم تأثير لفهم الغرض من نظام الذكاء الاصطناعي؛ ما هو الاستخدام المقصود؛ أين سيتم نشره؛ ومن سيتفاعل مع النظام. هذه التقييمات مفيدة للمراجعين أو المختبرين لتقييم النظام ومعرفة العوامل التي يجب أخذها في الاعتبار عند تحديد المخاطر المحتملة والعواقب المتوقعة. تشمل المجالات التي يجب التركيز عليها عند إجراء تقييم التأثير: * **التأثير السلبي على الأفراد**. إدراك أي قيود أو متطلبات، استخدام غير مدعوم أو أي قيود معروفة تعيق أداء النظام أمر ضروري لضمان عدم استخدام النظام بطريقة قد تسبب ضررًا للأفراد. -* **متطلبات البيانات**. فهم كيفية وأين سيستخدم النظام البيانات يمكّن المراجعين من استكشاف أي متطلبات بيانات يجب أن تكون على دراية بها (مثل لوائح GDPR أو HIPPA). بالإضافة إلى ذلك، فحص ما إذا كان مصدر أو كمية البيانات كافية للتدريب. -* **ملخص التأثير**. جمع قائمة بالأضرار المحتملة التي قد تنشأ عن استخدام النظام. خلال دورة حياة تعلم الآلة، مراجعة ما إذا كانت المشكلات المحددة قد تم تخفيفها أو معالجتها. +* **متطلبات البيانات**. فهم كيفية وأين سيستخدم النظام البيانات يمكّن المراجعين من استكشاف أي متطلبات بيانات يجب أن تكون على دراية بها (مثل لوائح GDPR أو HIPPA). بالإضافة إلى ذلك، فحص ما إذا كان مصدر أو كمية البيانات كافٍ للتدريب. +* **ملخص التأثير**. جمع قائمة بالأضرار المحتملة التي قد تنشأ عن استخدام النظام. خلال دورة حياة التعلم الآلي، مراجعة ما إذا كانت المشكلات المحددة قد تم تخفيفها أو معالجتها. * **الأهداف القابلة للتطبيق** لكل من المبادئ الستة الأساسية. تقييم ما إذا كانت الأهداف من كل مبدأ قد تم تحقيقها وما إذا كانت هناك أي فجوات. ## تصحيح الأخطاء باستخدام الذكاء الاصطناعي المسؤول -مثل تصحيح الأخطاء في تطبيق برمجي، فإن تصحيح الأخطاء في نظام الذكاء الاصطناعي هو عملية ضرورية لتحديد وحل المشكلات في النظام. هناك العديد من العوامل التي قد تؤثر على أداء النموذج بشكل غير متوقع أو غير مسؤول. معظم مقاييس أداء النموذج التقليدية هي تجميعات كمية لأداء النموذج، والتي لا تكفي لتحليل كيفية انتهاك النموذج لمبادئ الذكاء الاصطناعي المسؤول. علاوة على ذلك، يعد نموذج تعلم الآلة صندوقًا أسودًا يجعل من الصعب فهم ما يدفع نتائجه أو تقديم تفسير عندما يرتكب خطأ. لاحقًا في هذه الدورة، سنتعلم كيفية استخدام لوحة معلومات الذكاء الاصطناعي المسؤول للمساعدة في تصحيح أخطاء أنظمة الذكاء الاصطناعي. توفر لوحة المعلومات أداة شاملة لعلماء البيانات ومطوري الذكاء الاصطناعي لأداء: +مثل تصحيح الأخطاء في تطبيق برمجي، فإن تصحيح الأخطاء في نظام الذكاء الاصطناعي هو عملية ضرورية لتحديد وحل المشكلات في النظام. هناك العديد من العوامل التي قد تؤثر على أداء النموذج بشكل غير متوقع أو غير مسؤول. معظم مقاييس أداء النموذج التقليدية هي تجميعات كمية لأداء النموذج، والتي لا تكفي لتحليل كيفية انتهاك النموذج لمبادئ الذكاء الاصطناعي المسؤول. علاوة على ذلك، يعد نموذج التعلم الآلي صندوقًا أسودًا يجعل من الصعب فهم ما يدفع نتائجه أو تقديم تفسير عندما يرتكب خطأ. لاحقًا في هذه الدورة، سنتعلم كيفية استخدام لوحة معلومات الذكاء الاصطناعي المسؤول للمساعدة في تصحيح أخطاء أنظمة الذكاء الاصطناعي. توفر لوحة المعلومات أداة شاملة لعلماء البيانات ومطوري الذكاء الاصطناعي للقيام بما يلي: * **تحليل الأخطاء**. لتحديد توزيع الأخطاء في النموذج الذي يمكن أن يؤثر على إنصاف النظام أو موثوقيته. * **نظرة عامة على النموذج**. لاكتشاف أين توجد تفاوتات في أداء النموذج عبر مجموعات البيانات. @@ -125,31 +125,32 @@ CO_OP_TRANSLATOR_METADATA: ## 🚀 التحدي -لمنع الأضرار من أن يتم إدخالها في المقام الأول، يجب علينا: +لمنع الأضرار من أن تُدخل في المقام الأول، يجب علينا: -- وجود تنوع في الخلفيات ووجهات النظر بين الأشخاص الذين يعملون على الأنظمة -- الاستثمار في مجموعات بيانات تعكس تنوع مجتمعنا -- تطوير طرق أفضل خلال دورة حياة تعلم الآلة للكشف عن الذكاء الاصطناعي المسؤول وتصحيحه عند حدوثه +- ضمان تنوع الخلفيات ووجهات النظر بين الأشخاص الذين يعملون على الأنظمة. +- الاستثمار في مجموعات بيانات تعكس تنوع مجتمعنا. +- تطوير طرق أفضل خلال دورة حياة التعلم الآلي للكشف عن الذكاء الاصطناعي المسؤول وتصحيحه عند حدوثه. -فكر في سيناريوهات الحياة الواقعية حيث يكون عدم موثوقية النموذج واضحًا في بناء النموذج واستخدامه. ما الذي يجب أن نأخذه في الاعتبار أيضًا؟ +فكر في سيناريوهات واقعية حيث يكون عدم موثوقية النموذج واضحًا في بناء النموذج واستخدامه. ما الذي يجب أن نأخذه في الاعتبار أيضًا؟ + +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) ## المراجعة والدراسة الذاتية -في هذه الدرس، تعلمت بعض الأساسيات حول مفاهيم العدالة وعدم العدالة في تعلم الآلة. -شاهد هذا الورشة لتتعرف أكثر على المواضيع: +في هذا الدرس، تعلمت بعض أساسيات مفاهيم الإنصاف وعدم الإنصاف في التعلم الآلي. +شاهد هذه الورشة للتعمق أكثر في المواضيع: -- السعي نحو الذكاء الاصطناعي المسؤول: تحويل المبادئ إلى ممارسة بواسطة بسميرة نوشي، مهرنوش سامكي وأميت شارما +- السعي نحو الذكاء الاصطناعي المسؤول: تحويل المبادئ إلى ممارسة بواسطة بسميرة نوشي، مهرنوش ساميكي وأميت شارما -[![Responsible AI Toolbox: إطار عمل مفتوح المصدر لبناء الذكاء الاصطناعي المسؤول](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: إطار عمل مفتوح المصدر لبناء الذكاء الاصطناعي المسؤول") +[![Responsible AI Toolbox: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول") -> 🎥 اضغط على الصورة أعلاه لمشاهدة الفيديو: RAI Toolbox: إطار عمل مفتوح المصدر لبناء الذكاء الاصطناعي المسؤول بواسطة بسميرة نوشي، مهرنوش سامكي وأميت شارما +> 🎥 اضغط على الصورة أعلاه لمشاهدة الفيديو: RAI Toolbox: إطار عمل مفتوح المصدر لبناء ذكاء اصطناعي مسؤول بواسطة بسميرة نوشي، مهرنوش ساميكي، وأميت شارما اقرأ أيضًا: -- مركز موارد الذكاء الاصطناعي المسؤول من مايكروسوفت: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- مركز موارد الذكاء الاصطناعي المسؤول من مايكروسوفت: [موارد الذكاء الاصطناعي المسؤول – مايكروسوفت AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- مجموعة أبحاث FATE من مايكروسوفت: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- مجموعة أبحاث FATE من مايكروسوفت: [FATE: العدالة، المساءلة، الشفافية، والأخلاقيات في الذكاء الاصطناعي - أبحاث مايكروسوفت](https://www.microsoft.com/research/theme/fate/) RAI Toolbox: @@ -166,4 +167,4 @@ RAI Toolbox: --- **إخلاء المسؤولية**: -تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/1-Introduction/4-techniques-of-ML/README.md b/translations/ar/1-Introduction/4-techniques-of-ML/README.md index 3aed8451f..9e72fed55 100644 --- a/translations/ar/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/ar/1-Introduction/4-techniques-of-ML/README.md @@ -1,20 +1,20 @@ # تقنيات تعلم الآلة -عملية بناء واستخدام وصيانة نماذج تعلم الآلة والبيانات التي تستخدمها تختلف بشكل كبير عن العديد من عمليات تطوير البرمجيات الأخرى. في هذه الدرس، سنقوم بتبسيط العملية، ونوضح التقنيات الرئيسية التي تحتاج إلى معرفتها. ستتعلم: +عملية بناء واستخدام وصيانة نماذج تعلم الآلة والبيانات التي تستخدمها تختلف بشكل كبير عن العديد من سير العمل التطويرية الأخرى. في هذا الدرس، سنزيل الغموض عن هذه العملية، ونوضح التقنيات الرئيسية التي تحتاج إلى معرفتها. ستتعلم: - فهم العمليات التي تقوم عليها تعلم الآلة على مستوى عالٍ. - استكشاف المفاهيم الأساسية مثل "النماذج"، "التنبؤات"، و"بيانات التدريب". -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) [![تعلم الآلة للمبتدئين - تقنيات تعلم الآلة](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "تعلم الآلة للمبتدئين - تقنيات تعلم الآلة") @@ -22,25 +22,25 @@ CO_OP_TRANSLATOR_METADATA: ## المقدمة -على مستوى عالٍ، تتكون عملية إنشاء تعلم الآلة (ML) من عدة خطوات: +على مستوى عالٍ، تتكون عملية إنشاء عمليات تعلم الآلة (ML) من عدة خطوات: -1. **تحديد السؤال**. تبدأ معظم عمليات تعلم الآلة بطرح سؤال لا يمكن الإجابة عليه باستخدام برنامج شرطي بسيط أو محرك يعتمد على القواعد. غالبًا ما تدور هذه الأسئلة حول التنبؤات بناءً على مجموعة من البيانات. -2. **جمع وتحضير البيانات**. للإجابة على سؤالك، تحتاج إلى بيانات. جودة البيانات وأحيانًا كميتها ستحدد مدى قدرتك على الإجابة على سؤالك الأولي. يعد تصور البيانات جانبًا مهمًا في هذه المرحلة. تشمل هذه المرحلة أيضًا تقسيم البيانات إلى مجموعة تدريب واختبار لبناء النموذج. -3. **اختيار طريقة التدريب**. بناءً على سؤالك وطبيعة بياناتك، تحتاج إلى اختيار الطريقة التي تريد بها تدريب النموذج لتعكس بياناتك بشكل أفضل وتقديم تنبؤات دقيقة. هذه هي الجزء من عملية تعلم الآلة الذي يتطلب خبرة محددة وغالبًا قدرًا كبيرًا من التجربة. -4. **تدريب النموذج**. باستخدام بيانات التدريب الخاصة بك، ستستخدم خوارزميات مختلفة لتدريب نموذج للتعرف على الأنماط في البيانات. قد يعتمد النموذج على أوزان داخلية يمكن تعديلها لتفضيل أجزاء معينة من البيانات على أخرى لبناء نموذج أفضل. -5. **تقييم النموذج**. تستخدم بيانات لم يتم رؤيتها من قبل (بيانات الاختبار) من المجموعة التي جمعتها لمعرفة كيفية أداء النموذج. +1. **تحديد السؤال**. تبدأ معظم عمليات تعلم الآلة بطرح سؤال لا يمكن الإجابة عليه ببرنامج شرطي بسيط أو محرك قائم على القواعد. غالبًا ما تدور هذه الأسئلة حول التنبؤات بناءً على مجموعة من البيانات. +2. **جمع وتحضير البيانات**. للإجابة على سؤالك، تحتاج إلى بيانات. جودة البيانات وأحيانًا كميتها ستحدد مدى قدرتك على الإجابة على سؤالك الأولي. يعد تصور البيانات جانبًا مهمًا في هذه المرحلة. تتضمن هذه المرحلة أيضًا تقسيم البيانات إلى مجموعة تدريب واختبار لبناء نموذج. +3. **اختيار طريقة التدريب**. بناءً على سؤالك وطبيعة بياناتك، تحتاج إلى اختيار الطريقة التي تريد بها تدريب نموذج يعكس بياناتك بدقة ويقدم تنبؤات دقيقة. هذه هي المرحلة التي تتطلب خبرة محددة وغالبًا قدرًا كبيرًا من التجريب. +4. **تدريب النموذج**. باستخدام بيانات التدريب الخاصة بك، ستستخدم خوارزميات مختلفة لتدريب نموذج للتعرف على الأنماط في البيانات. قد يعتمد النموذج على أوزان داخلية يمكن تعديلها لتفضيل أجزاء معينة من البيانات على الأخرى لبناء نموذج أفضل. +5. **تقييم النموذج**. تستخدم بيانات لم يسبق للنموذج رؤيتها (بيانات الاختبار) من المجموعة التي جمعتها لمعرفة أداء النموذج. 6. **ضبط المعلمات**. بناءً على أداء النموذج، يمكنك إعادة العملية باستخدام معلمات أو متغيرات مختلفة تتحكم في سلوك الخوارزميات المستخدمة لتدريب النموذج. 7. **التنبؤ**. استخدم مدخلات جديدة لاختبار دقة النموذج. -## ما السؤال الذي يجب طرحه؟ +## ما السؤال الذي يجب طرحه -تتميز أجهزة الكمبيوتر بمهارتها في اكتشاف الأنماط المخفية في البيانات. هذه الفائدة مفيدة جدًا للباحثين الذين لديهم أسئلة حول مجال معين لا يمكن الإجابة عليها بسهولة عن طريق إنشاء محرك يعتمد على القواعد الشرطية. على سبيل المثال، في مهمة اكتوارية، قد يتمكن عالم البيانات من إنشاء قواعد يدوية حول معدل الوفيات للمدخنين مقابل غير المدخنين. +تتميز أجهزة الكمبيوتر بمهارتها في اكتشاف الأنماط المخفية في البيانات. هذه الفائدة مفيدة جدًا للباحثين الذين لديهم أسئلة حول مجال معين لا يمكن الإجابة عليها بسهولة من خلال إنشاء محرك قواعد شرطي. على سبيل المثال، قد يتمكن عالم بيانات من إنشاء قواعد يدوية حول معدل الوفيات بين المدخنين وغير المدخنين. -عندما يتم إدخال العديد من المتغيرات الأخرى في المعادلة، قد يكون نموذج تعلم الآلة أكثر كفاءة في التنبؤ بمعدلات الوفيات المستقبلية بناءً على التاريخ الصحي السابق. مثال أكثر تفاؤلاً قد يكون التنبؤ بالطقس لشهر أبريل في موقع معين بناءً على بيانات تشمل خط العرض، خط الطول، تغير المناخ، القرب من المحيط، أنماط التيار النفاث، والمزيد. +ولكن عندما يتم إدخال العديد من المتغيرات الأخرى في المعادلة، قد يكون نموذج تعلم الآلة أكثر كفاءة في التنبؤ بمعدلات الوفيات المستقبلية بناءً على التاريخ الصحي السابق. مثال أكثر تفاؤلاً قد يكون التنبؤ بالطقس لشهر أبريل في موقع معين بناءً على بيانات تشمل خطوط العرض والطول، تغير المناخ، القرب من المحيط، أنماط التيار النفاث، والمزيد. -✅ يقدم هذا [عرض الشرائح](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) منظورًا تاريخيًا لاستخدام تعلم الآلة في تحليل الطقس. +✅ يقدم هذا [العرض التقديمي](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) نظرة تاريخية على استخدام تعلم الآلة في تحليل الطقس. -## مهام ما قبل البناء +## المهام قبل البناء قبل البدء في بناء النموذج الخاص بك، هناك عدة مهام تحتاج إلى إكمالها. لاختبار سؤالك وتشكيل فرضية بناءً على تنبؤات النموذج، تحتاج إلى تحديد وتكوين عدة عناصر. @@ -48,20 +48,20 @@ CO_OP_TRANSLATOR_METADATA: للإجابة على سؤالك بأي درجة من اليقين، تحتاج إلى كمية جيدة من البيانات من النوع الصحيح. هناك شيئان تحتاج إلى القيام بهما في هذه المرحلة: -- **جمع البيانات**. مع الأخذ في الاعتبار الدرس السابق حول الإنصاف في تحليل البيانات، اجمع بياناتك بعناية. كن على دراية بمصادر هذه البيانات، أي تحيزات متأصلة قد تكون لديها، ووثق أصلها. -- **تحضير البيانات**. هناك عدة خطوات في عملية تحضير البيانات. قد تحتاج إلى تجميع البيانات وتطبيعها إذا كانت تأتي من مصادر متنوعة. يمكنك تحسين جودة وكمية البيانات من خلال طرق مختلفة مثل تحويل النصوص إلى أرقام (كما نفعل في [التجميع](../../5-Clustering/1-Visualize/README.md)). قد تقوم أيضًا بإنشاء بيانات جديدة بناءً على الأصل (كما نفعل في [التصنيف](../../4-Classification/1-Introduction/README.md)). يمكنك تنظيف وتحرير البيانات (كما سنفعل قبل درس [تطبيق الويب](../../3-Web-App/README.md)). أخيرًا، قد تحتاج أيضًا إلى عشوائية البيانات وتوزيعها، بناءً على تقنيات التدريب الخاصة بك. +- **جمع البيانات**. مع الأخذ في الاعتبار الدرس السابق حول الإنصاف في تحليل البيانات، اجمع بياناتك بعناية. كن على دراية بمصادر هذه البيانات، وأي تحيزات متأصلة قد تكون لديها، ووثق أصلها. +- **تحضير البيانات**. هناك عدة خطوات في عملية تحضير البيانات. قد تحتاج إلى تجميع البيانات وتطبيعها إذا كانت تأتي من مصادر متنوعة. يمكنك تحسين جودة وكمية البيانات من خلال طرق مختلفة مثل تحويل النصوص إلى أرقام (كما نفعل في [التجميع](../../5-Clustering/1-Visualize/README.md)). قد تقوم أيضًا بإنشاء بيانات جديدة بناءً على الأصل (كما نفعل في [التصنيف](../../4-Classification/1-Introduction/README.md)). يمكنك تنظيف وتحرير البيانات (كما سنفعل قبل درس [تطبيق الويب](../../3-Web-App/README.md)). وأخيرًا، قد تحتاج أيضًا إلى عشوائية البيانات وخلطها، بناءً على تقنيات التدريب الخاصة بك. -✅ بعد جمع ومعالجة بياناتك، خذ لحظة لترى ما إذا كان شكلها سيسمح لك بمعالجة سؤالك المقصود. قد تكون البيانات غير مناسبة لأداء مهمتك، كما نكتشف في دروس [التجميع](../../5-Clustering/1-Visualize/README.md)! +✅ بعد جمع ومعالجة بياناتك، خذ لحظة لترى ما إذا كان شكلها سيسمح لك بمعالجة سؤالك المقصود. قد تكون البيانات غير مناسبة لمهمتك المحددة، كما نكتشف في دروس [التجميع](../../5-Clustering/1-Visualize/README.md)! ### الميزات والهدف -[الميزة](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) هي خاصية قابلة للقياس في بياناتك. في العديد من مجموعات البيانات يتم التعبير عنها كعنوان عمود مثل "التاريخ"، "الحجم"، أو "اللون". تمثل متغيرات الميزات، التي يتم تمثيلها عادةً بـ `X` في الكود، المدخلات التي سيتم استخدامها لتدريب النموذج. +الميزة هي خاصية قابلة للقياس في بياناتك. في العديد من مجموعات البيانات، يتم التعبير عنها كعنوان عمود مثل "التاريخ"، "الحجم"، أو "اللون". تمثل متغيرات الميزات، التي يتم تمثيلها عادةً بـ `X` في الكود، المتغيرات المدخلة التي سيتم استخدامها لتدريب النموذج. -الهدف هو الشيء الذي تحاول التنبؤ به. يتم تمثيل الهدف عادةً بـ `y` في الكود، ويمثل الإجابة على السؤال الذي تحاول طرحه على بياناتك: في ديسمبر، ما **لون** القرع الذي سيكون الأرخص؟ في سان فرانسيسكو، ما الأحياء التي ستتمتع بأفضل **أسعار** العقارات؟ أحيانًا يتم الإشارة إلى الهدف أيضًا كخاصية التسمية. +الهدف هو الشيء الذي تحاول التنبؤ به. يتم تمثيل الهدف عادةً بـ `y` في الكود، ويمثل الإجابة على السؤال الذي تحاول طرحه على بياناتك: في ديسمبر، ما هو **لون** القرع الذي سيكون الأرخص؟ في سان فرانسيسكو، ما هي الأحياء التي ستحتوي على أفضل **أسعار** العقارات؟ أحيانًا يُشار إلى الهدف أيضًا كخاصية التسمية. -### اختيار متغير الميزات الخاص بك +### اختيار متغير الميزة الخاص بك -🎓 **اختيار الميزات واستخراج الميزات** كيف تعرف أي متغير تختار عند بناء نموذج؟ ربما ستخوض عملية اختيار الميزات أو استخراج الميزات لاختيار المتغيرات المناسبة للنموذج الأكثر أداءً. ومع ذلك، هما ليسا نفس الشيء: "استخراج الميزات ينشئ ميزات جديدة من وظائف الميزات الأصلية، بينما اختيار الميزات يعيد مجموعة فرعية من الميزات." ([المصدر](https://wikipedia.org/wiki/Feature_selection)) +🎓 **اختيار الميزات واستخراج الميزات** كيف تعرف أي متغير تختار عند بناء نموذج؟ ربما ستخوض عملية اختيار الميزات أو استخراج الميزات لاختيار المتغيرات المناسبة للنموذج الأكثر كفاءة. ومع ذلك، فهما ليسا نفس الشيء: "استخراج الميزات ينشئ ميزات جديدة من وظائف الميزات الأصلية، بينما اختيار الميزات يعيد مجموعة فرعية من الميزات." ([المصدر](https://wikipedia.org/wiki/Feature_selection)) ### تصور بياناتك @@ -71,62 +71,62 @@ CO_OP_TRANSLATOR_METADATA: قبل التدريب، تحتاج إلى تقسيم مجموعة البيانات الخاصة بك إلى جزأين أو أكثر بأحجام غير متساوية تمثل البيانات بشكل جيد. -- **التدريب**. هذا الجزء من مجموعة البيانات يتم استخدامه لتدريب النموذج. يشكل هذا الجزء غالبية مجموعة البيانات الأصلية. -- **الاختبار**. مجموعة بيانات الاختبار هي مجموعة مستقلة من البيانات، غالبًا ما يتم جمعها من البيانات الأصلية، التي تستخدمها لتأكيد أداء النموذج المبني. +- **التدريب**. هذا الجزء من مجموعة البيانات يتم استخدامه لتدريب النموذج. يشكل هذا الجزء الغالبية من مجموعة البيانات الأصلية. +- **الاختبار**. مجموعة بيانات الاختبار هي مجموعة مستقلة من البيانات، غالبًا ما يتم جمعها من البيانات الأصلية، والتي تستخدمها لتأكيد أداء النموذج المبني. - **التحقق**. مجموعة التحقق هي مجموعة أصغر مستقلة من الأمثلة التي تستخدمها لضبط معلمات النموذج أو هيكله لتحسين النموذج. بناءً على حجم بياناتك والسؤال الذي تطرحه، قد لا تحتاج إلى بناء هذه المجموعة الثالثة (كما نلاحظ في [التنبؤ بالسلاسل الزمنية](../../7-TimeSeries/1-Introduction/README.md)). -## بناء النموذج +## بناء نموذج -باستخدام بيانات التدريب الخاصة بك، هدفك هو بناء نموذج، أو تمثيل إحصائي لبياناتك، باستخدام خوارزميات مختلفة لتدريبه. تدريب النموذج يعرضه للبيانات ويسمح له بعمل افتراضات حول الأنماط التي يكتشفها، يتحقق منها، ويقبلها أو يرفضها. +باستخدام بيانات التدريب الخاصة بك، هدفك هو بناء نموذج، أو تمثيل إحصائي لبياناتك، باستخدام خوارزميات مختلفة لتدريبه. تدريب النموذج يعرضه للبيانات ويسمح له بافتراض الأنماط التي يكتشفها، يتحقق منها، ويقبلها أو يرفضها. ### تحديد طريقة التدريب -بناءً على سؤالك وطبيعة بياناتك، ستختار طريقة لتدريبها. من خلال استعراض [وثائق Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - التي نستخدمها في هذه الدورة - يمكنك استكشاف العديد من الطرق لتدريب النموذج. بناءً على تجربتك، قد تضطر إلى تجربة عدة طرق مختلفة لبناء النموذج الأفضل. من المحتمل أن تخوض عملية يقوم فيها علماء البيانات بتقييم أداء النموذج عن طريق تغذيته ببيانات غير مرئية، والتحقق من الدقة، والتحيز، وغيرها من المشكلات التي تؤثر على الجودة، واختيار طريقة التدريب الأنسب للمهمة المطروحة. +بناءً على سؤالك وطبيعة بياناتك، ستختار طريقة لتدريبها. من خلال استعراض [وثائق Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - التي نستخدمها في هذا الدورة - يمكنك استكشاف العديد من الطرق لتدريب نموذج. بناءً على تجربتك، قد تضطر إلى تجربة عدة طرق مختلفة لبناء النموذج الأفضل. من المحتمل أن تمر بعملية يقوم فيها علماء البيانات بتقييم أداء النموذج من خلال تزويده ببيانات غير مرئية، والتحقق من الدقة، والتحيز، والقضايا الأخرى التي تقلل من الجودة، واختيار طريقة التدريب الأنسب للمهمة المطروحة. ### تدريب النموذج -مسلحًا ببيانات التدريب الخاصة بك، أنت جاهز لتطبيقها لإنشاء نموذج. ستلاحظ أنه في العديد من مكتبات تعلم الآلة ستجد الكود 'model.fit' - في هذا الوقت ترسل متغير الميزات الخاص بك كمصفوفة من القيم (عادةً 'X') ومتغير الهدف (عادةً 'y'). +مسلحًا ببيانات التدريب الخاصة بك، أنت جاهز لـ "تطبيقها" لإنشاء نموذج. ستلاحظ أنه في العديد من مكتبات تعلم الآلة ستجد الكود 'model.fit' - في هذا الوقت تقوم بإرسال متغير الميزة الخاص بك كمصفوفة من القيم (عادةً 'X') ومتغير الهدف (عادةً 'y'). ### تقييم النموذج -بمجرد اكتمال عملية التدريب (قد تستغرق العديد من التكرارات، أو "epochs"، لتدريب نموذج كبير)، ستتمكن من تقييم جودة النموذج باستخدام بيانات الاختبار لقياس أدائه. هذه البيانات هي مجموعة فرعية من البيانات الأصلية التي لم يقم النموذج بتحليلها مسبقًا. يمكنك طباعة جدول من المقاييس حول جودة النموذج. +بمجرد اكتمال عملية التدريب (قد تستغرق العديد من التكرارات، أو "epochs"، لتدريب نموذج كبير)، ستتمكن من تقييم جودة النموذج باستخدام بيانات الاختبار لقياس أدائه. هذه البيانات هي جزء فرعي من البيانات الأصلية التي لم يقم النموذج بتحليلها مسبقًا. يمكنك طباعة جدول من المقاييس حول جودة النموذج. 🎓 **تطبيق النموذج** في سياق تعلم الآلة، يشير تطبيق النموذج إلى دقة الوظيفة الأساسية للنموذج أثناء محاولته تحليل البيانات التي ليست مألوفة له. -🎓 **التطبيق غير الجيد** و**التطبيق المفرط** هما مشكلتان شائعتان تؤثران على جودة النموذج، حيث يتناسب النموذج إما بشكل غير كافٍ أو بشكل مفرط. يؤدي ذلك إلى جعل النموذج يقدم تنبؤات إما متوافقة جدًا أو غير متوافقة جدًا مع بيانات التدريب الخاصة به. النموذج المفرط التناسب يتنبأ ببيانات التدريب بشكل جيد جدًا لأنه تعلم تفاصيل البيانات وضوضائها بشكل مفرط. النموذج غير الجيد التناسب ليس دقيقًا لأنه لا يمكنه تحليل بيانات التدريب الخاصة به أو البيانات التي لم يسبق له رؤيتها بدقة. +🎓 **التطبيق الناقص** و **التطبيق الزائد** هما مشكلتان شائعتان تقللان من جودة النموذج، حيث يتناسب النموذج إما بشكل غير كافٍ أو بشكل زائد. يؤدي ذلك إلى جعل النموذج يقدم تنبؤات إما متطابقة جدًا أو غير متطابقة مع بيانات التدريب الخاصة به. النموذج الزائد يتنبأ ببيانات التدريب بشكل جيد جدًا لأنه تعلم تفاصيل البيانات وضوضائها بشكل زائد. النموذج الناقص ليس دقيقًا لأنه لا يمكنه تحليل بيانات التدريب الخاصة به أو البيانات التي لم "يرها" بعد بدقة. -![نموذج مفرط التناسب](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.ar.png) +![نموذج زائد التطبيق](../../../../1-Introduction/4-techniques-of-ML/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). +بمجرد اكتمال التدريب الأولي، راقب جودة النموذج وفكر في تحسينه عن طريق تعديل "المعلمات الفائقة". اقرأ المزيد عن العملية [في الوثائق](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://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية -ابحث عبر الإنترنت عن مقابلات مع علماء بيانات يناقشون عملهم اليومي. إليك [واحدة](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +ابحث عبر الإنترنت عن مقابلات مع علماء بيانات يناقشون عملهم اليومي. هنا [واحدة](https://www.youtube.com/watch?v=Z3IjgbbCEfs). ## الواجب -[قم بمقابلة عالم بيانات](assignment.md) +[قم بمقابلة مع عالم بيانات](assignment.md) --- **إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-Regression/1-Tools/README.md b/translations/ar/2-Regression/1-Tools/README.md index d7a50e28c..a08f6c4d3 100644 --- a/translations/ar/2-Regression/1-Tools/README.md +++ b/translations/ar/2-Regression/1-Tools/README.md @@ -1,31 +1,31 @@ -# ابدأ مع Python و Scikit-learn لنماذج الانحدار +# البدء مع Python و Scikit-learn لنماذج الانحدار -![ملخص الانحدارات في رسم توضيحي](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.ar.png) +![ملخص الانحدارات في رسم توضيحي](../../../../sketchnotes/ml-regression.png) > رسم توضيحي بواسطة [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) -> ### [هذا الدرس متوفر بلغة R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) +> ### [هذه الدرس متوفر بلغة R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## المقدمة -في هذه الدروس الأربعة، ستتعلم كيفية بناء نماذج الانحدار. سنناقش قريبًا ما هي استخداماتها. ولكن قبل أن تبدأ، تأكد من أن لديك الأدوات المناسبة للبدء! +في هذه الدروس الأربعة، ستتعلم كيفية بناء نماذج الانحدار. سنناقش قريبًا ما هي هذه النماذج وما الغرض منها. ولكن قبل أن تبدأ بأي شيء، تأكد من أن لديك الأدوات المناسبة للبدء! في هذا الدرس، ستتعلم كيفية: - إعداد جهاز الكمبيوتر الخاص بك لمهام تعلم الآلة المحلية. - العمل مع دفاتر Jupyter. -- استخدام مكتبة Scikit-learn، بما في ذلك التثبيت. +- استخدام Scikit-learn، بما في ذلك التثبيت. - استكشاف الانحدار الخطي من خلال تمرين عملي. ## التثبيت والإعدادات @@ -34,29 +34,29 @@ CO_OP_TRANSLATOR_METADATA: > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد جهاز الكمبيوتر الخاص بك لتعلم الآلة. -1. **تثبيت Python**. تأكد من أن [Python](https://www.python.org/downloads/) مثبت على جهاز الكمبيوتر الخاص بك. ستستخدم Python في العديد من مهام علوم البيانات وتعلم الآلة. معظم أنظمة الكمبيوتر تحتوي بالفعل على تثبيت Python. هناك أيضًا [حزم برمجية لـ Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفيدة لتسهيل الإعداد لبعض المستخدمين. +1. **تثبيت Python**. تأكد من أن [Python](https://www.python.org/downloads/) مثبت على جهاز الكمبيوتر الخاص بك. ستستخدم Python للعديد من مهام علوم البيانات وتعلم الآلة. معظم أنظمة الكمبيوتر تحتوي بالفعل على تثبيت Python. هناك أيضًا [حزم برمجية لـ Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفيدة لتسهيل الإعداد لبعض المستخدمين. - ومع ذلك، تتطلب بعض استخدامات Python إصدارًا معينًا من البرنامج، بينما تتطلب استخدامات أخرى إصدارًا مختلفًا. لهذا السبب، من المفيد العمل داخل [بيئة افتراضية](https://docs.python.org/3/library/venv.html). + بعض استخدامات Python تتطلب إصدارًا معينًا من البرنامج، بينما تتطلب أخرى إصدارًا مختلفًا. لهذا السبب، من المفيد العمل داخل [بيئة افتراضية](https://docs.python.org/3/library/venv.html). -2. **تثبيت Visual Studio Code**. تأكد من تثبيت Visual Studio Code على جهاز الكمبيوتر الخاص بك. اتبع هذه التعليمات لـ [تثبيت Visual Studio Code](https://code.visualstudio.com/) للتثبيت الأساسي. ستستخدم Python في Visual Studio Code في هذه الدورة، لذا قد ترغب في مراجعة كيفية [إعداد Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) لتطوير Python. +2. **تثبيت Visual Studio Code**. تأكد من أن Visual Studio Code مثبت على جهاز الكمبيوتر الخاص بك. اتبع هذه التعليمات لتثبيت [Visual Studio Code](https://code.visualstudio.com/) للتثبيت الأساسي. ستستخدم Python في Visual Studio Code في هذه الدورة، لذا قد ترغب في مراجعة كيفية [إعداد Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) لتطوير Python. - > تعرّف على Python من خلال العمل على هذه المجموعة من [الوحدات التعليمية](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > تعرف على Python من خلال هذه المجموعة من [وحدات التعلم](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) > > [![إعداد Python مع Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "إعداد Python مع Visual Studio Code") > > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: استخدام Python داخل VS Code. -3. **تثبيت Scikit-learn**، باتباع [هذه التعليمات](https://scikit-learn.org/stable/install.html). نظرًا لأنك تحتاج إلى التأكد من استخدام Python 3، يُوصى باستخدام بيئة افتراضية. لاحظ أنه إذا كنت تقوم بتثبيت هذه المكتبة على جهاز Mac بمعالج M1، فهناك تعليمات خاصة على الصفحة المذكورة أعلاه. +3. **تثبيت Scikit-learn**، باتباع [هذه التعليمات](https://scikit-learn.org/stable/install.html). نظرًا لأنك تحتاج إلى التأكد من استخدام Python 3، يُوصى باستخدام بيئة افتراضية. لاحظ أنه إذا كنت تقوم بتثبيت هذه المكتبة على جهاز Mac M1، فهناك تعليمات خاصة على الصفحة المرتبطة أعلاه. 4. **تثبيت Jupyter Notebook**. ستحتاج إلى [تثبيت حزمة Jupyter](https://pypi.org/project/jupyter/). ## بيئة تأليف تعلم الآلة الخاصة بك -ستستخدم **دفاتر الملاحظات (notebooks)** لتطوير كود Python الخاص بك وإنشاء نماذج تعلم الآلة. هذا النوع من الملفات هو أداة شائعة لعلماء البيانات، ويمكن التعرف عليه من خلال الامتداد `.ipynb`. +ستستخدم **دفاتر الملاحظات** لتطوير كود Python الخاص بك وإنشاء نماذج تعلم الآلة. هذا النوع من الملفات هو أداة شائعة لعلماء البيانات، ويمكن التعرف عليها من خلال لاحقتها أو امتدادها `.ipynb`. -دفاتر الملاحظات هي بيئة تفاعلية تتيح للمطور كتابة الكود وإضافة الملاحظات وكتابة التوثيق حول الكود، مما يكون مفيدًا جدًا للمشاريع التجريبية أو البحثية. +دفاتر الملاحظات هي بيئة تفاعلية تسمح للمطور بكتابة الكود وإضافة ملاحظات وكتابة توثيق حول الكود، وهو أمر مفيد جدًا للمشاريع التجريبية أو البحثية. -[![تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter لبدء بناء نماذج الانحدار](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter لبدء بناء نماذج الانحدار") +[![تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter للبدء في بناء نماذج الانحدار](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "تعلم الآلة للمبتدئين - إعداد دفاتر Jupyter للبدء في بناء نماذج الانحدار") > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول هذا التمرين. @@ -66,9 +66,9 @@ CO_OP_TRANSLATOR_METADATA: 1. افتح _notebook.ipynb_ في Visual Studio Code. - سيتم تشغيل خادم Jupyter مع Python 3+. ستجد مناطق في دفتر الملاحظات يمكن تشغيلها، وهي أجزاء من الكود. يمكنك تشغيل كتلة كود عن طريق تحديد الأيقونة التي تشبه زر التشغيل. + سيتم تشغيل خادم Jupyter مع Python 3+. ستجد مناطق في دفتر الملاحظات يمكن تشغيلها، وهي أجزاء من الكود. يمكنك تشغيل كتلة الكود عن طريق تحديد الرمز الذي يشبه زر التشغيل. -2. حدد أيقونة `md` وأضف بعض النصوص باستخدام Markdown، مثل النص التالي: **# مرحبًا بك في دفتر الملاحظات الخاص بك**. +2. حدد رمز `md` وأضف بعض النصوص باستخدام Markdown، والنص التالي **# مرحبًا بك في دفتر ملاحظاتك**. بعد ذلك، أضف بعض كود Python. @@ -81,23 +81,23 @@ CO_OP_TRANSLATOR_METADATA: hello notebook ``` -![VS Code مع دفتر ملاحظات مفتوح](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.ar.jpg) +![VS Code مع دفتر ملاحظات مفتوح](../../../../2-Regression/1-Tools/images/notebook.jpg) -يمكنك دمج الكود مع التعليقات لتوثيق دفتر الملاحظات بنفسك. +يمكنك دمج الكود مع التعليقات لتوثيق دفتر الملاحظات ذاتيًا. ✅ فكر للحظة في مدى اختلاف بيئة عمل مطور الويب عن بيئة عمل عالم البيانات. ## البدء مع Scikit-learn -الآن بعد أن تم إعداد Python في بيئتك المحلية وأصبحت مرتاحًا مع دفاتر Jupyter، دعنا نتعرف على Scikit-learn (تُنطق `ساي` كما في `ساينس`). توفر Scikit-learn [واجهة برمجية شاملة](https://scikit-learn.org/stable/modules/classes.html#api-ref) لمساعدتك في تنفيذ مهام تعلم الآلة. +الآن بعد أن تم إعداد Python في بيئتك المحلية وأصبحت مرتاحًا مع دفاتر Jupyter، دعنا نتعرف على Scikit-learn (تُنطق `sci` كما في `science`). توفر Scikit-learn [واجهة برمجية شاملة](https://scikit-learn.org/stable/modules/classes.html#api-ref) لمساعدتك في تنفيذ مهام تعلم الآلة. وفقًا لموقعهم [الرسمي](https://scikit-learn.org/stable/getting_started.html)، "Scikit-learn هي مكتبة مفتوحة المصدر لتعلم الآلة تدعم التعلم الموجه وغير الموجه. كما توفر أدوات متنوعة لتلائم النماذج، ومعالجة البيانات، واختيار النماذج وتقييمها، والعديد من الأدوات الأخرى." في هذه الدورة، ستستخدم Scikit-learn وأدوات أخرى لبناء نماذج تعلم الآلة لتنفيذ ما نسميه مهام "تعلم الآلة التقليدي". لقد تجنبنا عمدًا الشبكات العصبية والتعلم العميق، حيث يتم تغطيتها بشكل أفضل في منهجنا القادم "الذكاء الاصطناعي للمبتدئين". -تجعل Scikit-learn من السهل بناء النماذج وتقييمها للاستخدام. تركز بشكل أساسي على استخدام البيانات الرقمية وتحتوي على العديد من مجموعات البيانات الجاهزة للاستخدام كأدوات تعليمية. كما تتضمن نماذج جاهزة يمكن للطلاب تجربتها. دعنا نستكشف عملية تحميل البيانات المعبأة مسبقًا واستخدام نموذج تقدير مدمج لإنشاء أول نموذج تعلم آلي باستخدام Scikit-learn مع بعض البيانات الأساسية. +تجعل Scikit-learn بناء النماذج وتقييمها للاستخدام أمرًا بسيطًا. وهي تركز بشكل أساسي على استخدام البيانات الرقمية وتحتوي على العديد من مجموعات البيانات الجاهزة للاستخدام كأدوات تعليمية. كما تتضمن نماذج مسبقة الصنع يمكن للطلاب تجربتها. دعنا نستكشف عملية تحميل البيانات المعبأة مسبقًا واستخدام نموذج تقدير أولي مع Scikit-learn باستخدام بعض البيانات الأساسية. -## تمرين - أول دفتر ملاحظات باستخدام Scikit-learn +## تمرين - أول دفتر ملاحظات لك مع Scikit-learn > هذا الدرس مستوحى من [مثال الانحدار الخطي](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) على موقع Scikit-learn. @@ -105,23 +105,23 @@ CO_OP_TRANSLATOR_METADATA: > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول هذا التمرين. -في الملف _notebook.ipynb_ المرتبط بهذا الدرس، قم بمسح جميع الخلايا عن طريق الضغط على أيقونة "سلة المهملات". +في ملف _notebook.ipynb_ المرتبط بهذا الدرس، قم بمسح جميع الخلايا بالضغط على رمز "سلة المهملات". -في هذا القسم، ستعمل مع مجموعة بيانات صغيرة حول مرض السكري مدمجة في Scikit-learn لأغراض التعلم. تخيل أنك تريد اختبار علاج لمرضى السكري. قد تساعدك نماذج تعلم الآلة في تحديد المرضى الذين قد يستجيبون بشكل أفضل للعلاج، بناءً على مجموعات من المتغيرات. حتى نموذج الانحدار الأساسي جدًا، عند تصوره، قد يظهر معلومات حول المتغيرات التي يمكن أن تساعدك في تنظيم التجارب السريرية النظرية. +في هذا القسم، ستعمل مع مجموعة بيانات صغيرة حول مرض السكري مضمنة في Scikit-learn لأغراض التعلم. تخيل أنك تريد اختبار علاج لمرضى السكري. قد تساعدك نماذج تعلم الآلة في تحديد المرضى الذين قد يستجيبون بشكل أفضل للعلاج بناءً على مجموعات من المتغيرات. حتى نموذج الانحدار الأساسي جدًا، عند تصوره، قد يظهر معلومات حول المتغيرات التي قد تساعدك في تنظيم تجاربك السريرية النظرية. -✅ هناك العديد من أنواع طرق الانحدار، واختيارك يعتمد على الإجابة التي تبحث عنها. إذا كنت تريد التنبؤ بالطول المحتمل لشخص بناءً على عمره، ستستخدم الانحدار الخطي، حيث أنك تبحث عن **قيمة رقمية**. إذا كنت مهتمًا بمعرفة ما إذا كان نوع معين من الطعام يجب اعتباره نباتيًا أم لا، فأنت تبحث عن **تصنيف فئوي** وبالتالي ستستخدم الانحدار اللوجستي. فكر قليلاً في بعض الأسئلة التي يمكنك طرحها على البيانات، وأي من هذه الطرق ستكون أكثر ملاءمة. +✅ هناك العديد من أنواع طرق الانحدار، واختيارك يعتمد على الإجابة التي تبحث عنها. إذا كنت تريد التنبؤ بالطول المحتمل لشخص بناءً على عمره، ستستخدم الانحدار الخطي، حيث تبحث عن **قيمة رقمية**. إذا كنت مهتمًا بمعرفة ما إذا كان نوع معين من الطعام يجب اعتباره نباتيًا أم لا، فأنت تبحث عن **تعيين فئة** وبالتالي ستستخدم الانحدار اللوجستي. ستتعلم المزيد عن الانحدار اللوجستي لاحقًا. فكر قليلاً في بعض الأسئلة التي يمكنك طرحها على البيانات، وأي من هذه الطرق سيكون أكثر ملاءمة. -دعنا نبدأ هذه المهمة. +لنبدأ هذه المهمة. ### استيراد المكتبات لهذه المهمة، سنقوم باستيراد بعض المكتبات: -- **matplotlib**. إنها أداة [رسم بياني](https://matplotlib.org/) مفيدة وسنستخدمها لإنشاء رسم خطي. +- **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. أضف الاستيرادات بكتابة الكود التالي: @@ -131,24 +131,24 @@ CO_OP_TRANSLATOR_METADATA: from sklearn import datasets, linear_model, model_selection ``` - أعلاه، تقوم باستيراد `matplotlib`، و`numpy`، وتستورد `datasets`، و`linear_model`، و`model_selection` من `sklearn`. يتم استخدام `model_selection` لتقسيم البيانات إلى مجموعات تدريب واختبار. + أعلاه، تقوم باستيراد `matplotlib` و `numpy` وتستورد `datasets` و `linear_model` و `model_selection` من `sklearn`. يتم استخدام `model_selection` لتقسيم البيانات إلى مجموعات تدريب واختبار. ### مجموعة بيانات السكري -مجموعة البيانات المدمجة [السكري](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) تحتوي على 442 عينة بيانات حول مرض السكري، مع 10 متغيرات مميزة، بعضها يشمل: +مجموعة بيانات [السكري المدمجة](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) تحتوي على 442 عينة من البيانات حول مرض السكري، مع 10 متغيرات مميزة، بعضها يشمل: - العمر: العمر بالسنوات - مؤشر كتلة الجسم (bmi): مؤشر كتلة الجسم - ضغط الدم (bp): متوسط ضغط الدم -- s1 tc: خلايا T (نوع من خلايا الدم البيضاء) +- خلايا T (s1 tc): نوع من خلايا الدم البيضاء -✅ تتضمن مجموعة البيانات هذه مفهوم "الجنس" كمتغير مميز مهم للبحث حول مرض السكري. تحتوي العديد من مجموعات البيانات الطبية على هذا النوع من التصنيفات الثنائية. فكر قليلاً في كيفية استبعاد مثل هذه التصنيفات لأجزاء معينة من السكان من العلاجات. +✅ تتضمن هذه المجموعة مفهوم "الجنس" كمتغير مميز مهم للبحث حول مرض السكري. العديد من مجموعات البيانات الطبية تتضمن هذا النوع من التصنيف الثنائي. فكر قليلاً في كيفية تأثير مثل هذه التصنيفات على استبعاد أجزاء معينة من السكان من العلاجات. الآن، قم بتحميل بيانات X و y. -> 🎓 تذكر، هذا تعلم موجه، ونحن بحاجة إلى هدف مسمى 'y'. +> 🎓 تذكر، هذا تعلم موجه، ونحتاج إلى هدف مسمى "y". -في خلية كود جديدة، قم بتحميل مجموعة بيانات السكري عن طريق استدعاء `load_diabetes()`. الإعداد `return_X_y=True` يشير إلى أن `X` ستكون مصفوفة بيانات، و`y` ستكون الهدف الانحداري. +في خلية كود جديدة، قم بتحميل مجموعة بيانات السكري عن طريق استدعاء `load_diabetes()`. الإعداد `return_X_y=True` يشير إلى أن `X` ستكون مصفوفة بيانات، و `y` ستكون الهدف الانحداري. 1. أضف بعض أوامر الطباعة لعرض شكل مصفوفة البيانات وأول عنصر فيها: @@ -158,7 +158,7 @@ CO_OP_TRANSLATOR_METADATA: print(X[0]) ``` - ما تحصل عليه كاستجابة هو مجموعة. ما تقوم به هو تعيين القيمتين الأوليين من المجموعة إلى `X` و`y` على التوالي. تعرف على المزيد [حول المجموعات](https://wikipedia.org/wiki/Tuple). + ما تحصل عليه كاستجابة هو مجموعة. ما تقوم به هو تعيين القيمتين الأوليين للمجموعة إلى `X` و `y` على التوالي. تعرف على المزيد [حول المجموعات](https://wikipedia.org/wiki/Tuple). يمكنك رؤية أن هذه البيانات تحتوي على 442 عنصرًا مرتبة في مصفوفات تحتوي على 10 عناصر: @@ -168,9 +168,9 @@ CO_OP_TRANSLATOR_METADATA: -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` - ✅ فكر قليلاً في العلاقة بين البيانات والهدف الانحداري. يتنبأ الانحدار الخطي بالعلاقات بين الميزة X والمتغير الهدف y. هل يمكنك العثور على [الهدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) لمجموعة بيانات السكري في الوثائق؟ ماذا توضح هذه المجموعة من البيانات، بالنظر إلى الهدف؟ + ✅ فكر قليلاً في العلاقة بين البيانات والهدف الانحداري. الانحدار الخطي يتنبأ بالعلاقات بين الميزة X والمتغير الهدف y. هل يمكنك العثور على [الهدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) لمجموعة بيانات السكري في الوثائق؟ ما الذي تظهره هذه المجموعة، بالنظر إلى الهدف؟ -2. بعد ذلك، اختر جزءًا من هذه البيانات لرسمه عن طريق اختيار العمود الثالث من مجموعة البيانات. يمكنك القيام بذلك باستخدام المشغل `:` لاختيار جميع الصفوف، ثم اختيار العمود الثالث باستخدام الفهرس (2). يمكنك أيضًا إعادة تشكيل البيانات لتكون مصفوفة ثنائية الأبعاد - كما هو مطلوب للرسم - باستخدام `reshape(n_rows, n_columns)`. إذا كانت إحدى المعلمات -1، يتم حساب البعد المقابل تلقائيًا. +2. بعد ذلك، اختر جزءًا من هذه المجموعة لرسمه عن طريق اختيار العمود الثالث من المجموعة. يمكنك القيام بذلك باستخدام المشغل `:` لاختيار جميع الصفوف، ثم اختيار العمود الثالث باستخدام الفهرس (2). يمكنك أيضًا إعادة تشكيل البيانات لتكون مصفوفة ثنائية الأبعاد - كما هو مطلوب للرسم - باستخدام `reshape(n_rows, n_columns)`. إذا كانت إحدى المعلمات -1، يتم حساب البعد المقابل تلقائيًا. ```python X = X[:, 2] @@ -179,7 +179,7 @@ CO_OP_TRANSLATOR_METADATA: ✅ في أي وقت، قم بطباعة البيانات للتحقق من شكلها. -3. الآن بعد أن أصبحت البيانات جاهزة للرسم، يمكنك معرفة ما إذا كان يمكن للآلة تحديد تقسيم منطقي بين الأرقام في مجموعة البيانات هذه. للقيام بذلك، تحتاج إلى تقسيم كل من البيانات (X) والهدف (y) إلى مجموعات اختبار وتدريب. تحتوي Scikit-learn على طريقة مباشرة للقيام بذلك؛ يمكنك تقسيم بيانات الاختبار عند نقطة معينة. +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) @@ -200,7 +200,7 @@ CO_OP_TRANSLATOR_METADATA: y_pred = model.predict(X_test) ``` -6. الآن حان الوقت لعرض البيانات في رسم بياني. Matplotlib هي أداة مفيدة جدًا لهذه المهمة. قم بإنشاء مخطط نقطي لجميع بيانات الاختبار X و y، واستخدم التوقع لرسم خط في المكان الأنسب، بين مجموعات البيانات الخاصة بالنموذج. +6. الآن حان الوقت لعرض البيانات في مخطط. Matplotlib هي أداة مفيدة جدًا لهذه المهمة. قم بإنشاء مخطط نقاط لجميع بيانات الاختبار X و y، واستخدم التوقع لرسم خط في المكان الأنسب بين مجموعات البيانات الخاصة بالنموذج. ```python plt.scatter(X_test, y_test, color='black') @@ -211,23 +211,23 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![مخطط نقطي يظهر نقاط البيانات حول مرض السكري](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.ar.png) -✅ فكر قليلاً فيما يحدث هنا. هناك خط مستقيم يمر عبر العديد من النقاط الصغيرة للبيانات، ولكن ماذا يفعل بالضبط؟ هل يمكنك أن ترى كيف يمكن استخدام هذا الخط للتنبؤ بمكان نقطة بيانات جديدة وغير مرئية بالنسبة لمحور y في الرسم البياني؟ حاول أن تصف الاستخدام العملي لهذا النموذج بالكلمات. + ![مخطط نقاط يظهر نقاط البيانات حول مرض السكري](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ فكر قليلاً فيما يحدث هنا. هناك خط مستقيم يمر عبر العديد من النقاط الصغيرة من البيانات، ولكن ماذا يفعل بالضبط؟ هل يمكنك أن ترى كيف يمكن استخدام هذا الخط للتنبؤ بمكان نقطة بيانات جديدة وغير مرئية بالنسبة لمحور y في الرسم البياني؟ حاول أن تصف الاستخدام العملي لهذا النموذج بالكلمات. -تهانينا، لقد قمت ببناء أول نموذج انحدار خطي، وأنشأت توقعًا باستخدامه، وعرضته في رسم بياني! +تهانينا، لقد قمت ببناء أول نموذج انحدار خطي، وأنشأت تنبؤًا باستخدامه، وعرضته في رسم بياني! --- ## 🚀التحدي قم برسم متغير مختلف من هذه المجموعة البيانية. تلميح: قم بتعديل هذا السطر: `X = X[:,2]`. بالنظر إلى الهدف من هذه المجموعة البيانية، ماذا يمكنك اكتشافه عن تطور مرض السكري كمرض؟ -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية في هذا الدرس، عملت مع الانحدار الخطي البسيط، بدلاً من الانحدار الأحادي أو الانحدار المتعدد. اقرأ قليلاً عن الفروقات بين هذه الطرق، أو شاهد [هذا الفيديو](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). -اقرأ المزيد عن مفهوم الانحدار وفكر في نوع الأسئلة التي يمكن الإجابة عليها باستخدام هذه التقنية. خذ [هذا الدرس](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) لتعميق فهمك. +اقرأ المزيد عن مفهوم الانحدار وفكر في نوعية الأسئلة التي يمكن الإجابة عليها باستخدام هذه التقنية. خذ [هذا الدرس](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) لتعميق فهمك. ## الواجب @@ -236,4 +236,4 @@ CO_OP_TRANSLATOR_METADATA: --- **إخلاء المسؤولية**: -تمت ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو عدم دقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-Regression/2-Data/README.md b/translations/ar/2-Regression/2-Data/README.md index 98f6410e8..5683ab75b 100644 --- a/translations/ar/2-Regression/2-Data/README.md +++ b/translations/ar/2-Regression/2-Data/README.md @@ -1,19 +1,19 @@ # بناء نموذج انحدار باستخدام Scikit-learn: إعداد البيانات وتصويرها -![مخطط معلومات لتصور البيانات](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.ar.png) +![مخطط تصوير البيانات](../../../../2-Regression/2-Data/images/data-visualization.png) -مخطط المعلومات من [Dasani Madipalli](https://twitter.com/dasani_decoded) +مخطط تصوير البيانات بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) > ### [هذه الدرس متوفر بلغة R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) @@ -24,11 +24,11 @@ CO_OP_TRANSLATOR_METADATA: في هذا الدرس، ستتعلم: - كيفية إعداد البيانات لبناء النماذج. -- كيفية استخدام مكتبة Matplotlib لتصور البيانات. +- كيفية استخدام مكتبة Matplotlib لتصوير البيانات. ## طرح السؤال الصحيح على بياناتك -السؤال الذي تحتاج إلى الإجابة عليه سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. كما أن جودة الإجابة التي تحصل عليها تعتمد بشكل كبير على طبيعة البيانات. +السؤال الذي تحتاج إلى الإجابة عليه سيحدد نوع خوارزميات تعلم الآلة التي ستستخدمها. كما أن جودة الإجابة التي تحصل عليها تعتمد بشكل كبير على طبيعة بياناتك. ألقِ نظرة على [البيانات](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) المقدمة لهذا الدرس. يمكنك فتح ملف .csv هذا في VS Code. نظرة سريعة تظهر على الفور وجود فراغات ومزيج من النصوص والبيانات الرقمية. هناك أيضًا عمود غريب يسمى "Package" حيث تكون البيانات مزيجًا بين "sacks"، "bins" وقيم أخرى. البيانات، في الواقع، تبدو فوضوية بعض الشيء. @@ -36,11 +36,11 @@ CO_OP_TRANSLATOR_METADATA: > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول إعداد البيانات لهذا الدرس. -في الواقع، من غير الشائع أن تحصل على مجموعة بيانات جاهزة تمامًا للاستخدام لإنشاء نموذج تعلم الآلة مباشرة. في هذا الدرس، ستتعلم كيفية إعداد مجموعة بيانات خام باستخدام مكتبات Python القياسية. ستتعلم أيضًا تقنيات مختلفة لتصور البيانات. +في الواقع، من غير الشائع أن تحصل على مجموعة بيانات جاهزة تمامًا للاستخدام لإنشاء نموذج تعلم آلي مباشرة. في هذا الدرس، ستتعلم كيفية إعداد مجموعة بيانات خام باستخدام مكتبات Python القياسية. ستتعلم أيضًا تقنيات مختلفة لتصوير البيانات. ## دراسة حالة: "سوق القرع" -في هذا المجلد، ستجد ملف .csv في مجلد الجذر `data` يسمى [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) والذي يتضمن 1757 سطرًا من البيانات حول سوق القرع، مرتبة في مجموعات حسب المدينة. هذه بيانات خام مستخرجة من [تقارير السوق القياسية للمحاصيل الخاصة](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) التي توزعها وزارة الزراعة الأمريكية. +في هذا المجلد، ستجد ملف .csv في مجلد الجذر `data` يسمى [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) والذي يحتوي على 1757 سطرًا من البيانات حول سوق القرع، مرتبة في مجموعات حسب المدينة. هذه بيانات خام مستخرجة من [تقارير السوق القياسية للمحاصيل الخاصة](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) التي توزعها وزارة الزراعة الأمريكية. ### إعداد البيانات @@ -54,7 +54,7 @@ CO_OP_TRANSLATOR_METADATA: ## تمرين - تحليل بيانات القرع -دعونا نستخدم [Pandas](https://pandas.pydata.org/) (الاسم اختصار لـ `Python Data Analysis`) وهي أداة مفيدة جدًا لتشكيل البيانات، لتحليل وإعداد بيانات القرع. +لنستخدم [Pandas](https://pandas.pydata.org/) (الاسم اختصار لـ `Python Data Analysis`) وهي أداة مفيدة جدًا لتشكيل البيانات، لتحليل وإعداد بيانات القرع. ### أولاً، تحقق من التواريخ المفقودة @@ -81,7 +81,7 @@ CO_OP_TRANSLATOR_METADATA: pumpkins.isnull().sum() ``` - هناك بيانات مفقودة، ولكن ربما لن تكون مهمة للمهمة المطروحة. + هناك بيانات مفقودة، ولكن ربما لن تكون مهمة للمهمة الحالية. 1. لجعل إطار البيانات الخاص بك أسهل للعمل معه، اختر فقط الأعمدة التي تحتاجها، باستخدام وظيفة `loc` التي تستخرج من إطار البيانات الأصلي مجموعة من الصفوف (الممررة كمعامل أول) والأعمدة (الممررة كمعامل ثاني). التعبير `:` في الحالة أدناه يعني "جميع الصفوف". @@ -117,11 +117,11 @@ CO_OP_TRANSLATOR_METADATA: ### لكن انتظر! هناك شيء غريب هنا -إذا نظرت إلى عمود `Package`، يتم بيع القرع بتكوينات مختلفة. بعضها يُباع بمقاييس "1 1/9 bushel"، وبعضها بمقاييس "1/2 bushel"، وبعضها لكل قرع، وبعضها لكل رطل، وبعضها في صناديق كبيرة بأحجام مختلفة. +إذا نظرت إلى عمود `Package`، يتم بيع القرع في تكوينات مختلفة. بعضها يُباع بمقاييس "1 1/9 bushel"، وبعضها بمقاييس "1/2 bushel"، وبعضها لكل قرع، وبعضها لكل رطل، وبعضها في صناديق كبيرة بأحجام مختلفة. > يبدو أن القرع صعب الوزن بشكل متسق -بالتعمق في البيانات الأصلية، من المثير للاهتمام أن أي شيء يحتوي على `Unit of Sale` يساوي "EACH" أو "PER BIN" يحتوي أيضًا على نوع `Package` لكل بوصة، لكل صندوق، أو "each". يبدو أن القرع صعب الوزن بشكل متسق، لذا دعونا نقوم بتصفيته عن طريق اختيار فقط القرع الذي يحتوي على السلسلة "bushel" في عمود `Package`. +بالتعمق في البيانات الأصلية، من المثير للاهتمام أن أي شيء يحتوي على `Unit of Sale` يساوي "EACH" أو "PER BIN" يحتوي أيضًا على نوع `Package` لكل بوصة، لكل صندوق، أو "each". يبدو أن القرع صعب الوزن بشكل متسق، لذا دعونا نقوم بتصفيته عن طريق اختيار فقط القرع الذي يحتوي على النص "bushel" في عمود `Package`. 1. أضف فلتر في أعلى الملف، تحت استيراد ملف .csv الأولي: @@ -135,7 +135,7 @@ CO_OP_TRANSLATOR_METADATA: هل لاحظت أن كمية البوشل تختلف حسب الصف؟ تحتاج إلى تطبيع التسعير بحيث تظهر التسعير لكل بوشل، لذا قم ببعض العمليات الحسابية لتوحيدها. -1. أضف هذه الأسطر بعد الكتلة التي تنشئ إطار بيانات القرع الجديد: +1. أضف هذه الأسطر بعد الكتلة التي تنشئ إطار بيانات new_pumpkins: ```python new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) @@ -143,27 +143,27 @@ CO_OP_TRANSLATOR_METADATA: 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 رطلاً." الأمر معقد جدًا! دعونا لا نزعج أنفسنا بتحويل البوشل إلى رطل، وبدلاً من ذلك نقوم بالتسعير حسب البوشل. كل هذه الدراسة للبوشل من القرع، مع ذلك، تظهر مدى أهمية فهم طبيعة بياناتك! +✅ وفقًا لـ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)، يعتمد وزن البوشل على نوع المنتج، حيث إنه قياس حجم. "يُفترض أن يزن بوشل الطماطم، على سبيل المثال، 56 رطلاً... الأوراق والخضروات تشغل مساحة أكبر بوزن أقل، لذا فإن بوشل السبانخ يزن فقط 20 رطلاً." الأمر معقد جدًا! دعونا لا نزعج أنفسنا بتحويل البوشل إلى رطل، وبدلاً من ذلك نحدد السعر حسب البوشل. كل هذا الدراسة للبوشل من القرع، مع ذلك، تظهر مدى أهمية فهم طبيعة بياناتك! الآن، يمكنك تحليل التسعير لكل وحدة بناءً على قياس البوشل الخاص بها. إذا قمت بطباعة البيانات مرة أخرى، يمكنك رؤية كيف تم توحيدها. ✅ هل لاحظت أن القرع الذي يُباع بنصف بوشل غالي جدًا؟ هل يمكنك معرفة السبب؟ تلميح: القرع الصغير أغلى بكثير من الكبير، ربما لأن هناك الكثير منه لكل بوشل، بالنظر إلى المساحة غير المستخدمة التي يشغلها قرع كبير مجوف. -## استراتيجيات التصور +## استراتيجيات التصوير -جزء من دور عالم البيانات هو توضيح جودة وطبيعة البيانات التي يعملون معها. للقيام بذلك، غالبًا ما يقومون بإنشاء تصورات مثيرة للاهتمام، مثل المخططات، الرسوم البيانية، والخرائط، التي تظهر جوانب مختلفة من البيانات. بهذه الطريقة، يمكنهم عرض العلاقات والفجوات بصريًا التي يصعب اكتشافها بطريقة أخرى. +جزء من دور عالم البيانات هو توضيح جودة وطبيعة البيانات التي يعمل معها. للقيام بذلك، غالبًا ما يقومون بإنشاء تصورات مثيرة للاهتمام، مثل المخططات، الرسوم البيانية، والخرائط، التي تظهر جوانب مختلفة من البيانات. بهذه الطريقة، يمكنهم عرض العلاقات والفجوات بصريًا التي يصعب اكتشافها بطريقة أخرى. -[![تعلم الآلة للمبتدئين - كيفية تصور البيانات باستخدام Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "تعلم الآلة للمبتدئين - كيفية تصور البيانات باستخدام Matplotlib") +[![تعلم الآلة للمبتدئين - كيفية تصوير البيانات باستخدام Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "تعلم الآلة للمبتدئين - كيفية تصوير البيانات باستخدام Matplotlib") -> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول تصور البيانات لهذا الدرس. +> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير حول تصوير البيانات لهذا الدرس. يمكن أن تساعد التصورات أيضًا في تحديد تقنية تعلم الآلة الأكثر ملاءمة للبيانات. على سبيل المثال، مخطط الانتشار الذي يبدو أنه يتبع خطًا يشير إلى أن البيانات مرشحة جيدة لتمرين الانحدار الخطي. -واحدة من مكتبات التصور التي تعمل بشكل جيد في دفاتر Jupyter هي [Matplotlib](https://matplotlib.org/) (التي رأيتها أيضًا في الدرس السابق). +أحد مكتبات تصوير البيانات التي تعمل جيدًا في دفاتر Jupyter هو [Matplotlib](https://matplotlib.org/) (الذي رأيته أيضًا في الدرس السابق). -> احصل على المزيد من الخبرة مع تصور البيانات في [هذه الدروس](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). +> احصل على المزيد من الخبرة مع تصوير البيانات في [هذه الدروس](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). -## تمرين - تجربة مع Matplotlib +## تمرين - التجربة مع Matplotlib حاول إنشاء بعض المخططات الأساسية لعرض إطار البيانات الجديد الذي أنشأته للتو. ماذا سيظهر مخطط خطي أساسي؟ @@ -183,13 +183,13 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![مخطط انتشار يظهر العلاقة بين السعر والشهر](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.ar.png) + ![مخطط انتشار يظهر العلاقة بين السعر والشهر](../../../../2-Regression/2-Data/images/scatterplot.png) - هل هذا مخطط مفيد؟ هل هناك شيء يفاجئك بشأنه؟ + هل هذا مخطط مفيد؟ هل هناك شيء يفاجئك؟ - إنه ليس مفيدًا بشكل خاص حيث إنه يعرض فقط بياناتك كانتشار نقاط في شهر معين. + إنه ليس مفيدًا بشكل خاص حيث إنه يعرض فقط بياناتك كنقاط منتشرة في شهر معين. -### اجعله مفيدًا +### اجعلها مفيدة لجعل المخططات تعرض بيانات مفيدة، عادةً ما تحتاج إلى تجميع البيانات بطريقة ما. دعونا نحاول إنشاء مخطط حيث يظهر المحور y الأشهر وتظهر البيانات توزيع البيانات. @@ -200,9 +200,9 @@ CO_OP_TRANSLATOR_METADATA: plt.ylabel("Pumpkin Price") ``` - ![مخطط شريطي يظهر العلاقة بين السعر والشهر](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.ar.png) + ![مخطط شريطي يظهر العلاقة بين السعر والشهر](../../../../2-Regression/2-Data/images/barchart.png) - هذا هو تصور بيانات أكثر فائدة! يبدو أنه يشير إلى أن أعلى سعر للقرع يحدث في سبتمبر وأكتوبر. هل يتوافق ذلك مع توقعاتك؟ لماذا أو لماذا لا؟ + هذا تصوير بيانات أكثر فائدة! يبدو أنه يشير إلى أن أعلى سعر للقرع يحدث في سبتمبر وأكتوبر. هل يتوافق ذلك مع توقعاتك؟ لماذا أو لماذا لا؟ --- @@ -210,17 +210,17 @@ CO_OP_TRANSLATOR_METADATA: استكشف الأنواع المختلفة من التصورات التي تقدمها Matplotlib. ما الأنواع الأكثر ملاءمة لمشاكل الانحدار؟ -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية -ألقِ نظرة على الطرق العديدة لتصور البيانات. قم بعمل قائمة بالمكتبات المختلفة المتاحة ودوّن أيها الأفضل لأنواع معينة من المهام، على سبيل المثال التصورات ثنائية الأبعاد مقابل التصورات ثلاثية الأبعاد. ماذا تكتشف؟ +ألقِ نظرة على الطرق العديدة لتصوير البيانات. قم بعمل قائمة بالمكتبات المختلفة المتاحة ولاحظ أيها الأفضل لأنواع معينة من المهام، على سبيل المثال التصورات ثنائية الأبعاد مقابل التصورات ثلاثية الأبعاد. ماذا تكتشف؟ ## الواجب -[استكشاف التصور](assignment.md) +[استكشاف التصوير](assignment.md) --- **إخلاء المسؤولية**: -تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذه الوثيقة باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). على الرغم من أننا نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار الوثيقة الأصلية بلغتها الأصلية المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-Regression/3-Linear/README.md b/translations/ar/2-Regression/3-Linear/README.md index c45bad042..c82e6cb3b 100644 --- a/translations/ar/2-Regression/3-Linear/README.md +++ b/translations/ar/2-Regression/3-Linear/README.md @@ -1,92 +1,92 @@ -# بناء نموذج انحدار باستخدام Scikit-learn: أربعة أنواع من الانحدار +# بناء نموذج انحدار باستخدام Scikit-learn: الانحدار بأربع طرق -![مخطط معلوماتي عن الانحدار الخطي مقابل الانحدار متعدد الحدود](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.ar.png) -> مخطط معلوماتي من إعداد [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +![مخطط معلوماتي عن الانحدار الخطي مقابل الانحدار متعدد الحدود](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> مخطط معلوماتي بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) -> ### [هذا الدرس متوفر بلغة R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) -### المقدمة +> ### [هذه الدرس متوفر بلغة R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### المقدمة حتى الآن، قمت باستكشاف مفهوم الانحدار باستخدام بيانات عينة مأخوذة من مجموعة بيانات تسعير القرع التي سنستخدمها طوال هذا الدرس. كما قمت بتصورها باستخدام مكتبة Matplotlib. -الآن أنت مستعد للتعمق أكثر في الانحدار لتعلم الآلة. بينما يسمح التصور بفهم البيانات، فإن القوة الحقيقية لتعلم الآلة تأتي من _تدريب النماذج_. يتم تدريب النماذج على بيانات تاريخية لالتقاط العلاقات بين البيانات تلقائيًا، مما يسمح لك بالتنبؤ بالنتائج لبيانات جديدة لم يرها النموذج من قبل. +الآن أنت جاهز للتعمق أكثر في الانحدار في تعلم الآلة. بينما يسمح التصور بفهم البيانات، فإن القوة الحقيقية لتعلم الآلة تأتي من _تدريب النماذج_. يتم تدريب النماذج على البيانات التاريخية لالتقاط العلاقات بين البيانات تلقائيًا، وتتيح لك التنبؤ بالنتائج للبيانات الجديدة التي لم يرها النموذج من قبل. -في هذا الدرس، ستتعلم المزيد عن نوعين من الانحدار: _الانحدار الخطي الأساسي_ و_الانحدار متعدد الحدود_، بالإضافة إلى بعض الرياضيات التي تدعم هذه التقنيات. ستتيح لنا هذه النماذج التنبؤ بأسعار القرع بناءً على بيانات إدخال مختلفة. +في هذا الدرس، ستتعلم المزيد عن نوعين من الانحدار: _الانحدار الخطي الأساسي_ و _الانحدار متعدد الحدود_، إلى جانب بعض الرياضيات الأساسية لهذه التقنيات. ستتيح لنا هذه النماذج التنبؤ بأسعار القرع بناءً على بيانات الإدخال المختلفة. -[![تعلم الآلة للمبتدئين - فهم الانحدار الخطي](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "تعلم الآلة للمبتدئين - فهم الانحدار الخطي") +[![تعلّم الآلة للمبتدئين - فهم الانحدار الخطي](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "تعلّم الآلة للمبتدئين - فهم الانحدار الخطي") > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن الانحدار الخطي. -> خلال هذا المنهج، نفترض معرفة رياضية بسيطة، ونسعى لجعلها متاحة للطلاب القادمين من مجالات أخرى، لذا انتبه للملاحظات، 🧮 التنبيهات، الرسوم البيانية، وأدوات التعلم الأخرى التي تساعد على الفهم. +> خلال هذه المنهجية، نفترض معرفة بسيطة بالرياضيات، ونسعى لجعلها سهلة الوصول للطلاب القادمين من مجالات أخرى، لذا ابحث عن الملاحظات، 🧮 التنبيهات، الرسوم البيانية، وأدوات التعلم الأخرى لتسهيل الفهم. ### المتطلبات الأساسية -يجب أن تكون الآن على دراية ببنية بيانات القرع التي نقوم بفحصها. يمكنك العثور عليها محملة مسبقًا ومنظفة مسبقًا في ملف _notebook.ipynb_ الخاص بهذا الدرس. في الملف، يتم عرض سعر القرع لكل سلة في إطار بيانات جديد. تأكد من أنك تستطيع تشغيل هذه الدفاتر في النواة الخاصة بـ Visual Studio Code. +يجب أن تكون الآن على دراية ببنية بيانات القرع التي نقوم بفحصها. يمكنك العثور عليها محملة مسبقًا ومُنظفة مسبقًا في ملف _notebook.ipynb_ الخاص بهذا الدرس. في الملف، يتم عرض سعر القرع لكل بوشل في إطار بيانات جديد. تأكد من أنك تستطيع تشغيل هذه الدفاتر في النواة الخاصة بـ Visual Studio Code. ### التحضير -كتذكير، تقوم بتحميل هذه البيانات لطرح أسئلة عليها. +كتذكير، أنت تقوم بتحميل هذه البيانات لطرح أسئلة عليها. - متى يكون أفضل وقت لشراء القرع؟ - ما السعر المتوقع لصندوق من القرع الصغير؟ -- هل يجب أن أشتريه في سلال نصف البوشل أم في صناديق 1 1/9 بوشل؟ -دعنا نستمر في استكشاف هذه البيانات. +- هل يجب أن أشتريه في سلال نصف بوشل أو في صناديق بوشل 1 1/9؟ +دعونا نستمر في استكشاف هذه البيانات. -في الدرس السابق، قمت بإنشاء إطار بيانات باستخدام Pandas وملأته بجزء من مجموعة البيانات الأصلية، موحدًا التسعير حسب البوشل. ومع ذلك، من خلال القيام بذلك، تمكنت فقط من جمع حوالي 400 نقطة بيانات وللأشهر الخريفية فقط. +في الدرس السابق، قمت بإنشاء إطار بيانات باستخدام Pandas وملأته بجزء من مجموعة البيانات الأصلية، موحدًا التسعير حسب البوشل. ومع ذلك، من خلال القيام بذلك، تمكنت فقط من جمع حوالي 400 نقطة بيانات وفقط للأشهر الخريفية. -ألقِ نظرة على البيانات المحملة مسبقًا في دفتر الملاحظات المرافق لهذا الدرس. البيانات محملة مسبقًا وتم رسم مخطط مبعثر أولي لإظهار بيانات الأشهر. ربما يمكننا الحصول على مزيد من التفاصيل حول طبيعة البيانات من خلال تنظيفها أكثر. +ألقِ نظرة على البيانات التي قمنا بتحميلها مسبقًا في دفتر الملاحظات المرافق لهذا الدرس. البيانات محملة مسبقًا وتم رسم مخطط مبعثر أولي لإظهار بيانات الأشهر. ربما يمكننا الحصول على مزيد من التفاصيل حول طبيعة البيانات من خلال تنظيفها أكثر. ## خط الانحدار الخطي -كما تعلمت في الدرس الأول، الهدف من تمرين الانحدار الخطي هو رسم خط لـ: +كما تعلمت في الدرس الأول، الهدف من تمرين الانحدار الخطي هو القدرة على رسم خط لـ: -- **إظهار العلاقات بين المتغيرات**. إظهار العلاقة بين المتغيرات. +- **إظهار العلاقات بين المتغيرات**. إظهار العلاقة بين المتغيرات - **إجراء التنبؤات**. إجراء تنبؤات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط. -من الشائع استخدام **انحدار المربعات الصغرى** لرسم هذا النوع من الخطوط. يشير مصطلح "المربعات الصغرى" إلى أن جميع نقاط البيانات المحيطة بخط الانحدار يتم تربيعها ثم جمعها. من الناحية المثالية، يكون المجموع النهائي صغيرًا قدر الإمكان، لأننا نريد عددًا منخفضًا من الأخطاء، أو `المربعات الصغرى`. +من المعتاد استخدام **انحدار المربعات الصغرى** لرسم هذا النوع من الخطوط. مصطلح "المربعات الصغرى" يعني أن جميع نقاط البيانات المحيطة بخط الانحدار يتم تربيعها ثم جمعها. من الناحية المثالية، يكون المجموع النهائي صغيرًا قدر الإمكان، لأننا نريد عددًا منخفضًا من الأخطاء، أو `المربعات الصغرى`. نقوم بذلك لأننا نريد نمذجة خط يحتوي على أقل مسافة تراكمية من جميع نقاط البيانات لدينا. كما نقوم بتربيع المصطلحات قبل جمعها لأننا نهتم بحجمها بدلاً من اتجاهها. > **🧮 أرني الرياضيات** -> -> يمكن التعبير عن هذا الخط، المسمى _خط أفضل تطابق_، بواسطة [معادلة](https://en.wikipedia.org/wiki/Simple_linear_regression): -> +> +> يمكن التعبير عن هذا الخط، المسمى _خط أفضل تطابق_، بواسطة [معادلة](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` > -> `X` هو "المتغير التوضيحي". `Y` هو "المتغير التابع". ميل الخط هو `b` و`a` هو نقطة تقاطع المحور Y، والتي تشير إلى قيمة `Y` عندما يكون `X = 0`. +> `X` هو "المتغير التوضيحي". `Y` هو "المتغير التابع". ميل الخط هو `b` و `a` هو نقطة تقاطع المحور Y، والتي تشير إلى قيمة `Y` عندما يكون `X = 0`. > ->![حساب الميل](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.ar.png) +>![حساب الميل](../../../../2-Regression/3-Linear/images/slope.png) > -> أولاً، احسب الميل `b`. مخطط معلوماتي من إعداد [Jen Looper](https://twitter.com/jenlooper) +> أولاً، احسب الميل `b`. مخطط معلوماتي بواسطة [Jen Looper](https://twitter.com/jenlooper) > -> بعبارة أخرى، وبالإشارة إلى السؤال الأصلي لبيانات القرع: "توقع سعر القرع لكل بوشل حسب الشهر"، سيكون `X` يشير إلى السعر و`Y` يشير إلى شهر البيع. +> بعبارة أخرى، وبالإشارة إلى السؤال الأصلي لبيانات القرع: "توقع سعر القرع لكل بوشل حسب الشهر"، سيكون `X` يشير إلى السعر و `Y` يشير إلى شهر البيع. > ->![إكمال المعادلة](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.ar.png) +>![إكمال المعادلة](../../../../2-Regression/3-Linear/images/calculation.png) > -> احسب قيمة Y. إذا كنت تدفع حوالي 4 دولارات، فلا بد أن يكون أبريل! مخطط معلوماتي من إعداد [Jen Looper](https://twitter.com/jenlooper) +> احسب قيمة Y. إذا كنت تدفع حوالي 4 دولارات، فلا بد أن يكون أبريل! مخطط معلوماتي بواسطة [Jen Looper](https://twitter.com/jenlooper) > -> يجب أن توضح الرياضيات التي تحسب الخط ميل الخط، والذي يعتمد أيضًا على نقطة التقاطع، أو مكان وجود `Y` عندما يكون `X = 0`. +> يجب أن تُظهر الرياضيات التي تحسب الخط ميل الخط، والذي يعتمد أيضًا على نقطة التقاطع، أو مكان وجود `Y` عندما يكون `X = 0`. > -> يمكنك مشاهدة طريقة الحساب لهذه القيم على موقع [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). قم أيضًا بزيارة [آلة حاسبة المربعات الصغرى](https://www.mathsisfun.com/data/least-squares-calculator.html) لمشاهدة كيفية تأثير قيم الأرقام على الخط. +> يمكنك مشاهدة طريقة الحساب لهذه القيم على موقع [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، فإن الارتباط يكون منخفضًا. +مصطلح آخر يجب فهمه هو **معامل الارتباط** بين المتغيرين X و Y المعطىين. باستخدام مخطط مبعثر، يمكنك بسرعة تصور هذا المعامل. مخطط يحتوي على نقاط بيانات متناثرة في خط مرتب لديه ارتباط عالي، ولكن مخطط يحتوي على نقاط بيانات متناثرة في كل مكان بين X و Y لديه ارتباط منخفض. -نموذج الانحدار الخطي الجيد سيكون نموذجًا يحتوي على معامل ارتباط عالٍ (أقرب إلى 1 من 0) باستخدام طريقة انحدار المربعات الصغرى مع خط الانحدار. +نموذج الانحدار الخطي الجيد سيكون النموذج الذي يحتوي على معامل ارتباط عالي (أقرب إلى 1 من 0) باستخدام طريقة انحدار المربعات الصغرى مع خط الانحدار. -✅ قم بتشغيل دفتر الملاحظات المرافق لهذا الدرس وانظر إلى المخطط المبعثر بين الشهر والسعر. هل تبدو البيانات التي تربط الشهر بالسعر لمبيعات القرع ذات ارتباط عالٍ أم منخفض، وفقًا لتفسيرك البصري للمخطط المبعثر؟ هل يتغير ذلك إذا استخدمت مقياسًا أكثر دقة بدلاً من `الشهر`، مثل *يوم السنة* (أي عدد الأيام منذ بداية السنة)؟ +✅ قم بتشغيل دفتر الملاحظات المرافق لهذا الدرس وانظر إلى مخطط الشهر مقابل السعر. هل تبدو البيانات التي تربط الشهر بالسعر لمبيعات القرع ذات ارتباط عالي أو منخفض، وفقًا لتفسيرك البصري للمخطط المبعثر؟ هل يتغير ذلك إذا استخدمت مقياسًا أكثر دقة بدلاً من `الشهر`، مثل *اليوم من السنة* (أي عدد الأيام منذ بداية السنة)؟ في الكود أدناه، سنفترض أننا قمنا بتنظيف البيانات، وحصلنا على إطار بيانات يسمى `new_pumpkins`، مشابه لما يلي: @@ -98,36 +98,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri 73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> الكود لتنظيف البيانات متوفر في [`notebook.ipynb`](notebook.ipynb). قمنا بتنفيذ نفس خطوات التنظيف كما في الدرس السابق، وحسبنا عمود `DayOfYear` باستخدام التعبير التالي: +> الكود لتنظيف البيانات متوفر في [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). قمنا بتنفيذ نفس خطوات التنظيف كما في الدرس السابق، وقمنا بحساب عمود `DayOfYear` باستخدام التعبير التالي: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -الآن بعد أن أصبحت لديك فكرة عن الرياضيات وراء الانحدار الخطي، دعنا ننشئ نموذج انحدار لنرى ما إذا كان بإمكاننا التنبؤ بأي حزمة من القرع ستحتوي على أفضل أسعار القرع. قد يرغب شخص يشتري القرع لمزرعة قرع في العطلات في الحصول على هذه المعلومات لتحسين مشترياته من حزم القرع للمزرعة. +الآن بعد أن أصبحت لديك فهم للرياضيات وراء الانحدار الخطي، دعنا ننشئ نموذج انحدار لنرى ما إذا كان بإمكاننا التنبؤ بأي حزمة من القرع ستحتوي على أفضل أسعار القرع. قد يرغب شخص يشتري القرع لحديقة قرع العطلات في هذه المعلومات ليتمكن من تحسين مشترياته من حزم القرع للحديقة. ## البحث عن الارتباط -[![تعلم الآلة للمبتدئين - البحث عن الارتباط: المفتاح للانحدار الخطي](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "تعلم الآلة للمبتدئين - البحث عن الارتباط: المفتاح للانحدار الخطي") +[![تعلّم الآلة للمبتدئين - البحث عن الارتباط: المفتاح للانحدار الخطي](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "تعلّم الآلة للمبتدئين - البحث عن الارتباط: المفتاح للانحدار الخطي") > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن الارتباط. -من الدرس السابق، ربما لاحظت أن متوسط السعر للأشهر المختلفة يبدو كالتالي: +من الدرس السابق ربما لاحظت أن متوسط السعر للأشهر المختلفة يبدو كالتالي: متوسط السعر حسب الشهر -يشير هذا إلى أنه قد يكون هناك ارتباط، ويمكننا محاولة تدريب نموذج انحدار خطي للتنبؤ بالعلاقة بين `الشهر` و`السعر`، أو بين `يوم السنة` و`السعر`. هنا المخطط المبعثر الذي يظهر العلاقة الأخيرة: +هذا يشير إلى أنه يجب أن يكون هناك بعض الارتباط، ويمكننا محاولة تدريب نموذج انحدار خطي للتنبؤ بالعلاقة بين `الشهر` و `السعر`، أو بين `اليوم من السنة` و `السعر`. إليك المخطط المبعثر الذي يظهر العلاقة الأخيرة: -مخطط مبعثر للسعر مقابل يوم السنة +مخطط مبعثر للسعر مقابل اليوم من السنة -دعنا نرى ما إذا كان هناك ارتباط باستخدام دالة `corr`: +دعونا نرى ما إذا كان هناك ارتباط باستخدام وظيفة `corr`: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -يبدو أن الارتباط صغير جدًا، -0.15 بالنسبة لـ `الشهر` و-0.17 بالنسبة لـ `يوم الشهر`، ولكن قد تكون هناك علاقة مهمة أخرى. يبدو أن هناك مجموعات مختلفة من الأسعار تتوافق مع أنواع مختلفة من القرع. لتأكيد هذه الفرضية، دعنا نرسم كل فئة من القرع بلون مختلف. عن طريق تمرير معامل `ax` إلى دالة الرسم المبعثر، يمكننا رسم جميع النقاط على نفس الرسم البياني: +يبدو أن الارتباط صغير جدًا، -0.15 حسب `الشهر` و -0.17 حسب `اليوم من الشهر`، ولكن قد تكون هناك علاقة مهمة أخرى. يبدو أن هناك مجموعات مختلفة من الأسعار تتوافق مع أنواع مختلفة من القرع. لتأكيد هذه الفرضية، دعونا نرسم كل فئة من القرع باستخدام لون مختلف. من خلال تمرير معلمة `ax` إلى وظيفة الرسم المبعثر، يمكننا رسم جميع النقاط على نفس الرسم البياني: ```python ax=None @@ -137,27 +137,27 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -مخطط مبعثر للسعر مقابل يوم السنة +مخطط مبعثر للسعر مقابل اليوم من السنة -تشير تحقيقاتنا إلى أن النوع له تأثير أكبر على السعر الإجمالي من تاريخ البيع الفعلي. يمكننا رؤية ذلك باستخدام رسم بياني شريطي: +تشير تحقيقاتنا إلى أن النوع له تأثير أكبر على السعر الإجمالي من تاريخ البيع الفعلي. يمكننا رؤية ذلك باستخدام مخطط شريطي: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` -رسم بياني شريطي للسعر مقابل النوع +مخطط شريطي للسعر مقابل النوع -دعنا نركز في الوقت الحالي فقط على نوع واحد من القرع، وهو "نوع الفطيرة"، ونرى ما هو تأثير التاريخ على السعر: +دعونا نركز في الوقت الحالي فقط على نوع واحد من القرع، وهو "نوع الفطيرة"، ونرى ما هو تأثير التاريخ على السعر: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -مخطط مبعثر للسعر مقابل يوم السنة +مخطط مبعثر للسعر مقابل اليوم من السنة -إذا قمنا الآن بحساب الارتباط بين `السعر` و`يوم السنة` باستخدام دالة `corr`، سنحصل على شيء مثل `-0.27` - مما يعني أن تدريب نموذج تنبؤي يبدو منطقيًا. +إذا قمنا الآن بحساب الارتباط بين `السعر` و `اليوم من السنة` باستخدام وظيفة `corr`، سنحصل على شيء مثل `-0.27` - مما يعني أن تدريب نموذج تنبؤي يبدو منطقيًا. -> قبل تدريب نموذج الانحدار الخطي، من المهم التأكد من أن بياناتنا نظيفة. لا يعمل الانحدار الخطي بشكل جيد مع القيم المفقودة، لذا من المنطقي التخلص من جميع الخلايا الفارغة: +> قبل تدريب نموذج الانحدار الخطي، من المهم التأكد من أن بياناتنا نظيفة. لا يعمل الانحدار الخطي جيدًا مع القيم المفقودة، لذا من المنطقي التخلص من جميع الخلايا الفارغة: ```python pie_pumpkins.dropna(inplace=True) @@ -168,7 +168,7 @@ pie_pumpkins.info() ## الانحدار الخطي البسيط -[![تعلم الآلة للمبتدئين - الانحدار الخطي ومتعدد الحدود باستخدام Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "تعلم الآلة للمبتدئين - الانحدار الخطي ومتعدد الحدود باستخدام Scikit-learn") +[![تعلّم الآلة للمبتدئين - الانحدار الخطي ومتعدد الحدود باستخدام Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "تعلّم الآلة للمبتدئين - الانحدار الخطي ومتعدد الحدود باستخدام Scikit-learn") > 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن الانحدار الخطي ومتعدد الحدود. @@ -187,7 +187,7 @@ X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> لاحظ أننا اضطررنا إلى تنفيذ `reshape` على بيانات الإدخال لكي يفهمها حزمة الانحدار الخطي بشكل صحيح. يتوقع الانحدار الخطي مصفوفة ثنائية الأبعاد كمدخل، حيث يمثل كل صف من المصفوفة متجهًا لميزات الإدخال. في حالتنا، بما أن لدينا مدخلًا واحدًا فقط - نحتاج إلى مصفوفة ذات شكل N×1، حيث N هو حجم مجموعة البيانات. +> لاحظ أننا اضطررنا إلى تنفيذ `reshape` على بيانات الإدخال لكي يفهمها حزمة الانحدار الخطي بشكل صحيح. يتوقع الانحدار الخطي مصفوفة ثنائية الأبعاد كمدخل، حيث يمثل كل صف من المصفوفة متجهًا لميزات الإدخال. في حالتنا، نظرًا لأن لدينا مدخلًا واحدًا فقط - نحتاج إلى مصفوفة ذات شكل N×1، حيث N هو حجم مجموعة البيانات. ثم، نحتاج إلى تقسيم البيانات إلى مجموعات تدريب واختبار، حتى نتمكن من التحقق من صحة النموذج بعد التدريب: @@ -195,16 +195,16 @@ y = pie_pumpkins['Price'] X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -أخيرًا، تدريب نموذج الانحدار الخطي الفعلي يستغرق سطرين فقط من الكود. نقوم بتعريف كائن `LinearRegression`، ونقوم بتدريبه على بياناتنا باستخدام دالة `fit`: +أخيرًا، تدريب نموذج الانحدار الخطي الفعلي يستغرق فقط سطرين من الكود. نقوم بتعريف كائن `LinearRegression`، ونقوم بتدريبه على بياناتنا باستخدام طريقة `fit`: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -يحتوي كائن `LinearRegression` بعد عملية `fit` على جميع معاملات الانحدار، والتي يمكن الوصول إليها باستخدام خاصية `.coef_`. في حالتنا، هناك معامل واحد فقط، والذي يجب أن يكون حوالي `-0.017`. هذا يعني أن الأسعار تبدو وكأنها تنخفض قليلاً مع مرور الوقت، ولكن ليس كثيرًا، حوالي 2 سنت في اليوم. يمكننا أيضًا الوصول إلى نقطة التقاطع مع المحور Y باستخدام `lin_reg.intercept_` - ستكون حوالي `21` في حالتنا، مما يشير إلى السعر في بداية السنة. +يحتوي كائن `LinearRegression` بعد عملية `fit` على جميع معاملات الانحدار، والتي يمكن الوصول إليها باستخدام خاصية `.coef_`. في حالتنا، هناك معامل واحد فقط، والذي يجب أن يكون حوالي `-0.017`. هذا يعني أن الأسعار تبدو وكأنها تنخفض قليلاً مع مرور الوقت، ولكن ليس كثيرًا، حوالي 2 سنت في اليوم. يمكننا أيضًا الوصول إلى نقطة تقاطع الانحدار مع المحور Y باستخدام `lin_reg.intercept_` - ستكون حوالي `21` في حالتنا، مما يشير إلى السعر في بداية السنة. -لرؤية مدى دقة النموذج الخاص بنا، يمكننا التنبؤ بالأسعار على مجموعة بيانات الاختبار، ثم قياس مدى قرب توقعاتنا من القيم المتوقعة. يمكن القيام بذلك باستخدام مقياس متوسط مربع الخطأ (MSE)، وهو متوسط جميع الفروقات المربعة بين القيمة المتوقعة والقيمة المتنبأ بها. +لرؤية مدى دقة نموذجنا، يمكننا توقع الأسعار على مجموعة بيانات الاختبار، ثم قياس مدى قرب توقعاتنا من القيم المتوقعة. يمكن القيام بذلك باستخدام مقياس متوسط الخطأ التربيعي (MSE)، وهو متوسط جميع الفروقات المربعة بين القيمة المتوقعة والقيمة المتنبأ بها. ```python pred = lin_reg.predict(X_test) @@ -231,7 +231,7 @@ plt.plot(X_test,pred) ## الانحدار متعدد الحدود -نوع آخر من الانحدار الخطي هو الانحدار متعدد الحدود. في بعض الأحيان تكون هناك علاقة خطية بين المتغيرات - مثل كلما زاد حجم اليقطين، زاد السعر - ولكن في أحيان أخرى لا يمكن رسم هذه العلاقات كطائرة أو خط مستقيم. +نوع آخر من الانحدار الخطي هو الانحدار متعدد الحدود. في بعض الأحيان تكون هناك علاقة خطية بين المتغيرات - كلما زاد حجم اليقطين، زاد السعر - ولكن في أحيان أخرى لا يمكن رسم هذه العلاقات كطائرة أو خط مستقيم. ✅ إليك [بعض الأمثلة](https://online.stat.psu.edu/stat501/lesson/9/9.8) على البيانات التي يمكن استخدام الانحدار متعدد الحدود معها. @@ -241,7 +241,7 @@ plt.plot(X_test,pred) الانحدار متعدد الحدود ينشئ خطًا منحنيًا ليتناسب بشكل أفضل مع البيانات غير الخطية. في حالتنا، إذا قمنا بإضافة متغير `DayOfYear` المربع إلى بيانات الإدخال، يجب أن نتمكن من ملاءمة بياناتنا بمنحنى شبه مكافئ، والذي سيكون له حد أدنى في نقطة معينة خلال السنة. -تتضمن مكتبة Scikit-learn واجهة [API للأنابيب](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) لتجميع خطوات معالجة البيانات المختلفة معًا. **الأنابيب** هي سلسلة من **المقدّرين**. في حالتنا، سننشئ أنبوبًا يضيف أولاً ميزات متعددة الحدود إلى النموذج، ثم يدرب الانحدار: +تتضمن مكتبة Scikit-learn واجهة [API للأنابيب](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) لتجميع خطوات معالجة البيانات المختلفة معًا. **الأنبوب** هو سلسلة من **المقدّرين**. في حالتنا، سننشئ أنبوبًا يضيف أولاً ميزات متعددة الحدود إلى النموذج، ثم يدرب الانحدار: ```python from sklearn.preprocessing import PolynomialFeatures @@ -262,11 +262,11 @@ pipeline.fit(X_train,y_train) > يمكنك أن ترى أن أدنى أسعار اليقطين تُلاحظ في مكان ما حول عيد الهالوين. كيف يمكنك تفسير ذلك؟ -🎃 تهانينا، لقد أنشأت نموذجًا يمكنه المساعدة في التنبؤ بسعر اليقطين الخاص بالفطائر. ربما يمكنك تكرار نفس الإجراء لجميع أنواع اليقطين، ولكن سيكون ذلك مرهقًا. دعنا نتعلم الآن كيفية أخذ نوع اليقطين في الاعتبار في نموذجنا! +🎃 تهانينا، لقد أنشأت نموذجًا يمكنه المساعدة في التنبؤ بسعر فطائر اليقطين. ربما يمكنك تكرار نفس الإجراء لجميع أنواع اليقطين، ولكن سيكون ذلك مرهقًا. دعنا نتعلم الآن كيفية أخذ نوع اليقطين في الاعتبار في نموذجنا! ## الميزات الفئوية -في العالم المثالي، نريد أن نكون قادرين على التنبؤ بالأسعار لأنواع مختلفة من اليقطين باستخدام نفس النموذج. ومع ذلك، فإن العمود `Variety` يختلف قليلاً عن الأعمدة مثل `Month`، لأنه يحتوي على قيم غير رقمية. تُعرف هذه الأعمدة باسم **الفئوية**. +في العالم المثالي، نريد أن نكون قادرين على التنبؤ بالأسعار لأنواع مختلفة من اليقطين باستخدام نفس النموذج. ومع ذلك، فإن العمود `Variety` يختلف قليلاً عن الأعمدة مثل `Month`، لأنه يحتوي على قيم غير رقمية. تُعرف هذه الأعمدة بـ **الفئوية**. [![تعلم الآلة للمبتدئين - التنبؤ بالميزات الفئوية باستخدام الانحدار الخطي](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "تعلم الآلة للمبتدئين - التنبؤ بالميزات الفئوية باستخدام الانحدار الخطي") @@ -278,8 +278,8 @@ pipeline.fit(X_train,y_train) لأخذ النوع في الاعتبار، نحتاج أولاً إلى تحويله إلى شكل رقمي، أو **ترميزه**. هناك عدة طرق يمكننا القيام بها: -* **الترميز الرقمي البسيط** سيقوم بإنشاء جدول لأنواع مختلفة، ثم استبدال اسم النوع بمؤشر في ذلك الجدول. هذه ليست أفضل فكرة للانحدار الخطي، لأن الانحدار الخطي يأخذ القيمة الرقمية الفعلية للمؤشر، ويضيفها إلى النتيجة، مضاعفًا بمعامل معين. في حالتنا، العلاقة بين رقم المؤشر والسعر غير خطية بوضوح، حتى لو تأكدنا من أن المؤشرات مرتبة بطريقة معينة. -* **الترميز الواحد الساخن** سيستبدل العمود `Variety` بأربعة أعمدة مختلفة، واحد لكل نوع. يحتوي كل عمود على `1` إذا كانت الصف المقابل من نوع معين، و `0` خلاف ذلك. هذا يعني أنه سيكون هناك أربعة معاملات في الانحدار الخطي، واحد لكل نوع من اليقطين، مسؤول عن "السعر الأساسي" (أو بالأحرى "السعر الإضافي") لذلك النوع المحدد. +* **الترميز الرقمي البسيط** سيقوم ببناء جدول لأنواع مختلفة، ثم استبدال اسم النوع برقم في هذا الجدول. هذه ليست أفضل فكرة للانحدار الخطي، لأن الانحدار الخطي يأخذ القيمة الرقمية الفعلية للرقم، ويضيفها إلى النتيجة، مضروبًا بمعامل معين. في حالتنا، العلاقة بين رقم الفهرس والسعر غير خطية بوضوح، حتى لو تأكدنا من أن الأرقام مرتبة بطريقة معينة. +* **الترميز الواحد الساخن** سيقوم باستبدال العمود `Variety` بأربعة أعمدة مختلفة، واحد لكل نوع. يحتوي كل عمود على `1` إذا كانت الصف المقابل من نوع معين، و`0` خلاف ذلك. هذا يعني أنه سيكون هناك أربعة معاملات في الانحدار الخطي، واحد لكل نوع من أنواع اليقطين، مسؤول عن "السعر الأساسي" (أو بالأحرى "السعر الإضافي") لذلك النوع المحدد. الكود أدناه يظهر كيف يمكننا ترميز النوع الواحد الساخن: @@ -357,7 +357,7 @@ print('Model determination: ', score) | جميع الميزات خطي | 2.84 (10.5%) | 0.94 | | جميع الميزات متعدد الحدود | 2.23 (8.25%) | 0.97 | -🏆 أحسنت! لقد أنشأت أربعة نماذج انحدار في درس واحد، وحسنت جودة النموذج إلى 97%. في القسم الأخير حول الانحدار، ستتعلم عن الانحدار اللوجستي لتحديد الفئات. +🏆 أحسنت! لقد أنشأت أربعة نماذج انحدار في درس واحد، وحسّنت جودة النموذج إلى 97%. في القسم الأخير حول الانحدار، ستتعلم عن الانحدار اللوجستي لتحديد الفئات. --- @@ -365,11 +365,11 @@ print('Model determination: ', score) اختبر عدة متغيرات مختلفة في هذا الدفتر لترى كيف تتوافق العلاقة مع دقة النموذج. -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية -في هذا الدرس تعلمنا عن الانحدار الخطي. هناك أنواع أخرى مهمة من الانحدار. اقرأ عن تقنيات Stepwise، Ridge، Lasso و Elasticnet. دورة جيدة للدراسة لتعلم المزيد هي [دورة التعلم الإحصائي من ستانفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +في هذا الدرس تعلمنا عن الانحدار الخطي. هناك أنواع أخرى مهمة من الانحدار. اقرأ عن تقنيات Stepwise، Ridge، Lasso و Elasticnet. دورة جيدة للدراسة لتعلم المزيد هي [دورة التعلم الإحصائي من جامعة ستانفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). ## الواجب @@ -378,4 +378,4 @@ print('Model determination: ', score) --- **إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/2-Regression/4-Logistic/README.md b/translations/ar/2-Regression/4-Logistic/README.md index 039926d38..95b439ac6 100644 --- a/translations/ar/2-Regression/4-Logistic/README.md +++ b/translations/ar/2-Regression/4-Logistic/README.md @@ -1,72 +1,72 @@ -# الانحدار اللوجستي لتوقع الفئات +# الانحدار اللوجستي للتنبؤ بالفئات -![مخطط معلوماتي عن الانحدار اللوجستي مقابل الانحدار الخطي](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.ar.png) +![رسم توضيحي للفرق بين الانحدار الخطي والانحدار اللوجستي](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) -> ### [هذه الدرس متاح بلغة R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) +> ### [هذا الدرس متوفر بلغة R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) ## المقدمة -في هذا الدرس الأخير حول الانحدار، وهو أحد تقنيات التعلم الآلي الكلاسيكية الأساسية، سنلقي نظرة على الانحدار اللوجستي. يمكنك استخدام هذه التقنية لاكتشاف الأنماط لتوقع الفئات الثنائية. هل هذه الحلوى شوكولاتة أم لا؟ هل هذا المرض معدٍ أم لا؟ هل سيختار هذا العميل هذا المنتج أم لا؟ +في هذا الدرس الأخير حول الانحدار، وهو أحد تقنيات تعلم الآلة _الكلاسيكية_ الأساسية، سنلقي نظرة على الانحدار اللوجستي. يمكنك استخدام هذه التقنية لاكتشاف الأنماط للتنبؤ بالفئات الثنائية. هل هذه الحلوى تحتوي على شوكولاتة أم لا؟ هل هذا المرض معدٍ أم لا؟ هل سيختار هذا العميل هذا المنتج أم لا؟ في هذا الدرس، ستتعلم: - مكتبة جديدة لتصور البيانات - تقنيات الانحدار اللوجستي -✅ عمّق فهمك للعمل مع هذا النوع من الانحدار في هذا [الوحدة التعليمية](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) +✅ عمّق فهمك للعمل مع هذا النوع من الانحدار في [وحدة التعلم هذه](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) ## المتطلبات الأساسية -بعد العمل مع بيانات القرع، أصبحنا على دراية كافية بها لندرك أن هناك فئة ثنائية يمكننا العمل معها: `اللون`. +بعد العمل مع بيانات القرع، أصبحنا الآن على دراية كافية بها لندرك أن هناك فئة ثنائية يمكننا العمل معها: `اللون`. -لنقم ببناء نموذج انحدار لوجستي لتوقع ذلك، بناءً على بعض المتغيرات، _ما اللون الذي من المرجح أن يكون عليه القرع_ (برتقالي 🎃 أو أبيض 👻). +دعونا نبني نموذج انحدار لوجستي للتنبؤ بذلك، بناءً على بعض المتغيرات، _ما هو اللون المحتمل للقرع المعطى_ (برتقالي 🎃 أو أبيض 👻). -> لماذا نتحدث عن التصنيف الثنائي في درس متعلق بالانحدار؟ فقط للراحة اللغوية، حيث أن الانحدار اللوجستي هو [في الواقع طريقة تصنيف](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression)، وإن كانت تعتمد على الخطية. تعرف على طرق أخرى لتصنيف البيانات في مجموعة الدروس التالية. +> لماذا نتحدث عن التصنيف الثنائي في درس حول الانحدار؟ فقط لتسهيل اللغة، حيث أن الانحدار اللوجستي هو [في الواقع طريقة تصنيف](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.ar.png) -> مخطط معلوماتي بواسطة [Dasani Madipalli](https://twitter.com/dasani_decoded) +![نموذج تصنيف القرع](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> رسم توضيحي بواسطة [داساني ماديبالي](https://twitter.com/dasani_decoded) ### تصنيفات أخرى -هناك أنواع أخرى من الانحدار اللوجستي، بما في ذلك متعدد الفئات والترتيبي: +هناك أنواع أخرى من الانحدار اللوجستي، بما في ذلك متعدد الفئات والمرتب: -- **متعدد الفئات**، والذي يتضمن وجود أكثر من فئة واحدة - "برتقالي، أبيض، ومخطط". -- **ترتيبي**، والذي يتضمن فئات مرتبة، مفيد إذا أردنا ترتيب النتائج منطقيًا، مثل القرع الذي يتم ترتيبه حسب عدد محدود من الأحجام (صغير جدًا، صغير، متوسط، كبير، كبير جدًا، ضخم). +- **متعدد الفئات**، الذي يتضمن وجود أكثر من فئة - "برتقالي، أبيض، ومخطط". +- **المرتب**، الذي يتضمن فئات مرتبة، وهو مفيد إذا أردنا ترتيب النتائج منطقيًا، مثل القرع الذي يتم ترتيبه حسب عدد محدود من الأحجام (صغير جدًا، صغير، متوسط، كبير، كبير جدًا، ضخم). -![الانحدار متعدد الفئات مقابل الترتيبي](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.ar.png) +![الانحدار متعدد الفئات مقابل المرتب](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) -### المتغيرات لا تحتاج إلى أن تكون مترابطة +### المتغيرات لا تحتاج إلى الارتباط -تذكر كيف كان الانحدار الخطي يعمل بشكل أفضل مع المتغيرات الأكثر ترابطًا؟ الانحدار اللوجستي هو العكس - المتغيرات لا تحتاج إلى أن تكون متوافقة. هذا يعمل مع هذه البيانات التي لديها ترابطات ضعيفة إلى حد ما. +تذكر كيف كان الانحدار الخطي يعمل بشكل أفضل مع المتغيرات الأكثر ارتباطًا؟ الانحدار اللوجستي هو العكس - المتغيرات لا تحتاج إلى التوافق. وهذا يناسب هذه البيانات التي تحتوي على ارتباطات ضعيفة إلى حد ما. ### تحتاج إلى الكثير من البيانات النظيفة @@ -74,9 +74,7 @@ CO_OP_TRANSLATOR_METADATA: [![تعلم الآلة للمبتدئين - تحليل البيانات وتحضيرها للانحدار اللوجستي](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "تعلم الآلة للمبتدئين - تحليل البيانات وتحضيرها للانحدار اللوجستي") -> 🎥 انقر على الصورة أعلاه للحصول على نظرة عامة قصيرة عن تحضير البيانات للانحدار الخطي. - -✅ فكر في أنواع البيانات التي تناسب الانحدار اللوجستي بشكل جيد. +✅ فكر في أنواع البيانات التي يمكن أن تكون مناسبة للانحدار اللوجستي ## التمرين - تنظيف البيانات @@ -100,11 +98,11 @@ CO_OP_TRANSLATOR_METADATA: ### التصور - مخطط الفئات -بحلول الآن، قمت بتحميل [دفتر الملاحظات المبدئي](./notebook.ipynb) مع بيانات القرع مرة أخرى وقمت بتنظيفه للحفاظ على مجموعة بيانات تحتوي على بعض المتغيرات، بما في ذلك `اللون`. لنقم بتصور إطار البيانات في دفتر الملاحظات باستخدام مكتبة مختلفة: [Seaborn](https://seaborn.pydata.org/index.html)، التي تعتمد على Matplotlib التي استخدمناها سابقًا. +بحلول الآن، قمت بتحميل [دفتر الملاحظات المبدئي](../../../../2-Regression/4-Logistic/notebook.ipynb) مع بيانات القرع مرة أخرى وقمت بتنظيفه للحفاظ على مجموعة بيانات تحتوي على بعض المتغيرات، بما في ذلك `اللون`. دعنا نتصور إطار البيانات في دفتر الملاحظات باستخدام مكتبة مختلفة: [Seaborn](https://seaborn.pydata.org/index.html)، التي تعتمد على Matplotlib التي استخدمناها سابقًا. -Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبيل المثال، يمكنك مقارنة توزيعات البيانات لكل `Variety` و `Color` في مخطط الفئات. +يوفر Seaborn طرقًا رائعة لتصور بياناتك. على سبيل المثال، يمكنك مقارنة توزيعات البيانات لكل `Variety` و`Color` في مخطط فئات. -1. قم بإنشاء مثل هذا المخطط باستخدام وظيفة `catplot`، باستخدام بيانات القرع `pumpkins`، وتحديد تعيين اللون لكل فئة قرع (برتقالي أو أبيض): +1. أنشئ مثل هذا المخطط باستخدام وظيفة `catplot`، باستخدام بيانات القرع `pumpkins`، وتحديد تعيين الألوان لكل فئة من فئات القرع (برتقالي أو أبيض): ```python import seaborn as sns @@ -120,19 +118,19 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي ) ``` - ![شبكة من البيانات المصورة](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.ar.png) + ![شبكة من البيانات المصورة](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) - من خلال ملاحظة البيانات، يمكنك رؤية كيف ترتبط بيانات اللون بالتنوع. + من خلال ملاحظة البيانات، يمكنك رؤية كيف ترتبط بيانات اللون بالفئة. - ✅ بالنظر إلى هذا المخطط الفئوي، ما هي بعض الاستكشافات المثيرة التي يمكنك تصورها؟ + ✅ بالنظر إلى هذا المخطط الفئوي، ما هي بعض الاستكشافات المثيرة للاهتمام التي يمكنك تخيلها؟ ### معالجة البيانات: ترميز الميزات والتسميات -تحتوي مجموعة بيانات القرع الخاصة بنا على قيم نصية لجميع أعمدتها. العمل مع البيانات الفئوية يكون بديهيًا للبشر ولكنه ليس كذلك للآلات. تعمل خوارزميات التعلم الآلي بشكل جيد مع الأرقام. لهذا السبب، يعد الترميز خطوة مهمة جدًا في مرحلة معالجة البيانات، حيث يتيح لنا تحويل البيانات الفئوية إلى بيانات رقمية، دون فقدان أي معلومات. الترميز الجيد يؤدي إلى بناء نموذج جيد. +تحتوي مجموعة بيانات القرع الخاصة بنا على قيم نصية لجميع أعمدتها. العمل مع البيانات الفئوية يكون بديهيًا للبشر ولكنه ليس كذلك للآلات. تعمل خوارزميات تعلم الآلة بشكل جيد مع الأرقام. لهذا السبب، يعد الترميز خطوة مهمة جدًا في مرحلة معالجة البيانات، حيث يتيح لنا تحويل البيانات الفئوية إلى بيانات رقمية دون فقدان أي معلومات. يؤدي الترميز الجيد إلى بناء نموذج جيد. -بالنسبة لترميز الميزات، هناك نوعان رئيسيان من المرمزين: +لترميز الميزات، هناك نوعان رئيسيان من المشفرات: -1. المرمز الترتيبي: يناسب المتغيرات الترتيبية، وهي المتغيرات الفئوية التي تتبع بياناتها ترتيبًا منطقيًا، مثل عمود `Item Size` في مجموعة البيانات الخاصة بنا. يقوم بإنشاء تعيين بحيث يتم تمثيل كل فئة برقم، وهو ترتيب الفئة في العمود. +1. المشفر الترتيبي: يناسب المتغيرات الترتيبية، وهي المتغيرات الفئوية التي تتبع بياناتها ترتيبًا منطقيًا، مثل عمود `Item Size` في مجموعة البيانات الخاصة بنا. يقوم بإنشاء تعيين بحيث يتم تمثيل كل فئة برقم، وهو ترتيب الفئة في العمود. ```python from sklearn.preprocessing import OrdinalEncoder @@ -142,7 +140,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. المرمز الفئوي: يناسب المتغيرات الاسمية، وهي المتغيرات الفئوية التي لا تتبع بياناتها ترتيبًا منطقيًا، مثل جميع الميزات المختلفة عن `Item Size` في مجموعة البيانات الخاصة بنا. إنه ترميز ثنائي، مما يعني أن كل فئة يتم تمثيلها بعمود ثنائي: تكون القيمة المشفرة مساوية لـ 1 إذا كان القرع ينتمي إلى هذا التنوع و 0 خلاف ذلك. +2. المشفر الفئوي: يناسب المتغيرات الاسمية، وهي المتغيرات الفئوية التي لا تتبع بياناتها ترتيبًا منطقيًا، مثل جميع الميزات المختلفة عن `Item Size` في مجموعة البيانات الخاصة بنا. إنه ترميز ثنائي، مما يعني أن كل فئة يتم تمثيلها بعمود ثنائي: تكون المتغيرات المشفرة مساوية لـ 1 إذا كان القرع ينتمي إلى تلك الفئة و0 خلاف ذلك. ```python from sklearn.preprocessing import OneHotEncoder @@ -151,7 +149,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي categorical_encoder = OneHotEncoder(sparse_output=False) ``` -ثم يتم استخدام `ColumnTransformer` لدمج عدة مرمزين في خطوة واحدة وتطبيقهم على الأعمدة المناسبة. +ثم يتم استخدام `ColumnTransformer` لدمج عدة مشفرات في خطوة واحدة وتطبيقها على الأعمدة المناسبة. ```python from sklearn.compose import ColumnTransformer @@ -165,7 +163,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي encoded_features = ct.fit_transform(pumpkins) ``` -من ناحية أخرى، لترميز التسمية، نستخدم فئة `LabelEncoder` من scikit-learn، وهي فئة مساعدة لتطبيع التسميات بحيث تحتوي فقط على قيم بين 0 و n_classes-1 (هنا، 0 و 1). +من ناحية أخرى، لترميز التسمية، نستخدم فئة `LabelEncoder` من scikit-learn، وهي فئة مساعدة لتطبيع التسميات بحيث تحتوي فقط على قيم بين 0 وn_classes-1 (هنا، 0 و1). ```python from sklearn.preprocessing import LabelEncoder @@ -180,13 +178,11 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي encoded_pumpkins = encoded_features.assign(Color=encoded_label) ``` -✅ ما هي مزايا استخدام المرمز الترتيبي لعمود `Item Size`؟ +✅ ما هي مزايا استخدام المشفر الترتيبي لعمود `Item Size`؟ ### تحليل العلاقات بين المتغيرات -الآن بعد أن قمنا بمعالجة البيانات، يمكننا تحليل العلاقات بين الميزات والتسمية لفهم مدى قدرة النموذج على توقع التسمية بناءً على الميزات. - -أفضل طريقة لإجراء هذا النوع من التحليل هي رسم البيانات. سنستخدم مرة أخرى وظيفة `catplot` من Seaborn، لتصور العلاقات بين `Item Size` و `Variety` و `Color` في مخطط الفئات. لتحسين رسم البيانات، سنستخدم العمود المشفر `Item Size` والعمود غير المشفر `Variety`. +الآن بعد أن قمنا بمعالجة بياناتنا، يمكننا تحليل العلاقات بين الميزات والتسمية لفهم مدى قدرة النموذج على التنبؤ بالتسمية بناءً على الميزات. أفضل طريقة لإجراء هذا النوع من التحليل هي رسم البيانات. سنستخدم مرة أخرى وظيفة `catplot` من Seaborn لتصور العلاقات بين `Item Size`، `Variety` و`Color` في مخطط فئات. لتوضيح البيانات بشكل أفضل، سنستخدم عمود `Item Size` المشفر وعمود `Variety` غير المشفر. ```python palette = { @@ -206,7 +202,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي g.set_titles(row_template="{row_name}") ``` -![مخطط الفئات للبيانات المصورة](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.ar.png) +![مخطط فئات للبيانات المصورة](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) ### استخدام مخطط السرب @@ -224,25 +220,25 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) ``` - ![سرب من البيانات المصورة](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.ar.png) + ![سرب من البيانات المصورة](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**انتبه**: قد يولد الكود أعلاه تحذيرًا، حيث يفشل Seaborn في تمثيل هذا العدد الكبير من نقاط البيانات في مخطط السرب. الحل الممكن هو تقليل حجم العلامة باستخدام معلمة "size". ومع ذلك، كن على علم بأن هذا يؤثر على قابلية قراءة المخطط. +**تنبيه**: قد ينتج الكود أعلاه تحذيرًا، حيث يفشل Seaborn في تمثيل هذا العدد الكبير من النقاط في مخطط السرب. الحل الممكن هو تقليل حجم العلامة باستخدام معامل 'size'. ومع ذلك، كن على علم بأن هذا يؤثر على قابلية قراءة المخطط. > **🧮 أرني الرياضيات** > -> يعتمد الانحدار اللوجستي على مفهوم "الاحتمالية القصوى" باستخدام [دوال السجمويد](https://wikipedia.org/wiki/Sigmoid_function). تبدو "دالة السجمويد" على الرسم البياني كمنحنى على شكل "S". تأخذ قيمة وتقوم بتعيينها إلى مكان ما بين 0 و 1. يُطلق على منحناها أيضًا "المنحنى اللوجستي". تبدو صيغتها كالتالي: +> يعتمد الانحدار اللوجستي على مفهوم "الاحتمالية القصوى" باستخدام [دوال سيجمويد](https://wikipedia.org/wiki/Sigmoid_function). تبدو دالة "سيجمويد" على الرسم البياني كمنحنى على شكل "S". تأخذ قيمة وتعينها إلى مكان ما بين 0 و1. يُطلق على منحناها أيضًا "منحنى لوجستي". تبدو صيغتها كالتالي: > -> ![دالة السجمويد](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.ar.png) +> ![دالة لوجستية](../../../../2-Regression/4-Logistic/images/sigmoid.png) > -> حيث يكون منتصف السجمويد عند النقطة 0 لـ x، وL هو القيمة القصوى للمنحنى، وk هو انحدار المنحنى. إذا كانت نتيجة الدالة أكثر من 0.5، سيتم إعطاء التسمية المعنية الفئة "1" من الخيار الثنائي. إذا لم يكن كذلك، سيتم تصنيفها كـ "0". +> حيث يكون منتصف السيجمويد عند النقطة 0 للمحور x، وL هو القيمة القصوى للمنحنى، وk هو انحدار المنحنى. إذا كانت نتيجة الدالة أكثر من 0.5، سيتم إعطاء التسمية المعنية الفئة "1" من الخيار الثنائي. إذا لم تكن كذلك، سيتم تصنيفها كـ "0". ## بناء النموذج الخاص بك -بناء نموذج لتحديد هذه الفئات الثنائية أمر بسيط بشكل مدهش في Scikit-learn. +بناء نموذج للعثور على هذا التصنيف الثنائي بسيط بشكل مدهش في Scikit-learn. [![تعلم الآلة للمبتدئين - الانحدار اللوجستي لتصنيف البيانات](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "تعلم الآلة للمبتدئين - الانحدار اللوجستي لتصنيف البيانات") -> 🎥 انقر على الصورة أعلاه للحصول على نظرة عامة قصيرة عن بناء نموذج الانحدار الخطي. +> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو قصير عن بناء نموذج انحدار لوجستي 1. اختر المتغيرات التي تريد استخدامها في نموذج التصنيف الخاص بك وقسم مجموعات التدريب والاختبار باستخدام `train_test_split()`: @@ -271,7 +267,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي print('F1-score: ', f1_score(y_test, predictions)) ``` - ألقِ نظرة على لوحة نتائج النموذج الخاص بك. ليس سيئًا، بالنظر إلى أن لديك حوالي 1000 صف فقط من البيانات: + ألقِ نظرة على لوحة النتائج الخاصة بنموذجك. إنها ليست سيئة، بالنظر إلى أن لديك حوالي 1000 صف فقط من البيانات: ```output precision recall f1-score support @@ -296,7 +292,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي بينما يمكنك الحصول على تقرير لوحة النتائج [المصطلحات](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)" (أو "مصفوفة الخطأ") هي جدول يعبر عن الإيجابيات والسلبيات الحقيقية والخاطئة لنموذجك، وبالتالي يقيس دقة التوقعات. +> 🎓 "[مصفوفة الالتباس](https://wikipedia.org/wiki/Confusion_matrix)" (أو "مصفوفة الأخطاء") هي جدول يعبر عن الإيجابيات الحقيقية مقابل الإيجابيات الكاذبة والسلبيات الحقيقية مقابل السلبيات الكاذبة لنموذجك، وبالتالي قياس دقة التنبؤات. 1. لاستخدام مصفوفة الالتباس، استدعِ `confusion_matrix()`: @@ -305,7 +301,7 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي confusion_matrix(y_test, predictions) ``` - ألقِ نظرة على مصفوفة الالتباس الخاصة بالنموذج الخاص بك: + ألقِ نظرة على مصفوفة الالتباس الخاصة بنموذجك: ```output array([[162, 4], @@ -321,12 +317,12 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي ما الذي يحدث هنا؟ لنفترض أن النموذج الخاص بنا طُلب منه تصنيف القرع بين فئتين ثنائيتين، الفئة "أبيض" والفئة "ليس أبيض". -- إذا توقع النموذج أن القرع ليس أبيض وكان ينتمي بالفعل إلى الفئة "ليس أبيض"، نسميه سلبية حقيقية، يظهر في الرقم العلوي الأيسر. -- إذا توقع النموذج أن القرع أبيض وكان ينتمي بالفعل إلى الفئة "ليس أبيض"، نسميه سلبية خاطئة، يظهر في الرقم السفلي الأيسر. -- إذا توقع النموذج أن القرع ليس أبيض وكان ينتمي بالفعل إلى الفئة "أبيض"، نسميه إيجابية خاطئة، يظهر في الرقم العلوي الأيمن. -- إذا توقع النموذج أن القرع أبيض وكان ينتمي بالفعل إلى الفئة "أبيض"، نسميه إيجابية حقيقية، يظهر في الرقم السفلي الأيمن. +- إذا توقع النموذج أن القرع ليس أبيضًا وكان ينتمي بالفعل إلى الفئة "ليس أبيض"، نسمي ذلك سلبية حقيقية (True Negative)، وهو الرقم في الزاوية العلوية اليسرى. +- إذا توقع النموذج أن القرع أبيض وكان ينتمي بالفعل إلى الفئة "ليس أبيض"، نسمي ذلك سلبية كاذبة (False Negative)، وهو الرقم في الزاوية السفلية اليسرى. +- إذا توقع النموذج أن القرع ليس أبيضًا وكان ينتمي بالفعل إلى الفئة "أبيض"، نسمي ذلك إيجابية كاذبة (False Positive)، وهو الرقم في الزاوية العلوية اليمنى. +- إذا توقع النموذج أن القرع أبيض وكان ينتمي بالفعل إلى الفئة "أبيض"، نسمي ذلك إيجابية حقيقية (True Positive)، وهو الرقم في الزاوية السفلية اليمنى. -كما قد تكون خمنت، من الأفضل أن يكون لديك عدد أكبر من الإيجابيات الحقيقية والسلبيات الحقيقية وعدد أقل من الإيجابيات الخاطئة والسلبيات الخاطئة، مما يعني أن النموذج يعمل بشكل أفضل. +كما قد تكون خمنت، من الأفضل أن يكون لديك عدد أكبر من الإيجابيات الحقيقية والسلبيات الحقيقية وعدد أقل من الإيجابيات الكاذبة والسلبيات الكاذبة، مما يعني أن النموذج يعمل بشكل أفضل. كيف ترتبط مصفوفة الالتباس بالدقة والاسترجاع؟ تذكر أن تقرير التصنيف الذي طُبع أعلاه أظهر دقة (0.85) واسترجاع (0.67). الدقة = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 @@ -345,11 +341,11 @@ Seaborn يقدم طرقًا رائعة لتصور بياناتك. على سبي 🎓 الدعم: عدد مرات ظهور كل تصنيف مسترجع. -🎓 الدقة الإجمالية: (TP + TN)/(TP + TN + FP + FN) النسبة المئوية للتصنيفات التي تم التنبؤ بها بدقة لعينة. +🎓 الدقة الإجمالية: (TP + TN)/(TP + TN + FP + FN) النسبة المئوية للتصنيفات التي تم التنبؤ بها بدقة لعينة معينة. 🎓 المتوسط الكلي: حساب المتوسط غير الموزون للمقاييس لكل تصنيف، دون أخذ عدم التوازن في التصنيفات بعين الاعتبار. -🎓 المتوسط الموزون: حساب المتوسط للمقاييس لكل تصنيف، مع أخذ عدم التوازن في التصنيفات بعين الاعتبار من خلال وزنها بدعمها (عدد الحالات الحقيقية لكل تصنيف). +🎓 المتوسط الموزون: حساب المتوسط الموزون للمقاييس لكل تصنيف، مع أخذ عدم التوازن في التصنيفات بعين الاعتبار من خلال وزنها بدعمها (عدد الحالات الحقيقية لكل تصنيف). ✅ هل يمكنك التفكير في أي مقياس يجب مراقبته إذا كنت تريد تقليل عدد القيم السلبية الخاطئة في النموذج؟ @@ -379,30 +375,30 @@ plt.title('ROC Curve') plt.show() ``` -باستخدام مكتبة Matplotlib، قم برسم [منحنى تشغيل المستقبل](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) أو ROC للنموذج. تُستخدم منحنيات ROC غالبًا للحصول على رؤية لمخرجات المصنف من حيث القيم الإيجابية الحقيقية مقابل القيم الإيجابية الخاطئة. "تتميز منحنيات ROC عادةً بمعدل القيم الإيجابية الحقيقية على المحور Y، ومعدل القيم الإيجابية الخاطئة على المحور X." وبالتالي، فإن انحدار المنحنى والمساحة بين خط المنتصف والمنحنى مهمان: تريد منحنى يتجه بسرعة إلى الأعلى ويتجاوز الخط. في حالتنا، هناك قيم إيجابية خاطئة في البداية، ثم يتجه الخط إلى الأعلى ويتجاوز بشكل صحيح: +باستخدام مكتبة Matplotlib، قم برسم [منحنى تشغيل المستقبل](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) أو ROC للنموذج. تُستخدم منحنيات ROC غالبًا للحصول على رؤية لمخرجات المصنف من حيث القيم الإيجابية الحقيقية مقابل القيم الإيجابية الخاطئة. "عادةً ما تحتوي منحنيات ROC على معدل القيم الإيجابية الحقيقية على المحور Y، ومعدل القيم الإيجابية الخاطئة على المحور X." وبالتالي، فإن انحدار المنحنى والمساحة بين خط المنتصف والمنحنى مهمان: تريد منحنى يتجه بسرعة إلى الأعلى ويتجاوز الخط. في حالتنا، هناك قيم إيجابية خاطئة في البداية، ثم يتجه الخط إلى الأعلى ويتجاوز بشكل صحيح: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.ar.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) أخيرًا، استخدم واجهة برمجة التطبيقات [`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 لحساب "المساحة تحت المنحنى" (AUC): ```python auc = roc_auc_score(y_test,y_scores[:,1]) print(auc) -``` -النتيجة هي `0.9749908725812341`. نظرًا لأن AUC يتراوح بين 0 و1، فإنك تريد درجة كبيرة، حيث أن النموذج الذي يكون دقيقًا بنسبة 100% في توقعاته سيحصل على AUC بقيمة 1؛ في هذه الحالة، النموذج _جيد جدًا_. +``` +النتيجة هي `0.9749908725812341`. نظرًا لأن AUC يتراوح بين 0 و1، فإنك تريد الحصول على درجة كبيرة، حيث أن النموذج الذي يكون دقيقًا بنسبة 100% في توقعاته سيحصل على AUC بقيمة 1؛ في هذه الحالة، النموذج _جيد جدًا_. -في دروس التصنيفات المستقبلية، ستتعلم كيفية التكرار لتحسين درجات النموذج. ولكن الآن، تهانينا! لقد أكملت دروس الانحدار هذه! +في دروس التصنيف المستقبلية، ستتعلم كيفية تحسين درجات النموذج. ولكن في الوقت الحالي، تهانينا! لقد أكملت دروس الانحدار هذه! --- ## 🚀تحدي -هناك الكثير لاستكشافه بخصوص الانحدار اللوجستي! ولكن أفضل طريقة للتعلم هي التجربة. ابحث عن مجموعة بيانات تناسب هذا النوع من التحليل وقم ببناء نموذج باستخدامها. ماذا تتعلم؟ نصيحة: جرب [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) للحصول على مجموعات بيانات مثيرة للاهتمام. +هناك الكثير لاستكشافه فيما يتعلق بالانحدار اللوجستي! ولكن أفضل طريقة للتعلم هي التجربة. ابحث عن مجموعة بيانات تناسب هذا النوع من التحليل وقم ببناء نموذج باستخدامها. ماذا تتعلم؟ نصيحة: جرب [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) للحصول على مجموعات بيانات مثيرة للاهتمام. -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية -اقرأ الصفحات الأولى من [هذا البحث من جامعة ستانفورد](https://web.stanford.edu/~jurafsky/slp3/5.pdf) حول بعض الاستخدامات العملية للانحدار اللوجستي. فكر في المهام التي تناسب نوعًا واحدًا أو آخر من مهام الانحدار التي درسناها حتى الآن. ما الذي سيكون الأفضل؟ +اقرأ الصفحات الأولى من [هذا البحث من جامعة ستانفورد](https://web.stanford.edu/~jurafsky/slp3/5.pdf) حول بعض الاستخدامات العملية للانحدار اللوجستي. فكر في المهام التي تناسب نوعًا معينًا من مهام الانحدار التي درسناها حتى الآن. ما الذي سيكون الأنسب؟ ## الواجب @@ -411,4 +407,4 @@ print(auc) --- **إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/3-Web-App/1-Web-App/README.md b/translations/ar/3-Web-App/1-Web-App/README.md index a16f718e1..c7b5a5325 100644 --- a/translations/ar/3-Web-App/1-Web-App/README.md +++ b/translations/ar/3-Web-App/1-Web-App/README.md @@ -1,26 +1,26 @@ # بناء تطبيق ويب لاستخدام نموذج تعلم الآلة -في هذا الدرس، ستقوم بتدريب نموذج تعلم آلي على مجموعة بيانات غير تقليدية: _مشاهدات الأجسام الطائرة المجهولة (UFO) خلال القرن الماضي_، والمأخوذة من قاعدة بيانات NUFORC. +في هذه الدرس، ستقوم بتدريب نموذج تعلم الآلة على مجموعة بيانات غير مألوفة: _مشاهدات الأجسام الطائرة المجهولة خلال القرن الماضي_، مأخوذة من قاعدة بيانات NUFORC. ستتعلم: - كيفية "تخزين" نموذج مدرب باستخدام Pickle - كيفية استخدام هذا النموذج في تطبيق Flask -سنواصل استخدام دفاتر Jupyter لتنظيف البيانات وتدريب النموذج، ولكن يمكنك أن تأخذ العملية خطوة إضافية من خلال استكشاف استخدام النموذج "في العالم الحقيقي"، أي في تطبيق ويب. +سنواصل استخدام دفاتر الملاحظات لتنظيف البيانات وتدريب النموذج، ولكن يمكنك أخذ العملية خطوة إضافية من خلال استكشاف استخدام النموذج "في العالم الحقيقي"، أي في تطبيق ويب. للقيام بذلك، تحتاج إلى بناء تطبيق ويب باستخدام Flask. -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## بناء التطبيق @@ -30,38 +30,38 @@ CO_OP_TRANSLATOR_METADATA: هناك العديد من الأسئلة التي تحتاج إلى طرحها: -- **هل هو تطبيق ويب أم تطبيق جوال؟** إذا كنت تبني تطبيقًا جوالًا أو تحتاج إلى استخدام النموذج في سياق إنترنت الأشياء (IoT)، يمكنك استخدام [TensorFlow Lite](https://www.tensorflow.org/lite/) واستخدام النموذج في تطبيق Android أو iOS. +- **هل هو تطبيق ويب أم تطبيق جوال؟** إذا كنت تبني تطبيقًا جوالًا أو تحتاج إلى استخدام النموذج في سياق إنترنت الأشياء، يمكنك استخدام [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) لاستخدامه في تطبيقات ويب JavaScript التي يمكنها استخدام [Onnx Runtime](https://www.onnxruntime.ai/). سيتم استكشاف هذا الخيار في درس مستقبلي لنموذج مدرب باستخدام Scikit-learn. - - **استخدام Lobe.ai أو Azure Custom Vision.** إذا كنت تستخدم نظام تعلم آلي كخدمة (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) لتدريب نموذج، فإن هذا النوع من البرمجيات يوفر طرقًا لتصدير النموذج للعديد من المنصات، بما في ذلك بناء واجهة برمجية مخصصة يمكن استدعاؤها في السحابة بواسطة تطبيقك عبر الإنترنت. + - **استخدام TensorFlow.** إذا كنت تدرب نموذجًا باستخدام TensorFlow، على سبيل المثال، يوفر هذا النظام البيئي القدرة على تحويل نموذج TensorFlow للاستخدام في تطبيق ويب باستخدام [TensorFlow.js](https://www.tensorflow.org/js/). + - **استخدام PyTorch.** إذا كنت تبني نموذجًا باستخدام مكتبة مثل [PyTorch](https://pytorch.org/)، لديك خيار تصديره بتنسيق [ONNX](https://onnx.ai/) (تبادل الشبكة العصبية المفتوحة) للاستخدام في تطبيقات ويب JavaScript التي يمكنها استخدام [Onnx Runtime](https://www.onnxruntime.ai/). سيتم استكشاف هذا الخيار في درس مستقبلي لنموذج مدرب باستخدام Scikit-learn. + - **استخدام Lobe.ai أو Azure Custom Vision.** إذا كنت تستخدم نظام 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) لتدريب نموذج، يوفر هذا النوع من البرمجيات طرقًا لتصدير النموذج للعديد من المنصات، بما في ذلك بناء API مخصص للاستعلام عنه في السحابة بواسطة تطبيقك عبر الإنترنت. لديك أيضًا فرصة لبناء تطبيق ويب كامل باستخدام Flask يمكنه تدريب النموذج نفسه في متصفح الويب. يمكن القيام بذلك أيضًا باستخدام TensorFlow.js في سياق JavaScript. -بالنسبة لأغراضنا، بما أننا عملنا مع دفاتر Jupyter المستندة إلى Python، دعنا نستكشف الخطوات التي تحتاج إلى اتخاذها لتصدير نموذج مدرب من دفتر ملاحظات إلى تنسيق يمكن قراءته بواسطة تطبيق ويب مبني باستخدام Python. +بالنسبة لأغراضنا، نظرًا لأننا عملنا مع دفاتر ملاحظات تعتمد على Python، دعنا نستكشف الخطوات التي تحتاج إلى اتخاذها لتصدير نموذج مدرب من دفتر ملاحظات إلى تنسيق يمكن قراءته بواسطة تطبيق ويب مبني باستخدام Python. ## الأدوات -لهذه المهمة، تحتاج إلى أداتين: Flask وPickle، وكلاهما يعملان على Python. +لهذه المهمة، تحتاج إلى أداتين: Flask وPickle، وكلاهما يعمل على Python. -✅ ما هو [Flask](https://palletsprojects.com/p/flask/)؟ يُعرف بأنه "إطار عمل صغير" من قبل مطوريه، يوفر Flask الميزات الأساسية لإطارات عمل الويب باستخدام Python ومحرك قوالب لبناء صفحات الويب. ألقِ نظرة على [هذا الدرس](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) لتتعلم كيفية بناء تطبيقات باستخدام Flask. +✅ ما هو [Flask](https://palletsprojects.com/p/flask/)؟ يُعرف بأنه "إطار عمل صغير" من قبل منشئيه، يوفر Flask الميزات الأساسية لإطارات عمل الويب باستخدام Python ومحرك قوالب لبناء صفحات الويب. ألقِ نظرة على [وحدة التعلم هذه](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 ليس آمنًا بطبيعته، لذا كن حذرًا إذا طُلب منك "فك تخزين" ملف. الملف المخزن يحتوي على الامتداد `.pkl`. +✅ ما هو [Pickle](https://docs.python.org/3/library/pickle.html)؟ Pickle 🥒 هو وحدة Python تقوم بتسلسل وإلغاء تسلسل هيكل كائن Python. عندما تقوم "بتخزين" نموذج، فإنك تقوم بتسلسل أو تسطيح هيكله للاستخدام على الويب. كن حذرًا: Pickle ليس آمنًا بطبيعته، لذا كن حذرًا إذا طُلب منك "إلغاء تخزين" ملف. يحتوي الملف المخزن على اللاحقة `.pkl`. ## تمرين - تنظيف البيانات -في هذا الدرس، ستستخدم بيانات من 80,000 مشاهدة للأجسام الطائرة المجهولة، التي جمعها [NUFORC](https://nuforc.org) (المركز الوطني لتقارير الأجسام الطائرة المجهولة). تحتوي هذه البيانات على أوصاف مثيرة للاهتمام لمشاهدات الأجسام الطائرة المجهولة، على سبيل المثال: +في هذا الدرس ستستخدم بيانات من 80,000 مشاهدة للأجسام الطائرة المجهولة، تم جمعها بواسطة [NUFORC](https://nuforc.org) (المركز الوطني للإبلاغ عن الأجسام الطائرة المجهولة). تحتوي هذه البيانات على أوصاف مثيرة للاهتمام لمشاهدات الأجسام الطائرة المجهولة، على سبيل المثال: -- **وصف طويل كمثال.** "رجل يظهر من شعاع ضوء يضيء على حقل عشبي في الليل ويركض نحو موقف سيارات Texas Instruments". +- **وصف طويل كمثال.** "رجل يخرج من شعاع ضوء يضيء على حقل عشبي في الليل ويركض نحو موقف سيارات Texas Instruments". - **وصف قصير كمثال.** "الأضواء طاردتنا". -تتضمن ورقة البيانات [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) أعمدة حول `المدينة`، `الولاية` و`الدولة` التي حدثت فيها المشاهدة، شكل الجسم الطائر (`shape`) وخطوط الطول والعرض (`latitude` و`longitude`). +تشمل جدول البيانات [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) أعمدة حول `المدينة`، `الولاية` و`الدولة` حيث حدثت المشاهدة، شكل الجسم، و`خط العرض` و`خط الطول`. -في [دفتر الملاحظات](notebook.ipynb) الفارغ المرفق في هذا الدرس: +في [دفتر الملاحظات](../../../../3-Web-App/1-Web-App/notebook.ipynb) الفارغ المرفق في هذا الدرس: -1. قم باستيراد `pandas`، `matplotlib`، و`numpy` كما فعلت في الدروس السابقة واستورد ورقة بيانات الأجسام الطائرة المجهولة. يمكنك إلقاء نظرة على عينة من مجموعة البيانات: +1. قم باستيراد `pandas`، `matplotlib`، و`numpy` كما فعلت في الدروس السابقة واستيراد جدول بيانات الأجسام الطائرة المجهولة. يمكنك إلقاء نظرة على مجموعة بيانات نموذجية: ```python import pandas as pd @@ -71,7 +71,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.head() ``` -1. قم بتحويل بيانات الأجسام الطائرة إلى إطار بيانات صغير مع عناوين جديدة. تحقق من القيم الفريدة في حقل `Country`. +1. قم بتحويل بيانات الأجسام الطائرة المجهولة إلى إطار بيانات صغير مع عناوين جديدة. تحقق من القيم الفريدة في حقل `Country`. ```python ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) @@ -79,7 +79,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.Country.unique() ``` -1. الآن، يمكنك تقليل كمية البيانات التي نحتاج إلى التعامل معها عن طريق حذف أي قيم فارغة واستيراد المشاهدات التي تتراوح مدتها بين 1-60 ثانية فقط: +1. الآن، يمكنك تقليل كمية البيانات التي نحتاج إلى التعامل معها عن طريق حذف أي قيم فارغة واستيراد المشاهدات فقط بين 1-60 ثانية: ```python ufos.dropna(inplace=True) @@ -89,7 +89,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.info() ``` -1. استورد مكتبة `LabelEncoder` من Scikit-learn لتحويل القيم النصية للدول إلى أرقام: +1. قم باستيراد مكتبة `LabelEncoder` الخاصة بـ Scikit-learn لتحويل القيم النصية للدول إلى أرقام: ✅ يقوم LabelEncoder بترميز البيانات أبجديًا @@ -114,9 +114,9 @@ CO_OP_TRANSLATOR_METADATA: ## تمرين - بناء النموذج -الآن يمكنك الاستعداد لتدريب نموذج عن طريق تقسيم البيانات إلى مجموعة تدريب واختبار. +الآن يمكنك الاستعداد لتدريب نموذج عن طريق تقسيم البيانات إلى مجموعة التدريب والاختبار. -1. اختر ثلاث ميزات تريد التدريب عليها كمتجه X، وسيكون المتجه y هو `Country`. تريد أن تكون قادرًا على إدخال `Seconds`، `Latitude` و`Longitude` والحصول على معرف الدولة كإخراج. +1. اختر ثلاث ميزات تريد التدريب عليها كمتجه X، وسيكون المتجه y هو `Country`. تريد أن تكون قادرًا على إدخال `Seconds`، `Latitude` و`Longitude` والحصول على معرف الدولة كإجابة. ```python from sklearn.model_selection import train_test_split @@ -143,13 +143,13 @@ CO_OP_TRANSLATOR_METADATA: print('Accuracy: ', accuracy_score(y_test, predictions)) ``` -الدقة ليست سيئة **(حوالي 95%)**، وهذا ليس مفاجئًا، حيث أن `Country` و`Latitude/Longitude` مترابطان. +الدقة ليست سيئة **(حوالي 95%)**، وليس من المستغرب، حيث أن `Country` و`Latitude/Longitude` مترابطان. -النموذج الذي أنشأته ليس ثوريًا جدًا حيث يجب أن تكون قادرًا على استنتاج `Country` من `Latitude` و`Longitude`، ولكنه تمرين جيد لمحاولة التدريب على بيانات خام قمت بتنظيفها وتصديرها، ثم استخدام هذا النموذج في تطبيق ويب. +النموذج الذي أنشأته ليس ثوريًا جدًا حيث يجب أن تكون قادرًا على استنتاج `Country` من `Latitude` و`Longitude`، ولكنه تمرين جيد لمحاولة التدريب من بيانات خام قمت بتنظيفها وتصديرها، ثم استخدام هذا النموذج في تطبيق ويب. -## تمرين - "تخزين" النموذج +## تمرين - تخزين النموذج -الآن، حان الوقت لتخزين النموذج! يمكنك القيام بذلك في بضع أسطر من التعليمات البرمجية. بمجرد تخزينه، قم بتحميل النموذج المخزن واختبره مقابل مصفوفة بيانات عينة تحتوي على قيم للثواني، خط العرض وخط الطول: +الآن، حان الوقت لتخزين النموذج! يمكنك القيام بذلك في بضعة أسطر من التعليمات البرمجية. بمجرد تخزينه، قم بتحميل النموذج المخزن واختبره مقابل مجموعة بيانات نموذجية تحتوي على قيم للثواني، خط العرض وخط الطول. ```python import pickle @@ -160,7 +160,7 @@ model = pickle.load(open('ufo-model.pkl','rb')) print(model.predict([[50,44,-12]])) ``` -يُرجع النموذج **'3'**، وهو رمز الدولة للمملكة المتحدة. مذهل! 👽 +النموذج يعيد **'3'**، وهو رمز الدولة للمملكة المتحدة. مذهل! 👽 ## تمرين - بناء تطبيق Flask @@ -179,9 +179,9 @@ print(model.predict([[50,44,-12]])) ufo-model.pkl ``` - ✅ ارجع إلى مجلد الحل لرؤية التطبيق النهائي + ✅ راجع مجلد الحل للحصول على عرض للتطبيق النهائي -1. أول ملف تقوم بإنشائه في مجلد _web-app_ هو ملف **requirements.txt**. مثل _package.json_ في تطبيق JavaScript، يسرد هذا الملف التبعيات المطلوبة للتطبيق. في **requirements.txt** أضف الأسطر: +1. أول ملف يتم إنشاؤه في مجلد _web-app_ هو ملف **requirements.txt**. مثل _package.json_ في تطبيق JavaScript، يسرد هذا الملف التبعيات المطلوبة للتطبيق. في **requirements.txt** أضف الأسطر: ```text scikit-learn @@ -190,13 +190,13 @@ print(model.predict([[50,44,-12]])) flask ``` -1. الآن، قم بتشغيل هذا الملف عن طريق الانتقال إلى _web-app_: +1. الآن، قم بتشغيل هذا الملف عن طريق التنقل إلى _web-app_: ```bash cd web-app ``` -1. في الطرفية الخاصة بك، اكتب `pip install` لتثبيت المكتبات المدرجة في _requirements.txt_: +1. في الطرفية الخاصة بك، اكتب `pip install`، لتثبيت المكتبات المدرجة في _requirements.txt_: ```bash pip install -r requirements.txt @@ -204,9 +204,9 @@ print(model.predict([[50,44,-12]])) 1. الآن، أنت جاهز لإنشاء ثلاثة ملفات أخرى لإنهاء التطبيق: - 1. أنشئ ملف **app.py** في الجذر. - 2. أنشئ ملف **index.html** في مجلد _templates_. - 3. أنشئ ملف **styles.css** في مجلد _static/css_. + 1. قم بإنشاء **app.py** في الجذر. + 2. قم بإنشاء **index.html** في مجلد _templates_. + 3. قم بإنشاء **styles.css** في مجلد _static/css_. 1. قم ببناء ملف _styles.css_ ببعض الأنماط: @@ -277,7 +277,7 @@ print(model.predict([[50,44,-12]])) ``` - ألقِ نظرة على القوالب في هذا الملف. لاحظ صياغة "mustache" حول المتغيرات التي سيتم توفيرها بواسطة التطبيق، مثل نص التنبؤ: `{{}}`. هناك أيضًا نموذج يقوم بإرسال تنبؤ إلى مسار `/predict`. + ألقِ نظرة على القوالب في هذا الملف. لاحظ صياغة "mustache" حول المتغيرات التي سيتم توفيرها بواسطة التطبيق، مثل نص التنبؤ: `{{}}`. هناك أيضًا نموذج ينشر تنبؤًا إلى مسار `/predict`. أخيرًا، أنت جاهز لبناء ملف Python الذي يدير استهلاك النموذج وعرض التنبؤات: @@ -318,36 +318,36 @@ print(model.predict([[50,44,-12]])) app.run(debug=True) ``` - > 💡 نصيحة: عند إضافة [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) أثناء تشغيل تطبيق الويب باستخدام Flask، سيتم عكس أي تغييرات تجريها على التطبيق فورًا دون الحاجة إلى إعادة تشغيل الخادم. احذر! لا تقم بتمكين هذا الوضع في تطبيق الإنتاج. + > 💡 نصيحة: عند إضافة [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) أثناء تشغيل تطبيق الويب باستخدام Flask، ستنعكس أي تغييرات تجريها على التطبيق فورًا دون الحاجة إلى إعادة تشغيل الخادم. احذر! لا تقم بتمكين هذا الوضع في تطبيق الإنتاج. -إذا قمت بتشغيل `python app.py` أو `python3 app.py` - يبدأ خادم الويب الخاص بك محليًا، ويمكنك ملء نموذج قصير للحصول على إجابة لسؤالك الملح حول أماكن مشاهدة الأجسام الطائرة المجهولة! +إذا قمت بتشغيل `python app.py` أو `python3 app.py` - يبدأ خادم الويب الخاص بك محليًا، ويمكنك ملء نموذج قصير للحصول على إجابة لسؤالك الملح حول مكان مشاهدة الأجسام الطائرة المجهولة! قبل القيام بذلك، ألقِ نظرة على أجزاء `app.py`: -1. أولاً، يتم تحميل التبعيات وبدء التطبيق. +1. أولاً، يتم تحميل التبعيات ويبدأ التطبيق. 1. ثم يتم استيراد النموذج. 1. ثم يتم عرض index.html على المسار الرئيسي. -على مسار `/predict`، تحدث عدة أشياء عند إرسال النموذج: +على مسار `/predict`، تحدث عدة أمور عند نشر النموذج: 1. يتم جمع متغيرات النموذج وتحويلها إلى مصفوفة numpy. ثم يتم إرسالها إلى النموذج ويتم إرجاع تنبؤ. -2. يتم إعادة عرض الدول التي نريد عرضها كنصوص قابلة للقراءة من رمز الدولة المتوقع، ويتم إرسال تلك القيمة مرة أخرى إلى index.html ليتم عرضها في القالب. +2. يتم إعادة عرض الدول التي نريد عرضها كنص قابل للقراءة من رمز الدولة المتوقع، ويتم إرسال تلك القيمة مرة أخرى إلى index.html ليتم عرضها في القالب. استخدام النموذج بهذه الطريقة، مع Flask ونموذج مخزن، هو أمر بسيط نسبيًا. أصعب شيء هو فهم شكل البيانات التي يجب إرسالها إلى النموذج للحصول على تنبؤ. يعتمد ذلك كله على كيفية تدريب النموذج. يحتوي هذا النموذج على ثلاث نقاط بيانات يجب إدخالها للحصول على تنبؤ. -في بيئة احترافية، يمكنك أن ترى كيف أن التواصل الجيد ضروري بين الأشخاص الذين يدربون النموذج وأولئك الذين يستهلكونه في تطبيق ويب أو جوال. في حالتنا، الشخص الوحيد هو أنت! +في بيئة احترافية، يمكنك أن ترى كيف أن التواصل الجيد ضروري بين الأشخاص الذين يدربون النموذج وأولئك الذين يستهلكونه في تطبيق ويب أو جوال. في حالتنا، هو شخص واحد فقط، أنت! --- ## 🚀 تحدي -بدلاً من العمل في دفتر ملاحظات واستيراد النموذج إلى تطبيق Flask، يمكنك تدريب النموذج مباشرة داخل تطبيق Flask! حاول تحويل كود Python الخاص بك في دفتر الملاحظات، ربما بعد تنظيف البيانات، لتدريب النموذج من داخل التطبيق على مسار يسمى `train`. ما هي إيجابيات وسلبيات متابعة هذه الطريقة؟ +بدلاً من العمل في دفتر ملاحظات واستيراد النموذج إلى تطبيق Flask، يمكنك تدريب النموذج مباشرة داخل تطبيق Flask! حاول تحويل كود Python في دفتر الملاحظات، ربما بعد تنظيف البيانات، لتدريب النموذج من داخل التطبيق على مسار يسمى `train`. ما هي الإيجابيات والسلبيات لمتابعة هذه الطريقة؟ -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية -هناك العديد من الطرق لبناء تطبيق ويب لاستهلاك نماذج تعلم الآلة. قم بعمل قائمة بالطرق التي يمكنك بها استخدام JavaScript أو Python لبناء تطبيق ويب للاستفادة من تعلم الآلة. فكر في البنية: هل يجب أن يبقى النموذج في التطبيق أم يعيش في السحابة؟ إذا كان الخيار الأخير، كيف ستصل إليه؟ ارسم نموذجًا معماريًا لحل تعلم الآلة المطبق على الويب. +هناك العديد من الطرق لبناء تطبيق ويب لاستهلاك نماذج تعلم الآلة. قم بعمل قائمة بالطرق التي يمكنك من خلالها استخدام JavaScript أو Python لبناء تطبيق ويب للاستفادة من تعلم الآلة. فكر في البنية: هل يجب أن يبقى النموذج في التطبيق أم يعيش في السحابة؟ إذا كان الخيار الأخير، كيف ستصل إليه؟ ارسم نموذجًا معماريًا لحل تعلم الآلة في تطبيق ويب. ## الواجب @@ -356,4 +356,4 @@ print(model.predict([[50,44,-12]])) --- **إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الرسمي. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/4-Classification/1-Introduction/README.md b/translations/ar/4-Classification/1-Introduction/README.md index 6346ee1eb..0c6706dfe 100644 --- a/translations/ar/4-Classification/1-Introduction/README.md +++ b/translations/ar/4-Classification/1-Introduction/README.md @@ -1,68 +1,68 @@ # مقدمة إلى التصنيف -في هذه الدروس الأربعة، ستستكشف أحد المحاور الأساسية لتعلم الآلة الكلاسيكي - _التصنيف_. سنقوم باستعراض استخدام خوارزميات تصنيف مختلفة مع مجموعة بيانات عن جميع المأكولات الرائعة في آسيا والهند. نأمل أن تكون جائعًا! +في هذه الدروس الأربعة، ستستكشف أحد الجوانب الأساسية لتعلم الآلة الكلاسيكي - _التصنيف_. سنقوم باستخدام مجموعة متنوعة من خوارزميات التصنيف مع مجموعة بيانات عن جميع المأكولات الرائعة في آسيا والهند. نأمل أن تكون جائعًا! -![مجرد رشة!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.ar.png) +![مجرد رشة!](../../../../4-Classification/1-Introduction/images/pinch.png) -> احتفل بالمأكولات الآسيوية في هذه الدروس! الصورة من [Jen Looper](https://twitter.com/jenlooper) +> احتفل بالمأكولات الآسيوية في هذه الدروس! الصورة بواسطة [Jen Looper](https://twitter.com/jenlooper) -التصنيف هو شكل من أشكال [التعلم الموجه](https://wikipedia.org/wiki/Supervised_learning) الذي يشترك كثيرًا مع تقنيات الانحدار. إذا كان تعلم الآلة يدور حول التنبؤ بالقيم أو الأسماء باستخدام مجموعات البيانات، فإن التصنيف ينقسم عمومًا إلى مجموعتين: _التصنيف الثنائي_ و_التصنيف متعدد الفئات_. +التصنيف هو شكل من أشكال [التعلم الموجّه](https://wikipedia.org/wiki/Supervised_learning) الذي يشترك كثيرًا مع تقنيات الانحدار. إذا كان تعلم الآلة يدور حول التنبؤ بالقيم أو الأسماء باستخدام مجموعات البيانات، فإن التصنيف ينقسم عمومًا إلى مجموعتين: _التصنيف الثنائي_ و _التصنيف متعدد الفئات_. [![مقدمة إلى التصنيف](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "مقدمة إلى التصنيف") -> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو: يقدم جون غوتاغ من MIT مقدمة عن التصنيف +> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: يقدم جون غوتاج من MIT التصنيف تذكر: -- **الانحدار الخطي** ساعدك في التنبؤ بالعلاقات بين المتغيرات وإجراء تنبؤات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط. على سبيل المثال، يمكنك التنبؤ _بسعر اليقطين في سبتمبر مقابل ديسمبر_. -- **الانحدار اللوجستي** ساعدك في اكتشاف "الفئات الثنائية": عند هذا السعر، _هل هذا اليقطين برتقالي أم غير برتقالي_؟ +- **الانحدار الخطي** ساعدك في التنبؤ بالعلاقات بين المتغيرات وإجراء توقعات دقيقة حول مكان وقوع نقطة بيانات جديدة بالنسبة لذلك الخط. على سبيل المثال، يمكنك التنبؤ _بسعر اليقطين في سبتمبر مقابل ديسمبر_. +- **الانحدار اللوجستي** ساعدك في اكتشاف "الفئات الثنائية": عند نقطة السعر هذه، _هل هذا اليقطين برتقالي أم غير برتقالي_؟ -يستخدم التصنيف خوارزميات مختلفة لتحديد طرق أخرى لتحديد تسمية أو فئة نقطة البيانات. دعنا نعمل مع بيانات المأكولات هذه لنرى ما إذا كان بإمكاننا، من خلال ملاحظة مجموعة من المكونات، تحديد أصل المأكولات. +يستخدم التصنيف خوارزميات مختلفة لتحديد طرق أخرى لتحديد تسمية أو فئة نقطة البيانات. دعونا نعمل مع بيانات المأكولات لنرى ما إذا كان بإمكاننا، من خلال مراقبة مجموعة من المكونات، تحديد أصل المأكولات. -## [اختبار قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) -> ### [هذا الدرس متوفر بلغة R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) +> ### [هذا الدرس متاح بلغة R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) ### مقدمة -التصنيف هو أحد الأنشطة الأساسية للباحث في تعلم الآلة وعالم البيانات. من التصنيف الأساسي لقيمة ثنائية ("هل هذا البريد الإلكتروني مزعج أم لا؟")، إلى التصنيف المعقد للصور وتقسيمها باستخدام رؤية الحاسوب، من المفيد دائمًا أن تكون قادرًا على تصنيف البيانات إلى فئات وطرح الأسئلة عليها. +التصنيف هو أحد الأنشطة الأساسية للباحثين في تعلم الآلة وعلماء البيانات. من التصنيف الأساسي لقيمة ثنائية ("هل هذا البريد الإلكتروني مزعج أم لا؟") إلى التصنيف المعقد للصور وتقسيمها باستخدام رؤية الكمبيوتر، من المفيد دائمًا أن تكون قادرًا على تصنيف البيانات إلى فئات وطرح الأسئلة عليها. لصياغة العملية بطريقة أكثر علمية، فإن طريقة التصنيف الخاصة بك تنشئ نموذجًا تنبؤيًا يمكّنك من رسم العلاقة بين المتغيرات المدخلة والمتغيرات الناتجة. -![التصنيف الثنائي مقابل التصنيف متعدد الفئات](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.ar.png) +![التصنيف الثنائي مقابل التصنيف متعدد الفئات](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) -> مشاكل التصنيف الثنائي مقابل متعدد الفئات التي تتعامل معها الخوارزميات. الرسم التوضيحي من [Jen Looper](https://twitter.com/jenlooper) +> مشاكل التصنيف الثنائي مقابل متعدد الفئات التي تتعامل معها خوارزميات التصنيف. الرسم البياني بواسطة [Jen Looper](https://twitter.com/jenlooper) قبل البدء في عملية تنظيف بياناتنا، تصورها، وتجهيزها لمهام تعلم الآلة، دعونا نتعلم قليلاً عن الطرق المختلفة التي يمكن من خلالها استخدام تعلم الآلة لتصنيف البيانات. -مستمدة من [الإحصائيات](https://wikipedia.org/wiki/Statistical_classification)، يستخدم التصنيف في تعلم الآلة الكلاسيكي ميزات مثل `smoker`، `weight`، و`age` لتحديد _احتمالية الإصابة بمرض معين_. كطريقة تعلم موجهة مشابهة لتمارين الانحدار التي قمت بها سابقًا، يتم تصنيف بياناتك وتستخدم الخوارزميات هذه التصنيفات لتصنيف وتوقع الفئات (أو "الميزات") لمجموعة البيانات وتعيينها إلى مجموعة أو نتيجة. +مستمدة من [الإحصائيات](https://wikipedia.org/wiki/Statistical_classification)، يستخدم التصنيف باستخدام تعلم الآلة الكلاسيكي ميزات مثل `smoker`، `weight`، و `age` لتحديد _احتمالية الإصابة بمرض معين_. كطريقة تعلم موجّهة مشابهة لتمارين الانحدار التي أجريتها سابقًا، يتم تصنيف بياناتك وتستخدم خوارزميات تعلم الآلة هذه التصنيفات لتصنيف وتوقع الفئات (أو "الميزات") لمجموعة البيانات وتعيينها إلى مجموعة أو نتيجة. -✅ خذ لحظة لتخيل مجموعة بيانات عن المأكولات. ما الذي يمكن لنموذج متعدد الفئات الإجابة عليه؟ وما الذي يمكن لنموذج ثنائي الإجابة عليه؟ ماذا لو أردت تحديد ما إذا كانت مأكولات معينة تستخدم الحلبة؟ ماذا لو أردت معرفة ما إذا كان بإمكانك، بالنظر إلى كيس بقالة مليء باليانسون النجمي، والخرشوف، والقرنبيط، والفجل، إعداد طبق هندي نموذجي؟ +✅ خذ لحظة لتخيل مجموعة بيانات عن المأكولات. ما الذي يمكن لنموذج متعدد الفئات الإجابة عليه؟ وما الذي يمكن لنموذج ثنائي الإجابة عليه؟ ماذا لو أردت تحديد ما إذا كانت مأكولات معينة من المحتمل أن تستخدم الحلبة؟ ماذا لو أردت معرفة ما إذا كان بإمكانك، بالنظر إلى حقيبة بقالة مليئة باليانسون النجمي، الخرشوف، القرنبيط، والفجل، إعداد طبق هندي نموذجي؟ [![سلال غامضة مجنونة](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "سلال غامضة مجنونة") -> 🎥 انقر على الصورة أعلاه لمشاهدة فيديو. الفكرة الأساسية لبرنامج 'Chopped' هي "السلة الغامضة" حيث يتعين على الطهاة إعداد طبق من اختيار عشوائي من المكونات. بالتأكيد كان نموذج تعلم الآلة سيساعد! +> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو. الفكرة الأساسية لبرنامج 'Chopped' هي "السلة الغامضة" حيث يتعين على الطهاة إعداد طبق من اختيار عشوائي من المكونات. بالتأكيد كان نموذج تعلم الآلة سيساعد! ## مرحبًا بـ 'المصنف' -السؤال الذي نريد طرحه على مجموعة بيانات المأكولات هو في الواقع سؤال **متعدد الفئات**، حيث لدينا العديد من المأكولات الوطنية المحتملة للعمل معها. بالنظر إلى مجموعة من المكونات، إلى أي من هذه الفئات العديدة ستنتمي البيانات؟ +السؤال الذي نريد طرحه على مجموعة بيانات المأكولات هو في الواقع سؤال **متعدد الفئات**، حيث لدينا العديد من المأكولات الوطنية المحتملة للعمل معها. بالنظر إلى مجموعة من المكونات، أي من هذه الفئات العديدة ستتناسب معها البيانات؟ -يوفر Scikit-learn العديد من الخوارزميات المختلفة لاستخدامها في تصنيف البيانات، اعتمادًا على نوع المشكلة التي تريد حلها. في الدرسين التاليين، ستتعلم عن العديد من هذه الخوارزميات. +يوفر Scikit-learn العديد من الخوارزميات المختلفة لاستخدامها لتصنيف البيانات، اعتمادًا على نوع المشكلة التي تريد حلها. في الدروس التالية، ستتعلم عن العديد من هذه الخوارزميات. ## تمرين - تنظيف وتوازن البيانات -المهمة الأولى التي يجب القيام بها، قبل بدء هذا المشروع، هي تنظيف وتوازن البيانات للحصول على نتائج أفضل. ابدأ بملف _notebook.ipynb_ الفارغ في جذر هذا المجلد. +المهمة الأولى التي يجب القيام بها، قبل بدء هذا المشروع، هي تنظيف وتوازن البيانات للحصول على نتائج أفضل. ابدأ بملف _notebook.ipynb_ الفارغ الموجود في جذر هذا المجلد. -أول شيء يجب تثبيته هو [imblearn](https://imbalanced-learn.org/stable/). هذه حزمة Scikit-learn ستسمح لك بتحقيق توازن أفضل للبيانات (ستتعلم المزيد عن هذه المهمة قريبًا). +أول شيء يجب تثبيته هو [imblearn](https://imbalanced-learn.org/stable/). هذه حزمة Scikit-learn ستتيح لك تحقيق توازن أفضل للبيانات (ستتعلم المزيد عن هذه المهمة قريبًا). 1. لتثبيت `imblearn`، قم بتشغيل `pip install`، كما يلي: @@ -70,7 +70,7 @@ CO_OP_TRANSLATOR_METADATA: pip install imblearn ``` -1. استورد الحزم التي تحتاجها لاستيراد بياناتك وتصورها، واستورد أيضًا `SMOTE` من `imblearn`. +1. قم باستيراد الحزم التي تحتاجها لاستيراد بياناتك وتصورها، واستيراد `SMOTE` من `imblearn`. ```python import pandas as pd @@ -82,13 +82,13 @@ CO_OP_TRANSLATOR_METADATA: الآن أصبحت جاهزًا لاستيراد البيانات. -1. المهمة التالية هي استيراد البيانات: +1. المهمة التالية ستكون استيراد البيانات: ```python df = pd.read_csv('../data/cuisines.csv') ``` - باستخدام `read_csv()` سيتم قراءة محتوى ملف csv _cusines.csv_ ووضعه في المتغير `df`. + استخدام `read_csv()` سيقرأ محتوى ملف csv _cusines.csv_ ويضعه في المتغير `df`. 1. تحقق من شكل البيانات: @@ -114,7 +114,7 @@ CO_OP_TRANSLATOR_METADATA: df.info() ``` - الناتج يشبه: + يشبه الناتج: ```output @@ -126,15 +126,15 @@ CO_OP_TRANSLATOR_METADATA: ## تمرين - التعرف على المأكولات -الآن يبدأ العمل في أن يصبح أكثر إثارة. دعنا نكتشف توزيع البيانات لكل نوع من المأكولات. +الآن يبدأ العمل ليصبح أكثر إثارة. دعونا نكتشف توزيع البيانات لكل نوع من المأكولات. -1. ارسم البيانات كأشرطة باستخدام `barh()`: +1. قم برسم البيانات كأشرطة باستخدام `barh()`: ```python df.cuisine.value_counts().plot.barh() ``` - ![توزيع بيانات المأكولات](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.ar.png) + ![توزيع بيانات المأكولات](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) هناك عدد محدود من المأكولات، لكن توزيع البيانات غير متساوٍ. يمكنك إصلاح ذلك! قبل القيام بذلك، استكشف قليلاً. @@ -154,7 +154,7 @@ CO_OP_TRANSLATOR_METADATA: print(f'korean df: {korean_df.shape}') ``` - الناتج يبدو كالتالي: + يبدو الناتج كما يلي: ```output thai df: (289, 385) @@ -166,9 +166,9 @@ CO_OP_TRANSLATOR_METADATA: ## اكتشاف المكونات -الآن يمكنك التعمق أكثر في البيانات ومعرفة ما هي المكونات النموذجية لكل نوع من المأكولات. يجب تنظيف البيانات المتكررة التي تسبب الالتباس بين المأكولات، لذا دعنا نتعلم عن هذه المشكلة. +الآن يمكنك التعمق أكثر في البيانات ومعرفة ما هي المكونات النموذجية لكل نوع من المأكولات. يجب تنظيف البيانات المتكررة التي تسبب ارتباكًا بين المأكولات، لذا دعونا نتعلم عن هذه المشكلة. -1. أنشئ دالة `create_ingredient()` في Python لإنشاء إطار بيانات للمكونات. ستبدأ هذه الدالة بإزالة عمود غير مفيد وفرز المكونات حسب عددها: +1. قم بإنشاء وظيفة `create_ingredient()` في Python لإنشاء إطار بيانات للمكونات. ستبدأ هذه الوظيفة بإسقاط عمود غير مفيد وفرز المكونات حسب عددها: ```python def create_ingredient_df(df): @@ -179,54 +179,52 @@ CO_OP_TRANSLATOR_METADATA: return ingredient_df ``` - الآن يمكنك استخدام هذه الدالة للحصول على فكرة عن أكثر عشرة مكونات شيوعًا لكل نوع من المأكولات. + الآن يمكنك استخدام هذه الوظيفة للحصول على فكرة عن أكثر عشرة مكونات شيوعًا لكل نوع من المأكولات. -1. استدعِ `create_ingredient()` وارسمها باستخدام `barh()`: +1. قم باستدعاء `create_ingredient()` وقم برسمها باستخدام `barh()`: ```python thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh() ``` - ![التايلاندية](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.ar.png) + ![التايلاندية](../../../../4-Classification/1-Introduction/images/thai.png) -1. افعل الشيء نفسه لبيانات المأكولات اليابانية: +1. قم بنفس الشيء لبيانات المأكولات اليابانية: ```python japanese_ingredient_df = create_ingredient_df(japanese_df) japanese_ingredient_df.head(10).plot.barh() ``` - ![اليابانية](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.ar.png) + ![اليابانية](../../../../4-Classification/1-Introduction/images/japanese.png) -1. الآن بالنسبة للمكونات الصينية: +1. الآن بالنسبة لمكونات المأكولات الصينية: ```python chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh() ``` - ![الصينية](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.ar.png) + ![الصينية](../../../../4-Classification/1-Introduction/images/chinese.png) -1. ارسم مكونات المأكولات الهندية: +1. قم برسم مكونات المأكولات الهندية: ```python indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh() ``` - ![الهندية](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.ar.png) + ![الهندية](../../../../4-Classification/1-Introduction/images/indian.png) -1. أخيرًا، ارسم مكونات المأكولات الكورية: +1. أخيرًا، قم برسم مكونات المأكولات الكورية: ```python korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() ``` - ![الكورية](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.ar.png) - -1. الآن، قم بإزالة المكونات الأكثر شيوعًا التي تسبب الالتباس بين المأكولات المختلفة، عن طريق استدعاء `drop()`: +1. الآن، قم بإسقاط المكونات الأكثر شيوعًا التي تسبب ارتباكًا بين المأكولات المختلفة، باستخدام `drop()`: الجميع يحب الأرز، الثوم، والزنجبيل! @@ -238,25 +236,25 @@ CO_OP_TRANSLATOR_METADATA: ## توازن مجموعة البيانات -الآن بعد أن قمت بتنظيف البيانات، استخدم [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "تقنية الإفراط في أخذ العينات للأقليات الاصطناعية" - لتحقيق التوازن. +الآن بعد أن قمت بتنظيف البيانات، استخدم [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "تقنية الإفراط في أخذ العينات للأقلية الاصطناعية" - لتحقيق التوازن. -1. استدعِ `fit_resample()`، حيث تولد هذه الاستراتيجية عينات جديدة عن طريق الاستيفاء. +1. قم باستدعاء `fit_resample()`، هذه الاستراتيجية تولد عينات جديدة عن طريق الاستيفاء. ```python oversample = SMOTE() transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) ``` - من خلال تحقيق التوازن في بياناتك، ستحصل على نتائج أفضل عند تصنيفها. فكر في التصنيف الثنائي. إذا كانت معظم بياناتك تنتمي إلى فئة واحدة، فإن نموذج تعلم الآلة سيتنبأ بتلك الفئة بشكل متكرر، فقط لأن هناك المزيد من البيانات لها. تحقيق التوازن في البيانات يزيل هذا التحيز. + من خلال تحقيق التوازن في بياناتك، ستحصل على نتائج أفضل عند تصنيفها. فكر في التصنيف الثنائي. إذا كانت معظم بياناتك تنتمي إلى فئة واحدة، فإن نموذج تعلم الآلة سيتنبأ بتلك الفئة بشكل أكثر تكرارًا، فقط لأن هناك المزيد من البيانات لها. تحقيق التوازن في البيانات يزيل أي انحراف ويساعد في حل هذه المشكلة. -1. الآن يمكنك التحقق من عدد التصنيفات لكل مكون: +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 @@ -281,7 +279,7 @@ CO_OP_TRANSLATOR_METADATA: transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') ``` -1. يمكنك إلقاء نظرة أخيرة على البيانات باستخدام `transformed_df.head()` و`transformed_df.info()`. احفظ نسخة من هذه البيانات لاستخدامها في الدروس المستقبلية: +1. يمكنك إلقاء نظرة أخيرة على البيانات باستخدام `transformed_df.head()` و `transformed_df.info()`. احفظ نسخة من هذه البيانات لاستخدامها في الدروس المستقبلية: ```python transformed_df.head() @@ -289,21 +287,21 @@ CO_OP_TRANSLATOR_METADATA: transformed_df.to_csv("../data/cleaned_cuisines.csv") ``` - يمكن الآن العثور على ملف CSV الجديد في مجلد البيانات الرئيسي. + يمكن الآن العثور على ملف CSV الجديد في مجلد البيانات الجذر. --- ## 🚀تحدي -تحتوي هذه المناهج على العديد من مجموعات البيانات المثيرة للاهتمام. استعرض مجلدات `data` لترى ما إذا كان أي منها يحتوي على مجموعات بيانات مناسبة للتصنيف الثنائي أو متعدد الفئات؟ ما الأسئلة التي ستطرحها على هذه المجموعة من البيانات؟ +تحتوي هذه المناهج على العديد من مجموعات البيانات المثيرة للاهتمام. ابحث في مجلدات `data` لترى ما إذا كانت تحتوي على مجموعات بيانات مناسبة للتصنيف الثنائي أو متعدد الفئات؟ ما الأسئلة التي ستطرحها على هذه المجموعة؟ -## [اختبار بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية استكشف واجهة برمجة تطبيقات SMOTE. ما هي حالات الاستخدام التي تناسبها؟ ما المشاكل التي تحلها؟ -## الواجب +## الواجب [استكشاف طرق التصنيف](assignment.md) diff --git a/translations/ar/4-Classification/2-Classifiers-1/README.md b/translations/ar/4-Classification/2-Classifiers-1/README.md index 96bf9c4e2..80e988932 100644 --- a/translations/ar/4-Classification/2-Classifiers-1/README.md +++ b/translations/ar/4-Classification/2-Classifiers-1/README.md @@ -1,24 +1,24 @@ # مصنفات المأكولات 1 -في هذا الدرس، ستستخدم مجموعة البيانات التي قمت بحفظها من الدرس السابق، والتي تحتوي على بيانات متوازنة ونظيفة حول المأكولات. +في هذا الدرس، ستستخدم مجموعة البيانات التي حفظتها من الدرس السابق، وهي مليئة بالبيانات المتوازنة والنظيفة حول المأكولات. -ستستخدم هذه المجموعة من البيانات مع مجموعة متنوعة من المصنفات للتنبؤ بـ _نوع المطبخ الوطني بناءً على مجموعة من المكونات_. أثناء القيام بذلك، ستتعلم المزيد عن بعض الطرق التي يمكن من خلالها استخدام الخوارزميات في مهام التصنيف. +ستستخدم هذه المجموعة مع مجموعة متنوعة من المصنفات للتنبؤ بنوع المأكولات الوطنية بناءً على مجموعة من المكونات. أثناء القيام بذلك، ستتعلم المزيد عن الطرق التي يمكن بها استخدام الخوارزميات في مهام التصنيف. -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) # التحضير بافتراض أنك أكملت [الدرس الأول](../1-Introduction/README.md)، تأكد من وجود ملف _cleaned_cuisines.csv_ في المجلد الجذر `/data` لهذه الدروس الأربعة. -## تمرين - التنبؤ بنوع المطبخ الوطني +## تمرين - التنبؤ بنوع المأكولات الوطنية 1. أثناء العمل في مجلد _notebook.ipynb_ الخاص بهذا الدرس، قم باستيراد هذا الملف مع مكتبة Pandas: @@ -37,7 +37,6 @@ CO_OP_TRANSLATOR_METADATA: | 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. الآن، قم باستيراد المزيد من المكتبات: @@ -49,7 +48,7 @@ CO_OP_TRANSLATOR_METADATA: import numpy as np ``` -1. قسّم إحداثيات X و y إلى إطارين بيانات للتدريب. يمكن أن تكون `cuisine` إطار البيانات الخاص بالتسميات: +1. قسّم إحداثيات X و y إلى إطارين بيانات للتدريب. يمكن أن تكون `cuisine` إطار البيانات الخاص بالتصنيفات: ```python cuisines_label_df = cuisines_df['cuisine'] @@ -67,7 +66,7 @@ CO_OP_TRANSLATOR_METADATA: Name: cuisine, dtype: object ``` -1. قم بحذف العمود `Unnamed: 0` وعمود `cuisine` باستخدام `drop()`. احفظ باقي البيانات كميزات قابلة للتدريب: +1. قم بإزالة عمود `Unnamed: 0` وعمود `cuisine` باستخدام `drop()`. احفظ باقي البيانات كميزات قابلة للتدريب: ```python cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) @@ -90,69 +89,69 @@ CO_OP_TRANSLATOR_METADATA: الآن بعد أن أصبحت بياناتك نظيفة وجاهزة للتدريب، عليك أن تقرر أي خوارزمية ستستخدم لهذه المهمة. -تجمع مكتبة Scikit-learn التصنيف تحت التعلم الموجه، وفي هذه الفئة ستجد العديد من الطرق للتصنيف. [التنوع](https://scikit-learn.org/stable/supervised_learning.html) قد يبدو محيرًا في البداية. تشمل الطرق التالية تقنيات التصنيف: +تجمع مكتبة Scikit-learn التصنيف تحت التعلم الموجه، وفي هذه الفئة ستجد العديد من الطرق للتصنيف. [التنوع](https://scikit-learn.org/stable/supervised_learning.html) قد يبدو مربكًا في البداية. تشمل الطرق التالية تقنيات التصنيف: - النماذج الخطية - آلات الدعم المتجهة - الانحدار العشوائي -- أقرب الجيران +- الجيران الأقرب - العمليات الغاوسية - أشجار القرار -- طرق التجميع (التصويت) -- الخوارزميات متعددة الفئات ومتعددة المخرجات +- طرق التجميع (المصنف التصويتي) +- خوارزميات متعددة الفئات ومتعددة المخرجات (تصنيف متعدد الفئات ومتعدد العلامات، تصنيف متعدد الفئات ومتعدد المخرجات) > يمكنك أيضًا استخدام [الشبكات العصبية لتصنيف البيانات](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification)، ولكن هذا خارج نطاق هذا الدرس. ### أي مصنف تختار؟ -إذن، أي مصنف يجب أن تختار؟ غالبًا ما يكون تشغيل عدة مصنفات والبحث عن نتيجة جيدة طريقة لاختبار ذلك. تقدم مكتبة Scikit-learn [مقارنة جنبًا إلى جنب](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) على مجموعة بيانات تم إنشاؤها، تقارن بين KNeighbors، و SVC بطريقتين، و GaussianProcessClassifier، و DecisionTreeClassifier، و RandomForestClassifier، و MLPClassifier، و AdaBoostClassifier، و GaussianNB، و QuadraticDiscrinationAnalysis، مع عرض النتائج بشكل مرئي: +إذن، أي مصنف يجب أن تختار؟ غالبًا ما يكون تشغيل عدة مصنفات والبحث عن نتيجة جيدة طريقة لاختبار. تقدم Scikit-learn [مقارنة جنبًا إلى جنب](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) على مجموعة بيانات تم إنشاؤها، تقارن بين KNeighbors، SVC بطريقتين، GaussianProcessClassifier، DecisionTreeClassifier، RandomForestClassifier، MLPClassifier، AdaBoostClassifier، GaussianNB و QuadraticDiscrinationAnalysis، وتعرض النتائج بشكل مرئي: -![مقارنة المصنفات](../../../../translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.ar.png) -> الرسوم البيانية مأخوذة من توثيق Scikit-learn +![مقارنة المصنفات](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> الرسوم البيانية مأخوذة من وثائق Scikit-learn -> AutoML يحل هذه المشكلة بشكل أنيق عن طريق تشغيل هذه المقارنات في السحابة، مما يسمح لك باختيار أفضل خوارزمية لبياناتك. جربه [هنا](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) +> AutoML يحل هذه المشكلة بشكل أنيق عن طريق تشغيل هذه المقارنات في السحابة، مما يتيح لك اختيار أفضل خوارزمية لبياناتك. جربه [هنا](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) ### نهج أفضل -نهج أفضل من التخمين العشوائي هو اتباع الأفكار الموجودة في [ورقة الغش الخاصة بـ ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) القابلة للتنزيل. هنا، نكتشف أنه بالنسبة لمشكلتنا متعددة الفئات، لدينا بعض الخيارات: +نهج أفضل من التخمين العشوائي هو اتباع الأفكار الموجودة في [ورقة الغش الخاصة بالتعلم الآلي](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) القابلة للتنزيل. هنا، نكتشف أنه بالنسبة لمشكلتنا متعددة الفئات، لدينا بعض الخيارات: -![ورقة الغش للمشاكل متعددة الفئات](../../../../translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.ar.png) +![ورقة الغش لمشاكل متعددة الفئات](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) > قسم من ورقة الغش الخاصة بخوارزميات Microsoft، يوضح خيارات التصنيف متعددة الفئات ✅ قم بتنزيل ورقة الغش هذه، واطبعها، وعلقها على حائطك! -### التفكير المنطقي +### التفكير دعونا نحاول التفكير في الطرق المختلفة بناءً على القيود التي لدينا: -- **الشبكات العصبية ثقيلة جدًا**. بالنظر إلى مجموعة البيانات النظيفة ولكن الصغيرة، وحقيقة أننا نقوم بتدريب النموذج محليًا عبر دفاتر الملاحظات، فإن الشبكات العصبية ثقيلة جدًا لهذه المهمة. -- **لا يوجد مصنف ثنائي الفئات**. نحن لا نستخدم مصنفًا ثنائي الفئات، لذا فإن ذلك يستبعد 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 لتحليل بياناتنا. ومع ذلك، هناك العديد من الطرق لاستخدام الانحدار اللوجستي في Scikit-learn. ألقِ نظرة على [المعلمات التي يمكن تمريرها](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). -بشكل أساسي، هناك معلمتان مهمتان - `multi_class` و `solver` - يجب تحديدهما عند طلب Scikit-learn لتنفيذ الانحدار اللوجستي. قيمة `multi_class` تطبق سلوكًا معينًا. وقيمة `solver` تحدد الخوارزمية المستخدمة. ليس كل الحلول يمكن إقرانها مع جميع قيم `multi_class`. +بشكل أساسي، هناك معلمتان مهمتان - `multi_class` و `solver` - يجب تحديدهما عند طلب Scikit-learn تنفيذ الانحدار اللوجستي. قيمة `multi_class` تطبق سلوكًا معينًا. وقيمة `solver` تحدد الخوارزمية المستخدمة. ليس كل الحلول يمكن أن تقترن بكل قيم `multi_class`. -وفقًا للتوثيق، في حالة التصنيف متعدد الفئات، فإن خوارزمية التدريب: +وفقًا للوثائق، في حالة التصنيف متعدد الفئات، فإن خوارزمية التدريب: -- **تستخدم مخطط one-vs-rest (OvR)**، إذا تم تعيين خيار `multi_class` إلى `ovr` -- **تستخدم خسارة الانتروبي المتقاطع**، إذا تم تعيين خيار `multi_class` إلى `multinomial`. (حاليًا، خيار `multinomial` مدعوم فقط من قبل الحلول ‘lbfgs’، ‘sag’، ‘saga’ و ‘newton-cg’). +- **تستخدم مخطط واحد ضد الباقي (OvR)**، إذا تم تعيين خيار `multi_class` إلى `ovr` +- **تستخدم خسارة الانتروبيا المتقاطعة**، إذا تم تعيين خيار `multi_class` إلى `multinomial`. (حاليًا، خيار `multinomial` مدعوم فقط بواسطة الحلول ‘lbfgs’، ‘sag’، ‘saga’ و ‘newton-cg’.) -> 🎓 "المخطط" هنا يمكن أن يكون إما 'ovr' (one-vs-rest) أو 'multinomial'. نظرًا لأن الانحدار اللوجستي مصمم لدعم التصنيف الثنائي، فإن هذه المخططات تسمح له بالتعامل بشكل أفضل مع مهام التصنيف متعددة الفئات. [المصدر](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) +> 🎓 "المخطط" هنا يمكن أن يكون إما 'ovr' (واحد ضد الباقي) أو 'multinomial'. نظرًا لأن الانحدار اللوجستي مصمم لدعم التصنيف الثنائي، فإن هذه المخططات تسمح له بالتعامل بشكل أفضل مع مهام التصنيف متعددة الفئات. [المصدر](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) > 🎓 "الحل" يُعرف بأنه "الخوارزمية المستخدمة في مشكلة التحسين". [المصدر](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). -تقدم مكتبة Scikit-learn هذا الجدول لشرح كيفية تعامل الحلول مع التحديات المختلفة التي تقدمها أنواع البيانات المختلفة: +تقدم Scikit-learn هذا الجدول لشرح كيفية تعامل الحلول مع التحديات المختلفة التي تقدمها هياكل البيانات المختلفة: -![الحلول](../../../../translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.ar.png) +![الحلول](../../../../4-Classification/2-Classifiers-1/images/solvers.png) ## تمرين - تقسيم البيانات -يمكننا التركيز على الانحدار اللوجستي كأول تجربة تدريبية نظرًا لأنك تعلمت عنه مؤخرًا في درس سابق. -قم بتقسيم بياناتك إلى مجموعات تدريب واختبار عن طريق استدعاء `train_test_split()`: +يمكننا التركيز على الانحدار اللوجستي لتجربة التدريب الأولى لدينا نظرًا لأنك تعلمت عنه مؤخرًا في درس سابق. +قسّم بياناتك إلى مجموعات تدريب واختبار باستخدام `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) @@ -160,9 +159,9 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine ## تمرين - تطبيق الانحدار اللوجستي -نظرًا لأنك تستخدم حالة التصنيف متعددة الفئات، تحتاج إلى اختيار _مخطط_ للاستخدام وتحديد _الحل_ الذي ستستخدمه. استخدم LogisticRegression مع إعداد متعدد الفئات والحل **liblinear** للتدريب. +نظرًا لأنك تستخدم حالة التصنيف متعدد الفئات، تحتاج إلى اختيار ما _المخطط_ الذي ستستخدمه وما _الحل_ الذي ستحدده. استخدم LogisticRegression مع إعداد متعدد الفئات والمحلل **liblinear** للتدريب. -1. قم بإنشاء انحدار لوجستي مع تعيين multi_class إلى `ovr` والحل إلى `liblinear`: +1. قم بإنشاء انحدار لوجستي مع تعيين multi_class إلى `ovr` والمحلل إلى `liblinear`: ```python lr = LogisticRegression(multi_class='ovr',solver='liblinear') @@ -172,7 +171,7 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine print ("Accuracy is {}".format(accuracy)) ``` - ✅ جرب حلاً مختلفًا مثل `lbfgs`، الذي يتم تعيينه غالبًا كإعداد افتراضي + ✅ جرب محللًا مختلفًا مثل `lbfgs`، الذي يتم تعيينه غالبًا كإعداد افتراضي > ملاحظة، استخدم وظيفة Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) لتسطيح بياناتك عند الحاجة. الدقة جيدة بنسبة تزيد عن **80%**! @@ -190,7 +189,7 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine cuisine: indian ``` - ✅ جرّب رقم صف مختلف وتحقق من النتائج. + ✅ جرب رقم صف مختلف وتحقق من النتائج. 1. بالتعمق أكثر، يمكنك التحقق من دقة هذا التنبؤ: @@ -204,7 +203,7 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine topPrediction.head() ``` - يتم طباعة النتيجة - المطبخ الهندي هو أفضل تخمين للنموذج، مع احتمال جيد: + يتم طباعة النتيجة - المطبخ الهندي هو أفضل تخمين، مع احتمال جيد: | | 0 | | -------: | -------: | @@ -223,26 +222,26 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine print(classification_report(y_test,y_pred)) ``` - | | الدقة | الاسترجاع | f1-score | الدعم | - | ------------ | ------ | --------- | -------- | ----- | - | 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 | - | الدقة | 0.80 | 1199 | | | - | المتوسط الكلي | 0.80 | 0.80 | 0.80 | 1199 | - | المتوسط الموزون | 0.80 | 0.80 | 0.80 | 1199 | + | | الدقة | الاسترجاع | درجة F1 | الدعم | + | ------------ | ------ | --------- | ------- | ------ | + | 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 | + | الدقة | 0.80 | 1199 | | | + | المتوسط الكلي | 0.80 | 0.80 | 0.80 | 1199 | + | المتوسط الموزون | 0.80 | 0.80 | 0.80 | 1199 | ## 🚀التحدي في هذا الدرس، استخدمت بياناتك المنظفة لبناء نموذج تعلم آلي يمكنه التنبؤ بالمطبخ الوطني بناءً على سلسلة من المكونات. خذ بعض الوقت لقراءة الخيارات العديدة التي يوفرها Scikit-learn لتصنيف البيانات. تعمق أكثر في مفهوم 'solver' لفهم ما يحدث خلف الكواليس. -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية -تعمق أكثر في الرياضيات وراء الانحدار اللوجستي في [هذا الدرس](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +تعمق قليلاً في الرياضيات وراء الانحدار اللوجستي في [هذا الدرس](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) ## الواجب [ادرس الحلول](assignment.md) @@ -250,4 +249,4 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine --- **إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة ناتجة عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/4-Classification/3-Classifiers-2/README.md b/translations/ar/4-Classification/3-Classifiers-2/README.md index 0af7a1846..158d6822e 100644 --- a/translations/ar/4-Classification/3-Classifiers-2/README.md +++ b/translations/ar/4-Classification/3-Classifiers-2/README.md @@ -1,17 +1,17 @@ # مصنفات المأكولات 2 -في درس التصنيف الثاني هذا، ستستكشف المزيد من الطرق لتصنيف البيانات الرقمية. ستتعلم أيضًا العواقب المترتبة على اختيار مصنف معين بدلاً من الآخر. +في درس التصنيف الثاني هذا، ستستكشف طرقًا إضافية لتصنيف البيانات الرقمية. كما ستتعرف على العواقب المترتبة على اختيار مصنف معين بدلاً من آخر. -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ### المتطلبات الأساسية @@ -19,25 +19,25 @@ CO_OP_TRANSLATOR_METADATA: ### التحضير -قمنا بتحميل ملف _notebook.ipynb_ الخاص بك مع مجموعة البيانات النظيفة وقمنا بتقسيمها إلى إطاري بيانات X و y، جاهزة لعملية بناء النموذج. +قمنا بتحميل ملف _notebook.ipynb_ الخاص بك مع مجموعة البيانات النظيفة وقمنا بتقسيمها إلى إطاري بيانات X و y، وهي جاهزة لعملية بناء النموذج. ## خريطة التصنيف -في السابق، تعلمت عن الخيارات المختلفة المتاحة لتصنيف البيانات باستخدام ورقة الغش الخاصة بـ Microsoft. تقدم مكتبة Scikit-learn ورقة غش مشابهة ولكن أكثر تفصيلًا يمكن أن تساعدك بشكل أكبر في تضييق نطاق المصنفات (مصطلح آخر للمصنفات): +في الدرس السابق، تعلمت عن الخيارات المختلفة المتاحة لتصنيف البيانات باستخدام ورقة الغش الخاصة بمايكروسوفت. تقدم مكتبة Scikit-learn ورقة غش مشابهة ولكن أكثر تفصيلًا يمكن أن تساعدك بشكل أكبر في تضييق نطاق المصنفات (وهو مصطلح آخر للمصنفات): -![خريطة تعلم الآلة من Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.ar.png) -> نصيحة: [قم بزيارة هذه الخريطة عبر الإنترنت](https://scikit-learn.org/stable/tutorial/machine_learning_map/) وانقر على المسار لقراءة الوثائق. +![خريطة تعلم الآلة من Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> نصيحة: [قم بزيارة هذه الخريطة عبر الإنترنت](https://scikit-learn.org/stable/tutorial/machine_learning_map/) وانقر على المسارات لقراءة الوثائق. ### الخطة -هذه الخريطة مفيدة جدًا بمجرد أن تكون لديك فهم واضح لبياناتك، حيث يمكنك "السير" على طول مساراتها لاتخاذ قرار: +تعد هذه الخريطة مفيدة جدًا بمجرد أن تكون لديك فكرة واضحة عن بياناتك، حيث يمكنك "السير" على طول مساراتها لاتخاذ قرار: - لدينا >50 عينة - نريد التنبؤ بفئة - لدينا بيانات معنونة - لدينا أقل من 100 ألف عينة - ✨ يمكننا اختيار Linear SVC -- إذا لم ينجح ذلك، نظرًا لأن لدينا بيانات رقمية +- إذا لم ينجح ذلك، بما أن لدينا بيانات رقمية - يمكننا تجربة ✨ KNeighbors Classifier - إذا لم ينجح ذلك، جرب ✨ SVC و ✨ Ensemble Classifiers @@ -45,9 +45,9 @@ CO_OP_TRANSLATOR_METADATA: ## تمرين - تقسيم البيانات -وفقًا لهذا المسار، يجب أن نبدأ باستيراد بعض المكتبات اللازمة. +باتباع هذا المسار، يجب أن نبدأ باستيراد بعض المكتبات اللازمة. -1. قم باستيراد المكتبات المطلوبة: +1. استيراد المكتبات المطلوبة: ```python from sklearn.neighbors import KNeighborsClassifier @@ -59,7 +59,7 @@ CO_OP_TRANSLATOR_METADATA: import numpy as np ``` -1. قم بتقسيم بيانات التدريب والاختبار: +1. قسّم بيانات التدريب والاختبار: ```python X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) @@ -67,13 +67,13 @@ CO_OP_TRANSLATOR_METADATA: ## مصنف Linear SVC -التجميع باستخدام Support-Vector (SVC) هو جزء من عائلة تقنيات تعلم الآلة Support-Vector Machines (تعرف على المزيد عنها أدناه). في هذه الطريقة، يمكنك اختيار "kernel" لتحديد كيفية تجميع العلامات. يشير المعامل 'C' إلى "التنظيم" الذي ينظم تأثير المعاملات. يمكن أن يكون kernel واحدًا من [عدة خيارات](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC)؛ هنا نضبطه على 'linear' لضمان استخدام Linear SVC. يتم ضبط الاحتمالية افتراضيًا على 'false'؛ هنا نضبطها على 'true' للحصول على تقديرات الاحتمالية. نضبط الحالة العشوائية على '0' لخلط البيانات للحصول على الاحتمالات. +يعد Support-Vector Clustering (SVC) أحد أفراد عائلة تقنيات تعلم الآلة Support-Vector Machines (تعرف على المزيد عنها أدناه). في هذه الطريقة، يمكنك اختيار "نواة" لتحديد كيفية تجميع العلامات. يشير المعامل 'C' إلى "التنظيم" الذي ينظم تأثير المعاملات. يمكن أن تكون النواة واحدة من [عدة خيارات](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC)؛ هنا نضبطها على 'linear' لضمان استخدام Linear SVC. يتم ضبط الاحتمالية افتراضيًا على 'false'؛ هنا نضبطها على 'true' للحصول على تقديرات الاحتمالية. نضبط الحالة العشوائية على '0' لخلط البيانات للحصول على الاحتمالات. ### تمرين - تطبيق Linear SVC ابدأ بإنشاء مصفوفة من المصنفات. ستضيف تدريجيًا إلى هذه المصفوفة أثناء الاختبار. -1. ابدأ بـ Linear SVC: +1. ابدأ باستخدام Linear SVC: ```python C = 10 @@ -83,7 +83,7 @@ CO_OP_TRANSLATOR_METADATA: } ``` -2. قم بتدريب النموذج باستخدام Linear SVC واطبع التقرير: +2. قم بتدريب النموذج باستخدام Linear SVC واطبع تقريرًا: ```python n_classifiers = len(classifiers) @@ -116,11 +116,11 @@ CO_OP_TRANSLATOR_METADATA: ## مصنف K-Neighbors -K-Neighbors هو جزء من عائلة طرق تعلم الآلة "الجيران"، والتي يمكن استخدامها للتعلم الموجه وغير الموجه. في هذه الطريقة، يتم إنشاء عدد محدد مسبقًا من النقاط ويتم جمع البيانات حول هذه النقاط بحيث يمكن التنبؤ بالعلامات العامة للبيانات. +K-Neighbors هو جزء من عائلة "الجيران" لطرق تعلم الآلة، والتي يمكن استخدامها للتعلم الموجه وغير الموجه. في هذه الطريقة، يتم إنشاء عدد محدد مسبقًا من النقاط ويتم جمع البيانات حول هذه النقاط بحيث يمكن التنبؤ بالعلامات العامة للبيانات. ### تمرين - تطبيق مصنف K-Neighbors -كان المصنف السابق جيدًا وعمل بشكل جيد مع البيانات، ولكن ربما يمكننا الحصول على دقة أفضل. جرب مصنف K-Neighbors. +كان المصنف السابق جيدًا وعمل بشكل جيد مع البيانات، ولكن ربما يمكننا تحقيق دقة أفضل. جرب مصنف K-Neighbors. 1. أضف سطرًا إلى مصفوفة المصنفات (أضف فاصلة بعد عنصر Linear SVC): @@ -145,15 +145,15 @@ K-Neighbors هو جزء من عائلة طرق تعلم الآلة "الجيرا weighted avg 0.76 0.74 0.74 1199 ``` - ✅ تعرف على [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + ✅ تعرف على المزيد حول [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) ## مصنف Support Vector -مصنفات Support-Vector هي جزء من عائلة [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) من طرق تعلم الآلة التي تُستخدم لمهام التصنيف والانحدار. تقوم SVMs "برسم أمثلة التدريب كنقاط في الفضاء" لزيادة المسافة بين فئتين. يتم رسم البيانات اللاحقة في هذا الفضاء بحيث يمكن التنبؤ بفئتها. +مصنفات Support-Vector هي جزء من عائلة [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) لطرق تعلم الآلة التي تُستخدم لمهام التصنيف والانحدار. تقوم SVMs "برسم أمثلة التدريب كنقاط في الفضاء" لزيادة المسافة بين فئتين. يتم بعد ذلك رسم البيانات اللاحقة في هذا الفضاء بحيث يمكن التنبؤ بفئتها. ### تمرين - تطبيق مصنف Support Vector -دعنا نحاول الحصول على دقة أفضل قليلاً باستخدام مصنف Support Vector. +دعنا نحاول تحقيق دقة أفضل قليلاً باستخدام مصنف Support Vector. 1. أضف فاصلة بعد عنصر K-Neighbors، ثم أضف هذا السطر: @@ -178,18 +178,18 @@ K-Neighbors هو جزء من عائلة طرق تعلم الآلة "الجيرا weighted avg 0.84 0.83 0.83 1199 ``` - ✅ تعرف على [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + ✅ تعرف على المزيد حول [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) -## المصنفات التجميعية +## المصنفات المجمعة (Ensemble Classifiers) -دعنا نتبع المسار حتى النهاية، على الرغم من أن الاختبار السابق كان جيدًا جدًا. دعنا نجرب بعض المصنفات التجميعية، تحديدًا Random Forest و AdaBoost: +دعنا نتبع المسار حتى النهاية، على الرغم من أن الاختبار السابق كان جيدًا جدًا. دعنا نجرب بعض "المصنفات المجمعة"، وتحديدًا Random Forest و AdaBoost: ```python 'RFST': RandomForestClassifier(n_estimators=100), 'ADA': AdaBoostClassifier(n_estimators=100) ``` -النتيجة جيدة جدًا، خاصة لـ Random Forest: +النتيجة جيدة جدًا، خاصة بالنسبة لـ Random Forest: ```output Accuracy (train) for RFST: 84.5% @@ -219,31 +219,31 @@ Accuracy (train) for ADA: 72.4% weighted avg 0.73 0.72 0.72 1199 ``` -✅ تعرف على [المصنفات التجميعية](https://scikit-learn.org/stable/modules/ensemble.html) +✅ تعرف على المزيد حول [المصنفات المجمعة](https://scikit-learn.org/stable/modules/ensemble.html) -هذه الطريقة في تعلم الآلة "تجمع توقعات عدة مصنفات أساسية" لتحسين جودة النموذج. في مثالنا، استخدمنا Random Trees و AdaBoost. +تجمع هذه الطريقة في تعلم الآلة "تنبؤات عدة مصنفات أساسية" لتحسين جودة النموذج. في مثالنا، استخدمنا Random Trees و AdaBoost. -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، وهي طريقة تعتمد على المتوسط، تبني "غابة" من "أشجار القرار" مع إضافة عشوائية لتجنب الإفراط في التخصيص. يتم ضبط معامل n_estimators على عدد الأشجار. +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، وهي طريقة تعتمد على المتوسط، تبني "غابة" من "أشجار القرار" مع إضافة العشوائية لتجنب الإفراط في التخصيص. يتم ضبط معامل n_estimators على عدد الأشجار. -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) يقوم بتطبيق مصنف على مجموعة البيانات ثم تطبيق نسخ من هذا المصنف على نفس مجموعة البيانات. يركز على أوزان العناصر التي تم تصنيفها بشكل غير صحيح ويعدل التخصيص للمصنف التالي لتصحيحها. +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) يقوم بتدريب مصنف على مجموعة بيانات ثم يقوم بتدريب نسخ من هذا المصنف على نفس مجموعة البيانات. يركز على أوزان العناصر التي تم تصنيفها بشكل خاطئ ويعدل التخصيص للمصنف التالي لتصحيحها. --- -## 🚀التحدي +## 🚀تحدي -كل واحدة من هذه التقنيات لديها عدد كبير من المعاملات التي يمكنك تعديلها. قم بالبحث عن المعاملات الافتراضية لكل تقنية وفكر في ما يعنيه تعديل هذه المعاملات لجودة النموذج. +كل من هذه التقنيات لديها عدد كبير من المعاملات التي يمكنك تعديلها. قم بالبحث عن المعاملات الافتراضية لكل تقنية وفكر في ما يعنيه تعديل هذه المعاملات لجودة النموذج. -## [اختبار ما بعد المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) +## [اختبار ما بعد المحاضرة](https://ff-quizzes.netlify.app/en/ml/) ## المراجعة والدراسة الذاتية هناك الكثير من المصطلحات في هذه الدروس، لذا خذ دقيقة لمراجعة [هذه القائمة](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) من المصطلحات المفيدة! -## الواجب +## الواجب [لعب المعاملات](assignment.md) --- **إخلاء المسؤولية**: -تم ترجمة هذا المستند باستخدام خدمة الترجمة بالذكاء الاصطناعي [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية المصدر الموثوق. للحصول على معلومات حاسمة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file +تمت ترجمة هذا المستند باستخدام خدمة الترجمة الآلية [Co-op Translator](https://github.com/Azure/co-op-translator). بينما نسعى لتحقيق الدقة، يرجى العلم أن الترجمات الآلية قد تحتوي على أخطاء أو معلومات غير دقيقة. يجب اعتبار المستند الأصلي بلغته الأصلية هو المصدر الموثوق. للحصول على معلومات حساسة أو هامة، يُوصى بالاستعانة بترجمة بشرية احترافية. نحن غير مسؤولين عن أي سوء فهم أو تفسيرات خاطئة تنشأ عن استخدام هذه الترجمة. \ No newline at end of file diff --git a/translations/ar/4-Classification/4-Applied/README.md b/translations/ar/4-Classification/4-Applied/README.md index 40bfb7527..dbfd5ba8e 100644 --- a/translations/ar/4-Classification/4-Applied/README.md +++ b/translations/ar/4-Classification/4-Applied/README.md @@ -1,37 +1,37 @@ # بناء تطبيق ويب لتوصية المأكولات -في هذا الدرس، ستقوم ببناء نموذج تصنيف باستخدام بعض التقنيات التي تعلمتها في الدروس السابقة ومع مجموعة بيانات المأكولات الشهية التي تم استخدامها طوال هذه السلسلة. بالإضافة إلى ذلك، ستقوم ببناء تطبيق ويب صغير لاستخدام النموذج المحفوظ، مستفيدًا من بيئة تشغيل Onnx للويب. +في هذه الدرس، ستقوم ببناء نموذج تصنيف باستخدام بعض التقنيات التي تعلمتها في الدروس السابقة ومع مجموعة بيانات المأكولات الشهية التي تم استخدامها طوال هذه السلسلة. بالإضافة إلى ذلك، ستقوم ببناء تطبيق ويب صغير لاستخدام النموذج المحفوظ، مستفيدًا من تشغيل الويب الخاص بـ Onnx. -إحدى أكثر الاستخدامات العملية فائدة لتعلم الآلة هي بناء أنظمة التوصية، ويمكنك اتخاذ الخطوة الأولى في هذا الاتجاه اليوم! +واحدة من أكثر الاستخدامات العملية المفيدة لتعلم الآلة هي بناء أنظمة التوصية، ويمكنك اتخاذ الخطوة الأولى في هذا الاتجاه اليوم! -[![عرض هذا التطبيق](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "تطبيق تعلم الآلة") +[![عرض هذا التطبيق](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") -> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: جين لوبر تبني تطبيق ويب باستخدام بيانات تصنيف المأكولات +> 🎥 انقر على الصورة أعلاه لمشاهدة الفيديو: جين لوبر تبني تطبيق ويب باستخدام بيانات المأكولات المصنفة -## [اختبار ما قبل المحاضرة](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) +## [اختبار ما قبل المحاضرة](https://ff-quizzes.netlify.app/en/ml/) في هذا الدرس ستتعلم: -- كيفية بناء نموذج وحفظه كملف Onnx +- كيفية بناء نموذج وحفظه كـ Onnx model - كيفية استخدام Netron لفحص النموذج -- كيفية استخدام النموذج الخاص بك في تطبيق ويب للاستدلال +- كيفية استخدام النموذج الخاص بك في تطبيق ويب للاستنتاج ## بناء النموذج الخاص بك -بناء أنظمة تعلم الآلة التطبيقية هو جزء مهم من الاستفادة من هذه التقنيات في أنظمة عملك. يمكنك استخدام النماذج داخل تطبيقات الويب الخاصة بك (وبالتالي استخدامها في وضع عدم الاتصال إذا لزم الأمر) باستخدام Onnx. +بناء أنظمة تعلم الآلة التطبيقية هو جزء مهم من الاستفادة من هذه التقنيات في أنظمة الأعمال الخاصة بك. يمكنك استخدام النماذج داخل تطبيقات الويب الخاصة بك (وبالتالي استخدامها في سياق غير متصل إذا لزم الأمر) باستخدام Onnx. -في [درس سابق](../../3-Web-App/1-Web-App/README.md)، قمت ببناء نموذج انحدار حول مشاهدات الأجسام الطائرة المجهولة، وقمت بحفظه باستخدام "pickle"، واستخدمته في تطبيق Flask. على الرغم من أن هذه البنية مفيدة جدًا، إلا أنها تطبيق Python كامل، وقد تتطلب متطلباتك استخدام تطبيق JavaScript. +في [درس سابق](../../3-Web-App/1-Web-App/README.md)، قمت ببناء نموذج انحدار حول مشاهدات UFO، وقمت بـ "تخزينه"، واستخدمته في تطبيق Flask. بينما هذه البنية مفيدة جدًا للمعرفة، فهي تطبيق Python كامل، وقد تتطلب احتياجاتك استخدام تطبيق JavaScript. -في هذا الدرس، يمكنك بناء نظام أساسي يعتمد على JavaScript للاستدلال. ولكن أولاً، تحتاج إلى تدريب نموذج وتحويله للاستخدام مع Onnx. +في هذا الدرس، يمكنك بناء نظام أساسي يعتمد على JavaScript للاستنتاج. ولكن أولاً، تحتاج إلى تدريب نموذج وتحويله للاستخدام مع Onnx. ## تمرين - تدريب نموذج التصنيف @@ -46,14 +46,14 @@ CO_OP_TRANSLATOR_METADATA: تحتاج إلى '[skl2onnx](https://onnx.ai/sklearn-onnx/)' للمساعدة في تحويل نموذج Scikit-learn الخاص بك إلى تنسيق Onnx. -1. ثم، اعمل مع بياناتك بنفس الطريقة التي قمت بها في الدروس السابقة، عن طريق قراءة ملف CSV باستخدام `read_csv()`: +1. ثم، قم بمعالجة بياناتك بنفس الطريقة التي قمت بها في الدروس السابقة، عن طريق قراءة ملف CSV باستخدام `read_csv()`: ```python data = pd.read_csv('../data/cleaned_cuisines.csv') data.head() ``` -1. قم بإزالة العمودين الأولين غير الضروريين واحفظ البيانات المتبقية كـ 'X': +1. قم بإزالة أول عمودين غير ضروريين واحفظ البيانات المتبقية كـ 'X': ```python X = data.iloc[:,2:] @@ -72,7 +72,7 @@ CO_OP_TRANSLATOR_METADATA: سنستخدم مكتبة 'SVC' التي تتمتع بدقة جيدة. -1. استيراد المكتبات المناسبة من Scikit-learn: +1. قم باستيراد المكتبات المناسبة من Scikit-learn: ```python from sklearn.model_selection import train_test_split @@ -81,13 +81,13 @@ CO_OP_TRANSLATOR_METADATA: from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report ``` -1. فصل مجموعات التدريب والاختبار: +1. قم بفصل مجموعات التدريب والاختبار: ```python X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) ``` -1. بناء نموذج تصنيف SVC كما فعلت في الدرس السابق: +1. قم ببناء نموذج تصنيف SVC كما فعلت في الدرس السابق: ```python model = SVC(kernel='linear', C=10, probability=True,random_state=0) @@ -106,7 +106,7 @@ CO_OP_TRANSLATOR_METADATA: print(classification_report(y_test,y_pred)) ``` - كما رأينا من قبل، الدقة جيدة: + كما رأينا سابقًا، الدقة جيدة: ```output precision recall f1-score support @@ -124,9 +124,9 @@ CO_OP_TRANSLATOR_METADATA: ### تحويل النموذج الخاص بك إلى Onnx -تأكد من إجراء التحويل باستخدام العدد الصحيح من التنسورات. تحتوي مجموعة البيانات هذه على 380 مكونًا مدرجًا، لذا تحتاج إلى تدوين هذا الرقم في `FloatTensorType`: +تأكد من إجراء التحويل باستخدام الرقم الصحيح للتنسور. تحتوي هذه المجموعة من البيانات على 380 مكونًا مدرجًا، لذا تحتاج إلى تدوين هذا الرقم في `FloatTensorType`: -1. قم بالتحويل باستخدام عدد التنسورات 380. +1. قم بالتحويل باستخدام رقم تنسور 380. ```python from skl2onnx import convert_sklearn @@ -136,7 +136,7 @@ CO_OP_TRANSLATOR_METADATA: options = {id(model): {'nocl': True, 'zipmap': False}} ``` -1. أنشئ ملف onx واحفظه كملف **model.onnx**: +1. قم بإنشاء ملف onx واحفظه كملف **model.onnx**: ```python onx = convert_sklearn(model, initial_types=initial_type, options=options) @@ -144,15 +144,15 @@ CO_OP_TRANSLATOR_METADATA: f.write(onx.SerializeToString()) ``` - > ملاحظة، يمكنك تمرير [خيارات](https://onnx.ai/sklearn-onnx/parameterized.html) في نص التحويل الخاص بك. في هذه الحالة، قمنا بتمرير 'nocl' ليكون True و'zipmap' ليكون False. نظرًا لأن هذا نموذج تصنيف، لديك خيار إزالة ZipMap الذي ينتج قائمة من القواميس (غير ضروري). يشير `nocl` إلى تضمين معلومات الفئة في النموذج. قم بتقليل حجم النموذج الخاص بك عن طريق تعيين `nocl` إلى 'True'. + > ملاحظة، يمكنك تمرير [خيارات](https://onnx.ai/sklearn-onnx/parameterized.html) في نص التحويل الخاص بك. في هذه الحالة، قمنا بتمرير 'nocl' ليكون True و 'zipmap' ليكون False. نظرًا لأن هذا نموذج تصنيف، لديك خيار إزالة ZipMap الذي ينتج قائمة من القواميس (غير ضروري). `nocl` يشير إلى تضمين معلومات التصنيف في النموذج. قم بتقليل حجم النموذج الخاص بك عن طريق تعيين `nocl` إلى 'True'. -تشغيل الدفتر بالكامل الآن سيبني نموذج Onnx ويحفظه في هذا المجلد. +تشغيل دفتر الملاحظات بالكامل الآن سيبني نموذج Onnx ويحفظه في هذا المجلد. ## عرض النموذج الخاص بك -نماذج Onnx ليست مرئية جدًا في Visual Studio Code، ولكن هناك برنامج مجاني جيد يستخدمه العديد من الباحثين لعرض النموذج للتأكد من أنه تم بناؤه بشكل صحيح. قم بتنزيل [Netron](https://github.com/lutzroeder/Netron) وافتح ملف model.onnx الخاص بك. يمكنك رؤية نموذجك البسيط مصورًا، مع مدخلاته الـ 380 والمصنف المدرج: +نماذج Onnx ليست مرئية جدًا في Visual Studio Code، ولكن هناك برنامج مجاني جيد يستخدمه العديد من الباحثين لتصور النموذج للتأكد من أنه تم بناؤه بشكل صحيح. قم بتنزيل [Netron](https://github.com/lutzroeder/Netron) وافتح ملف model.onnx الخاص بك. يمكنك رؤية النموذج البسيط الخاص بك مصورًا، مع مدخلاته الـ 380 والمصنف المدرج: -![عرض Netron](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.ar.png) +![عرض Netron](../../../../4-Classification/4-Applied/images/netron.png) Netron هو أداة مفيدة لعرض النماذج الخاصة بك. @@ -160,7 +160,7 @@ Netron هو أداة مفيدة لعرض النماذج الخاصة بك. ## بناء تطبيق ويب للتوصية -يمكنك استخدام النموذج الخاص بك مباشرة في تطبيق ويب. تتيح لك هذه البنية أيضًا تشغيله محليًا وحتى في وضع عدم الاتصال إذا لزم الأمر. ابدأ بإنشاء ملف `index.html` في نفس المجلد حيث قمت بتخزين ملف `model.onnx`. +يمكنك استخدام النموذج الخاص بك مباشرة في تطبيق ويب. هذه البنية تتيح لك أيضًا تشغيله محليًا وحتى في وضع غير متصل إذا لزم الأمر. ابدأ بإنشاء ملف `index.html` في نفس المجلد حيث قمت بتخزين ملف `model.onnx`. 1. في هذا الملف _index.html_، أضف العلامات التالية: @@ -221,11 +221,11 @@ Netron هو أداة مفيدة لعرض النماذج الخاصة بك. ``` - لاحظ أن كل مربع اختيار تم إعطاؤه قيمة. تعكس هذه القيمة الفهرس حيث يوجد المكون وفقًا لمجموعة البيانات. التفاح، على سبيل المثال، في هذه القائمة الأبجدية، يشغل العمود الخامس، لذا فإن قيمته هي '4' لأننا نبدأ العد من 0. يمكنك استشارة [جدول المكونات](../../../../4-Classification/data/ingredient_indexes.csv) لاكتشاف فهرس مكون معين. + لاحظ أن كل مربع اختيار تم إعطاؤه قيمة. هذا يعكس الفهرس حيث يتم العثور على المكون وفقًا لمجموعة البيانات. التفاح، على سبيل المثال، في هذه القائمة الأبجدية، يحتل العمود الخامس، لذا قيمته هي '4' لأننا نبدأ العد من 0. يمكنك الرجوع إلى [جدول بيانات المكونات](../../../../4-Classification/data/ingredient_indexes.csv) لاكتشاف فهرس مكون معين. - أثناء استمرارك في العمل في ملف index.html، أضف كتلة نصية حيث يتم استدعاء النموذج بعد إغلاق العلامة ``. + أثناء استمرار العمل في ملف index.html، أضف كتلة نصية حيث يتم استدعاء النموذج بعد الإغلاق النهائي لـ ``. -1. أولاً، استورد [Onnx Runtime](https://www.onnxruntime.ai/): +1. أولاً، قم باستيراد [Onnx Runtime](https://www.onnxruntime.ai/): ```html @@ -233,7 +233,7 @@ Netron هو أداة مفيدة لعرض النماذج الخاصة بك. > يتم استخدام Onnx Runtime لتمكين تشغيل نماذج Onnx الخاصة بك عبر مجموعة واسعة من منصات الأجهزة، بما في ذلك التحسينات وواجهة برمجة التطبيقات للاستخدام. -1. بمجرد أن تكون بيئة التشغيل في مكانها، يمكنك استدعاؤها: +1. بمجرد أن يكون Runtime في مكانه، يمكنك استدعاؤه: ```html + ``` + + > Onnx Runtime се използва, за да позволи изпълнението на вашите Onnx модели на широк спектър от хардуерни платформи, включително оптимизации и API за използване. + +1. След като Runtime е на място, можете да го извикате: + + ```html + + ``` + +В този код се случват няколко неща: + +1. Създадохте масив от 380 възможни стойности (1 или 0), които да бъдат зададени и изпратени към модела за предсказание, в зависимост от това дали чекбоксът за съставка е маркиран. +2. Създадохте масив от чекбоксове и начин за определяне дали са маркирани във функция `init`, която се извиква при стартиране на приложението. Когато чекбокс е маркиран, масивът `ingredients` се променя, за да отрази избраната съставка. +3. Създадохте функция `testCheckboxes`, която проверява дали някой чекбокс е маркиран. +4. Използвате функцията `startInference`, когато бутонът е натиснат, и ако някой чекбокс е маркиран, започвате предсказанието. +5. Рутината за предсказание включва: + 1. Настройка на асинхронно зареждане на модела + 2. Създаване на структура Tensor, която да се изпрати към модела + 3. Създаване на 'feeds', които отразяват входа `float_input`, който създадохте при обучението на модела (можете да използвате Netron, за да проверите това име) + 4. Изпращане на тези 'feeds' към модела и изчакване на отговор + +## Тествайте приложението си + +Отворете терминална сесия във Visual Studio Code в папката, където се намира вашият файл index.html. Уверете се, че имате инсталиран глобално [http-server](https://www.npmjs.com/package/http-server), и напишете `http-server` в командния ред. Трябва да се отвори localhost, където можете да видите вашето уеб приложение. Проверете коя кухня се препоръчва въз основа на различни съставки: + +![уеб приложение за съставки](../../../../4-Classification/4-Applied/images/web-app.png) + +Поздравления, създадохте уеб приложение за препоръки с няколко полета. Отделете време, за да разширите тази система! + +## 🚀Предизвикателство + +Вашето уеб приложение е много минимално, така че продължете да го разширявате, използвайки съставките и техните индекси от данните [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Какви комбинации от вкусове работят за създаване на дадено национално ястие? + +## [Тест след урока](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Докато този урок само докосна полезността на създаването на система за препоръки за хранителни съставки, тази област на ML приложения е много богата на примери. Прочетете повече за това как се изграждат тези системи: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Задача + +[Създайте нова система за препоръки](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/4-Classification/4-Applied/assignment.md b/translations/bg/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..102201eb7 --- /dev/null +++ b/translations/bg/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Създайте препоръчваща система + +## Инструкции + +След като сте преминали упражненията в този урок, вече знаете как да създадете уеб приложение на JavaScript, използвайки Onnx Runtime и конвертиран Onnx модел. Експериментирайте със създаването на нова препоръчваща система, използвайки данни от тези уроци или от други източници (моля, отдайте заслуженото признание). Можете да създадете препоръчваща система за домашни любимци, базирана на различни характеристики на личността, или препоръчваща система за музикални жанрове, базирана на настроението на човек. Бъдете креативни! + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | -------------------------------------------------------------------- | ----------------------------------------- | --------------------------------------- | +| | Представени са уеб приложение и тетрадка, добре документирани и работещи | Едно от двете липсва или има недостатъци | И двете липсват или имат недостатъци | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/4-Classification/README.md b/translations/bg/4-Classification/README.md new file mode 100644 index 000000000..83ccdaa5f --- /dev/null +++ b/translations/bg/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Започване с класификация + +## Регионална тема: Вкусни азиатски и индийски кухни 🍜 + +В Азия и Индия традициите в храната са изключително разнообразни и много вкусни! Нека разгледаме данни за регионалните кухни, за да се опитаме да разберем техните съставки. + +![Продавач на тайландска храна](../../../4-Classification/images/thai-food.jpg) +> Снимка от Lisheng Chang в 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. [Приложен ML: създаване на уеб приложение](4-Applied/README.md) + +## Автори + +"Започване с класификация" е написано с ♥️ от [Cassie Breviu](https://www.twitter.com/cassiebreviu) и [Jen Looper](https://www.twitter.com/jenlooper) + +Данните за вкусните кухни са взети от [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/1-Visualize/README.md b/translations/bg/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..a9de6d679 --- /dev/null +++ b/translations/bg/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Въведение в клъстеризацията + +Клъстеризацията е вид [Обучение без надзор](https://wikipedia.org/wiki/Unsupervised_learning), което предполага, че даден набор от данни е без етикети или че входните данни не са свързани с предварително дефинирани изходи. Тя използва различни алгоритми, за да сортира данни без етикети и да предостави групировки според моделите, които открива в данните. + +[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") + +> 🎥 Кликнете върху изображението по-горе за видео. Докато изучавате машинното обучение с клъстеризация, насладете се на някои нигерийски танцови парчета - това е високо оценена песен от 2014 г. на PSquare. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +### Въведение + +[Клъстеризацията](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) е много полезна за изследване на данни. Нека видим дали може да помогне за откриване на тенденции и модели в начина, по който нигерийската аудитория консумира музика. + +✅ Отделете минута, за да помислите за приложенията на клъстеризацията. В реалния живот клъстеризацията се случва винаги, когато имате купчина пране и трябва да сортирате дрехите на членовете на семейството 🧦👕👖🩲. В науката за данни клъстеризацията се случва, когато се опитвате да анализирате предпочитанията на потребителите или да определите характеристиките на който и да е набор от данни без етикети. Клъстеризацията, по някакъв начин, помага да се внесе ред в хаоса, като например чекмедже за чорапи. + +[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") + +> 🎥 Кликнете върху изображението по-горе за видео: Джон Гуттаг от MIT представя клъстеризацията. + +В професионална среда клъстеризацията може да се използва за определяне на неща като сегментация на пазара, например за определяне на възрастовите групи, които купуват определени продукти. Друго приложение би било откриването на аномалии, например за откриване на измами в набор от данни с транзакции с кредитни карти. Или може да използвате клъстеризация за определяне на тумори в група медицински сканирания. + +✅ Помислете за момент как може да сте срещали клъстеризация „в дивата природа“, в банковия сектор, електронната търговия или бизнес среда. + +> 🎓 Интересно е, че анализът на клъстери произхожда от областите на антропологията и психологията през 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)) +> +> Трансдуктивното заключение се извежда от наблюдавани тренировъчни случаи, които се свързват със специфични тестови случаи. Индуктивното заключение се извежда от тренировъчни случаи, които се свързват с общи правила, които след това се прилагат към тестови случаи. +> +> Пример: Представете си, че имате набор от данни, който е само частично етикетиран. Някои неща са „плочи“, някои „CD-та“, а някои са празни. Вашата задача е да предоставите етикети за празните. Ако изберете индуктивен подход, бихте обучили модел, който търси „плочи“ и „CD-та“, и бихте приложили тези етикети към неетикетираните данни. Този подход ще има проблеми с класифицирането на неща, които всъщност са „касети“. Трансдуктивният подход, от друга страна, се справя по-ефективно с тези неизвестни данни, тъй като работи за групиране на подобни елементи заедно и след това прилага етикет към групата. В този случай клъстерите може да отразяват „кръгли музикални неща“ и „квадратни музикални неща“. +> +> 🎓 ['Неравна' срещу 'равна' геометрия](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](../../../../5-Clustering/1-Visualize/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](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Клъстеризация чрез центроид**. Този популярен алгоритъм изисква избор на 'k', или броя на клъстерите, които да се формират, след което алгоритъмът определя централната точка на клъстера и събира данни около тази точка. [K-means клъстеризацията](https://wikipedia.org/wiki/K-means_clustering) е популярен вариант на клъстеризация чрез центроид. Центърът се определя от най-близката средна стойност, откъдето идва и името. Квадратното разстояние от клъстера се минимизира. + + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Инфографика от [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Клъстеризация, базирана на разпределение**. Базирана на статистическо моделиране, клъстеризацията, базирана на разпределение, се фокусира върху определяне на вероятността дадена точка от данни да принадлежи към клъстер и я присвоява съответно. Методите на Гаусови смеси принадлежат към този тип. + +- **Клъстеризация, базирана на плътност**. Точките от данни се присвояват към клъстери въз основа на тяхната плътност или групиране около други точки. Точки от данни, които са далеч от групата, се считат за изключения или шум. DBSCAN, Mean-shift и OPTICS принадлежат към този тип клъстеризация. + +- **Клъстеризация, базирана на решетка**. За многомерни набори от данни се създава решетка и данните се разделят между клетките на решетката, като по този начин се създават клъстери. + +## Упражнение - клъстеризирайте вашите данни + +Клъстеризацията като техника е значително подпомогната от правилната визуализация, така че нека започнем с визуализиране на нашите музикални данни. Това упражнение ще ни помогне да решим кой от методите за клъстеризация трябва да използваме най-ефективно за естеството на тези данни. + +1. Отворете файла [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) в тази папка. + +1. Импортирайте пакета `Seaborn` за добра визуализация на данни. + + ```python + !pip install seaborn + ``` + +1. Добавете данните за песните от [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Заредете dataframe с някои данни за песните. Подгответе се да изследвате тези данни, като импортирате библиотеките и изведете данните: + + ```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 | sh +| 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](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Ако искате да видите повече топ стойности, променете top `[:5]` на по-голяма стойност или го премахнете, за да видите всички. + +Забележете, когато топ жанрът е описан като „Missing“, това означава, че Spotify не го е класифицирал, така че нека го премахнем. + +1. Премахнете липсващите данни, като ги филтрирате: + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Сега проверете отново жанровете: + + ![most popular](../../../../5-Clustering/1-Visualize/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(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/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 (Kernel Density Estimate), която представя данните с помощта на непрекъсната крива на плътност на вероятността. Това ни позволява да интерпретираме данните, когато работим с множество разпределения. + + Като цяло трите жанра се подреждат свободно по отношение на тяхната популярност и танцувалност. Определянето на клъстери в тези свободно подредени данни ще бъде предизвикателство: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Създайте диаграма с точки: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Диаграма с точки на същите оси показва подобен модел на сближаване. + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Като цяло, за клъстериране можете да използвате диаграми с точки, за да покажете клъстери от данни, така че овладяването на този тип визуализация е много полезно. В следващия урок ще вземем тези филтрирани данни и ще използваме клъстериране с k-средни стойности, за да открием групи в тези данни, които изглежда се припокриват по интересни начини. + +--- + +## 🚀Предизвикателство + +В подготовка за следващия урок, направете диаграма за различните алгоритми за клъстериране, които можете да откриете и използвате в производствена среда. Какви проблеми се опитва да реши клъстерирането? + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Преди да приложите алгоритми за клъстериране, както научихме, е добра идея да разберете естеството на вашия набор от данни. Прочетете повече по тази тема [тук](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Тази полезна статия](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) ви води през различните начини, по които различните алгоритми за клъстериране се държат, предвид различни форми на данни. + +## Задача + +[Проучете други визуализации за клъстериране](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/1-Visualize/assignment.md b/translations/bg/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..07378f821 --- /dev/null +++ b/translations/bg/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Изследване на други визуализации за клъстеризация + +## Инструкции + +В този урок работихте с някои техники за визуализация, за да се запознаете с начини за изобразяване на данни в подготовка за тяхната клъстеризация. Разпръснатите графики (scatterplots) са особено полезни за намиране на групи от обекти. Изследвайте различни начини и библиотеки за създаване на разпръснати графики и документирайте работата си в тетрадка. Можете да използвате данните от този урок, други уроци или данни, които сами сте намерили (моля, посочете техния източник в тетрадката си). Изобразете някои данни с помощта на разпръснати графики и обяснете какво откривате. + +## Рубрика + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ------------------------------------------------------------ | -------------------------------------------------------------------------------------------- | ----------------------------------------- | +| | Представена е тетрадка с пет добре документирани разпръснати графики | Представена е тетрадка с по-малко от пет разпръснати графики и с по-малко документация | Представена е непълна тетрадка | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/bg/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..117d7c66a --- /dev/null +++ b/translations/bg/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/2-K-Means/README.md b/translations/bg/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..8e7fc778a --- /dev/null +++ b/translations/bg/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# K-Means клъстериране + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +В този урок ще научите как да създавате клъстери, използвайки Scikit-learn и набора от данни за нигерийска музика, който импортирахте по-рано. Ще разгледаме основите на K-Means за клъстериране. Имайте предвид, че както научихте в предишния урок, има много начини за работа с клъстери и методът, който използвате, зависи от вашите данни. Ще опитаме K-Means, тъй като това е най-често използваната техника за клъстериране. Да започваме! + +Термини, които ще научите: + +- Оценка на силуета +- Метод на лакътя +- Инерция +- Вариация + +## Въведение + +[K-Means клъстериране](https://wikipedia.org/wiki/K-means_clustering) е метод, произхождащ от областта на обработката на сигнали. Използва се за разделяне и групиране на данни в 'k' клъстери чрез серия от наблюдения. Всяко наблюдение работи за групиране на дадена точка от данни най-близо до нейния 'среден', или централната точка на клъстера. + +Клъстерите могат да бъдат визуализирани като [диаграми на Вороной](https://wikipedia.org/wiki/Voronoi_diagram), които включват точка (или 'семе') и съответстващия й регион. + +![диаграма на Вороной](../../../../5-Clustering/2-K-Means/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_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/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, можете да видите отклонения. + + ![отклонения](../../../../5-Clustering/2-K-Means/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) за всеки ред от dataframe. + +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: "суми на квадратите в рамките на клъстера" измерва средното квадратно разстояние на всички точки в рамките на клъстера до центроида на клъстера. [Източник](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 жанра песни, трябва да изберете 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! + + ![метод на лакътя](../../../../5-Clustering/2-K-Means/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))) + ``` + + Точността на този модел не е много добра, а формата на клъстерите ви дава намек защо. + + ![клъстери](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Тези данни са твърде небалансирани, твърде малко корелирани и има твърде много вариация между стойностите на колоните, за да се клъстерират добре. Всъщност клъстерите, които се формират, вероятно са силно повлияни или изкривени от трите жанрови категории, които дефинирахме по-горе. Това беше процес на учене! + + В документацията на Scikit-learn можете да видите, че модел като този, с клъстери, които не са много добре разграничени, има проблем с 'вариацията': + + ![проблемни модели](../../../../5-Clustering/2-K-Means/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)', за да разберете концепцията малко повече. + +--- + +## 🚀Предизвикателство + +Прекарайте известно време с този notebook, настройвайки параметрите. Можете ли да подобрите точността на модела, като почистите данните повече (например премахване на отклонения)? Можете да използвате тегла, за да дадете повече тежест на определени извадки от данни. Какво друго можете да направите, за да създадете по-добри клъстери? + +Подсказка: Опитайте да мащабирате данните си. В notebook има коментиран код, който добавя стандартно мащабиране, за да направи колоните с данни да си приличат повече по отношение на диапазон. Ще откриете, че докато оценката на силуета намалява, 'огъването' в графиката на лакътя се изглажда. Това е така, защото оставянето на данните немащабирани позволява данни с по-малка вариация да имат по-голяма тежест. Прочетете малко повече за този проблем [тук](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Разгледайте симулатор за K-Means [като този](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Можете да използвате този инструмент, за да визуализирате примерни точки от данни и да определите техните центроиди. Можете да редактирате случайността на данните, броя на клъстерите и броя на центроидите. Помага ли това да получите представа как данните могат да бъдат групирани? + +Също така разгледайте [този материал за K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) от Станфорд. + +## Задача + +[Опитайте различни методи за клъстериране](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/2-K-Means/assignment.md b/translations/bg/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..ebcafb206 --- /dev/null +++ b/translations/bg/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Опитайте различни методи за клъстеризация + +## Инструкции + +В този урок научихте за клъстеризацията с K-Means. Понякога K-Means не е подходящ за вашите данни. Създайте тетрадка, използвайки данни от тези уроци или от друго място (посочете източника си) и демонстрирайте различен метод за клъстеризация, който НЕ използва K-Means. Какво научихте? + +## Рубрика + +| Критерии | Примерно изпълнение | Задоволително изпълнение | Нуждае се от подобрение | +| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ----------------------------- | +| | Представена е тетрадка с добре документиран модел за клъстеризация | Представена е тетрадка без добра документация и/или с непълно съдържание | Представена е непълна работа | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/bg/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..d82c2c13c --- /dev/null +++ b/translations/bg/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/5-Clustering/README.md b/translations/bg/5-Clustering/README.md new file mode 100644 index 000000000..d1e70290a --- /dev/null +++ b/translations/bg/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Модели за клъстеризация в машинното обучение + +Клъстеризацията е задача в машинното обучение, която се стреми да открие обекти, които си приличат, и да ги групира в групи, наречени клъстери. Това, което отличава клъстеризацията от другите подходи в машинното обучение, е, че процесът се случва автоматично. Всъщност, може да се каже, че това е противоположността на обучението с учител. + +## Регионална тема: модели за клъстеризация на музикалните вкусове на нигерийската аудитория 🎧 + +Разнообразната аудитория в Нигерия има разнообразни музикални вкусове. Използвайки данни, събрани от Spotify (вдъхновено от [тази статия](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), нека разгледаме някои популярни песни в Нигерия. Този набор от данни включва информация за различни песни, като например техния 'danceability' рейтинг, 'acousticness', сила на звука, 'speechiness', популярност и енергия. Ще бъде интересно да открием модели в тези данни! + +![Грамофон](../../../5-Clustering/images/turntable.jpg) + +> Снимка от Marcela Laskoski на 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-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 и събран от Spotify. + +Полезни примери за K-Means, които помогнаха при създаването на този урок, включват това [изследване на ириси](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). + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/1-Introduction-to-NLP/README.md b/translations/bg/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..ffecb9569 --- /dev/null +++ b/translations/bg/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Въведение в обработката на естествен език + +Този урок обхваща кратка история и важни концепции на *обработката на естествен език*, подполе на *компютърната лингвистика*. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Въведение + +Обработката на естествен език (NLP), както често се нарича, е една от най-известните области, в които машинното обучение е приложено и използвано в производствен софтуер. + +✅ Можете ли да се сетите за софтуер, който използвате всеки ден и вероятно има вградена обработка на естествен език? А какво ще кажете за програмите за текстообработка или мобилните приложения, които използвате редовно? + +Ще научите за: + +- **Идеята за езиците**. Как са се развили езиците и кои са основните области на изследване. +- **Дефиниции и концепции**. Ще научите дефиниции и концепции за това как компютрите обработват текст, включително парсинг, граматика и идентифициране на съществителни и глаголи. В този урок има някои задачи за програмиране, както и няколко важни концепции, които ще научите да програмирате в следващите уроци. + +## Компютърна лингвистика + +Компютърната лингвистика е област на изследване и развитие през последните десетилетия, която изучава как компютрите могат да работят с, и дори да разбират, превеждат и комуникират с езици. Обработката на естествен език (NLP) е свързана област, която се фокусира върху това как компютрите могат да обработват „естествени“, или човешки, езици. + +### Пример - диктовка на телефон + +Ако някога сте диктували на телефона си вместо да пишете или сте задавали въпрос на виртуален асистент, вашата реч е била преобразувана в текстова форма и след това обработена или *парсирана* от езика, на който сте говорили. Откритите ключови думи след това са били обработени във формат, който телефонът или асистентът могат да разберат и да действат според него. + +![разбиране](../../../../6-NLP/1-Introduction-to-NLP/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 + ``` + +> 💡 Съвет: Можете да изпълнявате Python директно в средите на VS Code. Проверете [документацията](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) за повече информация. + +## Говорене с машини + +Историята на опитите да се накарат компютрите да разбират човешки език се простира десетилетия назад, а един от най-ранните учени, които разглеждат обработката на естествен език, е *Алън Тюринг*. + +### Тестът на Тюринг + +Когато Тюринг изследваше *изкуствения интелект* през 50-те години на миналия век, той се замисли дали може да се проведе разговорен тест между човек и компютър (чрез писмена кореспонденция), при който човекът в разговора не е сигурен дали разговаря с друг човек или с компютър. + +Ако след определена дължина на разговора човекът не може да определи дали отговорите са от компютър или не, може ли да се каже, че компютърът *мисли*? + +### Вдъхновението - „играта на имитация“ + +Идеята за това идва от парти игра, наречена *Игра на имитация*, при която разпитващият е сам в стая и има задача да определи кои от двама души (в друга стая) са съответно мъж и жена. Разпитващият може да изпраща бележки и трябва да се опита да измисли въпроси, при които писмените отговори разкриват пола на загадъчния човек. Разбира се, играчите в другата стая се опитват да заблудят разпитващия, като отговарят на въпросите по начин, който да го обърка или заблуди, като същевременно дават вид, че отговарят честно. + +### Разработване на Eliza + +През 60-те години учен от MIT, наречен *Джозеф Вайзенбаум*, разработва [*Eliza*](https://wikipedia.org/wiki/ELIZA), компютърен „терапевт“, който задава въпроси на човека и създава впечатление, че разбира отговорите му. Въпреки това, докато Eliza можеше да парсира изречение и да идентифицира определени граматически конструкции и ключови думи, за да даде разумен отговор, не можеше да се каже, че тя *разбира* изречението. Ако на Eliza се представи изречение във формат "**Аз съм** тъжен", тя може да пренареди и замени думи в изречението, за да формира отговора "От колко време **ти си** тъжен?". + +Това създава впечатление, че Eliza разбира изказването и задава последващ въпрос, докато в действителност тя просто променя времето и добавя някои думи. Ако Eliza не може да идентифицира ключова дума, за която има отговор, тя вместо това дава случаен отговор, който може да бъде приложим за много различни изказвания. Eliza може лесно да бъде заблудена, например ако потребителят напише "**Ти си** велосипед", тя може да отговори с "От колко време **аз съм** велосипед?", вместо с по-разумен отговор. + +[![Разговор с 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. Алтернативно, прочетете за Eliza в [Wikipedia](https://wikipedia.org/wiki/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://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Разгледайте препратките по-долу като възможности за допълнително четене. + +### Препратки + +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) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/bg/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..b37829dd4 --- /dev/null +++ b/translations/bg/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Търсене на бот + +## Инструкции + +Ботовете са навсякъде. Вашата задача: намерете един и го "осиновете"! Можете да ги откриете на уебсайтове, в банкови приложения и по телефона, например когато се обадите на финансови компании за съвет или информация за акаунта си. Анализирайте бота и вижте дали можете да го объркате. Ако успеете да го объркате, защо мислите, че това се случи? Напишете кратко есе за вашия опит. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------- | ----------------------- | +| | Написана е пълна страница, обясняваща предполагаемата архитектура на бота и описваща вашия опит с него | Есето е непълно или недостатъчно проучено | Не е представено есе | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/2-Tasks/README.md b/translations/bg/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..1163242cb --- /dev/null +++ b/translations/bg/6-NLP/2-Tasks/README.md @@ -0,0 +1,224 @@ + +# Често срещани задачи и техники в обработката на естествен език + +За повечето задачи, свързани с *обработката на естествен език*, текстът, който трябва да бъде обработен, трябва да бъде разделен, анализиран и резултатите съхранени или сравнени с правила и набори от данни. Тези задачи позволяват на програмиста да извлече _значението_, _намерението_ или само _честотата_ на термините и думите в текста. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +Нека разгледаме често използваните техники за обработка на текст. В комбинация с машинно обучение, тези техники ви помагат да анализирате големи количества текст ефективно. Преди да приложите ML към тези задачи, обаче, нека разберем проблемите, с които се сблъсква специалистът по NLP. + +## Често срещани задачи в NLP + +Има различни начини за анализиране на текста, върху който работите. Има задачи, които можете да изпълните, и чрез тях можете да разберете текста и да направите изводи. Обикновено тези задачи се изпълняват в определена последователност. + +### Токенизация + +Вероятно първото нещо, което повечето NLP алгоритми трябва да направят, е да разделят текста на токени или думи. Макар това да звучи просто, вземането предвид на пунктуацията и различните езикови разделители за думи и изречения може да го направи сложно. Може да се наложи да използвате различни методи за определяне на границите. + +![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Токенизация на изречение от **Гордост и предразсъдъци**. Инфографика от [Jen Looper](https://twitter.com/jenlooper) + +### Вграждания + +[Вграждания на думи](https://wikipedia.org/wiki/Word_embedding) са начин за числено преобразуване на текстовите данни. Вгражданията се правят така, че думи с подобно значение или думи, използвани заедно, да се групират. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "Имам най-голямо уважение към вашите нерви, те са мои стари приятели." - Вграждания на думи за изречение от **Гордост и предразсъдъци**. Инфографика от [Jen Looper](https://twitter.com/jenlooper) + +✅ Опитайте [този интересен инструмент](https://projector.tensorflow.org/), за да експериментирате с вграждания на думи. Кликването върху една дума показва групи от подобни думи: 'toy' се групира с 'disney', 'lego', 'playstation' и 'console'. + +### Парсинг и маркиране на части на речта + +Всяка дума, която е токенизирана, може да бъде маркирана като част на речта - съществително, глагол или прилагателно. Изречението `бързата червена лисица скочи над мързеливото кафяво куче` може да бъде маркирано като лисица = съществително, скочи = глагол. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Парсинг на изречение от **Гордост и предразсъдъци**. Инфографика от [Jen Looper](https://twitter.com/jenlooper) + +Парсингът разпознава кои думи са свързани една с друга в изречението - например `бързата червена лисица скочи` е последователност от прилагателно-съществително-глагол, която е отделна от `мързеливото кафяво куче`. + +### Честота на думи и фрази + +Полезна процедура при анализиране на голям текстов корпус е изграждането на речник на всяка дума или фраза от интерес и колко често се появява. Фразата `бързата червена лисица скочи над мързеливото кафяво куче` има честота на думата "the" от 2. + +Нека разгледаме примерен текст, в който броим честотата на думите. Стихотворението "The Winners" на Ръдиард Киплинг съдържа следния стих: + +```output +What the moral? Who rides may read. +When the night is thick and the tracks are blind +A friend at a pinch is a friend, indeed, +But a fool to wait for the laggard behind. +Down to Gehenna or up to the Throne, +He travels the fastest who travels alone. +``` + +Тъй като честотата на фразите може да бъде чувствителна или нечувствителна към регистъра, фразата `a friend` има честота 2, `the` има честота 6, а `travels` е 2. + +### N-грамове + +Текстът може да бъде разделен на последователности от думи с определена дължина: една дума (униграм), две думи (биграм), три думи (триграм) или произволен брой думи (n-грам). + +Например, `бързата червена лисица скочи над мързеливото кафяво куче` с n-грам стойност 2 произвежда следните n-грамове: + +1. бързата червена +2. червена лисица +3. лисица скочи +4. скочи над +5. над мързеливото +6. мързеливото кафяво +7. кафяво куче + +Може да е по-лесно да го визуализирате като плъзгащ прозорец върху изречението. Ето го за n-грамове от 3 думи, n-грамът е удебелен във всяко изречение: + +1. **бързата червена лисица** скочи над мързеливото кафяво куче +2. бързата **червена лисица скочи** над мързеливото кафяво куче +3. бързата червена **лисица скочи над** мързеливото кафяво куче +4. бързата червена лисица **скочи над мързеливото** кафяво куче +5. бързата червена лисица скочи **над мързеливото кафяво** куче +6. бързата червена лисица скочи над **мързеливото кафяво куче** + +![n-grams sliding window](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> N-грам стойност 3: Инфографика от [Jen Looper](https://twitter.com/jenlooper) + +### Извличане на съществителни фрази + +В повечето изречения има съществително, което е подлог или допълнение на изречението. В английския език то често може да бъде идентифицирано като предшествано от 'a', 'an' или 'the'. Идентифицирането на подлога или допълнението на изречението чрез 'извличане на съществителната фраза' е често срещана задача в NLP, когато се опитвате да разберете значението на изречението. + +✅ В изречението "Не мога да определя часа, мястото, погледа или думите, които положиха основите. Това беше твърде отдавна. Бях в средата, преди да разбера, че съм започнал.", можете ли да идентифицирате съществителните фрази? + +В изречението `бързата червена лисица скочи над мързеливото кафяво куче` има 2 съществителни фрази: **бързата червена лисица** и **мързеливото кафяво куче**. + +### Анализ на настроението + +Изречение или текст може да бъде анализирано за настроение, или колко *положително* или *отрицателно* е то. Настроението се измерва чрез *полярност* и *обективност/субективност*. Полярността се измерва от -1.0 до 1.0 (отрицателно до положително), а обективността от 0.0 до 1.0 (най-обективно до най-субективно). + +✅ По-късно ще научите, че има различни начини за определяне на настроението чрез машинно обучение, но един от тях е да имате списък с думи и фрази, които са категоризирани като положителни или отрицателни от човешки експерт, и да приложите този модел към текста, за да изчислите полярност. Можете ли да видите как това би работило в някои случаи и по-малко добре в други? + +### Инфлексия + +Инфлексията ви позволява да вземете дума и да получите нейния единствено или множествено число. + +### Лематизация + +*Лема* е коренът или основната дума за набор от думи, например *летя*, *лети*, *летене* имат лема на глагола *летя*. + +Съществуват и полезни бази данни за изследователите в NLP, като например: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) е база данни от думи, синоними, антоними и много други детайли за всяка дума на много различни езици. Тя е изключително полезна при опити за изграждане на преводи, проверка на правописа или езикови инструменти от всякакъв тип. + +## Библиотеки за NLP + +За щастие, не е нужно да изграждате всички тези техники сами, тъй като има отлични Python библиотеки, които правят обработката на естествен език много по-достъпна за разработчици, които не са специализирани в NLP или машинно обучение. В следващите уроци ще има повече примери за тях, но тук ще научите някои полезни примери, които ще ви помогнат със следващата задача. + +### Упражнение - използване на библиотеката `TextBlob` + +Нека използваме библиотека, наречена TextBlob, тъй като тя съдържа полезни API за справяне с тези типове задачи. TextBlob "стои на гигантските рамене на [NLTK](https://nltk.org) и [pattern](https://github.com/clips/pattern), и работи добре с двете." Тя има значително количество ML, вградено в своя API. + +> Забележка: Полезен [Ръководство за бърз старт](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) е налично за TextBlob и се препоръчва за опитни Python разработчици. + +Когато се опитвате да идентифицирате *съществителни фрази*, TextBlob предлага няколко опции за екстрактори, които да намерят съществителни фрази. + +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) е "Екстрактор на съществителни фрази, който използва chunk парсинг, обучен с корпуса ConLL-2000." ConLL-2000 се отнася до Конференцията за компютърно обучение на естествен език през 2000 г. Всяка година конференцията провежда работилница за справяне с труден NLP проблем, а през 2000 г. това беше chunking на съществителни. Моделът беше обучен върху Wall Street Journal, с "секции 15-18 като тренировъчни данни (211727 токена) и секция 20 като тестови данни (47377 токена)". Можете да разгледате използваните процедури [тук](https://www.clips.uantwerpen.be/conll2000/chunking/) и [резултатите](https://ifarm.nl/erikt/research/np-chunking.html). + +### Предизвикателство - подобряване на вашия бот с NLP + +В предишния урок създадохте много прост Q&A бот. Сега ще направите Марвин малко по-съпричастен, като анализирате вашия вход за настроение и отпечатате отговор, който съответства на настроението. Също така ще трябва да идентифицирате `noun_phrase` и да зададете въпрос за нея. + +Вашите стъпки при изграждането на по-добър разговорен бот: + +1. Отпечатайте инструкции, които съветват потребителя как да взаимодейства с бота. +2. Започнете цикъл: + 1. Приемете вход от потребителя. + 2. Ако потребителят поиска изход, излезте. + 3. Обработете входа на потребителя и определете подходящ отговор за настроението. + 4. Ако се открие съществителна фраза в настроението, направете я множествено число и поискайте повече информация за тази тема. + 5. Отпечатайте отговор. +3. Върнете се към стъпка 2. + +Ето кодовият фрагмент за определяне на настроение с TextBlob. Забележете, че има само четири *градиента* на отговор за настроение (можете да добавите повече, ако желаете): + +```python +if user_input_blob.polarity <= -0.5: + response = "Oh dear, that sounds bad. " +elif user_input_blob.polarity <= 0: + response = "Hmm, that's not great. " +elif user_input_blob.polarity <= 0.5: + response = "Well, that sounds positive. " +elif user_input_blob.polarity <= 1: + response = "Wow, that sounds great. " +``` + +Ето примерен изход, който да ви насочи (входът на потребителя е на редовете, започващи с >): + +```output +Hello, I am Marvin, the friendly robot. +You can end this conversation at any time by typing 'bye' +After typing each answer, press 'enter' +How are you today? +> I am ok +Well, that sounds positive. Can you tell me more? +> I went for a walk and saw a lovely cat +Well, that sounds positive. Can you tell me more about lovely cats? +> cats are the best. But I also have a cool dog +Wow, that sounds great. Can you tell me more about cool dogs? +> I have an old hounddog but he is sick +Hmm, that's not great. Can you tell me more about old hounddogs? +> bye +It was nice talking to you, goodbye! +``` + +Едно възможно решение на задачата е [тук](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Проверка на знанията + +1. Смятате ли, че съпричастните отговори биха "заблудили" някого да мисли, че ботът всъщност го разбира? +2. Прави ли идентифицирането на съществителната фраза бота по-убедителен? +3. Защо извличането на "съществителна фраза" от изречение е полезно? + +--- + +Изпълнете бота от предишната проверка на знанията и го тествайте на приятел. Може ли да ги заблуди? Можете ли да направите бота си по-убедителен? + +## 🚀Предизвикателство + +Вземете задача от предишната проверка на знанията и опитайте да я изпълните. Тествайте бота на приятел. Може ли да ги заблуди? Можете ли да направите бота си по-убедителен? + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +В следващите няколко урока ще научите повече за анализа на настроението. Изследвайте тази интересна техника в статии като тези на [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Задание + +[Накарайте бота да отговаря](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/2-Tasks/assignment.md b/translations/bg/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..6e1909c58 --- /dev/null +++ b/translations/bg/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Направете бота да отговаря + +## Инструкции + +В предишните уроци програмирахте основен бот, с който да разговаряте. Този бот дава случайни отговори, докато не кажете 'чао'. Можете ли да направите отговорите малко по-малко случайни и да задействате конкретни отговори, ако кажете определени неща, като 'защо' или 'как'? Помислете как машинното обучение може да направи този тип работа по-малко ръчна, докато разширявате функционалността на бота. Можете да използвате библиотеките NLTK или TextBlob, за да улесните задачите си. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | -------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Представен е нов файл bot.py и е документиран | Представен е нов файл bot.py, но съдържа грешки | Файлът не е представен | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/3-Translation-Sentiment/README.md b/translations/bg/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..a05c3f4d4 --- /dev/null +++ b/translations/bg/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Превод и анализ на настроения с машинно обучение + +В предишните уроци научихте как да създадете основен бот, използвайки `TextBlob`, библиотека, която включва машинно обучение зад кулисите, за да изпълнява основни задачи в обработката на естествен език, като извличане на съществителни фрази. Друго важно предизвикателство в компютърната лингвистика е точният _превод_ на изречение от един говорим или писмен език на друг. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +Преводът е много трудна задача, усложнена от факта, че съществуват хиляди езици, всеки със свои уникални граматически правила. Един подход е да се преобразуват формалните граматически правила на един език, например английски, в структура, независима от езика, и след това да се преведе, като се преобразува обратно на друг език. Този подход включва следните стъпки: + +1. **Идентификация**. Идентифицирайте или маркирайте думите в входния език като съществителни, глаголи и т.н. +2. **Създаване на превод**. Създайте директен превод на всяка дума във формат на целевия език. + +### Примерно изречение, от английски към ирландски + +На 'английски', изречението _I feel happy_ се състои от три думи в следния ред: + +- **подлог** (I) +- **глагол** (feel) +- **прилагателно** (happy) + +Въпреки това, на 'ирландски' език същото изречение има много различна граматическа структура - емоции като "*happy*" или "*sad*" се изразяват като *нещо, което е върху теб*. + +Английската фраза `I feel happy` на ирландски би била `Tá athas orm`. *Буквален* превод би бил `Happy is upon me`. + +Ирландски говорител, превеждащ на английски, би казал `I feel happy`, а не `Happy is upon me`, защото разбира значението на изречението, дори ако думите и структурата на изречението са различни. + +Формалният ред на изречението на ирландски е: + +- **глагол** (Tá или is) +- **прилагателно** (athas, или happy) +- **подлог** (orm, или upon me) + +## Превод + +Наивна програма за превод може да превежда само думи, игнорирайки структурата на изречението. + +✅ Ако сте научили втори (или трети или повече) език като възрастен, вероятно сте започнали, като мислите на родния си език, превеждайки концепцията дума по дума в главата си на втория език, и след това изговаряте превода си. Това е подобно на това, което правят наивните компютърни програми за превод. Важно е да преминете отвъд този етап, за да постигнете плавност! + +Наивният превод води до лоши (а понякога и забавни) грешки в превода: `I feel happy` буквално се превежда като `Mise bhraitheann athas` на ирландски. Това означава (буквално) `me feel happy` и не е валидно ирландско изречение. Въпреки че английският и ирландският са езици, говорени на два близко разположени острова, те са много различни езици с различни граматически структури. + +> Можете да гледате някои видеа за ирландските лингвистични традиции, като [това](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Подходи с машинно обучение + +Досега научихте за подхода с формални правила за обработка на естествен език. Друг подход е да се игнорира значението на думите и _вместо това да се използва машинно обучение за откриване на модели_. Това може да работи при превод, ако разполагате с много текстове (*корпус*) или текстове (*корпуси*) както на оригиналния, така и на целевия език. + +Например, разгледайте случая с *Гордост и предразсъдъци*, известен английски роман, написан от Джейн Остин през 1813 г. Ако се консултирате с книгата на английски и с човешки превод на книгата на *френски*, можете да откриете фрази в едната, които са _идиоматично_ преведени в другата. Ще направите това след малко. + +Например, когато английска фраза като `I have no money` се превежда буквално на френски, тя може да стане `Je n'ai pas de monnaie`. "Monnaie" е сложен френски 'фалшив когнат', тъй като 'money' и 'monnaie' не са синоними. По-добър превод, който човек би направил, би бил `Je n'ai pas d'argent`, защото по-добре предава значението, че нямате пари (а не 'дребни', което е значението на 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Изображение от [Jen Looper](https://twitter.com/jenlooper) + +Ако моделът за машинно обучение има достатъчно човешки преводи, върху които да изгради модел, той може да подобри точността на преводите, като идентифицира общи модели в текстове, които преди това са били преведени от експертни говорители на двата езика. + +### Упражнение - превод + +Можете да използвате `TextBlob`, за да превеждате изречения. Опитайте известната първа линия от **Гордост и предразсъдъци**: + +```python +from textblob import TextBlob + +blob = TextBlob( + "It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife!" +) +print(blob.translate(to="fr")) + +``` + +`TextBlob` се справя доста добре с превода: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Може да се твърди, че преводът на TextBlob е много по-точен, всъщност, отколкото френският превод на книгата от 1932 г. от V. Leconte и Ch. Pressoir: + +"C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." + +В този случай преводът, информиран от машинно обучение, се справя по-добре от човешкия преводач, който ненужно добавя думи в устата на оригиналния автор за 'яснота'. + +> Какво се случва тук? И защо TextBlob е толкова добър в превода? Е, зад кулисите той използва Google Translate, сложен AI, способен да анализира милиони фрази, за да предскаже най-добрите низове за задачата. Тук няма нищо ръчно и ви е необходима интернет връзка, за да използвате `blob.translate`. + +✅ Опитайте още няколко изречения. Кое е по-добро, машинно обучение или човешки превод? В кои случаи? + +## Анализ на настроения + +Друга област, в която машинното обучение може да работи много добре, е анализът на настроения. Неподходът с машинно обучение за анализ на настроения е да се идентифицират думи и фрази, които са 'положителни' и 'отрицателни'. След това, при нов текст, се изчислява общата стойност на положителните, отрицателните и неутралните думи, за да се идентифицира общото настроение. + +Този подход лесно се подвежда, както може би сте видели в задачата на Марвин - изречението `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" по различни начини, за да откриете как вашият глас предава значение. + +### Подходи с машинно обучение + +Подходът с машинно обучение би бил ръчно събиране на отрицателни и положителни текстове - туитове, или ревюта на филми, или каквото и да е, където човек е дал оценка *и* писмено мнение. След това могат да се приложат техники за обработка на естествен език към мненията и оценките, така че да се появят модели (например, положителните ревюта на филми често съдържат фразата 'Oscar worthy' повече от отрицателните ревюта на филми, или положителните ревюта на ресторанти казват 'gourmet' много повече от 'disgusting'). + +> ⚖️ **Пример**: Ако работите в офиса на политик и се обсъжда нов закон, избирателите може да пишат до офиса с имейли в подкрепа или против конкретния нов закон. Да кажем, че сте натоварени да четете имейлите и да ги сортирате в 2 купчини, *за* и *против*. Ако има много имейли, може да се почувствате претоварени, опитвайки се да ги прочетете всички. Не би ли било хубаво, ако бот може да ги прочете вместо вас, да ги разбере и да ви каже в коя купчина принадлежи всеки имейл? +> +> Един начин да постигнете това е да използвате машинно обучение. Ще обучите модела с част от имейлите *против* и част от имейлите *за*. Моделът би асоциирал фрази и думи с противната страна и страната за, *но няма да разбира съдържанието*, само че определени думи и модели са по-вероятни да се появят в имейл *против* или *за*. Можете да го тествате с някои имейли, които не сте използвали за обучение на модела, и да видите дали стига до същото заключение като вас. След това, когато сте доволни от точността на модела, можете да обработвате бъдещи имейли, без да се налага да четете всеки един. + +✅ Звучи ли този процес като процеси, които сте използвали в предишни уроци? + +## Упражнение - изречения с настроения + +Настроението се измерва с *полярност* от -1 до 1, където -1 е най-отрицателното настроение, а 1 е най-положителното. Настроението също се измерва с оценка от 0 до 1 за обективност (0) и субективност (1). + +Погледнете отново *Гордост и предразсъдъци* на Джейн Остин. Текстът е наличен тук в [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Примерът по-долу показва кратка програма, която анализира настроението на първото и последното изречение от книгата и показва неговата полярност и оценка за субективност/обективност. + +Трябва да използвате библиотеката `TextBlob` (описана по-горе), за да определите `sentiment` (не е необходимо да пишете собствен калкулатор за настроения) в следната задача. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Виждате следния изход: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Предизвикателство - проверка на полярността на настроенията + +Вашата задача е да определите, използвайки полярността на настроенията, дали *Гордост и предразсъдъци* има повече абсолютно положителни изречения, отколкото абсолютно отрицателни. За тази задача можете да приемете, че оценка на полярността от 1 или -1 е абсолютно положителна или отрицателна съответно. + +**Стъпки:** + +1. Изтеглете [копие на Гордост и предразсъдъци](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) от Project Gutenberg като .txt файл. Премахнете метаданните в началото и края на файла, оставяйки само оригиналния текст. +2. Отворете файла в Python и извлечете съдържанието като низ. +3. Създайте TextBlob, използвайки текста на книгата. +4. Анализирайте всяко изречение в книгата в цикъл. + 1. Ако полярността е 1 или -1, съхранете изречението в масив или списък с положителни или отрицателни съобщения. +5. В края, отпечатайте всички положителни изречения и отрицателни изречения (отделно) и броя на всяко. + +Ето пример [решение](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Проверка на знанията + +1. Настроението се основава на думите, използвани в изречението, но кодът *разбира ли* думите? +2. Смятате ли, че полярността на настроенията е точна, или с други думи, *съгласни ли сте* с оценките? + 1. По-специално, съгласни ли сте или не с абсолютната **положителна** полярност на следните изречения? + * “What an excellent father you have, girls!” said she, when the door was shut. + * “Your examination of Mr. Darcy is over, I presume,” said Miss Bingley; “and pray what is the result?” “I am perfectly convinced by it that Mr. Darcy has no defect. + * How wonderfully these sort of things occur! + * I have the greatest dislike in the world to that sort of thing. + * Charlotte is an excellent manager, I dare say. + * “This is delightful indeed! + * I am so happy! + * Your idea of the ponies is delightful. + 2. Следващите 3 изречения бяха оценени с абсолютна положителна полярност, но при внимателно четене те не са положителни изречения. Защо анализът на настроенията смята, че те са положителни изречения? + * Happy shall I be, when his stay at Netherfield is over!” “I wish I could say anything to comfort you,” replied Elizabeth; “but it is wholly out of my power. + * If I could but see you as happy! + * Our distress, my dear Lizzy, is very great. + 3. Съгласни ли сте или не с абсолютната **отрицателна** полярност на следните изречения? + - Everybody is disgusted with his pride. + - “I should like to know how he behaves among strangers.” “You shall hear then—but prepare yourself for something very dreadful. + - The pause was to Elizabeth’s feelings dreadful. + - It would be dreadful! + +✅ Всеки почитател на Джейн Остин ще разбере, че тя често използва книгите си, за да критикува по-нелепите аспекти на английското общество от епохата на Регентството. Елизабет Бенет, главната героиня в *Гордост и предразсъдъци*, е проницателен социален наблюдател (като авторката) и нейният език често е силно нюансиран. Дори г-н Дарси (любовният интерес в историята) отбелязва игривото и закачливо използване на езика от страна на Елизабет: "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." + +--- + +## 🚀Предизвикателство + +Можете ли да направите Марвин още по-добър, като извлечете други характеристики от потребителския вход? + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение +Има много начини за извличане на емоционален тон от текст. Помислете за бизнес приложенията, които биха могли да използват тази техника. Помислете за това как тя може да се обърка. Прочетете повече за усъвършенствани системи, готови за предприятия, които анализират емоционален тон, като [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott). Тествайте някои от изреченията от "Гордост и предразсъдъци" по-горе и вижте дали може да улови нюансите. + +## Задача + +[Поетична свобода](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/3-Translation-Sentiment/assignment.md b/translations/bg/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..c5753993b --- /dev/null +++ b/translations/bg/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Поетична лицензия + +## Инструкции + +В [този тефтер](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) можете да намерите над 500 стихотворения на Емили Дикинсън, предварително анализирани за настроение с помощта на Azure text analytics. Използвайки този набор от данни, анализирайте го с техниките, описани в урока. Съответства ли предложеното настроение на стихотворението с решението на по-усъвършенстваната услуга на Azure? Защо или защо не, според вас? Има ли нещо, което ви изненадва? + +## Рубрика + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ------------------------------------------------------------------------ | ------------------------------------------------------- | ------------------------ | +| | Представен е тефтер със солиден анализ на примерен изход на автора | Тефтерът е непълен или не извършва анализ | Не е представен тефтер | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/bg/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..d0fd9d363 --- /dev/null +++ b/translations/bg/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/bg/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..2e634da7a --- /dev/null +++ b/translations/bg/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо място + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/4-Hotel-Reviews-1/README.md b/translations/bg/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..846818478 --- /dev/null +++ b/translations/bg/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,415 @@ + +# Анализ на настроения с хотелски ревюта - обработка на данни + +В този раздел ще използвате техниките от предишните уроци, за да направите изследователски анализ на голям набор от данни. След като придобиете добро разбиране за полезността на различните колони, ще научите: + +- как да премахнете ненужните колони +- как да изчислите нови данни на базата на съществуващите колони +- как да запазите получения набор от данни за използване в крайната задача + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +### Въведение + +Досега научихте как текстовите данни се различават от числовите типове данни. Ако текстът е написан или изговорен от човек, той може да бъде анализиран за откриване на модели, честоти, настроения и значения. Този урок ви въвежда в реален набор от данни с реално предизвикателство: **[515K Хотелски ревюта в Европа](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, който включва [CC0: Лиценз за обществено достояние](https://creativecommons.org/publicdomain/zero/1.0/). Данните са събрани от Booking.com от публични източници. Създателят на набора от данни е Jiashen Liu. + +### Подготовка + +Ще ви е необходимо: + +* Възможност за изпълнение на .ipynb файлове с Python 3 +* pandas +* NLTK, [което трябва да инсталирате локално](https://www.nltk.org/install.html) +* Наборът от данни, който е наличен в Kaggle [515K Хотелски ревюта в Европа](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Размерът му е около 230 MB след разархивиране. Изтеглете го в основната папка `/data`, свързана с тези уроци по NLP. + +## Изследователски анализ на данни + +Това предизвикателство предполага, че изграждате бот за препоръки на хотели, използвайки анализ на настроения и оценки от гостите. Наборът от данни, който ще използвате, включва ревюта на 1493 различни хотела в 6 града. + +С помощта на Python, набор от данни с хотелски ревюта и анализа на настроенията на NLTK можете да откриете: + +* Кои са най-често използваните думи и фрази в ревютата? +* Дали официалните *тагове*, описващи хотел, корелират с оценките на ревютата (например, дали има повече негативни ревюта за определен хотел от *Семейства с малки деца* отколкото от *Самостоятелни пътници*, което може да показва, че хотелът е по-подходящ за *Самостоятелни пътници*)? +* Дали оценките за настроенията на NLTK "съвпадат" с числовата оценка на хотелските ревюта? + +#### Набор от данни + +Нека разгледаме набора от данни, който сте изтеглили и запазили локално. Отворете файла в редактор като VS Code или дори Excel. + +Заглавията в набора от данни са следните: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Ето ги групирани по начин, който може да е по-лесен за разглеждане: +##### Колони за хотели + +* `Hotel_Name`, `Hotel_Address`, `lat` (ширина), `lng` (дължина) + * С помощта на *lat* и *lng* можете да създадете карта с Python, показваща местоположенията на хотелите (може би оцветени според негативните и позитивните ревюта) + * Hotel_Address не е очевидно полезен за нас и вероятно ще го заменим с държава за по-лесно сортиране и търсене + +**Колони за мета-ревюта на хотели** + +* `Average_Score` + * Според създателя на набора от данни, тази колона представлява *Средна оценка на хотела, изчислена на базата на последния коментар през последната година*. Това изглежда като необичаен начин за изчисляване на оценката, но това са данните, които са събрани, така че засега ще ги приемем за достоверни. + + ✅ На базата на другите колони в тези данни, можете ли да измислите друг начин за изчисляване на средната оценка? + +* `Total_Number_of_Reviews` + * Общият брой ревюта, които този хотел е получил - не е ясно (без да напишем код) дали това се отнася за ревютата в набора от данни. +* `Additional_Number_of_Scoring` + * Това означава, че е дадена оценка, но не е написано позитивно или негативно ревю от рецензента. + +**Колони за ревюта** + +- `Reviewer_Score` + - Това е числова стойност с максимум 1 десетична цифра между минималната и максималната стойност 2.5 и 10 + - Не е обяснено защо 2.5 е най-ниската възможна оценка +- `Negative_Review` + - Ако рецензентът не е написал нищо, това поле ще съдържа "**No Negative**" + - Имайте предвид, че рецензент може да напише позитивно ревю в колоната за негативни ревюта (например "няма нищо лошо в този хотел") +- `Review_Total_Negative_Word_Counts` + - По-голям брой негативни думи показва по-ниска оценка (без да се проверява настроението) +- `Positive_Review` + - Ако рецензентът не е написал нищо, това поле ще съдържа "**No Positive**" + - Имайте предвид, че рецензент може да напише негативно ревю в колоната за позитивни ревюта (например "няма нищо добро в този хотел") +- `Review_Total_Positive_Word_Counts` + - По-голям брой позитивни думи показва по-висока оценка (без да се проверява настроението) +- `Review_Date` и `days_since_review` + - Може да се приложи мярка за свежест или остарялост на ревюто (по-старите ревюта може да не са толкова точни, защото управлението на хотела се е променило, направени са ремонти, добавен е басейн и т.н.) +- `Tags` + - Това са кратки описания, които рецензентът може да избере, за да опише типа гост, който е бил (например самостоятелен или семейство), типа стая, която е имал, продължителността на престоя и как е подадено ревюто. + - За съжаление, използването на тези тагове е проблематично, вижте секцията по-долу, която обсъжда тяхната полезност. + +**Колони за рецензенти** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Това може да бъде фактор в модел за препоръки, например, ако можете да определите, че по-продуктивните рецензенти със стотици ревюта са по-склонни да бъдат негативни, отколкото позитивни. Въпреки това, рецензентът на всяко конкретно ревю не е идентифициран с уникален код и следователно не може да бъде свързан с набор от ревюта. Има 30 рецензенти със 100 или повече ревюта, но е трудно да се види как това може да помогне на модела за препоръки. +- `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 стойности, разделени със запетаи, съответстващи на *Тип на пътуването*, *Тип на гостите*, *Тип на стаята*, *Брой нощи* и *Тип на устройството, от което е подадено ревюто*. Въпреки това, тъй като някои рецензенти не попълват всяко поле (може да оставят едно празно), стойностите не винаги са в същия ред. + +Например, вземете *Тип на групата*. Има 1025 уникални възможности в това поле в колоната `Tags`, и за съжаление само някои от тях се отнасят за група (някои са тип стая и т.н.). Ако филтрирате само тези, които споменават семейство, резултатите съдържат много типове стаи *Семейна стая*. Ако включите термина *с*, т.е. броите стойностите *Семейство с*, резултатите са по-добри, с над 80,000 от 515,000 резултата, съдържащи фразата "Семейство с малки деца" или "Семейство с по-големи деца". + +Това означава, че колоната за тагове не е напълно безполезна за нас, но ще изисква известна работа, за да я направим полезна. + +##### Средна оценка на хотела + +Има редица странности или несъответствия в набора от данни, които не мога да разбера, но са илюстрирани тук, за да сте наясно с тях, когато изграждате моделите си. Ако ги разберете, моля, уведомете ни в секцията за дискусии! + +Наборът от данни има следните колони, свързани със средната оценка и броя на ревютата: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Хотелът с най-много ревюта в този набор от данни е *Britannia International Hotel Canary Wharf* с 4789 ревюта от 515,000. Но ако погледнем стойността на `Total_Number_of_Reviews` за този хотел, тя е 9086. Може да предположите, че има много повече оценки без ревюта, така че може би трябва да добавим стойността от колоната `Additional_Number_of_Scoring`. Тази стойност е 2682, и добавянето й към 4789 ни дава 7471, което все още е с 1615 по-малко от `Total_Number_of_Reviews`. + +Ако вземете колоната `Average_Score`, може да предположите, че тя е средната стойност на ревютата в набора от данни, но описанието от Kaggle е "*Средна оценка на хотела, изчислена на базата на последния коментар през последната година*". Това не изглежда много полезно, но можем да изчислим собствена средна стойност на базата на оценките на ревютата в набора от данни. Използвайки същия хотел като пример, средната оценка на хотела е дадена като 7.1, но изчислената оценка (средна оценка на рецензентите *в* набора от данни) е 6.8. Това е близко, но не същата стойност, и можем само да предположим, че оценките, дадени в ревютата от колоната `Additional_Number_of_Scoring`, са увеличили средната стойност до 7.1. За съжаление, без начин да тестваме или докажем това твърдение, е трудно да използваме или да се доверим на `Average_Score`, `Additional_Number_of_Scoring` и `Total_Number_of_Reviews`, когато те се базират на или се отнасят за данни, които нямаме. + +За да усложним нещата още повече, хотелът с втория най-голям брой ревюта има изчислена средна оценка от 8.12, а `Average_Score` в набора от данни е 8.1. Дали тази правилна оценка е съвпадение или първият хотел е нес +> 🚨 Забележка за внимание +> +> Когато работите с този набор от данни, ще пишете код, който изчислява нещо от текста, без да се налага да го четете или анализирате сами. Това е същността на NLP – интерпретиране на смисъл или настроение, без да е необходимо човек да го прави. Въпреки това, е възможно да прочетете някои от негативните отзиви. Бих ви посъветвал да не го правите, защото няма нужда. Някои от тях са глупави или неуместни негативни отзиви за хотели, като например "Времето не беше хубаво" – нещо извън контрола на хотела или на когото и да било. Но има и тъмна страна на някои отзиви. Понякога негативните отзиви са расистки, сексистки или дискриминиращи по възраст. Това е неприятно, но очаквано в набор от данни, събран от публичен уебсайт. Някои рецензенти оставят отзиви, които биха ви се сторили отблъскващи, неудобни или разстройващи. По-добре е кодът да измери настроението, отколкото да ги четете сами и да се разстройвате. Това казано, малцинство са тези, които пишат такива неща, но те все пак съществуват. +## Упражнение - Изследване на данни +### Зареждане на данните + +Достатъчно е визуално разглеждане на данните, сега ще напишете малко код и ще получите отговори! Тази секция използва библиотеката pandas. Вашата първа задача е да се уверите, че можете да заредите и прочетете CSV данните. Библиотеката pandas има бърз CSV зареждач, а резултатът се поставя в dataframe, както в предишните уроци. CSV файлът, който зареждаме, има над половин милион реда, но само 17 колони. Pandas ви предоставя много мощни начини за взаимодействие с dataframe, включително възможността да извършвате операции върху всеки ред. + +Оттук нататък в този урок ще има кодови фрагменти, обяснения на кода и дискусия за значението на резултатите. Използвайте включения _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. + +## Операции с dataframe + +Първата задача в този урок е да проверите дали следните твърдения са верни, като напишете код, който изследва dataframe (без да го променяте). + +> Както при много задачи за програмиране, има няколко начина да ги изпълните, но добър съвет е да го направите по най-простия и лесен начин, особено ако ще бъде по-лесно да разберете кода, когато се върнете към него в бъдеще. С dataframe има изчерпателен API, който често ще има начин да направите това, което искате, ефективно. + +Третирайте следните въпроси като задачи за програмиране и се опитайте да им отговорите, без да гледате решението. + +1. Изведете *формата* на dataframe, който току-що заредихте (формата е броят на редовете и колоните). +2. Изчислете честотата на националностите на рецензентите: + 1. Колко различни стойности има за колоната `Reviewer_Nationality` и кои са те? + 2. Коя националност на рецензентите е най-често срещана в набора от данни (изведете държава и брой рецензии)? + 3. Кои са следващите топ 10 най-често срещани националности и техният честотен брой? +3. Кой е най-често рецензираният хотел за всяка от топ 10 най-често срещани националности на рецензентите? +4. Колко рецензии има на хотел (честотен брой на хотел) в набора от данни? +5. Въпреки че има колона `Average_Score` за всеки хотел в набора от данни, можете също да изчислите средна оценка (като вземете средната стойност на всички оценки на рецензентите в набора от данни за всеки хотел). Добавете нова колона към вашия dataframe с заглавие на колоната `Calc_Average_Score`, която съдържа тази изчислена средна стойност. +6. Има ли хотели със същата (закръглена до 1 десетична точка) `Average_Score` и `Calc_Average_Score`? + 1. Опитайте да напишете Python функция, която приема Series (ред) като аргумент и сравнява стойностите, като извежда съобщение, когато стойностите не са равни. След това използвайте метода `.apply()`, за да обработите всеки ред с функцията. +7. Изчислете и изведете колко реда имат стойности "No Negative" в колоната `Negative_Review`. +8. Изчислете и изведете колко реда имат стойности "No Positive" в колоната `Positive_Review`. +9. Изчислете и изведете колко реда имат стойности "No Positive" в колоната `Positive_Review` **и** стойности "No Negative" в колоната `Negative_Review`. + +### Отговори с код + +1. Изведете *формата* на dataframe, който току-що заредихте (формата е броят на редовете и колоните). + + ```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` за всеки хотел в набора от данни, можете също да изчислите средна оценка (като вземете средната стойност на всички оценки на рецензентите в набора от данни за всеки хотел). Добавете нова колона към вашия dataframe с заглавие на колоната `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" в колоната `Positive_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 + ``` + +## Друг начин + +Друг начин за броене на елементи без Lambdas и използване на 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 + ``` + + Може да сте забелязали, че има 127 реда, които имат както "No Negative", така и "No Positive" стойности за колоните `Negative_Review` и `Positive_Review` съответно. Това означава, че рецензентът е дал на хотела числова оценка, но е отказал да напише както положителен, така и отрицателен отзив. За щастие това е малък брой редове (127 от 515738, или 0.02%), така че вероятно няма да изкриви нашия модел или резултати в определена посока, но може би не сте очаквали набор от данни с рецензии да има редове без рецензии, така че си струва да изследвате данните, за да откриете такива редове. + +Сега, след като сте изследвали набора от данни, в следващия урок ще филтрирате данните и ще добавите анализ на настроенията. + +--- +## 🚀Предизвикателство + +Този урок демонстрира, както видяхме в предишните уроци, колко критично важно е да разбирате вашите данни и техните особености, преди да извършвате операции върху тях. Данните, базирани на текст, в частност изискват внимателно разглеждане. Разгледайте различни набори от данни, богати на текст, и вижте дали можете да откриете области, които биха могли да въведат пристрастия или изкривени настроения в модела. + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Вземете [този учебен път за NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott), за да откриете инструменти, които да опитате при изграждането на модели, базирани на реч и текст. + +## Задание + +[NLTK](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/bg/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..8bc0b829f --- /dev/null +++ b/translations/bg/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Инструкции + +NLTK е добре позната библиотека за използване в компютърната лингвистика и обработката на естествен език (NLP). Възползвайте се от тази възможност, за да прочетете '[NLTK книга](https://www.nltk.org/book/)' и да изпробвате нейните упражнения. В това незадължително задание ще се запознаете по-дълбоко с тази библиотека. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/bg/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..120fd553a --- /dev/null +++ b/translations/bg/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/bg/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 000000000..ade8d7531 --- /dev/null +++ b/translations/bg/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо съдържание + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/5-Hotel-Reviews-2/README.md b/translations/bg/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 000000000..f6fea94ac --- /dev/null +++ b/translations/bg/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Анализ на настроения с хотелски ревюта + +Сега, след като сте разгледали набора от данни в детайли, е време да филтрирате колоните и да използвате техники за обработка на естествен език (NLP), за да получите нови прозрения за хотелите. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +### Операции за филтриране и анализ на настроения + +Както вероятно сте забелязали, наборът от данни има някои проблеми. Някои колони са запълнени с ненужна информация, други изглеждат некоректни. Дори ако са коректни, не е ясно как са били изчислени, а отговорите не могат да бъдат независимо проверени чрез ваши собствени изчисления. + +## Упражнение: малко повече обработка на данни + +Почистете данните още малко. Добавете колони, които ще бъдат полезни по-късно, променете стойностите в други колони и напълно премахнете определени колони. + +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"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Netherlands | 105 | + | Barcelona, Spain | 211 | + | London, United Kingdom | 400 | + | Milan, Italy | 162 | + | Paris, France | 458 | + | Vienna, Austria | 158 | + +2. Обработка на мета-ревю колоните на хотелите + + 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` е проблематична, тъй като представлява списък (в текстов формат), съхраняван в колоната. За съжаление, редът и броят на подсекциите в тази колона не винаги са еднакви. Трудно е за човек да идентифицира правилните фрази, които са от интерес, защото има 515,000 реда и 1427 хотела, и всеки има леко различни опции, които ревюиращият може да избере. Тук NLP е полезен. Можете да сканирате текста и да намерите най-често срещаните фрази и да ги преброите. + +За съжаление, не се интересуваме от единични думи, а от многословни фрази (например *Бизнес пътуване*). Изпълнението на алгоритъм за честотно разпределение на многословни фрази върху толкова много данни (6762646 думи) може да отнеме изключително много време, но без да разгледате данните, изглежда, че това е необходим разход. Тук идва полезността на изследователския анализ на данни, защото сте видели пример на таговете като `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']`, можете да започнете да се питате дали е възможно значително да намалите обработката, която трябва да направите. За щастие, това е възможно - но първо трябва да следвате няколко стъпки, за да установите кои тагове са от интерес. + +### Филтриране на таговете + +Запомнете, че целта на набора от данни е да добавите настроения и колони, които ще ви помогнат да изберете най-добрия хотел (за себе си или може би за клиент, който ви е възложил да създадете бот за препоръка на хотели). Трябва да се запитате дали таговете са полезни или не в крайния набор от данни. Ето едно тълкуване (ако ви е нужен наборът от данни за други цели, различни тагове може да останат/да бъдат премахнати): + +1. Типът на пътуването е релевантен и трябва да остане +2. Типът на групата гости е важен и трябва да остане +3. Типът на стаята, апартамента или студиото, в които гостът е отседнал, е нерелевантен (всички хотели имат основно едни и същи стаи) +4. Устройството, от което е изпратено ревюто, е нерелевантно +5. Броят на нощувките, за които ревюиращият е отседнал, *може* да бъде релевантен, ако свържете по-дългите престои с харесването на хотела, но това е малко вероятно и вероятно нерелевантно + +В обобщение, **запазете 2 вида тагове и премахнете останалите**. + +Първо, не искате да броите таговете, докато не са в по-добър формат, което означава премахване на квадратните скоби и кавичките. Можете да направите това по няколко начина, но искате най-бързия, тъй като обработката на много данни може да отнеме много време. За щастие, 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. Това е резултат от начина, по който е създаден наборът от данни, и е трудно за поправяне. Искате да получите честотен брой на всяка фраза, но те са в различен ред във всяко ревю, така че броят може да е неточен, а хотел може да не получи таг, който заслужава. + +Вместо това ще използвате различния ред в наша полза, защото всеки таг е многословен, но също така е разделен със запетая! Най-простият начин да направите това е да създадете 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` не са полезни за нас, така че може да е умно да ги премахнете преди преброяване на честотата на фразите, но това е толкова бърза операция, че можете да ги оставите и просто да ги игнорирате. + +### Премахване на таговете за продължителност на престоя + +Премахването на тези тагове е стъпка 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` повече или по-малко, и би било справедливо да комбинирате двете, както е показано по-горе. Кодът за идентифициране на правилните тагове е [в notebook-а за тагове](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Последната стъпка е да създадете нови колони за всеки от тези тагове. След това, за всеки ред с ревю, ако колоната `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 думи. + +Премахването на стоп думите също е бърза операция, премахването на стоп думите от 2 колони с ревюта върху 515,000 реда отне 3.3 секунди на тестовото устройство. Това може да отнеме малко повече или по-малко време за вас в зависимост от скоростта на процесора, RAM, дали имате 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, но ревюиращият е дал на хотела най-ниската възможна оценка, тогава или текстът на ревюто не съответства на оценката, или анализаторът на настроения не е успял да разпознае настроението правилно. Трябва да очаквате някои оценки на настроенията да бъдат напълно грешни, и често това ще бъде обяснимо, например ревюто може да бъде изключително саркастично "Разбира се, ОБОЖАВАХ да спя в стая без отопление" и анализаторът на настроения смята, че това е позитивно настроение, въпреки че човек, който го чете, би разбрал, че това е сарказъм. +NLTK предоставя различни анализатори на настроения, с които можете да експериментирате, като ги замените и проверите дали анализът на настроенията е по-точен или не. Тук се използва анализът на настроенията VADER. + +> 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, юни 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 в предизвикателството за NLP по-долу + +### Заключение + +Когато започнахте, имахте набор от данни с колони и информация, но не всичко можеше да бъде проверено или използвано. Разгледахте данните, филтрирахте ненужното, преобразувахте таговете в нещо полезно, изчислихте свои собствени средни стойности, добавихте колони за настроения и, надявам се, научихте интересни неща за обработката на естествен текст. + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Предизвикателство + +Сега, когато вашият набор от данни е анализиран за настроения, опитайте да използвате стратегии, които сте научили в този курс (например клъстериране), за да определите модели, свързани с настроенията. + +## Преглед и самостоятелно обучение + +Вземете [този модул в Learn](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott), за да научите повече и да използвате различни инструменти за изследване на настроения в текст. + +## Задача + +[Опитайте с различен набор от данни](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/bg/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 000000000..485ffb649 --- /dev/null +++ b/translations/bg/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Опитайте с различен набор от данни + +## Инструкции + +След като научихте как да използвате NLTK за определяне на настроението на текст, опитайте с различен набор от данни. Вероятно ще трябва да обработите данните, така че създайте тетрадка и документирайте процеса си на мислене. Какво откривате? + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ----------------------- | +| | Представени са пълна тетрадка и набор от данни с добре документирани клетки, обясняващи как се определя настроението | Тетрадката липсва добри обяснения | Тетрадката е с недостатъци | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/bg/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 000000000..47ad6a69a --- /dev/null +++ b/translations/bg/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/bg/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 000000000..3265f326a --- /dev/null +++ b/translations/bg/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо място + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/README.md b/translations/bg/6-NLP/README.md new file mode 100644 index 000000000..275027261 --- /dev/null +++ b/translations/bg/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Започване с обработка на естествен език + +Обработката на естествен език (NLP) е способността на компютърна програма да разбира човешкия език, както се говори и пише – наричан естествен език. Това е компонент на изкуствения интелект (AI). NLP съществува повече от 50 години и има корени в областта на лингвистиката. Цялата област е насочена към това да помогне на машините да разбират и обработват човешкия език. Това може да се използва за изпълнение на задачи като проверка на правописа или машинен превод. NLP има разнообразни приложения в реалния свят в редица области, включително медицински изследвания, търсачки и бизнес анализи. + +## Регионална тема: Европейски езици и литература и романтични хотели в Европа ❤️ + +В този раздел от учебната програма ще се запознаете с едно от най-разпространените приложения на машинното обучение: обработката на естествен език (NLP). Произлизаща от компютърната лингвистика, тази категория на изкуствения интелект е мостът между хората и машините чрез гласова или текстова комуникация. + +В тези уроци ще научим основите на NLP, като изградим малки разговорни ботове, за да разберем как машинното обучение помага тези разговори да стават все по-'умни'. Ще се върнете назад във времето, разговаряйки с Елизабет Бенет и г-н Дарси от класическия роман на Джейн Остин, **Гордост и предразсъдъци**, публикуван през 1813 г. След това ще задълбочите знанията си, като научите за анализ на настроения чрез ревюта на хотели в Европа. + +![Книга "Гордост и предразсъдъци" и чай](../../../6-NLP/images/p&p.jpg) +> Снимка от Elaine Howlin на 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) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/6-NLP/data/README.md b/translations/bg/6-NLP/data/README.md new file mode 100644 index 000000000..92cfe1a6d --- /dev/null +++ b/translations/bg/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Изтеглете данните за отзивите за хотела в тази папка. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/1-Introduction/README.md b/translations/bg/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 000000000..278220535 --- /dev/null +++ b/translations/bg/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Въведение в прогнозиране на времеви серии + +![Обобщение на времеви серии в скица](../../../../sketchnotes/ml-timeseries.png) + +> Скица от [Tomomi Imura](https://www.twitter.com/girlie_mac) + +В този урок и следващия ще научите малко за прогнозиране на времеви серии, интересна и ценна част от репертоара на ML учените, която е малко по-малко известна от други теми. Прогнозирането на времеви серии е като „кристално кълбо“: въз основа на миналото представяне на променлива, като например цена, можете да предвидите нейната бъдеща потенциална стойност. + +[![Въведение в прогнозиране на времеви серии](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Въведение в прогнозиране на времеви серии") + +> 🎥 Кликнете върху изображението по-горе за видео за прогнозиране на времеви серии + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +Това е полезна и интересна област с реална стойност за бизнеса, предвид директното ѝ приложение към проблеми като ценообразуване, инвентаризация и въпроси, свързани с веригата на доставки. Въпреки че техниките за дълбоко обучение започнаха да се използват за получаване на повече прозрения за по-добро прогнозиране на бъдещото представяне, прогнозиране на времеви серии остава област, която е силно информирана от класическите ML техники. + +> Полезната учебна програма за времеви серии на Penn State може да бъде намерена [тук](https://online.stat.psu.edu/stat510/lesson/1) + +## Въведение + +Да предположим, че управлявате масив от интелигентни паркинг метри, които предоставят данни за това колко често се използват и за колко време през определен период. + +> Какво ако можете да предвидите, въз основа на миналото представяне на метъра, неговата бъдеща стойност според законите на търсенето и предлагането? + +Точното прогнозиране кога да действате, за да постигнете целта си, е предизвикателство, което може да бъде решено чрез прогнозиране на времеви серии. Това може да не направи хората щастливи, ако бъдат таксувани повече в натоварени времена, когато търсят паркинг място, но със сигурност би било начин за генериране на приходи за почистване на улиците! + +Нека разгледаме някои от типовете алгоритми за времеви серии и започнем с тетрадка, за да почистим и подготвим данни. Данните, които ще анализирате, са взети от състезанието за прогнозиране GEFCom2014. Те се състоят от 3 години почасови стойности за електрическо натоварване и температура между 2012 и 2014. Въз основа на историческите модели на електрическо натоварване и температура, можете да предвидите бъдещи стойности на електрическо натоварване. + +В този пример ще научите как да прогнозирате една стъпка напред, използвайки само исторически данни за натоварване. Преди да започнете обаче, е полезно да разберете какво се случва зад кулисите. + +## Някои дефиниции + +Когато срещнете термина „времеви серии“, трябва да разберете неговото използване в няколко различни контекста. + +🎓 **Времеви серии** + +В математиката „времеви серии са поредица от точки с данни, индексирани (или изброени, или графично представени) в хронологичен ред. Най-често времеви серии са последователност, взета в последователни равномерно разпределени точки във времето.“ Пример за времеви серии е дневната затваряща стойност на [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Използването на графики на времеви серии и статистическо моделиране често се среща в обработка на сигнали, прогнозиране на времето, предсказване на земетресения и други области, където събитията се случват и точките с данни могат да бъдат графично представени във времето. + +🎓 **Анализ на времеви серии** + +Анализът на времеви серии е анализът на гореспоменатите данни за времеви серии. Данните за времеви серии могат да приемат различни форми, включително „прекъснати времеви серии“, които откриват модели в еволюцията на времеви серии преди и след прекъсващо събитие. Видът анализ, необходим за времевите серии, зависи от естеството на данните. Самите данни за времеви серии могат да приемат формата на поредица от числа или символи. + +Анализът, който трябва да се извърши, използва разнообразие от методи, включително честотен домейн и времеви домейн, линейни и нелинейни, и други. [Научете повече](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) за многото начини за анализиране на този тип данни. + +🎓 **Прогнозиране на времеви серии** + +Прогнозирането на времеви серии е използването на модел за предсказване на бъдещи стойности въз основа на модели, показани от предварително събрани данни, както са се случили в миналото. Въпреки че е възможно да се използват регресионни модели за изследване на данни за времеви серии, с времеви индекси като x променливи на графика, такива данни най-добре се анализират с помощта на специални типове модели. + +Данните за времеви серии са списък от подредени наблюдения, за разлика от данни, които могат да бъдат анализирани чрез линейна регресия. Най-често срещаният модел е ARIMA, акроним, който означава „Автокорелативен Интегриран Движещ Среден“. + +[ARIMA модели](https://online.stat.psu.edu/stat510/lesson/1/1.1) „свързват настоящата стойност на серията с минали стойности и минали грешки в прогнозите.“ Те са най-подходящи за анализиране на данни във времеви домейн, където данните са подредени във времето. + +> Съществуват няколко типа ARIMA модели, за които можете да научите [тук](https://people.duke.edu/~rnau/411arim.htm) и които ще разгледате в следващия урок. + +В следващия урок ще изградите ARIMA модел, използвайки [Унивариантни времеви серии](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), които се фокусират върху една променлива, която променя стойността си във времето. Пример за този тип данни е [този набор от данни](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), който записва месечната концентрация на CO2 в обсерваторията 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 | + +✅ Идентифицирайте променливата, която се променя във времето в този набор от данни. + +## Характеристики на данните за времеви серии, които трябва да се вземат предвид + +Когато разглеждате данни за времеви серии, може да забележите, че те имат [определени характеристики](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), показващ дневните разходи за валута в играта през няколко години. Можете ли да идентифицирате някоя от изброените характеристики в тези данни? + +![Разходи за валута в играта](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Упражнение - започване с данни за потребление на енергия + +Нека започнем с изграждането на модел за времеви серии, за да прогнозираме бъдещо потребление на енергия въз основа на миналото потребление. + +> Данните в този пример са взети от състезанието за прогнозиране GEFCom2014. Те се състоят от 3 години почасови стойности за електрическо натоварване и температура между 2012 и 2014. +> +> 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, 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. След това, разгледайте данните като dataframe, като извикате `load_data()` и `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Можете да видите, че има две колони, представляващи дата и натоварване: + + | | 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()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![графика на енергия](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Сега, начертайте първата седмица на юли 2014, като я предоставите като вход към `energy` в шаблона `[от дата]: [до дата]`: + + ```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() + ``` + + ![юли](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Прекрасна графика! Разгледайте тези графики и вижте дали можете да определите някоя от изброените характеристики. Какво можем да заключим, като визуализираме данните? + +В следващия урок ще създадете ARIMA модел, за да направите прогнози. + +--- + +## 🚀Предизвикателство + +Направете списък на всички индустрии и области на изследване, които можете да си представите, че биха се възползвали от прогнозиране на времеви серии. Можете ли да си представите приложение на тези техники в изкуствата? В иконометрията? Екологията? Търговията на дребно? Индустрията? Финансите? Къде още? + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Въпреки че няма да ги разгледаме тук, невронните мрежи понякога се използват за подобряване на класическите методи за прогнозиране на времеви серии. Прочетете повече за тях [в тази статия](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Задание + +[Визуализирайте още времеви серии](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/1-Introduction/assignment.md b/translations/bg/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 000000000..eea5a6474 --- /dev/null +++ b/translations/bg/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Визуализирайте още времеви серии + +## Инструкции + +Започнахте да се запознавате с прогнозирането на времеви серии, като разгледахте типа данни, които изискват този специален модел. Визуализирахте някои данни, свързани с енергията. Сега потърсете други данни, които биха се възползвали от прогнозирането на времеви серии. Намерете три примера (опитайте [Kaggle](https://kaggle.com) и [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) и създайте тетрадка, за да ги визуализирате. Отбележете всякакви специални характеристики, които имат (сезонност, резки промени или други тенденции) в тетрадката. + +## Рубрика + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ----------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------- | +| | Три набора от данни са визуализирани и обяснени в тетрадка | Два набора от данни са визуализирани и обяснени в тетрадка | Малко набори от данни са визуализирани или обяснени в тетрадка, или представените данни са недостатъчни | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/bg/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..1a3566f92 --- /dev/null +++ b/translations/bg/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/bg/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 000000000..a3002d042 --- /dev/null +++ b/translations/bg/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо място + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/2-ARIMA/README.md b/translations/bg/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 000000000..497236519 --- /dev/null +++ b/translations/bg/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,407 @@ + +# Прогнозиране на времеви редове с ARIMA + +В предишния урок научихте малко за прогнозиране на времеви редове и заредихте набор от данни, показващ колебанията на електрическото натоварване за определен период от време. + +[![Въведение в ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Въведение в ARIMA") + +> 🎥 Кликнете върху изображението по-горе за видео: Кратко въведение в моделите ARIMA. Примерът е направен в R, но концепциите са универсални. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Въведение + +В този урок ще откриете специфичен начин за изграждане на модели с [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Моделите ARIMA са особено подходящи за данни, които показват [нестационарност](https://wikipedia.org/wiki/Stationary_process). + +## Общи концепции + +За да работите с ARIMA, трябва да знаете някои основни концепции: + +- 🎓 **Стационарност**. В статистически контекст стационарността се отнася до данни, чието разпределение не се променя при изместване във времето. Нестационарните данни показват колебания, дължащи се на тенденции, които трябва да бъдат трансформирани, за да бъдат анализирани. Например сезонността може да въведе колебания в данните и може да бъде премахната чрез процес на "сезонно диференциране". + +- 🎓 **[Диференциране](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Диференцирането на данни, отново в статистически контекст, се отнася до процеса на трансформиране на нестационарни данни, за да станат стационарни чрез премахване на тяхната неконстантна тенденция. "Диференцирането премахва промените в нивото на времевия ред, елиминирайки тенденцията и сезонността и съответно стабилизирайки средната стойност на времевия ред." [Статия от Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA в контекста на времеви редове + +Нека разгледаме частите на ARIMA, за да разберем по-добре как помага за моделиране на времеви редове и за правене на прогнози. + +- **AR - Авторегресивен**. Авторегресивните модели, както подсказва името, гледат "назад" във времето, за да анализират предишни стойности в данните и да правят предположения за тях. Тези предишни стойности се наричат "лагове". Пример би бил данни, показващи месечни продажби на моливи. Общата стойност на продажбите за всеки месец би се считала за "еволюираща променлива" в набора от данни. Този модел се изгражда като "еволюиращата променлива от интерес се регресира върху собствените си лагови (т.е. предишни) стойности." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - Интегриран**. За разлика от подобните модели 'ARMA', 'I' в ARIMA се отнася до неговия *[интегриран](https://wikipedia.org/wiki/Order_of_integration)* аспект. Данните се "интегрират", когато се прилагат стъпки на диференциране, за да се елиминира нестационарността. + +- **MA - Подвижна средна**. Аспектът на [подвижната средна](https://wikipedia.org/wiki/Moving-average_model) в този модел се отнася до изходната променлива, която се определя чрез наблюдение на текущите и миналите стойности на лаговете. + +В крайна сметка: ARIMA се използва за създаване на модел, който да пасне възможно най-точно на специалната форма на данни от времеви редове. + +## Упражнение - изграждане на ARIMA модел + +Отворете папката [_/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. Стартирайте notebook-а, за да заредите библиотеката `statsmodels` за Python; ще ви е необходима за ARIMA модели. + +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` в Pandas dataframe и ги разгледайте: + + ```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() + ``` + + ![тренировъчни и тестови данни](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Следователно, използването на сравнително малък времеви прозорец за обучение на данните би трябвало да е достатъчно. + + > Забележка: Тъй като функцията, която използваме за настройка на ARIMA модела, използва вътрешна валидация по време на настройката, ще пропуснем валидационните данни. + +### Подготовка на данните за обучение + +Сега трябва да подготвите данните за обучение, като извършите филтриране и скалиране на данните. Филтрирайте набора от данни, за да включва само необходимите времеви периоди и колони, и скалирайте, за да гарантирате, че данните са проектирани в интервала 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. Визуализирайте оригиналните спрямо скалираните данни: + + ```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() + ``` + + ![оригинални](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Оригиналните данни + + ![скалирани](../../../../7-TimeSeries/2-ARIMA/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()` и зададете броя на стъпките (хоризонта), които да прогнозирате. + +> 🎓 Какво означават всички тези параметри? В ARIMA модел има 3 параметъра, които се използват за моделиране на основните аспекти на времеви редове: сезонност, тенденция и шум. Тези параметри са: + +`p`: параметър, свързан с авторегресивния аспект на модела, който включва *минали* стойности. +`d`: параметър, свързан с интегрирания аспект на модела, който влияе върху количеството *диференциране* (🎓 помните ли диференцирането 👆?) за прилагане към времевия ред. +`q`: параметър, свързан с аспекта на подвижната средна в модела. + +> Забележка: Ако вашите данни имат сезонен аспект - какъвто е случаят тук - използваме сезонен ARIMA модел (SARIMA). В този случай трябва да използвате друг набор от параметри: `P`, `D` и `Q`, които описват същите асоциации като `p`, `d` и `q`, но съответстват на сезонните компоненти на модела. + +1. Започнете, като зададете предпочитаната стойност за хоризонта. Нека опитаме 3 часа: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Изборът на най-добрите стойности за параметрите на ARIMA модела може да бъде предизвикателство, тъй като е донякъде субективен и отнема време. Може да обмислите използването на функцията `auto_arima()` от библиотеката [`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()) + ``` + + Таблица с резултати се отпечатва. + +Създадохте първия си модел! Сега трябва да намерим начин да го оценим. + +### Оценка на модела + +За да оцените модела си, можете да извършите така наречената `walk forward` валидация. На практика, моделите за времеви редове се преобучават всеки път, когато се появят нови данни. Това позволява на модела да направи най-добрата прогноза на всяка стъпка. + +Започвайки от началото на времевия ред, използвайки тази техника, обучете модела върху тренировъчния набор от данни. След това направете прогноза за следващата времева стъпка. Прогнозата се оценява спрямо известната стойност. Тренировъчният набор след това се разширява, за да включва известната стойност, и процесът се повтаря. + +> Забележка: Трябва да запазите прозореца на тренировъчния набор фиксиран за по-ефективно обучение, така че всеки път, когато добавите ново наблюдение към тренировъчния набор, да премахнете наблюдението от началото на набора. + +Този процес предоставя по-устойчива оценка за това как моделът ще се представи на практика. Въпреки това, той идва с изчислителната цена на създаването на толкова много модели. Това е приемливо, ако данните са малки или ако моделът е прост, но може да бъде проблем при мащаб. + +Walk-forward валидацията е златният стандарт за оценка на модели за времеви редове и се препоръчва за вашите собствени проекти. + +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 | + + Данните се изместват хоризонтално според точката на хоризонта. + +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() + ``` + + Резултат + | | | 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 | + + Наблюдавайте прогнозата за почасовите данни, сравнена с действителното натоварване. Колко точна е тя? + +### Проверка на точността на модела + +Проверете точността на модела си, като тествате неговата средна абсолютна процентна грешка (MAPE) за всички прогнози. +> **🧮 Покажи ми математиката** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) се използва за показване на точността на прогнозата като съотношение, дефинирано от горната формула. Разликата между действителната и прогнозната стойност се дели на действителната. +> +> "Абсолютната стойност в това изчисление се сумира за всяка прогнозирана точка във времето и се дели на броя на точките 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. Изчислете 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 % + ``` + + Най-добре е да имате ниска стойност: имайте предвид, че прогноза с MAPE от 10 е с отклонение от 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() + ``` + + ![модел за времеви серии](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Много хубав график, показващ модел с добра точност. Браво! + +--- + +## 🚀Предизвикателство + +Разгледайте начините за тестване на точността на модел за времеви серии. В този урок разглеждаме MAPE, но има ли други методи, които можете да използвате? Проучете ги и ги опишете. Полезен документ може да бъде намерен [тук](https://otexts.com/fpp2/accuracy.html) + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Този урок обхваща само основите на прогнозиране на времеви серии с ARIMA. Отделете време да задълбочите знанията си, като разгледате [този репозиторий](https://microsoft.github.io/forecasting/) и различните му типове модели, за да научите други начини за изграждане на модели за времеви серии. + +## Задача + +[Нов ARIMA модел](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/2-ARIMA/assignment.md b/translations/bg/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 000000000..1e5a5d666 --- /dev/null +++ b/translations/bg/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Нов ARIMA модел + +## Инструкции + +След като сте създали ARIMA модел, създайте нов с нови данни (опитайте един от [тези набори от данни от Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html). Аннотирайте работата си в тетрадка, визуализирайте данните и модела си и тествайте точността му, използвайки MAPE. + +## Рубрика + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------- | +| | Представена е тетрадка с нов ARIMA модел, тестван и обяснен с визуализации и посочена точност. | Представената тетрадка не е аннотирана или съдържа грешки | Представена е непълна тетрадка | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/bg/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 000000000..8f283982d --- /dev/null +++ b/translations/bg/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/bg/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 000000000..69f621f8f --- /dev/null +++ b/translations/bg/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо място + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/3-SVR/README.md b/translations/bg/7-TimeSeries/3-SVR/README.md new file mode 100644 index 000000000..87385950a --- /dev/null +++ b/translations/bg/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Прогнозиране на времеви серии със Support Vector Regressor + +В предишния урок научихте как да използвате модела ARIMA за прогнозиране на времеви серии. Сега ще разгледате модела Support Vector Regressor, който е регресионен модел, използван за прогнозиране на непрекъснати данни. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Въведение + +В този урок ще откриете специфичен начин за изграждане на модели с [**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) за повече информация. +- **Support Vector Machine (SVM):** Вид модел за машинно обучение с надзор, използван за класификация, регресия и откриване на аномалии. Моделът представлява хиперплоскост в пространството на характеристиките, която в случай на класификация действа като граница, а в случай на регресия - като линия на най-добро съответствие. В SVM обикновено се използва Kernel функция за трансформиране на набора от данни в пространство с по-голям брой измерения, така че те да бъдат лесно разделими. [Кликнете тук](https://en.wikipedia.org/wiki/Support-vector_machine) за повече информация за SVM. +- **Support Vector Regressor (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. Стартирайте notebook-а и импортирайте необходимите библиотеки: [^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` в Pandas dataframe и разгледайте ги: [^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() + ``` + + ![пълни данни](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Сега нека изградим нашия SVR модел. + +### Създаване на тренировъчни и тестови набори от данни + +Сега данните ви са заредени, така че можете да ги разделите на тренировъчен и тестов набор. След това ще преформатирате данните, за да създадете набор от данни, базиран на времеви стъпки, който ще бъде необходим за SVR. Ще обучите модела си върху тренировъчния набор. След като моделът приключи обучението, ще оцените неговата точност върху тренировъчния набор, тестовия набор и след това върху целия набор от данни, за да видите цялостното представяне. Трябва да се уверите, че тестовият набор обхваща по-късен период от време спрямо тренировъчния набор, за да гарантирате, че моделът не получава информация от бъдещи времеви периоди [^2] (ситуация, известна като *Overfitting*). + +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() + ``` + + ![тренировъчни и тестови данни](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Подготовка на данните за обучение + +Сега трябва да подготвите данните за обучение, като извършите филтриране и скалиране на данните. Филтрирайте набора от данни, за да включите само необходимите времеви периоди и колони, и скалирайте, за да гарантирате, че данните са проектирани в интервала 0,1. + +1. Филтрирайте оригиналния набор от данни, за да включите само споменатите времеви периоди за всеки набор и само необходимата колона 'load' плюс датата: [^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]`. Така преформатирате съществуващите `train_data` и `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()` и зададете хиперпараметрите на модела: kernel, gamma, c и epsilon + 2. Подгответе модела за тренировъчните данни, като извикате функцията `fit()` + 3. Направете прогнози, като извикате функцията `predict()` + +Сега създаваме SVR модел. Тук използваме [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) и задаваме хиперпараметрите gamma, C и epsilon като 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() +``` + +![прогноза за тренировъчни данни](../../../../7-TimeSeries/3-SVR/images/train-data-predict.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() +``` + +![прогноза за тестови данни](../../../../7-TimeSeries/3-SVR/images/test-data-predict.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() +``` + +![прогноза за целия набор от данни](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Много хубави графики, показващи модел с добра точност. Браво! + +--- + +## 🚀Предизвикателство + +- Опитайте да промените хиперпараметрите (gamma, C, epsilon) при създаването на модела и оценете данните, за да видите кой набор от хиперпараметри дава най-добри резултати върху тестовия набор от данни. За повече информация относно тези хиперпараметри можете да се обърнете към документа [тук](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Опитайте да използвате различни функции на kernel за модела и анализирайте тяхното представяне върху набора от данни. Полезен документ можете да намерите [тук](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Опитайте да използвате различни стойности за `timesteps`, за да накарате модела да се върне назад и да направи прогноза. + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Този урок беше за въвеждане на приложението на 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) предоставя по-изчерпателно обяснение за SVM като цяло, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) и също така други детайли за имплементация, като различните [функции на kernel](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) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/3-SVR/assignment.md b/translations/bg/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 000000000..13ce6e9ed --- /dev/null +++ b/translations/bg/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,29 @@ + +# Нов модел 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) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/7-TimeSeries/README.md b/translations/bg/7-TimeSeries/README.md new file mode 100644 index 000000000..aa4cbd68f --- /dev/null +++ b/translations/bg/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Въведение в прогнозиране на времеви редове + +Какво представлява прогнозиране на времеви редове? Това е процесът на предсказване на бъдещи събития чрез анализиране на тенденциите от миналото. + +## Регионална тема: световно потребление на електроенергия ✨ + +В тези два урока ще се запознаете с прогнозиране на времеви редове, област от машинното обучение, която е сравнително по-малко известна, но изключително ценна за индустриални и бизнес приложения, както и за други области. Въпреки че невронните мрежи могат да се използват за подобряване на полезността на тези модели, ние ще ги изучаваме в контекста на класическото машинно обучение, тъй като моделите помагат да се предскаже бъдещото представяне въз основа на миналото. + +Нашият регионален фокус е потреблението на електроенергия в света, интересен набор от данни, който ни учи как да прогнозираме бъдещото потребление на енергия въз основа на модели от миналото. Можете да видите как този вид прогнозиране може да бъде изключително полезен в бизнес среда. + +![електрическа мрежа](../../../7-TimeSeries/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. [Създаване на 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"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting), първоначално написано от Francesca Lazzeri. Урокът за SVR е написан от [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/1-QLearning/README.md b/translations/bg/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 000000000..ce30250bb --- /dev/null +++ b/translations/bg/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Въведение в Укрепващото Обучение и Q-Learning + +![Обобщение на укрепващото обучение в машинното обучение в скица](../../../../sketchnotes/ml-reinforcement.png) +> Скица от [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Укрепващото обучение включва три важни концепции: агент, състояния и набор от действия за всяко състояние. Изпълнявайки действие в определено състояние, агентът получава награда. Представете си компютърната игра Super Mario. Вие сте Марио, намирате се на ниво в играта, стоите до ръба на скала. Над вас има монета. Вие, като Марио, на определено място в нивото на играта... това е вашето състояние. Ако направите крачка надясно (действие), ще паднете от скалата и ще получите ниска числена оценка. Но ако натиснете бутона за скок, ще спечелите точка и ще останете жив. Това е положителен резултат и трябва да ви донесе положителна числена оценка. + +Използвайки укрепващо обучение и симулатор (играта), можете да научите как да играете играта, за да максимизирате наградата, която е да останете живи и да съберете възможно най-много точки. + +[![Въведение в Укрепващото Обучение](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Кликнете върху изображението по-горе, за да чуете Дмитрий да обсъжда Укрепващото Обучение + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Предпоставки и Настройка + +В този урок ще експериментираме с код на Python. Трябва да можете да изпълните кода от Jupyter Notebook, или на вашия компютър, или в облака. + +Можете да отворите [ноутбука на урока](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) и да преминете през урока, за да го изградите. + +> **Забележка:** Ако отваряте този код от облака, трябва също да изтеглите файла [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), който се използва в кода на ноутбука. Добавете го в същата директория като ноутбука. + +## Въведение + +В този урок ще изследваме света на **[Петър и Вълкът](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, вдъхновен от музикална приказка на руския композитор [Сергей Прокофиев](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Ще използваме **Укрепващо Обучение**, за да позволим на Петър да изследва своята среда, да събира вкусни ябълки и да избягва срещи с вълка. + +**Укрепващото Обучение** (RL) е техника за обучение, която ни позволява да научим оптималното поведение на **агент** в някаква **среда**, като провеждаме множество експерименти. Агентът в тази среда трябва да има някаква **цел**, дефинирана чрез **функция за награда**. + +## Средата + +За простота, нека разгледаме света на Петър като квадратна дъска с размери `ширина` x `височина`, като тази: + +![Средата на Петър](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Всяка клетка на тази дъска може да бъде: + +* **земя**, върху която Петър и други същества могат да ходят. +* **вода**, върху която очевидно не можете да ходите. +* **дърво** или **трева**, място, където можете да си починете. +* **ябълка**, която представлява нещо, което Петър би се радвал да намери, за да се нахрани. +* **вълк**, който е опасен и трябва да се избягва. + +Има отделен Python модул, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), който съдържа кода за работа с тази среда. Тъй като този код не е важен за разбирането на нашите концепции, ще импортираме модула и ще го използваме, за да създадем примерна дъска (код блок 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Този код трябва да отпечата изображение на средата, подобно на горното. + +## Действия и политика + +В нашия пример целта на Петър е да намери ябълка, като избягва вълка и други препятствия. За да направи това, той може просто да се разхожда, докато намери ябълка. + +Следователно, на всяка позиция той може да избира между следните действия: нагоре, надолу, наляво и надясно. + +Ще дефинираме тези действия като речник и ще ги свържем с двойки от съответните промени в координатите. Например, движението надясно (`R`) би съответствало на двойка `(1,0)`. (код блок 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()) } +``` + +За да обобщим, стратегията и целта на този сценарий са следните: + +- **Стратегията** на нашия агент (Петър) се дефинира чрез така наречената **политика**. Политиката е функция, която връща действието за всяко дадено състояние. В нашия случай състоянието на проблема се представя чрез дъската, включително текущата позиция на играча. + +- **Целта** на укрепващото обучение е в крайна сметка да научим добра политика, която ще ни позволи да решим проблема ефективно. Въпреки това, като базова линия, нека разгледаме най-простата политика, наречена **случайна разходка**. + +## Случайна разходка + +Нека първо решим проблема, като приложим стратегията за случайна разходка. При случайна разходка ще избираме следващото действие случайно от позволените действия, докато стигнем до ябълката (код блок 3). + +1. Реализирайте случайната разходка с кода по-долу: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + Извикването на `walk` трябва да върне дължината на съответния път, която може да варира от едно изпълнение до друго. + +1. Изпълнете експеримента за разходка няколко пъти (например 100) и отпечатайте получените статистики (код блок 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) + ``` + + Забележете, че средната дължина на пътя е около 30-40 стъпки, което е доста, като се има предвид, че средното разстояние до най-близката ябълка е около 5-6 стъпки. + + Можете също така да видите как изглежда движението на Петър по време на случайната разходка: + + ![Случайна разходка на Петър](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Функция за награда + +За да направим нашата политика по-интелигентна, трябва да разберем кои ходове са "по-добри" от други. За да направим това, трябва да дефинираме нашата цел. + +Целта може да бъде дефинирана чрез **функция за награда**, която ще връща някаква стойност за всяко състояние. Колкото по-висока е стойността, толкова по-добра е наградата. (код блок 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 +``` + +Интересното при функциите за награда е, че в повечето случаи *получаваме значителна награда само в края на играта*. Това означава, че нашият алгоритъм трябва по някакъв начин да запомни "добрите" стъпки, които водят до положителна награда в края, и да увеличи тяхната важност. По същия начин всички ходове, които водят до лоши резултати, трябва да бъдат обезкуражени. + +## Q-Learning + +Алгоритъмът, който ще обсъдим тук, се нарича **Q-Learning**. В този алгоритъм политиката се дефинира чрез функция (или структура от данни), наречена **Q-таблица**. Тя записва "доброто" на всяко действие в дадено състояние. + +Тя се нарича Q-таблица, защото често е удобно да се представи като таблица или многомерен масив. Тъй като нашата дъска има размери `ширина` x `височина`, можем да представим Q-таблицата, използвайки numpy масив с форма `ширина` x `височина` x `len(actions)`: (код блок 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Забележете, че инициализираме всички стойности на Q-таблицата с еднаква стойност, в нашия случай - 0.25. Това съответства на политиката за "случайна разходка", защото всички ходове във всяко състояние са еднакво добри. Можем да предадем Q-таблицата на функцията `plot`, за да визуализираме таблицата на дъската: `m.plot(Q)`. + +![Средата на Петър](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +В центъра на всяка клетка има "стрелка", която показва предпочитаната посока на движение. Тъй като всички посоки са равни, се показва точка. + +Сега трябва да изпълним симулацията, да изследваме нашата среда и да научим по-добро разпределение на стойностите в Q-таблицата, което ще ни позволи да намерим пътя до ябълката много по-бързо. + +## Същност на Q-Learning: Уравнението на Белман + +След като започнем да се движим, всяко действие ще има съответна награда, т.е. теоретично можем да изберем следващото действие въз основа на най-високата непосредствена награда. Въпреки това, в повечето състояния ходът няма да постигне нашата цел да стигнем до ябълката, и следователно не можем веднага да решим коя посока е по-добра. + +> Запомнете, че не непосредственият резултат е важен, а крайният резултат, който ще получим в края на симулацията. + +За да отчетем тази забавена награда, трябва да използваме принципите на **[динамичното програмиране](https://en.wikipedia.org/wiki/Dynamic_programming)**, които ни позволяват да мислим за проблема си рекурсивно. + +Да предположим, че сега сме в състояние *s*, и искаме да преминем към следващото състояние *s'*. Като направим това, ще получим непосредствената награда *r(s,a)*, дефинирана чрез функцията за награда, плюс някаква бъдеща награда. Ако предположим, че нашата Q-таблица правилно отразява "привлекателността" на всяко действие, тогава в състояние *s'* ще изберем действие *a*, което съответства на максималната стойност на *Q(s',a')*. Така най-добрата възможна бъдеща награда, която можем да получим в състояние *s*, ще бъде дефинирана като `max` + +## Проверка на политиката + +Тъй като Q-таблицата показва "привлекателността" на всяко действие във всяко състояние, е доста лесно да я използваме за определяне на ефективната навигация в нашия свят. В най-простия случай можем да изберем действието, съответстващо на най-високата стойност в Q-таблицата: (код блок 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-стойност, което води до това, че агентът се движи между тези състояния безкрайно. + +## 🚀Предизвикателство + +> **Задача 1:** Модифицирайте функцията `walk`, за да ограничите максималната дължина на пътя до определен брой стъпки (например 100), и наблюдавайте как кодът по-горе връща тази стойност от време на време. + +> **Задача 2:** Модифицирайте функцията `walk`, така че да не се връща на места, където вече е бил. Това ще предотврати циклирането на `walk`, но агентът все пак може да се окаже "заклещен" на място, от което не може да избяга. + +## Навигация + +По-добра навигационна политика би била тази, която използвахме по време на обучението, комбинираща експлоатация и изследване. В тази политика ще избираме всяко действие с определена вероятност, пропорционална на стойностите в Q-таблицата. Тази стратегия може все още да доведе до връщане на агента на позиция, която вече е изследвал, но, както можете да видите от кода по-долу, тя води до много кратък среден път до желаното местоположение (не забравяйте, че `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-таблицата, като ги презапишем с нови стойности. Това идеално трябва да се минимизира чрез намаляване на скоростта на обучение (например, към края на обучението, коригираме стойностите в Q-таблицата само с малка стойност). + +Като цяло е важно да запомним, че успехът и качеството на процеса на обучение значително зависят от параметри като скорост на обучение, намаляване на скоростта на обучение и коефициент на дисконтиране. Те често се наричат **хиперпараметри**, за да се разграничат от **параметри**, които оптимизираме по време на обучението (например, коефициентите в Q-таблицата). Процесът на намиране на най-добрите стойности за хиперпараметрите се нарича **оптимизация на хиперпараметри**, и заслужава отделна тема. + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Задание +[По-реалистичен свят](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/1-QLearning/assignment.md b/translations/bg/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 000000000..c6fc4ba31 --- /dev/null +++ b/translations/bg/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# По-реалистичен свят + +В нашата ситуация, Петър можеше да се движи почти без да се уморява или огладнява. В по-реалистичен свят, той трябва да сяда и да си почива от време на време, както и да се храни. Нека направим нашия свят по-реалистичен, като приложим следните правила: + +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-Learning и текстови обяснения. Q-Learning значително подобрява резултатите в сравнение със случайното движение. | Представен е тетрадка, Q-Learning е имплементиран и подобрява резултатите в сравнение със случайното движение, но не значително; или тетрадката е слабо документирана и кодът не е добре структуриран. | Направен е опит за пре-дефиниране на правилата на света, но алгоритъмът за Q-Learning не работи или функцията за награда не е напълно дефинирана. | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да било недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/bg/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 000000000..49510f835 --- /dev/null +++ b/translations/bg/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/bg/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 000000000..845006806 --- /dev/null +++ b/translations/bg/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо място + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/2-Gym/README.md b/translations/bg/8-Reinforcement/2-Gym/README.md new file mode 100644 index 000000000..2a6bf283a --- /dev/null +++ b/translations/bg/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,351 @@ + +# Картофелно пързаляне + +Проблемът, който решавахме в предишния урок, може да изглежда като играчка, която няма реално приложение в живота. Това не е така, защото много реални проблеми също споделят този сценарий - включително играта на шах или го. Те са подобни, защото също имаме дъска с определени правила и **дискретно състояние**. + +## [Тест преди урока](https://ff-quizzes.netlify.app/en/ml/) + +## Въведение + +В този урок ще приложим същите принципи на Q-Learning към проблем с **непрекъснато състояние**, т.е. състояние, което се определя от едно или повече реални числа. Ще разгледаме следния проблем: + +> **Проблем**: Ако Петър иска да избяга от вълка, трябва да се научи да се движи по-бързо. Ще видим как Петър може да се научи да се пързаля, по-специално да запазва баланс, използвайки Q-Learning. + +![Голямото бягство!](../../../../8-Reinforcement/2-Gym/images/escape.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/). С помощта на този Gym можем да създаваме различни **среди** - от симулация на CartPole до игри на Atari. + +> **Забележка**: Можете да видите други среди, налични в OpenAI Gym, [тук](https://gym.openai.com/envs/#classic_control). + +Първо, нека инсталираме Gym и импортираме необходимите библиотеки (код блок 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Упражнение - инициализиране на среда за CartPole + +За да работим с проблема за балансиране на CartPole, трябва да инициализираме съответната среда. Всяка среда е свързана с: + +- **Пространство на наблюденията**, което определя структурата на информацията, която получаваме от средата. За проблема с CartPole получаваме позицията на пръта, скоростта и някои други стойности. + +- **Пространство на действията**, което определя възможните действия. В нашия случай пространството на действията е дискретно и се състои от две действия - **наляво** и **надясно**. (код блок 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() + ``` + + Трябва да виждате нещо подобно на това изображение: + + ![небалансиращ CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. По време на симулацията трябва да получаваме наблюдения, за да решим как да действаме. Всъщност функцията `step` връща текущите наблюдения, функция за награда и флаг `done`, който показва дали има смисъл да продължим симулацията или не: (код блок 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() + ``` + + Ще видите нещо подобно на това в изхода на 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 + ``` + + Векторът на наблюденията, който се връща на всяка стъпка от симулацията, съдържа следните стойности: + - Позиция на количката + - Скорост на количката + - Ъгъл на пръта + - Скорост на въртене на пръта + +1. Получете минималната и максималната стойност на тези числа: (код блок 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Може също да забележите, че стойността на наградата на всяка стъпка от симулацията винаги е 1. Това е така, защото нашата цел е да оцелеем възможно най-дълго, т.е. да запазим пръта в разумно вертикално положение за най-дълъг период от време. + + ✅ Всъщност симулацията на CartPole се счита за решена, ако успеем да постигнем средна награда от 195 за 100 последователни опита. + +## Дискретизация на състоянието + +В Q-Learning трябва да изградим Q-таблица, която определя какво да правим във всяко състояние. За да можем да направим това, състоянието трябва да бъде **дискретно**, по-точно, трябва да съдържа краен брой дискретни стойности. Следователно трябва по някакъв начин да **дискретизираме** нашите наблюдения, като ги картографираме към краен набор от състояния. + +Има няколко начина да направим това: + +- **Разделяне на интервали**. Ако знаем интервала на дадена стойност, можем да разделим този интервал на определен брой **интервали** и след това да заменим стойността с номера на интервала, към който принадлежи. Това може да се направи с помощта на метода [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) на numpy. В този случай ще знаем точно размера на състоянието, защото той ще зависи от броя на интервалите, които изберем за дигитализация. + +✅ Можем да използваме линейна интерполация, за да приведем стойностите към някакъв краен интервал (например от -20 до 20), и след това да конвертираме числата в цели числа чрез закръгляване. Това ни дава малко по-малък контрол върху размера на състоянието, особено ако не знаем точните граници на входните стойности. Например, в нашия случай 2 от 4 стойности нямат горна/долна граница, което може да доведе до безкраен брой състояния. + +В нашия пример ще използваме втория подход. Както може да забележите по-късно, въпреки неопределените горни/долни граници, тези стойности рядко приемат стойности извън определени крайни интервали, така че състоянията с екстремни стойности ще бъдат много редки. + +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`, така и `discretize_bins` и вижте дали има разлика. + + ✅ `discretize_bins` връща номера на интервала, който започва от 0. Следователно за стойности на входната променлива около 0 връща число от средата на интервала (10). В `discretize` не се грижехме за диапазона на изходните стойности, позволявайки им да бъдат отрицателни, така че стойностите на състоянието не са изместени и 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-Learning. + +## Структура на Q-таблицата + +В предишния урок състоянието беше проста двойка числа от 0 до 8, и затова беше удобно да представим Q-таблицата като numpy тензор с размери 8x8x2. Ако използваме дискретизация с интервали, размерът на нашия вектор на състоянието също е известен, така че можем да използваме същия подход и да представим състоянието като масив с размери 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-Learning + +Сега сме готови да научим Петър да балансира! + +1. Първо, нека зададем някои хиперпараметри: (код блок 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Тук `alpha` е **скоростта на учене**, която определя до каква степен трябва да коригираме текущите стойности на Q-таблицата на всяка стъпка. В предишния урок започнахме с 1 и след това намалихме `alpha` до по-ниски стойности по време на обучението. В този пример ще го запазим константно за простота, а вие можете да експериментирате с настройката на стойностите на `alpha` по-късно. + + `gamma` е **факторът на дисконтиране**, който показва до каква степен трябва да приоритизираме бъдещата награда пред текущата награда. + + `epsilon` е **факторът на изследване/експлоатация**, който определя дали трябва да предпочитаме изследването пред експлоатацията или обратното. В нашия алгоритъм ще избираме следващото действие според стойностите на Q-таблицата в `epsilon` процента от случаите, а в останалите случаи ще изпълняваме случайно действие. Това ще ни позволи да изследваме области от пространството за търсене, които никога не сме виждали преди. + + ✅ В контекста на балансирането - изборът на случайно действие (изследване) би действал като случайно избутване в грешна посока, и прътът ще трябва да се научи как да възстанови баланса от тези "грешки". + +### Подобряване на алгоритъма + +Можем също така да направим две подобрения на нашия алгоритъм от предишния урок: + +- **Изчисляване на средна кумулативна награда** за определен брой симулации. Ще отпечатваме напредъка на всеки 5000 итерации и ще усредняваме кумулативната награда за този период от време. Това означава, че ако постигнем повече от 195 точки, можем да считаме проблема за решен, и то с по-високо качество от изискваното. + +- **Изчисляване на максимален среден кумулативен резултат**, `Qmax`, и ще съхраняваме Q-таблицата, съответстваща на този резултат. Когато изпълнявате обучението, ще забележите, че понякога средният кумулативен резултат започва да намалява, и искаме да запазим стойностите на Q-таблицата, които съответстват на най-добрия модел, наблюдаван по време на обучението. + +1. Съберете всички кумулативни награди на всяка симулация в вектор `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=[] + ``` + +Какво може да забележите от тези резултати: + +- **Близо до целта**. Ние сме много близо до постигането на целта от 195 кумулативни награди за 100+ последователни изпълнения на симулацията, или може би вече сме я постигнали! Дори ако получим по-малки числа, все още не знаем, защото усредняваме за 5000 изпълнения, а само 100 изпълнения са необходими според формалните критерии. + +- **Наградата започва да намалява**. Понякога наградата започва да намалява, което означава, че можем да "разрушим" вече научените стойности в Q-таблицата със стойности, които влошават ситуацията. + +Това наблюдение е по-ясно видимо, ако изобразим напредъка на обучението. + +## Изобразяване на напредъка на обучението + +По време на обучението събрахме стойността на кумулативната награда на всяка от итерациите в вектор `rewards`. Ето как изглежда, когато го изобразим спрямо номера на итерацията: + +```python +plt.plot(rewards) +``` + +![суров напредък](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.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)) +``` + +![напредък на обучението](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Променяне на хиперпараметрите + +За да направим обучението по-стабилно, има смисъл да коригираме някои от нашите хиперпараметри по време на обучението. По-специално: + +- **За скоростта на учене**, `alpha`, можем да започнем със стойности близки до 1 и след това да продължим да намаляваме параметъра. С времето ще получаваме добри вероятностни стойности в Q-таблицата и следователно трябва да ги коригираме леко, а не да ги презаписваме напълно с нови стойности. + +- **Увеличаване на epsilon**. Може да искаме да увеличим `epsilon` постепенно, за да изследваме по-малко и да експлоатираме повече. Вероятно има смисъл да започнем с по-ниска стойност на `epsilon` и да се движим нагоре до почти 1. +> **Задача 1**: Експериментирайте с стойностите на хиперпараметрите и вижте дали можете да постигнете по-висока обща награда. Успявате ли да надхвърлите 195? +> **Задача 2**: За да решите формално проблема, трябва да постигнете средна награда от 195 през 100 последователни изпълнения. Измерете това по време на обучението и се уверете, че сте формално решили проблема! + +## Виждане на резултата в действие + +Би било интересно да видим как обученият модел се държи. Нека стартираме симулацията и следваме същата стратегия за избор на действия, както по време на обучението, като избираме според разпределението на вероятностите в 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() +``` + +Трябва да видите нещо подобно: + +![балансираща количка](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Предизвикателство + +> **Задача 3**: Тук използвахме финалното копие на Q-таблицата, което може да не е най-доброто. Помнете, че сме запазили най-добре представящата се Q-таблица в променливата `Qbest`! Опитайте същия пример с най-добре представящата се Q-таблица, като копирате `Qbest` върху `Q` и вижте дали забелязвате разлика. + +> **Задача 4**: Тук не избирахме най-доброто действие на всяка стъпка, а по-скоро избирахме според съответното разпределение на вероятностите. Би ли имало повече смисъл винаги да избираме най-доброто действие, с най-високата стойност в Q-таблицата? Това може да се направи с помощта на функцията `np.argmax`, за да се намери номерът на действието, съответстващ на най-високата стойност в Q-таблицата. Реализирайте тази стратегия и вижте дали подобрява балансирането. + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Задание +[Обучете Mountain Car](assignment.md) + +## Заключение + +Сега научихме как да обучаваме агенти да постигат добри резултати, само като им предоставим функция за награда, която дефинира желаното състояние на играта, и като им дадем възможност интелигентно да изследват пространството за търсене. Успешно приложихме алгоритъма Q-Learning в случаи на дискретни и непрекъснати среди, но с дискретни действия. + +Важно е също така да изучим ситуации, в които състоянието на действията също е непрекъснато, и когато пространството за наблюдение е много по-сложно, като например изображението от екрана на играта Atari. В тези проблеми често се налага да използваме по-мощни техники за машинно обучение, като невронни мрежи, за да постигнем добри резултати. Тези по-напреднали теми са предмет на нашия предстоящ курс за по-напреднал изкуствен интелект. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/2-Gym/assignment.md b/translations/bg/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 000000000..3a5592b4e --- /dev/null +++ b/translations/bg/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,55 @@ + +# Обучение на Mountain Car + +[OpenAI Gym](http://gym.openai.com) е проектиран така, че всички среди предоставят един и същ API - т.е. същите методи `reset`, `step` и `render`, както и същите абстракции за **пространство на действията** и **пространство на наблюденията**. Следователно, би трябвало да е възможно да се адаптират едни и същи алгоритми за обучение чрез подсилване към различни среди с минимални промени в кода. + +## Среда Mountain Car + +[Средата Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) съдържа кола, която е заседнала в долина: + +Целта е да излезете от долината и да достигнете до флага, като извършвате едно от следните действия на всяка стъпка: + +| Стойност | Значение | +|---|---| +| 0 | Ускорение наляво | +| 1 | Без ускорение | +| 2 | Ускорение надясно | + +Основният трик в този проблем е, че двигателят на колата не е достатъчно мощен, за да изкачи планината с едно преминаване. Затова единственият начин за успех е да се движите напред-назад, за да натрупате инерция. + +Пространството на наблюденията се състои само от две стойности: + +| № | Наблюдение | Мин | Макс | +|-----|--------------|-----|-----| +| 0 | Позиция на колата | -1.2| 0.6 | +| 1 | Скорост на колата | -0.07 | 0.07 | + +Системата за награди в Mountain Car е доста сложна: + + * Награда от 0 се присъжда, ако агентът достигне флага (позиция = 0.5) на върха на планината. + * Награда от -1 се присъжда, ако позицията на агента е по-малка от 0.5. + +Епизодът приключва, ако позицията на колата е повече от 0.5 или дължината на епизода надвишава 200. +## Инструкции + +Адаптирайте нашия алгоритъм за обучение чрез подсилване, за да решите проблема с Mountain Car. Започнете с наличния код в [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), заменете средата, променете функциите за дискретизация на състоянията и се опитайте да накарате съществуващия алгоритъм да се обучава с минимални промени в кода. Оптимизирайте резултата, като коригирате хиперпараметрите. + +> **Забележка**: Вероятно ще е необходимо коригиране на хиперпараметрите, за да се постигне сближаване на алгоритъма. +## Критерии за оценка + +| Критерии | Отлично | Адекватно | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| | Алгоритъмът Q-Learning е успешно адаптиран от примера с CartPole, с минимални промени в кода, и е способен да реши проблема с достигането на флага за по-малко от 200 стъпки. | Нов алгоритъм Q-Learning е взет от интернет, но е добре документиран; или съществуващият алгоритъм е адаптиран, но не достига желаните резултати. | Студентът не е успял успешно да адаптира никакъв алгоритъм, но е направил значителни стъпки към решението (реализирал е дискретизация на състоянията, структура на данни за Q-таблицата и др.) | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/bg/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 000000000..02917a6c0 --- /dev/null +++ b/translations/bg/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/2-Gym/solution/R/README.md b/translations/bg/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 000000000..5d1d22ddd --- /dev/null +++ b/translations/bg/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +това е временно запълващо място + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/8-Reinforcement/README.md b/translations/bg/8-Reinforcement/README.md new file mode 100644 index 000000000..ce97bd58a --- /dev/null +++ b/translations/bg/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Въведение в обучението чрез подсилване + +Обучението чрез подсилване (RL) се счита за един от основните парадигми на машинното обучение, наред с обучението с учител и без учител. RL се фокусира върху вземането на решения: доставяне на правилните решения или поне учене от тях. + +Представете си, че имате симулирана среда, като например фондовия пазар. Какво се случва, ако наложите дадена регулация? Има ли положителен или отрицателен ефект? Ако се случи нещо отрицателно, трябва да вземете това _отрицателно подсилване_, да се поучите от него и да промените курса. Ако резултатът е положителен, трябва да надградите върху това _положително подсилване_. + +![петър и вълкът](../../../8-Reinforcement/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/README.md) и [регресия](../2-Regression/README.md) са задачи на обучението с учител. +- **Без учител**, при което нямаме етикетирани тренировъчни данни. Основният пример за обучение без учител е [Клъстеризация](../5-Clustering/README.md). + +В този раздел ще ви запознаем с нов тип задача за обучение, която не изисква етикетирани тренировъчни данни. Съществуват няколко типа такива задачи: + +- **[Полу-обучение с учител](https://wikipedia.org/wiki/Semi-supervised_learning)**, при което имаме много неетикетирани данни, които могат да се използват за предварително обучение на модела. +- **[Обучение чрез подсилване](https://wikipedia.org/wiki/Reinforcement_learning)**, при което агентът се учи как да се държи, като извършва експерименти в някаква симулирана среда. + +### Пример - компютърна игра + +Да предположим, че искате да научите компютър да играе игра, като шах или [Super Mario](https://wikipedia.org/wiki/Super_Mario). За да играе компютърът играта, трябва да предскаже кой ход да направи във всяко от състоянията на играта. Макар това да изглежда като задача за класификация, всъщност не е - защото нямаме набор от данни със състояния и съответстващи действия. Макар да имаме някои данни, като съществуващи шахматни партии или записи на играчи, играещи Super Mario, вероятно тези данни няма да покрият достатъчно голям брой възможни състояния. + +Вместо да търсим съществуващи данни за играта, **Обучението чрез подсилване** (RL) се основава на идеята *да накараме компютъра да играе* много пъти и да наблюдаваме резултата. Следователно, за да приложим Обучение чрез подсилване, ни трябват две неща: + +- **Среда** и **симулатор**, които ни позволяват да играем играта много пъти. Този симулатор трябва да дефинира всички правила на играта, както и възможните състояния и действия. + +- **Функция за награда**, която да ни казва колко добре сме се справили по време на всеки ход или игра. + +Основната разлика между другите типове машинно обучение и RL е, че при RL обикновено не знаем дали печелим или губим, докато не завършим играта. Следователно, не можем да кажем дали даден ход сам по себе си е добър или не - получаваме награда едва в края на играта. Нашата цел е да проектираме алгоритми, които ще ни позволят да обучим модел при несигурни условия. Ще научим за един RL алгоритъм, наречен **Q-learning**. + +## Уроци + +1. [Въведение в обучението чрез подсилване и Q-Learning](1-QLearning/README.md) +2. [Използване на симулационна среда в gym](2-Gym/README.md) + +## Благодарности + +"Въведение в обучението чрез подсилване" е написано с ♥️ от [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/9-Real-World/1-Applications/README.md b/translations/bg/9-Real-World/1-Applications/README.md new file mode 100644 index 000000000..140d564c1 --- /dev/null +++ b/translations/bg/9-Real-World/1-Applications/README.md @@ -0,0 +1,147 @@ + +# Постскриптум: Машинно обучение в реалния свят + +![Обобщение на машинното обучение в реалния свят в скица](../../../../sketchnotes/ml-realworld.png) +> Скица от [Tomomi Imura](https://www.twitter.com/girlie_mac) + +В този курс научихте много начини за подготовка на данни за обучение и създаване на модели за машинно обучение. Създадохте серия от класически модели за регресия, клъстеризация, класификация, обработка на естествен език и времеви серии. Поздравления! Сега вероятно се чудите за какво всичко това... какви са приложенията на тези модели в реалния свят? + +Докато в индустрията има голям интерес към AI, който обикновено използва дълбоко обучение, все още има ценни приложения за класическите модели за машинно обучение. Може би дори използвате някои от тези приложения днес! В този урок ще разгледате как осем различни индустрии и области на знание използват тези модели, за да направят своите приложения по-ефективни, надеждни, интелигентни и ценни за потребителите. + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Финанси + +Финансовият сектор предлага много възможности за машинно обучение. Много проблеми в тази област могат да бъдат моделирани и решени с помощта на ML. + +### Откриване на измами с кредитни карти + +Научихме за [клъстеризация с k-средни стойности](../../5-Clustering/2-K-Means/README.md) по-рано в курса, но как може да се използва за решаване на проблеми, свързани с измами с кредитни карти? + +Клъстеризацията с k-средни стойности е полезна при техника за откриване на измами с кредитни карти, наречена **откриване на отклонения**. Отклоненията или аномалиите в наблюденията на набор от данни могат да ни покажат дали кредитната карта се използва нормално или се случва нещо необичайно. Както е показано в статията, свързана по-долу, можете да сортирате данни за кредитни карти с помощта на алгоритъм за клъстеризация с k-средни стойности и да присвоите всяка транзакция към клъстер въз основа на това колко отклонение представлява. След това можете да оцените най-рискованите клъстери за измамни спрямо легитимни транзакции. +[Референция](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/) + +## 🎓 Образование + +Образователният сектор също е много интересна област, където може да се приложи ML. Има интересни проблеми за решаване, като откриване на измами при тестове или есета, или управление на предубеденост, независимо дали е умишлена или не, в процеса на оценяване. + +### Прогнозиране на поведението на учениците + +[Coursera](https://coursera.com), онлайн платформа за отворени курсове, има страхотен технологичен блог, където обсъждат много инженерни решения. В този случай те начертаха линия на регресия, за да се опитат да изследват всяка корелация между нисък NPS (Net Promoter Score) рейтинг и задържане или отпадане от курса. +[Референция](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/) + +## 👜 Търговия на дребно + +Секторът на търговията на дребно определено може да се възползва от използването на ML, от създаването на по-добро клиентско изживяване до оптимално управление на инвентара. + +### Персонализиране на клиентското изживяване + +В Wayfair, компания, която продава домашни стоки като мебели, помагането на клиентите да намерят правилните продукти за техния вкус и нужди е от първостепенно значение. В тази статия инженерите от компанията описват как използват ML и NLP, за да "предоставят правилните резултати за клиентите". По-специално, техният Query Intent Engine е създаден да използва извличане на обекти, обучение на класификатори, извличане на активи и мнения, както и маркиране на настроения в клиентски ревюта. Това е класически пример за това как NLP работи в онлайн търговията на дребно. +[Референция](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Управление на инвентара + +Иновативни, гъвкави компании като [StitchFix](https://stitchfix.com), услуга за доставка на кутии с дрехи до потребителите, разчитат силно на ML за препоръки и управление на инвентара. Техните стилистични екипи работят заедно с екипите за мерчандайзинг: "един от нашите учени по данни експериментира с генетичен алгоритъм и го приложи към облекло, за да предскаже какво би било успешно парче дреха, което не съществува днес. Представихме това на екипа за мерчандайзинг и сега те могат да го използват като инструмент." +[Референция](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Здравеопазване + +Секторът на здравеопазването може да използва ML за оптимизиране на изследователски задачи, както и логистични проблеми като повторно приемане на пациенти или спиране на разпространението на болести. + +### Управление на клинични изпитания + +Токсичността в клиничните изпитания е основен проблем за производителите на лекарства. Колко токсичност е допустима? В това изследване анализът на различни методи за клинични изпитания доведе до разработването на нов подход за прогнозиране на вероятността от резултати от клинични изпитания. По-специално, те успяха да използват random forest, за да създадат [класификатор](../../4-Classification/README.md), който може да различава групи лекарства. +[Референция](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Управление на повторни приемания в болници + +Болничната грижа е скъпа, особено когато пациентите трябва да бъдат приемани повторно. Тази статия обсъжда компания, която използва ML за прогнозиране на потенциала за повторно приемане с помощта на [клъстеризация](../../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) тук), класическото ML все още има място в тази задача. + +Сензорите за проследяване на движенията на селскостопански животни и IoT използват този тип визуална обработка, но по-основни ML техники са полезни за предварителна обработка на данни. Например, в тази статия позите на овце бяха наблюдавани и анализирани с помощта на различни алгоритми за класификация. Може да разпознаете ROC кривата на страница 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) + +## 💼 Застраховане + +Секторът на застраховането е още един сектор, който използва ML за изграждане и оптимизиране на жизнеспособни финансови и актюерски модели. + +### Управление на волатилността + +MetLife, доставчик на животозастраховане, е открит относно начина, по който анализира и намалява волатилността в своите финансови модели. В тази статия ще забележите визуализации за бинарна и ординална класификация. Ще откриете също визуализации за прогнозиране. +[Референция](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Изкуства, култура и литература + +В изкуствата, например в журналистиката, има много интересни проблеми. Откриването на фалшиви новини е огромен проблем, тъй като е доказано, че влияе върху мнението на хората и дори може да разруши демокрации. Музеите също могат да се възползват от използването на ML във всичко - от намиране на връзки между артефакти до планиране на ресурси. + +### Откриване на фалшиви новини + +Откриването на фалшиви новини се е превърнало в игра на котка и мишка в днешните медии. В тази статия изследователите предлагат система, която комбинира няколко от техниките за ML, които изучихме, и може да бъде тествана, за да се избере най-добрият модел: "Тази система се основава на обработка на естествен език за извличане на характеристики от данните и след това тези характеристики се използват за обучение на класификатори за машинно обучение като 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) + +Тази статия показва как комбинирането на различни области на ML може да произведе интересни резултати, които могат да помогнат за спиране на разпространението на фалшиви новини и създаване на реални щети; в този случай импулсът беше разпространението на слухове за лечения на COVID, които предизвикаха насилие. + +### Музейно ML + +Музеите са на прага на AI революция, в която каталогизирането и дигитализирането на колекции и намирането на връзки между артефакти става по-лесно с напредването на технологиите. Проекти като [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) помагат за разкриване на мистериите на недостъпни колекции като Ватиканските архиви. Но бизнес аспектът на музеите също се възползва от ML модели. + +Например, Институтът за изкуства в Чикаго изгражда модели за прогнозиране на това какво интересува аудиторията и кога ще посещава изложби. Целта е да се създаде индивидуализирано и оптимизирано изживяване за посетителите всеки път, когато потребителят посещава музея. "През фискалната 2017 година моделът прогнозира посещаемостта и приходите с точност от 1 процент, казва Andrew Simnick, стар +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Преглед и самостоятелно обучение + +Екипът по наука за данни на Wayfair има няколко интересни видеа за това как използват машинното обучение в тяхната компания. Струва си [да ги разгледате](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Задача + +[Търсене на съкровища с машинно обучение](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/9-Real-World/1-Applications/assignment.md b/translations/bg/9-Real-World/1-Applications/assignment.md new file mode 100644 index 000000000..e272571e4 --- /dev/null +++ b/translations/bg/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Лов на съкровища с машинно обучение + +## Инструкции + +В този урок научихте за много реални случаи, които бяха решени с помощта на класическо машинно обучение. Въпреки че използването на дълбоко обучение, нови техники и инструменти в AI, както и използването на невронни мрежи, помогнаха за ускоряване на създаването на инструменти за тези сектори, класическото машинно обучение с техниките от тази учебна програма все още има голяма стойност. + +В това задание си представете, че участвате в хакатон. Използвайте наученото от учебната програма, за да предложите решение с класическо машинно обучение за решаване на проблем в един от секторите, обсъдени в този урок. Създайте презентация, в която обсъждате как ще реализирате идеята си. Допълнителни точки ще получите, ако успеете да съберете примерни данни и изградите модел за машинно обучение, който да подкрепи концепцията ви! + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | ----------------------------------------------------------------- | ----------------------------------------------- | ----------------------- | +| | Представена е PowerPoint презентация - бонус за изграждане на модел | Представена е неиновационна, базова презентация | Работата е непълна | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/9-Real-World/2-Debugging-ML-Models/README.md b/translations/bg/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 000000000..24a67e8ab --- /dev/null +++ b/translations/bg/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,162 @@ + +# Постскриптум: Дебъгване на модели в машинното обучение с помощта на компоненти от таблото за отговорен AI + +## [Тест преди лекцията](https://ff-quizzes.netlify.app/en/ml/) + +## Въведение + +Машинното обучение оказва влияние върху ежедневния ни живот. AI навлиза в някои от най-важните системи, които ни засягат като индивиди и като общество – от здравеопазване, финанси, образование до заетост. Например, системи и модели участват в ежедневни задачи за вземане на решения, като диагностика в здравеопазването или откриване на измами. В резултат на това напредъкът в AI, заедно с ускореното му приемане, се среща с променящи се обществени очаквания и нарастваща регулация. Постоянно виждаме области, в които AI системите не оправдават очакванията, излагат нови предизвикателства, а правителствата започват да регулират AI решенията. Затова е важно тези модели да бъдат анализирани, за да предоставят справедливи, надеждни, приобщаващи, прозрачни и отговорни резултати за всички. + +В този курс ще разгледаме практически инструменти, които могат да се използват за оценка дали даден модел има проблеми, свързани с отговорния AI. Традиционните техники за дебъгване на машинното обучение обикновено се основават на количествени изчисления, като агрегирана точност или средна загуба на грешка. Представете си какво може да се случи, ако данните, които използвате за изграждане на тези модели, липсват определени демографски характеристики, като раса, пол, политически възгледи, религия, или непропорционално представят такива демографски характеристики. Ами ако изходът на модела се интерпретира така, че да благоприятства определена демографска група? Това може да доведе до свръх или недостатъчно представяне на тези чувствителни характеристики, което да доведе до проблеми със справедливостта, приобщаването или надеждността на модела. Друг фактор е, че моделите за машинно обучение се считат за "черни кутии", което затруднява разбирането и обяснението на това, което движи прогнозите на модела. Всички тези предизвикателства са проблеми, пред които се изправят специалистите по данни и разработчиците на AI, когато нямат подходящи инструменти за дебъгване и оценка на справедливостта или надеждността на модела. + +В този урок ще научите как да дебъгвате вашите модели, използвайки: + +- **Анализ на грешки**: идентифициране на области в разпределението на данните, където моделът има високи нива на грешки. +- **Общ преглед на модела**: извършване на сравнителен анализ между различни групи данни, за да се открият несъответствия в метриките за производителност на модела. +- **Анализ на данни**: изследване на области, където може да има свръх или недостатъчно представяне на данни, което може да наклони модела да благоприятства една демографска група пред друга. +- **Важност на характеристиките**: разбиране кои характеристики движат прогнозите на модела на глобално или локално ниво. + +## Предварителни знания + +Като предварително условие, моля, прегледайте [Инструменти за отговорен AI за разработчици](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif за инструменти за отговорен AI](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Анализ на грешки + +Традиционните метрики за производителност на моделите, използвани за измерване на точността, обикновено са изчисления, базирани на правилни срещу неправилни прогнози. Например, определянето, че моделът е точен в 89% от случаите със загуба на грешка от 0.001, може да се счита за добро представяне. Грешките обаче често не са разпределени равномерно в основния набор от данни. Може да получите резултат за точност на модела от 89%, но да откриете, че има различни области в данните, за които моделът се проваля в 42% от случаите. Последиците от тези модели на провал с определени групи данни могат да доведат до проблеми със справедливостта или надеждността. Затова е важно да се разберат областите, в които моделът се представя добре или не. Областите в данните, където има голям брой неточности в модела, могат да се окажат важни демографски данни. + +![Анализ и дебъгване на грешки в модела](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Компонентът за анализ на грешки в таблото за отговорен AI показва как провалите на модела са разпределени в различни групи с визуализация на дърво. Това е полезно за идентифициране на характеристики или области, където има висока степен на грешки в набора от данни. Като видите откъде идват повечето неточности на модела, можете да започнете да изследвате основната причина. Можете също така да създавате групи данни за анализ. Тези групи данни помагат в процеса на дебъгване, за да се определи защо представянето на модела е добро в една група, но грешно в друга. + +![Анализ на грешки](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Визуалните индикатори на картата на дървото помагат за по-бързо локализиране на проблемните области. Например, колкото по-тъмно червен е цветът на възел в дървото, толкова по-висока е степента на грешка. + +Топлинната карта е друга функционалност за визуализация, която потребителите могат да използват за изследване на степента на грешка, използвайки една или две характеристики, за да намерят фактор, допринасящ за грешките на модела в целия набор от данни или групи. + +![Топлинна карта за анализ на грешки](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Използвайте анализ на грешки, когато трябва: + +* Да получите дълбоко разбиране за това как провалите на модела са разпределени в набора от данни и в няколко входни и характеристични измерения. +* Да разбиете агрегирани метрики за производителност, за да откриете автоматично грешни групи и да информирате за целенасочени стъпки за смекчаване. + +## Общ преглед на модела + +Оценяването на производителността на модел за машинно обучение изисква цялостно разбиране на неговото поведение. Това може да се постигне чрез преглед на повече от една метрика, като степен на грешка, точност, припомняне, прецизност или MAE (средна абсолютна грешка), за да се открият несъответствия между метриките за производителност. Една метрика за производителност може да изглежда добре, но неточности могат да бъдат разкрити в друга метрика. Освен това, сравняването на метриките за несъответствия в целия набор от данни или групи помага да се осветят областите, в които моделът се представя добре или не. Това е особено важно за наблюдение на представянето на модела сред чувствителни срещу нечувствителни характеристики (например раса, пол или възраст на пациента), за да се разкрие потенциална несправедливост в модела. Например, откриването, че моделът е по-неточен в група, която има чувствителни характеристики, може да разкрие потенциална несправедливост. + +Компонентът "Общ преглед на модела" в таблото за отговорен AI помага не само за анализиране на метриките за производителност на представянето на данните в група, но и дава на потребителите възможност да сравняват поведението на модела между различни групи. + +![Групи от данни - общ преглед на модела в таблото за отговорен AI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Функционалността за анализ, базирана на характеристики, позволява на потребителите да стеснят подгрупи от данни в рамките на определена характеристика, за да идентифицират аномалии на по-гранулирано ниво. Например, таблото има вградена интелигентност за автоматично генериране на групи за избрана от потребителя характеристика (например *"time_in_hospital < 3"* или *"time_in_hospital >= 7"*). Това позволява на потребителя да изолира определена характеристика от по-голяма група данни, за да види дали тя е ключов фактор за неточните резултати на модела. + +![Групи от характеристики - общ преглед на модела в таблото за отговорен AI](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Компонентът "Общ преглед на модела" поддържа два класа метрики за несъответствия: + +**Несъответствие в производителността на модела**: Тези метрики изчисляват несъответствието (разликата) в стойностите на избраната метрика за производителност между подгрупи от данни. Ето няколко примера: + +* Несъответствие в степента на точност +* Несъответствие в степента на грешка +* Несъответствие в прецизността +* Несъответствие в припомнянето +* Несъответствие в средната абсолютна грешка (MAE) + +**Несъответствие в степента на селекция**: Тази метрика съдържа разликата в степента на селекция (благоприятна прогноза) между подгрупи. Пример за това е несъответствието в степента на одобрение на заеми. Степента на селекция означава частта от точките от данни във всяка класа, класифицирани като 1 (в бинарна класификация) или разпределението на прогнозните стойности (в регресия). + +## Анализ на данни + +> "Ако измъчвате данните достатъчно дълго, те ще признаят всичко" - Роналд Коуз + +Това изказване звучи крайно, но е вярно, че данните могат да бъдат манипулирани, за да подкрепят всяко заключение. Такава манипулация понякога може да се случи неволно. Като хора, всички имаме предразсъдъци и често е трудно да осъзнаем кога въвеждаме предразсъдъци в данните. Гарантирането на справедливост в AI и машинното обучение остава сложен предизвикателство. + +Данните са голямо сляпо петно за традиционните метрики за производителност на моделите. Може да имате високи резултати за точност, но това не винаги отразява основните предразсъдъци в набора от данни. Например, ако набор от данни за служители показва, че 27% от жените заемат изпълнителни позиции в компания, а 73% от мъжете са на същото ниво, AI модел за рекламиране на работни места, обучен на тези данни, може да насочи предимно мъжка аудитория за старши позиции. Този дисбаланс в данните накланя прогнозата на модела да благоприятства един пол. Това разкрива проблем със справедливостта, където има полова предразсъдък в AI модела. + +Компонентът "Анализ на данни" в таблото за отговорен AI помага да се идентифицират области, където има свръх или недостатъчно представяне в набора от данни. Той помага на потребителите да диагностицират основната причина за грешки и проблеми със справедливостта, въведени от дисбаланси в данните или липса на представяне на определена група данни. Това дава на потребителите възможност да визуализират набори от данни въз основа на прогнозирани и действителни резултати, групи с грешки и специфични характеристики. Понякога откриването на недостатъчно представена група данни може също така да разкрие, че моделът не се учи добре, което води до високи неточности. Модел с предразсъдъци в данните не само е проблем със справедливостта, но показва, че моделът не е приобщаващ или надежден. + +![Компонент за анализ на данни в таблото за отговорен AI](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Използвайте анализ на данни, когато трябва: + +* Да изследвате статистиката на вашия набор от данни, като избирате различни филтри, за да разделите данните в различни измерения (известни също като групи). +* Да разберете разпределението на вашия набор от данни между различни групи и характеристики. +* Да определите дали вашите открития, свързани със справедливостта, анализа на грешки и причинността (получени от други компоненти на таблото), са резултат от разпределението на вашия набор от данни. +* Да решите в кои области да съберете повече данни, за да смекчите грешки, произтичащи от проблеми с представянето, шум в етикетите, шум в характеристиките, предразсъдъци в етикетите и подобни фактори. + +## Интерпретируемост на модела + +Моделите за машинно обучение обикновено са "черни кутии". Разбирането кои ключови характеристики на данните движат прогнозата на модела може да бъде предизвикателство. Важно е да се осигури прозрачност относно причините, поради които моделът прави определена прогноза. Например, ако AI система прогнозира, че диабетен пациент е изложен на риск от повторно приемане в болница в рамките на по-малко от 30 дни, тя трябва да може да предостави подкрепящи данни, които са довели до тази прогноза. Наличието на подкрепящи данни носи прозрачност, която помага на клиницистите или болниците да вземат добре информирани решения. Освен това, възможността да се обясни защо моделът е направил прогноза за индивидуален пациент осигурява отговорност спрямо здравните регулации. Когато използвате модели за машинно обучение по начини, които засягат живота на хората, е от съществено значение да разберете и обясните какво влияе върху поведението на модела. Интерпретируемостта и обяснимостта на модела помагат да се отговори на въпроси в сценарии като: + +* Дебъгване на модела: Защо моделът ми направи тази грешка? Как мога да го подобря? +* Сътрудничество между хора и AI: Как мога да разбера и да се доверя на решенията на модела? +* Регулаторно съответствие: Дали моделът ми отговаря на законовите изисквания? + +Компонентът "Важност на характеристиките" в таблото за отговорен AI помага да се дебъгва и да се получи цялостно разбиране за това как моделът прави прогнози. Това е полезен инструмент за професионалисти в машинното обучение и вземащи решения, за да обяснят и покажат доказателства за характеристиките, които влияят върху поведението на модела за регулаторно съответствие. Потребителите могат да изследват както глобални, така и локални обяснения, за да валидират кои характеристики движат прогнозата на модела. Глобалните обяснения изброяват основните характеристики, които са повлияли на общата прогноза на модела. Локалните обяснения показват кои характеристики са довели до прогноза на модела за индивидуален случай. Възможността за оценка на локални обяснения също е полезна при дебъгване или одит на конкретен случай, за да се разбере и интерпретира защо моделът е направил точна или неточна прогноза. + +![Компонент за важност на характеристиките в таблото за отговорен AI](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Глобални обяснения: Например, кои характеристики влияят върху общото поведение на модела за повторно приемане в болница на диабетни пациенти? +* Локални обяснения: Например, защо диаб +- **Прекомерно или недостатъчно представяне**. Идеята е, че определена група не е представена в дадена професия, и всяка услуга или функция, която продължава да насърчава това, допринася за вреда. + +### Табло за отговорен AI в Azure + +[Табло за отговорен AI в Azure](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) е изградено върху инструменти с отворен код, разработени от водещи академични институции и организации, включително Microsoft. Те са от съществено значение за специалистите по данни и разработчиците на AI, за да разбират по-добре поведението на моделите, да откриват и смекчават нежелани проблеми в AI моделите. + +- Научете как да използвате различните компоненти, като разгледате [документацията за таблото за отговорен AI.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Разгледайте някои [примерни ноутбуци за таблото за отговорен AI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks), за да дебъгвате по-отговорни AI сценарии в Azure Machine Learning. + +--- +## 🚀 Предизвикателство + +За да предотвратим въвеждането на статистически или данни пристрастия от самото начало, трябва: + +- да имаме разнообразие от произходи и перспективи сред хората, работещи върху системите +- да инвестираме в набори от данни, които отразяват разнообразието на нашето общество +- да разработим по-добри методи за откриване и коригиране на пристрастия, когато те се появят + +Помислете за реални сценарии, в които несправедливостта е очевидна при изграждането и използването на модели. Какво друго трябва да вземем предвид? + +## [Тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) +## Преглед и самостоятелно обучение + +В този урок научихте някои от практическите инструменти за интегриране на отговорен AI в машинното обучение. + +Гледайте този уъркшоп, за да се задълбочите в темите: + +- Табло за отговорен AI: Единно решение за оперативизиране на отговорен AI на практика от Бесмира Нуши и Мехрнуш Самеки + +[![Табло за отговорен AI: Единно решение за оперативизиране на отговорен AI на практика](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Табло за отговорен AI: Единно решение за оперативизиране на отговорен AI на практика") + +> 🎥 Кликнете върху изображението по-горе за видео: Табло за отговорен AI: Единно решение за оперативизиране на отговорен AI на практика от Бесмира Нуши и Мехрнуш Самеки + +Прегледайте следните материали, за да научите повече за отговорния AI и как да изграждате по-надеждни модели: + +- Инструменти на Microsoft за отговорен AI за дебъгване на ML модели: [Ресурси за инструменти за отговорен AI](https://aka.ms/rai-dashboard) + +- Разгледайте комплекта инструменти за отговорен AI: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Център за ресурси за отговорен AI на Microsoft: [Ресурси за отговорен AI – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Изследователска група FATE на Microsoft: [FATE: Справедливост, отчетност, прозрачност и етика в AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Задача + +[Разгледайте таблото за отговорен AI](assignment.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/bg/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 000000000..c37e82375 --- /dev/null +++ b/translations/bg/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Изследвайте таблото за отговорен AI (RAI) + +## Инструкции + +В този урок научихте за таблото RAI, набор от компоненти, базирани на "отворен код", които помагат на специалистите по данни да извършват анализ на грешки, изследване на данни, оценка на справедливостта, интерпретация на модели, оценка на контрафакти/какво-ако сценарии и причинно-следствен анализ на AI системи. За тази задача изследвайте някои от примерните [тетрадки](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) на таблото RAI и представете своите открития в доклад или презентация. + +## Критерии за оценка + +| Критерии | Отлично | Задоволително | Нуждае се от подобрение | +| -------- | --------- | -------- | ----------------- | +| | Представен е доклад или презентация, обсъждащи компонентите на таблото RAI, тетрадката, която е била изпълнена, и изводите, направени от нейното изпълнение | Представен е доклад без изводи | Не е представен доклад | + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/9-Real-World/README.md b/translations/bg/9-Real-World/README.md new file mode 100644 index 000000000..08ca9b166 --- /dev/null +++ b/translations/bg/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Постскриптум: Реални приложения на класическото машинно обучение + +В тази част от учебната програма ще се запознаете с някои реални приложения на класическото машинно обучение. Претърсихме интернет, за да намерим научни статии и материали за приложения, които използват тези стратегии, като избягваме невронни мрежи, дълбоко обучение и изкуствен интелект, доколкото е възможно. Научете как машинното обучение се използва в бизнес системи, екологични приложения, финанси, изкуство и култура и други. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Снимка от Alexis Fauvet на Unsplash + +## Урок + +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) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/CODE_OF_CONDUCT.md b/translations/bg/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..1e23c427f --- /dev/null +++ b/translations/bg/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Кодекс за поведение на Microsoft Open Source + +Този проект е приел [Кодекса за поведение на Microsoft Open Source](https://opensource.microsoft.com/codeofconduct/). + +Ресурси: + +- [Кодекс за поведение на Microsoft Open Source](https://opensource.microsoft.com/codeofconduct/) +- [Често задавани въпроси за Кодекса за поведение на Microsoft](https://opensource.microsoft.com/codeofconduct/faq/) +- Свържете се с [opencode@microsoft.com](mailto:opencode@microsoft.com) при въпроси или притеснения + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/CONTRIBUTING.md b/translations/bg/CONTRIBUTING.md new file mode 100644 index 000000000..33632111b --- /dev/null +++ b/translations/bg/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# Принос + +Този проект приветства приноси и предложения. Повечето приноси изискват от вас да се съгласите с Лицензионно споразумение за принос (CLA), което декларира, че имате право и наистина предоставяте ни правата да използваме вашия принос. За подробности посетете https://cla.microsoft.com. + +> Важно: когато превеждате текст в този репозиторий, моля, уверете се, че не използвате машинен превод. Ще проверим преводите чрез общността, така че моля, доброволствайте за преводи само на езици, които владеете добре. + +Когато изпратите pull request, CLA-ботът автоматично ще определи дали трябва да предоставите CLA и ще украси PR съответно (например, етикет, коментар). Просто следвайте инструкциите, предоставени от бота. Ще трябва да направите това само веднъж за всички репозитории, които използват нашия CLA. + +Този проект е приел [Кодекса за поведение на Microsoft Open Source](https://opensource.microsoft.com/codeofconduct/). +За повече информация вижте [Често задавани въпроси за Кодекса за поведение](https://opensource.microsoft.com/codeofconduct/faq/) +или се свържете с [opencode@microsoft.com](mailto:opencode@microsoft.com) за допълнителни въпроси или коментари. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/README.md b/translations/bg/README.md new file mode 100644 index 000000000..31c8787bc --- /dev/null +++ b/translations/bg/README.md @@ -0,0 +1,177 @@ + +[![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/) + +### 🌐 Поддръжка на много езици + +#### Поддържани чрез GitHub Action (Автоматизирано и винаги актуално) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](./README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Присъединете се към общността + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Машинно обучение за начинаещи - учебна програма + +> 🌍 Пътувайте по света, докато изследваме машинното обучение чрез културите на различни народи 🌍 + +Екипът на Cloud Advocates в Microsoft с удоволствие ви предлага 12-седмична учебна програма с 26 урока, посветена на **машинното обучение**. В тази програма ще научите за това, което понякога се нарича **класическо машинно обучение**, като основно използвате библиотеката Scikit-learn и избягвате дълбокото обучение, което е разгледано в нашата [учебна програма "AI за начинаещи"](https://aka.ms/ai4beginners). Съчетайте тези уроци с нашата учебна програма ['Наука за данни за начинаещи'](https://aka.ms/ds4beginners)! + +Пътувайте с нас по света, докато прилагаме тези класически техники към данни от различни региони. Всеки урок включва тестове преди и след урока, писмени инструкции за изпълнение на урока, решение, задача и други. Нашият подход, базиран на проекти, ви позволява да учите, докато създавате, доказан метод за усвояване на нови умения. + +**✍️ Сърдечни благодарности на нашите автори** Джен Лупър, Стивън Хауъл, Франческа Лазери, Томоми Имура, Каси Бревиу, Дмитрий Сошников, Крис Норинг, Анирбан Мукерджи, Орнела Алтунян, Рут Якобу и Ейми Бойд + +**🎨 Благодарности и на нашите илюстратори** Томоми Имура, Дасани Мадипали и Джен Лупър + +**🙏 Специални благодарности 🙏 на нашите автори, рецензенти и сътрудници от програмата Microsoft Student Ambassador**, включително Ришит Дагли, Мухамад Сакиб Хан Инан, Рохан Радж, Александру Петреску, Абишек Джайсвал, Наврин Табасум, Йоан Самуила и Снигдха Агарвал + +**🤩 Допълнителна благодарност към Microsoft Student Ambassadors Ерик Ванджау, Джаслийн Сонди и Видуши Гупта за уроците по R!** + +# Започнете + +Следвайте тези стъпки: +1. **Fork на хранилището**: Кликнете върху бутона "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)**, за да използвате тази учебна програма, направете fork на цялото хранилище във вашия собствен GitHub акаунт и изпълнете упражненията самостоятелно или в група: + +- Започнете с тест преди лекцията. +- Прочетете лекцията и изпълнете дейностите, като правите паузи и размишлявате при всяка проверка на знанията. +- Опитайте се да създадете проектите, като разбирате уроците, вместо да изпълнявате предоставения код; въпреки това този код е наличен в папките `/solution` за всеки проектно-ориентиран урок. +- Направете тест след лекцията. +- Завършете предизвикателството. +- Завършете задачата. +- След като завършите група уроци, посетете [Дискусионния форум](https://github.com/microsoft/ML-For-Beginners/discussions) и "учете на глас", като попълните съответния PAT рубрик. PAT е инструмент за оценка на напредъка, който представлява рубрика, която попълвате, за да задълбочите обучението си. Можете също така да реагирате на други PAT, за да учим заедно. + +> За допълнително обучение препоръчваме да следвате тези [модули и учебни пътеки в Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**Учители**, включили сме [някои предложения](for-teachers.md) за това как да използвате тази учебна програма. + +--- + +## Видео уроци + +Някои от уроците са налични като кратки видеа. Можете да намерите всички тях в самите уроци или в [плейлиста "ML за начинаещи" в YouTube канала на Microsoft Developer](https://aka.ms/ml-beginners-videos), като кликнете върху изображението по-долу. + +[![Банер за ML за начинаещи](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Запознайте се с екипа + +[![Промо видео](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif от** [Мохит Джайсал](https://linkedin.com/in/mohitjaisal) + +> 🎥 Кликнете върху изображението по-горе за видео за проекта и хората, които го създадоха! + +--- + +## Педагогика + +Избрахме два педагогически принципа при създаването на тази учебна програма: да бъде практическа **базирана на проекти** и да включва **чести тестове**. Освен това, учебната програма има обща **тема**, която ѝ придава сплотеност. + +Чрез осигуряване на съдържание, което е свързано с проекти, процесът става по-ангажиращ за учениците, а запазването на концепциите се увеличава. Освен това, тест с нисък риск преди урока насочва вниманието на ученика към изучаването на дадена тема, докато втори тест след урока осигурява допълнително запазване на знанията. Тази учебна програма е проектирана да бъде гъвкава и забавна и може да бъде взета изцяло или частично. Проектите започват с малки задачи и стават все по-сложни до края на 12-седмичния цикъл. Учебната програма включва и постскрипт за реални приложения на машинното обучение, който може да се използва като допълнителен кредит или като основа за дискусия. + +> Намерете нашите [Правила за поведение](CODE_OF_CONDUCT.md), [Насоки за принос](CONTRIBUTING.md) и [Насоки за превод](TRANSLATIONS.md). Очакваме вашата конструктивна обратна връзка! + +## Всеки урок включва + +- опционална скица +- опционално допълнително видео +- видео урок (само за някои уроци) +- [тест за загряване преди лекцията](https://ff-quizzes.netlify.app/en/ml/) +- писмен урок +- за уроци, базирани на проекти, ръководства стъпка по стъпка за изграждане на проекта +- проверки на знанията +- предизвикателство +- допълнително четиво +- задача +- [тест след лекцията](https://ff-quizzes.netlify.app/en/ml/) + +> **Бележка за езиците**: Тези уроци са основно написани на Python, но много от тях са налични и на R. За да завършите урок на R, отидете в папката `/solution` и потърсете уроци на R. Те включват разширение .rmd, което представлява **R Markdown** файл, който може да бъде просто дефиниран като вграждане на `кодови блокове` (на R или други езици) и `YAML заглавие` (което насочва как да се форматират изходите като PDF) в `Markdown документ`. По този начин той служи като примерна рамка за авторство в науката за данни, тъй като ви позволява да комбинирате вашия код, неговия изход и вашите мисли, като ви позволява да ги записвате в Markdown. Освен това, R Markdown документи могат да бъдат рендирани в изходни формати като PDF, HTML или Word. + +> **Бележка за тестовете**: Всички тестове са включени в [папката Quiz App](../../quiz-app), за общо 52 теста с по три въпроса всеки. Те са свързани от самите уроци, но приложението за тестове може да бъде стартирано локално; следвайте инструкциите в папката `quiz-app`, за да го хоствате локално или да го разположите в Azure. + +| Номер на урок | Тема | Групиране на уроци | Цели на обучението | Свързан урок | Автор | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 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) | Какви са важните философски въпроси относно справедливостта, които учениците трябва да обмислят при изграждането и прилагането на ML модели? | [Урок](1-Introduction/3-fairness/README.md) | Томоми | +| 04 | Техники за машинно обучение | [Въведение](1-Introduction/README.md) | Какви техники използват изследователите на машинно обучение за създаване на ML модели? | [Урок](1-Introduction/4-techniques-of-ML/README.md) | Крис и Джен | +| 05 | Въведение в регресия | [Регресия](2-Regression/README.md) | Започнете с Python и Scikit-learn за модели на регресия | +
  • [Python](2-Regression/1-Tools/README.md)
  • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
|
  • Джен
  • Ерик Уанджау
| +| 06 | Цени на тикви в Северна Америка 🎃 | [Регресия](2-Regression/README.md) | Визуализирайте и почистете данни в подготовка за ML |
  • [Python](2-Regression/2-Data/README.md)
  • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
|
  • Джен
  • Ерик Уанджау
| +| 07 | Цени на тикви в Северна Америка 🎃 | [Регресия](2-Regression/README.md) | Създайте линейни и полиномиални модели на регресия |
  • [Python](2-Regression/3-Linear/README.md)
  • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
|
  • Джен и Дмитрий
  • Ерик Уанджау
| +| 08 | Цени на тикви в Северна Америка 🎃 | [Регресия](2-Regression/README.md) | Създайте логистичен модел на регресия |
  • [Python](2-Regression/4-Logistic/README.md)
  • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
|
  • Джен
  • Ерик Уанджау
| +| 09 | Уеб приложение 🔌 | [Уеб приложение](3-Web-App/README.md) | Създайте уеб приложение, за да използвате обучен модел | [Python](3-Web-App/1-Web-App/README.md) | Джен | +| 10 | Въведение в класификация | [Класификация](4-Classification/README.md) | Почистете, подгответе и визуализирайте данните си; въведение в класификация |
  • [Python](4-Classification/1-Introduction/README.md)
  • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
    • Джен и Каси
    • Ерик Уанджау
    | +| 11 | Вкусни азиатски и индийски ястия 🍜 | [Класификация](4-Classification/README.md) | Въведение в класификатори |
    • [Python](4-Classification/2-Classifiers-1/README.md)
    • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
      • Джен и Каси
      • Ерик Уанджау
      | +| 12 | Вкусни азиатски и индийски ястия 🍜 | [Класификация](4-Classification/README.md) | Още класификатори |
      • [Python](4-Classification/3-Classifiers-2/README.md)
      • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
        • Джен и Каси
        • Ерик Уанджау
        | +| 13 | Вкусни азиатски и индийски ястия 🍜 | [Класификация](4-Classification/README.md) | Създайте уеб приложение за препоръки, използвайки вашия модел | [Python](4-Classification/4-Applied/README.md) | Джен | +| 14 | Въведение в клъстеризация | [Клъстеризация](5-Clustering/README.md) | Почистете, подгответе и визуализирайте данните си; въведение в клъстеризация |
        • [Python](5-Clustering/1-Visualize/README.md)
        • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
          • Джен
          • Ерик Уанджау
          | +| 15 | Изследване на музикалните вкусове в Нигерия 🎧 | [Клъстеризация](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) |
            • Джен
            • Ерик Уанджау
            | +| 16 | Въведение в обработката на естествен език ☕️ | [Обработка на естествен език](6-NLP/README.md) | Научете основите на NLP, като създадете прост бот | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Стивън | +| 17 | Чести задачи в NLP ☕️ | [Обработка на естествен език](6-NLP/README.md) | Задълбочете знанията си за NLP, като разберете често срещаните задачи при работа с езикови структури | [Python](6-NLP/2-Tasks/README.md) | Стивън | +| 18 | Превод и анализ на настроения ♥️ | [Обработка на естествен език](6-NLP/README.md) | Превод и анализ на настроения с Джейн Остин | [Python](6-NLP/3-Translation-Sentiment/README.md) | Стивън | +| 19 | Романтични хотели в Европа ♥️ | [Обработка на естествен език](6-NLP/README.md) | Анализ на настроения с ревюта на хотели 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Стивън | +| 20 | Романтични хотели в Европа ♥️ | [Обработка на естествен език](6-NLP/README.md) | Анализ на настроения с ревюта на хотели 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Стивън | +| 21 | Въведение в прогнозиране на времеви серии | [Времеви серии](7-TimeSeries/README.md) | Въведение в прогнозиране на времеви серии | [Python](7-TimeSeries/1-Introduction/README.md) | Франческа | +| 22 | ⚡️ Световно потребление на енергия ⚡️ - прогнозиране с ARIMA | [Времеви серии](7-TimeSeries/README.md) | Прогнозиране на времеви серии с ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Франческа | +| 23 | ⚡️ Световно потребление на енергия ⚡️ - прогнозиране със SVR | [Времеви серии](7-TimeSeries/README.md) | Прогнозиране на времеви серии със Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Анирбан | +| 24 | Въведение в обучението чрез подсилване | [Обучение чрез подсилване](8-Reinforcement/README.md)| Въведение в обучението чрез подсилване с Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Дмитрий | +| 25 | Помогнете на Питър да избегне вълка! 🐺 | [Обучение чрез подсилване](8-Reinforcement/README.md)| Обучение чрез подсилване с Gym | [Python](8-Reinforcement/2-Gym/README.md) | Дмитрий | +| Постскрипт | Реални сценарии и приложения на ML | [ML в реалния свят](9-Real-World/README.md) | Интересни и разкриващи приложения на класическо ML | [Урок](9-Real-World/1-Applications/README.md) | Екип | +| Постскрипт | Дебъгване на модели в ML с RAI табло | [ML в реалния свят](9-Real-World/README.md) | Дебъгване на модели в машинно обучение с компоненти на таблото за отговорен AI | [Урок](9-Real-World/2-Debugging-ML-Models/README.md) | Рут Якубу | + +> [намерете всички допълнителни ресурси за този курс в нашата колекция в 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`. Уебсайтът ще бъде достъпен на порт 3000 на вашия localhost: `localhost:3000`. + +## PDFs + +Намерете PDF на учебната програма с линкове [тук](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + +## 🎒 Други курсове + +Нашият екип създава и други курсове! Вижте: + +- [Генеративен AI за начинаещи](https://aka.ms/genai-beginners) +- [Генеративен AI за начинаещи .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Генеративен AI с JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Генеративен AI с Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI за начинаещи](https://aka.ms/ai-beginners) +- [Наука за данни за начинаещи](https://aka.ms/datascience-beginners) +- [ML за начинаещи](https://aka.ms/ml-beginners) +- [Киберсигурност за начинаещи](https://github.com/microsoft/Security-101) +- [Уеб разработка за начинаещи](https://aka.ms/webdev-beginners) +- [IoT за начинаещи](https://aka.ms/iot-beginners) +- [XR разработка за начинаещи](https://github.com/microsoft/xr-development-for-beginners) +- [Овладяване на GitHub Copilot за съвместно програмиране](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Овладяване на GitHub Copilot за C#/.NET разработчици](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Изберете своето приключение с Copilot](https://github.com/microsoft/CopilotAdventures) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/SECURITY.md b/translations/bg/SECURITY.md new file mode 100644 index 000000000..fb63ebe61 --- /dev/null +++ b/translations/bg/SECURITY.md @@ -0,0 +1,51 @@ + +## Сигурност + +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 (MSRC) на [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Ако предпочитате да изпратите доклад без да влизате в системата, изпратете имейл на [secure@microsoft.com](mailto:secure@microsoft.com). Ако е възможно, криптирайте съобщението си с нашия PGP ключ; можете да го изтеглите от [страницата за PGP ключ на Центъра за отговор на сигурността на Microsoft](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Трябва да получите отговор в рамките на 24 часа. Ако по някаква причина не го получите, моля, последвайте с имейл, за да се уверите, че сме получили първоначалното ви съобщение. Допълнителна информация можете да намерите на [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Моля, включете исканата информация, изброена по-долу (доколкото можете да я предоставите), за да ни помогнете да разберем по-добре естеството и обхвата на възможния проблем: + + * Тип на проблема (например препълване на буфер, SQL инжекция, cross-site scripting и др.) + * Пълни пътища на изходните файлове, свързани с проявлението на проблема + * Местоположението на засегнатия изходен код (таг/клон/комит или директен URL) + * Специална конфигурация, необходима за възпроизвеждане на проблема + * Стъпка по стъпка инструкции за възпроизвеждане на проблема + * Доказателство за концепция или експлойт код (ако е възможно) + * Въздействие на проблема, включително как нападател може да го експлоатира + +Тази информация ще ни помогне да обработим вашия доклад по-бързо. + +Ако докладвате за програма за награди за грешки, по-пълните доклади могат да допринесат за по-висока награда. Моля, посетете страницата на [Програмата за награди за грешки на Microsoft](https://microsoft.com/msrc/bounty) за повече подробности относно нашите активни програми. + +## Предпочитани езици + +Предпочитаме всички комуникации да бъдат на английски. + +## Политика + +Microsoft следва принципа на [Координирано разкриване на уязвимости](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/SUPPORT.md b/translations/bg/SUPPORT.md new file mode 100644 index 000000000..3bf862e50 --- /dev/null +++ b/translations/bg/SUPPORT.md @@ -0,0 +1,26 @@ + +# Поддръжка +## Как да докладвате проблеми и получите помощ + +Този проект използва GitHub Issues за проследяване на грешки и заявки за функции. Моля, потърсете съществуващите +проблеми, преди да създадете нови, за да избегнете дублиране. За нови проблеми, докладвайте вашата грешка или +заявка за функция като нов проблем. + +За помощ и въпроси относно използването на този проект, създайте проблем. + +## Политика за поддръжка на Microsoft + +Поддръжката за това хранилище е ограничена до изброените по-горе ресурси. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/docs/_sidebar.md b/translations/bg/docs/_sidebar.md new file mode 100644 index 000000000..6b61879c2 --- /dev/null +++ b/translations/bg/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Въведение + - [Въведение в Машинното Обучение](../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) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- Обработка на Естествен Език (NLP) + - [Въведение в NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [Задачи в NLP](../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) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Обучение чрез Подкрепление + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Машинно Обучение в Реалния Свят + - [Приложения](../9-Real-World/1-Applications/README.md) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/for-teachers.md b/translations/bg/for-teachers.md new file mode 100644 index 000000000..3cadbaecf --- /dev/null +++ b/translations/bg/for-teachers.md @@ -0,0 +1,37 @@ + +## За преподаватели + +Искате ли да използвате тази учебна програма във вашата класна стая? Чувствайте се свободни да го направите! + +Всъщност, можете да я използвате директно в GitHub, като използвате GitHub Classroom. + +За да направите това, клонирайте този репозиторий. Ще трябва да създадете репозиторий за всяка отделна лекция, така че ще трябва да извлечете всяка папка в отделен репозиторий. По този начин [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). + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/quiz-app/README.md b/translations/bg/quiz-app/README.md new file mode 100644 index 000000000..8d4028b03 --- /dev/null +++ b/translations/bg/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Тестове + +Тези тестове са предварителни и последващи тестове към лекциите от учебната програма за машинно обучение на https://aka.ms/ml-beginners + +## Настройка на проекта + +``` +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. Конфигурирайте статичното уеб приложение +- Основни настройки: + - Subscription: Изберете вашия Azure абонамент. + - Resource Group: Създайте нова ресурсна група или използвайте съществуваща. + - Name: Дайте име на вашето статично уеб приложение. + - Region: Изберете региона, който е най-близо до вашите потребители. + +- #### Детайли за деплойване: + - Source: Изберете „GitHub“. + - GitHub Account: Авторизирайте Azure да достъпи вашия GitHub акаунт. + - Organization: Изберете вашата GitHub организация. + - Repository: Изберете хранилището, което съдържа вашето статично уеб приложение. + - Branch: Изберете клона, от който искате да деплойвате. + +- #### Детайли за билд: + - Build Presets: Изберете фреймуърка, с който е създадено вашето приложение (например React, Angular, Vue и др.). + - App Location: Укажете папката, която съдържа кода на вашето приложение (например / ако е в корена). + - API Location: Ако имате API, укажете неговото местоположение (по избор). + - Output Location: Укажете папката, където се генерира изходният билд (например build или dist). + +4. Преглед и създаване +Прегледайте настройките си и кликнете върху „Create“. Azure ще създаде необходимите ресурси и ще създаде GitHub Actions workflow във вашето хранилище. + +5. GitHub Actions Workflow +Azure автоматично ще създаде GitHub Actions workflow файл във вашето хранилище (.github/workflows/azure-static-web-apps-.yml). Този workflow ще се грижи за процеса на билд и деплойване. + +6. Мониторинг на деплойването +Отидете в таба „Actions“ във вашето GitHub хранилище. +Трябва да видите работещ workflow. Този workflow ще билдне и деплойне вашето статично уеб приложение в Azure. +След като workflow приключи, вашето приложение ще бъде достъпно на предоставения Azure URL. + +### Примерен файл за workflow + +Ето пример за това как може да изглежда GitHub Actions workflow файлът: +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](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Документация за GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/sketchnotes/LICENSE.md b/translations/bg/sketchnotes/LICENSE.md new file mode 100644 index 000000000..d71cedfe9 --- /dev/null +++ b/translations/bg/sketchnotes/LICENSE.md @@ -0,0 +1,200 @@ + +ПРИЗНАВАНЕ-СПОДЕЛЯНЕ НА УСЛОВИЯТА 4.0 МЕЖДУНАРОДЕН + +======================================================================= + +Корпорацията Creative Commons ("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 Признаване-Споделяне на Условията 4.0 Международен + +Чрез упражняване на Лицензираните права (определени по-долу), Вие приемате и се съгласявате да бъдете обвързани от условията на този Публичен лиценз Creative Commons Признаване-Споделяне на Условията 4.0 Международен ("Публичен лиценз"). Доколкото този Публичен лиценз може да бъде интерпретиран като договор, Вие получавате Лицензираните права в замяна на Вашето приемане на тези условия, а Лицензиарът Ви предоставя тези права в замяна на ползите, които Лицензиарът получава от предоставянето на Лицензирания материал съгласно тези условия. + +Раздел 1 -- Определения. + + a. Адаптиран материал означава материал, подлежащ на авторско право и + подобни права, който е производен или базиран на Лицензирания + материал и в който Лицензираният материал е преведен, променен, + аранжиран, трансформиран или по друг начин модифициран по начин, + изискващ разрешение съгласно авторското право и подобни права, + притежавани от Лицензиара. За целите на този Публичен лиценз, + когато Лицензираният материал е музикално произведение, + изпълнение или звукозапис, Адаптиран материал винаги се създава, + когато Лицензираният материал е синхронизиран във времева връзка + с движещо се изображение. + + b. Лиценз на адаптора означава лиценза, който Вие прилагате към + Вашите авторски права и подобни права във Вашите приноси към + Адаптирания материал съгласно условията на този Публичен лиценз. + + c. Съвместим лиценз BY-SA означава лиценз, изброен на + creativecommons.org/compatiblelicenses, одобрен от Creative + Commons като съществено еквивалентен на този Публичен лиценз. + + d. Авторско право и подобни права означава авторско право и/или + подобни права, тясно свързани с авторското право, включително, + без ограничение, изпълнение, излъчване, звукозапис и права върху + бази данни sui generis, без значение как са обозначени или + категоризирани. За целите на този Публичен лиценз, правата, + посочени в Раздел 2(b)(1)-(2), не са Авторско право и подобни + права. + + e. Ефективни технологични мерки означава мерките, които, при липса + на подходящо разрешение, не могат да бъдат заобиколени съгласно + закони, изпълняващи задълженията по член 11 от Договора за + авторско право на WIPO, приет на 20 декември 1996 г., и/или + подобни международни споразумения. + + f. Изключения и ограничения означава честна употреба, честна сделка + и/или всяко друго изключение или ограничение на Авторското право + и подобни права, което се прилага към Вашето използване на + Лицензирания материал. + + g. Елементи на лиценза означава атрибутите на лиценза, изброени в + името на Публичен лиценз Creative Commons. Елементите на лиценза + на този Публичен лиценз са Признаване и Споделяне на Условията. + + h. Лицензиран материал означава художествено или литературно + произведение, база данни или друг материал, към който Лицензиарът + е приложил този Публичен лиценз. + + i. Лицензирани права означава правата, предоставени Ви съгласно + условията на този Публичен лиценз, които са ограничени до всички + Авторски права и подобни права, които се прилагат към Вашето + използване на Лицензирания материал и които Лицензиарът има + право да лицензира. + + j. Лицензиар означава лицето(ата) или организацията(ите), които + предоставят права съгласно този Публичен лиценз. + + k. Споделяне означава предоставяне на материал на обществеността по + какъвто и да е начин или процес, който изисква разрешение съгласно + Лицензираните права, като възпроизвеждане, публично показване, + публично изпълнение, разпространение, разпространение, + комуникация или внос, както и предоставяне на материал на + обществеността, включително по начини, които позволяват на + членовете на обществеността да достъпят материала от място и в + момент, избрани индивидуално от тях. + + l. Права sui generis върху бази данни означава права, различни от + авторското право, произтичащи от Директива 96/9/EC на Европейския + парламент и Съвета от 11 март 1996 г. относно правната защита на + базите данни, както е изменена и/или заменена, както и други + съществено еквивалентни права навсякъде по света. + + m. Вие означава лицето или организацията, упражняващи Лицензираните + права съгласно този Публичен лиценз. Ваш има съответстващо + значение. +Права, след това базата данни, в която имате права върху базата данни Sui Generis (но не и върху отделните ѝ съдържания), е адаптиран материал, + +включително за целите на Раздел 3(б); и +в. Трябва да спазвате условията в Раздел 3(а), ако споделяте цялото или значителна част от съдържанието на базата данни. + +За избягване на съмнения, този Раздел 4 допълва и не заменя Вашите задължения съгласно този Публичен лиценз, когато Лицензираните права включват други авторски права и подобни права. + +--- + +Раздел 5 -- Отказ от гаранции и ограничаване на отговорността. + +а. ОСВЕН АКО ЛИЦЕНЗОДАТЕЛЯТ НЕ Е ПРЕДПРИЕЛ ДРУГО ОТДЕЛНО, ДОКОЛКОТО Е ВЪЗМОЖНО, ЛИЦЕНЗОДАТЕЛЯТ ПРЕДОСТАВЯ ЛИЦЕНЗИРАНИЯ МАТЕРИАЛ ТАКЪВ, КАКЪВТО Е, И ТАКЪВ, КАКЪВТО Е НАЛИЧЕН, И НЕ ДАВА НИКАКВИ ПРЕДСТАВЯНИЯ ИЛИ ГАРАНЦИИ ОТ КАКЪВТО И ДА Е ВИД ОТНОСНО ЛИЦЕНЗИРАНИЯ МАТЕРИАЛ, БИЛО ТО ИЗРИЧНИ, ПОДРАЗБИРАЩИ СЕ, ЗАКОНОВИ ИЛИ ДРУГИ. ТОВА ВКЛЮЧВА, НО НЕ СЕ ОГРАНИЧАВА ДО, ГАРАНЦИИ ЗА СОБСТВЕНОСТ, ТЪРГОВСКА ПРИГОДНОСТ, ПРИГОДНОСТ ЗА ОПРЕДЕЛЕНА ЦЕЛ, НЕНАРУШЕНИЕ, ЛИПСА НА СКРИТИ ИЛИ ДРУГИ ДЕФЕКТИ, ТОЧНОСТ ИЛИ НАЛИЧИЕ ИЛИ ЛИПСА НА ГРЕШКИ, НЕЗАВИСИМО ДАЛИ СА ИЗВЕСТНИ ИЛИ МОГАТ ДА БЪДАТ ОТКРИТИ. КОГАТО ОТКАЗИТЕ ОТ ГАРАНЦИИ НЕ СА ПОЗВОЛЕНИ ИЗЦЯЛО ИЛИ ЧАСТИЧНО, ТОЗИ ОТКАЗ МОЖЕ ДА НЕ СЕ ПРИЛАГА ЗА ВАС. + +б. ДОКОЛКОТО Е ВЪЗМОЖНО, ЛИЦЕНЗОДАТЕЛЯТ В НИКАКЪВ СЛУЧАЙ НЯМА ДА БЪДЕ ОТГОВОРЕН ПРЕД ВАС ПО КАКВАТО И ДА Е ПРАВНА ТЕОРИЯ (ВКЛЮЧИТЕЛНО, НО НЕ СЕ ОГРАНИЧАВА ДО, НЕБРЕЖНОСТ) ИЛИ ПО ДРУГ НАЧИН ЗА КАКВИТО И ДА Е ПРЕКИ, СПЕЦИАЛНИ, НЕПРЕКИ, СЛУЧАЙНИ, ПОСЛЕДВАЩИ, НАКАЗАТЕЛНИ, ПРИМЕРНИ ИЛИ ДРУГИ ЗАГУБИ, РАЗХОДИ, РАЗХОДИ ИЛИ ЩЕТИ, ПРОИЗТИЧАЩИ ОТ ТОЗИ ПУБЛИЧЕН ЛИЦЕНЗ ИЛИ ИЗПОЛЗВАНЕТО НА ЛИЦЕНЗИРАНИЯ МАТЕРИАЛ, ДОРИ АКО ЛИЦЕНЗОДАТЕЛЯТ Е БИЛ УВЕДОМЕН ЗА ВЪЗМОЖНОСТТА ЗА ТАКИВА ЗАГУБИ, РАЗХОДИ, РАЗХОДИ ИЛИ ЩЕТИ. КОГАТО ОГРАНИЧЕНИЯТА НА ОТГОВОРНОСТТА НЕ СА ПОЗВОЛЕНИ ИЗЦЯЛО ИЛИ ЧАСТИЧНО, ТОВА ОГРАНИЧЕНИЕ МОЖЕ ДА НЕ СЕ ПРИЛАГА ЗА ВАС. + +в. Отказът от гаранции и ограничаването на отговорността, посочени по-горе, трябва да се тълкуват по начин, който, доколкото е възможно, най-близко се доближава до абсолютен отказ и отказ от всякаква отговорност. + +--- + +Раздел 6 -- Срок и прекратяване. + +а. Този Публичен лиценз се прилага за срока на авторските права и подобните права, лицензирани тук. Въпреки това, ако не спазвате този Публичен лиценз, Вашите права съгласно този Публичен лиценз се прекратяват автоматично. + +б. Когато Вашето право да използвате Лицензирания материал е прекратено съгласно Раздел 6(а), то се възстановява: + +1. автоматично от датата, на която нарушението е поправено, при условие че е поправено в рамките на 30 дни от откриването на нарушението; или +2. чрез изрично възстановяване от Лицензодателя. + +За избягване на съмнения, този Раздел 6(б) не засяга никакво право, което Лицензодателят може да има за търсене на средства за защита за Вашите нарушения на този Публичен лиценз. + +в. За избягване на съмнения, Лицензодателят може също да предлага Лицензирания материал при отделни условия или да спре разпространението на Лицензирания материал по всяко време; въпреки това, това няма да прекрати този Публичен лиценз. + +г. Раздели 1, 5, 6, 7 и 8 остават в сила след прекратяването на този Публичен лиценз. + +--- + +Раздел 7 -- Други условия. + +а. Лицензодателят не е обвързан от никакви допълнителни или различни условия, съобщени от Вас, освен ако не е изрично съгласен. + +б. Всякакви договорености, разбирания или споразумения относно Лицензирания материал, които не са посочени тук, са отделни и независими от условията на този Публичен лиценз. + +--- + +Раздел 8 -- Тълкуване. + +а. За избягване на съмнения, този Публичен лиценз не намалява, ограничава, възпрепятства или налага условия върху каквото и да е използване на Лицензирания материал, което може законно да бъде направено без разрешение съгласно този Публичен лиценз. + +б. Доколкото е възможно, ако някоя разпоредба на този Публичен лиценз се счита за неприложима, тя автоматично се реформира до минималната степен, необходима за да стане приложима. Ако разпоредбата не може да бъде реформирана, тя се отделя от този Публичен лиценз, без да се засяга приложимостта на останалите условия. + +в. Никакво условие на този Публичен лиценз няма да бъде отказано и никакво неспазване няма да бъде прието, освен ако не е изрично съгласувано от Лицензодателя. + +г. Нищо в този Публичен лиценз не представлява или може да бъде тълкувано като ограничение или отказ от каквито и да е привилегии и имунитети, които се прилагат за Лицензодателя или Вас, включително от правните процеси на която и да е юрисдикция или власт. + +--- + +======================================================================= + +Creative Commons не е страна по своите публични лицензи. Въпреки това, Creative Commons може да избере да приложи един от своите публични лицензи към материал, който публикува, и в тези случаи ще се счита за „Лицензодател“. Текстът на публичните лицензи на Creative Commons е посветен на общественото достояние съгласно CC0 Public Domain Dedication. Освен за ограничената цел да се посочи, че материалът се споделя съгласно публичен лиценз на Creative Commons или както е разрешено от политиките на Creative Commons, публикувани на creativecommons.org/policies, Creative Commons не разрешава използването на търговската марка "Creative Commons" или друга търговска марка или лого на Creative Commons без предварително писмено съгласие, включително, но не само, във връзка с каквито и да е неразрешени модификации на който и да е от публичните лицензи или други договорености, разбирания или споразумения относно използването на лицензиран материал. За избягване на съмнения, този параграф не е част от публичните лицензи. + +Creative Commons може да бъде контактуван на creativecommons.org. + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bg/sketchnotes/README.md b/translations/bg/sketchnotes/README.md new file mode 100644 index 000000000..3414f3886 --- /dev/null +++ b/translations/bg/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Всички скицови бележки от учебната програма могат да бъдат изтеглени тук. + +🖨 За печат с висока резолюция, 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/) + +--- + +**Отказ от отговорност**: +Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Ние не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод. \ No newline at end of file diff --git a/translations/bn/1-Introduction/1-intro-to-ML/README.md b/translations/bn/1-Introduction/1-intro-to-ML/README.md index fcc0fad4d..354448c7d 100644 --- a/translations/bn/1-Introduction/1-intro-to-ML/README.md +++ b/translations/bn/1-Introduction/1-intro-to-ML/README.md @@ -1,150 +1,152 @@ # মেশিন লার্নিং পরিচিতি -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) --- -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - মেশিন লার্নিং পরিচিতি](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "শিক্ষার্থীদের জন্য মেশিন লার্নিং - মেশিন লার্নিং পরিচিতি") +[![শুরু থেকে মেশিন লার্নিং - শিক্ষার্থীদের জন্য মেশিন লার্নিং পরিচিতি](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "শুরু থেকে মেশিন লার্নিং - শিক্ষার্থীদের জন্য মেশিন লার্নিং পরিচিতি") > 🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের একটি সংক্ষিপ্ত ভিডিও দেখার জন্য। -এই কোর্সে আপনাকে স্বাগতম! এটি ক্লাসিক্যাল মেশিন লার্নিং-এর জন্য একটি প্রাথমিক কোর্স। আপনি যদি এই বিষয়ে একেবারে নতুন হন বা একজন অভিজ্ঞ মেশিন লার্নিং প্র্যাকটিশনার হিসেবে আপনার জ্ঞান ঝালাই করতে চান, আমরা আনন্দিত যে আপনি আমাদের সাথে যোগ দিয়েছেন। আমরা একটি বন্ধুত্বপূর্ণ শিক্ষার পরিবেশ তৈরি করতে চাই এবং আপনার [মতামত](https://github.com/microsoft/ML-For-Beginners/discussions) গ্রহণ করতে আগ্রহী। +শুরু থেকে মেশিন লার্নিং নিয়ে এই কোর্সে আপনাকে স্বাগতম! আপনি যদি এই বিষয়ের সম্পূর্ণ নতুন শিক্ষার্থী হন, অথবা একজন অভিজ্ঞ মেশিন লার্নিং প্র্যাকটিশনার হিসেবে কিছু বিষয় ঝালাই করতে চান, আমরা আপনাকে এখানে পেয়ে আনন্দিত। আমরা চাই একটি বন্ধুত্বপূর্ণ শিক্ষার পরিবেশ তৈরি করতে এবং আপনার [মতামত](https://github.com/microsoft/ML-For-Beginners/discussions) মূল্যায়ন, উত্তর প্রদান এবং অন্তর্ভুক্ত করতে। [![মেশিন লার্নিং পরিচিতি](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "মেশিন লার্নিং পরিচিতি") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: MIT-এর জন গুটটাগ মেশিন লার্নিং পরিচয় করিয়ে দিচ্ছেন। +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: MIT-এর জন গুটাগ মেশিন লার্নিং পরিচিতি প্রদান করছেন --- ## মেশিন লার্নিং শুরু করা -এই পাঠক্রম শুরু করার আগে, আপনার কম্পিউটারটি প্রস্তুত এবং লোকাল নোটবুক চালানোর জন্য কনফিগার করা থাকা প্রয়োজন। +এই পাঠ্যক্রম শুরু করার আগে, আপনার কম্পিউটারটি প্রস্তুত করে নোটবুকগুলো লোকালভাবে চালানোর জন্য প্রস্তুত করতে হবে। -- **এই ভিডিওগুলির সাহায্যে আপনার মেশিন কনফিগার করুন**। [পাইথন ইনস্টল করার পদ্ধতি](https://youtu.be/CXZYvNRIAKM) এবং [ডেভেলপমেন্টের জন্য একটি টেক্সট এডিটর সেটআপ করার পদ্ধতি](https://youtu.be/EU8eayHWoZg) শিখুন। -- **পাইথন শিখুন**। [পাইথন](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) সম্পর্কে একটি মৌলিক ধারণা থাকা প্রয়োজন, যা এই কোর্সে ব্যবহৃত একটি গুরুত্বপূর্ণ প্রোগ্রামিং ভাষা। -- **নোড.জেএস এবং জাভাস্ক্রিপ্ট শিখুন**। আমরা এই কোর্সে ওয়েব অ্যাপ তৈরি করার সময় কয়েকবার জাভাস্ক্রিপ্ট ব্যবহার করব, তাই [নোড](https://nodejs.org) এবং [এনপিএম](https://www.npmjs.com/) ইনস্টল করুন এবং [ভিজ্যুয়াল স্টুডিও কোড](https://code.visualstudio.com/) প্রস্তুত রাখুন। -- **গিটহাব অ্যাকাউন্ট তৈরি করুন**। যদি আপনার ইতিমধ্যে একটি গিটহাব অ্যাকাউন্ট না থাকে, তাহলে একটি তৈরি করুন এবং এই পাঠক্রমটি ফর্ক করুন। (আমাদের একটি স্টার দিতে ভুলবেন না 😊) -- **স্কিকিট-লার্ন এক্সপ্লোর করুন**। [স্কিকিট-লার্ন](https://scikit-learn.org/stable/user_guide.html) সম্পর্কে জানুন, যা আমরা এই পাঠে ব্যবহার করব। +- **আপনার মেশিন কনফিগার করুন এই ভিডিওগুলোর সাহায্যে**। [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.bn.png) +![মেশিন লার্নিং হাইপ কার্ভ](../../../../1-Introduction/1-intro-to-ML/images/hype.png) -> গুগল ট্রেন্ডস 'মেশিন লার্নিং' শব্দটির সাম্প্রতিক 'হাইপ কার্ভ' দেখাচ্ছে। +> Google Trends দেখাচ্ছে 'মেশিন লার্নিং' শব্দটির সাম্প্রতিক 'হাইপ কার্ভ' --- -## একটি রহস্যময় মহাবিশ্ব +## একটি রহস্যময় মহাবিশ্ব -আমরা একটি রহস্যময় মহাবিশ্বে বাস করি। স্টিফেন হকিং, আলবার্ট আইনস্টাইন এবং আরও অনেক মহান বিজ্ঞানী তাদের জীবন উৎসর্গ করেছেন এই পৃথিবীর রহস্য উদঘাটনের জন্য। এটি মানুষের শেখার স্বভাব: একটি শিশু নতুন জিনিস শেখে এবং ধীরে ধীরে তার চারপাশের পৃথিবীর গঠন বুঝতে শেখে। +আমরা একটি মহাবিশ্বে বাস করি যা রহস্যে ভরপুর। স্টিফেন হকিং, আলবার্ট আইনস্টাইন এবং আরও অনেক মহান বিজ্ঞানী তাদের জীবন উৎসর্গ করেছেন এমন তথ্য খুঁজে বের করতে যা আমাদের চারপাশের পৃথিবীর রহস্য উন্মোচন করে। এটি মানুষের শেখার স্বভাব: একটি শিশু নতুন জিনিস শেখে এবং তাদের চারপাশের পৃথিবীর গঠন সম্পর্কে জ্ঞান অর্জন করে বছর বছর ধরে। --- ## শিশুর মস্তিষ্ক -একটি শিশুর মস্তিষ্ক এবং ইন্দ্রিয় তার চারপাশের তথ্য গ্রহণ করে এবং ধীরে ধীরে জীবনের লুকানো প্যাটার্নগুলি শিখে। এই শেখার প্রক্রিয়া মানুষকে পৃথিবীর সবচেয়ে উন্নত জীব হিসেবে গড়ে তোলে। লুকানো প্যাটার্ন আবিষ্কার করে এবং সেগুলির উপর ভিত্তি করে উদ্ভাবন করে আমরা আমাদের জীবনকে ক্রমাগত উন্নত করি। এই শেখার ক্ষমতা এবং বিকাশের সক্ষমতা একটি ধারণার সাথে সম্পর্কিত, যাকে [মস্তিষ্কের প্লাস্টিসিটি](https://www.simplypsychology.org/brain-plasticity.html) বলা হয়। আমরা মানুষের মস্তিষ্কের শেখার প্রক্রিয়া এবং মেশিন লার্নিংয়ের ধারণার মধ্যে কিছু প্রেরণাদায়ক সাদৃশ্য খুঁজে পেতে পারি। +একটি শিশুর মস্তিষ্ক এবং ইন্দ্রিয় তাদের চারপাশের তথ্য গ্রহণ করে এবং ধীরে ধীরে জীবনের লুকানো প্যাটার্নগুলো শিখে যা তাদের শেখা প্যাটার্নগুলো চিহ্নিত করার জন্য যৌক্তিক নিয়ম তৈরি করতে সাহায্য করে। মানুষের মস্তিষ্কের শেখার প্রক্রিয়া মানুষকে এই পৃথিবীর সবচেয়ে উন্নত জীব হিসেবে তৈরি করে। লুকানো প্যাটার্নগুলো আবিষ্কার করে ক্রমাগত শেখা এবং তারপর সেই প্যাটার্নগুলোতে উদ্ভাবন করা আমাদেরকে আমাদের জীবনের পুরো সময় ধরে আরও উন্নত হতে সাহায্য করে। এই শেখার ক্ষমতা এবং বিকাশের সক্ষমতা একটি ধারণার সাথে সম্পর্কিত যাকে বলা হয় [মস্তিষ্কের প্লাস্টিসিটি](https://www.simplypsychology.org/brain-plasticity.html)। উপরিভাগে, আমরা মানুষের মস্তিষ্কের শেখার প্রক্রিয়া এবং মেশিন লার্নিংয়ের ধারণার মধ্যে কিছু অনুপ্রেরণামূলক মিল দেখতে পারি। --- ## মানুষের মস্তিষ্ক -[মানুষের মস্তিষ্ক](https://www.livescience.com/29365-human-brain.html) বাস্তব জগত থেকে তথ্য গ্রহণ করে, সেই তথ্য প্রক্রিয়া করে, যৌক্তিক সিদ্ধান্ত নেয় এবং পরিস্থিতি অনুযায়ী নির্দিষ্ট কাজ সম্পাদন করে। এটিকে আমরা বুদ্ধিমত্তার সাথে আচরণ বলা হয়। যখন আমরা এই বুদ্ধিমত্তার আচরণের একটি অনুকরণ মেশিনে প্রোগ্রাম করি, তখন তাকে কৃত্রিম বুদ্ধিমত্তা (AI) বলা হয়। +[মানুষের মস্তিষ্ক](https://www.livescience.com/29365-human-brain.html) বাস্তব পৃথিবী থেকে তথ্য গ্রহণ করে, প্রাপ্ত তথ্য প্রক্রিয়া করে, যৌক্তিক সিদ্ধান্ত নেয় এবং পরিস্থিতির উপর ভিত্তি করে নির্দিষ্ট কাজ সম্পাদন করে। এটিকে আমরা বুদ্ধিমত্তার সাথে আচরণ করা বলি। যখন আমরা একটি মেশিনে বুদ্ধিমত্তার আচরণের প্রক্রিয়ার অনুকরণ প্রোগ্রাম করি, তখন এটিকে কৃত্রিম বুদ্ধিমত্তা (AI) বলা হয়। --- ## কিছু পরিভাষা -যদিও পরিভাষাগুলি বিভ্রান্তিকর হতে পারে, মেশিন লার্নিং (ML) কৃত্রিম বুদ্ধিমত্তার একটি গুরুত্বপূর্ণ উপসেট। **ML বিশেষ অ্যালগরিদম ব্যবহার করে তথ্য থেকে অর্থবহ তথ্য আবিষ্কার এবং লুকানো প্যাটার্ন খুঁজে বের করার উপর দৃষ্টি নিবদ্ধ করে, যা যৌক্তিক সিদ্ধান্ত গ্রহণ প্রক্রিয়াকে সমর্থন করে।** +যদিও শব্দগুলো বিভ্রান্তিকর হতে পারে, মেশিন লার্নিং (ML) কৃত্রিম বুদ্ধিমত্তার একটি গুরুত্বপূর্ণ উপসেট। **ML বিশেষ অ্যালগরিদম ব্যবহার করে প্রাপ্ত তথ্য থেকে অর্থপূর্ণ তথ্য এবং লুকানো প্যাটার্ন খুঁজে বের করার মাধ্যমে যৌক্তিক সিদ্ধান্ত গ্রহণ প্রক্রিয়াকে সমর্থন করার উপর গুরুত্ব দেয়।** --- -## এআই, এমএল, ডিপ লার্নিং +## AI, ML, ডিপ লার্নিং -![এআই, এমএল, ডিপ লার্নিং, ডেটা সায়েন্স](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.bn.png) +![AI, ML, ডিপ লার্নিং, ডেটা সায়েন্স](../../../../1-Introduction/1-intro-to-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) দ্বারা অনুপ্রাণিত। +> AI, ML, ডিপ লার্নিং এবং ডেটা সায়েন্সের মধ্যে সম্পর্ক দেখানো একটি ডায়াগ্রাম। [জেন লুপার](https://twitter.com/jenlooper) দ্বারা তৈরি ইনফোগ্রাফিক, [এই গ্রাফিক](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) দ্বারা অনুপ্রাণিত। --- -## কাভার করার বিষয়বস্তু +## কাভার করার ধারণাগুলো -এই পাঠক্রমে, আমরা শুধুমাত্র মেশিন লার্নিংয়ের মৌলিক ধারণাগুলি কভার করব যা একজন শিক্ষার্থীর জানা প্রয়োজন। আমরা 'ক্লাসিক্যাল মেশিন লার্নিং' শেখাব, প্রধানত স্কিকিট-লার্ন ব্যবহার করে। কৃত্রিম বুদ্ধিমত্তা বা ডিপ লার্নিংয়ের বিস্তৃত ধারণাগুলি বোঝার জন্য মেশিন লার্নিংয়ের একটি শক্তিশালী মৌলিক জ্ঞান অপরিহার্য, এবং আমরা এটি এখানে প্রদান করতে চাই। +এই পাঠ্যক্রমে, আমরা শুধুমাত্র মেশিন লার্নিংয়ের মৌলিক ধারণাগুলো কাভার করব যা একজন শিক্ষার্থীর জানা প্রয়োজন। আমরা 'ক্লাসিকাল মেশিন লার্নিং' নিয়ে আলোচনা করব, প্রধানত Scikit-learn ব্যবহার করে, একটি চমৎকার লাইব্রেরি যা অনেক শিক্ষার্থী মৌলিক বিষয়গুলো শেখার জন্য ব্যবহার করে। কৃত্রিম বুদ্ধিমত্তা বা ডিপ লার্নিংয়ের বিস্তৃত ধারণাগুলো বুঝতে, মেশিন লার্নিংয়ের শক্তিশালী মৌলিক জ্ঞান অপরিহার্য, এবং আমরা এটি এখানে প্রদান করতে চাই। --- ## এই কোর্সে আপনি শিখবেন: -- মেশিন লার্নিংয়ের মৌলিক ধারণা -- মেশিন লার্নিংয়ের ইতিহাস +- মেশিন লার্নিংয়ের মৌলিক ধারণা +- মেশিন লার্নিংয়ের ইতিহাস - মেশিন লার্নিং এবং ন্যায্যতা -- রিগ্রেশন টেকনিক -- ক্লাসিফিকেশন টেকনিক -- ক্লাস্টারিং টেকনিক -- প্রাকৃতিক ভাষা প্রক্রিয়াকরণ -- টাইম সিরিজ পূর্বাভাস +- রিগ্রেশন মেশিন লার্নিং কৌশল +- ক্লাসিফিকেশন মেশিন লার্নিং কৌশল +- ক্লাস্টারিং মেশিন লার্নিং কৌশল +- প্রাকৃতিক ভাষা প্রক্রিয়াকরণ মেশিন লার্নিং কৌশল +- টাইম সিরিজ পূর্বাভাস মেশিন লার্নিং কৌশল - রিইনফোর্সমেন্ট লার্নিং -- বাস্তব জীবনের প্রয়োগ +- মেশিন লার্নিংয়ের বাস্তব জীবনের প্রয়োগ --- -## আমরা যা কভার করব না +## আমরা যা কাভার করব না - ডিপ লার্নিং -- নিউরাল নেটওয়ার্ক -- এআই +- নিউরাল নেটওয়ার্ক +- AI -শেখার অভিজ্ঞতাকে সহজতর করার জন্য, আমরা নিউরাল নেটওয়ার্ক এবং ডিপ লার্নিংয়ের জটিলতাগুলি এড়িয়ে যাব। আমরা একটি আলাদা পাঠক্রমে এআই এবং ডেটা সায়েন্সের উপর আলোকপাত করব। +শিক্ষার অভিজ্ঞতা আরও ভালো করার জন্য, আমরা নিউরাল নেটওয়ার্কের জটিলতা, 'ডিপ লার্নিং' - নিউরাল নেটওয়ার্ক ব্যবহার করে বহু-স্তরযুক্ত মডেল তৈরি - এবং AI এড়িয়ে যাব, যা আমরা একটি ভিন্ন পাঠ্যক্রমে আলোচনা করব। আমরা একটি আসন্ন ডেটা সায়েন্স পাঠ্যক্রমও প্রদান করব যা এই বৃহত্তর ক্ষেত্রের সেই দিকটিতে মনোযোগ দেবে। --- -## কেন মেশিন লার্নিং পড়বেন? +## কেন মেশিন লার্নিং পড়বেন? -সিস্টেমের দৃষ্টিকোণ থেকে, মেশিন লার্নিং এমন স্বয়ংক্রিয় সিস্টেম তৈরি করা যা ডেটা থেকে লুকানো প্যাটার্ন শিখে বুদ্ধিমান সিদ্ধান্ত গ্রহণে সহায়তা করে। +সিস্টেমের দৃষ্টিকোণ থেকে, মেশিন লার্নিংকে সংজ্ঞায়িত করা হয় এমন স্বয়ংক্রিয় সিস্টেম তৈরি হিসেবে যা ডেটা থেকে লুকানো প্যাটার্ন শিখতে পারে এবং বুদ্ধিমত্তার সিদ্ধান্ত গ্রহণে সহায়তা করতে পারে। -✅ এক মিনিট চিন্তা করুন কেন একটি ব্যবসা মেশিন লার্নিং কৌশল ব্যবহার করতে চাইবে, কঠোর কোডেড নিয়ম-ভিত্তিক ইঞ্জিন তৈরির পরিবর্তে। +এই অনুপ্রেরণা মানুষের মস্তিষ্ক কীভাবে বাইরের পৃথিবী থেকে প্রাপ্ত ডেটার উপর ভিত্তি করে কিছু জিনিস শিখে তার সাথে সামান্যভাবে সম্পর্কিত। + +✅ এক মিনিট চিন্তা করুন কেন একটি ব্যবসা মেশিন লার্নিং কৌশল ব্যবহার করতে চাইবে, কঠোরভাবে কোড করা নিয়ম-ভিত্তিক ইঞ্জিন তৈরি করার পরিবর্তে। --- -## মেশিন লার্নিংয়ের প্রয়োগ +## মেশিন লার্নিংয়ের প্রয়োগ -মেশিন লার্নিংয়ের প্রয়োগ এখন প্রায় সর্বত্র, এবং এটি আমাদের স্মার্টফোন, সংযুক্ত ডিভাইস এবং অন্যান্য সিস্টেম দ্বারা উৎপন্ন ডেটার মতো সর্বব্যাপী। মেশিন লার্নিং অ্যালগরিদমের বিশাল সম্ভাবনা বিবেচনা করে, গবেষকরা বাস্তব জীবনের বহু-মাত্রিক এবং বহু-শাখার সমস্যাগুলি সমাধানের জন্য এর ক্ষমতা অন্বেষণ করছেন। +মেশিন লার্নিংয়ের প্রয়োগ এখন প্রায় সর্বত্র, এবং আমাদের সমাজে প্রবাহিত ডেটার মতোই সর্বব্যাপী, যা আমাদের স্মার্টফোন, সংযুক্ত ডিভাইস এবং অন্যান্য সিস্টেম দ্বারা তৈরি হয়। সর্বাধুনিক মেশিন লার্নিং অ্যালগরিদমের বিশাল সম্ভাবনা বিবেচনা করে, গবেষকরা তাদের সক্ষমতা বহুমাত্রিক এবং বহুবিধ বাস্তব জীবনের সমস্যাগুলো সমাধান করতে পরীক্ষা করছেন, এবং ইতিবাচক ফলাফল পাচ্ছেন। --- -## প্রয়োগকৃত মেশিন লার্নিংয়ের উদাহরণ +## প্রয়োগকৃত মেশিন লার্নিংয়ের উদাহরণ -**আপনি বিভিন্ন উপায়ে মেশিন লার্নিং ব্যবহার করতে পারেন**: +**আপনি মেশিন লার্নিং বিভিন্নভাবে ব্যবহার করতে পারেন**: -- রোগীর মেডিকেল ইতিহাস থেকে রোগের সম্ভাবনা পূর্বাভাস দিতে। -- আবহাওয়ার ডেটা ব্যবহার করে আবহাওয়ার ঘটনা পূর্বাভাস দিতে। +- রোগের সম্ভাবনা পূর্বাভাস দিতে রোগীর মেডিকেল ইতিহাস বা রিপোর্ট থেকে। +- আবহাওয়ার ডেটা ব্যবহার করে আবহাওয়া পূর্বাভাস দিতে। - একটি টেক্সটের অনুভূতি বুঝতে। -- ভুয়া খবর শনাক্ত করতে এবং প্রোপাগান্ডা ছড়ানো বন্ধ করতে। +- ভুয়া খবর শনাক্ত করতে এবং প্রোপাগান্ডা ছড়ানো বন্ধ করতে। -অর্থনীতি, ভূবিজ্ঞান, মহাকাশ অনুসন্ধান, বায়োমেডিকেল ইঞ্জিনিয়ারিং, কগনিটিভ সায়েন্স এবং এমনকি মানবিক শাখাগুলিও মেশিন লার্নিং ব্যবহার করছে তাদের ডেটা-প্রসেসিং-নির্ভর সমস্যাগুলি সমাধানের জন্য। +অর্থনীতি, ভূবিজ্ঞান, মহাকাশ অনুসন্ধান, বায়োমেডিক্যাল ইঞ্জিনিয়ারিং, কগনিটিভ সায়েন্স এবং এমনকি মানবিক ক্ষেত্রগুলো মেশিন লার্নিংকে তাদের ক্ষেত্রের জটিল, ডেটা-প্রক্রিয়াকরণ ভারী সমস্যাগুলো সমাধান করতে গ্রহণ করেছে। --- ## উপসংহার -মেশিন লার্নিং বাস্তব বা তৈরি ডেটা থেকে অর্থবহ অন্তর্দৃষ্টি আবিষ্কার করার প্রক্রিয়াকে স্বয়ংক্রিয় করে। এটি ব্যবসা, স্বাস্থ্য এবং আর্থিক প্রয়োগ সহ বিভিন্ন ক্ষেত্রে অত্যন্ত মূল্যবান প্রমাণিত হয়েছে। +মেশিন লার্নিং বাস্তব বা তৈরি ডেটা থেকে অর্থপূর্ণ অন্তর্দৃষ্টি খুঁজে বের করার মাধ্যমে প্যাটার্ন আবিষ্কারের প্রক্রিয়াকে স্বয়ংক্রিয় করে। এটি ব্যবসা, স্বাস্থ্য এবং আর্থিক প্রয়োগসহ অন্যান্য ক্ষেত্রে অত্যন্ত মূল্যবান প্রমাণিত হয়েছে। -অদূর ভবিষ্যতে, মেশিন লার্নিংয়ের মৌলিক বিষয়গুলি বোঝা যেকোনো ক্ষেত্রের মানুষের জন্য অপরিহার্য হয়ে উঠবে এর ব্যাপক গ্রহণযোগ্যতার কারণে। +অদূর ভবিষ্যতে, মেশিন লার্নিংয়ের মৌলিক বিষয়গুলো বোঝা যেকোনো ক্ষেত্রের মানুষের জন্য অত্যাবশ্যক হয়ে উঠবে এর ব্যাপক গ্রহণযোগ্যতার কারণে। --- # 🚀 চ্যালেঞ্জ -কাগজে বা একটি অনলাইন অ্যাপ ব্যবহার করে ([Excalidraw](https://excalidraw.com/)), এআই, এমএল, ডিপ লার্নিং এবং ডেটা সায়েন্সের মধ্যে পার্থক্যগুলি আপনার বোঝাপড়া আঁকুন। প্রতিটি কৌশল কোন ধরনের সমস্যার জন্য উপযুক্ত তা নিয়ে কিছু ধারণা যোগ করুন। +কাগজে বা [Excalidraw](https://excalidraw.com/) এর মতো একটি অনলাইন অ্যাপ ব্যবহার করে AI, ML, ডিপ লার্নিং এবং ডেটা সায়েন্সের মধ্যে পার্থক্য সম্পর্কে আপনার ধারণা স্কেচ করুন। প্রতিটি কৌশল কোন ধরনের সমস্যার সমাধানে ভালো তা নিয়ে কিছু ধারণা যোগ করুন। -# [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) --- -# পুনরায় দেখুন এবং স্ব-অধ্যয়ন +# পর্যালোচনা এবং স্ব-অধ্যয়ন -ক্লাউডে কীভাবে মেশিন লার্নিং অ্যালগরিদম নিয়ে কাজ করবেন তা শিখতে এই [লার্নিং পাথ](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott) অনুসরণ করুন। +ক্লাউডে কীভাবে ML অ্যালগরিদম নিয়ে কাজ করতে পারেন তা শিখতে এই [Learning Path](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) নিন। +মেশিন লার্নিংয়ের মৌলিক বিষয়গুলো সম্পর্কে জানতে একটি [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) গ্রহণ করুন। --- # অ্যাসাইনমেন্ট @@ -154,4 +156,4 @@ CO_OP_TRANSLATOR_METADATA: --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় লেখা সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/1-Introduction/2-history-of-ML/README.md b/translations/bn/1-Introduction/2-history-of-ML/README.md index 7786992d2..39c392899 100644 --- a/translations/bn/1-Introduction/2-history-of-ML/README.md +++ b/translations/bn/1-Introduction/2-history-of-ML/README.md @@ -1,137 +1,137 @@ # মেশিন লার্নিং এর ইতিহাস -![মেশিন লার্নিং এর ইতিহাসের সারাংশ একটি স্কেচনোটে](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.bn.png) +![মেশিন লার্নিং এর ইতিহাসের সারাংশ একটি স্কেচনোটে](../../../../sketchnotes/ml-history.png) > স্কেচনোট: [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) --- -[![শুরু থেকে মেশিন লার্নিং - মেশিন লার্নিং এর ইতিহাস](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "শুরু থেকে মেশিন লার্নিং - মেশিন লার্নিং এর ইতিহাস") +[![মেশিন লার্নিং এর ইতিহাস - শিক্ষার্থীদের জন্য](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "মেশিন লার্নিং এর ইতিহাস - শিক্ষার্থীদের জন্য") > 🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের সংক্ষিপ্ত ভিডিও দেখার জন্য। এই পাঠে আমরা মেশিন লার্নিং এবং কৃত্রিম বুদ্ধিমত্তার ইতিহাসের গুরুত্বপূর্ণ মাইলফলকগুলো নিয়ে আলোচনা করব। -কৃত্রিম বুদ্ধিমত্তা (AI) এর ইতিহাস মেশিন লার্নিং এর ইতিহাসের সাথে গভীরভাবে জড়িত, কারণ ML এর ভিত্তি গড়ে তোলা অ্যালগরিদম এবং কম্পিউটেশনাল অগ্রগতি AI এর বিকাশে সহায়তা করেছে। মনে রাখা গুরুত্বপূর্ণ যে, যদিও এই ক্ষেত্রগুলো ১৯৫০ এর দশকে পৃথক গবেষণার ক্ষেত্র হিসেবে গঠিত হতে শুরু করে, তবুও [অ্যালগরিদমিক, পরিসংখ্যানগত, গাণিতিক, কম্পিউটেশনাল এবং প্রযুক্তিগত আবিষ্কার](https://wikipedia.org/wiki/Timeline_of_machine_learning) এই সময়ের আগেই শুরু হয়েছিল এবং এর সাথে মিশে গিয়েছিল। আসলে, মানুষ [শত শত বছর ধরে](https://wikipedia.org/wiki/History_of_artificial_intelligence) এই প্রশ্নগুলো নিয়ে চিন্তা করে আসছে: এই নিবন্ধটি 'চিন্তা করতে সক্ষম যন্ত্র' ধারণার ঐতিহাসিক বুদ্ধিবৃত্তিক ভিত্তি নিয়ে আলোচনা করে। +কৃত্রিম বুদ্ধিমত্তা (AI) এর ইতিহাস মেশিন লার্নিং এর ইতিহাসের সাথে গভীরভাবে জড়িত, কারণ ML এর অ্যালগরিদম এবং কম্পিউটেশনাল অগ্রগতি AI এর বিকাশে ভূমিকা রেখেছে। মনে রাখা দরকার যে, যদিও এই ক্ষেত্রগুলো ১৯৫০ এর দশকে পৃথক গবেষণা ক্ষেত্র হিসেবে গঠিত হতে শুরু করে, গুরুত্বপূর্ণ [অ্যালগরিদমিক, পরিসংখ্যানগত, গাণিতিক, কম্পিউটেশনাল এবং প্রযুক্তিগত আবিষ্কার](https://wikipedia.org/wiki/Timeline_of_machine_learning) এই সময়ের আগেই হয়েছিল এবং এর সাথে মিশে গিয়েছিল। আসলে, মানুষ [শত শত বছর ধরে](https://wikipedia.org/wiki/History_of_artificial_intelligence) এই প্রশ্নগুলো নিয়ে চিন্তা করে আসছে: এই নিবন্ধটি 'চিন্তা করতে পারে এমন মেশিন' ধারণার বুদ্ধিবৃত্তিক ভিত্তি নিয়ে আলোচনা করে। --- ## উল্লেখযোগ্য আবিষ্কার -- ১৭৬৩, ১৮১২ [বায়েস থিওরেম](https://wikipedia.org/wiki/Bayes%27_theorem) এবং এর পূর্বসূরী। এই থিওরেম এবং এর প্রয়োগ অনুমানের ভিত্তি তৈরি করে, যা পূর্বের জ্ঞান থেকে কোনো ঘটনার সম্ভাবনা বর্ণনা করে। -- ১৮০৫ [লিস্ট স্কয়ার থিওরি](https://wikipedia.org/wiki/Least_squares) ফরাসি গণিতবিদ Adrien-Marie Legendre দ্বারা। এই থিওরি, যা আপনি আমাদের রিগ্রেশন ইউনিটে শিখবেন, ডেটা ফিটিংয়ে সহায়তা করে। +- ১৭৬৩, ১৮১২ [বেইজ থিওরেম](https://wikipedia.org/wiki/Bayes%27_theorem) এবং এর পূর্বসূরী। এই থিওরেম এবং এর প্রয়োগ পূর্ব জ্ঞান ভিত্তিক কোনো ঘটনার সম্ভাবনা বর্ণনা করে। +- ১৮০৫ [লিস্ট স্কয়ার থিওরি](https://wikipedia.org/wiki/Least_squares) ফরাসি গণিতবিদ Adrien-Marie Legendre দ্বারা। এই থিওরি, যা আপনি আমাদের রিগ্রেশন ইউনিটে শিখবেন, ডেটা ফিটিংয়ে সাহায্য করে। - ১৯১৩ [মারকভ চেইন](https://wikipedia.org/wiki/Markov_chain), রাশিয়ান গণিতবিদ Andrey Markov এর নামে নামকরণ করা হয়েছে, যা পূর্ববর্তী অবস্থার ভিত্তিতে সম্ভাব্য ঘটনার একটি ক্রম বর্ণনা করে। -- ১৯৫৭ [পারসেপট্রন](https://wikipedia.org/wiki/Perceptron) একটি ধরনের লিনিয়ার ক্লাসিফায়ার যা আমেরিকান মনোবিজ্ঞানী Frank Rosenblatt আবিষ্কার করেছিলেন এবং যা ডিপ লার্নিং এর উন্নতির ভিত্তি তৈরি করে। +- ১৯৫৭ [পারসেপট্রন](https://wikipedia.org/wiki/Perceptron) একটি লিনিয়ার ক্লাসিফায়ার যা আমেরিকান মনোবিজ্ঞানী Frank Rosenblatt আবিষ্কার করেছিলেন এবং যা ডিপ লার্নিং এর উন্নতির ভিত্তি। --- - ১৯৬৭ [নিয়ারেস্ট নেবার](https://wikipedia.org/wiki/Nearest_neighbor) একটি অ্যালগরিদম যা মূলত রুট ম্যাপ করার জন্য ডিজাইন করা হয়েছিল। ML এর ক্ষেত্রে এটি প্যাটার্ন সনাক্ত করতে ব্যবহৃত হয়। - ১৯৭০ [ব্যাকপ্রপাগেশন](https://wikipedia.org/wiki/Backpropagation) [ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক](https://wikipedia.org/wiki/Feedforward_neural_network) প্রশিক্ষণের জন্য ব্যবহৃত হয়। -- ১৯৮২ [রিকারেন্ট নিউরাল নেটওয়ার্ক](https://wikipedia.org/wiki/Recurrent_neural_network) ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক থেকে উদ্ভূত কৃত্রিম নিউরাল নেটওয়ার্ক যা সময়গত গ্রাফ তৈরি করে। +- ১৯৮২ [রিকারেন্ট নিউরাল নেটওয়ার্ক](https://wikipedia.org/wiki/Recurrent_neural_network) ফিডফরওয়ার্ড নিউরাল নেটওয়ার্ক থেকে উদ্ভূত কৃত্রিম নিউরাল নেটওয়ার্ক যা টেম্পোরাল গ্রাফ তৈরি করে। ✅ একটু গবেষণা করুন। ML এবং AI এর ইতিহাসে আর কোন তারিখগুলো গুরুত্বপূর্ণ বলে মনে হয়? --- -## ১৯৫০: চিন্তা করতে সক্ষম যন্ত্র +## ১৯৫০: চিন্তা করতে পারে এমন মেশিন -Alan Turing, একজন সত্যিই অসাধারণ ব্যক্তি যাকে [২০১৯ সালে জনসাধারণের দ্বারা](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) ২০ শতকের সর্বশ্রেষ্ঠ বিজ্ঞানী হিসেবে ভোট দেওয়া হয়েছিল, 'চিন্তা করতে সক্ষম যন্ত্র' ধারণার ভিত্তি স্থাপনে সহায়তা করার জন্য কৃতিত্ব দেওয়া হয়। তিনি এই ধারণার জন্য প্রমাণের প্রয়োজনীয়তা এবং সমালোচকদের সাথে লড়াই করেছিলেন এবং [টুরিং টেস্ট](https://www.bbc.com/news/technology-18475646) তৈরি করেছিলেন, যা আপনি আমাদের NLP পাঠে অন্বেষণ করবেন। +Alan Turing, একজন অসাধারণ ব্যক্তি যাকে [২০১৯ সালে](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) জনগণের ভোটে ২০ শতকের সর্বশ্রেষ্ঠ বিজ্ঞানী হিসেবে নির্বাচিত করা হয়েছিল, 'চিন্তা করতে পারে এমন মেশিন' ধারণার ভিত্তি স্থাপনে সাহায্য করেছেন। তিনি এই ধারণার জন্য প্রমাণের প্রয়োজনীয়তা অনুভব করেছিলেন এবং [টুরিং টেস্ট](https://www.bbc.com/news/technology-18475646) তৈরি করেছিলেন, যা আপনি আমাদের NLP পাঠে শিখবেন। --- ## ১৯৫৬: ডার্টমাউথ সামার রিসার্চ প্রজেক্ট -"ডার্টমাউথ সামার রিসার্চ প্রজেক্ট অন আর্টিফিশিয়াল ইন্টেলিজেন্স কৃত্রিম বুদ্ধিমত্তার ক্ষেত্রে একটি গুরুত্বপূর্ণ ঘটনা ছিল," এবং এখানেই 'কৃত্রিম বুদ্ধিমত্তা' শব্দটি তৈরি করা হয়েছিল ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth))। +"ডার্টমাউথ সামার রিসার্চ প্রজেক্ট কৃত্রিম বুদ্ধিমত্তার ক্ষেত্রে একটি গুরুত্বপূর্ণ ঘটনা ছিল," এবং এখানেই 'কৃত্রিম বুদ্ধিমত্তা' শব্দটি তৈরি করা হয়েছিল ([source](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth))। -> শেখার প্রতিটি দিক বা বুদ্ধিমত্তার অন্য কোনো বৈশিষ্ট্য এমনভাবে বর্ণনা করা যেতে পারে যে একটি যন্ত্র এটি অনুকরণ করতে সক্ষম হয়। +> শেখার প্রতিটি দিক বা বুদ্ধিমত্তার অন্য কোনো বৈশিষ্ট্য এমনভাবে বর্ণনা করা যেতে পারে যে একটি মেশিন এটি অনুকরণ করতে পারে। --- -প্রধান গবেষক, গণিতের অধ্যাপক John McCarthy, আশা করেছিলেন "এই অনুমানের ভিত্তিতে এগিয়ে যাওয়ার যে শেখার প্রতিটি দিক বা বুদ্ধিমত্তার অন্য কোনো বৈশিষ্ট্য এমনভাবে বর্ণনা করা যেতে পারে যে একটি যন্ত্র এটি অনুকরণ করতে সক্ষম হয়।" অংশগ্রহণকারীদের মধ্যে ছিলেন এই ক্ষেত্রের আরেকজন বিশিষ্ট ব্যক্তি Marvin Minsky। +প্রধান গবেষক, গণিতের অধ্যাপক John McCarthy, আশা করেছিলেন "শেখার প্রতিটি দিক বা বুদ্ধিমত্তার অন্য কোনো বৈশিষ্ট্য এমনভাবে বর্ণনা করা যেতে পারে যে একটি মেশিন এটি অনুকরণ করতে পারে।" অংশগ্রহণকারীদের মধ্যে ছিলেন Marvin Minsky, যিনি এই ক্ষেত্রের আরেকজন বিশিষ্ট ব্যক্তি। -এই কর্মশালাটি "প্রতীকী পদ্ধতির উত্থান, সীমিত ডোমেইনগুলিতে ফোকাস করা সিস্টেম (প্রাথমিক এক্সপার্ট সিস্টেম), এবং ডিডাকটিভ সিস্টেম বনাম ইনডাকটিভ সিস্টেম" সহ বেশ কয়েকটি আলোচনার সূচনা এবং উৎসাহ দেওয়ার জন্য কৃতিত্ব দেওয়া হয়। ([source](https://wikipedia.org/wiki/Dartmouth_workshop))। +এই কর্মশালাটি "প্রতীকী পদ্ধতির উত্থান, সীমিত ডোমেইন ভিত্তিক সিস্টেম (প্রাথমিক এক্সপার্ট সিস্টেম), এবং ডিডাকটিভ সিস্টেম বনাম ইনডাকটিভ সিস্টেম" সহ বেশ কিছু আলোচনার সূচনা এবং উৎসাহ প্রদান করেছে। ([source](https://wikipedia.org/wiki/Dartmouth_workshop))। --- ## ১৯৫৬ - ১৯৭৪: "সোনালী বছর" -১৯৫০ এর দশক থেকে ৭০ এর দশকের মাঝামাঝি পর্যন্ত, AI এর মাধ্যমে অনেক সমস্যার সমাধানের আশা নিয়ে উচ্চ আশাবাদ ছিল। ১৯৬৭ সালে Marvin Minsky আত্মবিশ্বাসের সাথে বলেছিলেন, "এক প্রজন্মের মধ্যে ... 'কৃত্রিম বুদ্ধিমত্তা' তৈরির সমস্যা উল্লেখযোগ্যভাবে সমাধান হবে।" (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) +১৯৫০ এর দশক থেকে ৭০ এর দশকের মাঝামাঝি পর্যন্ত, AI এর মাধ্যমে অনেক সমস্যার সমাধান করা যাবে বলে উচ্চ আশাবাদ ছিল। ১৯৬৭ সালে Marvin Minsky আত্মবিশ্বাসের সাথে বলেছিলেন, "এক প্রজন্মের মধ্যে ... 'কৃত্রিম বুদ্ধিমত্তা' তৈরির সমস্যা মূলত সমাধান হয়ে যাবে।" (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) -প্রাকৃতিক ভাষা প্রক্রিয়াকরণ গবেষণা বিকশিত হয়েছিল, অনুসন্ধান আরও পরিশীলিত এবং শক্তিশালী হয়েছিল, এবং 'মাইক্রো-ওয়ার্ল্ড' ধারণা তৈরি হয়েছিল, যেখানে সাধারণ কাজগুলো সাধারণ ভাষার নির্দেশনা ব্যবহার করে সম্পন্ন করা হয়েছিল। +প্রাকৃতিক ভাষা প্রক্রিয়াকরণ গবেষণা বিকশিত হয়েছিল, সার্চ আরও পরিশীলিত এবং শক্তিশালী হয়েছিল, এবং 'মাইক্রো-ওয়ার্ল্ড' ধারণা তৈরি হয়েছিল, যেখানে সাধারণ ভাষার নির্দেশনা ব্যবহার করে সহজ কাজ সম্পন্ন করা যেত। --- -গভর্নমেন্ট এজেন্সিগুলোর দ্বারা গবেষণা ভালোভাবে অর্থায়িত হয়েছিল, কম্পিউটেশন এবং অ্যালগরিদমে অগ্রগতি হয়েছিল, এবং বুদ্ধিমান যন্ত্রের প্রোটোটাইপ তৈরি করা হয়েছিল। এই যন্ত্রগুলোর মধ্যে কিছু হলো: +গভর্নমেন্ট এজেন্সি দ্বারা গবেষণা ভালোভাবে অর্থায়িত হয়েছিল, কম্পিউটেশন এবং অ্যালগরিদমে অগ্রগতি হয়েছিল, এবং বুদ্ধিমান মেশিনের প্রোটোটাইপ তৈরি করা হয়েছিল। এই মেশিনগুলোর মধ্যে রয়েছে: -* [Shakey the robot](https://wikipedia.org/wiki/Shakey_the_robot), যে বুদ্ধিমত্তার সাথে কাজ সম্পাদনের জন্য সিদ্ধান্ত নিতে এবং চলাচল করতে পারত। +* [Shakey রোবট](https://wikipedia.org/wiki/Shakey_the_robot), যে বুদ্ধিমত্তার সাথে কাজ সম্পন্ন করার সিদ্ধান্ত নিতে এবং চলাচল করতে পারত। - ![Shakey, একটি বুদ্ধিমান রোবট](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.bn.jpg) + ![Shakey, একটি বুদ্ধিমান রোবট](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > Shakey, ১৯৭২ সালে --- * Eliza, একটি প্রাথমিক 'চ্যাটারবট', মানুষের সাথে কথা বলতে এবং একটি প্রাথমিক 'থেরাপিস্ট' হিসেবে কাজ করতে পারত। NLP পাঠে আপনি Eliza সম্পর্কে আরও জানবেন। - ![Eliza, একটি বট](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.bn.png) + ![Eliza, একটি বট](../../../../1-Introduction/2-history-of-ML/images/eliza.png) > Eliza এর একটি সংস্করণ, একটি চ্যাটবট --- -* "Blocks world" ছিল একটি মাইক্রো-ওয়ার্ল্ডের উদাহরণ যেখানে ব্লকগুলো স্তূপ করা এবং সাজানো যেত, এবং যন্ত্রকে সিদ্ধান্ত নিতে শেখানোর পরীক্ষাগুলো করা যেত। [SHRDLU](https://wikipedia.org/wiki/SHRDLU) এর মতো লাইব্রেরি দিয়ে তৈরি অগ্রগতি ভাষা প্রক্রিয়াকরণকে এগিয়ে নিয়ে গিয়েছিল। +* "Blocks world" ছিল একটি মাইক্রো-ওয়ার্ল্ডের উদাহরণ যেখানে ব্লকগুলো স্ট্যাক এবং সাজানো যেত, এবং মেশিনকে সিদ্ধান্ত নিতে শেখানোর পরীক্ষা করা যেত। [SHRDLU](https://wikipedia.org/wiki/SHRDLU) এর মতো লাইব্রেরি দিয়ে তৈরি অগ্রগতি ভাষা প্রক্রিয়াকরণকে এগিয়ে নিয়ে গেছে। - [![SHRDLU সহ ব্লকস ওয়ার্ল্ড](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "SHRDLU সহ ব্লকস ওয়ার্ল্ড") + [![SHRDLU এর সাথে Blocks world](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "SHRDLU এর সাথে Blocks world") - > 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: SHRDLU সহ ব্লকস ওয়ার্ল্ড + > 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: SHRDLU এর সাথে Blocks world --- ## ১৯৭৪ - ১৯৮০: "AI শীতকাল" -১৯৭০ এর দশকের মাঝামাঝি সময়ে, 'বুদ্ধিমান যন্ত্র' তৈরির জটিলতা কম করে দেখানো হয়েছিল এবং এর প্রতিশ্রুতি, উপলব্ধ কম্পিউট ক্ষমতার ভিত্তিতে, অতিরিক্তভাবে মূল্যায়ন করা হয়েছিল। অর্থায়ন বন্ধ হয়ে যায় এবং এই ক্ষেত্রের প্রতি আত্মবিশ্বাস কমে যায়। কিছু বিষয় যা আত্মবিশ্বাসে প্রভাব ফেলেছিল তা হলো: +৭০ এর দশকের মাঝামাঝি সময়ে, 'বুদ্ধিমান মেশিন' তৈরির জটিলতা কম মূল্যায়িত হয়েছিল এবং এর প্রতিশ্রুতি, উপলব্ধ কম্পিউট ক্ষমতার ভিত্তিতে, অতিরিক্তভাবে মূল্যায়িত হয়েছিল। অর্থায়ন বন্ধ হয়ে যায় এবং এই ক্ষেত্রের প্রতি আত্মবিশ্বাস কমে যায়। কিছু সমস্যাগুলো ছিল: --- - **সীমাবদ্ধতা**। কম্পিউট ক্ষমতা খুব সীমিত ছিল। -- **কম্বিনেটোরিয়াল বিস্ফোরণ**। কম্পিউটারের কাছে আরও বেশি কিছু চাওয়া হলে প্রশিক্ষণের জন্য প্রয়োজনীয় প্যারামিটারগুলোর সংখ্যা গাণিতিকভাবে বৃদ্ধি পায়, কিন্তু কম্পিউট ক্ষমতা এবং সক্ষমতার সমান্তরাল উন্নতি হয়নি। -- **ডেটার অভাব**। ডেটার অভাব ছিল যা অ্যালগরিদম পরীক্ষা, উন্নয়ন এবং পরিমার্জনের প্রক্রিয়াকে বাধাগ্রস্ত করেছিল। -- **আমরা কি সঠিক প্রশ্ন করছি?**। যে প্রশ্নগুলো করা হচ্ছিল তা নিয়ে প্রশ্ন উঠতে শুরু করে। গবেষকরা তাদের পদ্ধতির সমালোচনা মোকাবিলা করতে শুরু করেন: - - টুরিং টেস্ট বিভিন্ন ধারণার মাধ্যমে প্রশ্নবিদ্ধ হয়, যেমন 'চাইনিজ রুম থিওরি' যা বলেছিল, "একটি ডিজিটাল কম্পিউটার প্রোগ্রাম করা হলে এটি ভাষা বুঝতে সক্ষম বলে মনে হতে পারে কিন্তু প্রকৃত বোঝার সৃষ্টি করতে পারে না।" ([source](https://plato.stanford.edu/entries/chinese-room/)) - - কৃত্রিম বুদ্ধিমত্তা যেমন "থেরাপিস্ট" ELIZA কে সমাজে পরিচিত করানোর নৈতিকতা চ্যালেঞ্জ করা হয়। +- **কম্বিনেটোরিয়াল বিস্ফোরণ**। কম্পিউটারের কাছে আরও বেশি কিছু চাওয়ার সাথে সাথে প্রশিক্ষণের জন্য প্রয়োজনীয় প্যারামিটারগুলো গাণিতিকভাবে বৃদ্ধি পায়, কিন্তু কম্পিউট ক্ষমতা এবং সক্ষমতার সমান্তরাল উন্নতি হয়নি। +- **ডেটার অভাব**। ডেটার অভাব অ্যালগরিদম পরীক্ষা, উন্নয়ন এবং পরিমার্জনের প্রক্রিয়াকে বাধাগ্রস্ত করেছিল। +- **আমরা কি সঠিক প্রশ্ন করছি?**। যে প্রশ্নগুলো করা হচ্ছিল তা নিয়ে প্রশ্ন উঠতে শুরু করে। গবেষকরা তাদের পদ্ধতির সমালোচনার সম্মুখীন হন: + - টুরিং টেস্ট বিভিন্ন ধারণার মাধ্যমে প্রশ্নবিদ্ধ হয়, যেমন 'চাইনিজ রুম থিওরি' যা বলেছিল, "একটি ডিজিটাল কম্পিউটার প্রোগ্রাম করা হলে এটি ভাষা বুঝতে পারে বলে মনে হতে পারে কিন্তু প্রকৃত বোঝার সৃষ্টি করতে পারে না।" ([source](https://plato.stanford.edu/entries/chinese-room/)) + - কৃত্রিম বুদ্ধিমত্তা যেমন "থেরাপিস্ট" ELIZA কে সমাজে পরিচিত করার নৈতিকতা চ্যালেঞ্জ করা হয়েছিল। --- -একই সময়ে, বিভিন্ন AI চিন্তাধারা গড়ে উঠতে শুরু করে। ["স্ক্রাফি" বনাম "নিট AI"](https://wikipedia.org/wiki/Neats_and_scruffies) পদ্ধতির মধ্যে একটি বিভাজন তৈরি হয়। _স্ক্রাফি_ ল্যাবগুলো প্রোগ্রামগুলোকে কাঙ্ক্ষিত ফলাফল পাওয়ার জন্য ঘন্টার পর ঘন্টা টুইক করত। _নিট_ ল্যাবগুলো "লজিক এবং আনুষ্ঠানিক সমস্যা সমাধানে" ফোকাস করত। ELIZA এবং SHRDLU ছিল পরিচিত _স্ক্রাফি_ সিস্টেম। ১৯৮০ এর দশকে, যখন ML সিস্টেমগুলোকে পুনরুত্পাদনযোগ্য করার চাহিদা দেখা দেয়, _নিট_ পদ্ধতি ধীরে ধীরে অগ্রাধিকার পায় কারণ এর ফলাফলগুলো আরও ব্যাখ্যাযোগ্য। +একই সময়ে, বিভিন্ন AI চিন্তাধারা গঠিত হতে শুরু করে। ["স্ক্রাফি" বনাম "নিট AI"](https://wikipedia.org/wiki/Neats_and_scruffies) পদ্ধতির মধ্যে একটি বিভাজন তৈরি হয়। _স্ক্রাফি_ ল্যাবগুলো কাঙ্ক্ষিত ফলাফল পাওয়ার জন্য প্রোগ্রামগুলো ঘন্টার পর ঘন্টা টুইক করত। _নিট_ ল্যাবগুলো "লজিক এবং আনুষ্ঠানিক সমস্যা সমাধানের উপর" মনোযোগ দিত। ELIZA এবং SHRDLU ছিল পরিচিত _স্ক্রাফি_ সিস্টেম। ১৯৮০ এর দশকে, যখন ML সিস্টেমগুলোকে পুনরুত্পাদনযোগ্য করার চাহিদা দেখা দেয়, _নিট_ পদ্ধতি ধীরে ধীরে অগ্রাধিকার পায় কারণ এর ফলাফলগুলো আরও ব্যাখ্যাযোগ্য। --- ## ১৯৮০ এর দশক: এক্সপার্ট সিস্টেম -যেমন এই ক্ষেত্রটি বৃদ্ধি পায়, এর ব্যবসায়িক সুবিধা আরও স্পষ্ট হয়ে ওঠে, এবং ১৯৮০ এর দশকে 'এক্সপার্ট সিস্টেম' এর প্রসার ঘটে। "এক্সপার্ট সিস্টেমগুলো ছিল কৃত্রিম বুদ্ধিমত্তা (AI) সফটওয়্যারের প্রথম সত্যিকারের সফল রূপগুলোর মধ্যে একটি।" ([source](https://wikipedia.org/wiki/Expert_system))। +যেমন এই ক্ষেত্রটি বৃদ্ধি পায়, এর ব্যবসায়িক সুবিধা আরও স্পষ্ট হয়ে ওঠে, এবং ১৯৮০ এর দশকে 'এক্সপার্ট সিস্টেম' এর প্রসার ঘটে। "এক্সপার্ট সিস্টেমগুলো কৃত্রিম বুদ্ধিমত্তার (AI) সফটওয়্যারের প্রথম সত্যিকারের সফল রূপগুলোর মধ্যে ছিল।" ([source](https://wikipedia.org/wiki/Expert_system))। -এই ধরনের সিস্টেম আসলে _হাইব্রিড_, যা আংশিকভাবে একটি রুলস ইঞ্জিন নিয়ে গঠিত যা ব্যবসায়িক প্রয়োজনীয়তা সংজ্ঞায়িত করে, এবং একটি ইনফারেন্স ইঞ্জিন যা রুলস সিস্টেম ব্যবহার করে নতুন তথ্য অনুমান করে। +এই ধরনের সিস্টেম আসলে _হাইব্রিড_, যা আংশিকভাবে একটি রুলস ইঞ্জিনের উপর ভিত্তি করে ব্যবসায়িক প্রয়োজনীয়তা সংজ্ঞায়িত করে এবং একটি ইনফারেন্স ইঞ্জিন ব্যবহার করে নতুন তথ্য অনুমান করে। এই যুগে নিউরাল নেটওয়ার্কের প্রতি আরও বেশি মনোযোগ দেওয়া হয়। --- -## ১৯৮৭ - ১৯৯৩: AI 'চিল' +## ১৯৮৭ - ১৯৯৩: AI 'ঠান্ডা' -বিশেষায়িত এক্সপার্ট সিস্টেম হার্ডওয়্যারের প্রসারিত হওয়া দুর্ভাগ্যজনকভাবে খুব বেশি বিশেষায়িত হয়ে ওঠে। ব্যক্তিগত কম্পিউটারের উত্থান এই বড়, বিশেষায়িত, কেন্দ্রীভূত সিস্টেমগুলোর সাথে প্রতিযোগিতা করে। কম্পিউটিং এর গণতন্ত্রায়ন শুরু হয়, যা শেষ পর্যন্ত বড় ডেটার আধুনিক বিস্ফোরণের পথ প্রশস্ত করে। +বিশেষায়িত এক্সপার্ট সিস্টেম হার্ডওয়্যারের প্রসার দুর্ভাগ্যজনকভাবে অত্যন্ত বিশেষায়িত হয়ে ওঠে। ব্যক্তিগত কম্পিউটারের উত্থান এই বড়, বিশেষায়িত, কেন্দ্রীভূত সিস্টেমগুলোর সাথে প্রতিযোগিতা করে। কম্পিউটিং এর গণতন্ত্রায়ন শুরু হয়, যা শেষ পর্যন্ত বিগ ডেটার আধুনিক বিস্ফোরণের পথ প্রশস্ত করে। --- ## ১৯৯৩ - ২০১১ -এই যুগে ML এবং AI এর জন্য নতুন একটি সময় শুরু হয় যেখানে আগের ডেটার অভাব এবং কম্পিউট ক্ষমতার সমস্যাগুলো সমাধান করা সম্ভব হয়। ডেটার পরিমাণ দ্রুত বৃদ্ধি পেতে শুরু করে এবং আরও সহজলভ্য হয়ে ওঠে, ভালো এবং খারাপ উভয়ের জন্যই, বিশেষ করে ২০০৭ সালের আশেপাশে স্মার্টফোনের আবির্ভাবের সাথে। কম্পিউট ক্ষমতা গাণিতিকভাবে বৃদ্ধি পায়, এবং অ্যালগরিদমগুলোও এর সাথে বিকশিত হয়। ক্ষেত্রটি পরিপক্ক হতে শুরু করে কারণ অতীতের স্বাধীন গবেষণাগুলো একটি সত্যিকারের শৃঙ্খলায় রূপ নিতে শুরু করে। +এই যুগে ML এবং AI নতুনভাবে কিছু সমস্যার সমাধান করতে সক্ষম হয় যা আগে ডেটা এবং কম্পিউট ক্ষমতার অভাবে হয়েছিল। ডেটার পরিমাণ দ্রুত বৃদ্ধি পায় এবং আরও সহজলভ্য হয়ে ওঠে, ভালো এবং খারাপ উভয়ের জন্যই, বিশেষত ২০০৭ সালের আশেপাশে স্মার্টফোনের আবির্ভাবের সাথে। কম্পিউট ক্ষমতা গাণিতিকভাবে বৃদ্ধি পায়, এবং অ্যালগরিদমগুলোও এর সাথে বিকশিত হয়। এই ক্ষেত্রটি পরিপক্ক হতে শুরু করে কারণ অতীতের স্বাধীন গবেষণাগুলো একটি সত্যিকারের শৃঙ্খলায় রূপ নিতে শুরু করে। --- ## বর্তমান -আজ মেশিন লার্নিং এবং AI আমাদের জীবনের প্রায় প্রতিটি অংশকে স্পর্শ করে। এই যুগে এই অ্যালগরিদমগুলো মানুষের জীবনে কী প্রভাব ফেলতে পারে তা নিয়ে সতর্কভাবে বোঝার প্রয়োজন রয়েছে। Microsoft's Brad Smith বলেছেন, "তথ্য প্রযুক্তি এমন বিষয়গুলো উত্থাপন করে যা মৌলিক মানবাধিকার সুরক্ষার মতো বিষয়গুলোর সাথে সম্পর্কিত, যেমন গোপনীয়তা এবং মত প্রকাশের স্বাধীনতা। এই বিষয়গুলো এই পণ্যগুলো তৈরি করা প্রযুক্তি কোম্পানিগুলোর জন্য দায়িত্ব বাড়িয়ে দেয়। আমাদের দৃষ্টিতে, এগুলো চিন্তাশীল সরকারি নিয়ন্ত্রণ এবং গ্রহণযোগ্য ব্যবহারের চারপাশে মানদণ্ডের বিকাশের জন্যও আহ্বান জানায়।" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/))। +আজ মেশিন লার্নিং এবং AI আমাদের জীবনের প্রায় প্রতিটি অংশকে স্পর্শ করে। এই যুগে এই অ্যালগরিদমগুলো মানুষের জীবনে কী প্রভাব ফেলতে পারে তা সতর্কতার সাথে বোঝার প্রয়োজন রয়েছে। Microsoft's Brad Smith বলেছেন, "তথ্য প্রযুক্তি এমন বিষয়গুলো উত্থাপন করে যা মৌলিক মানবাধিকার সুরক্ষার মতো বিষয়গুলোর সাথে সম্পর্কিত, যেমন গোপনীয়তা এবং মত প্রকাশের স্বাধীনতা। এই বিষয়গুলো প্রযুক্তি কোম্পানিগুলোর জন্য আরও বেশি দায়িত্ববোধ তৈরি করে যারা এই পণ্যগুলো তৈরি করে। আমাদের মতে, এগুলো চিন্তাশীল সরকারি নিয়ন্ত্রণ এবং গ্রহণযোগ্য ব্যবহারের চারপাশে মানদণ্ডের বিকাশের জন্যও আহ্বান জানায়।" ([source](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 এই লেকচারে ডিপ লার্নিং এর ইতিহাস নিয়ে আলোচনা করেছেন @@ -141,14 +141,14 @@ Alan Turing, একজন সত্যিই অসাধারণ ব্যক এই ঐতিহাসিক মুহূর্তগুলোর মধ্যে একটি নিয়ে গভীরভাবে গবেষণা করুন এবং এর পেছনের মানুষগুলো সম্পর্কে আরও জানুন। এখানে আকর্ষণীয় চরিত্র রয়েছে, এবং কোনো বৈজ্ঞানিক আবিষ্কার কখনোই সাংস্কৃতিক শূন্যতায় তৈরি হয়নি। আপনি কী আবিষ্কার করেন? -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) +## [পাঠ-পরবর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) --- ## পর্যালোচনা এবং স্ব-অধ্যয়ন -এখানে দেখার এবং শোনার জন্য কিছু আইটেম দেওয়া হলো: +এখানে দেখার এবং শোনার জন্য কিছু আইটেম রয়েছে: -[Amy Boyd এর সাথে এই পডকাস্ট যেখানে AI এর বিবর্তন নিয়ে আলোচনা করা হয়েছে](http://runasradio.com/Shows/Show/739) +[এই পডকাস্ট যেখানে 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 এর ইতিহাস") @@ -161,4 +161,4 @@ Alan Turing, একজন সত্যিই অসাধারণ ব্যক --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/1-Introduction/3-fairness/README.md b/translations/bn/1-Introduction/3-fairness/README.md index 3b97b1006..7d470b8ef 100644 --- a/translations/bn/1-Introduction/3-fairness/README.md +++ b/translations/bn/1-Introduction/3-fairness/README.md @@ -1,91 +1,91 @@ # দায়িত্বশীল AI দিয়ে মেশিন লার্নিং সমাধান তৈরি করা -![মেশিন লার্নিং-এ দায়িত্বশীল AI-এর সারাংশ একটি স্কেচনোটে](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.bn.png) +![মেশিন লার্নিং-এ দায়িত্বশীল AI-এর সারাংশ একটি স্কেচনোটে](../../../../sketchnotes/ml-fairness.png) > স্কেচনোট: [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## ভূমিকা -এই পাঠ্যক্রমে, আপনি শিখতে শুরু করবেন কীভাবে মেশিন লার্নিং আমাদের দৈনন্দিন জীবনে প্রভাব ফেলছে। এমনকি এখন, সিস্টেম এবং মডেলগুলি স্বাস্থ্যসেবা নির্ণয়, ঋণ অনুমোদন বা প্রতারণা সনাক্তকরণের মতো দৈনন্দিন সিদ্ধান্ত গ্রহণের কাজে জড়িত। তাই এটি গুরুত্বপূর্ণ যে এই মডেলগুলি এমন ফলাফল প্রদান করে যা বিশ্বাসযোগ্য। যেকোনো সফটওয়্যার অ্যাপ্লিকেশনের মতো, AI সিস্টেমগুলি প্রত্যাশা পূরণে ব্যর্থ হতে পারে বা অনাকাঙ্ক্ষিত ফলাফল দিতে পারে। এজন্য AI মডেলের আচরণ বুঝতে এবং ব্যাখ্যা করতে সক্ষম হওয়া অত্যন্ত গুরুত্বপূর্ণ। +এই পাঠ্যক্রমে, আপনি শিখতে শুরু করবেন কীভাবে মেশিন লার্নিং আমাদের দৈনন্দিন জীবনে প্রভাব ফেলছে। এমনকি এখন, সিস্টেম এবং মডেলগুলি স্বাস্থ্যসেবা নির্ণয়, ঋণ অনুমোদন বা প্রতারণা সনাক্তকরণের মতো দৈনন্দিন সিদ্ধান্ত গ্রহণের কাজে জড়িত। তাই, এটি গুরুত্বপূর্ণ যে এই মডেলগুলি এমন ফলাফল প্রদান করে যা বিশ্বাসযোগ্য। যেকোনো সফটওয়্যার অ্যাপ্লিকেশনের মতো, AI সিস্টেমগুলি প্রত্যাশা পূরণে ব্যর্থ হতে পারে বা অনাকাঙ্ক্ষিত ফলাফল দিতে পারে। এজন্য AI মডেলের আচরণ বুঝতে এবং ব্যাখ্যা করতে সক্ষম হওয়া অত্যন্ত গুরুত্বপূর্ণ। -কল্পনা করুন, আপনি যখন এই মডেলগুলি তৈরি করতে যে ডেটা ব্যবহার করছেন তাতে যদি নির্দিষ্ট জনসংখ্যার অভাব থাকে, যেমন জাতি, লিঙ্গ, রাজনৈতিক মতামত, ধর্ম, বা যদি এই জনসংখ্যা অসমভাবে প্রতিনিধিত্ব করে। যদি মডেলের আউটপুট কিছু জনসংখ্যাকে প্রাধান্য দেয়, তাহলে এর ফলাফল কী হতে পারে? এছাড়াও, যদি মডেলটি ক্ষতিকর ফলাফল দেয় এবং মানুষের জন্য ক্ষতিকর হয়, তাহলে এর জন্য কে দায়ী হবে? এই পাঠ্যক্রমে আমরা এই প্রশ্নগুলো নিয়ে আলোচনা করব। +কল্পনা করুন, আপনি যখন এই মডেলগুলি তৈরি করতে ব্যবহৃত ডেটাতে নির্দিষ্ট জনসংখ্যার অভাব থাকে, যেমন জাতি, লিঙ্গ, রাজনৈতিক মতামত, ধর্ম, বা অসমভাবে প্রতিনিধিত্ব করা হয়। যদি মডেলের আউটপুট কিছু জনসংখ্যাকে প্রাধান্য দেয়, তাহলে এর ফলাফল কী হতে পারে? এছাড়াও, যদি মডেলটি ক্ষতিকর ফলাফল দেয় এবং মানুষের জন্য ক্ষতিকর হয়, তাহলে এর জন্য কে দায়ী? এই পাঠ্যক্রমে আমরা এই প্রশ্নগুলো নিয়ে আলোচনা করব। এই পাঠে আপনি: - মেশিন লার্নিং-এ ন্যায্যতার গুরুত্ব এবং ন্যায্যতা-সম্পর্কিত ক্ষতির বিষয়ে সচেতনতা বৃদ্ধি করবেন। - আউটলায়ার এবং অস্বাভাবিক পরিস্থিতি অন্বেষণের অনুশীলনে পরিচিত হবেন যাতে নির্ভরযোগ্যতা এবং নিরাপত্তা নিশ্চিত করা যায়। -- অন্তর্ভুক্তিমূলক সিস্টেম ডিজাইন করে সবাইকে ক্ষমতায়নের প্রয়োজনীয়তা বুঝবেন। +- সবাইকে ক্ষমতায়িত করার জন্য অন্তর্ভুক্তিমূলক সিস্টেম ডিজাইনের প্রয়োজনীয়তা বুঝবেন। - ডেটা এবং মানুষের গোপনীয়তা এবং নিরাপত্তা রক্ষার গুরুত্ব অন্বেষণ করবেন। - AI মডেলের আচরণ ব্যাখ্যা করার জন্য একটি স্বচ্ছ পদ্ধতির গুরুত্ব দেখবেন। -- AI সিস্টেমে বিশ্বাস তৈরি করতে জবাবদিহিতার গুরুত্ব সম্পর্কে সচেতন হবেন। +- AI সিস্টেমে বিশ্বাস তৈরি করতে দায়বদ্ধতার গুরুত্ব সম্পর্কে সচেতন হবেন। ## পূর্বশর্ত -পূর্বশর্ত হিসেবে, "Responsible AI Principles" শেখার পথটি সম্পন্ন করুন এবং নিচের ভিডিওটি দেখুন: +পূর্বশর্ত হিসেবে, "Responsible AI Principles" শেখার পথটি গ্রহণ করুন এবং নিচের ভিডিওটি দেখুন: [Responsible AI শেখার পথ](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) -[![Microsoft-এর Responsible AI পদ্ধতি](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft-এর Responsible AI পদ্ধতি") +[![Microsoft's Approach to Responsible AI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoft's Approach to Responsible AI") -> 🎥 উপরের ছবিতে ক্লিক করুন: Microsoft-এর Responsible AI পদ্ধতি +> 🎥 উপরের ছবিতে ক্লিক করুন: Microsoft's Approach to Responsible AI ## ন্যায্যতা -AI সিস্টেমগুলোকে সবার প্রতি ন্যায্য আচরণ করতে হবে এবং একই ধরনের গোষ্ঠীর মানুষের উপর ভিন্নভাবে প্রভাব ফেলতে হবে না। উদাহরণস্বরূপ, যখন AI সিস্টেমগুলো চিকিৎসা, ঋণ আবেদন বা চাকরির ক্ষেত্রে পরামর্শ দেয়, তখন তাদের একই উপসর্গ, আর্থিক পরিস্থিতি বা পেশাগত যোগ্যতার ভিত্তিতে সবার জন্য একই সুপারিশ করতে হবে। আমাদের প্রত্যেকের মধ্যে এমন উত্তরাধিকারসূত্রে প্রাপ্ত পক্ষপাত রয়েছে যা আমাদের সিদ্ধান্ত এবং কর্মে প্রভাব ফেলে। এই পক্ষপাতগুলো সেই ডেটায় প্রতিফলিত হতে পারে যা আমরা AI সিস্টেম প্রশিক্ষণের জন্য ব্যবহার করি। এমন হেরফের কখনও কখনও অনিচ্ছাকৃতভাবে ঘটে। ডেটায় পক্ষপাত যুক্ত করার সময় সচেতনভাবে তা জানা প্রায়ই কঠিন। +AI সিস্টেমগুলোকে সবার প্রতি ন্যায্য আচরণ করতে হবে এবং একই ধরনের গোষ্ঠীর মানুষের প্রতি ভিন্নভাবে প্রভাব না ফেলতে হবে। উদাহরণস্বরূপ, যখন AI সিস্টেমগুলো চিকিৎসা, ঋণ আবেদন বা চাকরির ক্ষেত্রে নির্দেশনা প্রদান করে, তখন একই উপসর্গ, আর্থিক পরিস্থিতি বা পেশাগত যোগ্যতা থাকা সবার জন্য একই সুপারিশ করা উচিত। আমাদের প্রত্যেকের মধ্যে এমন উত্তরাধিকারসূত্রে প্রাপ্ত পক্ষপাত রয়েছে যা আমাদের সিদ্ধান্ত এবং কর্মে প্রভাব ফেলে। এই পক্ষপাতগুলো আমরা AI সিস্টেম প্রশিক্ষণের জন্য ব্যবহৃত ডেটাতে দেখতে পাই। কখনও কখনও এই ধরনের প্রভাব অনিচ্ছাকৃতভাবে ঘটে। ডেটাতে পক্ষপাত যুক্ত করার সময় সচেতনভাবে তা জানা প্রায়ই কঠিন। -**“অন্যায়”** বলতে একটি গোষ্ঠীর জন্য নেতিবাচক প্রভাব বা “ক্ষতি” বোঝায়, যেমন জাতি, লিঙ্গ, বয়স বা অক্ষমতার ভিত্তিতে সংজ্ঞায়িত। ন্যায্যতা-সম্পর্কিত প্রধান ক্ষতিগুলোকে নিম্নরূপ শ্রেণীবদ্ধ করা যায়: +**“অন্যায্যতা”** বলতে একটি গোষ্ঠীর জন্য নেতিবাচক প্রভাব বা “ক্ষতি” বোঝায়, যেমন জাতি, লিঙ্গ, বয়স বা অক্ষমতার ভিত্তিতে সংজ্ঞায়িত। ন্যায্যতা-সম্পর্কিত প্রধান ক্ষতিগুলোকে নিম্নরূপ শ্রেণীবদ্ধ করা যায়: - **বণ্টন**, যদি একটি লিঙ্গ বা জাতি অন্যটির তুলনায় প্রাধান্য পায়। -- **সেবার গুণমান**। যদি আপনি একটি নির্দিষ্ট পরিস্থিতির জন্য ডেটা প্রশিক্ষণ করেন কিন্তু বাস্তবতা অনেক বেশি জটিল হয়, তাহলে এটি একটি দুর্বল সেবার দিকে নিয়ে যায়। উদাহরণস্বরূপ, একটি হাত ধোয়ার সাবানের ডিসপেনসার যা গাঢ় ত্বকের মানুষকে সনাক্ত করতে পারে না। [তথ্যসূত্র](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **অপমান**। অন্যায়ভাবে সমালোচনা করা বা কিছু বা কাউকে লেবেল করা। উদাহরণস্বরূপ, একটি ইমেজ লেবেলিং প্রযুক্তি গাঢ় ত্বকের মানুষের ছবি ভুলভাবে গরিলা হিসেবে চিহ্নিত করেছিল। -- **অতিরিক্ত বা কম প্রতিনিধিত্ব**। ধারণাটি হলো একটি নির্দিষ্ট গোষ্ঠীকে একটি নির্দিষ্ট পেশায় দেখা যায় না, এবং যেকোনো সেবা বা কার্যক্রম যা এটি প্রচার করে তা ক্ষতির দিকে অবদান রাখে। +- **সেবার গুণমান**। যদি আপনি একটি নির্দিষ্ট পরিস্থিতির জন্য ডেটা প্রশিক্ষণ করেন কিন্তু বাস্তবতা অনেক বেশি জটিল হয়, তাহলে এটি একটি দুর্বল সেবার দিকে নিয়ে যায়। উদাহরণস্বরূপ, একটি হাত ধোয়ার সাবান ডিসপেনসার যা গাঢ় ত্বকের মানুষের উপস্থিতি সনাক্ত করতে পারে না। [রেফারেন্স](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **অপমান**। অন্যায়ভাবে সমালোচনা করা বা কিছু বা কাউকে লেবেল দেওয়া। উদাহরণস্বরূপ, একটি ইমেজ লেবেলিং প্রযুক্তি কালো ত্বকের মানুষের ছবি ভুলভাবে গরিলা হিসেবে চিহ্নিত করেছিল। +- **অতিরিক্ত বা কম প্রতিনিধিত্ব**। ধারণাটি হলো একটি নির্দিষ্ট গোষ্ঠীকে একটি নির্দিষ্ট পেশায় দেখা যায় না, এবং যে কোনো সেবা বা কার্যক্রম যা এটি প্রচার করে তা ক্ষতির দিকে অবদান রাখে। - **স্টেরিওটাইপিং**। একটি নির্দিষ্ট গোষ্ঠীকে পূর্বনির্ধারিত বৈশিষ্ট্যের সাথে যুক্ত করা। উদাহরণস্বরূপ, ইংরেজি এবং তুর্কি ভাষার মধ্যে একটি ভাষা অনুবাদ সিস্টেমে লিঙ্গ-সম্পর্কিত স্টেরিওটাইপের কারণে ভুল হতে পারে। -![তুর্কিতে অনুবাদ](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.bn.png) +![তুর্কিতে অনুবাদ](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > তুর্কিতে অনুবাদ -![ইংরেজিতে পুনরায় অনুবাদ](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.bn.png) -> ইংরেজিতে পুনরায় অনুবাদ +![ইংরেজিতে ফিরে অনুবাদ](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> ইংরেজিতে ফিরে অনুবাদ AI সিস্টেম ডিজাইন এবং পরীক্ষা করার সময়, আমাদের নিশ্চিত করতে হবে যে AI ন্যায্য এবং পক্ষপাতমূলক বা বৈষম্যমূলক সিদ্ধান্ত নিতে প্রোগ্রাম করা হয়নি, যা মানুষের জন্যও নিষিদ্ধ। AI এবং মেশিন লার্নিং-এ ন্যায্যতা নিশ্চিত করা একটি জটিল সামাজিক-প্রযুক্তিগত চ্যালেঞ্জ। ### নির্ভরযোগ্যতা এবং নিরাপত্তা -বিশ্বাস তৈরি করতে, AI সিস্টেমগুলোকে স্বাভাবিক এবং অপ্রত্যাশিত পরিস্থিতিতে নির্ভরযোগ্য, নিরাপদ এবং ধারাবাহিক হতে হবে। বিভিন্ন পরিস্থিতিতে AI সিস্টেমগুলো কীভাবে আচরণ করবে তা জানা গুরুত্বপূর্ণ, বিশেষত যখন তারা অস্বাভাবিক পরিস্থিতিতে থাকে। AI সমাধান তৈরি করার সময়, AI সমাধানগুলো যে বিভিন্ন পরিস্থিতির সম্মুখীন হবে তা পরিচালনা করার জন্য যথেষ্ট মনোযোগ দেওয়া প্রয়োজন। উদাহরণস্বরূপ, একটি স্বয়ংচালিত গাড়িকে মানুষের নিরাপত্তাকে সর্বোচ্চ অগ্রাধিকার দিতে হবে। ফলস্বরূপ, গাড়ির AI-কে রাত, বজ্রঝড় বা তুষারঝড়, রাস্তা পার হওয়া শিশু, পোষা প্রাণী, রাস্তা নির্মাণ ইত্যাদির মতো সমস্ত সম্ভাব্য পরিস্থিতি বিবেচনা করতে হবে। একটি AI সিস্টেম কতটা নির্ভরযোগ্য এবং নিরাপদভাবে বিভিন্ন পরিস্থিতি পরিচালনা করতে পারে তা ডেটা বিজ্ঞানী বা AI ডেভেলপার ডিজাইন বা পরীক্ষার সময় কতটা প্রত্যাশা করেছেন তা প্রতিফলিত করে। +বিশ্বাস তৈরি করতে, AI সিস্টেমগুলোকে স্বাভাবিক এবং অপ্রত্যাশিত পরিস্থিতিতে নির্ভরযোগ্য, নিরাপদ এবং ধারাবাহিক হতে হবে। বিভিন্ন পরিস্থিতিতে AI সিস্টেমের আচরণ কেমন হবে তা জানা গুরুত্বপূর্ণ, বিশেষত যখন তারা অস্বাভাবিক পরিস্থিতিতে থাকে। AI সমাধান তৈরি করার সময়, AI সমাধানগুলো যে বিভিন্ন পরিস্থিতির সম্মুখীন হতে পারে তা পরিচালনা করার জন্য যথেষ্ট মনোযোগ দেওয়া প্রয়োজন। উদাহরণস্বরূপ, একটি স্বয়ংচালিত গাড়িকে মানুষের নিরাপত্তাকে সর্বোচ্চ অগ্রাধিকার দিতে হবে। ফলস্বরূপ, গাড়ির AI-কে রাত, বজ্রঝড় বা তুষারঝড়, রাস্তা পার হওয়া শিশু, পোষা প্রাণী, রাস্তা নির্মাণ ইত্যাদির মতো সমস্ত সম্ভাব্য পরিস্থিতি বিবেচনা করতে হবে। একটি AI সিস্টেম কতটা ভালোভাবে বিভিন্ন পরিস্থিতি নির্ভরযোগ্য এবং নিরাপদভাবে পরিচালনা করতে পারে তা ডেটা বিজ্ঞানী বা AI ডেভেলপার ডিজাইন বা পরীক্ষার সময় কতটা প্রত্যাশা করেছেন তা প্রতিফলিত করে। > [🎥 এখানে ক্লিক করুন একটি ভিডিওর জন্য: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) -### অন্তর্ভুক্তি +### অন্তর্ভুক্তিমূলকতা -AI সিস্টেমগুলোকে এমনভাবে ডিজাইন করা উচিত যাতে সবাইকে সম্পৃক্ত এবং ক্ষমতায়িত করা যায়। AI সিস্টেম ডিজাইন এবং বাস্তবায়নের সময় ডেটা বিজ্ঞানী এবং AI ডেভেলপাররা সিস্টেমে সম্ভাব্য বাধাগুলো চিহ্নিত করেন এবং সমাধান করেন যা অনিচ্ছাকৃতভাবে মানুষকে বাদ দিতে পারে। উদাহরণস্বরূপ, বিশ্বে ১ বিলিয়ন প্রতিবন্ধী মানুষ রয়েছে। AI-এর অগ্রগতির মাধ্যমে, তারা তাদের দৈনন্দিন জীবনে আরও সহজে তথ্য এবং সুযোগগুলোতে প্রবেশ করতে পারে। বাধাগুলো দূর করার মাধ্যমে, এটি উদ্ভাবনের সুযোগ তৈরি করে এবং সবার জন্য আরও ভালো অভিজ্ঞতা সহ AI পণ্য তৈরি করে। +AI সিস্টেমগুলোকে এমনভাবে ডিজাইন করা উচিত যাতে সবার অংশগ্রহণ এবং ক্ষমতায়ন নিশ্চিত হয়। AI সিস্টেম ডিজাইন এবং বাস্তবায়নের সময়, ডেটা বিজ্ঞানী এবং AI ডেভেলপাররা সিস্টেমে সম্ভাব্য বাধাগুলো চিহ্নিত করেন এবং সমাধান করেন যা অনিচ্ছাকৃতভাবে মানুষকে বাদ দিতে পারে। উদাহরণস্বরূপ, বিশ্বে ১ বিলিয়ন প্রতিবন্ধী মানুষ রয়েছে। AI-এর অগ্রগতির মাধ্যমে, তারা তাদের দৈনন্দিন জীবনে আরও সহজে তথ্য এবং সুযোগগুলোতে প্রবেশ করতে পারে। বাধাগুলো দূর করার মাধ্যমে, এটি উদ্ভাবনের সুযোগ তৈরি করে এবং সবার জন্য আরও ভালো অভিজ্ঞতা সহ AI পণ্য তৈরি করে। -> [🎥 এখানে ক্লিক করুন একটি ভিডিওর জন্য: AI-তে অন্তর্ভুক্তি](https://www.microsoft.com/videoplayer/embed/RE4vl9v) +> [🎥 এখানে ক্লিক করুন একটি ভিডিওর জন্য: AI-তে অন্তর্ভুক্তিমূলকতা](https://www.microsoft.com/videoplayer/embed/RE4vl9v) ### নিরাপত্তা এবং গোপনীয়তা -AI সিস্টেমগুলোকে নিরাপদ এবং মানুষের গোপনীয়তার প্রতি শ্রদ্ধাশীল হতে হবে। এমন সিস্টেমে মানুষের কম বিশ্বাস থাকে যা তাদের গোপনীয়তা, তথ্য বা জীবনকে ঝুঁকিতে ফেলে। মেশিন লার্নিং মডেল প্রশিক্ষণের সময়, আমরা সেরা ফলাফল পেতে ডেটার উপর নির্ভর করি। এটি করার সময়, ডেটার উৎস এবং অখণ্ডতা বিবেচনা করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, ডেটা ব্যবহারকারী জমা দিয়েছে নাকি এটি প্রকাশ্যে উপলব্ধ ছিল? পরবর্তী ধাপে, ডেটার সাথে কাজ করার সময়, এটি অত্যন্ত গুরুত্বপূর্ণ যে AI সিস্টেমগুলো গোপনীয় তথ্য রক্ষা করতে এবং আক্রমণ প্রতিরোধ করতে সক্ষম। AI আরও ব্যাপক হওয়ার সাথে সাথে গোপনীয়তা রক্ষা এবং গুরুত্বপূর্ণ ব্যক্তিগত এবং ব্যবসায়িক তথ্য সুরক্ষিত করা আরও গুরুত্বপূর্ণ এবং জটিল হয়ে উঠছে। গোপনীয়তা এবং ডেটা নিরাপত্তার বিষয়গুলো AI-এর জন্য বিশেষভাবে ঘনিষ্ঠ মনোযোগ প্রয়োজন কারণ ডেটার অ্যাক্সেস AI সিস্টেমগুলোকে মানুষের সম্পর্কে সঠিক এবং তথ্যপূর্ণ পূর্বাভাস এবং সিদ্ধান্ত নিতে সক্ষম করে। +AI সিস্টেমগুলোকে নিরাপদ হতে হবে এবং মানুষের গোপনীয়তার প্রতি সম্মান দেখাতে হবে। এমন সিস্টেমে মানুষের কম বিশ্বাস থাকে যা তাদের গোপনীয়তা, তথ্য বা জীবনকে ঝুঁকিতে ফেলে। মেশিন লার্নিং মডেল প্রশিক্ষণের সময়, আমরা সেরা ফলাফল পেতে ডেটার উপর নির্ভর করি। এটি করার সময়, ডেটার উৎস এবং অখণ্ডতা বিবেচনা করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, ডেটা কি ব্যবহারকারী জমা দিয়েছে নাকি এটি সর্বজনীনভাবে উপলব্ধ? পরবর্তী ধাপে, ডেটার সাথে কাজ করার সময়, এটি অত্যন্ত গুরুত্বপূর্ণ যে AI সিস্টেমগুলো গোপনীয় তথ্য রক্ষা করতে এবং আক্রমণ প্রতিরোধ করতে সক্ষম। AI আরও ব্যাপক হওয়ার সাথে সাথে গোপনীয়তা রক্ষা এবং গুরুত্বপূর্ণ ব্যক্তিগত এবং ব্যবসায়িক তথ্য সুরক্ষিত করা আরও গুরুত্বপূর্ণ এবং জটিল হয়ে উঠছে। গোপনীয়তা এবং ডেটা নিরাপত্তার বিষয়গুলো AI-এর জন্য বিশেষভাবে ঘনিষ্ঠ মনোযোগ প্রয়োজন কারণ ডেটার অ্যাক্সেস AI সিস্টেমগুলোকে মানুষের সম্পর্কে সঠিক এবং তথ্যপূর্ণ পূর্বাভাস এবং সিদ্ধান্ত নিতে সক্ষম করে। > [🎥 এখানে ক্লিক করুন একটি ভিডিওর জন্য: AI-তে নিরাপত্তা](https://www.microsoft.com/videoplayer/embed/RE4voJF) - শিল্প হিসেবে আমরা গোপনীয়তা এবং নিরাপত্তায় উল্লেখযোগ্য অগ্রগতি করেছি, যা GDPR (General Data Protection Regulation)-এর মতো নিয়ম দ্বারা উল্লেখযোগ্যভাবে চালিত হয়েছে। -- তবে AI সিস্টেমের ক্ষেত্রে আমাদের স্বীকার করতে হবে যে সিস্টেমগুলোকে আরও ব্যক্তিগত এবং কার্যকর করতে আরও ব্যক্তিগত ডেটার প্রয়োজন এবং গোপনীয়তার মধ্যে একটি টান রয়েছে। -- ইন্টারনেটের সাথে সংযুক্ত কম্পিউটারগুলোর জন্মের মতো, আমরা AI-সম্পর্কিত নিরাপত্তা সমস্যার সংখ্যায়ও একটি বড় বৃদ্ধি দেখছি। -- একই সময়ে, আমরা দেখেছি AI নিরাপত্তা উন্নত করতে ব্যবহৃত হচ্ছে। উদাহরণস্বরূপ, আজকের বেশিরভাগ আধুনিক অ্যান্টি-ভাইরাস স্ক্যানার AI হিউরিস্টিক দ্বারা চালিত। +- তবে AI সিস্টেমের ক্ষেত্রে আমাদের স্বীকার করতে হবে যে ব্যক্তিগত ডেটার প্রয়োজনীয়তা এবং গোপনীয়তার মধ্যে একটি টানাপোড়েন রয়েছে। +- ইন্টারনেটের সাথে সংযুক্ত কম্পিউটারের জন্মের মতো, আমরা AI-সম্পর্কিত নিরাপত্তা সমস্যার সংখ্যায়ও একটি বড় বৃদ্ধি দেখছি। +- একই সময়ে, আমরা AI ব্যবহার করে নিরাপত্তা উন্নত করতে দেখেছি। উদাহরণস্বরূপ, আজকের বেশিরভাগ আধুনিক অ্যান্টি-ভাইরাস স্ক্যানার AI হিউরিস্টিক দ্বারা চালিত। - আমাদের নিশ্চিত করতে হবে যে আমাদের ডেটা সায়েন্স প্রক্রিয়াগুলো সর্বশেষ গোপনীয়তা এবং নিরাপত্তা অনুশীলনের সাথে সুরেলা ভাবে মিশে যায়। ### স্বচ্ছতা -AI সিস্টেমগুলোকে বোঝার মতো হতে হবে। স্বচ্ছতার একটি গুরুত্বপূর্ণ অংশ হলো AI সিস্টেম এবং এর উপাদানগুলোর আচরণ ব্যাখ্যা করা। AI সিস্টেমগুলো সম্পর্কে বোঝার উন্নতি করতে হলে স্টেকহোল্ডারদের বুঝতে হবে কীভাবে এবং কেন সেগুলো কাজ করে যাতে তারা সম্ভাব্য কর্মক্ষমতা সমস্যা, নিরাপত্তা এবং গোপনীয়তা উদ্বেগ, পক্ষপাত, বাদ দেওয়ার অনুশীলন বা অনিচ্ছাকৃত ফলাফল চিহ্নিত করতে পারে। আমরা বিশ্বাস করি যে যারা AI সিস্টেম ব্যবহার করেন তাদের উচিত সেগুলো কখন, কেন এবং কীভাবে ব্যবহার করা হয় তা সম্পর্কে সৎ এবং খোলামেলা হওয়া। সেইসাথে তারা যে সিস্টেমগুলো ব্যবহার করেন তার সীমাবদ্ধতা সম্পর্কে। উদাহরণস্বরূপ, যদি একটি ব্যাংক তার ভোক্তা ঋণ প্রদানের সিদ্ধান্তগুলো সমর্থন করতে একটি AI সিস্টেম ব্যবহার করে, তাহলে ফলাফলগুলো পরীক্ষা করা এবং কোন ডেটা সিস্টেমের সুপারিশগুলোকে প্রভাবিত করে তা বোঝা গুরুত্বপূর্ণ। সরকারগুলো বিভিন্ন শিল্পে AI নিয়ন্ত্রণ করতে শুরু করেছে, তাই ডেটা বিজ্ঞানী এবং সংস্থাগুলোকে ব্যাখ্যা করতে হবে যে একটি AI সিস্টেম নিয়ন্ত্রক প্রয়োজনীয়তা পূরণ করে কিনা, বিশেষত যখন একটি অনাকাঙ্ক্ষিত ফলাফল ঘটে। +AI সিস্টেমগুলোকে বোঝার মতো হতে হবে। স্বচ্ছতার একটি গুরুত্বপূর্ণ অংশ হলো AI সিস্টেম এবং এর উপাদানগুলোর আচরণ ব্যাখ্যা করা। AI সিস্টেমের বোঝাপড়া উন্নত করতে, স্টেকহোল্ডারদের বুঝতে হবে কীভাবে এবং কেন তারা কাজ করে যাতে তারা সম্ভাব্য কর্মক্ষমতা সমস্যা, নিরাপত্তা এবং গোপনীয়তা উদ্বেগ, পক্ষপাত, বাদ দেওয়ার অনুশীলন বা অনিচ্ছাকৃত ফলাফল চিহ্নিত করতে পারে। আমরা বিশ্বাস করি যে যারা AI সিস্টেম ব্যবহার করেন তাদের উচিত সেগুলো কখন, কেন এবং কীভাবে ব্যবহার করা হয় তা সম্পর্কে সৎ এবং খোলামেলা হওয়া। সেইসাথে তারা যে সিস্টেমগুলো ব্যবহার করেন তার সীমাবদ্ধতা সম্পর্কে। উদাহরণস্বরূপ, যদি একটি ব্যাংক তার ভোক্তা ঋণ সিদ্ধান্তে সহায়তা করার জন্য একটি AI সিস্টেম ব্যবহার করে, তাহলে ফলাফলগুলো পরীক্ষা করা এবং কোন ডেটা সিস্টেমের সুপারিশকে প্রভাবিত করে তা বোঝা গুরুত্বপূর্ণ। সরকার বিভিন্ন শিল্পে AI নিয়ন্ত্রণ করতে শুরু করেছে, তাই ডেটা বিজ্ঞানী এবং সংস্থাগুলোকে ব্যাখ্যা করতে হবে যে একটি AI সিস্টেম নিয়ন্ত্রক প্রয়োজনীয়তা পূরণ করে কিনা, বিশেষত যখন একটি অনাকাঙ্ক্ষিত ফলাফল ঘটে। > [🎥 এখানে ক্লিক করুন একটি ভিডিওর জন্য: AI-তে স্বচ্ছতা](https://www.microsoft.com/videoplayer/embed/RE4voJF) @@ -93,60 +93,59 @@ AI সিস্টেমগুলোকে বোঝার মতো হতে - এই বোঝার অভাব সিস্টেমগুলো কীভাবে পরিচালিত, কার্যকরী এবং নথিভুক্ত হয় তা প্রভাবিত করে। - এই বোঝার অভাব আরও গুরুত্বপূর্ণভাবে সিস্টেমগুলো যে ফলাফল তৈরি করে তা ব্যবহার করে নেওয়া সিদ্ধান্তগুলোকে প্রভাবিত করে। -### জবাবদিহিতা +### দায়িত্বশীলতা -AI সিস্টেম ডিজাইন এবং স্থাপনকারী ব্যক্তিদের তাদের সিস্টেমগুলো কীভাবে কাজ করে তার জন্য জবাবদিহি করতে হবে। জবাবদিহিতার প্রয়োজনীয়তা বিশেষভাবে সংবেদনশীল প্রযুক্তি যেমন মুখের স্বীকৃতির ক্ষেত্রে গুরুত্বপূর্ণ। সম্প্রতি, মুখের স্বীকৃতি প্রযুক্তির চাহিদা বৃদ্ধি পেয়েছে, বিশেষত আইন প্রয়োগকারী সংস্থাগুলোর কাছ থেকে যারা নিখোঁজ শিশুদের খুঁজে বের করার মতো কাজে প্রযুক্তির সম্ভাবনা দেখছেন। তবে, এই প্রযুক্তিগুলো একটি সরকার দ্বারা তার নাগরিকদের মৌলিক স্বাধীনতাকে ঝুঁকিতে ফেলতে ব্যবহার করা যেতে পারে, যেমন নির্দিষ্ট ব্যক্তিদের ক্রমাগত নজরদারি সক্ষম করা। তাই ডেটা বিজ্ঞানী এবং সংস্থাগুলোকে তাদের AI সিস্টেমের ব্যক্তিদের বা সমাজের উপর প্রভাবের জন্য দায়িত্বশীল হতে হবে। +AI সিস্টেম ডিজাইন এবং মোতায়েনকারী ব্যক্তিদের তাদের সিস্টেমের কার্যক্রমের জন্য দায়িত্বশীল হতে হবে। দায়িত্বশীলতার প্রয়োজনীয়তা বিশেষভাবে গুরুত্বপূর্ণ সংবেদনশীল প্রযুক্তি যেমন মুখের স্বীকৃতির ক্ষেত্রে। সম্প্রতি, মুখের স্বীকৃতি প্রযুক্তির জন্য একটি ক্রমবর্ধমান চাহিদা রয়েছে, বিশেষত আইন প্রয়োগকারী সংস্থাগুলোর কাছ থেকে যারা নিখোঁজ শিশুদের খুঁজে বের করার মতো ব্যবহারগুলোতে প্রযুক্তির সম্ভাবনা দেখছেন। তবে, এই প্রযুক্তিগুলো একটি সরকার তার নাগরিকদের মৌলিক স্বাধীনতাকে ঝুঁকিতে ফেলতে ব্যবহার করতে পারে, যেমন নির্দিষ্ট ব্যক্তিদের ক্রমাগত নজরদারি সক্ষম করা। তাই, ডেটা বিজ্ঞানী এবং সংস্থাগুলোকে তাদের AI সিস্টেমের ব্যক্তিগত বা সামাজিক প্রভাবের জন্য দায়িত্বশীল হতে হবে। -[![AI গবেষক মুখের স্বীকৃতির মাধ্যমে ব্যাপক নজরদারির সতর্কতা দেন](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.bn.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft-এর Responsible AI পদ্ধতি") +[![AI গবেষকের সতর্কবার্তা: মুখের স্বীকৃতির মাধ্যমে ব্যাপক নজরদারি](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoft's Approach to Responsible AI") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: মুখের স্বীকৃতির মাধ্যমে ব্যাপক নজরদারির সতর্কতা +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: মুখের স্বীকৃতির মাধ্যমে ব্যাপক নজরদারি সম্পর্কে সতর্কবার্তা -অবশেষে, আমাদের প্রজন্মের জন্য সবচেয়ে বড় প্রশ্নগুলোর একটি হলো, প্রথম প্রজন্ম হিসেবে যারা AI সমাজে নিয়ে আসছে, কীভাবে নিশ্চিত করা যায় যে কম্পিউটারগুলো মানুষের কাছে জবাবদিহি থাকবে এবং কীভাবে নিশ্চিত করা যায় যে কম্পিউটার ডিজাইনকারী ব্যক্তিরা অন্য সবার কাছে জবাবদিহি থাকবে। +অবশেষে, আমাদের প্রজন্মের জন্য সবচেয়ে বড় প্রশ্নগুলোর একটি হলো, প্রথম প্রজন্ম হিসেবে যারা AI সমাজে নিয়ে আসছে, কীভাবে নিশ্চিত করা যায় যে কম্পিউটারগুলো মানুষের কাছে দায়বদ্ধ থাকবে এবং যারা কম্পিউটার ডিজাইন করেন তারা সবার কাছে দায়বদ্ধ থাকবেন। ## প্রভাব মূল্যায়ন -মেশিন লার্নিং মডেল প্রশিক্ষণের আগে, AI সিস্টেমের উদ্দেশ্য, এর পরিকল্পিত ব্যবহার, এটি কোথায় স্থাপন করা হবে এবং কারা সিস্টেমের সাথে যোগাযোগ করবে তা বোঝার জন্য একটি প্রভাব মূল্যায়ন পরিচালনা করা গুরুত্বপূর্ণ। এগুলো পর্যালোচক বা পরীক্ষকদের জন্য সহায়ক যারা সিস্টেমটি মূল্যায়ন করছেন এবং সম্ভাব্য ঝুঁকি এবং প্রত্যাশিত পরিণতি চিহ্নিত করার সময় কোন বিষয়গুলো বিবেচনা করতে হবে তা জানেন। +মেশিন লার্নিং মডেল প্রশিক্ষণের আগে, AI সিস্টেমের উদ্দেশ্য, এর পরিকল্পিত ব্যবহার, এটি কোথায় মোতায়েন করা হবে এবং কারা সিস্টেমের সাথে যোগাযোগ করবে তা বুঝতে একটি প্রভাব মূল্যায়ন পরিচালনা করা গুরুত্বপূর্ণ। এটি পর্যালোচক বা পরীক্ষকদের জন্য সহায়ক যারা সিস্টেমটি মূল্যায়ন করছেন, যাতে সম্ভাব্য ঝুঁকি এবং প্রত্যাশিত পরিণতি চিহ্নিত করার সময় কোন বিষয়গুলো বিবেচনা করতে হবে তা জানা যায়। প্রভাব মূল্যায়ন পরিচালনার সময় নিম্নলিখিত বিষয়গুলোতে মনোযোগ দেওয়া হয়: * **ব্যক্তিদের উপর নেতিবাচক প্রভাব**। কোনো সীমাবদ্ধতা বা প্রয়োজনীয়তা, অসমর্থিত ব্যবহার বা সিস্টেমের কর্মক্ষমতাকে বাধাগ্রস্ত করে এমন কোনো পরিচিত সীমাবদ্ধতা সম্পর্কে সচেতন হওয়া গুরুত্বপূর্ণ যাতে সিস্টেমটি এমনভাবে ব্যবহার না করা হয় যা ব্যক্তিদের ক্ষতি করতে পারে। -* **ডেটার প্রয়োজনীয়তা**। সিস্টেমটি কীভাবে এবং কোথায় ডেটা ব্যবহার করবে তা বোঝা পর্যালোচকদের ডেটার প্রয়োজনীয়তা সম্পর্কে সচেতন হতে সাহায্য করে (যেমন GDPR বা HIPPA ডেটা নিয়ম)। এছাড়াও, ডেটার উৎস বা পরিমাণ প্রশিক্ষণের জন্য যথেষ্ট কিনা তা পরীক্ষা করুন। -* **প্রভাবের সারাংশ**। সিস্টেমটি ব্যবহার করার ফলে যে সম্ভাব্য ক্ষতি হতে পারে তার একটি তালিকা সংগ্রহ করুন। ML লাইফসাইকেল জুড়ে, চিহ্নিত সমস্যাগুলো প্রশমিত বা সমাধান করা হয়েছে কিনা তা পর্যালোচনা করুন। -* **প্রযোজ্য লক্ষ্য** ছয়টি মূল নীতির জন্য। প্রতিটি নীতির লক্ষ্যগুলো পূরণ হয়েছে কিনা এবং কোনো ফাঁক রয়েছে কিনা তা মূল্যায়ন করুন। +* **ডেটার প্রয়োজনীয়তা**। সিস্টেমটি কীভাবে এবং কোথায় ডেটা ব্যবহার করবে তা বোঝা পর্যালোচকদের ডেটার প্রয়োজনীয়তা সম্পর্কে সচেতন হতে সহায়তা করে (যেমন GDPR বা HIPPA ডেটা নিয়মাবলী)। এছাড়াও, ডেটার উৎস বা পরিমাণ প্রশিক্ষণের জন্য যথেষ্ট কিনা তা পরীক্ষা করুন। +* **প্রভাবের সারাংশ**। সিস্টেম ব্যবহার থেকে উদ্ভূত সম্ভাব্য ক্ষতির একটি তালিকা সংগ্রহ করুন। ML লাইফসাইকেল জুড়ে, চিহ্নিত সমস্যাগুলো সমাধান করা হয়েছে কিনা তা পর্যালোচনা করুন। +* **প্রতিটি ছয়টি মূল নীতির জন্য প্রযোজ্য লক্ষ্য**। প্রতিটি নীতির লক্ষ্যগুলো পূরণ হয়েছে কিনা এবং কোনো ফাঁক রয়েছে কিনা তা মূল্যায়ন করুন। ## দায়িত্বশীল AI দিয়ে ডিবাগিং -একটি সফটওয়্যার অ্যাপ্লিকেশন ডিবাগ করার মতো, একটি AI সিস্টেম ডিবাগ করা সিস্টেমে সমস্যাগুলো চিহ্নিত এবং সমাধান করার একটি প্রয়োজনীয় প্রক্রিয়া। অনেক কারণ রয়েছে যা একটি মডেলের প্রত্যাশিত বা দায়িত্বশীলভাবে কাজ না করার উপর প্রভাব ফেলতে পারে। বেশিরভাগ প্রচলিত মডেল কর্মক্ষমতা মেট্রিক একটি মডেলের কর্মক্ষমতার পরিমাণগত সামগ্রিক মান, যা একটি মডেল কীভাবে দায়িত্বশীল AI নীতিগুলো লঙ্ঘন করে তা বিশ্লেষণ করার জন্য যথেষ্ট নয়। তদ্ব্যতীত, একটি মেশিন লার্নিং মডেল একটি ব্ল্যাক বক্স যা এর ফলাফল কী চালায় তা বোঝা বা যখন এটি একটি ভুল করে তখন ব্যাখ্যা প্রদান করা কঠিন করে তোলে। এই কোর্সে পরে, আমরা দায়িত্বশীল AI ড্যাশবোর্ড ব্যবহার করে AI সিস্টেম ডিবাগ করার পদ্ধতি শিখব। ড্যাশবোর্ডটি ডেটা বিজ্ঞানী এবং AI ডেভেলপারদের জন্য একটি সামগ্রিক টুল প্রদান করে যা নিম্নলিখিত কাজগুলো সম্পাদন করতে সাহায্য করে: +একটি সফটওয়্যার অ্যাপ্লিকেশন ডিবাগ করার মতো, একটি AI সিস্টেম ডিবাগ করা একটি প্রয়োজনীয় প্রক্রিয়া যা সিস্টেমে সমস্যাগুলো চিহ্নিত এবং সমাধান করে। অনেক কারণ রয়েছে যা একটি মডেলের প্রত্যাশিত বা দায়িত্বশীলভাবে কাজ না করার ক্ষেত্রে প্রভাব ফেলতে পারে। বেশিরভাগ ঐতিহ্যবাহী মডেল কর্মক্ষমতা মেট্রিকগুলো একটি মডেলের কর্মক্ষমতার পরিমাণগত সামগ্রিক মান, যা দায়িত্বশীল AI নীতিগুলো লঙ্ঘন করে কীভাবে একটি মডেল বিশ্লেষণ করা যায় তা যথেষ্ট নয়। তদ্ব্যতীত, একটি মেশিন লার্নিং মডেল একটি ব্ল্যাক বক্স যা এর ফলাফল চালিত করে কী তা বোঝা বা যখন এটি ভুল করে তখন ব্যাখ্যা প্রদান করা কঠিন করে তোলে। এই কোর্সের পরে, আমরা শিখব কীভাবে দায়িত্বশীল AI ড্যাশবোর্ড ব্যবহার করে AI সিস্টেম ডিবাগ করতে হয়। ড্যাশবোর্ডটি ডেটা বিজ্ঞানী এবং AI ডেভেলপারদের জন্য একটি সামগ্রিক টুল প্রদান করে যা নিম্নলিখিত কাজগুলো সম্পাদন করতে সহায়তা করে: * **ত্রুটি বিশ্লেষণ**। মডেলের ত্রুটির বিতরণ চিহ্নিত করতে যা সিস্টেমের ন্যায্যতা বা নির্ভরযোগ্যতাকে প্রভাবিত করতে পারে। -* **মডেলের -এই পাঠে, আপনি মেশিন লার্নিং-এ ন্যায্যতা এবং অন্যায্যতার ধারণাগুলোর কিছু মৌলিক বিষয় শিখেছেন। +* **মডেলের ওভারভিউ**। মডেলের কর্মক্ষমতায় ডেটা কোহর্টগুলোর মধ্যে কোথায় বৈষম্য রয়েছে তা আবিষ্কার করতে। +* **ডেটা বিশ +এই কর্মশালাটি দেখুন আরও গভীরভাবে বিষয়গুলো বোঝার জন্য: -এই বিষয়গুলো আরও গভীরভাবে বোঝার জন্য এই কর্মশালাটি দেখুন: +- দায়িত্বশীল AI-এর সন্ধানে: নীতিগুলোকে বাস্তবে রূপ দেওয়ার উপায়, উপস্থাপনায় বেসমিরা নুশি, মেহরনুশ সামেকি এবং অমিত শর্মা -- দায়িত্বশীল AI-এর সন্ধানে: নীতিগুলোকে বাস্তবে রূপ দেওয়া, উপস্থাপনায় বেসমিরা নুশি, মেহরনুশ সামেকি এবং অমিত শর্মা। +[![দায়িত্বশীল AI টুলবক্স: দায়িত্বশীল AI তৈরির জন্য একটি ওপেন-সোর্স ফ্রেমওয়ার্ক](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI টুলবক্স: দায়িত্বশীল AI তৈরির জন্য একটি ওপেন-সোর্স ফ্রেমওয়ার্ক") -[![দায়িত্বশীল AI টুলবক্স: দায়িত্বশীল AI তৈরির জন্য একটি ওপেন-সোর্স ফ্রেমওয়ার্ক](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI টুলবক্স: দায়িত্বশীল AI তৈরির জন্য একটি ওপেন-সোর্স ফ্রেমওয়ার্ক") +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: RAI টুলবক্স - দায়িত্বশীল AI তৈরির জন্য একটি ওপেন-সোর্স ফ্রেমওয়ার্ক, উপস্থাপনায় বেসমিরা নুশি, মেহরনুশ সামেকি এবং অমিত শর্মা -> 🎥 উপরের ছবিতে ক্লিক করুন ভিডিও দেখার জন্য: দায়িত্বশীল AI টুলবক্স: দায়িত্বশীল AI তৈরির জন্য একটি ওপেন-সোর্স ফ্রেমওয়ার্ক, উপস্থাপনায় বেসমিরা নুশি, মেহরনুশ সামেকি এবং অমিত শর্মা। +এছাড়াও পড়ুন: -এছাড়াও পড়ুন: +- মাইক্রোসফটের RAI রিসোর্স সেন্টার: [দায়িত্বশীল AI রিসোর্স – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- মাইক্রোসফটের RAI রিসোর্স সেন্টার: [দায়িত্বশীল AI রিসোর্স – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- মাইক্রোসফটের FATE গবেষণা দল: [FATE: AI-তে ন্যায্যতা, জবাবদিহিতা, স্বচ্ছতা এবং নৈতিকতা - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -- মাইক্রোসফটের FATE গবেষণা দল: [FATE: AI-তে ন্যায্যতা, জবাবদিহিতা, স্বচ্ছতা এবং নৈতিকতা - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +RAI টুলবক্স: -RAI টুলবক্স: +- [দায়িত্বশীল AI টুলবক্স GitHub রিপোজিটরি](https://github.com/microsoft/responsible-ai-toolbox) -- [দায়িত্বশীল AI টুলবক্স GitHub রিপোজিটরি](https://github.com/microsoft/responsible-ai-toolbox) +Azure Machine Learning-এর ন্যায্যতা নিশ্চিত করার টুলগুলো সম্পর্কে জানুন: -Azure Machine Learning-এর ন্যায্যতা নিশ্চিত করার টুলগুলো সম্পর্কে জানুন: +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) -- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) +## অ্যাসাইনমেন্ট -## অ্যাসাইনমেন্ট - -[RAI টুলবক্স অন্বেষণ করুন](assignment.md) +[RAI টুলবক্স অন্বেষণ করুন](assignment.md) --- diff --git a/translations/bn/1-Introduction/4-techniques-of-ML/README.md b/translations/bn/1-Introduction/4-techniques-of-ML/README.md index 97cb10f36..fa13f4476 100644 --- a/translations/bn/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/bn/1-Introduction/4-techniques-of-ML/README.md @@ -1,8 +1,8 @@ # পাইথন এবং স্কিকিট-লার্ন দিয়ে রিগ্রেশন মডেল শুরু করা -![স্কেচনোটে রিগ্রেশনগুলোর সারাংশ](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.bn.png) +![স্কেচনোটে রিগ্রেশনের সারাংশ](../../../../sketchnotes/ml-regression.png) > স্কেচনোট: [টোমোমি ইমুরা](https://www.twitter.com/girlie_mac) -## [পাঠের পূর্ববর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [পাঠের পূর্ববর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) -> ### [এই পাঠটি R-এও পাওয়া যায়!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) +> ### [এই পাঠটি R-এও উপলব্ধ!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## ভূমিকা -এই চারটি পাঠে, আপনি শিখবেন কীভাবে রিগ্রেশন মডেল তৈরি করতে হয়। আমরা শীঘ্রই আলোচনা করব এগুলো কী কাজে লাগে। তবে তার আগে, নিশ্চিত করুন যে আপনার কাছে সঠিক সরঞ্জাম রয়েছে প্রক্রিয়াটি শুরু করার জন্য! +এই চারটি পাঠে, আপনি রিগ্রেশন মডেল তৈরি করতে শিখবেন। আমরা শীঘ্রই আলোচনা করব যে এগুলো কী কাজে লাগে। তবে তার আগে, নিশ্চিত করুন যে আপনার কাছে সঠিক সরঞ্জাম রয়েছে এই প্রক্রিয়া শুরু করার জন্য! এই পাঠে, আপনি শিখবেন কীভাবে: @@ -34,31 +34,31 @@ CO_OP_TRANSLATOR_METADATA: > 🎥 উপরের ছবিতে ক্লিক করুন একটি সংক্ষিপ্ত ভিডিও দেখার জন্য যেখানে আপনার কম্পিউটারকে মেশিন লার্নিংয়ের জন্য কনফিগার করা দেখানো হয়েছে। -1. **পাইথন ইনস্টল করুন**। নিশ্চিত করুন যে [পাইথন](https://www.python.org/downloads/) আপনার কম্পিউটারে ইনস্টল করা আছে। আপনি ডেটা সায়েন্স এবং মেশিন লার্নিংয়ের অনেক কাজের জন্য পাইথন ব্যবহার করবেন। বেশিরভাগ কম্পিউটার সিস্টেমে ইতোমধ্যেই পাইথন ইনস্টল করা থাকে। কিছু [পাইথন কোডিং প্যাক](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)ও পাওয়া যায়, যা কিছু ব্যবহারকারীর জন্য সেটআপ সহজ করে তোলে। +1. **পাইথন ইনস্টল করুন**। নিশ্চিত করুন যে [পাইথন](https://www.python.org/downloads/) আপনার কম্পিউটারে ইনস্টল করা আছে। আপনি ডেটা সায়েন্স এবং মেশিন লার্নিংয়ের অনেক কাজের জন্য পাইথন ব্যবহার করবেন। বেশিরভাগ কম্পিউটার সিস্টেমে ইতোমধ্যেই পাইথন ইনস্টল করা থাকে। কিছু [পাইথন কোডিং প্যাক](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott)ও রয়েছে, যা কিছু ব্যবহারকারীর জন্য সেটআপ সহজ করে তোলে। - তবে, পাইথনের কিছু ব্যবহার একটি নির্দিষ্ট সংস্করণ প্রয়োজন করে, আবার অন্য কিছু ব্যবহার অন্য সংস্করণ প্রয়োজন করে। এই কারণে, একটি [ভার্চুয়াল এনভায়রনমেন্ট](https://docs.python.org/3/library/venv.html) ব্যবহার করা সুবিধাজনক। + তবে, পাইথনের কিছু ব্যবহার একটি নির্দিষ্ট ভার্সন প্রয়োজন করে, আবার অন্য কিছু ব্যবহার অন্য ভার্সন চায়। এই কারণে, একটি [ভার্চুয়াল এনভায়রনমেন্ট](https://docs.python.org/3/library/venv.html) ব্যবহার করা সুবিধাজনক। -2. **ভিজ্যুয়াল স্টুডিও কোড ইনস্টল করুন**। নিশ্চিত করুন যে আপনার কম্পিউটারে ভিজ্যুয়াল স্টুডিও কোড ইনস্টল করা আছে। [ভিজ্যুয়াল স্টুডিও কোড ইনস্টল করার](https://code.visualstudio.com/) জন্য এই নির্দেশাবলী অনুসরণ করুন। এই কোর্সে আপনি ভিজ্যুয়াল স্টুডিও কোডে পাইথন ব্যবহার করবেন, তাই [পাইথন ডেভেলপমেন্টের জন্য ভিজ্যুয়াল স্টুডিও কোড কনফিগার করার](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) পদ্ধতি সম্পর্কে জেনে নিন। +2. **ভিজ্যুয়াল স্টুডিও কোড ইনস্টল করুন**। নিশ্চিত করুন যে ভিজ্যুয়াল স্টুডিও কোড আপনার কম্পিউটারে ইনস্টল করা আছে। [ভিজ্যুয়াল স্টুডিও কোড ইনস্টল](https://code.visualstudio.com/) করার জন্য এই নির্দেশাবলী অনুসরণ করুন। এই কোর্সে আপনি ভিজ্যুয়াল স্টুডিও কোডে পাইথন ব্যবহার করবেন, তাই [পাইথন ডেভেলপমেন্টের জন্য ভিজ্যুয়াল স্টুডিও কোড কনফিগার](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) সংগ্রহটি অনুসরণ করুন। > > [![ভিজ্যুয়াল স্টুডিও কোডে পাইথন সেটআপ করুন](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "ভিজ্যুয়াল স্টুডিও কোডে পাইথন সেটআপ করুন") > - > 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: ভিজ্যুয়াল স্টুডিও কোডে পাইথন ব্যবহার করা। + > 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: ভিজ্যুয়াল স্টুডিও কোডে পাইথন ব্যবহার। -3. **স্কিকিট-লার্ন ইনস্টল করুন**, এই [নির্দেশাবলী](https://scikit-learn.org/stable/install.html) অনুসরণ করে। যেহেতু আপনাকে নিশ্চিত করতে হবে যে আপনি পাইথন ৩ ব্যবহার করছেন, তাই ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করার পরামর্শ দেওয়া হয়। মনে রাখবেন, যদি আপনি এটি একটি M1 ম্যাক-এ ইনস্টল করেন, তাহলে উপরের লিঙ্কে বিশেষ নির্দেশাবলী রয়েছে। +3. **স্কিকিট-লার্ন ইনস্টল করুন**, এই [নির্দেশাবলী](https://scikit-learn.org/stable/install.html) অনুসরণ করে। যেহেতু আপনাকে পাইথন ৩ ব্যবহার নিশ্চিত করতে হবে, তাই ভার্চুয়াল এনভায়রনমেন্ট ব্যবহার করার পরামর্শ দেওয়া হয়। যদি আপনি M1 ম্যাক-এ এই লাইব্রেরি ইনস্টল করেন, তবে উপরের লিঙ্কে বিশেষ নির্দেশাবলী রয়েছে। 4. **জুপিটার নোটবুক ইনস্টল করুন**। আপনাকে [জুপিটার প্যাকেজ](https://pypi.org/project/jupyter/) ইনস্টল করতে হবে। ## আপনার মেশিন লার্নিং লেখার পরিবেশ -আপনি **নোটবুক** ব্যবহার করবেন আপনার পাইথন কোড ডেভেলপ করতে এবং মেশিন লার্নিং মডেল তৈরি করতে। এই ধরনের ফাইল ডেটা সায়েন্টিস্টদের জন্য একটি সাধারণ টুল এবং এগুলো `.ipynb` এক্সটেনশনের মাধ্যমে চিহ্নিত করা যায়। +আপনি **নোটবুক** ব্যবহার করবেন আপনার পাইথন কোড ডেভেলপ করতে এবং মেশিন লার্নিং মডেল তৈরি করতে। এই ধরনের ফাইল ডেটা সায়েন্টিস্টদের জন্য একটি সাধারণ টুল এবং এগুলো `.ipynb` এক্সটেনশনে চিহ্নিত করা যায়। -নোটবুক একটি ইন্টারঅ্যাকটিভ পরিবেশ যা ডেভেলপারকে কোড লেখার পাশাপাশি নোট যোগ করতে এবং কোডের চারপাশে ডকুমেন্টেশন লিখতে দেয়, যা পরীক্ষামূলক বা গবেষণাভিত্তিক প্রকল্পের জন্য বেশ সহায়ক। +নোটবুক একটি ইন্টারঅ্যাকটিভ পরিবেশ যা ডেভেলপারকে কোড লেখার পাশাপাশি নোট এবং ডকুমেন্টেশন যোগ করতে দেয়, যা গবেষণা বা পরীক্ষামূলক প্রকল্পের জন্য বেশ সহায়ক। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - রিগ্রেশন মডেল তৈরি শুরু করতে জুপিটার নোটবুক সেটআপ করুন](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "শিক্ষার্থীদের জন্য মেশিন লার্নিং - রিগ্রেশন মডেল তৈরি শুরু করতে জুপিটার নোটবুক সেটআপ করুন") +[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - রিগ্রেশন মডেল তৈরি করতে জুপিটার নোটবুক সেটআপ করুন](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "শিক্ষার্থীদের জন্য মেশিন লার্নিং - রিগ্রেশন মডেল তৈরি করতে জুপিটার নোটবুক সেটআপ করুন") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি সংক্ষিপ্ত ভিডিও দেখার জন্য যেখানে এই অনুশীলনটি দেখানো হয়েছে। +> 🎥 উপরের ছবিতে ক্লিক করুন এই অনুশীলনটি কাজ করে দেখানোর একটি সংক্ষিপ্ত ভিডিও দেখার জন্য। ### অনুশীলন - একটি নোটবুক নিয়ে কাজ করুন @@ -66,50 +66,50 @@ CO_OP_TRANSLATOR_METADATA: 1. ভিজ্যুয়াল স্টুডিও কোডে _notebook.ipynb_ খুলুন। - একটি জুপিটার সার্ভার চালু হবে এবং পাইথন ৩+ শুরু হবে। আপনি নোটবুকের এমন কিছু অংশ খুঁজে পাবেন যা `run` করা যায়, অর্থাৎ কোডের টুকরো। একটি কোড ব্লক চালানোর জন্য, প্লে বাটনের মতো দেখতে আইকনটি নির্বাচন করুন। + একটি জুপিটার সার্ভার চালু হবে এবং পাইথন ৩+ শুরু হবে। আপনি নোটবুকের এমন কিছু অংশ পাবেন যা `run` করা যায়, অর্থাৎ কোডের টুকরো। একটি কোড ব্লক চালানোর জন্য, প্লে বোতামের মতো দেখতে আইকনটি নির্বাচন করুন। -2. `md` আইকনটি নির্বাচন করুন এবং কিছু মার্কডাউন যোগ করুন, যেমন **# Welcome to your notebook**। +2. `md` আইকনটি নির্বাচন করুন এবং কিছু মার্কডাউন যোগ করুন, এবং এই টেক্সটটি লিখুন **# Welcome to your notebook**। এরপর, কিছু পাইথন কোড যোগ করুন। 3. কোড ব্লকে **print('hello notebook')** টাইপ করুন। 4. কোড চালানোর জন্য তীর চিহ্নটি নির্বাচন করুন। - আপনি নিচের আউটপুটটি দেখতে পাবেন: + আপনি প্রিন্ট করা স্টেটমেন্টটি দেখতে পাবেন: ```output hello notebook ``` -![ভিএস কোডে একটি নোটবুক খোলা](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.bn.jpg) +![ভিএস কোডে একটি নোটবুক খোলা](../../../../2-Regression/1-Tools/images/notebook.jpg) আপনার কোডের সাথে মন্তব্য যোগ করে নোটবুকটি স্ব-ডকুমেন্ট করতে পারেন। -✅ এক মিনিটের জন্য ভাবুন, একজন ওয়েব ডেভেলপারের কাজের পরিবেশ এবং একজন ডেটা সায়েন্টিস্টের কাজের পরিবেশ কতটা ভিন্ন। +✅ এক মিনিট চিন্তা করুন, একজন ওয়েব ডেভেলপারের কাজের পরিবেশ এবং একজন ডেটা সায়েন্টিস্টের কাজের পরিবেশ কতটা আলাদা। -## স্কিকিট-লার্ন দিয়ে কাজ শুরু +## স্কিকিট-লার্ন দিয়ে শুরু করা -এখন যেহেতু আপনার লোকাল পরিবেশে পাইথন সেটআপ করা হয়েছে এবং আপনি জুপিটার নোটবুক নিয়ে স্বাচ্ছন্দ্যবোধ করছেন, চলুন স্কিকিট-লার্ন নিয়ে সমানভাবে স্বাচ্ছন্দ্যবোধ করি। (উচ্চারণ করুন `sci` যেমন `science`)। স্কিকিট-লার্ন মেশিন লার্নিং কাজ সম্পাদনের জন্য একটি [ব্যাপক এপিআই](https://scikit-learn.org/stable/modules/classes.html#api-ref) প্রদান করে। +এখন যেহেতু পাইথন আপনার লোকাল পরিবেশে সেটআপ করা হয়েছে এবং আপনি জুপিটার নোটবুক নিয়ে স্বাচ্ছন্দ্যবোধ করছেন, চলুন স্কিকিট-লার্ন নিয়ে সমানভাবে স্বাচ্ছন্দ্যবোধ করি। স্কিকিট-লার্ন একটি [ব্যাপক এপিআই](https://scikit-learn.org/stable/modules/classes.html#api-ref) প্রদান করে যা আপনাকে মেশিন লার্নিংয়ের কাজ সম্পাদনে সাহায্য করে। -তাদের [ওয়েবসাইট](https://scikit-learn.org/stable/getting_started.html) অনুযায়ী, "স্কিকিট-লার্ন একটি ওপেন সোর্স মেশিন লার্নিং লাইব্রেরি যা সুপারভাইজড এবং আনসুপারভাইজড লার্নিং সমর্থন করে। এটি মডেল ফিটিং, ডেটা প্রিপ্রসেসিং, মডেল নির্বাচন এবং মূল্যায়ন, এবং অন্যান্য অনেক ইউটিলিটির জন্য বিভিন্ন টুল সরবরাহ করে।" +তাদের [ওয়েবসাইট](https://scikit-learn.org/stable/getting_started.html) অনুযায়ী, "স্কিকিট-লার্ন একটি ওপেন সোর্স মেশিন লার্নিং লাইব্রেরি যা সুপারভাইজড এবং আনসুপারভাইজড লার্নিং সমর্থন করে। এটি মডেল ফিটিং, ডেটা প্রিপ্রসেসিং, মডেল সিলেকশন এবং ইভ্যালুয়েশন, এবং আরও অনেক ইউটিলিটির জন্য বিভিন্ন টুল সরবরাহ করে।" -এই কোর্সে, আপনি স্কিকিট-লার্ন এবং অন্যান্য টুল ব্যবহার করে মেশিন লার্নিং মডেল তৈরি করবেন যা আমরা 'প্রথাগত মেশিন লার্নিং' কাজ বলে থাকি। আমরা ইচ্ছাকৃতভাবে নিউরাল নেটওয়ার্ক এবং ডিপ লার্নিং এড়িয়ে গেছি, কারণ সেগুলো আমাদের আসন্ন 'AI for Beginners' কারিকুলামে ভালোভাবে কভার করা হবে। +এই কোর্সে, আপনি স্কিকিট-লার্ন এবং অন্যান্য টুল ব্যবহার করে মেশিন লার্নিং মডেল তৈরি করবেন যা আমরা 'প্রথাগত মেশিন লার্নিং' কাজ বলে থাকি। আমরা ইচ্ছাকৃতভাবে নিউরাল নেটওয়ার্ক এবং ডিপ লার্নিং এড়িয়ে গেছি, কারণ সেগুলো আমাদের আসন্ন 'AI for Beginners' কারিকুলামে আরও ভালোভাবে কভার করা হবে। -স্কিকিট-লার্ন মডেল তৈরি এবং সেগুলো মূল্যায়ন করা সহজ করে তোলে। এটি প্রধানত সংখ্যাসূচক ডেটা ব্যবহার করে এবং শিক্ষার সরঞ্জাম হিসেবে ব্যবহারের জন্য বেশ কিছু প্রস্তুত ডেটাসেট অন্তর্ভুক্ত করে। এটি শিক্ষার্থীদের চেষ্টা করার জন্য প্রি-বিল্ট মডেলও অন্তর্ভুক্ত করে। চলুন প্রিপ্যাকেজড ডেটা লোড করা এবং একটি বিল্ট-ইন এস্টিমেটর ব্যবহার করে প্রথম মেশিন লার্নিং মডেল তৈরি করার প্রক্রিয়া অন্বেষণ করি। +স্কিকিট-লার্ন মডেল তৈরি এবং সেগুলো ব্যবহারযোগ্যতার জন্য ইভ্যালুয়েট করা সহজ করে তোলে। এটি প্রধানত সংখ্যাসূচক ডেটা ব্যবহারে ফোকাস করে এবং শিক্ষার সরঞ্জাম হিসেবে ব্যবহারের জন্য বেশ কিছু প্রস্তুত ডেটাসেট অন্তর্ভুক্ত করে। এটি শিক্ষার্থীদের চেষ্টা করার জন্য প্রি-বিল্ট মডেলও অন্তর্ভুক্ত করে। চলুন প্রিপ্যাকেজড ডেটা লোড করা এবং একটি বিল্ট-ইন এস্টিমেটর ব্যবহার করে প্রথম মেশিন লার্নিং মডেল তৈরি করার প্রক্রিয়া অন্বেষণ করি। ## অনুশীলন - আপনার প্রথম স্কিকিট-লার্ন নোটবুক -> এই টিউটোরিয়ালটি স্কিকিট-লার্নের ওয়েবসাইটে [লিনিয়ার রিগ্রেশন উদাহরণ](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) দ্বারা অনুপ্রাণিত। +> এই টিউটোরিয়ালটি স্কিকিট-লার্নের ওয়েবসাইটে থাকা [লিনিয়ার রিগ্রেশনের উদাহরণ](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) দ্বারা অনুপ্রাণিত। [![শিক্ষার্থীদের জন্য মেশিন লার্নিং - পাইথনে আপনার প্রথম লিনিয়ার রিগ্রেশন প্রকল্প](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "শিক্ষার্থীদের জন্য মেশিন লার্নিং - পাইথনে আপনার প্রথম লিনিয়ার রিগ্রেশন প্রকল্প") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি সংক্ষিপ্ত ভিডিও দেখার জন্য যেখানে এই অনুশীলনটি দেখানো হয়েছে। +> 🎥 উপরের ছবিতে ক্লিক করুন এই অনুশীলনটি কাজ করে দেখানোর একটি সংক্ষিপ্ত ভিডিও দেখার জন্য। এই পাঠের সাথে সম্পর্কিত _notebook.ipynb_ ফাইলটি খুলুন এবং সমস্ত সেল মুছে ফেলুন 'ট্র্যাশ ক্যান' আইকনে ক্লিক করে। -এই অংশে, আপনি স্কিকিট-লার্নে অন্তর্ভুক্ত একটি ছোট ডায়াবেটিস ডেটাসেট নিয়ে কাজ করবেন যা শেখার উদ্দেশ্যে তৈরি। ধরুন আপনি ডায়াবেটিস রোগীদের জন্য একটি চিকিৎসা পরীক্ষা করতে চান। মেশিন লার্নিং মডেলগুলো আপনাকে সাহায্য করতে পারে কোন রোগী চিকিৎসায় ভালো সাড়া দেবে তা নির্ধারণ করতে, ভেরিয়েবলগুলোর সংমিশ্রণের ভিত্তিতে। এমনকি একটি খুব সাধারণ রিগ্রেশন মডেল, যখন ভিজ্যুয়ালাইজ করা হয়, তখন ভেরিয়েবলগুলোর সম্পর্ক সম্পর্কে তথ্য দেখাতে পারে যা আপনাকে আপনার তাত্ত্বিক ক্লিনিকাল ট্রায়াল সংগঠিত করতে সাহায্য করবে। +এই অংশে, আপনি স্কিকিট-লার্নে অন্তর্ভুক্ত ডায়াবেটিস সম্পর্কিত একটি ছোট ডেটাসেট নিয়ে কাজ করবেন। ধরুন আপনি ডায়াবেটিস রোগীদের জন্য একটি চিকিৎসা পরীক্ষা করতে চান। মেশিন লার্নিং মডেল আপনাকে ভেরিয়েবলগুলোর সংমিশ্রণের ভিত্তিতে কোন রোগীরা চিকিৎসায় ভালো সাড়া দেবে তা নির্ধারণে সাহায্য করতে পারে। এমনকি একটি খুব সাধারণ রিগ্রেশন মডেল, যখন ভিজ্যুয়ালাইজ করা হয়, তখন ভেরিয়েবলগুলোর সম্পর্ক সম্পর্কে তথ্য দেখাতে পারে যা আপনাকে তাত্ত্বিক ক্লিনিকাল ট্রায়াল সংগঠিত করতে সাহায্য করবে। -✅ রিগ্রেশনের অনেক ধরনের পদ্ধতি রয়েছে, এবং আপনি কোনটি বেছে নেবেন তা নির্ভর করে আপনি কী উত্তর খুঁজছেন তার ওপর। যদি আপনি একটি নির্দিষ্ট বয়সের ব্যক্তির সম্ভাব্য উচ্চতা পূর্বানুমান করতে চান, তাহলে আপনি লিনিয়ার রিগ্রেশন ব্যবহার করবেন, কারণ আপনি একটি **সংখ্যাসূচক মান** খুঁজছেন। যদি আপনি জানতে চান একটি নির্দিষ্ট ধরনের খাবার ভেগান হিসেবে বিবেচিত হওয়া উচিত কিনা, তাহলে আপনি একটি **ক্যাটেগরি অ্যাসাইনমেন্ট** খুঁজছেন, তাই আপনি লজিস্টিক রিগ্রেশন ব্যবহার করবেন। আপনি পরে লজিস্টিক রিগ্রেশন সম্পর্কে আরও শিখবেন। ডেটা থেকে কিছু প্রশ্ন ভাবুন এবং কোন পদ্ধতি বেশি উপযুক্ত হবে তা নিয়ে চিন্তা করুন। +✅ রিগ্রেশনের অনেক ধরনের পদ্ধতি রয়েছে, এবং আপনি কোনটি বেছে নেবেন তা নির্ভর করে আপনি কী উত্তর খুঁজছেন তার ওপর। যদি আপনি একটি নির্দিষ্ট বয়সের ব্যক্তির সম্ভাব্য উচ্চতা পূর্বানুমান করতে চান, তবে আপনি লিনিয়ার রিগ্রেশন ব্যবহার করবেন, কারণ আপনি একটি **সংখ্যাসূচক মান** খুঁজছেন। যদি আপনি জানতে চান একটি নির্দিষ্ট ধরনের খাবার ভেগান হিসেবে বিবেচিত হওয়া উচিত কিনা, তবে আপনি একটি **ক্যাটেগরি অ্যাসাইনমেন্ট** খুঁজছেন, তাই আপনি লজিস্টিক রিগ্রেশন ব্যবহার করবেন। আপনি পরে লজিস্টিক রিগ্রেশন সম্পর্কে আরও শিখবেন। ডেটা থেকে কিছু প্রশ্ন ভাবুন এবং কোন পদ্ধতি বেশি উপযুক্ত হবে তা চিন্তা করুন। চলুন এই কাজটি শুরু করি। @@ -135,14 +135,14 @@ CO_OP_TRANSLATOR_METADATA: ### ডায়াবেটিস ডেটাসেট -বিল্ট-ইন [ডায়াবেটিস ডেটাসেট](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)-এ ডায়াবেটিস সম্পর্কিত ৪৪২টি নমুনা ডেটা রয়েছে, যার মধ্যে ১০টি ফিচার ভেরিয়েবল অন্তর্ভুক্ত, যেমন: +[ডায়াবেটিস ডেটাসেট](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset)-এ ডায়াবেটিস সম্পর্কিত ৪৪২টি নমুনা ডেটা রয়েছে, যার মধ্যে ১০টি ফিচার ভেরিয়েবল অন্তর্ভুক্ত, যেমন: - age: বয়স (বছরে) - bmi: বডি মাস ইনডেক্স - bp: গড় রক্তচাপ - s1 tc: টি-সেল (এক ধরনের শ্বেত রক্তকণিকা) -✅ এই ডেটাসেটে 'sex' ধারণাটি একটি ফিচার ভেরিয়েবল হিসেবে অন্তর্ভুক্ত, যা ডায়াবেটিস গবেষণার জন্য গুরুত্বপূর্ণ। অনেক মেডিকেল ডেটাসেটে এই ধরনের বাইনারি শ্রেণিবিন্যাস অন্তর্ভুক্ত থাকে। ভাবুন, কীভাবে এই ধরনের শ্রেণিবিন্যাস জনসংখ্যার কিছু অংশকে চিকিৎসা থেকে বাদ দিতে পারে। +✅ এই ডেটাসেটে 'sex' ফিচার ভেরিয়েবল অন্তর্ভুক্ত রয়েছে, যা ডায়াবেটিস গবেষণার জন্য গুরুত্বপূর্ণ। অনেক মেডিকেল ডেটাসেটে এই ধরনের বাইনারি শ্রেণিবিন্যাস অন্তর্ভুক্ত থাকে। চিন্তা করুন, এই ধরনের শ্রেণিবিন্যাস কীভাবে জনসংখ্যার নির্দিষ্ট অংশকে চিকিৎসা থেকে বাদ দিতে পারে। এখন, X এবং y ডেটা লোড করুন। @@ -168,9 +168,9 @@ CO_OP_TRANSLATOR_METADATA: -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` - ✅ ডেটা এবং রিগ্রেশন টার্গেটের মধ্যে সম্পর্ক নিয়ে একটু ভাবুন। লিনিয়ার রিগ্রেশন ফিচার X এবং টার্গেট ভেরিয়েবল y-এর মধ্যে সম্পর্ক পূর্বানুমান করে। ডায়াবেটিস ডেটাসেটের জন্য [টার্গেট](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ডকুমেন্টেশনে খুঁজে বের করতে পারেন? এই ডেটাসেট কী প্রদর্শন করছে? + ✅ ডেটা এবং রিগ্রেশন টার্গেটের মধ্যে সম্পর্ক নিয়ে একটু চিন্তা করুন। লিনিয়ার রিগ্রেশন ফিচার X এবং টার্গেট ভেরিয়েবল y-এর মধ্যে সম্পর্ক পূর্বানুমান করে। ডায়াবেটিস ডেটাসেটের জন্য [টার্গেট](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) ডকুমেন্টেশনে খুঁজে বের করুন। এই ডেটাসেট কী প্রদর্শন করছে? -2. এরপর, ডেটাসেটের একটি অংশ প্লট করার জন্য নির্বাচন করুন, ডেটাসেটের ৩য় কলামটি নির্বাচন করে। এটি করতে, `:` অপারেটর ব্যবহার করে সব রো নির্বাচন করুন, এবং তারপর ৩য় কলামটি (ইন্ডেক্স ২) নির্বাচন করুন। এছাড়াও, ডেটাকে ২ডি অ্যারে হিসেবে রিশেপ করুন - প্লট করার জন্য প্রয়োজনীয় - `reshape(n_rows, n_columns)` ব্যবহার করে। যদি প্যারামিটারগুলোর একটি -১ হয়, সংশ্লিষ্ট ডাইমেনশন স্বয়ংক্রিয়ভাবে গণনা করা হয়। +2. এরপর, ডেটাসেটের একটি অংশ প্লট করার জন্য নির্বাচন করুন, ডেটাসেটের তৃতীয় কলামটি নির্বাচন করে। এটি করতে, `:` অপারেটর ব্যবহার করে সমস্ত সারি নির্বাচন করুন, এবং তারপর ইনডেক্স (2) ব্যবহার করে তৃতীয় কলামটি নির্বাচন করুন। আপনি `reshape(n_rows, n_columns)` ব্যবহার করে ডেটাকে ২ডি অ্যারেতে রিশেপ করতে পারেন। যদি প্যারামিটারগুলোর একটি -1 হয়, তবে সংশ্লিষ্ট ডাইমেনশন স্বয়ংক্রিয়ভাবে গণনা করা হয়। ```python X = X[:, 2] @@ -192,23 +192,25 @@ CO_OP_TRANSLATOR_METADATA: model.fit(X_train, y_train) ``` - ✅ `model.fit()` একটি ফাংশন যা আপনি টেনসরফ্লোসহ অনেক এমএল লাইব্রের -✅ এখানে কী ঘটছে তা নিয়ে একটু ভাবুন। একটি সরল রেখা অনেক ছোট ছোট ডেটা বিন্দুর মধ্য দিয়ে যাচ্ছে, কিন্তু এটি আসলে কী করছে? আপনি কি দেখতে পাচ্ছেন যে এই রেখাটি কীভাবে আপনাকে অনুমান করতে সাহায্য করতে পারে যে একটি নতুন, অদেখা ডেটা পয়েন্ট প্লটের y অক্ষের সাথে সম্পর্কিত কোথায় ফিট হবে? এই মডেলের ব্যবহারিক দিকটি শব্দে প্রকাশ করার চেষ্টা করুন। + ✅ `model.fit()` একটি ফাংশন যা আপনি টেনসরফ্লোসহ অনেক এমএল লাইব্রেরিতে দেখতে পাবেন। -অভিনন্দন, আপনি আপনার প্রথম লিনিয়ার রিগ্রেশন মডেল তৈরি করেছেন, এটি দিয়ে একটি পূর্বাভাস তৈরি করেছেন এবং এটি একটি প্লটে প্রদর্শন করেছেন! +5. এরপর, টেস্ট ডেটা ব্যবহার করে একটি প্রেডিকশন তৈরি করুন, `predict()` ফাংশন ব্যবহার করে। এটি ডেটা গ্রুপ +✅ এখানে কী ঘটছে তা একটু চিন্তা করুন। একটি সরল রেখা অনেক ছোট ছোট ডেটা বিন্দুর মধ্য দিয়ে যাচ্ছে, কিন্তু এটি ঠিক কী করছে? আপনি কি দেখতে পাচ্ছেন যে এই রেখাটি কীভাবে আপনাকে সাহায্য করতে পারে একটি নতুন, অদেখা ডেটা পয়েন্টের অবস্থান প্লটের y অক্ষের সাথে সম্পর্কিতভাবে পূর্বাভাস করতে? এই মডেলের ব্যবহারিক প্রয়োগটি শব্দে প্রকাশ করার চেষ্টা করুন। + +অভিনন্দন, আপনি আপনার প্রথম লিনিয়ার রিগ্রেশন মডেল তৈরি করেছেন, এর মাধ্যমে একটি পূর্বাভাস তৈরি করেছেন এবং এটি একটি প্লটে প্রদর্শন করেছেন! --- ## 🚀চ্যালেঞ্জ -এই ডেটাসেট থেকে একটি ভিন্ন ভেরিয়েবল প্লট করুন। ইঙ্গিত: এই লাইনটি সম্পাদনা করুন: `X = X[:,2]`। এই ডেটাসেটের লক্ষ্য বিবেচনা করে, আপনি ডায়াবেটিস রোগের অগ্রগতি সম্পর্কে কী আবিষ্কার করতে সক্ষম? +এই ডেটাসেট থেকে একটি ভিন্ন ভেরিয়েবল প্লট করুন। ইঙ্গিত: এই লাইনটি সম্পাদনা করুন: `X = X[:,2]`। এই ডেটাসেটের লক্ষ্য অনুযায়ী, আপনি ডায়াবেটিস রোগের অগ্রগতি সম্পর্কে কী আবিষ্কার করতে সক্ষম? -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## পুনরালোচনা ও স্ব-অধ্যয়ন +## পর্যালোচনা ও স্ব-অধ্যয়ন -এই টিউটোরিয়ালে, আপনি সাধারণ লিনিয়ার রিগ্রেশন নিয়ে কাজ করেছেন, ইউনিভেরিয়েট বা মাল্টিপল লিনিয়ার রিগ্রেশনের পরিবর্তে। এই পদ্ধতিগুলির মধ্যে পার্থক্য সম্পর্কে একটু পড়ুন, অথবা [এই ভিডিওটি](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef) দেখুন। +এই টিউটোরিয়ালে, আপনি সাধারণ লিনিয়ার রিগ্রেশন নিয়ে কাজ করেছেন, ইউনিভেরিয়েট বা মাল্টিপল লিনিয়ার রিগ্রেশন নয়। এই পদ্ধতিগুলির মধ্যে পার্থক্য সম্পর্কে একটু পড়ুন, অথবা [এই ভিডিওটি](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) নিন। +রিগ্রেশনের ধারণা সম্পর্কে আরও পড়ুন এবং ভাবুন এই কৌশলটি দিয়ে কী ধরনের প্রশ্নের উত্তর দেওয়া যেতে পারে। আপনার জ্ঞান আরও গভীর করতে এই [টিউটোরিয়ালটি](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) নিন। ## অ্যাসাইনমেন্ট @@ -217,4 +219,4 @@ CO_OP_TRANSLATOR_METADATA: --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file diff --git a/translations/bn/2-Regression/2-Data/README.md b/translations/bn/2-Regression/2-Data/README.md index 78e9521c7..76dfdff41 100644 --- a/translations/bn/2-Regression/2-Data/README.md +++ b/translations/bn/2-Regression/2-Data/README.md @@ -1,71 +1,71 @@ -# স্কিকিট-লার্ন ব্যবহার করে একটি রিগ্রেশন মডেল তৈরি করা: ডেটা প্রস্তুত এবং ভিজুয়ালাইজেশন +# Scikit-learn ব্যবহার করে একটি রিগ্রেশন মডেল তৈরি করুন: ডেটা প্রস্তুত এবং ভিজ্যুয়ালাইজ করুন -![ডেটা ভিজুয়ালাইজেশন ইনফোগ্রাফিক](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.bn.png) +![ডেটা ভিজ্যুয়ালাইজেশন ইনফোগ্রাফিক](../../../../2-Regression/2-Data/images/data-visualization.png) ইনফোগ্রাফিক: [দাসানি মাদিপল্লি](https://twitter.com/dasani_decoded) -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -> ### [এই পাঠটি R-এও উপলব্ধ!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) +> ### [এই পাঠটি R-এ উপলব্ধ!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) ## ভূমিকা -আপনি যখন স্কিকিট-লার্ন ব্যবহার করে মেশিন লার্নিং মডেল তৈরি করতে প্রস্তুত, তখন আপনার ডেটা থেকে সঠিক প্রশ্ন জিজ্ঞাসা করাটা অত্যন্ত গুরুত্বপূর্ণ। ডেটার সাথে কাজ করার সময় এবং মেশিন লার্নিং সমাধান প্রয়োগ করার সময়, সঠিক প্রশ্ন জিজ্ঞাসা করা অত্যন্ত গুরুত্বপূর্ণ যাতে ডেটার সম্ভাবনাগুলি সঠিকভাবে উন্মোচিত হয়। +আপনি যখন Scikit-learn ব্যবহার করে মেশিন লার্নিং মডেল তৈরি করতে শুরু করবেন, তখন আপনার ডেটা থেকে সঠিক প্রশ্ন জিজ্ঞাসা করার জন্য প্রস্তুত হতে হবে। ডেটার সাথে কাজ করার সময় এবং ML সমাধান প্রয়োগ করার সময়, সঠিক প্রশ্ন জিজ্ঞাসা করা অত্যন্ত গুরুত্বপূর্ণ যাতে আপনার ডেটাসেটের সম্ভাবনাগুলি সঠিকভাবে উন্মোচিত হয়। এই পাঠে আপনি শিখবেন: - কীভাবে মডেল তৈরির জন্য আপনার ডেটা প্রস্তুত করবেন। -- কীভাবে ম্যাটপ্লটলিব ব্যবহার করে ডেটা ভিজুয়ালাইজ করবেন। +- কীভাবে Matplotlib ব্যবহার করে ডেটা ভিজ্যুয়ালাইজ করবেন। -## আপনার ডেটা থেকে সঠিক প্রশ্ন জিজ্ঞাসা করা +## আপনার ডেটার সঠিক প্রশ্ন জিজ্ঞাসা করা -আপনার যে প্রশ্নের উত্তর প্রয়োজন তা নির্ধারণ করবে আপনি কোন ধরনের মেশিন লার্নিং অ্যালগরিদম ব্যবহার করবেন। এবং আপনি যে উত্তরটি পাবেন তার গুণমান অনেকাংশে আপনার ডেটার প্রকৃতির উপর নির্ভর করবে। +আপনার উত্তর পেতে চাওয়া প্রশ্নটি নির্ধারণ করবে আপনি কোন ধরনের ML অ্যালগরিদম ব্যবহার করবেন। এবং আপনি যে উত্তরটি পাবেন তার গুণমান আপনার ডেটার প্রকৃতির উপর ব্যাপকভাবে নির্ভর করবে। -এই পাঠের জন্য সরবরাহিত [ডেটা](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) দেখুন। আপনি এই .csv ফাইলটি VS Code-এ খুলতে পারেন। দ্রুত স্ক্যান করলে দেখা যায় যে এতে ফাঁকা জায়গা এবং স্ট্রিং ও সংখ্যার মিশ্রণ রয়েছে। এছাড়াও একটি অদ্ভুত কলাম রয়েছে যার নাম 'Package', যেখানে ডেটা 'sacks', 'bins' এবং অন্যান্য মানের মিশ্রণ। ডেটাটি আসলে কিছুটা বিশৃঙ্খল। +এই পাঠের জন্য প্রদত্ত [ডেটা](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) দেখুন। আপনি এই .csv ফাইলটি VS Code-এ খুলতে পারেন। দ্রুত স্কিম করলে দেখা যায় যে এখানে ফাঁকা স্থান এবং স্ট্রিং ও সংখ্যার মিশ্রণ রয়েছে। এছাড়াও একটি অদ্ভুত কলাম রয়েছে যার নাম 'Package', যেখানে ডেটা 'sacks', 'bins' এবং অন্যান্য মানের মিশ্রণ। ডেটা আসলে একটু বিশৃঙ্খল। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - কীভাবে একটি ডেটাসেট বিশ্লেষণ এবং পরিষ্কার করবেন](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "শিক্ষার্থীদের জন্য মেশিন লার্নিং - কীভাবে একটি ডেটাসেট বিশ্লেষণ এবং পরিষ্কার করবেন") +[![ML for beginners - কীভাবে একটি ডেটাসেট বিশ্লেষণ এবং পরিষ্কার করবেন](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML for beginners - কীভাবে একটি ডেটাসেট বিশ্লেষণ এবং পরিষ্কার করবেন") -> 🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের জন্য ডেটা প্রস্তুত করার একটি সংক্ষিপ্ত ভিডিও দেখার জন্য। +> 🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের জন্য ডেটা প্রস্তুত করার একটি সংক্ষিপ্ত ভিডিও দেখতে। -আসলে, এমন একটি ডেটাসেট পাওয়া খুবই বিরল যা সম্পূর্ণ প্রস্তুত এবং সরাসরি একটি মেশিন লার্নিং মডেল তৈরির জন্য ব্যবহার করা যায়। এই পাঠে, আপনি শিখবেন কীভাবে স্ট্যান্ডার্ড পাইথন লাইব্রেরি ব্যবহার করে একটি কাঁচা ডেটাসেট প্রস্তুত করবেন। এছাড়াও, আপনি ডেটা ভিজুয়ালাইজ করার বিভিন্ন কৌশল শিখবেন। +আসলে, সম্পূর্ণ প্রস্তুত একটি ডেটাসেট পাওয়া খুবই বিরল যা সরাসরি ML মডেল তৈরির জন্য ব্যবহার করা যায়। এই পাঠে, আপনি স্ট্যান্ডার্ড Python লাইব্রেরি ব্যবহার করে একটি কাঁচা ডেটাসেট প্রস্তুত করার পদ্ধতি শিখবেন। এছাড়াও, আপনি ডেটা ভিজ্যুয়ালাইজ করার বিভিন্ন কৌশল শিখবেন। ## কেস স্টাডি: 'কুমড়ার বাজার' -এই ফোল্ডারে, মূল `data` ফোল্ডারে [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) নামে একটি .csv ফাইল রয়েছে, যেখানে ১৭৫৭টি লাইন ডেটা রয়েছে যা শহর অনুযায়ী গোষ্ঠীবদ্ধ কুমড়ার বাজার সম্পর্কিত। এটি কাঁচা ডেটা যা [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) থেকে সংগ্রহ করা হয়েছে, যা মার্কিন যুক্তরাষ্ট্রের কৃষি বিভাগের দ্বারা বিতরণ করা হয়। +এই ফোল্ডারে আপনি মূল `data` ফোল্ডারে [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) নামে একটি .csv ফাইল পাবেন, যেখানে 1757 লাইনের ডেটা রয়েছে যা শহর অনুযায়ী গোষ্ঠীবদ্ধ কুমড়ার বাজার সম্পর্কে তথ্য প্রদান করে। এটি [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) থেকে প্রাপ্ত কাঁচা ডেটা, যা মার্কিন যুক্তরাষ্ট্রের কৃষি বিভাগের দ্বারা বিতরণ করা হয়। ### ডেটা প্রস্তুত করা -এই ডেটা পাবলিক ডোমেইনে রয়েছে। এটি USDA ওয়েবসাইট থেকে বিভিন্ন শহরের জন্য আলাদা আলাদা ফাইল হিসেবে ডাউনলোড করা যায়। অনেক আলাদা ফাইল এড়াতে, আমরা সমস্ত শহরের ডেটা একত্রিত করে একটি স্প্রেডশিটে রেখেছি। সুতরাং, আমরা ইতিমধ্যে ডেটা কিছুটা _প্রস্তুত_ করেছি। এখন, আসুন ডেটাটি আরও কাছ থেকে দেখি। +এই ডেটা পাবলিক ডোমেইনে রয়েছে। এটি USDA ওয়েবসাইট থেকে শহর অনুযায়ী আলাদা ফাইল হিসেবে ডাউনলোড করা যায়। অনেক আলাদা ফাইল এড়াতে, আমরা সমস্ত শহরের ডেটা একত্রিত করে একটি স্প্রেডশিটে রেখেছি, ফলে আমরা ইতিমধ্যেই ডেটা কিছুটা _প্রস্তুত_ করেছি। এবার, ডেটার দিকে আরও গভীরভাবে নজর দিন। ### কুমড়ার ডেটা - প্রাথমিক পর্যবেক্ষণ -এই ডেটা সম্পর্কে আপনি কী লক্ষ্য করেন? আপনি ইতিমধ্যে দেখেছেন যে এখানে স্ট্রিং, সংখ্যা, ফাঁকা জায়গা এবং অদ্ভুত মানের মিশ্রণ রয়েছে যা আপনাকে বুঝতে হবে। +এই ডেটা সম্পর্কে আপনি কী লক্ষ্য করেন? আপনি ইতিমধ্যেই দেখেছেন যে এখানে স্ট্রিং, সংখ্যা, ফাঁকা স্থান এবং অদ্ভুত মানের মিশ্রণ রয়েছে যা আপনাকে বুঝতে হবে। -রিগ্রেশন পদ্ধতি ব্যবহার করে আপনি এই ডেটা থেকে কী প্রশ্ন করতে পারেন? যেমন, "একটি নির্দিষ্ট মাসে বিক্রয়ের জন্য একটি কুমড়ার দাম পূর্বানুমান করুন।" ডেটার দিকে আবার তাকালে, আপনি লক্ষ্য করবেন যে এই কাজের জন্য প্রয়োজনীয় ডেটা কাঠামো তৈরি করতে কিছু পরিবর্তন করতে হবে। +রিগ্রেশন কৌশল ব্যবহার করে আপনি এই ডেটা থেকে কী প্রশ্ন করতে পারেন? যেমন, "একটি নির্দিষ্ট মাসে বিক্রয়ের জন্য একটি কুমড়ার দাম পূর্বাভাস দিন।" ডেটার দিকে আবার তাকালে, আপনি লক্ষ্য করবেন যে এই কাজের জন্য প্রয়োজনীয় ডেটা কাঠামো তৈরি করতে কিছু পরিবর্তন করতে হবে। ## অনুশীলন - কুমড়ার ডেটা বিশ্লেষণ করুন -[পান্ডাস](https://pandas.pydata.org/) ব্যবহার করুন, যা ডেটা আকারে রূপান্তর করার জন্য একটি খুব কার্যকর টুল, কুমড়ার এই ডেটা বিশ্লেষণ এবং প্রস্তুত করতে। +চলুন [Pandas](https://pandas.pydata.org/) ব্যবহার করি, (এর নাম `Python Data Analysis` থেকে এসেছে) একটি টুল যা ডেটা আকৃতির জন্য খুবই কার্যকর, কুমড়ার ডেটা বিশ্লেষণ এবং প্রস্তুত করতে। -### প্রথমে, অনুপস্থিত তারিখগুলি পরীক্ষা করুন +### প্রথমে, অনুপস্থিত তারিখ পরীক্ষা করুন -আপনাকে প্রথমে অনুপস্থিত তারিখগুলি পরীক্ষা করার জন্য কিছু পদক্ষেপ নিতে হবে: +আপনাকে প্রথমে অনুপস্থিত তারিখ পরীক্ষা করার জন্য কিছু পদক্ষেপ নিতে হবে: -1. তারিখগুলিকে মাসের ফরম্যাটে রূপান্তর করুন (এগুলি মার্কিন তারিখ, তাই ফরম্যাটটি `MM/DD/YYYY`)। -2. একটি নতুন কলামে মাসটি বের করুন। +1. তারিখগুলোকে মাসের ফরম্যাটে রূপান্তর করুন (এগুলো US তারিখ, তাই ফরম্যাটটি `MM/DD/YYYY`)। +2. মাসটি একটি নতুন কলামে বের করুন। -_নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুলুন এবং স্প্রেডশিটটি একটি নতুন Pandas ডেটাফ্রেমে আমদানি করুন। +Visual Studio Code-এ _notebook.ipynb_ ফাইলটি খুলুন এবং স্প্রেডশিটটি একটি নতুন Pandas ডেটাফ্রেমে আমদানি করুন। -1. প্রথম পাঁচটি সারি দেখতে `head()` ফাংশনটি ব্যবহার করুন। +1. প্রথম পাঁচটি সারি দেখতে `head()` ফাংশন ব্যবহার করুন। ```python import pandas as pd @@ -73,7 +73,7 @@ _নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুল pumpkins.head() ``` - ✅ শেষ পাঁচটি সারি দেখতে আপনি কোন ফাংশনটি ব্যবহার করবেন? + ✅ শেষ পাঁচটি সারি দেখতে আপনি কোন ফাংশন ব্যবহার করবেন? 1. বর্তমান ডেটাফ্রেমে অনুপস্থিত ডেটা আছে কিনা তা পরীক্ষা করুন: @@ -83,7 +83,7 @@ _নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুল অনুপস্থিত ডেটা রয়েছে, তবে এটি হয়তো এই কাজের জন্য গুরুত্বপূর্ণ নাও হতে পারে। -1. আপনার ডেটাফ্রেমটি আরও সহজে কাজ করার জন্য, কেবল প্রয়োজনীয় কলামগুলি নির্বাচন করুন, `loc` ফাংশন ব্যবহার করে যা মূল ডেটাফ্রেম থেকে একটি নির্দিষ্ট সারি এবং কলাম গোষ্ঠী বের করে। নিচের ক্ষেত্রে `:` এর অর্থ "সব সারি।" +1. আপনার ডেটাফ্রেমটি আরও সহজে কাজ করার জন্য, শুধুমাত্র প্রয়োজনীয় কলামগুলো নির্বাচন করুন, `loc` ফাংশন ব্যবহার করে যা মূল ডেটাফ্রেম থেকে একটি নির্দিষ্ট সারি এবং কলাম গ্রুপ বের করে। নিচের ক্ষেত্রে `:` এর অর্থ "সব সারি।" ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] @@ -92,11 +92,11 @@ _নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুল ### দ্বিতীয়ত, কুমড়ার গড় দাম নির্ধারণ করুন -একটি নির্দিষ্ট মাসে কুমড়ার গড় দাম নির্ধারণ করার জন্য কীভাবে এগোবেন? এই কাজের জন্য আপনি কোন কলামগুলি বাছাই করবেন? ইঙ্গিত: আপনাকে ৩টি কলাম প্রয়োজন হবে। +একটি নির্দিষ্ট মাসে কুমড়ার গড় দাম নির্ধারণ করার জন্য কীভাবে চিন্তা করবেন? এই কাজের জন্য আপনি কোন কলামগুলো বাছাই করবেন? ইঙ্গিত: আপনাকে ৩টি কলাম দরকার হবে। -সমাধান: `Low Price` এবং `High Price` কলামের গড় বের করে নতুন Price কলামটি পূরণ করুন এবং Date কলামটি কেবল মাস দেখানোর জন্য রূপান্তর করুন। সৌভাগ্যক্রমে, উপরের পরীক্ষার মতে, তারিখ বা দামের জন্য কোনো অনুপস্থিত ডেটা নেই। +সমাধান: `Low Price` এবং `High Price` কলামের গড় নিয়ে নতুন Price কলামটি পূরণ করুন এবং Date কলামটি শুধুমাত্র মাস দেখানোর জন্য রূপান্তর করুন। সৌভাগ্যক্রমে, উপরের পরীক্ষার অনুযায়ী, তারিখ বা দামের জন্য কোনো অনুপস্থিত ডেটা নেই। -1. গড় বের করতে, নিচের কোডটি যোগ করুন: +1. গড় নির্ধারণ করতে নিম্নলিখিত কোড যোগ করুন: ```python price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 @@ -113,29 +113,29 @@ _নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুল new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) ``` - আপনার ডেটাফ্রেমটি প্রিন্ট করলে একটি পরিষ্কার, সুশৃঙ্খল ডেটাসেট দেখতে পাবেন, যার উপর ভিত্তি করে আপনি একটি নতুন রিগ্রেশন মডেল তৈরি করতে পারবেন। + আপনার ডেটাফ্রেম প্রিন্ট করলে আপনি একটি পরিষ্কার, সুশৃঙ্খল ডেটাসেট দেখতে পাবেন যার উপর আপনি আপনার নতুন রিগ্রেশন মডেল তৈরি করতে পারেন। -### কিন্তু অপেক্ষা করুন! এখানে কিছু অদ্ভুত আছে +### কিন্তু অপেক্ষা করুন! এখানে কিছু অদ্ভুত ব্যাপার আছে -যদি আপনি `Package` কলামটি দেখেন, কুমড়াগুলি বিভিন্ন কনফিগারেশনে বিক্রি হয়। কিছু '1 1/9 bushel' পরিমাপে বিক্রি হয়, কিছু '1/2 bushel' পরিমাপে, কিছু প্রতি কুমড়া, কিছু প্রতি পাউন্ড, এবং কিছু বড় বাক্সে বিভিন্ন প্রস্থে। +যদি আপনি `Package` কলামের দিকে তাকান, তাহলে দেখবেন কুমড়াগুলো বিভিন্ন কনফিগারেশনে বিক্রি হয়। কিছু '1 1/9 bushel' পরিমাপে বিক্রি হয়, কিছু '1/2 bushel' পরিমাপে, কিছু প্রতি কুমড়া, কিছু প্রতি পাউন্ড, এবং কিছু বড় বাক্সে বিভিন্ন প্রস্থে। -> কুমড়াগুলি সঠিকভাবে ওজন করা খুবই কঠিন বলে মনে হয় +> কুমড়াগুলোকে ধারাবাহিকভাবে ওজন করা খুবই কঠিন -মূল ডেটা বিশ্লেষণ করে দেখা যায় যে `Unit of Sale` যদি 'EACH' বা 'PER BIN' হয়, তবে `Package` টাইপটি প্রতি ইঞ্চি, প্রতি বিন, বা 'each'। কুমড়াগুলি সঠিকভাবে ওজন করা খুবই কঠিন বলে মনে হয়, তাই আসুন কেবল `Package` কলামে 'bushel' শব্দটি থাকা কুমড়াগুলিকে বাছাই করি। +মূল ডেটার দিকে গভীরভাবে তাকালে দেখা যায় যে `Unit of Sale` কলামে 'EACH' বা 'PER BIN' সমান মান রয়েছে, এবং `Package` টাইপ প্রতি ইঞ্চি, প্রতি বিন, বা 'each'। কুমড়াগুলোকে ধারাবাহিকভাবে ওজন করা খুবই কঠিন, তাই চলুন `Package` কলামে 'bushel' স্ট্রিং থাকা কুমড়াগুলো বাছাই করি। -1. ফাইলের শুরুতে, প্রাথমিক .csv আমদানির নিচে একটি ফিল্টার যোগ করুন: +1. ফাইলের শীর্ষে, প্রাথমিক .csv আমদানির নিচে একটি ফিল্টার যোগ করুন: ```python pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] ``` - এখন ডেটা প্রিন্ট করলে, আপনি দেখতে পাবেন যে কেবল প্রায় ৪১৫টি সারি রয়েছে যেখানে কুমড়াগুলি bushel-এ বিক্রি হয়। + এখন ডেটা প্রিন্ট করলে আপনি দেখতে পাবেন যে আপনি শুধুমাত্র 415 বা তার বেশি সারি পাচ্ছেন যেখানে কুমড়াগুলো bushel হিসেবে বিক্রি হয়। -### কিন্তু অপেক্ষা করুন! আরও একটি কাজ বাকি আছে +### কিন্তু অপেক্ষা করুন! আরও একটি কাজ করতে হবে -আপনি কি লক্ষ্য করেছেন যে bushel-এর পরিমাণ প্রতি সারিতে ভিন্ন? আপনাকে দামটি bushel প্রতি দেখানোর জন্য স্বাভাবিক করতে হবে, তাই এটি মানক করার জন্য কিছু গণনা করুন। +আপনি কি লক্ষ্য করেছেন যে bushel পরিমাণটি প্রতি সারিতে পরিবর্তিত হয়? আপনাকে দামকে স্বাভাবিক করতে হবে যাতে আপনি bushel অনুযায়ী দাম দেখাতে পারেন, তাই এটি মানক করতে কিছু গণনা করুন। -1. নতুন_pumpkins ডেটাফ্রেম তৈরি করার ব্লকের পরে এই লাইনগুলি যোগ করুন: +1. নতুন_pumpkins ডেটাফ্রেম তৈরি করার ব্লকের পরে এই লাইনগুলো যোগ করুন: ```python new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) @@ -143,38 +143,38 @@ _নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুল 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-এর ওজন উৎপাদনের ধরন অনুযায়ী পরিবর্তিত হয়, কারণ এটি একটি ভলিউম পরিমাপ। "উদাহরণস্বরূপ, টমেটোর একটি bushel-এর ওজন ৫৬ পাউন্ড হওয়া উচিত... পাতাগুলি এবং শাকসবজি বেশি জায়গা নেয় কিন্তু কম ওজন হয়, তাই পালং শাকের একটি bushel কেবল ২০ পাউন্ড।" এটি বেশ জটিল! আসুন bushel-থেকে-পাউন্ড রূপান্তর নিয়ে মাথা ঘামাই না এবং bushel অনুযায়ী দাম নির্ধারণ করি। তবে এই bushel-এ কুমড়ার গবেষণা দেখায় যে আপনার ডেটার প্রকৃতি বোঝা কতটা গুরুত্বপূর্ণ! +✅ [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) অনুযায়ী, একটি bushel-এর ওজন উৎপাদনের ধরন অনুযায়ী পরিবর্তিত হয়, কারণ এটি একটি ভলিউম পরিমাপ। "উদাহরণস্বরূপ, একটি bushel টমেটোর ওজন 56 পাউন্ড হওয়া উচিত... পাতা এবং সবুজ শাক বেশি জায়গা নেয় কম ওজন নিয়ে, তাই একটি bushel পালং শাকের ওজন মাত্র 20 পাউন্ড।" এটি বেশ জটিল! চলুন bushel থেকে পাউন্ড রূপান্তর করার ঝামেলা এড়িয়ে bushel অনুযায়ী দাম নির্ধারণ করি। তবে কুমড়ার bushel নিয়ে এই অধ্যয়নটি দেখায় যে আপনার ডেটার প্রকৃতি বোঝা কতটা গুরুত্বপূর্ণ! -এখন, আপনি bushel পরিমাপের ভিত্তিতে ইউনিট প্রতি দাম বিশ্লেষণ করতে পারেন। ডেটা একবার প্রিন্ট করলে, আপনি দেখতে পাবেন এটি কীভাবে মানক করা হয়েছে। +এখন, আপনি bushel পরিমাপের ভিত্তিতে ইউনিট অনুযায়ী দাম বিশ্লেষণ করতে পারেন। ডেটা আবার প্রিন্ট করলে আপনি দেখতে পাবেন এটি কীভাবে মানক হয়েছে। -✅ আপনি কি লক্ষ্য করেছেন যে অর্ধ-bushel-এ বিক্রি হওয়া কুমড়াগুলি খুবই ব্যয়বহুল? আপনি কি এর কারণ বের করতে পারেন? ইঙ্গিত: ছোট কুমড়াগুলি বড়গুলোর তুলনায় অনেক বেশি দামী, সম্ভবত কারণ bushel-এ অনেক বেশি ছোট কুমড়া থাকে, বড় ফাঁপা পাই কুমড়ার কারণে ব্যবহৃত জায়গা কম থাকে। +✅ আপনি কি লক্ষ্য করেছেন যে অর্ধ-bushel হিসেবে বিক্রি হওয়া কুমড়াগুলো খুবই ব্যয়বহুল? আপনি কি এর কারণ খুঁজে বের করতে পারেন? ইঙ্গিত: ছোট কুমড়াগুলো বড়গুলোর তুলনায় অনেক বেশি ব্যয়বহুল, সম্ভবত কারণ একটি বড় ফাঁপা পাই কুমড়ার দ্বারা নেওয়া অব্যবহৃত জায়গার তুলনায় bushel-এ অনেক বেশি ছোট কুমড়া থাকে। -## ভিজুয়ালাইজেশন কৌশল +## ভিজ্যুয়ালাইজেশন কৌশল -ডেটা বিজ্ঞানীর কাজের একটি অংশ হল তারা যে ডেটা নিয়ে কাজ করছেন তার গুণমান এবং প্রকৃতি প্রদর্শন করা। এটি করতে, তারা প্রায়ই আকর্ষণীয় ভিজুয়ালাইজেশন তৈরি করেন, যেমন প্লট, গ্রাফ এবং চার্ট, যা ডেটার বিভিন্ন দিক দেখায়। এইভাবে, তারা এমন সম্পর্ক এবং ফাঁকগুলি চাক্ষুষভাবে প্রদর্শন করতে সক্ষম হন যা অন্যথায় খুঁজে পাওয়া কঠিন। +ডেটা বিজ্ঞানীর ভূমিকা হলো তারা যে ডেটার সাথে কাজ করছেন তার গুণমান এবং প্রকৃতি প্রদর্শন করা। এটি করতে তারা প্রায়ই আকর্ষণীয় ভিজ্যুয়ালাইজেশন তৈরি করেন, যেমন প্লট, গ্রাফ এবং চার্ট, যা ডেটার বিভিন্ন দিক দেখায়। এইভাবে, তারা সম্পর্ক এবং ফাঁকগুলো চাক্ষুষভাবে প্রদর্শন করতে সক্ষম হন যা অন্যথায় খুঁজে পাওয়া কঠিন। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - কীভাবে ম্যাটপ্লটলিব দিয়ে ডেটা ভিজুয়ালাইজ করবেন](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "শিক্ষার্থীদের জন্য মেশিন লার্নিং - কীভাবে ম্যাটপ্লটলিব দিয়ে ডেটা ভিজুয়ালাইজ করবেন") +[![ML for beginners - কীভাবে Matplotlib দিয়ে ডেটা ভিজ্যুয়ালাইজ করবেন](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML for beginners - কীভাবে Matplotlib দিয়ে ডেটা ভিজ্যুয়ালাইজ করবেন") -> 🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের জন্য ডেটা ভিজুয়ালাইজ করার একটি সংক্ষিপ্ত ভিডিও দেখার জন্য। +> 🎥 উপরের ছবিতে ক্লিক করুন এই পাঠের জন্য ডেটা ভিজ্যুয়ালাইজ করার একটি সংক্ষিপ্ত ভিডিও দেখতে। -ভিজুয়ালাইজেশনগুলি মেশিন লার্নিং কৌশল নির্ধারণ করতেও সহায়তা করতে পারে। উদাহরণস্বরূপ, একটি স্ক্যাটারপ্লট যা একটি রেখার মতো মনে হয়, তা নির্দেশ করে যে ডেটা একটি লিনিয়ার রিগ্রেশন অনুশীলনের জন্য উপযুক্ত। +ভিজ্যুয়ালাইজেশন ডেটার জন্য সবচেয়ে উপযুক্ত মেশিন লার্নিং কৌশল নির্ধারণ করতেও সাহায্য করতে পারে। একটি স্ক্যাটারপ্লট যা একটি রেখা অনুসরণ করে বলে মনে হয়, উদাহরণস্বরূপ, এটি নির্দেশ করে যে ডেটা একটি লিনিয়ার রিগ্রেশন অনুশীলনের জন্য উপযুক্ত। -একটি ডেটা ভিজুয়ালাইজেশন লাইব্রেরি যা জুপিটার নোটবুকে ভাল কাজ করে তা হল [ম্যাটপ্লটলিব](https://matplotlib.org/) (যা আপনি আগের পাঠেও দেখেছেন)। +একটি ডেটা ভিজ্যুয়ালাইজেশন লাইব্রেরি যা Jupyter নোটবুকে ভালো কাজ করে তা হলো [Matplotlib](https://matplotlib.org/) (যা আপনি আগের পাঠেও দেখেছেন)। -> ডেটা ভিজুয়ালাইজেশনের আরও অভিজ্ঞতা পেতে [এই টিউটোরিয়ালগুলি](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) দেখুন। +> ডেটা ভিজ্যুয়ালাইজেশনের আরও অভিজ্ঞতা পেতে [এই টিউটোরিয়ালগুলো](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) দেখুন। -## অনুশীলন - ম্যাটপ্লটলিব নিয়ে পরীক্ষা করুন +## অনুশীলন - Matplotlib নিয়ে পরীক্ষা করুন -আপনি যে নতুন ডেটাফ্রেমটি তৈরি করেছেন তা প্রদর্শনের জন্য কিছু মৌলিক প্লট তৈরি করার চেষ্টা করুন। একটি মৌলিক লাইন প্লট কী দেখাবে? +আপনি যে নতুন ডেটাফ্রেম তৈরি করেছেন তা প্রদর্শনের জন্য কিছু মৌলিক প্লট তৈরি করার চেষ্টা করুন। একটি মৌলিক লাইন প্লট কী দেখাবে? -1. ফাইলের শুরুতে, Pandas আমদানির নিচে ম্যাটপ্লটলিব আমদানি করুন: +1. ফাইলের শীর্ষে, Pandas আমদানির নিচে Matplotlib আমদানি করুন: ```python import matplotlib.pyplot as plt ``` 1. পুরো নোটবুকটি পুনরায় চালান। -1. নোটবুকের নিচে একটি সেল যোগ করুন এবং ডেটা একটি বক্স প্লট হিসাবে প্রদর্শন করুন: +1. নোটবুকের নিচে একটি সেল যোগ করুন যাতে ডেটা একটি বক্স হিসেবে প্লট করা যায়: ```python price = new_pumpkins.Price @@ -183,44 +183,44 @@ _নোটবুক.ipynb_ ফাইলটি Visual Studio Code-এ খুল plt.show() ``` - ![একটি স্ক্যাটারপ্লট যা মাসের সাথে দামের সম্পর্ক দেখায়](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.bn.png) + ![একটি স্ক্যাটারপ্লট যা দাম এবং মাসের সম্পর্ক দেখায়](../../../../2-Regression/2-Data/images/scatterplot.png) - এটি কি একটি কার্যকর প্লট? এটি কি আপনাকে অবাক করে? + এটি কি একটি কার্যকর প্লট? এটি সম্পর্কে কি কিছু আপনাকে অবাক করে? - এটি বিশেষভাবে কার্যকর নয় কারণ এটি কেবল একটি নির্দিষ্ট মাসে আপনার ডেটাকে পয়েন্টের একটি বিস্তৃতি হিসাবে প্রদর্শন করে। + এটি বিশেষভাবে কার্যকর নয় কারণ এটি শুধুমাত্র একটি নির্দিষ্ট মাসে আপনার ডেটাকে পয়েন্টের একটি বিস্তৃতিতে প্রদর্শন করে। ### এটি কার্যকর করুন -ডেটা প্রদর্শনের জন্য চার্টগুলি কার্যকর করতে, সাধারণত আপনাকে ডেটা কোনোভাবে গোষ্ঠীবদ্ধ করতে হয়। আসুন একটি প্লট তৈরি করার চেষ্টা করি যেখানে y অক্ষ মাসগুলি দেখায় এবং ডেটা ডেটার বিতরণ প্রদর্শন করে। +চার্টগুলোকে কার্যকর ডেটা প্রদর্শন করতে, সাধারণত আপনাকে ডেটাকে কোনোভাবে গ্রুপ করতে হয়। চলুন একটি প্লট তৈরি করার চেষ্টা করি যেখানে y অক্ষটি মাস দেখায় এবং ডেটা ডেটার বিতরণ প্রদর্শন করে। -1. একটি সেল যোগ করুন এবং একটি গোষ্ঠীবদ্ধ বার চার্ট তৈরি করুন: +1. একটি গ্রুপড বার চার্ট তৈরি করতে একটি সেল যোগ করুন: ```python new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price") ``` - ![একটি বার চার্ট যা মাসের সাথে দামের সম্পর্ক দেখায়](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.bn.png) + ![একটি বার চার্ট যা দাম এবং মাসের সম্পর্ক দেখায়](../../../../2-Regression/2-Data/images/barchart.png) - এটি একটি আরও কার্যকর ডেটা ভিজুয়ালাইজেশন! এটি মনে হয় যে কুমড়ার সর্বোচ্চ দাম সেপ্টেম্বর এবং অক্টোবর মাসে হয়। এটি কি আপনার প্রত্যাশার সাথে মেলে? কেন বা কেন নয়? + এটি একটি আরও কার্যকর ডেটা ভিজ্যুয়ালাইজেশন! এটি মনে হয় যে কুমড়ার সর্বোচ্চ দাম সেপ্টেম্বর এবং অক্টোবর মাসে ঘটে। এটি কি আপনার প্রত্যাশার সাথে মিলে যায়? কেন বা কেন নয়? --- ## 🚀চ্যালেঞ্জ -ম্যাটপ্লটলিব যে বিভিন্ন ধরনের ভিজুয়ালাইজেশন অফার করে তা অন্বেষণ করুন। রিগ্রেশন সমস্যার জন্য কোন ধরনের ভিজুয়ালাইজেশন সবচেয়ে উপযুক্ত? +Matplotlib যে বিভিন্ন ধরনের ভিজ্যুয়ালাইজেশন অফার করে তা অন্বেষণ করুন। কোন ধরনের ভিজ্যুয়ালাইজেশন রিগ্রেশন সমস্যার জন্য সবচেয়ে উপযুক্ত? -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## পর্যালোচনা ও স্ব-অধ্যয়ন +## পর্যালোচনা এবং স্ব-অধ্যয়ন -ডেটা ভিজুয়ালাইজ করার বিভিন্ন উপায় দেখুন। উপলব্ধ বিভিন্ন লাইব্রেরির একটি তালিকা তৈরি করুন এবং নোট করুন কোনটি কোন ধরনের কাজের জন্য সবচেয়ে উপযুক্ত, যেমন ২ডি ভিজুয়ালাইজেশন বনাম ৩ডি ভিজুয়ালাইজেশন। আপনি কী আবিষ্কার করেন? +ডেটা ভিজ্যুয়ালাইজ করার বিভিন্ন উপায় দেখুন। উপলব্ধ বিভিন্ন লাইব্রেরির একটি তালিকা তৈরি করুন এবং নোট করুন কোনটি নির্দিষ্ট ধরনের কাজের জন্য সবচেয়ে ভালো, যেমন 2D ভিজ্যুয়ালাইজেশন বনাম 3D ভিজ্যুয়ালাইজেশন। আপনি কী আবিষ্কার করেন? ## অ্যাসাইনমেন্ট -[ভিজুয়ালাইজেশন অন্বেষণ](assignment.md) +[ভিজ্যুয়ালাইজেশন অন্বেষণ](assignment.md) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/2-Regression/3-Linear/README.md b/translations/bn/2-Regression/3-Linear/README.md index 721f258a3..2e29a00e2 100644 --- a/translations/bn/2-Regression/3-Linear/README.md +++ b/translations/bn/2-Regression/3-Linear/README.md @@ -1,60 +1,60 @@ # স্কিকিট-লার্ন ব্যবহার করে রিগ্রেশন মডেল তৈরি করুন: চারটি পদ্ধতিতে রিগ্রেশন -![লিনিয়ার বনাম পলিনোমিয়াল রিগ্রেশন ইনফোগ্রাফিক](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.bn.png) +![লিনিয়ার বনাম পলিনোমিয়াল রিগ্রেশন ইনফোগ্রাফিক](../../../../2-Regression/3-Linear/images/linear-polynomial.png) > ইনফোগ্রাফিক: [দাসানি মাদিপল্লি](https://twitter.com/dasani_decoded) -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) > ### [এই পাঠটি R-এও উপলব্ধ!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### ভূমিকা -এখন পর্যন্ত আপনি রিগ্রেশন কী তা কুমড়ার দাম সম্পর্কিত একটি নমুনা ডেটাসেট ব্যবহার করে অন্বেষণ করেছেন, যা আমরা এই পাঠে ব্যবহার করব। আপনি এটি ম্যাটপ্লটলিব ব্যবহার করে ভিজুয়ালাইজও করেছেন। +এখন পর্যন্ত আপনি রিগ্রেশন কী তা কুমড়ার দাম সম্পর্কিত নমুনা ডেটার মাধ্যমে অন্বেষণ করেছেন, যা আমরা এই পাঠে ব্যবহার করব। আপনি এটি ম্যাটপ্লটলিব ব্যবহার করে ভিজ্যুয়ালাইজও করেছেন। -এখন আপনি মেশিন লার্নিংয়ের জন্য রিগ্রেশন সম্পর্কে আরও গভীরভাবে জানার জন্য প্রস্তুত। ভিজুয়ালাইজেশন ডেটা বোঝার জন্য সহায়ক হলেও, মেশিন লার্নিংয়ের আসল শক্তি আসে _মডেল প্রশিক্ষণ_ থেকে। মডেলগুলি ঐতিহাসিক ডেটার উপর প্রশিক্ষিত হয় যাতে ডেটার নির্ভরশীলতা স্বয়ংক্রিয়ভাবে ধরা যায় এবং নতুন ডেটার জন্য ফলাফল পূর্বাভাস দেওয়া যায়, যা মডেল আগে দেখেনি। +এখন আপনি মেশিন লার্নিংয়ের জন্য রিগ্রেশন আরও গভীরভাবে বুঝতে প্রস্তুত। ভিজ্যুয়ালাইজেশন ডেটা বোঝার জন্য সহায়ক হলেও, মেশিন লার্নিংয়ের আসল শক্তি _মডেল প্রশিক্ষণ_ থেকে আসে। মডেলগুলো ঐতিহাসিক ডেটার উপর প্রশিক্ষিত হয় যাতে ডেটার নির্ভরশীলতা স্বয়ংক্রিয়ভাবে ধরা যায় এবং নতুন ডেটার জন্য ফলাফল পূর্বাভাস দেওয়া যায়, যা মডেল আগে দেখেনি। -এই পাঠে, আপনি দুটি ধরণের রিগ্রেশন সম্পর্কে আরও জানবেন: _বেসিক লিনিয়ার রিগ্রেশন_ এবং _পলিনোমিয়াল রিগ্রেশন_, এবং এই কৌশলগুলির সাথে সম্পর্কিত কিছু গণিত। এই মডেলগুলি আমাদের বিভিন্ন ইনপুট ডেটার উপর ভিত্তি করে কুমড়ার দাম পূর্বাভাস দিতে সাহায্য করবে। +এই পাঠে, আপনি দুটি ধরণের রিগ্রেশন সম্পর্কে আরও জানবেন: _বেসিক লিনিয়ার রিগ্রেশন_ এবং _পলিনোমিয়াল রিগ্রেশন_, এবং এই পদ্ধতিগুলোর কিছু গাণিতিক ভিত্তি। এই মডেলগুলো আমাদের বিভিন্ন ইনপুট ডেটার উপর ভিত্তি করে কুমড়ার দাম পূর্বাভাস দিতে সাহায্য করবে। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - লিনিয়ার রিগ্রেশন বোঝা](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "শিক্ষার্থীদের জন্য মেশিন লার্নিং - লিনিয়ার রিগ্রেশন বোঝা") +[![শুরু করুন লিনিয়ার রিগ্রেশন বুঝতে](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "শুরু করুন লিনিয়ার রিগ্রেশন বুঝতে") -> 🎥 উপরের ছবিতে ক্লিক করে লিনিয়ার রিগ্রেশন সম্পর্কে একটি সংক্ষিপ্ত ভিডিও দেখুন। +> 🎥 উপরের ছবিতে ক্লিক করুন লিনিয়ার রিগ্রেশন সম্পর্কে সংক্ষিপ্ত ভিডিও দেখার জন্য। -> এই পাঠ্যক্রম জুড়ে, আমরা গণিতের ন্যূনতম জ্ঞান ধরে নিই এবং এটি অন্যান্য ক্ষেত্র থেকে আসা শিক্ষার্থীদের জন্য সহজলভ্য করার চেষ্টা করি। তাই নোট, 🧮 কলআউট, ডায়াগ্রাম এবং অন্যান্য শেখার সরঞ্জামগুলির দিকে নজর রাখুন যা বোঝার জন্য সহায়ক। +> এই পাঠক্রমে, আমরা গণিতের ন্যূনতম জ্ঞান ধরে নিয়েছি এবং এটি অন্যান্য ক্ষেত্র থেকে আসা শিক্ষার্থীদের জন্য সহজলভ্য করার চেষ্টা করেছি। তাই নোট, 🧮 কলআউট, ডায়াগ্রাম এবং অন্যান্য শিক্ষণ সরঞ্জামগুলোর দিকে নজর রাখুন। ### পূর্বশর্ত -এখন পর্যন্ত আপনি যে কুমড়ার ডেটা বিশ্লেষণ করছেন তার গঠন সম্পর্কে পরিচিত হওয়া উচিত। এই পাঠের _notebook.ipynb_ ফাইলে এটি প্রিলোড এবং প্রি-ক্লিন করা অবস্থায় পাবেন। ফাইলে, কুমড়ার দাম একটি নতুন ডেটা ফ্রেমে প্রতি বাসেল হিসেবে প্রদর্শিত হয়েছে। নিশ্চিত করুন যে আপনি এই নোটবুকগুলি ভিজ্যুয়াল স্টুডিও কোডের কার্নেলে চালাতে পারেন। +আপনার এখন পর্যন্ত কুমড়ার ডেটার গঠন সম্পর্কে পরিচিত হওয়া উচিত, যা আমরা পরীক্ষা করছি। এই পাঠের _notebook.ipynb_ ফাইলে এটি প্রি-লোড এবং প্রি-ক্লিন করা অবস্থায় পাওয়া যাবে। ফাইলে, কুমড়ার দাম প্রতি বাসেল হিসেবে একটি নতুন ডেটা ফ্রেমে প্রদর্শিত হয়েছে। নিশ্চিত করুন যে আপনি এই নোটবুকগুলো ভিজ্যুয়াল স্টুডিও কোডের কার্নেলে চালাতে পারেন। ### প্রস্তুতি -মনে করিয়ে দেওয়ার জন্য, আপনি এই ডেটা লোড করছেন যাতে এটি থেকে প্রশ্ন করতে পারেন। +স্মরণ করিয়ে দেওয়া হচ্ছে, আপনি এই ডেটা লোড করছেন যাতে এর উপর প্রশ্ন করতে পারেন। -- কুমড়া কেনার সেরা সময় কখন? -- একটি মিনিয়েচার কুমড়ার কেসের দাম কত হতে পারে? -- আমি কি এগুলি অর্ধ-বাসেল ঝুড়িতে কিনব নাকি ১ ১/৯ বাসেল বাক্সে কিনব? +- কুমড়া কেনার সেরা সময় কখন? +- ক্ষুদ্রাকৃতির কুমড়ার একটি কেসের দাম কত হতে পারে? +- আমি কি এগুলো অর্ধ-বাসেল ঝুড়িতে কিনব নাকি ১ ১/৯ বাসেল বাক্সে কিনব? চলুন এই ডেটা আরও গভীরভাবে বিশ্লেষণ করি। -পূর্ববর্তী পাঠে, আপনি একটি প্যান্ডাস ডেটা ফ্রেম তৈরি করেছেন এবং এটি মূল ডেটাসেটের একটি অংশ দিয়ে পূরণ করেছেন, দামকে বাসেল অনুযায়ী মানক করে। তবে, এটি করার মাধ্যমে আপনি প্রায় ৪০০ ডেটাপয়েন্ট এবং শুধুমাত্র শরৎকালের মাসগুলির জন্য ডেটা সংগ্রহ করতে পেরেছিলেন। +পূর্ববর্তী পাঠে, আপনি একটি প্যান্ডাস ডেটা ফ্রেম তৈরি করেছেন এবং মূল ডেটাসেটের অংশ দিয়ে এটি পূরণ করেছেন, দামকে বাসেল অনুযায়ী মানক করে। তবে, এর ফলে আপনি শুধুমাত্র প্রায় ৪০০ ডেটাপয়েন্ট এবং শুধুমাত্র শরৎ মাসের জন্য ডেটা সংগ্রহ করতে পেরেছেন। -এই পাঠের সাথে থাকা নোটবুকে প্রিলোড করা ডেটা দেখুন। ডেটা প্রিলোড করা হয়েছে এবং একটি প্রাথমিক স্ক্যাটারপ্লট মাসের ডেটা দেখানোর জন্য চার্ট করা হয়েছে। হয়তো আমরা ডেটার প্রকৃতি সম্পর্কে আরও বিশদ পেতে পারি যদি এটি আরও পরিষ্কার করি। +এই পাঠের সাথে থাকা নোটবুকে প্রি-লোড করা ডেটা দেখুন। ডেটা প্রি-লোড করা হয়েছে এবং একটি প্রাথমিক স্ক্যাটারপ্লট চার্ট করা হয়েছে মাসের ডেটা দেখানোর জন্য। হয়তো আমরা ডেটার প্রকৃতি সম্পর্কে আরও বিস্তারিত জানতে পারি যদি এটি আরও পরিষ্কার করি। -## একটি লিনিয়ার রিগ্রেশন লাইন +## একটি লিনিয়ার রিগ্রেশন লাইন -পাঠ ১-এ আপনি শিখেছেন যে একটি লিনিয়ার রিগ্রেশন অনুশীলনের লক্ষ্য হল একটি লাইন প্লট করা যা: +পাঠ ১-এ আপনি শিখেছেন যে একটি লিনিয়ার রিগ্রেশন অনুশীলনের লক্ষ্য হলো একটি লাইন প্লট করা যাতে: -- **ভেরিয়েবল সম্পর্ক দেখায়**। ভেরিয়েবলের মধ্যে সম্পর্ক দেখায়। -- **পূর্বাভাস দেয়**। একটি নতুন ডেটাপয়েন্ট এই লাইনের সাথে সম্পর্কিত কোথায় পড়বে তা সঠিকভাবে পূর্বাভাস দেয়। +- **ভেরিয়েবল সম্পর্ক দেখানো যায়**। ভেরিয়েবলগুলোর মধ্যে সম্পর্ক দেখানো যায়। +- **পূর্বাভাস দেওয়া যায়**। নতুন ডেটাপয়েন্টটি সেই লাইনের সাথে সম্পর্কিত কোথায় পড়বে তা সঠিকভাবে পূর্বাভাস দেওয়া যায়। -**লিস্ট-স্কোয়ার রিগ্রেশন** সাধারণত এই ধরণের লাইন আঁকতে ব্যবহৃত হয়। 'লিস্ট-স্কোয়ার' শব্দটি বোঝায় যে রিগ্রেশন লাইনের চারপাশের সমস্ত ডেটাপয়েন্ট স্কোয়ার করা হয় এবং তারপর যোগ করা হয়। আদর্শভাবে, এই চূড়ান্ত যোগফল যতটা সম্ভব ছোট হওয়া উচিত, কারণ আমরা কম সংখ্যক ত্রুটি বা `লিস্ট-স্কোয়ার` চাই। +**লিস্ট-স্কয়ার রিগ্রেশন** সাধারণত এই ধরণের লাইন আঁকতে ব্যবহৃত হয়। 'লিস্ট-স্কয়ার' শব্দটি বোঝায় যে রিগ্রেশন লাইনের চারপাশের সব ডেটাপয়েন্ট স্কয়ার করা হয় এবং তারপর যোগ করা হয়। আদর্শভাবে, সেই চূড়ান্ত যোগফল যতটা সম্ভব ছোট হওয়া উচিত, কারণ আমরা কম সংখ্যক ত্রুটি বা `লিস্ট-স্কয়ার` চাই। -আমরা এটি করি কারণ আমরা এমন একটি লাইন মডেল করতে চাই যার সমস্ত ডেটাপয়েন্ট থেকে সর্বনিম্ন সামগ্রিক দূরত্ব থাকে। আমরা টার্মগুলিকে যোগ করার আগে স্কোয়ার করি কারণ আমরা এর দিকের চেয়ে এর মাত্রা নিয়ে বেশি উদ্বিগ্ন। +আমরা এটি করি কারণ আমরা এমন একটি লাইন মডেল করতে চাই যার সব ডেটাপয়েন্ট থেকে সামগ্রিক দূরত্ব কম। আমরা টার্মগুলো যোগ করার আগে স্কয়ার করি কারণ আমরা এর মাত্রা নিয়ে চিন্তিত, দিক নিয়ে নয়। > **🧮 আমাকে গণিত দেখান** > @@ -64,31 +64,31 @@ CO_OP_TRANSLATOR_METADATA: > Y = a + bX > ``` > -> `X` হল 'ব্যাখ্যামূলক ভেরিয়েবল'। `Y` হল 'নির্ভরশীল ভেরিয়েবল'। লাইনের ঢাল হল `b` এবং `a` হল y-ইন্টারসেপ্ট, যা বোঝায় `X = 0` হলে `Y` এর মান। +> `X` হলো 'ব্যাখ্যামূলক ভেরিয়েবল'। `Y` হলো 'নির্ভরশীল ভেরিয়েবল'। লাইনের ঢাল হলো `b` এবং `a` হলো y-ইন্টারসেপ্ট, যা `X = 0` হলে `Y` এর মানকে বোঝায়। > ->![ঢাল গণনা করুন](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.bn.png) +>![ঢাল গণনা করুন](../../../../2-Regression/3-Linear/images/slope.png) > > প্রথমে, ঢাল `b` গণনা করুন। ইনফোগ্রাফিক: [জেন লুপার](https://twitter.com/jenlooper) > -> অন্য কথায়, এবং আমাদের কুমড়ার ডেটার মূল প্রশ্নের দিকে ইঙ্গিত করে: "মাস অনুযায়ী প্রতি বাসেলে কুমড়ার দাম পূর্বাভাস দিন", `X` দাম বোঝাবে এবং `Y` বিক্রয়ের মাস বোঝাবে। +> অন্য কথায়, এবং আমাদের কুমড়ার ডেটার মূল প্রশ্নের দিকে ইঙ্গিত করে: "মাস অনুযায়ী প্রতি বাসেলে কুমড়ার দাম পূর্বাভাস দিন", `X` দামকে বোঝাবে এবং `Y` বিক্রয়ের মাসকে বোঝাবে। > ->![সমীকরণ সম্পূর্ণ করুন](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.bn.png) +>![সমীকরণ সম্পূর্ণ করুন](../../../../2-Regression/3-Linear/images/calculation.png) > -> `Y` এর মান গণনা করুন। যদি আপনি প্রায় $৪ দিচ্ছেন, তবে এটি অবশ্যই এপ্রিল! ইনফোগ্রাফিক: [জেন লুপার](https://twitter.com/jenlooper) +> `Y` এর মান গণনা করুন। যদি আপনি প্রায় $4 দিচ্ছেন, তবে এটি অবশ্যই এপ্রিল! ইনফোগ্রাফিক: [জেন লুপার](https://twitter.com/jenlooper) > -> লাইনের ঢাল গণনা করার জন্য যে গণিত প্রয়োজন তা ইন্টারসেপ্টের উপরও নির্ভরশীল, বা যেখানে `X = 0` হলে `Y` অবস্থিত। +> লাইনের ঢাল গণনা করার জন্য যে গণিত প্রয়োজন তা ইন্টারসেপ্টের উপরও নির্ভরশীল, বা যেখানে `X = 0` হলে `Y` অবস্থিত। > -> এই মানগুলির গণনার পদ্ধতি [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) ওয়েবসাইটে পর্যবেক্ষণ করতে পারেন। এছাড়াও [এই লিস্ট-স্কোয়ার ক্যালকুলেটর](https://www.mathsisfun.com/data/least-squares-calculator.html) দেখুন যাতে সংখ্যার মানগুলি লাইনে কীভাবে প্রভাব ফেলে তা দেখতে পারেন। +> এই মানগুলোর গণনার পদ্ধতি [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 এর মধ্যে এলোমেলোভাবে ছড়িয়ে থাকে তবে নিম্ন সহসম্পর্ক থাকে। +আরেকটি গুরুত্বপূর্ণ শব্দ হলো **করেলেশন কোইফিসিয়েন্ট** যা প্রদত্ত X এবং Y ভেরিয়েবলের মধ্যে সম্পর্ক বোঝায়। একটি স্ক্যাটারপ্লট ব্যবহার করে আপনি দ্রুত এই কোইফিসিয়েন্ট ভিজ্যুয়ালাইজ করতে পারেন। একটি প্লটে ডেটাপয়েন্টগুলো যদি একটি সুশৃঙ্খল লাইনে থাকে তবে উচ্চ করেলেশন থাকে, কিন্তু যদি ডেটাপয়েন্টগুলো X এবং Y এর মধ্যে এলোমেলোভাবে ছড়িয়ে থাকে তবে নিম্ন করেলেশন থাকে। -একটি ভাল লিনিয়ার রিগ্রেশন মডেল হবে এমন একটি যা লিস্ট-স্কোয়ার রিগ্রেশন পদ্ধতি ব্যবহার করে একটি রিগ্রেশন লাইনের সাথে উচ্চ (১ এর কাছাকাছি) সহসম্পর্ক সহগ রাখে। +একটি ভালো লিনিয়ার রিগ্রেশন মডেল হবে এমন একটি যার **লিস্ট-স্কয়ার রিগ্রেশন** পদ্ধতি ব্যবহার করে রিগ্রেশন লাইনের সাথে উচ্চ (১ এর কাছাকাছি, ০ এর চেয়ে বেশি) করেলেশন কোইফিসিয়েন্ট থাকে। -✅ এই পাঠের সাথে থাকা নোটবুক চালান এবং মাস থেকে দামের স্ক্যাটারপ্লট দেখুন। কুমড়া বিক্রির জন্য মাস থেকে দামের ডেটা কি আপনার ভিজুয়াল ব্যাখ্যা অনুযায়ী উচ্চ বা নিম্ন সহসম্পর্ক দেখায়? যদি আপনি `Month` এর পরিবর্তে আরও সূক্ষ্ম পরিমাপ ব্যবহার করেন, যেমন *বছরের দিন* (অর্থাৎ বছরের শুরু থেকে দিন সংখ্যা), তবে কি এটি পরিবর্তিত হয়? +✅ এই পাঠের সাথে থাকা নোটবুক চালান এবং মাস থেকে দাম সম্পর্কিত স্ক্যাটারপ্লট দেখুন। কুমড়া বিক্রির মাস থেকে দাম সম্পর্কিত ডেটা আপনার ভিজ্যুয়াল ব্যাখ্যা অনুযায়ী উচ্চ বা নিম্ন করেলেশন আছে বলে মনে হয়? যদি আপনি `Month` এর পরিবর্তে আরও সূক্ষ্ম পরিমাপ ব্যবহার করেন, যেমন *বছরের দিন* (অর্থাৎ বছরের শুরু থেকে দিন সংখ্যা), তাহলে কি এটি পরিবর্তিত হয়? -নিচের কোডে, আমরা ধরে নেব যে আমরা ডেটা পরিষ্কার করেছি এবং একটি ডেটা ফ্রেম পেয়েছি যার নাম `new_pumpkins`, যা নিম্নলিখিতের মতো: +নিচের কোডে, আমরা ধরে নিচ্ছি যে আমরা ডেটা পরিষ্কার করেছি এবং একটি ডেটা ফ্রেম পেয়েছি যার নাম `new_pumpkins`, যা নিম্নরূপ: ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Price ---|-------|-----------|---------|------|---------|-----------|------------|------- @@ -98,36 +98,36 @@ ID | Month | DayOfYear | Variety | City | Package | Low Price | High Price | Pri 73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -> ডেটা পরিষ্কার করার কোড [`notebook.ipynb`](notebook.ipynb)-এ উপলব্ধ। আমরা পূর্ববর্তী পাঠের মতো একই পরিষ্কার করার ধাপগুলি সম্পন্ন করেছি এবং নিম্নলিখিত এক্সপ্রেশন ব্যবহার করে `DayOfYear` কলাম গণনা করেছি: +> ডেটা পরিষ্কার করার কোড [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb) এ উপলব্ধ। আমরা পূর্ববর্তী পাঠের মতো একই পরিষ্কার করার ধাপ সম্পন্ন করেছি এবং নিম্নলিখিত এক্সপ্রেশন ব্যবহার করে `DayOfYear` কলাম গণনা করেছি: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -এখন যেহেতু আপনি লিনিয়ার রিগ্রেশনের পেছনের গণিত সম্পর্কে একটি ধারণা পেয়েছেন, আসুন একটি রিগ্রেশন মডেল তৈরি করি এবং দেখি কোন কুমড়ার প্যাকেজের দাম সবচেয়ে ভালো হবে তা পূর্বাভাস দেওয়া যায় কিনা। ছুটির দিনগুলির জন্য একটি কুমড়ার প্যাচ কিনতে আগ্রহী কেউ এই তথ্যটি ব্যবহার করতে পারে তাদের কুমড়ার প্যাকেজ কেনার জন্য অপ্টিমাইজ করতে। +এখন আপনি লিনিয়ার রিগ্রেশনের পেছনের গণিত সম্পর্কে ধারণা পেয়েছেন, চলুন একটি রিগ্রেশন মডেল তৈরি করি যাতে আমরা পূর্বাভাস দিতে পারি কোন কুমড়ার প্যাকেজের দাম সবচেয়ে ভালো হবে। কেউ যদি ছুটির দিনে কুমড়ার প্যাচের জন্য কুমড়া কিনতে চান, তাহলে এই তথ্য তাদের কুমড়ার প্যাকেজ কেনার ক্ষেত্রে অপ্টিমাইজ করতে সাহায্য করবে। -## সহসম্পর্ক খোঁজা +## করেলেশন খুঁজে বের করা -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - সহসম্পর্ক খোঁজা: লিনিয়ার রিগ্রেশনের চাবিকাঠি](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "শিক্ষার্থীদের জন্য মেশিন লার্নিং - সহসম্পর্ক খোঁজা: লিনিয়ার রিগ্রেশনের চাবিকাঠি") +[![করেলেশন খুঁজে বের করা: লিনিয়ার রিগ্রেশনের চাবিকাঠি](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "করেলেশন খুঁজে বের করা: লিনিয়ার রিগ্রেশনের চাবিকাঠি") -> 🎥 উপরের ছবিতে ক্লিক করে সহসম্পর্ক সম্পর্কে একটি সংক্ষিপ্ত ভিডিও দেখুন। +> 🎥 উপরের ছবিতে ক্লিক করুন করেলেশন সম্পর্কে সংক্ষিপ্ত ভিডিও দেখার জন্য। -পূর্ববর্তী পাঠ থেকে আপনি সম্ভবত দেখেছেন যে বিভিন্ন মাসের জন্য গড় দাম এই রকম দেখায়: +পূর্ববর্তী পাঠ থেকে আপনি সম্ভবত দেখেছেন যে বিভিন্ন মাসের গড় দাম নিম্নরূপ দেখায়: -মাস অনুযায়ী গড় দাম +মাস অনুযায়ী গড় দাম -এটি নির্দেশ করে যে কিছু সহসম্পর্ক থাকতে পারে, এবং আমরা `Month` এবং `Price` এর মধ্যে সম্পর্ক বা `DayOfYear` এবং `Price` এর মধ্যে সম্পর্ক পূর্বাভাস দেওয়ার জন্য একটি লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দেওয়ার চেষ্টা করতে পারি। এখানে একটি স্ক্যাটারপ্লট রয়েছে যা দ্বিতীয় সম্পর্কটি দেখায়: +এটি ইঙ্গিত করে যে কিছু করেলেশন থাকতে পারে, এবং আমরা `Month` এবং `Price` এর মধ্যে সম্পর্ক বা `DayOfYear` এবং `Price` এর মধ্যে সম্পর্ক পূর্বাভাস দিতে লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দিতে চেষ্টা করতে পারি। এখানে একটি স্ক্যাটারপ্লট দেখানো হয়েছে যা পরবর্তী সম্পর্কটি দেখায়: -দামের বনাম বছরের দিনের স্ক্যাটারপ্লট +দাম বনাম বছরের দিন স্ক্যাটারপ্লট -আসুন `corr` ফাংশন ব্যবহার করে দেখি সহসম্পর্ক আছে কিনা: +চলুন `corr` ফাংশন ব্যবহার করে করেলেশন আছে কিনা দেখি: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -এটি মনে হচ্ছে সহসম্পর্ক খুবই ছোট, `Month` অনুযায়ী -0.15 এবং `DayOfYear` অনুযায়ী -0.17, তবে অন্য একটি গুরুত্বপূর্ণ সম্পর্ক থাকতে পারে। মনে হচ্ছে বিভিন্ন কুমড়ার প্রকারভেদের সাথে সম্পর্কিত বিভিন্ন দামের ক্লাস্টার রয়েছে। এই অনুমানটি নিশ্চিত করতে, আসুন প্রতিটি কুমড়ার ক্যাটাগরি একটি ভিন্ন রঙ ব্যবহার করে প্লট করি। `scatter` প্লটিং ফাংশনে একটি `ax` প্যারামিটার পাস করে আমরা সমস্ত পয়েন্ট একই গ্রাফে প্লট করতে পারি: +দেখা যাচ্ছে করেলেশন বেশ ছোট, `Month` অনুযায়ী -0.15 এবং `DayOfMonth` অনুযায়ী -0.17, তবে অন্য একটি গুরুত্বপূর্ণ সম্পর্ক থাকতে পারে। মনে হচ্ছে বিভিন্ন কুমড়ার প্রজাতির সাথে বিভিন্ন দাম ক্লাস্টার রয়েছে। এই অনুমান নিশ্চিত করতে, চলুন প্রতিটি কুমড়ার ক্যাটাগরি আলাদা রঙে প্লট করি। `scatter` প্লটিং ফাংশনে `ax` প্যারামিটার পাস করে আমরা সব পয়েন্ট একই গ্রাফে প্লট করতে পারি: ```python ax=None @@ -137,42 +137,42 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -দামের বনাম বছরের দিনের স্ক্যাটারপ্লট +দাম বনাম বছরের দিন স্ক্যাটারপ্লট -আমাদের তদন্ত নির্দেশ করে যে বিক্রির তারিখের চেয়ে প্রকারভেদ সামগ্রিক দামের উপর বেশি প্রভাব ফেলে। আমরা এটি একটি বার গ্রাফ দিয়ে দেখতে পারি: +আমাদের তদন্ত ইঙ্গিত করে যে প্রজাতি বিক্রয়ের তারিখের চেয়ে সামগ্রিক দামের উপর বেশি প্রভাব ফেলে। আমরা এটি একটি বার গ্রাফের মাধ্যমে দেখতে পারি: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') ``` -প্রকারভেদ অনুযায়ী দামের বার গ্রাফ +প্রজাতি অনুযায়ী দাম বার গ্রাফ -চলুন আপাতত শুধুমাত্র একটি কুমড়ার প্রকারভেদ, 'পাই টাইপ', এর উপর মনোযোগ দিই এবং দেখি তারিখের দামের উপর কী প্রভাব পড়ে: +চলুন আপাতত শুধুমাত্র একটি কুমড়ার প্রজাতি, 'পাই টাইপ', এর উপর মনোযোগ দিই এবং দেখি তারিখের দাম উপর কী প্রভাব ফেলে: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] pie_pumpkins.plot.scatter('DayOfYear','Price') ``` -দামের বনাম বছরের দিনের স্ক্যাটারপ্লট +দাম বনাম বছরের দিন স্ক্যাটারপ্লট -যদি আমরা এখন `corr` ফাংশন ব্যবহার করে `Price` এবং `DayOfYear` এর মধ্যে সহসম্পর্ক গণনা করি, আমরা প্রায় `-0.27` পাব - যা নির্দেশ করে যে একটি পূর্বাভাসমূলক মডেল প্রশিক্ষণ দেওয়া যৌক্তিক। +যদি আমরা এখন `corr` ফাংশন ব্যবহার করে `Price` এবং `DayOfYear` এর মধ্যে করেলেশন গণনা করি, আমরা কিছুটা `-0.27` পাব - যা নির্দেশ করে যে একটি পূর্বাভাস মডেল প্রশিক্ষণ দেওয়া যুক্তিযুক্ত। -> একটি লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দেওয়ার আগে, আমাদের ডেটা পরিষ্কার করা নিশ্চিত করা গুরুত্বপূর্ণ। লিনিয়ার রিগ্রেশন অনুপস্থিত মানগুলির সাথে ভাল কাজ করে না, তাই সমস্ত খালি সেল বাদ দেওয়া যৌক্তিক: +> একটি লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দেওয়ার আগে, আমাদের ডেটা পরিষ্কার করা নিশ্চিত করা গুরুত্বপূর্ণ। লিনিয়ার রিগ্রেশন মিসিং ভ্যালু নিয়ে ভালো কাজ করে না, তাই সব খালি সেলগুলো সরিয়ে ফেলা যুক্তিযুক্ত: ```python pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -অন্য একটি পদ্ধতি হতে পারে খালি মানগুলি সংশ্লিষ্ট কলামের গড় মান দিয়ে পূরণ করা। +অন্য একটি পদ্ধতি হলো খালি ভ্যালুগুলো সংশ্লিষ্ট কলামের গড় মান দিয়ে পূরণ করা। -## সহজ লিনিয়ার রিগ্রেশন +## সাধারণ লিনিয়ার রিগ্রেশন -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - স্কিকিট-লার্ন ব্যবহার করে লিনিয়ার এবং পলিনোমিয়াল রিগ্রেশন](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "শিক্ষার্থীদের জন্য মেশিন লার্নিং - স্কিকিট-লার্ন ব্যবহার করে লিনিয়ার এবং পলিনোমিয়াল রিগ্রেশন") +[![স্কিকিট-লার্ন ব্যবহার করে লিনিয়ার এবং পলিনোমিয়াল রিগ্রেশন](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "স্কিকিট-লার্ন ব্যবহার করে লিনিয়ার এবং পলিনোমিয়াল রিগ্রেশন") -> 🎥 উপরের ছবিতে ক্লিক করে লিনিয়ার এবং পলিনোমিয়াল রিগ্রেশন সম্পর্কে একটি সংক্ষিপ্ত ভিডিও দেখুন। +> 🎥 উপরের ছবিতে ক্লিক করুন লিনিয়ার এবং পলিনোমিয়াল রিগ্রেশন সম্পর্কে সংক্ষিপ্ত ভিডিও দেখার জন্য। -আমাদের লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দেওয়ার জন্য, আমরা **স্কিকিট-লার্ন** লাইব্রেরি ব্যবহার করব। +আমাদের লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দিতে আমরা **স্কিকিট-লার্ন** লাইব্রেরি ব্যবহার করব। ```python from sklearn.linear_model import LinearRegression @@ -180,31 +180,31 @@ from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split ``` -আমরা ইনপুট মান (ফিচার) এবং প্রত্যাশিত আউটপুট (লেবেল) পৃথক নাম্পাই অ্যারেতে ভাগ করে শুরু করি: +আমরা ইনপুট মান (ফিচার) এবং প্রত্যাশিত আউটপুট (লেবেল) আলাদা নাম্পাই অ্যারেতে ভাগ করে শুরু করি: ```python X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> লক্ষ্য করুন যে আমরা ইনপুট ডেটার উপর `reshape` প্রয়োগ করতে হয়েছিল যাতে লিনিয়ার রিগ্রেশন প্যাকেজ এটি সঠিকভাবে বুঝতে পারে। লিনিয়ার রিগ্রেশন একটি 2D-অ্যারে ইনপুট হিসাবে প্রত্যাশা করে, যেখানে অ্যারেটির প্রতিটি সারি ইনপুট ফিচারের একটি ভেক্টরের সাথে সম্পর্কিত। আমাদের ক্ষেত্রে, যেহেতু আমাদের শুধুমাত্র একটি ইনপুট রয়েছে - আমাদের একটি N×1 আকৃতির অ্যারে প্রয়োজন, যেখানে N হল ডেটাসেটের আকার। +> লক্ষ্য করুন যে আমরা ইনপুট ডেটার উপর `reshape` করতে বাধ্য হয়েছি যাতে লিনিয়ার রিগ্রেশন প্যাকেজ এটি সঠিকভাবে বুঝতে পারে। লিনিয়ার রিগ্রেশন একটি 2D-অ্যারে ইনপুট হিসেবে আশা করে, যেখানে অ্যারেটির প্রতিটি সারি ইনপুট ফিচারের একটি ভেক্টরের সাথে সম্পর্কিত। আমাদের ক্ষেত্রে, যেহেতু আমাদের শুধুমাত্র একটি ইনপুট আছে - আমাদের একটি N×1 আকারের অ্যারে প্রয়োজন, যেখানে N হলো ডেটাসেটের আকার। -তারপর, আমরা ডেটাকে প্রশিক্ষণ এবং পরীক্ষা ডেটাসেটে ভাগ করি, যাতে প্রশিক্ষণের পরে আমাদের মডেলটি যাচাই করতে পারি: +তারপর, আমরা ডেটাকে ট্রেন এবং টেস্ট ডেটাসেটে ভাগ করি, যাতে প্রশিক্ষণের পরে আমাদের মডেল যাচাই করতে পারি: ```python X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -অবশেষে, প্রকৃত লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দেওয়া মাত্র দুটি লাইনের কোডে সম্পন্ন হয়। আমরা `LinearRegression` অবজেক্টটি সংজ্ঞায়িত করি এবং `fit` পদ্ধতি ব্যবহার করে এটি আমাদের ডেটার সাথে ফিট করি: +অবশেষে, আসল লিনিয়ার রিগ্রেশন মডেল প্রশিক্ষণ দিতে মাত্র দুটি লাইন কোড লাগে। আমরা `LinearRegression` অবজেক্ট সংজ্ঞায়িত করি এবং `fit` পদ্ধতি ব্যবহার করে আমাদের ডেটার সাথে এটি ফিট করি: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -`LinearRegression` অবজেক্টটি `fit` করার পরে সমস্ত রিগ্রেশনের সহগ ধারণ করে, যা `.coef_` প্রপার্টি ব্যবহার করে অ্যাক্সেস করা যায়। আমাদের ক্ষেত্রে, এখানে মাত্র একটি সহগ রয়েছে, যা প্রায় `-0.017` হওয়া উচিত। এটি বোঝায় যে সময়ের সাথে দাম কিছুটা কমে যায়, তবে খুব বেশি নয়, প্রতিদিন প্রায় ২ সেন্ট। আমরা `lin_reg.intercept_` ব্যবহার করে রিগ্রেশনের Y-অক্ষের সাথে ছেদ বিন্দুটিও অ্যাক্সেস করতে পারি - এটি আমাদের ক্ষেত্রে প্রায় `21` হবে, যা বছরের শুরুতে দামের ইঙ্গিত দেয়। +`LinearRegression` অবজেক্টটি `fit` করার পরে রিগ্রেশনের সব কোইফিসিয়েন্ট ধারণ করে, যা `.coef_` প্রপার্টি ব্যবহার করে অ্যাক্সেস করা যায়। আমাদের ক্ষেত্রে, এখানে শুধুমাত্র একটি কোইফিসিয়েন্ট আছে, যা `-0.017` এর কাছাকাছি হওয়া উচিত। এটি নির্দেশ করে যে সময়ের সাথে দাম কিছুটা কমে, তবে খুব বেশি নয়, প্রতিদিন প্রায় ২ সেন্ট। আমরা রিগ্রেশনের Y-অক্ষের সাথে ইন্টারসেকশন পয়েন্টও অ্যাক্সেস করতে পারি `lin_reg.intercept_` ব্যবহার করে - এটি আমাদের ক্ষেত্রে প্রায় `21` হবে, যা বছরের শুরুতে দাম নির্দেশ করে। -আমাদের মডেলটি কতটা সঠিক তা দেখতে, আমরা একটি টেস্ট ডেটাসেটে দাম পূর্বাভাস দিতে পারি এবং তারপর প্রত্যাশিত এবং পূর্বাভাসিত মানের মধ্যে পার্থক্য কতটা কাছাকাছি তা পরিমাপ করতে পারি। এটি গড় বর্গ ত্রুটি (MSE) মেট্রিক্স ব্যবহার করে করা যেতে পারে, যা প্রত্যাশিত এবং পূর্বাভাসিত মানের মধ্যে সমস্ত বর্গ পার্থক্যের গড়। +আমাদের মডেল কতটা সঠিক তা দেখতে, আমরা টেস্ট ডেটাসেটে দাম পূর্বাভাস দিতে পারি এবং তারপর আমাদের পূর্বাভাস প্রত্যাশিত মানের সাথে কতটা কাছাকাছি তা পরিমাপ করতে পারি। এটি মীন স্কয়ার এরর (MSE) মেট্রিক্স ব্যবহার করে করা যায়, যা প্রত্যাশিত এবং পূর্বাভাসিত মানের মধ্যে সব স্কয়ার পার্থক্যের গড়। ```python pred = lin_reg.predict(X_test) @@ -212,36 +212,36 @@ 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}%)') ``` -আমাদের ত্রুটি প্রায় ২টি পয়েন্টের আশেপাশে, যা ~১৭%। খুব ভালো নয়। মডেলের গুণমানের আরেকটি সূচক হলো **coefficient of determination**, যা এইভাবে পাওয়া যায়: +আমাদের ত্রুটি প্রায় ২টি পয়েন্টের আশেপাশে, যা প্রায় ১৭%। খুব একটা ভালো নয়। মডেলের গুণমানের আরেকটি সূচক হলো **coefficient of determination**, যা এইভাবে পাওয়া যায়: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -যদি মান ০ হয়, তাহলে এর অর্থ মডেল ইনপুট ডেটাকে বিবেচনা করে না এবং *সবচেয়ে খারাপ লিনিয়ার প্রেডিক্টর* হিসেবে কাজ করে, যা কেবলমাত্র ফলাফলের গড় মান। মান ১ হলে আমরা সমস্ত প্রত্যাশিত আউটপুট নিখুঁতভাবে পূর্বাভাস দিতে পারি। আমাদের ক্ষেত্রে, coefficient প্রায় ০.০৬, যা বেশ কম। +যদি মান ০ হয়, তাহলে এর অর্থ হলো মডেল ইনপুট ডেটাকে বিবেচনায় নেয় না এবং এটি *সবচেয়ে খারাপ লিনিয়ার প্রেডিক্টর* হিসেবে কাজ করে, যা কেবলমাত্র ফলাফলের গড় মান। মান ১ হলে বোঝায় যে আমরা প্রত্যাশিত সমস্ত আউটপুট নিখুঁতভাবে পূর্বানুমান করতে পারি। আমাদের ক্ষেত্রে, coefficient প্রায় ০.০৬, যা বেশ কম। -আমরা পরীক্ষার ডেটা এবং রিগ্রেশন লাইনের সাথে একটি গ্রাফ আঁকতে পারি, যাতে আমাদের ক্ষেত্রে রিগ্রেশন কীভাবে কাজ করছে তা আরও ভালোভাবে দেখা যায়: +আমরা টেস্ট ডেটা এবং রিগ্রেশন লাইনের সাথে একটি গ্রাফ আঁকতে পারি, যাতে আমাদের ক্ষেত্রে রিগ্রেশন কীভাবে কাজ করছে তা আরও ভালোভাবে বোঝা যায়: ```python plt.scatter(X_test,y_test) plt.plot(X_test,pred) ``` -Linear regression +লিনিয়ার রিগ্রেশন ## পলিনোমিয়াল রিগ্রেশন -লিনিয়ার রিগ্রেশনের আরেকটি ধরন হলো পলিনোমিয়াল রিগ্রেশন। কখনও কখনও ভেরিয়েবলগুলোর মধ্যে একটি লিনিয়ার সম্পর্ক থাকে - যেমন কুমড়ার আয়তন যত বড়, দাম তত বেশি - কিন্তু কখনও কখনও এই সম্পর্কগুলোকে একটি সমতল বা সরল রেখা হিসেবে চিত্রিত করা যায় না। +লিনিয়ার রিগ্রেশনের আরেকটি ধরন হলো পলিনোমিয়াল রিগ্রেশন। কখনও কখনও ভেরিয়েবলগুলোর মধ্যে একটি সরল সম্পর্ক থাকে - যেমন, কুমড়ার আয়তন যত বড়, দাম তত বেশি - কিন্তু কখনও কখনও এই সম্পর্কগুলোকে একটি সমতল বা সরল রেখা হিসেবে চিত্রিত করা যায় না। -✅ এখানে [আরও কিছু উদাহরণ](https://online.stat.psu.edu/stat501/lesson/9/9.8) রয়েছে, যেখানে পলিনোমিয়াল রিগ্রেশন ব্যবহার করা যেতে পারে। +✅ এখানে [কিছু উদাহরণ](https://online.stat.psu.edu/stat501/lesson/9/9.8) দেওয়া হলো, যেখানে পলিনোমিয়াল রিগ্রেশন ব্যবহার করা যেতে পারে। -Date এবং Price-এর মধ্যে সম্পর্ক আবার দেখুন। এই scatterplot কি সরল রেখা দিয়ে বিশ্লেষণ করা উচিত বলে মনে হয়? দাম কি ওঠানামা করতে পারে না? এই ক্ষেত্রে, আপনি পলিনোমিয়াল রিগ্রেশন চেষ্টা করতে পারেন। +তারিখ এবং দামের মধ্যে সম্পর্কটি আবার দেখুন। এই স্ক্যাটারপ্লটটি কি সরল রেখা দিয়ে বিশ্লেষণ করা উচিত বলে মনে হয়? দামের ওঠানামা কি সম্ভব নয়? এই ক্ষেত্রে, আপনি পলিনোমিয়াল রিগ্রেশন চেষ্টা করতে পারেন। -✅ পলিনোমিয়াল হলো গাণিতিক প্রকাশ, যা এক বা একাধিক ভেরিয়েবল এবং coefficients নিয়ে গঠিত হতে পারে। +✅ পলিনোমিয়াল হলো গাণিতিক প্রকাশ, যা এক বা একাধিক ভেরিয়েবল এবং কোইফিসিয়েন্ট নিয়ে গঠিত হতে পারে। -পলিনোমিয়াল রিগ্রেশন একটি বাঁকা রেখা তৈরি করে, যা nonlinear ডেটার সাথে আরও ভালোভাবে মানানসই হয়। আমাদের ক্ষেত্রে, যদি আমরা ইনপুট ডেটায় একটি বর্গাকার `DayOfYear` ভেরিয়েবল অন্তর্ভুক্ত করি, তাহলে আমরা একটি parabolic curve দিয়ে আমাদের ডেটা ফিট করতে পারব, যার একটি নির্দিষ্ট সময়ে সর্বনিম্ন মান থাকবে। +পলিনোমিয়াল রিগ্রেশন একটি বাঁকানো রেখা তৈরি করে, যা অ-রৈখিক ডেটার সাথে আরও ভালোভাবে মানানসই হয়। আমাদের ক্ষেত্রে, যদি ইনপুট ডেটায় একটি বর্গ `DayOfYear` ভেরিয়েবল যোগ করি, তাহলে আমরা একটি প্যারাবোলিক কার্ভ দিয়ে আমাদের ডেটাকে মানানসই করতে পারব, যার একটি নির্দিষ্ট বিন্দুতে সর্বনিম্ন মান থাকবে। -Scikit-learn একটি সহায়ক [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) অন্তর্ভুক্ত করে, যা ডেটা প্রসেসিংয়ের বিভিন্ন ধাপ একসাথে সংযুক্ত করতে সাহায্য করে। একটি **pipeline** হলো **estimators**-এর একটি চেইন। আমাদের ক্ষেত্রে, আমরা একটি pipeline তৈরি করব, যা প্রথমে আমাদের মডেলে পলিনোমিয়াল ফিচার যোগ করবে এবং তারপর রিগ্রেশন প্রশিক্ষণ দেবে: +Scikit-learn একটি সহায়ক [pipeline API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) অন্তর্ভুক্ত করে, যা ডেটা প্রসেসিংয়ের বিভিন্ন ধাপ একত্রিত করতে সাহায্য করে। একটি **pipeline** হলো **estimators**-এর একটি চেইন। আমাদের ক্ষেত্রে, আমরা একটি pipeline তৈরি করব, যা প্রথমে মডেলে পলিনোমিয়াল ফিচার যোগ করবে এবং তারপর রিগ্রেশন প্রশিক্ষণ দেবে: ```python from sklearn.preprocessing import PolynomialFeatures @@ -252,36 +252,36 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -`PolynomialFeatures(2)` ব্যবহার করার অর্থ হলো আমরা ইনপুট ডেটা থেকে সমস্ত দ্বিতীয়-ডিগ্রি পলিনোমিয়াল অন্তর্ভুক্ত করব। আমাদের ক্ষেত্রে এটি কেবল `DayOfYear`2 হবে, কিন্তু দুটি ইনপুট ভেরিয়েবল X এবং Y দেওয়া হলে এটি X2, XY এবং Y2 যোগ করবে। আমরা চাইলে আরও উচ্চ-ডিগ্রি পলিনোমিয়াল ব্যবহার করতে পারি। +`PolynomialFeatures(2)` ব্যবহার করার অর্থ হলো আমরা ইনপুট ডেটা থেকে সমস্ত দ্বিতীয়-ডিগ্রির পলিনোমিয়াল অন্তর্ভুক্ত করব। আমাদের ক্ষেত্রে এটি কেবল `DayOfYear`2 বোঝাবে, তবে দুটি ইনপুট ভেরিয়েবল X এবং Y থাকলে এটি X2, XY এবং Y2 যোগ করবে। আমরা চাইলে আরও উচ্চ ডিগ্রির পলিনোমিয়াল ব্যবহার করতে পারি। -Pipeline-গুলোকে মূল `LinearRegression` অবজেক্টের মতোই ব্যবহার করা যায়, অর্থাৎ আমরা pipeline-কে `fit` করতে পারি এবং তারপর `predict` ব্যবহার করে পূর্বাভাসের ফলাফল পেতে পারি। এখানে পরীক্ষার ডেটা এবং approximation curve দেখানো হয়েছে: +পাইপলাইনগুলোকে মূল `LinearRegression` অবজেক্টের মতোই ব্যবহার করা যায়, অর্থাৎ আমরা পাইপলাইনটিকে `fit` করতে পারি এবং তারপর `predict` ব্যবহার করে পূর্বানুমানের ফলাফল পেতে পারি। এখানে টেস্ট ডেটা এবং আনুমানিক কার্ভ দেখানো হলো: -Polynomial regression +পলিনোমিয়াল রিগ্রেশন -পলিনোমিয়াল রিগ্রেশন ব্যবহার করে আমরা সামান্য কম MSE এবং বেশি determination পেতে পারি, কিন্তু খুব বেশি নয়। আমাদের অন্যান্য ফিচার বিবেচনা করতে হবে! +পলিনোমিয়াল রিগ্রেশন ব্যবহার করে আমরা সামান্য কম MSE এবং সামান্য বেশি determination পেতে পারি, তবে তা উল্লেখযোগ্য নয়। আমাদের আরও ফিচার বিবেচনায় নিতে হবে! -> আপনি দেখতে পাচ্ছেন যে Halloween-এর আশেপাশে কুমড়ার সর্বনিম্ন দাম দেখা যায়। আপনি এটি কীভাবে ব্যাখ্যা করবেন? +> আপনি দেখতে পাবেন যে হ্যালোউইনের আশেপাশে কুমড়ার সর্বনিম্ন দাম দেখা যায়। আপনি এটি কীভাবে ব্যাখ্যা করবেন? -🎃 অভিনন্দন, আপনি একটি মডেল তৈরি করেছেন, যা পাই কুমড়ার দাম পূর্বাভাস দিতে সাহায্য করতে পারে। আপনি সম্ভবত একই পদ্ধতি সমস্ত কুমড়ার ধরনগুলোর জন্য পুনরাবৃত্তি করতে পারেন, কিন্তু এটি বেশ ক্লান্তিকর হবে। এখন চলুন শিখি কীভাবে আমাদের মডেলে কুমড়ার বৈচিত্র্যকে বিবেচনায় নেওয়া যায়! +🎃 অভিনন্দন, আপনি একটি মডেল তৈরি করেছেন যা পাই কুমড়ার দাম পূর্বানুমান করতে সাহায্য করতে পারে। আপনি সম্ভবত একই পদ্ধতি সমস্ত কুমড়ার প্রকারের জন্য পুনরাবৃত্তি করতে পারেন, তবে এটি বেশ ক্লান্তিকর হবে। এখন চলুন শিখি কীভাবে মডেলে কুমড়ার বৈচিত্র্যকে বিবেচনায় নেওয়া যায়! -## ক্যাটেগরিকাল ফিচার +## শ্রেণীবদ্ধ ফিচার -আদর্শ ক্ষেত্রে, আমরা চাই একই মডেল ব্যবহার করে বিভিন্ন কুমড়ার ধরনগুলোর দাম পূর্বাভাস দিতে সক্ষম হতে। তবে, `Variety` কলামটি `Month`-এর মতো নয়, কারণ এটি non-numeric মান ধারণ করে। এই ধরনের কলামগুলোকে **categorical** বলা হয়। +আদর্শ জগতে, আমরা একই মডেল ব্যবহার করে বিভিন্ন কুমড়ার প্রকারের দাম পূর্বানুমান করতে চাই। তবে, `Variety` কলামটি `Month`-এর মতো কলাম থেকে কিছুটা আলাদা, কারণ এতে অ-সংখ্যাসূচক মান রয়েছে। এই ধরনের কলামগুলোকে **শ্রেণীবদ্ধ (categorical)** বলা হয়। -[![ML for beginners - Categorical Feature Predictions with Linear Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for beginners - Categorical Feature Predictions with Linear Regression") +[![শ্রেণীবদ্ধ ফিচার নিয়ে লিনিয়ার রিগ্রেশন](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "শ্রেণীবদ্ধ ফিচার নিয়ে লিনিয়ার রিগ্রেশন") -> 🎥 উপরের ছবিতে ক্লিক করুন ক্যাটেগরিকাল ফিচার ব্যবহার সম্পর্কে একটি সংক্ষিপ্ত ভিডিও দেখার জন্য। +> 🎥 উপরের ছবিতে ক্লিক করে শ্রেণীবদ্ধ ফিচার ব্যবহারের একটি সংক্ষিপ্ত ভিডিও দেখুন। এখানে আপনি দেখতে পাচ্ছেন কীভাবে গড় দাম বৈচিত্র্যের উপর নির্ভর করে: -Average price by variety +বৈচিত্র্য অনুযায়ী গড় দাম -বৈচিত্র্যকে বিবেচনায় নিতে, প্রথমে এটি numeric আকারে রূপান্তর করতে হবে, বা **encode** করতে হবে। এটি করার কয়েকটি উপায় রয়েছে: +বৈচিত্র্যকে বিবেচনায় নিতে, প্রথমে আমাদের এটিকে সংখ্যাসূচক রূপে রূপান্তর করতে হবে, বা **এনকোড** করতে হবে। এটি করার কয়েকটি উপায় রয়েছে: -* সাধারণ **numeric encoding** একটি টেবিল তৈরি করবে, যেখানে বিভিন্ন বৈচিত্র্য থাকবে এবং তারপর বৈচিত্র্যের নামকে সেই টেবিলের একটি সূচকে প্রতিস্থাপন করবে। এটি লিনিয়ার রিগ্রেশনের জন্য সেরা ধারণা নয়, কারণ লিনিয়ার রিগ্রেশন সূচকের প্রকৃত সংখ্যাসূচক মান গ্রহণ করে এবং এটি ফলাফলে যোগ করে, কিছু coefficient দ্বারা গুণ করে। আমাদের ক্ষেত্রে, সূচক নম্বর এবং দামের মধ্যে সম্পর্ক স্পষ্টতই non-linear, এমনকি যদি আমরা নিশ্চিত করি যে সূচকগুলো নির্দিষ্টভাবে সাজানো হয়েছে। -* **One-hot encoding** `Variety` কলামটিকে ৪টি ভিন্ন কলামে প্রতিস্থাপন করবে, প্রতিটি বৈচিত্র্যের জন্য একটি। প্রতিটি কলামে `1` থাকবে যদি সংশ্লিষ্ট সারিটি একটি নির্দিষ্ট বৈচিত্র্যের হয়, অন্যথায় `0` থাকবে। এর অর্থ হলো লিনিয়ার রিগ্রেশনে ৪টি coefficient থাকবে, প্রতিটি কুমড়ার বৈচিত্র্যের জন্য একটি, যা সেই নির্দিষ্ট বৈচিত্র্যের জন্য "starting price" (বা বরং "additional price") নির্ধারণ করবে। +* সহজ **সংখ্যাসূচক এনকোডিং** একটি টেবিল তৈরি করবে, যেখানে বিভিন্ন বৈচিত্র্য থাকবে, এবং তারপর বৈচিত্র্যের নামকে সেই টেবিলের একটি সূচক দিয়ে প্রতিস্থাপন করবে। এটি লিনিয়ার রিগ্রেশনের জন্য সেরা পদ্ধতি নয়, কারণ লিনিয়ার রিগ্রেশন সূচকের প্রকৃত সংখ্যাসূচক মান গ্রহণ করে এবং এটি ফলাফলে যোগ করে, একটি গুণফল দ্বারা গুণিত করে। আমাদের ক্ষেত্রে, সূচক সংখ্যার সাথে দামের সম্পর্ক স্পষ্টতই অ-রৈখিক, এমনকি যদি আমরা নিশ্চিত করি যে সূচকগুলো নির্দিষ্টভাবে সাজানো হয়েছে। +* **ওয়ান-হট এনকোডিং** `Variety` কলামটিকে ৪টি ভিন্ন কলামে প্রতিস্থাপন করবে, প্রতিটি বৈচিত্র্যের জন্য একটি করে। প্রতিটি কলামে `1` থাকবে যদি সংশ্লিষ্ট সারিটি একটি নির্দিষ্ট বৈচিত্র্যের হয়, অন্যথায় `0` থাকবে। এর মানে হলো লিনিয়ার রিগ্রেশনে ৪টি ভিন্ন কোইফিসিয়েন্ট থাকবে, প্রতিটি কুমড়ার বৈচিত্র্যের জন্য একটি করে, যা সেই নির্দিষ্ট বৈচিত্র্যের জন্য "প্রাথমিক দাম" (বা বরং "অতিরিক্ত দাম") নির্ধারণ করবে। -নিচের কোডটি দেখায় কীভাবে আমরা একটি বৈচিত্র্যকে one-hot encode করতে পারি: +নিচের কোডটি দেখায় কীভাবে আমরা একটি বৈচিত্র্যকে ওয়ান-হট এনকোড করতে পারি: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -298,14 +298,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -One-hot encoded বৈচিত্র্যকে ইনপুট হিসেবে ব্যবহার করে লিনিয়ার রিগ্রেশন প্রশিক্ষণ দিতে, আমাদের কেবল `X` এবং `y` ডেটা সঠিকভাবে initialize করতে হবে: +ওয়ান-হট এনকোড করা বৈচিত্র্যকে ইনপুট হিসেবে ব্যবহার করে লিনিয়ার রিগ্রেশন প্রশিক্ষণ দিতে, আমাদের কেবল `X` এবং `y` ডেটা সঠিকভাবে ইনিশিয়ালাইজ করতে হবে: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -বাকি কোডটি উপরে ব্যবহৃত লিনিয়ার রিগ্রেশন প্রশিক্ষণের কোডের মতোই। যদি আপনি এটি চেষ্টা করেন, আপনি দেখতে পাবেন যে গড় স্কোয়ার্ড ত্রুটি প্রায় একই, কিন্তু আমরা অনেক বেশি coefficient of determination (~৭৭%) পাই। আরও সঠিক পূর্বাভাস পেতে, আমরা আরও ক্যাটেগরিকাল ফিচার এবং সংখ্যাসূচক ফিচার যেমন `Month` বা `DayOfYear` বিবেচনা করতে পারি। একটি বড় ফিচার array পেতে, আমরা `join` ব্যবহার করতে পারি: +বাকি কোডটি উপরের লিনিয়ার রিগ্রেশন প্রশিক্ষণের মতোই। যদি আপনি এটি চেষ্টা করেন, আপনি দেখতে পাবেন যে গড় বর্গ ত্রুটি (MSE) প্রায় একই থাকে, তবে আমরা অনেক বেশি determination coefficient (~77%) পাই। আরও সঠিক পূর্বানুমান পেতে, আমরা আরও শ্রেণীবদ্ধ ফিচার এবং সংখ্যাসূচক ফিচার যেমন `Month` বা `DayOfYear` বিবেচনায় নিতে পারি। একটি বড় ফিচার অ্যারে পেতে, আমরা `join` ব্যবহার করতে পারি: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -315,11 +315,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -এখানে আমরা `City` এবং `Package` টাইপকেও বিবেচনায় নিয়েছি, যা আমাদের MSE ২.৮৪ (১০%) এবং determination ০.৯৪ দেয়! +এখানে আমরা `City` এবং `Package` টাইপকেও বিবেচনায় নিয়েছি, যা আমাদের MSE 2.84 (10%) এবং determination 0.94 দেয়! ## সবকিছু একত্রিত করা -সেরা মডেল তৈরি করতে, আমরা উপরের উদাহরণ থেকে পলিনোমিয়াল রিগ্রেশনের সাথে একত্রিত (one-hot encoded ক্যাটেগরিকাল + সংখ্যাসূচক) ডেটা ব্যবহার করতে পারি। আপনার সুবিধার জন্য এখানে সম্পূর্ণ কোড দেওয়া হলো: +সেরা মডেল তৈরি করতে, আমরা উপরের উদাহরণ থেকে সম্মিলিত (ওয়ান-হট এনকোড করা শ্রেণীবদ্ধ + সংখ্যাসূচক) ডেটা এবং পলিনোমিয়াল রিগ্রেশন ব্যবহার করতে পারি। আপনার সুবিধার জন্য এখানে সম্পূর্ণ কোড দেওয়া হলো: ```python # set up training data @@ -347,28 +347,28 @@ score = pipeline.score(X_train,y_train) print('Model determination: ', score) ``` -এটি আমাদের প্রায় ৯৭% determination coefficient এবং MSE=২.২৩ (~৮% পূর্বাভাস ত্রুটি) দেবে। +এটি আমাদের প্রায় ৯৭% determination coefficient এবং MSE=2.23 (~8% পূর্বানুমান ত্রুটি) দেবে। -| Model | MSE | Determination | +| মডেল | MSE | Determination | |-------|-----|---------------| -| `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polynomial | 2.73 (17.0%) | 0.08 | -| `Variety` Linear | 5.24 (19.7%) | 0.77 | -| All features Linear | 2.84 (10.5%) | 0.94 | -| All features Polynomial | 2.23 (8.25%) | 0.97 | +| `DayOfYear` লিনিয়ার | 2.77 (17.2%) | 0.07 | +| `DayOfYear` পলিনোমিয়াল | 2.73 (17.0%) | 0.08 | +| `Variety` লিনিয়ার | 5.24 (19.7%) | 0.77 | +| সব ফিচার লিনিয়ার | 2.84 (10.5%) | 0.94 | +| সব ফিচার পলিনোমিয়াল | 2.23 (8.25%) | 0.97 | -🏆 অভিনন্দন! আপনি এক পাঠে চারটি রিগ্রেশন মডেল তৈরি করেছেন এবং মডেলের গুণমান ৯৭% পর্যন্ত উন্নত করেছেন। রিগ্রেশনের চূড়ান্ত অংশে, আপনি ক্যাটেগরি নির্ধারণের জন্য Logistic Regression সম্পর্কে শিখবেন। +🏆 দারুণ কাজ! আপনি এক পাঠে চারটি রিগ্রেশন মডেল তৈরি করেছেন এবং মডেলের গুণমান ৯৭% পর্যন্ত উন্নত করেছেন। রিগ্রেশনের চূড়ান্ত অংশে, আপনি ক্যাটাগরি নির্ধারণের জন্য লজিস্টিক রিগ্রেশন সম্পর্কে শিখবেন। --- ## 🚀চ্যালেঞ্জ -এই নোটবুকে বিভিন্ন ভেরিয়েবল পরীক্ষা করুন এবং দেখুন কীভাবে correlation মডেলের সঠিকতার সাথে সম্পর্কিত। +এই নোটবুকে বিভিন্ন ভেরিয়েবল পরীক্ষা করুন এবং দেখুন কীভাবে সম্পর্ক মডেলের নির্ভুলতার সাথে সামঞ্জস্যপূর্ণ। -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## পর্যালোচনা ও স্ব-অধ্যয়ন +## পুনরালোচনা ও স্ব-অধ্যয়ন -এই পাঠে আমরা লিনিয়ার রিগ্রেশন সম্পর্কে শিখেছি। রিগ্রেশনের আরও গুরুত্বপূর্ণ ধরন রয়েছে। Stepwise, Ridge, Lasso এবং Elasticnet কৌশল সম্পর্কে পড়ুন। আরও শেখার জন্য একটি ভালো কোর্স হলো [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)। +এই পাঠে আমরা লিনিয়ার রিগ্রেশন সম্পর্কে শিখেছি। রিগ্রেশনের অন্যান্য গুরুত্বপূর্ণ ধরন রয়েছে। Stepwise, Ridge, Lasso এবং Elasticnet কৌশল সম্পর্কে পড়ুন। আরও শেখার জন্য একটি ভালো কোর্স হলো [স্ট্যানফোর্ড স্ট্যাটিস্টিক্যাল লার্নিং কোর্স](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning)। ## অ্যাসাইনমেন্ট @@ -377,4 +377,4 @@ print('Model determination: ', score) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় রচিত সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file diff --git a/translations/bn/2-Regression/4-Logistic/README.md b/translations/bn/2-Regression/4-Logistic/README.md index 127e50bca..94e409411 100644 --- a/translations/bn/2-Regression/4-Logistic/README.md +++ b/translations/bn/2-Regression/4-Logistic/README.md @@ -1,88 +1,88 @@ # লজিস্টিক রিগ্রেশন দিয়ে ক্যাটাগরি প্রেডিকশন -![লজিস্টিক বনাম লিনিয়ার রিগ্রেশন ইনফোগ্রাফিক](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.bn.png) +![লজিস্টিক বনাম লিনিয়ার রিগ্রেশন ইনফোগ্রাফিক](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -> ### [এই লেসনটি R-এও পাওয়া যায়!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) +> ### [এই লেসনটি 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) থেকে এই ধরনের রিগ্রেশনের সাথে কাজ করার দক্ষতা আরও গভীর করুন। +✅ এই [Learn module](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) থেকে এই ধরনের রিগ্রেশনের উপর আপনার জ্ঞান আরও গভীর করুন। ## পূর্বশর্ত -কুমড়ার ডেটার সাথে কাজ করার পর, আমরা এখন যথেষ্ট পরিচিত যে বুঝতে পারি যে একটি বাইনারি ক্যাটাগরি আছে যার সাথে আমরা কাজ করতে পারি: `Color`। +কুমড়ার ডেটা নিয়ে কাজ করার পর, আমরা এখন যথেষ্ট পরিচিত যে বুঝতে পারি যে একটি বাইনারি ক্যাটাগরি আছে যার সাথে আমরা কাজ করতে পারি: `Color`। -চলুন একটি লজিস্টিক রিগ্রেশন মডেল তৈরি করি যা প্রেডিক্ট করবে, কিছু ভেরিয়েবলের ভিত্তিতে, _একটি নির্দিষ্ট কুমড়ার রঙ কী হতে পারে_ (কমলা 🎃 বা সাদা 👻)। +চলুন একটি লজিস্টিক রিগ্রেশন মডেল তৈরি করি যা কিছু ভেরিয়েবল দিয়ে প্রেডিক্ট করবে, _একটি নির্দিষ্ট কুমড়ার রঙ কী হতে পারে_ (কমলা 🎃 বা সাদা 👻)। -> কেন আমরা রিগ্রেশনের পাঠে বাইনারি ক্লাসিফিকেশনের কথা বলছি? শুধুমাত্র ভাষাগত সুবিধার জন্য, কারণ লজিস্টিক রিগ্রেশন [আসলে একটি ক্লাসিফিকেশন পদ্ধতি](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), যদিও এটি লিনিয়ার ভিত্তিক। পরবর্তী পাঠে ডেটা ক্লাসিফাই করার অন্যান্য পদ্ধতি সম্পর্কে জানুন। +> কেন আমরা রিগ্রেশনের লেসনে বাইনারি ক্লাসিফিকেশন নিয়ে আলোচনা করছি? শুধুমাত্র ভাষাগত সুবিধার জন্য, কারণ লজিস্টিক রিগ্রেশন [আসলে একটি ক্লাসিফিকেশন মেথড](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), যদিও এটি লিনিয়ার-ভিত্তিক। ডেটা ক্লাসিফাই করার অন্যান্য পদ্ধতি সম্পর্কে পরবর্তী লেসন গ্রুপে জানুন। ## প্রশ্ন নির্ধারণ -আমাদের উদ্দেশ্যে, আমরা এটিকে একটি বাইনারি হিসেবে প্রকাশ করব: 'সাদা' বা 'সাদা নয়'। আমাদের ডেটাসেটে একটি 'স্ট্রাইপড' ক্যাটাগরিও আছে, কিন্তু এর উদাহরণ খুব কম, তাই আমরা এটি ব্যবহার করব না। যাই হোক, এটি ডেটাসেট থেকে নাল ভ্যালু সরানোর পর অদৃশ্য হয়ে যায়। +আমাদের উদ্দেশ্যের জন্য, আমরা এটিকে বাইনারি হিসেবে প্রকাশ করব: 'সাদা' বা 'সাদা নয়'। আমাদের ডেটাসেটে একটি 'স্ট্রাইপড' ক্যাটাগরি আছে, কিন্তু এর উদাহরণ খুব কম, তাই আমরা এটি ব্যবহার করব না। এটি ডেটাসেট থেকে null মানগুলো সরানোর পর অদৃশ্য হয়ে যায়। -> 🎃 মজার তথ্য, আমরা কখনও কখনও সাদা কুমড়াকে 'ভূত' কুমড়া বলি। এগুলো খোদাই করা খুব সহজ নয়, তাই এগুলো কমলা কুমড়ার মতো জনপ্রিয় নয়, কিন্তু দেখতে বেশ সুন্দর! সুতরাং আমরা আমাদের প্রশ্নটি এভাবেও পুনর্গঠন করতে পারি: 'ভূত' বা 'ভূত নয়'। 👻 +> 🎃 মজার তথ্য, আমরা কখনও কখনও সাদা কুমড়াকে 'ভূত' কুমড়া বলি। এগুলো খোদাই করা খুব সহজ নয়, তাই এগুলো কমলা কুমড়ার মতো জনপ্রিয় নয়, কিন্তু দেখতে বেশ কুল! তাই আমরা আমাদের প্রশ্নটি এভাবে পুনর্গঠন করতে পারি: 'ভূত' বা 'ভূত নয়'। 👻 ## লজিস্টিক রিগ্রেশন সম্পর্কে -লজিস্টিক রিগ্রেশন লিনিয়ার রিগ্রেশনের থেকে কিছু গুরুত্বপূর্ণ দিক দিয়ে আলাদা, যা আপনি পূর্বে শিখেছেন। +লজিস্টিক রিগ্রেশন লিনিয়ার রিগ্রেশনের থেকে কিছু গুরুত্বপূর্ণ দিক দিয়ে আলাদা, যা আপনি আগে শিখেছেন। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - লজিস্টিক রিগ্রেশন বুঝুন](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "শিক্ষার্থীদের জন্য মেশিন লার্নিং - লজিস্টিক রিগ্রেশন বুঝুন") +[![শুরু থেকে মেশিন লার্নিং - লজিস্টিক রিগ্রেশন বুঝুন](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "শুরু থেকে মেশিন লার্নিং - লজিস্টিক রিগ্রেশন বুঝুন") -> 🎥 লজিস্টিক রিগ্রেশনের একটি সংক্ষিপ্ত ভিডিও ওভারভিউ দেখতে উপরের ছবিতে ক্লিক করুন। +> 🎥 উপরের ছবিতে ক্লিক করে লজিস্টিক রিগ্রেশনের সংক্ষিপ্ত ভিডিও দেখুন। ### বাইনারি ক্লাসিফিকেশন -লজিস্টিক রিগ্রেশন লিনিয়ার রিগ্রেশনের মতো একই বৈশিষ্ট্য প্রদান করে না। প্রথমটি একটি বাইনারি ক্যাটাগরি সম্পর্কে প্রেডিকশন প্রদান করে ("সাদা বা সাদা নয়"), যেখানে দ্বিতীয়টি ধারাবাহিক মান প্রেডিক্ট করতে সক্ষম, যেমন কুমড়ার উৎপত্তি এবং ফসল কাটার সময়ের ভিত্তিতে, _এর দাম কতটা বাড়বে_। +লজিস্টিক রিগ্রেশন লিনিয়ার রিগ্রেশনের মতো একই ফিচার সরবরাহ করে না। প্রথমটি একটি বাইনারি ক্যাটাগরি ("সাদা বা সাদা নয়") সম্পর্কে প্রেডিকশন সরবরাহ করে, যেখানে দ্বিতীয়টি ধারাবাহিক মান প্রেডিক্ট করতে সক্ষম, যেমন কুমড়ার উৎপত্তি এবং ফসল তোলার সময়ের ভিত্তিতে, _এর দাম কতটা বাড়বে_। -![কুমড়া ক্লাসিফিকেশন মডেল](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.bn.png) -> ইনফোগ্রাফিক: [দাসানি মাদিপল্লি](https://twitter.com/dasani_decoded) +![কুমড়া ক্লাসিফিকেশন মডেল](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> ইনফোগ্রাফিক: [Dasani Madipalli](https://twitter.com/dasani_decoded) ### অন্যান্য ক্লাসিফিকেশন লজিস্টিক রিগ্রেশনের অন্যান্য ধরনও আছে, যেমন মাল্টিনোমিয়াল এবং অর্ডিনাল: - **মাল্টিনোমিয়াল**, যেখানে একাধিক ক্যাটাগরি থাকে - "কমলা, সাদা এবং স্ট্রাইপড"। -- **অর্ডিনাল**, যেখানে ক্যাটাগরিগুলো ক্রমানুসারে সাজানো থাকে, যা তখনই উপকারী যখন আমরা আমাদের ফলাফলগুলোকে যৌক্তিকভাবে সাজাতে চাই, যেমন আমাদের কুমড়াগুলোকে আকার অনুযায়ী সাজানো (মিনি, ছোট, মাঝারি, বড়, এক্সএল, ডাবল এক্সএল)। +- **অর্ডিনাল**, যেখানে ক্যাটাগরিগুলো ক্রমানুসারে সাজানো থাকে, যা আমাদের ফলাফলগুলোকে যুক্তিসঙ্গতভাবে সাজাতে সাহায্য করে, যেমন আমাদের কুমড়াগুলো একটি নির্দিষ্ট সংখ্যক আকারে সাজানো (mini, sm, med, lg, xl, xxl)। -![মাল্টিনোমিয়াল বনাম অর্ডিনাল রিগ্রেশন](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.bn.png) +![মাল্টিনোমিয়াল বনাম অর্ডিনাল রিগ্রেশন](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) -### ভেরিয়েবলগুলোর সম্পর্ক থাকা জরুরি নয় +### ভেরিয়েবলগুলোকে সম্পর্কিত হতে হবে না -মনে আছে লিনিয়ার রিগ্রেশন কিভাবে আরও ভালো কাজ করত যখন ভেরিয়েবলগুলোর মধ্যে সম্পর্ক বেশি ছিল? লজিস্টিক রিগ্রেশন ঠিক উল্টো - ভেরিয়েবলগুলোর সম্পর্ক থাকা জরুরি নয়। এটি এই ডেটার জন্য কার্যকর, যেখানে সম্পর্ক তুলনামূলকভাবে দুর্বল। +লিনিয়ার রিগ্রেশন আরও সম্পর্কিত ভেরিয়েবল দিয়ে ভালো কাজ করত, মনে আছে? লজিস্টিক রিগ্রেশন ঠিক উল্টো - ভেরিয়েবলগুলোকে সম্পর্কিত হতে হবে না। এটি এই ডেটার জন্য কাজ করে, যার সম্পর্ক কিছুটা দুর্বল। -### প্রচুর পরিষ্কার ডেটা প্রয়োজন +### প্রচুর পরিমাণে পরিষ্কার ডেটা প্রয়োজন -লজিস্টিক রিগ্রেশন আরও সঠিক ফলাফল দেবে যদি আপনি বেশি ডেটা ব্যবহার করেন; আমাদের ছোট ডেটাসেট এই কাজের জন্য আদর্শ নয়, তাই এটি মনে রাখুন। +লজিস্টিক রিগ্রেশন আরও সঠিক ফলাফল দেবে যদি আপনি আরও বেশি ডেটা ব্যবহার করেন; আমাদের ছোট ডেটাসেট এই কাজের জন্য আদর্শ নয়, তাই এটি মনে রাখুন। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - লজিস্টিক রিগ্রেশনের জন্য ডেটা বিশ্লেষণ এবং প্রস্তুতি](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "শিক্ষার্থীদের জন্য মেশিন লার্নিং - লজিস্টিক রিগ্রেশনের জন্য ডেটা বিশ্লেষণ এবং প্রস্তুতি") +[![শুরু থেকে মেশিন লার্নিং - লজিস্টিক রিগ্রেশনের জন্য ডেটা বিশ্লেষণ এবং প্রস্তুতি](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "শুরু থেকে মেশিন লার্নিং - লজিস্টিক রিগ্রেশনের জন্য ডেটা বিশ্লেষণ এবং প্রস্তুতি") -> 🎥 লিনিয়ার রিগ্রেশনের জন্য ডেটা প্রস্তুতির একটি সংক্ষিপ্ত ভিডিও ওভারভিউ দেখতে উপরের ছবিতে ক্লিক করুন। +> 🎥 উপরের ছবিতে ক্লিক করে লিনিয়ার রিগ্রেশনের জন্য ডেটা প্রস্তুতির সংক্ষিপ্ত ভিডিও দেখুন। -✅ এমন ডেটার ধরন নিয়ে ভাবুন যা লজিস্টিক রিগ্রেশনের জন্য উপযুক্ত হতে পারে। +✅ এমন ডেটার ধরন নিয়ে চিন্তা করুন যা লজিস্টিক রিগ্রেশনের জন্য উপযুক্ত। ## অনুশীলন - ডেটা পরিষ্কার করুন -প্রথমে, ডেটা কিছুটা পরিষ্কার করুন, নাল ভ্যালু বাদ দিন এবং শুধুমাত্র কিছু কলাম নির্বাচন করুন: +প্রথমে, ডেটা একটু পরিষ্কার করুন, null মানগুলো বাদ দিন এবং কিছু কলাম নির্বাচন করুন: -1. নিচের কোডটি যোগ করুন: +1. নিচের কোড যোগ করুন: ```python @@ -100,9 +100,9 @@ CO_OP_TRANSLATOR_METADATA: ### ভিজ্যুয়ালাইজেশন - ক্যাটাগরিকাল প্লট -এখন পর্যন্ত আপনি [স্টার্টার নোটবুক](./notebook.ipynb) এ কুমড়ার ডেটা লোড করেছেন এবং এটি পরিষ্কার করেছেন যাতে কিছু ভেরিয়েবল সহ একটি ডেটাসেট সংরক্ষণ করা যায়, যার মধ্যে `Color` অন্তর্ভুক্ত। চলুন নোটবুকে ডেটাফ্রেমটি ভিজ্যুয়ালাইজ করি একটি ভিন্ন লাইব্রেরি ব্যবহার করে: [Seaborn](https://seaborn.pydata.org/index.html), যা পূর্বে ব্যবহৃত Matplotlib এর উপর ভিত্তি করে তৈরি। +এখন পর্যন্ত আপনি [স্টার্টার নোটবুক](../../../../2-Regression/4-Logistic/notebook.ipynb) লোড করেছেন কুমড়ার ডেটা দিয়ে এবং এটি পরিষ্কার করেছেন যাতে কিছু ভেরিয়েবল সংরক্ষণ করা যায়, যার মধ্যে `Color` অন্তর্ভুক্ত। চলুন নোটবুকে ডেটাফ্রেমটি ভিজ্যুয়ালাইজ করি একটি ভিন্ন লাইব্রেরি ব্যবহার করে: [Seaborn](https://seaborn.pydata.org/index.html), যা আগে ব্যবহৃত Matplotlib-এর উপর ভিত্তি করে তৈরি। -Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছু চমৎকার উপায় প্রদান করে। উদাহরণস্বরূপ, আপনি `Variety` এবং `Color` এর জন্য ডেটার ডিস্ট্রিবিউশন তুলনা করতে পারেন একটি ক্যাটাগরিকাল প্লটে। +Seaborn ডেটা ভিজ্যুয়ালাইজ করার জন্য কিছু চমৎকার উপায় সরবরাহ করে। উদাহরণস্বরূপ, আপনি `Variety` এবং `Color` এর জন্য ডেটার ডিস্ট্রিবিউশন তুলনা করতে পারেন একটি ক্যাটাগরিকাল প্লটে। 1. `catplot` ফাংশন ব্যবহার করে একটি প্লট তৈরি করুন, আমাদের কুমড়ার ডেটা `pumpkins` ব্যবহার করে এবং প্রতিটি কুমড়া ক্যাটাগরির জন্য একটি রঙের ম্যাপিং নির্ধারণ করে (কমলা বা সাদা): @@ -120,18 +120,19 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ ) ``` - ![ভিজ্যুয়ালাইজড ডেটার একটি গ্রিড](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.bn.png) + ![ভিজ্যুয়ালাইজড ডেটার একটি গ্রিড](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) - ডেটা পর্যবেক্ষণ করে, আপনি দেখতে পাবেন কিভাবে Color ডেটা Variety এর সাথে সম্পর্কিত। + ডেটা পর্যবেক্ষণ করে, আপনি দেখতে পারেন কীভাবে Color ডেটা Variety-এর সাথে সম্পর্কিত। - ✅ এই ক্যাটাগরিকাল প্লট দেখে, আপনি কী ধরনের আকর্ষণীয় অনুসন্ধান কল্পনা করতে পারেন? + ✅ এই ক্যাটাগরিকাল প্লট দেখে, আপনি কী ধরনের আকর্ষণীয় অনুসন্ধান কল্পনা করতে পারেন? ### ডেটা প্রি-প্রসেসিং: ফিচার এবং লেবেল এনকোডিং -আমাদের কুমড়ার ডেটাসেটে প্রতিটি কলামের জন্য স্ট্রিং মান রয়েছে। মানুষের জন্য ক্যাটাগরিকাল ডেটা নিয়ে কাজ করা সহজ হলেও মেশিনের জন্য তা নয়। মেশিন লার্নিং অ্যালগরিদমগুলো সংখ্যার সাথে ভালো কাজ করে। এজন্য এনকোডিং একটি গুরুত্বপূর্ণ ধাপ ডেটা প্রি-প্রসেসিং পর্যায়ে, কারণ এটি আমাদের ক্যাটাগরিকাল ডেটাকে সংখ্যায় রূপান্তর করতে সক্ষম করে, কোনো তথ্য হারানো ছাড়াই। ভালো এনকোডিং একটি ভালো মডেল তৈরিতে সহায়তা করে। -ফিচার এনকোডিংয়ের জন্য দুটি প্রধান ধরনের এনকোডার রয়েছে: +আমাদের কুমড়ার ডেটাসেটে সমস্ত কলামের জন্য স্ট্রিং মান আছে। ক্যাটাগরিকাল ডেটা মানুষের জন্য স্বজ্ঞাত হলেও মেশিনের জন্য নয়। মেশিন লার্নিং অ্যালগরিদমগুলো সংখ্যার সাথে ভালো কাজ করে। এজন্য এনকোডিং ডেটা প্রি-প্রসেসিং ধাপে একটি খুব গুরুত্বপূর্ণ পদক্ষেপ, কারণ এটি আমাদের ক্যাটাগরিকাল ডেটাকে সংখ্যায় পরিণত করতে সক্ষম করে, কোনো তথ্য হারানো ছাড়াই। ভালো এনকোডিং একটি ভালো মডেল তৈরি করতে সাহায্য করে। -1. অর্ডিনাল এনকোডার: এটি অর্ডিনাল ভেরিয়েবলের জন্য উপযুক্ত, যা ক্যাটাগরিকাল ভেরিয়েবল যেখানে ডেটা যৌক্তিক ক্রম অনুসরণ করে, যেমন আমাদের ডেটাসেটের `Item Size` কলাম। এটি একটি ম্যাপিং তৈরি করে যাতে প্রতিটি ক্যাটাগরি একটি সংখ্যার দ্বারা উপস্থাপিত হয়, যা কলামে ক্যাটাগরির ক্রম। +ফিচার এনকোডিংয়ের জন্য দুটি প্রধান ধরনের এনকোডার আছে: + +1. অর্ডিনাল এনকোডার: এটি অর্ডিনাল ভেরিয়েবলের জন্য উপযুক্ত, যা ক্যাটাগরিকাল ভেরিয়েবল যেখানে তাদের ডেটা একটি যুক্তিসঙ্গত ক্রম অনুসরণ করে, যেমন আমাদের ডেটাসেটের `Item Size` কলাম। এটি একটি ম্যাপিং তৈরি করে যাতে প্রতিটি ক্যাটাগরি একটি সংখ্যার দ্বারা প্রতিনিধিত্ব করে, যা কলামে ক্যাটাগরির ক্রম। ```python from sklearn.preprocessing import OrdinalEncoder @@ -141,7 +142,7 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. ক্যাটাগরিকাল এনকোডার: এটি নোমিনাল ভেরিয়েবলের জন্য উপযুক্ত, যা ক্যাটাগরিকাল ভেরিয়েবল যেখানে ডেটা যৌক্তিক ক্রম অনুসরণ করে না, যেমন আমাদের ডেটাসেটের `Item Size` ব্যতীত অন্যান্য ফিচার। এটি একটি ওয়ান-হট এনকোডিং, যার মানে প্রতিটি ক্যাটাগরি একটি বাইনারি কলামের দ্বারা উপস্থাপিত হয়: এনকোড করা ভেরিয়েবলটি 1 এর সমান যদি কুমড়া সেই Variety এর অন্তর্ভুক্ত হয় এবং অন্যথায় 0। +2. ক্যাটাগরিকাল এনকোডার: এটি নোমিনাল ভেরিয়েবলের জন্য উপযুক্ত, যা ক্যাটাগরিকাল ভেরিয়েবল যেখানে তাদের ডেটা কোনো যুক্তিসঙ্গত ক্রম অনুসরণ করে না, যেমন `Item Size` ছাড়া আমাদের ডেটাসেটের অন্যান্য ফিচার। এটি একটি ওয়ান-হট এনকোডিং, যার মানে প্রতিটি ক্যাটাগরি একটি বাইনারি কলাম দ্বারা প্রতিনিধিত্ব করে: এনকোড করা ভেরিয়েবলটি 1 হলে কুমড়া সেই Variety-এর অন্তর্ভুক্ত এবং 0 হলে নয়। ```python from sklearn.preprocessing import OneHotEncoder @@ -149,6 +150,7 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] categorical_encoder = OneHotEncoder(sparse_output=False) ``` + এরপর, `ColumnTransformer` ব্যবহার করে একাধিক এনকোডারকে একটি ধাপে একত্রিত করা হয় এবং সেগুলোকে উপযুক্ত কলামে প্রয়োগ করা হয়। ```python @@ -162,7 +164,8 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ ct.set_output(transform='pandas') encoded_features = ct.fit_transform(pumpkins) ``` -অন্যদিকে, লেবেল এনকোড করতে, আমরা স্কিকিট-লার্নের `LabelEncoder` ক্লাস ব্যবহার করি, যা একটি ইউটিলিটি ক্লাস যা লেবেলগুলোকে স্বাভাবিক করতে সহায়তা করে যাতে সেগুলো শুধুমাত্র 0 থেকে n_classes-1 (এখানে, 0 এবং 1) এর মধ্যে মান ধারণ করে। + +অন্যদিকে, লেবেল এনকোড করতে, আমরা scikit-learn-এর `LabelEncoder` ক্লাস ব্যবহার করি, যা একটি ইউটিলিটি ক্লাস যা লেবেলগুলোকে স্বাভাবিক করতে সাহায্য করে যাতে তারা শুধুমাত্র 0 থেকে n_classes-1 (এখানে, 0 এবং 1) পর্যন্ত মান ধারণ করে। ```python from sklearn.preprocessing import LabelEncoder @@ -170,17 +173,20 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ label_encoder = LabelEncoder() encoded_label = label_encoder.fit_transform(pumpkins['Color']) ``` -ফিচার এবং লেবেল এনকোড করার পর, আমরা সেগুলোকে একটি নতুন ডেটাফ্রেম `encoded_pumpkins` এ একত্রিত করতে পারি। + +একবার আমরা ফিচার এবং লেবেল এনকোড করে ফেলি, আমরা সেগুলোকে একটি নতুন ডেটাফ্রেম `encoded_pumpkins`-এ একত্রিত করতে পারি। ```python encoded_pumpkins = encoded_features.assign(Color=encoded_label) ``` + ✅ `Item Size` কলামের জন্য অর্ডিনাল এনকোডার ব্যবহারের সুবিধাগুলো কী? ### ভেরিয়েবলগুলোর মধ্যে সম্পর্ক বিশ্লেষণ -এখন যেহেতু আমরা আমাদের ডেটা প্রি-প্রসেস করেছি, আমরা ফিচার এবং লেবেলের মধ্যে সম্পর্ক বিশ্লেষণ করতে পারি যাতে মডেলটি ফিচারগুলো থেকে লেবেল প্রেডিক্ট করতে কতটা কার্যকর হবে তা বোঝা যায়। -এই ধরনের বিশ্লেষণ করার সেরা উপায় হলো ডেটা প্লট করা। আমরা আবার Seaborn এর `catplot` ফাংশন ব্যবহার করব, `Item Size`, `Variety` এবং `Color` এর মধ্যে সম্পর্ক ভিজ্যুয়ালাইজ করতে একটি ক্যাটাগরিকাল প্লটে। ডেটা আরও ভালোভাবে প্লট করার জন্য আমরা এনকোড করা `Item Size` কলাম এবং আনএনকোড করা `Variety` কলাম ব্যবহার করব। +এখন আমরা আমাদের ডেটা প্রি-প্রসেসিং সম্পন্ন করেছি, আমরা ফিচার এবং লেবেলের মধ্যে সম্পর্ক বিশ্লেষণ করতে পারি যাতে বুঝতে পারি মডেলটি ফিচারগুলো থেকে লেবেল প্রেডিক্ট করতে কতটা সক্ষম হবে। + +এই ধরনের বিশ্লেষণ করার সেরা উপায় হলো ডেটা প্লট করা। আমরা আবার Seaborn-এর `catplot` ফাংশন ব্যবহার করব, `Item Size`, `Variety` এবং `Color` এর মধ্যে সম্পর্কগুলো একটি ক্যাটাগরিকাল প্লটে ভিজ্যুয়ালাইজ করতে। ডেটা আরও ভালোভাবে প্লট করার জন্য আমরা এনকোড করা `Item Size` কলাম এবং আনএনকোড করা `Variety` কলাম ব্যবহার করব। ```python palette = { @@ -199,11 +205,12 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ g.set(xlabel="Item Size", ylabel="").set(xlim=(0,6)) g.set_titles(row_template="{row_name}") ``` -![ভিজ্যুয়ালাইজড ডেটার একটি ক্যাটপ্লট](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.bn.png) + +![ভিজ্যুয়ালাইজড ডেটার একটি ক্যাটপ্লট](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) ### একটি 'সোয়ার্ম' প্লট ব্যবহার করুন -যেহেতু Color একটি বাইনারি ক্যাটাগরি (সাদা বা সাদা নয়), এটি ভিজ্যুয়ালাইজেশনের জন্য 'একটি [বিশেষ পদ্ধতি](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)' প্রয়োজন। এই ক্যাটাগরির সাথে অন্যান্য ভেরিয়েবলের সম্পর্ক ভিজ্যুয়ালাইজ করার আরও উপায় রয়েছে। +Color একটি বাইনারি ক্যাটাগরি (সাদা বা সাদা নয়), এটি ভিজ্যুয়ালাইজেশনের জন্য 'একটি [বিশেষ পদ্ধতি](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)' প্রয়োজন। এই ক্যাটাগরির অন্যান্য ভেরিয়েবলের সাথে সম্পর্ক ভিজ্যুয়ালাইজ করার আরও উপায় আছে। আপনি Seaborn প্লট ব্যবহার করে ভেরিয়েবলগুলোকে পাশাপাশি ভিজ্যুয়ালাইজ করতে পারেন। @@ -217,25 +224,25 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) ``` - ![ভিজ্যুয়ালাইজড ডেটার একটি সোয়ার্ম](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.bn.png) + ![ভিজ্যুয়ালাইজড ডেটার একটি সোয়ার্ম](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**সতর্ক থাকুন**: উপরের কোডটি একটি সতর্কবার্তা তৈরি করতে পারে, কারণ Seaborn এত সংখ্যক ডেটাপয়েন্টকে সোয়ার্ম প্লটে উপস্থাপন করতে ব্যর্থ হতে পারে। একটি সম্ভাব্য সমাধান হলো মার্কারের আকার কমানো, 'size' প্যারামিটার ব্যবহার করে। তবে, মনে রাখবেন এটি প্লটের পাঠযোগ্যতাকে প্রভাবিত করতে পারে। +**সতর্ক থাকুন**: উপরের কোডটি একটি সতর্কবার্তা তৈরি করতে পারে, কারণ Seaborn এত সংখ্যক ডেটাপয়েন্টকে সোয়ার্ম প্লটে উপস্থাপন করতে ব্যর্থ হয়। একটি সম্ভাব্য সমাধান হলো মার্কারের আকার কমানো, 'size' প্যারামিটার ব্যবহার করে। তবে, মনে রাখবেন এটি প্লটের পাঠযোগ্যতাকে প্রভাবিত করে। -> **🧮 আমাকে গাণিতিক ব্যাখ্যা দিন** +> **🧮 গণিত দেখুন** > -> লজিস্টিক রিগ্রেশন 'সর্বাধিক সম্ভাব্যতা' ধারণার উপর নির্ভর করে [সিগময়েড ফাংশন](https://wikipedia.org/wiki/Sigmoid_function) ব্যবহার করে। একটি 'সিগময়েড ফাংশন' একটি প্লটে 'S' আকৃতির দেখায়। এটি একটি মান নেয় এবং সেটিকে 0 এবং 1 এর মধ্যে কোথাও ম্যাপ করে। এর কার্ভটিকে 'লজিস্টিক কার্ভ'ও বলা হয়। এর সূত্রটি এ রকম দেখায়: +> লজিস্টিক রিগ্রেশন 'ম্যাক্সিমাম লাইকলিহুড' ধারণার উপর নির্ভর করে [সিগময়েড ফাংশন](https://wikipedia.org/wiki/Sigmoid_function) ব্যবহার করে। একটি 'সিগময়েড ফাংশন' একটি প্লটে 'S' আকৃতির দেখায়। এটি একটি মান নেয় এবং সেটিকে 0 এবং 1 এর মধ্যে কোথাও ম্যাপ করে। এর কার্ভকে 'লজিস্টিক কার্ভ'ও বলা হয়। এর ফর্মুলা দেখতে এমন: > -> ![লজিস্টিক ফাংশন](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.bn.png) +> ![লজিস্টিক ফাংশন](../../../../2-Regression/4-Logistic/images/sigmoid.png) > -> যেখানে সিগময়েডের মধ্যবিন্দু x এর 0 পয়েন্টে থাকে, L হলো কার্ভের সর্বাধিক মান, এবং k হলো কার্ভের খাড়াভাব। যদি ফাংশনের ফলাফল 0.5 এর বেশি হয়, সংশ্লিষ্ট লেবেলটি বাইনারি পছন্দের '1' ক্লাসে দেওয়া হবে। অন্যথায়, এটি '0' হিসেবে শ্রেণীবদ্ধ হবে। +> যেখানে সিগময়েডের মধ্যবিন্দু x-এর 0 পয়েন্টে থাকে, L হলো কার্ভের সর্বোচ্চ মান, এবং k হলো কার্ভের ঢাল। যদি ফাংশনের ফলাফল 0.5 এর বেশি হয়, সংশ্লিষ্ট লেবেলটি বাইনারি পছন্দের '1' ক্লাসে দেওয়া হবে। যদি না হয়, এটি '0' হিসেবে শ্রেণীবদ্ধ হবে। ## আপনার মডেল তৈরি করুন -স্কিকিট-লার্নে এই বাইনারি ক্লাসিফিকেশন খুঁজে বের করার জন্য একটি মডেল তৈরি করা আশ্চর্যজনকভাবে সহজ। +Scikit-learn-এ এই বাইনারি ক্লাসিফিকেশন খুঁজে বের করার জন্য একটি মডেল তৈরি করা আশ্চর্যজনকভাবে সহজ। -[![শিক্ষার্থীদের জন্য মেশিন লার্নিং - ডেটা ক্লাসিফিকেশনের জন্য লজিস্টিক রিগ্রেশন](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "শিক্ষার্থীদের জন্য মেশিন লার্নিং - ডেটা ক্লাসিফিকেশনের জন্য লজিস্টিক রিগ্রেশন") +[![শুরু থেকে মেশিন লার্নিং - ডেটা ক্লাসিফিকেশনের জন্য লজিস্টিক রিগ্রেশন](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "শুরু থেকে মেশিন লার্নিং - ডেটা ক্লাসিফিকেশনের জন্য লজিস্টিক রিগ্রেশন") -> 🎥 একটি লিনিয়ার রিগ্রেশন মডেল তৈরির সংক্ষিপ্ত ভিডিও ওভারভিউ দেখতে উপরের ছবিতে ক্লিক করুন। +> 🎥 উপরের ছবিতে ক্লিক করে একটি লিনিয়ার রিগ্রেশন মডেল তৈরির সংক্ষিপ্ত ভিডিও দেখুন। 1. আপনার ক্লাসিফিকেশন মডেলে ব্যবহার করতে চান এমন ভেরিয়েবলগুলো নির্বাচন করুন এবং `train_test_split()` কল করে ট্রেনিং এবং টেস্ট সেটগুলো ভাগ করুন: @@ -249,7 +256,7 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ ``` -2. এখন আপনি আপনার মডেলটি ট্রেন করতে পারেন, আপনার ট্রেনিং ডেটা দিয়ে `fit()` কল করে, এবং এর ফলাফল প্রিন্ট করতে পারেন: +2. এখন আপনি আপনার মডেল ট্রেন করতে পারেন, আপনার ট্রেনিং ডেটা দিয়ে `fit()` কল করে এবং এর ফলাফল প্রিন্ট করতে পারেন: ```python from sklearn.metrics import f1_score, classification_report @@ -264,7 +271,7 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ print('F1-score: ', f1_score(y_test, predictions)) ``` - আপনার মডেলের স্কোরবোর্ডটি দেখুন। এটি খারাপ নয়, বিশেষ করে যখন আপনার কাছে মাত্র ১০০০টি ডেটা রো আছে: + আপনার মডেলের স্কোরবোর্ডটি দেখুন। এটি খারাপ নয়, যদিও আপনার কাছে মাত্র 1000টি ডেটা রো আছে: ```output precision recall f1-score support @@ -285,11 +292,11 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ 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://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)' (বা 'এরর ম্যাট্রিক্স') হলো একটি টেবিল যা আপনার মডেলের সত্য বনাম মিথ্যা পজিটিভ এবং নেগেটিভ প্রকাশ করে, এভাবে প্রেডিকশনের সঠিকতা পরিমাপ করে। +> 🎓 একটি '[কনফিউশন ম্যাট্রিক্স](https://wikipedia.org/wiki/Confusion_matrix)' (বা 'এরর ম্যাট্রিক্স') হলো একটি টেবিল যা আপনার মডেলের সত্য বনাম মিথ্যা পজিটিভ এবং নেগেটিভ প্রকাশ করে, ফলে প্রেডিকশনের সঠিকতা পরিমাপ করে। 1. একটি কনফিউশন ম্যাট্রিক্স ব্যবহার করতে, `confusion_matrix()` কল করুন: @@ -305,51 +312,50 @@ Seaborn ডেটা ভিজ্যুয়ালাইজ করার কিছ [ 11, 22]]) ``` -স্কিকিট-লার্নে, কনফিউশন ম্যাট্রিক্সের সারি (অক্ষ 0) হলো প্রকৃত লেবেল এবং কলাম (অক্ষ 1) হলো প্রেডিক্টেড লেবেল। +Scikit-learn-এ কনফিউশন ম্যাট্রিক্সের রো (axis 0) হলো আসল লেবেল এবং কলাম (axis 1) হলো প্রেডিক্টেড লেবেল। | | 0 | 1 | | :---: | :---: | :---: | | 0 | TN | FP | | 1 | FN | TP | -এখানে কী ঘটছে? ধরুন আমাদের মডেলকে কুমড়াগুলোকে দুটি বাইনার -কনফিউশন ম্যাট্রিক্স কীভাবে প্রিসিশন এবং রিকল-এর সাথে সম্পর্কিত? মনে রাখুন, উপরে প্রিন্ট করা ক্লাসিফিকেশন রিপোর্টে প্রিসিশন (0.85) এবং রিকল (0.67) দেখানো হয়েছিল। +এখানে কী ঘটছে? ধরুন আমাদের মডেলকে দুটি বাইনারি ক্যাটাগরির মধ্যে কুমড়াকে শ্রেণীবদ্ধ করতে বলা হয়েছে, ক্যাটাগরি 'সাদা' এবং ক্যাটাগরি 'সাদা নয়'। + +- যদি আপনার মডেল একটি কুমড়াকে সাদা নয় বলে প্রেডিক্ট করে এবং এটি বাস্তবে 'সাদা নয়' ক্যাটাগরির অন্তর্ভুক্ত হয়, আমরা এটিকে একটি সত্য নেগেটিভ বলি, যা উপরের বাম নম্বরে দেখানো হয়েছে। +- +কনফিউশন ম্যাট্রিক্স কীভাবে প্রিসিশন এবং রিকল-এর সাথে সম্পর্কিত? মনে রাখবেন, উপরে প্রিন্ট করা ক্লাসিফিকেশন রিপোর্টে প্রিসিশন (0.85) এবং রিকল (0.67) দেখানো হয়েছিল। প্রিসিশন = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 রিকল = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 -✅ প্রশ্ন: কনফিউশন ম্যাট্রিক্স অনুযায়ী মডেলটি কেমন করেছে? উত্তর: খারাপ নয়; বেশ কিছু ট্রু নেগেটিভ আছে, তবে কিছু ফলস নেগেটিভও রয়েছে। +✅ প্রশ্ন: কনফিউশন ম্যাট্রিক্স অনুযায়ী মডেলটি কেমন করেছে? উত্তর: খারাপ না; বেশ কিছু ট্রু নেগেটিভ আছে, তবে কিছু ফলস নেগেটিভও রয়েছে। -চলুন, কনফিউশন ম্যাট্রিক্সের TP/TN এবং FP/FN ম্যাপিংয়ের সাহায্যে আমরা আগে দেখা টার্মগুলো আবার দেখে নিই: +চলুন, আমরা আগের দেখা টার্মগুলো কনফিউশন ম্যাট্রিক্সের TP/TN এবং FP/FN ম্যাপিংয়ের সাহায্যে আবার দেখে নিই: -🎓 প্রিসিশন: TP/(TP + FP) -রিট্রিভ করা ইনস্ট্যান্সগুলোর মধ্যে প্রাসঙ্গিক ইনস্ট্যান্সের অনুপাত (যেমন, কোন লেবেলগুলো সঠিকভাবে লেবেল করা হয়েছে) +🎓 প্রিসিশন: TP/(TP + FP) পুনরুদ্ধার করা ইনস্ট্যান্সগুলোর মধ্যে প্রাসঙ্গিক ইনস্ট্যান্সের অনুপাত (যেমন, কোন লেবেলগুলো সঠিকভাবে লেবেল করা হয়েছে) -🎓 রিকল: TP/(TP + FN) -প্রাসঙ্গিক ইনস্ট্যান্সগুলোর অনুপাত যা রিট্রিভ করা হয়েছে, সঠিকভাবে লেবেল করা হোক বা না হোক +🎓 রিকল: TP/(TP + FN) প্রাসঙ্গিক ইনস্ট্যান্সগুলোর অনুপাত যা পুনরুদ্ধার করা হয়েছে, সেগুলো সঠিকভাবে লেবেল করা হোক বা না হোক -🎓 f1-স্কোর: (2 * প্রিসিশন * রিকল)/(প্রিসিশন + রিকল) -প্রিসিশন এবং রিকলের একটি ওজনযুক্ত গড়, যেখানে সর্বোচ্চ মান 1 এবং সর্বনিম্ন মান 0 +🎓 f1-স্কোর: (2 * প্রিসিশন * রিকল)/(প্রিসিশন + রিকল) প্রিসিশন এবং রিকলের একটি ওজনযুক্ত গড়, যেখানে সর্বোচ্চ মান 1 এবং সর্বনিম্ন মান 0 -🎓 সাপোর্ট: প্রতিটি লেবেলের রিট্রিভ হওয়া ঘটনার সংখ্যা +🎓 সাপোর্ট: প্রতিটি লেবেলের পুনরুদ্ধার হওয়া সংখ্যার পরিমাণ -🎓 একিউরেসি: (TP + TN)/(TP + TN + FP + FN) -একটি স্যাম্পলের জন্য সঠিকভাবে প্রেডিক্ট করা লেবেলের শতাংশ। +🎓 একিউরেসি: (TP + TN)/(TP + TN + FP + FN) একটি নমুনার জন্য সঠিকভাবে প্রেডিক্ট করা লেবেলের শতাংশ -🎓 ম্যাক্রো অ্যাভারেজ: প্রতিটি লেবেলের জন্য ওজনহীন গড় মেট্রিকের হিসাব, লেবেলের ভারসাম্যকে বিবেচনায় না নিয়ে। +🎓 ম্যাক্রো অ্যাভারেজ: প্রতিটি লেবেলের জন্য ওজনহীন গড় মেট্রিকের হিসাব, লেবেলের ভারসাম্য বিবেচনা না করে। -🎓 ওয়েটেড অ্যাভারেজ: প্রতিটি লেবেলের জন্য গড় মেট্রিকের হিসাব, সাপোর্ট (প্রতিটি লেবেলের জন্য সত্যিকারের ঘটনার সংখ্যা) দ্বারা ওজন করে লেবেলের ভারসাম্যকে বিবেচনায় নিয়ে। +🎓 ওয়েটেড অ্যাভারেজ: প্রতিটি লেবেলের জন্য গড় মেট্রিকের হিসাব, লেবেলের ভারসাম্যকে সাপোর্ট (প্রতিটি লেবেলের জন্য সত্য ইনস্ট্যান্সের সংখ্যা) দিয়ে ওজনায়িত করে। -✅ আপনি কি ভাবতে পারেন কোন মেট্রিকটি আপনি মনোযোগ দেবেন যদি আপনি চান আপনার মডেল ফলস নেগেটিভের সংখ্যা কমিয়ে আনুক? +✅ আপনি কি ভাবতে পারেন কোন মেট্রিকটি আপনি পর্যবেক্ষণ করবেন যদি আপনি চান আপনার মডেল ফলস নেগেটিভের সংখ্যা কমিয়ে আনুক? -## এই মডেলের ROC কার্ভ ভিজুয়ালাইজ করুন +## এই মডেলের ROC কার্ভ ভিজুয়ালাইজ করুন [![ML for beginners - Analyzing Logistic Regression Performance with ROC Curves](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML for beginners - Analyzing Logistic Regression Performance with ROC Curves") > 🎥 উপরের ছবিতে ক্লিক করুন ROC কার্ভের একটি সংক্ষিপ্ত ভিডিও ওভারভিউ দেখার জন্য -চলুন, আমরা আরেকটি ভিজুয়ালাইজেশন করি যাতে তথাকথিত 'ROC' কার্ভ দেখা যায়: +চলুন, আমরা আরেকটি ভিজুয়ালাইজেশন করি, যাকে 'ROC' কার্ভ বলা হয়: ```python from sklearn.metrics import roc_curve, roc_auc_score @@ -369,36 +375,36 @@ plt.title('ROC Curve') plt.show() ``` -Matplotlib ব্যবহার করে মডেলের [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) বা ROC প্লট করুন। ROC কার্ভ সাধারণত একটি ক্লাসিফায়ারের আউটপুটের একটি ভিউ পেতে ব্যবহৃত হয়, যা ট্রু পজিটিভ বনাম ফলস পজিটিভের দিক থেকে। "ROC কার্ভ সাধারণত Y অক্ষে ট্রু পজিটিভ রেট এবং X অক্ষে ফলস পজিটিভ রেট দেখায়।" তাই কার্ভের খাড়া হওয়া এবং মধ্যরেখা ও কার্ভের মধ্যবর্তী স্থান গুরুত্বপূর্ণ: আপনি এমন একটি কার্ভ চান যা দ্রুত উপরে উঠে এবং রেখার ওপরে চলে যায়। আমাদের ক্ষেত্রে, শুরুতে কিছু ফলস পজিটিভ রয়েছে, তারপর রেখাটি সঠিকভাবে উপরে উঠে যায়: +Matplotlib ব্যবহার করে মডেলের [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) বা ROC প্লট করুন। ROC কার্ভ সাধারণত একটি ক্লাসিফায়ারের আউটপুটের ট্রু বনাম ফলস পজিটিভের দৃষ্টিভঙ্গি পেতে ব্যবহৃত হয়। "ROC কার্ভ সাধারণত Y অক্ষে ট্রু পজিটিভ রেট এবং X অক্ষে ফলস পজিটিভ রেট দেখায়।" তাই কার্ভের খাড়াভাব এবং মধ্যরেখা ও কার্ভের মধ্যকার জায়গা গুরুত্বপূর্ণ: আপনি এমন একটি কার্ভ চান যা দ্রুত উপরে উঠে এবং রেখার ওপরে চলে যায়। আমাদের ক্ষেত্রে, শুরুতে কিছু ফলস পজিটিভ রয়েছে, তারপর রেখাটি সঠিকভাবে উপরে উঠে যায়: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.bn.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.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) গণনা করুন: +শেষে, 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.9749908725812341`। যেহেতু AUC-এর মান 0 থেকে 1 পর্যন্ত হয়, আপনি একটি বড় স্কোর চান, কারণ একটি মডেল যা 100% সঠিক প্রেডিকশন করে তার AUC হবে 1; এই ক্ষেত্রে, মডেলটি _খুব ভালো_। +``` +ফলাফল হলো `0.9749908725812341`। যেহেতু AUC-এর মান 0 থেকে 1 পর্যন্ত থাকে, আপনি একটি বড় স্কোর চান, কারণ একটি মডেল যা 100% সঠিকভাবে প্রেডিক্ট করে তার AUC হবে 1; এই ক্ষেত্রে, মডেলটি _খুব ভালো_। -ভবিষ্যতের ক্লাসিফিকেশন লেসনে, আপনি শিখবেন কীভাবে আপনার মডেলের স্কোর উন্নত করতে ইটারেট করবেন। তবে আপাতত, অভিনন্দন! আপনি এই রিগ্রেশন লেসনগুলো সম্পন্ন করেছেন! +ক্লাসিফিকেশনের ভবিষ্যৎ পাঠে, আপনি শিখবেন কীভাবে আপনার মডেলের স্কোর উন্নত করতে পুনরাবৃত্তি করবেন। তবে আপাতত, অভিনন্দন! আপনি এই রিগ্রেশন পাঠগুলো সম্পন্ন করেছেন! --- ## 🚀চ্যালেঞ্জ -লজিস্টিক রিগ্রেশন সম্পর্কে আরও অনেক কিছু জানার আছে! তবে শেখার সেরা উপায় হলো পরীক্ষা-নিরীক্ষা করা। এমন একটি ডেটাসেট খুঁজুন যা এই ধরনের বিশ্লেষণের জন্য উপযুক্ত এবং এর সাথে একটি মডেল তৈরি করুন। আপনি কী শিখলেন? টিপ: [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) এ আকর্ষণীয় ডেটাসেট খুঁজে দেখুন। +লজিস্টিক রিগ্রেশন নিয়ে আরও অনেক কিছু জানার আছে! তবে শেখার সেরা উপায় হলো পরীক্ষা-নিরীক্ষা করা। এমন একটি ডেটাসেট খুঁজুন যা এই ধরনের বিশ্লেষণের জন্য উপযুক্ত এবং এর সাথে একটি মডেল তৈরি করুন। আপনি কী শিখলেন? টিপ: [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) থেকে আকর্ষণীয় ডেটাসেট খুঁজে দেখুন। -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## রিভিউ এবং স্ব-অধ্যয়ন +## রিভিউ এবং স্ব-অধ্যয়ন -[স্ট্যানফোর্ডের এই পেপারের](https://web.stanford.edu/~jurafsky/slp3/5.pdf) প্রথম কয়েকটি পৃষ্ঠা পড়ুন যেখানে লজিস্টিক রিগ্রেশনের কিছু ব্যবহারিক প্রয়োগ নিয়ে আলোচনা করা হয়েছে। এমন কাজগুলো নিয়ে ভাবুন যা আমরা এখন পর্যন্ত অধ্যয়ন করা রিগ্রেশন টাস্কগুলোর মধ্যে একটির জন্য বেশি উপযুক্ত। কোনটি সবচেয়ে ভালো কাজ করবে? +[স্ট্যানফোর্ডের এই পেপারের](https://web.stanford.edu/~jurafsky/slp3/5.pdf) প্রথম কয়েকটি পৃষ্ঠা পড়ুন, যেখানে লজিস্টিক রিগ্রেশনের কিছু ব্যবহারিক প্রয়োগ নিয়ে আলোচনা করা হয়েছে। এমন কাজ নিয়ে ভাবুন যেগুলো আমরা এখন পর্যন্ত অধ্যয়ন করা রিগ্রেশনের বিভিন্ন প্রকারের জন্য উপযুক্ত। কোনটি সবচেয়ে ভালো কাজ করবে? ## অ্যাসাইনমেন্ট -[এই রিগ্রেশনটি পুনরায় চেষ্টা করুন](assignment.md) +[এই রিগ্রেশনটি পুনরায় চেষ্টা করুন](assignment.md) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় লেখা সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file diff --git a/translations/bn/3-Web-App/1-Web-App/README.md b/translations/bn/3-Web-App/1-Web-App/README.md index 0fb70ea44..491efe272 100644 --- a/translations/bn/3-Web-App/1-Web-App/README.md +++ b/translations/bn/3-Web-App/1-Web-App/README.md @@ -1,65 +1,65 @@ -# একটি মেশিন লার্নিং মডেল ব্যবহার করার জন্য ওয়েব অ্যাপ তৈরি করুন +# একটি মেশিন লার্নিং মডেল ব্যবহার করার জন্য একটি ওয়েব অ্যাপ তৈরি করুন -এই পাঠে, আপনি একটি ডেটাসেটে একটি মেশিন লার্নিং (ML) মডেল প্রশিক্ষণ দেবেন যা একেবারে অনন্য: _গত শতাব্দীর UFO দর্শনের তথ্য_, যা NUFORC-এর ডেটাবেস থেকে সংগ্রহ করা হয়েছে। +এই পাঠে, আপনি একটি ডেটাসেটে একটি মেশিন লার্নিং মডেল প্রশিক্ষণ দেবেন যা একেবারে অনন্য: _গত শতাব্দীর UFO দর্শন_, যা NUFORC-এর ডেটাবেস থেকে সংগ্রহ করা হয়েছে। আপনি শিখবেন: - কীভাবে একটি প্রশিক্ষিত মডেল 'পিকল' করতে হয় - কীভাবে সেই মডেলটি একটি Flask অ্যাপে ব্যবহার করতে হয় -আমরা নোটবুক ব্যবহার করে ডেটা পরিষ্কার এবং মডেল প্রশিক্ষণ চালিয়ে যাব, তবে আপনি প্রক্রিয়াটিকে আরও এক ধাপ এগিয়ে নিয়ে যেতে পারেন এবং একটি ওয়েব অ্যাপে মডেল ব্যবহার করার ধারণা অন্বেষণ করতে পারেন। +আমরা ডেটা পরিষ্কার এবং আমাদের মডেল প্রশিক্ষণ দেওয়ার জন্য নোটবুক ব্যবহার চালিয়ে যাব, তবে আপনি প্রক্রিয়াটি আরও এক ধাপ এগিয়ে নিয়ে যেতে পারেন একটি মডেলকে বাস্তব জীবনে ব্যবহার করার মাধ্যমে: একটি ওয়েব অ্যাপে। এটি করতে, আপনাকে Flask ব্যবহার করে একটি ওয়েব অ্যাপ তৈরি করতে হবে। -## [পাঠের পূর্ববর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [পাঠের আগে কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## একটি অ্যাপ তৈরি করা -মেশিন লার্নিং মডেল ব্যবহার করার জন্য ওয়েব অ্যাপ তৈরি করার বিভিন্ন উপায় রয়েছে। আপনার ওয়েব আর্কিটেকচার আপনার মডেল প্রশিক্ষণের পদ্ধতিকে প্রভাবিত করতে পারে। কল্পনা করুন যে আপনি এমন একটি ব্যবসায় কাজ করছেন যেখানে ডেটা সায়েন্স দল একটি মডেল প্রশিক্ষণ দিয়েছে যা তারা চায় আপনি একটি অ্যাপে ব্যবহার করুন। +মেশিন লার্নিং মডেল ব্যবহার করার জন্য ওয়েব অ্যাপ তৈরি করার বিভিন্ন উপায় রয়েছে। আপনার ওয়েব আর্কিটেকচার আপনার মডেল প্রশিক্ষণের পদ্ধতিকে প্রভাবিত করতে পারে। কল্পনা করুন যে আপনি একটি ব্যবসায় কাজ করছেন যেখানে ডেটা সায়েন্স দল একটি মডেল প্রশিক্ষণ দিয়েছে যা তারা চায় আপনি একটি অ্যাপে ব্যবহার করুন। ### বিবেচ্য বিষয় -অনেক প্রশ্ন রয়েছে যা আপনাকে করতে হবে: +অনেক প্রশ্ন আপনাকে করতে হবে: -- **এটি কি ওয়েব অ্যাপ নাকি মোবাইল অ্যাপ?** যদি আপনি একটি মোবাইল অ্যাপ তৈরি করছেন বা IoT প্রসঙ্গে মডেলটি ব্যবহার করতে চান, আপনি [TensorFlow Lite](https://www.tensorflow.org/lite/) ব্যবহার করতে পারেন এবং মডেলটি একটি Android বা iOS অ্যাপে ব্যবহার করতে পারেন। -- **মডেলটি কোথায় থাকবে?** ক্লাউডে নাকি লোকাল মেশিনে? +- **এটি কি একটি ওয়েব অ্যাপ নাকি একটি মোবাইল অ্যাপ?** যদি আপনি একটি মোবাইল অ্যাপ তৈরি করছেন বা IoT প্রসঙ্গে মডেলটি ব্যবহার করতে চান, আপনি [TensorFlow Lite](https://www.tensorflow.org/lite/) ব্যবহার করতে পারেন এবং মডেলটি একটি Android বা iOS অ্যাপে ব্যবহার করতে পারেন। +- **মডেলটি কোথায় থাকবে?** ক্লাউডে নাকি লোকালিতে? - **অফলাইন সাপোর্ট।** অ্যাপটি কি অফলাইনে কাজ করতে হবে? - **মডেল প্রশিক্ষণের জন্য কোন প্রযুক্তি ব্যবহার করা হয়েছে?** নির্বাচিত প্রযুক্তি আপনার ব্যবহৃত টুলিংকে প্রভাবিত করতে পারে। - - **TensorFlow ব্যবহার করা।** উদাহরণস্বরূপ, যদি আপনি TensorFlow ব্যবহার করে একটি মডেল প্রশিক্ষণ দেন, সেই ইকোসিস্টেম [TensorFlow.js](https://www.tensorflow.org/js/) ব্যবহার করে একটি ওয়েব অ্যাপে মডেলটি রূপান্তর করার ক্ষমতা প্রদান করে। + - **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 ব্যবহার করা।** যদি আপনি [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) সিস্টেম ব্যবহার করে একটি মডেল প্রশিক্ষণ দেন, এই ধরনের সফটওয়্যার অনেক প্ল্যাটফর্মের জন্য মডেল রপ্তানি করার উপায় প্রদান করে, যার মধ্যে রয়েছে ক্লাউডে একটি কাস্টম API তৈরি করা যা আপনার অনলাইন অ্যাপ্লিকেশন দ্বারা প্রশ্ন করা যেতে পারে। + - **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) সিস্টেম ব্যবহার করে একটি মডেল প্রশিক্ষণ দেন, এই ধরনের সফটওয়্যার অনেক প্ল্যাটফর্মের জন্য মডেল রপ্তানি করার উপায় প্রদান করে, যার মধ্যে রয়েছে একটি কাস্টম API তৈরি করা যা আপনার অনলাইন অ্যাপ্লিকেশন দ্বারা ক্লাউডে প্রশ্ন করা যেতে পারে। -আপনার কাছে একটি সম্পূর্ণ Flask ওয়েব অ্যাপ তৈরি করার সুযোগও রয়েছে যা নিজেই একটি ওয়েব ব্রাউজারে মডেল প্রশিক্ষণ দিতে সক্ষম হবে। এটি TensorFlow.js ব্যবহার করে একটি জাভাস্ক্রিপ্ট প্রসঙ্গে করা যেতে পারে। +আপনার কাছে একটি সম্পূর্ণ Flask ওয়েব অ্যাপ তৈরি করার সুযোগও রয়েছে যা একটি ওয়েব ব্রাউজারে নিজেই মডেলটি প্রশিক্ষণ দিতে সক্ষম হবে। এটি TensorFlow.js ব্যবহার করে একটি জাভাস্ক্রিপ্ট প্রসঙ্গে করা যেতে পারে। -আমাদের উদ্দেশ্যে, যেহেতু আমরা Python-ভিত্তিক নোটবুক নিয়ে কাজ করছি, আসুন সেই পদক্ষেপগুলি অন্বেষণ করি যা আপনাকে একটি প্রশিক্ষিত মডেলকে এমন একটি ফরম্যাটে রপ্তানি করতে হবে যা একটি Python-নির্মিত ওয়েব অ্যাপ দ্বারা পড়া যায়। +আমাদের উদ্দেশ্যে, যেহেতু আমরা Python-ভিত্তিক নোটবুক নিয়ে কাজ করছি, আসুন আমরা সেই পদক্ষেপগুলি অন্বেষণ করি যা আপনাকে একটি প্রশিক্ষিত মডেলকে এমন একটি ফরম্যাটে রপ্তানি করতে হবে যা একটি Python-নির্মিত ওয়েব অ্যাপ দ্বারা পড়া যায়। ## টুল -এই কাজের জন্য আপনার দুটি টুল দরকার: Flask এবং Pickle, যা উভয়ই 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) দেখুন। +✅ [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 স্বাভাবিকভাবে নিরাপদ নয়, তাই যদি আপনাকে একটি ফাইল 'আন-পিকল' করতে বলা হয় তবে সতর্ক থাকুন। একটি পিকল করা ফাইলের `.pkl` সাফিক্স থাকে। +✅ [Pickle](https://docs.python.org/3/library/pickle.html) কী? Pickle 🥒 একটি Python মডিউল যা একটি Python অবজেক্ট স্ট্রাকচারকে সিরিয়ালাইজ এবং ডি-সিরিয়ালাইজ করে। যখন আপনি একটি মডেল 'পিকল' করেন, আপনি এর স্ট্রাকচারকে সিরিয়ালাইজ বা ফ্ল্যাটেন করেন ওয়েবে ব্যবহারের জন্য। সতর্ক থাকুন: Pickle স্বাভাবিকভাবে নিরাপদ নয়, তাই যদি আপনাকে একটি ফাইল 'আন-পিকল' করতে বলা হয় তবে সতর্ক থাকুন। একটি পিকল করা ফাইলের `.pkl` সাফিক্স থাকে। ## অনুশীলন - আপনার ডেটা পরিষ্কার করুন -এই পাঠে আপনি ৮০,০০০ UFO দর্শনের ডেটা ব্যবহার করবেন, যা [NUFORC](https://nuforc.org) (The National UFO Reporting Center) দ্বারা সংগ্রহ করা হয়েছে। এই ডেটায় UFO দর্শনের কিছু আকর্ষণীয় বর্ণনা রয়েছে, যেমন: +এই পাঠে আপনি 80,000 UFO দর্শনের ডেটা ব্যবহার করবেন, যা [NUFORC](https://nuforc.org) (The National UFO Reporting Center) দ্বারা সংগ্রহ করা হয়েছে। এই ডেটায় UFO দর্শনের কিছু আকর্ষণীয় বর্ণনা রয়েছে, যেমন: - **দীর্ঘ উদাহরণ বর্ণনা।** "একটি আলো রশ্মি থেকে একজন মানুষ বেরিয়ে আসে যা রাতে একটি ঘাসের মাঠে পড়ে এবং তিনি Texas Instruments পার্কিং লটের দিকে দৌড়ান।" - **সংক্ষিপ্ত উদাহরণ বর্ণনা।** "আলো আমাদের তাড়া করেছিল।" [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) স্প্রেডশিটে `city`, `state` এবং `country` যেখানে দর্শন ঘটেছে, বস্তুটির `shape` এবং এর `latitude` এবং `longitude` সম্পর্কে কলাম রয়েছে। -এই পাঠে অন্তর্ভুক্ত খালি [notebook](notebook.ipynb)-এ: +এই পাঠে অন্তর্ভুক্ত খালি [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb)-এ: 1. আগের পাঠে যেমন করেছিলেন, `pandas`, `matplotlib`, এবং `numpy` আমদানি করুন এবং ufos স্প্রেডশিট আমদানি করুন। আপনি একটি নমুনা ডেটাসেট দেখতে পারেন: @@ -71,7 +71,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.head() ``` -1. ufos ডেটাকে নতুন শিরোনাম সহ একটি ছোট ডেটাফ্রেমে রূপান্তর করুন। `Country` ফিল্ডে ইউনিক মানগুলি পরীক্ষা করুন। +1. ufos ডেটাকে নতুন শিরোনাম সহ একটি ছোট ডেটাফ্রেমে রূপান্তর করুন। `Country` ফিল্ডে অনন্য মানগুলি পরীক্ষা করুন। ```python ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) @@ -79,7 +79,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.Country.unique() ``` -1. এখন, আপনি প্রয়োজনীয় ডেটার পরিমাণ কমাতে পারেন null মানগুলি বাদ দিয়ে এবং শুধুমাত্র ১-৬০ সেকেন্ডের মধ্যে দর্শনগুলি আমদানি করে: +1. এখন, আপনি প্রয়োজনীয় ডেটার পরিমাণ কমাতে পারেন null মানগুলি বাদ দিয়ে এবং শুধুমাত্র 1-60 সেকেন্ডের মধ্যে দর্শনগুলি আমদানি করে: ```python ufos.dropna(inplace=True) @@ -116,7 +116,7 @@ CO_OP_TRANSLATOR_METADATA: এখন আপনি ডেটাকে প্রশিক্ষণ এবং পরীক্ষার গ্রুপে ভাগ করে মডেল প্রশিক্ষণের জন্য প্রস্তুত হতে পারেন। -1. তিনটি বৈশিষ্ট্য নির্বাচন করুন যা আপনি প্রশিক্ষণ দিতে চান আপনার X ভেক্টর হিসাবে, এবং y ভেক্টর হবে `Country`। আপনি `Seconds`, `Latitude` এবং `Longitude` ইনপুট করতে চান এবং একটি country id ফেরত পেতে চান। +1. আপনার X ভেক্টর হিসাবে প্রশিক্ষণ দেওয়ার জন্য তিনটি বৈশিষ্ট্য নির্বাচন করুন, এবং y ভেক্টর হবে `Country`। আপনি `Seconds`, `Latitude` এবং `Longitude` ইনপুট করতে চান এবং একটি country id ফেরত পেতে চান। ```python from sklearn.model_selection import train_test_split @@ -143,13 +143,13 @@ CO_OP_TRANSLATOR_METADATA: print('Accuracy: ', accuracy_score(y_test, predictions)) ``` -সঠিকতা খারাপ নয় **(প্রায় ৯৫%)**, যা আশ্চর্যজনক নয়, কারণ `Country` এবং `Latitude/Longitude` সম্পর্কিত। +সঠিকতা খারাপ নয় **(প্রায় 95%)**, যা আশ্চর্যজনক নয়, কারণ `Country` এবং `Latitude/Longitude` সম্পর্কিত। -আপনার তৈরি মডেলটি খুব বিপ্লবী নয় কারণ আপনি `Latitude` এবং `Longitude` থেকে একটি `Country` অনুমান করতে সক্ষম হওয়া উচিত, তবে এটি একটি ভাল অনুশীলন কাঁচা ডেটা থেকে প্রশিক্ষণ দেওয়ার চেষ্টা করার জন্য যা আপনি পরিষ্কার করেছেন, রপ্তানি করেছেন এবং তারপর এই মডেলটি একটি ওয়েব অ্যাপে ব্যবহার করেছেন। +আপনার তৈরি মডেলটি খুব বিপ্লবী নয় কারণ আপনি `Latitude` এবং `Longitude` থেকে একটি `Country` অনুমান করতে সক্ষম হওয়া উচিত, তবে এটি একটি ভাল অনুশীলন যা আপনাকে পরিষ্কার করা কাঁচা ডেটা থেকে প্রশিক্ষণ দেওয়া, রপ্তানি করা এবং তারপর এই মডেলটি একটি ওয়েব অ্যাপে ব্যবহার করার চেষ্টা করতে দেয়। ## অনুশীলন - আপনার মডেল 'পিকল' করুন -এখন, আপনার মডেলটি _পিকল_ করার সময়! আপনি এটি কয়েকটি কোড লাইনে করতে পারেন। একবার এটি _পিকল_ হয়ে গেলে, আপনার পিকল করা মডেলটি লোড করুন এবং সেকেন্ড, latitude এবং longitude এর মান সহ একটি নমুনা ডেটা অ্যারের বিরুদ্ধে এটি পরীক্ষা করুন। +এখন, আপনার মডেলটি _পিকল_ করার সময়! আপনি এটি কয়েকটি কোড লাইনে করতে পারেন। একবার এটি _পিকল_ হয়ে গেলে, আপনার পিকল করা মডেলটি লোড করুন এবং সেকেন্ড, latitude এবং longitude এর মান সহ একটি নমুনা ডেটা অ্যারের বিরুদ্ধে এটি পরীক্ষা করুন, ```python import pickle @@ -164,9 +164,9 @@ print(model.predict([[50,44,-12]])) ## অনুশীলন - একটি Flask অ্যাপ তৈরি করুন -এখন আপনি একটি Flask অ্যাপ তৈরি করতে পারেন যা আপনার মডেলকে কল করবে এবং অনুরূপ ফলাফল ফেরত দেবে, তবে আরও চিত্তাকর্ষকভাবে। +এখন আপনি একটি Flask অ্যাপ তৈরি করতে পারেন যা আপনার মডেলকে কল করে এবং অনুরূপ ফলাফল ফেরত দেয়, তবে আরও চিত্তাকর্ষকভাবে। -1. **web-app** নামে একটি ফোল্ডার তৈরি করুন _notebook.ipynb_ ফাইলের পাশে যেখানে আপনার _ufo-model.pkl_ ফাইল রয়েছে। +1. _notebook.ipynb_ ফাইলের পাশে যেখানে আপনার _ufo-model.pkl_ ফাইল রয়েছে, একটি **web-app** নামক ফোল্ডার তৈরি করুন। 1. সেই ফোল্ডারে আরও তিনটি ফোল্ডার তৈরি করুন: **static**, যার ভিতরে একটি **css** ফোল্ডার থাকবে, এবং **templates**। এখন আপনার নিম্নলিখিত ফাইল এবং ডিরেক্টরি থাকা উচিত: @@ -181,7 +181,7 @@ print(model.predict([[50,44,-12]])) ✅ সমাধান ফোল্ডারটি সম্পূর্ণ অ্যাপের একটি দৃশ্যের জন্য দেখুন -1. প্রথম ফাইলটি তৈরি করুন _web-app_ ফোল্ডারে, এটি **requirements.txt**। একটি JavaScript অ্যাপের _package.json_-এর মতো, এই ফাইলটি অ্যাপের প্রয়োজনীয় ডিপেন্ডেন্সিগুলি তালিকাভুক্ত করে। **requirements.txt**-এ নিম্নলিখিত লাইনগুলি যোগ করুন: +1. _web-app_ ফোল্ডারে তৈরি করার প্রথম ফাইলটি হল **requirements.txt** ফাইল। একটি জাভাস্ক্রিপ্ট অ্যাপে _package.json_-এর মতো, এই ফাইলটি অ্যাপের প্রয়োজনীয় নির্ভরতা তালিকাভুক্ত করে। **requirements.txt**-এ লাইনগুলি যোগ করুন: ```text scikit-learn @@ -190,7 +190,7 @@ print(model.predict([[50,44,-12]])) flask ``` -1. এখন, এই ফাইলটি চালান _web-app_ এ নেভিগেট করে: +1. এখন, _web-app_ এ নেভিগেট করে এই ফাইলটি চালান: ```bash cd web-app @@ -204,9 +204,9 @@ print(model.predict([[50,44,-12]])) 1. এখন, আপনি অ্যাপটি শেষ করতে আরও তিনটি ফাইল তৈরি করতে প্রস্তুত: - 1. **app.py** তৈরি করুন রুটে। - 2. **index.html** তৈরি করুন _templates_ ডিরেক্টরিতে। - 3. **styles.css** তৈরি করুন _static/css_ ডিরেক্টরিতে। + 1. **app.py** রুটে তৈরি করুন। + 2. _templates_ ডিরেক্টরিতে **index.html** তৈরি করুন। + 3. _static/css_ ডিরেক্টরিতে **styles.css** তৈরি করুন। 1. _styles.css_ ফাইলটি কয়েকটি স্টাইল দিয়ে তৈরি করুন: @@ -277,9 +277,9 @@ print(model.predict([[50,44,-12]])) ``` - এই ফাইলের টেমপ্লেটিংটি দেখুন। লক্ষ্য করুন যে এখানে 'mustache' সিনট্যাক্স ব্যবহার করা হয়েছে ভেরিয়েবলগুলির জন্য যা অ্যাপ দ্বারা সরবরাহ করা হবে, যেমন prediction টেক্সট: `{{}}`। এখানে একটি ফর্মও রয়েছে যা `/predict` রুটে একটি prediction পোস্ট করে। + এই ফাইলের টেমপ্লেটিংটি দেখুন। লক্ষ্য করুন যে অ্যাপ দ্বারা প্রদত্ত ভেরিয়েবলগুলির চারপাশে 'mustache' সিনট্যাক্স রয়েছে, যেমন prediction টেক্সট: `{{}}`। এখানে একটি ফর্মও রয়েছে যা `/predict` রুটে একটি prediction পোস্ট করে। - অবশেষে, আপনি Python ফাইলটি তৈরি করতে প্রস্তুত যা মডেল ব্যবহার এবং prediction প্রদর্শনের জন্য অ্যাপটি চালাবে: + অবশেষে, আপনি Python ফাইলটি তৈরি করতে প্রস্তুত যা মডেলটি ব্যবহার এবং prediction প্রদর্শনের জন্য চালিত করে: 1. `app.py`-এ যোগ করুন: @@ -320,34 +320,34 @@ print(model.predict([[50,44,-12]])) > 💡 টিপ: যখন আপনি Flask ব্যবহার করে ওয়েব অ্যাপ চালানোর সময় [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) যোগ করেন, তখন আপনার অ্যাপ্লিকেশনে করা যেকোনো পরিবর্তন অবিলম্বে প্রতিফলিত হবে সার্ভার পুনরায় চালু করার প্রয়োজন ছাড়াই। সতর্ক থাকুন! প্রোডাকশন অ্যাপে এই মোডটি সক্রিয় করবেন না। -যদি আপনি `python app.py` বা `python3 app.py` চালান - আপনার ওয়েব সার্ভার স্থানীয়ভাবে চালু হবে এবং আপনি একটি ছোট ফর্ম পূরণ করতে পারবেন UFO দর্শনের অবস্থান সম্পর্কে আপনার প্রশ্নের উত্তর পেতে! +যদি আপনি `python app.py` বা `python3 app.py` চালান - আপনার ওয়েব সার্ভার স্থানীয়ভাবে শুরু হয়, এবং আপনি একটি ছোট ফর্ম পূরণ করতে পারেন UFO দর্শন সম্পর্কে আপনার জ্বলন্ত প্রশ্নের উত্তর পেতে! এর আগে, `app.py`-এর অংশগুলি দেখুন: -1. প্রথমে, ডিপেন্ডেন্সিগুলি লোড হয় এবং অ্যাপটি শুরু হয়। +1. প্রথমে, নির্ভরতাগুলি লোড হয় এবং অ্যাপটি শুরু হয়। 1. তারপর, মডেলটি আমদানি করা হয়। 1. তারপর, হোম রুটে index.html রেন্ডার করা হয়। `/predict` রুটে, ফর্ম পোস্ট করার সময় কয়েকটি জিনিস ঘটে: -1. ফর্ম ভেরিয়েবলগুলি সংগ্রহ করা হয় এবং একটি numpy অ্যারেতে রূপান্তরিত হয়। তারপর সেগুলি মডেলে পাঠানো হয় এবং একটি prediction ফেরত দেওয়া হয়। -2. প্রদর্শিত দেশগুলি তাদের পূর্বাভাসিত country code থেকে পাঠযোগ্য টেক্সটে পুনরায় রেন্ডার করা হয় এবং সেই মানটি index.html-এ টেমপ্লেটে রেন্ডার করার জন্য ফেরত পাঠানো হয়। +1. ফর্ম ভেরিয়েবলগুলি সংগ্রহ করা হয় এবং একটি numpy অ্যারে-তে রূপান্তরিত হয়। তারপর সেগুলি মডেলে পাঠানো হয় এবং একটি prediction ফেরত দেওয়া হয়। +2. আমরা প্রদর্শন করতে চাই এমন দেশগুলি তাদের পূর্বাভাসিত country code থেকে পাঠযোগ্য টেক্সটে পুনরায় রেন্ডার করা হয়, এবং সেই মানটি index.html-এ টেমপ্লেটে রেন্ডার করার জন্য ফেরত পাঠানো হয়। -Flask এবং একটি পিকল করা মডেল ব্যবহার করে একটি মডেল ব্যবহার করা তুলনামূলকভাবে সহজ। সবচেয়ে কঠিন বিষয়টি বুঝতে হবে যে মডেলে prediction পেতে কোন আকারের ডেটা পাঠানো উচিত। এটি সম্পূর্ণভাবে নির্ভর করে মডেলটি কীভাবে প্রশিক্ষণ দেওয়া হয়েছিল। এই মডেলটিতে prediction পেতে তিনটি ডেটা পয়েন্ট ইনপুট করতে হবে। +Flask এবং একটি পিকল করা মডেল ব্যবহার করে একটি মডেল ব্যবহার করা তুলনামূলকভাবে সহজ। সবচেয়ে কঠিন বিষয়টি হল ডেটার আকার বোঝা যা মডেলে পাঠানো উচিত একটি prediction পেতে। এটি সম্পূর্ণরূপে নির্ভর করে মডেলটি কীভাবে প্রশিক্ষণ দেওয়া হয়েছিল। এই মডেলটিতে একটি prediction পেতে তিনটি ডেটা পয়েন্ট ইনপুট করতে হবে। -একটি পেশাদার পরিবেশে, আপনি দেখতে পারেন যে মডেল প্রশিক্ষণকারী এবং যারা এটি ওয়েব বা মোবাইল অ্যাপে ব্যবহার করেন তাদের মধ্যে ভাল যোগাযোগ কতটা গুরুত্বপূর্ণ। আমাদের ক্ষেত্রে, এটি শুধুমাত্র একজন ব্যক্তি, আপনি! +একটি পেশাদার সেটিংয়ে, আপনি দেখতে পারেন যে মডেল প্রশিক্ষণকারী এবং যারা এটি একটি ওয়েব বা মোবাইল অ্যাপে ব্যবহার করেন তাদের মধ্যে ভাল যোগাযোগ কতটা গুরুত্বপূর্ণ। আমাদের ক্ষেত্রে, এটি শুধুমাত্র একজন ব্যক্তি, আপনি! --- ## 🚀 চ্যালেঞ্জ -নোটবুকে কাজ করার এবং Flask অ্যাপে মডেল আমদানি করার পরিবর্তে, আপনি Flask অ্যাপের মধ্যেই মডেলটি প্রশিক্ষণ দিতে পারেন! আপনার নোটবুকের Python কোডটি রূপান্তর করার চেষ্টা করুন, সম্ভবত আপনার ডেটা পরিষ্কার হওয়ার পরে, অ্যাপের মধ্যে একটি `train` রুটে মডেলটি প্রশিক্ষণ দিতে। এই পদ্ধতি অনুসরণ করার সুবিধা এবং অসুবিধাগুলি কী? +নোটবুকে কাজ করার এবং Flask অ্যাপে মডেল আমদানি করার পরিবর্তে, আপনি Flask অ্যাপের মধ্যেই মডেলটি প্রশিক্ষণ দিতে পারেন! আপনার নোটবুকে থাকা Python কোডটি রূপান্তর করার চেষ্টা করুন, সম্ভবত আপনার ডেটা পরিষ্কার হওয়ার পরে, অ্যাপের মধ্যে একটি `train` রুটে মডেলটি প্রশিক্ষণ দেওয়ার জন্য। এই পদ্ধতি অনুসরণ করার সুবিধা এবং অসুবিধাগুলি কী? -## [পাঠের পরবর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [পাঠের পরে কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা এবং স্ব-অধ্যয়ন -মেশিন লার্নিং মডেল ব্যবহার করার জন্য একটি ওয়েব অ্যাপ তৈরি করার অনেক উপায় রয়েছে। JavaScript বা Python ব্যবহার করে মেশিন লার্নিং লিভারেজ করার জন্য একটি ওয়েব অ্যাপ তৈরি করার উপায়গুলির একটি তালিকা তৈরি করুন। আর্কিটেকচার বিবেচনা করুন: মডেলটি কি অ্যাপের মধ্যে থাকা উচিত নাকি ক্লাউডে থাকা উচিত? যদি ক্লাউডে থাকে, তাহলে কীভাবে এটি অ্যাক্সেস করবেন? একটি প্রয়োগকৃত ML ওয়েব সমাধানের জন্য একটি আর্কিটেকচারাল মডেল আঁকুন। +মেশিন লার্নিং মডেল ব্যবহার করার জন্য একটি ওয়েব অ্যাপ তৈরি করার অনেক উপায় রয়েছে। আপনি জাভাস্ক্রিপ্ট বা Python ব্যবহার করে মেশিন লার্নিং লিভারেজ করার জন্য একটি ওয়েব অ্যাপ তৈরি করার উপায়গুলির একটি তালিকা তৈরি করুন। আর্কিটেকচার বিবেচনা করুন: মডেলটি কি অ্যাপে থাকা উচিত নাকি ক্লাউডে থাকা উচিত? যদি ক্লাউডে থাকে, আপনি কীভাবে এটি অ্যাক্সেস করবেন? একটি প্রয়োগকৃত ML ওয়েব সমাধানের জন্য একটি আর্কিটেকচারাল মডেল আঁকুন। ## অ্যাসাইনমেন্ট @@ -356,4 +356,4 @@ Flask এবং একটি পিকল করা মডেল ব্যবহ --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/4-Classification/1-Introduction/README.md b/translations/bn/4-Classification/1-Introduction/README.md index e95d822c5..540aacf6f 100644 --- a/translations/bn/4-Classification/1-Introduction/README.md +++ b/translations/bn/4-Classification/1-Introduction/README.md @@ -1,66 +1,66 @@ -# শ্রেণীবিভাগের পরিচিতি +# শ্রেণীবিভাজনের পরিচিতি -এই চারটি পাঠে, আপনি ক্লাসিক মেশিন লার্নিং-এর একটি মৌলিক দিক - _শ্রেণীবিভাগ_ অন্বেষণ করবেন। আমরা এশিয়া এবং ভারতের অসাধারণ রান্নার একটি ডেটাসেট ব্যবহার করে বিভিন্ন শ্রেণীবিভাগ অ্যালগরিদমের সাথে কাজ করব। আশা করি আপনি ক্ষুধার্ত! +এই চারটি পাঠে, আপনি ক্লাসিক মেশিন লার্নিং-এর একটি গুরুত্বপূর্ণ দিক - _শ্রেণীবিভাজন_ - সম্পর্কে জানবেন। আমরা এশিয়া এবং ভারতের অসাধারণ রান্নার একটি ডেটাসেট ব্যবহার করে বিভিন্ন শ্রেণীবিভাজন অ্যালগরিদম নিয়ে কাজ করব। আশা করি আপনি ক্ষুধার্ত! -![এক চিমটি!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.bn.png) +![এক চিমটি!](../../../../4-Classification/1-Introduction/images/pinch.png) > এই পাঠে প্যান-এশিয়ান রান্নার উদযাপন করুন! ছবি: [Jen Looper](https://twitter.com/jenlooper) -শ্রেণীবিভাগ [supervised learning](https://wikipedia.org/wiki/Supervised_learning)-এর একটি রূপ, যা রিগ্রেশন কৌশলের সাথে অনেক মিল রাখে। যদি মেশিন লার্নিং ডেটাসেট ব্যবহার করে মান বা নাম পূর্বাভাস দেওয়ার বিষয়ে হয়, তবে শ্রেণীবিভাগ সাধারণত দুটি গ্রুপে বিভক্ত হয়: _বাইনারি শ্রেণীবিভাগ_ এবং _মাল্টিক্লাস শ্রেণীবিভাগ_। +শ্রেণীবিভাজন [supervised learning](https://wikipedia.org/wiki/Supervised_learning)-এর একটি রূপ, যা রিগ্রেশন কৌশলগুলোর সাথে অনেক মিল রাখে। যদি মেশিন লার্নিং ডেটাসেট ব্যবহার করে মান বা নাম পূর্বাভাস দেওয়ার উপর ভিত্তি করে হয়, তাহলে শ্রেণীবিভাজন সাধারণত দুটি গ্রুপে বিভক্ত হয়: _বাইনারি শ্রেণীবিভাজন_ এবং _মাল্টিক্লাস শ্রেণীবিভাজন_। -[![শ্রেণীবিভাগের পরিচিতি](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "শ্রেণীবিভাগের পরিচিতি") +[![শ্রেণীবিভাজনের পরিচিতি](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "শ্রেণীবিভাজনের পরিচিতি") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: MIT-এর John Guttag শ্রেণীবিভাগের পরিচিতি দিচ্ছেন +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: MIT-এর John Guttag শ্রেণীবিভাজন পরিচিতি দিচ্ছেন মনে রাখুন: -- **লিনিয়ার রিগ্রেশন** আপনাকে ভেরিয়েবলের মধ্যে সম্পর্ক পূর্বাভাস দিতে এবং একটি নতুন ডেটাপয়েন্ট সেই লাইনের সাথে সম্পর্কিত কোথায় পড়বে তা সঠিকভাবে পূর্বাভাস দিতে সাহায্য করেছিল। উদাহরণস্বরূপ, আপনি পূর্বাভাস দিতে পারতেন _সেপ্টেম্বর বনাম ডিসেম্বর মাসে একটি কুমড়ার দাম কত হবে_। -- **লজিস্টিক রিগ্রেশন** আপনাকে "বাইনারি ক্যাটাগরি" আবিষ্কার করতে সাহায্য করেছিল: এই দামের পয়েন্টে, _এই কুমড়া কমলা রঙের নাকি কমলা নয়_? +- **লিনিয়ার রিগ্রেশন** আপনাকে ভেরিয়েবলগুলোর মধ্যে সম্পর্ক পূর্বাভাস দিতে এবং একটি নতুন ডেটাপয়েন্ট সেই লাইনের সাথে সম্পর্কিত কোথায় পড়বে তা সঠিকভাবে পূর্বাভাস দিতে সাহায্য করেছিল। উদাহরণস্বরূপ, আপনি পূর্বাভাস দিতে পারতেন _সেপ্টেম্বর বনাম ডিসেম্বর মাসে একটি কুমড়ার দাম কত হবে_। +- **লজিস্টিক রিগ্রেশন** আপনাকে "বাইনারি ক্যাটাগরি" আবিষ্কার করতে সাহায্য করেছিল: এই দাম পয়েন্টে, _এই কুমড়া কমলা রঙের হবে নাকি কমলা রঙের হবে না_? -শ্রেণীবিভাগ বিভিন্ন অ্যালগরিদম ব্যবহার করে একটি ডেটাপয়েন্টের লেবেল বা শ্রেণী নির্ধারণের অন্যান্য উপায় নির্ধারণ করে। আসুন এই রান্নার ডেটা নিয়ে কাজ করি এবং দেখি, উপাদানগুলোর একটি গ্রুপ পর্যবেক্ষণ করে, আমরা এর উৎসের রান্না নির্ধারণ করতে পারি কিনা। +শ্রেণীবিভাজন বিভিন্ন অ্যালগরিদম ব্যবহার করে ডেটাপয়েন্টের লেবেল বা শ্রেণী নির্ধারণের অন্যান্য উপায় নির্ধারণ করে। আসুন এই রান্নার ডেটা নিয়ে কাজ করি এবং দেখি, উপাদানগুলোর একটি গ্রুপ পর্যবেক্ষণ করে, আমরা এর উৎস রান্নার ধরন নির্ধারণ করতে পারি কিনা। -## [পাঠ-পূর্ব কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) +## [পাঠের পূর্ববর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) > ### [এই পাঠটি R-এ উপলব্ধ!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) ### পরিচিতি -শ্রেণীবিভাগ মেশিন লার্নিং গবেষক এবং ডেটা বিজ্ঞানীদের একটি মৌলিক কার্যকলাপ। একটি বাইনারি মানের মৌলিক শ্রেণীবিভাগ থেকে ("এই ইমেলটি স্প্যাম কিনা?"), জটিল ইমেজ শ্রেণীবিভাগ এবং কম্পিউটার ভিশন ব্যবহার করে সেগমেন্টেশন পর্যন্ত, ডেটাকে শ্রেণীতে সাজানো এবং এর উপর প্রশ্ন করা সবসময়ই উপকারী। +শ্রেণীবিভাজন মেশিন লার্নিং গবেষক এবং ডেটা বিজ্ঞানীর মৌলিক কার্যক্রমগুলোর একটি। একটি বাইনারি মানের মৌলিক শ্রেণীবিভাজন ("এই ইমেইলটি স্প্যাম কিনা?") থেকে শুরু করে কম্পিউটার ভিশন ব্যবহার করে জটিল ইমেজ শ্রেণীবিভাজন এবং সেগমেন্টেশন পর্যন্ত, ডেটাকে শ্রেণীতে সাজানো এবং এর উপর প্রশ্ন করা সবসময়ই কার্যকর। -বৈজ্ঞানিকভাবে প্রক্রিয়াটি ব্যাখ্যা করতে গেলে, আপনার শ্রেণীবিভাগ পদ্ধতি একটি প্রেডিক্টিভ মডেল তৈরি করে যা ইনপুট ভেরিয়েবলের সাথে আউটপুট ভেরিয়েবলের সম্পর্ক ম্যাপ করতে সক্ষম করে। +বিষয়টিকে আরও বৈজ্ঞানিকভাবে বললে, আপনার শ্রেণীবিভাজন পদ্ধতি একটি পূর্বাভাস মডেল তৈরি করে যা ইনপুট ভেরিয়েবল এবং আউটপুট ভেরিয়েবলের মধ্যে সম্পর্ক ম্যাপ করতে সক্ষম করে। -![বাইনারি বনাম মাল্টিক্লাস শ্রেণীবিভাগ](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.bn.png) +![বাইনারি বনাম মাল্টিক্লাস শ্রেণীবিভাজন](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) -> শ্রেণীবিভাগ অ্যালগরিদমের জন্য বাইনারি বনাম মাল্টিক্লাস সমস্যা। ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) +> শ্রেণীবিভাজন অ্যালগরিদমের জন্য বাইনারি বনাম মাল্টিক্লাস সমস্যা। ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) -আমাদের ডেটা পরিষ্কার করা, ভিজ্যুয়ালাইজ করা এবং মেশিন লার্নিং কাজের জন্য প্রস্তুত করার প্রক্রিয়া শুরু করার আগে, আসুন শিখি কীভাবে মেশিন লার্নিং ডেটা শ্রেণীবদ্ধ করতে ব্যবহার করা যায়। +আমাদের ডেটা পরিষ্কার করা, ভিজ্যুয়ালাইজ করা এবং আমাদের ML কাজের জন্য প্রস্তুত করার প্রক্রিয়া শুরু করার আগে, আসুন শিখি কীভাবে মেশিন লার্নিং বিভিন্ন উপায়ে ডেটা শ্রেণীবদ্ধ করতে ব্যবহার করা যেতে পারে। -[পরিসংখ্যান](https://wikipedia.org/wiki/Statistical_classification) থেকে উদ্ভূত, ক্লাসিক মেশিন লার্নিং ব্যবহার করে শ্রেণীবিভাগ বৈশিষ্ট্য ব্যবহার করে, যেমন `smoker`, `weight`, এবং `age` _কোনো রোগ হওয়ার সম্ভাবনা_ নির্ধারণ করতে। এটি একটি সুপারভাইজড লার্নিং কৌশল যা আপনি পূর্বে সম্পাদিত রিগ্রেশন অনুশীলনের অনুরূপ। আপনার ডেটা লেবেলযুক্ত এবং মেশিন লার্নিং অ্যালগরিদম সেই লেবেলগুলি ব্যবহার করে ডেটাসেটের শ্রেণী (বা 'ফিচার') শ্রেণীবদ্ধ এবং পূর্বাভাস দেয় এবং সেগুলিকে একটি গ্রুপ বা ফলাফলে বরাদ্দ করে। +[statistics](https://wikipedia.org/wiki/Statistical_classification) থেকে উদ্ভূত, ক্লাসিক মেশিন লার্নিং ব্যবহার করে শ্রেণীবিভাজন `smoker`, `weight`, এবং `age` এর মতো বৈশিষ্ট্য ব্যবহার করে _X রোগের বিকাশের সম্ভাবনা_ নির্ধারণ করে। এটি একটি supervised learning কৌশল যা আপনি আগে করা রিগ্রেশন অনুশীলনের সাথে মিল রাখে। আপনার ডেটা লেবেলযুক্ত এবং ML অ্যালগরিদমগুলো সেই লেবেলগুলো ব্যবহার করে ডেটাসেটের শ্রেণী (বা 'ফিচার') পূর্বাভাস দেয় এবং সেগুলোকে একটি গ্রুপ বা ফলাফলে বরাদ্দ করে। -✅ একটি রান্নার ডেটাসেট কল্পনা করার জন্য এক মুহূর্ত সময় নিন। একটি মাল্টিক্লাস মডেল কী উত্তর দিতে পারবে? একটি বাইনারি মডেল কী উত্তর দিতে পারবে? যদি আপনি নির্ধারণ করতে চান যে একটি নির্দিষ্ট রান্নায় মেথি ব্যবহার করার সম্ভাবনা আছে কিনা? যদি আপনি দেখতে চান যে, একটি মুদির ব্যাগে তারকা মৌরি, আর্টিচোক, ফুলকপি এবং হর্সর‍্যাডিশ থাকলে, আপনি একটি সাধারণ ভারতীয় খাবার তৈরি করতে পারবেন কিনা? +✅ একটি রান্নার ডেটাসেট কল্পনা করুন। একটি মাল্টিক্লাস মডেল কী উত্তর দিতে পারবে? একটি বাইনারি মডেল কী উত্তর দিতে পারবে? যদি আপনি নির্ধারণ করতে চান যে একটি নির্দিষ্ট রান্না মেথি ব্যবহার করবে কিনা? যদি আপনি দেখতে চান যে, একটি মিস্ট্রি ব্যাগে তারকা মৌরি, আর্টিচোক, ফুলকপি এবং হর্সর‌্যাডিশ থাকলে, আপনি একটি সাধারণ ভারতীয় খাবার তৈরি করতে পারবেন কিনা? -[![পাগল রহস্যের ঝুড়ি](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "পাগল রহস্যের ঝুড়ি") +[![পাগল মিস্ট্রি ব্যাগ](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "পাগল মিস্ট্রি ব্যাগ") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য। 'Chopped' শো-এর পুরো ভিত্তি হলো 'মিস্ট্রি বাস্কেট', যেখানে শেফদের একটি এলোমেলো উপাদান দিয়ে একটি খাবার তৈরি করতে হয়। নিশ্চিতভাবেই একটি মেশিন লার্নিং মডেল সাহায্য করত! +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য। 'Chopped' শো-এর পুরো ধারণা হলো 'মিস্ট্রি ব্যাগ', যেখানে শেফদের এলোমেলো উপাদান দিয়ে একটি খাবার তৈরি করতে হয়। নিশ্চিতভাবেই একটি ML মডেল সাহায্য করত! -## হ্যালো 'ক্লাসিফায়ার' +## হ্যালো 'classifier' -আমরা এই রান্নার ডেটাসেট থেকে যে প্রশ্নটি করতে চাই তা আসলে একটি **মাল্টিক্লাস প্রশ্ন**, কারণ আমাদের কাজ করার জন্য বেশ কয়েকটি সম্ভাব্য জাতীয় রান্না রয়েছে। একটি উপাদানের ব্যাচ দেওয়া হলে, এই অনেক শ্রেণীর মধ্যে কোনটিতে ডেটা ফিট করবে? +আমরা এই রান্নার ডেটাসেট থেকে যে প্রশ্নটি করতে চাই তা আসলে একটি **মাল্টিক্লাস প্রশ্ন**, কারণ আমাদের কাজ করার জন্য বেশ কয়েকটি সম্ভাব্য জাতীয় রান্না রয়েছে। উপাদানগুলোর একটি ব্যাচ দেওয়া হলে, এই অনেক শ্রেণীর মধ্যে কোনটিতে ডেটা ফিট করবে? -Scikit-learn বিভিন্ন ধরনের অ্যালগরিদম অফার করে যা আপনি ডেটা শ্রেণীবদ্ধ করতে ব্যবহার করতে পারেন, এটি নির্ভর করে আপনি কী ধরনের সমস্যা সমাধান করতে চান তার উপর। পরবর্তী দুটি পাঠে, আপনি এই অ্যালগরিদমগুলোর কয়েকটি সম্পর্কে শিখবেন। +Scikit-learn বিভিন্ন অ্যালগরিদম অফার করে যা আপনি ডেটা শ্রেণীবদ্ধ করতে ব্যবহার করতে পারেন, আপনি যে ধরনের সমস্যা সমাধান করতে চান তার উপর নির্ভর করে। পরবর্তী দুটি পাঠে, আপনি এই অ্যালগরিদমগুলো সম্পর্কে শিখবেন। ## অনুশীলন - আপনার ডেটা পরিষ্কার এবং ভারসাম্যপূর্ণ করুন -প্রকল্পটি শুরু করার আগে প্রথম কাজটি হলো আপনার ডেটা পরিষ্কার এবং **ভারসাম্যপূর্ণ** করা যাতে আরও ভালো ফলাফল পাওয়া যায়। এই ফোল্ডারের মূল অংশে থাকা _notebook.ipynb_ ফাইল দিয়ে শুরু করুন। +প্রকল্পটি শুরু করার আগে প্রথম কাজটি হলো আপনার ডেটা পরিষ্কার এবং **ভারসাম্যপূর্ণ** করা যাতে আরও ভালো ফলাফল পাওয়া যায়। এই ফোল্ডারের রুটে থাকা _notebook.ipynb_ ফাইল দিয়ে শুরু করুন। প্রথমে ইনস্টল করুন [imblearn](https://imbalanced-learn.org/stable/)। এটি একটি Scikit-learn প্যাকেজ যা আপনাকে ডেটা আরও ভালোভাবে ভারসাম্যপূর্ণ করতে সাহায্য করবে (আপনি এই কাজ সম্পর্কে একটু পরে আরও শিখবেন)। @@ -70,7 +70,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ pip install imblearn ``` -1. আপনার ডেটা আমদানি এবং ভিজ্যুয়ালাইজ করার জন্য প্রয়োজনীয় প্যাকেজ আমদানি করুন, এছাড়াও `imblearn` থেকে `SMOTE` আমদানি করুন। +1. আপনার ডেটা আমদানি এবং ভিজ্যুয়ালাইজ করার জন্য প্রয়োজনীয় প্যাকেজগুলো আমদানি করুন, এছাড়াও `imblearn` থেকে `SMOTE` আমদানি করুন। ```python import pandas as pd @@ -88,9 +88,9 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ df = pd.read_csv('../data/cuisines.csv') ``` - `read_csv()` ব্যবহার করে _cusines.csv_ ফাইলের বিষয়বস্তু পড়ুন এবং এটি `df` ভেরিয়েবলে রাখুন। + `read_csv()` ব্যবহার করে _cusines.csv_ ফাইলের বিষয়বস্তু পড়া হবে এবং এটি `df` ভেরিয়েবলে রাখা হবে। -1. ডেটার আকার পরীক্ষা করুন: +1. ডেটার আকৃতি পরীক্ষা করুন: ```python df.head() @@ -108,7 +108,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ``` -1. `info()` কল করে এই ডেটা সম্পর্কে তথ্য পান: +1. এই ডেটা সম্পর্কে তথ্য পেতে `info()` কল করুন: ```python df.info() @@ -126,19 +126,19 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ ## অনুশীলন - রান্না সম্পর্কে শেখা -এখন কাজ আরও আকর্ষণীয় হয়ে উঠছে। আসুন ডেটার বণ্টন আবিষ্কার করি, রান্না অনুযায়ী। +এখন কাজটি আরও আকর্ষণীয় হতে শুরু করেছে। আসুন ডেটার বিতরণ আবিষ্কার করি, রান্না অনুযায়ী -1. `barh()` কল করে ডেটা বার আকারে প্লট করুন: +1. `barh()` কল করে ডেটাকে বার আকারে প্লট করুন: ```python df.cuisine.value_counts().plot.barh() ``` - ![রান্নার ডেটা বণ্টন](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.bn.png) + ![রান্নার ডেটা বিতরণ](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) - রান্নার সংখ্যা সীমিত, কিন্তু ডেটার বণ্টন অসম। আপনি এটি ঠিক করতে পারেন! তবে তার আগে আরও একটু অন্বেষণ করুন। + রান্নার সংখ্যা সীমিত, কিন্তু ডেটার বিতরণ অসম। আপনি এটি ঠিক করতে পারেন! এর আগে, আরও একটু অনুসন্ধান করুন। -1. রান্না অনুযায়ী কত ডেটা উপলব্ধ তা খুঁজে বের করুন এবং এটি প্রিন্ট করুন: +1. রান্না অনুযায়ী কতটা ডেটা উপলব্ধ তা খুঁজে বের করুন এবং এটি প্রিন্ট করুন: ```python thai_df = df[(df.cuisine == "thai")] @@ -154,7 +154,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ print(f'korean df: {korean_df.shape}') ``` - আউটপুট এরকম দেখাবে: + আউটপুট এরকম দেখায়: ```output thai df: (289, 385) @@ -164,11 +164,11 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ korean df: (799, 385) ``` -## উপাদান আবিষ্কার +## উপাদান আবিষ্কার করা -এখন আপনি ডেটার গভীরে যেতে পারেন এবং জানতে পারেন প্রতিটি রান্নার জন্য সাধারণ উপাদান কী। বিভ্রান্তি তৈরি করে এমন পুনরাবৃত্ত উপাদানগুলো পরিষ্কার করুন, তাই আসুন এই সমস্যাটি সম্পর্কে শিখি। +এখন আপনি ডেটার গভীরে যেতে পারেন এবং জানতে পারেন প্রতিটি রান্নার জন্য সাধারণ উপাদানগুলো কী। আপনি পুনরাবৃত্ত ডেটা পরিষ্কার করতে পারেন যা রান্নার মধ্যে বিভ্রান্তি তৈরি করে, তাই আসুন এই সমস্যাটি সম্পর্কে শিখি। -1. একটি ফাংশন `create_ingredient()` তৈরি করুন যা একটি উপাদান ডেটাফ্রেম তৈরি করবে। এই ফাংশনটি একটি অপ্রয়োজনীয় কলাম বাদ দিয়ে উপাদানগুলো তাদের গণনা অনুযায়ী সাজাবে: +1. একটি ফাংশন `create_ingredient()` তৈরি করুন যা একটি উপাদান ডেটাফ্রেম তৈরি করবে। এই ফাংশনটি একটি অপ্রয়োজনীয় কলাম বাদ দিয়ে শুরু করবে এবং উপাদানগুলো তাদের সংখ্যার ভিত্তিতে সাজাবে: ```python def create_ingredient_df(df): @@ -188,7 +188,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ thai_ingredient_df.head(10).plot.barh() ``` - ![থাই](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.bn.png) + ![থাই](../../../../4-Classification/1-Introduction/images/thai.png) 1. জাপানি ডেটার জন্য একই কাজ করুন: @@ -197,16 +197,16 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ japanese_ingredient_df.head(10).plot.barh() ``` - ![জাপানি](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.bn.png) + ![জাপানি](../../../../4-Classification/1-Introduction/images/japanese.png) -1. এবার চীনা উপাদানগুলো প্লট করুন: +1. এখন চীনা উপাদানগুলো: ```python chinese_ingredient_df = create_ingredient_df(chinese_df) chinese_ingredient_df.head(10).plot.barh() ``` - ![চীনা](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.bn.png) + ![চীনা](../../../../4-Classification/1-Introduction/images/chinese.png) 1. ভারতীয় উপাদানগুলো প্লট করুন: @@ -215,20 +215,20 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ indian_ingredient_df.head(10).plot.barh() ``` - ![ভারতীয়](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.bn.png) + ![ভারতীয়](../../../../4-Classification/1-Introduction/images/indian.png) -1. অবশেষে, কোরিয়ান উপাদানগুলো প্লট করুন: +1. শেষ পর্যন্ত, কোরিয়ান উপাদানগুলো প্লট করুন: ```python korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() ``` - ![কোরিয়ান](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.bn.png) + ![কোরিয়ান](../../../../4-Classification/1-Introduction/images/korean.png) -1. এখন, `drop()` কল করে বিভিন্ন রান্নার মধ্যে বিভ্রান্তি তৈরি করে এমন সবচেয়ে সাধারণ উপাদানগুলো বাদ দিন: +1. এখন, `drop()` কল করে বিভিন্ন রান্নার মধ্যে বিভ্রান্তি তৈরি করে এমন সাধারণ উপাদানগুলো বাদ দিন: - সবাই ভাত, রসুন এবং আদা পছন্দ করে! + সবাই চাল, রসুন এবং আদা পছন্দ করে! ```python feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) @@ -238,7 +238,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ ## ডেটাসেট ভারসাম্যপূর্ণ করুন -এখন যেহেতু আপনি ডেটা পরিষ্কার করেছেন, [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" ব্যবহার করে এটি ভারসাম্যপূর্ণ করুন। +এখন আপনি ডেটা পরিষ্কার করেছেন, [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - ব্যবহার করে এটি ভারসাম্যপূর্ণ করুন। 1. `fit_resample()` কল করুন, এই কৌশলটি ইন্টারপোলেশনের মাধ্যমে নতুন নমুনা তৈরি করে। @@ -247,7 +247,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) ``` - ডেটা ভারসাম্যপূর্ণ করার মাধ্যমে, আপনি এটি শ্রেণীবিভাগ করার সময় আরও ভালো ফলাফল পাবেন। একটি বাইনারি শ্রেণীবিভাগের কথা ভাবুন। যদি আপনার বেশিরভাগ ডেটা একটি শ্রেণীর হয়, একটি মেশিন লার্নিং মডেল সেই শ্রেণীটি আরও ঘন ঘন পূর্বাভাস দেবে, শুধুমাত্র কারণ এর জন্য আরও ডেটা রয়েছে। ডেটা ভারসাম্যপূর্ণ করা যেকোনো পক্ষপাত দূর করতে সাহায্য করে। + আপনার ডেটা ভারসাম্যপূর্ণ করে, আপনি এটি শ্রেণীবিভাজন করার সময় আরও ভালো ফলাফল পাবেন। একটি বাইনারি শ্রেণীবিভাজনের কথা ভাবুন। যদি আপনার বেশিরভাগ ডেটা একটি শ্রেণী হয়, একটি ML মডেল সেই শ্রেণীটি আরও ঘন ঘন পূর্বাভাস দেবে, শুধুমাত্র কারণ এর জন্য আরও ডেটা রয়েছে। ডেটা ভারসাম্যপূর্ণ করা যেকোনো অসম ডেটা নিয়ে এই ভারসাম্যহীনতা দূর করতে সাহায্য করে। 1. এখন আপনি উপাদান অনুযায়ী লেবেলের সংখ্যা পরীক্ষা করতে পারেন: @@ -256,7 +256,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ print(f'old label count: {df.cuisine.value_counts()}') ``` - আপনার আউটপুট এরকম দেখাবে: + আপনার আউটপুট এরকম দেখায়: ```output new label count: korean 799 @@ -273,7 +273,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ Name: cuisine, dtype: int64 ``` - ডেটা সুন্দর এবং পরিষ্কার, ভারসাম্যপূর্ণ এবং খুবই সুস্বাদু! + ডেটা সুন্দর এবং পরিষ্কার, ভারসাম্যপূর্ণ এবং খুবই সুস্বাদু! 1. শেষ ধাপ হলো আপনার ভারসাম্যপূর্ণ ডেটা, লেবেল এবং বৈশিষ্ট্যসহ, একটি নতুন ডেটাফ্রেমে সংরক্ষণ করা যা একটি ফাইলে রপ্তানি করা যেতে পারে: @@ -281,7 +281,7 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') ``` -1. `transformed_df.head()` এবং `transformed_df.info()` ব্যবহার করে ডেটার দিকে একবার তাকান। ভবিষ্যতের পাঠে ব্যবহারের জন্য এই ডেটার একটি কপি সংরক্ষণ করুন: +1. আপনি `transformed_df.head()` এবং `transformed_df.info()` ব্যবহার করে ডেটার দিকে একবার তাকাতে পারেন। ভবিষ্যতের পাঠে ব্যবহারের জন্য এই ডেটার একটি কপি সংরক্ষণ করুন: ```python transformed_df.head() @@ -289,25 +289,25 @@ Scikit-learn বিভিন্ন ধরনের অ্যালগরিদ transformed_df.to_csv("../data/cleaned_cuisines.csv") ``` - এই নতুন CSV এখন মূল ডেটা ফোল্ডারে পাওয়া যাবে। + এই নতুন CSV এখন রুট ডেটা ফোল্ডারে পাওয়া যাবে। --- ## 🚀চ্যালেঞ্জ -এই কারিকুলামে বেশ কয়েকটি আকর্ষণীয় ডেটাসেট রয়েছে। `data` ফোল্ডারগুলো ঘেঁটে দেখুন, কোনো ডেটাসেট কি বাইনারি বা মাল্টিক্লাস শ্রেণীবিভাগের জন্য উপযুক্ত? আপনি এই ডেটাসেট থেকে কী প্রশ্ন করবেন? +এই কারিকুলামে বেশ কয়েকটি আকর্ষণীয় ডেটাসেট রয়েছে। `data` ফোল্ডারগুলো ঘেঁটে দেখুন সেখানে কি এমন কোনো ডেটাসেট রয়েছে যা বাইনারি বা মাল্টিক্লাস শ্রেণীবিভাজনের জন্য উপযুক্ত? আপনি এই ডেটাসেট থেকে কী প্রশ্ন করবেন? -## [পাঠ-পরবর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) +## [পাঠের পরবর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## পর্যালোচনা ও স্ব-অধ্যয়ন +## পর্যালোচনা এবং স্ব-অধ্যয়ন SMOTE-এর API অন্বেষণ করুন। এটি কোন ব্যবহার ক্ষেত্রে সবচেয়ে ভালোভাবে ব্যবহৃত হয়? এটি কোন সমস্যাগুলো সমাধান করে? ## অ্যাসাইনমেন্ট -[শ্রেণীবিভাগ পদ্ধতি অন্বেষণ করুন](assignment.md) +[শ্রেণীবিভাজন পদ্ধতি অন্বেষণ করুন](assignment.md) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file diff --git a/translations/bn/4-Classification/2-Classifiers-1/README.md b/translations/bn/4-Classification/2-Classifiers-1/README.md index 0bfc4a7fd..9249d8baf 100644 --- a/translations/bn/4-Classification/2-Classifiers-1/README.md +++ b/translations/bn/4-Classification/2-Classifiers-1/README.md @@ -1,8 +1,8 @@ # একটি কুইজিন রিকমেন্ডার ওয়েব অ্যাপ তৈরি করুন -এই পাঠে, আপনি পূর্ববর্তী পাঠে শেখা কিছু কৌশল ব্যবহার করে একটি শ্রেণীবিন্যাস মডেল তৈরি করবেন এবং এই সিরিজে ব্যবহৃত সুস্বাদু কুইজিন ডেটাসেট ব্যবহার করবেন। এছাড়াও, আপনি একটি ছোট ওয়েব অ্যাপ তৈরি করবেন যা সংরক্ষিত মডেল ব্যবহার করবে, Onnx-এর ওয়েব রানটাইম ব্যবহার করে। +এই পাঠে, আপনি পূর্ববর্তী পাঠে শেখা কিছু কৌশল ব্যবহার করে একটি ক্লাসিফিকেশন মডেল তৈরি করবেন এবং এই সিরিজে ব্যবহৃত সুস্বাদু কুইজিন ডেটাসেট ব্যবহার করবেন। এছাড়াও, আপনি একটি ছোট ওয়েব অ্যাপ তৈরি করবেন যা একটি সংরক্ষিত মডেল ব্যবহার করবে, Onnx-এর ওয়েব রানটাইম ব্যবহার করে। মেশিন লার্নিংয়ের অন্যতম কার্যকর ব্যবহার হল রিকমেন্ডেশন সিস্টেম তৈরি করা, এবং আপনি আজ সেই দিকে প্রথম পদক্ষেপ নিতে পারেন! [![এই ওয়েব অ্যাপটি উপস্থাপন করা হচ্ছে](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: জেন লুপার শ্রেণীবিন্যাস করা কুইজিন ডেটা ব্যবহার করে একটি ওয়েব অ্যাপ তৈরি করছেন +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: জেন লুপার ক্লাসিফাইড কুইজিন ডেটা ব্যবহার করে একটি ওয়েব অ্যাপ তৈরি করছেন -## [পাঠ-পূর্ব কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) +## [পাঠের পূর্ববর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) এই পাঠে আপনি শিখবেন: -- কীভাবে একটি মডেল তৈরি এবং এটি Onnx মডেল হিসেবে সংরক্ষণ করবেন -- কীভাবে Netron ব্যবহার করে মডেল পরিদর্শন করবেন -- কীভাবে আপনার মডেল একটি ওয়েব অ্যাপে ইনফারেন্সের জন্য ব্যবহার করবেন +- কীভাবে একটি মডেল তৈরি করে সেটিকে Onnx মডেল হিসেবে সংরক্ষণ করবেন +- কীভাবে Netron ব্যবহার করে মডেলটি পরিদর্শন করবেন +- কীভাবে আপনার মডেলটি একটি ওয়েব অ্যাপে ব্যবহার করবেন ইনফারেন্সের জন্য ## আপনার মডেল তৈরি করুন -প্রয়োগকৃত মেশিন লার্নিং সিস্টেম তৈরি করা আপনার ব্যবসায়িক সিস্টেমের জন্য এই প্রযুক্তিগুলি ব্যবহার করার একটি গুরুত্বপূর্ণ অংশ। আপনি আপনার ওয়েব অ্যাপ্লিকেশনের মধ্যে মডেল ব্যবহার করতে পারেন (এবং প্রয়োজনে অফলাইন প্রসঙ্গে ব্যবহার করতে পারেন) Onnx ব্যবহার করে। +প্রয়োগকৃত মেশিন লার্নিং সিস্টেম তৈরি করা আপনার ব্যবসায়িক সিস্টেমে এই প্রযুক্তিগুলি ব্যবহার করার একটি গুরুত্বপূর্ণ অংশ। আপনি আপনার ওয়েব অ্যাপ্লিকেশনের মধ্যে মডেল ব্যবহার করতে পারেন (এবং প্রয়োজনে অফলাইন প্রসঙ্গে ব্যবহার করতে পারেন) Onnx ব্যবহার করে। -একটি [পূর্ববর্তী পাঠে](../../3-Web-App/1-Web-App/README.md), আপনি UFO দর্শন সম্পর্কিত একটি রিগ্রেশন মডেল তৈরি করেছিলেন, এটি "পিকল" করেছিলেন এবং একটি Flask অ্যাপে ব্যবহার করেছিলেন। যদিও এই আর্কিটেকচারটি জানা খুবই উপকারী, এটি একটি ফুল-স্ট্যাক পাইথন অ্যাপ, এবং আপনার প্রয়োজনীয়তাগুলি একটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন অন্তর্ভুক্ত করতে পারে। +একটি [পূর্ববর্তী পাঠে](../../3-Web-App/1-Web-App/README.md), আপনি UFO দর্শন সম্পর্কিত একটি রিগ্রেশন মডেল তৈরি করেছিলেন, সেটিকে "পিকল" করেছিলেন এবং একটি Flask অ্যাপে ব্যবহার করেছিলেন। যদিও এই আর্কিটেকচারটি জানা খুবই দরকারি, এটি একটি ফুল-স্ট্যাক পাইথন অ্যাপ, এবং আপনার প্রয়োজনীয়তাগুলি একটি জাভাস্ক্রিপ্ট অ্যাপ্লিকেশন ব্যবহার করার অন্তর্ভুক্ত হতে পারে। -এই পাঠে, আপনি ইনফারেন্সের জন্য একটি বেসিক জাভাস্ক্রিপ্ট-ভিত্তিক সিস্টেম তৈরি করতে পারেন। তবে প্রথমে, আপনাকে একটি মডেল প্রশিক্ষণ দিতে হবে এবং এটি Onnx-এ রূপান্তর করতে হবে। +এই পাঠে, আপনি ইনফারেন্সের জন্য একটি বেসিক জাভাস্ক্রিপ্ট-ভিত্তিক সিস্টেম তৈরি করতে পারেন। তবে প্রথমে, আপনাকে একটি মডেল প্রশিক্ষণ দিতে হবে এবং সেটিকে Onnx-এ রূপান্তর করতে হবে। -## অনুশীলন - শ্রেণীবিন্যাস মডেল প্রশিক্ষণ দিন +## অনুশীলন - ক্লাসিফিকেশন মডেল প্রশিক্ষণ দিন -প্রথমে, আমরা পূর্বে ব্যবহৃত পরিষ্কার করা কুইজিন ডেটাসেট ব্যবহার করে একটি শ্রেণীবিন্যাস মডেল প্রশিক্ষণ দেব। +প্রথমে, পূর্বে ব্যবহৃত পরিষ্কার করা কুইজিন ডেটাসেট ব্যবহার করে একটি ক্লাসিফিকেশন মডেল প্রশিক্ষণ দিন। -1. প্রথমে দরকারী লাইব্রেরি ইমপোর্ট করুন: +1. দরকারী লাইব্রেরি আমদানি করে শুরু করুন: ```python !pip install skl2onnx import pandas as pd ``` - আপনাকে '[skl2onnx](https://onnx.ai/sklearn-onnx/)' প্রয়োজন যা আপনার Scikit-learn মডেলকে Onnx ফরম্যাটে রূপান্তর করতে সাহায্য করবে। + আপনাকে '[skl2onnx](https://onnx.ai/sklearn-onnx/)' প্রয়োজন হবে যা আপনার Scikit-learn মডেলকে Onnx ফরম্যাটে রূপান্তর করতে সাহায্য করবে। -1. তারপর, পূর্ববর্তী পাঠের মতো আপনার ডেটা নিয়ে কাজ করুন, একটি CSV ফাইল `read_csv()` ব্যবহার করে পড়ুন: +1. তারপর, পূর্ববর্তী পাঠে যেমন করেছিলেন, `read_csv()` ব্যবহার করে একটি CSV ফাইল নিয়ে কাজ করুন: ```python data = pd.read_csv('../data/cleaned_cuisines.csv') data.head() ``` -1. প্রথম দুটি অপ্রয়োজনীয় কলাম সরিয়ে ফেলুন এবং বাকি ডেটা 'X' হিসেবে সংরক্ষণ করুন: +1. প্রথম দুটি অপ্রয়োজনীয় কলাম সরিয়ে ফেলুন এবং অবশিষ্ট ডেটা 'X' হিসেবে সংরক্ষণ করুন: ```python X = data.iloc[:,2:] @@ -68,11 +68,11 @@ CO_OP_TRANSLATOR_METADATA: ``` -### প্রশিক্ষণ প্রক্রিয়া শুরু করুন +### প্রশিক্ষণ রুটিন শুরু করুন -আমরা 'SVC' লাইব্রেরি ব্যবহার করব যা ভালো নির্ভুলতা প্রদান করে। +আমরা 'SVC' লাইব্রেরি ব্যবহার করব যা ভালো সঠিকতা প্রদান করে। -1. Scikit-learn থেকে প্রাসঙ্গিক লাইব্রেরি ইমপোর্ট করুন: +1. Scikit-learn থেকে প্রাসঙ্গিক লাইব্রেরি আমদানি করুন: ```python from sklearn.model_selection import train_test_split @@ -87,7 +87,7 @@ CO_OP_TRANSLATOR_METADATA: X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) ``` -1. পূর্ববর্তী পাঠের মতো একটি SVC শ্রেণীবিন্যাস মডেল তৈরি করুন: +1. পূর্ববর্তী পাঠে যেমন করেছিলেন, একটি SVC ক্লাসিফিকেশন মডেল তৈরি করুন: ```python model = SVC(kernel='linear', C=10, probability=True,random_state=0) @@ -100,13 +100,13 @@ CO_OP_TRANSLATOR_METADATA: y_pred = model.predict(X_test) ``` -1. মডেলের গুণমান পরীক্ষা করতে একটি শ্রেণীবিন্যাস রিপোর্ট প্রিন্ট করুন: +1. মডেলের গুণমান পরীক্ষা করতে একটি ক্লাসিফিকেশন রিপোর্ট প্রিন্ট করুন: ```python print(classification_report(y_test,y_pred)) ``` - যেমন আমরা আগে দেখেছি, নির্ভুলতা ভালো: + পূর্বে যেমন দেখেছি, সঠিকতা ভালো: ```output precision recall f1-score support @@ -122,7 +122,7 @@ CO_OP_TRANSLATOR_METADATA: weighted avg 0.79 0.79 0.79 1199 ``` -### আপনার মডেল Onnx-এ রূপান্তর করুন +### আপনার মডেলকে Onnx-এ রূপান্তর করুন সঠিক টেনসর সংখ্যা দিয়ে রূপান্তর নিশ্চিত করুন। এই ডেটাসেটে ৩৮০টি উপাদান তালিকাভুক্ত রয়েছে, তাই আপনাকে `FloatTensorType`-এ সেই সংখ্যা উল্লেখ করতে হবে: @@ -144,25 +144,25 @@ CO_OP_TRANSLATOR_METADATA: f.write(onx.SerializeToString()) ``` - > লক্ষ্য করুন, আপনি আপনার রূপান্তর স্ক্রিপ্টে [অপশন](https://onnx.ai/sklearn-onnx/parameterized.html) পাস করতে পারেন। এই ক্ষেত্রে, আমরা 'nocl' কে True এবং 'zipmap' কে False পাস করেছি। যেহেতু এটি একটি শ্রেণীবিন্যাস মডেল, আপনি ZipMap সরানোর অপশন পাবেন যা একটি ডিকশনারির তালিকা তৈরি করে (যা প্রয়োজনীয় নয়)। `nocl` মডেলে শ্রেণী তথ্য অন্তর্ভুক্ত হওয়ার বিষয়টি নির্দেশ করে। `nocl`-কে 'True' সেট করে আপনার মডেলের আকার কমান। + > লক্ষ্য করুন, আপনি আপনার রূপান্তর স্ক্রিপ্টে [options](https://onnx.ai/sklearn-onnx/parameterized.html) পাস করতে পারেন। এই ক্ষেত্রে, আমরা 'nocl' কে True এবং 'zipmap' কে False পাস করেছি। যেহেতু এটি একটি ক্লাসিফিকেশন মডেল, আপনি ZipMap সরানোর বিকল্পটি ব্যবহার করতে পারেন যা একটি ডিকশনারির তালিকা তৈরি করে (প্রয়োজনীয় নয়)। `nocl` মডেলে ক্লাস তথ্য অন্তর্ভুক্ত হওয়ার বিষয়টি নির্দেশ করে। `nocl` কে 'True' সেট করে আপনার মডেলের আকার কমান। -পুরো নোটবুক চালালে এখন একটি Onnx মডেল তৈরি হবে এবং এটি এই ফোল্ডারে সংরক্ষণ হবে। +পুরো নোটবুক চালানো এখন একটি Onnx মডেল তৈরি করবে এবং এটি এই ফোল্ডারে সংরক্ষণ করবে। ## আপনার মডেল দেখুন -Onnx মডেলগুলো Visual Studio Code-এ খুব বেশি দৃশ্যমান নয়, তবে একটি খুব ভালো ফ্রি সফটওয়্যার রয়েছে যা অনেক গবেষক মডেল ভিজ্যুয়ালাইজ করতে ব্যবহার করেন। [Netron](https://github.com/lutzroeder/Netron) ডাউনলোড করুন এবং আপনার model.onnx ফাইলটি খুলুন। আপনি আপনার সহজ মডেলটি ভিজ্যুয়ালাইজ করতে পারবেন, যেখানে এর ৩৮০টি ইনপুট এবং শ্রেণীবিন্যাসকারী তালিকাভুক্ত রয়েছে: +Onnx মডেলগুলি Visual Studio কোডে খুব বেশি দৃশ্যমান নয়, তবে একটি খুব ভালো ফ্রি সফটওয়্যার রয়েছে যা অনেক গবেষক মডেলটি সঠিকভাবে তৈরি হয়েছে কিনা তা নিশ্চিত করতে ব্যবহার করেন। [Netron](https://github.com/lutzroeder/Netron) ডাউনলোড করুন এবং আপনার model.onnx ফাইলটি খুলুন। আপনি আপনার সহজ মডেলটি দেখতে পাবেন, এর ৩৮০টি ইনপুট এবং ক্লাসিফায়ার তালিকাভুক্ত: -![Netron ভিজ্যুয়াল](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.bn.png) +![Netron ভিজ্যুয়াল](../../../../4-Classification/4-Applied/images/netron.png) -Netron আপনার মডেলগুলো দেখার জন্য একটি সহায়ক টুল। +Netron আপনার মডেলগুলি দেখার জন্য একটি সহায়ক টুল। -এখন আপনি এই চমৎকার মডেলটি একটি ওয়েব অ্যাপে ব্যবহার করতে প্রস্তুত। চলুন একটি অ্যাপ তৈরি করি যা আপনার ফ্রিজে থাকা উপাদানগুলোর সংমিশ্রণ থেকে কোন কুইজিন রান্না করা যায় তা নির্ধারণ করতে সাহায্য করবে, আপনার মডেল অনুযায়ী। +এখন আপনি এই চমৎকার মডেলটি একটি ওয়েব অ্যাপে ব্যবহার করতে প্রস্তুত। আসুন একটি অ্যাপ তৈরি করি যা আপনার ফ্রিজে থাকা উপাদানগুলির সংমিশ্রণ দেখে নির্ধারণ করবে কোন কুইজিন তৈরি করা যেতে পারে, আপনার মডেল দ্বারা নির্ধারিত। ## একটি রিকমেন্ডার ওয়েব অ্যাপ্লিকেশন তৈরি করুন -আপনার মডেল সরাসরি একটি ওয়েব অ্যাপে ব্যবহার করা যেতে পারে। এই আর্কিটেকচারটি আপনাকে এটি লোকাল এবং এমনকি প্রয়োজনে অফলাইনে চালানোর সুযোগ দেয়। যেখানে আপনি আপনার `model.onnx` ফাইল সংরক্ষণ করেছেন সেই একই ফোল্ডারে একটি `index.html` ফাইল তৈরি করে শুরু করুন। +আপনি আপনার মডেলটি সরাসরি একটি ওয়েব অ্যাপে ব্যবহার করতে পারেন। এই আর্কিটেকচারটি আপনাকে এটি স্থানীয়ভাবে এবং এমনকি প্রয়োজনে অফলাইনে চালানোর অনুমতি দেয়। `index.html` নামে একটি ফাইল তৈরি করে শুরু করুন যেখানে আপনি আপনার `model.onnx` ফাইল সংরক্ষণ করেছেন। -1. এই ফাইল _index.html_-এ, নিম্নলিখিত মার্কআপ যোগ করুন: +1. এই ফাইল _index.html_-এ নিম্নলিখিত মার্কআপ যোগ করুন: ```html @@ -221,19 +221,19 @@ Netron আপনার মডেলগুলো দেখার জন্য এ ``` - লক্ষ্য করুন যে প্রতিটি চেকবক্সকে একটি মান দেওয়া হয়েছে। এটি ডেটাসেট অনুযায়ী উপাদানটি যেখানে পাওয়া যায় সেই ইনডেক্সকে প্রতিফলিত করে। উদাহরণস্বরূপ, আপেল এই বর্ণানুক্রমিক তালিকায় পঞ্চম কলামে রয়েছে, তাই এর মান '4', কারণ আমরা 0 থেকে গণনা শুরু করি। একটি নির্দিষ্ট উপাদানের ইনডেক্স জানতে [উপাদান স্প্রেডশিট](../../../../4-Classification/data/ingredient_indexes.csv) পরামর্শ করুন। + লক্ষ্য করুন যে প্রতিটি চেকবক্সকে একটি মান দেওয়া হয়েছে। এটি ডেটাসেট অনুযায়ী উপাদানটি যেখানে পাওয়া যায় সেই সূচকটি প্রতিফলিত করে। উদাহরণস্বরূপ, আপেল এই বর্ণানুক্রমিক তালিকায় পঞ্চম কলামে রয়েছে, তাই এর মান '4' কারণ আমরা 0 থেকে গণনা শুরু করি। আপনি [উপাদান স্প্রেডশিট](../../../../4-Classification/data/ingredient_indexes.csv) পরামর্শ করতে পারেন একটি নির্দিষ্ট উপাদানের সূচক আবিষ্কার করতে। - index.html ফাইলে আপনার কাজ চালিয়ে যান এবং একটি স্ক্রিপ্ট ব্লক যোগ করুন যেখানে মডেলটি চূড়ান্ত বন্ধ `` এর পরে কল করা হয়। + আপনার কাজ index.html ফাইলে চালিয়ে যান, একটি স্ক্রিপ্ট ব্লক যোগ করুন যেখানে মডেলটি চূড়ান্ত বন্ধ `` এর পরে কল করা হয়। -1. প্রথমে, [Onnx Runtime](https://www.onnxruntime.ai/) ইমপোর্ট করুন: +1. প্রথমে, [Onnx Runtime](https://www.onnxruntime.ai/) আমদানি করুন: ```html ``` - > Onnx Runtime ব্যবহার করা হয় আপনার Onnx মডেলগুলোকে বিভিন্ন হার্ডওয়্যার প্ল্যাটফর্মে চালানোর জন্য, অপ্টিমাইজেশন এবং একটি API সহ। + > Onnx Runtime ব্যবহার করা হয় আপনার Onnx মডেলগুলি বিভিন্ন হার্ডওয়্যার প্ল্যাটফর্মে চালানোর জন্য, অপ্টিমাইজেশন এবং একটি API সহ। -1. একবার Runtime ইনপ্লেসে থাকলে, আপনি এটি কল করতে পারেন: +1. Runtime ইনপ্লেস করার পরে, আপনি এটি কল করতে পারেন: ```html ``` -এই কোডে, কয়েকটি বিষয় ঘটছে: +এই কোডে, কয়েকটি জিনিস ঘটছে: -1. আপনি ৩৮০ সম্ভাব্য মানের (১ বা ০) একটি অ্যারে তৈরি করেছেন যা ইনফারেন্সের জন্য মডেলে পাঠানোর জন্য সেট করা হবে, নির্ভর করে একটি উপাদান চেকবক্স চেক করা হয়েছে কিনা। -2. আপনি চেকবক্সের একটি অ্যারে এবং একটি `init` ফাংশন তৈরি করেছেন যা অ্যাপ্লিকেশন শুরু হলে কল করা হয়। যখন একটি চেকবক্স চেক করা হয়, তখন `ingredients` অ্যারে সংশোধিত হয় নির্বাচিত উপাদানটি প্রতিফলিত করতে। -3. আপনি একটি `testCheckboxes` ফাংশন তৈরি করেছেন যা পরীক্ষা করে যে কোনো চেকবক্স চেক করা হয়েছে কিনা। +1. আপনি ৩৮০ সম্ভাব্য মানের একটি অ্যারে তৈরি করেছেন (1 বা 0) যা সেট করা হবে এবং ইনফারেন্সের জন্য মডেলে পাঠানো হবে, নির্ভর করে একটি উপাদান চেকবক্স চেক করা হয়েছে কিনা। +2. আপনি একটি চেকবক্সের অ্যারে তৈরি করেছেন এবং একটি `init` ফাংশন তৈরি করেছেন যা অ্যাপ্লিকেশন শুরু হলে কল করা হয়। যখন একটি চেকবক্স চেক করা হয়, তখন `ingredients` অ্যারে সংশোধিত হয় নির্বাচিত উপাদানটি প্রতিফলিত করতে। +3. আপনি একটি `testCheckboxes` ফাংশন তৈরি করেছেন যা পরীক্ষা করে কোনো চেকবক্স চেক করা হয়েছে কিনা। 4. আপনি `startInference` ফাংশন ব্যবহার করেন যখন বোতামটি চাপা হয় এবং যদি কোনো চেকবক্স চেক করা হয়, আপনি ইনফারেন্স শুরু করেন। -5. ইনফারেন্স রুটিন অন্তর্ভুক্ত করে: - 1. মডেলটি অ্যাসিঙ্ক্রোনাস লোড সেটআপ করা +5. ইনফারেন্স রুটিন অন্তর্ভুক্ত: + 1. মডেলের একটি অ্যাসিঙ্ক্রোনাস লোড সেটআপ করা 2. মডেলে পাঠানোর জন্য একটি টেনসর স্ট্রাকচার তৈরি করা - 3. 'ফিডস' তৈরি করা যা আপনি মডেল প্রশিক্ষণ করার সময় তৈরি করা `float_input` ইনপুটকে প্রতিফলিত করে (আপনি Netron ব্যবহার করে সেই নামটি যাচাই করতে পারেন) - 4. এই 'ফিডস' মডেলে পাঠানো এবং একটি প্রতিক্রিয়ার জন্য অপেক্ষা করা + 3. 'feeds' তৈরি করা যা `float_input` ইনপুট প্রতিফলিত করে যা আপনি আপনার মডেল প্রশিক্ষণ দেওয়ার সময় তৈরি করেছিলেন (আপনি Netron ব্যবহার করে সেই নামটি যাচাই করতে পারেন) + 4. এই 'feeds' মডেলে পাঠানো এবং একটি প্রতিক্রিয়ার জন্য অপেক্ষা করা ## আপনার অ্যাপ্লিকেশন পরীক্ষা করুন -Visual Studio Code-এ একটি টার্মিনাল সেশন খুলুন যেখানে আপনার index.html ফাইলটি রয়েছে। নিশ্চিত করুন যে আপনার [http-server](https://www.npmjs.com/package/http-server) গ্লোবালি ইনস্টল করা আছে এবং প্রম্পটে `http-server` টাইপ করুন। একটি লোকালহোস্ট খুলবে এবং আপনি আপনার ওয়েব অ্যাপ দেখতে পারবেন। বিভিন্ন উপাদানের উপর ভিত্তি করে কোন কুইজিন সুপারিশ করা হচ্ছে তা পরীক্ষা করুন: +Visual Studio Code-এ একটি টার্মিনাল সেশন খুলুন যেখানে আপনার index.html ফাইল রয়েছে। নিশ্চিত করুন যে আপনার [http-server](https://www.npmjs.com/package/http-server) গ্লোবালি ইনস্টল করা আছে এবং প্রম্পটে `http-server` টাইপ করুন। একটি লোকালহোস্ট খুলবে এবং আপনি আপনার ওয়েব অ্যাপ দেখতে পারবেন। বিভিন্ন উপাদানের উপর ভিত্তি করে কোন কুইজিন সুপারিশ করা হয়েছে তা পরীক্ষা করুন: -![উপাদান ওয়েব অ্যাপ](../../../../translated_images/web-app.4c76450cabe20036f8ec6d5e05ccc0c1c064f0d8f2fe3304d3bcc0198f7dc139.bn.png) +![উপাদান ওয়েব অ্যাপ](../../../../4-Classification/4-Applied/images/web-app.png) -অভিনন্দন, আপনি কয়েকটি ফিল্ড সহ একটি 'রিকমেন্ডেশন' ওয়েব অ্যাপ তৈরি করেছেন। এই সিস্টেমটি তৈরি করতে কিছু সময় নিন! +অভিনন্দন, আপনি কয়েকটি ক্ষেত্র সহ একটি 'রিকমেন্ডেশন' ওয়েব অ্যাপ তৈরি করেছেন। এই সিস্টেমটি তৈরি করতে কিছু সময় নিন! ## 🚀চ্যালেঞ্জ -আপনার ওয়েব অ্যাপটি খুবই সাধারণ, তাই [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) ডেটা থেকে উপাদান এবং তাদের ইনডেক্স ব্যবহার করে এটি আরও তৈরি করুন। কোন স্বাদ সংমিশ্রণ একটি নির্দিষ্ট জাতীয় খাবার তৈরি করতে কাজ করে? +আপনার ওয়েব অ্যাপটি খুবই সাধারণ, তাই [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv) ডেটা থেকে উপাদান এবং তাদের সূচক ব্যবহার করে এটি তৈরি করতে থাকুন। কোন স্বাদ সংমিশ্রণ একটি নির্দিষ্ট জাতীয় খাবার তৈরি করতে কাজ করে? -## [পাঠ-পরবর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/26/) +## [পাঠের পরবর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## পর্যালোচনা ও স্ব-অধ্যয়ন +## পর্যালোচনা এবং স্ব-অধ্যয়ন -যদিও এই পাঠটি খাদ্য উপাদানের জন্য একটি রিকমেন্ডেশন সিস্টেম তৈরির উপযোগিতার উপর শুধু স্পর্শ করেছে, মেশিন লার্নিং অ্যাপ্লিকেশনের এই ক্ষেত্রটি উদাহরণে খুব সমৃদ্ধ। এই সিস্টেমগুলো কীভাবে তৈরি হয় সে সম্পর্কে আরও পড়ুন: +যদিও এই পাঠটি খাদ্য উপাদানগুলির জন্য একটি রিকমেন্ডেশন সিস্টেম তৈরির উপযোগিতা নিয়ে সংক্ষিপ্ত আলোচনা করেছে, এই মেশিন লার্নিং অ্যাপ্লিকেশনের ক্ষেত্রটি উদাহরণে খুবই সমৃদ্ধ। এই সিস্টেমগুলি কীভাবে তৈরি হয় সে সম্পর্কে আরও পড়ুন: - https://www.sciencedirect.com/topics/computer-science/recommendation-engine - https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ - https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ -## অ্যাসাইনমেন্ট +## অ্যাসাইনমেন্ট -[একটি নতুন রিকমেন্ডার তৈরি করুন](assignment.md) +[নতুন একটি রিকমেন্ডার তৈরি করুন](assignment.md) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/5-Clustering/1-Visualize/README.md b/translations/bn/5-Clustering/1-Visualize/README.md index 7e441fc03..a353a566f 100644 --- a/translations/bn/5-Clustering/1-Visualize/README.md +++ b/translations/bn/5-Clustering/1-Visualize/README.md @@ -1,125 +1,125 @@ -# ক্লাস্টারিং-এর পরিচিতি +# ক্লাস্টারিং পরিচিতি -ক্লাস্টারিং হলো [অপরিচালিত শিক্ষণ](https://wikipedia.org/wiki/Unsupervised_learning)-এর একটি ধরণ, যেখানে ধরে নেওয়া হয় যে একটি ডেটাসেট লেবেলবিহীন বা এর ইনপুট পূর্বনির্ধারিত আউটপুটের সাথে মেলানো হয়নি। এটি বিভিন্ন অ্যালগরিদম ব্যবহার করে লেবেলবিহীন ডেটা বিশ্লেষণ করে এবং ডেটায় পাওয়া প্যাটার্ন অনুযায়ী গ্রুপিং প্রদান করে। +ক্লাস্টারিং হলো [অপরীক্ষিত শিক্ষণ](https://wikipedia.org/wiki/Unsupervised_learning) এর একটি ধরন, যা ধরে নেয় যে একটি ডেটাসেট লেবেলবিহীন বা এর ইনপুট পূর্বনির্ধারিত আউটপুটের সাথে মেলানো হয়নি। এটি বিভিন্ন অ্যালগরিদম ব্যবহার করে লেবেলবিহীন ডেটা বিশ্লেষণ করে এবং ডেটাতে পাওয়া প্যাটার্ন অনুযায়ী গ্রুপিং প্রদান করে। -[![PSquare-এর "No One Like You"](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "PSquare-এর 'No One Like You'") +[![PSquare এর No One Like You](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "PSquare এর No One Like You") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য। ক্লাস্টারিং-এর মাধ্যমে মেশিন লার্নিং শিখতে শিখতে কিছু নাইজেরিয়ান ডান্স হল ট্র্যাক উপভোগ করুন - এটি PSquare-এর ২০১৪ সালের একটি জনপ্রিয় গান। +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য। ক্লাস্টারিং দিয়ে মেশিন লার্নিং শেখার সময়, কিছু নাইজেরিয়ান ডান্স হল ট্র্যাক উপভোগ করুন - এটি PSquare এর ২০১৪ সালের একটি উচ্চ রেটেড গান। -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ### পরিচিতি -[ক্লাস্টারিং](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ডেটা এক্সপ্লোরেশনের জন্য অত্যন্ত কার্যকর। দেখা যাক এটি নাইজেরিয়ান শ্রোতারা কীভাবে সঙ্গীত গ্রহণ করেন তার প্রবণতা এবং প্যাটার্ন আবিষ্কার করতে সাহায্য করতে পারে কিনা। +[ক্লাস্টারিং](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) ডেটা এক্সপ্লোরেশনের জন্য খুবই কার্যকর। চলুন দেখি এটি নাইজেরিয়ান দর্শকরা কীভাবে সঙ্গীত উপভোগ করেন তার প্রবণতা এবং প্যাটার্ন আবিষ্কার করতে সাহায্য করতে পারে কিনা। -✅ এক মিনিট সময় নিয়ে ক্লাস্টারিং-এর ব্যবহার সম্পর্কে ভাবুন। বাস্তব জীবনে, ক্লাস্টারিং ঘটে যখন আপনার কাছে একটি লন্ড্রির স্তূপ থাকে এবং আপনাকে পরিবারের সদস্যদের কাপড় আলাদা করতে হয় 🧦👕👖🩲। ডেটা সায়েন্সে, ক্লাস্টারিং ঘটে যখন ব্যবহারকারীর পছন্দ বিশ্লেষণ করতে হয় বা কোনো লেবেলবিহীন ডেটাসেটের বৈশিষ্ট্য নির্ধারণ করতে হয়। একভাবে, ক্লাস্টারিং বিশৃঙ্খলার মধ্যে অর্থ খুঁজে পেতে সাহায্য করে, যেমন একটি মোজা রাখার ড্রয়ার। +✅ ক্লাস্টারিং এর ব্যবহার নিয়ে এক মিনিট চিন্তা করুন। বাস্তব জীবনে, ক্লাস্টারিং ঘটে যখন আপনার কাছে একটি কাপড়ের স্তূপ থাকে এবং আপনাকে পরিবারের সদস্যদের কাপড় আলাদা করতে হয় 🧦👕👖🩲। ডেটা সায়েন্সে, ক্লাস্টারিং ঘটে যখন ব্যবহারকারীর পছন্দ বিশ্লেষণ করার চেষ্টা করা হয়, বা কোনো লেবেলবিহীন ডেটাসেটের বৈশিষ্ট্য নির্ধারণ করা হয়। একভাবে, ক্লাস্টারিং বিশৃঙ্খলার মধ্যে অর্থ খুঁজে পেতে সাহায্য করে, যেমন একটি মোজার ড্রয়ার। -[![মেশিন লার্নিং-এর পরিচিতি](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "ক্লাস্টারিং-এর পরিচিতি") +[![মেশিন লার্নিং পরিচিতি](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "ক্লাস্টারিং পরিচিতি") -> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিও দেখার জন্য: MIT-এর জন গুটটাগ ক্লাস্টারিং-এর পরিচিতি দিচ্ছেন। +> 🎥 উপরের ছবিতে ক্লিক করুন একটি ভিডিওর জন্য: MIT এর John Guttag ক্লাস্টারিং পরিচিতি প্রদান করছেন। -পেশাদার ক্ষেত্রে, ক্লাস্টারিং ব্যবহার করা যেতে পারে যেমন বাজার বিভাজন নির্ধারণ করা, উদাহরণস্বরূপ কোন বয়সের গ্রুপ কী ধরনের পণ্য কিনছে তা নির্ধারণ করা। আরেকটি ব্যবহার হতে পারে অস্বাভাবিকতা সনাক্তকরণ, যেমন ক্রেডিট কার্ড লেনদেনের ডেটাসেট থেকে জালিয়াতি সনাক্ত করা। অথবা আপনি এটি ব্যবহার করতে পারেন মেডিকেল স্ক্যানের একটি ব্যাচ থেকে টিউমার নির্ধারণ করতে। +পেশাগত ক্ষেত্রে, ক্লাস্টারিং ব্যবহার করা যেতে পারে যেমন মার্কেট সেগমেন্টেশন নির্ধারণ করা, উদাহরণস্বরূপ, কোন বয়সের গ্রুপ কী আইটেম কিনছে তা নির্ধারণ করা। আরেকটি ব্যবহার হতে পারে অস্বাভাবিকতা সনাক্তকরণ, হয়তো ক্রেডিট কার্ড লেনদেনের ডেটাসেট থেকে প্রতারণা সনাক্ত করতে। অথবা আপনি ক্লাস্টারিং ব্যবহার করতে পারেন মেডিক্যাল স্ক্যানের একটি ব্যাচ থেকে টিউমার নির্ধারণ করতে। -✅ এক মিনিট সময় নিয়ে ভাবুন, আপনি কীভাবে 'প্রকৃত জীবনে' ক্লাস্টারিং-এর মুখোমুখি হয়েছেন, যেমন ব্যাংকিং, ই-কমার্স, বা ব্যবসায়িক ক্ষেত্রে। +✅ এক মিনিট চিন্তা করুন কীভাবে আপনি 'প্রাকৃতিকভাবে' ক্লাস্টারিং এর মুখোমুখি হয়েছেন, ব্যাংকিং, ই-কমার্স, বা ব্যবসায়িক ক্ষেত্রে। -> 🎓 মজার বিষয় হলো, ক্লাস্টার বিশ্লেষণ ১৯৩০-এর দশকে নৃতত্ত্ব এবং মনোবিজ্ঞানের ক্ষেত্রে উদ্ভূত হয়েছিল। কল্পনা করুন এটি কীভাবে ব্যবহার করা হতে পারে? +> 🎓 মজার বিষয় হলো, ক্লাস্টার বিশ্লেষণ ১৯৩০ এর দশকে নৃতত্ত্ব এবং মনোবিজ্ঞানের ক্ষেত্রে উদ্ভূত হয়েছিল। কল্পনা করুন এটি কীভাবে ব্যবহার করা হতে পারে? -অন্যভাবে, আপনি এটি অনুসন্ধান ফলাফল গ্রুপ করার জন্য ব্যবহার করতে পারেন - যেমন কেনাকাটার লিঙ্ক, ছবি, বা রিভিউ। ক্লাস্টারিং কার্যকর যখন আপনার কাছে একটি বড় ডেটাসেট থাকে যা আপনি হ্রাস করতে চান এবং যার উপর আরও বিশদ বিশ্লেষণ করতে চান, তাই এই কৌশলটি অন্যান্য মডেল তৈরি করার আগে ডেটা সম্পর্কে জানার জন্য ব্যবহার করা যেতে পারে। +অন্যদিকে, এটি ব্যবহার করা যেতে পারে সার্চ রেজাল্ট গ্রুপিং এর জন্য - যেমন শপিং লিঙ্ক, ছবি, বা রিভিউ। ক্লাস্টারিং কার্যকর যখন আপনার কাছে একটি বড় ডেটাসেট থাকে যা আপনি কমাতে চান এবং যার উপর আপনি আরও সূক্ষ্ম বিশ্লেষণ করতে চান, তাই এই কৌশলটি অন্যান্য মডেল তৈরি করার আগে ডেটা সম্পর্কে জানার জন্য ব্যবহার করা যেতে পারে। -✅ একবার আপনার ডেটা ক্লাস্টারে সংগঠিত হলে, আপনি এটিকে একটি ক্লাস্টার আইডি বরাদ্দ করেন, এবং এই কৌশলটি একটি ডেটাসেটের গোপনীয়তা সংরক্ষণে কার্যকর হতে পারে; আপনি ক্লাস্টারের অন্যান্য উপাদানের পরিবর্তে একটি ডেটা পয়েন্টকে তার ক্লাস্টার আইডি দ্বারা উল্লেখ করতে পারেন। আপনি কি অন্য কোনো কারণ ভাবতে পারেন কেন আপনি ক্লাস্টার আইডি ব্যবহার করবেন ক্লাস্টারের অন্যান্য উপাদানের পরিবর্তে এটি চিহ্নিত করতে? +✅ একবার আপনার ডেটা ক্লাস্টারে সংগঠিত হলে, আপনি এটিকে একটি ক্লাস্টার আইডি বরাদ্দ করেন, এবং এই কৌশলটি একটি ডেটাসেটের গোপনীয়তা সংরক্ষণে কার্যকর হতে পারে; আপনি ক্লাস্টারের আরও প্রকাশযোগ্য সনাক্তযোগ্য ডেটার পরিবর্তে একটি ডেটা পয়েন্টকে তার ক্লাস্টার আইডি দ্বারা উল্লেখ করতে পারেন। আপনি কি অন্য কারণ চিন্তা করতে পারেন কেন আপনি একটি ক্লাস্টার আইডি ব্যবহার করবেন ক্লাস্টারের অন্যান্য উপাদানগুলির পরিবর্তে এটি সনাক্ত করতে? -ক্লাস্টারিং কৌশল সম্পর্কে আপনার বোঝাপড়া বাড়ান এই [শিক্ষণ মডিউল](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott)-এ। +ক্লাস্টারিং কৌশল সম্পর্কে আপনার জ্ঞান গভীর করুন এই [শেখার মডিউলে](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 দ্বারা সমর্থিত পদ্ধতিগুলির একটি সরলীকৃত টেবিল এবং তাদের উপযুক্ত ব্যবহারের ক্ষেত্র দেওয়া হলো: +[Scikit-learn একটি বড় পরিসরের](https://scikit-learn.org/stable/modules/clustering.html) পদ্ধতি প্রদান করে ক্লাস্টারিং সম্পাদনের জন্য। আপনি কোনটি বেছে নেবেন তা আপনার ব্যবহার ক্ষেত্রে নির্ভর করবে। ডকুমেন্টেশন অনুযায়ী, প্রতিটি পদ্ধতির বিভিন্ন সুবিধা রয়েছে। এখানে Scikit-learn দ্বারা সমর্থিত পদ্ধতিগুলির একটি সরলীকৃত টেবিল এবং তাদের উপযুক্ত ব্যবহার ক্ষেত্র দেওয়া হলো: -| পদ্ধতির নাম | ব্যবহারের ক্ষেত্র | +| পদ্ধতির নাম | ব্যবহার ক্ষেত্র | | :--------------------------- | :--------------------------------------------------------------------- | | K-Means | সাধারণ উদ্দেশ্য, ইনডাকটিভ | | Affinity propagation | অনেক, অসম ক্লাস্টার, ইনডাকটিভ | | Mean-shift | অনেক, অসম ক্লাস্টার, ইনডাকটিভ | -| Spectral clustering | কম, সমান ক্লাস্টার, ট্রান্সডাকটিভ | +| Spectral clustering | কম, সম ক্লাস্টার, ট্রান্সডাকটিভ | | Ward hierarchical clustering | অনেক, সীমাবদ্ধ ক্লাস্টার, ট্রান্সডাকটিভ | -| Agglomerative clustering | অনেক, সীমাবদ্ধ, অ-ইউক্লিডিয়ান দূরত্ব, ট্রান্সডাকটিভ | +| Agglomerative clustering | অনেক, সীমাবদ্ধ, অ-ইউক্লিডিয়ান দূরত্ব, ট্রান্সডাকটিভ | | DBSCAN | অ-সমতল জ্যামিতি, অসম ক্লাস্টার, ট্রান্সডাকটিভ | -| OPTICS | অ-সমতল জ্যামিতি, অসম ক্লাস্টার ভেরিয়েবল ঘনত্ব সহ, ট্রান্সডাকটিভ | +| OPTICS | অ-সমতল জ্যামিতি, অসম ক্লাস্টার পরিবর্তনশীল ঘনত্বের সাথে, ট্রান্সডাকটিভ | | Gaussian mixtures | সমতল জ্যামিতি, ইনডাকটিভ | -| BIRCH | বড় ডেটাসেট আউটলাইয়ার সহ, ইনডাকটিভ | +| 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_geometry)) বা 'অ-সমতল' (অ-ইউক্লিডিয়ান) জ্যামিতিক পদ্ধতিতে করা হয়। > ->'সমতল' এই প্রসঙ্গে ইউক্লিডিয়ান জ্যামিতিকে বোঝায় (যার কিছু অংশ 'প্লেন' জ্যামিতি হিসেবে শেখানো হয়), এবং অ-সমতল বোঝায় অ-ইউক্লিডিয়ান জ্যামিতি। মেশিন লার্নিং-এর সাথে জ্যামিতির কী সম্পর্ক? যেহেতু দুটি ক্ষেত্রই গণিতের উপর ভিত্তি করে, পয়েন্টগুলোর মধ্যে দূরত্ব পরিমাপের একটি সাধারণ উপায় থাকতে হবে, এবং এটি ডেটার প্রকৃতির উপর নির্ভর করে 'সমতল' বা 'অ-সমতল' পদ্ধতিতে করা যেতে পারে। [ইউক্লিডিয়ান দূরত্ব](https://wikipedia.org/wiki/Euclidean_distance) পরিমাপ করা হয় দুটি পয়েন্টের মধ্যে একটি রেখা খণ্ডের দৈর্ঘ্য হিসাবে। [অ-ইউক্লিডিয়ান দূরত্ব](https://wikipedia.org/wiki/Non-Euclidean_geometry) একটি বক্ররেখা বরাবর পরিমাপ করা হয়। যদি আপনার ডেটা, ভিজ্যুয়ালাইজড, একটি প্লেনে বিদ্যমান না থাকে, তবে এটি পরিচালনা করার জন্য একটি বিশেষ অ্যালগরিদম ব্যবহার করা প্রয়োজন হতে পারে। +>'সমতল' এই প্রসঙ্গে ইউক্লিডিয়ান জ্যামিতি বোঝায় (যার কিছু অংশ 'প্লেন' জ্যামিতি হিসেবে শেখানো হয়), এবং অ-সমতল অ-ইউক্লিডিয়ান জ্যামিতি বোঝায়। মেশিন লার্নিং এর সাথে জ্যামিতির কী সম্পর্ক? যেহেতু দুটি ক্ষেত্রই গণিতের উপর ভিত্তি করে, পয়েন্টগুলোর মধ্যে দূরত্ব পরিমাপের একটি সাধারণ উপায় থাকতে হবে, এবং এটি ডেটার প্রকৃতির উপর নির্ভর করে 'সমতল' বা 'অ-সমতল' পদ্ধতিতে করা যেতে পারে। [ইউক্লিডিয়ান দূরত্ব](https://wikipedia.org/wiki/Euclidean_distance) দুটি পয়েন্টের মধ্যে একটি রেখাংশের দৈর্ঘ্য হিসেবে পরিমাপ করা হয়। [অ-ইউক্লিডিয়ান দূরত্ব](https://wikipedia.org/wiki/Non-Euclidean_geometry) একটি বক্ররেখা বরাবর পরিমাপ করা হয়। যদি আপনার ডেটা, ভিজ্যুয়ালাইজড, একটি প্লেনে না থাকে, তাহলে এটি পরিচালনা করার জন্য একটি বিশেষ অ্যালগরিদম ব্যবহার করতে হতে পারে। > -![সমতল বনাম অ-সমতল জ্যামিতি ইনফোগ্রাফিক](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.bn.png) -> ইনফোগ্রাফিক: [দাসানি মাদিপল্লি](https://twitter.com/dasani_decoded) +![সমতল বনাম অ-সমতল জ্যামিতি ইনফোগ্রাফিক](../../../../5-Clustering/1-Visualize/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://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) এই অপরীক্ষিত পদ্ধতিতে 'আংশিক-পরীক্ষিত' শিক্ষণ প্রবর্তন করে। পয়েন্টগুলোর মধ্যে সম্পর্কগুলো 'লিঙ্ক করা যাবে না' বা 'লিঙ্ক করতে হবে' হিসেবে চিহ্নিত করা হয়, তাই কিছু নিয়ম ডেটাসেটে প্রয়োগ করা হয়। > -> উদাহরণ: যদি একটি অ্যালগরিদমকে একটি লেবেলবিহীন বা আংশিক-লেবেলযুক্ত ডেটার ব্যাচে মুক্ত করা হয়, এটি যে ক্লাস্টার তৈরি করে তা নিম্নমানের হতে পারে। উপরের উদাহরণে, ক্লাস্টারগুলো 'গোলাকার সঙ্গীত জিনিস', 'চৌকো সঙ্গীত জিনিস', 'ত্রিভুজাকার জিনিস', এবং 'কুকি' গ্রুপ করতে পারে। যদি কিছু সীমাবদ্ধতা বা অনুসরণ করার নিয়ম দেওয়া হয় ("আইটেমটি অবশ্যই প্লাস্টিকের তৈরি হতে হবে", "আইটেমটি সঙ্গীত তৈরি করতে সক্ষম হতে হবে") এটি অ্যালগরিদমকে আরও ভাল পছন্দ করতে সাহায্য করতে পারে। +> উদাহরণ: যদি একটি অ্যালগরিদমকে একটি লেবেলবিহীন বা আংশিক-লেবেলযুক্ত ডেটার ব্যাচে মুক্ত করা হয়, এটি যে ক্লাস্টার তৈরি করবে তা নিম্নমানের হতে পারে। উপরের উদাহরণে, ক্লাস্টারগুলো 'গোলাকার সঙ্গীত জিনিস', 'চৌকো সঙ্গীত জিনিস', 'ত্রিভুজাকার জিনিস', এবং 'কুকি' গ্রুপ করতে পারে। যদি কিছু সীমাবদ্ধতা বা অনুসরণ করার নিয়ম দেওয়া হয় ("আইটেমটি প্লাস্টিকের তৈরি হতে হবে", "আইটেমটি সঙ্গীত তৈরি করতে সক্ষম হতে হবে") এটি অ্যালগরিদমকে আরও ভালো পছন্দ করতে সাহায্য করতে পারে। > > 🎓 'ঘনত্ব' > -> যে ডেটা 'শব্দযুক্ত' বলে বিবেচিত হয় তাকে 'ঘন' বলা হয়। প্রতিটি ক্লাস্টারের পয়েন্টগুলোর মধ্যে দূরত্ব পরীক্ষা করলে দেখা যায় যে এটি বেশি বা কম ঘন, বা 'ভিড়যুক্ত', এবং তাই এই ডেটা বিশ্লেষণ করার জন্য উপযুক্ত ক্লাস্টারিং পদ্ধতি প্রয়োজন। [এই নিবন্ধটি](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) একটি শব্দযুক্ত ডেটাসেটের উপর K-Means ক্লাস্টারিং বনাম HDBSCAN অ্যালগরিদম ব্যবহার করে পার্থক্য প্রদর্শন করে। +> 'শব্দযুক্ত' ডেটাকে 'ঘন' বলে মনে করা হয়। প্রতিটি ক্লাস্টারের পয়েন্টগুলোর মধ্যে দূরত্ব পরীক্ষা করলে দেখা যেতে পারে যে এটি বেশি বা কম ঘন, বা 'ভিড়যুক্ত', এবং তাই এই ডেটা উপযুক্ত ক্লাস্টারিং পদ্ধতি দিয়ে বিশ্লেষণ করা প্রয়োজন। [এই নিবন্ধটি](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) একটি শব্দযুক্ত ডেটাসেটের অসম ক্লাস্টার ঘনত্ব বিশ্লেষণ করতে K-Means ক্লাস্টারিং বনাম HDBSCAN অ্যালগরিদম ব্যবহারের পার্থক্য প্রদর্শন করে। ## ক্লাস্টারিং অ্যালগরিদম -ক্লাস্টারিং-এর জন্য ১০০টিরও বেশি অ্যালগরিদম রয়েছে, এবং সেগুলোর ব্যবহার নির্ভর করে ডেটার প্রকৃতির উপর। আসুন প্রধান কয়েকটি নিয়ে আলোচনা করি: +ক্লাস্টারিং অ্যালগরিদমের সংখ্যা ১০০ এরও বেশি, এবং তাদের ব্যবহার ডেটার প্রকৃতির উপর নির্ভর করে। চলুন কিছু প্রধান অ্যালগরিদম আলোচনা করি: -- **হায়ারার্কিকাল ক্লাস্টারিং**। যদি কোনো বস্তু তার নিকটবর্তী বস্তুর সাথে তার দূরত্বের ভিত্তিতে শ্রেণীবদ্ধ হয়, তবে ক্লাস্টারগুলো তাদের সদস্যদের অন্যান্য বস্তুর সাথে দূরত্বের ভিত্তিতে গঠিত হয়। Scikit-learn-এর agglomerative clustering হায়ারার্কিকাল। +- **হায়ারারকিকাল ক্লাস্টারিং**। যদি একটি বস্তু তার নিকটবর্তী বস্তুর সাথে তার দূরত্বের ভিত্তিতে শ্রেণীবদ্ধ হয়, দূরের বস্তুর সাথে নয়, ক্লাস্টারগুলো তাদের সদস্যদের দূরত্বের ভিত্তিতে গঠিত হয়। Scikit-learn এর agglomerative ক্লাস্টারিং হায়ারারকিকাল। - ![হায়ারার্কিকাল ক্লাস্টারিং ইনফোগ্রাফিক](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.bn.png) - > ইনফোগ্রাফিক: [দাসানি মাদিপল্লি](https://twitter.com/dasani_decoded) + ![হায়ারারকিকাল ক্লাস্টারিং ইনফোগ্রাফিক](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > ইনফোগ্রাফিক: [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **সেন্ট্রয়েড ক্লাস্টারিং**। এই জনপ্রিয় অ্যালগরিদমটি 'k', বা গঠিত ক্লাস্টারের সংখ্যা বেছে নেওয়ার প্রয়োজন হয়, তারপর অ্যালগরিদম একটি ক্লাস্টারের কেন্দ্র বিন্দু নির্ধারণ করে এবং সেই বিন্দুর চারপাশে ডেটা সংগ্রহ করে। [K-means ক্লাস্টারিং](https://wikipedia.org/wiki/K-means_clustering) সেন্ট্রয়েড ক্লাস্টারিং-এর একটি জনপ্রিয় সংস্করণ। কেন্দ্রটি নিকটতম গড় দ্বারা নির্ধারিত হয়, তাই এর নাম। ক্লাস্টারের বর্গ দূরত্ব হ্রাস করা হয়। +- **সেন্ট্রয়েড ক্লাস্টারিং**। এই জনপ্রিয় অ্যালগরিদম 'k', বা তৈরি করার ক্লাস্টারের সংখ্যা নির্বাচন করার প্রয়োজন হয়, এরপর অ্যালগরিদম একটি ক্লাস্টারের কেন্দ্র বিন্দু নির্ধারণ করে এবং সেই বিন্দুর চারপাশে ডেটা সংগ্রহ করে। [K-means ক্লাস্টারিং](https://wikipedia.org/wiki/K-means_clustering) সেন্ট্রয়েড ক্লাস্টারিং এর একটি জনপ্রিয় সংস্করণ। কেন্দ্রটি নিকটতম গড় দ্বারা নির্ধারিত হয়, তাই নামটি। ক্লাস্টারের বর্গ দূরত্ব কমানো হয়। - ![সেন্ট্রয়েড ক্লাস্টারিং ইনফোগ্রাফিক](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.bn.png) - > ইনফোগ্রাফিক: [দাসানি মাদিপল্লি](https://twitter.com/dasani_decoded) + ![সেন্ট্রয়েড ক্লাস্টারিং ইনফোগ্রাফিক](../../../../5-Clustering/1-Visualize/images/centroid.png) + > ইনফোগ্রাফিক: [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **বিতরণ-ভিত্তিক ক্লাস্টারিং**। পরিসংখ্যানগত মডেলিংয়ের উপর ভিত্তি করে, বিতরণ-ভিত্তিক ক্লাস্টারিং একটি ডেটা পয়েন্ট একটি ক্লাস্টারের অন্তর্গত হওয়ার সম্ভাবনা নির্ধারণ করে এবং সেই অনুযায়ী এটি বরাদ্দ করে। Gaussian মিশ্রণ পদ্ধতি এই ধরনের অন্তর্গত। +- **বিতরণ-ভিত্তিক ক্লাস্টারিং**। পরিসংখ্যানগত মডেলিং এর উপর ভিত্তি করে, বিতরণ-ভিত্তিক ক্লাস্টারিং একটি ডেটা পয়েন্ট একটি ক্লাস্টারের অন্তর্ভুক্ত হওয়ার সম্ভাবনা নির্ধারণ করে এবং সেই অনুযায়ী বরাদ্দ করে। Gaussian মিশ্রণ পদ্ধতি এই ধরনের অন্তর্ভুক্ত। -- **ঘনত্ব-ভিত্তিক ক্লাস্টারিং**। ডেটা পয়েন্টগুলো তাদের ঘনত্বের ভিত্তিতে ক্লাস্টারে বরাদ্দ করা হয়, বা তাদের একে অপরের চারপাশে গঠনের ভিত্তিতে। গ্রুপ থেকে দূরে থাকা ডেটা পয়েন্টগুলোকে আউটলায়ার বা শব্দ হিসাবে বিবেচনা করা হয়। DBSCAN, Mean-shift এবং OPTICS এই ধরনের ক্লাস্টারিং-এর অন্তর্গত। +- **ঘনত্ব-ভিত্তিক ক্লাস্টারিং**। ডেটা পয়েন্টগুলো তাদের ঘনত্বের ভিত্তিতে ক্লাস্টারে বরাদ্দ করা হয়, বা তাদের একে অপরের চারপাশে গ্রুপিং এর ভিত্তিতে। গ্রুপ থেকে দূরে থাকা ডেটা পয়েন্টগুলোকে আউটলায়ার বা শব্দ হিসেবে বিবেচনা করা হয়। DBSCAN, Mean-shift এবং OPTICS এই ধরনের অন্তর্ভুক্ত। -- **গ্রিড-ভিত্তিক ক্লাস্টারিং**। বহু-মাত্রিক ডেটাসেটের জন্য, একটি গ্রিড তৈরি করা হয় এবং ডেটা গ্রিডের কোষগুলোর মধ্যে বিভক্ত করা হয়, ফলে ক্লাস্টার তৈরি হয়। +- **গ্রিড-ভিত্তিক ক্লাস্টারিং**। বহু-মাত্রিক ডেটাসেটের জন্য, একটি গ্রিড তৈরি করা হয় এবং ডেটা গ্রিডের কোষগুলোর মধ্যে বিভক্ত করা হয়, ফলে ক্লাস্টার তৈরি হয়। ## অনুশীলন - আপনার ডেটা ক্লাস্টার করুন -ক্লাস্টারিং একটি কৌশল হিসেবে সঠিক ভিজ্যুয়ালাইজেশনের মাধ্যমে অনেক সাহায্য পায়, তাই আসুন আমাদের সঙ্গীত ডেটা ভিজ্যুয়ালাইজ করে শুরু করি। এই অনুশীলনটি আমাদের সিদ্ধান্ত নিতে সাহায্য করবে যে এই ডেটার প্রকৃতির জন্য কোন ক্লাস্টারিং পদ্ধতি সবচেয়ে কার্যকরভাবে ব্যবহার করা উচিত। +ক্লাস্টারিং একটি কৌশল হিসেবে সঠিক ভিজ্যুয়ালাইজেশনের মাধ্যমে অনেক সাহায্য পায়, তাই চলুন আমাদের সঙ্গীত ডেটা ভিজ্যুয়ালাইজ করে শুরু করি। এই অনুশীলনটি আমাদের সিদ্ধান্ত নিতে সাহায্য করবে যে এই ডেটার প্রকৃতির জন্য কোন ক্লাস্টারিং পদ্ধতি সবচেয়ে কার্যকর হবে। -1. এই ফোল্ডারের [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) ফাইলটি খুলুন। +1. এই ফোল্ডারে [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) ফাইলটি খুলুন। -1. ভালো ডেটা ভিজ্যুয়ালাইজেশনের জন্য `Seaborn` প্যাকেজটি ইমপোর্ট করুন। +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) থেকে গান ডেটা যোগ করুন। গানগুলোর ডেটা নিয়ে একটি ডেটাফ্রেম লোড করুন। লাইব্রেরিগুলো ইমপোর্ট করে এবং ডেটা আউটপুট করে এই ডেটা এক্সপ্লোর করার জন্য প্রস্তুত হন: +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 @@ -129,9 +129,10 @@ CO_OP_TRANSLATOR_METADATA: df.head() ``` - ডেটার প্রথম কয়েকটি লাইন পরীক্ষা করুন: + ডেটার প্রথম কয়েকটি লাইন পরীক্ষা করুন: - | | নাম | অ্যালবাম | শিল্পী | শিল্পীর শীর্ষ ঘরানা | প্রকাশের তারিখ | দৈর্ঘ্য | জনপ্রিয়তা | নাচের ক্ষমতা | অ্যাকোস্টিকনেস | শক্তি | ইন্সট্রুমেন্টালনেস | লাইভনেস | লাউ + | | নাম | অ্যালবাম | শিল্পী | শিল্পীর প্রধান ঘরানা | প্রকাশের তারিখ | দৈর্ঘ্য | জনপ্রিয়তা | নাচের ক্ষমতা | অ্যাকোস্টিকনেস | শক্তি | ইনস্ট্রুমেন্টালনেস | লাইভনেস | শব্দের মাত্রা | বক্তৃতার ক্ষমতা | টেম্পো | সময়ের সিগনেচার | + | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | 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 | @@ -142,7 +143,7 @@ CO_OP_TRANSLATOR_METADATA: df.info() ``` - আউটপুট দেখতে এরকম: + আউটপুট দেখতে এমন হবে: ```output @@ -215,7 +216,7 @@ CO_OP_TRANSLATOR_METADATA: | 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' হতে পারে, যা এমন গানগুলো দেখায় যেগুলোর কোনো র‍্যাংকিং নেই। আসুন এগুলো শীঘ্রই সরিয়ে ফেলি। @@ -231,11 +232,11 @@ CO_OP_TRANSLATOR_METADATA: plt.title('Top genres',color = 'blue') ``` - ![most popular](../../../../translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.bn.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) ✅ যদি আপনি আরও শীর্ষ মান দেখতে চান, তাহলে `[:5]`-কে বড় মানে পরিবর্তন করুন, অথবা সরিয়ে ফেলুন সব দেখতে। -লক্ষ্য করুন, যখন শীর্ষ ঘরানা 'Missing' হিসেবে বর্ণিত হয়, তখন এর মানে Spotify এটি শ্রেণীবদ্ধ করেনি, তাই আসুন এটি সরিয়ে ফেলি। +লক্ষ্য করুন, যখন শীর্ষ ঘরানা 'Missing' হিসেবে বর্ণিত হয়, তখন এর অর্থ হলো Spotify এটি শ্রেণীবদ্ধ করেনি, তাই আসুন এটি সরিয়ে ফেলি। 1. মিসিং ডেটা সরিয়ে ফেলুন ফিল্টারিং করে @@ -250,9 +251,9 @@ CO_OP_TRANSLATOR_METADATA: এখন ঘরানাগুলো পুনরায় পরীক্ষা করুন: - ![most popular](../../../../translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.bn.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) -1. স্পষ্টভাবে, শীর্ষ তিনটি ঘরানা এই ডেটাসেটে আধিপত্য বিস্তার করে। আসুন `afro dancehall`, `afropop`, এবং `nigerian pop`-এ মনোযোগ দিই, এবং অতিরিক্তভাবে ডেটাসেট থেকে এমন কিছু সরিয়ে ফেলি যার জনপ্রিয়তা মান 0 (যার মানে এটি ডেটাসেটে জনপ্রিয়তা দিয়ে শ্রেণীবদ্ধ হয়নি এবং আমাদের উদ্দেশ্যে এটি শোরগোল হিসেবে বিবেচিত হতে পারে): +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')] @@ -272,13 +273,13 @@ CO_OP_TRANSLATOR_METADATA: sns.heatmap(corrmat, vmax=.8, square=True) ``` - ![correlations](../../../../translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.bn.png) + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) - একমাত্র শক্তিশালী সম্পর্ক `energy` এবং `loudness`-এর মধ্যে, যা খুবই স্বাভাবিক, কারণ জোরে গান সাধারণত বেশ শক্তিশালী হয়। অন্যথায়, সম্পর্কগুলো তুলনামূলকভাবে দুর্বল। এটি দেখতে আকর্ষণীয় হবে যে একটি ক্লাস্টারিং অ্যালগরিদম এই ডেটা থেকে কী বের করতে পারে। + একমাত্র শক্তিশালী সম্পর্ক হলো `energy` এবং `loudness`-এর মধ্যে, যা খুবই স্বাভাবিক, কারণ জোরে বাজানো গান সাধারণত বেশ শক্তিশালী হয়। অন্যথায়, সম্পর্কগুলো তুলনামূলকভাবে দুর্বল। এটি দেখতে আকর্ষণীয় হবে যে একটি ক্লাস্টারিং অ্যালগরিদম এই ডেটা থেকে কী বের করতে পারে। - > 🎓 মনে রাখুন, সম্পর্ক কারণ নির্দেশ করে না! আমাদের কাছে সম্পর্কের প্রমাণ আছে, কিন্তু কারণের প্রমাণ নেই। একটি [মজার ওয়েবসাইট](https://tylervigen.com/spurious-correlations) কিছু ভিজ্যুয়াল দেখায় যা এই পয়েন্টটি জোর দেয়। + > 🎓 মনে রাখুন, সম্পর্ক মানেই কারণ নয়! আমাদের কাছে সম্পর্কের প্রমাণ আছে, কিন্তু কারণের প্রমাণ নেই। একটি [মজার ওয়েবসাইট](https://tylervigen.com/spurious-correlations) কিছু ভিজ্যুয়াল দেখায় যা এই বিষয়টি জোর দিয়ে তুলে ধরে। -এই ডেটাসেটে একটি গানের জনপ্রিয়তা এবং নাচের যোগ্যতার মধ্যে কোনো মিল আছে কি? একটি FacetGrid দেখায় যে ঘরানার পার্থক্য সত্ত্বেও কিছু কেন্দ্রীভূত বৃত্ত রয়েছে। হতে পারে যে নাইজেরিয়ান স্বাদ এই ঘরানার জন্য একটি নির্দিষ্ট নাচের যোগ্যতার স্তরে মিলিত হয়? +এই ডেটাসেটে একটি গানের জনপ্রিয়তা এবং নাচের যোগ্যতার মধ্যে কোনো মিল আছে কি? একটি FacetGrid দেখায় যে ঘরানার পার্থক্য ছাড়াই কিছু কেন্দ্রীভূত বৃত্ত রয়েছে। এটি কি হতে পারে যে নাইজেরিয়ান রুচি এই ঘরানার জন্য একটি নির্দিষ্ট নাচের যোগ্যতার স্তরে মিলিত হয়? ✅ বিভিন্ন ডেটাপয়েন্ট (energy, loudness, speechiness) এবং আরও বা ভিন্ন সঙ্গীত ঘরানা চেষ্টা করুন। আপনি কী আবিষ্কার করতে পারেন? ডেটার সাধারণ বিস্তৃতি দেখতে `df.describe()` টেবিলটি দেখুন। @@ -300,11 +301,11 @@ CO_OP_TRANSLATOR_METADATA: আপনি একটি সাধারণ মিলন বিন্দুর চারপাশে কেন্দ্রীভূত বৃত্ত আবিষ্কার করতে পারেন, যা পয়েন্টগুলোর বিতরণ দেখায়। - > 🎓 লক্ষ্য করুন যে এই উদাহরণটি একটি KDE (Kernel Density Estimate) গ্রাফ ব্যবহার করে যা ডেটাকে একটি ধারাবাহিক সম্ভাব্যতা ঘনত্ব বক্ররেখা দিয়ে উপস্থাপন করে। এটি আমাদের একাধিক বিতরণের সাথে কাজ করার সময় ডেটা ব্যাখ্যা করতে সাহায্য করে। + > 🎓 লক্ষ্য করুন, এই উদাহরণটি একটি KDE (Kernel Density Estimate) গ্রাফ ব্যবহার করে যা ডেটাকে একটি ধারাবাহিক সম্ভাব্য ঘনত্ব বক্ররেখা দিয়ে উপস্থাপন করে। এটি আমাদের একাধিক বিতরণ নিয়ে কাজ করার সময় ডেটা ব্যাখ্যা করতে সাহায্য করে। - সাধারণভাবে, তিনটি ঘরানা তাদের জনপ্রিয়তা এবং নাচের যোগ্যতার ক্ষেত্রে আলগাভাবে মিলিত হয়। এই আলগাভাবে মিলিত ডেটায় ক্লাস্টার নির্ধারণ করা একটি চ্যালেঞ্জ হবে: + সাধারণভাবে, তিনটি ঘরানা জনপ্রিয়তা এবং নাচের যোগ্যতার ক্ষেত্রে আলগাভাবে মিলিত হয়। এই আলগা-সংযুক্ত ডেটায় ক্লাস্টার নির্ধারণ করা একটি চ্যালেঞ্জ হবে: - ![distribution](../../../../translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.bn.png) + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) 1. একটি স্ক্যাটার প্লট তৈরি করুন: @@ -314,11 +315,11 @@ CO_OP_TRANSLATOR_METADATA: .add_legend() ``` - একই অক্ষের স্ক্যাটারপ্লট একটি মিলিত প্যাটার্ন দেখায় + একই অক্ষের একটি স্ক্যাটারপ্লট একটি মিলিত প্যাটার্ন দেখায় - ![Facetgrid](../../../../translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.bn.png) + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) -সাধারণভাবে, ক্লাস্টারিংয়ের জন্য, আপনি ডেটার ক্লাস্টার দেখানোর জন্য স্ক্যাটারপ্লট ব্যবহার করতে পারেন, তাই এই ধরনের ভিজ্যুয়ালাইজেশন আয়ত্ত করা খুবই কার্যকর। পরবর্তী পাঠে, আমরা এই ফিল্টার করা ডেটা নিয়ে k-means ক্লাস্টারিং ব্যবহার করব যাতে এই ডেটায় আকর্ষণীয় উপায়ে ওভারল্যাপ করা গ্রুপগুলো আবিষ্কার করা যায়। +সাধারণভাবে, ক্লাস্টারিংয়ের জন্য, আপনি ডেটার ক্লাস্টার দেখানোর জন্য স্ক্যাটারপ্লট ব্যবহার করতে পারেন, তাই এই ধরনের ভিজ্যুয়ালাইজেশন আয়ত্ত করা খুবই কার্যকর। পরবর্তী পাঠে, আমরা এই ফিল্টার করা ডেটা নিয়ে কাজ করব এবং k-means ক্লাস্টারিং ব্যবহার করে এই ডেটায় এমন গ্রুপ আবিষ্কার করব যা আকর্ষণীয়ভাবে ওভারল্যাপ করে। --- @@ -326,13 +327,13 @@ CO_OP_TRANSLATOR_METADATA: পরবর্তী পাঠের প্রস্তুতির জন্য, একটি চার্ট তৈরি করুন বিভিন্ন ক্লাস্টারিং অ্যালগরিদম সম্পর্কে যা আপনি আবিষ্কার করতে পারেন এবং প্রোডাকশন পরিবেশে ব্যবহার করতে পারেন। ক্লাস্টারিং কী ধরনের সমস্যার সমাধান করার চেষ্টা করছে? -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা ও স্ব-অধ্যয়ন ক্লাস্টারিং অ্যালগরিদম প্রয়োগ করার আগে, আমরা শিখেছি, আপনার ডেটাসেটের প্রকৃতি বোঝা একটি ভালো ধারণা। এই বিষয়ে আরও পড়ুন [এখানে](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) -[এই সহায়ক নিবন্ধটি](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) বিভিন্ন ক্লাস্টারিং অ্যালগরিদমের আচরণ ব্যাখ্যা করে, বিভিন্ন ডেটা আকারের ভিত্তিতে। +[এই সহায়ক নিবন্ধটি](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) বিভিন্ন ডেটা আকারের ভিত্তিতে বিভিন্ন ক্লাস্টারিং অ্যালগরিদম কীভাবে আচরণ করে তা ব্যাখ্যা করে। ## অ্যাসাইনমেন্ট diff --git a/translations/bn/5-Clustering/2-K-Means/README.md b/translations/bn/5-Clustering/2-K-Means/README.md index 396939347..f1413a289 100644 --- a/translations/bn/5-Clustering/2-K-Means/README.md +++ b/translations/bn/5-Clustering/2-K-Means/README.md @@ -1,17 +1,17 @@ # K-Means ক্লাস্টারিং -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -এই পাঠে, আপনি Scikit-learn এবং পূর্বে আমদানি করা নাইজেরিয়ান মিউজিক ডেটাসেট ব্যবহার করে ক্লাস্টার তৈরি করতে শিখবেন। আমরা ক্লাস্টারিংয়ের জন্য K-Means এর মৌলিক বিষয়গুলি আলোচনা করব। মনে রাখবেন, পূর্বের পাঠে আপনি শিখেছেন যে ক্লাস্টার নিয়ে কাজ করার অনেক পদ্ধতি রয়েছে এবং আপনি যে পদ্ধতি ব্যবহার করবেন তা আপনার ডেটার উপর নির্ভর করে। আমরা K-Means চেষ্টা করব কারণ এটি সবচেয়ে সাধারণ ক্লাস্টারিং কৌশল। চলুন শুরু করি! +এই পাঠে, আপনি Scikit-learn এবং পূর্বে আমদানি করা নাইজেরিয়ান মিউজিক ডেটাসেট ব্যবহার করে ক্লাস্টার তৈরি করতে শিখবেন। আমরা ক্লাস্টারিংয়ের জন্য K-Means এর মৌলিক বিষয়গুলি আলোচনা করব। মনে রাখবেন, আগের পাঠে আপনি শিখেছেন যে ক্লাস্টারের সাথে কাজ করার অনেক পদ্ধতি রয়েছে এবং আপনি যে পদ্ধতি ব্যবহার করবেন তা আপনার ডেটার উপর নির্ভর করে। আমরা K-Means চেষ্টা করব কারণ এটি সবচেয়ে সাধারণ ক্লাস্টারিং কৌশল। চলুন শুরু করি! আপনি যেসব শব্দ শিখবেন: @@ -22,26 +22,26 @@ CO_OP_TRANSLATOR_METADATA: ## পরিচিতি -[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) একটি পদ্ধতি যা সিগন্যাল প্রসেসিং ডোমেইন থেকে উদ্ভূত। এটি ডেটার গ্রুপগুলোকে 'k' ক্লাস্টারে ভাগ এবং বিভাজন করতে ব্যবহৃত হয় একটি পর্যবেক্ষণের সিরিজ ব্যবহার করে। প্রতিটি পর্যবেক্ষণ একটি নির্দিষ্ট ডেটাপয়েন্টকে তার নিকটতম 'mean' বা ক্লাস্টারের কেন্দ্রবিন্দুর সাথে গ্রুপ করতে কাজ করে। +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) একটি পদ্ধতি যা সিগন্যাল প্রসেসিং ডোমেইন থেকে উদ্ভূত। এটি ডেটার গ্রুপগুলোকে 'k' সংখ্যক ক্লাস্টারে ভাগ করার জন্য ব্যবহার করা হয়, যেখানে একটি সিরিজ অবজারভেশন ব্যবহার করা হয়। প্রতিটি অবজারভেশন একটি নির্দিষ্ট ডেটাপয়েন্টকে তার নিকটতম 'mean' বা ক্লাস্টারের কেন্দ্রবিন্দুর সাথে গ্রুপ করতে কাজ করে। ক্লাস্টারগুলোকে [Voronoi diagrams](https://wikipedia.org/wiki/Voronoi_diagram) হিসেবে চিত্রিত করা যায়, যেখানে একটি পয়েন্ট (বা 'seed') এবং তার সংশ্লিষ্ট অঞ্চল অন্তর্ভুক্ত থাকে। -![voronoi diagram](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.bn.png) +![voronoi diagram](../../../../5-Clustering/2-K-Means/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. তারপর এটি নতুন এবং পুরনো সেন্ট্রয়েডের মধ্যে পার্থক্য গণনা করে এবং সেন্ট্রয়েড স্থিতিশীল না হওয়া পর্যন্ত পুনরাবৃত্তি করে। +1. অ্যালগরিদম ডেটাসেট থেকে k-সংখ্যক কেন্দ্রবিন্দু নির্বাচন করে। এরপর এটি লুপ করে: + 1. প্রতিটি নমুনাকে নিকটতম সেন্ট্রয়েডে অ্যাসাইন করে। + 2. পূর্ববর্তী সেন্ট্রয়েডে অ্যাসাইন করা সমস্ত নমুনার গড় মান নিয়ে নতুন সেন্ট্রয়েড তৈরি করে। + 3. তারপর নতুন এবং পুরনো সেন্ট্রয়েডের পার্থক্য গণনা করে এবং সেন্ট্রয়েড স্থিতিশীল না হওয়া পর্যন্ত পুনরাবৃত্তি করে। -K-Means ব্যবহারের একটি অসুবিধা হল আপনাকে 'k', অর্থাৎ সেন্ট্রয়েডের সংখ্যা নির্ধারণ করতে হবে। সৌভাগ্যক্রমে, 'elbow method' একটি ভালো প্রাথমিক মান অনুমান করতে সাহায্য করে। আপনি এটি একটু পরে চেষ্টা করবেন। +K-Means ব্যবহারের একটি অসুবিধা হলো আপনাকে 'k', অর্থাৎ সেন্ট্রয়েডের সংখ্যা নির্ধারণ করতে হবে। সৌভাগ্যক্রমে, 'elbow method' একটি ভালো প্রাথমিক মান অনুমান করতে সাহায্য করে। আপনি এটি একটু পরে চেষ্টা করবেন। ## পূর্বশর্ত -আপনি এই পাঠের [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) ফাইলটি ব্যবহার করবেন, যেখানে আপনি আগের পাঠে ডেটা আমদানি এবং প্রাথমিক পরিষ্কারকরণ করেছেন। +আপনি এই পাঠের [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) ফাইলটি ব্যবহার করবেন, যেখানে আগের পাঠে আপনি ডেটা আমদানি এবং প্রাথমিক পরিষ্কারকরণ করেছেন। ## অনুশীলন - প্রস্তুতি @@ -89,13 +89,13 @@ K-Means ব্যবহারের একটি অসুবিধা হল sns.boxplot(x = 'release_date', data = df) ``` - এই ডেটা কিছুটা গোলমেলে: প্রতিটি কলামকে বক্সপ্লট হিসেবে পর্যবেক্ষণ করে আপনি আউটলায়ার দেখতে পারেন। + এই ডেটা কিছুটা অগোছালো: প্রতিটি কলামকে বক্সপ্লট হিসেবে পর্যবেক্ষণ করে আপনি আউটলায়ার দেখতে পারেন। - ![outliers](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.bn.png) + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) -আপনি ডেটাসেটটি পর্যালোচনা করে এই আউটলায়ারগুলো সরিয়ে ফেলতে পারেন, তবে এটি ডেটাকে বেশ কমিয়ে দেবে। +আপনি ডেটাসেটটি পর্যালোচনা করে এই আউটলায়ারগুলো সরিয়ে ফেলতে পারেন, তবে এতে ডেটা বেশ কম হয়ে যাবে। -1. আপাতত, আপনি কোন কলামগুলো ক্লাস্টারিং অনুশীলনের জন্য ব্যবহার করবেন তা নির্বাচন করুন। একই রেঞ্জের কলামগুলো বেছে নিন এবং `artist_top_genre` কলামটিকে সংখ্যাসূচক ডেটা হিসেবে এনকোড করুন: +1. আপাতত, ক্লাস্টারিং অনুশীলনের জন্য আপনি কোন কলামগুলো ব্যবহার করবেন তা নির্বাচন করুন। একই রেঞ্জের কলামগুলো বেছে নিন এবং `artist_top_genre` কলামটিকে সংখ্যায় পরিণত করুন: ```python from sklearn.preprocessing import LabelEncoder @@ -127,7 +127,7 @@ K-Means ব্যবহারের একটি অসুবিধা হল y_cluster_kmeans ``` -আপনি একটি অ্যারে দেখতে পাবেন যা প্রতিটি ডেটাফ্রেমের সারির জন্য পূর্বাভাসিত ক্লাস্টার (0, 1, বা 2) প্রিন্ট করে। +আপনি একটি অ্যারে দেখতে পাবেন যেখানে প্রতিটি ডেটাফ্রেমের সারির জন্য পূর্বাভাসিত ক্লাস্টার (0, 1, বা 2) রয়েছে। 1. এই অ্যারে ব্যবহার করে একটি 'সিলুয়েট স্কোর' গণনা করুন: @@ -139,7 +139,7 @@ K-Means ব্যবহারের একটি অসুবিধা হল ## সিলুয়েট স্কোর -একটি সিলুয়েট স্কোর 1 এর কাছাকাছি দেখুন। এই স্কোর -1 থেকে 1 পর্যন্ত পরিবর্তিত হয়, এবং যদি স্কোর 1 হয়, তাহলে ক্লাস্টারটি ঘন এবং অন্যান্য ক্লাস্টার থেকে ভালোভাবে পৃথক। 0 এর কাছাকাছি একটি মান ক্লাস্টারগুলোর মধ্যে ওভারল্যাপ নির্দেশ করে, যেখানে নমুনাগুলো প্রতিবেশী ক্লাস্টারের সিদ্ধান্ত সীমার খুব কাছাকাছি থাকে। [(উৎস)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) +একটি সিলুয়েট স্কোর 1 এর কাছাকাছি দেখুন। এই স্কোর -1 থেকে 1 পর্যন্ত পরিবর্তিত হয়, এবং যদি স্কোর 1 হয়, তাহলে ক্লাস্টার ঘন এবং অন্যান্য ক্লাস্টার থেকে ভালোভাবে পৃথক। 0 এর কাছাকাছি একটি মান ক্লাস্টারগুলোর মধ্যে ওভারল্যাপ নির্দেশ করে, যেখানে নমুনাগুলো প্রতিবেশী ক্লাস্টারের সিদ্ধান্ত সীমার খুব কাছাকাছি থাকে। [(উৎস)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) আমাদের স্কোর **.53**, যা মাঝামাঝি। এটি নির্দেশ করে যে আমাদের ডেটা এই ধরনের ক্লাস্টারিংয়ের জন্য বিশেষভাবে উপযুক্ত নয়, তবে চলুন এগিয়ে যাই। @@ -158,23 +158,23 @@ K-Means ব্যবহারের একটি অসুবিধা হল ``` - এখানে কয়েকটি অংশ রয়েছে যা ব্যাখ্যা করার যোগ্য। + এখানে কয়েকটি অংশ ব্যাখ্যা করার মতো: > 🎓 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) + > 🎓 WCSS: "within-cluster sums of squares" একটি ক্লাস্টারের সেন্ট্রয়েডের সাথে সমস্ত পয়েন্টের গড় দূরত্বের বর্গ পরিমাপ করে। [উৎস](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce) - > 🎓 Inertia: K-Means অ্যালগরিদমগুলো সেন্ট্রয়েড নির্বাচন করার চেষ্টা করে যাতে 'inertia' কমানো যায়, যা "ক্লাস্টারগুলো কতটা অভ্যন্তরীণভাবে সঙ্গতিপূর্ণ তার একটি পরিমাপ।" [উৎস](https://scikit-learn.org/stable/modules/clustering.html)। এই মানটি প্রতিটি পুনরাবৃত্তিতে wcss ভেরিয়েবলে যোগ করা হয়। + > 🎓 Inertia: K-Means অ্যালগরিদম 'inertia' কমানোর জন্য সেন্ট্রয়েড নির্বাচন করার চেষ্টা করে, যা "ক্লাস্টারগুলোর অভ্যন্তরীণ সামঞ্জস্যের একটি পরিমাপ।" [উৎস](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++' অপ্টিমাইজেশন ব্যবহার করতে পারেন, যা "সেন্ট্রয়েডগুলোকে সাধারণত একে অপরের থেকে দূরে ইনিশিয়ালাইজ করে, যা র্যান্ডম ইনিশিয়ালাইজেশনের চেয়ে সম্ভবত ভালো ফলাফল দেয়।" ### এলবো পদ্ধতি -পূর্বে, আপনি অনুমান করেছিলেন যে, যেহেতু আপনি ৩টি গান জেনার লক্ষ্য করেছেন, আপনাকে ৩টি ক্লাস্টার বেছে নেওয়া উচিত। কিন্তু তা কি সত্যিই সঠিক? +আগে আপনি অনুমান করেছিলেন যে, যেহেতু আপনি ৩টি গান জেনার লক্ষ্য করেছেন, তাই আপনাকে ৩টি ক্লাস্টার বেছে নিতে হবে। কিন্তু কি সত্যিই তাই? -1. নিশ্চিত করতে 'এলবো পদ্ধতি' ব্যবহার করুন। +1. নিশ্চিত হতে 'elbow method' ব্যবহার করুন। ```python plt.figure(figsize=(10,5)) @@ -187,7 +187,7 @@ K-Means ব্যবহারের একটি অসুবিধা হল পূর্ববর্তী ধাপে তৈরি করা `wcss` ভেরিয়েবল ব্যবহার করে একটি চার্ট তৈরি করুন যা এলবোতে 'বাঁক' দেখায়, যা ক্লাস্টারের সর্বোত্তম সংখ্যা নির্দেশ করে। হয়তো এটি **৩**! - ![elbow method](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.bn.png) + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) ## অনুশীলন - ক্লাস্টারগুলো প্রদর্শন করুন @@ -218,20 +218,20 @@ K-Means ব্যবহারের একটি অসুবিধা হল এই মডেলের সঠিকতা খুব ভালো নয়, এবং ক্লাস্টারগুলোর আকৃতি আপনাকে একটি ইঙ্গিত দেয় কেন। - ![clusters](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.bn.png) + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) - এই ডেটা খুবই অসমতল, খুব কম সম্পর্কযুক্ত এবং কলাম মানগুলোর মধ্যে খুব বেশি ভ্যারিয়েন্স রয়েছে যা ভালোভাবে ক্লাস্টার করতে পারে। প্রকৃতপক্ষে, গঠিত ক্লাস্টারগুলো সম্ভবত উপরে সংজ্ঞায়িত তিনটি জেনার বিভাগ দ্বারা প্রভাবিত বা বিকৃত হয়েছে। এটি একটি শেখার প্রক্রিয়া ছিল! + এই ডেটা খুবই অসমতল, খুব কম সম্পর্কযুক্ত এবং কলাম মানগুলোর মধ্যে খুব বেশি ভ্যারিয়েন্স রয়েছে যা ভালোভাবে ক্লাস্টার করতে পারে। প্রকৃতপক্ষে, গঠিত ক্লাস্টারগুলো সম্ভবত উপরে সংজ্ঞায়িত তিনটি জেনার ক্যাটাগরির দ্বারা প্রভাবিত বা বিকৃত হয়েছে। এটি একটি শেখার প্রক্রিয়া ছিল! Scikit-learn এর ডকুমেন্টেশনে, আপনি দেখতে পারেন যে এই ধরনের একটি মডেল, যেখানে ক্লাস্টারগুলো খুব ভালোভাবে চিহ্নিত নয়, একটি 'ভ্যারিয়েন্স' সমস্যা রয়েছে: - ![problem models](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.bn.png) + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) > ইনফোগ্রাফিক: Scikit-learn ## ভ্যারিয়েন্স -ভ্যারিয়েন্সকে "Mean থেকে বর্গ পার্থক্যের গড়" হিসেবে সংজ্ঞায়িত করা হয় [(উৎস)](https://www.mathsisfun.com/data/standard-deviation.html)। এই ক্লাস্টারিং সমস্যার প্রসঙ্গে, এটি নির্দেশ করে যে আমাদের ডেটাসেটের সংখ্যাগুলো Mean থেকে একটু বেশিই বিচ্যুত হতে থাকে। +ভ্যারিয়েন্সকে "Mean থেকে বর্গ পার্থক্যের গড়" হিসেবে সংজ্ঞায়িত করা হয় [(উৎস)](https://www.mathsisfun.com/data/standard-deviation.html)। এই ক্লাস্টারিং সমস্যার প্রসঙ্গে, এটি নির্দেশ করে যে আমাদের ডেটাসেটের সংখ্যাগুলো Mean থেকে একটু বেশি বিচ্যুত হতে থাকে। -✅ এটি একটি চমৎকার মুহূর্ত যেখানে আপনি এই সমস্যাটি ঠিক করার সমস্ত উপায় নিয়ে চিন্তা করতে পারেন। ডেটা আরও সামঞ্জস্য করুন? ভিন্ন কলাম ব্যবহার করুন? ভিন্ন অ্যালগরিদম ব্যবহার করুন? ইঙ্গিত: আপনার ডেটা [স্কেলিং](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) করে স্বাভাবিক করুন এবং অন্যান্য কলাম পরীক্ষা করুন। +✅ এটি একটি ভালো মুহূর্ত এই সমস্যাটি সমাধানের সমস্ত উপায় নিয়ে চিন্তা করার। ডেটা আরও পরিবর্তন করবেন? ভিন্ন কলাম ব্যবহার করবেন? ভিন্ন অ্যালগরিদম ব্যবহার করবেন? ইঙ্গিত: আপনার ডেটা [স্কেলিং](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) করে স্বাভাবিক করুন এবং অন্যান্য কলাম পরীক্ষা করুন। > এই '[ভ্যারিয়েন্স ক্যালকুলেটর](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' ব্যবহার করে ধারণাটি আরও ভালোভাবে বুঝুন। @@ -239,17 +239,17 @@ K-Means ব্যবহারের একটি অসুবিধা হল ## 🚀চ্যালেঞ্জ -এই নোটবুক নিয়ে কিছু সময় ব্যয় করুন, প্যারামিটারগুলো সামঞ্জস্য করুন। আউটলায়ার সরিয়ে ডেটা আরও পরিষ্কার করে মডেলের সঠিকতা উন্নত করতে পারেন কি? আপনি নির্দিষ্ট ডেটা নমুনাগুলোকে আরও বেশি ওজন দিতে ওজন ব্যবহার করতে পারেন। আরও ভালো ক্লাস্টার তৈরি করতে আপনি আর কী করতে পারেন? +এই নোটবুক নিয়ে কিছু সময় ব্যয় করুন, প্যারামিটারগুলো পরিবর্তন করুন। আপনি কি আউটলায়ার সরিয়ে ডেটা আরও পরিষ্কার করে মডেলের সঠিকতা উন্নত করতে পারেন? আপনি নির্দিষ্ট ডেটা নমুনাগুলোকে বেশি ওজন দিতে ওজন ব্যবহার করতে পারেন। আরও ভালো ক্লাস্টার তৈরি করতে আপনি আর কী করতে পারেন? -ইঙ্গিত: আপনার ডেটা স্কেল করার চেষ্টা করুন। নোটবুকে মন্তব্য করা কোড রয়েছে যা স্ট্যান্ডার্ড স্কেলিং যোগ করে যাতে ডেটা কলামগুলো রেঞ্জের ক্ষেত্রে একে অপরের সাথে আরও ঘনিষ্ঠভাবে সাদৃশ্যপূর্ণ হয়। আপনি দেখতে পাবেন যে সিলুয়েট স্কোর কমে যায়, তবে এলবো গ্রাফের 'বাঁক' মসৃণ হয়ে যায়। এর কারণ হল ডেটা স্কেল না করলে কম ভ্যারিয়েন্সযুক্ত ডেটা বেশি ওজন বহন করতে পারে। এই সমস্যাটি সম্পর্কে আরও পড়ুন [এখানে](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://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা ও স্ব-অধ্যয়ন -একটি K-Means সিমুলেটর [যেমন এটি](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/) দেখুন। আপনি এই টুলটি ব্যবহার করে নমুনা ডেটা পয়েন্টগুলো চিত্রিত করতে এবং এর সেন্ট্রয়েড নির্ধারণ করতে পারেন। আপনি ডেটার র্যান্ডমনেস, ক্লাস্টারের সংখ্যা এবং সেন্ট্রয়েডের সংখ্যা সম্পাদনা করতে পারেন। এটি কি আপনাকে ডেটা কীভাবে গ্রুপ করা যায় সে সম্পর্কে ধারণা পেতে সাহায্য করে? +একটি K-Means সিমুলেটর দেখুন [যেমন এটি](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/)। আপনি এই টুলটি ব্যবহার করে নমুনা ডেটা পয়েন্টগুলো চিত্রিত করতে এবং এর সেন্ট্রয়েড নির্ধারণ করতে পারেন। আপনি ডেটার র্যান্ডমনেস, ক্লাস্টারের সংখ্যা এবং সেন্ট্রয়েডের সংখ্যা সম্পাদনা করতে পারেন। এটি কি আপনাকে ধারণা দেয় যে ডেটা কীভাবে গ্রুপ করা যেতে পারে? -এছাড়াও, [Stanford থেকে এই K-Means হ্যান্ডআউট](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) দেখুন। +এছাড়াও, [Stanford এর এই K-Means হ্যান্ডআউট](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) দেখুন। ## অ্যাসাইনমেন্ট @@ -258,4 +258,4 @@ K-Means ব্যবহারের একটি অসুবিধা হল --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file diff --git a/translations/bn/6-NLP/1-Introduction-to-NLP/README.md b/translations/bn/6-NLP/1-Introduction-to-NLP/README.md index 7c7b74238..a46d417e3 100644 --- a/translations/bn/6-NLP/1-Introduction-to-NLP/README.md +++ b/translations/bn/6-NLP/1-Introduction-to-NLP/README.md @@ -1,58 +1,58 @@ # প্রাকৃতিক ভাষা প্রক্রিয়াকরণে পরিচিতি -এই পাঠে *প্রাকৃতিক ভাষা প্রক্রিয়াকরণ* (NLP), যা *কম্পিউটেশনাল লিঙ্গুইস্টিকস* এর একটি শাখা, এর সংক্ষিপ্ত ইতিহাস এবং গুরুত্বপূর্ণ ধারণাগুলি আলোচনা করা হয়েছে। +এই পাঠে *প্রাকৃতিক ভাষা প্রক্রিয়াকরণ*, যা *কম্পিউটেশনাল ভাষাবিজ্ঞান* এর একটি শাখা, এর সংক্ষিপ্ত ইতিহাস এবং গুরুত্বপূর্ণ ধারণাগুলি আলোচনা করা হয়েছে। -## [পাঠের পূর্ববর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/31/) +## [পাঠের পূর্বে কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পরিচিতি -NLP, যা সাধারণত পরিচিত, মেশিন লার্নিং প্রয়োগ এবং প্রোডাকশন সফটওয়্যারে ব্যবহৃত সবচেয়ে পরিচিত ক্ষেত্রগুলির মধ্যে একটি। +NLP, যা সাধারণত পরিচিত, মেশিন লার্নিংয়ের অন্যতম পরিচিত ক্ষেত্র যেখানে এটি প্রোডাকশন সফটওয়্যারে প্রয়োগ এবং ব্যবহার করা হয়েছে। -✅ আপনি কি এমন কোনো সফটওয়্যারের কথা ভাবতে পারেন যা আপনি প্রতিদিন ব্যবহার করেন এবং যেখানে সম্ভবত কিছু NLP অন্তর্ভুক্ত রয়েছে? আপনার ওয়ার্ড প্রসেসিং প্রোগ্রাম বা মোবাইল অ্যাপ্লিকেশনগুলির কথা ভাবুন যা আপনি নিয়মিত ব্যবহার করেন। +✅ আপনি কি এমন কোনো সফটওয়্যারের কথা ভাবতে পারেন যা আপনি প্রতিদিন ব্যবহার করেন এবং যেখানে সম্ভবত কিছু NLP অন্তর্ভুক্ত রয়েছে? আপনার শব্দ প্রক্রিয়াকরণ প্রোগ্রাম বা মোবাইল অ্যাপ্লিকেশনগুলি সম্পর্কে কী যা আপনি নিয়মিত ব্যবহার করেন? আপনি শিখবেন: -- **ভাষার ধারণা**। ভাষাগুলি কীভাবে বিকশিত হয়েছে এবং অধ্যয়নের প্রধান ক্ষেত্রগুলি কী ছিল। -- **সংজ্ঞা এবং ধারণা**। আপনি শিখবেন কীভাবে কম্পিউটার টেক্সট প্রক্রিয়া করে, যেমন পার্সিং, ব্যাকরণ, এবং বিশেষ্য ও ক্রিয়াপদ চিহ্নিত করা। এই পাঠে কিছু কোডিং কাজ রয়েছে এবং বেশ কয়েকটি গুরুত্বপূর্ণ ধারণা উপস্থাপন করা হয়েছে যা আপনি পরবর্তী পাঠে কোড করতে শিখবেন। +- **ভাষার ধারণা**। ভাষা কীভাবে বিকশিত হয়েছে এবং প্রধান অধ্যয়নের ক্ষেত্রগুলি কী ছিল। +- **সংজ্ঞা এবং ধারণা**। আপনি শিখবেন কীভাবে কম্পিউটার টেক্সট প্রক্রিয়া করে, যার মধ্যে রয়েছে পার্সিং, ব্যাকরণ, এবং বিশেষ্য ও ক্রিয়াপদ চিহ্নিত করা। এই পাঠে কিছু কোডিং কাজ রয়েছে এবং বেশ কয়েকটি গুরুত্বপূর্ণ ধারণা উপস্থাপন করা হয়েছে যা আপনি পরবর্তী পাঠে কোড করতে শিখবেন। -## কম্পিউটেশনাল লিঙ্গুইস্টিকস +## কম্পিউটেশনাল ভাষাবিজ্ঞান -কম্পিউটেশনাল লিঙ্গুইস্টিকস কয়েক দশকের গবেষণা এবং উন্নয়নের একটি ক্ষেত্র যা অধ্যয়ন করে কীভাবে কম্পিউটার ভাষার সাথে কাজ করতে পারে, এমনকি বুঝতে, অনুবাদ করতে এবং যোগাযোগ করতে পারে। প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) একটি সম্পর্কিত ক্ষেত্র যা কম্পিউটার কীভাবে 'প্রাকৃতিক', বা মানব, ভাষা প্রক্রিয়া করতে পারে তার উপর ফোকাস করে। +কম্পিউটেশনাল ভাষাবিজ্ঞান কয়েক দশক ধরে গবেষণা এবং উন্নয়নের একটি ক্ষেত্র যা অধ্যয়ন করে কীভাবে কম্পিউটার ভাষার সাথে কাজ করতে পারে, এমনকি বুঝতে, অনুবাদ করতে এবং ভাষার সাথে যোগাযোগ করতে পারে। প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) একটি সম্পর্কিত ক্ষেত্র যা কম্পিউটার কীভাবে 'প্রাকৃতিক', বা মানব, ভাষা প্রক্রিয়া করতে পারে তার উপর ফোকাস করে। -### উদাহরণ - ফোন ডিক্টেশন +### উদাহরণ - ফোনে ডিক্টেশন -আপনি যদি কখনো টাইপ করার পরিবর্তে আপনার ফোনে কথা বলে থাকেন বা ভার্চুয়াল অ্যাসিস্ট্যান্টকে কোনো প্রশ্ন জিজ্ঞাসা করে থাকেন, তবে আপনার বক্তব্যকে টেক্সটে রূপান্তরিত করা হয়েছে এবং তারপর প্রক্রিয়াকরণ বা *পার্সিং* করা হয়েছে। সনাক্ত করা কীওয়ার্ডগুলি এমন একটি ফরম্যাটে প্রক্রিয়াকৃত হয়েছে যা ফোন বা অ্যাসিস্ট্যান্ট বুঝতে এবং কার্যকর করতে পারে। +আপনি যদি কখনো টাইপ করার পরিবর্তে আপনার ফোনে কথা বলে থাকেন বা ভার্চুয়াল অ্যাসিস্ট্যান্টকে কোনো প্রশ্ন জিজ্ঞাসা করে থাকেন, তাহলে আপনার বক্তব্যকে টেক্সট ফর্মে রূপান্তরিত করা হয়েছে এবং তারপর প্রক্রিয়া বা *পার্স* করা হয়েছে আপনার বলা ভাষা থেকে। সনাক্ত করা কীওয়ার্ডগুলি তখন এমন একটি ফরম্যাটে প্রক্রিয়া করা হয়েছিল যা ফোন বা অ্যাসিস্ট্যান্ট বুঝতে এবং কার্যকর করতে পারে। -![বোঝাপড়া](../../../../translated_images/comprehension.619708fc5959b0f6a24ebffba2ad7b0625391a476141df65b43b59de24e45c6f.bn.png) -> প্রকৃত ভাষাগত বোঝাপড়া কঠিন! ছবি: [Jen Looper](https://twitter.com/jenlooper) +![বোঝাপড়া](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> আসল ভাষাগত বোঝাপড়া কঠিন! ছবি: [Jen Looper](https://twitter.com/jenlooper) ### এই প্রযুক্তি কীভাবে সম্ভব হয়েছে? -এটি সম্ভব হয়েছে কারণ কেউ এই কাজটি করার জন্য একটি কম্পিউটার প্রোগ্রাম লিখেছেন। কয়েক দশক আগে, কিছু বিজ্ঞান কল্পকাহিনী লেখক ভবিষ্যদ্বাণী করেছিলেন যে মানুষ প্রধানত তাদের কম্পিউটারের সাথে কথা বলবে, এবং কম্পিউটার সবসময় তাদের অর্থ সঠিকভাবে বুঝতে পারবে। দুঃখজনকভাবে, এটি অনেকের কল্পনার চেয়ে কঠিন একটি সমস্যা হয়ে দাঁড়িয়েছে, এবং যদিও এটি আজ একটি অনেক ভালোভাবে বোঝা সমস্যা, বাক্যের অর্থ বোঝার ক্ষেত্রে 'নিখুঁত' প্রাকৃতিক ভাষা প্রক্রিয়াকরণ অর্জনে উল্লেখযোগ্য চ্যালেঞ্জ রয়েছে। বিশেষ করে রসিকতা বোঝা বা বাক্যে বিদ্রূপের মতো আবেগ সনাক্ত করা একটি বিশেষভাবে কঠিন সমস্যা। +এটি সম্ভব হয়েছে কারণ কেউ এই কাজটি করার জন্য একটি কম্পিউটার প্রোগ্রাম লিখেছে। কয়েক দশক আগে, কিছু বিজ্ঞান কল্পকাহিনী লেখক ভবিষ্যদ্বাণী করেছিলেন যে মানুষ প্রধানত তাদের কম্পিউটারের সাথে কথা বলবে এবং কম্পিউটার সবসময় ঠিক কী বোঝাতে চেয়েছে তা বুঝতে পারবে। দুর্ভাগ্যবশত, এটি অনেকের কল্পনার চেয়ে কঠিন সমস্যা হয়ে দাঁড়িয়েছিল, এবং যদিও এটি আজ অনেক ভালোভাবে বোঝা যায়, একটি বাক্যের অর্থ বুঝতে 'নিখুঁত' প্রাকৃতিক ভাষা প্রক্রিয়াকরণ অর্জনে উল্লেখযোগ্য চ্যালেঞ্জ রয়েছে। বিশেষ করে একটি বাক্যে রসিকতা বা বিদ্রূপের মতো আবেগ সনাক্ত করার ক্ষেত্রে এটি একটি বিশেষভাবে কঠিন সমস্যা। -এখন আপনি হয়তো স্কুলের সেই ক্লাসগুলির কথা মনে করতে পারেন যেখানে শিক্ষক বাক্যের ব্যাকরণের অংশগুলি শেখাতেন। কিছু দেশে, শিক্ষার্থীদের ব্যাকরণ এবং ভাষাবিজ্ঞান একটি পৃথক বিষয় হিসাবে শেখানো হয়, তবে অনেক দেশে এই বিষয়গুলি ভাষা শেখার অংশ হিসাবে অন্তর্ভুক্ত থাকে: হয় প্রাথমিক বিদ্যালয়ে আপনার প্রথম ভাষা (পড়া এবং লেখা শেখা) এবং সম্ভবত মাধ্যমিক বা উচ্চ বিদ্যালয়ে একটি দ্বিতীয় ভাষা। যদি আপনি বিশেষ্য এবং ক্রিয়াপদ বা ক্রিয়া বিশেষণ এবং বিশেষণের মধ্যে পার্থক্য করতে বিশেষজ্ঞ না হন তবে চিন্তা করবেন না! +এই মুহূর্তে, আপনি হয়তো স্কুলের ক্লাসগুলির কথা মনে করতে পারেন যেখানে শিক্ষক বাক্যের ব্যাকরণের অংশগুলি নিয়ে আলোচনা করেছেন। কিছু দেশে, শিক্ষার্থীদের ব্যাকরণ এবং ভাষাবিজ্ঞান একটি নিবেদিত বিষয় হিসাবে শেখানো হয়, তবে অনেক দেশে, এই বিষয়গুলি একটি ভাষা শেখার অংশ হিসাবে অন্তর্ভুক্ত করা হয়: হয় আপনার প্রথম ভাষা প্রাথমিক বিদ্যালয়ে (পড়া এবং লেখা শেখা) এবং সম্ভবত একটি দ্বিতীয় ভাষা মাধ্যমিক বা উচ্চ বিদ্যালয়ে। যদি আপনি বিশেষ্য এবং ক্রিয়াপদের মধ্যে পার্থক্য করতে বা ক্রিয়া বিশেষণ এবং বিশেষণের মধ্যে পার্থক্য করতে দক্ষ না হন, চিন্তা করবেন না! -যদি আপনি *সাধারণ বর্তমান* এবং *বর্তমান প্রগতিশীল* এর মধ্যে পার্থক্য নিয়ে লড়াই করেন, তবে আপনি একা নন। এটি অনেকের জন্য একটি চ্যালেঞ্জিং বিষয়, এমনকি একটি ভাষার স্থানীয় বক্তাদের জন্যও। ভালো খবর হল কম্পিউটার আনুষ্ঠানিক নিয়ম প্রয়োগ করতে খুবই দক্ষ, এবং আপনি কোড লিখতে শিখবেন যা একটি বাক্যকে মানুষের মতো *পার্স* করতে পারে। বৃহত্তর চ্যালেঞ্জ যা আপনি পরে পরীক্ষা করবেন তা হল একটি বাক্যের *অর্থ* এবং *ভাব* বোঝা। +যদি আপনি *সাধারণ বর্তমান* এবং *বর্তমান প্রগতিশীল* এর মধ্যে পার্থক্য নিয়ে সংগ্রাম করেন, আপনি একা নন। এটি অনেক মানুষের জন্য একটি চ্যালেঞ্জিং বিষয়, এমনকি একটি ভাষার স্থানীয় বক্তাদের জন্যও। ভালো খবর হল কম্পিউটার আনুষ্ঠানিক নিয়ম প্রয়োগ করতে খুব ভালো, এবং আপনি কোড লিখতে শিখবেন যা একটি বাক্যকে *পার্স* করতে পারে একজন মানুষের মতো। আপনি পরে যে বড় চ্যালেঞ্জটি পরীক্ষা করবেন তা হল একটি বাক্যের *অর্থ* এবং *অনুভূতি* বোঝা। -## প্রয়োজনীয়তা +## পূর্বশর্ত -এই পাঠের জন্য প্রধান প্রয়োজনীয়তা হল এই পাঠের ভাষা পড়তে এবং বুঝতে সক্ষম হওয়া। এখানে কোনো গাণিতিক সমস্যা বা সমীকরণ সমাধান করতে হবে না। যদিও মূল লেখক এই পাঠটি ইংরেজিতে লিখেছেন, এটি অন্যান্য ভাষায়ও অনুবাদ করা হয়েছে, তাই আপনি হয়তো একটি অনুবাদ পড়ছেন। এমন কিছু উদাহরণ রয়েছে যেখানে বিভিন্ন ভাষার ব্যাকরণ নিয়ম তুলনা করার জন্য বিভিন্ন ভাষা ব্যবহার করা হয়েছে। এগুলি *অনুবাদ করা হয়নি*, তবে ব্যাখ্যামূলক পাঠ্য অনুবাদ করা হয়েছে, তাই অর্থটি পরিষ্কার হওয়া উচিত। +এই পাঠের জন্য প্রধান পূর্বশর্ত হল এই পাঠের ভাষা পড়তে এবং বুঝতে সক্ষম হওয়া। এখানে কোনো গণিত সমস্যা বা সমীকরণ সমাধান করতে হবে না। যদিও মূল লেখক এই পাঠটি ইংরেজিতে লিখেছেন, এটি অন্যান্য ভাষায়ও অনুবাদ করা হয়েছে, তাই আপনি একটি অনুবাদ পড়তে পারেন। এমন উদাহরণ রয়েছে যেখানে বিভিন্ন ভাষার ব্যাকরণ নিয়ম তুলনা করার জন্য বিভিন্ন ভাষা ব্যবহার করা হয়েছে। এগুলি *অনুবাদ করা হয়নি*, তবে ব্যাখ্যামূলক পাঠ্যটি অনুবাদ করা হয়েছে, তাই অর্থটি স্পষ্ট হওয়া উচিত। -কোডিং কাজগুলির জন্য, আপনি Python ব্যবহার করবেন এবং উদাহরণগুলি Python 3.8 ব্যবহার করে তৈরি করা হয়েছে। +কোডিং কাজগুলির জন্য, আপনি Python ব্যবহার করবেন এবং উদাহরণগুলি Python 3.8 ব্যবহার করে। এই অংশে, আপনার প্রয়োজন হবে এবং ব্যবহার করবেন: - **Python 3 বোঝাপড়া**। Python 3 প্রোগ্রামিং ভাষার বোঝাপড়া, এই পাঠে ইনপুট, লুপ, ফাইল পড়া, অ্যারে ব্যবহার করা হয়েছে। -- **Visual Studio Code + এক্সটেনশন**। আমরা Visual Studio Code এবং এর Python এক্সটেনশন ব্যবহার করব। আপনি আপনার পছন্দের অন্য কোনো Python IDE ব্যবহার করতে পারেন। +- **Visual Studio Code + এক্সটেনশন**। আমরা Visual Studio Code এবং এর Python এক্সটেনশন ব্যবহার করব। আপনি আপনার পছন্দের Python IDE ব্যবহার করতে পারেন। - **TextBlob**। [TextBlob](https://github.com/sloria/TextBlob) হল Python-এর জন্য একটি সরলীকৃত টেক্সট প্রক্রিয়াকরণ লাইব্রেরি। এটি আপনার সিস্টেমে ইনস্টল করার জন্য TextBlob সাইটের নির্দেশাবলী অনুসরণ করুন (নিচে দেখানো হিসাবে corpora ইনস্টল করুন): ```bash @@ -60,47 +60,47 @@ NLP, যা সাধারণত পরিচিত, মেশিন লার python -m textblob.download_corpora ``` -> 💡 টিপ: আপনি সরাসরি VS Code পরিবেশে Python চালাতে পারেন। আরও তথ্যের জন্য [ডকুমেন্টেশন](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) দেখুন। +> 💡 টিপ: আপনি Python সরাসরি VS Code পরিবেশে চালাতে পারেন। আরও তথ্যের জন্য [ডকস](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) দেখুন। ## মেশিনের সাথে কথা বলা -মানুষের ভাষা বোঝার জন্য কম্পিউটার তৈরি করার ইতিহাস কয়েক দশক পুরনো, এবং প্রাকৃতিক ভাষা প্রক্রিয়াকরণ নিয়ে চিন্তা করা প্রথম বিজ্ঞানীদের একজন ছিলেন *অ্যালান টুরিং*। +মানব ভাষা বুঝতে কম্পিউটার তৈরি করার ইতিহাস কয়েক দশক পিছিয়ে যায়, এবং প্রাকৃতিক ভাষা প্রক্রিয়াকরণ বিবেচনা করা প্রথম বিজ্ঞানীদের একজন ছিলেন *অ্যালান টুরিং*। ### 'টুরিং টেস্ট' -যখন টুরিং ১৯৫০-এর দশকে *কৃত্রিম বুদ্ধিমত্তা* নিয়ে গবেষণা করছিলেন, তখন তিনি বিবেচনা করেছিলেন যে একটি কথোপকথনমূলক পরীক্ষা একজন মানুষ এবং একটি কম্পিউটারের (টাইপ করা যোগাযোগের মাধ্যমে) দেওয়া যেতে পারে যেখানে কথোপকথনে থাকা মানুষটি নিশ্চিত হতে পারবে না যে তারা আরেকজন মানুষের সাথে কথা বলছে নাকি একটি কম্পিউটারের সাথে। +যখন টুরিং ১৯৫০-এর দশকে *কৃত্রিম বুদ্ধিমত্তা* নিয়ে গবেষণা করছিলেন, তখন তিনি বিবেচনা করেছিলেন যে একটি কথোপকথনমূলক পরীক্ষা একজন মানুষ এবং কম্পিউটারের (টাইপ করা যোগাযোগের মাধ্যমে) দেওয়া যেতে পারে যেখানে কথোপকথনে থাকা মানুষটি নিশ্চিত নয় যে তারা অন্য একজন মানুষের সাথে কথা বলছে নাকি একটি কম্পিউটারের সাথে। -যদি একটি নির্দিষ্ট সময়ের কথোপকথনের পরে, মানুষটি নির্ধারণ করতে না পারে যে উত্তরগুলি একটি কম্পিউটার থেকে এসেছে কিনা, তবে কি কম্পিউটারটিকে *চিন্তা করছে* বলা যেতে পারে? +যদি একটি নির্দিষ্ট সময়ের কথোপকথনের পরে, মানুষটি নির্ধারণ করতে না পারে যে উত্তরগুলি একটি কম্পিউটার থেকে এসেছে কিনা, তাহলে কি কম্পিউটারকে *চিন্তা করছে* বলা যেতে পারে? -### অনুপ্রেরণা - 'দ্য ইমিটেশন গেম' +### অনুপ্রেরণা - 'অনুকরণ খেলা' -এই ধারণাটি একটি পার্টি গেম *দ্য ইমিটেশন গেম* থেকে এসেছে যেখানে একজন প্রশ্নকর্তা একটি ঘরে একা থাকে এবং অন্য ঘরে থাকা দুই ব্যক্তির মধ্যে কে পুরুষ এবং কে মহিলা তা নির্ধারণ করার দায়িত্ব দেওয়া হয়। প্রশ্নকর্তা নোট পাঠাতে পারে এবং এমন প্রশ্ন ভাবতে হবে যেখানে লিখিত উত্তরগুলি রহস্যময় ব্যক্তির লিঙ্গ প্রকাশ করে। অবশ্যই, অন্য ঘরে থাকা খেলোয়াড়রা প্রশ্নকর্তাকে বিভ্রান্ত করার জন্য এমনভাবে উত্তর দেওয়ার চেষ্টা করে যাতে বিভ্রান্তি সৃষ্টি হয়, তবে একই সাথে সৎ উত্তর দেওয়ার ছাপ দেয়। +এই ধারণাটি একটি পার্টি গেম *অনুকরণ খেলা* থেকে এসেছে যেখানে একজন জিজ্ঞাসাবাদকারী একটি ঘরে একা থাকে এবং তাকে নির্ধারণ করতে হয় যে অন্য ঘরে থাকা দুই ব্যক্তির মধ্যে কে পুরুষ এবং কে মহিলা। জিজ্ঞাসাবাদকারী নোট পাঠাতে পারে এবং এমন প্রশ্ন ভাবতে হবে যেখানে লিখিত উত্তরগুলি রহস্যময় ব্যক্তির লিঙ্গ প্রকাশ করে। অবশ্যই, অন্য ঘরে থাকা খেলোয়াড়রা জিজ্ঞাসাবাদকারীকে বিভ্রান্ত বা বিভ্রান্ত করার জন্য এমনভাবে প্রশ্নের উত্তর দেওয়ার চেষ্টা করে, একই সাথে সৎভাবে উত্তর দেওয়ার চেহারা দেয়। ### এলিজা তৈরি করা -১৯৬০-এর দশকে MIT-এর একজন বিজ্ঞানী *জোসেফ ওয়েইজেনবাউম* [*এলিজা*](https://wikipedia.org/wiki/ELIZA) নামে একটি কম্পিউটার 'থেরাপিস্ট' তৈরি করেছিলেন যা মানুষের কাছে প্রশ্ন করত এবং তাদের উত্তর বোঝার ছাপ দিত। তবে, এলিজা একটি বাক্য পার্স করতে এবং নির্দিষ্ট ব্যাকরণগত গঠন এবং কীওয়ার্ড চিহ্নিত করতে পারলেও বাক্যটি *বোঝে* এমনটি বলা যায় না। উদাহরণস্বরূপ, যদি এলিজাকে "**আমি** দুঃখিত" ফরম্যাটের একটি বাক্য দেওয়া হয়, এটি বাক্যটি পুনর্বিন্যাস এবং শব্দ প্রতিস্থাপন করে "তুমি কতদিন ধরে **দুঃখিত**?" এই ধরনের উত্তর তৈরি করতে পারে। +১৯৬০-এর দশকে MIT-এর একজন বিজ্ঞানী *জোসেফ ওয়েইজেনবাউম* [*এলিজা*](https://wikipedia.org/wiki/ELIZA) নামে একটি কম্পিউটার 'থেরাপিস্ট' তৈরি করেছিলেন যা মানুষের কাছে প্রশ্ন করবে এবং তাদের উত্তর বুঝতে পারার চেহারা দেবে। তবে, এলিজা একটি বাক্য *পার্স* করতে এবং নির্দিষ্ট ব্যাকরণগত গঠন এবং কীওয়ার্ড চিহ্নিত করতে পারলেও একটি বাক্য *বুঝতে* পারে না। যদি এলিজাকে "**আমি** দুঃখিত" ফরম্যাটের একটি বাক্য উপস্থাপন করা হয়, এটি বাক্যটি পুনর্গঠন এবং শব্দগুলি প্রতিস্থাপন করে "কতদিন ধরে **আপনি** দুঃখিত" উত্তর তৈরি করতে পারে। -এটি এমন একটি ছাপ দিত যে এলিজা বিবৃতিটি বুঝতে পেরেছে এবং একটি অনুসরণমূলক প্রশ্ন করছে, যেখানে বাস্তবে এটি কেবল ক্রিয়ার কাল পরিবর্তন করছিল এবং কিছু শব্দ যোগ করছিল। যদি এলিজা এমন একটি কীওয়ার্ড চিহ্নিত করতে না পারে যার জন্য এটি একটি উত্তর তৈরি করতে পারে, তবে এটি পরিবর্তে একটি এলোমেলো উত্তর দিত যা অনেক ভিন্ন বিবৃতির জন্য প্রযোজ্য হতে পারে। উদাহরণস্বরূপ, যদি একজন ব্যবহারকারী লিখেন "**তুমি** একটি সাইকেল", এটি উত্তর দিতে পারে "আমি কতদিন ধরে **সাইকেল**?" পরিবর্তে একটি যুক্তিসঙ্গত উত্তর দেওয়ার। +এটি এমন একটি চেহারা দেয় যে এলিজা বিবৃতিটি বুঝতে পেরেছে এবং একটি অনুসরণকারী প্রশ্ন করছে, যেখানে বাস্তবে এটি কাল পরিবর্তন করছে এবং কিছু শব্দ যোগ করছে। যদি এলিজা এমন একটি কীওয়ার্ড চিহ্নিত করতে না পারে যার জন্য তার একটি উত্তর রয়েছে, এটি পরিবর্তে একটি এলোমেলো উত্তর দেবে যা অনেক ভিন্ন বিবৃতির জন্য প্রযোজ্য হতে পারে। এলিজাকে সহজেই বিভ্রান্ত করা যেতে পারে, উদাহরণস্বরূপ যদি একজন ব্যবহারকারী "**আপনি** একটি সাইকেল" লিখেন, এটি "কতদিন ধরে **আমি** একটি সাইকেল?" উত্তর দিতে পারে, একটি আরও যুক্তিযুক্ত উত্তর দেওয়ার পরিবর্তে। -[![এলিজার সাথে চ্যাটিং](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "এলিজার সাথে চ্যাটিং") +[![এলিজার সাথে কথা বলা](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "এলিজার সাথে কথা বলা") -> 🎥 উপরের ছবিতে ক্লিক করে এলিজার আসল প্রোগ্রাম সম্পর্কে একটি ভিডিও দেখুন +> 🎥 উপরের ছবিতে ক্লিক করুন এলিজার মূল প্রোগ্রাম সম্পর্কে একটি ভিডিও দেখার জন্য -> নোট: আপনি যদি ACM অ্যাকাউন্ট রাখেন তবে ১৯৬৬ সালে প্রকাশিত [এলিজার](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) পড়ুন। +> নোট: আপনি যদি ACM অ্যাকাউন্ট থাকে তবে [এলিজার](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) এ পড়ুন। ## অনুশীলন - একটি মৌলিক কথোপকথনমূলক বট কোডিং -একটি কথোপকথনমূলক বট, যেমন এলিজা, একটি প্রোগ্রাম যা ব্যবহারকারীর ইনপুট গ্রহণ করে এবং বুদ্ধিমত্তার সাথে উত্তর দেওয়ার ছাপ দেয়। এলিজার মতো নয়, আমাদের বটের একাধিক নিয়ম থাকবে না যা এটিকে একটি বুদ্ধিমান কথোপকথনের ছাপ দেয়। পরিবর্তে, আমাদের বটের একটি মাত্র ক্ষমতা থাকবে, এলোমেলো উত্তর দিয়ে কথোপকথন চালিয়ে যাওয়া যা প্রায় যেকোনো সাধারণ কথোপকথনে কাজ করতে পারে। +একটি কথোপকথনমূলক বট, এলিজার মতো, একটি প্রোগ্রাম যা ব্যবহারকারীর ইনপুট গ্রহণ করে এবং বুদ্ধিমত্তার সাথে উত্তর দেওয়ার চেহারা দেয়। এলিজার মতো নয়, আমাদের বটের একমাত্র ক্ষমতা থাকবে, এলোমেলো উত্তর দিয়ে কথোপকথন চালিয়ে যাওয়া যা প্রায় যেকোনো তুচ্ছ কথোপকথনে কাজ করতে পারে। ### পরিকল্পনা -একটি কথোপকথনমূলক বট তৈরি করার ধাপসমূহ: +একটি কথোপকথনমূলক বট তৈরি করার সময় আপনার ধাপগুলি: -1. ব্যবহারকারীকে বটের সাথে কীভাবে যোগাযোগ করতে হবে তা নির্দেশনা প্রিন্ট করুন +1. ব্যবহারকারীকে বটের সাথে কীভাবে যোগাযোগ করতে হবে তা পরামর্শ দেওয়ার জন্য নির্দেশাবলী প্রিন্ট করুন 2. একটি লুপ শুরু করুন 1. ব্যবহারকারীর ইনপুট গ্রহণ করুন - 2. যদি ব্যবহারকারী প্রস্থান করতে চায়, তবে প্রস্থান করুন - 3. ব্যবহারকারীর ইনপুট প্রক্রিয়াকরণ করুন এবং উত্তর নির্ধারণ করুন (এই ক্ষেত্রে, উত্তরটি সম্ভাব্য সাধারণ উত্তরগুলির একটি এলোমেলো পছন্দ) + 2. যদি ব্যবহারকারী প্রস্থান করতে চায়, তাহলে প্রস্থান করুন + 3. ব্যবহারকারীর ইনপুট প্রক্রিয়া করুন এবং উত্তর নির্ধারণ করুন (এই ক্ষেত্রে, উত্তরটি সম্ভাব্য সাধারণ উত্তরগুলির একটি তালিকা থেকে এলোমেলোভাবে নির্বাচন করা হবে) 4. উত্তর প্রিন্ট করুন 3. ধাপ ২-এ ফিরে যান @@ -108,7 +108,7 @@ NLP, যা সাধারণত পরিচিত, মেশিন লার এখন বট তৈরি করা যাক। আমরা কিছু বাক্যাংশ সংজ্ঞায়িত করে শুরু করব। -1. নিম্নলিখিত এলোমেলো উত্তর দিয়ে Python-এ নিজেই এই বটটি তৈরি করুন: +1. Python-এ নিম্নলিখিত এলোমেলো উত্তর দিয়ে এই বটটি নিজে তৈরি করুন: ```python random_responses = ["That is quite interesting, please tell me more.", @@ -119,7 +119,7 @@ NLP, যা সাধারণত পরিচিত, মেশিন লার "Did you catch the game last night?"] ``` - এখানে কিছু নমুনা আউটপুট দেওয়া হয়েছে যা আপনাকে গাইড করবে (ব্যবহারকারীর ইনপুট `>` দিয়ে শুরু হওয়া লাইনে): + এখানে কিছু নমুনা আউটপুট রয়েছে যা আপনাকে গাইড করবে (ব্যবহারকারীর ইনপুট `>` দিয়ে শুরু হওয়া লাইনে): ```output Hello, I am Marvin, the simple robot. @@ -142,38 +142,38 @@ NLP, যা সাধারণত পরিচিত, মেশিন লার 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) পাওয়া যাবে। + এই কাজের একটি সম্ভাব্য সমাধান [এখানে](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) ✅ থামুন এবং বিবেচনা করুন - 1. আপনি কি মনে করেন এলোমেলো উত্তরগুলি কাউকে 'প্রতারণা' করতে পারে যাতে মনে হয় বটটি আসলে তাদের বুঝতে পারছে? - 2. বটটিকে আরও কার্যকর করতে কী বৈশিষ্ট্য প্রয়োজন হবে? - 3. যদি একটি বট সত্যিই একটি বাক্যের অর্থ 'বোঝে', তবে কি এটি কথোপকথনে আগের বাক্যগুলির অর্থ 'মনে রাখতে' হবে? + 1. আপনি কি মনে করেন এলোমেলো উত্তরগুলি কাউকে বিভ্রান্ত করতে পারে যে বটটি আসলে তাদের বুঝতে পেরেছে? + 2. বটটি আরও কার্যকর হতে হলে কী বৈশিষ্ট্যগুলি প্রয়োজন হবে? + 3. যদি একটি বট সত্যিই একটি বাক্যের অর্থ 'বুঝতে' পারে, তাহলে কি এটি কথোপকথনে আগের বাক্যগুলির অর্থ 'মনে রাখতে' হবে? --- ## 🚀চ্যালেঞ্জ -উপরের "থামুন এবং বিবেচনা করুন" উপাদানগুলির মধ্যে একটি বেছে নিন এবং হয় কোডে এটি বাস্তবায়নের চেষ্টা করুন অথবা ছদ্ম-কোড ব্যবহার করে কাগজে একটি সমাধান লিখুন। +উপরের "থামুন এবং বিবেচনা করুন" উপাদানগুলির মধ্যে একটি নির্বাচন করুন এবং হয় কোডে এটি বাস্তবায়নের চেষ্টা করুন অথবা কাগজে ছদ্মকোড ব্যবহার করে একটি সমাধান লিখুন। -পরবর্তী পাঠে, আপনি প্রাকৃতিক ভাষা পার্সিং এবং মেশিন লার্নিংয়ের অন্যান্য পদ্ধতি সম্পর্কে শিখবেন। +পরবর্তী পাঠে, আপনি প্রাকৃতিক ভাষা পার্সিং এবং মেশিন লার্নিংয়ের জন্য বেশ কয়েকটি অন্যান্য পদ্ধতি সম্পর্কে শিখবেন। -## [পাঠ-পরবর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/32/) +## [পাঠের পরে কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা এবং স্ব-অধ্যয়ন -নিচের রেফারেন্সগুলি আরও পড়ার সুযোগ হিসেবে দেখুন। +নিচের রেফারেন্সগুলি আরও পড়ার সুযোগ হিসাবে দেখুন। ### রেফারেন্স -1. শুবার্ট, লেনহার্ট, "কম্পিউটেশনাল লিঙ্গুইস্টিকস", *দ্য স্ট্যানফোর্ড এনসাইক্লোপিডিয়া অফ ফিলোসফি* (স্প্রিং ২০২০ সংস্করণ), এডওয়ার্ড এন. জাল্টা (সম্পাদক), URL = । -2. প্রিন্সটন ইউনিভার্সিটি "ওয়ার্ডনেট সম্পর্কে।" [ওয়ার্ডনেট](https://wordnet.princeton.edu/)। প্রিন্সটন ইউনিভার্সিটি। ২০১০। +1. শুবার্ট, লেনহার্ট, "কম্পিউটেশনাল ভাষাবিজ্ঞান", *দ্য স্ট্যানফোর্ড এনসাইক্লোপিডিয়া অফ ফিলোসফি* (স্প্রিং ২০২০ সংস্করণ), এডওয়ার্ড এন. জাল্টা (সম্পাদক), URL = . +2. প্রিন্সটন ইউনিভার্সিটি "ওয়ার্ডনেট সম্পর্কে।" [ওয়ার্ডনেট](https://wordnet.princeton.edu/)। প্রিন্সটন ইউনিভার্সিটি। ২০১০। ## অ্যাসাইনমেন্ট -[একটি বট খুঁজুন](assignment.md) +[একটি বট অনুসন্ধান করুন](assignment.md) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিক অনুবাদের চেষ্টা করি, তবে দয়া করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় লেখা সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/6-NLP/2-Tasks/README.md b/translations/bn/6-NLP/2-Tasks/README.md index 62b2f3aab..85b4fcf33 100644 --- a/translations/bn/6-NLP/2-Tasks/README.md +++ b/translations/bn/6-NLP/2-Tasks/README.md @@ -1,55 +1,55 @@ # সাধারণ প্রাকৃতিক ভাষা প্রক্রিয়াকরণ কাজ এবং কৌশল -বেশিরভাগ *প্রাকৃতিক ভাষা প্রক্রিয়াকরণ* কাজের জন্য, প্রক্রিয়াকরণের জন্য পাঠ্যটি ভেঙে বিশ্লেষণ করতে হয় এবং ফলাফল সংরক্ষণ বা নিয়ম এবং ডেটাসেটের সাথে ক্রস রেফারেন্স করতে হয়। এই কাজগুলো প্রোগ্রামারকে পাঠ্যের মধ্যে শব্দ এবং শব্দের _অর্থ_, _উদ্দেশ্য_ বা শুধুমাত্র _ঘনত্ব_ নির্ধারণ করতে সাহায্য করে। +বেশিরভাগ *প্রাকৃতিক ভাষা প্রক্রিয়াকরণ* কাজের জন্য, প্রক্রিয়াকরণের জন্য পাঠ্যটি ভেঙে বিশ্লেষণ করতে হয় এবং ফলাফলগুলি সংরক্ষণ বা নিয়ম এবং ডেটাসেটের সাথে তুলনা করতে হয়। এই কাজগুলি প্রোগ্রামারকে পাঠ্যের মধ্যে শব্দ এবং শব্দের _অর্থ_, _উদ্দেশ্য_ বা শুধুমাত্র _বারবার উপস্থিতি_ নির্ধারণ করতে সাহায্য করে। -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/33/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -চলুন পাঠ্য প্রক্রিয়াকরণের সাধারণ কৌশলগুলি আবিষ্কার করি। মেশিন লার্নিংয়ের সাথে মিলিত হয়ে, এই কৌশলগুলি আপনাকে বড় পরিমাণে পাঠ্য দক্ষতার সাথে বিশ্লেষণ করতে সাহায্য করে। তবে, এই কাজগুলিতে মেশিন লার্নিং প্রয়োগ করার আগে, একজন NLP বিশেষজ্ঞের সম্মুখীন হওয়া সমস্যাগুলি বুঝতে হবে। +চলুন পাঠ্য প্রক্রিয়াকরণের জন্য ব্যবহৃত সাধারণ কৌশলগুলি আবিষ্কার করি। মেশিন লার্নিংয়ের সাথে মিলিত হয়ে, এই কৌশলগুলি আপনাকে বড় পরিমাণে পাঠ্য দক্ষতার সাথে বিশ্লেষণ করতে সাহায্য করে। তবে, এই কাজগুলিতে মেশিন লার্নিং প্রয়োগ করার আগে, একজন NLP বিশেষজ্ঞের সম্মুখীন হওয়া সমস্যাগুলি বুঝতে হবে। ## NLP-তে সাধারণ কাজ -আপনি যে পাঠ্যের উপর কাজ করছেন তা বিশ্লেষণ করার বিভিন্ন উপায় রয়েছে। কিছু নির্দিষ্ট কাজ সম্পাদন করে আপনি পাঠ্যটি বুঝতে এবং সিদ্ধান্ত নিতে সক্ষম হন। সাধারণত এই কাজগুলো একটি নির্দিষ্ট ক্রমে সম্পাদিত হয়। +আপনি যে পাঠ্যটি নিয়ে কাজ করছেন তা বিশ্লেষণ করার বিভিন্ন উপায় রয়েছে। কিছু নির্দিষ্ট কাজ রয়েছে যা আপনি সম্পাদন করতে পারেন এবং এই কাজগুলির মাধ্যমে আপনি পাঠ্যটি বুঝতে এবং সিদ্ধান্তে পৌঁছাতে সক্ষম হন। সাধারণত, এই কাজগুলি একটি নির্দিষ্ট ক্রমে সম্পাদিত হয়। ### টোকেনাইজেশন -সম্ভবত প্রথম কাজ যা বেশিরভাগ NLP অ্যালগরিদমকে করতে হয় তা হলো পাঠ্যকে টোকেন বা শব্দে বিভক্ত করা। যদিও এটি সহজ মনে হয়, বিরামচিহ্ন এবং বিভিন্ন ভাষার শব্দ এবং বাক্য বিভাজনকারীদের হিসাব করতে হয়, যা এটি জটিল করে তুলতে পারে। আপনাকে বিভাজন নির্ধারণের জন্য বিভিন্ন পদ্ধতি ব্যবহার করতে হতে পারে। +সম্ভবত প্রথম কাজ যা বেশিরভাগ NLP অ্যালগরিদমকে করতে হয় তা হলো পাঠ্যটিকে টোকেন বা শব্দে বিভক্ত করা। যদিও এটি সহজ শোনায়, বিরামচিহ্ন এবং বিভিন্ন ভাষার শব্দ ও বাক্যের বিভাজন চিহ্নগুলি বিবেচনা করা এটি জটিল করে তুলতে পারে। আপনাকে বিভাজন নির্ধারণের জন্য বিভিন্ন পদ্ধতি ব্যবহার করতে হতে পারে। -![টোকেনাইজেশন](../../../../translated_images/tokenization.1641a160c66cd2d93d4524e8114e93158a9ce0eba3ecf117bae318e8a6ad3487.bn.png) +![টোকেনাইজেশন](../../../../6-NLP/2-Tasks/images/tokenization.png) > **Pride and Prejudice** থেকে একটি বাক্য টোকেনাইজ করা। ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) ### এমবেডিংস -[ওয়ার্ড এমবেডিংস](https://wikipedia.org/wiki/Word_embedding) হলো আপনার পাঠ্য ডেটাকে সংখ্যায় রূপান্তর করার একটি উপায়। এমবেডিংস এমনভাবে করা হয় যাতে একই অর্থের বা একসাথে ব্যবহৃত শব্দগুলো একসাথে ক্লাস্টার করে। +[ওয়ার্ড এমবেডিংস](https://wikipedia.org/wiki/Word_embedding) হলো আপনার পাঠ্য ডেটাকে সংখ্যায় রূপান্তর করার একটি উপায়। এমবেডিংস এমনভাবে করা হয় যাতে একই অর্থের বা একসঙ্গে ব্যবহৃত শব্দগুলি একত্রে ক্লাস্টার করে। -![ওয়ার্ড এমবেডিংস](../../../../translated_images/embedding.2cf8953c4b3101d188c2f61a5de5b6f53caaa5ad4ed99236d42bc3b6bd6a1fe2.bn.png) -> "I have the highest respect for your nerves, they are my old friends." - **Pride and Prejudice** থেকে একটি বাক্যের জন্য ওয়ার্ড এমবেডিংস। ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) +![ওয়ার্ড এমবেডিংস](../../../../6-NLP/2-Tasks/images/embedding.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' এর সাথে। +✅ [এই আকর্ষণীয় টুলটি](https://projector.tensorflow.org/) ব্যবহার করে ওয়ার্ড এমবেডিংস নিয়ে পরীক্ষা করুন। একটি শব্দে ক্লিক করলে একই ধরনের শব্দের ক্লাস্টার দেখা যায়: 'toy' ক্লাস্টার করে 'disney', 'lego', 'playstation', এবং 'console' এর সাথে। ### পার্সিং এবং পার্ট-অফ-স্পিচ ট্যাগিং প্রতিটি টোকেনাইজ করা শব্দকে পার্ট-অফ-স্পিচ হিসেবে ট্যাগ করা যায় - যেমন নাউন, ভার্ব, বা অ্যাডজেকটিভ। বাক্য `the quick red fox jumped over the lazy brown dog` এর POS ট্যাগ হতে পারে fox = noun, jumped = verb। -![পার্সিং](../../../../translated_images/parse.d0c5bbe1106eae8fe7d60a183cd1736c8b6cec907f38000366535f84f3036101.bn.png) +![পার্সিং](../../../../6-NLP/2-Tasks/images/parse.png) -> **Pride and Prejudice** থেকে একটি বাক্য পার্স করা। ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) +> **Pride and Prejudice** থেকে একটি বাক্য পার্সিং। ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) -পার্সিং হলো একটি বাক্যে কোন শব্দগুলো একে অপরের সাথে সম্পর্কিত তা চিহ্নিত করা - যেমন `the quick red fox jumped` হলো একটি adjective-noun-verb সিকোয়েন্স যা `lazy brown dog` সিকোয়েন্স থেকে আলাদা। +পার্সিং হলো একটি বাক্যে কোন শব্দগুলি একে অপরের সাথে সম্পর্কিত তা চিহ্নিত করা - যেমন `the quick red fox jumped` একটি অ্যাডজেকটিভ-নাউন-ভার্ব সিকোয়েন্স যা `lazy brown dog` সিকোয়েন্স থেকে আলাদা। -### শব্দ এবং বাক্যাংশের ঘনত্ব +### শব্দ এবং বাক্যাংশের ফ্রিকোয়েন্সি -বড় পরিমাণে পাঠ্য বিশ্লেষণ করার সময় একটি দরকারী পদ্ধতি হলো প্রতিটি শব্দ বা আগ্রহের বাক্যাংশের একটি ডিকশনারি তৈরি করা এবং এটি কতবার উপস্থিত হয়েছে তা গণনা করা। বাক্য `the quick red fox jumped over the lazy brown dog` এ `the` শব্দটির ঘনত্ব ২। +বড় পরিমাণে পাঠ্য বিশ্লেষণ করার সময় একটি দরকারী পদ্ধতি হলো প্রতিটি শব্দ বা আগ্রহের বাক্যাংশের একটি ডিকশনারি তৈরি করা এবং এটি কতবার উপস্থিত হয়েছে তা গণনা করা। বাক্য `the quick red fox jumped over the lazy brown dog` এ `the` শব্দটির ফ্রিকোয়েন্সি ২। -চলুন একটি উদাহরণ পাঠ্য দেখি যেখানে আমরা শব্দের ঘনত্ব গণনা করি। রুডইয়ার্ড কিপলিং-এর কবিতা **The Winners** এর একটি অংশ: +চলুন একটি উদাহরণ পাঠ্য দেখি যেখানে আমরা শব্দের ফ্রিকোয়েন্সি গণনা করি। রুডইয়ার্ড কিপলিং-এর কবিতা **The Winners** এর একটি অংশ: ```output What the moral? Who rides may read. @@ -60,9 +60,9 @@ Down to Gehenna or up to the Throne, He travels the fastest who travels alone. ``` -যেহেতু বাক্যাংশের ঘনত্ব প্রয়োজন অনুযায়ী কেস সেনসিটিভ বা কেস ইনসেনসিটিভ হতে পারে, তাই `a friend` বাক্যাংশের ঘনত্ব ২ এবং `the` এর ঘনত্ব ৬, এবং `travels` এর ঘনত্ব ২। +যেহেতু বাক্যাংশের ফ্রিকোয়েন্সি প্রয়োজন অনুযায়ী কেস সেনসিটিভ বা কেস ইনসেনসিটিভ হতে পারে, তাই `a friend` এর ফ্রিকোয়েন্সি ২ এবং `the` এর ফ্রিকোয়েন্সি ৬, এবং `travels` এর ফ্রিকোয়েন্সি ২। -### এন-গ্রাম +### এন-গ্রামস একটি পাঠ্যকে নির্দিষ্ট দৈর্ঘ্যের শব্দের সিকোয়েন্সে বিভক্ত করা যায়, যেমন একক শব্দ (ইউনিগ্রাম), দুই শব্দ (বাইগ্রাম), তিন শব্দ (ট্রাইগ্রাম) বা যেকোনো সংখ্যক শব্দ (এন-গ্রাম)। @@ -78,7 +78,7 @@ He travels the fastest who travels alone. 8. lazy brown 9. brown dog -এটি একটি স্লাইডিং বক্সের মতো বাক্যের উপর কল্পনা করা সহজ হতে পারে। এখানে এটি ৩ শব্দের এন-গ্রামের জন্য দেখানো হয়েছে, প্রতিটি বাক্যে এন-গ্রামটি **বোল্ড**: +এটি একটি স্লাইডিং বক্সের মতো দেখতে সহজ হতে পারে। এখানে এটি ৩ শব্দের এন-গ্রামের জন্য দেখানো হয়েছে, প্রতিটি বাক্যে এন-গ্রামটি **বোল্ড** করা হয়েছে: 1. **the quick red** fox jumped over the lazy brown dog 2. the **quick red fox** jumped over the lazy brown dog @@ -93,19 +93,19 @@ He travels the fastest who travels alone. > ৩ এন-গ্রামের মান: ইনফোগ্রাফিক: [Jen Looper](https://twitter.com/jenlooper) -### নাউন বাক্যাংশ নির্যাস +### নাউন ফ্রেজ এক্সট্রাকশন -বেশিরভাগ বাক্যে একটি নাউন থাকে যা বাক্যের বিষয় বা বস্তু। ইংরেজিতে এটি প্রায়শই `a`, `an`, বা `the` দ্বারা চিহ্নিত করা যায়। বাক্যের অর্থ বোঝার চেষ্টা করার সময় `নাউন বাক্যাংশ নির্যাস` একটি সাধারণ NLP কাজ। +বেশিরভাগ বাক্যে একটি নাউন থাকে যা বাক্যের বিষয় বা বস্তু। ইংরেজিতে এটি প্রায়শই '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." আপনি কি নাউন বাক্যাংশগুলো চিহ্নিত করতে পারেন? +✅ বাক্যে "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` এ ২টি নাউন বাক্যাংশ রয়েছে: **quick red fox** এবং **lazy brown dog**। +বাক্যে `the quick red fox jumped over the lazy brown dog` দুটি নাউন ফ্রেজ রয়েছে: **quick red fox** এবং **lazy brown dog**। -### অনুভূতি বিশ্লেষণ +### সেন্টিমেন্ট অ্যানালাইসিস -একটি বাক্য বা পাঠ্য *ইতিবাচক* বা *নেতিবাচক* কতটা তা বিশ্লেষণ করা যায়। অনুভূতি *পোলারিটি* এবং *অবজেক্টিভিটি/সাবজেক্টিভিটি* দ্বারা পরিমাপ করা হয়। পোলারিটি -1.0 থেকে 1.0 (নেতিবাচক থেকে ইতিবাচক) এবং 0.0 থেকে 1.0 (সবচেয়ে অবজেক্টিভ থেকে সবচেয়ে সাবজেক্টিভ) দ্বারা পরিমাপ করা হয়। +একটি বাক্য বা পাঠ্য *পজিটিভ* বা *নেগেটিভ* কতটা তা বিশ্লেষণ করা যায়। সেন্টিমেন্ট *পোলারিটি* এবং *অবজেক্টিভিটি/সাবজেক্টিভিটি* দ্বারা পরিমাপ করা হয়। পোলারিটি -1.0 থেকে 1.0 (নেগেটিভ থেকে পজিটিভ) এবং 0.0 থেকে 1.0 (সবচেয়ে অবজেক্টিভ থেকে সবচেয়ে সাবজেক্টিভ) দ্বারা পরিমাপ করা হয়। -✅ পরে আপনি শিখবেন যে মেশিন লার্নিং ব্যবহার করে অনুভূতি নির্ধারণের বিভিন্ন উপায় রয়েছে, তবে একটি উপায় হলো মানুষের বিশেষজ্ঞ দ্বারা ইতিবাচক বা নেতিবাচক হিসেবে শ্রেণীবদ্ধ শব্দ এবং বাক্যাংশের একটি তালিকা থাকা এবং সেই মডেলটি পাঠ্যে প্রয়োগ করে একটি পোলারিটি স্কোর গণনা করা। আপনি কি দেখতে পাচ্ছেন এটি কিছু পরিস্থিতিতে কীভাবে কাজ করবে এবং অন্য কিছুতে কম কার্যকর হবে? +✅ পরে আপনি শিখবেন যে মেশিন লার্নিং ব্যবহার করে সেন্টিমেন্ট নির্ধারণের বিভিন্ন উপায় রয়েছে, তবে একটি উপায় হলো একটি শব্দ এবং বাক্যাংশের তালিকা থাকা যা একজন মানব বিশেষজ্ঞ দ্বারা পজিটিভ বা নেগেটিভ হিসেবে শ্রেণীবদ্ধ করা হয়েছে এবং সেই মডেলটি পাঠ্যে প্রয়োগ করে একটি পোলারিটি স্কোর গণনা করা। আপনি কি দেখতে পাচ্ছেন এটি কিছু পরিস্থিতিতে কীভাবে কাজ করবে এবং অন্য কিছুতে কম কার্যকর হবে? ### ইনফ্লেকশন @@ -119,19 +119,19 @@ He travels the fastest who travels alone. ### ওয়ার্ডনেট -[ওয়ার্ডনেট](https://wordnet.princeton.edu/) হলো বিভিন্ন ভাষার প্রতিটি শব্দের জন্য শব্দ, সমার্থক শব্দ, বিপরীত শব্দ এবং অন্যান্য অনেক বিশদ বিবরণের একটি ডেটাবেস। এটি অনুবাদ, বানান পরীক্ষক বা যেকোনো ধরনের ভাষা সরঞ্জাম তৈরি করার সময় অত্যন্ত কার্যকর। +[ওয়ার্ডনেট](https://wordnet.princeton.edu/) হলো একটি ডেটাবেস যেখানে শব্দ, প্রতিশব্দ, বিপরীতার্থক শব্দ এবং বিভিন্ন ভাষার প্রতিটি শব্দের জন্য অনেক বিস্তারিত তথ্য রয়েছে। এটি অনুবাদ, বানান পরীক্ষক বা যেকোনো ধরনের ভাষা সরঞ্জাম তৈরি করার সময় অত্যন্ত কার্যকর। ## NLP লাইব্রেরি -সৌভাগ্যক্রমে, আপনাকে এই কৌশলগুলো নিজে তৈরি করতে হবে না, কারণ Python-এর চমৎকার লাইব্রেরিগুলো রয়েছে যা প্রাকৃতিক ভাষা প্রক্রিয়াকরণ বা মেশিন লার্নিংয়ে বিশেষজ্ঞ নয় এমন ডেভেলপারদের জন্য এটি আরও সহজলভ্য করে তোলে। পরবর্তী পাঠগুলোতে এর আরও উদাহরণ থাকবে, তবে এখানে আপনি কিছু দরকারী উদাহরণ শিখবেন যা আপনাকে পরবর্তী কাজে সাহায্য করবে। +সৌভাগ্যক্রমে, আপনাকে এই সমস্ত কৌশল নিজে তৈরি করতে হবে না, কারণ চমৎকার পাইথন লাইব্রেরি রয়েছে যা প্রাকৃতিক ভাষা প্রক্রিয়াকরণ বা মেশিন লার্নিংয়ে বিশেষজ্ঞ না এমন ডেভেলপারদের জন্য এটি আরও সহজলভ্য করে তোলে। পরবর্তী পাঠে এর আরও উদাহরণ রয়েছে, তবে এখানে আপনি কিছু দরকারী উদাহরণ শিখবেন যা আপনাকে পরবর্তী কাজে সাহায্য করবে। ### অনুশীলন - `TextBlob` লাইব্রেরি ব্যবহার করা চলুন TextBlob নামক একটি লাইব্রেরি ব্যবহার করি কারণ এটি এই ধরনের কাজ মোকাবেলার জন্য সহায়ক API সরবরাহ করে। TextBlob "[NLTK](https://nltk.org) এবং [pattern](https://github.com/clips/pattern) এর উপর ভিত্তি করে তৈরি হয়েছে এবং উভয়ের সাথে সুন্দরভাবে কাজ করে।" এর API-তে উল্লেখযোগ্য পরিমাণে মেশিন লার্নিং অন্তর্ভুক্ত রয়েছে। -> নোট: TextBlob-এর একটি দরকারী [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) গাইড রয়েছে যা অভিজ্ঞ Python ডেভেলপারদের জন্য সুপারিশ করা হয়। +> নোট: TextBlob-এর জন্য একটি দরকারী [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) গাইড উপলব্ধ রয়েছে যা অভিজ্ঞ পাইথন ডেভেলপারদের জন্য সুপারিশ করা হয়। -নাউন বাক্যাংশ চিহ্নিত করার চেষ্টা করার সময়, TextBlob নাউন বাক্যাংশ খুঁজে বের করার জন্য বিভিন্ন এক্সট্রাক্টর অফার করে। +নাউন ফ্রেজ চিহ্নিত করার চেষ্টা করার সময়, TextBlob নাউন ফ্রেজ খুঁজে বের করার জন্য বিভিন্ন এক্সট্রাক্টর অফার করে। 1. `ConllExtractor` দেখুন। @@ -147,24 +147,24 @@ He travels the fastest who travels alone. 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 হলো Computational Natural Language Learning-এর ২০০০ সালের সম্মেলন। প্রতি বছর সম্মেলন একটি কঠিন NLP সমস্যার সমাধান করার জন্য একটি কর্মশালা আয়োজন করত, এবং ২০০০ সালে এটি ছিল নাউন চাঙ্কিং। একটি মডেল Wall Street Journal-এ প্রশিক্ষিত হয়েছিল, "sections 15-18 প্রশিক্ষণ ডেটা (211727 টোকেন) এবং section 20 পরীক্ষার ডেটা (47377 টোকেন)" হিসেবে। আপনি ব্যবহৃত পদ্ধতিগুলো [এখানে](https://www.clips.uantwerpen.be/conll2000/chunking/) এবং [ফলাফল](https://ifarm.nl/erikt/research/np-chunking.html) দেখতে পারেন। + > এখানে কী ঘটছে? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) হলো "একটি নাউন ফ্রেজ এক্সট্রাক্টর যা ConLL-2000 প্রশিক্ষণ কর্পাস দিয়ে প্রশিক্ষিত চাঙ্ক পার্সিং ব্যবহার করে।" ConLL-2000 হলো ২০০০ সালের Computational Natural Language Learning সম্মেলন। প্রতি বছর সম্মেলন একটি কঠিন NLP সমস্যার সমাধান করার জন্য একটি কর্মশালা আয়োজন করত, এবং ২০০০ সালে এটি ছিল নাউন চাঙ্কিং। একটি মডেল Wall Street Journal-এ প্রশিক্ষিত হয়েছিল, "sections 15-18 প্রশিক্ষণ ডেটা (211727 টোকেন) এবং section 20 পরীক্ষার ডেটা (47377 টোকেন) হিসেবে।" আপনি ব্যবহৃত পদ্ধতিগুলি [এখানে](https://www.clips.uantwerpen.be/conll2000/chunking/) এবং [ফলাফল](https://ifarm.nl/erikt/research/np-chunking.html) দেখতে পারেন। ### চ্যালেঞ্জ - NLP দিয়ে আপনার বট উন্নত করা -পূর্ববর্তী পাঠে আপনি একটি খুব সাধারণ Q&A বট তৈরি করেছিলেন। এখন, আপনি মারভিনকে আরও সহানুভূতিশীল করে তুলবেন আপনার ইনপুট বিশ্লেষণ করে এবং সেই অনুযায়ী একটি প্রতিক্রিয়া মুদ্রণ করে। আপনাকে একটি `noun_phrase` চিহ্নিত করতে হবে এবং সেই বিষয়ে আরও ইনপুট চাইতে হবে। +পূর্ববর্তী পাঠে আপনি একটি খুব সাধারণ Q&A বট তৈরি করেছিলেন। এখন, আপনি মারভিনকে আরও সহানুভূতিশীল করে তুলবেন আপনার ইনপুটের সেন্টিমেন্ট বিশ্লেষণ করে এবং সেই অনুযায়ী একটি প্রতিক্রিয়া মুদ্রণ করে। আপনাকে একটি `noun_phrase` চিহ্নিত করতে হবে এবং সেই বিষয়ে আরও ইনপুট চাইতে হবে। -আপনার বটকে আরও ভালোভাবে কথোপকথন করতে তৈরি করার ধাপগুলো: +আপনার বটকে আরও ভালোভাবে কথোপকথন করতে তৈরি করার ধাপ: 1. ব্যবহারকারীকে বটের সাথে কীভাবে যোগাযোগ করতে হবে তা নির্দেশনা মুদ্রণ করুন 2. লুপ শুরু করুন 1. ব্যবহারকারীর ইনপুট গ্রহণ করুন 2. যদি ব্যবহারকারী প্রস্থান করতে চায়, তাহলে প্রস্থান করুন - 3. ব্যবহারকারীর ইনপুট প্রক্রিয়াকরণ করুন এবং উপযুক্ত অনুভূতি প্রতিক্রিয়া নির্ধারণ করুন - 4. যদি একটি নাউন বাক্যাংশ অনুভূতিতে সনাক্ত হয়, তাহলে এটি বহুবচন করুন এবং সেই বিষয়ে আরও ইনপুট চাইতে বলুন + 3. ব্যবহারকারীর ইনপুট প্রক্রিয়া করুন এবং উপযুক্ত সেন্টিমেন্ট প্রতিক্রিয়া নির্ধারণ করুন + 4. যদি সেন্টিমেন্টে একটি নাউন ফ্রেজ সনাক্ত করা হয়, তাহলে সেটিকে বহুবচন করুন এবং সেই বিষয়ে আরও ইনপুট চাইতে বলুন 5. প্রতিক্রিয়া মুদ্রণ করুন 3. ধাপ ২-এ ফিরে যান -TextBlob ব্যবহার করে অনুভূতি নির্ধারণের জন্য কোড স্নিপেট এখানে রয়েছে। লক্ষ্য করুন যে শুধুমাত্র চারটি *গ্রেডিয়েন্ট* অনুভূতি প্রতিক্রিয়ার রয়েছে (আপনি চাইলে আরও যোগ করতে পারেন): +TextBlob ব্যবহার করে সেন্টিমেন্ট নির্ধারণের জন্য কোড স্নিপেট এখানে রয়েছে। লক্ষ্য করুন যে এখানে শুধুমাত্র চারটি *গ্রেডিয়েন্ট* রয়েছে সেন্টিমেন্ট প্রতিক্রিয়ার (আপনি চাইলে আরও যোগ করতে পারেন): ```python if user_input_blob.polarity <= -0.5: @@ -177,7 +177,7 @@ elif user_input_blob.polarity <= 1: response = "Wow, that sounds great. " ``` -নিম্নলিখিত নমুনা আউটপুটটি আপনাকে গাইড করবে (ব্যবহারকারীর ইনপুট > দিয়ে শুরু হওয়া লাইনে): +নিম্নলিখিত নমুনা আউটপুটটি আপনাকে গাইড করতে পারে (ব্যবহারকারীর ইনপুট > দিয়ে শুরু হওয়া লাইনে): ```output Hello, I am Marvin, the friendly robot. @@ -200,9 +200,9 @@ It was nice talking to you, goodbye! ✅ জ্ঞান যাচাই -1. আপনি কি মনে করেন সহানুভূতিশীল প্রতিক্রিয়াগুলো কাউকে 'প্রতারণা' করতে পারে যাতে তারা মনে করে যে বটটি তাদের আসলেই বুঝেছে? -2. নাউন বাক্যাংশ চিহ্নিত করা কি বটকে আরও 'বিশ্বাসযোগ্য' করে তোলে? -3. কেন একটি বাক্য থেকে 'নাউন বাক্যাংশ' বের করা একটি দরকারী কাজ হতে পারে? +1. আপনি কি মনে করেন সহানুভূতিশীল প্রতিক্রিয়াগুলি কাউকে 'প্রতারণা' করতে পারে যাতে তারা মনে করে যে বটটি আসলে তাদের বুঝতে পেরেছে? +2. নাউন ফ্রেজ চিহ্নিত করা কি বটকে আরও 'বিশ্বাসযোগ্য' করে তোলে? +3. কেন একটি বাক্য থেকে 'নাউন ফ্রেজ' বের করা একটি দরকারী কাজ হতে পারে? --- @@ -212,11 +212,11 @@ It was nice talking to you, goodbye! পূর্ববর্তী জ্ঞান যাচাইয়ের একটি কাজ নিন এবং এটি বাস্তবায়ন করার চেষ্টা করুন। বটটি আপনার বন্ধুর উপর পরীক্ষা করুন। এটি কি তাদের প্রতারণা করতে পারে? আপনি কি আপনার বটকে আরও 'বিশ্বাসযোগ্য' করতে পারেন? -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/34/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা এবং স্ব-অধ্যয়ন -পরবর্তী কয়েকটি পাঠে আপনি অনুভূতি বিশ্লেষণ সম্পর্কে আরও শিখবেন। [KDNuggets](https://www.kdnuggets.com/tag/nlp)-এর মতো প্রবন্ধে এই আকর্ষণীয় কৌশলটি গবেষণা করুন। +পরবর্তী কয়েকটি পাঠে আপনি সেন্টিমেন্ট অ্যানালাইসিস সম্পর্কে আরও শিখবেন। [KDNuggets](https://www.kdnuggets.com/tag/nlp)-এর মতো প্রবন্ধে এই আকর্ষণীয় কৌশলটি গবেষণা করুন। ## অ্যাসাইনমেন্ট @@ -225,4 +225,4 @@ It was nice talking to you, goodbye! --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়বদ্ধ নই। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/6-NLP/3-Translation-Sentiment/README.md b/translations/bn/6-NLP/3-Translation-Sentiment/README.md index 6da8b3004..a002d6d94 100644 --- a/translations/bn/6-NLP/3-Translation-Sentiment/README.md +++ b/translations/bn/6-NLP/3-Translation-Sentiment/README.md @@ -1,36 +1,36 @@ -# মেশিন লার্নিং দিয়ে অনুবাদ এবং অনুভূতি বিশ্লেষণ +# অনুবাদ এবং অনুভূতি বিশ্লেষণ মেশিন লার্নিংয়ের মাধ্যমে -পূর্ববর্তী পাঠে আপনি `TextBlob` ব্যবহার করে একটি সাধারণ বট তৈরি করতে শিখেছেন, যা একটি লাইব্রেরি যা মৌলিক NLP কাজ যেমন noun phrase extraction সম্পাদন করতে পর্দার আড়ালে মেশিন লার্নিং ব্যবহার করে। কম্পিউটেশনাল ভাষাতত্ত্বের আরেকটি গুরুত্বপূর্ণ চ্যালেঞ্জ হলো একটি ভাষা থেকে অন্য ভাষায় সঠিকভাবে _অনুবাদ_ করা। +পূর্ববর্তী পাঠে আপনি শিখেছেন কীভাবে `TextBlob` ব্যবহার করে একটি সাধারণ বট তৈরি করা যায়। এটি একটি লাইব্রেরি যা মেশিন লার্নিংকে অন্তর্ভুক্ত করে এবং মৌলিক NLP কাজ যেমন noun phrase extraction সম্পাদন করে। কম্পিউটেশনাল ভাষাতত্ত্বের আরেকটি গুরুত্বপূর্ণ চ্যালেঞ্জ হলো একটি ভাষা থেকে অন্য ভাষায় সঠিকভাবে _অনুবাদ_ করা। -## [পূর্ব-পাঠ কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) +## [পূর্ব-পাঠ কুইজ](https://ff-quizzes.netlify.app/en/ml/) -অনুবাদ একটি অত্যন্ত কঠিন সমস্যা, কারণ পৃথিবীতে হাজার হাজার ভাষা রয়েছে এবং প্রতিটির ব্যাকরণ নিয়ম ভিন্ন হতে পারে। একটি পদ্ধতি হলো একটি ভাষার (যেমন ইংরেজি) আনুষ্ঠানিক ব্যাকরণ নিয়মকে একটি ভাষা-নিরপেক্ষ কাঠামোতে রূপান্তর করা এবং তারপর অন্য ভাষায় রূপান্তর করা। এই পদ্ধতিতে নিম্নলিখিত ধাপগুলো সম্পন্ন করতে হয়: +অনুবাদ একটি অত্যন্ত কঠিন সমস্যা, কারণ পৃথিবীতে হাজার হাজার ভাষা রয়েছে এবং প্রতিটির ব্যাকরণ নিয়ম ভিন্ন হতে পারে। একটি পদ্ধতি হলো একটি ভাষার (যেমন ইংরেজি) আনুষ্ঠানিক ব্যাকরণ নিয়মকে একটি ভাষা-নিরপেক্ষ কাঠামোয় রূপান্তর করা এবং তারপর এটি অন্য ভাষায় রূপান্তর করা। এই পদ্ধতিতে নিম্নলিখিত ধাপগুলো অন্তর্ভুক্ত: 1. **সনাক্তকরণ**। ইনপুট ভাষার শব্দগুলোকে noun, verb ইত্যাদি হিসেবে চিহ্নিত বা ট্যাগ করা। -2. **অনুবাদ তৈরি করা**। লক্ষ্য ভাষার ফরম্যাটে প্রতিটি শব্দের সরাসরি অনুবাদ তৈরি করা। +2. **অনুবাদ তৈরি**। লক্ষ্য ভাষার ফরম্যাটে প্রতিটি শব্দের সরাসরি অনুবাদ তৈরি করা। ### উদাহরণ বাক্য, ইংরেজি থেকে আইরিশ -ইংরেজি ভাষায়, বাক্য _I feel happy_ তিনটি শব্দ নিয়ে গঠিত এবং এর ক্রম হলো: +'ইংরেজি'তে, বাক্য _I feel happy_ তিনটি শব্দ নিয়ে গঠিত এবং এর ক্রম হলো: - **subject** (I) - **verb** (feel) - **adjective** (happy) -তবে, আইরিশ ভাষায় একই বাক্যের ব্যাকরণ কাঠামো সম্পূর্ণ ভিন্ন - "*happy*" বা "*sad*" এর মতো আবেগগুলোকে *upon* (উপর) হিসেবে প্রকাশ করা হয়। +তবে, 'আইরিশ' ভাষায় একই বাক্যের ব্যাকরণ কাঠামো সম্পূর্ণ ভিন্ন। "*happy*" বা "*sad*" এর মতো আবেগগুলোকে *upon* (উপর) হিসেবে প্রকাশ করা হয়। ইংরেজি বাক্য `I feel happy` আইরিশ ভাষায় হবে `Tá athas orm`। একটি *শব্দগত* অনুবাদ হবে `Happy is upon me`। -একজন আইরিশ ভাষাভাষী ইংরেজিতে অনুবাদ করলে বলবে `I feel happy`, `Happy is upon me` নয়, কারণ তারা বাক্যের অর্থ বুঝতে পারে, যদিও শব্দ এবং বাক্য কাঠামো ভিন্ন। +একজন আইরিশ ভাষাভাষী ইংরেজিতে অনুবাদ করলে বলবেন `I feel happy`, `Happy is upon me` নয়, কারণ তারা বাক্যের অর্থ বুঝতে পারেন, যদিও শব্দ এবং বাক্য গঠন ভিন্ন। আইরিশ ভাষায় বাক্যের আনুষ্ঠানিক ক্রম হলো: @@ -40,23 +40,23 @@ CO_OP_TRANSLATOR_METADATA: ## অনুবাদ -একটি সরল অনুবাদ প্রোগ্রাম শুধুমাত্র শব্দ অনুবাদ করতে পারে, বাক্য কাঠামো উপেক্ষা করে। +একটি সরল অনুবাদ প্রোগ্রাম শুধুমাত্র শব্দ অনুবাদ করতে পারে, বাক্য গঠন উপেক্ষা করে। -✅ যদি আপনি একজন প্রাপ্তবয়স্ক হিসেবে দ্বিতীয় (বা তৃতীয় বা আরও বেশি) ভাষা শিখে থাকেন, তাহলে আপনি হয়তো আপনার মাতৃভাষায় চিন্তা করে, শব্দ ধরে ধরে দ্বিতীয় ভাষায় অনুবাদ করে এবং তারপর আপনার অনুবাদটি উচ্চারণ করে শুরু করেছিলেন। এটি সরল অনুবাদ কম্পিউটার প্রোগ্রামগুলোর কাজের মতো। সাবলীলতা অর্জনের জন্য এই পর্যায়টি অতিক্রম করা গুরুত্বপূর্ণ! +✅ যদি আপনি একজন প্রাপ্তবয়স্ক হিসেবে দ্বিতীয় (বা তৃতীয় বা আরও বেশি) ভাষা শিখে থাকেন, তাহলে আপনি হয়তো আপনার মাতৃভাষায় চিন্তা করে, শব্দ ধরে ধরে দ্বিতীয় ভাষায় অনুবাদ করে এবং তারপর আপনার অনুবাদটি উচ্চারণ করে শুরু করেছিলেন। এটি সরল অনুবাদ কম্পিউটার প্রোগ্রামগুলোর কাজের মতো। সাবলীলতা অর্জনের জন্য এই ধাপটি অতিক্রম করা গুরুত্বপূর্ণ! -সরল অনুবাদ খারাপ (এবং কখনও কখনও হাস্যকর) ভুল অনুবাদ তৈরি করে: `I feel happy` আইরিশ ভাষায় শব্দগতভাবে অনুবাদ করলে হয় `Mise bhraitheann athas`। এর অর্থ (শব্দগতভাবে) `me feel happy` এবং এটি একটি বৈধ আইরিশ বাক্য নয়। যদিও ইংরেজি এবং আইরিশ দুটি ভাষা দুটি কাছাকাছি দ্বীপে কথিত হয়, এগুলো খুবই ভিন্ন ভাষা এবং ব্যাকরণ কাঠামোও ভিন্ন। +সরল অনুবাদ খারাপ (এবং কখনও কখনও হাস্যকর) ভুল অনুবাদ তৈরি করে: `I feel happy` আইরিশ ভাষায় শব্দগতভাবে অনুবাদ করলে হয় `Mise bhraitheann athas`। এর অর্থ (শব্দগতভাবে) `me feel happy` এবং এটি একটি বৈধ আইরিশ বাক্য নয়। যদিও ইংরেজি এবং আইরিশ দুটি প্রতিবেশী দ্বীপে কথিত ভাষা, এগুলো খুবই ভিন্ন ভাষা এবং ব্যাকরণ কাঠামোও ভিন্ন। -> আপনি আইরিশ ভাষার ঐতিহ্য সম্পর্কে কিছু ভিডিও দেখতে পারেন যেমন [এই ভিডিওটি](https://www.youtube.com/watch?v=mRIaLSdRMMs) +> আপনি আইরিশ ভাষার ঐতিহ্য সম্পর্কে কিছু ভিডিও দেখতে পারেন, যেমন [এই ভিডিওটি](https://www.youtube.com/watch?v=mRIaLSdRMMs) ### মেশিন লার্নিং পদ্ধতি এখন পর্যন্ত, আপনি প্রাকৃতিক ভাষা প্রক্রিয়াকরণের আনুষ্ঠানিক নিয়ম পদ্ধতি সম্পর্কে শিখেছেন। আরেকটি পদ্ধতি হলো শব্দের অর্থ উপেক্ষা করা এবং _মেশিন লার্নিং ব্যবহার করে প্যাটার্ন সনাক্ত করা_। যদি আপনার কাছে প্রচুর টেক্সট (একটি *corpus*) বা টেক্সটসমূহ (*corpora*) থাকে উত্স এবং লক্ষ্য ভাষায়, তাহলে এটি অনুবাদে কাজ করতে পারে। -উদাহরণস্বরূপ, *Pride and Prejudice*, একটি বিখ্যাত ইংরেজি উপন্যাস যা ১৮১৩ সালে জেন অস্টেন লিখেছেন। যদি আপনি বইটি ইংরেজিতে এবং এর একটি মানব অনুবাদ *ফরাসি* ভাষায় পরামর্শ করেন, তাহলে আপনি একটিতে এমন বাক্যাংশ সনাক্ত করতে পারেন যা অন্যটিতে _idiomatically_ অনুবাদ করা হয়েছে। আপনি এটি কিছুক্ষণের মধ্যে করবেন। +উদাহরণস্বরূপ, *Pride and Prejudice*, একটি বিখ্যাত ইংরেজি উপন্যাস যা ১৮১৩ সালে জেন অস্টেন লিখেছেন। যদি আপনি বইটি ইংরেজিতে এবং এর একটি মানব অনুবাদ *ফরাসি*তে পর্যালোচনা করেন, তাহলে আপনি একটিতে এমন বাক্যাংশ সনাক্ত করতে পারেন যা অন্যটিতে _idiomatically_ অনুবাদ করা হয়েছে। আপনি এটি কিছুক্ষণের মধ্যে করবেন। -উদাহরণস্বরূপ, যখন একটি ইংরেজি বাক্যাংশ `I have no money` শব্দগতভাবে ফরাসি ভাষায় অনুবাদ করা হয়, এটি হতে পারে `Je n'ai pas de monnaie`। "Monnaie" একটি জটিল ফরাসি 'false cognate', কারণ 'money' এবং 'monnaie' সমার্থক নয়। একজন মানব অনুবাদক একটি ভালো অনুবাদ করতে পারে `Je n'ai pas d'argent`, কারণ এটি ভালোভাবে বোঝায় যে আপনার কোনো টাকা নেই (বরং 'loose change' যা 'monnaie' এর অর্থ)। +উদাহরণস্বরূপ, যখন একটি ইংরেজি বাক্যাংশ `I have no money` শব্দগতভাবে ফরাসিতে অনুবাদ করা হয়, এটি হতে পারে `Je n'ai pas de monnaie`। "Monnaie" একটি জটিল ফরাসি 'false cognate', কারণ 'money' এবং 'monnaie' সমার্থক নয়। একজন মানব অনুবাদক একটি ভালো অনুবাদ করতে পারেন `Je n'ai pas d'argent`, কারণ এটি ভালোভাবে বোঝায় যে আপনার কোনো টাকা নেই (বরং 'loose change' যা 'monnaie'-এর অর্থ)। -![monnaie](../../../../translated_images/monnaie.606c5fa8369d5c3b3031ef0713e2069485c87985dd475cd9056bdf4c76c1f4b8.bn.png) +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) > ছবি: [Jen Looper](https://twitter.com/jenlooper) @@ -64,7 +64,7 @@ CO_OP_TRANSLATOR_METADATA: ### অনুশীলন - অনুবাদ -আপনি `TextBlob` ব্যবহার করে বাক্য অনুবাদ করতে পারেন। **Pride and Prejudice** এর বিখ্যাত প্রথম লাইনটি চেষ্টা করুন: +আপনি `TextBlob` ব্যবহার করে বাক্য অনুবাদ করতে পারেন। **Pride and Prejudice**-এর বিখ্যাত প্রথম লাইনটি চেষ্টা করুন: ```python from textblob import TextBlob @@ -78,13 +78,13 @@ 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 এর অনুবাদটি ১৯৩২ সালে V. Leconte এবং Ch. Pressoir এর ফরাসি অনুবাদের চেয়ে অনেক বেশি সঠিক: +এটি যুক্তি দেওয়া যেতে পারে যে TextBlob-এর অনুবাদটি আসলে ১৯৩২ সালে 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." -এই ক্ষেত্রে, ML দ্বারা পরিচালিত অনুবাদটি মানব অনুবাদকের চেয়ে ভালো কাজ করেছে, যিনি অপ্রয়োজনীয়ভাবে মূল লেখকের বক্তব্যে অতিরিক্ত শব্দ যোগ করেছেন 'স্পষ্টতার' জন্য। +এই ক্ষেত্রে, ML দ্বারা পরিচালিত অনুবাদটি মানব অনুবাদকের চেয়ে ভালো কাজ করেছে, যিনি অপ্রয়োজনীয়ভাবে মূল লেখকের কথায় অতিরিক্ত শব্দ যোগ করেছেন 'স্পষ্টতার' জন্য। -> এখানে কী ঘটছে? এবং কেন TextBlob অনুবাদে এত ভালো? আসলে, এটি Google Translate ব্যবহার করছে, একটি উন্নত AI যা লক্ষ লক্ষ বাক্যাংশ বিশ্লেষণ করতে পারে এবং নির্দিষ্ট কাজের জন্য সেরা স্ট্রিংগুলি পূর্বাভাস দিতে পারে। এখানে কিছুই ম্যানুয়াল নয় এবং `blob.translate` ব্যবহার করতে আপনার ইন্টারনেট সংযোগ প্রয়োজন। +> এখানে কী ঘটছে? এবং কেন TextBlob অনুবাদে এত ভালো? আসলে, এটি Google Translate ব্যবহার করছে, একটি উন্নত AI যা লক্ষ লক্ষ বাক্যাংশ বিশ্লেষণ করতে পারে এবং নির্দিষ্ট কাজের জন্য সেরা স্ট্রিংগুলো পূর্বাভাস দিতে পারে। এখানে কিছুই ম্যানুয়াল নয় এবং `blob.translate` ব্যবহার করতে আপনার ইন্টারনেট সংযোগ প্রয়োজন। ✅ আরও কিছু বাক্য চেষ্টা করুন। কোনটি ভালো, ML না মানব অনুবাদ? কোন ক্ষেত্রে? @@ -92,27 +92,27 @@ print(blob.translate(to="fr")) মেশিন লার্নিং খুব ভালোভাবে কাজ করতে পারে এমন আরেকটি ক্ষেত্র হলো অনুভূতি বিশ্লেষণ। একটি non-ML পদ্ধতি হলো 'positive' এবং 'negative' শব্দ এবং বাক্যাংশ সনাক্ত করা। তারপর, একটি নতুন টেক্সট দেওয়া হলে, positive, negative এবং neutral শব্দগুলোর মোট মান গণনা করে সামগ্রিক অনুভূতি সনাক্ত করা। -এই পদ্ধতি সহজেই বিভ্রান্ত হতে পারে যেমন আপনি Marvin টাস্কে দেখেছেন - বাক্যটি `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` একটি ব্যঙ্গাত্মক, negative অনুভূতির বাক্য, কিন্তু সহজ অ্যালগরিদমটি 'great', 'wonderful', 'glad' কে positive এবং 'waste', 'lost' এবং 'dark' কে negative হিসেবে সনাক্ত করে। সামগ্রিক অনুভূতি এই বিরোধপূর্ণ শব্দগুলোর দ্বারা প্রভাবিত হয়। +এই পদ্ধতিটি সহজেই বিভ্রান্ত হতে পারে যেমন আপনি Marvin টাস্কে দেখেছেন - বাক্যটি `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` একটি ব্যঙ্গাত্মক, negative অনুভূতির বাক্য, কিন্তু সহজ অ্যালগরিদমটি 'great', 'wonderful', 'glad' কে positive এবং 'waste', 'lost' এবং 'dark' কে negative হিসেবে সনাক্ত করে। সামগ্রিক অনুভূতি এই বিরোধপূর্ণ শব্দগুলোর দ্বারা প্রভাবিত হয়। -✅ এক মুহূর্ত থামুন এবং ভাবুন আমরা মানুষ হিসেবে কীভাবে ব্যঙ্গ প্রকাশ করি। স্বরের ওঠানামা একটি বড় ভূমিকা পালন করে। "Well, that film was awesome" বাক্যটি বিভিন্নভাবে বলার চেষ্টা করুন এবং দেখুন কীভাবে আপনার কণ্ঠ অর্থ প্রকাশ করে। +✅ এক মুহূর্ত থামুন এবং ভাবুন আমরা মানুষ হিসেবে কীভাবে ব্যঙ্গ প্রকাশ করি। স্বরের ওঠানামা এখানে বড় ভূমিকা পালন করে। "Well, that film was awesome" বাক্যটি বিভিন্নভাবে বলার চেষ্টা করুন এবং দেখুন কীভাবে আপনার কণ্ঠ অর্থ প্রকাশ করে। ### ML পদ্ধতি -ML পদ্ধতি হলো negative এবং positive টেক্সটের সংগ্রহ - টুইট, বা মুভি রিভিউ, বা যেকোনো কিছু যেখানে মানুষ একটি স্কোর *এবং* একটি লিখিত মতামত দিয়েছে। তারপর NLP কৌশলগুলো মতামত এবং স্কোরের উপর প্রয়োগ করা যায়, যাতে প্যাটার্নগুলো প্রকাশ পায় (যেমন, positive মুভি রিভিউতে 'Oscar worthy' বাক্যাংশটি negative মুভি রিভিউয়ের চেয়ে বেশি থাকে, বা positive রেস্টুরেন্ট রিভিউতে 'gourmet' শব্দটি 'disgusting' এর চেয়ে বেশি থাকে)। +ML পদ্ধতিতে negative এবং positive টেক্সটের সংগ্রহ - টুইট, বা মুভি রিভিউ, বা যেকোনো কিছু যেখানে মানুষ একটি স্কোর *এবং* একটি লিখিত মতামত দিয়েছে - ম্যানুয়ালি সংগ্রহ করা হয়। তারপর NLP কৌশলগুলো মতামত এবং স্কোরে প্রয়োগ করা হয়, যাতে প্যাটার্নগুলো উদ্ভাসিত হয় (যেমন, positive মুভি রিভিউতে 'Oscar worthy' বাক্যাংশটি negative মুভি রিভিউয়ের চেয়ে বেশি থাকে, বা positive রেস্টুরেন্ট রিভিউতে 'gourmet' শব্দটি 'disgusting' শব্দের চেয়ে বেশি থাকে)। -> ⚖️ **উদাহরণ**: ধরুন আপনি একজন রাজনীতিবিদের অফিসে কাজ করছেন এবং একটি নতুন আইন নিয়ে বিতর্ক চলছে, জনগণ অফিসে ইমেইল লিখে আইনটির পক্ষে বা বিপক্ষে মতামত জানাচ্ছে। ধরুন আপনাকে ইমেইলগুলো পড়তে এবং দুটি ভাগে সাজাতে বলা হলো, *পক্ষে* এবং *বিপক্ষে*। যদি প্রচুর ইমেইল থাকে, তাহলে আপনি সবগুলো পড়তে গিয়ে অভিভূত হতে পারেন। যদি একটি বট সবগুলো ইমেইল পড়ে, বুঝতে পারে এবং কোন ভাগে ইমেইলটি রাখা উচিত তা বলে দেয়, তাহলে কি ভালো হতো না? +> ⚖️ **উদাহরণ**: ধরুন আপনি একজন রাজনীতিবিদের অফিসে কাজ করছেন এবং একটি নতুন আইন নিয়ে বিতর্ক চলছে। জনগণ হয়তো অফিসে ইমেইল লিখে আইনটির পক্ষে বা বিপক্ষে মতামত জানাচ্ছে। ধরুন আপনাকে ইমেইলগুলো পড়তে এবং দুটি ভাগে সাজাতে বলা হলো, *পক্ষে* এবং *বিপক্ষে*। যদি প্রচুর ইমেইল থাকে, তাহলে আপনি সবগুলো পড়তে গিয়ে অভিভূত হতে পারেন। যদি একটি বট সবগুলো ইমেইল পড়ে, বুঝতে পারে এবং কোন ইমেইল কোন ভাগে যাবে তা বলে দিতে পারে, তাহলে কি ভালো হতো না? > -> এটি অর্জনের একটি উপায় হলো মেশিন লার্নিং ব্যবহার করা। আপনি মডেলটি কিছু *বিপক্ষে* ইমেইল এবং কিছু *পক্ষে* ইমেইল দিয়ে প্রশিক্ষণ দেবেন। মডেলটি শব্দ এবং প্যাটার্নগুলোকে বিপক্ষে বা পক্ষে ইমেইলের সাথে যুক্ত করতে পারে, *কিন্তু এটি কোনো বিষয়বস্তু বুঝবে না*, শুধুমাত্র নির্দিষ্ট শব্দ এবং প্যাটার্নগুলো বিপক্ষে বা পক্ষে ইমেইলে বেশি দেখা যায়। আপনি এটি এমন কিছু ইমেইল দিয়ে পরীক্ষা করতে পারেন যা আপনি মডেল প্রশিক্ষণে ব্যবহার করেননি এবং দেখুন এটি আপনার সিদ্ধান্তের সাথে একমত কিনা। তারপর, যখন আপনি মডেলের সঠিকতায় সন্তুষ্ট হবেন, তখন ভবিষ্যতের ইমেইলগুলো প্রক্রিয়া করতে পারবেন প্রতিটি ইমেইল না পড়ে। +> এটি অর্জনের একটি উপায় হলো মেশিন লার্নিং ব্যবহার করা। আপনি মডেলটিকে কিছু *বিপক্ষে* ইমেইল এবং কিছু *পক্ষে* ইমেইল দিয়ে প্রশিক্ষণ দেবেন। মডেলটি শব্দ এবং প্যাটার্নগুলোকে বিপক্ষে বা পক্ষে ইমেইলের সাথে যুক্ত করতে পারে, *কিন্তু এটি কোনো বিষয়বস্তু বুঝবে না*, শুধুমাত্র নির্দিষ্ট শব্দ এবং প্যাটার্নগুলো বিপক্ষে বা পক্ষে ইমেইলে বেশি দেখা যায়। আপনি এটি এমন কিছু ইমেইল দিয়ে পরীক্ষা করতে পারেন যা আপনি মডেল প্রশিক্ষণে ব্যবহার করেননি এবং দেখুন এটি আপনার সিদ্ধান্তের সাথে মিলেছে কিনা। তারপর, যখন আপনি মডেলের সঠিকতায় সন্তুষ্ট হবেন, আপনি ভবিষ্যতের ইমেইলগুলো প্রক্রিয়া করতে পারবেন প্রতিটি ইমেইল না পড়ে। ✅ এই প্রক্রিয়াটি কি আপনি পূর্ববর্তী পাঠে ব্যবহৃত কোনো প্রক্রিয়ার মতো মনে হয়? ## অনুশীলন - অনুভূতিমূলক বাক্য -অনুভূতি *polarity* -১ থেকে ১ এর মধ্যে পরিমাপ করা হয়, যেখানে -১ সবচেয়ে negative অনুভূতি এবং ১ সবচেয়ে positive। অনুভূতি ০ - ১ স্কোর দিয়ে objectivity (০) এবং subjectivity (১) হিসেবেও পরিমাপ করা হয়। +অনুভূতি *polarity* -১ থেকে ১ দিয়ে পরিমাপ করা হয়, যেখানে -১ সবচেয়ে negative অনুভূতি এবং ১ সবচেয়ে positive। অনুভূতি ০ থেকে ১ স্কোর দিয়ে objectivity (০) এবং subjectivity (১) হিসেবেও পরিমাপ করা হয়। -জেন অস্টেনের *Pride and Prejudice* এর দিকে আবার তাকান। টেক্সটটি এখানে পাওয়া যাবে [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm)। নিচের নমুনাটি একটি ছোট প্রোগ্রাম দেখায় যা বইয়ের প্রথম এবং শেষ বাক্যের অনুভূতি বিশ্লেষণ করে এবং এর sentiment polarity এবং subjectivity/objectivity স্কোর প্রদর্শন করে। +জেন অস্টেনের *Pride and Prejudice* আবার দেখুন। টেক্সটটি এখানে পাওয়া যাবে [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm)। নিচের নমুনাটি একটি ছোট প্রোগ্রাম দেখায় যা বইয়ের প্রথম এবং শেষ বাক্যের অনুভূতি বিশ্লেষণ করে এবং এর sentiment polarity এবং subjectivity/objectivity স্কোর প্রদর্শন করে। -আপনাকে `TextBlob` লাইব্রেরি (উপরে বর্ণিত) ব্যবহার করে `sentiment` নির্ধারণ করতে হবে (আপনার নিজস্ব sentiment calculator লিখতে হবে না) নিম্নলিখিত কাজে। +আপনাকে `TextBlob` লাইব্রেরি (উপরের বর্ণনা অনুযায়ী) ব্যবহার করে `sentiment` নির্ধারণ করতে হবে (আপনার নিজস্ব sentiment calculator লিখতে হবে না) নিম্নলিখিত কাজে। ```python from textblob import TextBlob @@ -139,17 +139,17 @@ Darcy, as well as Elizabeth, really loved them; and they were uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) ``` -## চ্যালেঞ্জ - sentiment polarity পরীক্ষা করুন +## চ্যালেঞ্জ - অনুভূতি polarity পরীক্ষা করুন -আপনার কাজ হলো sentiment polarity ব্যবহার করে নির্ধারণ করা যে *Pride and Prejudice* এ absolutely positive বাক্যগুলো absolutely negative বাক্যগুলোর চেয়ে বেশি কিনা। এই কাজের জন্য, আপনি ধরে নিতে পারেন যে polarity স্কোর ১ বা -১ absolutely positive বা negative যথাক্রমে। +আপনার কাজ হলো sentiment polarity ব্যবহার করে নির্ধারণ করা, *Pride and Prejudice*-এ absolutely positive বাক্যগুলো absolutely negative বাক্যগুলোর চেয়ে বেশি কিনা। এই কাজের জন্য, আপনি ধরে নিতে পারেন যে polarity স্কোর ১ বা -১ absolutely positive বা negative যথাক্রমে। **ধাপসমূহ:** -1. [Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) এর একটি কপি Project Gutenberg থেকে .txt ফাইল হিসেবে ডাউনলোড করুন। ফাইলের শুরু এবং শেষের মেটাডেটা সরিয়ে শুধুমাত্র মূল টেক্সট রেখে দিন। -2. ফাইলটি Python এ খুলুন এবং এর বিষয়বস্তু একটি string হিসেবে বের করুন। +1. [Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm)-এর একটি কপি Project Gutenberg থেকে .txt ফাইল হিসেবে ডাউনলোড করুন। ফাইলের শুরু এবং শেষের মেটাডেটা সরিয়ে শুধুমাত্র মূল টেক্সট রাখুন। +2. ফাইলটি Python-এ খুলুন এবং এর বিষয়বস্তু একটি string হিসেবে বের করুন। 3. বই string ব্যবহার করে একটি TextBlob তৈরি করুন। 4. একটি লুপে বইয়ের প্রতিটি বাক্য বিশ্লেষণ করুন। - 1. যদি polarity ১ বা -১ হয়, তাহলে বাক্যটি positive বা negative বার্তাগুলোর একটি array বা list এ সংরক্ষণ করুন। + 1. যদি polarity ১ বা -১ হয়, তাহলে বাক্যটি positive বা negative বার্তাগুলোর একটি array বা list-এ সংরক্ষণ করুন। 5. শেষে, সমস্ত positive বাক্য এবং negative বাক্য (আলাদাভাবে) এবং প্রতিটির সংখ্যা প্রিন্ট করুন। এখানে একটি নমুনা [সমাধান](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb)। @@ -157,8 +157,8 @@ Darcy, as well as Elizabeth, really loved them; and they were ✅ জ্ঞান যাচাই 1. অনুভূতি বাক্যে ব্যবহৃত শব্দের উপর ভিত্তি করে, কিন্তু কোড কি শব্দগুলো *বুঝতে* পারে? -2. আপনি কি sentiment polarity এর সঠিকতা নিয়ে একমত, বা অন্যভাবে বললে, আপনি কি স্কোরগুলোর সাথে *একমত*? - 1. বিশেষ করে, আপনি কি নিম্নলিখিত বাক্যগুলোর absolute **positive** polarity এর সাথে একমত বা দ্বিমত? +2. আপনি কি sentiment polarity-এর সাথে একমত, বা অন্য কথায়, আপনি কি স্কোরগুলো *সঠিক* মনে করেন? + 1. বিশেষ করে, আপনি কি নিম্নলিখিত বাক্যগুলোর absolute **positive** 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! @@ -167,28 +167,28 @@ Darcy, as well as Elizabeth, really loved them; and they were * “This is delightful indeed! * I am so happy! * Your idea of the ponies is delightful. - 2. পরবর্তী ৩টি বাক্য absolute positive sentiment দিয়ে স্কোর করা হয়েছে, কিন্তু গভীরভাবে পড়লে, এগুলো positive বাক্য নয়। কেন sentiment analysis মনে করেছে এগুলো positive বাক্য? + 2. পরবর্তী ৩টি বাক্য absolute positive sentiment দিয়ে স্কোর করা হয়েছে, কিন্তু গভীরভাবে পড়লে, এগুলো positive বাক্য নয়। কেন sentiment analysis এগুলো 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. * If I could but see you as happy! * Our distress, my dear Lizzy, is very great. - 3. আপনি কি নিম্নলিখিত বাক্যগুলোর absolute **negative** polarity এর সাথে একমত বা দ্বিমত? + 3. আপনি কি নিম্নলিখিত বাক্যগুলোর absolute **negative** 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! -✅ জেন অস্টেনের কোনো অনুরাগী বুঝতে পারবেন যে তিনি প্রায়ই তার বইগুলোতে ইংরেজি রিজেন্সি সমাজের আরও হাস্যকর দিকগুলো সমালোচনা করেন। *Pride and Prejudice* এর প্রধান চরিত্র এলিজাবেথ বেনেট একজন তীক্ষ্ণ সামাজিক পর্যবেক্ষক (লেখকের মতো) এবং তার ভাষা প্রায়ই গভীরভাবে সূক্ষ্ম। এমনকি মিস্টার ডারসি (গল্পের প্রেমের চরিত্র) এলিজাবেথের খেলাধুলাপূর্ণ এবং ঠাট্টামূলক ভাষার ব্যবহার লক্ষ্য করেন: "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." +✅ জেন অস্টেনের কোনো অনুরাগী বুঝবেন যে তিনি প্রায়ই তার বইগুলোতে ইংরেজি রিজেন্সি সমাজের আরও হাস্যকর দিকগুলো সমালোচনা করেন। *Pride and Prejudice*-এর প্রধান চরিত্র এলিজাবেথ বেনেট একজন তীক্ষ্ণ সামাজিক পর্যবেক্ষক (লেখকের মতো) এবং তার ভাষা প্রায়ই গভীরভাবে সূক্ষ্ম। এমনকি মিস্টার ডারসি (গল্পের প্রেমের চরিত্র) এলিজাবেথের খেলাধুলাপূর্ণ এবং ঠাট্টামূলক ভাষার ব্যবহার লক্ষ্য করেন: "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." --- ## 🚀চ্যালেঞ্জ -আপনি কি Marvin কে আরও ভালো করতে পারেন ব্যবহারকারীর ইনপুট থেকে অন্যান্য বৈশিষ্ট্য বের করে? +আপনি কি Marvin-কে আরও ভালো করতে পারেন ব্যবহারকারীর ইনপুট থেকে অন্যান্য বৈশিষ্ট্য বের করে? -## [পাঠ-পরবর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) +## [পাঠ-পরবর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## পর্যালোচনা এবং স্ব-অধ্যয়ন -টেক্সট থেকে অনুভূতি নির্ণয়ের অনেক পদ্ধতি রয়েছে। এই কৌশলটি ব্যবহার করে ব্যবসায়িক প্রয়োগগুলোর কথা ভাবুন। এটি কীভাবে ভুল পথে যেতে পারে, সেটাও চিন্তা করুন। উন্নত এবং এন্টারপ্রাইজ-প্রস্তুত সিস্টেম সম্পর্কে আরও জানুন, যা অনুভূতি বিশ্লেষণ করে, যেমন [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott)। উপরের "Pride and Prejudice" এর কিছু বাক্য পরীক্ষা করুন এবং দেখুন এটি সূক্ষ্মতা শনাক্ত করতে পারে কিনা। +## পর্যালোচনা ও স্ব-অধ্যয়ন +টেক্সট থেকে অনুভূতি নির্ণয়ের অনেক পদ্ধতি রয়েছে। এই প্রযুক্তি ব্যবহার করে ব্যবসায়িক প্রয়োগগুলি সম্পর্কে চিন্তা করুন। এটি কীভাবে ভুল হতে পারে তা নিয়ে ভাবুন। উন্নত এন্টারপ্রাইজ-প্রস্তুত সিস্টেম সম্পর্কে আরও পড়ুন যা অনুভূতি বিশ্লেষণ করে, যেমন [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 বাক্যগুলির কিছু পরীক্ষা করুন এবং দেখুন এটি সূক্ষ্মতা শনাক্ত করতে পারে কিনা। ## অ্যাসাইনমেন্ট @@ -197,4 +197,4 @@ Darcy, as well as Elizabeth, really loved them; and they were --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/6-NLP/4-Hotel-Reviews-1/README.md b/translations/bn/6-NLP/4-Hotel-Reviews-1/README.md index 980ef4ecc..9d12c2dd9 100644 --- a/translations/bn/6-NLP/4-Hotel-Reviews-1/README.md +++ b/translations/bn/6-NLP/4-Hotel-Reviews-1/README.md @@ -1,25 +1,25 @@ # হোটেল রিভিউ দিয়ে সেন্টিমেন্ট অ্যানালাইসিস - ডেটা প্রক্রিয়াকরণ -এই সেকশনে আপনি আগের পাঠে শেখা কৌশলগুলো ব্যবহার করে একটি বড় ডেটাসেটের উপর কিছু অনুসন্ধানমূলক ডেটা বিশ্লেষণ করবেন। বিভিন্ন কলামের কার্যকারিতা সম্পর্কে ভালো ধারণা পাওয়ার পর, আপনি শিখবেন: +এই অংশে আপনি আগের পাঠে শেখা কৌশল ব্যবহার করে একটি বড় ডেটাসেটের উপর কিছু অনুসন্ধানমূলক ডেটা বিশ্লেষণ করবেন। বিভিন্ন কলামের কার্যকারিতা সম্পর্কে ভালো ধারণা পাওয়ার পর, আপনি শিখবেন: - কীভাবে অপ্রয়োজনীয় কলামগুলো সরানো যায় -- কীভাবে বিদ্যমান কলাম থেকে নতুন ডেটা গণনা করা যায় +- কীভাবে বিদ্যমান কলামগুলোর উপর ভিত্তি করে নতুন ডেটা গণনা করা যায় - কীভাবে চূড়ান্ত চ্যালেঞ্জের জন্য ডেটাসেট সংরক্ষণ করা যায় -## [পূর্ব-পাঠ কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/37/) +## [পূর্ব-পাঠ কুইজ](https://ff-quizzes.netlify.app/en/ml/) ### ভূমিকা -এখন পর্যন্ত আপনি শিখেছেন যে টেক্সট ডেটা সংখ্যাসূচক ডেটার মতো নয়। যদি এটি মানুষের লেখা বা বলা টেক্সট হয়, তবে এটি বিশ্লেষণ করে প্যাটার্ন, ফ্রিকোয়েন্সি, সেন্টিমেন্ট এবং অর্থ খুঁজে বের করা যায়। এই পাঠে আপনাকে একটি বাস্তব ডেটাসেট এবং একটি বাস্তব চ্যালেঞ্জের সাথে পরিচয় করানো হবে: **[ইউরোপের ৫১৫ হাজার হোটেল রিভিউ ডেটা](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, যা [CC0: পাবলিক ডোমেইন লাইসেন্স](https://creativecommons.org/publicdomain/zero/1.0/) এর অধীনে রয়েছে। এটি Booking.com থেকে পাবলিক সোর্স থেকে সংগ্রহ করা হয়েছে। ডেটাসেটটি তৈরি করেছেন জিয়াশেন লিউ। +এখন পর্যন্ত আপনি শিখেছেন যে টেক্সট ডেটা সংখ্যাসূচক ডেটার মতো নয়। যদি এটি মানুষের লেখা বা বলা টেক্সট হয়, তবে এটি বিশ্লেষণ করে প্যাটার্ন, ফ্রিকোয়েন্সি, সেন্টিমেন্ট এবং অর্থ খুঁজে বের করা যায়। এই পাঠ আপনাকে একটি বাস্তব ডেটাসেট এবং একটি বাস্তব চ্যালেঞ্জে নিয়ে যাবে: **[ইউরোপের ৫১৫ হাজার হোটেল রিভিউ ডেটা](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, যা [CC0: পাবলিক ডোমেইন লাইসেন্স](https://creativecommons.org/publicdomain/zero/1.0/) অন্তর্ভুক্ত। এটি Booking.com থেকে পাবলিক সোর্স থেকে সংগ্রহ করা হয়েছে। ডেটাসেটের নির্মাতা হলেন Jiashen Liu। ### প্রস্তুতি @@ -28,100 +28,100 @@ CO_OP_TRANSLATOR_METADATA: * Python 3 ব্যবহার করে .ipynb নোটবুক চালানোর সক্ষমতা * pandas * NLTK, [যা আপনাকে লোকালভাবে ইন্সটল করতে হবে](https://www.nltk.org/install.html) -* ডেটাসেট, যা Kaggle-এ পাওয়া যাবে [ইউরোপের ৫১৫ হাজার হোটেল রিভিউ ডেটা](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)। আনজিপ করার পর এটি প্রায় ২৩০ এমবি। এটি এই NLP পাঠগুলোর সাথে সম্পর্কিত `/data` ফোল্ডারে ডাউনলোড করুন। +* Kaggle-এ উপলব্ধ ডেটাসেট [ইউরোপের ৫১৫ হাজার হোটেল রিভিউ ডেটা](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)। আনজিপ করার পর এটি প্রায় ২৩০ MB। এটি এই NLP পাঠের সাথে সম্পর্কিত `/data` ফোল্ডারে ডাউনলোড করুন। ## অনুসন্ধানমূলক ডেটা বিশ্লেষণ -এই চ্যালেঞ্জটি ধরে নেয় যে আপনি সেন্টিমেন্ট অ্যানালাইসিস এবং অতিথিদের রিভিউ স্কোর ব্যবহার করে একটি হোটেল রিকমেন্ডেশন বট তৈরি করছেন। আপনি যে ডেটাসেটটি ব্যবহার করবেন, তাতে ৬টি শহরের ১৪৯৩টি ভিন্ন হোটেলের রিভিউ অন্তর্ভুক্ত রয়েছে। +এই চ্যালেঞ্জটি ধরে নেয় যে আপনি সেন্টিমেন্ট অ্যানালাইসিস এবং অতিথির রিভিউ স্কোর ব্যবহার করে একটি হোটেল রিকমেন্ডেশন বট তৈরি করছেন। আপনি যে ডেটাসেট ব্যবহার করবেন তাতে ৬টি শহরের ১৪৯৩টি হোটেলের রিভিউ অন্তর্ভুক্ত রয়েছে। Python, হোটেল রিভিউ ডেটাসেট এবং NLTK-এর সেন্টিমেন্ট অ্যানালাইসিস ব্যবহার করে আপনি জানতে পারবেন: -* রিভিউতে সবচেয়ে বেশি ব্যবহৃত শব্দ এবং বাক্যাংশ কী কী? -* হোটেল বর্ণনা করার জন্য ব্যবহৃত *ট্যাগ* গুলো কি রিভিউ স্কোরের সাথে সম্পর্কিত (যেমন, *Family with young children* এর জন্য কি কোনো নির্দিষ্ট হোটেলে বেশি নেতিবাচক রিভিউ রয়েছে, যা হয়তো ইঙ্গিত করে যে এটি *Solo traveller* এর জন্য বেশি উপযুক্ত)? -* NLTK সেন্টিমেন্ট স্কোর কি হোটেল রিভিউয়ারের সংখ্যাসূচক স্কোরের সাথে মিলে যায়? +* রিভিউতে সবচেয়ে বেশি ব্যবহৃত শব্দ এবং বাক্যাংশ কী? +* হোটেল সম্পর্কিত অফিসিয়াল *ট্যাগ* কি রিভিউ স্কোরের সাথে সম্পর্কিত (যেমন, *Family with young children* ট্যাগের জন্য কি *Solo traveller* ট্যাগের তুলনায় বেশি নেতিবাচক রিভিউ রয়েছে, যা হয়তো ইঙ্গিত করে যে এটি *Solo travellers*-এর জন্য বেশি উপযুক্ত)? +* NLTK সেন্টিমেন্ট স্কোর কি হোটেল রিভিউয়ের সংখ্যাসূচক স্কোরের সাথে 'মিল' করে? #### ডেটাসেট -চলুন ডেটাসেটটি এক্সপ্লোর করি, যা আপনি লোকালভাবে ডাউনলোড এবং সংরক্ষণ করেছেন। ফাইলটি VS Code বা এমনকি Excel-এর মতো কোনো এডিটরে খুলুন। +আপনার ডাউনলোড করা এবং লোকালভাবে সংরক্ষিত ডেটাসেটটি এক্সপ্লোর করুন। ফাইলটি 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 আমাদের জন্য সরাসরি খুব একটা উপকারী নয়, এবং আমরা সম্ভবত এটি একটি দেশের সাথে প্রতিস্থাপন করব, যাতে সহজে সাজানো এবং অনুসন্ধান করা যায়। + * *lat* এবং *lng* ব্যবহার করে আপনি Python দিয়ে একটি ম্যাপ তৈরি করতে পারেন যেখানে হোটেলের অবস্থান দেখানো হবে (সম্ভবত নেতিবাচক এবং ইতিবাচক রিভিউয়ের জন্য আলাদা রঙ ব্যবহার করে) + * Hotel_Address আমাদের জন্য সরাসরি খুব একটা কার্যকর নয়, এবং আমরা সম্ভবত এটি একটি দেশের সাথে প্রতিস্থাপন করব যাতে সহজে সাজানো এবং অনুসন্ধান করা যায় **হোটেল মেটা-রিভিউ কলাম** * `Average_Score` - * ডেটাসেটের নির্মাতা অনুযায়ী, এই কলামটি হলো *হোটেলের গড় স্কোর, যা গত বছরের সর্বশেষ মন্তব্যের উপর ভিত্তি করে গণনা করা হয়েছে*। এটি একটি অস্বাভাবিক পদ্ধতি মনে হতে পারে, তবে এটি স্ক্র্যাপ করা ডেটা, তাই আপাতত আমরা এটিকে গ্রহণ করতে পারি। + * ডেটাসেট নির্মাতার মতে, এই কলামটি হলো *হোটেলের গড় স্কোর, যা গত বছরের সর্বশেষ মন্তব্যের ভিত্তিতে গণনা করা হয়েছে*। এটি একটি অস্বাভাবিক পদ্ধতি মনে হতে পারে, তবে এটি সংগ্রহ করা ডেটা, তাই আপাতত আমরা এটিকে গ্রহণ করতে পারি। - ✅ এই ডেটার অন্যান্য কলামের উপর ভিত্তি করে গড় স্কোর গণনা করার আরেকটি উপায় কি আপনি ভাবতে পারেন? + ✅ এই ডেটার অন্যান্য কলামের ভিত্তিতে গড় স্কোর গণনার আরেকটি পদ্ধতি কি আপনি ভাবতে পারেন? * `Total_Number_of_Reviews` - * এই হোটেলটি কতগুলো রিভিউ পেয়েছে তার মোট সংখ্যা - এটি স্পষ্ট নয় (কোড না লিখে) যে এটি ডেটাসেটে থাকা রিভিউগুলোকে বোঝায় কিনা। + * এই হোটেলটি কতগুলো রিভিউ পেয়েছে তার মোট সংখ্যা - এটি স্পষ্ট নয় (কোড না লিখে) যে এটি ডেটাসেটে থাকা রিভিউগুলোর কথা উল্লেখ করছে কিনা। * `Additional_Number_of_Scoring` - * এর মানে হলো রিভিউ স্কোর দেওয়া হয়েছে, কিন্তু রিভিউয়ার কোনো ইতিবাচক বা নেতিবাচক রিভিউ লেখেননি। + * এর অর্থ হলো একটি স্কোর দেওয়া হয়েছে কিন্তু রিভিউয়ার কোনো ইতিবাচক বা নেতিবাচক রিভিউ লেখেননি **রিভিউ কলাম** - `Reviewer_Score` - - এটি একটি সংখ্যাসূচক মান, যা সর্বাধিক ১ দশমিক স্থান পর্যন্ত হতে পারে এবং এর সর্বনিম্ন এবং সর্বোচ্চ মান যথাক্রমে ২.৫ এবং ১০। - - কেন ২.৫ সর্বনিম্ন স্কোর তা ব্যাখ্যা করা হয়নি। + - এটি একটি সংখ্যাসূচক মান যা সর্বাধিক ১ দশমিক স্থান পর্যন্ত থাকে এবং এর মান ২.৫ থেকে ১০ এর মধ্যে থাকে + - কেন ২.৫ সর্বনিম্ন স্কোর সম্ভব তা ব্যাখ্যা করা হয়নি - `Negative_Review` - - যদি কোনো রিভিউয়ার কিছু না লেখেন, তবে এই ফিল্ডে "**No Negative**" থাকবে। - - লক্ষ্য করুন যে, রিভিউয়ার নেতিবাচক রিভিউ কলামে ইতিবাচক কিছু লিখতে পারেন (যেমন, "এই হোটেলে খারাপ কিছু নেই")। + - যদি কোনো রিভিউয়ার কিছু না লেখেন, এই ক্ষেত্রটি "**No Negative**" দেখাবে + - লক্ষ্য করুন যে একটি রিভিউয়ার নেতিবাচক রিভিউ কলামে ইতিবাচক মন্তব্য লিখতে পারেন (যেমন, "এই হোটেল সম্পর্কে খারাপ কিছু নেই") - `Review_Total_Negative_Word_Counts` - - বেশি নেতিবাচক শব্দের সংখ্যা কম স্কোর নির্দেশ করে (সেন্টিমেন্টালিটি যাচাই না করেই)। + - বেশি নেতিবাচক শব্দের সংখ্যা কম স্কোর নির্দেশ করে (সেন্টিমেন্টালিটি যাচাই না করেই) - `Positive_Review` - - যদি কোনো রিভিউয়ার কিছু না লেখেন, তবে এই ফিল্ডে "**No Positive**" থাকবে। - - লক্ষ্য করুন যে, রিভিউয়ার ইতিবাচক রিভিউ কলামে নেতিবাচক কিছু লিখতে পারেন (যেমন, "এই হোটেলে মোটেও ভালো কিছু নেই")। + - যদি কোনো রিভিউয়ার কিছু না লেখেন, এই ক্ষেত্রটি "**No Positive**" দেখাবে + - লক্ষ্য করুন যে একটি রিভিউয়ার ইতিবাচক রিভিউ কলামে নেতিবাচক মন্তব্য লিখতে পারেন (যেমন, "এই হোটেল সম্পর্কে ভালো কিছুই নেই") - `Review_Total_Positive_Word_Counts` - - বেশি ইতিবাচক শব্দের সংখ্যা বেশি স্কোর নির্দেশ করে (সেন্টিমেন্টালিটি যাচাই না করেই)। + - বেশি ইতিবাচক শব্দের সংখ্যা বেশি স্কোর নির্দেশ করে (সেন্টিমেন্টালিটি যাচাই না করেই) - `Review_Date` এবং `days_since_review` - - একটি রিভিউয়ের সতেজতা বা পুরনো হওয়ার পরিমাপ প্রয়োগ করা যেতে পারে (পুরনো রিভিউগুলো নতুনগুলোর মতো সঠিক নাও হতে পারে, কারণ হোটেল ম্যানেজমেন্ট পরিবর্তিত হয়েছে, সংস্কার করা হয়েছে, বা একটি সুইমিং পুল যোগ করা হয়েছে ইত্যাদি)। + - একটি রিভিউয়ের তাজা বা পুরনো অবস্থা নির্ধারণ করা যেতে পারে (পুরনো রিভিউ হয়তো নতুন রিভিউয়ের মতো সঠিক নাও হতে পারে কারণ হোটেল ব্যবস্থাপনা পরিবর্তিত হয়েছে, সংস্কার করা হয়েছে, বা একটি সুইমিং পুল যোগ করা হয়েছে ইত্যাদি) - `Tags` - - এগুলো ছোট বর্ণনা, যা রিভিউয়ার তাদের অতিথি হিসেবে ধরণ (যেমন, একা বা পরিবার), রুমের ধরণ, থাকার সময়কাল এবং কীভাবে রিভিউ জমা দেওয়া হয়েছে তা বর্ণনা করতে নির্বাচন করতে পারেন। - - দুর্ভাগ্যবশত, এই ট্যাগগুলো ব্যবহার করা সমস্যাজনক, নিচের সেকশনে এদের কার্যকারিতা নিয়ে আলোচনা করা হয়েছে। + - এগুলো ছোট বর্ণনা যা রিভিউয়ার তাদের অতিথির ধরণ (যেমন, একক বা পরিবার), তাদের রুমের ধরণ, থাকার সময়কাল এবং কীভাবে রিভিউ জমা দেওয়া হয়েছে তা বর্ণনা করতে নির্বাচন করতে পারেন। + - দুর্ভাগ্যবশত, এই ট্যাগগুলো ব্যবহার করা সমস্যাজনক, নিচের অংশে তাদের কার্যকারিতা নিয়ে আলোচনা করা হয়েছে **রিভিউয়ার কলাম** - `Total_Number_of_Reviews_Reviewer_Has_Given` - - এটি একটি রিকমেন্ডেশন মডেলে একটি ফ্যাক্টর হতে পারে, উদাহরণস্বরূপ, আপনি যদি নির্ধারণ করতে পারেন যে শতাধিক রিভিউ দেওয়া বেশি সক্রিয় রিভিউয়াররা নেতিবাচক হওয়ার চেয়ে ইতিবাচক হওয়ার সম্ভাবনা বেশি। তবে, কোনো নির্দিষ্ট রিভিউয়ের রিভিউয়ারকে একটি ইউনিক কোড দিয়ে চিহ্নিত করা হয়নি, এবং তাই এটি একটি সেট রিভিউয়ের সাথে সংযুক্ত করা সম্ভব নয়। ১০০ বা তার বেশি রিভিউ দেওয়া ৩০ জন রিভিউয়ার রয়েছে, তবে এটি রিকমেন্ডেশন মডেলে কীভাবে সহায়তা করতে পারে তা বোঝা কঠিন। + - এটি একটি রিকমেন্ডেশন মডেলে একটি ফ্যাক্টর হতে পারে, উদাহরণস্বরূপ, যদি আপনি নির্ধারণ করতে পারেন যে শত শত রিভিউ দেওয়া বেশি সক্রিয় রিভিউয়াররা নেতিবাচক হওয়ার চেয়ে ইতিবাচক হওয়ার সম্ভাবনা বেশি। তবে, কোনো নির্দিষ্ট রিভিউয়ের রিভিউয়ারকে একটি ইউনিক কোড দিয়ে চিহ্নিত করা হয়নি, এবং তাই এটি একটি সেট রিভিউয়ের সাথে সংযুক্ত করা সম্ভব নয়। ১০০ বা তার বেশি রিভিউ দেওয়া ৩০ জন রিভিউয়ার রয়েছে, তবে এটি রিকমেন্ডেশন মডেলে কীভাবে সহায়তা করতে পারে তা বোঝা কঠিন। - `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 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 | +| 7.8 | 1945 | 2.5 | এটি বর্তমানে একটি হোটেল নয় বরং একটি নির্মাণ সাইট। আমি দীর্ঘ ভ্রমণের পর বিশ্রাম নেওয়ার সময় এবং রুমে কাজ করার সময় সকাল থেকে সন্ধ্যা পর্যন্ত অগ্রহণযোগ্য নির্মাণ শব্দ দ্বারা আতঙ্কিত হয়েছি। পাশের রুমে সারাদিন কাজ চলছিল, যেমন জ্যাকহ্যামার ব্যবহার করে। আমি রুম পরিবর্তনের অনুরোধ করেছিলাম কিন্তু কোনো শান্ত রুম পাওয়া যায়নি। পরিস্থিতি আরও খারাপ করার জন্য আমাকে অতিরিক্ত চার্জ করা হয়েছে। আমি সন্ধ্যায় চেক আউট করেছি কারণ আমাকে খুব সকালে ফ্লাইট নিতে হয়েছিল এবং একটি উপযুক্ত বিল পেয়েছি। একদিন পরে হোটেল আমার সম্মতি ছাড়া অতিরিক্ত চার্জ করেছে যা বুকিং মূল্যের বেশি। এটি একটি ভয়ানক জায়গা। নিজেকে শাস্তি দেবেন না এখানে বুকিং করে। | কিছুই নেই। ভয়ানক জায়গা। দূরে থাকুন। | ব্যবসায়িক ভ্রমণ। দম্পতি। স্ট্যান্ডার্ড ডাবল রুম। ২ রাত অবস্থান। | -যেমনটি দেখা যাচ্ছে, এই অতিথি হোটেলে খুবই খারাপ অভিজ্ঞতা পেয়েছেন। হোটেলের গড় স্কোর ৭.৮ এবং ১৯৪৫টি রিভিউ রয়েছে, কিন্তু এই রিভিউয়ার ২.৫ স্কোর দিয়েছেন এবং তাদের নেতিবাচক অভিজ্ঞতা নিয়ে ১১৫টি শব্দ লিখেছেন। যদি তারা Positive_Review কলামে কিছুই না লিখতেন, তবে আপনি অনুমান করতে পারতেন যে সেখানে কিছুই ইতিবাচক ছিল না, কিন্তু তারা সতর্কবার্তা হিসেবে ৭টি শব্দ লিখেছেন। যদি আমরা শব্দ গণনা করি অর্থ বা শব্দের সেন্টিমেন্টের পরিবর্তে, তবে আমরা রিভিউয়ারের উদ্দেশ্য সম্পর্কে একটি বিকৃত ধারণা পেতে পারি। অদ্ভুতভাবে, তাদের ২.৫ স্কোর বিভ্রান্তিকর, কারণ যদি হোটেলে থাকার অভিজ্ঞতা এতটাই খারাপ হয়, তবে কেন কোনো পয়েন্ট দেওয়া হলো? ডেটাসেটটি ঘনিষ্ঠভাবে পরীক্ষা করলে, আপনি দেখবেন যে সর্বনিম্ন স্কোর সম্ভবত ২.৫, ০ নয়। সর্বোচ্চ স্কোর সম্ভবত ১০। +যেমনটি আপনি দেখতে পাচ্ছেন, এই অতিথি হোটেলে খুবই খারাপ অভিজ্ঞতা পেয়েছেন। হোটেলের গড় স্কোর ৭.৮ এবং ১৯৪৫টি রিভিউ রয়েছে, কিন্তু এই রিভিউয়ার এটি ২.৫ দিয়েছেন এবং তাদের অবস্থান কতটা নেতিবাচক ছিল তা নিয়ে ১১৫টি শব্দ লিখেছেন। যদি তারা Positive_Review কলামে কিছুই না লিখতেন, আপনি অনুমান করতে পারতেন যে কিছুই ইতিবাচক ছিল না, কিন্তু তারা সতর্কবার্তা হিসেবে ৭টি শব্দ লিখেছেন। যদি আমরা শব্দের সংখ্যা গণনা করি অর্থ বা শব্দের সেন্টিমেন্টের পরিবর্তে, তাহলে রিভিউয়ারের উদ্দেশ্য সম্পর্কে একটি বিকৃত ধারণা পেতে পারি। আশ্চর্যজনকভাবে, তাদের ২.৫ স্কোর বিভ্রান্তিকর, কারণ যদি হোটেল অবস্থান এতটাই খারাপ ছিল, তাহলে কেন কোনো পয়েন্ট দেওয়া হলো? ডেটাসেটটি ঘনিষ্ঠভাবে পরীক্ষা করলে, আপনি দেখতে পাবেন যে সর্বনিম্ন সম্ভব স্কোর ২.৫, ০ নয়। সর্বোচ্চ সম্ভব স্কোর ১০। ##### ট্যাগ -উপরোক্ত আলোচনায় উল্লেখ করা হয়েছে যে, প্রথম নজরে `Tags` ব্যবহার করে ডেটা শ্রেণীবদ্ধ করার ধারণাটি যৌক্তিক মনে হয়। দুর্ভাগ্যবশত, এই ট্যাগগুলো স্ট্যান্ডার্ডাইজড নয়, যার মানে একটি নির্দিষ্ট হোটেলে অপশনগুলো হতে পারে *Single room*, *Twin room*, এবং *Double room*, কিন্তু অন্য একটি হোটেলে এগুলো হতে পারে *Deluxe Single Room*, *Classic Queen Room*, এবং *Executive King Room*। এগুলো একই জিনিস হতে পারে, কিন্তু এত বেশি বৈচিত্র্য রয়েছে যে পছন্দগুলো হয়ে যায়: +উপরের মতো, প্রথম নজরে `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. সমস্ত শর্তকে একটি একক স্ট্যান্ডার্ডে পরিবর্তন করার চেষ্টা করা, যা খুবই কঠিন, কারণ প্রতিটি ক্ষেত্রে রূপান্তরের পথ কী হবে তা স্পষ্ট নয় (যেমন, *Classic single room* কে *Single room* এ ম্যাপ করা যায়, কিন্তু *Superior Queen Room with Courtyard Garden or City View* ম্যাপ করা অনেক কঠিন) -1. আমরা একটি NLP পদ্ধতি নিতে পারি এবং প্রতিটি হোটেলের ক্ষেত্রে *Solo*, *Business Traveller*, বা *Family with young kids* এর মতো নির্দিষ্ট টার্মগুলোর ফ্রিকোয়েন্সি পরিমাপ করতে পারি এবং এটি রিকমেন্ডেশনে অন্তর্ভুক্ত করতে পারি। +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* এর সাথে সামঞ্জস্যপূর্ণ। তবে, কিছু রিভিউয়ার প্রতিটি ফিল্ড পূরণ করেন না (তারা একটি ফিল্ড ফাঁকা রাখতে পারেন), তাই মানগুলো সবসময় একই ক্রমে থাকে না। +ট্যাগগুলো সাধারণত (কিন্তু সবসময় নয়) একটি একক ক্ষেত্র যেখানে ৫ থেকে ৬টি কমা দ্বারা পৃথক মান থাকে যা *Type of trip*, *Type of guests*, *Type of room*, *Number of nights*, এবং *Type of device review was submitted on* এর সাথে সামঞ্জস্যপূর্ণ। তবে, কিছু রিভিউয়ার প্রতিটি ক্ষেত্র পূরণ করেন না (তারা একটি ফাঁকা রাখতে পারেন), তাই মানগুলো সবসময় একই ক্রমে থাকে না। -উদাহরণস্বরূপ, *Type of group* নিন। এই ফিল্ডে `Tags` কলামে ১০২৫টি ইউনিক সম্ভাবনা রয়েছে, এবং দুর্ভাগ্যবশত এর মধ্যে কেবল কিছু গ্রুপকে বোঝায় (কিছু রুমের ধরণ ইত্যাদি)। যদি আপনি শুধুমাত্র সেই মানগুলো ফিল্টার করেন যা পরিবার উল্লেখ করে, তবে ফলাফলে অনেক *Family room* টাইপের মান অন্তর্ভুক্ত থাকে। যদি আপনি *with* টার্মটি অন্তর্ভুক্ত করেন, অর্থাৎ *Family with* মানগুলো গণনা করেন, তবে ফলাফলগুলো আরও ভালো হয়, যেখানে ৫১৫,০০০ ফলাফলের মধ্যে ৮০,০০০ এর বেশি "Family with young children" বা "Family with older children" বাক্যাংশ অন্তর্ভুক্ত থাকে। +উদাহরণস্বরূপ, *Type of group* নিন। এই ক্ষেত্রটিতে `Tags` কলামে ১০২৫টি ইউনিক সম্ভাবনা রয়েছে, এবং দুর্ভাগ্যবশত এর মধ্যে কিছুই গ্রুপের কথা উল্লেখ করে না (কিছু রুমের ধরণ ইত্যাদি)। যদি আপনি শুধুমাত্র সেই মানগুলো ফিল্টার করেন যা পরিবার উল্লেখ করে, ফলাফলগুলোতে অনেক *Family room* ধরণের ফলাফল থাকে। যদি আপনি *with* শব্দটি অন্তর্ভুক্ত করেন, অর্থাৎ *Family with* মানগুলো গণনা করেন, ফলাফলগুলো আরও ভালো হয়, যেখানে ৫১৫,০০০ ফলাফলের মধ্যে ৮০,০০০টির বেশি "Family with young children" বা "Family with older children" বাক্যাংশ অন্তর্ভুক্ত করে। -এর মানে হলো ট্যাগ কলামটি আমাদের জন্য পুরোপুরি অপ্রয়োজনীয় নয়, তবে এটি কার্যকর করতে কিছু কাজ করতে হবে। +এর অর্থ হলো ট্যাগ কলামটি আমাদের জন্য সম্পূর্ণ অকার্যকর নয়, তবে এটি কার্যকর করতে কিছু কাজ করতে হবে। ##### গড় হোটেল স্কোর -ডেটাসেটের সাথে কিছু অদ্ভুততা বা অসঙ্গতি রয়েছে, যা আমি বুঝতে পারিনি, তবে এখানে সেগুলো চিত্রিত করা হয়েছে যাতে আপনি মডেল তৈরি করার সময় সেগুলো সম্পর্কে সচেতন থাকেন। আপনি যদি এটি বের করতে পারেন, তবে আমাদের আলোচনা সেকশনে জানান! +ডেটাসেটের সাথে কিছু অদ্ভুততা বা অসঙ্গতি রয়েছে যা আমি বুঝতে পারি না, তবে এখানে চিত্রিত করা হয়েছে যাতে আপনি আপনার মডেল তৈরি করার সময় সেগুলো সম্পর্কে সচেতন থাকেন। যদি আপনি এটি বুঝতে পারেন, দয়া করে আলোচনা বিভাগে আমাদের জানান! -ডেটাসেটে গড় স্কোর এবং রিভিউয়ের সংখ্যার সাথে সম্পর্কিত নিম্নলিখিত কলামগুলো রয়েছে: +ডেটাসেটে গড় স্কোর এবং রিভিউ সংখ্যার সাথে সম্পর্কিত নিম্নলিখিত কলামগুলো রয়েছে: 1. Hotel_Name 2. Additional_Number_of_Scoring @@ -129,23 +129,22 @@ Python, হোটেল রিভিউ ডেটাসেট এবং NLTK-এ 4. Total_Number_of_Reviews 5. Reviewer_Score -এই ডেটাসেটে সবচেয়ে বেশি রিভিউ থাকা একক হোটেল হলো *Britannia International Hotel Canary Wharf*, যার ৪৭৮৯টি রিভিউ রয়েছে ৫১৫,০০০ এর মধ্যে। কিন্তু যদি আমরা এই হোটেলের জন্য `Total_Number_of_Reviews` মানটি দেখি, এটি ৯০৮৬। আপনি অনুমান করতে পারেন যে আরও অনেক স্কোর রিভিউ ছাড়াই রয়েছে, তাই সম্ভবত আমাদের `Additional_Number_of_Scoring` কলামের মান যোগ করা উচিত। সেই মানটি ২৬৮২, এবং এটি ৪৭৮৯ এর সাথে যোগ করলে ৭৪৭১ হয়, যা এখনও `Total_Number_of_Reviews` এর চেয়ে ১৬১৫ কম। +এই ডেটাসেটে সবচেয়ে বেশি রিভিউ থাকা একক হোটেল হলো *Britannia International Hotel Canary Wharf*, যার ৫১৫,০০০ রিভিউয়ের মধ্যে ৪৭৮৯টি রয়েছে। কিন্তু যদি আমরা এই হোটেলের `Total_Number_of_Reviews` মান দেখি, এটি ৯০৮৬। আপনি অনুমান করতে পারেন যে অনেক বেশি স্কোর রয়েছে যেগুলো রিভিউ ছাড়াই, তাই সম্ভবত আমরা `Additional_Number_of_Scoring` কলামের মান যোগ করব। সেই মানটি ২৬৮২, এবং ৪৭৮৯ যোগ করলে আমরা পাই ৭,৪৭১, যা এখনও `Total_Number_of_Reviews` থেকে ১৬১৫ কম। -যদি আপনি `Average_Score` কলামটি নেন, আপনি অনুমান করতে পারেন এটি ডেটাসেটে থাকা রিভিউয়ের গড়, কিন্তু Kaggle-এর বর্ণনা অনুযায়ী এটি "*গত বছরের সর্বশেষ মন্তব্যের উপর ভিত্তি করে হোটেলের গড় স্কোর*"। এটি খুব একটা কার্যকর মনে হয় না, তবে আমরা ডেটাসেটে থাকা রিভিউ স্কোরের উপর ভিত্তি করে আমাদের নিজস্ব গড় স্কোর গণনা করতে পারি। একই হোটেলকে উদাহরণ হিসেবে ব্যবহার করে, গড় হোটেল স্কোর দেওয়া হয়েছে ৭.১, কিন্তু ডেটাসেটে থাকা রিভিউ স্কোরের গড় (গণনা করা) হলো ৬.৮। এটি কাছাকাছি, কিন্তু একই মান নয়, এবং আমরা কেবল অনুমান করতে পারি যে `Additional_Number_of_Scoring` রিভিউগুলো গড়কে ৭.১-এ উন্নীত করেছে। দুর্ভাগ্যবশত, সেই অনুমান পরীক্ষা বা প্রমাণ করার কোনো উপায় না থাকায়, `Average_Score`, `Additional_Number_of_Scoring` এবং `Total_Number_of_Reviews` ব্যবহার বা বিশ্বাস করা কঠিন, কারণ সেগুলো এমন ডেটার উপর ভিত্তি করে তৈরি, যা আমাদের কাছে নেই। +যদি আপনি `Average_Score` কলামটি নেন, আপনি অনুমান করতে পারেন এটি ডেটাসেটে থাকা রিভিউগুলোর গড়, কিন্তু Kaggle-এর বর্ণনা অনুযায়ী এটি হলো "*হোটেলের গড় স্কোর, যা গত বছরের সর্বশেষ মন্তব্যের ভিত্তিতে গণনা করা হয়েছে*।" এটি খুব একটা কার্যকর মনে হয় না, তবে আমরা ডেটাসেটে থাকা রিভিউ স্কোরের ভিত্তিতে আমাদের নিজস্ব গড় স্কোর গণনা করতে পারি। একই হোটেলকে উদাহরণ হিসেবে ব্যবহার করে, গড় হোটেল স্কোর দেওয়া হয়েছে ৭.১, কিন্তু ডেটাসেটে থাকা রিভিউ স্কোরের ভিত্তিতে গণনা করা স্কোর হলো ৬.৮। এটি কাছাকাছি, কিন্তু একই মান নয়, এবং আমরা শুধুমাত্র অনুমান করতে পারি যে `Additional_Number_of_Scoring` রিভিউগুলো গড়কে ৭.১-এ উন্নীত করেছে। দুর্ভাগ্যবশত, সেই অনুমান পরীক্ষা বা প্রমাণ করার কোনো উপায় না থাকায়, `Average_Score`, `Additional_Number_of_Scoring` এবং `Total_Number_of_Reviews` ব্যবহার করা বা বিশ্বাস করা কঠিন। -বিষয়টিকে আরও জটিল করে তুলতে, ডেটাসেটে দ্বিতীয় সর্বাধিক রিভিউ থাকা হোটেলের গণিত অনুযায়ী গড় স্কোর ৮.১২ এবং ডেটাসেটের `Average_Score` হলো ৮.১। এটি কি সঠিক স্কোরের একটি কাকতালীয় ঘটনা, নাকি প্রথম হোটেলটি একটি অসঙ্গতি? -এই হোটেলটি যদি একটি ব্যতিক্রম হয় এবং হয়তো বেশিরভাগ মানগুলি সঠিকভাবে মিলে যায় (কিন্তু কিছু কারণে কিছু মান মিলে না), তাহলে আমরা একটি ছোট প্রোগ্রাম লিখব যা ডেটাসেটে মানগুলি পরীক্ষা করবে এবং সঠিক ব্যবহার (বা অ-ব্যবহার) নির্ধারণ করবে। +বিষয়টি আরও জটিল করতে, সবচেয়ে বেশি রিভিউ থাকা দ্বিতীয় হোটেলের গড় স্কোর ৮.১২ এবং ডেটাসেটের `Average_Score` হলো ৮.১। এটি কি সঠিক স্কোর একটি কাকতালীয় ঘটনা, নাকি প্রথম হোটেলটি একটি অসঙ্গতি? +এই সম্ভাবনার উপর ভিত্তি করে যে এই হোটেলটি একটি ব্যতিক্রম হতে পারে, এবং হয়তো বেশিরভাগ মানগুলো সঠিকভাবে মিলে যায় (কিন্তু কিছু কারণে কিছু মান মিলে না), আমরা পরবর্তী অংশে একটি ছোট প্রোগ্রাম লিখব যাতে ডেটাসেটে থাকা মানগুলো এক্সপ্লোর করা যায় এবং মানগুলোর সঠিক ব্যবহার (বা অ-ব্যবহার) নির্ধারণ করা যায়। > 🚨 সতর্কতার একটি নোট > -> এই ডেটাসেট নিয়ে কাজ করার সময় আপনি এমন কোড লিখবেন যা টেক্সট থেকে কিছু গণনা করে, টেক্সট নিজে পড়া বা বিশ্লেষণ করার প্রয়োজন ছাড়াই। এটি NLP-এর মূল বিষয়, অর্থ বা অনুভূতি ব্যাখ্যা করা যা একজন মানুষের দ্বারা না করেও সম্ভব। তবে, এটি সম্ভব যে আপনি কিছু নেতিবাচক রিভিউ পড়বেন। আমি আপনাকে এটি না করার পরামর্শ দেব, কারণ এটি করার প্রয়োজন নেই। কিছু রিভিউ হাস্যকর বা অপ্রাসঙ্গিক নেতিবাচক হোটেল রিভিউ হতে পারে, যেমন "আবহাওয়া ভালো ছিল না", যা হোটেলের বা কারো নিয়ন্ত্রণের বাইরে। তবে কিছু রিভিউয়ের একটি অন্ধকার দিকও রয়েছে। কখনও কখনও নেতিবাচক রিভিউগুলো বর্ণবাদী, লিঙ্গবাদী বা বয়সবাদী হতে পারে। এটি দুর্ভাগ্যজনক, তবে একটি পাবলিক ওয়েবসাইট থেকে স্ক্র্যাপ করা ডেটাসেটে এটি প্রত্যাশিত। কিছু রিভিউয়ার এমন রিভিউ রেখে যান যা আপনি অপ্রীতিকর, অস্বস্তিকর বা বিরক্তিকর মনে করতে পারেন। কোডকে অনুভূতি পরিমাপ করতে দিন, নিজে পড়ে বিরক্ত হওয়ার চেয়ে। তবে, এটি একটি সংখ্যালঘু যারা এমন জিনিস লিখে, কিন্তু তারা সবসময়ই থাকে। - +> এই ডেটাসেট নিয়ে কাজ করার সময় আপনি এমন কোড লিখবেন যা টেক্সট থেকে কিছু হিসাব করবে, কিন্তু আপনাকে নিজে টেক্সট পড়তে বা বিশ্লেষণ করতে হবে না। এটি NLP-এর মূল ধারণা, অর্থ বা অনুভূতি ব্যাখ্যা করা, যেখানে মানুষের হস্তক্ষেপের প্রয়োজন হয় না। তবে, এটি সম্ভব যে আপনি কিছু নেতিবাচক রিভিউ পড়বেন। আমি আপনাকে এটি না করার পরামর্শ দেব, কারণ আপনাকে তা করতে হবে না। কিছু রিভিউ হাস্যকর বা অপ্রাসঙ্গিক নেতিবাচক হোটেল রিভিউ হতে পারে, যেমন "আবহাওয়া ভালো ছিল না", যা হোটেলের বা কারও নিয়ন্ত্রণের বাইরে। কিন্তু কিছু রিভিউয়ের একটি অন্ধকার দিকও রয়েছে। কখনও কখনও নেতিবাচক রিভিউগুলো বর্ণবাদী, লিঙ্গবাদী, বা বয়সবাদী হতে পারে। এটি দুর্ভাগ্যজনক, কিন্তু একটি পাবলিক ওয়েবসাইট থেকে স্ক্র্যাপ করা ডেটাসেটে এটি প্রত্যাশিত। কিছু রিভিউয়ার এমন মন্তব্য রেখে যান যা আপনি অস্বস্তিকর, অপ্রিয়, বা বিরক্তিকর বলে মনে করতে পারেন। অনুভূতি পরিমাপের জন্য কোডকে কাজ করতে দেওয়া ভালো, নিজে পড়ে বিরক্ত হওয়ার চেয়ে। তবে, এটি উল্লেখযোগ্য যে এমন মন্তব্যকারী সংখ্যা খুবই কম, কিন্তু তারা রয়েছেই। ## অনুশীলন - ডেটা অনুসন্ধান ### ডেটা লোড করুন -ডেটা ভিজ্যুয়ালি পরীক্ষা করা যথেষ্ট হয়েছে, এখন আপনি কিছু কোড লিখবেন এবং কিছু উত্তর পাবেন! এই অংশে pandas লাইব্রেরি ব্যবহার করা হয়েছে। আপনার প্রথম কাজ হল নিশ্চিত করা যে আপনি CSV ডেটা লোড এবং পড়তে পারেন। pandas লাইব্রেরির একটি দ্রুত CSV লোডার রয়েছে, এবং ফলাফলটি একটি ডেটাফ্রেমে রাখা হয়, যেমন আগের পাঠে। আমরা যে CSV লোড করছি তাতে অর্ধ মিলিয়নেরও বেশি সারি রয়েছে, কিন্তু মাত্র ১৭টি কলাম। pandas আপনাকে ডেটাফ্রেমের সাথে ইন্টারঅ্যাক্ট করার জন্য অনেক শক্তিশালী উপায় দেয়, যার মধ্যে প্রতিটি সারিতে অপারেশন করার ক্ষমতা রয়েছে। +ডেটাকে ভিজ্যুয়ালি পর্যবেক্ষণ করা যথেষ্ট হয়েছে, এখন আপনি কিছু কোড লিখে উত্তর বের করবেন! এই অংশে pandas লাইব্রেরি ব্যবহার করা হয়েছে। আপনার প্রথম কাজ হলো নিশ্চিত করা যে আপনি CSV ডেটা লোড এবং পড়তে পারেন। pandas লাইব্রেরি একটি দ্রুত CSV লোডার সরবরাহ করে, এবং ফলাফলটি একটি ডেটাফ্রেমে রাখা হয়, যেমন আগের পাঠে দেখেছেন। আমরা যে CSV লোড করছি তাতে অর্ধ মিলিয়নেরও বেশি সারি রয়েছে, কিন্তু মাত্র ১৭টি কলাম। pandas আপনাকে ডেটাফ্রেমের সাথে কাজ করার জন্য অনেক শক্তিশালী উপায় সরবরাহ করে, যার মধ্যে প্রতিটি সারিতে অপারেশন করার ক্ষমতা রয়েছে। -এই পাঠের পর থেকে কোড স্নিপেট এবং কোডের কিছু ব্যাখ্যা এবং ফলাফল সম্পর্কে কিছু আলোচনা থাকবে। আপনার কোডের জন্য অন্তর্ভুক্ত _notebook.ipynb_ ব্যবহার করুন। +এই পাঠের বাকি অংশে কোড স্নিপেট এবং কোডের ব্যাখ্যা এবং ফলাফল কী বোঝায় তা নিয়ে আলোচনা থাকবে। আপনার কোডের জন্য _notebook.ipynb_ ফাইলটি ব্যবহার করুন। চলুন শুরু করি আপনি যে ডেটা ফাইলটি ব্যবহার করবেন তা লোড করার মাধ্যমে: @@ -162,50 +161,50 @@ end = time.time() print("Loading took " + str(round(end - start, 2)) + " seconds") ``` -ডেটা লোড হয়ে গেলে, আমরা এর উপর কিছু অপারেশন করতে পারি। আপনার প্রোগ্রামের পরবর্তী অংশের জন্য এই কোডটি উপরে রাখুন। +ডেটা লোড হয়ে গেলে, আমরা এর উপর কিছু অপারেশন করতে পারি। পরবর্তী অংশের জন্য এই কোডটি আপনার প্রোগ্রামের শীর্ষে রাখুন। ## ডেটা অনুসন্ধান এই ক্ষেত্রে, ডেটা ইতিমধ্যেই *পরিষ্কার*, অর্থাৎ এটি কাজ করার জন্য প্রস্তুত এবং এতে অন্য ভাষার অক্ষর নেই যা শুধুমাত্র ইংরেজি অক্ষর প্রত্যাশা করা অ্যালগরিদমকে বিভ্রান্ত করতে পারে। -✅ আপনাকে এমন ডেটার সাথে কাজ করতে হতে পারে যা NLP কৌশল প্রয়োগ করার আগে কিছু প্রাথমিক প্রক্রিয়াকরণ প্রয়োজন, তবে এই সময় নয়। যদি প্রয়োজন হয়, আপনি কীভাবে অ-ইংরেজি অক্ষর পরিচালনা করবেন? +✅ আপনাকে এমন ডেটার সাথে কাজ করতে হতে পারে যা NLP কৌশল প্রয়োগ করার আগে কিছু প্রাথমিক প্রক্রিয়াকরণ প্রয়োজন, কিন্তু এই সময় তা নয়। যদি করতে হতো, আপনি কীভাবে অ-ইংরেজি অক্ষর পরিচালনা করতেন? -এক মুহূর্ত সময় নিন নিশ্চিত করতে যে ডেটা লোড হওয়ার পরে আপনি কোড দিয়ে এটি অনুসন্ধান করতে পারেন। `Negative_Review` এবং `Positive_Review` কলামগুলিতে ফোকাস করতে চাওয়া খুব সহজ। এগুলো আপনার NLP অ্যালগরিদমের জন্য প্রাকৃতিক টেক্সট দিয়ে পূর্ণ। কিন্তু অপেক্ষা করুন! NLP এবং অনুভূতির দিকে ঝাঁপ দেওয়ার আগে, আপনাকে নিচের কোডটি অনুসরণ করতে হবে যাতে ডেটাসেটে দেওয়া মানগুলি pandas দিয়ে গণনা করা মানগুলির সাথে মিলে কিনা তা নিশ্চিত করা যায়। +একবার ডেটা লোড হয়ে গেলে নিশ্চিত করুন যে আপনি কোড দিয়ে এটি অনুসন্ধান করতে পারেন। `Negative_Review` এবং `Positive_Review` কলামগুলোর দিকে মনোযোগ দেওয়া সহজ। এগুলো আপনার NLP অ্যালগরিদমের প্রক্রিয়াকরণের জন্য প্রাকৃতিক টেক্সট দিয়ে পূর্ণ। কিন্তু থামুন! NLP এবং সেন্টিমেন্টে যাওয়ার আগে, নিচের কোডটি অনুসরণ করুন এবং নিশ্চিত করুন যে ডেটাসেটে দেওয়া মানগুলো pandas দিয়ে গণনা করা মানের সাথে মিলে যায়। ## ডেটাফ্রেম অপারেশন -এই পাঠের প্রথম কাজ হল কিছু কোড লিখে ডেটাফ্রেম পরীক্ষা করা (এটি পরিবর্তন না করে) এবং নিচের দাবিগুলি সঠিক কিনা তা যাচাই করা। +এই পাঠের প্রথম কাজ হলো কিছু কোড লিখে ডেটাফ্রেম পরীক্ষা করা (পরিবর্তন না করে) এবং নিচের দাবিগুলো সঠিক কিনা তা যাচাই করা। -> অনেক প্রোগ্রামিং কাজের মতো, এটি সম্পন্ন করার জন্য বেশ কয়েকটি উপায় রয়েছে, তবে ভালো পরামর্শ হল এটি যতটা সম্ভব সহজ এবং সহজ উপায়ে করা, বিশেষত যদি এটি ভবিষ্যতে এই কোডে ফিরে আসার সময় বুঝতে সহজ হয়। ডেটাফ্রেমের সাথে, একটি বিস্তৃত API রয়েছে যা প্রায়শই আপনি যা চান তা দক্ষতার সাথে করার একটি উপায় থাকবে। +> অনেক প্রোগ্রামিং কাজের মতো, এটি সম্পন্ন করার জন্য বিভিন্ন উপায় রয়েছে, তবে ভালো পরামর্শ হলো এটি যতটা সম্ভব সহজ এবং সহজ উপায়ে করা, বিশেষত যদি এটি ভবিষ্যতে কোডটি বুঝতে সহজ হয়। ডেটাফ্রেমের সাথে, একটি বিস্তৃত API রয়েছে যা প্রায়শই আপনার যা করতে চান তা দক্ষতার সাথে করার উপায় সরবরাহ করবে। নিচের প্রশ্নগুলোকে কোডিং টাস্ক হিসেবে বিবেচনা করুন এবং সমাধান না দেখে উত্তর দেওয়ার চেষ্টা করুন। -1. আপনি যে ডেটাফ্রেমটি লোড করেছেন তার *shape* প্রিন্ট করুন (shape হল সারি এবং কলামের সংখ্যা) -2. রিভিউয়ার জাতীয়তার ফ্রিকোয়েন্সি গণনা করুন: - 1. `Reviewer_Nationality` কলামের জন্য কতটি স্বতন্ত্র মান রয়েছে এবং সেগুলো কী কী? +1. আপনি যে ডেটাফ্রেমটি লোড করেছেন তার *shape* প্রিন্ট করুন (shape হলো সারি এবং কলামের সংখ্যা) +2. রিভিউয়ারদের জাতীয়তার ফ্রিকোয়েন্সি গণনা করুন: + 1. `Reviewer_Nationality` কলামের জন্য কতগুলো স্বতন্ত্র মান রয়েছে এবং সেগুলো কী কী? 2. ডেটাসেটে সবচেয়ে সাধারণ রিভিউয়ার জাতীয়তা কোনটি (দেশ এবং রিভিউ সংখ্যা প্রিন্ট করুন)? 3. পরবর্তী শীর্ষ ১০টি সবচেয়ে বেশি পাওয়া জাতীয়তা এবং তাদের ফ্রিকোয়েন্সি গণনা কী কী? 3. শীর্ষ ১০টি রিভিউয়ার জাতীয়তার জন্য সবচেয়ে বেশি রিভিউ করা হোটেল কোনটি? -4. ডেটাসেটে প্রতি হোটেলের জন্য কতটি রিভিউ রয়েছে (হোটেলের ফ্রিকোয়েন্সি গণনা)? -5. যদিও ডেটাসেটে প্রতিটি হোটেলের জন্য একটি `Average_Score` কলাম রয়েছে, আপনি একটি গড় স্কোরও গণনা করতে পারেন (ডেটাসেটে প্রতিটি হোটেলের জন্য সমস্ত রিভিউয়ার স্কোরের গড় পাওয়া)। আপনার ডেটাফ্রেমে `Calc_Average_Score` শিরোনামের একটি নতুন কলাম যোগ করুন যা সেই গণিত গড় ধারণ করে। -6. কোনও হোটেলের `Average_Score` এবং `Calc_Average_Score` (১ দশমিক স্থানে রাউন্ড করা) একই আছে কিনা? - 1. একটি Python ফাংশন লিখে দেখুন যা একটি Series (সারি) আর্গুমেন্ট হিসেবে নেয় এবং মানগুলো তুলনা করে, যখন মানগুলো সমান নয় তখন একটি বার্তা প্রিন্ট করে। তারপর `.apply()` পদ্ধতি ব্যবহার করে প্রতিটি সারি ফাংশন দিয়ে প্রক্রিয়া করুন। -7. `Negative_Review` কলামের "No Negative" মানের কতটি সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। -8. `Positive_Review` কলামের "No Positive" মানের কতটি সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। -9. `Positive_Review` কলামের "No Positive" **এবং** `Negative_Review` কলামের "No Negative" মানের কতটি সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। +4. ডেটাসেটে প্রতি হোটেলের রিভিউ সংখ্যা (হোটেলের ফ্রিকোয়েন্সি গণনা) কত? +5. যদিও ডেটাসেটে প্রতিটি হোটেলের জন্য একটি `Average_Score` কলাম রয়েছে, আপনি প্রতিটি হোটেলের জন্য সমস্ত রিভিউয়ার স্কোরের গড় পেয়ে একটি গড় স্কোরও গণনা করতে পারেন। আপনার ডেটাফ্রেমে `Calc_Average_Score` শিরোনামের একটি নতুন কলাম যোগ করুন যা সেই গণিত গড় ধারণ করে। +6. কোনো হোটেলের `Average_Score` এবং `Calc_Average_Score` কি একই (১ দশমিক স্থানে রাউন্ড করা)? + 1. একটি Python ফাংশন লিখুন যা একটি Series (সারি) আর্গুমেন্ট হিসেবে নেয় এবং মানগুলো তুলনা করে, যখন মানগুলো সমান নয় তখন একটি বার্তা প্রিন্ট করে। তারপর `.apply()` পদ্ধতি ব্যবহার করে প্রতিটি সারি প্রক্রিয়া করুন। +7. `Negative_Review` কলামের "No Negative" মানের কতগুলো সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। +8. `Positive_Review` কলামের "No Positive" মানের কতগুলো সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। +9. `Positive_Review` কলামের "No Positive" **এবং** `Negative_Review` কলামের "No Negative" মানের কতগুলো সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। ### কোড উত্তর -1. আপনি যে ডেটাফ্রেমটি লোড করেছেন তার *shape* প্রিন্ট করুন (shape হল সারি এবং কলামের সংখ্যা) +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. রিভিউয়ার জাতীয়তার ফ্রিকোয়েন্সি গণনা করুন: +2. রিভিউয়ারদের জাতীয়তার ফ্রিকোয়েন্সি গণনা করুন: - 1. `Reviewer_Nationality` কলামের জন্য কতটি স্বতন্ত্র মান রয়েছে এবং সেগুলো কী কী? + 1. `Reviewer_Nationality` কলামের জন্য কতগুলো স্বতন্ত্র মান রয়েছে এবং সেগুলো কী কী? 2. ডেটাসেটে সবচেয়ে সাধারণ রিভিউয়ার জাতীয়তা কোনটি (দেশ এবং রিভিউ সংখ্যা প্রিন্ট করুন)? ```python @@ -277,7 +276,7 @@ print("Loading took " + str(round(end - start, 2)) + " seconds") The most reviewed hotel for Canada was St James Court A Taj Hotel London with 61 reviews. ``` -4. ডেটাসেটে প্রতি হোটেলের জন্য কতটি রিভিউ রয়েছে (হোটেলের ফ্রিকোয়েন্সি গণনা)? +4. ডেটাসেটে প্রতি হোটেলের রিভিউ সংখ্যা (হোটেলের ফ্রিকোয়েন্সি গণনা) কত? ```python # First create a new dataframe based on the old one, removing the uneeded columns @@ -300,9 +299,9 @@ print("Loading took " + str(round(end - start, 2)) + " seconds") | Hotel Wagner | 135 | 10 | | Hotel Gallitzinberg | 173 | 8 | - আপনি লক্ষ্য করতে পারেন যে *ডেটাসেটে গণনা করা* ফলাফল `Total_Number_of_Reviews` মানের সাথে মেলে না। এটি স্পষ্ট নয় যে এই মানটি ডেটাসেটে হোটেলের মোট রিভিউ সংখ্যা প্রতিনিধিত্ব করেছিল, কিন্তু সবগুলো স্ক্র্যাপ করা হয়নি, বা অন্য কোনও গণনা। `Total_Number_of_Reviews` মডেলে ব্যবহার করা হয় না কারণ এই অস্পষ্টতার কারণে। + আপনি লক্ষ্য করতে পারেন যে *ডেটাসেটে গণনা করা* ফলাফল `Total_Number_of_Reviews` মানের সাথে মেলে না। এটি স্পষ্ট নয় যে এই মানটি ডেটাসেটে হোটেলের মোট রিভিউ সংখ্যা উপস্থাপন করেছিল, কিন্তু সবগুলো স্ক্র্যাপ করা হয়নি, অথবা অন্য কোনো গণনা। এই অস্পষ্টতার কারণে `Total_Number_of_Reviews` মডেলে ব্যবহার করা হয় না। -5. যদিও ডেটাসেটে প্রতিটি হোটেলের জন্য একটি `Average_Score` কলাম রয়েছে, আপনি একটি গড় স্কোরও গণনা করতে পারেন (ডেটাসেটে প্রতিটি হোটেলের জন্য সমস্ত রিভিউয়ার স্কোরের গড় পাওয়া)। আপনার ডেটাফ্রেমে `Calc_Average_Score` শিরোনামের একটি নতুন কলাম যোগ করুন যা সেই গণিত গড় ধারণ করে। `Hotel_Name`, `Average_Score`, এবং `Calc_Average_Score` কলামগুলো প্রিন্ট করুন। +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 @@ -324,7 +323,7 @@ print("Loading took " + str(round(end - start, 2)) + " seconds") display(review_scores_df[["Average_Score_Difference", "Average_Score", "Calc_Average_Score", "Hotel_Name"]]) ``` - আপনি `Average_Score` মান এবং কেন এটি কখনও কখনও গণিত গড় স্কোর থেকে আলাদা তা নিয়ে ভাবতে পারেন। যেহেতু আমরা জানি না কেন কিছু মান মিলে যায়, কিন্তু অন্যগুলোর মধ্যে পার্থক্য রয়েছে, এই ক্ষেত্রে আমাদের কাছে থাকা রিভিউ স্কোর ব্যবহার করে গড় নিজে গণনা করা নিরাপদ। তবে, পার্থক্যগুলো সাধারণত খুব ছোট হয়, এখানে ডেটাসেট গড় এবং গণিত গড়ের মধ্যে সবচেয়ে বেশি বিচ্যুতি থাকা হোটেলগুলো: + আপনি `Average_Score` মান এবং গণিত গড় স্কোরের মধ্যে পার্থক্য নিয়ে ভাবতে পারেন। আমরা জানি না কেন কিছু মান মিলে যায়, কিন্তু অন্যগুলোতে পার্থক্য রয়েছে। এই ক্ষেত্রে, আমাদের কাছে থাকা রিভিউ স্কোর ব্যবহার করে গড় নিজেই গণনা করা নিরাপদ। তবে পার্থক্যগুলো সাধারণত খুব ছোট। এখানে ডেটাসেট গড় এবং গণিত গড়ের মধ্যে সবচেয়ে বেশি বিচ্যুতি থাকা হোটেলগুলো: | Average_Score_Difference | Average_Score | Calc_Average_Score | Hotel_Name | | :----------------------: | :-----------: | :----------------: | ------------------------------------------: | @@ -340,13 +339,13 @@ print("Loading took " + str(round(end - start, 2)) + " seconds") | 0.9 | 8.6 | 7.7 | MARQUIS Faubourg St Honor Relais Ch teaux | | 1.3 | 7.2 | 5.9 | Kube Hotel Ice Bar | - মাত্র ১টি হোটেলের স্কোরের পার্থক্য ১-এর বেশি, এর মানে আমরা সম্ভবত পার্থক্যটি উপেক্ষা করতে পারি এবং গণিত গড় স্কোর ব্যবহার করতে পারি। + মাত্র ১টি হোটেলের স্কোরের পার্থক্য ১-এর বেশি, এটি বোঝায় যে আমরা সম্ভবত পার্থক্য উপেক্ষা করতে পারি এবং গণিত গড় স্কোর ব্যবহার করতে পারি। -6. `Negative_Review` কলামের "No Negative" মানের কতটি সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। +6. `Negative_Review` কলামের "No Negative" মানের কতগুলো সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। -7. `Positive_Review` কলামের "No Positive" মানের কতটি সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। +7. `Positive_Review` কলামের "No Positive" মানের কতগুলো সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। -8. `Positive_Review` কলামের "No Positive" **এবং** `Negative_Review` কলামের "No Negative" মানের কতটি সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। +8. `Positive_Review` কলামের "No Positive" **এবং** `Negative_Review` কলামের "No Negative" মানের কতগুলো সারি রয়েছে তা গণনা এবং প্রিন্ট করুন। ```python # with lambdas: @@ -368,9 +367,9 @@ print("Loading took " + str(round(end - start, 2)) + " seconds") Lambdas took 9.64 seconds ``` -## অন্য একটি উপায় +## আরেকটি উপায় -Lambda ছাড়া আইটেম গণনা করার আরেকটি উপায় এবং সারি গণনা করতে sum ব্যবহার করুন: +ল্যাম্বডা ছাড়া আইটেম গণনা করার আরেকটি উপায়, এবং সারি গণনার জন্য sum ব্যবহার করুন: ```python # without lambdas (using a mixture of notations to show you can use both) @@ -393,20 +392,20 @@ Lambda ছাড়া আইটেম গণনা করার আরেকট Sum took 0.19 seconds ``` - আপনি লক্ষ্য করতে পারেন যে `Negative_Review` এবং `Positive_Review` কলামের "No Negative" এবং "No Positive" মানের ১২৭টি সারি রয়েছে। এর মানে রিভিউয়ার হোটেলকে একটি সংখ্যাসূচক স্কোর দিয়েছেন, কিন্তু কোনও ইতিবাচক বা নেতিবাচক রিভিউ লিখতে অস্বীকার করেছেন। সৌভাগ্যক্রমে এটি একটি ছোট পরিমাণ সারি (৫১৫৭৩৮-এর মধ্যে ১২৭, বা ০.০২%), তাই এটি সম্ভবত আমাদের মডেল বা ফলাফলকে কোনও নির্দিষ্ট দিকে প্রভাবিত করবে না, তবে আপনি একটি রিভিউ ডেটাসেটে কোনও রিভিউ ছাড়া সারি থাকতে পারে তা আশা করেননি, তাই এটি অনুসন্ধান করা মূল্যবান। + আপনি লক্ষ্য করতে পারেন যে `Negative_Review` এবং `Positive_Review` কলামের "No Negative" এবং "No Positive" মানের ১২৭টি সারি রয়েছে। এর মানে হলো রিভিউয়ার হোটেলকে একটি সংখ্যাসূচক স্কোর দিয়েছেন, কিন্তু ইতিবাচক বা নেতিবাচক কোনো রিভিউ লিখতে অস্বীকার করেছেন। সৌভাগ্যক্রমে এটি একটি ছোট পরিমাণ সারি (৫১৫৭৩৮-এর মধ্যে ১২৭, বা ০.০২%), তাই এটি সম্ভবত আমাদের মডেল বা ফলাফলকে কোনো নির্দিষ্ট দিকে প্রভাবিত করবে না। তবে আপনি হয়তো আশা করেননি যে রিভিউয়ের ডেটাসেটে কোনো রিভিউ ছাড়া সারি থাকবে, তাই এটি আবিষ্কার করার জন্য ডেটা অনুসন্ধান করা মূল্যবান। -এখন আপনি ডেটাসেটটি অনুসন্ধান করেছেন, পরবর্তী পাঠে আপনি ডেটা ফিল্টার করবেন এবং কিছু অনুভূতি বিশ্লেষণ যোগ করবেন। +এখন আপনি ডেটাসেটটি অনুসন্ধান করেছেন, পরবর্তী পাঠে আপনি ডেটা ফিল্টার করবেন এবং কিছু সেন্টিমেন্ট অ্যানালাইসিস যোগ করবেন। --- ## 🚀চ্যালেঞ্জ -এই পাঠটি দেখায়, যেমন আমরা আগের পাঠে দেখেছি, যে আপনার ডেটা এবং এর ত্রুটি বুঝতে কতটা গুরুত্বপূর্ণ। বিশেষত টেক্সট-ভিত্তিক ডেটা সাবধানে পরীক্ষা করা প্রয়োজন। বিভিন্ন টেক্সট-ভারী ডেটাসেট খনন করুন এবং দেখুন আপনি এমন ক্ষেত্রগুলি আবিষ্কার করতে পারেন কিনা যা একটি মডেলে পক্ষপাত বা বিকৃত অনুভূতি প্রবর্তন করতে পারে। +এই পাঠটি দেখায়, যেমন আমরা আগের পাঠে দেখেছি, আপনার ডেটা এবং এর ত্রুটিগুলো বুঝতে কতটা গুরুত্বপূর্ণ। বিশেষত টেক্সট-ভিত্তিক ডেটা খুব সতর্কতার সাথে পরীক্ষা করা উচিত। বিভিন্ন টেক্সট-ভারী ডেটাসেট খনন করুন এবং দেখুন আপনি এমন ক্ষেত্র আবিষ্কার করতে পারেন কিনা যা একটি মডেলে পক্ষপাত বা বিকৃত সেন্টিমেন্ট প্রবর্তন করতে পারে। -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/38/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা এবং স্ব-অধ্যয়ন -[NLP নিয়ে এই লার্নিং পাথটি](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) গ্রহণ করুন এবং টেক্সট-ভারী মডেল তৈরি করার সময় চেষ্টা করার জন্য টুলগুলি আবিষ্কার করুন। +[NLP নিয়ে এই লার্নিং পাথ](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) গ্রহণ করুন এবং টুলগুলো আবিষ্কার করুন যা স্পিচ এবং টেক্সট-ভারী মডেল তৈরি করার সময় চেষ্টা করতে পারেন। ## অ্যাসাইনমেন্ট @@ -415,4 +414,4 @@ Lambda ছাড়া আইটেম গণনা করার আরেকট --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/6-NLP/5-Hotel-Reviews-2/README.md b/translations/bn/6-NLP/5-Hotel-Reviews-2/README.md index ead54e5ea..0ccfce4b3 100644 --- a/translations/bn/6-NLP/5-Hotel-Reviews-2/README.md +++ b/translations/bn/6-NLP/5-Hotel-Reviews-2/README.md @@ -1,45 +1,45 @@ # হোটেল রিভিউ দিয়ে সেন্টিমেন্ট অ্যানালাইসিস -আপনি ইতিমধ্যে ডেটাসেটটি বিস্তারিতভাবে অন্বেষণ করেছেন, এখন সময় এসেছে কলামগুলো ফিল্টার করার এবং NLP প্রযুক্তি ব্যবহার করে হোটেল সম্পর্কে নতুন অন্তর্দৃষ্টি লাভ করার। +আপনি ইতিমধ্যে ডেটাসেটটি বিস্তারিতভাবে অন্বেষণ করেছেন, এখন সময় এসেছে কলামগুলো ফিল্টার করার এবং NLP প্রযুক্তি ব্যবহার করে হোটেল সম্পর্কে নতুন অন্তর্দৃষ্টি অর্জন করার। -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/39/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ### ফিল্টারিং এবং সেন্টিমেন্ট অ্যানালাইসিস অপারেশন -আপনি হয়তো লক্ষ্য করেছেন, ডেটাসেটে কিছু সমস্যা রয়েছে। কিছু কলামে অপ্রয়োজনীয় তথ্য রয়েছে, অন্যগুলো ভুল মনে হচ্ছে। যদি সেগুলো সঠিকও হয়, তাহলে কীভাবে সেগুলো গণনা করা হয়েছে তা অস্পষ্ট, এবং আপনার নিজস্ব গণনার মাধ্যমে উত্তরগুলো স্বাধীনভাবে যাচাই করা সম্ভব নয়। +আপনি হয়তো লক্ষ্য করেছেন, ডেটাসেটে কিছু সমস্যা রয়েছে। কিছু কলামে অপ্রয়োজনীয় তথ্য রয়েছে, অন্যগুলো ভুল মনে হচ্ছে। যদি সেগুলো সঠিকও হয়, তাহলে কীভাবে সেগুলো গণনা করা হয়েছে তা পরিষ্কার নয়, এবং আপনার নিজস্ব গণনার মাধ্যমে উত্তরগুলো স্বাধীনভাবে যাচাই করা সম্ভব নয়। ## অনুশীলন: আরও কিছু ডেটা প্রসেসিং -ডেটা আরও একটু পরিষ্কার করুন। এমন কলাম যোগ করুন যা পরে কাজে লাগবে, অন্য কলামের মান পরিবর্তন করুন, এবং কিছু কলাম সম্পূর্ণভাবে বাদ দিন। +ডেটা আরও একটু পরিষ্কার করুন। ভবিষ্যতে দরকার হবে এমন কলাম যোগ করুন, অন্য কলামের মান পরিবর্তন করুন, এবং কিছু কলাম সম্পূর্ণভাবে বাদ দিন। 1. প্রাথমিক কলাম প্রসেসিং 1. `lat` এবং `lng` বাদ দিন - 2. `Hotel_Address` এর মানগুলো নিম্নলিখিত মানগুলো দিয়ে প্রতিস্থাপন করুন (যদি ঠিকানায় শহর এবং দেশের নাম থাকে, তাহলে শুধুমাত্র শহর এবং দেশ রাখুন)। + 2. `Hotel_Address` এর মান নিম্নলিখিত মানগুলোর সাথে প্রতিস্থাপন করুন (যদি ঠিকানায় শহর এবং দেশের নাম থাকে, তাহলে শুধুমাত্র শহর এবং দেশ রাখুন)। ডেটাসেটে শুধুমাত্র এই শহর এবং দেশগুলো রয়েছে: - আমস্টারডাম, নেদারল্যান্ডস + Amsterdam, Netherlands - বার্সেলোনা, স্পেন + Barcelona, Spain - লন্ডন, যুক্তরাজ্য + London, United Kingdom - মিলান, ইতালি + Milan, Italy - প্যারিস, ফ্রান্স + Paris, France - ভিয়েনা, অস্ট্রিয়া + Vienna, Austria ```python def replace_address(row): @@ -62,7 +62,7 @@ CO_OP_TRANSLATOR_METADATA: print(df["Hotel_Address"].value_counts()) ``` - এখন আপনি দেশ-স্তরের ডেটা কুয়েরি করতে পারেন: + এখন আপনি দেশ-স্তরের ডেটা কুয়েরি করতে পারবেন: ```python display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) @@ -81,9 +81,9 @@ CO_OP_TRANSLATOR_METADATA: 1. `Additional_Number_of_Scoring` বাদ দিন - 1. `Total_Number_of_Reviews` প্রতিস্থাপন করুন সেই হোটেলের জন্য ডেটাসেটে থাকা মোট রিভিউ সংখ্যা দিয়ে + 1. `Total_Number_of_Reviews` প্রতিস্থাপন করুন সেই হোটেলের জন্য ডেটাসেটে থাকা রিভিউয়ের মোট সংখ্যা দিয়ে - 1. `Average_Score` আমাদের নিজস্ব গণনা করা স্কোর দিয়ে প্রতিস্থাপন করুন + 1. `Average_Score` আমাদের নিজস্ব গণিত স্কোর দিয়ে প্রতিস্থাপন করুন ```python # Drop `Additional_Number_of_Scoring` @@ -97,7 +97,7 @@ CO_OP_TRANSLATOR_METADATA: 1. `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` এবং `days_since_review` বাদ দিন - 2. `Reviewer_Score`, `Negative_Review`, এবং `Positive_Review` যেমন আছে তেমনই রাখুন, + 2. `Reviewer_Score`, `Negative_Review`, এবং `Positive_Review` যেমন আছে তেমনই রাখুন 3. `Tags` আপাতত রাখুন @@ -111,23 +111,23 @@ CO_OP_TRANSLATOR_METADATA: ### ট্যাগ কলাম -`Tag` কলামটি সমস্যাযুক্ত কারণ এটি একটি তালিকা (টেক্সট আকারে) যা কলামে সংরক্ষিত। দুর্ভাগ্যবশত এই কলামের উপ-অংশগুলোর ক্রম এবং সংখ্যা সবসময় একই থাকে না। ৫১৫,০০০টি সারি এবং ১৪২৭টি হোটেল রয়েছে, এবং প্রতিটি রিভিউয়ারের জন্য কিছুটা ভিন্ন অপশন থাকে, যা মানুষের জন্য সঠিক বাক্যাংশ চিহ্নিত করা কঠিন করে তোলে। এখানেই NLP কার্যকর। আপনি টেক্সট স্ক্যান করতে পারেন এবং সবচেয়ে সাধারণ বাক্যাংশগুলো খুঁজে বের করতে পারেন এবং সেগুলো গণনা করতে পারেন। +`Tag` কলামটি সমস্যাযুক্ত কারণ এটি একটি তালিকা (টেক্সট আকারে) যা কলামে সংরক্ষিত। দুর্ভাগ্যবশত এই কলামের উপ-অংশগুলোর ক্রম এবং সংখ্যা সবসময় একই থাকে না। ৫১৫,০০০ সারি এবং ১৪২৭টি হোটেল থাকার কারণে, একজন মানুষের জন্য সঠিক বাক্যাংশগুলো চিহ্নিত করা কঠিন হয়ে পড়ে। এখানেই NLP কার্যকর। আপনি টেক্সট স্ক্যান করে সবচেয়ে সাধারণ বাক্যাংশগুলো খুঁজে বের করতে পারেন এবং সেগুলো গণনা করতে পারেন। -দুর্ভাগ্যবশত, আমরা একক শব্দে আগ্রহী নই, বরং বহু-শব্দের বাক্যাংশে (যেমন *Business trip*)। এত বড় ডেটাতে (৬৭৬২৬৪৬টি শব্দ) একটি বহু-শব্দের ফ্রিকোয়েন্সি ডিস্ট্রিবিউশন অ্যালগরিদম চালানো অত্যন্ত সময়সাপেক্ষ হতে পারে, তবে ডেটা না দেখে মনে হবে এটি একটি প্রয়োজনীয় ব্যয়। এখানেই এক্সপ্লোরেটরি ডেটা অ্যানালাইসিস কাজে আসে, কারণ আপনি ট্যাগগুলোর একটি নমুনা যেমন `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']` দেখেছেন, আপনি প্রশ্ন করতে পারেন যে প্রক্রিয়াটি উল্লেখযোগ্যভাবে কমানো সম্ভব কিনা। সৌভাগ্যক্রমে, এটি সম্ভব - তবে প্রথমে আপনাকে কিছু ধাপ অনুসরণ করতে হবে যাতে আগ্রহের ট্যাগগুলো নিশ্চিত করা যায়। +দুর্ভাগ্যবশত, আমরা একক শব্দে আগ্রহী নই, বরং বহু-শব্দের বাক্যাংশে (যেমন *Business trip*)। এত বেশি ডেটার উপর একটি বহু-শব্দের ফ্রিকোয়েন্সি ডিস্ট্রিবিউশন অ্যালগরিদম চালানো অত্যন্ত সময়সাপেক্ষ হতে পারে, তবে ডেটা না দেখে মনে হবে এটি একটি প্রয়োজনীয় ব্যয়। এখানেই এক্সপ্লোরেটরি ডেটা অ্যানালাইসিস কার্যকর হয়, কারণ আপনি ট্যাগগুলোর একটি নমুনা যেমন `[' Business trip ', ' Solo traveler ', ' Single Room ', ' Stayed 5 nights ', ' Submitted from a mobile device ']` দেখেছেন, আপনি প্রশ্ন করতে পারেন যে প্রক্রিয়াটি অনেক কমিয়ে আনা সম্ভব কিনা। সৌভাগ্যক্রমে, এটি সম্ভব - তবে প্রথমে আপনাকে কিছু ধাপ অনুসরণ করতে হবে যাতে আগ্রহের ট্যাগগুলো চিহ্নিত করা যায়। ### ট্যাগ ফিল্টারিং -মনে রাখবেন যে ডেটাসেটের লক্ষ্য হলো সেন্টিমেন্ট এবং এমন কলাম যোগ করা যা আপনাকে সেরা হোটেল বেছে নিতে সাহায্য করবে (আপনার জন্য বা হয়তো কোনো ক্লায়েন্টের জন্য যে আপনাকে একটি হোটেল রিকমেন্ডেশন বট তৈরি করতে বলেছে)। আপনাকে নিজেকে জিজ্ঞাসা করতে হবে যে ট্যাগগুলো চূড়ান্ত ডেটাসেটে উপযোগী কিনা। এখানে একটি ব্যাখ্যা দেওয়া হলো (যদি আপনার ডেটাসেটের প্রয়োজন অন্য কারণে হয়, তাহলে ভিন্ন ট্যাগগুলো থাকতে পারে/বাদ দেওয়া হতে পারে): +মনে রাখবেন যে ডেটাসেটের লক্ষ্য হলো সেন্টিমেন্ট এবং এমন কলাম যোগ করা যা আপনাকে সেরা হোটেল বেছে নিতে সাহায্য করবে (আপনার জন্য বা হয়তো কোনো ক্লায়েন্টের জন্য যে আপনাকে একটি হোটেল রিকমেন্ডেশন বট তৈরি করতে বলেছে)। আপনাকে নিজেকে প্রশ্ন করতে হবে যে ট্যাগগুলো চূড়ান্ত ডেটাসেটে উপযোগী কিনা। এখানে একটি ব্যাখ্যা দেওয়া হলো (যদি আপনার ডেটাসেটের প্রয়োজন অন্য কারণে হয়, তাহলে ভিন্ন ট্যাগগুলো থাকতে পারে/বাদ দেওয়া হতে পারে): 1. ট্রিপের ধরন প্রাসঙ্গিক, এবং এটি রাখা উচিত 2. অতিথি দলের ধরন গুরুত্বপূর্ণ, এবং এটি রাখা উচিত -3. অতিথি যে রুম, স্যুট, বা স্টুডিওতে থেকেছে তা অপ্রাসঙ্গিক (সব হোটেলে মূলত একই রকম রুম থাকে) +3. অতিথি যে রুম, স্যুট বা স্টুডিওতে থেকেছে তা অপ্রাসঙ্গিক (সব হোটেলে মূলত একই রকম রুম থাকে) 4. রিভিউ যে ডিভাইসে জমা দেওয়া হয়েছে তা অপ্রাসঙ্গিক -5. রিভিউয়ার কত রাত থেকেছেন তা *প্রাসঙ্গিক* হতে পারে যদি আপনি দীর্ঘ সময় থাকার সঙ্গে হোটেল পছন্দ করার সম্পর্ক স্থাপন করেন, তবে এটি একটি অনুমান, এবং সম্ভবত অপ্রাসঙ্গিক +5. রিভিউয়ার কত রাত থেকেছেন তা *প্রাসঙ্গিক হতে পারে* যদি আপনি দীর্ঘ সময় থাকার সঙ্গে হোটেল পছন্দ করার সম্পর্ক স্থাপন করেন, তবে এটি একটি অনুমান, এবং সম্ভবত অপ্রাসঙ্গিক -সংক্ষেপে, **২ ধরনের ট্যাগ রাখুন এবং অন্যগুলো সরিয়ে দিন**। +সংক্ষেপে, **২ ধরনের ট্যাগ রাখুন এবং বাকিগুলো সরিয়ে দিন**। -প্রথমে, আপনি ট্যাগগুলো গণনা করতে চান না যতক্ষণ না সেগুলো আরও ভালো ফরম্যাটে থাকে, তাই স্কয়ার ব্র্যাকেট এবং কোটেশন চিহ্ন সরিয়ে ফেলুন। এটি করার জন্য বিভিন্ন উপায় রয়েছে, তবে আপনি দ্রুততম উপায়টি চান কারণ এটি অনেক ডেটা প্রক্রিয়া করতে দীর্ঘ সময় নিতে পারে। সৌভাগ্যক্রমে, pandas-এর একটি সহজ উপায় রয়েছে প্রতিটি ধাপ সম্পন্ন করার। +প্রথমে, আপনি ট্যাগগুলো গণনা করতে চান না যতক্ষণ না সেগুলো আরও ভালো ফরম্যাটে থাকে, তাই স্কয়ার ব্র্যাকেট এবং কোটেশন চিহ্ন সরিয়ে ফেলুন। এটি করার জন্য অনেক পদ্ধতি রয়েছে, তবে আপনি দ্রুততম পদ্ধতি চান কারণ এটি অনেক ডেটা প্রসেস করতে দীর্ঘ সময় নিতে পারে। সৌভাগ্যক্রমে, pandas-এর মাধ্যমে প্রতিটি ধাপ সহজে করা যায়। ```Python # Remove opening and closing brackets @@ -136,11 +136,11 @@ df.Tags = df.Tags.str.strip("[']") df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) ``` -প্রতিটি ট্যাগ এমন কিছু হয়ে যায়: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`। +প্রতিটি ট্যাগ এমন কিছু হয়ে যায়: `Business trip, Solo traveler, Single Room, Stayed 5 nights, Submitted from a mobile device`. -এরপর একটি সমস্যা দেখা দেয়। কিছু রিভিউ বা সারিতে ৫টি কলাম থাকে, কিছুতে ৩টি, কিছুতে ৬টি। এটি ডেটাসেট তৈরির ফলাফল এবং এটি ঠিক করা কঠিন। আপনি প্রতিটি বাক্যাংশের ফ্রিকোয়েন্সি গণনা করতে চান, তবে সেগুলো প্রতিটি রিভিউতে ভিন্ন ক্রমে থাকে, তাই গণনা ভুল হতে পারে, এবং একটি হোটেল একটি ট্যাগ পেতে পারে না যা এটি প্রাপ্য ছিল। +এরপর একটি সমস্যা দেখা দেয়। কিছু রিভিউ বা সারিতে ৫টি কলাম থাকে, কিছুতে ৩টি, কিছুতে ৬টি। এটি ডেটাসেট তৈরির পদ্ধতির ফলাফল এবং এটি ঠিক করা কঠিন। আপনি প্রতিটি বাক্যাংশের ফ্রিকোয়েন্সি গণনা করতে চান, তবে সেগুলো প্রতিটি রিভিউতে ভিন্ন ক্রমে থাকে, তাই গণনা ভুল হতে পারে এবং একটি হোটেল এমন একটি ট্যাগ পেতে পারে না যা এটি প্রাপ্য ছিল। -এর পরিবর্তে আপনি ভিন্ন ক্রমকে আমাদের সুবিধায় ব্যবহার করবেন, কারণ প্রতিটি ট্যাগ বহু-শব্দের হলেও কমা দিয়ে পৃথক করা হয়েছে! এর সহজতম উপায় হলো ৬টি অস্থায়ী কলাম তৈরি করা যেখানে প্রতিটি ট্যাগ তার ক্রম অনুযায়ী কলামে প্রবেশ করানো হবে। এরপর আপনি ৬টি কলাম একত্রিত করে একটি বড় কলামে পরিণত করবেন এবং `value_counts()` পদ্ধতি চালাবেন। এটি প্রিন্ট করলে আপনি দেখতে পাবেন ২৪২৮টি ইউনিক ট্যাগ ছিল। এখানে একটি ছোট নমুনা: +পরিবর্তে আপনি এই ভিন্ন ক্রমকে আমাদের সুবিধার জন্য ব্যবহার করবেন, কারণ প্রতিটি ট্যাগ বহু-শব্দের হলেও কমা দিয়ে পৃথক করা হয়েছে! এর সহজতম উপায় হলো ৬টি অস্থায়ী কলাম তৈরি করা যেখানে প্রতিটি ট্যাগ তার ক্রম অনুযায়ী কলামে প্রবেশ করানো হবে। এরপর আপনি ৬টি কলাম একত্রিত করে একটি বড় কলামে পরিণত করবেন এবং `value_counts()` পদ্ধতি চালাবেন। এটি প্রিন্ট করলে, আপনি দেখবেন ২৪২৮টি ইউনিক ট্যাগ ছিল। এখানে একটি ছোট নমুনা: | Tag | Count | | ------------------------------ | ------ | @@ -167,7 +167,7 @@ df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) | Superior Double or Twin Room | 13570 | | 2 rooms | 12393 | -`Submitted from a mobile device` এর মতো কিছু সাধারণ ট্যাগ আমাদের কোনো কাজে আসে না, তাই এটি গণনা করার আগে সরিয়ে দেওয়া বুদ্ধিমানের কাজ হতে পারে, তবে এটি এত দ্রুত অপারেশন যে আপনি সেগুলো রেখে দিতে পারেন এবং উপেক্ষা করতে পারেন। +`Submitted from a mobile device` এর মতো কিছু সাধারণ ট্যাগ আমাদের কোনো কাজে আসে না, তাই এটি গণনা করার আগে সরিয়ে ফেলা বুদ্ধিমানের কাজ হতে পারে, তবে এটি এত দ্রুত অপারেশন যে আপনি সেগুলো রেখে দিতে পারেন এবং উপেক্ষা করতে পারেন। ### থাকার সময়ের ট্যাগ সরানো @@ -186,7 +186,7 @@ df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) | Stayed 9 nights | 1293 | | ... | ... | -রুম, স্যুট, স্টুডিও, অ্যাপার্টমেন্ট ইত্যাদির একটি বিশাল বৈচিত্র্য রয়েছে। এগুলো সবই মূলত একই জিনিস বোঝায় এবং আপনার জন্য প্রাসঙ্গিক নয়, তাই সেগুলো বিবেচনা থেকে সরিয়ে দিন। +রুম, স্যুট, স্টুডিও, অ্যাপার্টমেন্ট ইত্যাদির একটি বিশাল বৈচিত্র্য রয়েছে। এগুলো সব একই রকম অর্থ বহন করে এবং আপনার জন্য প্রাসঙ্গিক নয়, তাই এগুলো বিবেচনা থেকে সরিয়ে দিন। | Type of room | Count | | ----------------------------- | ----- | @@ -212,9 +212,9 @@ df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) | Family with older children | 26349 | | With a pet | 1405 | -আপনি যুক্তি দিতে পারেন যে `Travellers with friends` মূলত `Group` এর সমান এবং এটি একত্রিত করা উচিত, এবং এটি উপরের মতো একত্রিত করা ন্যায্য হবে। সঠিক ট্যাগ চিহ্নিত করার কোডটি [Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) এ রয়েছে। +আপনি যুক্তি দিতে পারেন যে `Travellers with friends` মূলত `Group` এর সমান এবং এটি একত্রিত করা উচিত, যেমন উপরে করা হয়েছে। সঠিক ট্যাগ চিহ্নিত করার কোডটি [Tags notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) এ রয়েছে। -শেষ ধাপ হলো প্রতিটি ট্যাগের জন্য নতুন কলাম তৈরি করা। এরপর, প্রতিটি রিভিউ সারির জন্য, যদি `Tag` কলামটি নতুন কলামের একটির সঙ্গে মিলে যায়, তাহলে ১ যোগ করুন, যদি না মিলে, তাহলে ০ যোগ করুন। চূড়ান্ত ফলাফল হবে কতজন রিভিউয়ার এই হোটেলটি (সমষ্টিগতভাবে) ব্যবসা বনাম অবসর, বা একটি পোষা প্রাণী নিয়ে আসার জন্য বেছে নিয়েছেন তার একটি গণনা, এবং এটি একটি হোটেল সুপারিশ করার সময় উপযোগী তথ্য। +শেষ ধাপ হলো প্রতিটি ট্যাগের জন্য নতুন কলাম তৈরি করা। এরপর প্রতিটি রিভিউ সারির জন্য, যদি `Tag` কলামটি নতুন কলামের একটির সাথে মিলে যায়, তাহলে ১ যোগ করুন, যদি না মিলে, তাহলে ০ যোগ করুন। চূড়ান্ত ফলাফল হবে কতজন রিভিউয়ার এই হোটেলটি (সমষ্টিগতভাবে) ব্যবসা বনাম অবসর, বা পোষা প্রাণী নিয়ে থাকার জন্য বেছে নিয়েছেন তার একটি গণনা, এবং এটি হোটেল সুপারিশ করার সময় উপযোগী তথ্য। ```python # Process the Tags into new columns @@ -234,7 +234,7 @@ 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) @@ -246,11 +246,11 @@ df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) ## সেন্টিমেন্ট অ্যানালাইসিস অপারেশন -এই চূড়ান্ত অংশে, আপনি রিভিউ কলামগুলোর উপর সেন্টিমেন্ট অ্যানালাইসিস প্রয়োগ করবেন এবং ফলাফলগুলো একটি ডেটাসেটে সংরক্ষণ করবেন। +এই চূড়ান্ত অংশে, আপনি রিভিউ কলামগুলোর উপর সেন্টিমেন্ট অ্যানালাইসিস প্রয়োগ করবেন এবং ফলাফল একটি ডেটাসেটে সংরক্ষণ করবেন। ## অনুশীলন: ফিল্টার করা ডেটা লোড এবং সংরক্ষণ করুন -মনে রাখবেন এখন আপনি পূর্ববর্তী অংশে সংরক্ষিত ফিল্টার করা ডেটাসেটটি লোড করছেন, **মূল ডেটাসেটটি নয়**। +মনে রাখবেন এখন আপনি পূর্ববর্তী অংশে সংরক্ষিত ফিল্টার করা ডেটাসেট লোড করছেন, **মূল ডেটাসেট নয়**। ```python import time @@ -273,13 +273,13 @@ df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) ### স্টপ ওয়ার্ড সরানো -যদি আপনি `Negative` এবং `Positive` রিভিউ কলামগুলোর উপর সেন্টিমেন্ট অ্যানালাইসিস চালান, এটি দীর্ঘ সময় নিতে পারে। একটি শক্তিশালী টেস্ট ল্যাপটপে দ্রুত CPU সহ পরীক্ষা করা হলে, এটি ১২ - ১৪ মিনিট সময় নিয়েছে, নির্ভর করে কোন সেন্টিমেন্ট লাইব্রেরি ব্যবহার করা হয়েছে। এটি একটি (আপেক্ষিকভাবে) দীর্ঘ সময়, তাই এটি দ্রুত করা সম্ভব কিনা তা তদন্ত করা মূল্যবান। +যদি আপনি Negative এবং Positive রিভিউ কলামগুলোর উপর সেন্টিমেন্ট অ্যানালাইসিস চালান, তাহলে এটি দীর্ঘ সময় নিতে পারে। একটি শক্তিশালী টেস্ট ল্যাপটপে দ্রুত CPU সহ পরীক্ষা করা হলে, এটি ১২ - ১৪ মিনিট সময় নিয়েছে, নির্ভর করে কোন সেন্টিমেন্ট লাইব্রেরি ব্যবহার করা হয়েছে। এটি একটি (আপেক্ষিকভাবে) দীর্ঘ সময়, তাই এটি দ্রুত করা সম্ভব কিনা তা তদন্ত করা মূল্যবান। -স্টপ ওয়ার্ড সরানো, বা সাধারণ ইংরেজি শব্দগুলো যা একটি বাক্যের সেন্টিমেন্ট পরিবর্তন করে না, প্রথম ধাপ। এগুলো সরিয়ে দিলে সেন্টিমেন্ট অ্যানালাইসিস দ্রুত চলা উচিত, তবে কম সঠিক হবে না (কারণ স্টপ ওয়ার্ডগুলো সেন্টিমেন্টকে প্রভাবিত করে না, তবে সেগুলো অ্যানালাইসিসকে ধীর করে দেয়)। +স্টপ ওয়ার্ড, বা সাধারণ ইংরেজি শব্দ যা বাক্যের সেন্টিমেন্ট পরিবর্তন করে না, সরানো প্রথম ধাপ। এগুলো সরিয়ে দিলে সেন্টিমেন্ট অ্যানালাইসিস দ্রুত চলা উচিত, তবে কম সঠিক হবে না (কারণ স্টপ ওয়ার্ডগুলো সেন্টিমেন্টকে প্রভাবিত করে না, তবে সেগুলো অ্যানালাইসিসকে ধীর করে দেয়)। -সবচেয়ে দীর্ঘ `Negative` রিভিউ ছিল ৩৯৫টি শব্দ, তবে স্টপ ওয়ার্ড সরানোর পর এটি ১৯৫টি শব্দ। +সবচেয়ে দীর্ঘ Negative রিভিউ ছিল ৩৯৫ শব্দ, তবে স্টপ ওয়ার্ড সরানোর পর এটি ১৯৫ শব্দে নেমে এসেছে। -স্টপ ওয়ার্ড সরানো একটি দ্রুত অপারেশন, ২টি রিভিউ কলাম থেকে ৫১৫,০০০টি সারির স্টপ ওয়ার্ড সরাতে টেস্ট ডিভাইসে ৩.৩ সেকেন্ড সময় লেগেছে। আপনার ডিভাইসের CPU স্পিড, RAM, SSD আছে কিনা, এবং অন্যান্য কিছু ফ্যাক্টরের উপর নির্ভর করে এটি সামান্য বেশি বা কম সময় নিতে পারে। অপারেশনটি আপেক্ষিকভাবে সংক্ষিপ্ত হওয়ায়, যদি এটি সেন্টিমেন্ট অ্যানালাইসিসের সময় উন্নত করে, তাহলে এটি করা মূল্যবান। +স্টপ ওয়ার্ড সরানো একটি দ্রুত অপারেশন, ২টি রিভিউ কলাম থেকে ৫১৫,০০০ সারির স্টপ ওয়ার্ড সরাতে টেস্ট ডিভাইসে ৩.৩ সেকেন্ড লেগেছে। আপনার ডিভাইসের CPU স্পিড, RAM, SSD আছে কিনা এবং অন্যান্য কিছু ফ্যাক্টরের উপর নির্ভর করে এটি সামান্য বেশি বা কম সময় নিতে পারে। অপারেশনটি আপেক্ষিকভাবে সংক্ষিপ্ত হওয়ায়, যদি এটি সেন্টিমেন্ট অ্যানালাইসিসের সময় উন্নত করে, তাহলে এটি করা মূল্যবান। ```python from nltk.corpus import stopwords @@ -301,10 +301,10 @@ df.Negative_Review = df.Negative_Review.apply(remove_stopwords) df.Positive_Review = df.Positive_Review.apply(remove_stopwords) ``` -### সেন্টিমেন্ট অ্যানালাইসিস সম্পাদন করা -এখন আপনাকে নেতিবাচক এবং ইতিবাচক রিভিউ কলামগুলোর জন্য সেন্টিমেন্ট বিশ্লেষণ গণনা করতে হবে এবং ফলাফল দুটি নতুন কলামে সংরক্ষণ করতে হবে। সেন্টিমেন্টের পরীক্ষা হবে এটি রিভিউয়ারের স্কোরের সাথে তুলনা করা। উদাহরণস্বরূপ, যদি সেন্টিমেন্ট বিশ্লেষণ নেতিবাচক রিভিউতে ১ (অত্যন্ত ইতিবাচক সেন্টিমেন্ট) এবং ইতিবাচক রিভিউতে ১ দেখায়, কিন্তু রিভিউয়ার হোটেলকে সর্বনিম্ন স্কোর দেয়, তাহলে হয় রিভিউ টেক্সট স্কোরের সাথে মেলে না, অথবা সেন্টিমেন্ট বিশ্লেষক সঠিকভাবে সেন্টিমেন্ট চিনতে পারেনি। কিছু সেন্টিমেন্ট স্কোর সম্পূর্ণ ভুল হতে পারে, এবং তা ব্যাখ্যা করা সম্ভব হবে, যেমন রিভিউটি অত্যন্ত ব্যঙ্গাত্মক হতে পারে "অবশ্যই আমি গরম ছাড়া একটি রুমে ঘুমাতে ভালোবাসি" এবং সেন্টিমেন্ট বিশ্লেষক এটিকে ইতিবাচক সেন্টিমেন্ট মনে করে, যদিও একজন মানুষ এটি পড়লে বুঝতে পারবে এটি ব্যঙ্গ। +### সেন্টিমেন্ট অ্যানালাইসিস করা -NLTK বিভিন্ন সেন্টিমেন্ট বিশ্লেষক সরবরাহ করে যা দিয়ে শিখতে পারেন, এবং আপনি সেগুলো পরিবর্তন করে দেখতে পারেন সেন্টিমেন্ট আরও সঠিক কিনা। এখানে VADER সেন্টিমেন্ট বিশ্লেষণ ব্যবহার করা হয়েছে। +এখন আপনাকে Negative এবং Positive রিভিউ কলামগুলোর জন্য সেন্টিমেন্ট অ্যানালাইসিস গণনা করতে হবে এবং ফলাফল ২টি নতুন কলামে সংরক্ষণ করতে হবে। সেন্টিমেন্টের পরীক্ষা হবে একই রিভিউয়ের জন্য রিভিউয়ারের স্কোরের সাথে তুলনা করা। উদাহরণস্বরূপ, যদি সেন্টিমেন্ট মনে করে Negative রিভিউয়ের সেন্টিমেন্ট ১ (অত্যন্ত পজিটিভ সেন্টিমেন্ট) এবং Positive রিভিউয়ের সেন্টিমেন্ট ১, কিন্তু রিভিউয়ার হোটেলকে সর্বনিম্ন স্কোর দিয়েছে, তাহলে হয় রিভিউ টেক্সট স্কোরের সাথে মেলে না, অথবা সেন্টিমেন্ট অ্যানালাইজার সঠিকভাবে সেন্টিমেন্ট চিহ্নিত করতে পারেনি। আপনি আশা করতে পারেন কিছু সেন্টিমেন্ট স্কোর সম্পূর্ণ ভুল হবে, এবং এটি প্রায়ই ব্যাখ্যা করা যাবে, যেমন রিভিউটি অত্যন্ত ব্যঙ্গাত্মক হতে পারে "অবশ্যই আমি ভালোবাসলাম একটি রুমে ঘুমাতে যেখানে কোনো হিটিং ছিল না" এবং সেন্টিমেন্ট অ্যানালাইজার মনে করে এটি পজিটিভ সেন্টিমেন্ট, যদিও একজন মানুষ এটি পড়লে জানবে এটি ব্যঙ্গ। +NLTK বিভিন্ন সেন্টিমেন্ট বিশ্লেষক সরবরাহ করে শেখার জন্য, এবং আপনি এগুলো পরিবর্তন করে দেখতে পারেন সেন্টিমেন্ট বিশ্লেষণ কতটা সঠিক বা ভুল। এখানে VADER সেন্টিমেন্ট বিশ্লেষণ ব্যবহার করা হয়েছে। > 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. @@ -325,7 +325,7 @@ def calc_sentiment(review): return vader_sentiment.polarity_scores(review)["compound"] ``` -পরবর্তীতে আপনার প্রোগ্রামে যখন সেন্টিমেন্ট গণনা করতে প্রস্তুত হবেন, তখন এটি প্রতিটি রিভিউতে প্রয়োগ করতে পারেন নিম্নলিখিতভাবে: +পরবর্তীতে আপনার প্রোগ্রামে যখন আপনি সেন্টিমেন্ট গণনা করতে প্রস্তুত, তখন আপনি এটি প্রতিটি রিভিউতে প্রয়োগ করতে পারেন নিম্নলিখিতভাবে: ```python # Add a negative sentiment and positive sentiment column @@ -337,7 +337,7 @@ end = time.time() print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") ``` -এটি আমার কম্পিউটারে প্রায় ১২০ সেকেন্ড সময় নেয়, তবে এটি প্রতিটি কম্পিউটারে ভিন্ন হতে পারে। যদি আপনি ফলাফল প্রিন্ট করতে চান এবং দেখতে চান সেন্টিমেন্ট রিভিউয়ের সাথে মেলে কিনা: +এটি আমার কম্পিউটারে প্রায় ১২০ সেকেন্ড সময় নেয়, তবে এটি প্রতিটি কম্পিউটারে ভিন্ন হতে পারে। যদি আপনি ফলাফল প্রিন্ট করতে চান এবং দেখতে চান সেন্টিমেন্ট রিভিউয়ের সাথে মিলে কিনা: ```python df = df.sort_values(by=["Negative_Sentiment"], ascending=True) @@ -346,7 +346,7 @@ 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) @@ -356,28 +356,28 @@ 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 ফাইলটি তৈরি করতে)। +আপনার পুরো কোডটি চালানো উচিত [বিশ্লেষণ নোটবুকের](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. NLP চ্যালেঞ্জে নিচে Hotel_Reviews_NLP.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. নিচের NLP চ্যালেঞ্জে Hotel_Reviews_NLP.csv ব্যবহার করুন। ### উপসংহার -যখন আপনি শুরু করেছিলেন, তখন আপনার কাছে কলাম এবং ডেটাসহ একটি ডেটাসেট ছিল, কিন্তু এর সবকিছু যাচাই বা ব্যবহার করা সম্ভব ছিল না। আপনি ডেটা অন্বেষণ করেছেন, যা প্রয়োজন নেই তা ফিল্টার করেছেন, ট্যাগগুলোকে কিছু উপযোগী জিনিসে রূপান্তর করেছেন, নিজের গড় গণনা করেছেন, কিছু সেন্টিমেন্ট কলাম যোগ করেছেন এবং আশা করি, প্রাকৃতিক টেক্সট প্রক্রিয়াকরণ সম্পর্কে কিছু আকর্ষণীয় জিনিস শিখেছেন। +যখন আপনি শুরু করেছিলেন, তখন আপনার কাছে কলাম এবং ডেটাসহ একটি ডেটাসেট ছিল, কিন্তু এর সবকিছু যাচাই বা ব্যবহার করা সম্ভব ছিল না। আপনি ডেটা অনুসন্ধান করেছেন, যা প্রয়োজন নেই তা ফিল্টার করেছেন, ট্যাগগুলোকে কিছু উপযোগী জিনিসে রূপান্তর করেছেন, আপনার নিজস্ব গড় গণনা করেছেন, কিছু সেন্টিমেন্ট কলাম যোগ করেছেন এবং আশা করি, প্রাকৃতিক টেক্সট প্রক্রিয়াকরণ সম্পর্কে কিছু আকর্ষণীয় জিনিস শিখেছেন। -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## চ্যালেঞ্জ -এখন যেহেতু আপনার ডেটাসেট সেন্টিমেন্টের জন্য বিশ্লেষণ করা হয়েছে, দেখুন আপনি এই পাঠ্যক্রমে শেখা কৌশলগুলো (সম্ভবত ক্লাস্টারিং?) ব্যবহার করে সেন্টিমেন্টের চারপাশে প্যাটার্ন নির্ধারণ করতে পারেন কিনা। +এখন যেহেতু আপনার ডেটাসেট সেন্টিমেন্টের জন্য বিশ্লেষণ করা হয়েছে, দেখুন আপনি এই পাঠ্যক্রমে শেখা কৌশলগুলো (সম্ভবত ক্লাস্টারিং?) ব্যবহার করে সেন্টিমেন্টের চারপাশে প্যাটার্ন নির্ধারণ করতে পারেন কিনা। -## পর্যালোচনা ও স্ব-অধ্যয়ন +## পুনরালোচনা ও স্ব-অধ্যয়ন -[এই লার্ন মডিউলটি](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) নিন আরও জানতে এবং টেক্সটে সেন্টিমেন্ট অন্বেষণ করতে বিভিন্ন টুল ব্যবহার করতে। +[এই লার্ন মডিউলটি](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) নিন আরও জানতে এবং টেক্সটে সেন্টিমেন্ট অনুসন্ধানের জন্য বিভিন্ন টুল ব্যবহার করতে। ## অ্যাসাইনমেন্ট @@ -386,4 +386,4 @@ df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file diff --git a/translations/bn/7-TimeSeries/1-Introduction/README.md b/translations/bn/7-TimeSeries/1-Introduction/README.md index ba55d6114..1e4d40df4 100644 --- a/translations/bn/7-TimeSeries/1-Introduction/README.md +++ b/translations/bn/7-TimeSeries/1-Introduction/README.md @@ -1,67 +1,67 @@ # টাইম সিরিজ পূর্বাভাসের পরিচিতি -![টাইম সিরিজের সারাংশ একটি স্কেচনোটে](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.bn.png) +![টাইম সিরিজের সারাংশ একটি স্কেচনোটে](../../../../sketchnotes/ml-timeseries.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://ff-quizzes.netlify.app/en/ml/) -এটি একটি কার্যকর এবং আকর্ষণীয় ক্ষেত্র যা ব্যবসার জন্য বাস্তব মূল্য প্রদান করে, কারণ এটি মূল্য নির্ধারণ, ইনভেন্টরি এবং সাপ্লাই চেইন সমস্যার সরাসরি প্রয়োগের সাথে সম্পর্কিত। যদিও গভীর শিক্ষণ (ডিপ লার্নিং) কৌশলগুলি ভবিষ্যৎ পারফরম্যান্স আরও ভালোভাবে পূর্বাভাস দেওয়ার জন্য ব্যবহার করা শুরু হয়েছে, টাইম সিরিজ পূর্বাভাস এখনও ক্লাসিক মেশিন লার্নিং কৌশল দ্বারা ব্যাপকভাবে প্রভাবিত। +এটি একটি উপকারী এবং আকর্ষণীয় ক্ষেত্র যা ব্যবসার জন্য বাস্তব মূল্য প্রদান করে, কারণ এটি মূল্য নির্ধারণ, ইনভেন্টরি এবং সাপ্লাই চেইন সমস্যার সরাসরি প্রয়োগে সহায়ক। যদিও ভবিষ্যৎ পারফরম্যান্স আরও ভালোভাবে পূর্বাভাস দেওয়ার জন্য ডিপ লার্নিং কৌশলগুলি ব্যবহার করা শুরু হয়েছে, টাইম সিরিজ পূর্বাভাস এখনও ক্লাসিক মেশিন লার্নিং কৌশল দ্বারা ব্যাপকভাবে প্রভাবিত একটি ক্ষেত্র। -> পেন স্টেটের কার্যকর টাইম সিরিজ পাঠ্যক্রম [এখানে](https://online.stat.psu.edu/stat510/lesson/1) পাওয়া যাবে। +> পেন স্টেটের উপকারী টাইম সিরিজ কারিকুলাম [এখানে](https://online.stat.psu.edu/stat510/lesson/1) পাওয়া যাবে। ## পরিচিতি -ধরুন আপনি একটি স্মার্ট পার্কিং মিটার নেটওয়ার্ক পরিচালনা করেন যা সময়ের সাথে সাথে কতবার এবং কতক্ষণ ব্যবহৃত হয় তার ডেটা প্রদান করে। +ধরা যাক আপনি একটি স্মার্ট পার্কিং মিটারের অ্যারে পরিচালনা করেন যা সময়ের সাথে সাথে কতবার এবং কতক্ষণ ব্যবহৃত হয় তার ডেটা সরবরাহ করে। -> যদি আপনি মিটারের পূর্বের পারফরম্যান্সের উপর ভিত্তি করে ভবিষ্যৎ মান পূর্বাভাস দিতে পারেন, তাহলে কী হবে? +> যদি আপনি মিটারের অতীত পারফরম্যান্সের উপর ভিত্তি করে সরবরাহ এবং চাহিদার নিয়ম অনুযায়ী এর ভবিষ্যৎ মান পূর্বাভাস দিতে পারেন? -যখন কাজ করার সঠিক সময় পূর্বাভাস দেওয়া একটি চ্যালেঞ্জ, তখন টাইম সিরিজ পূর্বাভাস এই সমস্যার সমাধান করতে পারে। ব্যস্ত সময়ে পার্কিং স্পট খুঁজতে গিয়ে বেশি চার্জ করা লোকদের খুশি করবে না, তবে এটি রাস্তা পরিষ্কার করার জন্য রাজস্ব তৈরি করার একটি নিশ্চিত উপায় হতে পারে! +সঠিকভাবে কখন পদক্ষেপ নিতে হবে তা পূর্বাভাস দেওয়া একটি চ্যালেঞ্জ যা টাইম সিরিজ পূর্বাভাসের মাধ্যমে মোকাবিলা করা যেতে পারে। ব্যস্ত সময়ে পার্কিং স্পট খুঁজতে থাকা লোকদের বেশি চার্জ করা তাদের খুশি করবে না, তবে এটি রাস্তা পরিষ্কার করার জন্য রাজস্ব উৎপাদনের একটি নিশ্চিত উপায় হবে! -চলুন টাইম সিরিজ অ্যালগরিদমের কিছু ধরন অন্বেষণ করি এবং কিছু ডেটা পরিষ্কার ও প্রস্তুত করার জন্য একটি নোটবুক শুরু করি। আপনি যে ডেটা বিশ্লেষণ করবেন তা GEFCom2014 পূর্বাভাস প্রতিযোগিতা থেকে নেওয়া হয়েছে। এটি ২০১২ থেকে ২০১৪ সালের মধ্যে ৩ বছরের ঘণ্টাভিত্তিক বিদ্যুৎ লোড এবং তাপমাত্রার মান নিয়ে গঠিত। বিদ্যুৎ লোড এবং তাপমাত্রার ঐতিহাসিক প্যাটার্নের ভিত্তিতে, আপনি ভবিষ্যৎ বিদ্যুৎ লোডের মান পূর্বাভাস দিতে পারেন। +আসুন টাইম সিরিজ অ্যালগরিদমের কিছু প্রকার অন্বেষণ করি এবং কিছু ডেটা পরিষ্কার ও প্রস্তুত করার জন্য একটি নোটবুক শুরু করি। আপনি যে ডেটা বিশ্লেষণ করবেন তা GEFCom2014 পূর্বাভাস প্রতিযোগিতা থেকে নেওয়া হয়েছে। এটি ২০১২ থেকে ২০১৪ সালের মধ্যে ৩ বছরের ঘণ্টাভিত্তিক বিদ্যুৎ লোড এবং তাপমাত্রার মান নিয়ে গঠিত। বিদ্যুৎ লোড এবং তাপমাত্রার ঐতিহাসিক প্যাটার্নের ভিত্তিতে, আপনি ভবিষ্যতের বিদ্যুৎ লোডের মান পূর্বাভাস দিতে পারেন। -এই উদাহরণে, আপনি শুধুমাত্র ঐতিহাসিক লোড ডেটা ব্যবহার করে এক সময় ধাপ পূর্বাভাস দেওয়া শিখবেন। তবে শুরু করার আগে, পর্দার পিছনে কী ঘটছে তা বোঝা দরকার। +এই উদাহরণে, আপনি শুধুমাত্র ঐতিহাসিক লোড ডেটা ব্যবহার করে এক ধাপ এগিয়ে পূর্বাভাস দেওয়া শিখবেন। তবে শুরু করার আগে, পর্দার আড়ালে কী ঘটছে তা বোঝা দরকার। ## কিছু সংজ্ঞা -'টাইম সিরিজ' শব্দটি যখন শুনবেন, তখন এর বিভিন্ন প্রসঙ্গে ব্যবহারের অর্থ বুঝতে হবে। +'টাইম সিরিজ' শব্দটি যখন আপনি শুনবেন, তখন আপনাকে এটি বিভিন্ন প্রসঙ্গে ব্যবহারের অর্থ বুঝতে হবে। 🎓 **টাইম সিরিজ** -গণিতের ভাষায়, "টাইম সিরিজ হল সময়ক্রমে সূচিবদ্ধ (বা তালিকাভুক্ত বা গ্রাফ করা) ডেটা পয়েন্টের একটি সিরিজ। সাধারণত, টাইম সিরিজ হল সমানভাবে ব্যবধানে সময়ের পয়েন্টে নেওয়া একটি ক্রম।" টাইম সিরিজের একটি উদাহরণ হল [ডাউ জোন্স ইন্ডাস্ট্রিয়াল অ্যাভারেজ](https://wikipedia.org/wiki/Time_series)-এর দৈনিক ক্লোজিং মান। টাইম সিরিজ প্লট এবং পরিসংখ্যানগত মডেলিং সিগন্যাল প্রসেসিং, আবহাওয়া পূর্বাভাস, ভূমিকম্প পূর্বাভাস এবং অন্যান্য ক্ষেত্রে প্রায়ই দেখা যায় যেখানে ঘটনা ঘটে এবং ডেটা পয়েন্ট সময়ের সাথে প্লট করা যায়। +গণিতে, "টাইম সিরিজ হল ডেটা পয়েন্টের একটি সিরিজ যা সময়ের ক্রম অনুসারে সূচিবদ্ধ (বা তালিকাভুক্ত বা গ্রাফিক্যালি উপস্থাপিত)। সাধারণত, একটি টাইম সিরিজ হল সমান ব্যবধানে নেওয়া ধারাবাহিক পয়েন্টের একটি ক্রম।" একটি টাইম সিরিজের উদাহরণ হল [ডাও জোন্স ইন্ডাস্ট্রিয়াল অ্যাভারেজ](https://wikipedia.org/wiki/Time_series)-এর দৈনিক ক্লোজিং মান। টাইম সিরিজ প্লট এবং পরিসংখ্যানগত মডেলিং প্রায়ই সিগন্যাল প্রসেসিং, আবহাওয়া পূর্বাভাস, ভূমিকম্প পূর্বাভাস এবং অন্যান্য ক্ষেত্রে ব্যবহৃত হয় যেখানে ঘটনাগুলি ঘটে এবং ডেটা পয়েন্টগুলি সময়ের সাথে প্লট করা যায়। 🎓 **টাইম সিরিজ বিশ্লেষণ** -টাইম সিরিজ বিশ্লেষণ হল উপরে উল্লেখিত টাইম সিরিজ ডেটার বিশ্লেষণ। টাইম সিরিজ ডেটা বিভিন্ন রূপ নিতে পারে, যার মধ্যে 'ইন্টারাপ্টেড টাইম সিরিজ' অন্তর্ভুক্ত, যা একটি টাইম সিরিজের বিবর্তনে একটি বাধা ঘটনার আগে এবং পরে প্যাটার্ন সনাক্ত করে। টাইম সিরিজের জন্য প্রয়োজনীয় বিশ্লেষণ ডেটার প্রকৃতির উপর নির্ভর করে। টাইম সিরিজ ডেটা নিজেই সংখ্যা বা অক্ষরের সিরিজের রূপ নিতে পারে। +টাইম সিরিজ বিশ্লেষণ হল উপরে উল্লিখিত টাইম সিরিজ ডেটার বিশ্লেষণ। টাইম সিরিজ ডেটা বিভিন্ন রূপ নিতে পারে, যার মধ্যে 'ইন্টারাপ্টেড টাইম সিরিজ' অন্তর্ভুক্ত, যা একটি টাইম সিরিজের বিবর্তনে একটি বাধা ঘটনার আগে এবং পরে প্যাটার্ন সনাক্ত করে। টাইম সিরিজের জন্য প্রয়োজনীয় বিশ্লেষণ ডেটার প্রকৃতির উপর নির্ভর করে। টাইম সিরিজ ডেটা নিজেই সংখ্যার বা অক্ষরের সিরিজের আকারে হতে পারে। -এই বিশ্লেষণ বিভিন্ন পদ্ধতি ব্যবহার করে সম্পন্ন হয়, যার মধ্যে রয়েছে ফ্রিকোয়েন্সি-ডোমেইন এবং টাইম-ডোমেইন, লিনিয়ার এবং নন-লিনিয়ার, এবং আরও অনেক কিছু। [আরও জানুন](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) এই ধরনের ডেটা বিশ্লেষণের বিভিন্ন উপায় সম্পর্কে। +এই বিশ্লেষণটি বিভিন্ন পদ্ধতি ব্যবহার করে সম্পাদিত হয়, যার মধ্যে ফ্রিকোয়েন্সি-ডোমেইন এবং টাইম-ডোমেইন, লিনিয়ার এবং ননলিনিয়ার পদ্ধতি অন্তর্ভুক্ত। [আরও জানুন](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) এই ধরনের ডেটা বিশ্লেষণের বিভিন্ন উপায় সম্পর্কে। 🎓 **টাইম সিরিজ পূর্বাভাস** -টাইম সিরিজ পূর্বাভাস হল একটি মডেল ব্যবহার করে পূর্বে সংগৃহীত ডেটার প্যাটার্নের ভিত্তিতে ভবিষ্যৎ মান পূর্বাভাস দেওয়া। যদিও টাইম সিরিজ ডেটা অন্বেষণ করতে রিগ্রেশন মডেল ব্যবহার করা সম্ভব, টাইম সিরিজ ডেটা বিশেষ ধরনের মডেল ব্যবহার করে বিশ্লেষণ করা সবচেয়ে ভালো। +টাইম সিরিজ পূর্বাভাস হল একটি মডেল ব্যবহার করে অতীতে সংগৃহীত ডেটার প্যাটার্নের উপর ভিত্তি করে ভবিষ্যতের মান পূর্বাভাস দেওয়া। যদিও টাইম সিরিজ ডেটা অন্বেষণ করতে রিগ্রেশন মডেল ব্যবহার করা সম্ভব, যেখানে টাইম ইনডেক্সগুলি একটি প্লটে x ভেরিয়েবল হিসাবে ব্যবহৃত হয়, এই ধরনের ডেটা বিশেষ ধরনের মডেল ব্যবহার করে বিশ্লেষণ করা সবচেয়ে ভালো। -টাইম সিরিজ ডেটা হল একটি ক্রমবদ্ধ পর্যবেক্ষণের তালিকা, যা লিনিয়ার রিগ্রেশন দ্বারা বিশ্লেষণযোগ্য ডেটার মতো নয়। সবচেয়ে সাধারণ মডেল হল ARIMA, যার পূর্ণরূপ "Autoregressive Integrated Moving Average"। +টাইম সিরিজ ডেটা হল একটি ক্রমানুসারে সাজানো পর্যবেক্ষণের তালিকা, যা লিনিয়ার রিগ্রেশন দ্বারা বিশ্লেষণযোগ্য ডেটার মতো নয়। সবচেয়ে সাধারণ মডেল হল ARIMA, যার পূর্ণরূপ "Autoregressive Integrated Moving Average"। -[ARIMA মডেল](https://online.stat.psu.edu/stat510/lesson/1/1.1) "বর্তমান মানকে পূর্বের মান এবং পূর্বাভাসের ত্রুটির সাথে সম্পর্কিত করে।" এটি টাইম-ডোমেইন ডেটা বিশ্লেষণের জন্য সবচেয়ে উপযুক্ত, যেখানে ডেটা সময়ের সাথে ক্রমানুসারে সাজানো থাকে। +[ARIMA মডেল](https://online.stat.psu.edu/stat510/lesson/1/1.1) "বর্তমান মানকে অতীতের মান এবং পূর্বাভাসের ত্রুটির সাথে সম্পর্কিত করে।" এগুলি টাইম-ডোমেইন ডেটা বিশ্লেষণের জন্য সবচেয়ে উপযুক্ত, যেখানে ডেটা সময়ের সাথে সাজানো থাকে। -> ARIMA মডেলের বিভিন্ন ধরন রয়েছে, যা আপনি [এখানে](https://people.duke.edu/~rnau/411arim.htm) শিখতে পারেন এবং যা আপনি পরবর্তী পাঠে স্পর্শ করবেন। +> ARIMA মডেলের বিভিন্ন প্রকার রয়েছে, যা আপনি [এখানে](https://people.duke.edu/~rnau/411arim.htm) শিখতে পারেন এবং যা আপনি পরবর্তী পাঠে স্পর্শ করবেন। -পরবর্তী পাঠে, আপনি [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm) ব্যবহার করে একটি ARIMA মডেল তৈরি করবেন, যা একটি পরিবর্তনশীলকে কেন্দ্র করে যা সময়ের সাথে তার মান পরিবর্তন করে। এই ধরনের ডেটার একটি উদাহরণ হল [এই ডেটাসেট](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), যা Mauna Loa Observatory-তে মাসিক CO2 ঘনত্ব রেকর্ড করে: +পরবর্তী পাঠে, আপনি [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm) ব্যবহার করে একটি ARIMA মডেল তৈরি করবেন, যা একটি ভেরিয়েবলের উপর ফোকাস করে যা সময়ের সাথে তার মান পরিবর্তন করে। এই ধরনের ডেটার একটি উদাহরণ হল [এই ডেটাসেট](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), যা Mauna Loa Observatory-তে মাসিক CO2 ঘনত্ব রেকর্ড করে: | CO2 | YearMonth | Year | Month | | :----: | :-------: | :---: | :---: | @@ -78,51 +78,51 @@ CO_OP_TRANSLATOR_METADATA: | 329.25 | 1975.88 | 1975 | 11 | | 330.97 | 1975.96 | 1975 | 12 | -✅ এই ডেটাসেটে সময়ের সাথে পরিবর্তিত পরিবর্তনশীলটি সনাক্ত করুন। +✅ এই ডেটাসেটে কোন ভেরিয়েবলটি সময়ের সাথে পরিবর্তিত হচ্ছে তা চিহ্নিত করুন। -## টাইম সিরিজ ডেটার বৈশিষ্ট্য বিবেচনা করা +## টাইম সিরিজ ডেটার বৈশিষ্ট্য যা বিবেচনা করা প্রয়োজন -টাইম সিরিজ ডেটা দেখার সময়, আপনি লক্ষ্য করতে পারেন যে এতে [কিছু বৈশিষ্ট্য](https://online.stat.psu.edu/stat510/lesson/1/1.1) রয়েছে যা এর প্যাটার্নগুলি আরও ভালোভাবে বুঝতে এবং বিশ্লেষণ করতে আপনাকে বিবেচনা করতে হবে। যদি আপনি টাইম সিরিজ ডেটাকে একটি 'সিগন্যাল' হিসাবে ভাবেন যা আপনি বিশ্লেষণ করতে চান, তবে এই বৈশিষ্ট্যগুলি 'নয়েজ' হিসাবে বিবেচিত হতে পারে। এই 'নয়েজ' কমানোর জন্য কিছু পরিসংখ্যানগত কৌশল ব্যবহার করতে হতে পারে। +টাইম সিরিজ ডেটা পর্যবেক্ষণ করার সময়, আপনি লক্ষ্য করতে পারেন যে এতে [কিছু বৈশিষ্ট্য](https://online.stat.psu.edu/stat510/lesson/1/1.1) রয়েছে যা আপনাকে এর প্যাটার্নগুলি আরও ভালোভাবে বুঝতে এবং প্রশমিত করতে হবে। আপনি যদি টাইম সিরিজ ডেটাকে একটি 'সিগন্যাল' হিসাবে বিবেচনা করেন যা আপনি বিশ্লেষণ করতে চান, তবে এই বৈশিষ্ট্যগুলি 'নয়েজ' হিসাবে বিবেচিত হতে পারে। এই 'নয়েজ' কমানোর জন্য আপনাকে প্রায়ই কিছু পরিসংখ্যানগত কৌশল ব্যবহার করতে হবে। -টাইম সিরিজ নিয়ে কাজ করার জন্য এখানে কিছু ধারণা রয়েছে যা আপনাকে জানতে হবে: +টাইম সিরিজ নিয়ে কাজ করার জন্য আপনাকে কিছু ধারণা জানতে হবে: 🎓 **ট্রেন্ড** -ট্রেন্ড হল সময়ের সাথে পরিমাপযোগ্য বৃদ্ধি এবং হ্রাস। [আরও পড়ুন](https://machinelearningmastery.com/time-series-trends-in-python)। টাইম সিরিজের প্রসঙ্গে, এটি ট্রেন্ড ব্যবহার এবং প্রয়োজনে টাইম সিরিজ থেকে ট্রেন্ড সরানোর বিষয়ে। +ট্রেন্ড হল সময়ের সাথে পরিমাপযোগ্য বৃদ্ধি এবং হ্রাস। [আরও পড়ুন](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) কীভাবে বিভিন্ন ধরনের প্লট ডেটায় সিজনালিটি প্রদর্শন করে। +সিজনালিটি হল পর্যায়ক্রমিক ওঠানামা, যেমন ছুটির সময় বিক্রয়ে প্রভাব ফেলে এমন প্রবণতা। [দেখুন](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) কীভাবে বিভিন্ন ধরনের প্লট ডেটায় সিজনালিটি প্রদর্শন করে। 🎓 **আউটলায়ার** -আউটলায়ার হল ডেটার সাধারণ বৈচিত্র্যের থেকে অনেক দূরে থাকা মান। +আউটলায়ার হল ডেটার সাধারণ ভ্যারিয়েন্স থেকে অনেক দূরে অবস্থিত মান। 🎓 **দীর্ঘমেয়াদী চক্র** -সিজনালিটির বাইরে, ডেটা দীর্ঘমেয়াদী চক্র প্রদর্শন করতে পারে, যেমন এক বছরের বেশি সময় ধরে চলা অর্থনৈতিক মন্দা। +সিজনালিটির বাইরে, ডেটা একটি দীর্ঘমেয়াদী চক্র প্রদর্শন করতে পারে, যেমন এক বছরের বেশি সময় ধরে চলা অর্থনৈতিক মন্দা। -🎓 **স্থির বৈচিত্র্য** +🎓 **স্থির ভ্যারিয়েন্স** -সময়ের সাথে, কিছু ডেটা স্থির ওঠানামা প্রদর্শন করে, যেমন দিনের এবং রাতের শক্তি ব্যবহারের পরিমাণ। +কিছু ডেটা সময়ের সাথে সাথে ধ্রুবক ওঠানামা প্রদর্শন করে, যেমন দিনে এবং রাতে শক্তি ব্যবহারের পরিমাণ। 🎓 **হঠাৎ পরিবর্তন** -ডেটা হঠাৎ পরিবর্তন প্রদর্শন করতে পারে যা আরও বিশ্লেষণের প্রয়োজন হতে পারে। উদাহরণস্বরূপ, COVID-এর কারণে ব্যবসা বন্ধ হয়ে যাওয়া ডেটায় পরিবর্তন ঘটিয়েছে। +ডেটা হঠাৎ পরিবর্তন প্রদর্শন করতে পারে যা আরও বিশ্লেষণের প্রয়োজন হতে পারে। উদাহরণস্বরূপ, COVID-এর কারণে ব্যবসাগুলি হঠাৎ বন্ধ হয়ে যাওয়া ডেটায় পরিবর্তন ঘটিয়েছে। -✅ এখানে একটি [নমুনা টাইম সিরিজ প্লট](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) রয়েছে যা কয়েক বছরের মধ্যে দৈনিক ইন-গেম কারেন্সি ব্যয়ের প্রদর্শন করে। আপনি কি এই ডেটায় উপরে তালিকাভুক্ত বৈশিষ্ট্যগুলির মধ্যে কোনোটি সনাক্ত করতে পারেন? +✅ এখানে একটি [উদাহরণ টাইম সিরিজ প্লট](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) রয়েছে যা কয়েক বছরের মধ্যে দৈনিক ইন-গেম মুদ্রা ব্যয়ের তথ্য দেখায়। আপনি কি এই ডেটায় উপরের তালিকাভুক্ত বৈশিষ্ট্যগুলির কোনটি সনাক্ত করতে পারেন? -![ইন-গেম কারেন্সি ব্যয়](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.bn.png) +![ইন-গেম মুদ্রা ব্যয়](../../../../7-TimeSeries/1-Introduction/images/currency.png) ## অনুশীলন - বিদ্যুৎ ব্যবহারের ডেটা দিয়ে শুরু করা -চলুন একটি টাইম সিরিজ মডেল তৈরি করা শুরু করি যা পূর্বের ব্যবহারের ভিত্তিতে ভবিষ্যৎ বিদ্যুৎ ব্যবহারের পূর্বাভাস দেয়। +আসুন একটি টাইম সিরিজ মডেল তৈরি করা শুরু করি যা অতীত ব্যবহারের ভিত্তিতে ভবিষ্যতের বিদ্যুৎ ব্যবহারের পূর্বাভাস দেবে। > এই উদাহরণে ব্যবহৃত ডেটা GEFCom2014 পূর্বাভাস প্রতিযোগিতা থেকে নেওয়া হয়েছে। এটি ২০১২ থেকে ২০১৪ সালের মধ্যে ৩ বছরের ঘণ্টাভিত্তিক বিদ্যুৎ লোড এবং তাপমাত্রার মান নিয়ে গঠিত। > > 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, July-September, 2016। -1. এই পাঠের `working` ফোল্ডারে, _notebook.ipynb_ ফাইলটি খুলুন। ডেটা লোড এবং ভিজ্যুয়ালাইজ করতে সাহায্যকারী লাইব্রেরি যোগ করে শুরু করুন: +1. এই পাঠের `working` ফোল্ডারে, _notebook.ipynb_ ফাইলটি খুলুন। ডেটা লোড এবং ভিজুয়ালাইজ করতে সহায়ক লাইব্রেরি যোগ করে শুরু করুন: ```python import os @@ -131,7 +131,7 @@ CO_OP_TRANSLATOR_METADATA: %matplotlib inline ``` - লক্ষ্য করুন, আপনি অন্তর্ভুক্ত `common` ফোল্ডারের ফাইলগুলি ব্যবহার করছেন যা আপনার পরিবেশ সেট আপ করে এবং ডেটা ডাউনলোড পরিচালনা করে। + লক্ষ্য করুন, আপনি অন্তর্ভুক্ত `common` ফোল্ডারের ফাইলগুলি ব্যবহার করছেন যা আপনার পরিবেশ সেটআপ করে এবং ডেটা ডাউনলোড পরিচালনা করে। 2. এরপর, `load_data()` এবং `head()` কল করে ডেটাকে একটি ডেটাফ্রেম হিসেবে পরীক্ষা করুন: @@ -141,7 +141,7 @@ CO_OP_TRANSLATOR_METADATA: energy.head() ``` - আপনি দেখতে পাবেন যে দুটি কলাম রয়েছে যা তারিখ এবং লোড উপস্থাপন করে: + আপনি দেখতে পাবেন যে এখানে দুটি কলাম রয়েছে যা তারিখ এবং লোড উপস্থাপন করে: | | load | | :-----------------: | :----: | @@ -160,9 +160,9 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![এনার্জি প্লট](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.bn.png) + ![এনার্জি প্লট](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) -4. এখন, ২০১৪ সালের জুলাই মাসের প্রথম সপ্তাহের ডেটা `[from date]: [to date]` প্যাটার্নে `energy`-তে ইনপুট দিয়ে প্লট করুন: +4. এবার, ২০১৪ সালের জুলাই মাসের প্রথম সপ্তাহের ডেটা `[from date]: [to date]` প্যাটার্নে ইনপুট হিসেবে দিয়ে প্লট করুন: ```python energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) @@ -171,29 +171,29 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![জুলাই](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.bn.png) + ![জুলাই](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) - একটি সুন্দর প্লট! এই প্লটগুলি দেখুন এবং উপরে তালিকাভুক্ত বৈশিষ্ট্যগুলির মধ্যে কোনোটি নির্ধারণ করতে পারেন কিনা তা দেখুন। ডেটা ভিজ্যুয়ালাইজ করে আমরা কী অনুমান করতে পারি? + একটি সুন্দর প্লট! এই প্লটগুলি দেখুন এবং উপরের তালিকাভুক্ত বৈশিষ্ট্যগুলির কোনটি আপনি সনাক্ত করতে পারেন তা দেখুন। ডেটা ভিজুয়ালাইজ করে আমরা কী অনুমান করতে পারি? -পরবর্তী পাঠে, আপনি একটি ARIMA মডেল তৈরি করবেন যা কিছু পূর্বাভাস তৈরি করবে। +পরবর্তী পাঠে, আপনি একটি ARIMA মডেল তৈরি করে কিছু পূর্বাভাস তৈরি করবেন। --- ## 🚀চ্যালেঞ্জ -আপনার মনে আসা সমস্ত শিল্প এবং গবেষণার ক্ষেত্রের একটি তালিকা তৈরি করুন যা টাইম সিরিজ পূর্বাভাস থেকে উপকৃত হতে পারে। আপনি কি এই কৌশলগুলির কোনো প্রয়োগ শিল্পকলায়, অর্থনীতিতে, পরিবেশবিদ্যায়, খুচরা ব্যবসায়, শিল্পে, আর্থিক ক্ষেত্রে কল্পনা করতে পারেন? আর কোথায়? +আপনার মনে হওয়া সমস্ত শিল্প এবং গবেষণার ক্ষেত্রের একটি তালিকা তৈরি করুন যা টাইম সিরিজ পূর্বাভাস থেকে উপকৃত হতে পারে। আপনি কি এই কৌশলগুলির কোনও প্রয়োগ শিল্পকলায়, অর্থনীতিতে, পরিবেশবিদ্যায়, খুচরা ব্যবসায়, শিল্পে বা আর্থিক ক্ষেত্রে কল্পনা করতে পারেন? আর কোথায়? -## [পাঠ-পরবর্তী কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) +## [পাঠ-পরবর্তী কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## পর্যালোচনা ও স্ব-অধ্যয়ন -যদিও আমরা এখানে আলোচনা করব না, নিউরাল নেটওয়ার্ক কখনও কখনও টাইম সিরিজ পূর্বাভাসের ক্লাসিক পদ্ধতিগুলিকে উন্নত করতে ব্যবহৃত হয়। [এই নিবন্ধে](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) তাদের সম্পর্কে আরও পড়ুন। +যদিও আমরা এখানে সেগুলি কভার করব না, নিউরাল নেটওয়ার্কগুলি কখনও কখনও টাইম সিরিজ পূর্বাভাসের ক্লাসিক পদ্ধতিগুলিকে উন্নত করতে ব্যবহৃত হয়। [এই নিবন্ধে](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) তাদের সম্পর্কে আরও পড়ুন। ## অ্যাসাইনমেন্ট -[আরও টাইম সিরিজ ভিজ্যুয়ালাইজ করুন](assignment.md) +[আরও টাইম সিরিজ ভিজুয়ালাইজ করুন](assignment.md) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়ী থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতা নিশ্চিত করার চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file diff --git a/translations/bn/7-TimeSeries/2-ARIMA/README.md b/translations/bn/7-TimeSeries/2-ARIMA/README.md index 44005b414..952eeb1d9 100644 --- a/translations/bn/7-TimeSeries/2-ARIMA/README.md +++ b/translations/bn/7-TimeSeries/2-ARIMA/README.md @@ -1,8 +1,8 @@ # রিইনফোর্সমেন্ট লার্নিং এবং কিউ-লার্নিং এর পরিচিতি -![মেশিন লার্নিং-এ রিইনফোর্সমেন্টের সারাংশ একটি স্কেচনোটে](../../../../translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.bn.png) +![মেশিন লার্নিং-এ রিইনফোর্সমেন্টের সারাংশ একটি স্কেচনোটে](../../../../sketchnotes/ml-reinforcement.png) > স্কেচনোট: [Tomomi Imura](https://www.twitter.com/girlie_mac) -রিইনফোর্সমেন্ট লার্নিং তিনটি গুরুত্বপূর্ণ ধারণার উপর ভিত্তি করে কাজ করে: এজেন্ট, কিছু স্টেট এবং প্রতিটি স্টেটের জন্য একটি অ্যাকশনের সেট। নির্দিষ্ট স্টেটে একটি অ্যাকশন সম্পাদন করার মাধ্যমে, এজেন্ট একটি রিওয়ার্ড পায়। আবার কল্পনা করুন কম্পিউটার গেম সুপার মারিও। আপনি মারিও, আপনি একটি গেম লেভেলে আছেন, একটি খাদের কিনারায় দাঁড়িয়ে। আপনার উপরে একটি কয়েন। আপনি মারিও হিসেবে, একটি গেম লেভেলে, একটি নির্দিষ্ট অবস্থানে আছেন ... এটিই আপনার স্টেট। ডানদিকে এক ধাপ এগোনো (একটি অ্যাকশন) আপনাকে খাদে ফেলে দেবে, এবং এটি আপনাকে একটি কম সংখ্যাসূচক স্কোর দেবে। তবে, জাম্প বাটন চাপলে আপনি একটি পয়েন্ট পাবেন এবং বেঁচে থাকবেন। এটি একটি ইতিবাচক ফলাফল এবং এটি আপনাকে একটি ইতিবাচক সংখ্যাসূচক স্কোর দেবে। +রিইনফোর্সমেন্ট লার্নিং তিনটি গুরুত্বপূর্ণ ধারণার উপর ভিত্তি করে: এজেন্ট, কিছু স্টেট এবং প্রতিটি স্টেটের জন্য একটি অ্যাকশনের সেট। নির্দিষ্ট স্টেটে একটি অ্যাকশন সম্পাদন করে এজেন্ট একটি পুরস্কার পায়। আবার সুপার মারিও কম্পিউটার গেমটি কল্পনা করুন। আপনি মারিও, আপনি একটি গেম লেভেলে আছেন, একটি ক্লিফের কিনারায় দাঁড়িয়ে। আপনার উপরে একটি কয়েন রয়েছে। আপনি মারিও, একটি গেম লেভেলে, একটি নির্দিষ্ট অবস্থানে ... এটি আপনার স্টেট। ডানদিকে এক ধাপ এগিয়ে যাওয়া (একটি অ্যাকশন) আপনাকে কিনারা থেকে ফেলে দেবে, এবং এটি আপনাকে একটি নিম্ন সংখ্যাসূচক স্কোর দেবে। তবে, জাম্প বাটন চাপলে আপনি একটি পয়েন্ট পাবেন এবং আপনি জীবিত থাকবেন। এটি একটি ইতিবাচক ফলাফল এবং এটি আপনাকে একটি ইতিবাচক সংখ্যাসূচক স্কোর প্রদান করবে। -রিইনফোর্সমেন্ট লার্নিং এবং একটি সিমুলেটর (গেম) ব্যবহার করে, আপনি গেমটি খেলার কৌশল শিখতে পারেন যাতে আপনি বেঁচে থাকতে পারেন এবং যত বেশি সম্ভব পয়েন্ট অর্জন করতে পারেন। +রিইনফোর্সমেন্ট লার্নিং এবং একটি সিমুলেটর (গেম) ব্যবহার করে, আপনি গেমটি খেলার পদ্ধতি শিখতে পারেন যাতে আপনি জীবিত থাকতে পারেন এবং যত বেশি পয়েন্ট সম্ভব অর্জন করতে পারেন। [![রিইনফোর্সমেন্ট লার্নিং এর পরিচিতি](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) -> 🎥 উপরের ছবিতে ক্লিক করে Dmitry এর রিইনফোর্সমেন্ট লার্নিং নিয়ে আলোচনা শুনুন +> 🎥 উপরের ছবিতে ক্লিক করে Dmitry এর রিইনফোর্সমেন্ট লার্নিং আলোচনা শুনুন -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## প্রয়োজনীয়তা এবং সেটআপ -এই পাঠে, আমরা পাইথন কোড নিয়ে কিছু পরীক্ষা করব। আপনাকে এই পাঠের জুপিটার নোটবুক কোড চালাতে সক্ষম হতে হবে, হয় আপনার কম্পিউটারে অথবা ক্লাউডে। +এই পাঠে, আমরা পাইথনে কিছু কোড নিয়ে পরীক্ষা করব। আপনি এই পাঠের জুপিটার নোটবুক কোডটি আপনার কম্পিউটারে বা ক্লাউডে কোথাও চালাতে সক্ষম হওয়া উচিত। -আপনি [পাঠের নোটবুকটি](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) খুলে এই পাঠটি অনুসরণ করতে পারেন। +আপনি [পাঠের নোটবুক](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) খুলতে পারেন এবং এই পাঠটি অনুসরণ করে তৈরি করতে পারেন। -> **নোট:** যদি আপনি ক্লাউড থেকে এই কোডটি খুলে থাকেন, তবে আপনাকে [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) ফাইলটিও আনতে হবে, যা নোটবুক কোডে ব্যবহৃত হয়। এটি নোটবুকের একই ডিরেক্টরিতে যোগ করুন। +> **Note:** যদি আপনি ক্লাউড থেকে এই কোডটি খুলছেন, তবে আপনাকে [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) ফাইলটিও আনতে হবে, যা নোটবুক কোডে ব্যবহৃত হয়। এটি নোটবুকের একই ডিরেক্টরিতে যোগ করুন। ## পরিচিতি -এই পাঠে, আমরা **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** এর জগৎ অন্বেষণ করব, যা রাশিয়ান সুরকার [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) এর একটি সঙ্গীতধর্মী রূপকথা দ্বারা অনুপ্রাণিত। আমরা **রিইনফোর্সমেন্ট লার্নিং** ব্যবহার করব যাতে পিটার তার পরিবেশ অন্বেষণ করতে পারে, সুস্বাদু আপেল সংগ্রহ করতে পারে এবং নেকড়ের সাথে দেখা এড়াতে পারে। +এই পাঠে, আমরা **[Peter and the Wolf](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** এর জগৎ অন্বেষণ করব, যা একজন রাশিয়ান সুরকার [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev) এর একটি সঙ্গীতময় রূপকথার দ্বারা অনুপ্রাণিত। আমরা **রিইনফোর্সমেন্ট লার্নিং** ব্যবহার করব যাতে পিটার তার পরিবেশ অন্বেষণ করতে পারে, সুস্বাদু আপেল সংগ্রহ করতে পারে এবং নেকড়ের সাথে দেখা এড়াতে পারে। -**রিইনফোর্সমেন্ট লার্নিং** (RL) একটি শেখার কৌশল যা আমাদেরকে একটি **এজেন্ট** এর **পরিবেশে** একটি সর্বোত্তম আচরণ শেখার সুযোগ দেয়, অনেক পরীক্ষা চালানোর মাধ্যমে। এই পরিবেশে একটি এজেন্টের একটি **লক্ষ্য** থাকা উচিত, যা একটি **রিওয়ার্ড ফাংশন** দ্বারা সংজ্ঞায়িত। +**রিইনফোর্সমেন্ট লার্নিং** (RL) একটি শেখার কৌশল যা আমাদের **এজেন্ট** এর **পরিবেশ**-এ একটি অপ্টিমাল আচরণ শেখার অনুমতি দেয় অনেক পরীক্ষা চালিয়ে। এই পরিবেশে একটি এজেন্টের কিছু **লক্ষ্য** থাকা উচিত, যা একটি **পুরস্কার ফাংশন** দ্বারা সংজ্ঞায়িত। ## পরিবেশ -সরলতার জন্য, পিটারের জগৎকে একটি `width` x `height` আকারের বর্গাকার বোর্ড হিসেবে বিবেচনা করা যাক, যেমন: +সরলতার জন্য, পিটারের জগৎকে `width` x `height` আকারের একটি বর্গাকার বোর্ড হিসাবে বিবেচনা করা যাক, যেমন: -![পিটারের পরিবেশ](../../../../translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.bn.png) +![পিটারের পরিবেশ](../../../../8-Reinforcement/1-QLearning/images/environment.png) এই বোর্ডের প্রতিটি সেল হতে পারে: * **মাটি**, যেখানে পিটার এবং অন্যান্য প্রাণীরা হাঁটতে পারে। -* **পানি**, যেখানে হাঁটা সম্ভব নয়। -* একটি **গাছ** বা **ঘাস**, যেখানে বিশ্রাম নেওয়া যায়। -* একটি **আপেল**, যা পিটারের জন্য খাওয়ার উপযোগী। -* একটি **নেকড়ে**, যা বিপজ্জনক এবং এড়িয়ে চলা উচিত। +* **পানি**, যেখানে হাঁটা সম্ভব নয়। +* একটি **গাছ** বা **ঘাস**, যেখানে আপনি বিশ্রাম নিতে পারেন। +* একটি **আপেল**, যা পিটার খুঁজে পেতে পছন্দ করবে নিজেকে খাওয়ানোর জন্য। +* একটি **নেকড়ে**, যা বিপজ্জনক এবং এড়ানো উচিত। -একটি পৃথক পাইথন মডিউল, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), এই পরিবেশের সাথে কাজ করার কোড ধারণ করে। যেহেতু এই কোডটি আমাদের ধারণাগুলি বোঝার জন্য গুরুত্বপূর্ণ নয়, আমরা মডিউলটি ইমপোর্ট করব এবং একটি নমুনা বোর্ড তৈরি করতে এটি ব্যবহার করব (কোড ব্লক 1): +একটি পৃথক পাইথন মডিউল, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), এই পরিবেশের সাথে কাজ করার কোড ধারণ করে। যেহেতু এই কোডটি আমাদের ধারণাগুলি বোঝার জন্য গুরুত্বপূর্ণ নয়, আমরা মডিউলটি আমদানি করব এবং নমুনা বোর্ড তৈরি করতে এটি ব্যবহার করব (কোড ব্লক 1): ```python from rlboard import * @@ -61,32 +61,32 @@ m.randomize(seed=13) m.plot() ``` -এই কোডটি পরিবেশের একটি ছবি প্রিন্ট করবে যা উপরের ছবির মতো। +এই কোডটি পরিবেশের একটি ছবি মুদ্রণ করবে যা উপরের ছবির মতো। ## অ্যাকশন এবং পলিসি -আমাদের উদাহরণে, পিটারের লক্ষ্য হবে আপেল খুঁজে পাওয়া, নেকড়ে এবং অন্যান্য বাধা এড়িয়ে। এটি করতে, সে মূলত হাঁটতে পারে যতক্ষণ না সে একটি আপেল খুঁজে পায়। +আমাদের উদাহরণে, পিটারের লক্ষ্য হবে একটি আপেল খুঁজে পাওয়া, নেকড়ে এবং অন্যান্য বাধা এড়ানো। এটি করতে, সে মূলত হাঁটতে পারে যতক্ষণ না সে একটি আপেল খুঁজে পায়। তাই, যেকোনো অবস্থানে, সে নিম্নলিখিত অ্যাকশনগুলির মধ্যে একটি বেছে নিতে পারে: উপরে, নিচে, বামে এবং ডানে। -আমরা এই অ্যাকশনগুলোকে একটি ডিকশনারি হিসেবে সংজ্ঞায়িত করব এবং সংশ্লিষ্ট কোঅর্ডিনেট পরিবর্তনের সাথে ম্যাপ করব। উদাহরণস্বরূপ, ডানে সরানো (`R`) একটি জোড়া `(1,0)` এর সাথে সম্পর্কিত হবে। (কোড ব্লক 2): +আমরা এই অ্যাকশনগুলিকে একটি ডিকশনারি হিসাবে সংজ্ঞায়িত করব এবং সেগুলিকে সংশ্লিষ্ট কোঅর্ডিনেট পরিবর্তনের জোড়ার সাথে ম্যাপ করব। উদাহরণস্বরূপ, ডানে (`R`) যাওয়া একটি জোড়া `(1,0)` এর সাথে সম্পর্কিত হবে। (কোড ব্লক 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()) } ``` -এই পরিস্থিতির কৌশল এবং লক্ষ্য সংক্ষেপে নিম্নরূপ: +এই পরিস্থিতির কৌশল এবং লক্ষ্য সংক্ষেপে: -- **কৌশল**, আমাদের এজেন্টের (পিটার) একটি **পলিসি** দ্বারা সংজ্ঞায়িত। একটি পলিসি হলো একটি ফাংশন যা যেকোনো প্রদত্ত স্টেটে অ্যাকশন প্রদান করে। আমাদের ক্ষেত্রে, সমস্যার স্টেট বোর্ড দ্বারা উপস্থাপিত, যার মধ্যে প্লেয়ারের বর্তমান অবস্থান অন্তর্ভুক্ত। +- **কৌশল**, আমাদের এজেন্ট (পিটার) এর **পলিসি** দ্বারা সংজ্ঞায়িত। একটি পলিসি একটি ফাংশন যা যেকোনো প্রদত্ত স্টেটে অ্যাকশন প্রদান করে। আমাদের ক্ষেত্রে, সমস্যার স্টেট বোর্ড দ্বারা প্রতিনিধিত্ব করা হয়, যার মধ্যে প্লেয়ারের বর্তমান অবস্থান রয়েছে। -- **লক্ষ্য**, রিইনফোর্সমেন্ট লার্নিং এর উদ্দেশ্য হলো একটি ভালো পলিসি শেখা যা আমাদের সমস্যাটি দক্ষতার সাথে সমাধান করতে সাহায্য করবে। তবে, একটি বেসলাইন হিসেবে, আসুন **র‍্যান্ডম ওয়াক** নামে একটি সহজ পলিসি বিবেচনা করি। +- **লক্ষ্য**, রিইনফোর্সমেন্ট লার্নিং এর লক্ষ্য হল শেষ পর্যন্ত একটি ভালো পলিসি শেখা যা আমাদের সমস্যাটি দক্ষতার সাথে সমাধান করতে সাহায্য করবে। তবে, একটি বেসলাইন হিসাবে, আসুন সবচেয়ে সহজ পলিসি বিবেচনা করি, যাকে **র‍্যান্ডম ওয়াক** বলা হয়। -## র‍্যান্ডম ওয়াক +## র‍্যান্ডম ওয়াক -প্রথমে, আসুন র‍্যান্ডম ওয়াক কৌশলটি বাস্তবায়ন করি। র‍্যান্ডম ওয়াকের মাধ্যমে, আমরা অনুমোদিত অ্যাকশনগুলির মধ্যে থেকে এলোমেলোভাবে পরবর্তী অ্যাকশনটি বেছে নেব, যতক্ষণ না আমরা আপেল খুঁজে পাই (কোড ব্লক 3)। +প্রথমে আসুন আমাদের সমস্যাটি র‍্যান্ডম ওয়াক কৌশল বাস্তবায়ন করে সমাধান করি। র‍্যান্ডম ওয়াকের মাধ্যমে, আমরা অনুমোদিত অ্যাকশনগুলির মধ্যে থেকে পরবর্তী অ্যাকশনটি এলোমেলোভাবে বেছে নেব, যতক্ষণ না আমরা আপেলটি খুঁজে পাই (কোড ব্লক 3)। -1. নিচের কোড দিয়ে র‍্যান্ডম ওয়াক বাস্তবায়ন করুন: +1. নিচের কোড দিয়ে র‍্যান্ডম ওয়াক বাস্তবায়ন করুন: ```python def random_policy(m): @@ -115,9 +115,9 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) } walk(m,random_policy) ``` - `walk` ফাংশনের কলটি সংশ্লিষ্ট পথের দৈর্ঘ্য ফেরত দেবে, যা এক রান থেকে অন্য রানে পরিবর্তিত হতে পারে। + `walk` এর কলটি সংশ্লিষ্ট পথের দৈর্ঘ্য ফেরত দেবে, যা এক রান থেকে অন্য রানে পরিবর্তিত হতে পারে। -1. ওয়াক পরীক্ষাটি একাধিকবার (ধরা যাক, 100 বার) চালান এবং ফলাফল পরিসংখ্যান প্রিন্ট করুন (কোড ব্লক 4): +1. একাধিকবার (ধরা যাক, 100 বার) ওয়াক পরীক্ষা চালান এবং ফলাফল পরিসংখ্যান মুদ্রণ করুন (কোড ব্লক 4): ```python def print_statistics(policy): @@ -134,17 +134,17 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) } print_statistics(random_policy) ``` - লক্ষ্য করুন যে একটি পথের গড় দৈর্ঘ্য প্রায় 30-40 ধাপ, যা বেশ দীর্ঘ, কারণ গড় দূরত্ব আপেলের কাছাকাছি প্রায় 5-6 ধাপ। + লক্ষ্য করুন যে পথের গড় দৈর্ঘ্য প্রায় 30-40 ধাপ, যা বেশ দীর্ঘ, কারণ আপেলের নিকটতম দূরত্বের গড় প্রায় 5-6 ধাপ। - আপনি পিটারের র‍্যান্ডম ওয়াক চলাকালীন গতিবিধি দেখতে পারেন: + আপনি পিটারের র‍্যান্ডম ওয়াক চলাকালীন গতিবিধি দেখতে পারেন: - ![পিটারের র‍্যান্ডম ওয়াক](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + ![পিটারের র‍্যান্ডম ওয়াক](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) -## রিওয়ার্ড ফাংশন +## পুরস্কার ফাংশন -আমাদের পলিসিকে আরও বুদ্ধিমান করতে, আমাদের বুঝতে হবে কোন পদক্ষেপগুলো অন্যগুলোর চেয়ে "ভালো"। এটি করতে, আমাদের লক্ষ্য সংজ্ঞায়িত করতে হবে। +আমাদের পলিসিকে আরও বুদ্ধিমান করতে, আমাদের বুঝতে হবে কোন পদক্ষেপগুলি অন্যদের তুলনায় "ভালো"। এটি করতে, আমাদের লক্ষ্য সংজ্ঞায়িত করতে হবে। -লক্ষ্যটি একটি **রিওয়ার্ড ফাংশন** এর মাধ্যমে সংজ্ঞায়িত করা যেতে পারে, যা প্রতিটি স্টেটের জন্য একটি স্কোর মান প্রদান করবে। সংখ্যাটি যত বেশি হবে, রিওয়ার্ড ফাংশন তত ভালো। (কোড ব্লক 5) +লক্ষ্যটি একটি **পুরস্কার ফাংশন** এর মাধ্যমে সংজ্ঞায়িত করা যেতে পারে, যা প্রতিটি স্টেটের জন্য কিছু স্কোর মান ফেরত দেবে। সংখ্যাটি যত বেশি হবে, পুরস্কার ফাংশন তত ভালো। (কোড ব্লক 5) ```python move_reward = -0.1 @@ -163,41 +163,39 @@ def reward(m,pos=None): return move_reward ``` -রিওয়ার্ড ফাংশনগুলোর একটি আকর্ষণীয় দিক হলো বেশিরভাগ ক্ষেত্রে, *আমরা শুধুমাত্র গেমের শেষে একটি উল্লেখযোগ্য রিওয়ার্ড পাই*। এর মানে হলো আমাদের অ্যালগরিদমকে "ভালো" পদক্ষেপগুলো মনে রাখতে হবে যা শেষের দিকে একটি ইতিবাচক রিওয়ার্ডে নিয়ে যায় এবং তাদের গুরুত্ব বাড়াতে হবে। একইভাবে, যেসব পদক্ষেপ খারাপ ফলাফলে নিয়ে যায় সেগুলো নিরুৎসাহিত করতে হবে। +পুরস্কার ফাংশন সম্পর্কে একটি আকর্ষণীয় বিষয় হল যে বেশিরভাগ ক্ষেত্রে, *আমরা শুধুমাত্র গেমের শেষে একটি উল্লেখযোগ্য পুরস্কার পাই*। এর মানে হল যে আমাদের অ্যালগরিদমটি "ভালো" পদক্ষেপগুলি মনে রাখতে হবে যা শেষ পর্যন্ত একটি ইতিবাচক পুরস্কার দেয় এবং তাদের গুরুত্ব বাড়াতে হবে। একইভাবে, সমস্ত পদক্ষেপ যা খারাপ ফলাফলের দিকে নিয়ে যায় তা নিরুৎসাহিত করা উচিত। ## কিউ-লার্নিং -আমরা এখানে যে অ্যালগরিদমটি আলোচনা করব সেটি হলো **কিউ-লার্নিং**। এই অ্যালগরিদমে, পলিসি একটি ফাংশন (বা একটি ডেটা স্ট্রাকচার) দ্বারা সংজ্ঞায়িত, যাকে **কিউ-টেবিল** বলা হয়। এটি একটি প্রদত্ত স্টেটে প্রতিটি অ্যাকশনের "ভালত্ব" রেকর্ড করে। +আমরা এখানে যে অ্যালগরিদমটি আলোচনা করব তাকে **কিউ-লার্নিং** বলা হয়। এই অ্যালগরিদমে, পলিসি একটি ফাংশন (বা একটি ডেটা স্ট্রাকচার) দ্বারা সংজ্ঞায়িত করা হয়, যাকে **কিউ-টেবিল** বলা হয়। এটি একটি প্রদত্ত স্টেটে প্রতিটি অ্যাকশনের "ভালোত্ব" রেকর্ড করে। -এটিকে কিউ-টেবিল বলা হয় কারণ এটি একটি টেবিল বা মাল্টি-ডাইমেনশনাল অ্যারে হিসেবে উপস্থাপন করা সুবিধাজনক। যেহেতু আমাদের বোর্ডের ডাইমেনশন `width` x `height`, আমরা কিউ-টেবিলকে একটি `width` x `height` x `len(actions)` আকৃতির নাম্পাই অ্যারে ব্যবহার করে উপস্থাপন করতে পারি: (কোড ব্লক 6) +এটি একটি কিউ-টেবিল বলা হয় কারণ এটি প্রায়শই একটি টেবিল বা মাল্টি-ডাইমেনশনাল অ্যারে হিসাবে উপস্থাপন করা সুবিধাজনক। যেহেতু আমাদের বোর্ডের মাত্রা `width` x `height`, আমরা কিউ-টেবিলকে একটি numpy অ্যারে ব্যবহার করে উপস্থাপন করতে পারি যার আকার `width` x `height` x `len(actions)`: (কোড ব্লক 6) ```python Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) ``` -লক্ষ্য করুন যে আমরা কিউ-টেবিলের সমস্ত মান সমান মান দিয়ে আরম্ভ করি, আমাদের ক্ষেত্রে - 0.25। এটি "র‍্যান্ডম ওয়াক" পলিসির সাথে সম্পর্কিত, কারণ প্রতিটি স্টেটে সমস্ত পদক্ষেপ সমানভাবে ভালো। আমরা কিউ-টেবিলকে বোর্ডে ভিজ্যুয়ালাইজ করতে `plot` ফাংশনে পাস করতে পারি: `m.plot(Q)`। +লক্ষ্য করুন যে আমরা কিউ-টেবিলের সমস্ত মান সমান মান দিয়ে আরম্ভ করি, আমাদের ক্ষেত্রে - 0.25। এটি "র‍্যান্ডম ওয়াক" পলিসির সাথে সম্পর্কিত, কারণ প্রতিটি স্টেটে সমস্ত পদক্ষেপ সমানভাবে ভালো। আমরা কিউ-টেবিলকে বোর্ডে চিত্রিত করতে `plot` ফাংশনে পাস করতে পারি: `m.plot(Q)`। -![পিটারের পরিবেশ](../../../../translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.bn.png) +![পিটারের পরিবেশ](../../../../8-Reinforcement/1-QLearning/images/env_init.png) -প্রতিটি সেলের কেন্দ্রে একটি "তীর" রয়েছে যা চলাচলের পছন্দসই দিক নির্দেশ করে। যেহেতু সমস্ত দিক সমান, একটি বিন্দু প্রদর্শিত হয়। +প্রতিটি সেলের কেন্দ্রে একটি "তীর" রয়েছে যা গতির পছন্দসই দিক নির্দেশ করে। যেহেতু সমস্ত দিক সমান, একটি বিন্দু প্রদর্শিত হয়। -এখন আমাদের সিমুলেশন চালাতে হবে, আমাদের পরিবেশ অন্বেষণ করতে হবে এবং কিউ-টেবিল মানগুলোর একটি ভালো বন্টন শিখতে হবে, যা আমাদের আপেলের পথটি অনেক দ্রুত খুঁজে পেতে সাহায্য করবে। +এখন আমাদের সিমুলেশন চালাতে হবে, আমাদের পরিবেশ অন্বেষণ করতে হবে এবং কিউ-টেবিল মানগুলির একটি ভালো বন্টন শিখতে হবে, যা আমাদের আপেলটি খুঁজে পেতে অনেক দ্রুত সাহায্য করবে। -## কিউ-লার্নিং এর মূল বিষয়: বেলম্যান সমীকরণ +## কিউ-লার্নিং এর মূল: বেলম্যান সমীকরণ -একবার আমরা চলতে শুরু করলে, প্রতিটি অ্যাকশনের একটি সংশ্লিষ্ট রিওয়ার্ড থাকবে, অর্থাৎ আমরা তাত্ত্বিকভাবে সর্বোচ্চ তাৎক্ষণিক রিওয়ার্ডের উপর ভিত্তি করে পরবর্তী অ্যাকশনটি নির্বাচন করতে পারি। তবে, বেশিরভাগ স্টেটে, পদক্ষেপটি আমাদের আপেল খুঁজে পাওয়ার লক্ষ্য অর্জন করবে না, এবং তাই আমরা তাৎক্ষণিকভাবে সিদ্ধান্ত নিতে পারি না কোন দিকটি ভালো। +একবার আমরা চলতে শুরু করলে, প্রতিটি অ্যাকশনের একটি সংশ্লিষ্ট পুরস্কার থাকবে, অর্থাৎ আমরা তাত্ত্বিকভাবে সর্বোচ্চ তাৎক্ষণিক পুরস্কারের উপর ভিত্তি করে পরবর্তী অ্যাকশনটি নির্বাচন করতে পারি। তবে, বেশিরভাগ স্টেটে, পদক্ষেপটি আমাদের আপেল খুঁজে পাওয়ার লক্ষ্য অর্জন করবে না, এবং তাই আমরা তাৎক্ষণিকভাবে সিদ্ধান্ত নিতে পারি না কোন দিকটি ভালো। -> মনে রাখবেন যে তাৎক্ষণিক ফলাফলটি গুরুত্বপূর্ণ নয়, বরং চূড়ান্ত ফলাফলটি গুরুত্বপূর্ণ, যা আমরা সিমুলেশনের শেষে প্রাপ্ত হব। +> মনে রাখবেন যে তাৎক্ষণিক ফলাফলটি গুরুত্বপূর্ণ নয়, বরং চূড়ান্ত ফলাফলটি গুরুত্বপূর্ণ, যা আমরা সিমুলেশনের শেষে অর্জন করব। -এই বিলম্বিত রিওয়ার্ডটি বিবেচনায় নিতে, আমাদের **[ডাইনামিক প্রোগ্রামিং](https://en.wikipedia.org/wiki/Dynamic_programming)** এর নীতিগুলি ব্যবহার করতে হবে, যা আমাদের সমস্যাটি পুনরাবৃত্তিমূলকভাবে চিন্তা করতে সাহায্য করে। +এই বিলম্বিত পুরস্কারটি বিবেচনা করার জন্য, আমাদের **[ডাইনামিক প্রোগ্রামিং](https://en.wikipedia.org/wiki/Dynamic_programming)** এর নীতিগুলি ব্যবহার করতে হবে, যা আমাদের সমস্যাটি পুনরাবৃত্তিমূলকভাবে চিন্তা করতে দেয়। -ধরা যাক আমরা এখন স্টেট *s* এ আছি, এবং আমরা পরবর্তী স্টেট *s'* এ যেতে চাই। এটি করার মাধ্যমে, আমরা তাৎক্ষণিক রিওয়ার্ড *r(s,a)* পাব, যা রিওয়ার্ড ফাংশন দ্বারা সংজ্ঞায়িত, এবং এর সাথে কিছু ভবিষ্যৎ রিওয়ার্ড। যদি আমরা ধরে নিই যে আমাদের কিউ-টেবিল প্রতিটি অ্যাকশনের "আকর্ষণীয়তা" সঠিকভাবে প্রতিফলিত করে, তবে স্টেট *s'* এ আমরা এমন একটি অ্যাকশন *a'* বেছে নেব যা *Q(s',a')* এর সর্বাধিক মানের সাথে সম্পর্কিত। সুতরাং, স্টেট *s* এ আমরা যে সর্বোত্তম ভবিষ্যৎ রিওয়ার্ড পেতে পারি তা সংজ্ঞায়িত হবে `max` *Q(s',a')* দ্বারা (এখানে সর্বাধিক মানটি স্টেট *s'* এ সমস্ত সম্ভাব্য অ্যাকশন *a'* এর উপর গণনা করা হয়)। - -এটি আমাদের কিউ-টেবিলের মান গণনার জন্য **বেলম্যান ফর্মুলা** প্রদান করে। +ধরা যাক আমরা এখন স্টেট *s* এ আছি, এবং আমরা পরবর্তী স্টেট *s'* এ যেতে চাই। এটি করে, আমরা তাৎক্ষণিক পুরস্কার *r(s,a)* পাব, যা পুরস্কার ফাংশন দ্বারা সংজ্ঞায়িত, এবং কিছু ভবিষ্যৎ পুরস্কার। যদি আমরা ধরে নিই যে আমাদের কিউ-টেবিল প্রতিটি অ্যাকশনের "আকর্ষণীয়তা" সঠিকভাবে প্রতিফলিত করে, তাহলে স্টেট *s'* এ আমরা একটি অ্যাকশন *a'* বেছে নেব যা *Q(s',a')* এর সর্বাধিক মানের সাথে সম্পর্কিত। তাই, স্টেট *s* এ আমরা যে সর্বোত্তম সম্ভাব্য ভবিষ্যৎ পুরস্কার পেতে পারি তা হবে `max` ## নীতিমালা পরীক্ষা করা -Q-Table-এ প্রতিটি অবস্থায় প্রতিটি কাজের "আকর্ষণীয়তা" তালিকাভুক্ত করা হয়েছে, তাই আমাদের জগতে কার্যকর নেভিগেশনের জন্য এটি ব্যবহার করা বেশ সহজ। সবচেয়ে সহজ ক্ষেত্রে, আমরা সেই কাজটি নির্বাচন করতে পারি যা Q-Table-এ সর্বোচ্চ মানের সাথে মিলে যায়: (কোড ব্লক ৯) +Q-Table-এ প্রতিটি অবস্থায় প্রতিটি ক্রিয়ার "আকর্ষণীয়তা" তালিকাভুক্ত করা থাকে, তাই আমাদের জগতে দক্ষ নেভিগেশনের জন্য এটি ব্যবহার করা বেশ সহজ। সহজতম ক্ষেত্রে, আমরা Q-Table-এর সর্বোচ্চ মানের সাথে সম্পর্কিত ক্রিয়াটি নির্বাচন করতে পারি: (কোড ব্লক 9) ```python def qpolicy_strict(m): @@ -209,17 +207,17 @@ def qpolicy_strict(m): walk(m,qpolicy_strict) ``` -> উপরের কোডটি কয়েকবার চালানোর চেষ্টা করলে, আপনি লক্ষ্য করতে পারেন যে এটি কখনও কখনও "আটকে যায়", এবং আপনাকে নোটবুকে STOP বোতাম টিপে এটি বন্ধ করতে হয়। এটি ঘটে কারণ এমন পরিস্থিতি হতে পারে যেখানে দুটি অবস্থা একে অপরের দিকে "ইঙ্গিত" করে তাদের সর্বোত্তম Q-Value অনুযায়ী, যার ফলে এজেন্টটি অনির্দিষ্টভাবে ঐ অবস্থাগুলোর মধ্যে ঘুরতে থাকে। +> উপরের কোডটি কয়েকবার চেষ্টা করলে, আপনি লক্ষ্য করতে পারেন যে এটি কখনও কখনও "হ্যাং" করে, এবং আপনাকে নোটবুকে STOP বোতাম চাপ দিয়ে এটি বন্ধ করতে হয়। এটি ঘটে কারণ এমন পরিস্থিতি হতে পারে যেখানে দুটি অবস্থান একে অপরকে সর্বোত্তম Q-Value-এর দিক থেকে নির্দেশ করে, যার ফলে এজেন্টটি সেই অবস্থানগুলির মধ্যে অনির্দিষ্টভাবে চলতে থাকে। ## 🚀চ্যালেঞ্জ -> **কাজ ১:** `walk` ফাংশনটি পরিবর্তন করুন যাতে পথের সর্বোচ্চ দৈর্ঘ্য একটি নির্দিষ্ট ধাপের সংখ্যা (ধরা যাক, ১০০) দ্বারা সীমাবদ্ধ করা যায়, এবং উপরের কোডটি মাঝে মাঝে এই মানটি ফেরত দেয় কিনা তা দেখুন। +> **কাজ ১:** `walk` ফাংশনটি সংশোধন করুন যাতে পথের সর্বাধিক দৈর্ঘ্য একটি নির্দিষ্ট সংখ্যক ধাপে (যেমন, ১০০) সীমাবদ্ধ থাকে এবং উপরের কোডটি মাঝে মাঝে এই মানটি ফেরত দেয়। -> **কাজ ২:** `walk` ফাংশনটি এমনভাবে পরিবর্তন করুন যাতে এটি পূর্বে যেখানে গিয়েছিল সেখানে আর না যায়। এটি `walk`-কে লুপিং থেকে রোধ করবে, তবে এজেন্টটি এমন একটি স্থানে "ফাঁদে পড়তে" পারে যেখান থেকে এটি বের হতে অক্ষম। +> **কাজ ২:** `walk` ফাংশনটি সংশোধন করুন যাতে এটি পূর্বে যেখানে ছিল সেই জায়গাগুলিতে ফিরে না যায়। এটি `walk`-কে লুপিং থেকে রোধ করবে, তবে এজেন্টটি এখনও এমন একটি স্থানে "ফাঁদে" পড়তে পারে যেখান থেকে এটি পালাতে অক্ষম। ## নেভিগেশন -একটি আরও ভালো নেভিগেশন নীতিমালা হবে সেই নীতিমালা যা আমরা প্রশিক্ষণের সময় ব্যবহার করেছি, যা শোষণ এবং অনুসন্ধানের সংমিশ্রণ। এই নীতিমালায়, আমরা Q-Table-এ মানগুলোর আনুপাতিকতার ভিত্তিতে প্রতিটি কাজ একটি নির্দিষ্ট সম্ভাবনায় নির্বাচন করব। এই কৌশলটি এখনও এজেন্টকে পূর্বে অন্বেষণ করা অবস্থানে ফিরে যেতে পারে, তবে, নিচের কোড থেকে আপনি দেখতে পাবেন, এটি কাঙ্ক্ষিত স্থানে পৌঁছানোর জন্য গড়পথকে খুবই সংক্ষিপ্ত করে (মনে রাখুন `print_statistics` সিমুলেশনটি ১০০ বার চালায়): (কোড ব্লক ১০) +একটি ভালো নেভিগেশন নীতিমালা হবে সেই নীতিমালা যা আমরা প্রশিক্ষণের সময় ব্যবহার করেছি, যা শোষণ এবং অনুসন্ধানের সংমিশ্রণ। এই নীতিমালায়, আমরা Q-Table-এ মানগুলির আনুপাতিক সম্ভাবনার ভিত্তিতে প্রতিটি ক্রিয়া নির্বাচন করব। এই কৌশলটি এখনও এজেন্টকে পূর্বে অন্বেষণ করা অবস্থানে ফিরে যেতে পারে, তবে, নিচের কোড থেকে আপনি দেখতে পারেন, এটি কাঙ্ক্ষিত অবস্থানে খুব ছোট গড় পথের দৈর্ঘ্য প্রদান করে (মনে রাখুন `print_statistics` ১০০ বার সিমুলেশন চালায়): (কোড ব্লক 10) ```python def qpolicy(m): @@ -231,23 +229,23 @@ def qpolicy(m): print_statistics(qpolicy) ``` -এই কোডটি চালানোর পরে, আপনি আগের তুলনায় অনেক ছোট গড় পথ দৈর্ঘ্য পাবেন, যা ৩-৬ এর মধ্যে থাকবে। +এই কোডটি চালানোর পরে, আপনি আগের তুলনায় অনেক ছোট গড় পথের দৈর্ঘ্য পাবেন, যা ৩-৬ এর মধ্যে থাকবে। -## শেখার প্রক্রিয়া পর্যবেক্ষণ +## শেখার প্রক্রিয়া তদন্ত করা -আমরা আগেই উল্লেখ করেছি, শেখার প্রক্রিয়া হলো অনুসন্ধান এবং সমস্যার স্থান সম্পর্কে অর্জিত জ্ঞানের শোষণের মধ্যে একটি ভারসাম্য। আমরা দেখেছি যে শেখার ফলাফল (এজেন্টকে লক্ষ্যবস্তুতে পৌঁছানোর জন্য একটি সংক্ষিপ্ত পথ খুঁজে পেতে সাহায্য করার ক্ষমতা) উন্নত হয়েছে, তবে শেখার প্রক্রিয়ার সময় গড় পথ দৈর্ঘ্য কীভাবে আচরণ করে তা পর্যবেক্ষণ করাও আকর্ষণীয়: +যেমন আমরা উল্লেখ করেছি, শেখার প্রক্রিয়া হলো অনুসন্ধান এবং সমস্যার স্থান সম্পর্কে অর্জিত জ্ঞান অন্বেষণের মধ্যে একটি ভারসাম্য। আমরা দেখেছি যে শেখার ফলাফল (এজেন্টকে লক্ষ্য অর্জনের জন্য একটি ছোট পথ খুঁজে পেতে সাহায্য করার ক্ষমতা) উন্নত হয়েছে, তবে শেখার প্রক্রিয়ার সময় গড় পথের দৈর্ঘ্য কীভাবে আচরণ করে তা পর্যবেক্ষণ করাও আকর্ষণীয়: -### শেখার সারাংশ: +## শেখার সারসংক্ষেপ: -- **গড় পথ দৈর্ঘ্য বৃদ্ধি পায়**। প্রথমে, গড় পথ দৈর্ঘ্য বৃদ্ধি পায়। এর কারণ হতে পারে যে পরিবেশ সম্পর্কে কিছু না জানার কারণে আমরা খারাপ অবস্থায়, যেমন জল বা নেকড়ের ফাঁদে পড়ে যাই। আমরা যত বেশি শিখি এবং এই জ্ঞান ব্যবহার করতে শুরু করি, তত বেশি সময় ধরে পরিবেশ অন্বেষণ করতে পারি, তবে এখনও আপেল কোথায় আছে তা খুব ভালোভাবে জানি না। +- **গড় পথের দৈর্ঘ্য বৃদ্ধি পায়**। প্রথমে, গড় পথের দৈর্ঘ্য বৃদ্ধি পায়। এর কারণ হতে পারে যে পরিবেশ সম্পর্কে কিছুই না জানার কারণে আমরা খারাপ অবস্থায়, যেমন জল বা নেকড়ের ফাঁদে পড়ে যাই। যখন আমরা আরও শিখি এবং এই জ্ঞান ব্যবহার করতে শুরু করি, তখন আমরা পরিবেশটি দীর্ঘ সময় ধরে অন্বেষণ করতে পারি, তবে এখনও আপেলগুলির অবস্থান সম্পর্কে খুব ভালোভাবে জানি না। -- **পথের দৈর্ঘ্য কমে, যত বেশি শিখি**। একবার আমরা যথেষ্ট শিখে গেলে, এজেন্টের জন্য লক্ষ্য অর্জন করা সহজ হয়ে যায়, এবং পথের দৈর্ঘ্য কমতে শুরু করে। তবে, আমরা এখনও অনুসন্ধানের জন্য উন্মুক্ত থাকি, তাই আমরা প্রায়ই সেরা পথ থেকে সরে যাই এবং নতুন বিকল্প অন্বেষণ করি, যা পথকে আদর্শের চেয়ে দীর্ঘ করে তোলে। +- **পথের দৈর্ঘ্য কমে যায়, যত বেশি শিখি**। একবার আমরা যথেষ্ট শিখে গেলে, এজেন্টের জন্য লক্ষ্য অর্জন করা সহজ হয়ে যায়, এবং পথের দৈর্ঘ্য কমতে শুরু করে। তবে, আমরা এখনও অনুসন্ধানের জন্য উন্মুক্ত থাকি, তাই আমরা প্রায়ই সেরা পথ থেকে সরে যাই এবং নতুন বিকল্পগুলি অন্বেষণ করি, যা পথকে আদর্শের চেয়ে দীর্ঘ করে তোলে। -- **দৈর্ঘ্য হঠাৎ বৃদ্ধি পায়**। আমরা এই গ্রাফে যা লক্ষ্য করি তা হলো, কোনো এক সময়ে দৈর্ঘ্য হঠাৎ বৃদ্ধি পায়। এটি প্রক্রিয়ার স্টোকাস্টিক প্রকৃতিকে নির্দেশ করে, এবং যে কোনো সময় আমরা Q-Table এর গুণফলগুলো নতুন মান দিয়ে ওভাররাইট করতে পারি। এটি আদর্শভাবে শেখার হার কমিয়ে (যেমন, প্রশিক্ষণের শেষের দিকে, আমরা Q-Table এর মানগুলো খুব ছোট মান দিয়ে সামঞ্জস্য করি) কমিয়ে আনা উচিত। +- **দৈর্ঘ্য হঠাৎ বৃদ্ধি পায়**। আমরা এই গ্রাফে যা লক্ষ্য করি তা হলো যে কোনো এক সময়ে দৈর্ঘ্য হঠাৎ বৃদ্ধি পায়। এটি প্রক্রিয়ার স্টোকাস্টিক প্রকৃতি নির্দেশ করে, এবং যে কোনো সময় আমরা Q-Table-এর গুণফলগুলি নতুন মান দিয়ে ওভাররাইট করে "বিগড়ে" দিতে পারি। এটি আদর্শভাবে শেখার হার কমিয়ে (যেমন, প্রশিক্ষণের শেষের দিকে, আমরা শুধুমাত্র Q-Table মানগুলি একটি ছোট মান দ্বারা সামঞ্জস্য করি) কমানো উচিত। -সামগ্রিকভাবে, মনে রাখা গুরুত্বপূর্ণ যে শেখার প্রক্রিয়ার সাফল্য এবং গুণমান উল্লেখযোগ্যভাবে নির্ভর করে বিভিন্ন প্যারামিটারের উপর, যেমন শেখার হার, শেখার হারের ক্ষয়, এবং ডিসকাউন্ট ফ্যাক্টর। এগুলোকে প্রায়ই **হাইপারপ্যারামিটার** বলা হয়, যাতে **প্যারামিটার** থেকে আলাদা করা যায়, যা আমরা প্রশিক্ষণের সময় অপ্টিমাইজ করি (যেমন, Q-Table এর গুণফল)। সেরা হাইপারপ্যারামিটার মান খুঁজে বের করার প্রক্রিয়াকে **হাইপারপ্যারামিটার অপ্টিমাইজেশন** বলা হয়, এবং এটি একটি আলাদা আলোচনার বিষয়। +সামগ্রিকভাবে, এটি মনে রাখা গুরুত্বপূর্ণ যে শেখার প্রক্রিয়ার সাফল্য এবং গুণমান উল্লেখযোগ্যভাবে প্যারামিটারগুলির উপর নির্ভর করে, যেমন শেখার হার, শেখার হার হ্রাস, এবং ডিসকাউন্ট ফ্যাক্টর। এগুলিকে প্রায়ই **হাইপারপ্যারামিটার** বলা হয়, যাতে **প্যারামিটার** থেকে আলাদা করা যায়, যা আমরা প্রশিক্ষণের সময় অপ্টিমাইজ করি (যেমন, Q-Table গুণফল)। সেরা হাইপারপ্যারামিটার মানগুলি খুঁজে বের করার প্রক্রিয়াকে **হাইপারপ্যারামিটার অপ্টিমাইজেশন** বলা হয়, এবং এটি একটি আলাদা বিষয়ের যোগ্য। -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## অ্যাসাইনমেন্ট [একটি আরও বাস্তবসম্মত জগৎ](assignment.md) @@ -255,4 +253,4 @@ print_statistics(qpolicy) --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। নথিটির মূল ভাষায় লেখা সংস্করণটিকেই প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ ব্যবহার করার পরামর্শ দেওয়া হচ্ছে। এই অনুবাদ ব্যবহারের ফলে সৃষ্ট কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যার জন্য আমরা দায়ী নই। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসাধ্য সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file diff --git a/translations/bn/8-Reinforcement/2-Gym/README.md b/translations/bn/8-Reinforcement/2-Gym/README.md index 9cff79cbd..3887ad16a 100644 --- a/translations/bn/8-Reinforcement/2-Gym/README.md +++ b/translations/bn/8-Reinforcement/2-Gym/README.md @@ -1,23 +1,23 @@ ## প্রয়োজনীয়তা -এই পাঠে আমরা **OpenAI Gym** নামক একটি লাইব্রেরি ব্যবহার করব বিভিন্ন **পরিবেশ** সিমুলেট করার জন্য। আপনি এই পাঠের কোড লোকাল মেশিনে (যেমন Visual Studio Code) চালাতে পারেন, যেখানে সিমুলেশন একটি নতুন উইন্ডোতে খুলবে। অনলাইনে কোড চালানোর সময়, আপনাকে কিছু কোড পরিবর্তন করতে হতে পারে, যেমনটি [এখানে](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7) বর্ণনা করা হয়েছে। +এই পাঠে আমরা **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/) দ্বারা রক্ষণাবেক্ষণ করা হয়। এই জিম ব্যবহার করে আমরা কার্টপোল সিমুলেশন থেকে শুরু করে অ্যাটারি গেম পর্যন্ত বিভিন্ন **পরিবেশ** তৈরি করতে পারি। +পূর্ববর্তী পাঠে, খেলার নিয়ম এবং অবস্থান আমরা নিজেরাই সংজ্ঞায়িত `Board` ক্লাসের মাধ্যমে দিয়েছিলাম। এখানে আমরা একটি বিশেষ **সিমুলেশন পরিবেশ** ব্যবহার করব, যা ভারসাম্য রক্ষার জন্য পোলের পিছনের পদার্থবিদ্যা সিমুলেট করবে। রিইনফোর্সমেন্ট লার্নিং অ্যালগরিদম প্রশিক্ষণের জন্য সবচেয়ে জনপ্রিয় সিমুলেশন পরিবেশগুলির মধ্যে একটি হল [Gym](https://gym.openai.com/), যা [OpenAI](https://openai.com/) দ্বারা রক্ষণাবেক্ষণ করা হয়। এই Gym ব্যবহার করে আমরা বিভিন্ন **পরিবেশ** তৈরি করতে পারি, যেমন CartPole সিমুলেশন থেকে Atari গেমস। -> **Note**: OpenAI Gym-এ উপলব্ধ অন্যান্য পরিবেশ দেখতে পারেন [এখানে](https://gym.openai.com/envs/#classic_control)। +> **Note**: OpenAI Gym থেকে অন্যান্য উপলব্ধ পরিবেশগুলি আপনি [এখানে](https://gym.openai.com/envs/#classic_control) দেখতে পারেন। -প্রথমে, জিম ইনস্টল করি এবং প্রয়োজনীয় লাইব্রেরি ইমপোর্ট করি (কোড ব্লক 1): +প্রথমে Gym ইনস্টল করুন এবং প্রয়োজনীয় লাইব্রেরিগুলি ইমপোর্ট করুন (কোড ব্লক 1): ```python import sys @@ -29,15 +29,15 @@ import numpy as np import random ``` -## অনুশীলন - একটি কার্টপোল পরিবেশ ইনিশিয়ালাইজ করা +## অনুশীলন - একটি CartPole পরিবেশ ইনিশিয়ালাইজ করুন -কার্টপোল ভারসাম্য সমস্যার সাথে কাজ করতে, আমাদের সংশ্লিষ্ট পরিবেশ ইনিশিয়ালাইজ করতে হবে। প্রতিটি পরিবেশের সাথে যুক্ত থাকে: +CartPole ভারসাম্য সমস্যার সাথে কাজ করতে, আমাদের সংশ্লিষ্ট পরিবেশ ইনিশিয়ালাইজ করতে হবে। প্রতিটি পরিবেশের সাথে যুক্ত থাকে: -- **Observation space**, যা পরিবেশ থেকে প্রাপ্ত তথ্যের কাঠামো নির্ধারণ করে। কার্টপোল সমস্যার জন্য, আমরা পোলের অবস্থান, বেগ এবং অন্যান্য কিছু মান পাই। +- **Observation space**, যা পরিবেশ থেকে প্রাপ্ত তথ্যের গঠন সংজ্ঞায়িত করে। CartPole সমস্যার ক্ষেত্রে, আমরা পোলের অবস্থান, গতি এবং অন্যান্য কিছু মান পাই। -- **Action space**, যা সম্ভাব্য ক্রিয়াগুলি নির্ধারণ করে। আমাদের ক্ষেত্রে, অ্যাকশন স্পেস ডিসক্রিট এবং দুটি ক্রিয়া নিয়ে গঠিত - **বাম** এবং **ডান**। (কোড ব্লক 2) +- **Action space**, যা সম্ভাব্য ক্রিয়াগুলি সংজ্ঞায়িত করে। আমাদের ক্ষেত্রে Action space ডিসক্রিট, এবং দুটি ক্রিয়া নিয়ে গঠিত - **বাম** এবং **ডান**। (কোড ব্লক 2) -1. ইনিশিয়ালাইজ করতে, নিচের কোডটি টাইপ করুন: +1. ইনিশিয়ালাইজ করতে, নিম্নলিখিত কোড টাইপ করুন: ```python env = gym.make("CartPole-v1") @@ -46,11 +46,11 @@ import random print(env.action_space.sample()) ``` -পরিবেশটি কীভাবে কাজ করে তা দেখতে, 100 ধাপের জন্য একটি ছোট সিমুলেশন চালাই। প্রতিটি ধাপে, আমরা একটি ক্রিয়া প্রদান করি - এই সিমুলেশনে আমরা `action_space` থেকে এলোমেলোভাবে একটি ক্রিয়া নির্বাচন করি। +পরিবেশটি কীভাবে কাজ করে তা দেখতে, 100 ধাপের জন্য একটি ছোট সিমুলেশন চালান। প্রতিটি ধাপে, আমরা একটি ক্রিয়া প্রদান করি যা নেওয়া হবে - এই সিমুলেশনে আমরা `action_space` থেকে এলোমেলোভাবে একটি ক্রিয়া নির্বাচন করি। 1. নিচের কোডটি চালান এবং এটি কী ফলাফল দেয় তা দেখুন। - ✅ মনে রাখবেন, এই কোডটি লোকাল পাইথন ইনস্টলেশনে চালানোই উত্তম! (কোড ব্লক 3) + ✅ মনে রাখবেন যে এই কোডটি স্থানীয় Python ইনস্টলেশনে চালানো পছন্দনীয়! (কোড ব্লক 3) ```python env.reset() @@ -61,11 +61,11 @@ import random env.close() ``` - আপনি এরকম কিছু দেখতে পাবেন: + আপনি এরকম একটি চিত্র দেখতে পাবেন: ![non-balancing cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) -1. সিমুলেশনের সময়, আমাদের সিদ্ধান্ত নেওয়ার জন্য পর্যবেক্ষণগুলি পেতে হবে। প্রকৃতপক্ষে, `step` ফাংশন বর্তমান পর্যবেক্ষণ, একটি রিওয়ার্ড ফাংশন এবং `done` ফ্ল্যাগ প্রদান করে যা নির্দেশ করে সিমুলেশন চালিয়ে যাওয়া উচিত কিনা: (কোড ব্লক 4) +1. সিমুলেশনের সময়, আমাদের সিদ্ধান্ত নিতে পর্যবেক্ষণগুলি পেতে হবে। প্রকৃতপক্ষে, `step` ফাংশন বর্তমান পর্যবেক্ষণ, একটি রিওয়ার্ড ফাংশন এবং `done` ফ্ল্যাগ প্রদান করে যা নির্দেশ করে যে সিমুলেশন চালিয়ে যাওয়া যুক্তিযুক্ত কিনা: (কোড ব্লক 4) ```python env.reset() @@ -91,9 +91,9 @@ import random [ 0.17617249 0.35602306 -0.21873684 -0.90998894] -> 1.0 ``` - সিমুলেশনের প্রতিটি ধাপে ফেরত দেওয়া পর্যবেক্ষণ ভেক্টরে নিম্নলিখিত মানগুলি থাকে: + সিমুলেশনের প্রতিটি ধাপে ফেরত দেওয়া পর্যবেক্ষণ ভেক্টরটি নিম্নলিখিত মানগুলি ধারণ করে: - কার্টের অবস্থান - - কার্টের বেগ + - কার্টের গতি - পোলের কোণ - পোলের ঘূর্ণন হার @@ -104,30 +104,30 @@ import random print(env.observation_space.high) ``` - আপনি লক্ষ্য করতে পারেন যে প্রতিটি সিমুলেশন ধাপে রিওয়ার্ড মান সর্বদা 1। এর কারণ আমাদের লক্ষ্য যতটা সম্ভব দীর্ঘ সময় ধরে টিকে থাকা, অর্থাৎ পোলটিকে একটি যুক্তিসঙ্গত উল্লম্ব অবস্থানে যতটা সম্ভব দীর্ঘ সময় ধরে রাখা। + আপনি লক্ষ্য করতে পারেন যে প্রতিটি সিমুলেশন ধাপে রিওয়ার্ড মান সর্বদা 1। এর কারণ আমাদের লক্ষ্য যতটা সম্ভব দীর্ঘ সময় ধরে টিকে থাকা, অর্থাৎ পোলটিকে একটি যুক্তিসঙ্গতভাবে উল্লম্ব অবস্থানে দীর্ঘ সময় ধরে রাখা। - ✅ প্রকৃতপক্ষে, কার্টপোল সিমুলেশন সমাধান করা হয়েছে বলে বিবেচিত হয় যদি আমরা 100 ধারাবাহিক ট্রায়ালে গড়ে 195 রিওয়ার্ড অর্জন করতে পারি। + ✅ প্রকৃতপক্ষে, CartPole সিমুলেশন সমাধান করা হয়েছে বলে বিবেচিত হয় যদি আমরা 100 ধারাবাহিক ট্রায়ালের উপর গড় রিওয়ার্ড 195 অর্জন করতে পারি। -## স্টেট ডিসক্রিটাইজেশন +## অবস্থার ডিসক্রিটাইজেশন -Q-Learning-এ, আমাদের একটি Q-টেবিল তৈরি করতে হবে যা প্রতিটি স্টেটে কী করতে হবে তা সংজ্ঞায়িত করে। এটি করতে, আমাদের স্টেট **ডিসক্রিট** হতে হবে, আরও নির্দিষ্টভাবে, এতে সীমিত সংখ্যক ডিসক্রিট মান থাকতে হবে। সুতরাং, আমাদের পর্যবেক্ষণগুলিকে **ডিসক্রিটাইজ** করতে হবে, অর্থাৎ তাদের একটি সীমিত সেটে ম্যাপ করতে হবে। +Q-Learning-এ, আমাদের একটি Q-Table তৈরি করতে হবে যা প্রতিটি অবস্থায় কী করতে হবে তা সংজ্ঞায়িত করে। এটি করতে, আমাদের অবস্থান **ডিসক্রিট** হতে হবে, আরও স্পষ্টভাবে, এটি একটি সীমিত সংখ্যক ডিসক্রিট মান ধারণ করতে হবে। তাই, আমাদের পর্যবেক্ষণগুলিকে **ডিসক্রিটাইজ** করতে হবে, তাদের একটি সীমিত সেটের সাথে মানচিত্র করতে হবে। এটি করার কয়েকটি উপায় রয়েছে: -- **বিনে ভাগ করা**। যদি আমরা একটি নির্দিষ্ট মানের পরিসর জানি, আমরা এই পরিসরটিকে কয়েকটি **বিনে** ভাগ করতে পারি এবং তারপর মানটিকে সেই বিন নম্বর দ্বারা প্রতিস্থাপন করতে পারি যেখানে এটি অন্তর্ভুক্ত। এটি numpy-এর [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) পদ্ধতি ব্যবহার করে করা যেতে পারে। এই ক্ষেত্রে, আমরা স্টেটের আকার সঠিকভাবে জানব, কারণ এটি ডিজিটালাইজেশনের জন্য নির্বাচিত বিনের সংখ্যার উপর নির্ভর করবে। +- **বিনে ভাগ করুন**। যদি আমরা একটি নির্দিষ্ট মানের পরিসর জানি, আমরা এই পরিসরটিকে একটি নির্দিষ্ট সংখ্যক **বিনে** ভাগ করতে পারি এবং তারপর মানটিকে সেই বিন নম্বর দ্বারা প্রতিস্থাপন করতে পারি যেখানে এটি অন্তর্ভুক্ত। এটি numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) পদ্ধতি ব্যবহার করে করা যেতে পারে। এই ক্ষেত্রে, আমরা সঠিকভাবে অবস্থার আকার জানব, কারণ এটি ডিজিটালাইজেশনের জন্য নির্বাচিত বিনের সংখ্যার উপর নির্ভর করবে। -✅ আমরা লিনিয়ার ইন্টারপোলেশন ব্যবহার করে মানগুলিকে একটি সীমিত পরিসরে (যেমন, -20 থেকে 20) আনতে পারি এবং তারপর রাউন্ডিং করে সংখ্যাগুলিকে পূর্ণসংখ্যায় রূপান্তর করতে পারি। এটি আমাদের স্টেটের আকারের উপর কিছুটা কম নিয়ন্ত্রণ দেয়, বিশেষ করে যদি আমরা ইনপুট মানগুলির সঠিক পরিসর না জানি। উদাহরণস্বরূপ, আমাদের ক্ষেত্রে 4টির মধ্যে 2টি মানের উপরের/নিচের সীমা নেই, যা অসীম সংখ্যক স্টেটের ফলাফল হতে পারে। +✅ আমরা লিনিয়ার ইন্টারপোলেশন ব্যবহার করে মানগুলিকে একটি সীমিত পরিসরে (যেমন, -20 থেকে 20) আনতে পারি এবং তারপর সংখ্যাগুলিকে রাউন্ডিং করে পূর্ণসংখ্যায় রূপান্তর করতে পারি। এটি আমাদের অবস্থার আকারের উপর কিছুটা কম নিয়ন্ত্রণ দেয়, বিশেষত যদি আমরা ইনপুট মানগুলির সঠিক পরিসর না জানি। উদাহরণস্বরূপ, আমাদের ক্ষেত্রে 4টির মধ্যে 2টি মানের উপরের/নিচের সীমা নেই, যা সীমাহীন সংখ্যক অবস্থার ফলস্বরূপ হতে পারে। -আমাদের উদাহরণে, আমরা দ্বিতীয় পদ্ধতিটি ব্যবহার করব। আপনি পরে লক্ষ্য করবেন যে, উপরের/নিচের সীমা সংজ্ঞায়িত না থাকা সত্ত্বেও, এই মানগুলি খুব কমই নির্দিষ্ট সীমিত পরিসরের বাইরে মান নেয়, তাই চরম মান সহ স্টেটগুলি খুব বিরল হবে। +আমাদের উদাহরণে, আমরা দ্বিতীয় পদ্ধতির সাথে যাব। আপনি পরে লক্ষ্য করতে পারেন, অজানা উপরের/নিচের সীমা থাকা সত্ত্বেও, এই মানগুলি খুব কমই নির্দিষ্ট সীমিত পরিসরের বাইরে মান নেয়, তাই চরম মান সহ অবস্থাগুলি খুব বিরল হবে। -1. এখানে একটি ফাংশন রয়েছে যা আমাদের মডেল থেকে পর্যবেক্ষণ নেবে এবং 4টি পূর্ণসংখ্যার মানের একটি টুপল তৈরি করবে: (কোড ব্লক 6) +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) +1. বিন ব্যবহার করে আরেকটি ডিসক্রিটাইজেশন পদ্ধতি অন্বেষণ করুন: (কোড ব্লক 7) ```python def create_bins(i,num): @@ -143,9 +143,9 @@ Q-Learning-এ, আমাদের একটি Q-টেবিল তৈরি return tuple(np.digitize(x[i],bins[i]) for i in range(4)) ``` -1. এখন একটি ছোট সিমুলেশন চালাই এবং এই ডিসক্রিট পরিবেশের মানগুলি পর্যবেক্ষণ করি। `discretize` এবং `discretize_bins` উভয় চেষ্টা করতে পারেন এবং পার্থক্য আছে কিনা তা দেখতে পারেন। +1. এখন একটি ছোট সিমুলেশন চালান এবং সেই ডিসক্রিট পরিবেশের মানগুলি পর্যবেক্ষণ করুন। `discretize` এবং `discretize_bins` উভয়ই চেষ্টা করুন এবং পার্থক্য আছে কিনা তা দেখুন। - ✅ `discretize_bins` বিন নম্বর ফেরত দেয়, যা 0-ভিত্তিক। সুতরাং ইনপুট ভেরিয়েবলের মান 0-এর কাছাকাছি থাকলে এটি পরিসরের মাঝখানের সংখ্যা (10) ফেরত দেয়। `discretize`-এ, আমরা আউটপুট মানগুলির পরিসরের যত্ন নিইনি, তাদের নেতিবাচক হতে দিয়েছি, তাই স্টেট মানগুলি স্থানান্তরিত হয়নি এবং 0 মানে 0। (কোড ব্লক 8) + ✅ `discretize_bins` বিন নম্বর ফেরত দেয়, যা 0-ভিত্তিক। তাই ইনপুট ভেরিয়েবলের মান 0-এর কাছাকাছি থাকলে এটি পরিসরের মাঝখান থেকে একটি সংখ্যা (10) ফেরত দেয়। `discretize`-এ, আমরা আউটপুট মানগুলির পরিসরের বিষয়ে চিন্তা করিনি, তাদের নেতিবাচক হতে দিয়েছি, তাই অবস্থার মানগুলি স্থানান্তরিত হয়নি এবং 0 মানে 0। (কোড ব্লক 8) ```python env.reset() @@ -159,15 +159,15 @@ Q-Learning-এ, আমাদের একটি Q-টেবিল তৈরি env.close() ``` - ✅ পরিবেশটি কীভাবে কার্যকর হয় তা দেখতে চাইলে `env.render` দিয়ে শুরু হওয়া লাইনটি আনকমেন্ট করুন। অন্যথায়, আপনি এটি ব্যাকগ্রাউন্ডে কার্যকর করতে পারেন, যা দ্রুততর। আমরা আমাদের Q-Learning প্রক্রিয়ার সময় এই "অদৃশ্য" কার্যকরকরণটি ব্যবহার করব। + ✅ পরিবেশটি কীভাবে কার্যকর হয় তা দেখতে `env.render` দিয়ে শুরু হওয়া লাইনটি আনকমেন্ট করুন। অন্যথায় আপনি এটি ব্যাকগ্রাউন্ডে কার্যকর করতে পারেন, যা দ্রুত। আমরা আমাদের Q-Learning প্রক্রিয়ার সময় এই "অদৃশ্য" কার্যকরকরণ ব্যবহার করব। -## Q-টেবিলের কাঠামো +## Q-Table এর গঠন -পূর্ববর্তী পাঠে, স্টেটটি 0 থেকে 8 পর্যন্ত দুটি সংখ্যার একটি সাধারণ জোড়া ছিল, এবং তাই এটি একটি numpy টেনসর দ্বারা Q-টেবিল উপস্থাপন করা সুবিধাজনক ছিল যার আকার ছিল 8x8x2। যদি আমরা বিন ডিসক্রিটাইজেশন ব্যবহার করি, আমাদের স্টেট ভেক্টরের আকারও জানা থাকে, তাই আমরা একই পদ্ধতি ব্যবহার করতে পারি এবং স্টেটটিকে 20x20x10x10x2 আকারের একটি অ্যারে দ্বারা উপস্থাপন করতে পারি (এখানে 2 হল অ্যাকশন স্পেসের মাত্রা, এবং প্রথম মাত্রাগুলি পর্যবেক্ষণ স্পেসে প্রতিটি প্যারামিটারের জন্য ব্যবহৃত বিনের সংখ্যার সাথে সম্পর্কিত)। +পূর্ববর্তী পাঠে, অবস্থাটি 0 থেকে 8 পর্যন্ত সংখ্যার একটি সাধারণ জোড়া ছিল, এবং তাই এটি একটি numpy টেনসর দ্বারা Q-Table উপস্থাপন করা সুবিধাজনক ছিল যার আকৃতি ছিল 8x8x2। যদি আমরা বিন ডিসক্রিটাইজেশন ব্যবহার করি, আমাদের অবস্থান ভেক্টরের আকারও জানা যায়, তাই আমরা একই পদ্ধতি ব্যবহার করতে পারি এবং অবস্থানটিকে একটি অ্যারের আকার 20x20x10x10x2 দ্বারা উপস্থাপন করতে পারি (এখানে 2 হল Action space-এর মাত্রা, এবং প্রথম মাত্রাগুলি পর্যবেক্ষণ স্পেসে প্রতিটি প্যারামিটারের জন্য ব্যবহৃত বিনের সংখ্যার সাথে সম্পর্কিত)। -তবে, কখনও কখনও পর্যবেক্ষণ স্পেসের সঠিক মাত্রা জানা যায় না। `discretize` ফাংশনের ক্ষেত্রে, আমরা কখনই নিশ্চিত হতে পারি না যে আমাদের স্টেট নির্দিষ্ট সীমার মধ্যে থাকবে, কারণ কিছু আসল মান সীমাবদ্ধ নয়। সুতরাং, আমরা একটি ভিন্ন পদ্ধতি ব্যবহার করব এবং Q-টেবিলকে একটি ডিকশনারি দ্বারা উপস্থাপন করব। +তবে, কখনও কখনও পর্যবেক্ষণ স্পেসের সঠিক মাত্রা জানা যায় না। `discretize` ফাংশনের ক্ষেত্রে, আমরা কখনই নিশ্চিত হতে পারি না যে আমাদের অবস্থান নির্দিষ্ট সীমার মধ্যে থাকে, কারণ কিছু মূল মান সীমাবদ্ধ নয়। তাই, আমরা একটি সামান্য ভিন্ন পদ্ধতি ব্যবহার করব এবং Q-Table একটি ডিকশনারি দ্বারা উপস্থাপন করব। -1. *(state, action)* জোড়াকে ডিকশনারি কী হিসাবে ব্যবহার করুন, এবং মানটি Q-টেবিল এন্ট্রি মানের সাথে সম্পর্কিত হবে। (কোড ব্লক 9) +1. *(state,action)* জোড়াকে ডিকশনারি কী হিসাবে ব্যবহার করুন, এবং মানটি Q-Table এন্ট্রি মানের সাথে সম্পর্কিত হবে। (কোড ব্লক 9) ```python Q = {} @@ -177,13 +177,13 @@ Q-Learning-এ, আমাদের একটি Q-টেবিল তৈরি return [Q.get((state,a),0) for a in actions] ``` - এখানে আমরা একটি ফাংশন `qvalues()`-ও সংজ্ঞায়িত করি, যা একটি প্রদত্ত স্টেটের জন্য Q-টেবিল মানগুলির একটি তালিকা ফেরত দেয় যা সমস্ত সম্ভাব্য ক্রিয়ার সাথে সম্পর্কিত। যদি এন্ট্রি Q-টেবিলে উপস্থিত না থাকে, আমরা ডিফল্ট হিসাবে 0 ফেরত দেব। + এখানে আমরা একটি ফাংশন `qvalues()` সংজ্ঞায়িত করি, যা একটি প্রদত্ত অবস্থার জন্য Q-Table মানগুলির একটি তালিকা ফেরত দেয় যা সমস্ত সম্ভাব্য ক্রিয়াগুলির সাথে সম্পর্কিত। যদি এন্ট্রি Q-Table-এ উপস্থিত না থাকে, আমরা ডিফল্ট হিসাবে 0 ফেরত দেব। ## আসুন Q-Learning শুরু করি এখন আমরা পিটারকে ভারসাম্য রক্ষা করতে শেখানোর জন্য প্রস্তুত! -1. প্রথমে, কিছু হাইপারপ্যারামিটার সেট করি: (কোড ব্লক 10) +1. প্রথমে কিছু হাইপারপ্যারামিটার সেট করুন: (কোড ব্লক 10) ```python # hyperparameters @@ -192,23 +192,23 @@ Q-Learning-এ, আমাদের একটি Q-টেবিল তৈরি epsilon = 0.90 ``` - এখানে, `alpha` হল **লার্নিং রেট**, যা প্রতিটি ধাপে Q-টেবিলের বর্তমান মানগুলি কতটা সামঞ্জস্য করা উচিত তা নির্ধারণ করে। পূর্ববর্তী পাঠে আমরা 1 দিয়ে শুরু করেছিলাম এবং তারপর প্রশিক্ষণের সময় `alpha`-কে কম মানে নামিয়ে এনেছিলাম। এই উদাহরণে আমরা এটি ধ্রুবক রাখব শুধুমাত্র সরলতার জন্য, এবং আপনি পরে `alpha` মানগুলি সামঞ্জস্য করার সাথে পরীক্ষা করতে পারেন। + এখানে, `alpha` হল **learning rate**, যা সংজ্ঞায়িত করে যে প্রতিটি ধাপে Q-Table এর বর্তমান মানগুলি আমরা কতটা সমন্বয় করব। পূর্ববর্তী পাঠে আমরা 1 দিয়ে শুরু করেছি এবং প্রশিক্ষণের সময় `alpha`-কে কম মানগুলিতে কমিয়েছি। এই উদাহরণে আমরা এটি স্থির রাখব শুধুমাত্র সরলতার জন্য, এবং আপনি পরে `alpha` মানগুলি সামঞ্জস্য করার সাথে পরীক্ষা করতে পারেন। - `gamma` হল **ডিসকাউন্ট ফ্যাক্টর**, যা দেখায় যে আমরা বর্তমান রিওয়ার্ডের তুলনায় ভবিষ্যতের রিওয়ার্ডকে কতটা অগ্রাধিকার দেব। + `gamma` হল **discount factor**, যা দেখায় যে আমরা বর্তমান রিওয়ার্ডের তুলনায় ভবিষ্যতের রিওয়ার্ডকে কতটা অগ্রাধিকার দেব। - `epsilon` হল **এক্সপ্লোরেশন/এক্সপ্লয়টেশন ফ্যাক্টর**, যা নির্ধারণ করে যে আমরা এক্সপ্লোরেশনকে এক্সপ্লয়টেশনের তুলনায় বেশি পছন্দ করব কিনা। আমাদের অ্যালগরিদমে, আমরা `epsilon` শতাংশ ক্ষেত্রে Q-টেবিল মান অনুযায়ী পরবর্তী ক্রিয়া নির্বাচন করব, এবং বাকি ক্ষেত্রে আমরা একটি এলোমেলো ক্রিয়া কার্যকর করব। এটি আমাদের অনুসন্ধান স্থানের এমন এলাকাগুলি অন্বেষণ করতে দেবে যা আমরা আগে কখনও দেখিনি। + `epsilon` হল **exploration/exploitation factor**, যা নির্ধারণ করে যে আমরা অনুসন্ধানকে শোষণের তুলনায় বেশি পছন্দ করব কিনা বা এর বিপরীত। আমাদের অ্যালগরিদমে, আমরা `epsilon` শতাংশ ক্ষেত্রে Q-Table মান অনুযায়ী পরবর্তী ক্রিয়া নির্বাচন করব, এবং বাকি সংখ্যক ক্ষেত্রে আমরা একটি এলোমেলো ক্রিয়া কার্যকর করব। এটি আমাদের অনুসন্ধান স্পেসের এমন এলাকাগুলি অন্বেষণ করতে দেবে যা আমরা আগে কখনও দেখিনি। - ✅ ভারসাম্য রক্ষার ক্ষেত্রে - এলোমেলো ক্রিয়া (এক্সপ্লোরেশন) একটি ভুল দিকের এলোমেলো ধাক্কার মতো কাজ করবে, এবং পোলটিকে এই "ভুলগুলি" থেকে ভারসাম্য পুনরুদ্ধার করতে শিখতে হবে। + ✅ ভারসাম্যের ক্ষেত্রে - এলোমেলো ক্রিয়া (অনুসন্ধান) নির্বাচন করা ভুল দিকে একটি এলোমেলো ধাক্কার মতো কাজ করবে, এবং পোলটি এই "ভুলগুলি" থেকে ভারসাম্য পুনরুদ্ধার করতে শিখতে হবে। -### অ্যালগরিদম উন্নত করা +### অ্যালগরিদম উন্নত করুন -আমরা পূর্ববর্তী পাঠের অ্যালগরিদমে দুটি উন্নতি করতে পারি: +আমরা পূর্ববর্তী পাঠ থেকে আমাদের অ্যালগরিদমে দুটি উন্নতি করতে পারি: -- **গড় সামগ্রিক রিওয়ার্ড গণনা করা**, একাধিক সিমুলেশনের উপর ভিত্তি করে। আমরা প্রতি 5000 পুনরাবৃত্তিতে অগ্রগতি প্রিন্ট করব এবং আমরা সেই সময়ের উপর আমাদের সামগ্রিক রিওয়ার্ড গড় করব। এর মানে হল যে যদি আমরা 195 পয়েন্টের বেশি পাই - আমরা সমস্যাটি সমাধান হয়েছে বলে বিবেচনা করতে পারি, এমনকি প্রয়োজনীয় মানের চেয়েও উচ্চ মানের। +- **গড় সামগ্রিক রিওয়ার্ড গণনা করুন**, একটি নির্দিষ্ট সংখ্যক সিমুলেশনের উপর। আমরা প্রতি 5000 পুনরাবৃত্তিতে আমাদের অগ্রগতি প্রিন্ট করব এবং আমরা সেই সময়ের মধ্যে আমাদের সামগ্রিক রিওয়ার্ড গড় করব। এর মানে হল যে যদি আমরা 195 পয়েন্টের বেশি পাই - আমরা সমস্যাটি সমাধান হয়েছে বলে বিবেচনা করতে পারি, এমনকি প্রয়োজনীয় মানের চেয়েও বেশি মানের সাথে। -- **সর্বাধিক গড় সামগ্রিক ফলাফল গণনা করা**, `Qmax`, এবং আমরা সেই ফলাফলের সাথে সম্পর্কিত Q-টেবিল সংরক্ষণ করব। যখন আপনি প্রশিক্ষণ চালাবেন, আপনি লক্ষ্য করবেন যে কখনও কখনও গড় সামগ্রিক ফলাফল কমতে শুরু করে, এবং আমরা সেই Q-টেবিলের মানগুলি রাখতে চাই যা প্রশিক্ষণের সময় পর্যবেক্ষণ করা সেরা মডেলের সাথে সম্পর্কিত। +- **সর্বাধিক গড় সামগ্রিক ফলাফল গণনা করুন**, `Qmax`, এবং আমরা সেই ফলাফলের সাথে সম্পর্কিত Q-Table সংরক্ষণ করব। যখন আপনি প্রশিক্ষণ চালান তখন আপনি লক্ষ্য করবেন যে কখনও কখনও গড় সামগ্রিক ফলাফল কমতে শুরু করে, এবং আমরা Q-Table এর মানগুলি রাখতে চাই যা প্রশিক্ষণের সময় পর্যবেক্ষণ করা সেরা মডেলের সাথে সম্পর্কিত। -1. প্রতিটি সিমুলেশনে `rewards` ভেক্টরে সমস্ত সামগ্রিক রিওয়ার্ড সংগ্রহ করুন ভবিষ্যতে প্লট করার জন্য। (কোড ব্লক 11) +1. প্রতিটি সিমুলেশনে সমস্ত সামগ্রিক রিওয়ার্ড `rewards` ভেক্টরে সংগ্রহ করুন ভবিষ্যতে প্লট করার জন্য। (কোড ব্লক 11) ```python def probs(v,eps=1e-4): @@ -251,23 +251,23 @@ Q-Learning-এ, আমাদের একটি Q-টেবিল তৈরি এই ফলাফলগুলি থেকে আপনি যা লক্ষ্য করতে পারেন: -- **আমাদের লক্ষ্য কাছাকাছি**। আমরা 100+ ধারাবাহিক সিমুলেশনের উপর 195 সামগ্রিক রিওয়ার্ড অর্জনের লক্ষ্যের খুব কাছাকাছি, বা আমরা এটি ইতিমধ্যেই অর্জন করেছি! এমনকি যদি আমরা ছোট সংখ্যা পাই, আমরা এখনও জানি না, কারণ আমরা 5000 রান গড় করি, এবং আনুষ্ঠানিক মানদণ্ডে শুধুমাত্র 100 রান প্রয়োজন। +- **আমাদের লক্ষ্য কাছাকাছি**। আমরা 100+ ধারাবাহিক সিমুলেশনের উপর 195 সামগ্রিক রিওয়ার্ড অর্জনের লক্ষ্য অর্জনের খুব কাছাকাছি, বা আমরা প্রকৃতপক্ষে এটি অর্জন করেছি! এমনকি যদি আমরা ছোট সংখ্যা পাই, আমরা এখনও জানি না, কারণ আমরা 5000 রান গড় করি, এবং আনুষ্ঠানিক মানদণ্ডে শুধুমাত্র 100 রান প্রয়োজন। -- **রিওয়ার্ড কমতে শুরু করে**। কখনও কখনও রিওয়ার্ড কমতে শুরু করে, যার মানে আমরা Q-টেবিলে ইতিমধ্যে শেখা মানগুলিকে এমন মানগুলির সাথে "ধ্বংস" করতে পারি যা পরিস্থিতি আরও খারাপ করে তোলে। +- **রিওয়ার্ড কমতে শুরু করে**। কখনও কখনও রিওয়ার্ড কমতে শুরু করে, যার অর্থ আমরা Q-Table-এ ইতিমধ্যে শেখা মানগুলি "ধ্বংস" করতে পারি এমন মানগুলির সাথে যা পরিস্থিতিকে আরও খারাপ করে তোলে। -এই পর্যবেক্ষণটি আরও স্পষ্টভাবে দৃশ্যমান যদি আমরা প্রশিক্ষণের অগ্রগতি প্লট করি। +এই পর্যবেক্ষণটি আরও স্পষ্টভাবে দৃশ্যমান হয় যদি আমরা প্রশিক্ষণের অগ্রগতি প্লট করি। ## প্রশিক্ষণের অগ্রগতি প্লট করা -প্রশিক্ষণের সময়, আমরা প্রতিটি পুনরাবৃত্তিতে সামগ্রিক রিওয়ার্ড মান `rewards` ভেক্টরে সংগ্রহ করেছি। এটি পুনরাবৃত্তি সংখ্যার বিপরীতে প্লট করলে এটি দেখতে এরকম হবে: +প্রশিক্ষণের সময়, আমরা প্রতিটি পুনরাবৃত্তিতে সামগ্রিক রিওয়ার্ড মান `rewards` ভেক্টরে সংগ্রহ করেছি। এটি পুনরাবৃত্তি সংখ্যার বিপরীতে প্লট করলে এটি দেখতে কেমন: ```python plt.plot(rewards) ``` -![raw progress](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.bn.png) +![raw progress](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) -এই গ্রাফ থেকে কিছু বলা সম্ভব নয়, কারণ স্টোকাস্টিক প্রশিক্ষণ প্রক্রিয়ার প্রকৃতির কারণে প্রশিক্ষণ সেশনের দৈর্ঘ্য ব্যাপকভাবে পরিবর্তিত হয়। এই গ্রাফটি আরও অর্থবহ করতে, আমরা 100টি পরীক্ষার উপর **রানিং গড়** গণনা করতে পারি। এটি `np.convolve` ব্যবহার করে সুবিধাজনকভাবে করা যেতে পারে: (কোড ব্লক 12) +এই গ্রাফ থেকে কিছু বলা সম্ভব নয়, কারণ স্টোকাস্টিক প্রশিক্ষণ প্রক্রিয়ার প্রকৃতির কারণে প্রশিক্ষণ সেশনের দৈর্ঘ্য ব্যাপকভাবে পরিবর্তিত হয়। এই গ্রাফটি আরও অর্থবহ করতে, আমরা 100টি পরীক্ষার উপর **running average** গণনা করতে পারি। এটি সুবিধামত `np.convolve` ব্যবহার করে করা যেতে পারে: (কোড ব্লক 12) ```python def running_average(x,window): @@ -276,21 +276,21 @@ def running_average(x,window): plt.plot(running_average(rewards,100)) ``` -![training progress](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.bn.png) +![training progress](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) ## হাইপারপ্যারামিটার পরিবর্তন করা -শেখার প্রক্রিয়াটি আরও স্থিতিশীল করতে, প্রশিক্ষণের সময় আমাদের কিছু হাইপারপ্যারামিটার সামঞ্জস্য করা বুদ্ধিমানের কাজ। বিশেষ করে: +শিক্ষণ আরও স্থিতিশীল করতে, প্রশিক্ষণের সময় আমাদের কিছু হাইপারপ্যারামিটার সামঞ্জস্য করা বুদ্ধিমানের কাজ। বিশেষত: -- **লার্নিং রেটের জন্য**, `alpha`, আমরা 1-এর কাছাকাছি মান দিয়ে শুরু করতে পারি এবং তারপর প্যারামিটারটি কমিয়ে রাখতে পারি। সময়ের সাথে সাথে, আমরা Q-টেবিলে ভাল সম্ভাব্য মান পেতে থাকব, এবং তাই আমাদের সেগুলি সামান্য সামঞ্জস্য করা উচিত, এবং নতুন মান দিয়ে সম্পূর্ণভাবে ওভাররাইট করা উচিত নয়। +- **শিক্ষণ হার**, `alpha`, আমরা 1-এর কাছাকাছি মান দিয়ে শুরু করতে পারি এবং তারপর প্যারামিটারটি কমিয়ে রাখতে পারি। সময়ের সাথে সাথে, আমরা Q-Table-এ ভাল সম্ভাব্য মান পাব, এবং তাই আমাদের তাদের সামান্য সামঞ্জস্য করা উচিত এবং নতুন মানগুলির সাথে সম্পূর্ণভাবে ওভাররাইট করা উচিত নয়। -- **epsilon বৃদ্ধি করা**। আমরা `epsilon` ধীরে ধীরে বাড়াতে চাইতে পারি, যাতে কম এক্সপ্লোর করি এবং বেশি এক্সপ্লয়ট করি। এটি সম্ভবত কম `epsilon` মান দিয়ে শুরু করা এবং প্রায় 1 পর্যন্ত বাড়ানো বুদ্ধিমানের কাজ। +- **epsilon বৃদ্ধি করুন**। আমরা `epsilon` ধীরে ধীরে বৃদ্ধি করতে চাই, যাতে কম অনুসন্ধান এবং বেশি শোষণ করা যায়। সম্ভবত এটি কম `epsilon` মান দিয়ে শুরু করা এবং প্রায় 1 পর্যন্ত নিয়ে যাওয়া বুদ্ধিমানের কাজ। > **টাস্ক ১**: হাইপারপ্যারামিটার মানগুলোর সাথে পরীক্ষা করুন এবং দেখুন আপনি কি উচ্চতর সামগ্রিক পুরস্কার অর্জন করতে পারেন। আপনি কি ১৯৫ এর উপরে পাচ্ছেন? -> **টাস্ক ২**: সমস্যাটি আনুষ্ঠানিকভাবে সমাধান করতে, আপনাকে ১০০টি ধারাবাহিক রান জুড়ে ১৯৫ গড় পুরস্কার অর্জন করতে হবে। প্রশিক্ষণের সময় এটি পরিমাপ করুন এবং নিশ্চিত করুন যে আপনি সমস্যাটি আনুষ্ঠানিকভাবে সমাধান করেছেন! +> **টাস্ক ২**: সমস্যাটি আনুষ্ঠানিকভাবে সমাধান করতে, আপনাকে ১০০ ধারাবাহিক রান জুড়ে ১৯৫ গড় পুরস্কার অর্জন করতে হবে। প্রশিক্ষণের সময় এটি পরিমাপ করুন এবং নিশ্চিত করুন যে আপনি সমস্যাটি আনুষ্ঠানিকভাবে সমাধান করেছেন! ## ফলাফল কার্যকরভাবে দেখা -প্রশিক্ষিত মডেলটি কীভাবে আচরণ করে তা আসলে দেখা বেশ আকর্ষণীয় হবে। চলুন সিমুলেশন চালাই এবং প্রশিক্ষণের সময় ব্যবহৃত একই অ্যাকশন নির্বাচন কৌশল অনুসরণ করি, Q-টেবিলের প্রোবাবিলিটি ডিস্ট্রিবিউশন অনুযায়ী স্যাম্পলিং করি: (কোড ব্লক ১৩) +প্রশিক্ষিত মডেলটি কীভাবে আচরণ করে তা দেখা বেশ আকর্ষণীয় হবে। চলুন সিমুলেশন চালাই এবং প্রশিক্ষণের সময় ব্যবহৃত একই অ্যাকশন নির্বাচন কৌশল অনুসরণ করি, Q-টেবিলের সম্ভাব্যতা বিতরণ অনুযায়ী নমুনা করি: (কোড ব্লক ১৩) ```python obs = env.reset() @@ -312,20 +312,20 @@ env.close() ## 🚀চ্যালেঞ্জ -> **টাস্ক ৩**: এখানে আমরা Q-টেবিলের চূড়ান্ত কপি ব্যবহার করছিলাম, যা হয়তো সেরা নাও হতে পারে। মনে রাখবেন যে আমরা সেরা পারফর্মিং Q-টেবিলটি `Qbest` ভেরিয়েবলে সংরক্ষণ করেছি! `Qbest`-কে `Q`-তে কপি করে একই উদাহরণটি চেষ্টা করুন এবং দেখুন কোনো পার্থক্য লক্ষ্য করেন কিনা। +> **টাস্ক ৩**: এখানে আমরা Q-টেবিলের চূড়ান্ত কপি ব্যবহার করছিলাম, যা হয়তো সেরা নাও হতে পারে। মনে রাখবেন যে আমরা `Qbest` ভেরিয়েবলে সেরা পারফর্মিং Q-টেবিল সংরক্ষণ করেছি! `Qbest`-কে `Q`-তে কপি করে একই উদাহরণ চেষ্টা করুন এবং পার্থক্য লক্ষ্য করুন। -> **টাস্ক ৪**: এখানে আমরা প্রতিটি ধাপে সেরা অ্যাকশন নির্বাচন করছিলাম না, বরং সংশ্লিষ্ট প্রোবাবিলিটি ডিস্ট্রিবিউশন দিয়ে স্যাম্পলিং করছিলাম। সর্বোচ্চ Q-টেবিল মানের সাথে সর্বদা সেরা অ্যাকশন নির্বাচন করা কি আরও যৌক্তিক হবে? এটি `np.argmax` ফাংশন ব্যবহার করে করা যেতে পারে, যা সর্বোচ্চ Q-টেবিল মানের সাথে সম্পর্কিত অ্যাকশন নম্বর খুঁজে বের করে। এই কৌশলটি বাস্তবায়ন করুন এবং দেখুন এটি ব্যালেন্সিং উন্নত করে কিনা। +> **টাস্ক ৪**: এখানে আমরা প্রতিটি ধাপে সেরা অ্যাকশন নির্বাচন করছিলাম না, বরং সংশ্লিষ্ট সম্ভাব্যতা বিতরণ দিয়ে নমুনা করছিলাম। সর্বোচ্চ Q-টেবিল মান সহ সর্বদা সেরা অ্যাকশন নির্বাচন করা কি আরও অর্থবহ হবে? এটি `np.argmax` ফাংশন ব্যবহার করে করা যেতে পারে, যা সর্বোচ্চ Q-টেবিল মানের সাথে সম্পর্কিত অ্যাকশন নম্বর খুঁজে বের করে। এই কৌশলটি বাস্তবায়ন করুন এবং দেখুন এটি ব্যালেন্সিং উন্নত করে কিনা। -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## অ্যাসাইনমেন্ট [একটি মাউন্টেন কার প্রশিক্ষণ দিন](assignment.md) ## উপসংহার -আমরা এখন শিখেছি কীভাবে এজেন্টদের প্রশিক্ষণ দিয়ে ভালো ফলাফল অর্জন করা যায়, শুধুমাত্র একটি রিওয়ার্ড ফাংশন প্রদান করে যা গেমের কাঙ্ক্ষিত অবস্থা সংজ্ঞায়িত করে এবং তাদের বুদ্ধিমত্তার সাথে সার্চ স্পেস অন্বেষণ করার সুযোগ দিয়ে। আমরা সফলভাবে Q-লার্নিং অ্যালগরিদম প্রয়োগ করেছি ডিসক্রিট এবং কন্টিনিউয়াস এনভায়রনমেন্টের ক্ষেত্রে, তবে ডিসক্রিট অ্যাকশন সহ। +আমরা এখন শিখেছি কীভাবে এজেন্টদের প্রশিক্ষণ দিয়ে ভালো ফলাফল অর্জন করা যায়, শুধুমাত্র একটি পুরস্কার ফাংশন প্রদান করে যা গেমের কাঙ্ক্ষিত অবস্থাকে সংজ্ঞায়িত করে এবং তাদের বুদ্ধিমত্তার সাথে অনুসন্ধান স্থানটি অন্বেষণ করার সুযোগ দিয়ে। আমরা সফলভাবে Q-লার্নিং অ্যালগরিদম প্রয়োগ করেছি ডিসক্রিট এবং কন্টিনিউয়াস পরিবেশের ক্ষেত্রে, তবে ডিসক্রিট অ্যাকশন সহ। -এটি অধ্যয়ন করাও গুরুত্বপূর্ণ যে এমন পরিস্থিতি যেখানে অ্যাকশন স্টেট কন্টিনিউয়াস এবং অবজারভেশন স্পেস আরও জটিল, যেমন অ্যাটারি গেম স্ক্রিনের ছবি। এই ধরনের সমস্যায় প্রায়ই আরও শক্তিশালী মেশিন লার্নিং কৌশল, যেমন নিউরাল নেটওয়ার্ক, ব্যবহার করতে হয় ভালো ফলাফল অর্জনের জন্য। এই আরও উন্নত বিষয়গুলো আমাদের আসন্ন উন্নত AI কোর্সের বিষয়। +এটি গুরুত্বপূর্ণ যে আমরা এমন পরিস্থিতি অধ্যয়ন করি যেখানে অ্যাকশন স্টেটও কন্টিনিউয়াস এবং পর্যবেক্ষণ স্থান অনেক বেশি জটিল, যেমন অ্যাটারি গেম স্ক্রিনের চিত্র। এই ধরনের সমস্যাগুলিতে ভালো ফলাফল অর্জনের জন্য প্রায়ই আরও শক্তিশালী মেশিন লার্নিং কৌশল, যেমন নিউরাল নেটওয়ার্ক, ব্যবহার করতে হয়। এই আরও উন্নত বিষয়গুলি আমাদের আসন্ন উন্নত AI কোর্সের বিষয়। --- diff --git a/translations/bn/9-Real-World/1-Applications/README.md b/translations/bn/9-Real-World/1-Applications/README.md index 9d0c2eed8..4a7622e35 100644 --- a/translations/bn/9-Real-World/1-Applications/README.md +++ b/translations/bn/9-Real-World/1-Applications/README.md @@ -1,143 +1,141 @@ # পোস্টস্ক্রিপ্ট: বাস্তব জীবনে মেশিন লার্নিং -![বাস্তব জীবনে মেশিন লার্নিং-এর সারাংশ একটি স্কেচনোটে](../../../../translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.bn.png) +![বাস্তব জীবনে মেশিন লার্নিং-এর সারাংশ একটি স্কেচনোটে](../../../../sketchnotes/ml-realworld.png) > স্কেচনোট: [Tomomi Imura](https://www.twitter.com/girlie_mac) -এই পাঠ্যক্রমে, আপনি ডেটা প্রশিক্ষণের জন্য প্রস্তুত করার এবং মেশিন লার্নিং মডেল তৈরি করার বিভিন্ন পদ্ধতি শিখেছেন। আপনি একাধিক ক্লাসিক রিগ্রেশন, ক্লাস্টারিং, ক্লাসিফিকেশন, প্রাকৃতিক ভাষা প্রক্রিয়াকরণ এবং টাইম সিরিজ মডেল তৈরি করেছেন। অভিনন্দন! এখন, আপনি হয়তো ভাবছেন, এই সবের উদ্দেশ্য কী... এই মডেলগুলোর বাস্তব জীবনে কী ব্যবহার রয়েছে? +এই পাঠক্রমে, আপনি ডেটা প্রশিক্ষণের জন্য প্রস্তুত করার এবং মেশিন লার্নিং মডেল তৈরি করার বিভিন্ন পদ্ধতি শিখেছেন। আপনি একাধিক ক্লাসিক রিগ্রেশন, ক্লাস্টারিং, ক্লাসিফিকেশন, ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং এবং টাইম সিরিজ মডেল তৈরি করেছেন। অভিনন্দন! এখন, আপনি হয়তো ভাবছেন, এই সবকিছুর উদ্দেশ্য কী... এই মডেলগুলোর বাস্তব জীবনে কী ব্যবহার রয়েছে? -যদিও শিল্পে AI-এর প্রতি অনেক আগ্রহ দেখা গেছে, যা সাধারণত ডিপ লার্নিং ব্যবহার করে, তবুও ক্লাসিক্যাল মেশিন লার্নিং মডেলগুলোর মূল্যবান ব্যবহার রয়েছে। আপনি হয়তো আজই এই অ্যাপ্লিকেশনগুলোর কিছু ব্যবহার করছেন! এই পাঠে, আপনি দেখবেন কীভাবে আটটি ভিন্ন শিল্প এবং বিষয়-ভিত্তিক ক্ষেত্র এই ধরনের মডেল ব্যবহার করে তাদের অ্যাপ্লিকেশনগুলোকে আরও কার্যকর, নির্ভরযোগ্য, বুদ্ধিমান এবং ব্যবহারকারীদের জন্য মূল্যবান করে তোলে। +যদিও শিল্পক্ষেত্রে AI, যা সাধারণত ডিপ লার্নিং ব্যবহার করে, অনেক আগ্রহ অর্জন করেছে, তবুও ক্লাসিক্যাল মেশিন লার্নিং মডেলগুলোর মূল্যবান প্রয়োগ রয়েছে। আপনি হয়তো ইতিমধ্যেই এই প্রয়োগগুলোর কিছু ব্যবহার করছেন! এই পাঠে, আপনি দেখবেন কীভাবে আটটি ভিন্ন শিল্প এবং বিষয়-সম্পর্কিত ক্ষেত্র এই ধরনের মডেল ব্যবহার করে তাদের অ্যাপ্লিকেশনগুলোকে আরও কার্যকর, নির্ভরযোগ্য, বুদ্ধিমান এবং ব্যবহারকারীদের জন্য মূল্যবান করে তুলছে। -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) +## [পূর্ব-পাঠ কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## 💰 ফাইন্যান্স +## 💰 অর্থনীতি -ফাইন্যান্স সেক্টরে মেশিন লার্নিং-এর জন্য অনেক সুযোগ রয়েছে। এই ক্ষেত্রের অনেক সমস্যাই মডেলিং এবং সমাধানের জন্য মেশিন লার্নিং ব্যবহার উপযোগী। +অর্থনৈতিক ক্ষেত্রে মেশিন লার্নিং-এর অনেক সুযোগ রয়েছে। এই ক্ষেত্রের অনেক সমস্যাই মডেলিং এবং মেশিন লার্নিং ব্যবহার করে সমাধান করা যায়। -### ক্রেডিট কার্ড জালিয়াতি সনাক্তকরণ +### ক্রেডিট কার্ড জালিয়াতি সনাক্তকরণ -আমরা এই কোর্সে [k-means ক্লাস্টারিং](../../5-Clustering/2-K-Means/README.md) সম্পর্কে শিখেছি, কিন্তু এটি কীভাবে ক্রেডিট কার্ড জালিয়াতি সম্পর্কিত সমস্যাগুলো সমাধানে ব্যবহার করা যেতে পারে? +আমরা এই কোর্সে [k-means ক্লাস্টারিং](../../5-Clustering/2-K-Means/README.md) সম্পর্কে শিখেছি, কিন্তু এটি কীভাবে ক্রেডিট কার্ড জালিয়াতি সম্পর্কিত সমস্যাগুলো সমাধানে ব্যবহার করা যায়? -k-means ক্লাস্টারিং একটি ক্রেডিট কার্ড জালিয়াতি সনাক্তকরণ কৌশল, যা **আউটলায়ার ডিটেকশন** নামে পরিচিত, এর সময় কাজে লাগে। আউটলায়ার বা ডেটার সেট সম্পর্কে পর্যবেক্ষণে বিচ্যুতি আমাদের জানাতে পারে যে একটি ক্রেডিট কার্ড স্বাভাবিকভাবে ব্যবহার করা হচ্ছে কিনা বা কিছু অস্বাভাবিক ঘটছে কিনা। নিচের লিঙ্কে দেওয়া পেপারে দেখানো হয়েছে, আপনি k-means ক্লাস্টারিং অ্যালগরিদম ব্যবহার করে ক্রেডিট কার্ড ডেটা সাজাতে পারেন এবং প্রতিটি লেনদেনকে একটি ক্লাস্টারে বরাদ্দ করতে পারেন এটি কতটা আউটলায়ার বলে মনে হয় তার উপর ভিত্তি করে। এরপর, আপনি জালিয়াতি বনাম বৈধ লেনদেনের জন্য সবচেয়ে ঝুঁকিপূর্ণ ক্লাস্টারগুলো মূল্যায়ন করতে পারেন। +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) একটি মূল্যবান টুল যা বুঝতে সাহায্য করে একটি ফান্ড কোনো বেঞ্চমার্কের তুলনায় কীভাবে পারফর্ম করে। আমরা এটাও নির্ধারণ করতে পারি যে রিগ্রেশনের ফলাফল পরিসংখ্যানগতভাবে গুরুত্বপূর্ণ কিনা বা এটি ক্লায়েন্টের বিনিয়োগে কতটা প্রভাব ফেলবে। আপনি আরও বিশ্লেষণ করতে পারেন মাল্টিপল রিগ্রেশন ব্যবহার করে, যেখানে অতিরিক্ত ঝুঁকির কারণগুলো বিবেচনায় নেওয়া যেতে পারে। একটি নির্দিষ্ট ফান্ডের জন্য এটি কীভাবে কাজ করবে তার উদাহরণ দেখতে নিচের পেপারটি দেখুন। +কোনো নির্দিষ্ট বিনিয়োগ কীভাবে পারফর্ম করে তা মূল্যায়নের একটি উপায় হলো পরিসংখ্যানগত রিগ্রেশন। [লিনিয়ার রিগ্রেশন](../../2-Regression/1-Tools/README.md) একটি মূল্যবান টুল যা একটি ফান্ড কীভাবে কোনো বেঞ্চমার্কের তুলনায় পারফর্ম করে তা বোঝার জন্য। আমরা আরও জানতে পারি যে রিগ্রেশনের ফলাফল পরিসংখ্যানগতভাবে গুরুত্বপূর্ণ কিনা, বা এটি ক্লায়েন্টের বিনিয়োগে কতটা প্রভাব ফেলবে। আপনি আরও বিশ্লেষণ প্রসারিত করতে পারেন মাল্টিপল রিগ্রেশন ব্যবহার করে, যেখানে অতিরিক্ত ঝুঁকির কারণগুলো বিবেচনায় নেওয়া যায়। একটি নির্দিষ্ট ফান্ডের জন্য এটি কীভাবে কাজ করবে তার উদাহরণ দেখতে নিচের গবেষণাপত্রটি দেখুন। [রেফারেন্স](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) ## 🎓 শিক্ষা -শিক্ষা ক্ষেত্রেও মেশিন লার্নিং প্রয়োগের জন্য একটি খুবই আকর্ষণীয় ক্ষেত্র। এখানে চমৎকার সমস্যাগুলো সমাধান করা যেতে পারে, যেমন পরীক্ষায় বা প্রবন্ধে প্রতারণা সনাক্ত করা বা সংশোধন প্রক্রিয়ায় পক্ষপাতিত্ব পরিচালনা করা। +শিক্ষাক্ষেত্রও একটি খুব আকর্ষণীয় ক্ষেত্র যেখানে মেশিন লার্নিং প্রয়োগ করা যায়। এখানে চমৎকার সমস্যাগুলো সমাধান করা যায় যেমন পরীক্ষায় বা প্রবন্ধে প্রতারণা সনাক্ত করা বা সংশোধন প্রক্রিয়ায় ইচ্ছাকৃত বা অনিচ্ছাকৃত পক্ষপাতিত্ব পরিচালনা করা। ### শিক্ষার্থীর আচরণ পূর্বাভাস -[Coursera](https://coursera.com), একটি অনলাইন ওপেন কোর্স প্রদানকারী, তাদের টেক ব্লগে অনেক ইঞ্জিনিয়ারিং সিদ্ধান্ত নিয়ে আলোচনা করে। এই কেস স্টাডিতে, তারা একটি রিগ্রেশন লাইন প্লট করেছে যাতে একটি নিম্ন NPS (Net Promoter Score) রেটিং এবং কোর্স ধরে রাখা বা ছেড়ে দেওয়ার মধ্যে কোনো সম্পর্ক রয়েছে কিনা তা অন্বেষণ করা যায়। +[Coursera](https://coursera.com), একটি অনলাইন ওপেন কোর্স প্রদানকারী, তাদের টেক ব্লগে অনেক ইঞ্জিনিয়ারিং সিদ্ধান্ত নিয়ে আলোচনা করে। এই কেস স্টাডিতে, তারা একটি রিগ্রেশন লাইন প্লট করেছে যাতে একটি নিম্ন NPS (Net Promoter Score) রেটিং এবং কোর্স ধরে রাখা বা বাদ দেওয়ার মধ্যে কোনো সম্পর্ক আছে কিনা তা অন্বেষণ করা যায়। [রেফারেন্স](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/) +[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, একটি কোম্পানি যা আসবাবপত্রের মতো গৃহস্থালির সামগ্রী বিক্রি করে, গ্রাহকদের তাদের পছন্দ এবং প্রয়োজনের জন্য সঠিক পণ্য খুঁজে পেতে সাহায্য করা অত্যন্ত গুরুত্বপূর্ণ। এই নিবন্ধে, কোম্পানির ইঞ্জিনিয়াররা বর্ণনা করেছেন কীভাবে তারা ML এবং NLP ব্যবহার করে "গ্রাহকদের জন্য সঠিক ফলাফল তুলে ধরেন"। বিশেষভাবে, তাদের Query Intent Engine তৈরি করা হয়েছে গ্রাহক পর্যালোচনাগুলোর উপর সত্তা নিষ্কাশন, ক্লাসিফায়ার প্রশিক্ষণ, সম্পদ এবং মতামত নিষ্কাশন এবং অনুভূতি ট্যাগিং ব্যবহার করে। এটি অনলাইন খুচরা বিক্রিতে NLP কীভাবে কাজ করে তার একটি ক্লাসিক ব্যবহার। +Wayfair, একটি কোম্পানি যা আসবাবপত্রের মতো গৃহস্থালির সামগ্রী বিক্রি করে, গ্রাহকদের তাদের রুচি এবং প্রয়োজনের জন্য সঠিক পণ্য খুঁজে পেতে সাহায্য করা অত্যন্ত গুরুত্বপূর্ণ। এই নিবন্ধে, কোম্পানির ইঞ্জিনিয়াররা বর্ণনা করেছেন কীভাবে তারা ML এবং NLP ব্যবহার করে "গ্রাহকদের জন্য সঠিক ফলাফল তুলে ধরেন"। বিশেষভাবে, তাদের Query Intent Engine তৈরি করা হয়েছে সত্তা নিষ্কাশন, ক্লাসিফায়ার প্রশিক্ষণ, সম্পদ এবং মতামত নিষ্কাশন, এবং গ্রাহক পর্যালোচনায় অনুভূতি ট্যাগিং ব্যবহার করে। এটি অনলাইন খুচরা বিক্রিতে NLP কীভাবে কাজ করে তার একটি ক্লাসিক ব্যবহার। [রেফারেন্স](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) ### ইনভেন্টরি ব্যবস্থাপনা -[StitchFix](https://stitchfix.com)-এর মতো উদ্ভাবনী, চটপটে কোম্পানিগুলো সুপারিশ এবং ইনভেন্টরি ব্যবস্থাপনার জন্য ব্যাপকভাবে ML-এর উপর নির্ভর করে। তাদের স্টাইলিং টিম এবং মার্চেন্ডাইজিং টিম একসঙ্গে কাজ করে, প্রকৃতপক্ষে: "আমাদের একজন ডেটা বিজ্ঞানী একটি জেনেটিক অ্যালগরিদম নিয়ে পরীক্ষা-নিরীক্ষা করেছেন এবং এটি পোশাকের ক্ষেত্রে প্রয়োগ করেছেন যাতে ভবিষ্যদ্বাণী করা যায় যে এমন একটি সফল পোশাকের টুকরো কী হতে পারে যা আজ বিদ্যমান নেই। আমরা এটি মার্চেন্ডাইজ টিমের কাছে নিয়ে এসেছি এবং এখন তারা এটি একটি টুল হিসেবে ব্যবহার করতে পারে।" -[রেফারেন্স](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) +[StitchFix](https://stitchfix.com), একটি বক্স সার্ভিস যা ভোক্তাদের কাছে পোশাক পাঠায়, সুপারিশ এবং ইনভেন্টরি ব্যবস্থাপনার জন্য ব্যাপকভাবে ML-এর উপর নির্ভর করে। তাদের স্টাইলিং টিম এবং মার্চেন্ডাইজিং টিম একসঙ্গে কাজ করে, আসলে: "আমাদের একজন ডেটা বিজ্ঞানী একটি জেনেটিক অ্যালগরিদম নিয়ে পরীক্ষা-নিরীক্ষা করেছেন এবং এটি পোশাকের ক্ষেত্রে প্রয়োগ করেছেন ভবিষ্যদ্বাণী করতে যে এমন একটি সফল পোশাকের টুকরো যা আজ বিদ্যমান নেই। আমরা এটি মার্চেন্ডাইজ টিমের কাছে নিয়ে এসেছি এবং এখন তারা এটি একটি টুল হিসেবে ব্যবহার করতে পারে।" +[রেফারেন্স](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) ## 🏥 স্বাস্থ্যসেবা -স্বাস্থ্যসেবা সেক্টর গবেষণা কাজগুলো অপ্টিমাইজ করতে এবং রোগীদের পুনরায় ভর্তি বা রোগের বিস্তার বন্ধ করার মতো লজিস্টিক সমস্যাগুলো সমাধানে ML ব্যবহার করতে পারে। +স্বাস্থ্যসেবা খাত গবেষণা কাজ এবং রোগীদের পুনরায় ভর্তি বা রোগের বিস্তার বন্ধ করার মতো লজিস্টিক সমস্যাগুলো অপ্টিমাইজ করতে ML ব্যবহার করতে পারে। -### ক্লিনিকাল ট্রায়াল ব্যবস্থাপনা +### ক্লিনিকাল ট্রায়াল ব্যবস্থাপনা -ক্লিনিকাল ট্রায়ালে বিষাক্ততা ড্রাগ নির্মাতাদের জন্য একটি বড় উদ্বেগ। কতটা বিষাক্ততা সহনীয়? এই গবেষণায়, বিভিন্ন ক্লিনিকাল ট্রায়াল পদ্ধতি বিশ্লেষণ করে ক্লিনিকাল ট্রায়ালের ফলাফলগুলোর সম্ভাবনা পূর্বাভাসের জন্য একটি নতুন পদ্ধতি তৈরি করা হয়েছে। বিশেষভাবে, তারা র‍্যান্ডম ফরেস্ট ব্যবহার করে একটি [ক্লাসিফায়ার](../../4-Classification/README.md) তৈরি করতে সক্ষম হয়েছে যা ড্রাগের গ্রুপগুলোর মধ্যে পার্থক্য করতে পারে। +ক্লিনিকাল ট্রায়ালে বিষাক্ততা ড্রাগ নির্মাতাদের জন্য একটি বড় উদ্বেগ। কতটা বিষাক্ততা সহনীয়? এই গবেষণায়, বিভিন্ন ক্লিনিকাল ট্রায়াল পদ্ধতি বিশ্লেষণ করে ক্লিনিকাল ট্রায়ালের ফলাফল পূর্বাভাসের জন্য একটি নতুন পদ্ধতি তৈরি করা হয়েছে। বিশেষভাবে, তারা র‍্যান্ডম ফরেস্ট ব্যবহার করে একটি [ক্লাসিফায়ার](../../4-Classification/README.md) তৈরি করতে সক্ষম হয়েছে যা ড্রাগের গ্রুপগুলোর মধ্যে পার্থক্য করতে পারে। [রেফারেন্স](https://www.sciencedirect.com/science/article/pii/S2451945616302914) -### হাসপাতাল পুনরায় ভর্তি ব্যবস্থাপনা +### হাসপাতাল পুনরায় ভর্তি ব্যবস্থাপনা -হাসপাতাল যত্ন ব্যয়বহুল, বিশেষত যখন রোগীদের পুনরায় ভর্তি করতে হয়। এই পেপারটি একটি কোম্পানির আলোচনা করে যারা [ক্লাস্টারিং](../../5-Clustering/README.md) অ্যালগরিদম ব্যবহার করে পুনরায় ভর্তি সম্ভাবনা পূর্বাভাস দেয়। এই ক্লাস্টারগুলো বিশ্লেষকদের "পুনরায় ভর্তি গ্রুপগুলো আবিষ্কার করতে সাহায্য করে যা একটি সাধারণ কারণ ভাগ করতে পারে।" +হাসপাতাল সেবা ব্যয়বহুল, বিশেষত যখন রোগীদের পুনরায় ভর্তি করতে হয়। এই গবেষণাপত্রে একটি কোম্পানি আলোচনা করেছে যারা [ক্লাস্টারিং](../../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/) +সম্প্রতি মহামারী দেখিয়েছে কীভাবে মেশিন লার্নিং রোগের বিস্তার বন্ধ করতে সাহায্য করতে পারে। এই নিবন্ধে, আপনি ARIMA, লজিস্টিক কার্ভ, লিনিয়ার রিগ্রেশন এবং SARIMA-এর ব্যবহার চিনতে পারবেন। "এই কাজটি এই ভাইরাসের বিস্তারের হার গণনা করার এবং মৃত্যুর সংখ্যা, সুস্থতা এবং নিশ্চিত কেস পূর্বাভাস দেওয়ার একটি প্রচেষ্টা, যাতে এটি আমাদের আরও ভালোভাবে প্রস্তুত হতে এবং টিকে থাকতে সাহায্য করতে পারে।" +[রেফারেন্স](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) ## 🌲 প্রকৃতি এবং সবুজ প্রযুক্তি -প্রকৃতি এবং বাস্তুসংস্থান অনেক সংবেদনশীল সিস্টেম নিয়ে গঠিত যেখানে প্রাণী এবং প্রকৃতির মধ্যে আন্তঃক্রিয়া গুরুত্বপূর্ণ। এই সিস্টেমগুলো সঠিকভাবে পরিমাপ করা এবং কিছু ঘটলে যথাযথভাবে কাজ করা গুরুত্বপূর্ণ, যেমন একটি বন আগুন বা প্রাণীর জনসংখ্যার হ্রাস। +প্রকৃতি এবং পরিবেশে অনেক সংবেদনশীল সিস্টেম রয়েছে যেখানে প্রাণী এবং প্রকৃতির মধ্যে আন্তঃক্রিয়া গুরুত্বপূর্ণ। এই সিস্টেমগুলো সঠিকভাবে পরিমাপ করা এবং কিছু ঘটলে যথাযথভাবে কাজ করা গুরুত্বপূর্ণ, যেমন বন আগুন বা প্রাণীর জনসংখ্যার হ্রাস। ### বন ব্যবস্থাপনা -আপনি আগের পাঠে [রিইনফোর্সমেন্ট লার্নিং](../../8-Reinforcement/README.md) সম্পর্কে শিখেছেন। এটি প্রকৃতিতে প্যাটার্ন পূর্বাভাস দেওয়ার সময় খুবই কার্যকর হতে পারে। বিশেষভাবে, এটি বন আগুন এবং আক্রমণাত্মক প্রজাতির বিস্তারের মতো বাস্তুসংস্থান সমস্যাগুলো ট্র্যাক করতে ব্যবহার করা যেতে পারে। কানাডায়, একটি গবেষক দল রিইনফোর্সমেন্ট লার্নিং ব্যবহার করে স্যাটেলাইট ইমেজ থেকে বন আগুনের গতিশীলতার মডেল তৈরি করেছে। একটি উদ্ভাবনী "স্পেশালি স্প্রেডিং প্রসেস (SSP)" ব্যবহার করে, তারা একটি বন আগুনকে "ল্যান্ডস্কেপের যেকোনো সেলে এজেন্ট" হিসেবে কল্পনা করেছে। "আগুন একটি অবস্থান থেকে যেকোনো সময়ে উত্তর, দক্ষিণ, পূর্ব বা পশ্চিমে ছড়িয়ে পড়া বা না ছড়িয়ে পড়ার মতো পদক্ষেপ নিতে পারে।" +আপনি আগের পাঠে [রিইনফোর্সমেন্ট লার্নিং](../../8-Reinforcement/README.md) সম্পর্কে শিখেছেন। এটি প্রকৃতিতে প্যাটার্ন পূর্বাভাস দেওয়ার ক্ষেত্রে খুবই কার্যকর হতে পারে। বিশেষভাবে, এটি বন আগুন এবং আক্রমণাত্মক প্রজাতির বিস্তারের মতো পরিবেশগত সমস্যাগুলো ট্র্যাক করতে ব্যবহার করা যেতে পারে। কানাডায়, একটি গবেষক দল রিইনফোর্সমেন্ট লার্নিং ব্যবহার করে স্যাটেলাইট ইমেজ থেকে বন আগুনের গতিশীলতার মডেল তৈরি করেছে। একটি উদ্ভাবনী "স্পেশালি স্প্রেডিং প্রসেস (SSP)" ব্যবহার করে, তারা একটি বন আগুনকে "ল্যান্ডস্কেপের যেকোনো সেলে এজেন্ট" হিসেবে কল্পনা করেছে। "আগুন একটি অবস্থান থেকে যেকোনো সময় উত্তর, দক্ষিণ, পূর্ব বা পশ্চিমে ছড়িয়ে পড়া বা না ছড়িয়ে পড়ার মতো পদক্ষেপ নিতে পারে।" -এই পদ্ধতি সাধারণ RL সেটআপকে উল্টে দেয় কারণ সংশ্লিষ্ট মার্কোভ ডিসিশন প্রসেস (MDP)-এর গতিশীলতা তাৎক্ষণিক আগুনের বিস্তারের জন্য একটি পরিচিত ফাংশন।" এই দলের দ্বারা ব্যবহৃত ক্লাসিক অ্যালগরিদম সম্পর্কে আরও পড়ুন নিচের লিঙ্কে। +এই পদ্ধতি সাধারণ 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) তৈরি করতে পারেন), ক্লাসিক্যাল ML এখনও এই কাজে একটি স্থান ধরে রেখেছে। +যদিও ডিপ লার্নিং প্রাণীর গতিশীলতা চাক্ষুষভাবে ট্র্যাক করার ক্ষেত্রে বিপ্লব ঘটিয়েছে (আপনি [পোলার বিয়ার ট্র্যাকার](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) তৈরি করতে পারেন), ক্লাসিক্যাল ML এখনও এই কাজে একটি স্থান ধরে রেখেছে। -ফার্ম প্রাণীর গতিশীলতা ট্র্যাক করার জন্য সেন্সর এবং IoT এই ধরনের ভিজ্যুয়াল প্রসেসিং ব্যবহার করে, তবে আরও মৌলিক ML কৌশলগুলো ডেটা প্রি-প্রসেস করার জন্য কার্যকর। উদাহরণস্বরূপ, এই পেপারে, বিভিন্ন ক্লাসিফায়ার অ্যালগরিদম ব্যবহার করে ভেড়ার অঙ্গভঙ্গি পর্যবেক্ষণ এবং বিশ্লেষণ করা হয়েছে। আপনি পৃষ্ঠা ৩৩৫-এ ROC কার্ভ চিনতে পারবেন। +ফার্ম প্রাণীর গতিশীলতা ট্র্যাক করার জন্য সেন্সর এবং IoT এই ধরনের চাক্ষুষ প্রসেসিং ব্যবহার করে, কিন্তু আরও মৌলিক ML কৌশলগুলো ডেটা প্রি-প্রসেস করার জন্য কার্যকর। উদাহরণস্বরূপ, এই গবেষণাপত্রে, বিভিন্ন ক্লাসিফায়ার অ্যালগরিদম ব্যবহার করে ভেড়ার অবস্থান পর্যবেক্ষণ এবং বিশ্লেষণ করা হয়েছে। আপনি পৃষ্ঠা ৩৩৫-এ ROC কার্ভ চিনতে পারবেন। [রেফারেন্স](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) ### ⚡️ শক্তি ব্যবস্থাপনা -আমাদের [টাইম সিরিজ পূর্বাভাস](../../7-TimeSeries/README.md) পাঠে, আমরা একটি শহরের জন্য সরবরাহ এবং চাহিদা বোঝার উপর ভিত্তি করে রাজস্ব তৈরি করতে স্মার্ট পার্কিং মিটার ধারণার কথা বলেছিলাম। এই নিবন্ধটি বিস্তারিতভাবে আলোচনা করে কীভাবে ক্লাস্টারিং, রিগ্রেশন এবং টাইম সিরিজ পূর্বাভাস একত্রিত হয়ে আয়ারল্যান্ডে ভবিষ্যতের শক্তি ব্যবহারের পূর্বাভাস দিতে সাহায্য করেছে, স্মার্ট মিটারিং-এর উপর ভিত্তি করে। +আমাদের [টাইম সিরিজ পূর্বাভাস](../../7-TimeSeries/README.md) পাঠে, আমরা একটি শহরের জন্য সরবরাহ এবং চাহিদা বোঝার ভিত্তিতে রাজস্ব তৈরি করতে স্মার্ট পার্কিং মিটার ধারণার কথা বলেছিলাম। এই নিবন্ধে বিস্তারিত আলোচনা করা হয়েছে কীভাবে ক্লাস্টারিং, রিগ্রেশন এবং টাইম সিরিজ পূর্বাভাস একত্রিত হয়ে আয়ারল্যান্ডে স্মার্ট মিটারিং-এর ভিত্তিতে ভবিষ্যৎ শক্তি ব্যবহারের পূর্বাভাস দিতে সাহায্য করেছে। [রেফারেন্স](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) ## 💼 বীমা -বীমা সেক্টর আর্থিক এবং অ্যাকচুয়ারিয়াল মডেল তৈরি এবং অপ্টিমাইজ করতে ML ব্যবহার করে। +বীমা খাত আরেকটি ক্ষেত্র যা ML ব্যবহার করে কার্যকর আর্থিক এবং অ্যাকচুয়ারিয়াল মডেল তৈরি এবং অপ্টিমাইজ করে। ### অস্থিরতা ব্যবস্থাপনা -MetLife, একটি জীবন বীমা প্রদানকারী, তাদের আর্থিক মডেলগুলোতে অস্থিরতা বিশ্লেষণ এবং প্রশমনের উপায় সম্পর্কে খোলামেলা। এই নিবন্ধে আপনি বাইনারি এবং অর্ডিনাল ক্লাসিফিকেশন ভিজ্যুয়ালাইজেশন লক্ষ্য করবেন। আপনি পূর্বাভাস ভিজ্যুয়ালাইজেশনও আবিষ্কার করবেন। +MetLife, একটি জীবন বীমা প্রদানকারী, তাদের আর্থিক মডেলে অস্থিরতা বিশ্লেষণ এবং কমানোর উপায় সম্পর্কে খোলামেলা। এই নিবন্ধে আপনি বাইনারি এবং অর্ডিনাল ক্লাসিফিকেশন ভিজ্যুয়ালাইজেশন দেখতে পাবেন। আপনি পূর্বাভাস ভিজ্যুয়ালাইজেশনও আবিষ্কার করবেন। [রেফারেন্স](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) ## 🎨 শিল্প, সংস্কৃতি এবং সাহিত্য -শিল্পে, উদাহরণস্বরূপ সাংবাদিকতায়, অনেক আকর্ষণীয় সমস্যা রয়েছে। ভুয়া খবর সনাক্ত করা একটি বড় সমস্যা কারণ এটি প্রমাণিত হয়েছে যে এটি মানুষের মতামতকে প্রভাবিত করতে এবং এমনকি গণতন্ত্রকে বিপর্যস্ত করতে পারে। জাদুঘরগুলোও ML ব্যবহার করে উপকৃত হতে পারে, যেমন নিদর্শনগুলোর মধ্যে সংযোগ খুঁজে বের করা থেকে শুরু করে সম্পদ পরিকল্পনা পর্যন্ত। +শিল্পে, যেমন সাংবাদিকতায়, অনেক আকর্ষণীয় সমস্যা রয়েছে। ভুয়া খবর সনাক্ত করা একটি বড় সমস্যা কারণ এটি মানুষের মতামত প্রভাবিত করতে এবং এমনকি গণতন্ত্রকে বিপর্যস্ত করতে প্রমাণিত হয়েছে। জাদুঘরগুলোও ML ব্যবহার থেকে উপকৃত হতে পারে, সবকিছু থেকে শুরু করে নিদর্শনগুলোর মধ্যে সংযোগ খুঁজে বের করা থেকে শুরু করে সম্পদ পরিকল্পনা পর্যন্ত। -### ভুয়া খবর সনাক্তকরণ +### ভুয়া খবর সনাক্তকরণ -আজকের মিডিয়ায় ভুয়া খবর সনাক্তকরণ একটি বিড়াল-ইঁদুরের খেলায় পরিণত হয়েছে। এই নিবন্ধে, গবেষকরা প্রস্তাব করেছেন যে আমরা অধ্যয়ন করা ML কৌশলগুলোর সমন্বয়ে একটি সিস্টেম পরীক্ষা করতে পারি এবং সেরা মডেলটি মোতায়েন করতে পারি: "এই সিস্টেমটি ডেটা থেকে বৈশিষ্ট্য নিষ্কাশনের জন্য প্রাকৃতিক ভাষা প্রক্রিয়াকরণের উপর ভিত্তি করে এবং তারপর এই বৈশিষ্ট্যগুলো ব্যবহার করা হয় মেশিন লার্নিং ক্লাসিফায়ার যেমন Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD), এবং Logistic Regression(LR) প্রশিক্ষণের জন্য।" +আজকের মিডিয়ায় ভুয়া খবর সনাক্তকরণ একটি বিড়াল-ইঁদুর খেলায় পরিণত হয়েছে। এই নিবন্ধে, গবেষকরা প্রস্তাব করেছেন যে আমরা অধ্যয়ন করা বিভিন্ন ML কৌশল একত্রিত করে একটি সিস্টেম পরীক্ষা করতে পারি এবং সেরা মডেলটি প্রয়োগ করতে পারি: "এই সিস্টেমটি ডেটা থেকে বৈশিষ্ট্য নিষ্কাশনের জন্য ন্যাচারাল ল্যাঙ্গুয়েজ প্রসেসিং-এর উপর ভিত্তি করে এবং তারপর এই বৈশিষ্ট্যগুলো মেশিন লার্নিং ক্লাসিফায়ার যেমন 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) -এই নিবন্ধটি দেখায় কীভাবে বিভিন্ন ML ক্ষেত্রের সমন্বয় আকর্ষণীয় ফলাফল তৈরি করতে পারে যা ভুয়া খবর ছড়ানো এবং প্রকৃত ক্ষতি তৈরি করা বন্ধ করতে সাহায্য করতে পারে; এই ক্ষেত্রে, প্রেরণা ছিল COVID চিকিৎসা সম্পর্কে গুজব ছড়ানো যা জনতার সহিংসতা উস্কে দিয়েছিল। +এই নিবন্ধটি দেখায় কীভাবে বিভিন্ন ML ক্ষেত্র একত্রিত করে আকর্ষণীয় ফলাফল তৈরি করা যায় যা ভুয়া খবর ছড়িয়ে পড়া এবং প্রকৃত ক্ষতি সৃষ্টি করা বন্ধ করতে সাহায্য করতে পারে; এই ক্ষেত্রে, প্রেরণা ছিল COVID চিকিৎসা সম্পর্কে গুজব ছড়িয়ে পড়া যা জনতার সহিংসতা উস্কে দিয়েছিল। ### জাদুঘরের ML -জাদুঘরগুলো AI বিপ্লবের দ্বারপ্রান্তে রয়েছে যেখানে সংগ্রহগুলো ক্যাটালগ এবং ডিজিটাইজ করা এবং নিদর্শনগুলোর মধ্যে সংযোগ খুঁজে পাওয়া প্রযুক্তির অগ্রগতির সাথে সহজ হয়ে উঠছে। [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) প্রকল্পগুলো ভ্যাটিকান আর্কাইভের মতো অপ্রাপ্য সংগ্রহের রহস্য উন্মোচনে সাহায্য করছে। তবে, জাদুঘরের ব্যবসায়িক দিকটি ML মডেল থেকে উপকৃত হয়। +জাদুঘরগুলো AI বিপ্লবের দ্বারপ্রান্তে রয়েছে যেখানে সংগ্রহগুলো ক্যাটালগ এবং ডিজিটাইজ করা এবং নিদর্শনগুলোর মধ্যে সংযোগ খুঁজে বের করা সহজতর হচ্ছে প্রযুক্তির অগ্রগতির সঙ্গে। [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) প্রকল্পগুলো ভ্যাটিকান আর্কাইভের মতো অপ্রাপ্য সংগ্রহের রহস্য উন্মোচনে সাহায্য করছে। কিন্তু, জাদুঘরের ব্যবসায়িক দিক ML মডেল থেকে উপকৃত হয়। -উদাহরণস্বরূপ, শিকাগোর আর্ট ইনস্টিটিউট মডেল তৈরি করেছে যা ভবিষ্যদ্বাণী করে দর্শকরা -আরেকটি ক্ষেত্র চিহ্নিত করুন যা এই পাঠ্যক্রমে শেখা কিছু কৌশল থেকে উপকৃত হয় এবং খুঁজে বের করুন এটি কীভাবে মেশিন লার্নিং (ML) ব্যবহার করে। +উদাহরণস্বরূপ, শিকাগোর আর্ট ইনস্টিটিউট মডেল তৈরি করেছে যা পূর্বাভাস দেয় দর্শকরা কীতে আগ্রহী এবং তারা কখন প্রদর্শনীতে অংশগ্রহণ করবে। লক্ষ্য হলো প্রতিবার ব্যবহারকারী জাদুঘর পরিদর্শন করলে ব্যক্তিগত এবং অপ্টিমাইজড অভিজ্ঞতা তৈরি করা। "২০১৭ অর্থবছরে, মডেলটি উপস্থিতি এবং প্রবেশাধিকার ১ শতাংশ স +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) +## পর্যালোচনা ও স্ব-অধ্যয়ন -## পর্যালোচনা ও স্ব-অধ্যয়ন - -Wayfair ডেটা সায়েন্স টিমের কাছে বেশ কিছু আকর্ষণীয় ভিডিও রয়েছে যেখানে তারা দেখিয়েছে কীভাবে তারা তাদের কোম্পানিতে মেশিন লার্নিং ব্যবহার করে। এটি [দেখার মতো](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos) হতে পারে! +ওয়েফেয়ার ডেটা সায়েন্স টিমের কিছু আকর্ষণীয় ভিডিও রয়েছে যেখানে তারা তাদের কোম্পানিতে কীভাবে মেশিন লার্নিং ব্যবহার করে তা দেখিয়েছে। এটি [দেখার মতো](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! ## অ্যাসাইনমেন্ট @@ -146,4 +144,4 @@ Wayfair ডেটা সায়েন্স টিমের কাছে ব --- **অস্বীকৃতি**: -এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিক অনুবাদ প্রদানের চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা দায়বদ্ধ থাকব না। \ No newline at end of file +এই নথিটি AI অনুবাদ পরিষেবা [Co-op Translator](https://github.com/Azure/co-op-translator) ব্যবহার করে অনুবাদ করা হয়েছে। আমরা যথাসম্ভব সঠিকতার জন্য চেষ্টা করি, তবে অনুগ্রহ করে মনে রাখবেন যে স্বয়ংক্রিয় অনুবাদে ত্রুটি বা অসঙ্গতি থাকতে পারে। মূল ভাষায় থাকা নথিটিকে প্রামাণিক উৎস হিসেবে বিবেচনা করা উচিত। গুরুত্বপূর্ণ তথ্যের জন্য, পেশাদার মানব অনুবাদ সুপারিশ করা হয়। এই অনুবাদ ব্যবহারের ফলে কোনো ভুল বোঝাবুঝি বা ভুল ব্যাখ্যা হলে আমরা তার জন্য দায়ী থাকব না। \ No newline at end of file diff --git a/translations/bn/9-Real-World/2-Debugging-ML-Models/README.md b/translations/bn/9-Real-World/2-Debugging-ML-Models/README.md index aad918e16..7d6179357 100644 --- a/translations/bn/9-Real-World/2-Debugging-ML-Models/README.md +++ b/translations/bn/9-Real-World/2-Debugging-ML-Models/README.md @@ -1,156 +1,157 @@ -# পোস্টস্ক্রিপ্ট: মেশিন লার্নিং মডেল ডিবাগিংয়ে রেসপন্সিবল এআই ড্যাশবোর্ড কম্পোনেন্ট ব্যবহার +# পোস্টস্ক্রিপ্ট: মডেল ডিবাগিং মেশিন লার্নিং-এ রেসপন্সিবল AI ড্যাশবোর্ড কম্পোনেন্ট ব্যবহার করে -## [পূর্ব-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [পূর্ব-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) ## ভূমিকা -মেশিন লার্নিং আমাদের দৈনন্দিন জীবনে গভীর প্রভাব ফেলে। স্বাস্থ্যসেবা, অর্থনীতি, শিক্ষা এবং কর্মসংস্থানের মতো গুরুত্বপূর্ণ ক্ষেত্রগুলোতে এআই ব্যবহৃত হচ্ছে, যা আমাদের ব্যক্তি এবং সমাজ উভয়ের ওপর প্রভাব ফেলে। উদাহরণস্বরূপ, স্বাস্থ্যসেবা নির্ণয় বা প্রতারণা সনাক্তকরণের মতো দৈনন্দিন সিদ্ধান্ত গ্রহণের কাজে সিস্টেম এবং মডেল ব্যবহৃত হয়। এর ফলে, এআই-এর উন্নতি এবং দ্রুত গ্রহণযোগ্যতার সঙ্গে সঙ্গে সামাজিক প্রত্যাশা এবং নিয়ন্ত্রণও পরিবর্তিত হচ্ছে। আমরা প্রায়ই দেখি যে এআই সিস্টেমগুলো প্রত্যাশা পূরণে ব্যর্থ হচ্ছে; নতুন চ্যালেঞ্জ উন্মোচিত হচ্ছে; এবং সরকার এআই সমাধানগুলো নিয়ন্ত্রণ করতে শুরু করেছে। তাই, এই মডেলগুলো বিশ্লেষণ করা গুরুত্বপূর্ণ যাতে সবার জন্য ন্যায্য, নির্ভরযোগ্য, অন্তর্ভুক্তিমূলক, স্বচ্ছ এবং দায়বদ্ধ ফলাফল নিশ্চিত করা যায়। +মেশিন লার্নিং আমাদের দৈনন্দিন জীবনে প্রভাব ফেলে। AI এখন এমন গুরুত্বপূর্ণ সিস্টেমে প্রবেশ করছে যা আমাদের ব্যক্তিগত এবং সামাজিক জীবনে প্রভাব ফেলে, যেমন স্বাস্থ্যসেবা, অর্থনীতি, শিক্ষা এবং কর্মসংস্থান। উদাহরণস্বরূপ, সিস্টেম এবং মডেল দৈনন্দিন সিদ্ধান্ত গ্রহণের কাজে ব্যবহৃত হয়, যেমন স্বাস্থ্যসেবা নির্ণয় বা প্রতারণা সনাক্তকরণ। এর ফলে, AI-এর অগ্রগতি এবং দ্রুত গ্রহণের সঙ্গে সঙ্গে সমাজের প্রত্যাশা এবং নিয়মাবলীও পরিবর্তিত হচ্ছে। আমরা প্রায়ই দেখি যে AI সিস্টেমগুলি প্রত্যাশা পূরণ করতে ব্যর্থ হয়; তারা নতুন চ্যালেঞ্জ উন্মোচন করে; এবং সরকার AI সমাধান নিয়ন্ত্রণ করতে শুরু করেছে। তাই, এই মডেলগুলো বিশ্লেষণ করা গুরুত্বপূর্ণ যাতে সবার জন্য ন্যায্য, নির্ভরযোগ্য, অন্তর্ভুক্তিমূলক, স্বচ্ছ এবং দায়িত্বশীল ফলাফল নিশ্চিত করা যায়। -এই পাঠ্যক্রমে, আমরা এমন কিছু ব্যবহারিক টুল নিয়ে আলোচনা করব যা দিয়ে মডেলের রেসপন্সিবল এআই সমস্যা আছে কিনা তা মূল্যায়ন করা যায়। প্রচলিত মেশিন লার্নিং ডিবাগিং কৌশলগুলো সাধারণত পরিমাণগত হিসাবের ওপর ভিত্তি করে, যেমন সামগ্রিক সঠিকতা বা গড় ত্রুটি হার। কল্পনা করুন, যদি আপনার ডেটাসেটে কিছু নির্দিষ্ট ডেমোগ্রাফিক (যেমন জাতি, লিঙ্গ, রাজনৈতিক মতামত, ধর্ম) অনুপস্থিত থাকে বা অতিরিক্তভাবে প্রতিনিধিত্ব করে, তাহলে কী হতে পারে। আবার, যদি মডেলের আউটপুট কোনো নির্দিষ্ট ডেমোগ্রাফিককে প্রাধান্য দেয়, তাহলে এটি সংবেদনশীল বৈশিষ্ট্য গোষ্ঠীগুলোর অতিরিক্ত বা কম প্রতিনিধিত্বের কারণ হতে পারে, যা মডেলের ন্যায্যতা, অন্তর্ভুক্তি বা নির্ভরযোগ্যতায় সমস্যা সৃষ্টি করতে পারে। আরেকটি বিষয় হলো, মেশিন লার্নিং মডেলগুলোকে "ব্ল্যাক বক্স" হিসেবে বিবেচনা করা হয়, যা মডেলের পূর্বাভাসের কারণ বোঝা এবং ব্যাখ্যা করা কঠিন করে তোলে। এই সমস্ত চ্যালেঞ্জগুলো ডেটা বিজ্ঞানী এবং এআই ডেভেলপারদের জন্য সমস্যা তৈরি করে যখন তাদের কাছে মডেলের ন্যায্যতা বা বিশ্বাসযোগ্যতা মূল্যায়নের জন্য যথাযথ টুল থাকে না। +এই পাঠ্যক্রমে, আমরা ব্যবহারিক টুল নিয়ে আলোচনা করব যা মডেলের রেসপন্সিবল AI সমস্যা আছে কিনা তা মূল্যায়ন করতে সাহায্য করে। প্রচলিত মেশিন লার্নিং ডিবাগিং কৌশল সাধারণত পরিমাণগত গণনার উপর ভিত্তি করে, যেমন সামগ্রিক সঠিকতা বা গড় ত্রুটি হার। কল্পনা করুন, আপনি যে ডেটা ব্যবহার করছেন তা যদি কিছু জনসংখ্যাগত তথ্যের অভাব থাকে, যেমন জাতি, লিঙ্গ, রাজনৈতিক মতামত, ধর্ম, বা যদি এটি এই জনসংখ্যাকে অসমভাবে উপস্থাপন করে। আবার, যদি মডেলের আউটপুট কিছু জনসংখ্যাকে প্রাধান্য দেয়, তাহলে এটি সংবেদনশীল বৈশিষ্ট্য গোষ্ঠীর অতিরিক্ত বা কম প্রতিনিধিত্ব সৃষ্টি করতে পারে, যা মডেলের ন্যায্যতা, অন্তর্ভুক্তি বা নির্ভরযোগ্যতার সমস্যার কারণ হতে পারে। আরেকটি বিষয় হলো, মেশিন লার্নিং মডেলগুলোকে "ব্ল্যাক বক্স" হিসেবে বিবেচনা করা হয়, যা মডেলের পূর্বাভাসের কারণ বোঝা এবং ব্যাখ্যা করা কঠিন করে তোলে। এই সমস্ত চ্যালেঞ্জের মুখোমুখি হন ডেটা বিজ্ঞানী এবং AI ডেভেলপাররা যখন তাদের কাছে মডেলের ন্যায্যতা বা বিশ্বাসযোগ্যতা মূল্যায়নের জন্য পর্যাপ্ত টুল থাকে না। -এই পাঠে, আপনি আপনার মডেল ডিবাগিং সম্পর্কে শিখবেন: +এই পাঠে, আপনি শিখবেন কীভাবে আপনার মডেল ডিবাগ করবেন: -- **ত্রুটি বিশ্লেষণ**: আপনার ডেটা বিতরণে মডেলের উচ্চ ত্রুটি হার কোথায় তা সনাক্ত করা। -- **মডেল ওভারভিউ**: বিভিন্ন ডেটা কোহর্টের মধ্যে তুলনামূলক বিশ্লেষণ করে মডেলের পারফরম্যান্স মেট্রিকের বৈষম্য আবিষ্কার করা। -- **ডেটা বিশ্লেষণ**: আপনার ডেটায় কোথায় অতিরিক্ত বা কম প্রতিনিধিত্ব থাকতে পারে তা তদন্ত করা, যা মডেলকে এক ডেটা ডেমোগ্রাফিকের পক্ষে বা বিপক্ষে পক্ষপাতিত্ব করতে প্রভাবিত করতে পারে। -- **ফিচার ইম্পর্টেন্স**: বৈশ্বিক বা স্থানীয় স্তরে মডেলের পূর্বাভাসে কোন বৈশিষ্ট্যগুলো প্রভাব ফেলছে তা বোঝা। +- **ত্রুটি বিশ্লেষণ**: আপনার ডেটা বিতরণে মডেলের উচ্চ ত্রুটি হার কোথায় রয়েছে তা চিহ্নিত করুন। +- **মডেল ওভারভিউ**: বিভিন্ন ডেটা কোহর্টের মধ্যে তুলনামূলক বিশ্লেষণ করুন যাতে মডেলের পারফরম্যান্স মেট্রিকগুলিতে বৈষম্য আবিষ্কার করা যায়। +- **ডেটা বিশ্লেষণ**: যেখানে আপনার ডেটার অতিরিক্ত বা কম প্রতিনিধিত্ব থাকতে পারে তা তদন্ত করুন, যা আপনার মডেলকে এক ডেটা জনসংখ্যার পক্ষে পক্ষপাতিত্ব করতে প্রভাবিত করতে পারে। +- **ফিচার ইম্পরট্যান্স**: বৈশ্বিক বা স্থানীয় স্তরে কোন বৈশিষ্ট্যগুলি আপনার মডেলের পূর্বাভাস চালাচ্ছে তা বুঝুন। ## পূর্বশর্ত -পূর্বশর্ত হিসেবে, দয়া করে [ডেভেলপারদের জন্য রেসপন্সিবল এআই টুল](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) পর্যালোচনা করুন। +পূর্বশর্ত হিসেবে, [ডেভেলপারদের জন্য রেসপন্সিবল AI টুল](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) পর্যালোচনা করুন। -> ![রেসপন্সিবল এআই টুলের জিআইএফ](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) +> ![রেসপন্সিবল AI টুলের GIF](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) ## ত্রুটি বিশ্লেষণ -প্রচলিত মডেল পারফরম্যান্স মেট্রিক, যেমন সঠিকতা পরিমাপ, সাধারণত সঠিক বনাম ভুল পূর্বাভাসের ভিত্তিতে হিসাব করা হয়। উদাহরণস্বরূপ, একটি মডেল ৮৯% সঠিক এবং ০.০০১ ত্রুটি হারের সঙ্গে কাজ করছে বলে বিবেচনা করা যেতে পারে। তবে, ত্রুটিগুলো আপনার ডেটাসেটে সমানভাবে বিতরণ নাও হতে পারে। আপনি ৮৯% সঠিকতার স্কোর পেতে পারেন, কিন্তু দেখতে পারেন যে ডেটার কিছু নির্দিষ্ট অঞ্চলে মডেল ৪২% সময় ব্যর্থ হচ্ছে। এই ব্যর্থতার ধরণগুলো নির্দিষ্ট ডেটা গোষ্ঠীর জন্য ন্যায্যতা বা নির্ভরযোগ্যতার সমস্যার কারণ হতে পারে। মডেল কোথায় ভালো করছে বা করছে না তা বোঝা অত্যন্ত গুরুত্বপূর্ণ। ডেটার সেই অঞ্চলগুলো, যেখানে মডেলের ত্রুটি বেশি, একটি গুরুত্বপূর্ণ ডেটা ডেমোগ্রাফিক হতে পারে। +প্রচলিত মডেল পারফরম্যান্স মেট্রিক, যা সঠিকতা পরিমাপের জন্য ব্যবহৃত হয়, সাধারণত সঠিক বনাম ভুল পূর্বাভাসের উপর ভিত্তি করে গণনা করা হয়। উদাহরণস্বরূপ, একটি মডেল ৮৯% সময় সঠিক এবং ত্রুটি হার ০.০০১ হলে এটি ভালো পারফরম্যান্স হিসেবে বিবেচিত হতে পারে। তবে ত্রুটি আপনার ডেটাসেটে সমানভাবে বিতরণ নাও হতে পারে। আপনি ৮৯% মডেল সঠিকতার স্কোর পেতে পারেন, কিন্তু দেখতে পারেন যে আপনার ডেটার কিছু অঞ্চলে মডেল ৪২% সময় ব্যর্থ হচ্ছে। এই ব্যর্থতার প্যাটার্নের ফলে নির্দিষ্ট ডেটা গোষ্ঠীর ক্ষেত্রে ন্যায্যতা বা নির্ভরযোগ্যতার সমস্যা দেখা দিতে পারে। মডেল কোথায় ভালো করছে বা কোথায় ব্যর্থ হচ্ছে তা বোঝা অত্যন্ত গুরুত্বপূর্ণ। ডেটার সেই অঞ্চলগুলো যেখানে মডেলের ত্রুটি বেশি, তা গুরুত্বপূর্ণ ডেটা জনসংখ্যা হতে পারে। -![মডেল ত্রুটি বিশ্লেষণ এবং ডিবাগিং](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.bn.png) +![মডেল ত্রুটি বিশ্লেষণ এবং ডিবাগ](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) -আরএআই ড্যাশবোর্ডের ত্রুটি বিশ্লেষণ কম্পোনেন্ট একটি গাছের ভিজ্যুয়ালাইজেশনের মাধ্যমে মডেলের ব্যর্থতা বিভিন্ন কোহর্টে কীভাবে বিতরণ হয়েছে তা দেখায়। এটি আপনার ডেটাসেটে উচ্চ ত্রুটি হারের বৈশিষ্ট্য বা অঞ্চল সনাক্ত করতে সহায়তা করে। মডেলের বেশিরভাগ ত্রুটি কোথা থেকে আসছে তা দেখে আপনি মূল কারণ অনুসন্ধান শুরু করতে পারেন। আপনি ডেটার কোহর্ট তৈরি করেও বিশ্লেষণ করতে পারেন। এই ডেটা কোহর্টগুলো ডিবাগিং প্রক্রিয়ায় সহায়তা করে, যেমন কেন একটি কোহর্টে মডেলের পারফরম্যান্স ভালো, কিন্তু অন্যটিতে ত্রুটিপূর্ণ। +RAI ড্যাশবোর্ডের ত্রুটি বিশ্লেষণ কম্পোনেন্ট একটি গাছের ভিজ্যুয়ালাইজেশনের মাধ্যমে মডেলের ব্যর্থতা বিভিন্ন কোহর্টে কীভাবে বিতরণ হয়েছে তা দেখায়। এটি আপনার ডেটাসেটে উচ্চ ত্রুটি হার রয়েছে এমন বৈশিষ্ট্য বা এলাকাগুলি চিহ্নিত করতে সহায়ক। মডেলের বেশিরভাগ ত্রুটি কোথা থেকে আসছে তা দেখে আপনি মূল কারণ তদন্ত শুরু করতে পারেন। আপনি ডেটা কোহর্ট তৈরি করে বিশ্লেষণ করতে পারেন। এই ডেটা কোহর্টগুলো ডিবাগিং প্রক্রিয়ায় সাহায্য করে, কেন মডেল একটি কোহর্টে ভালো পারফর্ম করছে কিন্তু অন্যটিতে ভুল করছে তা নির্ধারণ করতে। -![ত্রুটি বিশ্লেষণ](../../../../translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.bn.png) +![ত্রুটি বিশ্লেষণ](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) -গাছের মানচিত্রে দৃশ্যমান সূচকগুলো সমস্যার অঞ্চলগুলো দ্রুত সনাক্ত করতে সহায়তা করে। উদাহরণস্বরূপ, একটি গাছের নোড যত গাঢ় লাল রঙের হয়, ত্রুটি হার তত বেশি। +গাছের মানচিত্রে গাঢ় লাল রঙের ছায়া দ্রুত সমস্যার এলাকাগুলি চিহ্নিত করতে সাহায্য করে। উদাহরণস্বরূপ, একটি গাছের নোড যত গাঢ় লাল, ত্রুটি হার তত বেশি। -হিট ম্যাপ হলো আরেকটি ভিজ্যুয়ালাইজেশন কার্যকারিতা, যা ব্যবহারকারীদের একটি বা দুটি বৈশিষ্ট্যের মাধ্যমে ত্রুটি হার বিশ্লেষণ করতে সহায়তা করে এবং মডেলের ত্রুটির কারণ সনাক্ত করতে সহায়তা করে। +হিট ম্যাপ একটি অন্য ভিজ্যুয়ালাইজেশন কার্যকারিতা যা ব্যবহারকারীরা এক বা দুটি বৈশিষ্ট্য ব্যবহার করে ত্রুটি হার তদন্ত করতে ব্যবহার করতে পারেন, যা পুরো ডেটাসেট বা কোহর্টে মডেলের ত্রুটির কারণ খুঁজে বের করতে সাহায্য করে। -![ত্রুটি বিশ্লেষণ হিটম্যাপ](../../../../translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.bn.png) +![ত্রুটি বিশ্লেষণ হিটম্যাপ](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) -ত্রুটি বিশ্লেষণ ব্যবহার করুন যখন আপনাকে প্রয়োজন: +ত্রুটি বিশ্লেষণ ব্যবহার করুন যখন আপনি: -* মডেলের ব্যর্থতা কীভাবে ডেটাসেট এবং বিভিন্ন ইনপুট ও বৈশিষ্ট্য মাত্রায় বিতরণ হয়েছে তা গভীরভাবে বোঝা। -* সামগ্রিক পারফরম্যান্স মেট্রিক ভেঙে ত্রুটিপূর্ণ কোহর্ট সনাক্ত করা এবং লক্ষ্যভিত্তিক সমাধানের পদক্ষেপ নেওয়া। +* মডেলের ব্যর্থতা কীভাবে ডেটাসেট এবং বিভিন্ন ইনপুট ও বৈশিষ্ট্য মাত্রায় বিতরণ হয়েছে তা গভীরভাবে বুঝতে চান। +* সামগ্রিক পারফরম্যান্স মেট্রিক ভেঙে ত্রুটিপূর্ণ কোহর্টগুলি স্বয়ংক্রিয়ভাবে আবিষ্কার করতে চান, যা আপনার লক্ষ্যযুক্ত সমাধান পদক্ষেপগুলিকে জানাতে সাহায্য করবে। ## মডেল ওভারভিউ -একটি মেশিন লার্নিং মডেলের পারফরম্যান্স মূল্যায়ন করতে হলে এর আচরণ সম্পর্কে সামগ্রিক ধারণা পাওয়া প্রয়োজন। এটি একাধিক মেট্রিক পর্যালোচনা করে অর্জন করা যায়, যেমন ত্রুটি হার, সঠিকতা, রিকল, প্রিসিশন, বা এমএইই (গড় পরম ত্রুটি) এবং পারফরম্যান্স মেট্রিকের মধ্যে বৈষম্য খুঁজে বের করা। একটি মেট্রিক ভালো দেখাতে পারে, কিন্তু অন্য মেট্রিকে ত্রুটি প্রকাশ পেতে পারে। এছাড়া, পুরো ডেটাসেট বা কোহর্টের মধ্যে মেট্রিকের বৈষম্য তুলনা করলে মডেল কোথায় ভালো করছে বা করছে না তা বোঝা যায়। এটি বিশেষভাবে গুরুত্বপূর্ণ সংবেদনশীল বনাম অসংবেদনশীল বৈশিষ্ট্যের (যেমন রোগীর জাতি, লিঙ্গ, বা বয়স) মধ্যে মডেলের পারফরম্যান্স দেখতে, যাতে মডেলের সম্ভাব্য পক্ষপাতিত্ব উন্মোচিত হয়। উদাহরণস্বরূপ, যদি দেখা যায় যে মডেল একটি সংবেদনশীল বৈশিষ্ট্যযুক্ত কোহর্টে বেশি ত্রুটিপূর্ণ, তাহলে এটি মডেলের সম্ভাব্য পক্ষপাতিত্ব প্রকাশ করতে পারে। +একটি মেশিন লার্নিং মডেলের পারফরম্যান্স মূল্যায়ন করতে হলে এর আচরণের একটি সামগ্রিক ধারণা পাওয়া প্রয়োজন। এটি একাধিক মেট্রিক পর্যালোচনা করে অর্জন করা যেতে পারে, যেমন ত্রুটি হার, সঠিকতা, রিকল, প্রিসিশন, বা MAE (Mean Absolute Error) এর মধ্যে বৈষম্য খুঁজে বের করা। একটি পারফরম্যান্স মেট্রিক ভালো দেখাতে পারে, কিন্তু অন্য মেট্রিকে ত্রুটি প্রকাশিত হতে পারে। এছাড়াও, পুরো ডেটাসেট বা কোহর্টের মধ্যে মেট্রিকগুলির তুলনা পারফরম্যান্সের বৈষম্য প্রকাশ করতে সাহায্য করে। এটি বিশেষভাবে গুরুত্বপূর্ণ যখন সংবেদনশীল বনাম অসংবেদনশীল বৈশিষ্ট্যের (যেমন রোগীর জাতি, লিঙ্গ, বা বয়স) মধ্যে মডেলের পারফরম্যান্স দেখা হয়, যাতে মডেলের সম্ভাব্য অন্যায়তা প্রকাশ করা যায়। উদাহরণস্বরূপ, যদি দেখা যায় যে মডেল একটি সংবেদনশীল বৈশিষ্ট্যযুক্ত কোহর্টে বেশি ত্রুটি করছে, তাহলে এটি মডেলের সম্ভাব্য অন্যায়তা প্রকাশ করতে পারে। -আরএআই ড্যাশবোর্ডের মডেল ওভারভিউ কম্পোনেন্ট কেবল ডেটা প্রতিনিধিত্বের পারফরম্যান্স মেট্রিক বিশ্লেষণে সহায়তা করে না, এটি ব্যবহারকারীদের বিভিন্ন কোহর্টের মধ্যে মডেলের আচরণ তুলনা করার ক্ষমতা দেয়। +RAI ড্যাশবোর্ডের মডেল ওভারভিউ কম্পোনেন্ট শুধুমাত্র ডেটা কোহর্টে পারফরম্যান্স মেট্রিক বিশ্লেষণ করতে সাহায্য করে না, এটি ব্যবহারকারীদের বিভিন্ন কোহর্টের মধ্যে মডেলের আচরণ তুলনা করার ক্ষমতা দেয়। -![ডেটাসেট কোহর্ট - আরএআই ড্যাশবোর্ডে মডেল ওভারভিউ](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.bn.png) +![ডেটাসেট কোহর্ট - RAI ড্যাশবোর্ডে মডেল ওভারভিউ](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) -কম্পোনেন্টের বৈশিষ্ট্য-ভিত্তিক বিশ্লেষণ কার্যকারিতা ব্যবহারকারীদের একটি নির্দিষ্ট বৈশিষ্ট্যের মধ্যে ডেটা উপগোষ্ঠী সংকুচিত করতে এবং সূক্ষ্ম স্তরে অস্বাভাবিকতা সনাক্ত করতে সহায়তা করে। উদাহরণস্বরূপ, ড্যাশবোর্ডে একটি ব্যবহারকারী-নির্বাচিত বৈশিষ্ট্যের জন্য স্বয়ংক্রিয়ভাবে কোহর্ট তৈরি করার বুদ্ধিমত্তা অন্তর্নির্মিত রয়েছে (যেমন *"time_in_hospital < 3"* বা *"time_in_hospital >= 7"*)। এটি ব্যবহারকারীকে একটি বৃহত্তর ডেটা গোষ্ঠী থেকে একটি নির্দিষ্ট বৈশিষ্ট্য আলাদা করতে সক্ষম করে, যাতে এটি মডেলের ত্রুটিপূর্ণ ফলাফলের একটি মূল প্রভাবক কিনা তা দেখা যায়। +কম্পোনেন্টের বৈশিষ্ট্য-ভিত্তিক বিশ্লেষণ কার্যকারিতা ব্যবহারকারীদের একটি নির্দিষ্ট বৈশিষ্ট্যের মধ্যে ডেটা উপগোষ্ঠী সংকুচিত করতে এবং একটি সূক্ষ্ম স্তরে অস্বাভাবিকতা চিহ্নিত করতে সাহায্য করে। উদাহরণস্বরূপ, ড্যাশবোর্ডে একটি ব্যবহারকারী-নির্বাচিত বৈশিষ্ট্যের জন্য স্বয়ংক্রিয়ভাবে কোহর্ট তৈরি করার বিল্ট-ইন বুদ্ধিমত্তা রয়েছে (যেমন *"time_in_hospital < 3"* বা *"time_in_hospital >= 7"*)। এটি ব্যবহারকারীকে একটি বড় ডেটা গোষ্ঠী থেকে একটি নির্দিষ্ট বৈশিষ্ট্য আলাদা করতে সক্ষম করে, যাতে দেখা যায় এটি মডেলের ত্রুটিপূর্ণ ফলাফলের একটি মূল প্রভাবক কিনা। -![বৈশিষ্ট্য কোহর্ট - আরএআই ড্যাশবোর্ডে মডেল ওভারভিউ](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.bn.png) +![ফিচার কোহর্ট - RAI ড্যাশবোর্ডে মডেল ওভারভিউ](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) মডেল ওভারভিউ কম্পোনেন্ট দুটি শ্রেণির বৈষম্য মেট্রিক সমর্থন করে: -**মডেল পারফরম্যান্সে বৈষম্য**: এই মেট্রিকগুলো ডেটার উপগোষ্ঠীগুলোর মধ্যে নির্বাচিত পারফরম্যান্স মেট্রিকের মানের বৈষম্য (পার্থক্য) গণনা করে। উদাহরণ: +**মডেল পারফরম্যান্সে বৈষম্য**: এই সেটের মেট্রিকগুলি ডেটার উপগোষ্ঠীগুলির মধ্যে নির্বাচিত পারফরম্যান্স মেট্রিকের মানগুলির বৈষম্য (পার্থক্য) গণনা করে। এখানে কয়েকটি উদাহরণ: -* সঠিকতার হারে বৈষম্য -* ত্রুটি হারে বৈষম্য -* প্রিসিশনে বৈষম্য -* রিকলে বৈষম্য -* গড় পরম ত্রুটিতে (MAE) বৈষম্য +* সঠিকতার হার বৈষম্য +* ত্রুটি হার বৈষম্য +* প্রিসিশন বৈষম্য +* রিকল বৈষম্য +* গড় পরম ত্রুটি (MAE) বৈষম্য -**নির্বাচনের হারে বৈষম্য**: এই মেট্রিক উপগোষ্ঠীগুলোর মধ্যে নির্বাচনের হারের (অনুকূল পূর্বাভাস) পার্থক্য ধারণ করে। উদাহরণস্বরূপ, ঋণ অনুমোদনের হারে বৈষম্য। নির্বাচনের হার বলতে বোঝায় প্রতিটি শ্রেণির ডেটা পয়েন্টের ভগ্নাংশ যা ১ হিসেবে শ্রেণীবদ্ধ (বাইনারি শ্রেণীবিভাজনে) বা পূর্বাভাসের মানের বিতরণ (রিগ্রেশনে)। +**নির্বাচনের হার বৈষম্য**: এই মেট্রিকটি উপগোষ্ঠীগুলির মধ্যে নির্বাচনের হার (অনুকূল পূর্বাভাস) এর পার্থক্য ধারণ করে। এর একটি উদাহরণ হলো ঋণ অনুমোদনের হার বৈষম্য। নির্বাচনের হার মানে প্রতিটি শ্রেণির ডেটা পয়েন্টের ভগ্নাংশ যা ১ হিসেবে শ্রেণীবদ্ধ (বাইনারি শ্রেণীবিভাজনে) বা পূর্বাভাসের মানগুলির বিতরণ (রিগ্রেশনে)। ## ডেটা বিশ্লেষণ -> "যদি আপনি ডেটাকে যথেষ্ট সময় ধরে নির্যাতন করেন, এটি যেকোনো কিছু স্বীকার করবে" - রোনাল্ড কোজ +> "যদি আপনি ডেটাকে যথেষ্ট সময় ধরে চাপ দেন, এটি যেকোনো কিছু স্বীকার করবে" - রোনাল্ড কোস -এই উক্তিটি চরম শোনালেও সত্য যে ডেটাকে এমনভাবে প্রক্রিয়াজাত করা যায় যাতে এটি যেকোনো সিদ্ধান্তকে সমর্থন করে। এই ধরনের প্রক্রিয়াজাতকরণ কখনও কখনও অনিচ্ছাকৃতভাবে ঘটে। আমরা সবাই পক্ষপাতের শিকার, এবং কখন আমরা ডেটায় পক্ষপাত আনছি তা সচেতনভাবে বোঝা কঠিন। এআই এবং মেশিন লার্নিং-এ ন্যায্যতা নিশ্চিত করা একটি জটিল চ্যালেঞ্জ। +এই বক্তব্যটি চরম শোনায়, কিন্তু এটি সত্য যে ডেটা যেকোনো সিদ্ধান্তকে সমর্থন করার জন্য প্রভাবিত করা যেতে পারে। এমন প্রভাব কখনও কখনও অনিচ্ছাকৃতভাবে ঘটতে পারে। আমরা সবাই মানুষ হিসেবে পক্ষপাতিত্ব করি, এবং ডেটায় পক্ষপাতিত্ব প্রবর্তন করছি কিনা তা সচেতনভাবে জানা প্রায়ই কঠিন। AI এবং মেশিন লার্নিং-এ ন্যায্যতা নিশ্চিত করা একটি জটিল চ্যালেঞ্জ। -ডেটা হলো প্রচলিত মডেল পারফরম্যান্স মেট্রিকের একটি বড় অন্ধকার দিক। আপনার সঠিকতার স্কোর উচ্চ হতে পারে, কিন্তু এটি সবসময় আপনার ডেটাসেটে থাকা অন্তর্নিহিত পক্ষপাত প্রতিফলিত করে না। উদাহরণস্বরূপ, একটি কোম্পানির নির্বাহী পদে ২৭% নারী এবং ৭৩% পুরুষ থাকলে, এই ডেটার ওপর প্রশিক্ষিত একটি চাকরি বিজ্ঞাপন এআই মডেল মূলত পুরুষদের লক্ষ্য করে বিজ্ঞাপন দেখাতে পারে। ডেটায় এই ভারসাম্যহীনতা মডেলের পূর্বাভাসকে এক লিঙ্গের পক্ষে পক্ষপাতিত্ব করতে প্রভাবিত করেছে। এটি একটি ন্যায্যতার সমস্যা প্রকাশ করে যেখানে এআই মডেলে লিঙ্গ পক্ষপাত রয়েছে। +ডেটা প্রচলিত মডেল পারফরম্যান্স মেট্রিকের জন্য একটি বড় অন্ধকার অঞ্চল। আপনার সঠিকতার স্কোর উচ্চ হতে পারে, কিন্তু এটি সবসময় আপনার ডেটাসেটে থাকা অন্তর্নিহিত ডেটা পক্ষপাতিত্ব প্রতিফলিত করে না। উদাহরণস্বরূপ, যদি একটি কোম্পানির নির্বাহী পদে কর্মীদের ডেটাসেটে ২৭% নারী এবং ৭৩% পুরুষ থাকে, তাহলে এই ডেটার উপর প্রশিক্ষিত একটি চাকরি বিজ্ঞাপন AI মডেল মূলত পুরুষদের লক্ষ্য করতে পারে। এই ডেটার ভারসাম্যহীনতা মডেলের পূর্বাভাসকে এক লিঙ্গের পক্ষে পক্ষপাতিত্ব করেছে। এটি একটি ন্যায্যতার সমস্যা প্রকাশ করে যেখানে AI মডেলে লিঙ্গ পক্ষপাতিত্ব রয়েছে। -আরএআই ড্যাশবোর্ডের ডেটা বিশ্লেষণ কম্পোনেন্ট ডেটাসেটে কোথায় অতিরিক্ত বা কম প্রতিনিধিত্ব রয়েছে তা সনাক্ত করতে সহায়তা করে। এটি ব্যবহারকারীদের ডেটা ভারসাম্যহীনতা বা একটি নির্দিষ্ট ডেটা গোষ্ঠীর প্রতিনিধিত্বের অভাব থেকে উদ্ভূত ত্রুটি এবং ন্যায্যতার সমস্যার মূল কারণ নির্ণয়ে সহায়তা করে। এটি ব্যবহারকারীদের পূর্বাভাস এবং প্রকৃত ফলাফল, ত্রুটি গোষ্ঠী এবং নির্দিষ্ট বৈশিষ্ট্যের ভিত্তিতে ডেটাসেট ভিজ্যুয়ালাইজ করতে সক্ষম করে। কখনও কখনও একটি কম প্রতিনিধিত্বকারী ডেটা গোষ্ঠী আবিষ্কার করা মডেলটি ভালোভাবে শিখছে না তা প্রকাশ করতে পারে, যার ফলে উচ্চ ত্রুটি দেখা দেয়। একটি পক্ষপাতযুক্ত ডেটা মডেল কেবল ন্যায্যতার সমস্যাই নয়, এটি দেখায় যে মডেলটি অন্তর্ভুক্তিমূলক বা নির্ভরযোগ্য নয়। +RAI ড্যাশবোর্ডের ডেটা বিশ্লেষণ কম্পোনেন্ট ডেটাসেটে অতিরিক্ত এবং কম প্রতিনিধিত্বের এলাকাগুলি চিহ্নিত করতে সাহায্য করে। এটি ব্যবহারকারীদের ডেটা ভারসাম্যহীনতা বা একটি নির্দিষ্ট ডেটা গোষ্ঠীর প্রতিনিধিত্বের অভাব থেকে উদ্ভূত ত্রুটি এবং ন্যায্যতার সমস্যাগুলি নির্ণয় করতে সাহায্য করে। এটি ব্যবহারকারীদের পূর্বাভাস এবং প্রকৃত ফলাফল, ত্রুটি গোষ্ঠী এবং নির্দিষ্ট বৈশিষ্ট্যের উপর ভিত্তি করে ডেটাসেট ভিজ্যুয়ালাইজ করার ক্ষমতা দেয়। কখনও কখনও একটি কম প্রতিনিধিত্বকারী ডেটা গোষ্ঠী আবিষ্কার করা মডেলটি ভালোভাবে শিখছে না তা প্রকাশ করতে পারে, যার ফলে উচ্চ ত্রুটি দেখা দেয়। একটি মডেলে ডেটা পক্ষপাতিত্ব থাকা শুধুমাত্র একটি ন্যায্যতার সমস্যা নয়, এটি দেখায় যে মডেলটি অন্তর্ভুক্তিমূলক বা নির্ভরযোগ্য নয়। -![আরএআই ড্যাশবোর্ডে ডেটা বিশ্লেষণ কম্পোনেন্ট](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.bn.png) +![RAI ড্যাশবোর্ডে ডেটা বিশ্লেষণ কম্পোনেন্ট](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) -ডেটা বিশ্লেষণ ব্যবহার করুন যখন আপনাকে প্রয়োজন: +ডেটা বিশ্লেষণ ব্যবহার করুন যখন আপনি: -* বিভিন্ন ফিল্টার নির্বাচন করে আপনার ডেটাসেটের পরিসংখ্যান অন্বেষণ করা এবং বিভিন্ন মাত্রায় (কোহর্ট নামে পরিচিত) ডেটা বিভক্ত করা। -* বিভিন্ন কোহর্ট এবং বৈশিষ্ট্য গোষ্ঠীর মধ্যে আপনার ডেটাসেটের বিতরণ বোঝা। -* ন্যায্যতা, ত্রুটি বিশ্লেষণ এবং কারণ নির্ধারণ সম্পর্কিত আপনার অনুসন্ধানগুলো (ড্যাশবোর্ডের অন্যান্য কম্পোনেন্ট থেকে প্রাপ্ত) আপনার ডেটাসেটের বিতরণের ফলাফল কিনা তা নির্ধারণ করা। -* প্রতিনিধিত্বের সমস্যাগুলো থেকে উদ্ভূত ত্রুটি কমাতে কোন অঞ্চলে আরও ডেটা সংগ্রহ করা প্রয়োজন তা সিদ্ধান্ত নেওয়া। +* আপনার ডেটাসেটের পরিসংখ্যান অন্বেষণ করতে চান, বিভিন্ন ফিল্টার নির্বাচন করে আপনার ডেটাকে বিভিন্ন মাত্রায় (কোহর্ট নামে পরিচিত) ভাগ করতে। +* বিভিন্ন কোহর্ট এবং বৈশিষ্ট্য গোষ্ঠীর মধ্যে আপনার ডেটাসেটের বিতরণ বুঝতে চান। +* ন্যায্যতা, ত্রুটি বিশ্লেষণ এবং কারণ সম্পর্কিত আপনার অনুসন্ধানগুলি (অন্যান্য ড্যাশবোর্ড কম্পোনেন্ট থেকে প্রাপ্ত) আপনার ডেটাসেটের বিতরণের ফলাফল কিনা তা নির্ধারণ করতে চান। +* প্রতিনিধিত্বের সমস্যাগুলি থেকে উদ্ভূত ত্রুটি কমানোর জন্য আরও ডেটা সংগ্রহের এলাকাগুলি সিদ্ধান্ত নিতে চান। -## মডেল ব্যাখ্যা +## মডেল ব্যাখ্যাযোগ্যতা -মেশিন লার্নিং মডেলগুলো সাধারণত "ব্ল্যাক বক্স" হিসেবে বিবেচিত হয়। একটি মডেলের পূর্বাভাসে কোন প্রধান বৈশিষ্ট্যগুলো প্রভাব ফেলে তা বোঝা চ্যালেঞ্জিং হতে পারে। একটি মডেল কেন একটি নির্দিষ্ট পূর্বাভাস করেছে তা স্বচ্ছভাবে জানানো গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যদি একটি এআই সিস্টেম পূর্বাভাস দেয় যে একজন ডায়াবেটিক রোগী ৩০ দিনের মধ্যে আবার হাসপাতালে ভর্তি হওয়ার ঝুঁকিতে রয়েছে, তবে এটি পূর্বাভাসের পেছনে থাকা ডেটা সমর্থন প্রদান করতে সক্ষম হওয়া উচিত। এই ধরনের সমর্থনকারী ডেটা সূচক স্বচ্ছতা আনে, যা ক্লিনিশিয়ান বা হাসপাতালগুলোকে সঠিক সিদ্ধান্ত নিতে সহায়তা করে। এছাড়া, একটি নির্দিষ্ট রোগীর জন্য মডেল কেন একটি পূর্বাভাস দিয়েছে তা ব্যাখ্যা করতে পারা স্বাস্থ্যবিধি সম্পর্কিত নিয়মকানুনে দায়বদ্ধতা নিশ্চিত করে। যখন আপনি মেশিন লার্নিং মডেল এমনভাবে ব্যবহার করছেন যা মানুষের জীবনে প্রভাব ফেলে, তখন মডেলের আচরণ কী প্রভাবিত করে তা বোঝা এবং ব্যাখ্যা করা অত্যন্ত গুরুত্বপূর্ণ। মডেল ব্যাখ্যা এবং ব্যাখ্যাত্মকতা নিম্নলিখিত প্রশ্নগুলোর উত্তর দিতে সহায়তা করে: +মেশিন লার্নিং মডেলগুলো সাধারণত "ব্ল্যাক বক্স" হিসেবে বিবেচিত হয়। একটি মডেলের পূর্বাভাস চালানোর জন্য কোন মূল ডেটা বৈশিষ্ট্যগুলি গুরুত্বপূর্ণ তা বোঝা চ্যালেঞ্জিং হতে পারে। একটি মডেল কেন একটি নির্দিষ্ট পূর্বাভাস করেছে তা বোঝার জন্য স্বচ্ছতা প্রদান করা গুরুত্বপূর্ণ। উদাহরণস্বরূপ, যদি একটি AI সিস্টেম পূর্বাভাস দেয় যে একটি ডায়াবেটিক রোগী ৩০ দিনের মধ্যে হাসপাতালে পুনরায় ভর্তি হওয়ার ঝুঁকিতে রয়েছে, তাহলে এটি তার পূর্বাভাসের জন্য প্রাসঙ্গিক ডেটা প্রদান করতে সক্ষম হওয়া উচিত। এই ধরনের ডেটা সূচক স্বচ্ছতা নিয়ে আসে, যা চিকিৎসক বা হাসপাতালকে ভালোভাবে সিদ্ধান্ত নিতে সাহায্য করে। এছাড়াও, একটি নির্দিষ্ট রোগীর জন্য একটি মডেল কেন পূর্বাভাস দিয়েছে তা ব্যাখ্যা করতে সক্ষম হওয়া স্বাস্থ্য নিয়মাবলীর সঙ্গে দায়িত্বশীলতা নিশ্চিত করে। যখন আপনি মেশিন লার্নিং মডেল ব্যবহার করছেন যা মানুষের জীবনে প্রভাব ফেলে, তখন মডেলের আচরণ কী দ্বারা প্রভাবিত হয় তা বোঝা এবং ব্যাখ্যা করা অত্যন্ত গুরুত্বপূর্ণ। মডেল ব্যাখ্যাযোগ্যতা এবং ব্যাখ্যা করার ক্ষমতা নিম্নলিখিত পরিস্থিতিতে প্রশ্নের উত্তর দিতে সাহায্য করে: -* মডেল ডিবাগিং: আমার মডেল কেন এই ভুলটি করেছে? আমি কীভাবে আমার মডেল উন্নত করতে পারি? -* মানব-এআই সহযোগিতা: আমি কীভাবে মডেলের সিদ্ধান্তগুলো বুঝতে এবং বিশ্বাস করতে পারি? -* নিয়মতান্ত্রিক সম্মতি: আমার মডেল কি আইনি প্রয়োজনীয়তাগুলো পূরণ করে? +* মডেল ডিবাগিং: আমার মডেল কেন এই ভুল করেছে? আমি কীভাবে আমার মডেল উন্নত করতে পারি? +* মানব-AI সহযোগিতা: আমি কীভাবে মডেলের সিদ্ধান্ত বুঝতে এবং বিশ্বাস করতে পারি? +* নিয়ন্ত্রক সম্মতি: আমার মডেল কি আইনি প্রয়োজনীয়তা পূরণ করে? -আরএআই ড্যাশবোর্ডের ফিচার ইম্পর্টেন্স কম্পোনেন্ট আপনাকে ডিবাগ করতে এবং একটি মডেল কীভাবে পূর্বাভাস তৈরি করে তা ব্যাপকভাবে বুঝতে সহায়তা করে। এটি মেশিন লার্নিং পেশাদার এবং সিদ্ধান্ত গ্রহণকারীদের জন্য একটি কার্যকরী টুল, যা মডেলের আচরণে প্রভাব ফেলা বৈশিষ্ট্যগুলোর প্রমাণ দেখাতে এবং ব্যাখ্যা করতে সহায়তা করে। ব্যবহারকারীরা বৈশ্বিক এবং স্থানীয় ব্যাখ্যা উভয়ই অন্বেষণ করতে পারেন, যা মডেলের পূর্বাভাসে কোন বৈশিষ্ট্যগুলো প্রভাব ফেলেছে তা যাচাই করতে সহায়তা করে। বৈশ্বিক ব্যাখ্যা মডেলের সামগ্রিক পূর্বাভাসে প্রভাব ফেলা শীর্ষ বৈশিষ্ট্যগুলো তালিকাভুক্ত করে। স্থানীয় ব্যাখ্যা দেখায় যে একটি নির্দিষ্ট ক্ষেত্রে মডেলের পূর্বাভাসে কোন বৈশিষ্ট্যগুলো প্রভাব ফেলেছে। নির্দিষ্ট একটি ক্ষেত্রে ডিবাগিং বা অডিটিংয়ে স্থানীয় ব্যাখ্যা মূল্যায়ন করার ক্ষমতা মডেলটি সঠিক বা ভুল পূর্বাভাস কেন দিয়েছে তা আরও ভালোভাবে বুঝতে এবং ব্যাখ্যা করতে সহায়তা করে। +RAI ড্যাশবোর্ডের ফিচার ইম্পরট্যান্স কম্পোনেন্ট আপনাকে ডিবাগ করতে এবং একটি মডেল কীভাবে পূর্বাভাস তৈরি করে তা ব্যাপকভাবে বুঝতে সাহায্য করে। এটি মেশিন লার্নিং পেশাদার এবং সিদ্ধান্ত গ্রহণকারীদের জন্য একটি দরকারী টুল, যা মডেলের আচরণ প্রভাবিতকারী বৈশিষ্ট্যগুলির প্রমাণ দেখাতে এবং নিয়ন্ত্রক সম্মতির জন্য ব্যাখ্যা করতে সাহায্য করে। ব্যবহারকারীরা বৈশ্বিক এবং স্থানীয় ব্যাখ্যা উভয়ই অন্বেষণ করতে পারেন, যা মডেলের পূর্বাভাস চালানোর বৈশিষ্ট্যগুলি যাচাই করতে সাহায্য করে। বৈশ্বিক ব্যাখ্যা মডেলের সামগ্রিক পূর্বাভাসকে প্রভাবিত করা শীর্ষ বৈশিষ্ট্যগুলির তালিকা দেয়। স্থানীয় ব্যাখ্যা দেখায় যে একটি নির্দিষ্ট ক্ষেত্রে মডেলের পূর্বাভাসের জন্য কোন বৈশিষ্ট্যগুলি ভূমিকা পালন করেছে। স্থানীয় ব্যাখ্যা মূল্যায়নের ক্ষমতা একটি নির্দিষ্ট ক্ষেত্রে ডিবাগিং বা অডিটিংয়ে সহায়ক, যাতে মডেল কেন সঠিক বা ভুল পূর্বাভাস দিয়েছে তা ভালোভাবে বোঝা এবং ব্যাখ্যা করা যায়। -![আরএআই ড্যাশবোর্ডের ফিচার ইম্পর্টেন্স কম্পোনেন্ট](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.bn.png) +![RAI ড্যাশবোর্ডের ফিচার ইম্পরট্যান্স কম্পোনেন্ট](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) -* বৈশ্বিক ব্যাখ্যা: উদাহরণস্বরূপ, ডায়াবেটিস হাসপাতাল পুনঃভর্তি মডেলের সামগ্রিক আচরণে কোন বৈশিষ্ট্যগুলো প্রভাব ফেলে? -* স্থানীয় ব্যাখ্যা: উদাহরণস্বরূপ, কেন ৬০ বছরের বেশি বয়সী এবং পূর্বে হাসপাতালে ভর্তি হওয়া একজন -- **অতিরিক্ত বা অপর্যাপ্ত প্রতিনিধিত্ব**। ধারণাটি হলো একটি নির্দিষ্ট গোষ্ঠীকে একটি নির্দিষ্ট পেশায় দেখা যায় না, এবং যে কোনো পরিষেবা বা কার্যক্রম যা এটি প্রচার করে চলেছে, তা ক্ষতির কারণ হয়ে দাঁড়ায়। +* বৈশ্বিক ব্যাখ্যা: উদাহরণস্বরূপ, ডায়াবেটিস হাসপাতাল পুনরায় ভর্তি মডেলের সামগ্রিক আচরণে কোন বৈশিষ্ট্যগুলি প্রভাব ফেলে? +* স্থানীয় ব্যাখ্যা: উদাহরণস্বরূপ, কেন ৬০ বছরের বেশি বয়সী এবং পূর্ববর্তী হাসপাতালে ভর্তি থাকা একজন ডায়াবেটিক রোগীকে ৩০ দিনের মধ্যে পুনরায় ভর্তি বা পুনরায় ভর্তি না হওয়ার +- **অতিরিক্ত বা কম প্রতিনিধিত্ব**। ধারণাটি হলো একটি নির্দিষ্ট গোষ্ঠীকে একটি নির্দিষ্ট পেশায় দেখা যায় না, এবং যে কোনো সেবা বা কার্যক্রম যা এটি প্রচার করে তা ক্ষতির কারণ হতে পারে। ### Azure RAI ড্যাশবোর্ড + +[Azure RAI ড্যাশবোর্ড](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) ওপেন-সোর্স টুলের উপর ভিত্তি করে তৈরি, যা শীর্ষস্থানীয় একাডেমিক প্রতিষ্ঠান এবং সংস্থাগুলি, Microsoft সহ, ডেটা বিজ্ঞানী এবং AI ডেভেলপারদের মডেলের আচরণ আরও ভালোভাবে বুঝতে, AI মডেল থেকে অপ্রত্যাশিত সমস্যাগুলি আবিষ্কার এবং সমাধান করতে সহায়ক। -[Azure RAI ড্যাশবোর্ড](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) ওপেন-সোর্স টুলের উপর ভিত্তি করে তৈরি, যা শীর্ষস্থানীয় একাডেমিক প্রতিষ্ঠান এবং সংস্থাগুলোর (যেমন Microsoft) দ্বারা উন্নত করা হয়েছে। এটি ডেটা বিজ্ঞানী এবং AI ডেভেলপারদের মডেলের আচরণ আরও ভালোভাবে বোঝা, এবং AI মডেল থেকে উদ্ভূত অপ্রত্যাশিত সমস্যাগুলি আবিষ্কার ও সমাধান করতে সহায়ক। - -- RAI ড্যাশবোর্ডের বিভিন্ন উপাদান কীভাবে ব্যবহার করবেন তা জানতে [ডকুমেন্টেশন](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) দেখুন। - -- Azure Machine Learning-এ আরও দায়িত্বশীল AI পরিস্থিতি ডিবাগ করার জন্য কিছু RAI ড্যাশবোর্ডের [নমুনা নোটবুক](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) দেখুন। +- RAI ড্যাশবোর্ডের বিভিন্ন উপাদান কীভাবে ব্যবহার করবেন তা শিখতে [ডকুমেন্টেশন](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) দেখুন। +- Azure Machine Learning-এ আরও দায়িত্বশীল AI পরিস্থিতি ডিবাগ করার জন্য কিছু RAI ড্যাশবোর্ডের [নমুনা নোটবুক](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) দেখুন। + --- -## 🚀 চ্যালেঞ্জ - -প্রথম থেকেই পরিসংখ্যানগত বা ডেটা পক্ষপাত এড়ানোর জন্য, আমাদের উচিত: - -- সিস্টেমে কাজ করা ব্যক্তিদের মধ্যে বিভিন্ন পটভূমি এবং দৃষ্টিভঙ্গি নিশ্চিত করা -- এমন ডেটাসেটে বিনিয়োগ করা যা আমাদের সমাজের বৈচিত্র্যকে প্রতিফলিত করে -- পক্ষপাত সনাক্ত এবং সংশোধন করার জন্য আরও উন্নত পদ্ধতি বিকাশ করা +## 🚀 চ্যালেঞ্জ + +পরিসংখ্যানগত বা ডেটা পক্ষপাত এড়ানোর জন্য আমাদের উচিত: -বাস্তব জীবনের সেই পরিস্থিতিগুলি নিয়ে ভাবুন যেখানে মডেল তৈরির এবং ব্যবহারের ক্ষেত্রে অন্যায় স্পষ্ট। আর কী বিষয় আমাদের বিবেচনা করা উচিত? +- সিস্টেমে কাজ করা ব্যক্তিদের মধ্যে বিভিন্ন পটভূমি এবং দৃষ্টিভঙ্গি থাকা +- এমন ডেটাসেটে বিনিয়োগ করা যা আমাদের সমাজের বৈচিত্র্যকে প্রতিফলিত করে +- পক্ষপাত সনাক্ত এবং সংশোধন করার জন্য আরও ভালো পদ্ধতি তৈরি করা -## [পোস্ট-লেকচার কুইজ](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## পর্যালোচনা ও স্ব-অধ্যয়ন +বাস্তব জীবনের পরিস্থিতি নিয়ে চিন্তা করুন যেখানে মডেল তৈরিতে এবং ব্যবহারে অন্যায় স্পষ্ট। আর কী বিবেচনা করা উচিত? -এই পাঠে, আপনি মেশিন লার্নিং-এ দায়িত্বশীল AI অন্তর্ভুক্ত করার কিছু ব্যবহারিক টুল সম্পর্কে শিখেছেন। +## [পোস্ট-লেকচার কুইজ](https://ff-quizzes.netlify.app/en/ml/) +## পর্যালোচনা ও স্ব-অধ্যয়ন + +এই পাঠে, আপনি মেশিন লার্নিংয়ে দায়িত্বশীল AI অন্তর্ভুক্ত করার কিছু ব্যবহারিক টুল শিখেছেন। -এই ওয়ার্কশপটি দেখুন এবং বিষয়গুলো আরও গভীরভাবে জানুন: +এই কর্মশালাটি দেখুন বিষয়গুলো আরও গভীরভাবে বুঝতে: - দায়িত্বশীল AI ড্যাশবোর্ড: বাস্তবে RAI পরিচালনার জন্য একক প্ল্যাটফর্ম, Besmira Nushi এবং Mehrnoosh Sameki দ্বারা [![দায়িত্বশীল AI ড্যাশবোর্ড: বাস্তবে RAI পরিচালনার জন্য একক প্ল্যাটফর্ম](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "দায়িত্বশীল AI ড্যাশবোর্ড: বাস্তবে RAI পরিচালনার জন্য একক প্ল্যাটফর্ম") -> 🎥 উপরের ছবিতে ক্লিক করুন ভিডিও দেখার জন্য: দায়িত্বশীল AI ড্যাশবোর্ড: বাস্তবে RAI পরিচালনার জন্য একক প্ল্যাটফর্ম, Besmira Nushi এবং Mehrnoosh Sameki দ্বারা -দায়িত্বশীল AI এবং আরও বিশ্বাসযোগ্য মডেল তৈরির বিষয়ে আরও জানতে নিম্নলিখিত উপকরণগুলি দেখুন: +> 🎥 উপরের ছবিতে ক্লিক করুন ভিডিওর জন্য: দায়িত্বশীল AI ড্যাশবোর্ড: বাস্তবে RAI পরিচালনার জন্য একক প্ল্যাটফর্ম, Besmira Nushi এবং Mehrnoosh Sameki দ্বারা + +দায়িত্বশীল AI এবং আরও বিশ্বাসযোগ্য মডেল তৈরি করার বিষয়ে আরও জানতে নিম্নলিখিত উপকরণগুলি দেখুন: -- ML মডেল ডিবাগ করার জন্য Microsoft's RAI ড্যাশবোর্ড টুল: [দায়িত্বশীল AI টুল রিসোর্স](https://aka.ms/rai-dashboard) +- ML মডেল ডিবাগ করার জন্য Microsoft-এর RAI ড্যাশবোর্ড টুল: [দায়িত্বশীল AI টুল রিসোর্স](https://aka.ms/rai-dashboard) - দায়িত্বশীল AI টুলকিট অন্বেষণ করুন: [Github](https://github.com/microsoft/responsible-ai-toolbox) -- Microsoft's RAI রিসোর্স সেন্টার: [দায়িত্বশীল AI রিসোর্স – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- Microsoft-এর RAI রিসোর্স সেন্টার: [দায়িত্বশীল AI রিসোর্স – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- Microsoft's FATE গবেষণা দল: [FATE: AI-তে ন্যায্যতা, জবাবদিহিতা, স্বচ্ছতা এবং নৈতিকতা - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- Microsoft-এর FATE গবেষণা দল: [FATE: AI-তে ন্যায্যতা, জবাবদিহিতা, স্বচ্ছতা এবং নৈতিকতা - Microsoft Research](https://www.microsoft.com/research/theme/fate/) ## অ্যাসাইনমেন্ট diff --git a/translations/bn/README.md b/translations/bn/README.md index 026392868..5fd2d3282 100644 --- a/translations/bn/README.md +++ b/translations/bn/README.md @@ -1,8 +1,8 @@ # Introdução ao aprendizado de máquina -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) --- @@ -21,7 +21,7 @@ Bem-vindo a este curso sobre aprendizado de máquina clássico para iniciantes! [![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 a um vídeo: John Guttag do MIT apresenta o aprendizado de máquina. +> 🎥 Clique na imagem acima para assistir a um vídeo: John Guttag do MIT apresenta aprendizado de máquina. --- ## Começando com aprendizado de máquina @@ -31,20 +31,20 @@ Antes de começar com este currículo, você precisa configurar seu computador e - **Configure sua máquina com estes vídeos**. Use os links a seguir para aprender [como instalar Python](https://youtu.be/CXZYvNRIAKM) no seu sistema e [configurar um editor de texto](https://youtu.be/EU8eayHWoZg) para desenvolvimento. - **Aprenda Python**. Também é recomendado ter um entendimento 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 que utilizamos neste curso. - **Aprenda Node.js e JavaScript**. Também utilizamos JavaScript algumas vezes neste curso ao construir aplicativos web, então você precisará ter [node](https://nodejs.org) e [npm](https://www.npmjs.com/) instalados, além de [Visual Studio Code](https://code.visualstudio.com/) disponível para desenvolvimento em Python e JavaScript. -- **Crie uma conta no GitHub**. Já que você nos encontrou aqui no [GitHub](https://github.com), talvez já tenha uma conta, mas se não tiver, crie uma e depois faça um fork deste currículo para usar por conta própria. (Sinta-se à vontade para nos dar uma estrela também 😊) +- **Crie uma conta no GitHub**. Já que você nos encontrou aqui no [GitHub](https://github.com), talvez já tenha uma conta, mas se não, crie uma e depois faça um fork deste currículo para usar por conta própria. (Sinta-se à vontade para nos dar uma estrela também 😊) - **Explore o Scikit-learn**. Familiarize-se com [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), um conjunto de bibliotecas de ML que referenciamos nestas lições. --- ## O que é aprendizado de máquina? -O termo 'aprendizado de máquina' é um dos mais populares e frequentemente usados atualmente. Existe uma grande possibilidade de que você já tenha ouvido este termo pelo menos uma vez, caso tenha algum tipo de familiaridade com tecnologia, independentemente da área em que trabalha. No entanto, a mecânica do aprendizado de máquina é um mistério para a maioria das pessoas. Para um iniciante em aprendizado de máquina, o assunto pode parecer às vezes intimidante. Portanto, é importante entender o que realmente é aprendizado de máquina e aprender sobre ele passo a passo, por meio de exemplos práticos. +O termo 'aprendizado de máquina' é um dos mais populares e frequentemente usados atualmente. Existe uma possibilidade não trivial de que você já tenha ouvido este termo pelo menos uma vez, caso tenha algum tipo de familiaridade com tecnologia, independentemente da área em que trabalha. No entanto, a mecânica do aprendizado de máquina é um mistério para a maioria das pessoas. Para um iniciante em aprendizado de máquina, o assunto pode às vezes parecer intimidante. Portanto, é importante entender o que realmente é aprendizado de máquina e aprender sobre ele passo a passo, por meio de exemplos práticos. --- ## A curva de hype -![curva de hype do ML](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.br.png) +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) -> O Google Trends mostra a recente 'curva de hype' do termo 'aprendizado de máquina'. +> O Google Trends mostra a recente 'curva de hype' do termo 'aprendizado de máquina' --- ## Um universo misterioso @@ -54,7 +54,7 @@ Vivemos em um universo cheio de mistérios fascinantes. Grandes cientistas como --- ## O cérebro da criança -O cérebro e os sentidos de uma criança percebem os fatos ao seu redor e gradualmente aprendem os padrões ocultos da vida, o que ajuda a criança a criar regras lógicas para identificar padrões aprendidos. O processo de aprendizado do cérebro humano torna os humanos a criatura viva mais sofisticada deste mundo. Aprender continuamente ao descobrir padrões ocultos e depois inovar com base nesses padrões nos permite melhorar cada vez mais ao longo de nossas vidas. Essa capacidade de aprendizado e 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 e os sentidos de uma criança percebem os fatos ao seu redor e gradualmente aprendem os padrões ocultos da vida, que ajudam a criança a criar regras lógicas para identificar padrões aprendidos. O processo de aprendizado do cérebro humano torna os humanos as criaturas mais sofisticadas deste mundo. Aprender continuamente, descobrindo padrões ocultos e depois inovando com base nesses padrões, nos permite melhorar continuamente ao longo de nossas vidas. Essa capacidade de aprendizado e 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 @@ -69,9 +69,9 @@ Embora os termos possam ser confundidos, aprendizado de máquina (ML) é um subc --- ## IA, ML, Aprendizado Profundo -![IA, ML, aprendizado profundo, ciência de dados](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.br.png) +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) -> Um diagrama mostrando as relações entre IA, ML, aprendizado profundo e ciência de dados. Infográfico por [Jen Looper](https://twitter.com/jenlooper) inspirado por [este gráfico](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining). +> Um diagrama mostrando as relações entre IA, ML, aprendizado profundo e ciência de dados. Infográfico por [Jen Looper](https://twitter.com/jenlooper) inspirado por [este gráfico](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) --- ## Conceitos abordados @@ -99,21 +99,21 @@ Neste currículo, vamos abordar apenas os conceitos principais de aprendizado de - redes neurais - IA -Para proporcionar uma melhor experiência de aprendizado, evitaremos as complexidades de redes neurais, 'aprendizado profundo' - construção de modelos com muitas camadas usando redes neurais - e IA, que discutiremos em um currículo diferente. Também ofereceremos um currículo futuro de ciência de dados para focar nesse aspecto deste campo mais amplo. +Para proporcionar uma melhor experiência de aprendizado, evitaremos as complexidades de redes neurais, 'aprendizado profundo' - construção de modelos com muitas camadas usando redes neurais - e IA, que discutiremos em um currículo diferente. Também ofereceremos um futuro currículo de ciência de dados para focar nesse aspecto deste campo maior. --- ## Por que estudar aprendizado de máquina? -Aprendizado de máquina, do ponto de vista de sistemas, é definido como a criação de sistemas automatizados que podem aprender padrões ocultos a partir de dados para ajudar na tomada de decisões inteligentes. +Aprendizado de máquina, de uma perspectiva de sistemas, é definido como a criação de sistemas automatizados que podem aprender padrões ocultos a partir de dados para ajudar na tomada de decisões inteligentes. Essa motivação é vagamente inspirada por 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 gostaria de usar estratégias de aprendizado de máquina em vez de criar um mecanismo baseado em regras codificadas. +✅ Pense por um momento por que uma empresa gostaria de usar estratégias de aprendizado de máquina em vez de criar um mecanismo baseado em regras codificadas. --- ## Aplicações do aprendizado de máquina -As aplicações do aprendizado de máquina estão agora em quase todos os lugares e são tão onipresentes quanto os dados que circulam em nossas sociedades, gerados por nossos smartphones, dispositivos conectados e outros sistemas. Considerando o imenso potencial dos algoritmos de aprendizado de máquina de última geração, pesquisadores têm explorado sua capacidade de resolver problemas reais multidimensionais e multidisciplinares com ótimos resultados positivos. +As aplicações do aprendizado de máquina estão agora quase em todos os lugares e são tão onipresentes quanto os dados que circulam em nossas sociedades, gerados por nossos smartphones, dispositivos conectados e outros sistemas. Considerando o imenso potencial dos algoritmos de aprendizado de máquina de última geração, pesquisadores têm explorado sua capacidade de resolver problemas reais multidimensionais e multidisciplinares com ótimos resultados positivos. --- ## Exemplos de ML aplicado @@ -121,11 +121,11 @@ As aplicações do aprendizado de máquina estão agora em quase todos os lugare **Você pode usar aprendizado de máquina de várias maneiras**: - Para prever a probabilidade de uma doença com base no histórico médico ou relatórios de um paciente. -- Para usar dados meteorológicos e prever eventos climáticos. +- Para aproveitar dados meteorológicos e prever eventos climáticos. - Para entender o sentimento de um texto. - Para detectar notícias falsas e impedir a propagação de propaganda. -Finanças, economia, ciência da terra, exploração espacial, engenharia biomédica, ciência cognitiva e até mesmo áreas das ciências humanas têm adaptado o aprendizado de máquina para resolver os problemas árduos e pesados em processamento de dados de seus domínios. +Finanças, economia, ciência da terra, exploração espacial, engenharia biomédica, ciência cognitiva e até mesmo áreas das humanidades têm adaptado o aprendizado de máquina para resolver os problemas árduos e pesados em processamento de dados de seus domínios. --- ## Conclusão @@ -139,7 +139,7 @@ No futuro próximo, entender os fundamentos do aprendizado de máquina será ess Desenhe, no papel ou usando um aplicativo online como [Excalidraw](https://excalidraw.com/), sua compreensão das diferenças entre IA, ML, aprendizado profundo e ciência de dados. Adicione algumas ideias de problemas que cada uma dessas técnicas é boa em resolver. -# [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) --- # Revisão e Autoestudo @@ -156,4 +156,4 @@ Faça um [Caminho de Aprendizado](https://docs.microsoft.com/learn/modules/intro --- **Aviso Legal**: -Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional feita por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/br/1-Introduction/2-history-of-ML/README.md b/translations/br/1-Introduction/2-history-of-ML/README.md index 702384798..4e9877229 100644 --- a/translations/br/1-Introduction/2-history-of-ML/README.md +++ b/translations/br/1-Introduction/2-history-of-ML/README.md @@ -1,18 +1,18 @@ # História do aprendizado de máquina -![Resumo da história do aprendizado de máquina em um sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.br.png) +![Resumo da história do aprendizado de máquina em um sketchnote](../../../../sketchnotes/ml-history.png) > Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) --- @@ -22,7 +22,7 @@ CO_OP_TRANSLATOR_METADATA: Nesta lição, vamos explorar os principais marcos na história do aprendizado de máquina e da inteligência artificial. -A história da inteligência artificial (IA) como campo está entrelaçada com a história do aprendizado de máquina, já que os algoritmos e avanços computacionais que sustentam o aprendizado de máquina contribuíram para o desenvolvimento da IA. É útil lembrar que, embora esses campos como áreas distintas de estudo 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 a essa era. Na verdade, as pessoas têm pensado sobre essas questões por [centenas de anos](https://wikipedia.org/wiki/History_of_artificial_intelligence): este artigo discute os fundamentos intelectuais históricos da ideia de uma 'máquina pensante'. +A história da inteligência artificial (IA) como campo está entrelaçada com a história do aprendizado de máquina, já que os algoritmos e avanços computacionais que sustentam o aprendizado de máquina contribuíram para o desenvolvimento da IA. É útil lembrar que, embora esses campos como áreas distintas de estudo 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 a essa era. Na verdade, as pessoas têm pensado sobre essas questões por [centenas de anos](https://wikipedia.org/wiki/History_of_artificial_intelligence): este artigo discute as bases intelectuais históricas da ideia de uma 'máquina pensante'. --- ## Descobertas notáveis @@ -43,7 +43,7 @@ A história da inteligência artificial (IA) como campo está entrelaçada com a --- ## 1950: Máquinas que pensam -Alan Turing, uma pessoa verdadeiramente notável que foi eleito [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 estabelecer a base para o conceito de uma 'máquina que pode pensar'. Ele enfrentou críticos 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 PLN. +Alan Turing, uma pessoa verdadeiramente notável que foi eleito [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 estabelecer as bases para o conceito de uma 'máquina que pode pensar'. Ele enfrentou críticos 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 PLN. --- ## 1956: Projeto de Pesquisa de Verão em Dartmouth @@ -54,16 +54,16 @@ Alan Turing, uma pessoa verdadeiramente notável que foi eleito [pelo público e --- -O pesquisador principal, professor de matemática John McCarthy, esperava "prosseguir com base na conjectura de que todo aspecto de aprendizado ou qualquer outra característica da inteligência pode, em princípio, ser descrito tão precisamente que uma máquina pode ser feita para simulá-lo." Os participantes incluíram outro luminar no campo, Marvin Minsky. +O pesquisador principal, o professor de matemática John McCarthy, esperava "prosseguir com base na conjectura de que todo aspecto de aprendizado ou qualquer outra característica da inteligência pode, em princípio, ser descrito tão precisamente que uma máquina pode ser feita para simulá-lo." Os participantes incluíram outro grande nome do campo, Marvin Minsky. O workshop é creditado por ter iniciado e incentivado várias discussões, incluindo "a ascensão 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 70, o otimismo era alto na esperança de que a IA pudesse resolver muitos problemas. Em 1967, Marvin Minsky afirmou confiantemente 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) +Dos anos 1950 até meados dos anos 70, o otimismo era alto na esperança de que a IA pudesse resolver muitos problemas. Em 1967, Marvin Minsky afirmou confiantemente 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 busca foi refinada e tornou-se mais poderosa, e o conceito de 'micro-mundos' foi criado, onde tarefas simples eram realizadas usando instruções em linguagem comum. +Pesquisas em processamento de linguagem natural floresceram, buscas foram refinadas e tornadas mais poderosas, e o conceito de 'micro-mundos' foi criado, onde tarefas simples eram realizadas usando instruções em linguagem comum. --- @@ -71,14 +71,14 @@ A pesquisa foi bem financiada por agências governamentais, avanços foram feito * [Shakey, o robô](https://wikipedia.org/wiki/Shakey_the_robot), que podia se mover e decidir como realizar tarefas 'inteligentemente'. - ![Shakey, um robô inteligente](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.br.jpg) + ![Shakey, um robô inteligente](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > Shakey em 1972 --- * Eliza, um dos primeiros 'chatterbots', podia conversar com pessoas e agir como um 'terapeuta' primitivo. Você aprenderá mais sobre Eliza nas lições de PLN. - ![Eliza, um bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.br.png) + ![Eliza, um bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) > Uma versão de Eliza, um chatbot --- @@ -96,21 +96,21 @@ Por volta de meados dos anos 1970, tornou-se evidente que a complexidade de cria --- - **Limitações**. A capacidade computacional era muito limitada. - **Explosão combinatória**. A quantidade de parâmetros necessários para treinamento cresceu exponencialmente à medida que mais era exigido dos computadores, sem uma evolução paralela da capacidade computacional. -- **Escassez de dados**. Havia uma escassez de dados que dificultava o processo de testar, desenvolver e refinar algoritmos. +- **Escassez de dados**. Havia uma escassez de dados que dificultava o processo de teste, desenvolvimento e refinamento de algoritmos. - **Estamos fazendo as perguntas certas?**. As próprias perguntas que estavam sendo feitas começaram a ser questionadas. Pesquisadores começaram a enfrentar críticas sobre suas abordagens: - - Testes de Turing foram questionados por meio, entre outras ideias, da 'teoria da sala chinesa', que postulava que, "programar um computador digital pode fazer parecer que ele entende a linguagem, mas não poderia produzir compreensão real." ([fonte](https://plato.stanford.edu/entries/chinese-room/)) + - Testes de Turing foram questionados por meio, entre outras ideias, da 'teoria da sala chinesa', que postulava que "programar um computador digital pode fazê-lo parecer entender a linguagem, mas não poderia produzir compreensão real." ([fonte](https://plato.stanford.edu/entries/chinese-room/)) - A ética de introduzir inteligências artificiais como o "terapeuta" ELIZA na sociedade foi desafiada. --- -Ao mesmo tempo, várias escolas de pensamento sobre IA começaram a se formar. Uma dicotomia foi estabelecida entre práticas de ["IA bagunçada" vs. "IA organizada"](https://wikipedia.org/wiki/Neats_and_scruffies). Laboratórios _bagunçados_ ajustavam programas por horas até obterem os resultados desejados. Laboratórios _organizados_ "focavam em lógica e resolução formal de problemas". ELIZA e SHRDLU eram sistemas _bagunçados_ bem conhecidos. Nos anos 1980, à medida que surgiu a demanda por sistemas de aprendizado de máquina reproduzíveis, a abordagem _organizada_ gradualmente tomou a dianteira, pois seus resultados são mais explicáveis. +Ao mesmo tempo, várias escolas de pensamento em IA começaram a se formar. Uma dicotomia foi estabelecida entre práticas de ["IA desleixada" vs. "IA organizada"](https://wikipedia.org/wiki/Neats_and_scruffies). Laboratórios _desleixados_ ajustavam programas por horas até obterem os resultados desejados. Laboratórios _organizados_ "focavam em lógica e resolução formal de problemas". ELIZA e SHRDLU eram sistemas _desleixados_ bem conhecidos. Nos anos 1980, à medida que surgiu a demanda por sistemas de aprendizado de máquina reproduzíveis, a abordagem _organizada_ gradualmente tomou a dianteira, pois seus resultados são mais explicáveis. --- ## Sistemas especialistas nos anos 1980 À medida que o campo crescia, seus benefícios para os negócios tornaram-se mais claros, e nos anos 1980 também ocorreu a proliferação de 'sistemas especialistas'. "Sistemas especialistas estavam entre as primeiras formas verdadeiramente bem-sucedidas de software de inteligência artificial (IA)." ([fonte](https://wikipedia.org/wiki/Expert_system)). -Este tipo de sistema é, na verdade, _híbrido_, consistindo parcialmente de um motor de regras que define requisitos de negócios e um motor de inferência que utiliza o sistema de regras para deduzir novos fatos. +Este tipo de sistema é na verdade _híbrido_, consistindo parcialmente de um motor de regras que define requisitos de negócios e um motor de inferência que utiliza o sistema de regras para deduzir novos fatos. Esta era também viu uma atenção crescente às redes neurais. @@ -122,7 +122,7 @@ A proliferação de hardware especializado para sistemas especialistas teve o ef --- ## 1993 - 2011 -Este período viu uma nova era para o aprendizado de máquina e a IA resolverem alguns dos problemas causados anteriormente pela falta de dados e capacidade computacional. A quantidade de dados começou a aumentar rapidamente e se tornar mais amplamente disponível, para o bem e para o mal, especialmente com o advento do smartphone por volta de 2007. A capacidade computacional expandiu-se 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. +Este período viu uma nova era para o aprendizado de máquina e a IA, permitindo resolver alguns dos problemas causados anteriormente pela falta de dados e capacidade computacional. A quantidade de dados começou a aumentar rapidamente e se tornar mais amplamente disponível, para o bem e para o mal, especialmente com o advento do smartphone por volta de 2007. A capacidade computacional 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. --- ## Hoje @@ -141,10 +141,10 @@ Ainda não se sabe o que o futuro reserva, mas é importante entender esses sist Aprofunde-se em um desses momentos históricos e aprenda mais sobre as pessoas por trás deles. Há personagens fascinantes, e nenhuma descoberta científica foi criada em um vácuo cultural. O que você descobre? -## [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) --- -## Revisão e Autoestudo +## Revisão e autoestudo Aqui estão itens para assistir e ouvir: @@ -161,4 +161,4 @@ Aqui estão itens para assistir e ouvir: --- **Aviso Legal**: -Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/br/1-Introduction/3-fairness/README.md b/translations/br/1-Introduction/3-fairness/README.md index 652f676f2..c317fb4f1 100644 --- a/translations/br/1-Introduction/3-fairness/README.md +++ b/translations/br/1-Introduction/3-fairness/README.md @@ -1,24 +1,24 @@ # Construindo soluções de Machine Learning com IA responsável -![Resumo de IA responsável em Machine Learning em um sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.br.png) +![Resumo de IA responsável em Machine Learning em um sketchnote](../../../../sketchnotes/ml-fairness.png) > Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) ## Introdução -Neste currículo, você começará a descobrir como o aprendizado de máquina pode impactar e já está impactando nossas vidas cotidianas. Mesmo agora, sistemas e modelos estão envolvidos em tarefas de tomada de decisão diária, como diagnósticos de saúde, aprovações de empréstimos ou detecção de fraudes. Por isso, é importante que esses modelos funcionem bem para fornecer resultados confiáveis. Assim como qualquer aplicação de software, sistemas de IA podem falhar em atender às expectativas ou ter resultados indesejáveis. É por isso que é essencial entender e explicar o comportamento de um modelo de IA. +Neste currículo, você começará a descobrir como o aprendizado de máquina pode impactar e já está impactando nossas vidas cotidianas. Atualmente, sistemas e modelos estão envolvidos em tarefas de tomada de decisão diária, como diagnósticos de saúde, aprovações de empréstimos ou detecção de fraudes. Por isso, é importante que esses modelos funcionem bem para fornecer resultados confiáveis. Assim como qualquer aplicação de software, sistemas de IA podem não atender às expectativas ou ter resultados indesejáveis. É por isso que é essencial entender e explicar o comportamento de um modelo de IA. -Imagine o que pode acontecer quando os dados que você usa para construir esses modelos carecem de certos grupos demográficos, como raça, gênero, visão política, religião, ou representam esses grupos de forma desproporcional. E se a saída do modelo for interpretada de forma a favorecer algum grupo demográfico? Qual é a consequência para a aplicação? Além disso, o que acontece quando o modelo tem um resultado adverso e prejudica pessoas? Quem é responsável pelo comportamento dos sistemas de IA? Estas são algumas das questões que exploraremos neste currículo. +Imagine o que pode acontecer quando os dados usados para construir esses modelos carecem de certos grupos demográficos, como raça, gênero, visão política, religião, ou representam esses grupos de forma desproporcional. E se a saída do modelo for interpretada de forma a favorecer algum grupo demográfico? Qual é a consequência para a aplicação? Além disso, o que acontece quando o modelo tem um resultado adverso e prejudica pessoas? Quem é responsável pelo comportamento dos sistemas de IA? Estas são algumas das questões que exploraremos neste currículo. Nesta lição, você irá: @@ -27,7 +27,7 @@ Nesta lição, você irá: - Compreender a necessidade de capacitar todos ao projetar sistemas inclusivos. - Explorar como é vital proteger a privacidade e a segurança dos dados e das pessoas. - Ver a importância de ter uma abordagem transparente para explicar o comportamento dos modelos de IA. -- Ter em mente como a responsabilidade é essencial para construir confiança em sistemas de IA. +- Ser consciente de como a responsabilidade é essencial para construir confiança em sistemas de IA. ## Pré-requisito @@ -41,86 +41,86 @@ Saiba mais sobre IA Responsável seguindo este [Caminho de Aprendizado](https:// ## Equidade -Sistemas de IA devem tratar todos de forma justa e evitar afetar grupos semelhantes de pessoas de maneiras diferentes. Por exemplo, quando sistemas de IA fornecem orientações sobre tratamento médico, solicitações de empréstimos ou emprego, eles devem fazer as mesmas recomendações para todos com sintomas, circunstâncias financeiras ou qualificações profissionais semelhantes. Cada um de nós, como humanos, carrega preconceitos herdados que afetam nossas decisões e ações. Esses preconceitos podem ser evidentes nos dados que usamos para treinar sistemas de IA. Tal manipulação pode, às vezes, acontecer de forma não intencional. Muitas vezes, é difícil saber conscientemente quando você está introduzindo preconceito nos dados. +Sistemas de IA devem tratar todos de forma justa e evitar afetar grupos semelhantes de pessoas de maneiras diferentes. Por exemplo, quando sistemas de IA fornecem orientações sobre tratamento médico, solicitações de empréstimos ou emprego, eles devem fazer as mesmas recomendações para todos com sintomas, circunstâncias financeiras ou qualificações profissionais semelhantes. Cada um de nós, como seres humanos, carrega preconceitos herdados que afetam nossas decisões e ações. Esses preconceitos podem estar evidentes nos dados que usamos para treinar sistemas de IA. Essa manipulação pode, às vezes, acontecer de forma não intencional. Muitas vezes, é difícil perceber conscientemente quando você está introduzindo preconceitos nos dados. **“Injustiça”** abrange impactos negativos, ou “danos”, para um grupo de pessoas, como aqueles definidos em termos de raça, gênero, idade ou status de deficiência. Os principais danos relacionados à equidade podem ser classificados como: -- **Alocação**, se um gênero ou etnia, por exemplo, for favorecido em detrimento de outro. +- **Alocação**, quando, por exemplo, um gênero ou etnia é favorecido em detrimento de outro. - **Qualidade do serviço**. Se você treinar os dados para um cenário específico, mas a realidade for muito mais complexa, isso leva a um serviço de desempenho ruim. Por exemplo, um dispensador de sabão que não consegue detectar pessoas com pele escura. [Referência](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) - **Denigração**. Criticar ou rotular algo ou alguém de forma injusta. Por exemplo, uma tecnologia de rotulagem de imagens que infamemente rotulou imagens de pessoas de pele escura como gorilas. -- **Super ou sub-representação**. A ideia é que um determinado grupo não seja visto em uma certa profissão, e qualquer serviço ou função que continue promovendo isso está contribuindo para o dano. -- **Estereotipagem**. Associar um grupo específico a atributos pré-atribuídos. Por exemplo, um sistema de tradução de idiomas entre inglês e turco pode ter imprecisões devido a palavras com associações estereotipadas de gênero. +- **Super ou sub-representação**. A ideia de que um determinado grupo não é visto em uma certa profissão, e qualquer serviço ou função que continue promovendo isso está contribuindo para o dano. +- **Estereotipagem**. Associar um grupo específico a atributos pré-definidos. Por exemplo, um sistema de tradução entre inglês e turco pode ter imprecisões devido a palavras com associações estereotipadas de gênero. -![tradução para turco](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.br.png) +![tradução para turco](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > tradução para turco -![tradução de volta para inglês](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.br.png) +![tradução de volta para inglês](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) > tradução de volta para inglês Ao projetar e testar sistemas de IA, precisamos garantir que a IA seja justa e não programada para tomar decisões tendenciosas ou discriminatórias, que também são proibidas para seres humanos. Garantir equidade em IA e aprendizado de máquina continua sendo um desafio sociotécnico complexo. ### Confiabilidade e segurança -Para construir confiança, sistemas de IA precisam ser confiáveis, seguros e consistentes em condições normais e inesperadas. É importante saber como os sistemas de IA se comportarão em uma variedade de situações, especialmente quando são outliers. Ao construir soluções de IA, é necessário um foco substancial em como lidar com uma ampla variedade de circunstâncias que as soluções de IA encontrariam. Por exemplo, um carro autônomo precisa priorizar a segurança das pessoas. Como resultado, a IA que alimenta o carro precisa considerar todos os cenários possíveis que o carro poderia encontrar, como noite, tempestades, nevascas, crianças correndo pela rua, animais de estimação, construções na estrada, etc. Quão bem um sistema de IA pode lidar com uma ampla gama de condições de forma confiável e segura reflete o nível de antecipação que o cientista de dados ou desenvolvedor de IA considerou durante o design ou teste do sistema. +Para construir confiança, sistemas de IA precisam ser confiáveis, seguros e consistentes em condições normais e inesperadas. É importante saber como os sistemas de IA se comportarão em uma variedade de situações, especialmente quando são casos extremos. Ao construir soluções de IA, é necessário um foco substancial em como lidar com uma ampla variedade de circunstâncias que as soluções de IA podem encontrar. Por exemplo, um carro autônomo precisa priorizar a segurança das pessoas. Como resultado, a IA que alimenta o carro precisa considerar todos os cenários possíveis que o carro pode enfrentar, como noite, tempestades, nevascas, crianças correndo pela rua, animais de estimação, construções na estrada, etc. Quão bem um sistema de IA pode lidar com uma ampla gama de condições de forma confiável e segura reflete o nível de antecipação que o cientista de dados ou desenvolvedor de IA considerou durante o design ou teste do sistema. -> [🎥 Clique aqui para um vídeo: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) +> [🎥 Clique aqui para assistir ao vídeo: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) -### Inclusividade +### Inclusão -Sistemas de IA devem ser projetados para engajar e capacitar todos. Ao projetar e implementar sistemas de IA, cientistas de dados e desenvolvedores de IA identificam e abordam barreiras potenciais no sistema que poderiam excluir pessoas de forma não intencional. Por exemplo, há 1 bilhão de pessoas com deficiência ao redor do mundo. Com o avanço da IA, elas podem acessar uma ampla gama de informações e oportunidades mais facilmente em suas vidas diárias. Ao abordar as barreiras, cria-se oportunidades para inovar e desenvolver produtos de IA com melhores experiências que beneficiem a todos. +Sistemas de IA devem ser projetados para engajar e capacitar todos. Ao projetar e implementar sistemas de IA, cientistas de dados e desenvolvedores de IA identificam e abordam possíveis barreiras no sistema que poderiam excluir pessoas de forma não intencional. Por exemplo, existem 1 bilhão de pessoas com deficiência em todo o mundo. Com o avanço da IA, elas podem acessar uma ampla gama de informações e oportunidades mais facilmente em suas vidas diárias. Ao abordar as barreiras, cria-se oportunidades para inovar e desenvolver produtos de IA com melhores experiências que beneficiem todos. -> [🎥 Clique aqui para um vídeo: inclusividade em IA](https://www.microsoft.com/videoplayer/embed/RE4vl9v) +> [🎥 Clique aqui para assistir ao vídeo: inclusão em IA](https://www.microsoft.com/videoplayer/embed/RE4vl9v) ### Segurança e privacidade -Sistemas de IA devem ser seguros e respeitar a privacidade das pessoas. As pessoas têm menos confiança em sistemas que colocam sua privacidade, informações ou vidas em risco. Ao treinar modelos de aprendizado de máquina, dependemos de dados para produzir os melhores resultados. Ao fazer isso, a origem dos dados e sua integridade devem ser consideradas. Por exemplo, os dados foram enviados por usuários ou estão disponíveis publicamente? Em seguida, ao trabalhar com os dados, é crucial desenvolver sistemas de IA que possam proteger informações confidenciais e resistir a ataques. À medida que a IA se torna mais prevalente, proteger a privacidade e garantir a segurança de informações pessoais e empresariais importantes está se tornando mais crítico e complexo. Questões de privacidade e segurança de dados exigem atenção especial para IA porque o acesso aos dados é essencial para que os sistemas de IA façam previsões e decisões precisas e informadas sobre as pessoas. +Sistemas de IA devem ser seguros e respeitar a privacidade das pessoas. As pessoas têm menos confiança em sistemas que colocam sua privacidade, informações ou vidas em risco. Ao treinar modelos de aprendizado de máquina, dependemos de dados para produzir os melhores resultados. Ao fazer isso, a origem dos dados e sua integridade devem ser consideradas. Por exemplo, os dados foram enviados por usuários ou estão disponíveis publicamente? Além disso, ao trabalhar com os dados, é crucial desenvolver sistemas de IA que possam proteger informações confidenciais e resistir a ataques. À medida que a IA se torna mais prevalente, proteger a privacidade e garantir a segurança de informações pessoais e empresariais importantes está se tornando mais crítico e complexo. Questões de privacidade e segurança de dados exigem atenção especial para IA porque o acesso aos dados é essencial para que os sistemas de IA façam previsões e decisões precisas e informadas sobre as pessoas. -> [🎥 Clique aqui para um vídeo: segurança em IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) +> [🎥 Clique aqui para assistir ao vídeo: segurança em IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - Como indústria, fizemos avanços significativos em privacidade e segurança, impulsionados significativamente por regulamentações como o GDPR (Regulamento Geral de Proteção de Dados). - No entanto, com sistemas de IA, devemos reconhecer a tensão entre a necessidade de mais dados pessoais para tornar os sistemas mais personalizados e eficazes – e a privacidade. - Assim como com o nascimento de computadores conectados à internet, também estamos vendo um grande aumento no número de problemas de segurança relacionados à IA. -- Ao mesmo tempo, vimos a IA sendo usada para melhorar a segurança. Por exemplo, a maioria dos scanners antivírus modernos é impulsionada por heurísticas de IA hoje. -- Precisamos garantir que nossos processos de Ciência de Dados se harmonizem com as práticas mais recentes de privacidade e segurança. +- Ao mesmo tempo, vimos a IA sendo usada para melhorar a segurança. Por exemplo, a maioria dos scanners antivírus modernos é alimentada por heurísticas de IA. +- Precisamos garantir que nossos processos de ciência de dados se harmonizem com as práticas mais recentes de privacidade e segurança. ### Transparência -Sistemas de IA devem ser compreensíveis. Uma parte crucial da transparência é explicar o comportamento dos sistemas de IA e seus componentes. Melhorar a compreensão dos sistemas de IA exige que as partes interessadas compreendam como e por que eles funcionam, para que possam identificar possíveis problemas de desempenho, preocupações de segurança e privacidade, preconceitos, práticas excludentes ou resultados não intencionais. Também acreditamos que aqueles que usam sistemas de IA devem ser honestos e transparentes sobre quando, por que e como escolhem implantá-los, bem como as limitações dos sistemas que utilizam. Por exemplo, se um banco usa um sistema de IA para apoiar suas decisões de concessão de crédito ao consumidor, é importante examinar os resultados e entender quais dados influenciam as recomendações do sistema. Os governos estão começando a regulamentar a IA em diversos setores, então cientistas de dados e organizações devem explicar se um sistema de IA atende aos requisitos regulatórios, especialmente quando há um resultado indesejável. +Sistemas de IA devem ser compreensíveis. Uma parte crucial da transparência é explicar o comportamento dos sistemas de IA e seus componentes. Melhorar a compreensão dos sistemas de IA exige que as partes interessadas compreendam como e por que eles funcionam, para que possam identificar possíveis problemas de desempenho, preocupações de segurança e privacidade, preconceitos, práticas excludentes ou resultados indesejados. Também acreditamos que aqueles que usam sistemas de IA devem ser honestos e transparentes sobre quando, por que e como escolhem implantá-los, bem como sobre as limitações dos sistemas que utilizam. Por exemplo, se um banco usa um sistema de IA para apoiar suas decisões de empréstimos ao consumidor, é importante examinar os resultados e entender quais dados influenciam as recomendações do sistema. Governos estão começando a regulamentar a IA em diferentes indústrias, então cientistas de dados e organizações devem explicar se um sistema de IA atende aos requisitos regulatórios, especialmente quando há um resultado indesejável. -> [🎥 Clique aqui para um vídeo: transparência em IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) +> [🎥 Clique aqui para assistir ao vídeo: transparência em IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - Como os sistemas de IA são tão complexos, é difícil entender como eles funcionam e interpretar os resultados. - Essa falta de compreensão afeta a forma como esses sistemas são gerenciados, operacionalizados e documentados. -- Essa falta de compreensão, mais importante, afeta as decisões tomadas com base nos resultados que esses sistemas produzem. +- Mais importante ainda, essa falta de compreensão afeta as decisões tomadas com base nos resultados que esses sistemas produzem. ### Responsabilidade -As pessoas que projetam e implantam sistemas de IA devem ser responsáveis pelo funcionamento de seus sistemas. A necessidade de responsabilidade é particularmente crucial com tecnologias sensíveis, como reconhecimento facial. Recentemente, houve uma demanda crescente por tecnologia de reconhecimento facial, especialmente de organizações de aplicação da lei que veem o potencial da tecnologia em usos como encontrar crianças desaparecidas. No entanto, essas tecnologias poderiam ser usadas por um governo para colocar em risco as liberdades fundamentais de seus cidadãos, por exemplo, permitindo a vigilância contínua de indivíduos específicos. Portanto, cientistas de dados e organizações precisam ser responsáveis pelo impacto de seus sistemas de IA sobre indivíduos ou a sociedade. +As pessoas que projetam e implantam sistemas de IA devem ser responsáveis pelo funcionamento de seus sistemas. A necessidade de responsabilidade é particularmente crucial com tecnologias sensíveis, como reconhecimento facial. Recentemente, houve uma demanda crescente por tecnologia de reconhecimento facial, especialmente de organizações de aplicação da lei que veem o potencial da tecnologia em usos como encontrar crianças desaparecidas. No entanto, essas tecnologias podem ser usadas por um governo para colocar em risco as liberdades fundamentais de seus cidadãos, por exemplo, permitindo vigilância contínua de indivíduos específicos. Portanto, cientistas de dados e organizações precisam ser responsáveis pelo impacto de seus sistemas de IA sobre indivíduos ou a sociedade. -[![Pesquisador líder em IA alerta sobre vigilância em massa por meio de reconhecimento facial](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.br.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Abordagem da Microsoft para IA Responsável") +[![Pesquisador líder em IA alerta sobre vigilância em massa por meio de reconhecimento facial](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Abordagem da Microsoft para IA Responsável") -> 🎥 Clique na imagem acima para assistir ao vídeo: Alertas sobre Vigilância em Massa por Reconhecimento Facial +> 🎥 Clique na imagem acima para assistir ao vídeo: Alertas sobre vigilância em massa por meio de reconhecimento facial -Em última análise, uma das maiores questões para nossa geração, como a primeira geração que está trazendo IA para a sociedade, é como garantir que os computadores permaneçam responsáveis perante as pessoas e como garantir que as pessoas que projetam computadores permaneçam responsáveis perante todos os outros. +No final, uma das maiores questões para nossa geração, como a primeira geração que está trazendo IA para a sociedade, é como garantir que os computadores permaneçam responsáveis perante as pessoas e como garantir que as pessoas que projetam computadores permaneçam responsáveis perante todos os outros. ## Avaliação de impacto -Antes de treinar um modelo de aprendizado de máquina, é importante realizar uma avaliação de impacto para entender o propósito do sistema de IA; qual é o uso pretendido; onde será implantado; e quem interagirá com o sistema. Isso é útil para os revisores ou testadores que avaliam o sistema saberem quais fatores considerar ao identificar riscos potenciais e consequências esperadas. +Antes de treinar um modelo de aprendizado de máquina, é importante realizar uma avaliação de impacto para entender o propósito do sistema de IA; qual é o uso pretendido; onde ele será implantado; e quem interagirá com o sistema. Essas informações são úteis para os revisores ou testadores avaliarem o sistema e saberem quais fatores considerar ao identificar riscos potenciais e consequências esperadas. -As seguintes áreas são focos ao realizar uma avaliação de impacto: +As seguintes áreas devem ser focadas ao realizar uma avaliação de impacto: -* **Impacto adverso sobre indivíduos**. Estar ciente de quaisquer restrições ou requisitos, uso não suportado ou quaisquer limitações conhecidas que prejudiquem o desempenho do sistema é vital para garantir que o sistema não seja usado de forma que possa causar danos aos indivíduos. -* **Requisitos de dados**. Compreender como e onde o sistema usará dados permite que os revisores explorem quaisquer requisitos de dados que você precisaria considerar (por exemplo, regulamentações de dados como GDPR ou HIPAA). Além disso, examine se a origem ou quantidade de dados é substancial para o treinamento. -* **Resumo do impacto**. Reúna uma lista de possíveis danos que poderiam surgir do uso do sistema. Ao longo do ciclo de vida do aprendizado de máquina, revise se os problemas identificados foram mitigados ou abordados. +* **Impacto adverso sobre indivíduos**. Estar ciente de quaisquer restrições ou requisitos, uso não suportado ou limitações conhecidas que possam prejudicar o desempenho do sistema é vital para garantir que o sistema não seja usado de forma a causar danos às pessoas. +* **Requisitos de dados**. Compreender como e onde o sistema usará dados permite que os revisores explorem quaisquer requisitos de dados que você precise considerar (por exemplo, regulamentações de dados como GDPR ou HIPAA). Além disso, examine se a origem ou quantidade de dados é substancial para o treinamento. +* **Resumo do impacto**. Reúna uma lista de possíveis danos que podem surgir do uso do sistema. Ao longo do ciclo de vida do aprendizado de máquina, revise se os problemas identificados foram mitigados ou resolvidos. * **Metas aplicáveis** para cada um dos seis princípios fundamentais. Avalie se as metas de cada princípio foram atendidas e se há lacunas. ## Depuração com IA responsável -Semelhante à depuração de uma aplicação de software, depurar um sistema de IA é um processo necessário para identificar e resolver problemas no sistema. Há muitos fatores que podem afetar um modelo que não está funcionando como esperado ou de forma responsável. A maioria das métricas tradicionais de desempenho de modelos são agregados quantitativos do desempenho de um modelo, que não são suficientes para analisar como um modelo viola os princípios de IA responsável. Além disso, um modelo de aprendizado de máquina é uma caixa preta que dificulta entender o que impulsiona seu resultado ou fornecer explicações quando ele comete um erro. Mais adiante neste curso, aprenderemos como usar o painel de IA Responsável para ajudar a depurar sistemas de IA. O painel fornece uma ferramenta holística para cientistas de dados e desenvolvedores de IA realizarem: +Semelhante à depuração de uma aplicação de software, depurar um sistema de IA é um processo necessário para identificar e resolver problemas no sistema. Há muitos fatores que podem afetar o desempenho de um modelo ou sua responsabilidade. A maioria das métricas tradicionais de desempenho de modelos são agregados quantitativos do desempenho de um modelo, o que não é suficiente para analisar como um modelo viola os princípios de IA responsável. Além disso, um modelo de aprendizado de máquina é uma "caixa preta", o que dificulta entender o que impulsiona seus resultados ou fornecer explicações quando ele comete erros. Mais adiante neste curso, aprenderemos como usar o painel de IA Responsável para ajudar a depurar sistemas de IA. O painel fornece uma ferramenta holística para cientistas de dados e desenvolvedores de IA realizarem: * **Análise de erros**. Para identificar a distribuição de erros do modelo que pode afetar a equidade ou confiabilidade do sistema. * **Visão geral do modelo**. Para descobrir onde há disparidades no desempenho do modelo entre diferentes grupos de dados. -* **Análise de dados**. Para entender a distribuição dos dados e identificar qualquer potencial preconceito nos dados que poderia levar a problemas de equidade, inclusão e confiabilidade. +* **Análise de dados**. Para entender a distribuição dos dados e identificar possíveis preconceitos nos dados que possam levar a problemas de equidade, inclusão e confiabilidade. * **Interpretabilidade do modelo**. Para entender o que afeta ou influencia as previsões do modelo. Isso ajuda a explicar o comportamento do modelo, o que é importante para transparência e responsabilidade. ## 🚀 Desafio @@ -133,32 +133,32 @@ Para evitar que danos sejam introduzidos desde o início, devemos: Pense em cenários da vida real onde a falta de confiabilidade de um modelo é evidente na construção e uso do modelo. O que mais devemos considerar? -## [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) + ## Revisão e Autoestudo -Nesta lição, você aprendeu alguns conceitos básicos sobre justiça e injustiça em aprendizado de máquina. -Assista a este workshop para se aprofundar nos tópicos: +Nesta lição, você aprendeu alguns conceitos básicos sobre equidade e injustiça no aprendizado de máquina. +Assista a este workshop para se aprofundar nos tópicos: - Em busca de IA responsável: Colocando princípios em prática por Besmira Nushi, Mehrnoosh Sameki e Amit Sharma [![Responsible AI Toolbox: Um framework de código aberto para construir IA responsável](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Um framework de código aberto para construir IA responsável") - > 🎥 Clique na imagem acima para assistir ao vídeo: RAI Toolbox: Um framework de código aberto para construir IA responsável por Besmira Nushi, Mehrnoosh Sameki e Amit Sharma -Além disso, leia: +Além disso, leia: -- Centro de recursos de IA responsável da Microsoft: [Recursos de IA Responsável – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- Centro de recursos de IA responsável da Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- Grupo de pesquisa FATE da Microsoft: [FATE: Justiça, Responsabilidade, Transparência e Ética em IA - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- Grupo de pesquisa FATE da Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -RAI Toolbox: +RAI Toolbox: - [Repositório GitHub do Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) -Leia sobre as ferramentas do Azure Machine Learning para garantir justiça: +Leia sobre as ferramentas do Azure Machine Learning para garantir equidade: -- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) ## Tarefa diff --git a/translations/br/1-Introduction/4-techniques-of-ML/README.md b/translations/br/1-Introduction/4-techniques-of-ML/README.md index 7383d9bb7..88d126b0c 100644 --- a/translations/br/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/br/1-Introduction/4-techniques-of-ML/README.md @@ -1,8 +1,8 @@ # Introdução ao Python e Scikit-learn para modelos de regressão -![Resumo de regressões em um sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.br.png) +![Resumo de regressões em um sketchnote](../../../../sketchnotes/ml-regression.png) > Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) > ### [Esta lição está disponível em R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) @@ -25,7 +25,7 @@ Nesta lição, você aprenderá a: - Configurar seu computador para tarefas locais de aprendizado de máquina. - Trabalhar com notebooks Jupyter. -- Usar Scikit-learn, incluindo instalação. +- Utilizar Scikit-learn, incluindo sua instalação. - Explorar regressão linear com um exercício prático. ## Instalações e configurações @@ -34,9 +34,9 @@ Nesta lição, você aprenderá a: > 🎥 Clique na imagem acima para um vídeo curto sobre como configurar seu computador para ML. -1. **Instale o Python**. Certifique-se de que o [Python](https://www.python.org/downloads/) está instalado em seu computador. Você usará Python para muitas tarefas de ciência de dados e aprendizado de máquina. A maioria dos sistemas de computador já inclui uma instalação do Python. Também existem [Pacotes de Codificação Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) úteis disponíveis para facilitar a configuração para alguns usuários. +1. **Instale o Python**. Certifique-se de que o [Python](https://www.python.org/downloads/) está instalado em seu computador. Você usará Python para muitas tarefas de ciência de dados e aprendizado de máquina. A maioria dos sistemas de computador já inclui uma instalação do Python. Há também [Pacotes de Codificação Python](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) úteis disponíveis para facilitar a configuração para alguns usuários. - Algumas utilizações do Python, no entanto, exigem uma versão específica do software, enquanto outras exigem uma versão diferente. Por isso, é útil trabalhar dentro de um [ambiente virtual](https://docs.python.org/3/library/venv.html). + Algumas utilizações do Python, no entanto, exigem uma versão específica do software, enquanto outras requerem uma versão diferente. Por essa razão, é útil trabalhar dentro de um [ambiente virtual](https://docs.python.org/3/library/venv.html). 2. **Instale o Visual Studio Code**. Certifique-se de que o Visual Studio Code está instalado em seu computador. Siga estas instruções para [instalar o Visual Studio Code](https://code.visualstudio.com/) para a instalação básica. Você usará Python no Visual Studio Code neste curso, então pode ser útil revisar como [configurar o Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) para desenvolvimento em Python. @@ -46,7 +46,7 @@ Nesta lição, você aprenderá a: > > 🎥 Clique na imagem acima para um vídeo: usando Python no VS Code. -3. **Instale o Scikit-learn**, seguindo [estas instruções](https://scikit-learn.org/stable/install.html). Como você precisa garantir que está usando Python 3, é recomendado que use um ambiente virtual. Observe que, se estiver instalando esta biblioteca em um Mac M1, há instruções especiais na página vinculada acima. +3. **Instale o Scikit-learn**, seguindo [estas instruções](https://scikit-learn.org/stable/install.html). Como você precisa garantir que está usando Python 3, é recomendado que utilize um ambiente virtual. Note que, se estiver instalando esta biblioteca em um Mac M1, há instruções especiais na página vinculada acima. 4. **Instale o Jupyter Notebook**. Você precisará [instalar o pacote Jupyter](https://pypi.org/project/jupyter/). @@ -60,28 +60,28 @@ Notebooks são um ambiente interativo que permite ao desenvolvedor tanto codific > 🎥 Clique na imagem acima para um vídeo curto sobre este exercício. -### Exercício - trabalhar com um notebook +### 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+. Você encontrará áreas do notebook que podem ser `executadas`, pedaços de código. Você pode executar um bloco de código selecionando o ícone que parece um botão de play. + Um servidor Jupyter será iniciado com Python 3+. Você encontrará áreas do notebook que podem ser `executadas`, pedaços de código. Você 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 markdown, e o seguinte texto **# Bem-vindo ao seu notebook**. +2. Selecione o ícone `md` e adicione um pouco de markdown, com o seguinte texto **# Bem-vindo ao seu notebook**. Em seguida, adicione algum código Python. 3. Digite **print('hello notebook')** no bloco de código. 4. Selecione a seta para executar o código. - Você deve ver a declaração impressa: + Você deverá ver a declaração impressa: ```output hello notebook ``` -![VS Code com um notebook aberto](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.br.jpg) +![VS Code com um notebook aberto](../../../../2-Regression/1-Tools/images/notebook.jpg) Você pode intercalar seu código com comentários para auto-documentar o notebook. @@ -89,25 +89,25 @@ Você pode intercalar seu código com comentários para auto-documentar o notebo ## Começando com Scikit-learn -Agora que o Python está configurado em seu ambiente local e você está confortável com notebooks Jupyter, vamos nos familiarizar igualmente com o Scikit-learn (pronuncia-se `sci` como em `science`). O Scikit-learn fornece uma [API extensa](https://scikit-learn.org/stable/modules/classes.html#api-ref) para ajudá-lo a realizar tarefas de ML. +Agora que o Python está configurado em seu ambiente local e você está confortável com notebooks Jupyter, vamos nos familiarizar com o Scikit-learn (pronuncia-se `sci` como em `science`). O Scikit-learn fornece uma [API extensa](https://scikit-learn.org/stable/modules/classes.html#api-ref) para ajudá-lo a realizar tarefas de ML. De acordo com seu [site](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn é uma biblioteca de aprendizado de máquina de código aberto que suporta aprendizado supervisionado e não supervisionado. Também fornece várias ferramentas para ajuste 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 aprendizado de máquina para realizar o que chamamos de tarefas de 'aprendizado de máquina tradicional'. Evitamos deliberadamente redes neurais e aprendizado profundo, pois eles são melhor abordados em nosso próximo currículo 'IA para Iniciantes'. +Neste curso, você usará Scikit-learn e outras ferramentas para construir modelos de aprendizado de máquina para realizar o que chamamos de tarefas de 'aprendizado de máquina tradicional'. Evitamos deliberadamente redes neurais e aprendizado profundo, pois eles são melhor abordados em nosso futuro currículo 'AI para Iniciantes'. O Scikit-learn torna simples construir modelos e avaliá-los para uso. Ele é focado principalmente em usar dados numéricos e contém vários conjuntos de dados prontos para uso como ferramentas de aprendizado. Também inclui modelos pré-construídos para os alunos experimentarem. Vamos explorar o processo de carregar dados pré-empacotados e usar um estimador para criar o primeiro modelo de ML com Scikit-learn usando alguns dados básicos. -## Exercício - seu primeiro notebook com Scikit-learn +## Exercício - Seu primeiro notebook com 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) no site do Scikit-learn. -[![ML para iniciantes - Seu Primeiro Projeto de Regressão Linear em Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para iniciantes - Seu Primeiro Projeto de Regressão Linear em Python") +[![ML para iniciantes - Seu primeiro projeto de regressão linear em Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML para iniciantes - Seu primeiro projeto de regressão linear em Python") > 🎥 Clique na imagem acima para um vídeo curto sobre este exercício. No arquivo _notebook.ipynb_ associado a esta lição, limpe todas as células pressionando o ícone de 'lixeira'. -Nesta seção, você trabalhará com um pequeno conjunto de dados sobre diabetes que está embutido no Scikit-learn para fins de aprendizado. Imagine que você queria testar um tratamento para pacientes diabéticos. Modelos de aprendizado de máquina podem ajudá-lo a determinar quais pacientes 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 ajudariam a organizar seus ensaios clínicos teóricos. +Nesta seção, você trabalhará com um pequeno conjunto de dados sobre diabetes que está embutido no Scikit-learn para fins de aprendizado. Imagine que você deseja testar um tratamento para pacientes diabéticos. Modelos de aprendizado de máquina podem ajudá-lo a determinar quais pacientes 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 ajudariam a organizar seus ensaios clínicos teóricos. ✅ Existem muitos tipos de métodos de regressão, e qual você escolhe depende da resposta que está procurando. Se você quiser prever a altura provável de uma pessoa de uma determinada idade, usaria regressão linear, pois está buscando um **valor numérico**. Se estiver interessado em descobrir se um tipo de culinária deve ser considerado vegano ou não, estará buscando uma **atribuição de categoria**, então usaria regressão logística. Você aprenderá mais sobre regressão logística mais tarde. Pense um pouco sobre algumas perguntas que você pode fazer aos dados e qual desses métodos seria mais apropriado. @@ -146,7 +146,7 @@ O [conjunto de dados de diabetes](https://scikit-learn.org/stable/datasets/toy_d Agora, carregue os dados X e y. -> 🎓 Lembre-se, este é aprendizado supervisionado, e precisamos de um alvo 'y' nomeado. +> 🎓 Lembre-se, este é aprendizado supervisionado, e precisamos de um 'y' alvo nomeado. Em uma nova célula de código, carregue o conjunto de dados de diabetes chamando `load_diabetes()`. O parâmetro `return_X_y=True` indica que `X` será uma matriz de dados e `y` será o alvo da regressão. @@ -170,7 +170,7 @@ Em uma nova célula de código, carregue o conjunto de dados de diabetes chamand ✅ Pense um pouco sobre a relação entre os dados e o alvo da regressão. A regressão linear prevê relações entre a característica X e a variável alvo y. Você consegue encontrar o [alvo](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) para o conjunto de dados de diabetes na documentação? O que este conjunto de dados está demonstrando, dado o alvo? -2. Em seguida, selecione uma parte deste conjunto de dados para plotar, escolhendo a 3ª coluna do conjunto de dados. Você pode fazer isso usando o operador `:` para selecionar todas as linhas e, em seguida, selecionar a 3ª coluna usando o índice (2). Você também pode remodelar os dados para serem uma matriz 2D - conforme necessário para plotagem - usando `reshape(n_rows, n_columns)`. Se um dos parâmetros for -1, a dimensão correspondente será calculada automaticamente. +2. Em seguida, selecione uma parte deste conjunto de dados para plotar, escolhendo a 3ª coluna do conjunto de dados. Você pode fazer isso usando o operador `:` para selecionar todas as linhas e, em seguida, selecionando a 3ª coluna usando o índice (2). Você também pode remodelar os dados para serem um array 2D - conforme necessário para plotagem - usando `reshape(n_rows, n_columns)`. Se um dos parâmetros for -1, a dimensão correspondente será calculada automaticamente. ```python X = X[:, 2] @@ -179,7 +179,7 @@ Em uma nova célula de código, carregue o conjunto de dados de diabetes chamand ✅ A qualquer momento, imprima os dados para verificar sua forma. -3. Agora que você tem os dados prontos para serem plotados, pode ver se uma máquina pode ajudar a determinar uma divisão lógica entre os números neste conjunto de dados. Para fazer isso, você precisa dividir tanto os dados (X) quanto o alvo (y) em conjuntos de teste e treinamento. O Scikit-learn tem uma maneira simples de fazer isso; você pode dividir seus dados de teste em um ponto específico. +3. Agora que você tem os dados prontos para serem plotados, pode verificar se uma máquina pode ajudar a determinar uma divisão lógica entre os números neste conjunto de dados. Para fazer isso, você precisa dividir tanto os dados (X) quanto o alvo (y) em conjuntos de teste e treinamento. O Scikit-learn tem uma maneira simples de fazer isso; você pode dividir seus dados de teste em um ponto específico. ```python X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) @@ -211,23 +211,23 @@ Em uma nova célula de código, carregue o conjunto de dados de diabetes chamand plt.show() ``` - ![um gráfico de dispersão mostrando pontos de dados sobre diabetes](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.br.png) -✅ Pense um pouco sobre o que está acontecendo aqui. Uma linha reta está passando por muitos pequenos pontos de dados, mas o que exatamente ela está fazendo? Você consegue perceber como deveria ser possível usar essa linha para prever onde um novo ponto de dados, ainda não visto, deveria se encaixar em relação ao eixo y do gráfico? Tente colocar em palavras o uso prático desse modelo. + ![um gráfico de dispersão mostrando pontos de dados sobre diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Pense um pouco sobre o que está acontecendo aqui. Uma linha reta está passando por muitos pequenos pontos de dados, mas o que exatamente ela está fazendo? Você consegue perceber como essa linha pode ser usada para prever onde um novo ponto de dados, ainda não visto, deve se encaixar em relação ao eixo y do gráfico? Tente colocar em palavras a utilidade prática desse modelo. -Parabéns, você construiu seu primeiro modelo de regressão linear, fez uma previsão com ele e a exibiu em um gráfico! +Parabéns, você construiu seu primeiro modelo de regressão linear, criou uma previsão com ele e a exibiu em um gráfico! --- ## 🚀Desafio -Faça o gráfico de uma variável diferente deste conjunto de dados. Dica: edite esta linha: `X = X[:,2]`. Dado o alvo deste conjunto de dados, o que você consegue descobrir sobre a progressão do diabetes como uma doença? +Plote uma variável diferente deste conjunto de dados. Dica: edite esta linha: `X = X[:,2]`. Dado o alvo deste conjunto de dados, o que você consegue descobrir sobre a progressão do diabetes como uma doença? -## [Questionário pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) ## Revisão e Autoestudo -Neste tutorial, você trabalhou com regressão linear simples, em vez de regressão univariada ou múltipla. Leia um pouco sobre as diferenças entre esses métodos ou dê uma olhada [neste vídeo](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). +Neste tutorial, você trabalhou com regressão linear simples, em vez de regressão univariada ou múltipla. Leia um pouco sobre as diferenças entre esses métodos ou assista a [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 em que tipos de perguntas podem ser respondidas por essa técnica. Faça este [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para aprofundar seu entendimento. +Leia mais sobre o conceito de regressão e pense sobre quais tipos de perguntas podem ser respondidas por essa técnica. Faça este [tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) para aprofundar seu entendimento. ## Tarefa diff --git a/translations/br/2-Regression/2-Data/README.md b/translations/br/2-Regression/2-Data/README.md index ff421ac43..dd9601ba9 100644 --- a/translations/br/2-Regression/2-Data/README.md +++ b/translations/br/2-Regression/2-Data/README.md @@ -1,46 +1,46 @@ # Construir um modelo de regressão usando Scikit-learn: preparar e visualizar dados -![Infográfico de visualização de dados](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.br.png) +![Infográfico de visualização de dados](../../../../2-Regression/2-Data/images/data-visualization.png) Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) > ### [Esta lição está disponível em R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) ## Introdução -Agora que você já configurou as ferramentas necessárias para começar a construir modelos de aprendizado de máquina com Scikit-learn, está pronto para começar a fazer perguntas sobre seus dados. Ao trabalhar com dados e aplicar soluções de aprendizado de máquina, é muito importante saber como fazer a pergunta certa para desbloquear adequadamente o potencial do seu conjunto de dados. +Agora que você está equipado com as ferramentas necessárias para começar a construir modelos de aprendizado de máquina com Scikit-learn, está pronto para começar a fazer perguntas sobre seus dados. Ao trabalhar com dados e aplicar soluções de aprendizado de máquina, é muito importante saber como fazer as perguntas certas para desbloquear adequadamente o potencial do seu conjunto de dados. Nesta lição, você aprenderá: - Como preparar seus dados para a construção de modelos. - Como usar o Matplotlib para visualização de dados. -## Fazendo a pergunta certa sobre seus dados +## Fazendo as perguntas certas sobre seus dados A pergunta que você precisa responder determinará o tipo de algoritmos de aprendizado de máquina que você usará. E a qualidade da resposta que você obtém dependerá muito da natureza dos seus dados. -Dê uma olhada nos [dados](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) fornecidos para esta lição. Você pode abrir este arquivo .csv no VS Code. Uma rápida olhada mostra imediatamente que há lacunas e uma mistura de dados numéricos e de texto. Há também uma coluna estranha chamada 'Package', onde os dados são uma mistura de 'sacks', 'bins' e outros valores. Os dados, na verdade, estão um pouco bagunçados. +Dê uma olhada nos [dados](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) fornecidos para esta lição. Você pode abrir este arquivo .csv no VS Code. Uma rápida olhada mostra imediatamente que há lacunas e uma mistura de dados em formato de texto e numérico. Há também uma coluna estranha chamada 'Package', onde os dados são uma mistura de 'sacks', 'bins' e outros valores. Os dados, na verdade, estão um pouco bagunçados. [![ML para iniciantes - Como analisar e limpar um conjunto de dados](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML para iniciantes - Como analisar e limpar um conjunto de dados") > 🎥 Clique na imagem acima para assistir a um vídeo curto sobre como preparar os dados para esta lição. -De fato, não é muito comum receber um conjunto de dados completamente pronto para criar um modelo de aprendizado de máquina imediatamente. Nesta lição, você aprenderá como preparar um conjunto de dados bruto usando bibliotecas padrão do Python. Você também aprenderá várias técnicas para visualizar os dados. +Na verdade, não é muito comum receber um conjunto de dados completamente pronto para criar um modelo de aprendizado de máquina. Nesta lição, você aprenderá como preparar um conjunto de dados bruto usando bibliotecas padrão do Python. Você também aprenderá várias técnicas para visualizar os dados. ## Estudo de caso: 'o mercado de abóboras' -Nesta pasta, você encontrará um arquivo .csv na pasta raiz `data` chamado [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), que inclui 1757 linhas de dados sobre o mercado de abóboras, organizados por cidade. Estes são dados brutos extraídos dos [Relatórios Padrão de Mercados de Culturas Especiais](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuídos pelo Departamento de Agricultura dos Estados Unidos. +Nesta pasta, você encontrará um arquivo .csv na pasta raiz `data` chamado [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), que inclui 1757 linhas de dados sobre o mercado de abóboras, organizados em agrupamentos por cidade. Estes são dados brutos extraídos dos [Relatórios Padrão dos Mercados de Produtos Especiais](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuídos pelo Departamento de Agricultura dos Estados Unidos. ### Preparando os dados @@ -48,24 +48,24 @@ Esses dados estão em domínio público. Eles podem ser baixados em vários arqu ### Os dados das abóboras - primeiras conclusões -O que você percebe sobre esses dados? Você já viu que há uma mistura de textos, números, lacunas e valores estranhos que precisam ser interpretados. +O que você percebe sobre esses dados? Você já viu que há uma mistura de textos, números, lacunas e valores estranhos que você precisa interpretar. -Que pergunta você pode fazer sobre esses dados, usando uma técnica de Regressão? Que tal "Prever o preço de uma abóbora à venda em um determinado mês"? Olhando novamente para os dados, há algumas mudanças que você precisa fazer para criar a estrutura de dados necessária para essa tarefa. +Que pergunta você pode fazer sobre esses dados, usando uma técnica de regressão? Que tal "Prever o preço de uma abóbora à venda durante um determinado mês"? Olhando novamente para os dados, há algumas mudanças que você precisa fazer para criar a estrutura de dados necessária para essa tarefa. ## Exercício - analisar os dados das abóboras -Vamos usar o [Pandas](https://pandas.pydata.org/), (o nome significa `Python Data Analysis`) uma ferramenta muito útil para manipular dados, para analisar e preparar esses dados de abóboras. +Vamos usar o [Pandas](https://pandas.pydata.org/) (o nome significa `Python Data Analysis`), uma ferramenta muito útil para modelar dados, para analisar e preparar esses dados de abóboras. ### Primeiro, verifique se há datas ausentes -Primeiro, você precisará tomar medidas para verificar se há datas ausentes: +Você precisará primeiro tomar medidas para verificar se há datas ausentes: -1. Converta as datas para o formato de mês (essas são datas dos EUA, então o formato é `MM/DD/YYYY`). +1. Converta as datas para o formato de mês (estas são datas dos EUA, então o formato é `MM/DD/YYYY`). 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 dataframe do Pandas. -1. Use a função `head()` para visualizar as primeiras cinco linhas. +1. Use a função `head()` para visualizar as cinco primeiras linhas. ```python import pandas as pd @@ -73,7 +73,7 @@ Abra o arquivo _notebook.ipynb_ no Visual Studio Code e importe a planilha para pumpkins.head() ``` - ✅ Que função você usaria para visualizar as últimas cinco linhas? + ✅ Qual função você usaria para visualizar as últimas cinco linhas? 1. Verifique se há dados ausentes no dataframe atual: @@ -94,7 +94,7 @@ Abra o arquivo _notebook.ipynb_ no Visual Studio Code e importe a planilha para Pense em como determinar o preço médio de uma abóbora em um determinado mês. Quais colunas você escolheria para essa tarefa? Dica: você precisará de 3 colunas. -Solução: calcule a média das colunas `Low Price` e `High Price` para preencher a nova coluna Price, e converta a coluna Date para mostrar apenas o mês. Felizmente, de acordo com a verificação acima, não há dados ausentes para datas ou preços. +Solução: calcule a média das colunas `Low Price` e `High Price` para preencher a nova coluna Price e converta a coluna Date 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: @@ -105,7 +105,7 @@ Solução: calcule a média das colunas `Low Price` e `High Price` para preenche ``` - ✅ Sinta-se à vontade para imprimir quaisquer dados que desejar verificar usando `print(month)`. + ✅ Sinta-se à vontade para imprimir qualquer dado que desejar verificar usando `print(month)`. 2. Agora, copie seus dados convertidos para um novo dataframe do Pandas: @@ -113,27 +113,27 @@ Solução: calcule a média das colunas `Low Price` e `High Price` para preenche new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) ``` - Imprimir seu dataframe mostrará um conjunto de dados limpo e organizado no qual você pode construir seu novo modelo de regressão. + Imprimir 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ê olhar para a coluna `Package`, verá que as abóboras são vendidas em muitas configurações diferentes. Algumas são vendidas em medidas de '1 1/9 bushel', outras em '1/2 bushel', algumas por unidade, algumas por peso, e outras em grandes caixas de larguras variadas. +Se você olhar para a coluna `Package`, verá que as abóboras são vendidas em muitas configurações diferentes. Algumas são vendidas em medidas de '1 1/9 bushel', outras em '1/2 bushel', algumas por unidade, algumas por peso e outras em grandes caixas com larguras variadas. > Parece que é muito difícil pesar abóboras de forma consistente -Analisando os dados originais, é interessante notar que qualquer coisa com `Unit of Sale` igual a 'EACH' ou 'PER BIN' também tem o tipo `Package` por polegada, por bin ou 'each'. Parece que é muito difícil pesar abóboras de forma consistente, então vamos filtrá-las selecionando apenas as abóboras com a string 'bushel' na coluna `Package`. +Ao investigar os dados originais, é interessante notar que qualquer coisa com `Unit of Sale` igual a 'EACH' ou 'PER BIN' também tem o tipo `Package` por polegada, por bin ou 'each'. Parece que é muito difícil pesar abóboras de forma consistente, então vamos filtrá-las selecionando apenas abóboras com a string 'bushel' na coluna `Package`. -1. Adicione um filtro no topo do arquivo, logo após a importação inicial do .csv: +1. Adicione um filtro no início do arquivo, sob a 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 está obtendo apenas as cerca de 415 linhas de dados contendo abóboras por bushel. + Se você imprimir os dados agora, verá que está obtendo apenas cerca de 415 linhas de dados contendo abóboras por bushel. ### Mas espere! Há mais uma coisa a fazer -Você percebeu que a quantidade de bushel varia por linha? Você precisa normalizar os preços para mostrar o preço por bushel, então faça alguns cálculos para padronizá-lo. +Você percebeu que a quantidade de bushel varia por linha? Você precisa normalizar os preços para mostrar o preço por bushel, então faça alguns cálculos para padronizá-los. 1. Adicione estas linhas após o bloco que cria o dataframe new_pumpkins: @@ -143,21 +143,21 @@ Você percebeu que a quantidade de bushel varia por linha? Você precisa normali 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 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 verduras ocupam mais espaço com menos peso, então um bushel de espinafre pesa apenas 20 libras." É tudo bem complicado! Vamos evitar fazer uma conversão de bushel para libra e, em vez disso, precificar por bushel. Todo esse estudo sobre bushels de abóboras, no entanto, mostra como é muito importante entender a natureza dos seus dados! +✅ De acordo com [The 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 verduras ocupam mais espaço com menos peso, então um bushel de espinafre pesa apenas 20 libras." É tudo muito complicado! Vamos evitar fazer uma conversão de bushel para libra e, em vez disso, precificar por bushel. Todo esse estudo sobre bushels de abóboras, no entanto, mostra como é muito importante entender a natureza dos seus dados! Agora, você pode analisar os preços por unidade com base na medida de bushel. Se você imprimir os dados mais uma vez, verá como eles estão padronizados. -✅ Você percebeu que as abóboras vendidas por meio bushel são muito caras? Consegue 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 ocupado por uma grande abóbora oca para torta. +✅ Você percebeu que abóboras vendidas por meio bushel são muito caras? Consegue descobrir por quê? Dica: abóboras pequenas são muito mais caras do que grandes, provavelmente porque há muito mais delas por bushel, dado o espaço não utilizado ocupado por uma grande abóbora oca para torta. ## Estratégias de visualização -Parte do papel do cientista de dados é demonstrar a qualidade e a natureza dos dados com os quais está trabalhando. Para isso, eles frequentemente criam visualizações interessantes, como gráficos de dispersão, gráficos de barras e outros, mostrando diferentes aspectos dos dados. Dessa forma, eles conseguem mostrar visualmente relações e lacunas que, de outra forma, seriam difíceis de identificar. +Parte do papel do cientista de dados é demonstrar a qualidade e a natureza dos dados com os quais está trabalhando. Para isso, eles frequentemente criam visualizações interessantes, como gráficos, diagramas e tabelas, mostrando diferentes aspectos dos dados. Dessa forma, eles conseguem mostrar visualmente relações e lacunas que, de outra forma, seriam difíceis de identificar. [![ML para iniciantes - Como visualizar dados com Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML para iniciantes - Como visualizar dados com Matplotlib") > 🎥 Clique na imagem acima para assistir a um vídeo curto sobre como visualizar os dados para esta lição. -As 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. +As 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 bons candidatos para um exercício de regressão linear. Uma biblioteca de visualização de dados que funciona bem em notebooks Jupyter é o [Matplotlib](https://matplotlib.org/) (que você também viu na lição anterior). @@ -167,14 +167,14 @@ Uma biblioteca de visualização de dados que funciona bem em notebooks Jupyter 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 o Matplotlib no topo do arquivo, logo após a importação do Pandas: +1. Importe o Matplotlib no início do arquivo, sob a importação do Pandas: ```python import matplotlib.pyplot as plt ``` 1. Execute novamente todo o notebook para atualizar. -1. No final do notebook, adicione uma célula para plotar os dados como um gráfico de dispersão: +1. No final do notebook, adicione uma célula para plotar os dados como um boxplot: ```python price = new_pumpkins.Price @@ -183,15 +183,15 @@ Tente criar alguns gráficos básicos para exibir o novo dataframe que você aca plt.show() ``` - ![Um gráfico de dispersão mostrando a relação entre preço e mês](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.br.png) + ![Um gráfico de dispersão mostrando a relação entre preço e mês](../../../../2-Regression/2-Data/images/scatterplot.png) - Este é um gráfico útil? Algo nele te surpreende? + Este gráfico é útil? Algo nele te surpreende? - Não é particularmente útil, pois tudo o que faz é exibir seus dados como uma dispersão de pontos em um determinado mês. + Não é particularmente útil, pois tudo o que faz é exibir seus dados como uma distribuição de pontos em um determinado mês. ### Torne-o útil -Para que os gráficos exibam dados úteis, geralmente é necessário agrupar os dados de alguma forma. Vamos tentar criar um gráfico onde o eixo y mostre os meses e os dados demonstrem a distribuição. +Para que os gráficos exibam dados úteis, geralmente é necessário agrupar os dados de alguma forma. Vamos tentar criar um gráfico onde o eixo y mostra os meses e os dados demonstram a distribuição. 1. Adicione uma célula para criar um gráfico de barras agrupado: @@ -200,9 +200,9 @@ Para que os gráficos exibam dados úteis, geralmente é necessário agrupar os plt.ylabel("Pumpkin Price") ``` - ![Um gráfico de barras mostrando a relação entre preço e mês](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.br.png) + ![Um gráfico de barras mostrando a relação entre preço e mês](../../../../2-Regression/2-Data/images/barchart.png) - Este é um gráfico de dados mais útil! Parece indicar que o preço mais alto das abóboras ocorre em setembro e outubro. Isso corresponde à sua expectativa? Por quê? + Este é um gráfico de visualização de dados mais útil! Parece indicar que o preço mais alto das abóboras ocorre em setembro e outubro. Isso corresponde à sua expectativa? Por quê? --- @@ -210,15 +210,15 @@ Para que os gráficos exibam dados úteis, geralmente é necessário agrupar os Explore os diferentes tipos de visualização que o Matplotlib oferece. Quais tipos são mais apropriados para problemas de regressão? -## [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) ## Revisão e Autoestudo -Dê uma olhada nas várias maneiras de visualizar dados. Faça uma lista das diferentes bibliotecas disponíveis e anote quais são melhores para determinados tipos de tarefas, por exemplo, visualizações 2D vs. 3D. O que você descobre? +Dê uma olhada nas várias maneiras de visualizar dados. Faça uma lista das diferentes bibliotecas disponíveis e anote quais são melhores para determinados tipos de tarefas, por exemplo, visualizações 2D versus visualizações 3D. O que você descobre? ## Tarefa -[Explorando visualizações](assignment.md) +[Explorando visualização](assignment.md) --- diff --git a/translations/br/2-Regression/3-Linear/README.md b/translations/br/2-Regression/3-Linear/README.md index f7446ff4a..657351fbb 100644 --- a/translations/br/2-Regression/3-Linear/README.md +++ b/translations/br/2-Regression/3-Linear/README.md @@ -1,24 +1,24 @@ # Construir um modelo de regressão usando Scikit-learn: regressão de quatro maneiras -![Infográfico de regressão linear vs polinomial](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.br.png) +![Infográfico de regressão linear vs polinomial](../../../../2-Regression/3-Linear/images/linear-polynomial.png) > Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) > ### [Esta lição está disponível em R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### Introdução Até agora, você explorou o que é regressão com dados de exemplo coletados do conjunto de dados de preços de abóbora que usaremos ao longo desta lição. Você também os visualizou usando Matplotlib. -Agora você está pronto para mergulhar mais fundo na regressão para aprendizado de máquina. Embora a visualização permita que você compreenda os dados, o verdadeiro poder do aprendizado de máquina vem do _treinamento de modelos_. Os modelos são treinados com dados históricos para capturar automaticamente as dependências dos dados e permitem prever resultados para novos dados que o modelo ainda não viu. +Agora você está pronto para mergulhar mais fundo na regressão para aprendizado de máquina. Embora a visualização permita que você compreenda os dados, o verdadeiro poder do aprendizado de máquina vem do _treinamento de modelos_. Modelos são treinados com dados históricos para capturar automaticamente as dependências dos dados e permitem prever resultados para novos dados que o modelo ainda não viu. Nesta lição, você aprenderá mais sobre dois tipos de regressão: _regressão linear básica_ e _regressão polinomial_, juntamente com algumas das matemáticas subjacentes a essas técnicas. Esses modelos nos permitirão prever os preços das abóboras dependendo de diferentes dados de entrada. @@ -26,7 +26,7 @@ Nesta lição, você aprenderá mais sobre dois tipos de regressão: _regressão > 🎥 Clique na imagem acima para um breve vídeo sobre regressão linear. -> Ao longo deste currículo, assumimos conhecimento mínimo de matemática e buscamos torná-lo acessível para estudantes de outras áreas. Fique atento a notas, 🧮 destaques, diagramas e outras ferramentas de aprendizado para ajudar na compreensão. +> Ao longo deste currículo, assumimos conhecimento mínimo de matemática e buscamos torná-lo acessível para estudantes de outras áreas. Fique atento a notas, 🧮 chamadas, diagramas e outras ferramentas de aprendizado para ajudar na compreensão. ### Pré-requisito @@ -36,7 +36,7 @@ Você já deve estar familiarizado com a estrutura dos dados de abóbora que est Como lembrete, você está carregando esses dados para fazer perguntas sobre eles. -- Qual é o melhor momento para comprar abóboras? +- Qual é o melhor momento para comprar abóboras? - Qual preço posso esperar por uma caixa de abóboras em miniatura? - Devo comprá-las em cestas de meio alqueire ou em caixas de 1 1/9 alqueire? Vamos continuar explorando esses dados. @@ -50,9 +50,9 @@ Dê uma olhada nos dados que pré-carregamos no notebook que acompanha esta liç Como você aprendeu na Lição 1, o objetivo de um exercício de regressão linear é ser capaz de traçar uma linha para: - **Mostrar relações entre variáveis**. Mostrar a relação entre variáveis -- **Fazer previsões**. Fazer previsões precisas sobre onde um novo ponto de dados cairia em relação a essa 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 elevados ao quadrado e depois somados. Idealmente, essa soma final é o menor possível, porque queremos um número baixo de erros, ou `mínimos quadrados`. +- **Fazer previsões**. Fazer previsões precisas sobre onde um novo ponto de dados cairia em relação a essa 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 elevados ao quadrado e depois somados. Idealmente, essa soma final é o menor possível, porque queremos um número baixo 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 somá-los, pois estamos preocupados com sua magnitude, em vez de sua direção. @@ -66,13 +66,13 @@ Fazemos isso porque queremos modelar uma linha que tenha a menor distância cumu > > `X` é a 'variável explicativa'. `Y` é a 'variável dependente'. A inclinação da linha é `b` e `a` é o intercepto no eixo Y, que se refere ao valor de `Y` quando `X = 0`. > ->![calcular a inclinação](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.br.png) +>![calcular a inclinação](../../../../2-Regression/3-Linear/images/slope.png) > > Primeiro, calcule a inclinação `b`. Infográfico por [Jen Looper](https://twitter.com/jenlooper) > -> Em outras palavras, referindo-se à pergunta original dos dados de abóbora: "prever o preço de uma abóbora por alqueire por mês", `X` se referiria ao preço e `Y` ao mês de venda. +> Em outras palavras, e referindo-se à pergunta original dos dados de abóbora: "prever o preço de uma abóbora por alqueire por mês", `X` se referiria ao preço e `Y` ao mês de venda. > ->![completar a equação](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.br.png) +>![completar a equação](../../../../2-Regression/3-Linear/images/calculation.png) > > Calcule o valor de Y. Se você está pagando cerca de $4, deve ser abril! Infográfico por [Jen Looper](https://twitter.com/jenlooper) > @@ -82,11 +82,11 @@ Fazemos isso porque queremos modelar uma linha que tenha a menor distância cumu ## Correlação -Outro termo importante para entender é 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 em uma linha organizada tem alta correlação, mas um gráfico com pontos de dados espalhados por toda parte entre X e Y tem baixa correlação. +Outro termo importante para entender é 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 em uma linha ordenada tem alta correlação, mas um gráfico com pontos de dados espalhados por toda parte entre X e Y tem baixa correlação. Um bom modelo de regressão linear será aquele que tem um Coeficiente de Correlação alto (mais próximo de 1 do que de 0) usando o método de Mínimos Quadrados com uma linha de regressão. -✅ Execute o notebook que acompanha esta lição e observe o gráfico de dispersão de Mês para Preço. Os dados que associam Mês ao Preço das vendas de abóbora parecem ter alta ou baixa correlação, de acordo com sua interpretação visual do gráfico de dispersão? Isso muda se você usar uma medida mais detalhada em vez de `Mês`, como *dia do ano* (ou seja, número de dias desde o início do ano)? +✅ Execute o notebook que acompanha esta lição e observe o gráfico de dispersão de Mês para Preço. Os dados que associam Mês ao Preço para vendas de abóbora parecem ter alta ou baixa correlação, de acordo com sua interpretação visual do gráfico de dispersão? Isso muda se você usar uma medida mais detalhada em vez de `Mês`, como *dia do ano* (ou seja, número de dias desde o início do ano)? No código abaixo, assumiremos que limpamos os dados e obtivemos um data frame chamado `new_pumpkins`, semelhante ao seguinte: @@ -98,7 +98,7 @@ ID | Mês | DiaDoAno | Variedade | Cidade | Embalagem | Preço Baixo | Preço Al 73 | 10 | 274 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | TIPO TORTA | BALTIMORE | 1 1/9 caixas de alqueire | 15.0 | 15.0 | 13.636364 -> O código para limpar os dados está disponível em [`notebook.ipynb`](notebook.ipynb). Realizamos os mesmos passos de limpeza da lição anterior e calculamos a coluna `DiaDoAno` usando a seguinte expressão: +> O código para limpar os dados está disponível em [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Realizamos os mesmos passos de limpeza da lição anterior e calculamos a coluna `DiaDoAno` usando a seguinte expressão: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) @@ -172,7 +172,7 @@ Outra abordagem seria preencher esses valores vazios com valores médios da colu > 🎥 Clique na imagem acima para um breve vídeo sobre regressão linear e polinomial. -Para treinar nosso modelo de Regressão Linear, usaremos a biblioteca **Scikit-learn**. +Para treinar nosso modelo de regressão linear, usaremos a biblioteca **Scikit-learn**. ```python from sklearn.linear_model import LinearRegression @@ -187,7 +187,7 @@ X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Note que tivemos que realizar `reshape` nos dados de entrada para que o pacote de Regressão Linear os entendesse corretamente. A Regressão Linear espera um array 2D como entrada, onde cada linha do array corresponde a um vetor de características de entrada. No nosso caso, como temos apenas uma entrada, precisamos de um array com formato N×1, onde N é o tamanho do conjunto de dados. +> Note que tivemos que realizar `reshape` nos dados de entrada para que o pacote de regressão linear os entendesse corretamente. A regressão linear espera um array 2D como entrada, onde cada linha do array corresponde a um vetor de características de entrada. No nosso caso, como temos apenas uma entrada, precisamos de um array com formato N×1, onde N é o tamanho do conjunto de dados. Depois, precisamos dividir os dados em conjuntos de treino e teste, para que possamos validar nosso modelo após o treinamento: @@ -195,7 +195,7 @@ Depois, precisamos dividir os dados em conjuntos de treino e teste, para que pos X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -Finalmente, treinar o modelo de Regressão Linear real leva apenas duas linhas de código. Definimos o objeto `LinearRegression` e ajustamos aos nossos dados usando o método `fit`: +Finalmente, treinar o modelo de regressão linear real leva apenas duas linhas de código. Definimos o objeto `LinearRegression` e ajustamos aos nossos dados usando o método `fit`: ```python lin_reg = LinearRegression() @@ -204,7 +204,7 @@ lin_reg.fit(X_train,y_train) O objeto `LinearRegression` após o ajuste (`fit`) contém todos os coeficientes da regressão, que podem ser acessados usando a propriedade `.coef_`. No nosso caso, há apenas um coeficiente, que deve ser em torno de `-0.017`. Isso significa que os preços parecem cair um pouco com o tempo, mas não muito, cerca de 2 centavos por dia. Também podemos acessar o ponto de interseção da regressão com o eixo Y usando `lin_reg.intercept_` - será em torno de `21` no nosso caso, indicando o preço no início do ano. -Para ver quão preciso nosso modelo é, podemos prever preços em um conjunto de dados de teste e, em seguida, medir quão próximas nossas previsões estão dos valores esperados. Isso pode ser feito usando a métrica de erro quadrático médio (MSE), que é a média de todas as diferenças ao quadrado entre o valor esperado e o valor previsto. +Para ver quão preciso nosso modelo é, podemos prever preços em um conjunto de dados de teste e, em seguida, medir quão próximas nossas previsões estão dos valores esperados. Isso pode ser feito usando a métrica de erro quadrático médio (MSE), que é a média de todas as diferenças quadradas entre o valor esperado e o valor previsto. ```python pred = lin_reg.predict(X_test) @@ -241,7 +241,7 @@ Observe novamente a relação entre Data e Preço. Esse gráfico de dispersão p A regressão polinomial cria uma linha curva para ajustar melhor os dados não lineares. No nosso caso, se incluirmos uma variável `DayOfYear` ao quadrado nos dados de entrada, devemos ser capazes de ajustar nossos dados com uma curva parabólica, que terá um mínimo em um determinado ponto do ano. -O Scikit-learn inclui uma [API de pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) útil para combinar diferentes etapas de processamento de dados. Um **pipeline** é uma cadeia de **estimadores**. No nosso caso, criaremos um pipeline que primeiro adiciona recursos polinomiais ao nosso modelo e, em seguida, treina a regressão: +O Scikit-learn inclui uma [API de pipeline](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) útil para combinar diferentes etapas de processamento de dados. Um **pipeline** é uma cadeia de **estimadores**. No nosso caso, criaremos um pipeline que primeiro adiciona características polinomiais ao nosso modelo e, em seguida, treina a regressão: ```python from sklearn.preprocessing import PolynomialFeatures @@ -252,7 +252,7 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -Usar `PolynomialFeatures(2)` significa que incluiremos todos os polinômios de segundo grau dos dados de entrada. No nosso caso, isso significará apenas `DayOfYear`2, mas, dado duas variáveis de entrada X e Y, isso adicionará X2, XY e Y2. Também podemos usar polinômios de grau mais alto, se quisermos. +Usar `PolynomialFeatures(2)` significa que incluiremos todos os polinômios de segundo grau dos dados de entrada. No nosso caso, isso significará apenas `DayOfYear`2, mas, dado duas variáveis de entrada X e Y, isso adicionará X2, XY e Y2. Também podemos usar polinômios de grau superior, se quisermos. Os pipelines podem ser usados da mesma maneira que o objeto original `LinearRegression`, ou seja, podemos usar `fit` no pipeline e, em seguida, usar `predict` para obter os resultados da previsão. Aqui está o gráfico mostrando os dados de teste e a curva de aproximação: @@ -262,15 +262,15 @@ Usando Regressão Polinomial, podemos obter um MSE ligeiramente menor e um coefi > Você pode ver que os preços mínimos das abóboras são observados em algum momento próximo ao Halloween. Como você explicaria isso? -🎃 Parabéns, você acabou de criar um modelo que pode ajudar a prever o preço de abóboras para torta. Você provavelmente pode repetir o mesmo procedimento para todos os tipos de abóbora, mas isso seria tedioso. Vamos aprender agora como levar em conta a variedade de abóbora no nosso modelo! +🎃 Parabéns, você acabou de criar um modelo que pode ajudar a prever o preço das abóboras para torta. Você provavelmente pode repetir o mesmo procedimento para todos os tipos de abóbora, mas isso seria tedioso. Vamos aprender agora como levar em conta a variedade de abóbora no nosso modelo! -## Recursos Categóricos +## Características Categóricas No mundo ideal, queremos ser capazes de prever preços para diferentes variedades de abóbora usando o mesmo modelo. No entanto, a coluna `Variety` é um pouco diferente de colunas como `Month`, porque contém valores não numéricos. Essas colunas são chamadas de **categóricas**. -[![ML para iniciantes - Previsões com Recursos Categóricos usando Regressão Linear](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML para iniciantes - Previsões com Recursos Categóricos usando Regressão Linear") +[![ML para iniciantes - Previsões com características categóricas usando Regressão Linear](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML para iniciantes - Previsões com características categóricas usando Regressão Linear") -> 🎥 Clique na imagem acima para um breve vídeo sobre o uso de recursos categóricos. +> 🎥 Clique na imagem acima para um breve vídeo sobre o uso de características categóricas. Aqui você pode ver como o preço médio depende da variedade: @@ -298,14 +298,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -Para treinar a regressão linear usando a variedade codificada como one-hot como entrada, só precisamos inicializar os dados `X` e `y` corretamente: +Para treinar a regressão linear usando a variedade codificada como one-hot nos dados de entrada, só precisamos inicializar os dados `X` e `y` corretamente: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -O restante do código é o mesmo que usamos acima para treinar a Regressão Linear. Se você tentar, verá que o erro médio quadrático é aproximadamente o mesmo, mas obtemos um coeficiente de determinação muito maior (~77%). Para obter previsões ainda mais precisas, podemos levar em conta mais recursos categóricos, bem como recursos numéricos, como `Month` ou `DayOfYear`. Para obter um grande array de recursos, podemos usar `join`: +O restante do código é o mesmo que usamos acima para treinar a Regressão Linear. Se você tentar, verá que o erro médio quadrático é aproximadamente o mesmo, mas obtemos um coeficiente de determinação muito maior (~77%). Para obter previsões ainda mais precisas, podemos levar em conta mais características categóricas, bem como características numéricas, como `Month` ou `DayOfYear`. Para obter um grande array de características, podemos usar `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -354,8 +354,8 @@ Isso deve nos dar o melhor coeficiente de determinação de quase 97% e MSE=2.23 | `DayOfYear` Linear | 2.77 (17.2%) | 0.07 | | `DayOfYear` Polinomial | 2.73 (17.0%) | 0.08 | | `Variety` Linear | 5.24 (19.7%) | 0.77 | -| Todos os recursos Linear | 2.84 (10.5%) | 0.94 | -| Todos os recursos Polinomial | 2.23 (8.25%) | 0.97 | +| Todas as características Linear | 2.84 (10.5%) | 0.94 | +| Todas as características Polinomial | 2.23 (8.25%) | 0.97 | 🏆 Muito bem! Você criou quatro modelos de Regressão em uma única lição e melhorou a qualidade do modelo para 97%. Na seção final sobre Regressão, você aprenderá sobre Regressão Logística para determinar categorias. @@ -364,7 +364,7 @@ Isso deve nos dar o melhor coeficiente de determinação de quase 97% e MSE=2.23 Teste várias variáveis diferentes neste notebook para ver como a correlação corresponde à precisão do modelo. -## [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) ## Revisão e Autoestudo diff --git a/translations/br/2-Regression/4-Logistic/README.md b/translations/br/2-Regression/4-Logistic/README.md index b37a8d728..c61dbdc50 100644 --- a/translations/br/2-Regression/4-Logistic/README.md +++ b/translations/br/2-Regression/4-Logistic/README.md @@ -1,50 +1,50 @@ # Regressão logística para prever categorias -![Infográfico de regressão logística vs. linear](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.br.png) +![Infográfico de regressão logística vs. regressão linear](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) -> ### [Esta lição está disponível em R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) +> ### [Esta aula está disponível em R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) ## Introdução -Nesta última lição sobre Regressão, uma das técnicas básicas _clássicas_ de ML, vamos explorar a Regressão Logística. Você usaria essa técnica para descobrir padrões e prever categorias binárias. Este doce é chocolate ou não? Esta doença é contagiosa ou não? Este cliente escolherá este produto ou não? +Nesta última aula sobre Regressão, uma das técnicas básicas _clássicas_ de ML, vamos explorar a Regressão Logística. Você usaria essa técnica para descobrir padrões e prever categorias binárias. Este doce é chocolate ou não? Esta doença é contagiosa ou não? Este cliente escolherá este produto ou não? -Nesta lição, você aprenderá: +Nesta aula, você aprenderá: - Uma nova biblioteca para visualização de dados -- Técnicas para regressão logística +- Técnicas de regressão logística -✅ Aprofunde seu entendimento sobre como trabalhar com este tipo de regressão neste [módulo do Learn](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) +✅ Aprofunde seu entendimento sobre como trabalhar com este tipo de regressão neste [módulo de aprendizado](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) ## Pré-requisito -Depois de trabalhar com os dados de abóboras, já estamos familiarizados o suficiente para perceber que há uma categoria binária com a qual podemos trabalhar: `Color`. +Depois de trabalhar com os dados de abóbora, já estamos suficientemente familiarizados para perceber que há uma categoria binária com a qual podemos trabalhar: `Color`. -Vamos construir um modelo de regressão logística para prever, com base em algumas variáveis, _qual é a cor provável de uma abóbora_ (laranja 🎃 ou branca 👻). +Vamos construir um modelo de regressão logística para prever, com base em algumas variáveis, _qual é a cor provável de uma determinada abóbora_ (laranja 🎃 ou branca 👻). -> Por que estamos falando de classificação binária em uma lição sobre regressão? Apenas por conveniência linguística, já que a regressão logística é [na verdade um método de classificação](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), embora baseado em um modelo linear. Aprenda sobre outras formas de classificar dados no próximo grupo de lições. +> Por que estamos falando de classificação binária em uma aula sobre regressão? Apenas por conveniência linguística, já que a regressão logística é [na verdade um método de classificação](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), embora baseado em linearidade. Aprenda sobre outras formas de classificar dados no próximo grupo de aulas. ## Definir a pergunta Para nossos propósitos, vamos expressar isso como um binário: 'Branca' ou 'Não Branca'. Há também uma categoria 'listrada' em nosso conjunto de dados, mas há poucas instâncias dela, então não a utilizaremos. Ela desaparece quando removemos valores nulos do conjunto de dados, de qualquer forma. -> 🎃 Curiosidade: às vezes chamamos abóboras brancas de abóboras 'fantasmas'. Elas não são muito fáceis de esculpir, então não são tão populares quanto as laranjas, mas têm uma aparência interessante! Assim, também poderíamos reformular nossa pergunta como: 'Fantasma' ou 'Não Fantasma'. 👻 +> 🎃 Curiosidade: às vezes chamamos abóboras brancas de abóboras 'fantasma'. Elas não são muito fáceis de esculpir, então não são tão populares quanto as laranjas, mas têm uma aparência interessante! Assim, poderíamos reformular nossa pergunta como: 'Fantasma' ou 'Não Fantasma'. 👻 ## Sobre regressão logística A regressão logística difere da regressão linear, que você aprendeu anteriormente, em alguns aspectos importantes. -[![ML para iniciantes - Entendendo Regressão Logística para Classificação em Machine Learning](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML para iniciantes - Entendendo Regressão Logística para Classificação em Machine Learning") +[![ML para iniciantes - Entendendo a Regressão Logística para Classificação de Machine Learning](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML para iniciantes - Entendendo a Regressão Logística para Classificação de Machine Learning") > 🎥 Clique na imagem acima para um breve vídeo sobre regressão logística. @@ -52,7 +52,7 @@ A regressão logística difere da regressão linear, que você aprendeu anterior A regressão logística não oferece os mesmos recursos que a regressão linear. A primeira oferece uma previsão sobre uma categoria binária ("branca ou não branca"), enquanto a segunda é capaz de prever valores contínuos, por exemplo, dado a origem de uma abóbora e o tempo de colheita, _quanto seu preço aumentará_. -![Modelo de classificação de abóboras](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.br.png) +![Modelo de classificação de abóbora](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) > Infográfico por [Dasani Madipalli](https://twitter.com/dasani_decoded) ### Outras classificações @@ -60,13 +60,13 @@ A regressão logística não oferece os mesmos recursos que a regressão linear. Existem outros tipos de regressão logística, incluindo multinomial e ordinal: - **Multinomial**, que envolve mais de uma categoria - "Laranja, Branca e Listrada". -- **Ordinal**, que envolve categorias ordenadas, útil se quisermos ordenar nossos resultados logicamente, como nossas abóboras ordenadas por um número finito de tamanhos (mini,pequeno,médio,grande,xl,xxl). +- **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, pequeno, médio, grande, extra grande, extra extra grande). -![Regressão multinomial vs ordinal](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.br.png) +![Regressão multinomial vs ordinal](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) ### As variáveis NÃO precisam ser correlacionadas -Lembra como a regressão linear funcionava melhor com variáveis mais correlacionadas? A regressão logística é o oposto - as variáveis não precisam estar alinhadas. Isso funciona para este conjunto de dados, que tem correlações um tanto fracas. +Lembra como a regressão linear funcionava melhor com variáveis mais correlacionadas? A regressão logística é o oposto - as variáveis não precisam estar alinhadas. Isso funciona para este conjunto de dados, que tem correlações relativamente fracas. ### Você precisa de muitos dados limpos @@ -80,7 +80,7 @@ A regressão logística fornecerá resultados mais precisos se você usar mais d ## Exercício - organizar os dados -Primeiro, limpe os dados um pouco, removendo valores nulos e selecionando apenas algumas colunas: +Primeiro, limpe os dados, removendo valores nulos e selecionando apenas algumas colunas: 1. Adicione o seguinte código: @@ -100,11 +100,11 @@ Primeiro, limpe os dados um pouco, removendo valores nulos e selecionando apenas ### Visualização - gráfico categórico -Agora que você carregou o [notebook inicial](./notebook.ipynb) com os dados de abóboras novamente e os limpou para preservar um conjunto de dados contendo algumas variáveis, incluindo `Color`, vamos visualizar o dataframe no notebook usando uma biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que é construída sobre o Matplotlib que usamos anteriormente. +Agora você carregou o [notebook inicial](../../../../2-Regression/4-Logistic/notebook.ipynb) com os dados de abóbora novamente e os limpou para preservar um conjunto de dados contendo algumas variáveis, incluindo `Color`. Vamos visualizar o dataframe no notebook usando uma biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que é construída sobre o Matplotlib que usamos anteriormente. -O Seaborn oferece algumas maneiras interessantes de visualizar seus dados. Por exemplo, você pode comparar distribuições dos dados para cada `Variety` e `Color` em um gráfico categórico. +Seaborn oferece algumas maneiras interessantes de visualizar seus dados. Por exemplo, você pode comparar distribuições dos dados para cada `Variety` e `Color` em um gráfico categórico. -1. Crie tal gráfico usando a função `catplot`, com os dados de abóboras `pumpkins`, e especificando um mapeamento de cores para cada categoria de abóbora (laranja ou branca): +1. Crie tal gráfico usando a função `catplot`, com os dados de abóbora `pumpkins`, e especificando um mapeamento de cores para cada categoria de abóbora (laranja ou branca): ```python import seaborn as sns @@ -120,7 +120,7 @@ O Seaborn oferece algumas maneiras interessantes de visualizar seus dados. Por e ) ``` - ![Uma grade de dados visualizados](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.br.png) + ![Uma grade de dados visualizados](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) Observando os dados, você pode ver como os dados de `Color` se relacionam com `Variety`. @@ -128,11 +128,11 @@ O Seaborn oferece algumas maneiras interessantes de visualizar seus dados. Por e ### Pré-processamento de dados: codificação de características e rótulos -Nosso conjunto de dados de abóboras contém valores de string para todas as suas colunas. Trabalhar com dados categóricos é intuitivo para humanos, mas não para máquinas. Os algoritmos de aprendizado de máquina funcionam bem com números. Por isso, a codificação é uma etapa muito importante na fase de pré-processamento de dados, pois permite transformar dados categóricos em dados numéricos, sem perder informações. Uma boa codificação leva à construção de um bom modelo. +Nosso conjunto de dados de abóboras contém valores de string para todas as suas colunas. Trabalhar com dados categóricos é intuitivo para humanos, mas não para máquinas. Algoritmos de aprendizado de máquina funcionam bem com números. É por isso que a codificação é uma etapa muito importante na fase de pré-processamento de dados, pois nos permite transformar dados categóricos em dados numéricos, sem perder nenhuma informação. Uma boa codificação leva à construção de um bom modelo. -Para a codificação de características, existem dois principais tipos de codificadores: +Para codificação de características, existem dois tipos principais de codificadores: -1. Codificador ordinal: é adequado para variáveis ordinais, que são variáveis categóricas cujos dados seguem uma ordem lógica, como a coluna `Item Size` em nosso conjunto de dados. Ele cria um mapeamento em que cada categoria é representada por um número, que é a ordem da categoria na coluna. +1. Codificador ordinal: é adequado para variáveis ordinais, que são variáveis categóricas cujos dados seguem uma ordem lógica, como a coluna `Item Size` em nosso conjunto de dados. Ele cria um mapeamento de forma que cada categoria seja representada por um número, que é a ordem da categoria na coluna. ```python from sklearn.preprocessing import OrdinalEncoder @@ -151,7 +151,7 @@ Para a codificação de características, existem dois principais tipos de codif categorical_encoder = OneHotEncoder(sparse_output=False) ``` -Depois, `ColumnTransformer` é usado para combinar múltiplos codificadores em uma única etapa e aplicá-los às colunas apropriadas. +Então, `ColumnTransformer` é usado para combinar múltiplos codificadores em uma única etapa e aplicá-los às colunas apropriadas. ```python from sklearn.compose import ColumnTransformer @@ -206,15 +206,15 @@ A melhor maneira de realizar esse tipo de análise é plotando os dados. Usaremo g.set_titles(row_template="{row_name}") ``` -![Um catplot de dados visualizados](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.br.png) +![Um gráfico categórico de dados visualizados](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) -### Usar um gráfico de dispersão (swarm plot) +### Usar um gráfico de dispersão Como `Color` é uma categoria binária (Branca ou Não), ela precisa de '[uma abordagem especializada](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) para visualização'. Existem outras maneiras de visualizar a relação dessa categoria com outras variáveis. Você pode visualizar variáveis lado a lado com gráficos do Seaborn. -1. Experimente um gráfico de dispersão ('swarm') para mostrar a distribuição de valores: +1. Experimente um gráfico de dispersão ('swarm plot') para mostrar a distribuição de valores: ```python palette = { @@ -224,17 +224,17 @@ Você pode visualizar variáveis lado a lado com gráficos do Seaborn. sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) ``` - ![Um gráfico de dispersão de dados visualizados](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.br.png) + ![Um gráfico de dispersão de dados visualizados](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**Atenção**: o código acima pode gerar um aviso, já que o Seaborn pode falhar ao representar tal quantidade de pontos de dados em um gráfico de dispersão. Uma solução possível é diminuir o tamanho do marcador, usando o parâmetro 'size'. No entanto, esteja ciente de que isso pode afetar a legibilidade do gráfico. +**Atenção**: o código acima pode gerar um aviso, já que o Seaborn pode falhar ao representar uma quantidade tão grande de pontos de dados em um gráfico de dispersão. Uma solução possível é diminuir o tamanho do marcador, usando o parâmetro 'size'. No entanto, esteja ciente de que isso afeta a legibilidade do gráfico. > **🧮 Mostre-me a Matemática** > -> A regressão logística baseia-se no conceito de 'máxima verossimilhança' usando [funções sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Uma 'Função Sigmoide' em um gráfico parece uma forma de '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: +> A regressão logística se baseia no conceito de 'máxima verossimilhança' usando [funções sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Uma 'Função Sigmoide' em um gráfico tem a 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: > -> ![função logística](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.br.png) +> ![função logística](../../../../2-Regression/4-Logistic/images/sigmoid.png) > -> onde o ponto médio da sigmoide encontra-se 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 será classificado como '1' da escolha binária. Caso contrário, será classificado como '0'. +> onde o ponto médio da sigmoide encontra-se 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 será atribuído à classe '1' da escolha binária. Caso contrário, será classificado como '0'. ## Construir seu modelo @@ -242,7 +242,7 @@ Construir um modelo para encontrar essas classificações binárias é surpreend [![ML para iniciantes - Regressão Logística para classificação de dados](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML para iniciantes - Regressão Logística para classificação de dados") -> 🎥 Clique na imagem acima para um breve vídeo sobre como construir um modelo de regressão linear. +> 🎥 Clique na imagem acima para um breve vídeo sobre construção de um modelo de regressão linear. 1. Selecione as variáveis que deseja usar em seu modelo de classificação e divida os conjuntos de treinamento e teste chamando `train_test_split()`: @@ -271,7 +271,7 @@ Construir um modelo para encontrar essas classificações binárias é surpreend print('F1-score: ', f1_score(y_test, predictions)) ``` - Veja o desempenho do seu modelo. Não é ruim, considerando que você tem apenas cerca de 1000 linhas de dados: + Veja o desempenho do seu modelo. Não está ruim, considerando que você tem apenas cerca de 1000 linhas de dados: ```output precision recall f1-score support @@ -292,9 +292,9 @@ Construir um modelo para encontrar essas classificações binárias é surpreend F1-score: 0.7457627118644068 ``` -## Melhor compreensão por meio de uma matriz de confusão +## Melhor compreensão via uma matriz de confusão -Embora você possa obter um relatório de desempenho [termos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) imprimindo os itens acima, talvez seja mais fácil entender seu modelo usando uma [matriz de confusão](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para ajudar a entender como o modelo está se saindo. +Embora você possa obter um relatório de desempenho [termos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) imprimindo os itens acima, talvez consiga entender seu modelo mais facilmente usando uma [matriz de confusão](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para ajudar a entender como o modelo está se saindo. > 🎓 Uma '[matriz de confusão](https://wikipedia.org/wiki/Confusion_matrix)' (ou 'matriz de erro') é uma tabela que expressa os verdadeiros vs. falsos positivos e negativos do seu modelo, avaliando assim a precisão das previsões. @@ -312,7 +312,7 @@ Embora você possa obter um relatório de desempenho [termos](https://scikit-lea [ 11, 22]]) ``` -No Scikit-learn, as linhas (eixo 0) da matriz de confusão são os rótulos reais e as colunas (eixo 1) são os rótulos previstos. +No Scikit-learn, as linhas (eixo 0) são os rótulos reais e as colunas (eixo 1) são os rótulos previstos. | | 0 | 1 | | :---: | :---: | :---: | @@ -321,12 +321,12 @@ No Scikit-learn, as linhas (eixo 0) da matriz de confusão são os rótulos reai O que está acontecendo aqui? Digamos que nosso modelo seja solicitado a classificar abóboras entre duas categorias binárias, categoria 'branca' e categoria 'não branca'. -- Se o modelo prevê uma abóbora como não branca e ela realmente pertence à categoria 'não branca', chamamos isso de verdadeiro negativo, mostrado pelo número no canto superior esquerdo. -- Se o modelo prevê uma abóbora como branca e ela realmente pertence à categoria 'não branca', chamamos isso de falso negativo, mostrado pelo número no canto inferior esquerdo. -- Se o modelo prevê uma abóbora como não branca e ela realmente pertence à categoria 'branca', chamamos isso de falso positivo, mostrado pelo número no canto superior direito. -- Se o modelo prevê uma abóbora como branca e ela realmente pertence à categoria 'branca', chamamos isso de verdadeiro positivo, mostrado pelo número no canto inferior direito. +- Se seu modelo prevê uma abóbora como não branca e ela pertence à categoria 'não branca' na realidade, chamamos isso de verdadeiro negativo, mostrado pelo número no canto superior esquerdo. +- Se seu modelo prevê uma abóbora como branca e ela pertence à categoria 'não branca' na realidade, chamamos isso de falso negativo, mostrado pelo número no canto inferior esquerdo. +- Se seu modelo prevê uma abóbora como não branca e ela pertence à categoria 'branca' na realidade, chamamos isso de falso positivo, mostrado pelo número no canto superior direito. +- Se seu modelo prevê uma abóbora como branca e ela pertence à categoria 'branca' na realidade, chamamos isso de verdadeiro positivo, mostrado pelo número no canto inferior direito. -Como você deve 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 está se saindo melhor. +Como você deve ter imaginado, é 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 está se saindo melhor. Como a matriz de confusão se relaciona com precisão e recall? Lembre-se, o relatório de classificação mostrado acima indicou precisão (0,85) e recall (0,67). Precisão = tp / (tp + fp) = 22 / (22 + 4) = 0,8461538461538461 @@ -337,19 +337,19 @@ Recall = tp / (tp + fn) = 22 / (22 + 11) = 0,6666666666666666 Vamos revisitar os termos que vimos anteriormente com a ajuda do mapeamento de TP/TN e FP/FN na matriz de confusão: -🎓 Precisão: TP/(TP + FP) A fração de instâncias relevantes entre as instâncias recuperadas (por exemplo, quais rótulos foram bem rotulados). +🎓 Precisão: TP/(TP + FP) A fração de instâncias relevantes entre as instâncias recuperadas (ex.: quais rótulos foram bem rotulados) -🎓 Recall: TP/(TP + FN) A fração de instâncias relevantes que foram recuperadas, independentemente de estarem bem rotuladas ou não. +🎓 Recall: TP/(TP + FN) A fração de instâncias relevantes que foram recuperadas, independentemente de estarem bem rotuladas ou não -🎓 f1-score: (2 * precisão * recall)/(precisão + recall) Uma média ponderada entre precisão e recall, sendo o melhor 1 e o pior 0. +🎓 f1-score: (2 * precisão * recall)/(precisão + recall) Uma média ponderada entre precisão e recall, sendo o melhor 1 e o pior 0 -🎓 Suporte: O número de ocorrências de cada rótulo recuperado. +🎓 Suporte: O número de ocorrências de cada rótulo recuperado -🎓 Precisão geral (Accuracy): (TP + TN)/(TP + TN + FP + FN) A porcentagem de rótulos previstos corretamente para uma amostra. +🎓 Precisão geral: (TP + TN)/(TP + TN + FP + FN) A porcentagem de rótulos previstos corretamente para uma amostra. -🎓 Macro Avg: O cálculo da média não ponderada das métricas para cada rótulo, sem levar em conta o desequilíbrio entre os rótulos. +🎓 Média Macro: O cálculo das métricas médias não ponderadas para cada rótulo, sem levar em conta o desequilíbrio entre os rótulos. -🎓 Weighted Avg: O cálculo da média das métricas para cada rótulo, levando em conta o desequilíbrio entre os rótulos ao ponderá-los pelo suporte (o número de instâncias verdadeiras para cada rótulo). +🎓 Média Ponderada: O cálculo das métricas médias para cada rótulo, levando em conta o desequilíbrio entre os rótulos ao ponderá-los pelo suporte (o número de instâncias verdadeiras para cada rótulo). ✅ Você consegue pensar em qual métrica deve observar se quiser que seu modelo reduza o número de falsos negativos? @@ -357,7 +357,7 @@ Vamos revisitar os termos que vimos anteriormente com a ajuda do mapeamento de T [![ML para iniciantes - Analisando o desempenho da regressão logística com curvas ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML para iniciantes - Analisando o desempenho da regressão logística com curvas ROC") -> 🎥 Clique na imagem acima para um breve vídeo sobre curvas ROC. +> 🎥 Clique na imagem acima para um breve vídeo sobre curvas ROC Vamos fazer mais uma visualização para ver a chamada curva 'ROC': @@ -381,7 +381,7 @@ plt.show() Usando Matplotlib, plote a [Curva Característica de Operação do Receptor](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ou ROC do modelo. As curvas ROC são frequentemente usadas para visualizar o desempenho de um classificador em termos de seus verdadeiros positivos versus falsos positivos. "As curvas ROC geralmente apresentam a taxa de verdadeiros positivos no eixo Y e a taxa de falsos positivos 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: você quer uma curva que rapidamente suba e ultrapasse a linha. No nosso caso, há falsos positivos no início, e então a linha sobe e ultrapassa adequadamente: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.br.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) Por fim, use 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) do Scikit-learn para calcular a 'Área Sob a Curva' (AUC): @@ -389,8 +389,7 @@ Por fim, use a API [`roc_auc_score`](https://scikit-learn.org/stable/modules/gen auc = roc_auc_score(y_test,y_scores[:,1]) print(auc) ``` - -O resultado é `0,9749908725812341`. Dado que a AUC varia de 0 a 1, você quer um valor alto, já que um modelo que é 100% correto em suas previsões terá uma AUC de 1; neste caso, o modelo está _muito bom_. +O resultado é `0.9749908725812341`. Dado que o AUC varia de 0 a 1, você quer um valor alto, já que um modelo que é 100% correto em suas previsões terá um AUC de 1; neste caso, o modelo está _muito bom_. Em futuras lições sobre classificações, você aprenderá como iterar para melhorar os resultados do seu modelo. Mas, por enquanto, parabéns! Você concluiu estas lições sobre regressão! @@ -399,13 +398,13 @@ Em futuras lições sobre classificações, você aprenderá como iterar para me Há muito mais para explorar sobre regressão logística! Mas a melhor maneira de aprender é experimentando. Encontre um conjunto de dados que se preste a este tipo de análise e construa um modelo com ele. O que você aprende? dica: experimente [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para conjuntos de dados interessantes. -## [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) -## Revisão e Autoestudo +## Revisão & Autoestudo 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 em tarefas que são mais adequadas para um ou outro tipo de regressão entre as que estudamos até agora. O que funcionaria melhor? -## Tarefa +## Tarefa [Repetindo esta regressão](assignment.md) diff --git a/translations/br/3-Web-App/1-Web-App/README.md b/translations/br/3-Web-App/1-Web-App/README.md index 435ba7fc3..c2560f060 100644 --- a/translations/br/3-Web-App/1-Web-App/README.md +++ b/translations/br/3-Web-App/1-Web-App/README.md @@ -1,15 +1,15 @@ # Construa um Aplicativo Web para Usar um Modelo de ML -Nesta lição, você irá treinar um modelo de ML em um conjunto de dados fora deste mundo: _avistamentos de OVNIs ao longo do último século_, provenientes do banco de dados do NUFORC. +Nesta lição, você irá treinar um modelo de ML em um conjunto de dados que é fora deste mundo: _avistamentos de OVNIs ao longo do último século_, obtidos do banco de dados do NUFORC. Você aprenderá: @@ -20,7 +20,7 @@ Continuaremos utilizando notebooks para limpar os dados e treinar nosso modelo, Para fazer isso, você precisa construir um aplicativo web usando Flask. -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) ## Construindo um aplicativo @@ -34,9 +34,9 @@ Há muitas perguntas que você precisa fazer: - **Onde o modelo ficará armazenado?** Na nuvem ou localmente? - **Suporte offline.** O aplicativo precisa funcionar offline? - **Qual tecnologia foi usada para treinar o modelo?** A tecnologia escolhida pode influenciar as ferramentas que você precisa usar. - - **Usando TensorFlow.** Se você está treinando um modelo usando TensorFlow, por exemplo, esse ecossistema oferece a capacidade de converter um modelo TensorFlow para uso em um aplicativo web utilizando [TensorFlow.js](https://www.tensorflow.org/js/). - - **Usando PyTorch.** Se você está construindo um modelo usando uma biblioteca como [PyTorch](https://pytorch.org/), você tem a opção de exportá-lo no formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) para uso em aplicativos web JavaScript que podem utilizar o [Onnx Runtime](https://www.onnxruntime.ai/). Essa opção será explorada em uma lição futura para um modelo treinado com Scikit-learn. - - **Usando Lobe.ai ou Azure Custom Vision.** Se você está utilizando um sistema de ML SaaS (Software como Serviço) 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, esse tipo de software oferece maneiras de exportar o modelo para várias plataformas, incluindo a construção de uma API personalizada para ser consultada na nuvem pelo seu aplicativo online. + - **Usando TensorFlow.** Se você está 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 PyTorch.** Se você está construindo um modelo usando uma biblioteca como [PyTorch](https://pytorch.org/), você tem 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 Scikit-learn. + - **Usando Lobe.ai ou Azure Custom Vision.** Se você está usando um sistema de ML SaaS (Software como Serviço) 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, esse tipo de software oferece maneiras de exportar o modelo para várias plataformas, incluindo a construção de uma API personalizada para ser consultada na nuvem pelo seu aplicativo online. Você também tem a oportunidade de construir um aplicativo web Flask completo que seria capaz de treinar o modelo diretamente em um navegador web. Isso também pode ser feito usando TensorFlow.js em um contexto JavaScript. @@ -48,20 +48,20 @@ Para esta tarefa, você precisa de duas ferramentas: Flask e Pickle, ambas execu ✅ O que é [Flask](https://palletsprojects.com/p/flask/)? Definido como um 'micro-framework' por seus criadores, Flask fornece os recursos básicos de frameworks web usando Python e um mecanismo de templates para construir páginas web. Confira [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 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. Quando você 'pickle' um modelo, você serializa ou achata sua estrutura para uso na web. Atenção: pickle não é intrinsecamente seguro, então tenha cuidado ao ser solicitado a 'despickle' um arquivo. Um arquivo pickled tem o sufixo `.pkl`. +✅ 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. Quando você 'pickle' um modelo, você serializa ou achata sua estrutura para uso na web. Cuidado: pickle não é intrinsecamente seguro, então tenha cuidado se for solicitado a 'despickle' um arquivo. Um arquivo pickled 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 Relatórios de OVNIs). Esses dados têm descrições interessantes de avistamentos de OVNIs, por exemplo: +Nesta lição, você usará dados de 80.000 avistamentos de OVNIs, coletados pelo [NUFORC](https://nuforc.org) (Centro Nacional de Relatórios de OVNIs). Esses dados têm algumas descrições interessantes de avistamentos de OVNIs, por exemplo: - **Descrição longa de exemplo.** "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". - **Descrição curta de exemplo.** "as luzes nos perseguiram". A planilha [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) inclui colunas sobre a `cidade`, `estado` e `país` onde o avistamento ocorreu, o `formato` do objeto e sua `latitude` e `longitude`. -No [notebook](notebook.ipynb) em branco incluído nesta lição: +No [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) em branco incluído nesta lição: -1. Importe `pandas`, `matplotlib` e `numpy` como você fez em lições anteriores e importe a planilha de ufos. Você pode dar uma olhada em um conjunto de dados de amostra: +1. Importe `pandas`, `matplotlib` e `numpy` como você fez em lições anteriores e importe a planilha de OVNIs. Você pode dar uma olhada em um conjunto de dados de amostra: ```python import pandas as pd @@ -71,7 +71,7 @@ No [notebook](notebook.ipynb) em branco incluído nesta lição: ufos.head() ``` -1. Converta os dados de ufos para um pequeno dataframe com títulos novos. Verifique os valores únicos no campo `Country`. +1. Converta os dados de OVNIs para 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']}) @@ -168,7 +168,7 @@ Agora você pode construir um aplicativo Flask para chamar seu modelo e retornar 1. Comece criando uma pasta chamada **web-app** ao lado do arquivo _notebook.ipynb_ onde seu arquivo _ufo-model.pkl_ está localizado. -1. Dentro dessa pasta, crie mais três pastas: **static**, com uma pasta **css** dentro dela, e **templates**. Você deve ter agora os seguintes arquivos e diretórios: +1. Nessa pasta, crie mais três pastas: **static**, com uma pasta **css** dentro dela, e **templates**. Você deve ter os seguintes arquivos e diretórios: ```output web-app/ @@ -196,7 +196,7 @@ Agora você pode construir um aplicativo Flask para chamar seu modelo e retornar cd web-app ``` -1. No seu terminal, digite `pip install` para instalar as bibliotecas listadas em _requirements.txt_: +1. No seu terminal, digite `pip install` para instalar as bibliotecas listadas no _requirements.txt_: ```bash pip install -r requirements.txt @@ -277,7 +277,7 @@ Agora você pode construir um aplicativo Flask para chamar seu modelo e retornar ``` - Observe o uso de templates neste arquivo. Note a sintaxe '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 envia uma previsão para a rota `/predict`. + Observe o uso de templates neste arquivo. Note a sintaxe 'mustache' ao redor das variáveis que serão fornecidas pelo aplicativo, como o texto de previsão: `{{}}`. Há também um formulário que envia uma previsão para a rota `/predict`. Finalmente, você está pronto para construir o arquivo Python que dirige o consumo do modelo e a exibição das previsões: @@ -320,7 +320,7 @@ Agora você pode construir um aplicativo Flask para chamar seu modelo e retornar > 💡 Dica: quando você adiciona [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) ao executar o aplicativo web usando Flask, quaisquer alterações feitas no seu aplicativo serão refletidas imediatamente sem a necessidade de reiniciar o servidor. Atenção! Não habilite este modo em um aplicativo de produção. -Se você executar `python app.py` ou `python3 app.py` - seu servidor web será iniciado localmente, e você poderá preencher um formulário simples para obter uma resposta à sua pergunta sobre onde os OVNIs foram avistados! +Se você executar `python app.py` ou `python3 app.py` - seu servidor web será iniciado localmente, e você poderá preencher um formulário curto para obter uma resposta à sua pergunta sobre onde os OVNIs foram avistados! Antes de fazer isso, dê uma olhada nas partes do `app.py`: @@ -333,7 +333,7 @@ Na rota `/predict`, várias coisas acontecem quando o formulário é enviado: 1. As variáveis do formulário são coletadas e convertidas em um array numpy. Elas são então enviadas ao modelo e uma previsão é retornada. 2. Os países que queremos exibir são re-renderizados como texto legível a partir de seu código de país previsto, e esse valor é enviado de volta ao index.html para ser renderizado no template. -Usar um modelo dessa forma, com Flask e um modelo pickled, é relativamente simples. A parte mais difícil é entender qual é o formato dos dados que devem ser enviados ao modelo para obter uma previsão. Isso depende de como o modelo foi treinado. Este modelo requer três pontos de dados como entrada para gerar uma previsão. +Usar um modelo dessa forma, com Flask e um modelo pickled, é relativamente simples. O mais difícil é entender qual é o formato dos dados que devem ser enviados ao modelo para obter uma previsão. Isso depende de como o modelo foi treinado. Este modelo requer três pontos de dados para ser inserido e obter uma previsão. Em um ambiente profissional, você pode ver como é importante ter uma boa comunicação entre as pessoas que treinam o modelo e aquelas que o consomem em um aplicativo web ou móvel. No nosso caso, é apenas uma pessoa: você! @@ -343,11 +343,11 @@ Em um ambiente profissional, você pode ver como é importante ter uma boa comun Em vez de trabalhar em um notebook e importar o modelo para o aplicativo Flask, você poderia treinar o modelo diretamente dentro do aplicativo Flask! Tente converter seu código Python no notebook, talvez após limpar seus dados, para treinar o modelo dentro do aplicativo em uma rota chamada `train`. Quais são os prós e contras de seguir esse método? -## [Quiz pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) ## Revisão e Autoestudo -Existem várias maneiras de construir um aplicativo web para consumir modelos de ML. Faça uma lista das maneiras que você poderia usar JavaScript ou Python para construir um aplicativo web que aproveite o aprendizado de máquina. Considere a arquitetura: o modelo deve permanecer no aplicativo ou viver na nuvem? Se for o último caso, como você o acessaria? Desenhe um modelo arquitetural para uma solução web aplicada de ML. +Existem muitas maneiras de construir um aplicativo web para consumir modelos de ML. Faça uma lista das maneiras que você poderia usar JavaScript ou Python para construir um aplicativo web que aproveite o aprendizado de máquina. Considere a arquitetura: o modelo deve permanecer no aplicativo ou viver na nuvem? Se for o último caso, como você o acessaria? Desenhe um modelo arquitetural para uma solução de ML aplicada em um aplicativo web. ## Tarefa diff --git a/translations/br/4-Classification/1-Introduction/README.md b/translations/br/4-Classification/1-Introduction/README.md index 931099abc..c6085d99d 100644 --- a/translations/br/4-Classification/1-Introduction/README.md +++ b/translations/br/4-Classification/1-Introduction/README.md @@ -1,8 +1,8 @@ -# Classificadores de Culinária 2 +# Classificadores de culinária 2 Nesta segunda lição de classificação, você explorará mais maneiras de classificar dados numéricos. Você também aprenderá sobre as implicações de escolher um classificador em vez de outro. -## [Questionário pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) ### Pré-requisito -Assumimos que você completou as lições anteriores e possui um conjunto de dados limpo na sua pasta `data`, chamado _cleaned_cuisines.csv_, na raiz desta pasta de 4 lições. +Assumimos que você completou as lições anteriores e possui um conjunto de dados limpo na sua pasta `data`, chamado _cleaned_cuisines.csv_, localizado na raiz desta pasta de 4 lições. ### Preparação @@ -23,19 +23,19 @@ Carregamos seu arquivo _notebook.ipynb_ com o conjunto de dados limpo e o dividi ## Um mapa de classificação -Anteriormente, você aprendeu sobre as várias opções disponíveis para classificar dados usando o guia da Microsoft. O Scikit-learn oferece um guia semelhante, mas mais detalhado, que pode ajudar ainda mais a restringir seus estimadores (outro termo para classificadores): +Anteriormente, você aprendeu sobre as várias opções disponíveis para classificar dados usando o guia de referência da Microsoft. O Scikit-learn oferece um guia semelhante, mas mais detalhado, que pode ajudar ainda mais a restringir seus estimadores (outro termo para classificadores): -![Mapa de ML do Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.br.png) -> Dica: [visite este mapa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) e clique ao longo do caminho para ler a documentação. +![Mapa de ML do Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Dica: [visite este mapa online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) e clique nos caminhos para ler a documentação. ### O plano -Este mapa é muito útil quando você tem uma compreensão clara dos seus dados, pois você pode 'caminhar' pelos caminhos até uma decisão: +Este mapa é muito útil quando você tem uma compreensão clara dos seus dados, pois pode 'percorrer' seus caminhos para tomar uma decisão: - Temos >50 amostras - Queremos prever uma categoria - Temos dados rotulados -- Temos menos de 100 mil amostras +- Temos menos de 100K amostras - ✨ Podemos escolher um Linear SVC - Se isso não funcionar, já que temos dados numéricos - Podemos tentar um ✨ KNeighbors Classifier @@ -67,11 +67,11 @@ Seguindo este caminho, devemos começar importando algumas bibliotecas para usar ## Classificador Linear SVC -O Support-Vector Clustering (SVC) é um membro da família de técnicas de ML chamadas Support-Vector Machines. 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 dos [vários](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aqui o definimos como 'linear' para garantir que utilizamos o Linear SVC. A probabilidade, por padrão, é 'false'; aqui a definimos como 'true' para obter estimativas de probabilidade. Definimos o estado aleatório como '0' para embaralhar os dados e obter probabilidades. +O agrupamento por Vetores de Suporte (SVC) é um membro da família de técnicas de ML chamada Máquinas de Vetores de Suporte (SVM). 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 dos [vários](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aqui o configuramos como 'linear' para garantir que utilizamos o Linear SVC. A probabilidade, por padrão, é 'false'; aqui a configuramos como 'true' para obter estimativas de probabilidade. Configuramos o estado aleatório como '0' para embaralhar os dados e obter probabilidades. ### Exercício - aplicar um Linear SVC -Comece criando um array de classificadores. Você adicionará progressivamente a este array à medida que testamos. +Comece criando um array de classificadores. Você adicionará progressivamente a este array enquanto testamos. 1. Comece com um Linear SVC: @@ -116,7 +116,7 @@ Comece criando um array de classificadores. Você adicionará progressivamente a ## Classificador K-Neighbors -O K-Neighbors faz parte da família de métodos de ML "neighbors", que podem ser usados tanto para aprendizado supervisionado quanto não supervisionado. Neste método, um número predefinido de pontos é criado e os dados são agrupados em torno desses pontos, de forma que rótulos generalizados possam ser previstos para os dados. +K-Neighbors faz parte da família de métodos de ML chamada "neighbors", que pode ser usada tanto para aprendizado supervisionado quanto não supervisionado. Neste método, um número pré-definido de pontos é criado e os dados são agrupados ao redor desses pontos, de forma que rótulos generalizados possam ser previstos para os dados. ### Exercício - aplicar o classificador K-Neighbors @@ -147,13 +147,13 @@ O classificador anterior foi bom e funcionou bem com os dados, mas talvez possam ✅ Saiba mais sobre [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) -## Classificador Support Vector +## Classificador de Vetores de Suporte -Os classificadores Support-Vector fazem parte da família de métodos de ML [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine), 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. Dados subsequentes são mapeados neste espaço para que sua categoria possa ser prevista. +Classificadores de Vetores de Suporte fazem parte da família de [Máquinas de Vetores de Suporte](https://wikipedia.org/wiki/Support-vector_machine), que são usadas para tarefas de classificação e regressão. SVMs "mapeiam exemplos de treinamento para pontos no espaço" para maximizar a distância entre duas categorias. Dados subsequentes são mapeados neste espaço para que sua categoria possa ser prevista. -### Exercício - aplicar um classificador Support Vector +### Exercício - aplicar um Classificador de Vetores de Suporte -Vamos tentar obter uma precisão um pouco melhor com um classificador Support Vector. +Vamos tentar obter uma precisão um pouco melhor com um Classificador de Vetores de Suporte. 1. Adicione uma vírgula após o item K-Neighbors e, em seguida, adicione esta linha: @@ -178,7 +178,7 @@ Vamos tentar obter uma precisão um pouco melhor com um classificador Support Ve weighted avg 0.84 0.83 0.83 1199 ``` - ✅ Saiba mais sobre [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + ✅ Saiba mais sobre [Vetores de Suporte](https://scikit-learn.org/stable/modules/svm.html#svm) ## Classificadores Ensemble @@ -221,9 +221,9 @@ weighted avg 0.73 0.72 0.72 1199 ✅ Saiba mais sobre [Classificadores Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) -Este método de aprendizado de máquina "combina as previsões de vários estimadores base" para melhorar a qualidade do modelo. Em nosso exemplo, usamos Random Trees e AdaBoost. +Este método de aprendizado de máquina "combina as previsões de vários estimadores base" para melhorar a qualidade do modelo. No nosso exemplo, usamos Random Trees 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' com infusão de aleatoriedade para evitar overfitting. O parâmetro n_estimators é definido como o número de árvores. +- [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' com elementos aleatórios para evitar overfitting. O parâmetro n_estimators é configurado para o número de árvores. - [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajusta um classificador a um conjunto de dados e, em seguida, ajusta cópias desse classificador ao mesmo conjunto de dados. Ele foca nos pesos dos itens classificados incorretamente e ajusta o ajuste para o próximo classificador corrigir. @@ -231,19 +231,19 @@ Este método de aprendizado de máquina "combina as previsões de vários estima ## 🚀Desafio -Cada uma dessas técnicas possui um grande número de parâmetros que você pode ajustar. Pesquise os parâmetros padrão de cada uma e pense no que ajustar esses parâmetros significaria para a qualidade do modelo. +Cada uma dessas técnicas possui um grande número de parâmetros que você pode ajustar. Pesquise os parâmetros padrão de cada uma e pense sobre o que ajustar esses parâmetros significaria para a qualidade do modelo. -## [Questionário pós-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) +## [Quiz pós-aula](https://ff-quizzes.netlify.app/en/ml/) ## Revisão e Autoestudo -Há muitos termos técnicos nessas lições, então reserve um momento para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminologia útil! +Há muitos termos técnicos nestas lições, então reserve um momento para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminologia útil! ## Tarefa -[Brincando com parâmetros](assignment.md) +[Exploração de parâmetros](assignment.md) --- **Aviso Legal**: -Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automatizadas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte autoritativa. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações equivocadas decorrentes do uso desta tradução. \ No newline at end of file +Este documento foi traduzido utilizando o serviço de tradução por IA [Co-op Translator](https://github.com/Azure/co-op-translator). Embora nos esforcemos para garantir a precisão, esteja ciente de que traduções automáticas podem conter erros ou imprecisões. O documento original em seu idioma nativo deve ser considerado a fonte oficial. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes do uso desta tradução. \ No newline at end of file diff --git a/translations/br/4-Classification/4-Applied/README.md b/translations/br/4-Classification/4-Applied/README.md index b1c5ede82..675573548 100644 --- a/translations/br/4-Classification/4-Applied/README.md +++ b/translations/br/4-Classification/4-Applied/README.md @@ -1,37 +1,37 @@ # Construir um Aplicativo Web de Recomendação de Culinária -Nesta lição, você irá construir um modelo de classificação utilizando algumas das técnicas aprendidas em lições anteriores e com o delicioso conjunto de dados de culinária usado ao longo desta série. Além disso, você criará um pequeno aplicativo web para usar um modelo salvo, aproveitando o runtime web do Onnx. +Nesta lição, você irá construir um modelo de classificação usando algumas das técnicas aprendidas em lições anteriores e com o delicioso conjunto de dados de culinária utilizado ao longo desta série. Além disso, você criará um pequeno aplicativo web para usar um modelo salvo, aproveitando o runtime web do Onnx. -Uma das aplicações práticas mais úteis do aprendizado de máquina é a construção de sistemas de recomendação, e você pode dar o primeiro passo nessa direção hoje! +Um dos usos práticos mais úteis do aprendizado de máquina é a construção de sistemas de recomendação, e você pode dar o primeiro passo nessa direção hoje! [![Apresentando este aplicativo web](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "ML Aplicado") -> 🎥 Clique na imagem acima para assistir ao vídeo: Jen Looper constrói um aplicativo web usando dados classificados de culinária +> 🎥 Clique na imagem acima para assistir ao vídeo: Jen Looper constrói um aplicativo web usando dados de culinária classificados -## [Quiz pré-aula](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) +## [Quiz pré-aula](https://ff-quizzes.netlify.app/en/ml/) Nesta lição, você aprenderá: -- Como construir um modelo e salvá-lo no formato Onnx +- Como construir um modelo e salvá-lo como um modelo Onnx - Como usar o Netron para inspecionar o modelo - Como usar seu modelo em um aplicativo web para inferência ## Construa seu modelo -Construir sistemas de aprendizado de máquina aplicados é uma parte importante para aproveitar essas tecnologias em seus sistemas de negócios. Você pode usar modelos dentro de seus aplicativos web (e, assim, utilizá-los em um contexto offline, se necessário) usando o Onnx. +Construir sistemas de aprendizado de máquina aplicados é uma parte importante para aproveitar essas tecnologias em sistemas empresariais. Você pode usar modelos dentro de seus aplicativos web (e assim utilizá-los em um contexto offline, se necessário) usando Onnx. -Em uma [lição anterior](../../3-Web-App/1-Web-App/README.md), você construiu um modelo de regressão sobre avistamentos de OVNIs, o "pickleou" e o utilizou em um aplicativo Flask. Embora essa arquitetura seja muito útil, trata-se de um aplicativo Python full-stack, e seus requisitos podem incluir o uso de uma aplicação JavaScript. +Em uma [lição anterior](../../3-Web-App/1-Web-App/README.md), você construiu um modelo de regressão sobre avistamentos de OVNIs, o "pickleou" e o utilizou em um aplicativo Flask. Embora essa arquitetura seja muito útil, trata-se de um aplicativo Python full-stack, e seus requisitos podem incluir o uso de um aplicativo JavaScript. -Nesta lição, você pode construir um sistema básico baseado em JavaScript para inferência. Primeiro, no entanto, você precisa treinar um modelo e convertê-lo para uso com o Onnx. +Nesta lição, você pode construir um sistema básico baseado em JavaScript para inferência. Primeiro, no entanto, você precisa treinar um modelo e convertê-lo para uso com Onnx. ## Exercício - treinar modelo de classificação @@ -70,7 +70,7 @@ Primeiro, treine um modelo de classificação usando o conjunto de dados de culi ### Inicie a rotina de treinamento -Usaremos a biblioteca 'SVC', que apresenta boa precisão. +Usaremos a biblioteca 'SVC', que tem boa precisão. 1. Importe as bibliotecas apropriadas do Scikit-learn: @@ -144,17 +144,17 @@ Certifique-se de fazer a conversão com o número correto de tensores. Este conj f.write(onx.SerializeToString()) ``` - > Nota: você pode passar [opções](https://onnx.ai/sklearn-onnx/parameterized.html) no seu script de conversão. Neste caso, passamos 'nocl' como True e 'zipmap' como False. Como este é um modelo de classificação, você tem a opção de remover o ZipMap, que produz uma lista de dicionários (não necessária). `nocl` refere-se à inclusão de informações de classe no modelo. Reduza o tamanho do seu modelo definindo `nocl` como 'True'. + > Nota: você pode passar [opções](https://onnx.ai/sklearn-onnx/parameterized.html) no seu script de conversão. Neste caso, passamos 'nocl' como True e 'zipmap' como False. Como este é um modelo de classificação, você tem a opção de remover ZipMap, que produz uma lista de dicionários (não necessário). `nocl` refere-se à inclusão de informações de classe no modelo. Reduza o tamanho do seu modelo configurando `nocl` como 'True'. -Executar o notebook inteiro agora criará um modelo Onnx e o salvará nesta pasta. +Executar o notebook completo agora criará um modelo Onnx e o salvará nesta pasta. ## Visualize seu modelo -Modelos Onnx não são muito visíveis no Visual Studio Code, mas há um software gratuito muito bom que muitos pesquisadores usam para visualizar o modelo e garantir que ele foi construído corretamente. Baixe o [Netron](https://github.com/lutzroeder/Netron) e abra seu arquivo model.onnx. Você poderá visualizar seu modelo simples, com seus 380 inputs e o classificador listado: +Modelos Onnx não são muito visíveis no Visual Studio Code, mas há um software gratuito muito bom que muitos pesquisadores utilizam para visualizar o modelo e garantir que ele foi construído corretamente. Baixe o [Netron](https://github.com/lutzroeder/Netron) e abra seu arquivo model.onnx. Você poderá ver seu modelo simples visualizado, com seus 380 inputs e o classificador listado: -![Visualização no Netron](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.br.png) +![Visualização no Netron](../../../../4-Classification/4-Applied/images/netron.png) -O Netron é uma ferramenta útil para visualizar seus modelos. +Netron é uma ferramenta útil para visualizar seus modelos. Agora você está pronto para usar este modelo interessante em um aplicativo web. Vamos construir um aplicativo que será útil quando você olhar para sua geladeira e tentar descobrir quais combinações de ingredientes restantes podem ser usadas para cozinhar um prato específico, conforme determinado pelo seu modelo. @@ -176,7 +176,7 @@ Você pode usar seu modelo diretamente em um aplicativo web. Essa arquitetura ta ``` -1. Agora, dentro das tags `body`, adicione uma pequena marcação para exibir uma lista de caixas de seleção refletindo alguns ingredientes: +1. Agora, dentro das tags `body`, adicione uma pequena marcação para mostrar uma lista de caixas de seleção refletindo alguns ingredientes: ```html

            Check your refrigerator. What can you create?

            @@ -221,7 +221,7 @@ Você pode usar seu modelo diretamente em um aplicativo web. Essa arquitetura ta ``` - Observe que cada caixa de seleção recebe um valor. Isso reflete o índice onde o ingrediente é encontrado de acordo com o conjunto de dados. A maçã, por exemplo, nesta lista alfabética, ocupa a quinta coluna, então seu valor é '4', já que começamos a contar a partir de 0. Você pode consultar a [planilha de ingredientes](../../../../4-Classification/data/ingredient_indexes.csv) para descobrir o índice de um determinado ingrediente. + Note que cada caixa de seleção recebe um valor. Isso reflete o índice onde o ingrediente é encontrado de acordo com o conjunto de dados. Por exemplo, maçã, nesta lista alfabética, ocupa a quinta coluna, então seu valor é '4', já que começamos a contar a partir de 0. Você pode consultar a [planilha de ingredientes](../../../../4-Classification/data/ingredient_indexes.csv) para descobrir o índice de um determinado ingrediente. Continuando seu trabalho no arquivo index.html, adicione um bloco de script onde o modelo é chamado após o fechamento final de ``. @@ -231,9 +231,9 @@ Você pode usar seu modelo diretamente em um aplicativo web. Essa arquitetura ta ``` - > O 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 para uso. + > 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 para uso. -1. Uma vez que o Runtime esteja no lugar, você pode chamá-lo: +1. Uma vez que o Runtime esteja configurado, você pode chamá-lo: ```html + ``` + + > Onnx Runtime se používá k umožnění spuštění vašich Onnx modelů na široké škále hardwarových platforem, včetně optimalizací a API pro použití. + +1. Jakmile je Runtime na místě, můžete ho zavolat: + + ```html + + ``` + +V tomto kódu se děje několik věcí: + +1. Vytvořili jste pole 380 možných hodnot (1 nebo 0), které budou nastaveny a odeslány modelu pro inference, v závislosti na tom, zda je zaškrtávací políčko zaškrtnuto. +2. Vytvořili jste pole zaškrtávacích políček a způsob, jak zjistit, zda byla zaškrtnuta, ve funkci `init`, která je volána při spuštění aplikace. Když je zaškrtávací políčko zaškrtnuto, pole `ingredients` se změní tak, aby odráželo vybranou ingredienci. +3. Vytvořili jste funkci `testCheckboxes`, která kontroluje, zda bylo zaškrtnuto nějaké zaškrtávací políčko. +4. Používáte funkci `startInference`, když je stisknuto tlačítko, a pokud je zaškrtnuto nějaké zaškrtávací políčko, zahájíte inference. +5. Rutina inference zahrnuje: + 1. Nastavení asynchronního načítání modelu + 2. Vytvoření struktury Tensor pro odeslání modelu + 3. Vytvoření 'feeds', které odráží vstup `float_input`, který jste vytvořili při trénování modelu (můžete použít Netron k ověření tohoto názvu) + 4. Odeslání těchto 'feeds' modelu a čekání na odpověď + +## Otestujte svou aplikaci + +Otevřete terminálovou relaci ve Visual Studio Code ve složce, kde se nachází váš soubor index.html. Ujistěte se, že máte [http-server](https://www.npmjs.com/package/http-server) nainstalovaný globálně, a napište `http-server` na výzvu. Měl by se otevřít localhost a můžete si prohlédnout svou webovou aplikaci. Zkontrolujte, jaká kuchyně je doporučena na základě různých ingrediencí: + +![webová aplikace s ingrediencemi](../../../../4-Classification/4-Applied/images/web-app.png) + +Gratulujeme, vytvořili jste webovou aplikaci pro 'doporučování' s několika poli. Věnujte nějaký čas rozšíření tohoto systému! + +## 🚀Výzva + +Vaše webová aplikace je velmi jednoduchá, takže ji pokračujte rozšiřovat pomocí ingrediencí a jejich indexů z dat [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Jaké kombinace chutí fungují pro vytvoření daného národního jídla? + +## [Kvíz po lekci](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Zatímco tato lekce se jen dotkla užitečnosti vytváření doporučovacího systému pro ingredience, tato oblast aplikací strojového učení je velmi bohatá na příklady. Přečtěte si více o tom, jak jsou tyto systémy vytvářeny: + +- 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/ + +## Úkol + +[Vytvořte nový doporučovací systém](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/4-Classification/4-Applied/assignment.md b/translations/cs/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..5f9315fa3 --- /dev/null +++ b/translations/cs/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Vytvořte doporučovací systém + +## Instrukce + +Na základě vašich cvičení v této lekci nyní víte, jak vytvořit webovou aplikaci v JavaScriptu pomocí Onnx Runtime a převedeného Onnx modelu. Experimentujte s vytvořením nového doporučovacího systému pomocí dat z těchto lekcí nebo jiných zdrojů (nezapomeňte uvést zdroj). Můžete například vytvořit doporučovací systém pro domácí mazlíčky na základě různých osobnostních atributů, nebo doporučovač hudebních žánrů podle nálady člověka. Buďte kreativní! + +## Hodnocení + +| Kritéria | Vynikající | Dostatečné | Vyžaduje zlepšení | +| -------- | --------------------------------------------------------------------- | ------------------------------------ | --------------------------------- | +| | Webová aplikace a notebook jsou prezentovány, dobře zdokumentované a funkční | Jeden z těchto dvou chybí nebo má nedostatky | Oba buď chybí, nebo mají nedostatky | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/4-Classification/README.md b/translations/cs/4-Classification/README.md new file mode 100644 index 000000000..37b27d7c1 --- /dev/null +++ b/translations/cs/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Začínáme s klasifikací + +## Regionální téma: Lahodné asijské a indické kuchyně 🍜 + +V Asii a Indii jsou tradice spojené s jídlem nesmírně rozmanité a velmi chutné! Podívejme se na data o regionálních kuchyních, abychom lépe porozuměli jejich ingrediencím. + +![Prodejce thajského jídla](../../../4-Classification/images/thai-food.jpg) +> Foto od Lisheng Chang na Unsplash + +## Co se naučíte + +V této části navážete na své předchozí studium regrese a naučíte se o dalších klasifikátorech, které můžete použít k lepšímu pochopení dat. + +> Existují užitečné nástroje s nízkým kódem, které vám mohou pomoci naučit se pracovat s modely klasifikace. Vyzkoušejte [Azure ML pro tento úkol](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lekce + +1. [Úvod do klasifikace](1-Introduction/README.md) +2. [Další klasifikátory](2-Classifiers-1/README.md) +3. [Ještě jiné klasifikátory](3-Classifiers-2/README.md) +4. [Aplikované ML: vytvořte webovou aplikaci](4-Applied/README.md) + +## Poděkování + +"Začínáme s klasifikací" bylo napsáno s ♥️ od [Cassie Breviu](https://www.twitter.com/cassiebreviu) a [Jen Looper](https://www.twitter.com/jenlooper) + +Dataset lahodných kuchyní byl získán z [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/1-Visualize/README.md b/translations/cs/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..05d08bf89 --- /dev/null +++ b/translations/cs/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Úvod do shlukování + +Shlukování je typ [učení bez učitele](https://wikipedia.org/wiki/Unsupervised_learning), který předpokládá, že dataset není označený nebo že jeho vstupy nejsou spárovány s předem definovanými výstupy. Používá různé algoritmy k třídění neoznačených dat a poskytuje skupiny na základě vzorců, které v datech rozpozná. + +[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") + +> 🎥 Klikněte na obrázek výše pro video. Zatímco studujete strojové učení pomocí shlukování, užijte si nigerijské Dance Hall skladby – toto je vysoce hodnocená píseň z roku 2014 od PSquare. + +## [Kvíz před přednáškou](https://ff-quizzes.netlify.app/en/ml/) + +### Úvod + +[Shlukování](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) je velmi užitečné pro průzkum dat. Podívejme se, zda nám může pomoci objevit trendy a vzorce ve způsobu, jakým nigerijské publikum konzumuje hudbu. + +✅ Udělejte si chvíli na zamyšlení nad využitím shlukování. V reálném životě dochází ke shlukování pokaždé, když máte hromadu prádla a potřebujete roztřídit oblečení členů rodiny 🧦👕👖🩲. V datové vědě dochází ke shlukování při analýze uživatelských preferencí nebo při určování charakteristik jakéhokoli neoznačeného datasetu. Shlukování do jisté míry pomáhá dát chaosu smysl, jako například zásuvce na ponožky. + +[![Úvod do ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Úvod do shlukování") + +> 🎥 Klikněte na obrázek výše pro video: John Guttag z MIT představuje shlukování. + +V profesionálním prostředí může být shlukování použito k určení věcí, jako je segmentace trhu, například k určení, jaké věkové skupiny kupují jaké položky. Dalším využitím by bylo odhalování anomálií, například k detekci podvodů z datasetu transakcí kreditními kartami. Nebo můžete použít shlukování k určení nádorů v dávce lékařských skenů. + +✅ Zamyslete se chvíli nad tím, jak jste se mohli setkat se shlukováním „v divočině“, například v bankovnictví, e-commerce nebo obchodním prostředí. + +> 🎓 Zajímavé je, že analýza shluků vznikla v oborech antropologie a psychologie ve 30. letech 20. století. Dokážete si představit, jak mohla být použita? + +Alternativně ji můžete použít ke skupinování výsledků vyhledávání – například podle nákupních odkazů, obrázků nebo recenzí. Shlukování je užitečné, když máte velký dataset, který chcete zmenšit a na kterém chcete provést podrobnější analýzu, takže tato technika může být použita k poznání dat před vytvořením dalších modelů. + +✅ Jakmile jsou vaše data organizována do shluků, přiřadíte jim ID shluku, a tato technika může být užitečná při zachování soukromí datasetu; místo toho můžete odkazovat na datový bod podle jeho ID shluku, spíše než podle více odhalujících identifikovatelných dat. Dokážete si představit další důvody, proč byste odkazovali na ID shluku spíše než na jiné prvky shluku k jeho identifikaci? + +Prohlubte své znalosti technik shlukování v tomto [výukovém modulu](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). + +## Začínáme se shlukováním + +[Scikit-learn nabízí širokou škálu](https://scikit-learn.org/stable/modules/clustering.html) metod pro provádění shlukování. Typ, který si vyberete, bude záviset na vašem konkrétním případu použití. Podle dokumentace má každá metoda různé výhody. Zde je zjednodušená tabulka metod podporovaných Scikit-learn a jejich vhodných případů použití: + +| Název metody | Případ použití | +| :--------------------------- | :-------------------------------------------------------------------- | +| K-Means | obecné použití, induktivní | +| Affinity propagation | mnoho, nerovnoměrné shluky, induktivní | +| Mean-shift | mnoho, nerovnoměrné shluky, induktivní | +| Spectral clustering | málo, rovnoměrné shluky, transduktivní | +| Ward hierarchical clustering | mnoho, omezené shluky, transduktivní | +| Agglomerative clustering | mnoho, omezené, ne Euklidovské vzdálenosti, transduktivní | +| DBSCAN | neplochá geometrie, nerovnoměrné shluky, transduktivní | +| OPTICS | neplochá geometrie, nerovnoměrné shluky s proměnlivou hustotou, transduktivní | +| Gaussian mixtures | plochá geometrie, induktivní | +| BIRCH | velký dataset s odlehlými hodnotami, induktivní | + +> 🎓 Jak vytváříme shluky, má hodně společného s tím, jak seskupujeme datové body do skupin. Pojďme si rozebrat některé pojmy: +> +> 🎓 ['Transduktivní' vs. 'induktivní'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Transduktivní inference je odvozena z pozorovaných tréninkových případů, které se mapují na konkrétní testovací případy. Induktivní inference je odvozena z tréninkových případů, které se mapují na obecná pravidla, která jsou teprve poté aplikována na testovací případy. +> +> Příklad: Představte si, že máte dataset, který je pouze částečně označený. Některé věci jsou „desky“, některé „CD“ a některé jsou prázdné. Vaším úkolem je poskytnout štítky pro prázdné položky. Pokud zvolíte induktivní přístup, vytrénujete model hledající „desky“ a „CD“ a aplikujete tyto štítky na neoznačená data. Tento přístup bude mít problém klasifikovat věci, které jsou ve skutečnosti „kazety“. Transduktivní přístup na druhé straně zvládá tato neznámá data efektivněji, protože pracuje na seskupení podobných položek dohromady a poté aplikuje štítek na skupinu. V tomto případě mohou shluky odrážet „kulaté hudební věci“ a „čtvercové hudební věci“. +> +> 🎓 ['Neplochá' vs. 'plochá' geometrie](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Odvozeno z matematické terminologie, neplochá vs. plochá geometrie se týká měření vzdáleností mezi body buď „plochými“ ([Euklidovskými](https://wikipedia.org/wiki/Euclidean_geometry)) nebo „neplochými“ (ne-Euklidovskými) geometrickými metodami. +> +> 'Plochá' v tomto kontextu odkazuje na Euklidovskou geometrii (části z ní se učí jako „rovinná“ geometrie) a neplochá odkazuje na ne-Euklidovskou geometrii. Co má geometrie společného se strojovým učením? Jako dvě oblasti, které jsou zakořeněny v matematice, musí existovat společný způsob měření vzdáleností mezi body ve shlucích, a to lze provést „plochým“ nebo „neplochým“ způsobem, v závislosti na povaze dat. [Euklidovské vzdálenosti](https://wikipedia.org/wiki/Euclidean_distance) se měří jako délka úsečky mezi dvěma body. [Ne-Euklidovské vzdálenosti](https://wikipedia.org/wiki/Non-Euclidean_geometry) se měří podél křivky. Pokud se vaše data, vizualizovaná, zdají neexistovat na rovině, možná budete potřebovat použít specializovaný algoritmus k jejich zpracování. +> +![Infografika ploché vs. neploché geometrie](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infografika od [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Vzdálenosti'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Shluky jsou definovány svou maticí vzdáleností, tj. vzdálenostmi mezi body. Tato vzdálenost může být měřena několika způsoby. Euklidovské shluky jsou definovány průměrem hodnot bodů a obsahují „centroid“ nebo středový bod. Vzdálenosti jsou tedy měřeny podle vzdálenosti k tomuto centroidu. Ne-Euklidovské vzdálenosti odkazují na „clustroidy“, bod nejbližší ostatním bodům. Clustroidy mohou být definovány různými způsoby. +> +> 🎓 ['Omezené'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Omezené shlukování](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) zavádí „semi-supervised“ učení do této metody bez učitele. Vztahy mezi body jsou označeny jako „nelze propojit“ nebo „musí být propojeno“, takže na dataset jsou vynucena určitá pravidla. +> +> Příklad: Pokud je algoritmus volně spuštěn na dávce neoznačených nebo částečně označených dat, shluky, které vytvoří, mohou být nekvalitní. V příkladu výše mohou shluky seskupovat „kulaté hudební věci“ a „čtvercové hudební věci“ a „trojúhelníkové věci“ a „sušenky“. Pokud jsou dána nějaká omezení nebo pravidla, která je třeba dodržovat („položka musí být vyrobena z plastu“, „položka musí být schopna produkovat hudbu“), může to pomoci „omezit“ algoritmus, aby dělal lepší volby. +> +> 🎓 'Hustota' +> +> Data, která jsou „šumová“, jsou považována za „hustá“. Vzdálenosti mezi body v každém z jeho shluků mohou při zkoumání být více či méně husté, nebo „přeplněné“, a proto je třeba tato data analyzovat pomocí vhodné metody shlukování. [Tento článek](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) ukazuje rozdíl mezi použitím K-Means shlukování vs. HDBSCAN algoritmů k průzkumu šumového datasetu s nerovnoměrnou hustotou shluků. + +## Algoritmy shlukování + +Existuje více než 100 algoritmů shlukování a jejich použití závisí na povaze dat. Pojďme si probrat některé z hlavních: + +- **Hierarchické shlukování**. Pokud je objekt klasifikován podle své blízkosti k blízkému objektu, spíše než k vzdálenějšímu, shluky jsou tvořeny na základě vzdálenosti jejich členů k ostatním objektům. Hierarchické shlukování Scikit-learn je hierarchické. + + ![Infografika hierarchického shlukování](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infografika od [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Shlukování podle centroidu**. Tento populární algoritmus vyžaduje volbu „k“, nebo počet shluků, které se mají vytvořit, po čemž algoritmus určí středový bod shluku a seskupí data kolem tohoto bodu. [K-means shlukování](https://wikipedia.org/wiki/K-means_clustering) je populární verzí shlukování podle centroidu. Střed je určen podle nejbližšího průměru, odtud název. Čtvercová vzdálenost od shluku je minimalizována. + + ![Infografika shlukování podle centroidu](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infografika od [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Shlukování založené na distribuci**. Založené na statistickém modelování, shlukování založené na distribuci se zaměřuje na určení pravděpodobnosti, že datový bod patří do shluku, a jeho přiřazení odpovídajícím způsobem. Metody Gaussovské směsi patří do tohoto typu. + +- **Shlukování založené na hustotě**. Datové body jsou přiřazeny do shluků na základě jejich hustoty, nebo jejich seskupení kolem sebe. Datové body vzdálené od skupiny jsou považovány za odlehlé hodnoty nebo šum. DBSCAN, Mean-shift a OPTICS patří do tohoto typu shlukování. + +- **Shlukování založené na mřížce**. Pro vícerozměrné datasety je vytvořena mřížka a data jsou rozdělena mezi buňky mřížky, čímž se vytvářejí shluky. + +## Cvičení – shlukujte svá data + +Shlukování jako technika je velmi podporováno správnou vizualizací, takže začněme vizualizací našich hudebních dat. Toto cvičení nám pomůže rozhodnout, kterou z metod shlukování bychom měli nejefektivněji použít pro povahu těchto dat. + +1. Otevřete soubor [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) v této složce. + +1. Importujte balíček `Seaborn` pro kvalitní vizualizaci dat. + + ```python + !pip install seaborn + ``` + +1. Připojte data písní ze souboru [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Načtěte dataframe s některými daty o písních. Připravte se na průzkum těchto dat importováním knihoven a vypsáním dat: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Zkontrolujte prvních pár řádků dat: + + | | název | album | umělec | hlavní žánr umělce | datum vydání | délka | popularita | tanečnost | akustičnost | energie | instrumentálnost | živost | hlasitost | mluvnost | tempo | takt | + | --- | ----------------------- | ---------------------------- | ------------------- | ------------------ | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | --------- | ----------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternativní 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. Získejte informace o datovém rámci pomocí volání `info()`: + + ```python + df.info() + ``` + + Výstup vypadá takto: + + ```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. Zkontrolujte, zda neobsahuje nulové hodnoty, pomocí volání `isnull()` a ověření, že součet je 0: + + ```python + df.isnull().sum() + ``` + + Vypadá dobře: + + ```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. Popište data: + + ```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 | + +> 🤔 Pokud pracujeme s clusteringem, což je metoda bez dohledu, která nevyžaduje označená data, proč ukazujeme tato data s popisky? Ve fázi průzkumu dat jsou užitečné, ale pro fungování algoritmů clusteringu nejsou nezbytné. Klidně byste mohli odstranit záhlaví sloupců a odkazovat na data podle čísla sloupce. + +Podívejte se na obecné hodnoty dat. Všimněte si, že popularita může být '0', což ukazuje na skladby, které nemají žádné hodnocení. Tyto skladby brzy odstraníme. + +1. Použijte barplot k zjištění nejpopulárnějších žánrů: + + ```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') + ``` + + ![nejpopulárnější](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Pokud chcete vidět více nejlepších hodnot, změňte top `[:5]` na větší hodnotu nebo ji odstraňte, abyste viděli vše. + +Všimněte si, že když je nejpopulárnější žánr označen jako 'Missing', znamená to, že Spotify jej neklasifikoval, takže ho odstraníme. + +1. Odstraňte chybějící data jejich filtrováním: + + ```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') + ``` + + Nyní znovu zkontrolujte žánry: + + ![nejpopulárnější](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. Tři nejpopulárnější žánry jednoznačně dominují tomuto datovému souboru. Zaměřme se na `afro dancehall`, `afropop` a `nigerian pop`, a navíc filtrujme datový soubor tak, aby odstranil vše s hodnotou popularity 0 (což znamená, že nebylo klasifikováno s popularitou v datovém souboru a může být považováno za šum pro naše účely): + + ```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. Proveďte rychlý test, zda data korelují nějakým zvlášť silným způsobem: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![korelace](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Jediná silná korelace je mezi `energy` a `loudness`, což není příliš překvapivé, protože hlasitá hudba je obvykle dost energická. Jinak jsou korelace poměrně slabé. Bude zajímavé vidět, co si algoritmus clusteringu z těchto dat odvodí. + + > 🎓 Všimněte si, že korelace neimplikuje kauzalitu! Máme důkaz korelace, ale žádný důkaz kauzality. [Zábavná webová stránka](https://tylervigen.com/spurious-correlations) obsahuje vizualizace, které tento bod zdůrazňují. + +Existuje v tomto datovém souboru nějaká konvergence kolem vnímané popularity skladby a její tanečnosti? FacetGrid ukazuje, že existují soustředné kruhy, které se zarovnávají bez ohledu na žánr. Mohlo by to být tak, že nigerijské chutě se sbíhají na určité úrovni tanečnosti pro tento žánr? + +✅ Vyzkoušejte různé datové body (energy, loudness, speechiness) a více nebo jiné hudební žánry. Co můžete objevit? Podívejte se na tabulku `df.describe()` a zjistěte obecné rozložení datových bodů. + +### Cvičení - rozložení dat + +Jsou tyto tři žánry významně odlišné ve vnímání jejich tanečnosti na základě jejich popularity? + +1. Prozkoumejte rozložení dat našich tří nejlepších žánrů pro popularitu a tanečnost podél dané osy x a y. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Můžete objevit soustředné kruhy kolem obecného bodu konvergence, které ukazují rozložení bodů. + + > 🎓 Všimněte si, že tento příklad používá graf KDE (Kernel Density Estimate), který reprezentuje data pomocí kontinuální křivky hustoty pravděpodobnosti. To nám umožňuje interpretovat data při práci s více rozloženími. + + Obecně se tři žánry volně zarovnávají z hlediska jejich popularity a tanečnosti. Určení clusterů v těchto volně zarovnaných datech bude výzvou: + + ![rozložení](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Vytvořte scatter plot: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Scatter plot stejných os ukazuje podobný vzor konvergence. + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Obecně platí, že pro clustering můžete použít scatter ploty k zobrazení clusterů dat, takže zvládnutí tohoto typu vizualizace je velmi užitečné. V další lekci vezmeme tato filtrovaná data a použijeme k-means clustering k objevení skupin v těchto datech, které se zajímavým způsobem překrývají. + +--- + +## 🚀Výzva + +V rámci přípravy na další lekci vytvořte graf o různých algoritmech clusteringu, které můžete objevit a použít v produkčním prostředí. Jaké typy problémů se clustering snaží řešit? + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Než použijete algoritmy clusteringu, jak jsme se naučili, je dobré pochopit povahu vašeho datového souboru. Přečtěte si více na toto téma [zde](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Tento užitečný článek](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) vás provede různými způsoby, jak se různé algoritmy clusteringu chovají vzhledem k různým tvarům dat. + +## Úkol + +[Prozkoumejte další vizualizace pro clustering](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/1-Visualize/assignment.md b/translations/cs/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..b89917787 --- /dev/null +++ b/translations/cs/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Prozkoumejte další vizualizace pro clustering + +## Pokyny + +V této lekci jste pracovali s některými technikami vizualizace, abyste získali představu o tom, jak vykreslit svá data při přípravě na clustering. Zejména bodové grafy jsou užitečné pro hledání skupin objektů. Prozkoumejte různé způsoby a různé knihovny pro vytváření bodových grafů a zdokumentujte svou práci v notebooku. Můžete použít data z této lekce, jiných lekcí nebo data, která si sami najdete (v notebooku však prosím uveďte jejich zdroj). Vykreslete některá data pomocí bodových grafů a vysvětlete, co jste zjistili. + +## Hodnotící kritéria + +| Kritérium | Vynikající | Dostatečné | Vyžaduje zlepšení | +| --------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------- | +| | Notebook obsahuje pět dobře zdokumentovaných bodových grafů | Notebook obsahuje méně než pět bodových grafů a je méně dobře zdokumentován | Notebook je neúplný | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/cs/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..05349cc49 --- /dev/null +++ b/translations/cs/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o co největší přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Za autoritativní zdroj by měl být považován původní dokument v jeho původním jazyce. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné výklady vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/2-K-Means/README.md b/translations/cs/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..9497e02fa --- /dev/null +++ b/translations/cs/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# K-Means clustering + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +V této lekci se naučíte, jak vytvářet klastery pomocí Scikit-learn a nigerijského hudebního datasetu, který jste importovali dříve. Probereme základy K-Means pro klastrování. Mějte na paměti, že jak jste se naučili v předchozí lekci, existuje mnoho způsobů, jak pracovat s klastery, a metoda, kterou použijete, závisí na vašich datech. Vyzkoušíme K-Means, protože je to nejběžnější technika klastrování. Pojďme začít! + +Pojmy, o kterých se dozvíte: + +- Silhouette skóre +- Metoda lokte +- Inerciální hodnota +- Variance + +## Úvod + +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) je metoda odvozená z oblasti zpracování signálů. Používá se k rozdělení a seskupení dat do 'k' klastrů pomocí série pozorování. Každé pozorování pracuje na seskupení daného datového bodu k nejbližšímu 'průměru', tedy středovému bodu klastru. + +Klastery lze vizualizovat jako [Voronoi diagramy](https://wikipedia.org/wiki/Voronoi_diagram), které zahrnují bod (nebo 'semínko') a jeho odpovídající oblast. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> Infografika od [Jen Looper](https://twitter.com/jenlooper) + +Proces K-Means klastrování [probíhá ve třech krocích](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Algoritmus vybere k-počet středových bodů vzorkováním z datasetu. Poté opakuje: + 1. Přiřadí každý vzorek k nejbližšímu centroidu. + 2. Vytvoří nové centroidy vypočítáním průměrné hodnoty všech vzorků přiřazených k předchozím centroidům. + 3. Poté vypočítá rozdíl mezi novými a starými centroidy a opakuje, dokud se centroidy nestabilizují. + +Jednou z nevýhod použití K-Means je nutnost stanovit 'k', tedy počet centroidů. Naštěstí metoda 'lokte' pomáhá odhadnout dobrý výchozí počet 'k'. Za chvíli si ji vyzkoušíte. + +## Předpoklady + +Budete pracovat v souboru [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb), který obsahuje import dat a předběžné čištění, které jste provedli v minulé lekci. + +## Cvičení - příprava + +Začněte tím, že se znovu podíváte na data o písních. + +1. Vytvořte boxplot, zavolejte `boxplot()` pro každý sloupec: + + ```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) + ``` + + Tato data jsou trochu hlučná: při pozorování každého sloupce jako boxplotu můžete vidět odlehlé hodnoty. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Můžete projít dataset a odstranit tyto odlehlé hodnoty, ale to by data značně zredukovalo. + +1. Prozatím vyberte, které sloupce použijete pro své cvičení klastrování. Vyberte ty s podobnými rozsahy a zakódujte sloupec `artist_top_genre` jako číselná data: + + ```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. Nyní musíte vybrat, kolik klastrů budete cílit. Víte, že existují 3 hudební žánry, které jsme vyčlenili z datasetu, takže zkusme 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 + ``` + +Vidíte vytištěné pole s předpovězenými klastery (0, 1 nebo 2) pro každý řádek datového rámce. + +1. Použijte toto pole k výpočtu 'silhouette skóre': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Silhouette skóre + +Hledejte silhouette skóre blíže k 1. Toto skóre se pohybuje od -1 do 1, a pokud je skóre 1, klastr je hustý a dobře oddělený od ostatních klastrů. Hodnota blízko 0 představuje překrývající se klastery s vzorky velmi blízko rozhodovací hranice sousedních klastrů. [(Zdroj)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Naše skóre je **.53**, tedy přímo uprostřed. To naznačuje, že naše data nejsou pro tento typ klastrování příliš vhodná, ale pokračujme. + +### Cvičení - vytvoření modelu + +1. Importujte `KMeans` a začněte proces klastrování. + + ```python + from sklearn.cluster import KMeans + wcss = [] + + for i in range(1, 11): + kmeans = KMeans(n_clusters = i, init = 'k-means++', random_state = 42) + kmeans.fit(X) + wcss.append(kmeans.inertia_) + + ``` + + Několik částí zde si zaslouží vysvětlení. + + > 🎓 range: Toto jsou iterace procesu klastrování. + + > 🎓 random_state: "Určuje generování náhodných čísel pro inicializaci centroidů." [Zdroj](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "součet čtverců uvnitř klastrů" měří průměrnou čtvercovou vzdálenost všech bodů v rámci klastru od centroidu klastru. [Zdroj](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inerciální hodnota: Algoritmy K-Means se snaží vybrat centroidy tak, aby minimalizovaly 'inerciální hodnotu', "měřítko toho, jak jsou klastery interně koherentní." [Zdroj](https://scikit-learn.org/stable/modules/clustering.html). Hodnota je připojena k proměnné wcss při každé iteraci. + + > 🎓 k-means++: V [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) můžete použít optimalizaci 'k-means++', která "inicializuje centroidy tak, aby byly (obecně) vzdálené od sebe, což vede pravděpodobně k lepším výsledkům než náhodná inicializace." + +### Metoda lokte + +Dříve jste předpokládali, že protože jste cílovali 3 hudební žánry, měli byste zvolit 3 klastery. Ale je tomu tak? + +1. Použijte metodu 'lokte', abyste si byli jistí. + + ```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() + ``` + + Použijte proměnnou `wcss`, kterou jste vytvořili v předchozím kroku, k vytvoření grafu ukazujícího, kde je 'ohyb' v lokti, což naznačuje optimální počet klastrů. Možná to **opravdu jsou** 3! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Cvičení - zobrazení klastrů + +1. Zkuste proces znovu, tentokrát nastavte tři klastery a zobrazte klastery jako 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. Zkontrolujte přesnost modelu: + + ```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))) + ``` + + Přesnost tohoto modelu není příliš dobrá a tvar klastrů vám naznačuje proč. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Tato data jsou příliš nevyvážená, málo korelovaná a mezi hodnotami sloupců je příliš velká variance na to, aby se dobře klastrovala. Ve skutečnosti jsou klastery, které se tvoří, pravděpodobně silně ovlivněny nebo zkresleny třemi kategoriemi žánrů, které jsme definovali výše. To byl proces učení! + + V dokumentaci Scikit-learn můžete vidět, že model jako tento, s klastery, které nejsou příliš dobře vymezené, má problém s 'variancí': + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infografika ze Scikit-learn + +## Variance + +Variance je definována jako "průměr čtvercových rozdílů od průměru" [(Zdroj)](https://www.mathsisfun.com/data/standard-deviation.html). V kontextu tohoto problému klastrování se jedná o data, kde čísla našeho datasetu mají tendenci se příliš odchylovat od průměru. + +✅ Toto je skvělý moment k zamyšlení nad všemi způsoby, jak byste mohli tento problém napravit. Upravit data trochu více? Použít jiné sloupce? Použít jiný algoritmus? Tip: Zkuste [škálovat svá data](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) pro jejich normalizaci a otestujte jiné sloupce. + +> Vyzkoušejte tento '[kalkulátor variance](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)', abyste lépe pochopili tento koncept. + +--- + +## 🚀Výzva + +Stravte nějaký čas s tímto notebookem a upravujte parametry. Dokážete zlepšit přesnost modelu tím, že data více vyčistíte (například odstraníte odlehlé hodnoty)? Můžete použít váhy, abyste dali větší váhu určitým vzorkům dat. Co dalšího můžete udělat pro vytvoření lepších klastrů? + +Tip: Zkuste škálovat svá data. V notebooku je komentovaný kód, který přidává standardní škálování, aby se sloupce dat více podobaly z hlediska rozsahu. Zjistíte, že zatímco silhouette skóre klesá, 'ohyb' v grafu lokte se vyhlazuje. To je proto, že ponechání dat neškálovaných umožňuje datům s menší variancí mít větší váhu. Přečtěte si o tomto problému více [zde](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Podívejte se na simulátor K-Means [jako je tento](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Můžete použít tento nástroj k vizualizaci vzorových datových bodů a určení jejich centroidů. Můžete upravit náhodnost dat, počet klastrů a počet centroidů. Pomáhá vám to získat představu o tom, jak lze data seskupit? + +Také se podívejte na [tento materiál o K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) ze Stanfordu. + +## Zadání + +[Vyzkoušejte různé metody klastrování](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/2-K-Means/assignment.md b/translations/cs/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..aaf189d07 --- /dev/null +++ b/translations/cs/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Vyzkoušejte různé metody shlukování + +## Pokyny + +V této lekci jste se naučili o shlukování pomocí K-Means. Někdy však K-Means není vhodný pro vaše data. Vytvořte notebook s použitím dat buď z těchto lekcí, nebo z jiného zdroje (uveďte zdroj) a ukažte jinou metodu shlukování, která nepoužívá K-Means. Co jste se naučili? + +## Hodnocení + +| Kritéria | Vynikající | Přiměřené | Vyžaduje zlepšení | +| -------- | --------------------------------------------------------------- | ------------------------------------------------------------------- | ---------------------------- | +| | Notebook je prezentován s dobře zdokumentovaným modelem shlukování | Notebook je prezentován bez dobré dokumentace a/nebo neúplný | Je předložena neúplná práce | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/cs/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..6d99143c8 --- /dev/null +++ b/translations/cs/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/5-Clustering/README.md b/translations/cs/5-Clustering/README.md new file mode 100644 index 000000000..df9e1d020 --- /dev/null +++ b/translations/cs/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Modely shlukování pro strojové učení + +Shlukování je úloha strojového učení, která se snaží najít objekty, jež si jsou navzájem podobné, a seskupit je do skupin nazývaných shluky. Co odlišuje shlukování od jiných přístupů ve strojovém učení, je to, že vše probíhá automaticky. Ve skutečnosti lze říci, že jde o opak učení s učitelem. + +## Regionální téma: modely shlukování pro hudební vkus nigerijského publika 🎧 + +Nigerijské publikum je velmi rozmanité a má různorodý hudební vkus. Pomocí dat získaných ze Spotify (inspirováno [tímto článkem](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)) se podíváme na některé populární skladby v Nigérii. Tento dataset obsahuje údaje o různých skladbách, jako je skóre 'tanečnosti', 'akustičnosti', hlasitosti, 'mluvnosti', oblíbenosti a energie. Bude zajímavé objevit v těchto datech určité vzory! + +![Gramofon](../../../5-Clustering/images/turntable.jpg) + +> Foto od Marcely Laskoski na Unsplash + +V této sérii lekcí objevíte nové způsoby analýzy dat pomocí technik shlukování. Shlukování je obzvláště užitečné, pokud váš dataset postrádá štítky. Pokud však štítky má, mohou být užitečnější klasifikační techniky, které jste se naučili v předchozích lekcích. Ale v případech, kdy chcete seskupit neoznačená data, je shlukování skvělým způsobem, jak objevit vzory. + +> Existují užitečné nástroje s nízkým kódem, které vám mohou pomoci naučit se pracovat s modely shlukování. Vyzkoušejte [Azure ML pro tento úkol](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lekce + +1. [Úvod do shlukování](1-Visualize/README.md) +2. [Shlukování metodou K-Means](2-K-Means/README.md) + +## Poděkování + +Tyto lekce byly napsány s 🎶 od [Jen Looper](https://www.twitter.com/jenlooper) s užitečnými recenzemi od [Rishit Dagli](https://rishit_dagli) a [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +Dataset [Nigerijské skladby](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) byl získán z Kaggle a pochází ze Spotify. + +Užitečné příklady K-Means, které pomohly při tvorbě této lekce, zahrnují tuto [analýzu kosatců](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), tento [úvodní notebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python) a tento [hypotetický příklad NGO](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/1-Introduction-to-NLP/README.md b/translations/cs/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..f060ba8bf --- /dev/null +++ b/translations/cs/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Úvod do zpracování přirozeného jazyka + +Tato lekce se zabývá stručnou historií a důležitými koncepty *zpracování přirozeného jazyka*, což je podoblast *počítačové lingvistiky*. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +## Úvod + +NLP, jak se běžně nazývá, je jednou z nejznámějších oblastí, kde bylo strojové učení aplikováno a používáno v produkčním softwaru. + +✅ Dokážete si představit software, který používáte každý den a který pravděpodobně obsahuje nějaké NLP? Co třeba vaše textové procesory nebo mobilní aplikace, které pravidelně používáte? + +Dozvíte se o: + +- **Myšlence jazyků**. Jak se jazyky vyvíjely a jaké byly hlavní oblasti studia. +- **Definici a konceptech**. Naučíte se také definice a koncepty o tom, jak počítače zpracovávají text, včetně analýzy, gramatiky a identifikace podstatných jmen a sloves. V této lekci jsou některé programovací úkoly a několik důležitých konceptů, které se později naučíte programovat v dalších lekcích. + +## Počítačová lingvistika + +Počítačová lingvistika je oblast výzkumu a vývoje, která se po mnoho desetiletí zabývá tím, jak mohou počítače pracovat s jazyky, rozumět jim, překládat je a komunikovat v nich. Zpracování přirozeného jazyka (NLP) je příbuzná oblast zaměřená na to, jak mohou počítače zpracovávat „přirozené“, tedy lidské jazyky. + +### Příklad - diktování na telefonu + +Pokud jste někdy diktovali svému telefonu místo psaní nebo se ptali virtuálního asistenta na otázku, váš hlas byl převeden do textové podoby a poté zpracován nebo *analyzován* z jazyka, kterým jste mluvili. Detekovaná klíčová slova byla poté zpracována do formátu, kterému telefon nebo asistent rozuměl a mohl na něj reagovat. + +![porozumění](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Skutečné jazykové porozumění je těžké! Obrázek od [Jen Looper](https://twitter.com/jenlooper) + +### Jak je tato technologie možná? + +To je možné díky tomu, že někdo napsal počítačový program, který to umožňuje. Před několika desetiletími někteří autoři sci-fi předpovídali, že lidé budou většinou mluvit se svými počítači a počítače vždy přesně pochopí, co tím myslí. Bohužel se ukázalo, že je to těžší problém, než si mnozí představovali, a přestože je dnes mnohem lépe pochopený, stále existují významné výzvy při dosažení „dokonalého“ zpracování přirozeného jazyka, pokud jde o pochopení významu věty. To je obzvláště obtížné, pokud jde o pochopení humoru nebo detekci emocí, jako je sarkasmus, ve větě. + +V tuto chvíli si možná vzpomínáte na školní hodiny, kde učitel probíral části gramatiky ve větě. V některých zemích se studenti učí gramatiku a lingvistiku jako samostatný předmět, ale v mnoha zemích jsou tyto témata zahrnuty jako součást výuky jazyka: buď vašeho prvního jazyka na základní škole (učení čtení a psaní) a možná druhého jazyka na střední škole. Nemějte obavy, pokud nejste odborníkem na rozlišování podstatných jmen od sloves nebo příslovcí od přídavných jmen! + +Pokud máte potíže s rozdílem mezi *jednoduchým přítomným časem* a *přítomným průběhovým časem*, nejste sami. To je náročné pro mnoho lidí, dokonce i rodilé mluvčí jazyka. Dobrou zprávou je, že počítače jsou opravdu dobré v aplikaci formálních pravidel, a naučíte se psát kód, který dokáže *analyzovat* větu stejně dobře jako člověk. Větší výzvou, kterou později prozkoumáte, je pochopení *významu* a *sentimentu* věty. + +## Předpoklady + +Pro tuto lekci je hlavním předpokladem schopnost číst a rozumět jazyku této lekce. Nejsou zde žádné matematické problémy ani rovnice k řešení. Zatímco původní autor napsal tuto lekci v angličtině, je také přeložena do jiných jazyků, takže byste mohli číst překlad. Existují příklady, kde je použito několik různých jazyků (pro porovnání různých gramatických pravidel různých jazyků). Tyto *nejsou* přeloženy, ale vysvětlující text ano, takže význam by měl být jasný. + +Pro programovací úkoly budete používat Python a příklady jsou v Pythonu 3.8. + +V této části budete potřebovat a používat: + +- **Porozumění Pythonu 3**. Porozumění programovacímu jazyku Python 3, tato lekce používá vstupy, smyčky, čtení souborů, pole. +- **Visual Studio Code + rozšíření**. Budeme používat Visual Studio Code a jeho rozšíření pro Python. Můžete také použít Python IDE dle svého výběru. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) je zjednodušená knihovna pro zpracování textu v Pythonu. Postupujte podle pokynů na stránkách TextBlob pro instalaci na váš systém (nainstalujte také korpusy, jak je uvedeno níže): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Tip: Python můžete spouštět přímo v prostředí VS Code. Podívejte se na [dokumentaci](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) pro více informací. + +## Komunikace s počítači + +Historie snahy přimět počítače, aby rozuměly lidskému jazyku, sahá desítky let zpět, a jedním z prvních vědců, kteří se zabývali zpracováním přirozeného jazyka, byl *Alan Turing*. + +### Turingův test + +Když Turing v 50. letech 20. století zkoumal *umělou inteligenci*, uvažoval, zda by mohl být člověku a počítači (prostřednictvím psané komunikace) zadán konverzační test, při kterém by člověk v konverzaci nebyl schopen určit, zda komunikuje s jiným člověkem nebo počítačem. + +Pokud by po určité délce konverzace člověk nemohl určit, zda odpovědi pocházejí od počítače nebo ne, mohl by být počítač považován za *myslící*? + +### Inspirace - hra „imitační hra“ + +Myšlenka na to přišla z párty hry nazvané *Imitační hra*, kde je vyšetřovatel sám v místnosti a má za úkol určit, kdo ze dvou lidí (v jiné místnosti) je muž a žena. Vyšetřovatel může posílat poznámky a musí se snažit vymyslet otázky, na které písemné odpovědi odhalí pohlaví tajemné osoby. Samozřejmě, hráči v jiné místnosti se snaží zmást vyšetřovatele tím, že odpovídají na otázky takovým způsobem, aby ho uvedli v omyl nebo zmátli, zatímco zároveň dávají dojem, že odpovídají upřímně. + +### Vývoj Elizy + +V 60. letech 20. století vyvinul vědec z MIT *Joseph Weizenbaum* [*Elizu*](https://wikipedia.org/wiki/ELIZA), počítačového „terapeuta“, který by kladl člověku otázky a dával dojem, že rozumí jeho odpovědím. Nicméně, zatímco Eliza dokázala analyzovat větu a identifikovat určité gramatické konstrukce a klíčová slova, aby dala rozumnou odpověď, nemohlo se říci, že větu *rozumí*. Pokud byla Elize předložena věta ve formátu "**Jsem** smutný", mohla by přeskupit a nahradit slova ve větě, aby vytvořila odpověď "Jak dlouho jste **smutný**?". + +To dávalo dojem, že Eliza rozumí tvrzení a klade následnou otázku, zatímco ve skutečnosti měnila čas a přidávala některá slova. Pokud Eliza nemohla identifikovat klíčové slovo, na které měla odpověď, místo toho by dala náhodnou odpověď, která by mohla být použitelná pro mnoho různých tvrzení. Elizu bylo snadné oklamat, například pokud uživatel napsal "**Ty jsi** kolo", mohla by odpovědět "Jak dlouho jsem **kolo**?", místo rozumnější odpovědi. + +[![Rozhovor s Elizou](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Rozhovor s Elizou") + +> 🎥 Klikněte na obrázek výše pro video o původním programu ELIZA + +> Poznámka: Původní popis [Elizy](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) publikovaný v roce 1966 si můžete přečíst, pokud máte účet ACM. Alternativně si přečtěte o Elize na [wikipedii](https://wikipedia.org/wiki/ELIZA). + +## Cvičení - programování základního konverzačního bota + +Konverzační bot, jako Eliza, je program, který vyžaduje vstup od uživatele a zdá se, že rozumí a inteligentně reaguje. Na rozdíl od Elizy náš bot nebude mít několik pravidel, která by mu dávala dojem inteligentní konverzace. Místo toho bude mít pouze jednu schopnost, a to pokračovat v konverzaci s náhodnými odpověďmi, které by mohly fungovat téměř v jakékoli triviální konverzaci. + +### Plán + +Vaše kroky při vytváření konverzačního bota: + +1. Vytiskněte pokyny, které uživateli poradí, jak komunikovat s botem. +2. Spusťte smyčku. + 1. Přijměte vstup od uživatele. + 2. Pokud uživatel požádá o ukončení, ukončete. + 3. Zpracujte vstup uživatele a určete odpověď (v tomto případě je odpověď náhodný výběr ze seznamu možných obecných odpovědí). + 4. Vytiskněte odpověď. +3. Vraťte se zpět ke kroku 2. + +### Vytvoření bota + +Pojďme nyní vytvořit bota. Začneme definováním některých frází. + +1. Vytvořte si tohoto bota sami v Pythonu s následujícími náhodnými odpověďmi: + + ```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?"] + ``` + + Zde je ukázkový výstup, který vás může vést (vstup uživatele je na řádcích začínajících `>`): + + ```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! + ``` + + Jedno možné řešení úkolu je [zde](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Zastavte se a zamyslete se + + 1. Myslíte si, že náhodné odpovědi by „oklamaly“ někoho, aby si myslel, že bot skutečně rozumí? + 2. Jaké funkce by bot potřeboval, aby byl efektivnější? + 3. Pokud by bot skutečně „rozuměl“ významu věty, potřeboval by si „pamatovat“ význam předchozích vět v konverzaci? + +--- + +## 🚀Výzva + +Vyberte si jeden z prvků „zastavte se a zamyslete se“ výše a buď se ho pokuste implementovat v kódu, nebo napište řešení na papír pomocí pseudokódu. + +V další lekci se dozvíte o řadě dalších přístupů k analýze přirozeného jazyka a strojovému učení. + +## [Kvíz po lekci](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Podívejte se na níže uvedené odkazy jako příležitosti k dalšímu čtení. + +### Odkazy + +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. + +## Úkol + +[Vyhledejte bota](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/cs/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..0982a238b --- /dev/null +++ b/translations/cs/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Hledání bota + +## Pokyny + +Boti jsou všude. Vaším úkolem je najít jednoho a osvojit si ho! Můžete je najít na webových stránkách, v bankovních aplikacích nebo po telefonu, například když voláte finančním službám pro radu nebo informace o účtu. Analyzujte bota a zjistěte, zda ho dokážete zmást. Pokud se vám podaří bota zmást, proč si myslíte, že k tomu došlo? Napište krátkou práci o své zkušenosti. + +## Hodnocení + +| Kritéria | Vynikající | Dostatečné | Vyžaduje zlepšení | +| -------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------- | --------------------- | +| | Napsána celá stránka, která vysvětluje předpokládanou architekturu bota a popisuje vaši zkušenost s ním | Práce je neúplná nebo nedostatečně prozkoumaná | Práce není odevzdána | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/2-Tasks/README.md b/translations/cs/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..9b3dd98a7 --- /dev/null +++ b/translations/cs/6-NLP/2-Tasks/README.md @@ -0,0 +1,222 @@ + +# Běžné úlohy a techniky zpracování přirozeného jazyka + +Pro většinu úloh *zpracování přirozeného jazyka* je nutné text rozdělit, analyzovat a výsledky uložit nebo porovnat s pravidly a datovými sadami. Tyto úlohy umožňují programátorovi odvodit _význam_, _záměr_ nebo pouze _četnost_ termínů a slov v textu. + +## [Kvíz před přednáškou](https://ff-quizzes.netlify.app/en/ml/) + +Pojďme objevit běžné techniky používané při zpracování textu. V kombinaci se strojovým učením vám tyto techniky pomohou efektivně analyzovat velké množství textu. Než však tyto úlohy aplikujete na ML, je důležité pochopit problémy, se kterými se odborník na NLP setkává. + +## Běžné úlohy v NLP + +Existuje několik způsobů, jak analyzovat text, na kterém pracujete. Existují úlohy, které můžete provádět, a díky nim získáte porozumění textu a můžete vyvodit závěry. Tyto úlohy obvykle provádíte v určitém pořadí. + +### Tokenizace + +Pravděpodobně první věc, kterou většina algoritmů NLP musí udělat, je rozdělit text na tokeny, tedy slova. I když to zní jednoduše, zohlednění interpunkce a různých jazykových oddělovačů slov a vět může být složité. Možná budete muset použít různé metody k určení hranic. + +![tokenizace](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokenizace věty z **Pýchy a předsudku**. Infografika od [Jen Looper](https://twitter.com/jenlooper) + +### Vektorizace (Embeddings) + +[Word embeddings](https://wikipedia.org/wiki/Word_embedding) jsou způsob, jak převést textová data na číselnou podobu. Vektorizace se provádí tak, aby slova s podobným významem nebo slova používaná společně byla seskupena. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "Mám nejvyšší respekt k vašim nervům, jsou to moji staří přátelé." - Vektorizace věty z **Pýchy a předsudku**. Infografika od [Jen Looper](https://twitter.com/jenlooper) + +✅ Vyzkoušejte [tento zajímavý nástroj](https://projector.tensorflow.org/) pro experimentování s vektorizací slov. Kliknutím na jedno slovo zobrazíte shluky podobných slov: 'toy' se shlukuje s 'disney', 'lego', 'playstation' a 'console'. + +### Syntaktická analýza a označování částí řeči + +Každé slovo, které bylo tokenizováno, může být označeno jako část řeči - podstatné jméno, sloveso nebo přídavné jméno. Věta `rychlá červená liška přeskočila líného hnědého psa` může být označena jako liška = podstatné jméno, přeskočila = sloveso. + +![syntaktická analýza](../../../../6-NLP/2-Tasks/images/parse.png) + +> Syntaktická analýza věty z **Pýchy a předsudku**. Infografika od [Jen Looper](https://twitter.com/jenlooper) + +Syntaktická analýza znamená rozpoznání, která slova jsou ve větě vzájemně propojena - například `rychlá červená liška přeskočila` je sekvence přídavné jméno-podstatné jméno-sloveso, která je oddělená od sekvence `líný hnědý pes`. + +### Četnost slov a frází + +Užitečným postupem při analýze velkého množství textu je vytvoření slovníku každého slova nebo fráze, která nás zajímá, a jak často se v textu objevuje. Fráze `rychlá červená liška přeskočila líného hnědého psa` má četnost slova "the" 2. + +Podívejme se na příklad textu, kde počítáme četnost slov. Báseň The Winners od Rudyarda Kiplinga obsahuje následující verš: + +```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. +``` + +Protože četnost frází může být citlivá na velikost písmen nebo naopak, fráze `a friend` má četnost 2, `the` má četnost 6 a `travels` má četnost 2. + +### N-gramy + +Text může být rozdělen na sekvence slov určité délky, jedno slovo (unigram), dvě slova (bigramy), tři slova (trigramy) nebo libovolný počet slov (n-gramy). + +Například `rychlá červená liška přeskočila líného hnědého psa` s n-gram skóre 2 vytvoří následující n-gramy: + +1. rychlá červená +2. červená liška +3. liška přeskočila +4. přeskočila líného +5. líného hnědého +6. hnědého psa + +Může být snazší si to představit jako posuvné okno nad větou. Zde je to pro n-gramy o 3 slovech, n-gram je tučně v každé větě: + +1. **rychlá červená liška** přeskočila líného hnědého psa +2. rychlá **červená liška přeskočila** líného hnědého psa +3. rychlá červená **liška přeskočila líného** hnědého psa +4. rychlá červená liška **přeskočila líného hnědého** psa +5. rychlá červená liška přeskočila **líného hnědého psa** + +![posuvné okno n-gramů](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> N-gram hodnota 3: Infografika od [Jen Looper](https://twitter.com/jenlooper) + +### Extrakce podstatných jmenných frází + +Většina vět obsahuje podstatné jméno, které je předmětem nebo objektem věty. V angličtině je často identifikovatelné díky předcházejícímu 'a', 'an' nebo 'the'. Identifikace předmětu nebo objektu věty pomocí 'extrakce podstatné jmenné fráze' je běžnou úlohou v NLP při pokusu o pochopení významu věty. + +✅ Ve větě "Nemohu si vzpomenout na hodinu, místo, pohled nebo slova, která položila základ. Je to příliš dávno. Byl jsem uprostřed, než jsem si uvědomil, že jsem začal." dokážete identifikovat podstatné jmenné fráze? + +Ve větě `rychlá červená liška přeskočila líného hnědého psa` jsou 2 podstatné jmenné fráze: **rychlá červená liška** a **líný hnědý pes**. + +### Analýza sentimentu + +Věta nebo text může být analyzován z hlediska sentimentu, tedy jak *pozitivní* nebo *negativní* je. Sentiment se měří pomocí *polarizace* a *objektivity/subjektivity*. Polarizace se měří od -1.0 do 1.0 (negativní až pozitivní) a 0.0 do 1.0 (nejvíce objektivní až nejvíce subjektivní). + +✅ Později se naučíte, že existují různé způsoby, jak určit sentiment pomocí strojového učení, ale jedním ze způsobů je mít seznam slov a frází, které jsou lidským expertem kategorizovány jako pozitivní nebo negativní, a aplikovat tento model na text k výpočtu skóre polarizace. Vidíte, jak by to mohlo fungovat v některých situacích a méně dobře v jiných? + +### Inflekce + +Inflekce umožňuje vzít slovo a získat jeho jednotné nebo množné číslo. + +### Lemmatizace + +*Lemma* je kořenové nebo základní slovo pro sadu slov, například *letěl*, *letí*, *létání* mají lemma slovesa *letět*. + +Existují také užitečné databáze dostupné pro výzkumníka NLP, zejména: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) je databáze slov, synonym, antonym a mnoha dalších detailů pro každé slovo v mnoha různých jazycích. Je neuvěřitelně užitečná při pokusu o vytváření překladů, kontrolu pravopisu nebo jazykových nástrojů jakéhokoli typu. + +## Knihovny NLP + +Naštěstí nemusíte všechny tyto techniky vytvářet sami, protože existují vynikající knihovny v Pythonu, které je zpřístupňují vývojářům, kteří nejsou specializovaní na zpracování přirozeného jazyka nebo strojové učení. V dalších lekcích najdete více příkladů, ale zde se naučíte několik užitečných příkladů, které vám pomohou s dalším úkolem. + +### Cvičení - použití knihovny `TextBlob` + +Použijme knihovnu TextBlob, protože obsahuje užitečná API pro řešení těchto typů úloh. TextBlob "stojí na obrovských ramenou [NLTK](https://nltk.org) a [pattern](https://github.com/clips/pattern) a dobře spolupracuje s oběma." Má značné množství ML zabudované ve svém API. + +> Poznámka: Doporučuje se [rychlý průvodce](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) pro TextBlob, který je určen pro zkušené vývojáře v Pythonu. + +Při pokusu o identifikaci *podstatných jmenných frází* nabízí TextBlob několik možností extraktorů pro nalezení podstatných jmenných frází. + +1. Podívejte se na `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 + ``` + + > Co se zde děje? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) je "extraktor podstatných jmenných frází, který používá chunk parsing trénovaný na korpusu ConLL-2000." ConLL-2000 odkazuje na konferenci o zpracování přirozeného jazyka z roku 2000. Každý rok konference pořádala workshop na řešení obtížného problému NLP, a v roce 2000 to bylo chunkování podstatných jmenných frází. Model byl trénován na Wall Street Journal, s "sekcemi 15-18 jako trénovací data (211727 tokenů) a sekcí 20 jako testovací data (47377 tokenů)". Postupy použité můžete najít [zde](https://www.clips.uantwerpen.be/conll2000/chunking/) a [výsledky](https://ifarm.nl/erikt/research/np-chunking.html). + +### Výzva - zlepšení vašeho bota pomocí NLP + +V předchozí lekci jste vytvořili velmi jednoduchého Q&A bota. Nyní uděláte Marvina trochu empatičtějšího tím, že analyzujete váš vstup na sentiment a vytisknete odpověď odpovídající sentimentu. Budete také muset identifikovat `noun_phrase` a zeptat se na ni. + +Vaše kroky při vytváření lepšího konverzačního bota: + +1. Vytiskněte instrukce, jak komunikovat s botem +2. Spusťte smyčku + 1. Přijměte uživatelský vstup + 2. Pokud uživatel požádal o ukončení, ukončete + 3. Zpracujte uživatelský vstup a určete odpovídající odpověď na sentiment + 4. Pokud je v sentimentu detekována podstatná jmenná fráze, vytvořte její množné číslo a požádejte o další vstup na toto téma + 5. Vytiskněte odpověď +3. Vraťte se zpět ke kroku 2 + +Zde je ukázka kódu pro určení sentimentu pomocí TextBlob. Všimněte si, že existují pouze čtyři *stupně* odpovědi na sentiment (můžete jich mít více, pokud chcete): + +```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. " +``` + +Zde je ukázkový výstup, který vás může vést (uživatelský vstup je na řádcích začínajících >): + +```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! +``` + +Jedno možné řešení úkolu je [zde](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Kontrola znalostí + +1. Myslíte si, že empatické odpovědi by mohly 'oklamat' někoho, aby si myslel, že bot skutečně rozumí? +2. Dělá identifikace podstatné jmenné fráze bota více 'uvěřitelným'? +3. Proč by extrakce 'podstatné jmenné fráze' z věty byla užitečná věc? + +--- + +Implementujte bota z předchozí kontroly znalostí a otestujte ho na příteli. Dokáže je oklamat? Dokážete udělat svého bota více 'uvěřitelným'? + +## 🚀Výzva + +Vezměte úkol z předchozí kontroly znalostí a zkuste ho implementovat. Otestujte bota na příteli. Dokáže je oklamat? Dokážete udělat svého bota více 'uvěřitelným'? + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +V následujících lekcích se dozvíte více o analýze sentimentu. Prozkoumejte tuto zajímavou techniku v článcích, jako jsou tyto na [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Úkol + +[Nechte bota odpovídat](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/2-Tasks/assignment.md b/translations/cs/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..2d5c52b9a --- /dev/null +++ b/translations/cs/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Naučte bota odpovídat + +## Instrukce + +V předchozích lekcích jste naprogramovali základního bota, se kterým si můžete povídat. Tento bot dává náhodné odpovědi, dokud neřeknete 'bye'. Dokážete udělat odpovědi méně náhodné a nastavit, aby reagoval na konkrétní věci, jako například 'proč' nebo 'jak'? Zamyslete se, jak by strojové učení mohlo tento typ práce učinit méně manuálním, když budete svého bota rozšiřovat. Můžete použít knihovny NLTK nebo TextBlob, aby byly vaše úkoly jednodušší. + +## Hodnocení + +| Kritéria | Vynikající | Přiměřené | Potřebuje zlepšení | +| -------- | ------------------------------------------- | ---------------------------------------------- | ----------------------- | +| | Je předložen nový soubor bot.py a je zdokumentován | Je předložen nový soubor bot.py, ale obsahuje chyby | Soubor není předložen | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/3-Translation-Sentiment/README.md b/translations/cs/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..91ad70987 --- /dev/null +++ b/translations/cs/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Překlad a analýza sentimentu pomocí ML + +V předchozích lekcích jste se naučili, jak vytvořit základního bota pomocí knihovny `TextBlob`, která využívá strojové učení v pozadí k provádění základních úkolů NLP, jako je extrakce podstatných jmen. Další důležitou výzvou v oblasti počítačové lingvistiky je přesný _překlad_ věty z jednoho mluveného nebo psaného jazyka do jiného. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +Překlad je velmi obtížný problém, který je komplikován tím, že existují tisíce jazyků, z nichž každý může mít velmi odlišná gramatická pravidla. Jedním z přístupů je převést formální gramatická pravidla jednoho jazyka, například angličtiny, do struktury nezávislé na jazyku a poté je přeložit zpět do jiného jazyka. Tento přístup zahrnuje následující kroky: + +1. **Identifikace**. Identifikujte nebo označte slova ve vstupním jazyce jako podstatná jména, slovesa atd. +2. **Vytvoření překladu**. Vytvořte přímý překlad každého slova ve formátu cílového jazyka. + +### Příklad věty, angličtina do irštiny + +V angličtině je věta _I feel happy_ složena ze tří slov v pořadí: + +- **podmět** (I) +- **sloveso** (feel) +- **přídavné jméno** (happy) + +Nicméně v irštině má stejná věta velmi odlišnou gramatickou strukturu – emoce jako "*happy*" nebo "*sad*" jsou vyjádřeny jako něco, co je *na vás*. + +Anglická fráze `I feel happy` by se v irštině přeložila jako `Tá athas orm`. Doslovný překlad by byl `Štěstí je na mně`. + +Irský mluvčí překládající do angličtiny by řekl `I feel happy`, nikoli `Happy is upon me`, protože rozumí významu věty, i když se slova a struktura věty liší. + +Formální pořadí věty v irštině je: + +- **sloveso** (Tá nebo is) +- **přídavné jméno** (athas, nebo happy) +- **podmět** (orm, nebo upon me) + +## Překlad + +Naivní překladový program by mohl překládat pouze slova, ignorujíc strukturu věty. + +✅ Pokud jste se jako dospělí učili druhý (nebo třetí či více) jazyk, možná jste začali tím, že jste přemýšleli ve svém mateřském jazyce, překládali koncept slovo po slovu ve své hlavě do druhého jazyka a poté vyslovili svůj překlad. To je podobné tomu, co dělají naivní překladové počítačové programy. Je důležité překonat tuto fázi, abyste dosáhli plynulosti! + +Naivní překlad vede ke špatným (a někdy veselým) překladům: `I feel happy` se doslovně přeloží jako `Mise bhraitheann athas` v irštině. To znamená (doslovně) `já cítím štěstí` a není to platná irská věta. I když angličtina a irština jsou jazyky mluvené na dvou blízce sousedících ostrovech, jsou to velmi odlišné jazyky s různými gramatickými strukturami. + +> Můžete se podívat na některá videa o irských lingvistických tradicích, například [toto](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Přístupy strojového učení + +Doposud jste se naučili o přístupu založeném na formálních pravidlech k zpracování přirozeného jazyka. Dalším přístupem je ignorovat význam slov a _místo toho použít strojové učení k detekci vzorců_. To může fungovat při překladu, pokud máte hodně textu (*korpus*) nebo textů (*korpora*) v původním i cílovém jazyce. + +Například vezměte případ *Pýchy a předsudku*, známého anglického románu napsaného Jane Austenovou v roce 1813. Pokud si prohlédnete knihu v angličtině a lidský překlad knihy do *francouzštiny*, mohli byste detekovat fráze v jednom jazyce, které jsou _idiomaticky_ přeloženy do druhého. To si vyzkoušíte za chvíli. + +Například když je anglická fráze `I have no money` doslovně přeložena do francouzštiny, může se stát `Je n'ai pas de monnaie`. "Monnaie" je zrádný francouzský 'falešný přítel', protože 'money' a 'monnaie' nejsou synonymní. Lepší překlad, který by mohl vytvořit člověk, by byl `Je n'ai pas d'argent`, protože lépe vyjadřuje význam, že nemáte žádné peníze (spíše než 'drobné', což je význam 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Obrázek od [Jen Looper](https://twitter.com/jenlooper) + +Pokud má model strojového učení dostatek lidských překladů, na kterých může stavět model, může zlepšit přesnost překladů identifikací běžných vzorců v textech, které byly dříve přeloženy odbornými lidskými mluvčími obou jazyků. + +### Cvičení - překlad + +Můžete použít `TextBlob` k překladu vět. Vyzkoušejte slavní první větu z **Pýchy a předsudku**: + +```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` odvede docela dobrou práci při překladu: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Lze tvrdit, že překlad TextBlob je mnohem přesnější než francouzský překlad knihy z roku 1932 od V. Leconte a 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." + +V tomto případě překlad informovaný strojovým učením odvádí lepší práci než lidský překladatel, který zbytečně vkládá slova do úst původnímu autorovi pro 'jasnost'. + +> Co se zde děje? A proč je TextBlob tak dobrý v překladu? No, v pozadí používá Google Translate, sofistikovanou AI schopnou analyzovat miliony frází a předpovídat nejlepší řetězce pro daný úkol. Nic manuálního se zde neděje a k použití `blob.translate` potřebujete připojení k internetu. + +✅ Vyzkoušejte další věty. Který překlad je lepší, strojové učení nebo lidský překlad? V jakých případech? + +## Analýza sentimentu + +Další oblastí, kde strojové učení může velmi dobře fungovat, je analýza sentimentu. Přístup bez strojového učení k sentimentu spočívá v identifikaci slov a frází, které jsou 'pozitivní' a 'negativní'. Poté, při zpracování nového textu, vypočítá celkovou hodnotu pozitivních, negativních a neutrálních slov, aby identifikoval celkový sentiment. + +Tento přístup lze snadno oklamat, jak jste mohli vidět v úkolu Marvin - věta `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` je sarkastická, negativní věta, ale jednoduchý algoritmus detekuje 'great', 'wonderful', 'glad' jako pozitivní a 'waste', 'lost' a 'dark' jako negativní. Celkový sentiment je ovlivněn těmito protichůdnými slovy. + +✅ Zastavte se na chvíli a zamyslete se nad tím, jak jako lidští mluvčí vyjadřujeme sarkasmus. Intonace hraje velkou roli. Zkuste říct frázi "Well, that film was awesome" různými způsoby, abyste zjistili, jak váš hlas vyjadřuje význam. + +### Přístupy strojového učení + +Přístup strojového učení by spočíval v ručním shromáždění negativních a pozitivních textů - tweetů, recenzí filmů nebo čehokoli, kde člověk dal hodnocení *a* napsal názor. Poté lze na názory a hodnocení aplikovat techniky NLP, aby se objevily vzorce (např. pozitivní recenze filmů mají tendenci obsahovat frázi 'Oscar worthy' více než negativní recenze filmů, nebo pozitivní recenze restaurací říkají 'gourmet' mnohem více než 'disgusting'). + +> ⚖️ **Příklad**: Pokud byste pracovali v kanceláři politika a projednával se nový zákon, voliči by mohli psát do kanceláře e-maily podporující nebo e-maily proti konkrétnímu novému zákonu. Řekněme, že byste byli pověřeni čtením e-mailů a jejich tříděním do 2 hromádek, *pro* a *proti*. Pokud by bylo mnoho e-mailů, mohli byste být zahlceni pokusem přečíst je všechny. Nebylo by hezké, kdyby bot mohl všechny přečíst za vás, porozumět jim a říct vám, do které hromádky každý e-mail patří? +> +> Jedním ze způsobů, jak toho dosáhnout, je použití strojového učení. Model byste trénovali na části e-mailů *proti* a části e-mailů *pro*. Model by měl tendenci spojovat fráze a slova s proti stranou a pro stranou, *ale nerozuměl by žádnému obsahu*, pouze by určité slova a vzorce byly pravděpodobnější v e-mailech *proti* nebo *pro*. Mohli byste jej otestovat na některých e-mailech, které jste nepoužili k trénování modelu, a zjistit, zda došel ke stejnému závěru jako vy. Poté, co byste byli spokojeni s přesností modelu, mohli byste zpracovávat budoucí e-maily, aniž byste museli číst každý z nich. + +✅ Zní tento proces jako procesy, které jste použili v předchozích lekcích? + +## Cvičení - sentimentální věty + +Sentiment se měří pomocí *polarizace* od -1 do 1, což znamená, že -1 je nejvíce negativní sentiment a 1 je nejvíce pozitivní. Sentiment se také měří pomocí skóre od 0 do 1 pro objektivitu (0) a subjektivitu (1). + +Podívejte se znovu na *Pýchu a předsudek* od Jane Austenové. Text je dostupný zde na [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Níže je ukázka krátkého programu, který analyzuje sentiment první a poslední věty z knihy a zobrazí její polarizaci sentimentu a skóre subjektivity/objektivity. + +Měli byste použít knihovnu `TextBlob` (popisovanou výše) k určení `sentimentu` (nemusíte psát vlastní kalkulátor sentimentu) v následujícím úkolu. + +```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)) +``` + +Vidíte následující výstup: + +```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) +``` + +## Výzva - zkontrolujte polarizaci sentimentu + +Vaším úkolem je určit, pomocí polarizace sentimentu, zda má *Pýcha a předsudek* více absolutně pozitivních vět než absolutně negativních. Pro tento úkol můžete předpokládat, že polarizační skóre 1 nebo -1 je absolutně pozitivní nebo negativní. + +**Kroky:** + +1. Stáhněte si [kopii Pýchy a předsudku](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) z Project Gutenberg jako .txt soubor. Odstraňte metadata na začátku a konci souboru, ponechte pouze původní text +2. Otevřete soubor v Pythonu a extrahujte obsah jako řetězec +3. Vytvořte TextBlob pomocí řetězce knihy +4. Analyzujte každou větu v knize v cyklu + 1. Pokud je polarizace 1 nebo -1, uložte větu do pole nebo seznamu pozitivních nebo negativních zpráv +5. Na konci vytiskněte všechny pozitivní věty a negativní věty (samostatně) a jejich počet. + +Zde je ukázkové [řešení](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Kontrola znalostí + +1. Sentiment je založen na slovech použitých ve větě, ale rozumí kód *slovům*? +2. Myslíte si, že polarizace sentimentu je přesná, nebo jinými slovy, *souhlasíte* se skóre? + 1. Zejména souhlasíte nebo nesouhlasíte s absolutní **pozitivní** polarizací následujících vět? + * “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. Následující 3 věty byly ohodnoceny absolutně pozitivním sentimentem, ale při bližším čtení nejsou pozitivními větami. Proč si analýza sentimentu myslela, že jsou pozitivními větami? + * 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. Souhlasíte nebo nesouhlasíte s absolutní **negativní** polarizací následujících vět? + - 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! + +✅ Každý nadšenec Jane Austenové pochopí, že často používá své knihy k tomu, aby kritizovala absurdnější aspekty anglické regentské společnosti. Elizabeth Bennettová, hlavní postava v *Pýše a předsudku*, je bystrou společenskou pozorovatelkou (jako autorka) a její jazyk je často silně nuancovaný. Dokonce i pan Darcy (milostný zájem v příběhu) poznamenává Elizabethin hravý a škádlivý způsob používání jazyka: "Měl jsem tu čest vás poznat dost dlouho na to, abych věděl, že si velmi užíváte příležitostné vyjadřování názorů, které ve skutečnosti nejsou vaše vlastní." + +--- + +## 🚀Výzva + +Dokážete udělat Marvina ještě lepším tím, že z uživatelského vstupu extrahujete další vlastnosti? + +## [Kvíz po lekci](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium +Existuje mnoho způsobů, jak získat sentiment z textu. Zamyslete se nad obchodními aplikacemi, které by mohly využívat tuto techniku. Přemýšlejte o tom, jak by se to mohlo pokazit. Přečtěte si více o sofistikovaných systémech připravených pro podniky, které analyzují sentiment, jako například [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). Otestujte některé z vět z knihy Pýcha a předsudek výše a zjistěte, zda dokáže rozpoznat nuance. + +## Zadání + +[Poetická licence](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/3-Translation-Sentiment/assignment.md b/translations/cs/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..f103132d8 --- /dev/null +++ b/translations/cs/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Poetická licence + +## Pokyny + +V [tomto notebooku](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) najdete více než 500 básní Emily Dickinson, které byly dříve analyzovány na sentiment pomocí Azure text analytics. Použijte tento dataset a analyzujte ho pomocí technik popsaných v lekci. Odpovídá navrhovaný sentiment básně rozhodnutí pokročilejší služby Azure? Proč ano nebo ne, podle vašeho názoru? Překvapilo vás něco? + +## Hodnotící kritéria + +| Kritéria | Vynikající | Přiměřené | Vyžaduje zlepšení | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Notebook je prezentován s kvalitní analýzou vzorku výstupu autora | Notebook je neúplný nebo neprovádí analýzu | Notebook není prezentován | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Nenese odpovědnost za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/cs/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..49140302c --- /dev/null +++ b/translations/cs/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Nenese odpovědnost za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/cs/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..f1bcb20c9 --- /dev/null +++ b/translations/cs/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/4-Hotel-Reviews-1/README.md b/translations/cs/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..5492b310d --- /dev/null +++ b/translations/cs/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# Analýza sentimentu pomocí recenzí hotelů - zpracování dat + +V této části použijete techniky z předchozích lekcí k provedení průzkumné analýzy velkého datového souboru. Jakmile získáte dobré porozumění užitečnosti jednotlivých sloupců, naučíte se: + +- jak odstranit nepotřebné sloupce +- jak vypočítat nová data na základě existujících sloupců +- jak uložit výsledný datový soubor pro použití v závěrečné výzvě + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +### Úvod + +Doposud jste se naučili, že textová data se výrazně liší od číselných typů dat. Pokud jde o text napsaný nebo vyslovený člověkem, lze jej analyzovat za účelem nalezení vzorců, frekvencí, sentimentu a významu. Tato lekce vás zavede do skutečného datového souboru s reálnou výzvou: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, který je dostupný pod [licencí CC0: Public Domain](https://creativecommons.org/publicdomain/zero/1.0/). Data byla získána z Booking.com z veřejných zdrojů. Tvůrcem datového souboru je Jiashen Liu. + +### Příprava + +Budete potřebovat: + +* Schopnost spouštět .ipynb notebooky pomocí Pythonu 3 +* pandas +* NLTK, [který byste měli nainstalovat lokálně](https://www.nltk.org/install.html) +* Datový soubor, který je dostupný na Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Po rozbalení má přibližně 230 MB. Stáhněte jej do kořenové složky `/data` spojené s těmito lekcemi NLP. + +## Průzkumná analýza dat + +Tato výzva předpokládá, že vytváříte doporučovacího bota pro hotely pomocí analýzy sentimentu a hodnocení hostů. Datový soubor, který budete používat, obsahuje recenze 1493 různých hotelů v 6 městech. + +Pomocí Pythonu, datového souboru recenzí hotelů a analýzy sentimentu NLTK můžete zjistit: + +* Jaká jsou nejčastěji používaná slova a fráze v recenzích? +* Korelují oficiální *tagy* popisující hotel s hodnocením recenzí (např. jsou negativnější recenze pro konkrétní hotel od *Rodiny s malými dětmi* než od *Samostatného cestovatele*, což by mohlo naznačovat, že je lepší pro *Samostatné cestovatele*)? +* Souhlasí skóre sentimentu NLTK s číselným hodnocením recenzenta? + +#### Datový soubor + +Prozkoumejme datový soubor, který jste stáhli a uložili lokálně. Otevřete soubor v editoru, jako je VS Code nebo dokonce Excel. + +Hlavičky v datovém souboru jsou následující: + +*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* + +Zde jsou seskupeny způsobem, který může být snazší prozkoumat: +##### Sloupce hotelu + +* `Hotel_Name`, `Hotel_Address`, `lat` (zeměpisná šířka), `lng` (zeměpisná délka) + * Pomocí *lat* a *lng* můžete vytvořit mapu v Pythonu zobrazující polohy hotelů (možná barevně odlišené podle negativních a pozitivních recenzí) + * Hotel_Address pro nás není zjevně užitečný a pravděpodobně jej nahradíme zemí pro snazší třídění a vyhledávání + +**Sloupce meta-recenze hotelu** + +* `Average_Score` + * Podle tvůrce datového souboru tento sloupec představuje *Průměrné skóre hotelu, vypočítané na základě posledního komentáře za poslední rok*. To se zdá být neobvyklý způsob výpočtu skóre, ale jedná se o získaná data, takže je prozatím můžeme brát jako daná. + + ✅ Na základě ostatních sloupců v těchto datech, dokážete vymyslet jiný způsob výpočtu průměrného skóre? + +* `Total_Number_of_Reviews` + * Celkový počet recenzí, které hotel obdržel - není jasné (bez napsání nějakého kódu), zda se to týká recenzí v datovém souboru. +* `Additional_Number_of_Scoring` + * To znamená, že bylo uděleno hodnocení, ale recenzent nenapsal žádnou pozitivní ani negativní recenzi. + +**Sloupce recenzí** + +- `Reviewer_Score` + - Jedná se o číselnou hodnotu s maximálně 1 desetinným místem mezi minimální a maximální hodnotou 2.5 a 10 + - Není vysvětleno, proč je nejnižší možné skóre 2.5 +- `Negative_Review` + - Pokud recenzent nic nenapsal, toto pole bude obsahovat "**No Negative**" + - Všimněte si, že recenzent může napsat pozitivní recenzi do sloupce Negative review (např. "na tomto hotelu není nic špatného") +- `Review_Total_Negative_Word_Counts` + - Vyšší počet negativních slov naznačuje nižší skóre (bez kontroly sentimentu) +- `Positive_Review` + - Pokud recenzent nic nenapsal, toto pole bude obsahovat "**No Positive**" + - Všimněte si, že recenzent může napsat negativní recenzi do sloupce Positive review (např. "na tomto hotelu není vůbec nic dobrého") +- `Review_Total_Positive_Word_Counts` + - Vyšší počet pozitivních slov naznačuje vyšší skóre (bez kontroly sentimentu) +- `Review_Date` a `days_since_review` + - Na recenzi by mohl být aplikován ukazatel čerstvosti nebo zastaralosti (starší recenze nemusí být tak přesné jako novější, protože se změnilo vedení hotelu, proběhla renovace nebo byl přidán bazén atd.) +- `Tags` + - Jedná se o krátké popisné štítky, které si recenzent může vybrat k popisu typu hosta (např. samostatný nebo rodina), typu pokoje, délky pobytu a způsobu, jakým byla recenze odeslána. + - Bohužel použití těchto štítků je problematické, viz níže uvedená část, která pojednává o jejich užitečnosti. + +**Sloupce recenzenta** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - To by mohlo být faktorem v doporučovacím modelu, například pokud byste mohli určit, že plodnější recenzenti se stovkami recenzí byli spíše negativní než pozitivní. Nicméně recenzent konkrétní recenze není identifikován jedinečným kódem, a proto nemůže být propojen se sadou recenzí. Existuje 30 recenzentů se 100 nebo více recenzemi, ale je těžké vidět, jak by to mohlo pomoci doporučovacímu modelu. +- `Reviewer_Nationality` + - Někteří lidé by si mohli myslet, že určité národnosti mají větší tendenci dávat pozitivní nebo negativní recenze kvůli národnímu sklonu. Buďte opatrní při začleňování takových anekdotických názorů do svých modelů. Jedná se o národní (a někdy rasové) stereotypy a každý recenzent byl jedinec, který napsal recenzi na základě své zkušenosti. Mohla být filtrována skrze mnoho hledisek, jako jsou jejich předchozí pobyty v hotelu, vzdálenost, kterou cestovali, a jejich osobní temperament. Myslet si, že jejich národnost byla důvodem hodnocení, je těžké ospravedlnit. + +##### Příklady + +| Average Score | Total Number Reviews | Reviewer Score | Negative
            Review | Positive Review | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Toto aktuálně není hotel, ale staveniště. Byl jsem terorizován od brzkého rána a celý den nepřijatelným stavebním hlukem, zatímco jsem odpočíval po dlouhé cestě a pracoval v pokoji. Lidé pracovali celý den, např. s bouracími kladivy v sousedních pokojích. Požádal jsem o změnu pokoje, ale žádný tichý pokoj nebyl k dispozici. Aby toho nebylo málo, byl jsem přeúčtován. Odhlásil jsem se večer, protože jsem měl velmi brzy let a obdržel jsem odpovídající účet. O den později hotel provedl další poplatek bez mého souhlasu nad rámec rezervované ceny. Je to hrozné místo. Nezničte si pobyt tím, že si zde rezervujete. | Nic. Hrozné místo. Držte se dál. | Služební cesta, Pár, Standardní dvoulůžkový pokoj, Pobyt na 2 noci | + +Jak vidíte, tento host neměl šťastný pobyt v tomto hotelu. Hotel má dobré průměrné skóre 7.8 a 1945 recenzí, ale tento recenzent mu dal 2.5 a napsal 115 slov o tom, jak negativní byl jeho pobyt. Pokud by nenapsal nic do sloupce Positive_Review, mohli byste usoudit, že nebylo nic pozitivního, ale přesto napsal 7 slov varování. Pokud bychom pouze počítali slova místo významu nebo sentimentu slov, mohli bychom mít zkreslený pohled na záměr recenzenta. Podivně je jejich skóre 2.5 matoucí, protože pokud byl pobyt v hotelu tak špatný, proč mu vůbec dát nějaké body? Při bližším zkoumání datového souboru zjistíte, že nejnižší možné skóre je 2.5, nikoli 0. Nejvyšší možné skóre je 10. + +##### Tagy + +Jak bylo uvedeno výše, na první pohled se zdá, že použití `Tags` k kategorizaci dat dává smysl. Bohužel tyto tagy nejsou standardizované, což znamená, že v daném hotelu mohou být možnosti *Jednolůžkový pokoj*, *Dvoulůžkový pokoj* a *Pokoj s manželskou postelí*, ale v dalším hotelu jsou to *Deluxe jednolůžkový pokoj*, *Klasický pokoj s královskou postelí* a *Pokoj Executive s královskou postelí*. Mohou to být stejné věci, ale existuje tolik variací, že volba se stává: + +1. Pokusit se změnit všechny termíny na jeden standard, což je velmi obtížné, protože není jasné, jak by měl být převod proveden v každém případě (např. *Klasický jednolůžkový pokoj* mapuje na *Jednolůžkový pokoj*, ale *Superior Queen Room with Courtyard Garden or City View* je mnohem těžší mapovat) + +1. Můžeme použít přístup NLP a měřit frekvenci určitých termínů, jako je *Samostatný*, *Obchodní cestovatel* nebo *Rodina s malými dětmi*, jak se vztahují na každý hotel, a zahrnout to do doporučení + +Tagy jsou obvykle (ale ne vždy) jedno pole obsahující seznam 5 až 6 hodnot oddělených čárkami odpovídajících *Typu cesty*, *Typu hostů*, *Typu pokoje*, *Počtu nocí* a *Typu zařízení, na kterém byla recenze odeslána*. Nicméně, protože někteří recenzenti nevyplní každé pole (mohou jedno pole nechat prázdné), hodnoty nejsou vždy ve stejném pořadí. + +Například vezměte *Typ skupiny*. V tomto poli ve sloupci `Tags` je 1025 unikátních možností a bohužel pouze některé z nich se týkají skupiny (některé jsou typ pokoje atd.). Pokud filtrujete pouze ty, které zmiňují rodinu, výsledky obsahují mnoho typů *Rodinný pokoj*. Pokud zahrnete termín *s*, tj. počítáte hodnoty *Rodina s*, výsledky jsou lepší, s více než 80 000 z 515 000 výsledků obsahujících frázi "Rodina s malými dětmi" nebo "Rodina se staršími dětmi". + +To znamená, že sloupec tagů pro nás není úplně zbytečný, ale bude vyžadovat určitou práci, aby byl užitečný. + +##### Průměrné skóre hotelu + +Existuje řada zvláštností nebo nesrovnalostí v datovém souboru, které nemohu vysvětlit, ale jsou zde ilustrovány, abyste si je byli vědomi při vytváření svých modelů. Pokud na to přijdete, dejte nám prosím vědět v diskusní sekci! + +Datový soubor má následující sloupce týkající se průměrného skóre a počtu recenzí: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Hotel s největším počtem recenzí v tomto datovém souboru je *Britannia International Hotel Canary Wharf* s 4789 recenzemi z 515 000. Ale pokud se podíváme na hodnotu `Total_Number_of_Reviews` pro tento hotel, je to 9086. Mohli byste usoudit, že existuje mnohem více skóre bez recenzí, takže bychom možná měli přidat hodnotu sloupce `Additional_Number_of_Scoring`. Tato hodnota je 2682 a přidáním k 4789 dostaneme 7471, což je stále o 1615 méně než `Total_Number_of_Reviews`. + +Pokud vezmete sloupec `Average_Score`, mohli byste usoudit, že se jedná o průměr recenzí v datovém souboru, ale popis z Kaggle je "*Průměrné skóre hotelu, vypočítané na základě posledního komentáře za poslední rok*". To se nezdá být příliš užitečné, ale můžeme vypočítat vlastní průměr na základě skóre recenzí v datovém souboru. Použitím stejného hotelu jako příkladu je průměrné skóre hotelu uvedeno jako 7.1, ale vypočítané skóre (průměrné skóre recenzenta *v* datovém souboru) je 6.8. To je blízko, ale ne stejná hodnota, a můžeme pouze hádat, že skóre uvedená v recenzích `Additional_Number_of_Scoring` zvýšila průměr na 7.1. Bohužel bez možnosti testování nebo ověření tohoto tvrzení je obtížné použít nebo důvěřovat `Average_Score`, `Additional_Number_of_Scoring` a `Total_Number_of_Reviews`, když jsou založeny na datech, která nemáme. + +Aby to bylo ještě složitější, hotel s druhým nejvyšším počtem recenzí má vypočítané průměrné skóre 8.12 a průměrné skóre v datovém souboru je 8.1. Je toto správné skóre náhoda, nebo je první hotel nesrovnalostí? + +S možností, že tyto hotely mohou být odlehlé hodnoty, a že možná většina hodnot odpovídá (ale některé z nějakého důvodu ne), napíšeme krátký program, který prozkoumá hodnoty v datovém souboru a určí správné použití (nebo nepoužití) hodnot. +> 🚨 Poznámka k opatrnosti +> +> Při práci s touto datovou sadou budete psát kód, který něco vypočítá z textu, aniž byste museli text sami číst nebo analyzovat. To je podstata NLP, interpretace významu nebo sentimentu bez nutnosti lidského zásahu. Je však možné, že některé negativní recenze přečtete. Důrazně vás žádám, abyste to nedělali, protože to není nutné. Některé z nich jsou hloupé nebo irelevantní negativní recenze na hotely, například "Počasí nebylo skvělé", což je něco, co hotel, ani nikdo jiný, nemůže ovlivnit. Ale některé recenze mají i temnou stránku. Někdy jsou negativní recenze rasistické, sexistické nebo ageistické. To je nešťastné, ale očekávané u datové sady získané z veřejné webové stránky. Někteří recenzenti zanechávají recenze, které by vám mohly připadat odpudivé, nepříjemné nebo znepokojivé. Je lepší nechat kód měřit sentiment, než je číst sami a být znepokojeni. To znamená, že takové recenze píše menšina, ale přesto existují. +## Cvičení - Průzkum dat +### Načtení dat + +To bylo dost vizuálního zkoumání dat, teď napíšete nějaký kód a získáte odpovědi! Tato část využívá knihovnu pandas. Vaším úplně prvním úkolem je zajistit, že dokážete načíst a přečíst data z CSV souboru. Knihovna pandas má rychlý nástroj pro načítání CSV, jehož výsledek je uložen do dataframe, stejně jako v předchozích lekcích. CSV, které načítáme, obsahuje přes půl milionu řádků, ale pouze 17 sloupců. Pandas vám nabízí mnoho výkonných způsobů, jak pracovat s dataframe, včetně možnosti provádět operace na každém řádku. + +Od této chvíle v této lekci budou ukázky kódu, vysvětlení kódu a diskuze o tom, co výsledky znamenají. Použijte přiložený _notebook.ipynb_ pro svůj kód. + +Začněme načtením datového souboru, který budete používat: + +```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") +``` + +Jakmile jsou data načtena, můžeme na nich provádět některé operace. Tento kód ponechte na začátku svého programu pro další část. + +## Průzkum dat + +V tomto případě jsou data již *čistá*, což znamená, že jsou připravena k práci a neobsahují znaky v jiných jazycích, které by mohly způsobit problémy algoritmům očekávajícím pouze anglické znaky. + +✅ Může se stát, že budete pracovat s daty, která vyžadují počáteční zpracování, aby byla připravena pro aplikaci NLP technik, ale tentokrát to není nutné. Pokud by to bylo potřeba, jak byste se vypořádali s neanglickými znaky? + +Ujistěte se, že jakmile jsou data načtena, můžete je prozkoumat pomocí kódu. Je velmi snadné zaměřit se na sloupce `Negative_Review` a `Positive_Review`. Tyto sloupce obsahují přirozený text, který vaše NLP algoritmy mohou zpracovat. Ale počkejte! Než se pustíte do NLP a analýzy sentimentu, měli byste podle níže uvedeného kódu ověřit, zda hodnoty uvedené v datasetu odpovídají hodnotám, které vypočítáte pomocí pandas. + +## Operace s dataframe + +Prvním úkolem v této lekci je ověřit, zda následující tvrzení jsou správná, tím, že napíšete kód, který zkoumá dataframe (bez jeho změny). + +> Stejně jako u mnoha programovacích úkolů existuje několik způsobů, jak to provést, ale dobrá rada je udělat to co nejjednodušším a nejpřehlednějším způsobem, zejména pokud bude snazší pochopit váš kód, když se k němu v budoucnu vrátíte. U dataframe existuje komplexní API, které často nabízí efektivní způsob, jak dosáhnout toho, co potřebujete. + +Považujte následující otázky za programovací úkoly a pokuste se na ně odpovědět bez nahlížení do řešení. + +1. Vytiskněte *rozměry* dataframe, který jste právě načetli (rozměry jsou počet řádků a sloupců). +2. Vypočítejte frekvenční počet pro národnosti recenzentů: + 1. Kolik různých hodnot je ve sloupci `Reviewer_Nationality` a jaké jsou? + 2. Která národnost recenzentů je v datasetu nejčastější (vytiskněte zemi a počet recenzí)? + 3. Jakých je dalších 10 nejčastěji se vyskytujících národností a jejich frekvenční počet? +3. Který hotel byl nejčastěji recenzován pro každou z 10 nejčastějších národností recenzentů? +4. Kolik recenzí je na každý hotel (frekvenční počet hotelů) v datasetu? +5. Ačkoli dataset obsahuje sloupec `Average_Score` pro každý hotel, můžete také vypočítat průměrné skóre (získáním průměru všech skóre recenzentů v datasetu pro každý hotel). Přidejte nový sloupec do svého dataframe s názvem `Calc_Average_Score`, který obsahuje tento vypočítaný průměr. +6. Mají některé hotely stejné (zaokrouhlené na 1 desetinné místo) hodnoty `Average_Score` a `Calc_Average_Score`? + 1. Zkuste napsat Python funkci, která přijímá Series (řádek) jako argument a porovnává hodnoty, přičemž tiskne zprávu, když hodnoty nejsou stejné. Poté použijte metodu `.apply()` k zpracování každého řádku pomocí této funkce. +7. Vypočítejte a vytiskněte, kolik řádků má ve sloupci `Negative_Review` hodnotu "No Negative". +8. Vypočítejte a vytiskněte, kolik řádků má ve sloupci `Positive_Review` hodnotu "No Positive". +9. Vypočítejte a vytiskněte, kolik řádků má ve sloupci `Positive_Review` hodnotu "No Positive" **a** ve sloupci `Negative_Review` hodnotu "No Negative". + +### Odpovědi na kód + +1. Vytiskněte *rozměry* dataframe, který jste právě načetli (rozměry jsou počet řádků a sloupců). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Vypočítejte frekvenční počet pro národnosti recenzentů: + + 1. Kolik různých hodnot je ve sloupci `Reviewer_Nationality` a jaké jsou? + 2. Která národnost recenzentů je v datasetu nejčastější (vytiskněte zemi a počet recenzí)? + + ```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. Jakých je dalších 10 nejčastěji se vyskytujících národností a jejich frekvenční počet? + + ```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. Který hotel byl nejčastěji recenzován pro každou z 10 nejčastějších národností recenzentů? + + ```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. Kolik recenzí je na každý hotel (frekvenční počet hotelů) v datasetu? + + ```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 | + + Můžete si všimnout, že výsledky *počítané v datasetu* neodpovídají hodnotě ve `Total_Number_of_Reviews`. Není jasné, zda tato hodnota v datasetu představovala celkový počet recenzí, které hotel měl, ale ne všechny byly získány, nebo nějaký jiný výpočet. `Total_Number_of_Reviews` není použit v modelu kvůli této nejasnosti. + +5. Ačkoli dataset obsahuje sloupec `Average_Score` pro každý hotel, můžete také vypočítat průměrné skóre (získáním průměru všech skóre recenzentů v datasetu pro každý hotel). Přidejte nový sloupec do svého dataframe s názvem `Calc_Average_Score`, který obsahuje tento vypočítaný průměr. Vytiskněte sloupce `Hotel_Name`, `Average_Score` a `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"]]) + ``` + + Můžete se také divit hodnotě `Average_Score` a proč se někdy liší od vypočítaného průměrného skóre. Jelikož nemůžeme vědět, proč některé hodnoty odpovídají, ale jiné mají rozdíl, je v tomto případě nejbezpečnější použít skóre recenzí, které máme, k výpočtu průměru sami. Nicméně rozdíly jsou obvykle velmi malé, zde jsou hotely s největší odchylkou od průměru datasetu a vypočítaného průměru: + + | 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 | + + Pouze 1 hotel má rozdíl skóre větší než 1, což znamená, že rozdíl můžeme pravděpodobně ignorovat a použít vypočítané průměrné skóre. + +6. Vypočítejte a vytiskněte, kolik řádků má ve sloupci `Negative_Review` hodnotu "No Negative". + +7. Vypočítejte a vytiskněte, kolik řádků má ve sloupci `Positive_Review` hodnotu "No Positive". + +8. Vypočítejte a vytiskněte, kolik řádků má ve sloupci `Positive_Review` hodnotu "No Positive" **a** ve sloupci `Negative_Review` hodnotu "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 + ``` + +## Jiný způsob + +Jiný způsob, jak počítat položky bez použití Lambdas, a použít sum k počítání řádků: + + ```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 + ``` + + Můžete si všimnout, že existuje 127 řádků, které mají hodnoty "No Negative" a "No Positive" ve sloupcích `Negative_Review` a `Positive_Review`. To znamená, že recenzent dal hotelu číselné skóre, ale odmítl napsat pozitivní nebo negativní recenzi. Naštěstí je to malý počet řádků (127 z 515738, tedy 0,02 %), takže to pravděpodobně neovlivní náš model nebo výsledky žádným konkrétním směrem, ale možná jste nečekali, že dataset recenzí bude obsahovat řádky bez recenzí, takže stojí za to prozkoumat data a objevit takové řádky. + +Nyní, když jste prozkoumali dataset, v další lekci budete filtrovat data a přidávat analýzu sentimentu. + +--- +## 🚀Výzva + +Tato lekce ukazuje, jak je, jak jsme viděli v předchozích lekcích, kriticky důležité porozumět svým datům a jejich zvláštnostem před prováděním operací na nich. Textová data obzvláště vyžadují pečlivé zkoumání. Prozkoumejte různé datové sady bohaté na text a zjistěte, zda dokážete objevit oblasti, které by mohly zavést zkreslení nebo ovlivnit sentiment modelu. + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Recenze & Samostudium + +Vezměte [tuto vzdělávací cestu o NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott), abyste objevili nástroje, které můžete vyzkoušet při vytváření modelů zaměřených na řeč a text. + +## Zadání + +[NLTK](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/cs/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..22eb6523a --- /dev/null +++ b/translations/cs/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Instrukce + +NLTK je známá knihovna pro použití v počítačové lingvistice a zpracování přirozeného jazyka. Využijte tuto příležitost k přečtení '[NLTK knihy](https://www.nltk.org/book/)' a vyzkoušejte její cvičení. V tomto nehodnoceném úkolu se s touto knihovnou seznámíte podrobněji. + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neneseme odpovědnost za jakékoli nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/cs/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..d0e73fb85 --- /dev/null +++ b/translations/cs/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/cs/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 000000000..cc5c16f67 --- /dev/null +++ b/translations/cs/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/5-Hotel-Reviews-2/README.md b/translations/cs/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 000000000..cfb9aa16c --- /dev/null +++ b/translations/cs/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Analýza sentimentu pomocí recenzí hotelů + +Nyní, když jste dataset podrobně prozkoumali, je čas filtrovat sloupce a použít techniky NLP na dataset, abyste získali nové poznatky o hotelech. + +## [Kvíz před přednáškou](https://ff-quizzes.netlify.app/en/ml/) + +### Operace filtrování a analýzy sentimentu + +Jak jste si pravděpodobně všimli, dataset má několik problémů. Některé sloupce jsou plné nepotřebných informací, jiné se zdají být nesprávné. Pokud jsou správné, není jasné, jak byly vypočítány, a odpovědi nelze nezávisle ověřit vašimi vlastními výpočty. + +## Cvičení: trochu více zpracování dat + +Vyčistěte data o něco více. Přidejte sloupce, které budou užitečné později, změňte hodnoty v jiných sloupcích a některé sloupce úplně odstraňte. + +1. Počáteční zpracování sloupců + + 1. Odstraňte `lat` a `lng` + + 2. Nahraďte hodnoty `Hotel_Address` následujícími hodnotami (pokud adresa obsahuje název města a země, změňte ji pouze na město a zemi). + + Toto jsou jediná města a země v datasetu: + + Amsterdam, Nizozemsko + + Barcelona, Španělsko + + Londýn, Spojené království + + Milán, Itálie + + Paříž, Francie + + Vídeň, Rakousko + + ```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()) + ``` + + Nyní můžete dotazovat data na úrovni země: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Nizozemsko | 105 | + | Barcelona, Španělsko | 211 | + | Londýn, Spojené království | 400 | + | Milán, Itálie | 162 | + | Paříž, Francie | 458 | + | Vídeň, Rakousko | 158 | + +2. Zpracování sloupců meta-recenze hotelu + + 1. Odstraňte `Additional_Number_of_Scoring` + + 1. Nahraďte `Total_Number_of_Reviews` celkovým počtem recenzí pro daný hotel, které jsou skutečně v datasetu + + 1. Nahraďte `Average_Score` vlastním vypočítaným skóre + + ```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. Zpracování sloupců recenzí + + 1. Odstraňte `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` a `days_since_review` + + 2. Zachovejte `Reviewer_Score`, `Negative_Review` a `Positive_Review` tak, jak jsou, + + 3. Prozatím zachovejte `Tags` + + - V další části provedeme další filtrovací operace na značkách a poté budou značky odstraněny + +4. Zpracování sloupců recenzentů + + 1. Odstraňte `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Zachovejte `Reviewer_Nationality` + +### Sloupce značek + +Sloupec `Tag` je problematický, protože je to seznam (ve formě textu) uložený ve sloupci. Bohužel pořadí a počet podsekcí v tomto sloupci nejsou vždy stejné. Je těžké pro člověka identifikovat správné fráze, které by ho mohly zajímat, protože dataset obsahuje 515 000 řádků a 1427 hotelů, a každý má mírně odlišné možnosti, které si recenzent mohl vybrat. Zde přichází na řadu NLP. Můžete prohledat text a najít nejčastější fráze a spočítat je. + +Bohužel nás nezajímají jednotlivá slova, ale víceslovné fráze (např. *Služební cesta*). Spuštění algoritmu pro frekvenční distribuci víceslovných frází na tak velkém množství dat (6762646 slov) by mohlo trvat mimořádně dlouho, ale bez pohledu na data by se zdálo, že je to nutný výdaj. Zde je užitečná průzkumná analýza dat, protože jste viděli vzorek značek, jako například `[' Služební cesta ', ' Cestovatel sólo ', ' Jednolůžkový pokoj ', ' Pobyt na 5 nocí ', ' Odesláno z mobilního zařízení ']`, můžete začít zjišťovat, zda je možné výrazně snížit zpracování, které musíte provést. Naštěstí to možné je - ale nejprve musíte provést několik kroků, abyste určili značky, které vás zajímají. + +### Filtrování značek + +Pamatujte, že cílem datasetu je přidat sentiment a sloupce, které vám pomohou vybrat nejlepší hotel (pro vás nebo možná pro klienta, který vás pověřil vytvořením bota pro doporučení hotelů). Musíte se sami sebe zeptat, zda jsou značky užitečné nebo ne v konečném datasetu. Zde je jedna interpretace (pokud byste dataset potřebovali z jiných důvodů, mohly by být různé značky zahrnuty/vynechány): + +1. Typ cesty je relevantní a měl by zůstat +2. Typ skupiny hostů je důležitý a měl by zůstat +3. Typ pokoje, apartmá nebo studia, ve kterém host pobýval, je irelevantní (všechny hotely mají v podstatě stejné pokoje) +4. Zařízení, ze kterého byla recenze odeslána, je irelevantní +5. Počet nocí, které recenzent zůstal, *může* být relevantní, pokud byste delší pobyty přisuzovali tomu, že se jim hotel líbil více, ale je to sporné a pravděpodobně irelevantní + +Shrnuto, **ponechte 2 typy značek a ostatní odstraňte**. + +Nejprve nechcete počítat značky, dokud nejsou v lepším formátu, což znamená odstranění hranatých závorek a uvozovek. Můžete to udělat několika způsoby, ale chcete nejrychlejší, protože zpracování velkého množství dat by mohlo trvat dlouho. Naštěstí pandas nabízí snadný způsob, jak provést každý z těchto kroků. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Každá značka se stane něčím jako: `Služební cesta, Cestovatel sólo, Jednolůžkový pokoj, Pobyt na 5 nocí, Odesláno z mobilního zařízení`. + +Dále narazíme na problém. Některé recenze nebo řádky mají 5 sloupců, některé 3, některé 6. To je výsledek způsobu, jakým byl dataset vytvořen, a je těžké to opravit. Chcete získat frekvenční počet každé fráze, ale jsou v různém pořadí v každé recenzi, takže počet může být nesprávný a hotel nemusí dostat značku, kterou si zasloužil. + +Místo toho využijete různé pořadí ve svůj prospěch, protože každá značka je víceslovná, ale také oddělená čárkou! Nejjednodušší způsob, jak to udělat, je vytvořit 6 dočasných sloupců, do kterých vložíte každou značku podle jejího pořadí ve značce. Poté můžete sloučit těchto 6 sloupců do jednoho velkého sloupce a spustit metodu `value_counts()` na výsledném sloupci. Po vytištění zjistíte, že existovalo 2428 unikátních značek. Zde je malý vzorek: + +| Značka | Počet | +| ------------------------------- | ------ | +| Rekreační cesta | 417778 | +| Odesláno z mobilního zařízení | 307640 | +| Pár | 252294 | +| Pobyt na 1 noc | 193645 | +| Pobyt na 2 noci | 133937 | +| Cestovatel sólo | 108545 | +| Pobyt na 3 noci | 95821 | +| Služební cesta | 82939 | +| Skupina | 65392 | +| Rodina s malými dětmi | 61015 | +| Pobyt na 4 noci | 47817 | +| Dvoulůžkový pokoj | 35207 | +| Standardní dvoulůžkový pokoj | 32248 | +| Superior dvoulůžkový pokoj | 31393 | +| Rodina se staršími dětmi | 26349 | +| Deluxe dvoulůžkový pokoj | 24823 | +| Dvoulůžkový nebo dvoulůžkový pokoj | 22393 | +| Pobyt na 5 nocí | 20845 | +| Standardní dvoulůžkový nebo dvoulůžkový pokoj | 17483 | +| Klasický dvoulůžkový pokoj | 16989 | +| Superior dvoulůžkový nebo dvoulůžkový pokoj | 13570 | +| 2 pokoje | 12393 | + +Některé běžné značky jako `Odesláno z mobilního zařízení` jsou pro nás zbytečné, takže by mohlo být chytré je odstranit před počítáním výskytu frází, ale je to tak rychlá operace, že je můžete ponechat a ignorovat. + +### Odstranění značek délky pobytu + +Odstranění těchto značek je krok 1, což mírně snižuje celkový počet značek, které je třeba zvážit. Všimněte si, že je neodstraňujete z datasetu, pouze se rozhodnete je odstranit z úvahy jako hodnoty, které chcete počítat/zachovat v datasetu recenzí. + +| Délka pobytu | Počet | +| -------------- | ------ | +| Pobyt na 1 noc | 193645 | +| Pobyt na 2 noci | 133937 | +| Pobyt na 3 noci | 95821 | +| Pobyt na 4 noci | 47817 | +| Pobyt na 5 nocí | 20845 | +| Pobyt na 6 nocí | 9776 | +| Pobyt na 7 nocí | 7399 | +| Pobyt na 8 nocí | 2502 | +| Pobyt na 9 nocí | 1293 | +| ... | ... | + +Existuje obrovská škála pokojů, apartmá, studií, bytů a podobně. Všechny znamenají zhruba totéž a nejsou pro vás relevantní, takže je odstraňte z úvahy. + +| Typ pokoje | Počet | +| --------------------------- | ----- | +| Dvoulůžkový pokoj | 35207 | +| Standardní dvoulůžkový pokoj | 32248 | +| Superior dvoulůžkový pokoj | 31393 | +| Deluxe dvoulůžkový pokoj | 24823 | +| Dvoulůžkový nebo dvoulůžkový pokoj | 22393 | +| Standardní dvoulůžkový nebo dvoulůžkový pokoj | 17483 | +| Klasický dvoulůžkový pokoj | 16989 | +| Superior dvoulůžkový nebo dvoulůžkový pokoj | 13570 | + +Nakonec, a to je potěšující (protože to nevyžadovalo mnoho zpracování), vám zůstanou následující *užitečné* značky: + +| Značka | Počet | +| -------------------------------------------- | ------ | +| Rekreační cesta | 417778 | +| Pár | 252294 | +| Cestovatel sólo | 108545 | +| Služební cesta | 82939 | +| Skupina (sloučeno s Cestovatelé s přáteli) | 67535 | +| Rodina s malými dětmi | 61015 | +| Rodina se staršími dětmi | 26349 | +| S domácím mazlíčkem | 1405 | + +Můžete argumentovat, že `Cestovatelé s přáteli` je více méně totéž jako `Skupina`, a bylo by spravedlivé tyto dvě sloučit, jak je uvedeno výše. Kód pro identifikaci správných značek je [notebook Značky](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Posledním krokem je vytvoření nových sloupců pro každou z těchto značek. Poté, pro každý řádek recenze, pokud sloupec `Tag` odpovídá jednomu z nových sloupců, přidejte 1, pokud ne, přidejte 0. Konečným výsledkem bude počet recenzentů, kteří si vybrali tento hotel (v souhrnu) například pro služební cestu vs rekreační cestu, nebo aby si s sebou vzali domácího mazlíčka, což je užitečná informace při doporučování hotelu. + +```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) + +``` + +### Uložení souboru + +Nakonec uložte dataset tak, jak je nyní, pod novým názvem. + +```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) +``` + +## Operace analýzy sentimentu + +V této poslední části provedete analýzu sentimentu na sloupcích recenzí a uložíte výsledky do datasetu. + +## Cvičení: načtení a uložení filtrovaných dat + +Všimněte si, že nyní načítáte filtrovaný dataset, který byl uložen v předchozí části, **ne** původní dataset. + +```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) +``` + +### Odstranění stop slov + +Pokud byste provedli analýzu sentimentu na sloupcích negativních a pozitivních recenzí, mohlo by to trvat dlouho. Testováno na výkonném testovacím notebooku s rychlým CPU, trvalo to 12–14 minut v závislosti na tom, která knihovna sentimentu byla použita. To je (relativně) dlouhá doba, takže stojí za to prozkoumat, zda to lze urychlit. + +Odstranění stop slov, tedy běžných anglických slov, která nemění sentiment věty, je prvním krokem. Jejich odstraněním by měla analýza sentimentu probíhat rychleji, ale nebude méně přesná (protože stop slova sentiment neovlivňují, ale zpomalují analýzu). + +Nejdelší negativní recenze měla 395 slov, ale po odstranění stop slov má 195 slov. + +Odstranění stop slov je také rychlá operace, odstranění stop slov ze 2 sloupců recenzí přes 515 000 řádků trvalo na testovacím zařízení 3,3 sekundy. Může to trvat o něco více nebo méně času v závislosti na rychlosti vašeho zařízení, RAM, zda máte SSD nebo ne, a na některých dalších faktorech. Relativní krátkost operace znamená, že pokud zlepší čas analýzy sentimentu, pak stojí za to ji provést. + +```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) +``` + +### Provádění analýzy sentimentu + +Nyní byste měli vypočítat analýzu sentimentu pro sloupce negativních a pozitivních recenzí a uložit výsledek do 2 nových sloupců. Test sentimentu bude porovnat jej se skóre recenzenta pro stejnou recenzi. Například pokud sentiment ukazuje, že negativní recenze měla sentiment 1 (extrémně pozitivní sentiment) a sentiment pozitivní recenze byl 1, ale recenzent dal hotelu nejnižší možné skóre, pak buď text recenze neodpovídá skóre, nebo sentimentový analyzátor nedokázal správně rozpoznat sentiment. Měli byste očekávat, že některá sentimentová skóre budou zcela nesprávná, a často to bude vysvětlitelné, např. recenze může být extrémně sarkastická "Samozřejmě jsem MILOVAL spát v pokoji bez topení" a sentimentový analyzátor si myslí, že je to pozitivní sentiment, i když člověk, který to čte, by věděl, že jde o sarkasmus. +NLTK nabízí různé analyzátory sentimentu, se kterými se můžete učit, a můžete je zaměnit, abyste zjistili, zda je sentiment přesnější nebo méně přesný. Zde je použita analýza sentimentu VADER. + +> 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, červen 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"] +``` + +Později ve vašem programu, když budete připraveni vypočítat sentiment, můžete jej aplikovat na každou recenzi následujícím způsobem: + +```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") +``` + +Toto trvá přibližně 120 sekund na mém počítači, ale na každém počítači se to může lišit. Pokud chcete výsledky vytisknout a zjistit, zda sentiment odpovídá recenzi: + +```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"]]) +``` + +Poslední věc, kterou je třeba udělat se souborem před jeho použitím ve výzvě, je uložit ho! Měli byste také zvážit přeorganizování všech nových sloupců, aby byly snadno použitelné (pro člověka je to kosmetická změna). + +```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) +``` + +Měli byste spustit celý kód pro [analytický notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (poté, co jste spustili [notebook pro filtrování](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) k vytvoření souboru Hotel_Reviews_Filtered.csv). + +Shrnutí kroků: + +1. Původní soubor dat **Hotel_Reviews.csv** byl prozkoumán v předchozí lekci pomocí [exploračního notebooku](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv byl filtrován pomocí [notebooku pro filtrování](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb), což vedlo k vytvoření **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv byl zpracován pomocí [notebooku pro analýzu sentimentu](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb), což vedlo k vytvoření **Hotel_Reviews_NLP.csv** +4. Použijte Hotel_Reviews_NLP.csv ve výzvě NLP níže + +### Závěr + +Na začátku jste měli dataset se sloupci a daty, ale ne všechna byla ověřitelná nebo použitelná. Prozkoumali jste data, odfiltrovali nepotřebné, převedli značky na něco užitečného, vypočítali vlastní průměry, přidali sloupce sentimentu a doufejme, že jste se naučili něco zajímavého o zpracování přirozeného textu. + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Výzva + +Nyní, když máte dataset analyzovaný na sentiment, zkuste použít strategie, které jste se naučili v tomto kurzu (například clustering), abyste určili vzorce kolem sentimentu. + +## Přehled & Samostudium + +Vezměte si [tento modul Learn](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott), abyste se dozvěděli více a použili různé nástroje k prozkoumání sentimentu v textu. + +## Úkol + +[Vyzkoušejte jiný dataset](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/cs/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 000000000..c0010ec55 --- /dev/null +++ b/translations/cs/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Vyzkoušejte jiný dataset + +## Pokyny + +Nyní, když jste se naučili používat NLTK k přiřazování sentimentu textu, vyzkoušejte jiný dataset. Pravděpodobně budete muset provést určité zpracování dat, takže vytvořte notebook a zdokumentujte svůj myšlenkový proces. Co objevíte? + +## Hodnocení + +| Kritéria | Vynikající | Dostatečné | Vyžaduje zlepšení | +| -------- | ---------------------------------------------------------------------------------------------------------------- | --------------------------------------- | ---------------------- | +| | Kompletní notebook a dataset jsou prezentovány s dobře zdokumentovanými buňkami vysvětlujícími, jak je sentiment přiřazen | Notebook postrádá dobrá vysvětlení | Notebook má nedostatky | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/cs/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 000000000..d9070e7d6 --- /dev/null +++ b/translations/cs/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/cs/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 000000000..eab84f63f --- /dev/null +++ b/translations/cs/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/README.md b/translations/cs/6-NLP/README.md new file mode 100644 index 000000000..7b1650617 --- /dev/null +++ b/translations/cs/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Začínáme s přirozeným zpracováním jazyka + +Přirozené zpracování jazyka (NLP) je schopnost počítačového programu porozumět lidskému jazyku tak, jak je mluvený a psaný – označovanému jako přirozený jazyk. Je to součást umělé inteligence (AI). NLP existuje více než 50 let a má své kořeny v oboru lingvistiky. Celý tento obor je zaměřen na pomoc strojům při porozumění a zpracování lidského jazyka. To pak může být využito k provádění úkolů, jako je kontrola pravopisu nebo strojový překlad. Má širokou škálu praktických aplikací v mnoha oblastech, včetně lékařského výzkumu, vyhledávačů a obchodní inteligence. + +## Regionální téma: Evropské jazyky, literatura a romantické hotely v Evropě ❤️ + +V této části kurzu budete seznámeni s jedním z nejrozšířenějších využití strojového učení: přirozeným zpracováním jazyka (NLP). Odvozené z počítačové lingvistiky, tato kategorie umělé inteligence představuje most mezi lidmi a stroji prostřednictvím hlasové nebo textové komunikace. + +V těchto lekcích se naučíme základy NLP tím, že vytvoříme malé konverzační boty, abychom pochopili, jak strojové učení pomáhá dělat tyto konverzace stále „chytřejšími“. Vrátíte se v čase a budete si povídat s Elizabeth Bennettovou a panem Darcym z klasického románu Jane Austenové, **Pýcha a předsudek**, který byl publikován v roce 1813. Poté si rozšíříte své znalosti učením o analýze sentimentu prostřednictvím recenzí hotelů v Evropě. + +![Kniha Pýcha a předsudek a čaj](../../../6-NLP/images/p&p.jpg) +> Foto od Elaine Howlin na Unsplash + +## Lekce + +1. [Úvod do přirozeného zpracování jazyka](1-Introduction-to-NLP/README.md) +2. [Běžné úkoly a techniky NLP](2-Tasks/README.md) +3. [Překlad a analýza sentimentu pomocí strojového učení](3-Translation-Sentiment/README.md) +4. [Příprava vašich dat](4-Hotel-Reviews-1/README.md) +5. [NLTK pro analýzu sentimentu](5-Hotel-Reviews-2/README.md) + +## Poděkování + +Tyto lekce o přirozeném zpracování jazyka byly napsány s ☕ od [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/6-NLP/data/README.md b/translations/cs/6-NLP/data/README.md new file mode 100644 index 000000000..f4fac2d62 --- /dev/null +++ b/translations/cs/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Stáhněte si data recenzí hotelů do této složky. + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/1-Introduction/README.md b/translations/cs/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 000000000..4e53f52cd --- /dev/null +++ b/translations/cs/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Úvod do předpovědi časových řad + +![Shrnutí časových řad ve sketchnote](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote od [Tomomi Imura](https://www.twitter.com/girlie_mac) + +V této lekci a následující se naučíte něco o předpovědi časových řad, zajímavé a cenné části repertoáru vědce v oblasti strojového učení, která je méně známá než jiné tématy. Předpověď časových řad je něco jako „křišťálová koule“: na základě minulého výkonu proměnné, jako je cena, můžete předpovědět její budoucí potenciální hodnotu. + +[![Úvod do předpovědi časových řad](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Úvod do předpovědi časových řad") + +> 🎥 Klikněte na obrázek výše pro video o předpovědi časových řad + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +Je to užitečné a zajímavé pole s reálnou hodnotou pro podnikání, vzhledem k jeho přímé aplikaci na problémy s cenami, inventářem a otázkami dodavatelského řetězce. Zatímco techniky hlubokého učení se začaly používat k získání lepších poznatků pro přesnější předpovědi budoucího výkonu, předpověď časových řad zůstává polem, které je stále velmi ovlivněno klasickými technikami strojového učení. + +> Užitečný učební plán časových řad od Penn State najdete [zde](https://online.stat.psu.edu/stat510/lesson/1) + +## Úvod + +Představte si, že spravujete řadu chytrých parkovacích automatů, které poskytují data o tom, jak často a jak dlouho jsou používány v průběhu času. + +> Co kdybyste mohli na základě minulého výkonu automatu předpovědět jeho budoucí hodnotu podle zákonů nabídky a poptávky? + +Přesné předpovězení, kdy jednat, abyste dosáhli svého cíle, je výzva, kterou by mohla řešit předpověď časových řad. Nebylo by to příjemné pro lidi, kdyby byli účtováni více v rušných časech, když hledají parkovací místo, ale byl by to jistý způsob, jak generovat příjmy na čištění ulic! + +Pojďme prozkoumat některé typy algoritmů časových řad a začít notebook pro čištění a přípravu dat. Data, která budete analyzovat, pocházejí ze soutěže GEFCom2014 o předpovědi. Obsahují 3 roky hodinových hodnot elektrické zátěže a teploty mezi lety 2012 a 2014. Na základě historických vzorců elektrické zátěže a teploty můžete předpovědět budoucí hodnoty elektrické zátěže. + +V tomto příkladu se naučíte, jak předpovědět jeden časový krok dopředu, pouze pomocí historických dat o zátěži. Než však začnete, je užitečné pochopit, co se děje v pozadí. + +## Některé definice + +Když narazíte na termín „časové řady“, je důležité pochopit jeho použití v několika různých kontextech. + +🎓 **Časové řady** + +V matematice jsou „časové řady řadou datových bodů indexovaných (nebo seřazených nebo graficky znázorněných) v časovém pořadí. Nejčastěji jsou časové řady sekvencí zaznamenanou v pravidelných časových intervalech.“ Příkladem časových řad je denní závěrečná hodnota [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Použití grafů časových řad a statistického modelování se často objevuje v zpracování signálů, předpovědi počasí, předpovědi zemětřesení a dalších oblastech, kde se události vyskytují a datové body lze znázornit v čase. + +🎓 **Analýza časových řad** + +Analýza časových řad je analýza výše zmíněných dat časových řad. Data časových řad mohou mít různé formy, včetně „přerušených časových řad“, které detekují vzorce ve vývoji časových řad před a po přerušující události. Typ analýzy potřebné pro časové řady závisí na povaze dat. Data časových řad samotná mohou mít formu číselných nebo znakových sérií. + +Analýza se provádí pomocí různých metod, včetně frekvenčního a časového doménového zpracování, lineárních a nelineárních metod a dalších. [Zjistěte více](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) o mnoha způsobech analýzy tohoto typu dat. + +🎓 **Předpověď časových řad** + +Předpověď časových řad je použití modelu k předpovědi budoucích hodnot na základě vzorců zobrazených dříve shromážděnými daty, jak se vyskytovala v minulosti. Zatímco je možné použít regresní modely k prozkoumání dat časových řad, s časovými indexy jako x proměnnými na grafu, taková data se nejlépe analyzují pomocí speciálních typů modelů. + +Data časových řad jsou seznamem uspořádaných pozorování, na rozdíl od dat, která lze analyzovat pomocí lineární regrese. Nejčastějším modelem je ARIMA, což je zkratka pro „Autoregressive Integrated Moving Average“. + +[ARIMA modely](https://online.stat.psu.edu/stat510/lesson/1/1.1) „spojují současnou hodnotu série s minulými hodnotami a minulými chybami předpovědi.“ Jsou nejvhodnější pro analýzu dat v časové doméně, kde jsou data uspořádána v čase. + +> Existuje několik typů ARIMA modelů, o kterých se můžete dozvědět [zde](https://people.duke.edu/~rnau/411arim.htm) a které se dotknete v příští lekci. + +V příští lekci vytvoříte ARIMA model pomocí [Jednorozměrných časových řad](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), které se zaměřují na jednu proměnnou, která mění svou hodnotu v čase. Příkladem tohoto typu dat je [tento dataset](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), který zaznamenává měsíční koncentraci CO2 na observatoři 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 | + +✅ Identifikujte proměnnou, která se v tomto datasetu mění v čase. + +## Charakteristiky dat časových řad, které je třeba zvážit + +Když se podíváte na data časových řad, můžete si všimnout, že mají [určité charakteristiky](https://online.stat.psu.edu/stat510/lesson/1/1.1), které je třeba vzít v úvahu a zmírnit, abyste lépe pochopili jejich vzorce. Pokud považujete data časových řad za potenciální „signál“, který chcete analyzovat, tyto charakteristiky lze považovat za „šum“. Často budete muset tento „šum“ snížit kompenzací některých z těchto charakteristik pomocí statistických technik. + +Zde jsou některé koncepty, které byste měli znát, abyste mohli pracovat s časovými řadami: + +🎓 **Trendy** + +Trendy jsou definovány jako měřitelné nárůsty a poklesy v čase. [Zjistěte více](https://machinelearningmastery.com/time-series-trends-in-python). V kontextu časových řad jde o to, jak používat a případně odstraňovat trendy z vašich časových řad. + +🎓 **[Sezónnost](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Sezónnost je definována jako periodické výkyvy, například nákupní horečky během svátků, které mohou ovlivnit prodeje. [Podívejte se](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm), jak různé typy grafů zobrazují sezónnost v datech. + +🎓 **Odlehlé hodnoty** + +Odlehlé hodnoty jsou daleko od standardní datové variance. + +🎓 **Dlouhodobý cyklus** + +Nezávisle na sezónnosti mohou data vykazovat dlouhodobý cyklus, například ekonomický pokles, který trvá déle než rok. + +🎓 **Konstantní variance** + +V průběhu času některá data vykazují konstantní výkyvy, například spotřeba energie během dne a noci. + +🎓 **Náhlé změny** + +Data mohou vykazovat náhlou změnu, která může vyžadovat další analýzu. Například náhlé uzavření podniků kvůli COVIDu způsobilo změny v datech. + +✅ Zde je [ukázkový graf časových řad](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) zobrazující denní útraty za herní měnu během několika let. Dokážete v těchto datech identifikovat některé z výše uvedených charakteristik? + +![Útraty za herní měnu](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Cvičení - začínáme s daty o spotřebě energie + +Začněme vytvářet model časových řad pro předpověď budoucí spotřeby energie na základě minulých hodnot. + +> Data v tomto příkladu pocházejí ze soutěže GEFCom2014 o předpovědi. Obsahují 3 roky hodinových hodnot elektrické zátěže a teploty mezi lety 2012 a 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli a Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, červenec-září, 2016. + +1. Ve složce `working` této lekce otevřete soubor _notebook.ipynb_. Začněte přidáním knihoven, které vám pomohou načíst a vizualizovat data: + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Poznámka: Používáte soubory ze zahrnuté složky `common`, které nastavují vaše prostředí a zajišťují stahování dat. + +2. Dále prozkoumejte data jako dataframe pomocí `load_data()` a `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Můžete vidět, že existují dva sloupce reprezentující datum a zátěž: + + | | 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. Nyní vykreslete data pomocí `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() + ``` + + ![graf energie](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Nyní vykreslete první týden července 2014 zadáním jako vstup do `energy` ve formátu `[od data]: [do data]`: + + ```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() + ``` + + ![červenec](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Krásný graf! Podívejte se na tyto grafy a zkuste určit některé z výše uvedených charakteristik. Co můžeme usoudit z vizualizace dat? + +V příští lekci vytvoříte ARIMA model pro vytvoření předpovědí. + +--- + +## 🚀Výzva + +Vytvořte seznam všech odvětví a oblastí zkoumání, které by mohly těžit z předpovědi časových řad. Dokážete si představit aplikaci těchto technik v umění? V ekonometrice? Ekologii? Maloobchodu? Průmyslu? Financích? Kde ještě? + +## [Kvíz po lekci](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Ačkoli je zde nebudeme pokrývat, neuronové sítě se někdy používají k vylepšení klasických metod předpovědi časových řad. Přečtěte si o nich více [v tomto článku](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Zadání + +[Vizualizujte další časové řady](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/1-Introduction/assignment.md b/translations/cs/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 000000000..0907392fd --- /dev/null +++ b/translations/cs/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Vizualizujte další časové řady + +## Pokyny + +Začali jste se učit o předpovědi časových řad tím, že jste se podívali na typ dat, která vyžadují tento speciální modelování. Vizualizovali jste některá data týkající se energie. Nyní se podívejte na další data, která by mohla těžit z předpovědi časových řad. Najděte tři příklady (zkuste [Kaggle](https://kaggle.com) a [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) a vytvořte notebook pro jejich vizualizaci. V notebooku zaznamenejte jakékoli zvláštní charakteristiky (sezónnost, náhlé změny nebo jiné trendy). + +## Hodnocení + +| Kritéria | Vynikající | Přiměřené | Vyžaduje zlepšení | +| -------- | ---------------------------------------------------- | -------------------------------------------------- | --------------------------------------------------------------------------------------- | +| | Tři datové sady jsou vykresleny a vysvětleny v notebooku | Dvě datové sady jsou vykresleny a vysvětleny v notebooku | Málo datových sad je vykresleno nebo vysvětleno v notebooku, nebo jsou prezentovaná data nedostatečná | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/cs/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..e048f5ee5 --- /dev/null +++ b/translations/cs/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/cs/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 000000000..e656fdf18 --- /dev/null +++ b/translations/cs/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/2-ARIMA/README.md b/translations/cs/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 000000000..076b53ee9 --- /dev/null +++ b/translations/cs/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,406 @@ + +# Prognóza časových řad pomocí ARIMA + +V předchozí lekci jste se seznámili se základy prognózování časových řad a načetli dataset zobrazující výkyvy elektrického zatížení v průběhu času. + +[![Úvod do ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Úvod do ARIMA") + +> 🎥 Klikněte na obrázek výše pro video: Stručný úvod do modelů ARIMA. Příklad je proveden v R, ale koncepty jsou univerzální. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +## Úvod + +V této lekci objevíte konkrétní způsob, jak vytvářet modely pomocí [ARIMA: *A*uto*R*egresivní *I*ntegrální *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Modely ARIMA jsou obzvláště vhodné pro data, která vykazují [nestacionaritu](https://wikipedia.org/wiki/Stationary_process). + +## Obecné koncepty + +Abyste mohli pracovat s ARIMA, je třeba znát některé základní pojmy: + +- 🎓 **Stacionarita**. Z pohledu statistiky stacionarita označuje data, jejichž rozdělení se nemění při posunu v čase. Nestacionární data naopak vykazují výkyvy způsobené trendy, které je nutné transformovat, aby mohla být analyzována. Sezónnost například může způsobit výkyvy v datech, které lze odstranit procesem „sezónního diferenciace“. + +- 🎓 **[Diferenciace](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Diferenciace dat, opět z pohledu statistiky, označuje proces transformace nestacionárních dat na stacionární odstraněním jejich nekonstantního trendu. „Diferenciace odstraňuje změny úrovně časové řady, eliminuje trend a sezónnost a následně stabilizuje průměr časové řady.“ [Studie od Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA v kontextu časových řad + +Pojďme rozebrat jednotlivé části ARIMA, abychom lépe pochopili, jak nám pomáhá modelovat časové řady a provádět prognózy. + +- **AR - AutoRegresivní**. Autoregresivní modely, jak název napovídá, se „dívají zpět“ v čase, aby analyzovaly předchozí hodnoty ve vašich datech a vytvořily na jejich základě předpoklady. Tyto předchozí hodnoty se nazývají „zpoždění“ (lags). Příkladem mohou být data zobrazující měsíční prodeje tužek. Celkový prodej za každý měsíc by byl považován za „vyvíjející se proměnnou“ v datasetu. Tento model je vytvořen tak, že „vyvíjející se proměnná zájmu je regrese na své vlastní zpožděné (tj. předchozí) hodnoty.“ [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - Integrované**. Na rozdíl od podobných modelů 'ARMA' se 'I' v ARIMA vztahuje na jeho *[integrovaný](https://wikipedia.org/wiki/Order_of_integration)* aspekt. Data jsou „integrovaná“, když jsou aplikovány kroky diferenciace, aby se odstranila nestacionarita. + +- **MA - Klouzavý průměr**. [Klouzavý průměr](https://wikipedia.org/wiki/Moving-average_model) v tomto modelu označuje výstupní proměnnou, která je určena pozorováním aktuálních a minulých hodnot zpoždění. + +Shrnutí: ARIMA se používá k tomu, aby model co nejlépe odpovídal specifické formě dat časových řad. + +## Cvičení - vytvoření modelu ARIMA + +Otevřete složku [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) v této lekci a najděte soubor [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Spusťte notebook a načtěte knihovnu Pythonu `statsmodels`; budete ji potřebovat pro modely ARIMA. + +1. Načtěte potřebné knihovny. + +1. Nyní načtěte několik dalších knihoven užitečných pro vykreslování dat: + + ```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. Načtěte data ze souboru `/data/energy.csv` do Pandas dataframe a podívejte se na ně: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Vykreslete všechna dostupná data o energii od ledna 2012 do prosince 2014. Nemělo by vás nic překvapit, protože tato data jsme viděli v minulé lekci: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Nyní vytvoříme model! + +### Vytvoření trénovacích a testovacích datasetů + +Nyní máte data načtená, takže je můžete rozdělit na trénovací a testovací sady. Model budete trénovat na trénovací sadě. Jako obvykle, po dokončení trénování modelu vyhodnotíte jeho přesnost pomocí testovací sady. Musíte zajistit, aby testovací sada pokrývala pozdější období než trénovací sada, aby model nezískal informace z budoucích časových období. + +1. Vyčleňte dvouměsíční období od 1. září do 31. října 2014 pro trénovací sadu. Testovací sada bude zahrnovat dvouměsíční období od 1. listopadu do 31. prosince 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Protože tato data odrážejí denní spotřebu energie, existuje silný sezónní vzorec, ale spotřeba je nejvíce podobná spotřebě v nedávných dnech. + +1. Vizualizujte rozdíly: + + ```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() + ``` + + ![trénovací a testovací data](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Proto by mělo být dostačující použít relativně malé časové okno pro trénování dat. + + > Poznámka: Protože funkce, kterou používáme k přizpůsobení modelu ARIMA, používá validaci na vzorku během přizpůsobení, vynecháme validační data. + +### Příprava dat pro trénování + +Nyní je třeba připravit data pro trénování filtrováním a škálováním dat. Filtrovat dataset tak, aby zahrnoval pouze potřebná časová období a sloupce, a škálovat data, aby byla zobrazena v intervalu 0,1. + +1. Filtrovat původní dataset tak, aby zahrnoval pouze výše uvedená časová období na sadu a pouze potřebný sloupec 'load' plus datum: + + ```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) + ``` + + Můžete vidět tvar dat: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Škálovat data do rozsahu (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Vizualizujte původní vs. škálovaná data: + + ```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() + ``` + + ![původní](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Původní data + + ![škálovaná](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > Škálovaná data + +1. Nyní, když jste kalibrovali škálovaná data, můžete škálovat testovací data: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Implementace ARIMA + +Je čas implementovat ARIMA! Nyní použijete knihovnu `statsmodels`, kterou jste nainstalovali dříve. + +Nyní je třeba postupovat podle několika kroků: + + 1. Definujte model voláním `SARIMAX()` a předáním parametrů modelu: parametry p, d a q, a parametry P, D a Q. + 2. Připravte model pro trénovací data voláním funkce `fit()`. + 3. Proveďte prognózy voláním funkce `forecast()` a specifikujte počet kroků (tzv. „horizont“) pro prognózu. + +> 🎓 Co znamenají všechny tyto parametry? V modelu ARIMA existují 3 parametry, které pomáhají modelovat hlavní aspekty časové řady: sezónnost, trend a šum. Tyto parametry jsou: + +`p`: parametr spojený s autoregresivním aspektem modelu, který zahrnuje *minulé* hodnoty. +`d`: parametr spojený s integrovanou částí modelu, který ovlivňuje množství *diferenciace* (🎓 pamatujete si diferenciaci 👆?) aplikované na časovou řadu. +`q`: parametr spojený s částí modelu klouzavého průměru. + +> Poznámka: Pokud vaše data mají sezónní aspekt - což tato data mají -, použijeme sezónní model ARIMA (SARIMA). V takovém případě je třeba použít další sadu parametrů: `P`, `D` a `Q`, které popisují stejné asociace jako `p`, `d` a `q`, ale odpovídají sezónním komponentám modelu. + +1. Začněte nastavením preferované hodnoty horizontu. Zkusme 3 hodiny: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Výběr nejlepších hodnot pro parametry modelu ARIMA může být náročný, protože je do jisté míry subjektivní a časově náročný. Můžete zvážit použití funkce `auto_arima()` z knihovny [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Prozatím zkuste ručně vybrat některé hodnoty pro nalezení dobrého modelu. + + ```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()) + ``` + + Vytiskne se tabulka výsledků. + +Vytvořili jste svůj první model! Nyní musíme najít způsob, jak jej vyhodnotit. + +### Vyhodnocení modelu + +Pro vyhodnocení modelu můžete provést tzv. validaci „walk forward“. V praxi se modely časových řad znovu trénují pokaždé, když jsou k dispozici nová data. To umožňuje modelu provést nejlepší prognózu v každém časovém kroku. + +Začněte na začátku časové řady pomocí této techniky, trénujte model na trénovací datové sadě. Poté proveďte prognózu na další časový krok. Prognóza je vyhodnocena oproti známé hodnotě. Trénovací sada je poté rozšířena o známou hodnotu a proces se opakuje. + +> Poznámka: Měli byste udržovat okno trénovací sady pevné pro efektivnější trénování, takže pokaždé, když přidáte novou pozorování do trénovací sady, odstraníte pozorování ze začátku sady. + +Tento proces poskytuje robustnější odhad toho, jak bude model fungovat v praxi. Přichází však s výpočetními náklady na vytvoření tolika modelů. To je přijatelné, pokud jsou data malá nebo pokud je model jednoduchý, ale může to být problém ve větším měřítku. + +Validace „walk forward“ je zlatým standardem pro vyhodnocení modelů časových řad a je doporučena pro vaše vlastní projekty. + +1. Nejprve vytvořte testovací datový bod pro každý krok HORIZONTU. + + ```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 | + + Data jsou horizontálně posunuta podle bodu horizontu. + +1. Proveďte prognózy na testovacích datech pomocí tohoto přístupu posuvného okna v cyklu o velikosti délky testovacích dat: + + ```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) + ``` + + Můžete sledovat probíhající trénování: + + ```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. Porovnejte prognózy se skutečným zatížením: + + ```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() + ``` + + Výstup + | | | 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 | + + Sledujte prognózu hodinových dat ve srovnání se skutečným zatížením. Jak přesná je? + +### Kontrola přesnosti modelu + +Zkontrolujte přesnost svého modelu testováním jeho střední absolutní procentuální chyby (MAPE) u všech prognóz. +> **🧮 Ukázka výpočtu** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) se používá k vyjádření přesnosti predikce jako poměru definovaného výše uvedeným vzorcem. Rozdíl mezi skutečnou hodnotou a predikovanou hodnotou je dělen skutečnou hodnotou. +"Absolutní hodnota v tomto výpočtu se sečte pro každý předpovězený bod v čase a vydělí se počtem přizpůsobených bodů n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Vyjádřete rovnici v kódu: + + ```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. Vypočítejte MAPE pro jeden krok: + + ```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 předpovědi pro jeden krok: 0.5570581332313952 % + +1. Vytiskněte MAPE pro více kroků: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Nízké číslo je nejlepší: vezměte v úvahu, že předpověď s MAPE 10 je o 10 % mimo. + +1. Ale jak vždy, je snazší tento typ měření přesnosti vidět vizuálně, takže si to vykreslíme: + + ```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() + ``` + + ![model časové řady](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Velmi pěkný graf, ukazující model s dobrou přesností. Skvělá práce! + +--- + +## 🚀Výzva + +Prozkoumejte způsoby testování přesnosti modelu časové řady. V této lekci se dotýkáme MAPE, ale existují i jiné metody, které byste mohli použít? Prozkoumejte je a okomentujte. Užitečný dokument najdete [zde](https://otexts.com/fpp2/accuracy.html) + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Tato lekce se dotýká pouze základů předpovědi časové řady pomocí ARIMA. Věnujte čas prohloubení svých znalostí tím, že prozkoumáte [toto úložiště](https://microsoft.github.io/forecasting/) a jeho různé typy modelů, abyste se naučili další způsoby, jak vytvářet modely časové řady. + +## Zadání + +[Nový model ARIMA](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/2-ARIMA/assignment.md b/translations/cs/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 000000000..05e38083a --- /dev/null +++ b/translations/cs/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Nový ARIMA model + +## Pokyny + +Nyní, když jste vytvořili ARIMA model, vytvořte nový s čerstvými daty (vyzkoušejte jeden z [těchto datasetů od Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Označte svou práci v notebooku, vizualizujte data a svůj model a otestujte jeho přesnost pomocí MAPE. + +## Hodnocení + +| Kritéria | Vynikající | Přiměřené | Vyžaduje zlepšení | +| -------- | ----------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ | ---------------------------------- | +| | Notebook je předložen s novým ARIMA modelem, který je vytvořen, otestován a vysvětlen pomocí vizualizací a uvedené přesnosti. | Předložený notebook není označen nebo obsahuje chyby | Předložený notebook je neúplný | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/cs/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 000000000..12ad762b5 --- /dev/null +++ b/translations/cs/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/cs/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 000000000..33ef85e59 --- /dev/null +++ b/translations/cs/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/3-SVR/README.md b/translations/cs/7-TimeSeries/3-SVR/README.md new file mode 100644 index 000000000..a02bfb2f1 --- /dev/null +++ b/translations/cs/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Předpověď časových řad pomocí Support Vector Regressor + +V předchozí lekci jste se naučili používat model ARIMA k předpovědi časových řad. Nyní se podíváme na model Support Vector Regressor, což je regresní model používaný k předpovědi spojitých dat. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +## Úvod + +V této lekci objevíte specifický způsob, jak vytvářet modely pomocí [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) pro regresi, tedy **SVR: Support Vector Regressor**. + +### SVR v kontextu časových řad [^1] + +Než pochopíte význam SVR při předpovědi časových řad, je důležité se seznámit s následujícími koncepty: + +- **Regrese:** Technika učení s učitelem, která předpovídá spojité hodnoty na základě dané sady vstupů. Cílem je najít křivku (nebo přímku) v prostoru vlastností, která obsahuje maximální počet datových bodů. [Klikněte zde](https://en.wikipedia.org/wiki/Regression_analysis) pro více informací. +- **Support Vector Machine (SVM):** Typ modelu strojového učení s učitelem používaný pro klasifikaci, regresi a detekci odlehlých hodnot. Model je hyperrovina v prostoru vlastností, která v případě klasifikace funguje jako hranice a v případě regrese jako nejlepší přímka. V SVM se obvykle používá funkce jádra k transformaci datové sady do prostoru s vyšším počtem dimenzí, aby byly snadněji oddělitelné. [Klikněte zde](https://en.wikipedia.org/wiki/Support-vector_machine) pro více informací o SVM. +- **Support Vector Regressor (SVR):** Typ SVM, který hledá nejlepší přímku (v případě SVM hyperrovinu), která obsahuje maximální počet datových bodů. + +### Proč SVR? [^1] + +V minulé lekci jste se naučili o ARIMA, což je velmi úspěšná statistická lineární metoda pro předpověď časových řad. Nicméně v mnoha případech mají časové řady *nelinearitu*, kterou nelze mapovat pomocí lineárních modelů. V takových případech schopnost SVM zohlednit nelinearitu dat při regresních úlohách činí SVR úspěšným při předpovědi časových řad. + +## Cvičení - vytvoření modelu SVR + +První kroky přípravy dat jsou stejné jako v předchozí lekci o [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Otevřete složku [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) v této lekci a najděte soubor [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb). [^2] + +1. Spusťte notebook a importujte potřebné knihovny: [^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. Načtěte data ze souboru `/data/energy.csv` do Pandas dataframe a podívejte se na ně: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Vykreslete všechna dostupná data o energii od ledna 2012 do prosince 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](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Nyní vytvoříme model SVR. + +### Vytvoření trénovacích a testovacích datových sad + +Nyní máte data načtená, takže je můžete rozdělit na trénovací a testovací sady. Poté data upravíte tak, aby vytvořila datovou sadu založenou na časových krocích, což bude potřeba pro SVR. Model budete trénovat na trénovací sadě. Po dokončení trénování modelu vyhodnotíte jeho přesnost na trénovací sadě, testovací sadě a poté na celé datové sadě, abyste viděli celkový výkon. Musíte zajistit, aby testovací sada pokrývala pozdější období než trénovací sada, aby model nezískal informace z budoucích časových období [^2] (situace známá jako *přeučení*). + +1. Vyčleňte dvouměsíční období od 1. září do 31. října 2014 pro trénovací sadu. Testovací sada bude zahrnovat dvouměsíční období od 1. listopadu do 31. prosince 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Vizualizujte rozdíly: [^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](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Příprava dat pro trénování + +Nyní je potřeba připravit data pro trénování provedením filtrování a škálování dat. Filtrovat budete datovou sadu tak, aby zahrnovala pouze potřebná časová období a sloupce, a škálovat, aby byla data projektována do intervalu 0,1. + +1. Filtrovat původní datovou sadu tak, aby zahrnovala pouze zmíněná časová období na sadu a pouze potřebný sloupec 'load' plus datum: [^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. Škálovat trénovací data do rozsahu (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Nyní škálujte testovací data: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Vytvoření dat s časovými kroky [^1] + +Pro SVR transformujete vstupní data do formy `[batch, timesteps]`. Takže upravíte existující `train_data` a `test_data` tak, aby existovala nová dimenze, která odkazuje na časové kroky. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Pro tento příklad bereme `timesteps = 5`. Vstupy do modelu jsou tedy data pro první 4 časové kroky a výstup budou data pro 5. časový krok. + +```python +timesteps=5 +``` + +Konverze trénovacích dat na 2D tensor pomocí vnořené list comprehension: + +```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) +``` + +Konverze testovacích dat na 2D tensor: + +```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) +``` + +Výběr vstupů a výstupů z trénovacích a testovacích dat: + +```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) +``` + +### Implementace SVR [^1] + +Nyní je čas implementovat SVR. Pro více informací o této implementaci můžete navštívit [tuto dokumentaci](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Pro naši implementaci postupujeme podle těchto kroků: + + 1. Definujte model voláním `SVR()` a předáním hyperparametrů modelu: kernel, gamma, c a epsilon + 2. Připravte model pro trénovací data voláním funkce `fit()` + 3. Proveďte předpovědi voláním funkce `predict()` + +Nyní vytvoříme model SVR. Použijeme [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) a nastavíme hyperparametry gamma, C a epsilon na hodnoty 0.5, 10 a 0.05. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Trénování modelu na trénovacích datech [^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) +``` + +#### Předpovědi modelu [^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) +``` + +Postavili jste svůj SVR! Nyní je potřeba jej vyhodnotit. + +### Vyhodnocení modelu [^1] + +Pro vyhodnocení nejprve škálujeme data zpět na původní měřítko. Poté, abychom zkontrolovali výkon, vykreslíme původní a předpovězený graf časových řad a také vytiskneme výsledek MAPE. + +Škálování předpovězených a původních výstupů: + +```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)) +``` + +#### Kontrola výkonu modelu na trénovacích a testovacích datech [^1] + +Z datové sady extrahujeme časové značky, které zobrazíme na ose x našeho grafu. Všimněte si, že používáme prvních ```timesteps-1``` hodnot jako vstup pro první výstup, takže časové značky pro výstup začnou až poté. + +```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 +``` + +Vykreslení předpovědí pro trénovací data: + +```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](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Tisk MAPE pro trénovací data + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Vykreslení předpovědí pro testovací data + +```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](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Tisk MAPE pro testovací data + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Máte velmi dobrý výsledek na testovací datové sadě! + +### Kontrola výkonu modelu na celé datové sadě [^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](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Velmi pěkné grafy, ukazující model s dobrou přesností. Skvělá práce! + +--- + +## 🚀Výzva + +- Zkuste upravit hyperparametry (gamma, C, epsilon) při vytváření modelu a vyhodnoťte data, abyste zjistili, která sada hyperparametrů poskytuje nejlepší výsledky na testovacích datech. Více o těchto hyperparametrech se dozvíte v [dokumentaci zde](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Zkuste použít různé funkce jádra pro model a analyzujte jejich výkon na datové sadě. Užitečný dokument najdete [zde](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Zkuste použít různé hodnoty `timesteps`, aby model mohl zpětně předpovídat. + +## [Kvíz po lekci](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Tato lekce měla za cíl představit aplikaci SVR pro předpověď časových řad. Pro více informací o SVR můžete navštívit [tento blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Tato [dokumentace na scikit-learn](https://scikit-learn.org/stable/modules/svm.html) poskytuje komplexnější vysvětlení o SVM obecně, [SVR](https://scikit-learn.org/stable/modules/svm.html#regression) a také další detaily implementace, jako jsou různé [funkce jádra](https://scikit-learn.org/stable/modules/svm.html#kernel-functions), které lze použít, a jejich parametry. + +## Zadání + +[Nový model SVR](assignment.md) + +## Poděkování + +[^1]: Text, kód a výstup v této sekci přispěl [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: Text, kód a výstup v této sekci byl převzat z [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/3-SVR/assignment.md b/translations/cs/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 000000000..5c3387e22 --- /dev/null +++ b/translations/cs/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,29 @@ + +# Nový model SVR + +## Pokyny [^1] + +Nyní, když jste vytvořili model SVR, vytvořte nový s čerstvými daty (vyzkoušejte jeden z [těchto datasetů od Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Označte svou práci v notebooku, vizualizujte data a svůj model a otestujte jeho přesnost pomocí vhodných grafů a MAPE. Také zkuste upravit různé hyperparametry a použít různé hodnoty pro časové kroky. + +## Hodnotící kritéria [^1] + +| Kritéria | Vynikající | Přiměřené | Vyžaduje zlepšení | +| -------- | ----------------------------------------------------------- | ------------------------------------------------------- | ---------------------------------- | +| | Notebook je prezentován s vytvořeným, otestovaným a vysvětleným modelem SVR, včetně vizualizací a uvedené přesnosti. | Notebook je prezentován bez anotací nebo obsahuje chyby. | Je prezentován neúplný notebook. | + + + +[^1]:Text v této sekci byl založen na [zadání z ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/7-TimeSeries/README.md b/translations/cs/7-TimeSeries/README.md new file mode 100644 index 000000000..cba1fbbc7 --- /dev/null +++ b/translations/cs/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Úvod do předpovídání časových řad + +Co je předpovídání časových řad? Jde o předpovídání budoucích událostí na základě analýzy trendů z minulosti. + +## Regionální téma: celosvětová spotřeba elektřiny ✨ + +V těchto dvou lekcích budete uvedeni do předpovídání časových řad, což je méně známá oblast strojového učení, která je však nesmírně cenná pro průmyslové a obchodní aplikace, stejně jako pro další oblasti. Ačkoli neuronové sítě mohou zvýšit užitečnost těchto modelů, budeme je studovat v kontextu klasického strojového učení, protože modely pomáhají předpovídat budoucí výkon na základě minulosti. + +Naším regionálním zaměřením je spotřeba elektřiny ve světě, což je zajímavý datový soubor, na kterém se naučíte předpovídat budoucí spotřebu energie na základě vzorců z minulého zatížení. Můžete vidět, jak může být tento typ předpovídání nesmírně užitečný v obchodním prostředí. + +![elektrická síť](../../../7-TimeSeries/images/electric-grid.jpg) + +Foto od [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) elektrických věží na silnici v Rádžasthánu na [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Lekce + +1. [Úvod do předpovídání časových řad](1-Introduction/README.md) +2. [Vytváření modelů ARIMA pro časové řady](2-ARIMA/README.md) +3. [Vytváření Support Vector Regressor pro předpovídání časových řad](3-SVR/README.md) + +## Poděkování + +"Úvod do předpovídání časových řad" byl napsán s ⚡️ [Francesca Lazzeri](https://twitter.com/frlazzeri) a [Jen Looper](https://twitter.com/jenlooper). Notebooky se poprvé objevily online v [repozitáři Azure "Deep Learning For Time Series"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting), který původně napsala Francesca Lazzeri. Lekci o SVR napsal [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro kritické informace se doporučuje profesionální lidský překlad. Nenese odpovědnost za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/1-QLearning/README.md b/translations/cs/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 000000000..d2741f591 --- /dev/null +++ b/translations/cs/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Úvod do posilovaného učení a Q-Learningu + +![Shrnutí posilovaného učení v oblasti strojového učení ve sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote od [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Posilované učení zahrnuje tři důležité koncepty: agenta, stavy a sadu akcí pro každý stav. Prováděním akce ve specifickém stavu získává agent odměnu. Představte si opět počítačovou hru Super Mario. Vy jste Mario, nacházíte se v úrovni hry, stojíte vedle okraje útesu. Nad vámi je mince. Vy jako Mario, v herní úrovni, na konkrétní pozici... to je váš stav. Posun o krok doprava (akce) vás přivede přes okraj, což by vám přineslo nízké číselné skóre. Stisknutí tlačítka skoku by vám však umožnilo získat bod a zůstat naživu. To je pozitivní výsledek, který by vám měl přinést pozitivní číselné skóre. + +Pomocí posilovaného učení a simulátoru (hry) se můžete naučit, jak hru hrát, abyste maximalizovali odměnu, což znamená zůstat naživu a získat co nejvíce bodů. + +[![Úvod do posilovaného učení](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Klikněte na obrázek výše a poslechněte si Dmitryho, jak diskutuje o posilovaném učení. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +## Předpoklady a nastavení + +V této lekci budeme experimentovat s kódem v Pythonu. Měli byste být schopni spustit kód v Jupyter Notebooku z této lekce, buď na svém počítači, nebo někde v cloudu. + +Můžete otevřít [notebook lekce](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) a projít si tuto lekci krok za krokem. + +> **Poznámka:** Pokud otevíráte tento kód z cloudu, musíte také stáhnout soubor [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), který se používá v kódu notebooku. Přidejte jej do stejného adresáře jako notebook. + +## Úvod + +V této lekci prozkoumáme svět **[Petr a vlk](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, inspirovaný hudební pohádkou ruského skladatele [Sergeje Prokofjeva](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Použijeme **posilované učení**, aby Petr mohl prozkoumat své prostředí, sbírat chutná jablka a vyhnout se setkání s vlkem. + +**Posilované učení** (RL) je technika učení, která nám umožňuje naučit se optimální chování **agenta** v nějakém **prostředí** prostřednictvím mnoha experimentů. Agent v tomto prostředí by měl mít nějaký **cíl**, definovaný pomocí **funkce odměny**. + +## Prostředí + +Pro jednoduchost si představme Petrov svět jako čtvercovou desku o velikosti `šířka` x `výška`, jako je tato: + +![Petrovo prostředí](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Každá buňka na této desce může být: + +* **zem**, po které Petr a další bytosti mohou chodit. +* **voda**, po které samozřejmě nemůžete chodit. +* **strom** nebo **tráva**, místo, kde si můžete odpočinout. +* **jablko**, což představuje něco, co by Petr rád našel, aby se nakrmil. +* **vlk**, který je nebezpečný a měl by být vyhnut. + +Existuje samostatný modul v Pythonu, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), který obsahuje kód pro práci s tímto prostředím. Protože tento kód není důležitý pro pochopení našich konceptů, importujeme modul a použijeme jej k vytvoření vzorové desky (blok kódu 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Tento kód by měl vytisknout obrázek prostředí podobný tomu výše. + +## Akce a politika + +V našem příkladu by Petrovým cílem bylo najít jablko, zatímco se vyhýbá vlkovi a dalším překážkám. K tomu může v podstatě chodit, dokud nenajde jablko. + +Proto může na jakékoli pozici zvolit jednu z následujících akcí: nahoru, dolů, doleva a doprava. + +Tyto akce definujeme jako slovník a mapujeme je na dvojice odpovídajících změn souřadnic. Například pohyb doprava (`R`) by odpovídal dvojici `(1,0)`. (blok kódu 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()) } +``` + +Shrneme-li, strategie a cíl tohoto scénáře jsou následující: + +- **Strategie** našeho agenta (Petra) je definována tzv. **politikou**. Politika je funkce, která vrací akci v daném stavu. V našem případě je stav problému reprezentován deskou, včetně aktuální pozice hráče. + +- **Cíl** posilovaného učení je nakonec naučit se dobrou politiku, která nám umožní problém efektivně vyřešit. Jako základ však zvažme nejjednodušší politiku nazvanou **náhodná chůze**. + +## Náhodná chůze + +Nejprve vyřešíme náš problém implementací strategie náhodné chůze. Při náhodné chůzi budeme náhodně vybírat další akci z povolených akcí, dokud nedosáhneme jablka (blok kódu 3). + +1. Implementujte náhodnou chůzi pomocí níže uvedeného kódu: + + ```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) + ``` + + Volání `walk` by mělo vrátit délku odpovídající cesty, která se může lišit od jednoho spuštění k druhému. + +1. Spusťte experiment chůze několikrát (řekněme 100krát) a vytiskněte výsledné statistiky (blok kódu 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) + ``` + + Všimněte si, že průměrná délka cesty je kolem 30-40 kroků, což je poměrně hodně, vzhledem k tomu, že průměrná vzdálenost k nejbližšímu jablku je kolem 5-6 kroků. + + Můžete také vidět, jak vypadá Petrov pohyb během náhodné chůze: + + ![Petrova náhodná chůze](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Funkce odměny + +Aby byla naše politika inteligentnější, musíme pochopit, které kroky jsou "lepší" než jiné. K tomu musíme definovat náš cíl. + +Cíl může být definován pomocí **funkce odměny**, která vrátí nějakou hodnotu skóre pro každý stav. Čím vyšší číslo, tím lepší funkce odměny. (blok kódu 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 +``` + +Zajímavé na funkcích odměny je, že ve většině případů *dostáváme podstatnou odměnu až na konci hry*. To znamená, že náš algoritmus by měl nějakým způsobem zapamatovat "dobré" kroky, které vedou k pozitivní odměně na konci, a zvýšit jejich důležitost. Podobně by měly být odrazeny všechny kroky, které vedou k špatným výsledkům. + +## Q-Learning + +Algoritmus, který zde budeme diskutovat, se nazývá **Q-Learning**. V tomto algoritmu je politika definována funkcí (nebo datovou strukturou) nazvanou **Q-Tabulka**. Ta zaznamenává "kvalitu" každé akce v daném stavu. + +Nazývá se Q-Tabulka, protože je často výhodné ji reprezentovat jako tabulku nebo vícerozměrné pole. Protože naše deska má rozměry `šířka` x `výška`, můžeme Q-Tabulku reprezentovat pomocí numpy pole s tvarem `šířka` x `výška` x `len(actions)`: (blok kódu 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Všimněte si, že inicializujeme všechny hodnoty Q-Tabulky stejnou hodnotou, v našem případě - 0.25. To odpovídá politice "náhodné chůze", protože všechny kroky v každém stavu jsou stejně dobré. Q-Tabulku můžeme předat funkci `plot`, abychom ji vizualizovali na desce: `m.plot(Q)`. + +![Petrovo prostředí](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +Uprostřed každé buňky je "šipka", která označuje preferovaný směr pohybu. Protože všechny směry jsou stejné, je zobrazen bod. + +Nyní musíme spustit simulaci, prozkoumat naše prostředí a naučit se lepší rozložení hodnot Q-Tabulky, které nám umožní najít cestu k jablku mnohem rychleji. + +## Podstata Q-Learningu: Bellmanova rovnice + +Jakmile se začneme pohybovat, každá akce bude mít odpovídající odměnu, tj. teoreticky můžeme vybrat další akci na základě nejvyšší okamžité odměny. Ve většině stavů však krok nedosáhne našeho cíle dosáhnout jablka, a proto nemůžeme okamžitě rozhodnout, který směr je lepší. + +> Pamatujte, že nezáleží na okamžitém výsledku, ale spíše na konečném výsledku, který získáme na konci simulace. + +Abychom zohlednili tuto zpožděnou odměnu, musíme použít principy **[dynamického programování](https://en.wikipedia.org/wiki/Dynamic_programming)**, které nám umožňují přemýšlet o našem problému rekurzivně. + +Předpokládejme, že se nyní nacházíme ve stavu *s* a chceme se přesunout do dalšího stavu *s'*. Tím získáme okamžitou odměnu *r(s,a)*, definovanou funkcí odměny, plus nějakou budoucí odměnu. Pokud předpokládáme, že naše Q-Tabulka správně odráží "atraktivitu" každé akce, pak ve stavu *s'* zvolíme akci *a*, která odpovídá maximální hodnotě *Q(s',a')*. Tím pádem nejlepší možná budoucí odměna, kterou bychom mohli získat ve stavu *s*, bude definována jako `max` + +## Kontrola politiky + +Protože Q-Tabulka uvádí "atraktivitu" každé akce v každém stavu, je poměrně snadné ji použít k definování efektivní navigace v našem světě. V nejjednodušším případě můžeme vybrat akci odpovídající nejvyšší hodnotě v Q-Tabulce: (kódový blok 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) +``` + +> Pokud výše uvedený kód vyzkoušíte několikrát, můžete si všimnout, že se někdy "zasekne" a je třeba stisknout tlačítko STOP v notebooku, abyste ho přerušili. K tomu dochází, protože mohou nastat situace, kdy si dva stavy "ukazují" na sebe z hlediska optimální hodnoty Q, což vede k tomu, že agent se mezi těmito stavy pohybuje nekonečně. + +## 🚀Výzva + +> **Úkol 1:** Upravte funkci `walk` tak, aby omezila maximální délku cesty na určitý počet kroků (například 100), a sledujte, jak výše uvedený kód tuto hodnotu čas od času vrací. + +> **Úkol 2:** Upravte funkci `walk` tak, aby se nevracela na místa, kde již byla. Tím se zabrání tomu, aby se `walk` opakovala, nicméně agent může stále skončit "uvězněný" na místě, odkud se nemůže dostat. + +## Navigace + +Lepší navigační politika by byla ta, kterou jsme použili během tréninku, která kombinuje využívání a zkoumání. V této politice budeme vybírat každou akci s určitou pravděpodobností, úměrnou hodnotám v Q-Tabulce. Tato strategie může stále vést k tomu, že se agent vrátí na pozici, kterou již prozkoumal, ale jak můžete vidět z níže uvedeného kódu, vede k velmi krátké průměrné cestě k požadovanému místu (pamatujte, že `print_statistics` spouští simulaci 100krát): (kódový blok 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) +``` + +Po spuštění tohoto kódu byste měli získat mnohem kratší průměrnou délku cesty než dříve, v rozmezí 3-6. + +## Zkoumání procesu učení + +Jak jsme zmínili, proces učení je rovnováhou mezi zkoumáním a využíváním získaných znalostí o struktuře prostoru problému. Viděli jsme, že výsledky učení (schopnost pomoci agentovi najít krátkou cestu k cíli) se zlepšily, ale je také zajímavé sledovat, jak se průměrná délka cesty chová během procesu učení: + +## Shrnutí poznatků: + +- **Průměrná délka cesty se zvyšuje**. Na začátku vidíme, že průměrná délka cesty roste. Pravděpodobně je to způsobeno tím, že když o prostředí nic nevíme, máme tendenci uvíznout ve špatných stavech, jako je voda nebo vlk. Jak se dozvídáme více a začneme tyto znalosti využívat, můžeme prostředí prozkoumávat déle, ale stále nevíme, kde přesně jsou jablka. + +- **Délka cesty se s učením zkracuje**. Jakmile se naučíme dostatečně, je pro agenta snazší dosáhnout cíle a délka cesty se začne zkracovat. Stále však zůstáváme otevření zkoumání, takže často odbočíme od nejlepší cesty a zkoumáme nové možnosti, což cestu prodlužuje nad optimální délku. + +- **Délka se náhle zvýší**. Na grafu také pozorujeme, že v určitém bodě se délka náhle zvýší. To ukazuje na stochastickou povahu procesu a na to, že můžeme v určitém okamžiku "zkazit" koeficienty Q-Tabulky jejich přepsáním novými hodnotami. Ideálně by se tomu mělo zabránit snížením rychlosti učení (například ke konci tréninku upravujeme hodnoty Q-Tabulky pouze o malou hodnotu). + +Celkově je důležité si uvědomit, že úspěch a kvalita procesu učení významně závisí na parametrech, jako je rychlost učení, pokles rychlosti učení a diskontní faktor. Tyto parametry se často nazývají **hyperparametry**, aby se odlišily od **parametrů**, které optimalizujeme během tréninku (například koeficienty Q-Tabulky). Proces hledání nejlepších hodnot hyperparametrů se nazývá **optimalizace hyperparametrů** a zaslouží si samostatné téma. + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Zadání +[Realističtější svět](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/1-QLearning/assignment.md b/translations/cs/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 000000000..f78ec2374 --- /dev/null +++ b/translations/cs/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Realističtější svět + +V naší situaci se Peter mohl pohybovat téměř bez únavy nebo hladu. V realističtějším světě by si musel čas od času sednout a odpočinout si, stejně jako se najíst. Udělejme náš svět realističtější implementací následujících pravidel: + +1. Při pohybu z jednoho místa na druhé Peter ztrácí **energii** a získává **únavu**. +2. Peter může získat více energie tím, že jí jablka. +3. Peter se může zbavit únavy odpočinkem pod stromem nebo na trávě (tj. vstupem na pole s umístěním stromu nebo trávy - zelené pole). +4. Peter musí najít a zabít vlka. +5. Aby mohl Peter zabít vlka, musí mít určité úrovně energie a únavy, jinak prohraje bitvu. + +## Instrukce + +Použijte původní [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) jako výchozí bod pro vaše řešení. + +Upravte výše uvedenou funkci odměny podle pravidel hry, spusťte algoritmus posilovaného učení, aby se naučil nejlepší strategii pro vítězství ve hře, a porovnejte výsledky náhodné procházky s vaším algoritmem z hlediska počtu vyhraných a prohraných her. + +> **Note**: Ve vašem novém světě je stav složitější a kromě pozice člověka zahrnuje také úrovně únavy a energie. Můžete se rozhodnout reprezentovat stav jako n-tici (Board, energy, fatigue), nebo definovat třídu pro stav (můžete ji také odvodit z `Board`), nebo dokonce upravit původní třídu `Board` uvnitř [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Ve vašem řešení prosím ponechte kód odpovědný za strategii náhodné procházky a na konci porovnejte výsledky vašeho algoritmu s náhodnou procházkou. + +> **Note**: Možná budete muset upravit hyperparametry, aby vše fungovalo, zejména počet epoch. Protože úspěch ve hře (boj s vlkem) je vzácná událost, můžete očekávat mnohem delší dobu trénování. + +## Hodnocení + +| Kritéria | Vynikající | Přiměřené | Potřebuje zlepšení | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Notebook je prezentován s definicí nových pravidel světa, algoritmem Q-Learning a některými textovými vysvětleními. Q-Learning dokáže výrazně zlepšit výsledky ve srovnání s náhodnou procházkou. | Notebook je prezentován, Q-Learning je implementován a zlepšuje výsledky ve srovnání s náhodnou procházkou, ale ne výrazně; nebo je notebook špatně dokumentován a kód není dobře strukturován | Byly učiněny pokusy o redefinici pravidel světa, ale algoritmus Q-Learning nefunguje, nebo funkce odměny není plně definována. | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Přestože se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro kritické informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/cs/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 000000000..4186677bf --- /dev/null +++ b/translations/cs/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/cs/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 000000000..14d70dc71 --- /dev/null +++ b/translations/cs/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/2-Gym/README.md b/translations/cs/8-Reinforcement/2-Gym/README.md new file mode 100644 index 000000000..e3bda5691 --- /dev/null +++ b/translations/cs/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,351 @@ + +# CartPole Bruslení + +Problém, který jsme řešili v předchozí lekci, se může zdát jako hračka, která nemá skutečné využití v reálných situacích. To však není pravda, protože mnoho reálných problémů má podobný scénář – například hraní šachů nebo Go. Jsou podobné, protože také máme hrací desku s danými pravidly a **diskrétní stav**. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +## Úvod + +V této lekci použijeme stejné principy Q-Learningu na problém s **kontinuálním stavem**, tj. stavem, který je definován jedním nebo více reálnými čísly. Budeme se zabývat následujícím problémem: + +> **Problém**: Pokud chce Petr utéct vlkovi, musí se naučit pohybovat rychleji. Uvidíme, jak se Petr může naučit bruslit, konkrétně udržovat rovnováhu, pomocí Q-Learningu. + +![Velký útěk!](../../../../8-Reinforcement/2-Gym/images/escape.png) + +> Petr a jeho přátelé jsou kreativní, aby unikli vlkovi! Obrázek od [Jen Looper](https://twitter.com/jenlooper) + +Použijeme zjednodušenou verzi udržování rovnováhy známou jako problém **CartPole**. Ve světě CartPole máme horizontální jezdec, který se může pohybovat doleva nebo doprava, a cílem je udržet vertikální tyč na vrcholu jezdce. + +## Předpoklady + +V této lekci budeme používat knihovnu **OpenAI Gym** k simulaci různých **prostředí**. Kód této lekce můžete spustit lokálně (např. z Visual Studio Code), v takovém případě se simulace otevře v novém okně. Při spuštění kódu online může být nutné provést některé úpravy kódu, jak je popsáno [zde](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +V předchozí lekci byly pravidla hry a stav definovány třídou `Board`, kterou jsme si sami vytvořili. Zde použijeme speciální **simulační prostředí**, které bude simulovat fyziku za udržováním rovnováhy tyče. Jedno z nejpopulárnějších simulačních prostředí pro trénování algoritmů posilovaného učení se nazývá [Gym](https://gym.openai.com/), které spravuje [OpenAI](https://openai.com/). Pomocí tohoto gymu můžeme vytvořit různá **prostředí** od simulace CartPole až po hry Atari. + +> **Poznámka**: Další prostředí dostupná v OpenAI Gym si můžete prohlédnout [zde](https://gym.openai.com/envs/#classic_control). + +Nejprve nainstalujeme gym a importujeme potřebné knihovny (blok kódu 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Cvičení – inicializace prostředí CartPole + +Pro práci s problémem udržování rovnováhy CartPole musíme inicializovat odpovídající prostředí. Každé prostředí je spojeno s: + +- **Prostor pozorování**, který definuje strukturu informací, které získáváme z prostředí. U problému CartPole získáváme polohu tyče, rychlost a některé další hodnoty. + +- **Prostor akcí**, který definuje možné akce. V našem případě je prostor akcí diskrétní a skládá se ze dvou akcí – **doleva** a **doprava**. (blok kódu 2) + +1. Pro inicializaci napište následující kód: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Abychom viděli, jak prostředí funguje, spusťme krátkou simulaci na 100 kroků. V každém kroku poskytujeme jednu z akcí, které mají být provedeny – v této simulaci náhodně vybíráme akci z `action_space`. + +1. Spusťte níže uvedený kód a podívejte se, k čemu vede. + + ✅ Pamatujte, že je preferováno spustit tento kód na lokální instalaci Pythonu! (blok kódu 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Měli byste vidět něco podobného tomuto obrázku: + + ![nevyvážený CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Během simulace potřebujeme získat pozorování, abychom rozhodli, jak jednat. Ve skutečnosti funkce `step` vrací aktuální pozorování, funkci odměny a příznak `done`, který označuje, zda má smysl pokračovat v simulaci nebo ne: (blok kódu 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() + ``` + + V notebooku byste měli vidět něco podobného tomuto výstupu: + + ```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 + ``` + + Vektor pozorování, který je vrácen při každém kroku simulace, obsahuje následující hodnoty: + - Poloha vozíku + - Rychlost vozíku + - Úhel tyče + - Rychlost otáčení tyče + +1. Získejte minimální a maximální hodnotu těchto čísel: (blok kódu 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Můžete si také všimnout, že hodnota odměny při každém kroku simulace je vždy 1. To je proto, že naším cílem je přežít co nejdéle, tj. udržet tyč v přiměřeně vertikální poloze po co nejdelší dobu. + + ✅ Ve skutečnosti je simulace CartPole považována za vyřešenou, pokud se nám podaří získat průměrnou odměnu 195 během 100 po sobě jdoucích pokusů. + +## Diskretizace stavu + +V Q-Learningu potřebujeme vytvořit Q-Tabulku, která definuje, co dělat v každém stavu. Abychom toho dosáhli, musí být stav **diskrétní**, přesněji řečeno, musí obsahovat konečný počet diskrétních hodnot. Proto musíme nějak **diskretizovat** naše pozorování, mapovat je na konečnou množinu stavů. + +Existuje několik způsobů, jak to udělat: + +- **Rozdělení na intervaly**. Pokud známe interval určité hodnoty, můžeme tento interval rozdělit na několik **intervalů** a poté nahradit hodnotu číslem intervalu, do kterého patří. To lze provést pomocí metody numpy [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). V tomto případě budeme přesně znát velikost stavu, protože bude záviset na počtu intervalů, které vybereme pro digitalizaci. + +✅ Můžeme použít lineární interpolaci k přivedení hodnot na nějaký konečný interval (např. od -20 do 20) a poté převést čísla na celá čísla zaokrouhlením. To nám dává o něco menší kontrolu nad velikostí stavu, zejména pokud neznáme přesné rozsahy vstupních hodnot. Například v našem případě 2 ze 4 hodnot nemají horní/dolní hranice svých hodnot, což může vést k nekonečnému počtu stavů. + +V našem příkladu použijeme druhý přístup. Jak si možná později všimnete, navzdory nedefinovaným horním/dolním hranicím tyto hodnoty zřídka nabývají hodnot mimo určité konečné intervaly, takže tyto stavy s extrémními hodnotami budou velmi vzácné. + +1. Zde je funkce, která vezme pozorování z našeho modelu a vytvoří čtveřici 4 celých čísel: (blok kódu 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Prozkoumejme také jinou metodu diskretizace pomocí intervalů: (blok kódu 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. Nyní spusťme krátkou simulaci a pozorujme tyto diskrétní hodnoty prostředí. Vyzkoušejte `discretize` i `discretize_bins` a podívejte se, zda je mezi nimi rozdíl. + + ✅ `discretize_bins` vrací číslo intervalu, které je 0-based. Takže pro hodnoty vstupní proměnné kolem 0 vrací číslo ze středu intervalu (10). U `discretize` jsme se nestarali o rozsah výstupních hodnot, což umožňuje, aby byly negativní, takže hodnoty stavu nejsou posunuté a 0 odpovídá 0. (blok kódu 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() + ``` + + ✅ Odkomentujte řádek začínající `env.render`, pokud chcete vidět, jak prostředí funguje. Jinak jej můžete spustit na pozadí, což je rychlejší. Tento "neviditelný" způsob provádění použijeme během procesu Q-Learningu. + +## Struktura Q-Tabulky + +V naší předchozí lekci byl stav jednoduchý pár čísel od 0 do 8, a proto bylo pohodlné reprezentovat Q-Tabulku pomocí numpy tenzoru s tvarem 8x8x2. Pokud použijeme diskretizaci pomocí intervalů, velikost našeho stavového vektoru je také známá, takže můžeme použít stejný přístup a reprezentovat stav pomocí pole tvaru 20x20x10x10x2 (zde 2 je dimenze prostoru akcí a první dimenze odpovídají počtu intervalů, které jsme vybrali pro každou z hodnot v prostoru pozorování). + +Nicméně někdy přesné rozměry prostoru pozorování nejsou známé. V případě funkce `discretize` si nikdy nemůžeme být jisti, že náš stav zůstane v určitých mezích, protože některé z původních hodnot nejsou omezené. Proto použijeme mírně odlišný přístup a reprezentujeme Q-Tabulku pomocí slovníku. + +1. Použijte dvojici *(state,action)* jako klíč slovníku a hodnota by odpovídala hodnotě položky Q-Tabulky. (blok kódu 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Zde také definujeme funkci `qvalues()`, která vrací seznam hodnot Q-Tabulky pro daný stav, který odpovídá všem možným akcím. Pokud položka není přítomna v Q-Tabulce, vrátíme 0 jako výchozí hodnotu. + +## Začněme Q-Learning + +Nyní jsme připraveni naučit Petra udržovat rovnováhu! + +1. Nejprve nastavme některé hyperparametry: (blok kódu 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Zde `alpha` je **rychlost učení**, která určuje, do jaké míry bychom měli upravit aktuální hodnoty Q-Tabulky při každém kroku. V předchozí lekci jsme začali s hodnotou 1 a poté jsme `alpha` snížili na nižší hodnoty během tréninku. V tomto příkladu ji ponecháme konstantní jen pro jednoduchost, a můžete experimentovat s úpravou hodnot `alpha` později. + + `gamma` je **faktor diskontování**, který ukazuje, do jaké míry bychom měli upřednostňovat budoucí odměnu před aktuální odměnou. + + `epsilon` je **faktor průzkumu/využití**, který určuje, zda bychom měli preferovat průzkum před využitím nebo naopak. V našem algoritmu budeme v `epsilon` procentech případů vybírat další akci podle hodnot Q-Tabulky a ve zbývajícím počtu případů provedeme náhodnou akci. To nám umožní prozkoumat oblasti prostoru hledání, které jsme dosud neviděli. + + ✅ Z hlediska udržování rovnováhy – výběr náhodné akce (průzkum) by působil jako náhodný úder špatným směrem a tyč by se musela naučit, jak obnovit rovnováhu z těchto "chyb". + +### Vylepšení algoritmu + +Můžeme také provést dvě vylepšení našeho algoritmu z předchozí lekce: + +- **Výpočet průměrné kumulativní odměny** během několika simulací. Pokrok budeme tisknout každých 5000 iterací a průměrnou kumulativní odměnu za toto období zprůměrujeme. To znamená, že pokud získáme více než 195 bodů, můžeme problém považovat za vyřešený, a to s ještě vyšší kvalitou, než je požadováno. + +- **Výpočet maximálního průměrného kumulativního výsledku**, `Qmax`, a uložíme Q-Tabulku odpovídající tomuto výsledku. Když spustíte trénink, všimnete si, že někdy průměrný kumulativní výsledek začne klesat, a chceme si uchovat hodnoty Q-Tabulky, které odpovídají nejlepšímu modelu pozorovanému během tréninku. + +1. Sbírejte všechny kumulativní odměny při každé simulaci do vektoru `rewards` pro další vykreslení. (blok kódu 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=[] + ``` + +Co si můžete všimnout z těchto výsledků: + +- **Blízko našeho cíle**. Jsme velmi blízko dosažení cíle získat 195 kumulativních odměn během 100+ po sobě jdoucích běhů simulace, nebo jsme toho možná již dosáhli! I když získáme menší čísla, stále to nevíme, protože průměrujeme přes 5000 běhů a pouze 100 běhů je požadováno v rámci formálních kritérií. + +- **Odměna začíná klesat**. Někdy odměna začne klesat, což znamená, že můžeme "zničit" již naučené hodnoty v Q-Tabulce těmi, které situaci zhoršují. + +Toto pozorování je jasněji viditelné, pokud vykreslíme průběh tréninku. + +## Vykreslení průběhu tréninku + +Během tréninku jsme sbírali hodnotu kumulativní odměny při každé iteraci do vektoru `rewards`. Takto to vypadá, když to vykreslíme proti číslu iterace: + +```python +plt.plot(rewards) +``` + +![surový průběh](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Z tohoto grafu není možné nic říct, protože kvůli povaze stochastického procesu tréninku se délka tréninkových sezení značně liší. Aby měl tento graf větší smysl, můžeme vypočítat **běžný průměr** přes sérii experimentů, řekněme 100. To lze pohodlně provést pomocí `np.convolve`: (blok kódu 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![průběh tréninku](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Úprava hyperparametrů + +Aby bylo učení stabilnější, má smysl upravit některé z našich hyperparametrů během tréninku. Konkrétně: + +- **Pro rychlost učení**, `alpha`, můžeme začít s hodnotami blízkými 1 a poté tento parametr postupně snižovat. S časem budeme získávat dobré pravděpodobnostní hodnoty v Q-Tabulce, a proto bychom je měli upravovat mírně, a ne zcela přepisovat novými hodnotami. + +- **Zvýšení epsilon**. Můžeme chtít `epsilon` pomalu zvyšovat, aby se méně prozkoumávalo a více využívalo. Pravděpodobně má smysl začít s nižší hodnotou `epsilon` a postupně ji zvýšit téměř na 1. +> **Úkol 1**: Experimentujte s hodnotami hyperparametrů a zjistěte, zda můžete dosáhnout vyššího kumulativního odměny. Dosahujete více než 195? +> **Úkol 2**: Aby bylo možné problém formálně vyřešit, je potřeba dosáhnout průměrné odměny 195 během 100 po sobě jdoucích běhů. Měřte to během tréninku a ujistěte se, že jste problém formálně vyřešili! + +## Vidět výsledek v akci + +Bylo by zajímavé skutečně vidět, jak se naučený model chová. Spusťme simulaci a použijme stejnou strategii výběru akcí jako během tréninku, tedy vzorkování podle pravděpodobnostního rozdělení v Q-Tabulce: (blok kódu 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() +``` + +Měli byste vidět něco podobného: + +![balancující cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Výzva + +> **Úkol 3**: Zde jsme používali finální verzi Q-Tabulky, která nemusí být ta nejlepší. Pamatujte, že jsme uložili nejlépe fungující Q-Tabulku do proměnné `Qbest`! Vyzkoušejte stejný příklad s nejlépe fungující Q-Tabulkou tím, že zkopírujete `Qbest` do `Q`, a sledujte, zda zaznamenáte rozdíl. + +> **Úkol 4**: Zde jsme na každém kroku nevybírali nejlepší akci, ale spíše vzorkovali podle odpovídajícího pravděpodobnostního rozdělení. Mělo by větší smysl vždy vybírat nejlepší akci s nejvyšší hodnotou v Q-Tabulce? To lze provést pomocí funkce `np.argmax`, která zjistí číslo akce odpovídající nejvyšší hodnotě v Q-Tabulce. Implementujte tuto strategii a sledujte, zda zlepší balancování. + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Zadání +[Vytrénujte Mountain Car](assignment.md) + +## Závěr + +Nyní jsme se naučili, jak trénovat agenty, aby dosáhli dobrých výsledků pouze tím, že jim poskytneme funkci odměny, která definuje požadovaný stav hry, a dáme jim příležitost inteligentně prozkoumat prostor hledání. Úspěšně jsme aplikovali algoritmus Q-Learning v případech diskrétních i spojitých prostředí, ale s diskrétními akcemi. + +Je také důležité studovat situace, kdy je stav akcí spojitý a kdy je prostor pozorování mnohem složitější, například obraz z obrazovky hry Atari. V těchto problémech často potřebujeme použít výkonnější techniky strojového učení, jako jsou neuronové sítě, abychom dosáhli dobrých výsledků. Tyto pokročilejší témata jsou předmětem našeho nadcházejícího pokročilého kurzu AI. + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/2-Gym/assignment.md b/translations/cs/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 000000000..22275f095 --- /dev/null +++ b/translations/cs/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,57 @@ + +# Trénink Mountain Car + +[OpenAI Gym](http://gym.openai.com) byl navržen tak, aby všechna prostředí poskytovala stejnou API - tj. stejné metody `reset`, `step` a `render`, a stejné abstrakce **akčního prostoru** a **pozorovacího prostoru**. Díky tomu by mělo být možné přizpůsobit stejné algoritmy pro posilované učení různým prostředím s minimálními změnami kódu. + +## Prostředí Mountain Car + +[Prostředí Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) obsahuje auto uvízlé v údolí: + +Cílem je dostat se z údolí a získat vlajku, přičemž v každém kroku lze provést jednu z následujících akcí: + +| Hodnota | Význam | +|---|---| +| 0 | Zrychlit doleva | +| 1 | Nezrychlovat | +| 2 | Zrychlit doprava | + +Hlavní trik tohoto problému však spočívá v tom, že motor auta není dostatečně silný na to, aby vyjel na horu na jeden pokus. Jediný způsob, jak uspět, je jezdit tam a zpět, aby se nashromáždila hybnost. + +Pozorovací prostor obsahuje pouze dvě hodnoty: + +| Číslo | Pozorování | Min | Max | +|-----|--------------|-----|-----| +| 0 | Pozice auta | -1.2| 0.6 | +| 1 | Rychlost auta | -0.07 | 0.07 | + +Systém odměn pro Mountain Car je poměrně složitý: + + * Odměna 0 je udělena, pokud agent dosáhne vlajky (pozice = 0.5) na vrcholu hory. + * Odměna -1 je udělena, pokud je pozice agenta menší než 0.5. + +Epizoda končí, pokud je pozice auta větší než 0.5, nebo pokud délka epizody přesáhne 200 kroků. + +## Pokyny + +Přizpůsobte náš algoritmus pro posilované učení k vyřešení problému Mountain Car. Začněte s existujícím kódem [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), nahraďte nové prostředí, změňte funkce pro diskretizaci stavu a pokuste se upravit existující algoritmus tak, aby se trénoval s minimálními úpravami kódu. Optimalizujte výsledek úpravou hyperparametrů. + +> **Note**: Úprava hyperparametrů bude pravděpodobně nutná, aby algoritmus konvergoval. + +## Hodnocení + +| Kritéria | Vynikající | Přiměřené | Potřebuje zlepšení | +| -------- | --------- | --------- | ------------------ | +| | Algoritmus Q-Learning byl úspěšně přizpůsoben z příkladu CartPole s minimálními úpravami kódu a dokáže vyřešit problém získání vlajky do 200 kroků. | Nový algoritmus Q-Learning byl převzat z internetu, ale je dobře zdokumentován; nebo byl přizpůsoben existující algoritmus, ale nedosahuje požadovaných výsledků. | Student nebyl schopen úspěšně přizpůsobit žádný algoritmus, ale učinil podstatné kroky k řešení (implementoval diskretizaci stavu, datovou strukturu Q-Tabulky atd.). | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/cs/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 000000000..ee7942a7c --- /dev/null +++ b/translations/cs/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/2-Gym/solution/R/README.md b/translations/cs/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 000000000..d781e6a8c --- /dev/null +++ b/translations/cs/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +toto je dočasný zástupný symbol + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Nenese odpovědnost za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/8-Reinforcement/README.md b/translations/cs/8-Reinforcement/README.md new file mode 100644 index 000000000..0fc44b6b9 --- /dev/null +++ b/translations/cs/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Úvod do posilovaného učení + +Posilované učení, RL, je považováno za jeden ze základních paradigmat strojového učení, vedle učení s učitelem a učení bez učitele. RL se zaměřuje na rozhodování: poskytování správných rozhodnutí nebo alespoň učení se z nich. + +Představte si, že máte simulované prostředí, například akciový trh. Co se stane, pokud zavedete určitou regulaci? Má to pozitivní nebo negativní dopad? Pokud se stane něco negativního, musíte vzít tento _negativní posilovací podnět_, poučit se z něj a změnit směr. Pokud je výsledek pozitivní, musíte na tomto _pozitivním posilovacím podnětu_ stavět. + +![peter a vlk](../../../8-Reinforcement/images/peter.png) + +> Petr a jeho přátelé musí utéct hladovému vlkovi! Obrázek od [Jen Looper](https://twitter.com/jenlooper) + +## Regionální téma: Petr a vlk (Rusko) + +[Petr a vlk](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) je hudební pohádka napsaná ruským skladatelem [Sergejem Prokofjevem](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Je to příběh o mladém pionýrovi Petrovi, který odvážně vyjde z domu na lesní mýtinu, aby pronásledoval vlka. V této části budeme trénovat algoritmy strojového učení, které Petrovi pomohou: + +- **Prozkoumat** okolní oblast a vytvořit optimální navigační mapu +- **Naučit se** jezdit na skateboardu a udržovat rovnováhu, aby se mohl pohybovat rychleji. + +[![Petr a vlk](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Klikněte na obrázek výše a poslechněte si Petra a vlka od Prokofjeva + +## Posilované učení + +V předchozích částech jste viděli dva příklady problémů strojového učení: + +- **S učitelem**, kde máme datové sady, které naznačují vzorová řešení problému, který chceme vyřešit. [Klasifikace](../4-Classification/README.md) a [regrese](../2-Regression/README.md) jsou úkoly učení s učitelem. +- **Bez učitele**, kde nemáme označená tréninková data. Hlavním příkladem učení bez učitele je [shlukování](../5-Clustering/README.md). + +V této části vás seznámíme s novým typem problému učení, který nevyžaduje označená tréninková data. Existuje několik typů takových problémů: + +- **[Poloučení s učitelem](https://wikipedia.org/wiki/Semi-supervised_learning)**, kde máme velké množství neoznačených dat, která mohou být použita k předtrénování modelu. +- **[Posilované učení](https://wikipedia.org/wiki/Reinforcement_learning)**, při kterém se agent učí, jak se chovat, prováděním experimentů v nějakém simulovaném prostředí. + +### Příklad - počítačová hra + +Představte si, že chcete naučit počítač hrát hru, například šachy nebo [Super Mario](https://wikipedia.org/wiki/Super_Mario). Aby počítač mohl hrát hru, potřebujeme, aby předpověděl, jaký tah udělat v každém herním stavu. I když se to může zdát jako problém klasifikace, není tomu tak - protože nemáme datovou sadu se stavy a odpovídajícími akcemi. I když můžeme mít nějaká data, jako jsou existující šachové partie nebo záznamy hráčů hrajících Super Mario, je pravděpodobné, že tato data nebudou dostatečně pokrývat velké množství možných stavů. + +Místo hledání existujících herních dat je **posilované učení** (RL) založeno na myšlence *nechat počítač hrát* mnohokrát a pozorovat výsledek. Abychom mohli aplikovat posilované učení, potřebujeme dvě věci: + +- **Prostředí** a **simulátor**, které nám umožní hru hrát mnohokrát. Tento simulátor by definoval všechna pravidla hry, stejně jako možné stavy a akce. + +- **Funkci odměny**, která nám řekne, jak dobře jsme si vedli během každého tahu nebo hry. + +Hlavní rozdíl mezi ostatními typy strojového učení a RL je ten, že v RL obvykle nevíme, zda vyhrajeme nebo prohrajeme, dokud nedokončíme hru. Nemůžeme tedy říci, zda je určitý tah sám o sobě dobrý nebo ne - odměnu dostáváme až na konci hry. Naším cílem je navrhnout algoritmy, které nám umožní trénovat model za nejistých podmínek. Naučíme se o jednom RL algoritmu nazvaném **Q-learning**. + +## Lekce + +1. [Úvod do posilovaného učení a Q-Learningu](1-QLearning/README.md) +2. [Použití simulovaného prostředí Gym](2-Gym/README.md) + +## Poděkování + +"Úvod do posilovaného učení" byl napsán s ♥️ od [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/9-Real-World/1-Applications/README.md b/translations/cs/9-Real-World/1-Applications/README.md new file mode 100644 index 000000000..d3ee4db54 --- /dev/null +++ b/translations/cs/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Dodatek: Strojové učení v reálném světě + +![Shrnutí strojového učení v reálném světě ve sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote od [Tomomi Imura](https://www.twitter.com/girlie_mac) + +V tomto kurzu jste se naučili mnoho způsobů, jak připravit data pro trénink a vytvořit modely strojového učení. Postavili jste sérii klasických modelů pro regresi, shlukování, klasifikaci, zpracování přirozeného jazyka a časové řady. Gratulujeme! Možná si teď kladete otázku, k čemu to všechno je... jaké jsou reálné aplikace těchto modelů? + +I když v průmyslu vzbuzuje velký zájem AI, která obvykle využívá hluboké učení, stále existují cenné aplikace pro klasické modely strojového učení. Možná některé z těchto aplikací používáte už dnes! V této lekci prozkoumáte, jak osm různých odvětví a oborů využívá tyto typy modelů ke zlepšení výkonu, spolehlivosti, inteligence a hodnoty svých aplikací pro uživatele. + +## [Kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Finance + +Finanční sektor nabízí mnoho příležitostí pro strojové učení. Mnoho problémů v této oblasti lze modelovat a řešit pomocí ML. + +### Detekce podvodů s kreditními kartami + +V průběhu kurzu jsme se naučili o [k-means shlukování](../../5-Clustering/2-K-Means/README.md), ale jak může být použito k řešení problémů souvisejících s podvody s kreditními kartami? + +K-means shlukování je užitečné při technice detekce podvodů s kreditními kartami nazývané **detekce odlehlých hodnot**. Odlehlé hodnoty, nebo odchylky v pozorováních o sadě dat, nám mohou říci, zda je kreditní karta používána normálně, nebo zda se děje něco neobvyklého. Jak je ukázáno v níže uvedeném článku, můžete data o kreditních kartách třídit pomocí algoritmu k-means shlukování a přiřadit každou transakci ke shluku na základě toho, jak moc se jeví jako odlehlá. Poté můžete vyhodnotit nejrizikovější shluky z hlediska podvodných a legitimních transakcí. +[Reference](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Správa majetku + +Ve správě majetku jednotlivec nebo firma spravuje investice jménem svých klientů. Jejich úkolem je dlouhodobě udržovat a zvyšovat bohatství, takže je zásadní vybírat investice, které dobře fungují. + +Jedním ze způsobů, jak hodnotit výkon konkrétní investice, je statistická regrese. [Lineární regrese](../../2-Regression/1-Tools/README.md) je cenný nástroj pro pochopení toho, jak fond funguje ve vztahu k určitému benchmarku. Můžeme také zjistit, zda jsou výsledky regrese statisticky významné, nebo jak moc by ovlivnily investice klienta. Analýzu můžete dále rozšířit pomocí vícenásobné regrese, kde lze zohlednit další rizikové faktory. Příklad toho, jak by to fungovalo pro konkrétní fond, najdete v níže uvedeném článku o hodnocení výkonu fondu pomocí regrese. +[Reference](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Vzdělávání + +Vzdělávací sektor je také velmi zajímavou oblastí, kde lze ML aplikovat. Existují zajímavé problémy, které je třeba řešit, jako je detekce podvádění při testech nebo esejích, nebo řízení zaujatosti, ať už úmyslné nebo neúmyslné, v procesu hodnocení. + +### Predikce chování studentů + +[Coursera](https://coursera.com), poskytovatel online kurzů, má skvělý technický blog, kde diskutují o mnoha inženýrských rozhodnutích. V této případové studii vykreslili regresní linii, aby prozkoumali jakoukoli korelaci mezi nízkým hodnocením NPS (Net Promoter Score) a udržením nebo odchodem z kurzu. +[Reference](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Řízení zaujatosti + +[Grammarly](https://grammarly.com), asistent pro psaní, který kontroluje pravopis a gramatické chyby, používá sofistikované [systémy zpracování přirozeného jazyka](../../6-NLP/README.md) ve svých produktech. Na svém technickém blogu zveřejnili zajímavou případovou studii o tom, jak se vypořádali s genderovou zaujatostí ve strojovém učení, o které jste se dozvěděli v naší [úvodní lekci o spravedlnosti](../../1-Introduction/3-fairness/README.md). +[Reference](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Maloobchod + +Maloobchodní sektor může rozhodně těžit z využití ML, a to od vytváření lepší zákaznické cesty až po optimální skladování zásob. + +### Personalizace zákaznické cesty + +Ve společnosti Wayfair, která prodává domácí potřeby jako nábytek, je klíčové pomoci zákazníkům najít správné produkty podle jejich vkusu a potřeb. V tomto článku inženýři společnosti popisují, jak využívají ML a NLP k "zobrazení správných výsledků pro zákazníky". Jejich Query Intent Engine byl navržen tak, aby využíval extrakci entit, trénink klasifikátorů, extrakci aktiv a názorů a označování sentimentu v zákaznických recenzích. Toto je klasický příklad toho, jak NLP funguje v online maloobchodu. +[Reference](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Řízení zásob + +Inovativní, flexibilní společnosti jako [StitchFix](https://stitchfix.com), služba zasílání krabic s oblečením, se silně spoléhají na ML pro doporučení a řízení zásob. Jejich stylingové týmy spolupracují s týmy pro merchandising: "jeden z našich datových vědců experimentoval s genetickým algoritmem a aplikoval jej na oděvy, aby předpověděl, co by mohlo být úspěšným kusem oblečení, který dnes neexistuje. Předložili jsme to týmu pro merchandising a nyní to mohou používat jako nástroj." +[Reference](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Zdravotnictví + +Zdravotnický sektor může využít ML k optimalizaci výzkumných úkolů a také logistických problémů, jako je opětovné přijímání pacientů nebo zastavení šíření nemocí. + +### Řízení klinických studií + +Toxicita v klinických studiích je hlavním problémem pro výrobce léků. Kolik toxicity je tolerovatelné? V této studii analýza různých metod klinických studií vedla k vývoji nového přístupu pro predikci výsledků klinických studií. Konkrétně byli schopni použít random forest k vytvoření [klasifikátoru](../../4-Classification/README.md), který dokáže rozlišit mezi skupinami léků. +[Reference](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Řízení opětovného přijímání do nemocnic + +Nemocniční péče je nákladná, zejména když musí být pacienti znovu přijati. Tento článek popisuje společnost, která používá ML k predikci potenciálu opětovného přijetí pomocí [shlukovacích algoritmů](../../5-Clustering/README.md). Tyto shluky pomáhají analytikům "objevovat skupiny opětovných přijetí, které mohou sdílet společnou příčinu". +[Reference](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Řízení nemocí + +Nedávná pandemie osvětlila způsoby, jakými může strojové učení pomoci zastavit šíření nemocí. V tomto článku poznáte použití ARIMA, logistických křivek, lineární regrese a SARIMA. "Tato práce je pokusem vypočítat míru šíření tohoto viru a tím předpovědět úmrtí, uzdravení a potvrzené případy, aby nám to mohlo pomoci lépe se připravit a přežít." +[Reference](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ekologie a zelené technologie + +Příroda a ekologie zahrnují mnoho citlivých systémů, kde se do popředí dostává interakce mezi zvířaty a přírodou. Je důležité být schopen tyto systémy přesně měřit a jednat vhodně, pokud se něco stane, například lesní požár nebo pokles populace zvířat. + +### Řízení lesů + +V předchozích lekcích jste se naučili o [Reinforcement Learning](../../8-Reinforcement/README.md). Může být velmi užitečné při pokusech o predikci vzorců v přírodě. Zejména může být použito ke sledování ekologických problémů, jako jsou lesní požáry a šíření invazivních druhů. V Kanadě skupina výzkumníků použila Reinforcement Learning k vytvoření modelů dynamiky lesních požárů ze satelitních snímků. Pomocí inovativního "procesu prostorového šíření (SSP)" si představili lesní požár jako "agenta na jakékoli buňce v krajině". "Sada akcí, které může požár podniknout z určitého místa v daném čase, zahrnuje šíření na sever, jih, východ nebo západ nebo nešíření." + +Tento přístup obrací obvyklé nastavení RL, protože dynamika odpovídajícího Markovova rozhodovacího procesu (MDP) je známou funkcí pro okamžité šíření požáru. Více o klasických algoritmech používaných touto skupinou si přečtěte na níže uvedeném odkazu. +[Reference](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Sledování pohybu zvířat + +I když hluboké učení způsobilo revoluci ve vizuálním sledování pohybu zvířat (můžete si vytvořit vlastní [sledovač ledních medvědů](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) zde), klasické ML má stále své místo v tomto úkolu. + +Senzory pro sledování pohybu hospodářských zvířat a IoT využívají tento typ vizuálního zpracování, ale základnější techniky ML jsou užitečné pro předzpracování dat. Například v tomto článku byly monitorovány a analyzovány postoje ovcí pomocí různých klasifikačních algoritmů. Možná poznáte ROC křivku na straně 335. +[Reference](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Řízení energie + +V našich lekcích o [predikci časových řad](../../7-TimeSeries/README.md) jsme zmínili koncept chytrých parkovacích měřičů pro generování příjmů pro město na základě pochopení nabídky a poptávky. Tento článek podrobně popisuje, jak kombinace shlukování, regrese a predikce časových řad pomohla předpovědět budoucí spotřebu energie v Irsku na základě chytrého měření. +[Reference](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Pojišťovnictví + +Pojišťovnictví je další sektor, který využívá ML k vytváření a optimalizaci životaschopných finančních a pojistně-matematických modelů. + +### Řízení volatility + +MetLife, poskytovatel životního pojištění, otevřeně popisuje, jak analyzuje a zmírňuje volatilitu ve svých finančních modelech. V tomto článku si všimnete vizualizací binární a ordinální klasifikace. Také objevíte vizualizace predikcí. +[Reference](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Umění, kultura a literatura + +V umění, například v žurnalistice, existuje mnoho zajímavých problémů. Detekce falešných zpráv je obrovský problém, protože bylo prokázáno, že ovlivňuje názory lidí a dokonce může destabilizovat demokracie. Muzea mohou také těžit z využití ML ve všem od hledání spojení mezi artefakty až po plánování zdrojů. + +### Detekce falešných zpráv + +Detekce falešných zpráv se v dnešních médiích stala hrou na kočku a myš. V tomto článku výzkumníci navrhují, že systém kombinující několik technik ML, které jsme studovali, může být testován a nejlepší model nasazen: "Tento systém je založen na zpracování přirozeného jazyka pro extrakci funkcí z dat a poté jsou tyto funkce použity pro trénink klasifikátorů strojového učení, jako jsou Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) a Logistic Regression (LR)." +[Reference](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Tento článek ukazuje, jak kombinace různých oblastí ML může přinést zajímavé výsledky, které mohou pomoci zastavit šíření falešných zpráv a zabránit skutečným škodám; v tomto případě byl impulsem šíření fám o léčbě COVID, které podněcovaly násilí davu. + +### Muzejní ML + +Muzea stojí na prahu revoluce AI, kdy katalogizace a digitalizace sbírek a hledání spojení mezi artefakty je díky technologickému pokroku stále snazší. Projekty jako [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) pomáhají odhalovat tajemství nepřístupných sbírek, jako jsou Vatikánské archivy. Ale obchodní aspekt muzeí také těží z modelů ML. + +Například Art Institute of Chicago vytvořil modely pro předpověď, co návštěvníky zajímá a kdy navštíví expozice. Cílem je vytvořit individualizované a optimalizované zážitky pro návštěvníky při každé jejich návštěvě muzea. "Během fiskálního roku 2017 model předpověděl návštěvnost a příjmy s přesností na 1 procento, říká Andrew Simnick, senior viceprezident v Art Institute." +[Reference](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Marketing + +### Segmentace zákazníků + +Nejúčinnější marketingové strategie cílí na zákazníky různými způsoby na základě různých skupin. V tomto článku jsou diskutovány využití shlukovacích algoritmů na podporu diferencovaného marketingu. Diferencovaný marketing pomáhá společnostem zlepšit povědomí o značce, oslovit více zákazníků a vydělat více peněz. +[Reference](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Výzva + +Identifikujte další sektor, který těží z některých technik, které jste se naučili v tomto kurzu, a zjistěte, jak využívá ML. +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) + +## Přehled & Samostudium + +Tým datové vědy společnosti Wayfair má několik zajímavých videí o tom, jak využívají strojové učení ve své firmě. Stojí za to [podívat se](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Úkol + +[Hledání pokladu s ML](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/9-Real-World/1-Applications/assignment.md b/translations/cs/9-Real-World/1-Applications/assignment.md new file mode 100644 index 000000000..1760e93f6 --- /dev/null +++ b/translations/cs/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Hon na poklady s ML + +## Instrukce + +V této lekci jste se seznámili s mnoha reálnými případy použití, které byly vyřešeny pomocí klasického strojového učení. Ačkoli použití hlubokého učení, nových technik a nástrojů v AI a využívání neuronových sítí pomohlo urychlit vývoj nástrojů v těchto sektorech, klasické strojové učení s využitím technik z tohoto kurzu má stále velkou hodnotu. + +V tomto úkolu si představte, že se účastníte hackathonu. Použijte to, co jste se naučili v kurzu, k navržení řešení pomocí klasického strojového učení, které by vyřešilo problém v jednom ze sektorů probíraných v této lekci. Vytvořte prezentaci, ve které budete diskutovat, jak svůj nápad implementujete. Bonusové body získáte, pokud dokážete shromáždit vzorová data a vytvořit model strojového učení na podporu svého konceptu! + +## Hodnotící kritéria + +| Kritérium | Vynikající | Přiměřené | Potřebuje zlepšení | +| --------- | ----------------------------------------------------------------- | ----------------------------------------------- | ---------------------- | +| | Prezentace v PowerPointu je předložena - bonus za vytvoření modelu | Je předložena neinnovativní, základní prezentace | Práce je neúplná | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Nenese odpovědnost za jakékoli nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/9-Real-World/2-Debugging-ML-Models/README.md b/translations/cs/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 000000000..0a07234d2 --- /dev/null +++ b/translations/cs/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,164 @@ + +# Postscript: Ladění modelů strojového učení pomocí komponent Responsible AI dashboardu + +## [Kvíz před přednáškou](https://ff-quizzes.netlify.app/en/ml/) + +## Úvod + +Strojové učení ovlivňuje náš každodenní život. AI se dostává do některých z nejdůležitějších systémů, které ovlivňují nás jako jednotlivce i naši společnost, od zdravotnictví, financí, vzdělávání až po zaměstnanost. Například systémy a modely se podílejí na každodenních rozhodovacích úlohách, jako jsou diagnózy ve zdravotnictví nebo odhalování podvodů. V důsledku toho jsou pokroky v AI spolu s rychlou adopcí doprovázeny měnícími se společenskými očekáváními a rostoucí regulací. Neustále vidíme oblasti, kde systémy AI nesplňují očekávání, odhalují nové výzvy a vlády začínají regulovat AI řešení. Je tedy důležité, aby tyto modely byly analyzovány tak, aby poskytovaly spravedlivé, spolehlivé, inkluzivní, transparentní a odpovědné výsledky pro všechny. + +V tomto kurzu se podíváme na praktické nástroje, které lze použít k posouzení, zda má model problémy s odpovědnou AI. Tradiční techniky ladění strojového učení bývají založeny na kvantitativních výpočtech, jako je agregovaná přesnost nebo průměrná ztráta chyb. Představte si, co se může stát, když data, která používáte k vytváření těchto modelů, postrádají určité demografické skupiny, jako je rasa, pohlaví, politický názor, náboženství, nebo naopak nepřiměřeně zastupují tyto demografické skupiny. Co když je výstup modelu interpretován tak, že upřednostňuje určitou demografickou skupinu? To může vést k nadměrnému nebo nedostatečnému zastoupení těchto citlivých skupin, což způsobí problémy se spravedlností, inkluzivitou nebo spolehlivostí modelu. Dalším faktorem je, že modely strojového učení jsou považovány za "černé skříňky", což ztěžuje pochopení a vysvětlení toho, co ovlivňuje predikce modelu. Všechny tyto výzvy čelí datoví vědci a vývojáři AI, pokud nemají dostatečné nástroje k ladění a posouzení spravedlnosti nebo důvěryhodnosti modelu. + +V této lekci se naučíte ladit své modely pomocí: + +- **Analýzy chyb**: identifikace oblastí v distribuci dat, kde má model vysokou míru chyb. +- **Přehledu modelu**: provádění srovnávací analýzy mezi různými datovými kohortami k odhalení rozdílů ve výkonnostních metrikách modelu. +- **Analýzy dat**: zkoumání, kde může docházet k nadměrnému nebo nedostatečnému zastoupení dat, což může zkreslit model ve prospěch jedné demografické skupiny oproti jiné. +- **Důležitosti vlastností**: pochopení, které vlastnosti ovlivňují predikce modelu na globální nebo lokální úrovni. + +## Předpoklady + +Jako předpoklad si prosím projděte [Nástroje odpovědné AI pro vývojáře](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif o nástrojích odpovědné AI](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Analýza chyb + +Tradiční metriky výkonnosti modelu používané k měření přesnosti jsou většinou výpočty založené na správných vs nesprávných predikcích. Například určení, že model je přesný z 89 % s chybovou ztrátou 0,001, může být považováno za dobrý výkon. Chyby však nejsou v základním datovém souboru rozloženy rovnoměrně. Můžete získat skóre přesnosti modelu 89 %, ale zjistit, že existují různé oblasti vašich dat, kde model selhává ve 42 % případů. Důsledky těchto vzorců selhání u určitých datových skupin mohou vést k problémům se spravedlností nebo spolehlivostí. Je zásadní pochopit oblasti, kde model funguje dobře nebo ne. Datové oblasti, kde má váš model vysoký počet nepřesností, se mohou ukázat jako důležitá demografická data. + +![Analyzujte a laděte chyby modelu](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Komponenta Analýza chyb na RAI dashboardu ukazuje, jak jsou selhání modelu rozložena napříč různými kohortami pomocí vizualizace stromu. To je užitečné při identifikaci vlastností nebo oblastí, kde je vysoká míra chyb ve vašem datovém souboru. Díky tomu, že vidíte, odkud pochází většina nepřesností modelu, můžete začít zkoumat jejich příčinu. Můžete také vytvořit datové kohorty pro provádění analýzy. Tyto datové kohorty pomáhají v procesu ladění určit, proč je výkon modelu dobrý v jedné kohortě, ale chybný v jiné. + +![Analýza chyb](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Vizualizační indikátory na mapě stromu pomáhají rychleji lokalizovat problémové oblasti. Například čím tmavší odstín červené barvy má uzel stromu, tím vyšší je míra chyb. + +Heatmapa je další vizualizační funkce, kterou mohou uživatelé použít k vyšetřování míry chyb pomocí jedné nebo dvou vlastností, aby našli přispěvatele k chybám modelu napříč celým datovým souborem nebo kohortami. + +![Heatmapa analýzy chyb](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Použijte analýzu chyb, když potřebujete: + +* Získat hluboké pochopení toho, jak jsou selhání modelu rozložena napříč datovým souborem a několika vstupními a vlastnostními dimenzemi. +* Rozložit agregované metriky výkonu a automaticky objevit chybné kohorty, které informují o vašich cílených krocích k nápravě. + +## Přehled modelu + +Hodnocení výkonu modelu strojového učení vyžaduje získání komplexního pochopení jeho chování. Toho lze dosáhnout přezkoumáním více než jedné metriky, jako je míra chyb, přesnost, recall, precision nebo MAE (Mean Absolute Error), aby se odhalily rozdíly mezi výkonnostními metrikami. Jedna metrika výkonu může vypadat skvěle, ale nepřesnosti mohou být odhaleny v jiné metrice. Navíc porovnání metrik pro rozdíly napříč celým datovým souborem nebo kohortami pomáhá osvětlit, kde model funguje dobře nebo ne. To je obzvláště důležité při sledování výkonu modelu mezi citlivými vs necitlivými vlastnostmi (např. rasa pacienta, pohlaví nebo věk), aby se odhalila potenciální nespravedlnost modelu. Například zjištění, že model je více chybný v kohortě, která má citlivé vlastnosti, může odhalit potenciální nespravedlnost modelu. + +Komponenta Přehled modelu na RAI dashboardu pomáhá nejen při analýze výkonnostních metrik reprezentace dat v kohortě, ale dává uživatelům možnost porovnávat chování modelu napříč různými kohortami. + +![Datové kohorty - přehled modelu na RAI dashboardu](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Funkce analýzy založené na vlastnostech komponenty umožňuje uživatelům zúžit podskupiny dat v rámci konkrétní vlastnosti, aby identifikovali anomálie na granulární úrovni. Například dashboard má vestavěnou inteligenci, která automaticky generuje kohorty pro uživatelem vybranou vlastnost (např. *"time_in_hospital < 3"* nebo *"time_in_hospital >= 7"*). To umožňuje uživateli izolovat konkrétní vlastnost z větší skupiny dat, aby zjistil, zda je klíčovým ovlivňovatelem chybných výsledků modelu. + +![Kohorty vlastností - přehled modelu na RAI dashboardu](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Komponenta Přehled modelu podporuje dvě třídy metrik rozdílů: + +**Rozdíly ve výkonnosti modelu**: Tyto sady metrik vypočítávají rozdíly (disparity) ve hodnotách vybrané výkonnostní metriky napříč podskupinami dat. Zde je několik příkladů: + +* Rozdíly v míře přesnosti +* Rozdíly v míře chyb +* Rozdíly v precision +* Rozdíly v recall +* Rozdíly v průměrné absolutní chybě (MAE) + +**Rozdíly v míře výběru**: Tato metrika obsahuje rozdíly v míře výběru (příznivá predikce) mezi podskupinami. Příkladem je rozdíl v míře schvalování půjček. Míra výběru znamená podíl datových bodů v každé třídě klasifikovaných jako 1 (v binární klasifikaci) nebo rozložení hodnot predikce (v regresi). + +## Analýza dat + +> "Pokud budete data mučit dostatečně dlouho, přiznají cokoliv" - Ronald Coase + +Toto tvrzení zní extrémně, ale je pravda, že data mohou být manipulována tak, aby podporovala jakýkoliv závěr. Taková manipulace se někdy může stát neúmyslně. Jako lidé máme všichni předsudky a často je obtížné vědomě vědět, kdy do dat zavádíme předsudky. Zajištění spravedlnosti v AI a strojovém učení zůstává složitou výzvou. + +Data jsou velkým slepým místem pro tradiční metriky výkonnosti modelu. Můžete mít vysoké skóre přesnosti, ale to ne vždy odráží základní předsudky v datech, které mohou být ve vašem datovém souboru. Například pokud datový soubor zaměstnanců obsahuje 27 % žen na výkonných pozicích ve firmě a 73 % mužů na stejné úrovni, model AI pro inzerci pracovních míst vyškolený na těchto datech může cílit převážně na mužské publikum pro seniorní pracovní pozice. Tato nerovnováha v datech zkreslila predikci modelu ve prospěch jednoho pohlaví. To odhaluje problém spravedlnosti, kde je v modelu AI přítomna genderová předpojatost. + +Komponenta Analýza dat na RAI dashboardu pomáhá identifikovat oblasti, kde je v datovém souboru nadměrné nebo nedostatečné zastoupení. Pomáhá uživatelům diagnostikovat příčinu chyb a problémů se spravedlností, které jsou způsobeny nerovnováhou dat nebo nedostatečným zastoupením určité datové skupiny. To dává uživatelům možnost vizualizovat datové soubory na základě predikovaných a skutečných výsledků, skupin chyb a konkrétních vlastností. Někdy objevení nedostatečně zastoupené datové skupiny může také odhalit, že model se dobře neučí, což vede k vysokým nepřesnostem. Model, který má předsudky v datech, není jen problémem spravedlnosti, ale ukazuje, že model není inkluzivní nebo spolehlivý. + +![Komponenta Analýza dat na RAI dashboardu](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Použijte analýzu dat, když potřebujete: + +* Prozkoumat statistiky svého datového souboru výběrem různých filtrů pro rozdělení dat do různých dimenzí (známých jako kohorty). +* Pochopit rozložení svého datového souboru napříč různými kohortami a skupinami vlastností. +* Určit, zda vaše zjištění týkající se spravedlnosti, analýzy chyb a kauzality (odvozené z jiných komponent dashboardu) jsou výsledkem rozložení vašeho datového souboru. +* Rozhodnout, v jakých oblastech sbírat více dat, aby se zmírnily chyby způsobené problémy s reprezentací, šumem v označení, šumem ve vlastnostech, předsudky v označení a podobnými faktory. + +## Interpretace modelu + +Modely strojového učení mají tendenci být "černými skříňkami". Pochopení, které klíčové vlastnosti dat ovlivňují predikci modelu, může být náročné. Je důležité poskytnout transparentnost ohledně toho, proč model dělá určitou predikci. Například pokud systém AI předpovídá, že diabetický pacient je ohrožen opětovným přijetím do nemocnice během méně než 30 dnů, měl by být schopen poskytnout podpůrná data, která vedla k jeho predikci. Mít podpůrné datové indikátory přináší transparentnost, která pomáhá lékařům nebo nemocnicím činit dobře informovaná rozhodnutí. Navíc schopnost vysvětlit, proč model učinil predikci pro konkrétního pacienta, umožňuje odpovědnost vůči zdravotním regulacím. Když používáte modely strojového učení způsoby, které ovlivňují životy lidí, je zásadní pochopit a vysvětlit, co ovlivňuje chování modelu. Vysvětlitelnost a interpretace modelu pomáhá odpovědět na otázky v situacích, jako jsou: + +* Ladění modelu: Proč můj model udělal tuto chybu? Jak mohu svůj model zlepšit? +* Spolupráce člověk-AI: Jak mohu pochopit a důvěřovat rozhodnutím modelu? +* Regulativní shoda: Splňuje můj model právní požadavky? + +Komponenta Důležitost vlastností na RAI dashboardu vám pomáhá ladit a získat komplexní pochopení toho, jak model dělá predikce. Je to také užitečný nástroj pro profesionály v oblasti strojového učení a rozhodovací činitele, kteří potřebují vysvětlit a ukázat důkazy o vlastnostech ovlivňujících chování modelu pro regulativní shodu. Uživatelé mohou dále zkoumat globální i lokální vysvětlení, aby ověřili, které vlastnosti ovlivňují predikce modelu. Globální vysvětlení uvádí hlavní vlastnosti, které ovlivnily celkovou predikci modelu. Lokální vysvětlení ukazuje, které vlastnosti vedly k predikci modelu pro konkrétní případ. Schopnost hodnotit lokální vysvětlení je také užitečná při ladění nebo auditu konkrétního případu, aby bylo možné lépe pochopit a interpretovat, proč model učinil přesnou nebo nepřesnou predikci. + +![Komponenta Důležitost vlastností na RAI dashboardu](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Globální vysvětlení: Například, které vlastnosti ovlivňují celkové chování modelu pro opětovné přijetí diabetických pacientů do nemocnice? +* Lokální vysvětlení: Například, proč byl diabetický pacient starší 60 let s předchozími hospitalizacemi předpovězen jako opětovně přijatý nebo nepřijatý do nemocnice během 30 dnů? + +V procesu ladění výkonu modelu napříč různými kohortami Důležitost vlastností ukazuje, jakou úroveň vlivu má vlastnost napříč kohortami. Pomáhá odhalit anomálie při porovnávání úrovně vlivu vlastnosti na chybné predikce modelu. Komponenta Důležitost vlastností může ukázat, které hodnoty ve vlastnosti pozitivně nebo negativně ovlivnily výsledek modelu. Například pokud model učinil nepřesnou predikci, komponenta vám umožňuje podrobněji prozkoumat a určit, které vlastnosti nebo hodnoty vlastností ovlivnily predikci. Tato úroveň detailu pomáhá nejen při ladění, ale poskytuje transparentnost a odpovědnost v auditních situacích. Nakonec komponenta může pomoci identifikovat problémy se spravedlností. Například pokud citlivá vlastnost, jako je etnicita nebo pohlaví, má vysoký vliv na predikci modelu, může to být známka rasové nebo +- **Nad- nebo pod-reprezentace**. Myšlenka spočívá v tom, že určitá skupina není zastoupena v určité profesi, a jakákoli služba nebo funkce, která toto nadále podporuje, přispívá k poškození. + +### Azure RAI dashboard + +[Azure RAI dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) je postaven na open-source nástrojích vyvinutých předními akademickými institucemi a organizacemi, včetně Microsoftu. Tyto nástroje jsou klíčové pro datové vědce a vývojáře AI, aby lépe porozuměli chování modelů, objevovali a zmírňovali nežádoucí problémy v modelech AI. + +- Naučte se, jak používat různé komponenty, přečtením dokumentace k RAI dashboardu [docs.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Podívejte se na některé ukázkové [notebooky RAI dashboardu](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) pro ladění odpovědnějších scénářů AI v Azure Machine Learning. + +--- +## 🚀 Výzva + +Abychom zabránili zavádění statistických nebo datových předsudků, měli bychom: + +- zajistit rozmanitost zázemí a perspektiv mezi lidmi pracujícími na systémech +- investovat do datových sad, které odrážejí rozmanitost naší společnosti +- vyvíjet lepší metody pro detekci a nápravu předsudků, když k nim dojde + +Přemýšlejte o reálných situacích, kde je nespravedlnost zřejmá při vytváření a používání modelů. Co dalšího bychom měli zvážit? + +## [Kvíz po přednášce](https://ff-quizzes.netlify.app/en/ml/) +## Přehled a samostudium + +V této lekci jste se naučili některé praktické nástroje pro začlenění odpovědné AI do strojového učení. + +Podívejte se na tento workshop, abyste se ponořili hlouběji do témat: + +- Responsible AI Dashboard: Jednotné místo pro operacionalizaci RAI v praxi od Besmiry Nushi a Mehrnoosh Sameki + +[![Responsible AI Dashboard: Jednotné místo pro operacionalizaci RAI v praxi](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: Jednotné místo pro operacionalizaci RAI v praxi") + +> 🎥 Klikněte na obrázek výše pro video: Responsible AI Dashboard: Jednotné místo pro operacionalizaci RAI v praxi od Besmiry Nushi a Mehrnoosh Sameki + +Odkazujte na následující materiály, abyste se dozvěděli více o odpovědné AI a jak vytvářet důvěryhodnější modely: + +- Microsoftovy nástroje RAI dashboardu pro ladění modelů ML: [Responsible AI tools resources](https://aka.ms/rai-dashboard) + +- Prozkoumejte sadu nástrojů Responsible AI: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Microsoftovo centrum zdrojů RAI: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoftova výzkumná skupina FATE: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Úkol + +[Prozkoumejte RAI dashboard](assignment.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/cs/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 000000000..d2db02f1f --- /dev/null +++ b/translations/cs/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Prozkoumejte dashboard Responsible AI (RAI) + +## Pokyny + +V této lekci jste se seznámili s dashboardem RAI, sadou komponent postavených na "open-source" nástrojích, které pomáhají datovým vědcům provádět analýzu chyb, průzkum dat, hodnocení spravedlnosti, interpretaci modelů, hodnocení kontrafaktuálních scénářů/co-kdyby a kauzální analýzu v systémech AI. Pro tento úkol prozkoumejte některé ukázkové [notebooky](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) dashboardu RAI a své poznatky shrňte v práci nebo prezentaci. + +## Hodnotící kritéria + +| Kritéria | Vynikající | Přiměřené | Vyžaduje zlepšení | +| -------- | ---------- | --------- | ----------------- | +| | Je předložena práce nebo powerpointová prezentace, která diskutuje komponenty dashboardu RAI, notebook, který byl spuštěn, a závěry vyvozené z jeho spuštění | Je předložena práce bez závěrů | Práce není předložena | + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/9-Real-World/README.md b/translations/cs/9-Real-World/README.md new file mode 100644 index 000000000..460b506f4 --- /dev/null +++ b/translations/cs/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Postscript: Skutečné aplikace klasického strojového učení + +V této části kurzu se seznámíte s některými skutečnými aplikacemi klasického strojového učení. Prohledali jsme internet, abychom našli odborné články a studie o aplikacích, které využívají tyto strategie, přičemž jsme se co nejvíce vyhýbali neuronovým sítím, hlubokému učení a umělé inteligenci. Zjistěte, jak se strojové učení používá v obchodních systémech, ekologických aplikacích, financích, umění a kultuře a dalších oblastech. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Foto od Alexis Fauvet na Unsplash + +## Lekce + +1. [Skutečné aplikace strojového učení](1-Applications/README.md) +2. [Ladění modelů strojového učení pomocí komponent Responsible AI dashboardu](2-Debugging-ML-Models/README.md) + +## Autoři + +"Skutečné aplikace" napsal tým, který zahrnuje [Jen Looper](https://twitter.com/jenlooper) a [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Ladění modelů strojového učení pomocí komponent Responsible AI dashboardu" napsala [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro kritické informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/CODE_OF_CONDUCT.md b/translations/cs/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..703086e25 --- /dev/null +++ b/translations/cs/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Kodex chování pro otevřený zdroj Microsoftu + +Tento projekt přijal [Kodex chování pro otevřený zdroj Microsoftu](https://opensource.microsoft.com/codeofconduct/). + +Zdroje: + +- [Kodex chování pro otevřený zdroj Microsoftu](https://opensource.microsoft.com/codeofconduct/) +- [Často kladené dotazy ke kodexu chování](https://opensource.microsoft.com/codeofconduct/faq/) +- Kontaktujte [opencode@microsoft.com](mailto:opencode@microsoft.com) s dotazy nebo obavami + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/CONTRIBUTING.md b/translations/cs/CONTRIBUTING.md new file mode 100644 index 000000000..1eea0d548 --- /dev/null +++ b/translations/cs/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# Přispívání + +Tento projekt vítá příspěvky a návrhy. Většina příspěvků vyžaduje, abyste souhlasili s Licenční smlouvou přispěvatele (CLA), která potvrzuje, že máte právo a skutečně udělujete práva k použití vašeho příspěvku. Podrobnosti naleznete na https://cla.microsoft.com. + +> Důležité: při překládání textu v tomto repozitáři se ujistěte, že nepoužíváte strojový překlad. Překlady ověříme prostřednictvím komunity, takže se hlaste pouze k překladům do jazyků, ve kterých jste zdatní. + +Když odešlete pull request, CLA-bot automaticky určí, zda je potřeba poskytnout CLA, a příslušně označí PR (např. štítkem, komentářem). Jednoduše postupujte podle pokynů poskytnutých botem. Toto budete muset udělat pouze jednou pro všechny repozitáře využívající naši CLA. + +Tento projekt přijal [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +Další informace naleznete v [FAQ k pravidlům chování](https://opensource.microsoft.com/codeofconduct/faq/) +nebo kontaktujte [opencode@microsoft.com](mailto:opencode@microsoft.com) s případnými dalšími dotazy nebo komentáři. + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/README.md b/translations/cs/README.md new file mode 100644 index 000000000..332b4d694 --- /dev/null +++ b/translations/cs/README.md @@ -0,0 +1,178 @@ + +[![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/) + +### 🌐 Podpora více jazyků + +#### Podporováno prostřednictvím GitHub Action (automatizované a vždy aktuální) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](./README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Připojte se ke komunitě + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Strojové učení pro začátečníky - kurikulum + +> 🌍 Cestujte po světě, zatímco se učíte strojové učení prostřednictvím světových kultur 🌍 + +Cloud Advocates v Microsoftu s potěšením nabízejí 12týdenní kurikulum s 26 lekcemi zaměřenými na **strojové učení**. V tomto kurikulu se naučíte, co se někdy nazývá **klasické strojové učení**, především s využitím knihovny Scikit-learn a bez použití hlubokého učení, které je pokryto v našem [kurikulu AI pro začátečníky](https://aka.ms/ai4beginners). Spojte tyto lekce s naším [kurikulem Data Science pro začátečníky](https://aka.ms/ds4beginners)! + +Cestujte s námi po světě, zatímco aplikujeme tyto klasické techniky na data z různých částí světa. Každá lekce obsahuje kvízy před a po lekci, písemné pokyny k dokončení lekce, řešení, úkoly a další. Náš projektově orientovaný přístup vám umožní učit se při tvorbě, což je osvědčený způsob, jak si osvojit nové dovednosti. + +**✍️ Velké díky našim autorům** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu a Amy Boyd + +**🎨 Díky také našim ilustrátorům** Tomomi Imura, Dasani Madipalli a Jen Looper + +**🙏 Speciální poděkování 🙏 našim autorům, recenzentům a přispěvatelům obsahu z řad Microsoft Student Ambassador**, zejména Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila a Snigdha Agarwal + +**🤩 Extra poděkování Microsoft Student Ambassador Eric Wanjau, Jasleen Sondhi a Vidushi Gupta za naše lekce v R!** + +# Začínáme + +Postupujte podle těchto kroků: +1. **Forkujte repozitář**: Klikněte na tlačítko "Fork" v pravém horním rohu této stránky. +2. **Klonujte repozitář**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [najděte všechny další zdroje pro tento kurz v naší kolekci Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Studenti](https://aka.ms/student-page)**, chcete-li použít toto kurikulum, forkujte celý repozitář do svého GitHub účtu a dokončete cvičení sami nebo ve skupině: + +- Začněte kvízem před lekcí. +- Přečtěte si lekci a dokončete aktivity, přičemž se zastavte a zamyslete při každé kontrolní otázce. +- Pokuste se vytvořit projekty pochopením lekcí, místo abyste pouze spouštěli řešení; kód řešení je však dostupný ve složkách `/solution` v každé projektově orientované lekci. +- Udělejte kvíz po lekci. +- Dokončete výzvu. +- Dokončete úkol. +- Po dokončení skupiny lekcí navštivte [Diskusní fórum](https://github.com/microsoft/ML-For-Beginners/discussions) a "učte se nahlas" vyplněním příslušného PAT rubriky. PAT je nástroj pro hodnocení pokroku, který vyplníte, abyste si prohloubili své učení. Můžete také reagovat na jiné PAT, abychom se učili společně. + +> Pro další studium doporučujeme sledovat tyto [moduly a vzdělávací cesty Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott). + +**Učitelé**, [zahrnuli jsme několik návrhů](for-teachers.md), jak toto kurikulum využít. + +--- + +## Video průvodce + +Některé lekce jsou dostupné jako krátká videa. Všechna tato videa najdete přímo v lekcích nebo na [playlistu ML pro začátečníky na YouTube kanálu Microsoft Developer](https://aka.ms/ml-beginners-videos) kliknutím na obrázek níže. + +[![ML pro začátečníky banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Seznamte se s týmem + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif vytvořil** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Klikněte na obrázek výše pro video o projektu a lidech, kteří ho vytvořili! + +--- + +## Pedagogika + +Při tvorbě tohoto kurikula jsme zvolili dva pedagogické principy: zajistit, aby bylo praktické **projektově orientované** a aby obsahovalo **časté kvízy**. Navíc má toto kurikulum společné **téma**, které mu dodává soudržnost. + +Zajištěním, že obsah odpovídá projektům, je proces pro studenty více poutavý a zlepšuje se uchování konceptů. Nízkostresový kvíz před hodinou nastaví záměr studenta na učení daného tématu, zatímco druhý kvíz po hodině zajišťuje další uchování. Toto kurikulum bylo navrženo tak, aby bylo flexibilní a zábavné, a lze ho absolvovat celé nebo jen jeho část. Projekty začínají malými úkoly a postupně se stávají složitějšími na konci 12týdenního cyklu. Kurikulum také obsahuje dodatek o reálných aplikacích ML, který může být použit jako extra kredit nebo jako základ pro diskusi. + +> Najděte náš [Kodex chování](CODE_OF_CONDUCT.md), [Pokyny pro přispívání](CONTRIBUTING.md) a [Pokyny pro překlady](TRANSLATIONS.md). Vaši konstruktivní zpětnou vazbu vítáme! + +## Každá lekce obsahuje + +- volitelný sketchnote +- volitelné doplňkové video +- video průvodce (pouze některé lekce) +- [kvíz před lekcí](https://ff-quizzes.netlify.app/en/ml/) +- písemnou lekci +- u projektově orientovaných lekcí, podrobné průvodce, jak projekt vytvořit +- kontrolní otázky +- výzvu +- doplňkové čtení +- úkol +- [kvíz po lekci](https://ff-quizzes.netlify.app/en/ml/) + +> **Poznámka k jazykům**: Tyto lekce jsou primárně psány v Pythonu, ale mnoho z nich je také dostupných v R. Chcete-li dokončit lekci v R, přejděte do složky `/solution` a vyhledejte lekce v R. Tyto lekce obsahují příponu .rmd, která představuje **R Markdown** soubor, což lze jednoduše definovat jako kombinaci `code chunks` (R nebo jiných jazyků) a `YAML header` (který určuje, jak formátovat výstupy, jako PDF) v `Markdown dokumentu`. Slouží jako příkladný autorizační rámec pro datovou vědu, protože umožňuje kombinovat váš kód, jeho výstup a vaše myšlenky tím, že je zapisujete v Markdown. Navíc lze R Markdown dokumenty převést na výstupní formáty, jako PDF, HTML nebo Word. + +> **Poznámka ke kvízům**: Všechny kvízy jsou obsaženy ve složce [Quiz App](../../quiz-app), celkem 52 kvízů po třech otázkách. Jsou propojeny přímo z lekcí, ale aplikaci kvízů lze spustit lokálně; postupujte podle pokynů ve složce `quiz-app` pro lokální hostování nebo nasazení na Azure. + +| Číslo lekce | Téma | Skupina lekcí | Výukové cíle | Propojená lekce | Autor | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Úvod do strojového učení | [Úvod](1-Introduction/README.md) | Naučte se základní koncepty strojového učení | [Lekce](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | Historie strojového učení | [Úvod](1-Introduction/README.md) | Naučte se historii tohoto oboru | [Lekce](1-Introduction/2-history-of-ML/README.md) | Jen a Amy | +| 03 | Spravedlnost ve strojovém učení | [Úvod](1-Introduction/README.md) | Jaké jsou důležité filozofické otázky kolem spravedlnosti, které by studenti měli zvážit při vytváření a aplikaci ML modelů? | [Lekce](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Techniky strojového učení | [Introduction](1-Introduction/README.md) | Jaké techniky používají výzkumníci ML k vytváření modelů strojového učení? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris a Jen | +| 05 | Úvod do regrese | [Regression](2-Regression/README.md) | Začněte s Pythonem a Scikit-learn pro regresní modely | +
            • [Python](2-Regression/1-Tools/README.md)
            • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
            |
            • Jen
            • Eric Wanjau
            | +| 06 | Ceny dýní v Severní Americe 🎃 | [Regression](2-Regression/README.md) | Vizualizace a čištění dat jako příprava na ML |
            • [Python](2-Regression/2-Data/README.md)
            • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
            |
            • Jen
            • Eric Wanjau
            | +| 07 | Ceny dýní v Severní Americe 🎃 | [Regression](2-Regression/README.md) | Vytvoření lineárních a polynomiálních regresních modelů |
            • [Python](2-Regression/3-Linear/README.md)
            • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
            |
            • Jen a Dmitry
            • Eric Wanjau
            | +| 08 | Ceny dýní v Severní Americe 🎃 | [Regression](2-Regression/README.md) | Vytvoření logistického regresního modelu |
            • [Python](2-Regression/4-Logistic/README.md)
            • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
            |
            • Jen
            • Eric Wanjau
            | +| 09 | Webová aplikace 🔌 | [Web App](3-Web-App/README.md) | Vytvoření webové aplikace pro použití vašeho trénovaného modelu | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Úvod do klasifikace | [Classification](4-Classification/README.md) | Čištění, příprava a vizualizace dat; úvod do klasifikace |
            • [Python](4-Classification/1-Introduction/README.md)
            • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
              • Jen a Cassie
              • Eric Wanjau
              | +| 11 | Lahodná asijská a indická kuchyně 🍜 | [Classification](4-Classification/README.md) | Úvod do klasifikátorů |
              • [Python](4-Classification/2-Classifiers-1/README.md)
              • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                • Jen a Cassie
                • Eric Wanjau
                | +| 12 | Lahodná asijská a indická kuchyně 🍜 | [Classification](4-Classification/README.md) | Další klasifikátory |
                • [Python](4-Classification/3-Classifiers-2/README.md)
                • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                  • Jen a Cassie
                  • Eric Wanjau
                  | +| 13 | Lahodná asijská a indická kuchyně 🍜 | [Classification](4-Classification/README.md) | Vytvoření webové aplikace doporučující na základě vašeho modelu | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Úvod do shlukování | [Clustering](5-Clustering/README.md) | Čištění, příprava a vizualizace dat; úvod do shlukování |
                  • [Python](5-Clustering/1-Visualize/README.md)
                  • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                    • Jen
                    • Eric Wanjau
                    | +| 15 | Zkoumání hudebních chutí v Nigérii 🎧 | [Clustering](5-Clustering/README.md) | Zkoumání metody shlukování 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 | Úvod do zpracování přirozeného jazyka ☕️ | [Natural language processing](6-NLP/README.md) | Naučte se základy NLP vytvořením jednoduchého bota | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Běžné úkoly NLP ☕️ | [Natural language processing](6-NLP/README.md) | Prohloubení znalostí NLP pochopením běžných úkolů při práci s jazykovými strukturami | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Překlad a analýza sentimentu ♥️ | [Natural language processing](6-NLP/README.md) | Překlad a analýza sentimentu s Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Romantické hotely v Evropě ♥️ | [Natural language processing](6-NLP/README.md) | Analýza sentimentu s recenzemi hotelů 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Romantické hotely v Evropě ♥️ | [Natural language processing](6-NLP/README.md) | Analýza sentimentu s recenzemi hotelů 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Úvod do předpovědi časových řad | [Time series](7-TimeSeries/README.md) | Úvod do předpovědi časových řad | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Světová spotřeba energie ⚡️ - předpověď časových řad s ARIMA | [Time series](7-TimeSeries/README.md) | Předpověď časových řad s ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Světová spotřeba energie ⚡️ - předpověď časových řad s SVR | [Time series](7-TimeSeries/README.md) | Předpověď časových řad s Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Úvod do posilovaného učení | [Reinforcement learning](8-Reinforcement/README.md) | Úvod do posilovaného učení s Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Pomozte Petrovi vyhnout se vlkovi! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Posilované učení Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Scénáře a aplikace ML v reálném světě | [ML in the Wild](9-Real-World/README.md) | Zajímavé a odhalující aplikace klasického ML v reálném světě | [Lesson](9-Real-World/1-Applications/README.md) | Tým | +| Postscript | Ladění modelů ML pomocí RAI dashboardu | [ML in the Wild](9-Real-World/README.md) | Ladění modelů strojového učení pomocí komponent Responsible AI dashboardu | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [najděte všechny další zdroje pro tento kurz v naší kolekci Microsoft Learn](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Offline přístup + +Tuto dokumentaci můžete spustit offline pomocí [Docsify](https://docsify.js.org/#/). Forkněte tento repozitář, [nainstalujte Docsify](https://docsify.js.org/#/quickstart) na svůj lokální počítač a poté v kořenové složce tohoto repozitáře zadejte `docsify serve`. Webová stránka bude spuštěna na portu 3000 na vašem localhostu: `localhost:3000`. + +## PDF + +Najděte PDF kurikula s odkazy [zde](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Další kurzy + +Náš tým vytváří další kurzy! Podívejte se na: + +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Paired Programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby AI pro překlady [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatizované překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/SECURITY.md b/translations/cs/SECURITY.md new file mode 100644 index 000000000..78ebcb4e1 --- /dev/null +++ b/translations/cs/SECURITY.md @@ -0,0 +1,51 @@ + +## Zabezpečení + +Microsoft bere zabezpečení svých softwarových produktů a služeb vážně, což zahrnuje všechny repozitáře zdrojového kódu spravované prostřednictvím našich organizací na GitHubu, mezi které patří [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) a [naše GitHub organizace](https://opensource.microsoft.com/). + +Pokud se domníváte, že jste našli bezpečnostní zranitelnost v některém z repozitářů vlastněných Microsoftem, která odpovídá [definici bezpečnostní zranitelnosti podle Microsoftu](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), nahlaste ji nám podle níže uvedených pokynů. + +## Nahlášení bezpečnostních problémů + +**Prosím, nenahlašujte bezpečnostní zranitelnosti prostřednictvím veřejných GitHub issues.** + +Místo toho je nahlaste Microsoft Security Response Center (MSRC) na [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Pokud preferujete odeslání bez přihlášení, zašlete e-mail na [secure@microsoft.com](mailto:secure@microsoft.com). Pokud je to možné, zašifrujte svou zprávu pomocí našeho PGP klíče; stáhněte si jej ze stránky [Microsoft Security Response Center PGP Key](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Odpověď byste měli obdržet do 24 hodin. Pokud ji z nějakého důvodu neobdržíte, prosím, kontaktujte nás znovu e-mailem, abyste se ujistili, že jsme obdrželi vaši původní zprávu. Další informace naleznete na [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Prosím, zahrňte požadované informace uvedené níže (pokud je to možné), abyste nám pomohli lépe pochopit povahu a rozsah možného problému: + + * Typ problému (např. přetečení bufferu, SQL injection, cross-site scripting atd.) + * Plné cesty ke zdrojovým souborům souvisejícím s projevem problému + * Umístění postiženého zdrojového kódu (tag/branch/commit nebo přímá URL) + * Jakákoliv speciální konfigurace potřebná k reprodukci problému + * Krok za krokem instrukce k reprodukci problému + * Proof-of-concept nebo exploit kód (pokud je to možné) + * Dopad problému, včetně toho, jak by útočník mohl problém zneužít + +Tyto informace nám pomohou rychleji zpracovat váš report. + +Pokud hlásíte problém v rámci programu odměn za chyby, kompletnější reporty mohou přispět k vyšší odměně. Navštivte prosím stránku [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) pro více informací o našich aktivních programech. + +## Preferované jazyky + +Preferujeme, aby veškerá komunikace probíhala v angličtině. + +## Politika + +Microsoft se řídí principem [Koordinovaného zveřejňování zranitelností](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/SUPPORT.md b/translations/cs/SUPPORT.md new file mode 100644 index 000000000..6689f7cf9 --- /dev/null +++ b/translations/cs/SUPPORT.md @@ -0,0 +1,24 @@ + +# Podpora +## Jak nahlásit problémy a získat pomoc + +Tento projekt používá GitHub Issues k sledování chyb a požadavků na funkce. Před nahlášením nového problému prosím vyhledejte existující problémy, abyste se vyhnuli duplicitám. Pro nové problémy nahlaste svou chybu nebo požadavek na funkci jako nový Issue. + +Pro pomoc a dotazy ohledně používání tohoto projektu vytvořte Issue. + +## Podpora od Microsoftu + +Podpora pro tento repozitář je omezena na výše uvedené zdroje. + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/docs/_sidebar.md b/translations/cs/docs/_sidebar.md new file mode 100644 index 000000000..85b25270f --- /dev/null +++ b/translations/cs/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Úvod + - [Úvod do strojového učení](../1-Introduction/1-intro-to-ML/README.md) + - [Historie strojového učení](../1-Introduction/2-history-of-ML/README.md) + - [Strojové učení a férovost](../1-Introduction/3-fairness/README.md) + - [Techniky strojového učení](../1-Introduction/4-techniques-of-ML/README.md) + +- Regrese + - [Nástroje oboru](../2-Regression/1-Tools/README.md) + - [Data](../2-Regression/2-Data/README.md) + - [Lineární regrese](../2-Regression/3-Linear/README.md) + - [Logistická regrese](../2-Regression/4-Logistic/README.md) + +- Vytvoření webové aplikace + - [Webová aplikace](../3-Web-App/1-Web-App/README.md) + +- Klasifikace + - [Úvod do klasifikace](../4-Classification/1-Introduction/README.md) + - [Klasifikátory 1](../4-Classification/2-Classifiers-1/README.md) + - [Klasifikátory 2](../4-Classification/3-Classifiers-2/README.md) + - [Aplikované strojové učení](../4-Classification/4-Applied/README.md) + +- Shlukování + - [Vizualizace dat](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- Zpracování přirozeného jazyka (NLP) + - [Úvod do NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [Úkoly NLP](../6-NLP/2-Tasks/README.md) + - [Překlad a sentiment](../6-NLP/3-Translation-Sentiment/README.md) + - [Recenze hotelů 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Recenze hotelů 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Prognózování časových řad + - [Úvod do prognózování časových řad](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Posilované učení + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Strojové učení v reálném světě + - [Aplikace](../9-Real-World/1-Applications/README.md) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/for-teachers.md b/translations/cs/for-teachers.md new file mode 100644 index 000000000..e42e1fcd7 --- /dev/null +++ b/translations/cs/for-teachers.md @@ -0,0 +1,37 @@ + +## Pro pedagogy + +Chcete použít tento vzdělávací program ve své třídě? Neváhejte! + +Ve skutečnosti ho můžete použít přímo na GitHubu pomocí GitHub Classroom. + +K tomu si tento repozitář forkněte. Budete potřebovat vytvořit repozitář pro každou lekci, takže budete muset každou složku extrahovat do samostatného repozitáře. Tímto způsobem může [GitHub Classroom](https://classroom.github.com/classrooms) zpracovat každou lekci zvlášť. + +Tyto [podrobné instrukce](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) vám poskytnou představu, jak nastavit svou třídu. + +## Použití repozitáře tak, jak je + +Pokud chcete použít tento repozitář v jeho aktuální podobě, bez použití GitHub Classroom, je to také možné. Budete muset komunikovat se svými studenty, kterou lekci mají společně projít. + +V online formátu (Zoom, Teams nebo jiném) můžete vytvořit breakout místnosti pro kvízy a mentorovat studenty, aby se připravili na učení. Poté pozvěte studenty, aby se zúčastnili kvízů a odeslali své odpovědi jako 'issues' v určitém čase. Totéž můžete udělat s úkoly, pokud chcete, aby studenti pracovali společně veřejně. + +Pokud preferujete více soukromý formát, požádejte své studenty, aby si forknuli vzdělávací program, lekci po lekci, do svých vlastních soukromých repozitářů na GitHubu a dali vám přístup. Poté mohou dokončit kvízy a úkoly soukromě a odeslat je vám prostřednictvím issues na vašem třídním repozitáři. + +Existuje mnoho způsobů, jak to v online třídě zorganizovat. Dejte nám prosím vědět, co vám funguje nejlépe! + +## Prosíme, podělte se o své názory! + +Chceme, aby tento vzdělávací program fungoval pro vás i vaše studenty. Prosíme, dejte nám [zpětnou vazbu](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/quiz-app/README.md b/translations/cs/quiz-app/README.md new file mode 100644 index 000000000..f2e43c910 --- /dev/null +++ b/translations/cs/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Kvízy + +Tyto kvízy jsou přednáškové a popřednáškové kvízy pro ML kurikulum na https://aka.ms/ml-beginners + +## Nastavení projektu + +``` +npm install +``` + +### Kompilace a automatické načítání pro vývoj + +``` +npm run serve +``` + +### Kompilace a minimalizace pro produkci + +``` +npm run build +``` + +### Kontrola a oprava souborů + +``` +npm run lint +``` + +### Přizpůsobení konfigurace + +Viz [Reference konfigurace](https://cli.vuejs.org/config/). + +Poděkování: Díky původní verzi této aplikace pro kvízy: https://github.com/arpan45/simple-quiz-vue + +## Nasazení na Azure + +Zde je podrobný průvodce, který vám pomůže začít: + +1. Forkněte GitHub repozitář +Ujistěte se, že kód vaší statické webové aplikace je ve vašem GitHub repozitáři. Forkněte tento repozitář. + +2. Vytvořte Azure Static Web App +- Vytvořte si [Azure účet](http://azure.microsoft.com) +- Přejděte na [Azure portál](https://portal.azure.com) +- Klikněte na „Vytvořit prostředek“ a vyhledejte „Static Web App“. +- Klikněte na „Vytvořit“. + +3. Konfigurace Static Web App +- Základy: + - Předplatné: Vyberte své Azure předplatné. + - Skupina prostředků: Vytvořte novou skupinu prostředků nebo použijte existující. + - Název: Zadejte název pro vaši statickou webovou aplikaci. + - Region: Vyberte region nejbližší vašim uživatelům. + +- #### Podrobnosti nasazení: + - Zdroj: Vyberte „GitHub“. + - GitHub účet: Autorizujte Azure pro přístup k vašemu GitHub účtu. + - Organizace: Vyberte vaši GitHub organizaci. + - Repozitář: Vyberte repozitář obsahující vaši statickou webovou aplikaci. + - Větev: Vyberte větev, ze které chcete nasazovat. + +- #### Podrobnosti sestavení: + - Předvolby sestavení: Vyberte framework, na kterém je vaše aplikace postavena (např. React, Angular, Vue, atd.). + - Umístění aplikace: Zadejte složku obsahující kód vaší aplikace (např. / pokud je v kořenovém adresáři). + - Umístění API: Pokud máte API, zadejte jeho umístění (volitelné). + - Umístění výstupu: Zadejte složku, kde je generován výstup sestavení (např. build nebo dist). + +4. Kontrola a vytvoření +Zkontrolujte své nastavení a klikněte na „Vytvořit“. Azure nastaví potřebné prostředky a vytvoří GitHub Actions workflow ve vašem repozitáři. + +5. GitHub Actions Workflow +Azure automaticky vytvoří soubor GitHub Actions workflow ve vašem repozitáři (.github/workflows/azure-static-web-apps-.yml). Tento workflow bude zajišťovat proces sestavení a nasazení. + +6. Sledování nasazení +Přejděte na záložku „Actions“ ve vašem GitHub repozitáři. +Měli byste vidět běžící workflow. Tento workflow sestaví a nasadí vaši statickou webovou aplikaci na Azure. +Jakmile workflow dokončí, vaše aplikace bude dostupná na poskytnuté Azure URL. + +### Příklad souboru workflow + +Zde je příklad, jak může vypadat soubor GitHub Actions workflow: +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 +``` + +### Další zdroje +- [Dokumentace Azure Static Web Apps](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Dokumentace GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). I když se snažíme o přesnost, mějte na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace se doporučuje profesionální lidský překlad. Neodpovídáme za žádné nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/sketchnotes/LICENSE.md b/translations/cs/sketchnotes/LICENSE.md new file mode 100644 index 000000000..839fdbefb --- /dev/null +++ b/translations/cs/sketchnotes/LICENSE.md @@ -0,0 +1,204 @@ + +Attribution-ShareAlike 4.0 Mezinárodní + +======================================================================= + +Creative Commons Corporation („Creative Commons“) není advokátní kancelář a neposkytuje právní služby ani právní poradenství. Distribuce veřejných licencí Creative Commons nevytváří vztah mezi advokátem a klientem ani jiný vztah. Creative Commons poskytuje své licence a související informace „tak, jak jsou“. Creative Commons neposkytuje žádné záruky ohledně svých licencí, jakéhokoli materiálu licencovaného podle jejich podmínek, ani souvisejících informací. Creative Commons se v maximální možné míře zříká odpovědnosti za škody vzniklé jejich použitím. + +Používání veřejných licencí Creative Commons + +Veřejné licence Creative Commons poskytují standardní soubor podmínek, které mohou autoři a další držitelé práv použít ke sdílení původních autorských děl a jiného materiálu podléhajícího autorskému právu a určitým dalším právům uvedeným níže v této veřejné licenci. Následující úvahy slouží pouze pro informační účely, nejsou vyčerpávající a nejsou součástí našich licencí. + + Úvahy pro poskytovatele licencí: Naše veřejné licence jsou určeny k použití těmi, kteří jsou oprávněni dát veřejnosti povolení k použití materiálu způsoby, které by jinak byly omezeny autorským právem a určitými dalšími právy. Naše licence jsou neodvolatelné. Poskytovatelé licencí by si měli přečíst a porozumět podmínkám licence, kterou si zvolí, před jejím použitím. Poskytovatelé licencí by si také měli zajistit všechna potřebná práva před použitím našich licencí, aby veřejnost mohla materiál znovu použít podle očekávání. Poskytovatelé licencí by měli jasně označit jakýkoli materiál, který není předmětem licence. To zahrnuje jiný materiál licencovaný pod CC nebo materiál použitý na základě výjimky nebo omezení autorského práva. Další úvahy pro poskytovatele licencí: + wiki.creativecommons.org/Considerations_for_licensors + + Úvahy pro veřejnost: Použitím jedné z našich veřejných licencí poskytovatel licence uděluje veřejnosti povolení používat licencovaný materiál za stanovených podmínek. Pokud povolení poskytovatele licence není z jakéhokoli důvodu nutné – například kvůli jakékoli platné výjimce nebo omezení autorského práva – pak takové použití není regulováno licencí. Naše licence udělují pouze povolení podle autorského práva a určitých dalších práv, která je poskytovatel licence oprávněn udělit. Použití licencovaného materiálu může být stále omezeno z jiných důvodů, včetně toho, že jiní mají autorská práva nebo jiná práva k materiálu. Poskytovatel licence může mít zvláštní požadavky, například požadavek, aby byly všechny změny označeny nebo popsány. Ačkoli to naše licence nevyžadují, doporučujeme tyto požadavky respektovat, pokud jsou rozumné. Další úvahy pro veřejnost: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution-ShareAlike 4.0 Mezinárodní veřejná licence + +Použitím Licencovaných práv (definovaných níže) přijímáte a souhlasíte s tím, že budete vázáni podmínkami této veřejné licence Creative Commons Attribution-ShareAlike 4.0 Mezinárodní („Veřejná licence“). V rozsahu, v jakém může být tato Veřejná licence interpretována jako smlouva, Vám jsou Licencovaná práva udělena na základě Vašeho přijetí těchto podmínek, a Poskytovatel licence Vám tato práva uděluje na základě výhod, které Poskytovatel licence získává zpřístupněním Licencovaného materiálu podle těchto podmínek. + +Oddíl 1 – Definice. + + a. Upravený materiál znamená materiál podléhající autorskému právu a podobným právům, který je odvozený z Licencovaného materiálu nebo na něm založený, a ve kterém je Licencovaný materiál přeložen, upraven, uspořádán, transformován nebo jinak změněn způsobem vyžadujícím povolení podle autorského práva a podobných práv držených Poskytovatelem licence. Pro účely této Veřejné licence, pokud je Licencovaný materiál hudebním dílem, výkonem nebo zvukovým záznamem, je Upravený materiál vždy vytvořen, pokud je Licencovaný materiál synchronizován v časovém vztahu s pohyblivým obrazem. + + b. Licence adaptéra znamená licenci, kterou uplatňujete na Vaše autorská práva a podobná práva ve Vašich příspěvcích k Upravenému materiálu v souladu s podmínkami této Veřejné licence. + + c. Licence kompatibilní s BY-SA znamená licenci uvedenou na creativecommons.org/compatiblelicenses, schválenou Creative Commons jako v podstatě ekvivalentní této Veřejné licenci. + + d. Autorská práva a podobná práva znamenají autorská práva a/nebo podobná práva úzce související s autorským právem, včetně, bez omezení, výkonu, vysílání, zvukového záznamu a práv sui generis k databázím, bez ohledu na to, jak jsou práva označena nebo kategorizována. Pro účely této Veřejné licence práva uvedená v Oddílu 2(b)(1)-(2) nejsou autorskými právy a podobnými právy. + + e. Účinná technologická opatření znamenají opatření, která nelze obejít bez řádného povolení podle zákonů plnících povinnosti podle článku 11 Smlouvy WIPO o autorském právu přijaté 20. prosince 1996 a/nebo podobných mezinárodních dohod. + + f. Výjimky a omezení znamenají spravedlivé použití, spravedlivé zacházení a/nebo jakoukoli jinou výjimku nebo omezení autorského práva a podobných práv, které se vztahují na Vaše použití Licencovaného materiálu. + + g. Prvky licence znamenají atributy licence uvedené v názvu Veřejné licence Creative Commons. Prvky licence této Veřejné licence jsou Přisuzování a Sdílení za stejných podmínek. + + h. Licencovaný materiál znamená umělecké nebo literární dílo, databázi nebo jiný materiál, na který Poskytovatel licence uplatnil tuto Veřejnou licenci. + + i. Licencovaná práva znamenají práva udělená Vám podle podmínek této Veřejné licence, která jsou omezena na všechna autorská práva a podobná práva, která se vztahují na Vaše použití Licencovaného materiálu a která je Poskytovatel licence oprávněn licencovat. + + j. Poskytovatel licence znamená jednotlivce nebo subjekty udělující práva podle této Veřejné licence. + + k. Sdílet znamená poskytovat materiál veřejnosti jakýmkoli způsobem nebo procesem, který vyžaduje povolení podle Licencovaných práv, jako je reprodukce, veřejné zobrazení, veřejné provedení, distribuce, šíření, komunikace nebo import, a zpřístupňovat materiál veřejnosti, včetně způsobů, které umožňují členům veřejnosti přístup k materiálu z místa a v čase, který si sami zvolí. + + l. Práva sui generis k databázím znamenají práva jiné než autorská práva vyplývající ze směrnice 96/9/ES Evropského parlamentu a Rady ze dne 11. března 1996 o právní ochraně databází, ve znění pozdějších předpisů a/nebo nástupců, jakož i jiná v podstatě ekvivalentní práva kdekoli na světě. + + m. Vy znamená jednotlivce nebo subjekt uplatňující Licencovaná práva podle této Veřejné licence. Vaše má odpovídající význam. + +Oddíl 2 – Rozsah. + + a. Udělení licence. + + 1. S výhradou podmínek této Veřejné licence Poskytovatel licence tímto uděluje Vám celosvětovou, bezplatnou, nepřevoditelnou, nevýhradní, neodvolatelnou licenci k uplatnění Licencovaných práv na Licencovaný materiál za účelem: + + a. reprodukce a sdílení Licencovaného materiálu, zcela nebo zčásti; a + + b. vytváření, reprodukce a sdílení Upraveného materiálu. + + 2. Výjimky a omezení. Pro vyloučení pochybností, pokud se na Vaše použití vztahují Výjimky a omezení, tato Veřejná licence se neuplatňuje a Vy nemusíte dodržovat její podmínky. + + 3. Doba trvání. Doba trvání této Veřejné licence je uvedena v Oddílu 6(a). + + 4. Média a formáty; povolené technické úpravy. Poskytovatel licence Vám povoluje uplatňovat Licencovaná práva ve všech médiích a formátech, ať už známých nebo vytvořených v budoucnu, a provádět technické úpravy nezbytné k jejich uplatnění. Poskytovatel licence se vzdává a/nebo souhlasí s tím, že nebude uplatňovat žádné právo nebo pravomoc zakázat Vám provádět technické úpravy nezbytné k uplatnění Licencovaných práv, včetně technických úprav nezbytných k obejití Účinných technologických opatření. Pro účely této Veřejné licence samotné provádění úprav povolených podle tohoto Oddílu 2(a)(4) nikdy nevytváří Upravený materiál. + + 5. Příjemci v dalším řetězci. + + a. Nabídka od Poskytovatele licence – Licencovaný materiál. Každý příjemce Licencovaného materiálu automaticky obdrží nabídku od Poskytovatele licence k uplatnění Licencovaných práv podle podmínek této Veřejné licence. + + b. Další nabídka od Poskytovatele licence – Upravený materiál. Každý příjemce Upraveného materiálu od Vás automaticky obdrží nabídku od Poskytovatele licence k uplatnění Licencovaných práv na Upravený materiál podle podmínek Licence adaptéra, kterou uplatňujete. + + c. Žádná omezení v dalším řetězci. Nesmíte nabízet ani ukládat žádné další nebo odlišné podmínky nebo uplatňovat jakákoli Účinná technologická opatření na Licencovaný materiál, pokud by to omezovalo uplatnění Licencovaných práv jakýmkoli příjemcem Licencovaného materiálu. + + 6. Žádné schválení. Nic v této Veřejné licenci nepředstavuje ani nelze vykládat jako povolení tvrdit nebo naznačovat, že jste Vy nebo Vaše použití Licencovaného materiálu spojeno s Poskytovatelem licence nebo jinými osobami určenými k přisuzování podle Oddílu 3(a)(1)(A)(i), nebo že je schváleno, podporováno nebo má oficiální status. + + b. Další práva. + + 1. Morální práva, jako je právo na integritu, nejsou licencována podle této Veřejné licence, stejně jako práva na publicitu, soukromí a/nebo jiná podobná osobnostní práva; nicméně, pokud je to možné, Poskytovatel licence se vzdává a/nebo souhlasí s tím, že nebude uplatňovat žádná taková práva držená Poskytovatelem licence v omezeném rozsahu nezbytném k tomu, aby Vám umožnil uplatňovat Licencovaná práva, ale nikoli jinak. + + 2. Patentová a ochranná známková práva nejsou licencována podle této Veřejné licence. + + 3. Pokud je to možné, Poskytovatel licence se vzdává jakéhokoli práva vybírat od Vás licenční poplatky za uplatnění Licencovaných práv, ať už přímo nebo prostřednictvím kolektivní společnosti podle jakéhokoli dobrovolného nebo zřeknutelného zákonného nebo povinného licenčního režimu. Ve všech ostatních případech si Poskytovatel licence výslovně vyhrazuje právo takové licenční poplatky vybírat. + +Oddíl 3 – Podmínky licence. + +Vaše uplatnění Licencovaných práv je výslovně podmíněno následujícími podmínkami. + + a. Přisuzování. + + 1. Pokud sdílíte Licencovaný materiál (včetně upravené podoby), musíte: + + a. zachovat následující, pokud je to dodáno Poskytovatelem licence s Licencovaným materiálem: + + i. identifikaci autora(ů) Licencovaného materiálu a jakýchkoli dalších osob určených k přisuzování, jakýmkoli rozumným způsobem požadovaným Poskytovatelem licence (včetně pseudonymu, pokud je určen); + + ii. oznámení o autorských právech; + + iii. oznámení odkazující na tuto Veřejnou licenci; + + iv. oznámení odkazující na zřeknutí se záruk; + + v. URI nebo hypertextový odkaz na Licencovaný materiál, pokud je to rozumně proveditelné; + + b. uvést, zda jste Licencovaný materiál upravili, a zachovat označení jakýchkoli předchozích úprav; a + + c. uvést, že Licencovaný materiál je licencován podle této Veřejné licence, a zahrnout text této Veřejné licence nebo URI nebo hypertextový odkaz na tuto Veřejnou licenci. + + 2. Podmínky uvedené v Oddílu 3(a)(1) můžete splnit jakýmkoli rozumným způsobem na základě média, prostředků a kontextu, ve kterém sdílíte Licencovaný materiál. Například může být rozumné splnit podmínky poskytnutím URI nebo hypertextového odkazu na zdroj, který obsahuje požadované informace. + + 3. Pokud to Poskytovatel licence požaduje, musíte odstranit jakékoli informace požadované podle Oddílu 3(a)(1)(A) v rozsahu, v jakém je to rozumně proveditelné. + + b. Sdílení za stejných podmínek. + + Kromě podmínek uvedených v Oddílu 3(a) se na sdílení Upraveného materiálu, který vytvoříte, vztahují následující podmínky. + + 1. Licence adaptéra, kterou uplatňujete, musí být licencí Creative Commons se stejnými Prvky licence, této verze nebo pozdější, nebo licencí kompatibilní s BY-SA. + + 2. Musíte zahrnout text Licence adaptéra, kterou uplatňujete, nebo URI nebo hypertextový odkaz na tuto licenci. Tuto podmínku můžete splnit jakýmkoli rozumným způsobem na základě média, prostředků a kontextu, ve kterém sdílíte Upravený materiál. + + 3. Nesmíte nabízet ani ukládat žádné další nebo odlišné podmínky nebo uplatňovat jakákoli Účinná technologická opatření na Upravený materiál, která by omezovala uplatnění práv udělených podle Licence adaptéra, kterou uplatňujete. + +Oddíl 4 – Práva sui generis k databázím. + +Pokud Licencovaná práva zahrnují práva sui generis k databázím, která se vztahují na Vaše použití Licencovaného materiálu: + + a. pro vyloučení pochybností, Oddíl 2(a)(1) Vám uděluje právo extrahovat, znovu použít, reprodukovat a sdílet celý nebo podstatnou část obsahu databáze; + + b. pokud zahrnete celý nebo podstatnou část obsahu databáze do databáze, ve které máte práva sui generis k databázím: +Práva, poté databáze, ve které máte práva Sui Generis Database Rights (ale ne její jednotlivé obsahové prvky), je Adaptovaný materiál, + +včetně pro účely oddílu 3(b); a +c. Musíte dodržovat podmínky uvedené v oddílu 3(a), pokud sdílíte celý nebo podstatnou část obsahu databáze. + +Pro vyloučení pochybností tento oddíl 4 doplňuje a nenahrazuje vaše povinnosti podle této veřejné licence, pokud licencovaná práva zahrnují jiná autorská práva a podobná práva. + +--- + +Oddíl 5 – Zřeknutí se záruk a omezení odpovědnosti. + +a. NENÍ-LI LICENCOR SAMOSTATNĚ JINAK ZAVÁZÁN, POKUD JE TO MOŽNÉ, LICENCOR NABÍZÍ LICENCOVANÝ MATERIÁL „TAK, JAK JE“ A „TAK, JAK JE DOSTUPNÝ“ A NEPOSKYTUJE ŽÁDNÁ PROHLÁŠENÍ ANI ZÁRUKY JAKÉHOKOLI DRUHU TÝKAJÍCÍ SE LICENCOVANÉHO MATERIÁLU, AŤ UŽ VÝSLOVNÉ, IMPLICITNÍ, ZÁKONNÉ NEBO JINÉ. TO ZAHRNUJE, BEZ OMEZENÍ, ZÁRUKY VLASTNICTVÍ, OBCHODOVATELNOSTI, VHODNOSTI PRO URČITÝ ÚČEL, NEPORUŠENÍ PRÁV, NEPŘÍTOMNOST SKRYTÝCH NEBO JINÝCH VAD, PŘESNOST NEBO PŘÍTOMNOST ČI NEPŘÍTOMNOST CHYB, AŤ UŽ ZNÁMÝCH NEBO OBJEVITELNÝCH. TAM, KDE ZŘEKNUTÍ SE ZÁRUK NENÍ POVOLENO V PLNÉM ROZSAHU NEBO ČÁSTEČNĚ, TOTO ZŘEKNUTÍ SE NA VÁS NEMUSÍ VZTAHOVAT. + +b. POKUD JE TO MOŽNÉ, LICENCOR V ŽÁDNÉM PŘÍPADĚ NEBUDE ODPOVĚDNÝ VŮČI VÁM NA ZÁKLADĚ JAKÉKOLI PRÁVNÍ TEORIE (VČETNĚ, BEZ OMEZENÍ, NEDBALOSTI) NEBO JINAK ZA JAKÉKOLI PŘÍMÉ, ZVLÁŠTNÍ, NEPŘÍMÉ, NÁHODNÉ, NÁSLEDNÉ, TRESTNÍ, EXEMPLÁRNÍ NEBO JINÉ ZTRÁTY, NÁKLADY, VÝDAJE NEBO ŠKODY VYPLÝVAJÍCÍ Z TÉTO VEŘEJNÉ LICENCE NEBO POUŽITÍ LICENCOVANÉHO MATERIÁLU, I KDYBY LICENCOR BYL UPOZORNĚN NA MOŽNOST TAKOVÝCH ZTRÁT, NÁKLADŮ, VÝDAJŮ NEBO ŠKOD. TAM, KDE OMEZENÍ ODPOVĚDNOSTI NENÍ POVOLENO V PLNÉM ROZSAHU NEBO ČÁSTEČNĚ, TOTO OMEZENÍ NA VÁS NEMUSÍ VZTAHOVAT. + +c. Zřeknutí se záruk a omezení odpovědnosti uvedené výše by měly být interpretovány způsobem, který, pokud je to možné, co nejvíce odpovídá absolutnímu zřeknutí se a vzdání se veškeré odpovědnosti. + +--- + +Oddíl 6 – Doba platnosti a ukončení. + +a. Tato veřejná licence platí po dobu trvání licencovaných autorských práv a podobných práv. Pokud však nedodržíte podmínky této veřejné licence, vaše práva podle této veřejné licence se automaticky ukončí. + +b. Pokud vaše právo používat licencovaný materiál bylo ukončeno podle oddílu 6(a), obnoví se: + +1. automaticky ke dni, kdy byla porušení napravena, za předpokladu, že byla napravena do 30 dnů od vašeho zjištění porušení; nebo +2. na základě výslovného obnovení licencorem. + +Pro vyloučení pochybností tento oddíl 6(b) neovlivňuje žádné právo licencora požadovat nápravu za vaše porušení této veřejné licence. + +c. Pro vyloučení pochybností licencor může také nabízet licencovaný materiál za jiných podmínek nebo přestat licencovaný materiál distribuovat kdykoli; to však neukončí tuto veřejnou licenci. + +d. Oddíly 1, 5, 6, 7 a 8 zůstávají v platnosti i po ukončení této veřejné licence. + +--- + +Oddíl 7 – Další podmínky. + +a. Licencor není vázán žádnými dodatečnými nebo odlišnými podmínkami, které mu sdělíte, pokud je výslovně nepřijme. + +b. Jakékoli dohody, porozumění nebo ujednání týkající se licencovaného materiálu, které nejsou uvedeny zde, jsou oddělené od a nezávislé na podmínkách této veřejné licence. + +--- + +Oddíl 8 – Výklad. + +a. Pro vyloučení pochybností tato veřejná licence nesnižuje, neomezuje, neklade podmínky ani neukládá omezení na jakékoli použití licencovaného materiálu, které by bylo zákonně možné bez povolení podle této veřejné licence. + +b. Pokud je to možné, pokud je jakékoli ustanovení této veřejné licence považováno za nevymahatelné, bude automaticky upraveno na minimální rozsah potřebný k jeho vymahatelnosti. Pokud ustanovení nelze upravit, bude odděleno od této veřejné licence, aniž by to ovlivnilo vymahatelnost zbývajících podmínek. + +c. Žádné ustanovení této veřejné licence nebude zrušeno a žádné nedodržení nebude schváleno, pokud to licencor výslovně nepřijme. + +d. Nic v této veřejné licenci nepředstavuje ani nemůže být interpretováno jako omezení nebo vzdání se jakýchkoli výsad a imunit, které se vztahují na licencora nebo na vás, včetně právních procesů jakékoli jurisdikce nebo autority. + +--- + +======================================================================= + +Creative Commons není stranou svých veřejných licencí. Nicméně Creative Commons může zvolit použití jedné ze svých veřejných licencí na materiál, který publikuje, a v těchto případech bude považován za „licencora“. Text veřejných licencí Creative Commons je věnován veřejné doméně pod CC0 Public Domain Dedication. S výjimkou omezeného účelu označení, že materiál je sdílen pod veřejnou licencí Creative Commons nebo jak je jinak povoleno podle politik Creative Commons zveřejněných na creativecommons.org/policies, Creative Commons neautorizuje použití ochranné známky „Creative Commons“ nebo jakékoli jiné ochranné známky či loga Creative Commons bez předchozího písemného souhlasu, včetně, bez omezení, v souvislosti s jakýmikoli neoprávněnými úpravami jakýchkoli jeho veřejných licencí nebo jakýchkoli jiných ujednání, porozumění nebo dohod týkajících se použití licencovaného materiálu. Pro vyloučení pochybností tento odstavec není součástí veřejných licencí. + +Creative Commons lze kontaktovat na creativecommons.org. + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za autoritativní zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/cs/sketchnotes/README.md b/translations/cs/sketchnotes/README.md new file mode 100644 index 000000000..71d5974fe --- /dev/null +++ b/translations/cs/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Všechny sketchnoty z kurikula si můžete stáhnout zde. + +🖨 Pro tisk ve vysokém rozlišení jsou TIFF verze dostupné v [tomto repozitáři](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Vytvořil/a: [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/) + +--- + +**Prohlášení**: +Tento dokument byl přeložen pomocí služby pro automatický překlad [Co-op Translator](https://github.com/Azure/co-op-translator). Ačkoli se snažíme o přesnost, mějte prosím na paměti, že automatické překlady mohou obsahovat chyby nebo nepřesnosti. Původní dokument v jeho původním jazyce by měl být považován za závazný zdroj. Pro důležité informace doporučujeme profesionální lidský překlad. Neodpovídáme za žádná nedorozumění nebo nesprávné interpretace vyplývající z použití tohoto překladu. \ No newline at end of file diff --git a/translations/da/1-Introduction/1-intro-to-ML/README.md b/translations/da/1-Introduction/1-intro-to-ML/README.md new file mode 100644 index 000000000..a9c694ad0 --- /dev/null +++ b/translations/da/1-Introduction/1-intro-to-ML/README.md @@ -0,0 +1,159 @@ + +# Introduktion til maskinlæring + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML for begyndere - Introduktion til maskinlæring for begyndere](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML for begyndere - Introduktion til maskinlæring for begyndere") + +> 🎥 Klik på billedet ovenfor for en kort video, der gennemgår denne lektion. + +Velkommen til dette kursus om klassisk maskinlæring for begyndere! Uanset om du er helt ny inden for emnet eller en erfaren ML-praktiker, der ønsker at genopfriske et område, er vi glade for at have dig med! Vi ønsker at skabe et venligt startpunkt for din ML-studie og vil gerne evaluere, reagere på og integrere din [feedback](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Introduktion til ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduktion til ML") + +> 🎥 Klik på billedet ovenfor for en video: MIT's John Guttag introducerer maskinlæring + +--- +## Kom godt i gang med maskinlæring + +Før du starter med dette pensum, skal du have din computer klar til at køre notebooks lokalt. + +- **Konfigurer din computer med disse videoer**. Brug følgende links til at lære [hvordan man installerer Python](https://youtu.be/CXZYvNRIAKM) på dit system og [opsætter en teksteditor](https://youtu.be/EU8eayHWoZg) til udvikling. +- **Lær Python**. Det anbefales også at have en grundlæggende forståelse af [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), et programmeringssprog, der er nyttigt for dataforskere, og som vi bruger i dette kursus. +- **Lær Node.js og JavaScript**. Vi bruger også JavaScript et par gange i dette kursus, når vi bygger webapplikationer, så du skal have [node](https://nodejs.org) og [npm](https://www.npmjs.com/) installeret samt [Visual Studio Code](https://code.visualstudio.com/) til både Python- og JavaScript-udvikling. +- **Opret en GitHub-konto**. Da du fandt os her på [GitHub](https://github.com), har du måske allerede en konto, men hvis ikke, så opret en og fork derefter dette pensum til brug for dig selv. (Du er også velkommen til at give os en stjerne 😊) +- **Udforsk Scikit-learn**. Bliv bekendt med [Scikit-learn](https://scikit-learn.org/stable/user_guide.html), et sæt ML-biblioteker, som vi refererer til i disse lektioner. + +--- +## Hvad er maskinlæring? + +Begrebet 'maskinlæring' er et af de mest populære og ofte anvendte begreber i dag. Der er en ikke ubetydelig sandsynlighed for, at du har hørt dette begreb mindst én gang, hvis du har en vis form for kendskab til teknologi, uanset hvilket område du arbejder inden for. Mekanikken bag maskinlæring er dog en gåde for de fleste mennesker. For en nybegynder inden for maskinlæring kan emnet nogle gange føles overvældende. Derfor er det vigtigt at forstå, hvad maskinlæring egentlig er, og at lære om det trin for trin gennem praktiske eksempler. + +--- +## Hypekurven + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends viser den seneste 'hypekurve' for begrebet 'maskinlæring' + +--- +## Et mystisk univers + +Vi lever i et univers fyldt med fascinerende mysterier. Store videnskabsfolk som Stephen Hawking, Albert Einstein og mange flere har viet deres liv til at søge meningsfuld information, der afslører mysterierne i verden omkring os. Dette er den menneskelige tilstand af læring: Et menneskebarn lærer nye ting og opdager strukturen i deres verden år for år, mens de vokser op. + +--- +## Barnets hjerne + +Et barns hjerne og sanser opfatter fakta om deres omgivelser og lærer gradvist de skjulte mønstre i livet, som hjælper barnet med at skabe logiske regler for at identificere lærte mønstre. Den menneskelige hjernes læringsproces gør mennesker til de mest sofistikerede levende væsener i denne verden. At lære kontinuerligt ved at opdage skjulte mønstre og derefter innovere på disse mønstre gør os i stand til at forbedre os selv gennem hele livet. Denne læringskapacitet og evne til at udvikle sig er relateret til et koncept kaldet [hjernens plasticitet](https://www.simplypsychology.org/brain-plasticity.html). Overfladisk kan vi drage nogle motiverende ligheder mellem den menneskelige hjernes læringsproces og begreberne inden for maskinlæring. + +--- +## Den menneskelige hjerne + +Den [menneskelige hjerne](https://www.livescience.com/29365-human-brain.html) opfatter ting fra den virkelige verden, behandler den opfattede information, træffer rationelle beslutninger og udfører visse handlinger baseret på omstændighederne. Dette kalder vi at opføre sig intelligent. Når vi programmerer en efterligning af den intelligente adfærdsproces til en maskine, kaldes det kunstig intelligens (AI). + +--- +## Nogle terminologier + +Selvom begreberne kan forveksles, er maskinlæring (ML) en vigtig underkategori af kunstig intelligens. **ML handler om at bruge specialiserede algoritmer til at finde meningsfuld information og opdage skjulte mønstre fra opfattet data for at understøtte den rationelle beslutningsproces**. + +--- +## AI, ML, Deep Learning + +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Et diagram, der viser forholdet mellem AI, ML, deep learning og data science. Infografik af [Jen Looper](https://twitter.com/jenlooper) inspireret af [denne grafik](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Begreber, vi vil dække + +I dette pensum vil vi kun dække de grundlæggende begreber inden for maskinlæring, som en nybegynder skal kende. Vi dækker det, vi kalder 'klassisk maskinlæring', primært ved hjælp af Scikit-learn, et fremragende bibliotek, som mange studerende bruger til at lære det grundlæggende. For at forstå bredere begreber inden for kunstig intelligens eller deep learning er en stærk grundlæggende viden om maskinlæring uundværlig, og det vil vi gerne tilbyde her. + +--- +## I dette kursus vil du lære: + +- grundlæggende begreber inden for maskinlæring +- historien om ML +- ML og retfærdighed +- regressionsteknikker inden for ML +- klassifikationsteknikker inden for ML +- clusteringteknikker inden for ML +- naturlig sprogbehandlingsteknikker inden for ML +- tidsserieprognoseteknikker inden for ML +- forstærkningslæring +- virkelige anvendelser af ML + +--- +## Hvad vi ikke vil dække + +- deep learning +- neurale netværk +- AI + +For at skabe en bedre læringsoplevelse vil vi undgå kompleksiteten af neurale netværk, 'deep learning' - opbygning af modeller med mange lag ved hjælp af neurale netværk - og AI, som vi vil diskutere i et andet pensum. Vi vil også tilbyde et kommende pensum om data science for at fokusere på den del af dette større felt. + +--- +## Hvorfor studere maskinlæring? + +Maskinlæring, fra et systemperspektiv, defineres som skabelsen af automatiserede systemer, der kan lære skjulte mønstre fra data for at hjælpe med at træffe intelligente beslutninger. + +Denne motivation er løst inspireret af, hvordan den menneskelige hjerne lærer visse ting baseret på de data, den opfatter fra omverdenen. + +✅ Tænk et øjeblik over, hvorfor en virksomhed ville ønske at bruge maskinlæringsstrategier i stedet for at skabe en hardkodet regelbaseret motor. + +--- +## Anvendelser af maskinlæring + +Anvendelser af maskinlæring er nu næsten overalt og er lige så udbredte som de data, der flyder rundt i vores samfund, genereret af vores smartphones, tilsluttede enheder og andre systemer. I betragtning af det enorme potentiale i avancerede maskinlæringsalgoritmer har forskere udforsket deres evne til at løse multidimensionale og tværfaglige virkelige problemer med store positive resultater. + +--- +## Eksempler på anvendt ML + +**Du kan bruge maskinlæring på mange måder**: + +- Til at forudsige sandsynligheden for sygdom ud fra en patients medicinske historie eller rapporter. +- Til at udnytte vejrdata til at forudsige vejrbegivenheder. +- Til at forstå sentimentet i en tekst. +- Til at opdage falske nyheder for at stoppe spredningen af propaganda. + +Finans, økonomi, jordvidenskab, rumforskning, biomedicinsk ingeniørkunst, kognitiv videnskab og endda områder inden for humaniora har tilpasset maskinlæring til at løse de tunge databehandlingsproblemer i deres domæne. + +--- +## Konklusion + +Maskinlæring automatiserer processen med mønsteropdagelse ved at finde meningsfulde indsigter fra virkelige eller genererede data. Det har vist sig at være yderst værdifuldt inden for forretning, sundhed og finansielle anvendelser, blandt andre. + +I den nærmeste fremtid vil det at forstå det grundlæggende i maskinlæring blive et must for folk fra alle områder på grund af dets udbredte anvendelse. + +--- +# 🚀 Udfordring + +Lav en skitse, enten på papir eller ved hjælp af en online app som [Excalidraw](https://excalidraw.com/), af din forståelse af forskellene mellem AI, ML, deep learning og data science. Tilføj nogle idéer om problemer, som hver af disse teknikker er gode til at løse. + +# [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Gennemgang & Selvstudie + +For at lære mere om, hvordan du kan arbejde med ML-algoritmer i skyen, følg denne [Learning Path](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Tag en [Learning Path](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) om det grundlæggende i ML. + +--- +# Opgave + +[Kom i gang](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/1-intro-to-ML/assignment.md b/translations/da/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 000000000..d4e122ad2 --- /dev/null +++ b/translations/da/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# Kom i gang + +## Instruktioner + +I denne opgave uden karakter skal du genopfriske din viden om Python og få dit miljø op at køre, så du kan arbejde med notebooks. + +Tag denne [Python læringssti](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), og få derefter dit system sat op ved at se disse introduktionsvideoer: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/2-history-of-ML/README.md b/translations/da/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 000000000..75bcc83e0 --- /dev/null +++ b/translations/da/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# Historien om maskinlæring + +![Oversigt over historien om maskinlæring i en sketchnote](../../../../sketchnotes/ml-history.png) +> Sketchnote af [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML for begyndere - Historien om maskinlæring](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML for begyndere - Historien om maskinlæring") + +> 🎥 Klik på billedet ovenfor for en kort video, der gennemgår denne lektion. + +I denne lektion vil vi gennemgå de vigtigste milepæle i historien om maskinlæring og kunstig intelligens. + +Historien om kunstig intelligens (AI) som et felt er tæt forbundet med historien om maskinlæring, da de algoritmer og beregningsmæssige fremskridt, der ligger til grund for ML, har bidraget til udviklingen af AI. Det er nyttigt at huske, at selvom disse felter som særskilte forskningsområder begyndte at tage form i 1950'erne, så fandt vigtige [algoritmiske, statistiske, matematiske, beregningsmæssige og tekniske opdagelser](https://wikipedia.org/wiki/Timeline_of_machine_learning) sted før og overlappede denne periode. Faktisk har mennesker tænkt over disse spørgsmål i [hundredevis af år](https://wikipedia.org/wiki/History_of_artificial_intelligence): denne artikel diskuterer de historiske intellektuelle fundamenter for ideen om en 'tænkende maskine.' + +--- +## Bemærkelsesværdige opdagelser + +- 1763, 1812 [Bayes' teorem](https://wikipedia.org/wiki/Bayes%27_theorem) og dets forgængere. Dette teorem og dets anvendelser ligger til grund for inferens og beskriver sandsynligheden for, at en begivenhed indtræffer baseret på tidligere viden. +- 1805 [Mindste kvadraters metode](https://wikipedia.org/wiki/Least_squares) af den franske matematiker Adrien-Marie Legendre. Denne metode, som du vil lære om i vores Regression-enhed, hjælper med dataanpasning. +- 1913 [Markov-kæder](https://wikipedia.org/wiki/Markov_chain), opkaldt efter den russiske matematiker Andrey Markov, bruges til at beskrive en sekvens af mulige begivenheder baseret på en tidligere tilstand. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) er en type lineær klassifikator opfundet af den amerikanske psykolog Frank Rosenblatt, som ligger til grund for fremskridt inden for dyb læring. + +--- + +- 1967 [Nærmeste nabo](https://wikipedia.org/wiki/Nearest_neighbor) er en algoritme oprindeligt designet til at kortlægge ruter. I en ML-kontekst bruges den til at opdage mønstre. +- 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) bruges til at træne [feedforward neurale netværk](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Recurrent Neural Networks](https://wikipedia.org/wiki/Recurrent_neural_network) er kunstige neurale netværk afledt af feedforward neurale netværk, der skaber tidsmæssige grafer. + +✅ Lav lidt research. Hvilke andre datoer skiller sig ud som afgørende i historien om ML og AI? + +--- +## 1950: Maskiner, der tænker + +Alan Turing, en virkelig bemærkelsesværdig person, der blev kåret [af offentligheden i 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) som det 20. århundredes største videnskabsmand, krediteres for at have hjulpet med at lægge fundamentet for konceptet om en 'maskine, der kan tænke.' Han kæmpede med skeptikere og sit eget behov for empirisk evidens for dette koncept, blandt andet ved at skabe [Turing-testen](https://www.bbc.com/news/technology-18475646), som du vil udforske i vores NLP-lektioner. + +--- +## 1956: Dartmouth Summer Research Project + +"Dartmouth Summer Research Project on artificial intelligence var en skelsættende begivenhed for kunstig intelligens som et felt," og det var her, begrebet 'kunstig intelligens' blev opfundet ([kilde](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Hver eneste aspekt af læring eller enhver anden egenskab ved intelligens kan i princippet beskrives så præcist, at en maskine kan laves til at simulere det. + +--- + +Den ledende forsker, matematikprofessor John McCarthy, håbede "at kunne gå videre på baggrund af antagelsen om, at hver eneste aspekt af læring eller enhver anden egenskab ved intelligens kan i princippet beskrives så præcist, at en maskine kan laves til at simulere det." Deltagerne inkluderede en anden fremtrædende figur inden for feltet, Marvin Minsky. + +Workshoppen krediteres for at have initieret og opmuntret flere diskussioner, herunder "fremkomsten af symbolske metoder, systemer fokuseret på begrænsede domæner (tidlige ekspertsystemer) og deduktive systemer versus induktive systemer." ([kilde](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "De gyldne år" + +Fra 1950'erne til midten af 70'erne var der stor optimisme omkring håbet om, at AI kunne løse mange problemer. I 1967 udtalte Marvin Minsky selvsikkert, "Inden for en generation ... vil problemet med at skabe 'kunstig intelligens' i væsentlig grad være løst." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Forskning i naturlig sprogbehandling blomstrede, søgning blev raffineret og gjort mere kraftfuld, og konceptet 'mikroverdener' blev skabt, hvor simple opgaver blev udført ved hjælp af almindelige sprogkommandoer. + +--- + +Forskning blev godt finansieret af statslige organer, fremskridt blev gjort inden for beregning og algoritmer, og prototyper af intelligente maskiner blev bygget. Nogle af disse maskiner inkluderer: + +* [Shakey-robotten](https://wikipedia.org/wiki/Shakey_the_robot), som kunne manøvrere og beslutte, hvordan opgaver skulle udføres 'intelligent'. + + ![Shakey, en intelligent robot](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey i 1972 + +--- + +* Eliza, en tidlig 'chatterbot', kunne samtale med mennesker og fungere som en primitiv 'terapeut'. Du vil lære mere om Eliza i NLP-lektionerne. + + ![Eliza, en bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > En version af Eliza, en chatbot + +--- + +* "Blocks world" var et eksempel på en mikroverden, hvor blokke kunne stables og sorteres, og eksperimenter med at lære maskiner at træffe beslutninger kunne testes. Fremskridt bygget med biblioteker som [SHRDLU](https://wikipedia.org/wiki/SHRDLU) hjalp med at fremme sprogbehandling. + + [![blocks world med SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world med SHRDLU") + + > 🎥 Klik på billedet ovenfor for en video: Blocks world med SHRDLU + +--- +## 1974 - 1980: "AI-vinter" + +I midten af 1970'erne blev det klart, at kompleksiteten ved at skabe 'intelligente maskiner' var blevet undervurderet, og at løfterne, givet den tilgængelige beregningskraft, var blevet overdrevet. Finansiering tørrede ud, og tilliden til feltet aftog. Nogle problemer, der påvirkede tilliden, inkluderede: +--- +- **Begrænsninger**. Beregningskraften var for begrænset. +- **Kombinatorisk eksplosion**. Antallet af parametre, der skulle trænes, voksede eksponentielt, efterhånden som der blev stillet flere krav til computere, uden en parallel udvikling af beregningskraft og kapacitet. +- **Mangel på data**. Der var en mangel på data, der hæmmede processen med at teste, udvikle og forfine algoritmer. +- **Stiller vi de rigtige spørgsmål?**. De spørgsmål, der blev stillet, begyndte at blive stillet spørgsmålstegn ved. Forskere begyndte at møde kritik af deres tilgange: + - Turing-testen blev sat i tvivl, blandt andet gennem 'den kinesiske rum-teori', som hævdede, at "programmering af en digital computer kan få den til at fremstå som om den forstår sprog, men kan ikke producere reel forståelse." ([kilde](https://plato.stanford.edu/entries/chinese-room/)) + - Etikken ved at introducere kunstige intelligenser som "terapeuten" ELIZA i samfundet blev udfordret. + +--- + +Samtidig begyndte forskellige AI-skoler at tage form. En dikotomi blev etableret mellem ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) praksisser. _Scruffy_-laboratorier finjusterede programmer i timevis, indtil de opnåede de ønskede resultater. _Neat_-laboratorier "fokuserede på logik og formel problemløsning". ELIZA og SHRDLU var velkendte _scruffy_-systemer. I 1980'erne, da der opstod krav om at gøre ML-systemer reproducerbare, tog _neat_-tilgangen gradvist føringen, da dens resultater er mere forklarlige. + +--- +## 1980'ernes ekspertsystemer + +Efterhånden som feltet voksede, blev dets fordele for erhvervslivet tydeligere, og i 1980'erne skete der en udbredelse af 'ekspertsystemer'. "Ekspertsystemer var blandt de første virkelig succesfulde former for kunstig intelligens (AI)-software." ([kilde](https://wikipedia.org/wiki/Expert_system)). + +Denne type system er faktisk _hybrid_, bestående delvist af en regelmotor, der definerer forretningskrav, og en inferensmotor, der udnytter regelsystemet til at udlede nye fakta. + +Denne æra så også stigende opmærksomhed på neurale netværk. + +--- +## 1987 - 1993: AI 'Chill' + +Udbredelsen af specialiseret ekspertsystem-hardware havde den uheldige effekt at blive for specialiseret. Fremkomsten af personlige computere konkurrerede også med disse store, specialiserede, centraliserede systemer. Demokratiseringen af computing var begyndt, og det banede til sidst vejen for den moderne eksplosion af big data. + +--- +## 1993 - 2011 + +Denne epoke markerede en ny æra for ML og AI, hvor nogle af de problemer, der tidligere var forårsaget af mangel på data og beregningskraft, kunne løses. Mængden af data begyndte hurtigt at stige og blive mere bredt tilgængelig, på godt og ondt, især med fremkomsten af smartphones omkring 2007. Beregningskraften udvidede sig eksponentielt, og algoritmer udviklede sig sideløbende. Feltet begyndte at opnå modenhed, da de tidligere frie og eksperimenterende dage begyndte at krystallisere sig til en egentlig disciplin. + +--- +## Nu + +I dag berører maskinlæring og AI næsten alle dele af vores liv. Denne æra kræver en omhyggelig forståelse af risiciene og de potentielle effekter af disse algoritmer på menneskeliv. Som Microsofts Brad Smith har udtalt: "Informationsteknologi rejser spørgsmål, der går til kernen af fundamentale menneskerettighedsbeskyttelser som privatliv og ytringsfrihed. Disse spørgsmål øger ansvaret for teknologivirksomheder, der skaber disse produkter. Efter vores mening kræver de også en gennemtænkt regeringsregulering og udvikling af normer omkring acceptable anvendelser" ([kilde](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +Det er endnu uvist, hvad fremtiden bringer, men det er vigtigt at forstå disse computersystemer og den software og de algoritmer, de kører. Vi håber, at dette pensum vil hjælpe dig med at opnå en bedre forståelse, så du selv kan tage stilling. + +[![Historien om dyb læring](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Historien om dyb læring") +> 🎥 Klik på billedet ovenfor for en video: Yann LeCun diskuterer historien om dyb læring i denne forelæsning + +--- +## 🚀Udfordring + +Dyk ned i et af disse historiske øjeblikke og lær mere om personerne bag dem. Der er fascinerende karakterer, og ingen videnskabelig opdagelse blev nogensinde skabt i et kulturelt vakuum. Hvad opdager du? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Gennemgang & Selvstudie + +Her er ting, du kan se og lytte til: + +[Denne podcast, hvor Amy Boyd diskuterer AI's udvikling](http://runasradio.com/Shows/Show/739) + +[![Historien om AI af Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Historien om AI af Amy Boyd") + +--- + +## Opgave + +[Opret en tidslinje](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/2-history-of-ML/assignment.md b/translations/da/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 000000000..a3d8cab6c --- /dev/null +++ b/translations/da/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Opret en tidslinje + +## Instruktioner + +Ved hjælp af [dette repo](https://github.com/Digital-Humanities-Toolkit/timeline-builder), opret en tidslinje over en eller anden aspekt af historien om algoritmer, matematik, statistik, AI eller ML, eller en kombination af disse. Du kan fokusere på én person, én idé eller en lang tidsperiode med tanker. Sørg for at tilføje multimedieelementer. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ------------------------------------------------ | --------------------------------------- | --------------------------------------------------------------- | +| | En implementeret tidslinje præsenteres som en GitHub-side | Koden er ufuldstændig og ikke implementeret | Tidslinjen er ufuldstændig, ikke godt undersøgt og ikke implementeret | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/3-fairness/README.md b/translations/da/1-Introduction/3-fairness/README.md new file mode 100644 index 000000000..384c13b55 --- /dev/null +++ b/translations/da/1-Introduction/3-fairness/README.md @@ -0,0 +1,170 @@ + +# Bygge maskinlæringsløsninger med ansvarlig AI + +![Oversigt over ansvarlig AI i maskinlæring i en sketchnote](../../../../sketchnotes/ml-fairness.png) +> Sketchnote af [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Introduktion + +I dette pensum vil du begynde at opdage, hvordan maskinlæring kan og allerede påvirker vores daglige liv. Selv nu er systemer og modeller involveret i daglige beslutningsopgaver, såsom sundhedsdiagnoser, låneansøgninger eller afsløring af svindel. Derfor er det vigtigt, at disse modeller fungerer godt for at levere resultater, der er troværdige. Ligesom enhver softwareapplikation vil AI-systemer kunne fejle eller have uønskede resultater. Derfor er det afgørende at kunne forstå og forklare adfærden af en AI-model. + +Forestil dig, hvad der kan ske, når de data, du bruger til at bygge disse modeller, mangler visse demografiske grupper, såsom race, køn, politisk holdning, religion, eller uforholdsmæssigt repræsenterer sådanne grupper. Hvad med når modellens output tolkes til at favorisere en bestemt demografisk gruppe? Hvad er konsekvensen for applikationen? Derudover, hvad sker der, når modellen har et negativt resultat og skader mennesker? Hvem er ansvarlig for AI-systemets adfærd? Dette er nogle af de spørgsmål, vi vil udforske i dette pensum. + +I denne lektion vil du: + +- Øge din bevidsthed om vigtigheden af retfærdighed i maskinlæring og skader relateret til retfærdighed. +- Blive bekendt med praksis for at udforske outliers og usædvanlige scenarier for at sikre pålidelighed og sikkerhed. +- Få forståelse for behovet for at styrke alle ved at designe inkluderende systemer. +- Udforske, hvor vigtigt det er at beskytte privatliv og sikkerhed for data og mennesker. +- Se vigtigheden af en "glasboks"-tilgang til at forklare adfærden af AI-modeller. +- Være opmærksom på, hvordan ansvarlighed er afgørende for at opbygge tillid til AI-systemer. + +## Forudsætning + +Som forudsætning bedes du tage "Principper for ansvarlig AI"-læringsstien og se videoen nedenfor om emnet: + +Lær mere om ansvarlig AI ved at følge denne [læringssti](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Microsofts tilgang til ansvarlig AI](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsofts tilgang til ansvarlig AI") + +> 🎥 Klik på billedet ovenfor for en video: Microsofts tilgang til ansvarlig AI + +## Retfærdighed + +AI-systemer bør behandle alle retfærdigt og undgå at påvirke lignende grupper af mennesker på forskellige måder. For eksempel, når AI-systemer giver vejledning om medicinsk behandling, låneansøgninger eller ansættelse, bør de give de samme anbefalinger til alle med lignende symptomer, økonomiske forhold eller faglige kvalifikationer. Hver af os som mennesker bærer med os arvede fordomme, der påvirker vores beslutninger og handlinger. Disse fordomme kan være tydelige i de data, vi bruger til at træne AI-systemer. Sådan manipulation kan nogle gange ske utilsigtet. Det er ofte svært bevidst at vide, hvornår man introducerer bias i data. + +**"Uretfærdighed"** omfatter negative konsekvenser eller "skader" for en gruppe mennesker, såsom dem defineret ud fra race, køn, alder eller handicapstatus. De vigtigste skader relateret til retfærdighed kan klassificeres som: + +- **Allokering**, hvis et køn eller en etnicitet for eksempel favoriseres frem for en anden. +- **Kvalitet af service**. Hvis du træner data til et specifikt scenarie, men virkeligheden er meget mere kompleks, fører det til en dårligt fungerende service. For eksempel en håndsæbedispenser, der ikke kunne registrere personer med mørk hud. [Reference](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Nedgørelse**. At kritisere og mærke noget eller nogen uretfærdigt. For eksempel mislabeled en billedmærkningsteknologi berømt billeder af mørkhudede mennesker som gorillaer. +- **Over- eller underrepræsentation**. Ideen er, at en bestemt gruppe ikke ses i en bestemt profession, og enhver service eller funktion, der fortsat fremmer dette, bidrager til skade. +- **Stereotyper**. At associere en given gruppe med forudbestemte attributter. For eksempel kan et sprogoversættelsessystem mellem engelsk og tyrkisk have unøjagtigheder på grund af ord med stereotype associationer til køn. + +![oversættelse til tyrkisk](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> oversættelse til tyrkisk + +![oversættelse tilbage til engelsk](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> oversættelse tilbage til engelsk + +Når vi designer og tester AI-systemer, skal vi sikre, at AI er retfærdig og ikke programmeret til at træffe biased eller diskriminerende beslutninger, som mennesker også er forbudt mod at træffe. At garantere retfærdighed i AI og maskinlæring forbliver en kompleks socioteknisk udfordring. + +### Pålidelighed og sikkerhed + +For at opbygge tillid skal AI-systemer være pålidelige, sikre og konsistente under normale og uventede forhold. Det er vigtigt at vide, hvordan AI-systemer vil opføre sig i en række forskellige situationer, især når de er outliers. Når man bygger AI-løsninger, skal der være betydelig fokus på, hvordan man håndterer en bred vifte af omstændigheder, som AI-løsningerne ville støde på. For eksempel skal en selvkørende bil prioritere menneskers sikkerhed højt. Som et resultat skal AI, der driver bilen, tage højde for alle de mulige scenarier, bilen kunne støde på, såsom nat, tordenvejr eller snestorme, børn der løber over gaden, kæledyr, vejarbejder osv. Hvor godt et AI-system kan håndtere en bred vifte af forhold pålideligt og sikkert afspejler niveauet af forudseenhed, som dataforskeren eller AI-udvikleren har overvejet under design eller test af systemet. + +> [🎥 Klik her for en video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Inklusion + +AI-systemer bør designes til at engagere og styrke alle. Når dataforskere og AI-udviklere designer og implementerer AI-systemer, identificerer og adresserer de potentielle barrierer i systemet, der utilsigtet kunne ekskludere mennesker. For eksempel er der 1 milliard mennesker med handicap verden over. Med fremskridt inden for AI kan de få adgang til en bred vifte af information og muligheder lettere i deres daglige liv. Ved at adressere barriererne skabes der muligheder for at innovere og udvikle AI-produkter med bedre oplevelser, der gavner alle. + +> [🎥 Klik her for en video: inklusion i AI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Sikkerhed og privatliv + +AI-systemer bør være sikre og respektere folks privatliv. Folk har mindre tillid til systemer, der sætter deres privatliv, information eller liv i fare. Når vi træner maskinlæringsmodeller, stoler vi på data for at producere de bedste resultater. I den proces skal dataenes oprindelse og integritet overvejes. For eksempel, blev dataene indsendt af brugere eller offentligt tilgængelige? Dernæst, mens vi arbejder med dataene, er det afgørende at udvikle AI-systemer, der kan beskytte fortrolige oplysninger og modstå angreb. Efterhånden som AI bliver mere udbredt, bliver beskyttelse af privatliv og sikring af vigtige personlige og forretningsmæssige oplysninger mere kritisk og komplekst. Privatlivs- og datasikkerhedsproblemer kræver særlig opmærksomhed for AI, fordi adgang til data er afgørende for, at AI-systemer kan lave præcise og informerede forudsigelser og beslutninger om mennesker. + +> [🎥 Klik her for en video: sikkerhed i AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Som industri har vi gjort betydelige fremskridt inden for privatliv og sikkerhed, drevet væsentligt af reguleringer som GDPR (General Data Protection Regulation). +- Alligevel må vi med AI-systemer erkende spændingen mellem behovet for mere personlige data for at gøre systemer mere personlige og effektive – og privatliv. +- Ligesom med internettets fødsel ser vi også en stor stigning i antallet af sikkerhedsproblemer relateret til AI. +- Samtidig har vi set AI blive brugt til at forbedre sikkerheden. For eksempel drives de fleste moderne antivirus-scannere i dag af AI-heuristikker. +- Vi skal sikre, at vores dataforskningsprocesser harmonisk integreres med de nyeste privatlivs- og sikkerhedspraksisser. + +### Transparens + +AI-systemer bør være forståelige. En afgørende del af transparens er at forklare adfærden af AI-systemer og deres komponenter. At forbedre forståelsen af AI-systemer kræver, at interessenter forstår, hvordan og hvorfor de fungerer, så de kan identificere potentielle præstationsproblemer, sikkerheds- og privatlivsbekymringer, bias, ekskluderende praksis eller utilsigtede resultater. Vi mener også, at de, der bruger AI-systemer, bør være ærlige og åbne om, hvornår, hvorfor og hvordan de vælger at implementere dem. Samt begrænsningerne af de systemer, de bruger. For eksempel, hvis en bank bruger et AI-system til at understøtte sine forbrugerlånsbeslutninger, er det vigtigt at undersøge resultaterne og forstå, hvilke data der påvirker systemets anbefalinger. Regeringer begynder at regulere AI på tværs af industrier, så dataforskere og organisationer skal forklare, om et AI-system opfylder lovgivningsmæssige krav, især når der er et uønsket resultat. + +> [🎥 Klik her for en video: transparens i AI](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Fordi AI-systemer er så komplekse, er det svært at forstå, hvordan de fungerer og tolke resultaterne. +- Denne manglende forståelse påvirker, hvordan disse systemer administreres, operationaliseres og dokumenteres. +- Denne manglende forståelse påvirker endnu vigtigere de beslutninger, der træffes ved hjælp af de resultater, disse systemer producerer. + +### Ansvarlighed + +De mennesker, der designer og implementerer AI-systemer, skal være ansvarlige for, hvordan deres systemer fungerer. Behovet for ansvarlighed er særligt vigtigt med følsomme teknologier som ansigtsgenkendelse. For nylig har der været en stigende efterspørgsel efter ansigtsgenkendelsesteknologi, især fra retshåndhævende organisationer, der ser potentialet i teknologien til anvendelser som at finde forsvundne børn. Men disse teknologier kunne potentielt bruges af en regering til at sætte borgernes grundlæggende friheder i fare ved for eksempel at muliggøre kontinuerlig overvågning af specifikke individer. Derfor skal dataforskere og organisationer være ansvarlige for, hvordan deres AI-system påvirker individer eller samfundet. + +[![Ledende AI-forsker advarer om masseovervågning gennem ansigtsgenkendelse](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsofts tilgang til ansvarlig AI") + +> 🎥 Klik på billedet ovenfor for en video: Advarsler om masseovervågning gennem ansigtsgenkendelse + +I sidste ende er et af de største spørgsmål for vores generation, som den første generation, der bringer AI til samfundet, hvordan vi sikrer, at computere forbliver ansvarlige over for mennesker, og hvordan vi sikrer, at de mennesker, der designer computere, forbliver ansvarlige over for alle andre. + +## Vurdering af påvirkning + +Før du træner en maskinlæringsmodel, er det vigtigt at gennemføre en vurdering af påvirkning for at forstå formålet med AI-systemet; hvad den tilsigtede anvendelse er; hvor det vil blive implementeret; og hvem der vil interagere med systemet. Disse er nyttige for anmelder(e) eller testere, der evaluerer systemet, for at vide, hvilke faktorer der skal tages i betragtning, når man identificerer potentielle risici og forventede konsekvenser. + +Følgende er fokusområder, når man gennemfører en vurdering af påvirkning: + +* **Negative konsekvenser for individer**. At være opmærksom på eventuelle begrænsninger eller krav, ikke-understøttet brug eller kendte begrænsninger, der hindrer systemets ydeevne, er afgørende for at sikre, at systemet ikke bruges på en måde, der kan skade individer. +* **Data krav**. At få en forståelse af, hvordan og hvor systemet vil bruge data, gør det muligt for anmeldere at udforske eventuelle datakrav, du skal være opmærksom på (f.eks. GDPR eller HIPPA dataregler). Derudover skal du undersøge, om kilden eller mængden af data er tilstrækkelig til træning. +* **Opsummering af påvirkning**. Saml en liste over potentielle skader, der kunne opstå ved brug af systemet. Gennem hele ML-livscyklussen skal du gennemgå, om de identificerede problemer er afhjulpet eller adresseret. +* **Anvendelige mål** for hver af de seks kerneprincipper. Vurder, om målene fra hvert af principperne er opfyldt, og om der er nogen mangler. + +## Fejlfinding med ansvarlig AI + +Ligesom fejlfinding af en softwareapplikation er fejlfinding af et AI-system en nødvendig proces for at identificere og løse problemer i systemet. Der er mange faktorer, der kan påvirke en models ydeevne eller ansvarlighed. De fleste traditionelle modelpræstationsmålinger er kvantitative aggregater af en models ydeevne, hvilket ikke er tilstrækkeligt til at analysere, hvordan en model overtræder principperne for ansvarlig AI. Desuden er en maskinlæringsmodel en "black box", der gør det svært at forstå, hvad der driver dens resultater eller give forklaringer, når den begår fejl. Senere i dette kursus vil vi lære, hvordan man bruger Responsible AI-dashboardet til at hjælpe med fejlfinding af AI-systemer. Dashboardet giver et holistisk værktøj til dataforskere og AI-udviklere til at udføre: + +* **Fejlanalyse**. For at identificere fejlfordelingen i modellen, der kan påvirke systemets retfærdighed eller pålidelighed. +* **Modeloversigt**. For at opdage, hvor der er forskelle i modellens ydeevne på tværs af datakohorter. +* **Dataanalyse**. For at forstå datadistributionen og identificere eventuel bias i dataene, der kunne føre til problemer med retfærdighed, inklusion og pålidelighed. +* **Modelfortolkning**. For at forstå, hvad der påvirker eller influerer modellens forudsigelser. Dette hjælper med at forklare modellens adfærd, hvilket er vigtigt for transparens og ansvarlighed. + +## 🚀 Udfordring + +For at forhindre skader i at blive introduceret i første omgang bør vi: + +- have en mangfoldighed af baggrunde og perspektiver blandt de mennesker, der arbejder på systemer +- investere i datasæt, der afspejler mangfoldigheden i vores samfund +- udvikle bedre metoder gennem hele maskinlæringslivscyklussen til at opdage og rette ansvarlig AI, når det opstår + +Tænk på virkelige scenarier, hvor en models utroværdighed er tydelig i modelbygning og brug. Hvad bør vi ellers overveje? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +I denne lektion har du lært nogle grundlæggende begreber om retfærdighed og uretfærdighed i maskinlæring. +Se denne workshop for at dykke dybere ned i emnerne: + +- På jagt efter ansvarlig AI: Fra principper til praksis af Besmira Nushi, Mehrnoosh Sameki og Amit Sharma + +[![Responsible AI Toolbox: En open-source ramme for at bygge ansvarlig AI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: En open-source ramme for at bygge ansvarlig AI") + +> 🎥 Klik på billedet ovenfor for en video: RAI Toolbox: En open-source ramme for at bygge ansvarlig AI af Besmira Nushi, Mehrnoosh Sameki og Amit Sharma + +Læs også: + +- Microsofts RAI ressourcecenter: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsofts FATE forskningsgruppe: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Responsible AI Toolbox GitHub repository](https://github.com/microsoft/responsible-ai-toolbox) + +Læs om Azure Machine Learnings værktøjer til at sikre retfærdighed: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Opgave + +[Udforsk RAI Toolbox](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/3-fairness/assignment.md b/translations/da/1-Introduction/3-fairness/assignment.md new file mode 100644 index 000000000..0b8c19398 --- /dev/null +++ b/translations/da/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# Udforsk Responsible AI Toolbox + +## Instruktioner + +I denne lektion lærte du om Responsible AI Toolbox, et "open-source, community-drevet projekt, der hjælper dataforskere med at analysere og forbedre AI-systemer." Til denne opgave skal du udforske en af RAI Toolbox's [notebooks](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) og rapportere dine fund i en opgave eller præsentation. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------- | ------------- | ----------------- | +| | En opgave eller PowerPoint-præsentation fremlægges, der diskuterer Fairlearns systemer, den notebook, der blev kørt, og de konklusioner, der blev draget fra at køre den | En opgave fremlægges uden konklusioner | Ingen opgave fremlægges | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/4-techniques-of-ML/README.md b/translations/da/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 000000000..11687b8be --- /dev/null +++ b/translations/da/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# Teknikker inden for maskinlæring + +Processen med at opbygge, bruge og vedligeholde maskinlæringsmodeller og de data, de anvender, adskiller sig markant fra mange andre udviklingsarbejdsgange. I denne lektion vil vi afmystificere processen og skitsere de vigtigste teknikker, du skal kende. Du vil: + +- Forstå de processer, der ligger til grund for maskinlæring på et overordnet niveau. +- Udforske grundlæggende begreber som 'modeller', 'forudsigelser' og 'træningsdata'. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +[![ML for begyndere - Teknikker inden for maskinlæring](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for begyndere - Teknikker inden for maskinlæring") + +> 🎥 Klik på billedet ovenfor for en kort video, der gennemgår denne lektion. + +## Introduktion + +På et overordnet niveau består håndværket med at skabe maskinlæringsprocesser af en række trin: + +1. **Definér spørgsmålet**. De fleste ML-processer starter med at stille et spørgsmål, der ikke kan besvares med et simpelt betinget program eller en regelbaseret motor. Disse spørgsmål drejer sig ofte om forudsigelser baseret på en samling data. +2. **Indsaml og forbered data**. For at kunne besvare dit spørgsmål har du brug for data. Kvaliteten og, nogle gange, mængden af dine data vil afgøre, hvor godt du kan besvare dit oprindelige spørgsmål. Visualisering af data er en vigtig del af denne fase. Denne fase inkluderer også at opdele dataene i en trænings- og testgruppe for at opbygge en model. +3. **Vælg en træningsmetode**. Afhængigt af dit spørgsmål og karakteren af dine data skal du vælge, hvordan du vil træne en model, så den bedst afspejler dine data og giver præcise forudsigelser. Dette er den del af din ML-proces, der kræver specifik ekspertise og ofte en betydelig mængde eksperimentering. +4. **Træn modellen**. Ved hjælp af dine træningsdata vil du bruge forskellige algoritmer til at træne en model til at genkende mønstre i dataene. Modellen kan anvende interne vægte, der kan justeres for at prioritere visse dele af dataene frem for andre for at opbygge en bedre model. +5. **Evaluer modellen**. Du bruger data, som modellen aldrig har set før (dine testdata) fra din indsamlede samling for at se, hvordan modellen klarer sig. +6. **Parameterjustering**. Baseret på modellens ydeevne kan du gentage processen med forskellige parametre eller variabler, der styrer adfærden af de algoritmer, der bruges til at træne modellen. +7. **Forudsig**. Brug nye input til at teste modellens nøjagtighed. + +## Hvilket spørgsmål skal du stille? + +Computere er særligt dygtige til at opdage skjulte mønstre i data. Denne evne er meget nyttig for forskere, der har spørgsmål om et givet område, som ikke let kan besvares ved at oprette en betingelsesbaseret regelmotor. Givet en aktuarmæssig opgave kan en dataforsker for eksempel konstruere håndlavede regler omkring dødeligheden for rygere vs. ikke-rygere. + +Når mange andre variabler bringes ind i ligningen, kan en ML-model imidlertid vise sig at være mere effektiv til at forudsige fremtidige dødelighedsrater baseret på tidligere sundhedshistorik. Et mere muntert eksempel kunne være at lave vejrudsigter for april måned på et givet sted baseret på data, der inkluderer breddegrad, længdegrad, klimaforandringer, nærhed til havet, jetstrømmønstre og mere. + +✅ Denne [præsentation](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) om vejrmodeller giver et historisk perspektiv på brugen af ML i vejranalyse. + +## Opgaver før opbygning + +Før du begynder at opbygge din model, er der flere opgaver, du skal udføre. For at teste dit spørgsmål og danne en hypotese baseret på modellens forudsigelser skal du identificere og konfigurere flere elementer. + +### Data + +For at kunne besvare dit spørgsmål med nogen form for sikkerhed har du brug for en god mængde data af den rette type. Der er to ting, du skal gøre på dette tidspunkt: + +- **Indsaml data**. Med tanke på den tidligere lektion om retfærdighed i dataanalyse skal du indsamle dine data med omhu. Vær opmærksom på kilderne til disse data, eventuelle iboende skævheder, de måtte have, og dokumentér deres oprindelse. +- **Forbered data**. Der er flere trin i dataforberedelsesprocessen. Du kan være nødt til at samle data og normalisere dem, hvis de kommer fra forskellige kilder. Du kan forbedre dataenes kvalitet og mængde gennem forskellige metoder, såsom at konvertere strenge til tal (som vi gør i [Clustering](../../5-Clustering/1-Visualize/README.md)). Du kan også generere nye data baseret på de oprindelige (som vi gør i [Classification](../../4-Classification/1-Introduction/README.md)). Du kan rense og redigere dataene (som vi gør før [Web App](../../3-Web-App/README.md)-lektionen). Endelig kan du også være nødt til at tilfældiggøre og blande dem, afhængigt af dine træningsteknikker. + +✅ Efter at have indsamlet og behandlet dine data, tag et øjeblik til at se, om deres form vil tillade dig at adressere dit tilsigtede spørgsmål. Det kan være, at dataene ikke vil fungere godt i din givne opgave, som vi opdager i vores [Clustering](../../5-Clustering/1-Visualize/README.md)-lektioner! + +### Features og mål + +En [feature](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) er en målbar egenskab ved dine data. I mange datasæt udtrykkes det som en kolonneoverskrift som 'dato', 'størrelse' eller 'farve'. Din feature-variabel, normalt repræsenteret som `X` i kode, repræsenterer inputvariablen, der vil blive brugt til at træne modellen. + +Et mål er det, du forsøger at forudsige. Mål, normalt repræsenteret som `y` i kode, repræsenterer svaret på det spørgsmål, du forsøger at stille til dine data: i december, hvilken **farve** græskar vil være billigst? i San Francisco, hvilke kvarterer vil have de bedste ejendoms**priser**? Nogle gange omtales mål også som label-attribut. + +### Valg af din feature-variabel + +🎓 **Feature Selection og Feature Extraction** Hvordan ved du, hvilken variabel du skal vælge, når du opbygger en model? Du vil sandsynligvis gennemgå en proces med feature selection eller feature extraction for at vælge de rigtige variabler til den mest præstationsdygtige model. De er dog ikke det samme: "Feature extraction skaber nye features fra funktioner af de oprindelige features, mens feature selection returnerer et undersæt af features." ([kilde](https://wikipedia.org/wiki/Feature_selection)) + +### Visualiser dine data + +En vigtig del af dataforskerens værktøjskasse er evnen til at visualisere data ved hjælp af flere fremragende biblioteker som Seaborn eller MatPlotLib. At repræsentere dine data visuelt kan give dig mulighed for at opdage skjulte korrelationer, som du kan udnytte. Dine visualiseringer kan også hjælpe dig med at opdage skævheder eller ubalancerede data (som vi opdager i [Classification](../../4-Classification/2-Classifiers-1/README.md)). + +### Opdel dit datasæt + +Før træning skal du opdele dit datasæt i to eller flere dele af ulige størrelse, der stadig repræsenterer dataene godt. + +- **Træning**. Denne del af datasættet bruges til at træne din model. Dette sæt udgør størstedelen af det oprindelige datasæt. +- **Test**. Et testdatasæt er en uafhængig gruppe af data, ofte hentet fra de oprindelige data, som du bruger til at bekræfte ydeevnen af den opbyggede model. +- **Validering**. Et valideringssæt er en mindre uafhængig gruppe af eksempler, som du bruger til at finjustere modellens hyperparametre eller arkitektur for at forbedre modellen. Afhængigt af størrelsen på dine data og det spørgsmål, du stiller, behøver du måske ikke at opbygge dette tredje sæt (som vi bemærker i [Time Series Forecasting](../../7-TimeSeries/1-Introduction/README.md)). + +## Opbygning af en model + +Ved hjælp af dine træningsdata er dit mål at opbygge en model, eller en statistisk repræsentation af dine data, ved hjælp af forskellige algoritmer til at **træne** den. At træne en model udsætter den for data og giver den mulighed for at lave antagelser om opfattede mønstre, den opdager, validerer og accepterer eller afviser. + +### Vælg en træningsmetode + +Afhængigt af dit spørgsmål og karakteren af dine data vil du vælge en metode til at træne dem. Ved at gennemgå [Scikit-learns dokumentation](https://scikit-learn.org/stable/user_guide.html) - som vi bruger i dette kursus - kan du udforske mange måder at træne en model på. Afhængigt af din erfaring kan du være nødt til at prøve flere forskellige metoder for at opbygge den bedste model. Du vil sandsynligvis gennemgå en proces, hvor dataforskere evaluerer modellens ydeevne ved at fodre den med usete data, kontrollere for nøjagtighed, skævheder og andre kvalitetsforringende problemer og vælge den mest passende træningsmetode til den aktuelle opgave. + +### Træn en model + +Med dine træningsdata er du klar til at 'fitte' dem for at skabe en model. Du vil bemærke, at i mange ML-biblioteker vil du finde koden 'model.fit' - det er på dette tidspunkt, du sender din feature-variabel som en række værdier (normalt 'X') og en målvariabel (normalt 'y'). + +### Evaluer modellen + +Når træningsprocessen er afsluttet (det kan tage mange iterationer, eller 'epochs', at træne en stor model), vil du kunne evaluere modellens kvalitet ved at bruge testdata til at vurdere dens ydeevne. Disse data er et undersæt af de oprindelige data, som modellen ikke tidligere har analyseret. Du kan udskrive en tabel med metrics om modellens kvalitet. + +🎓 **Model fitting** + +I maskinlæringskontekst refererer model fitting til modellens nøjagtighed i forhold til dens underliggende funktion, når den forsøger at analysere data, den ikke er bekendt med. + +🎓 **Underfitting** og **overfitting** er almindelige problemer, der forringer modellens kvalitet, da modellen enten passer ikke godt nok eller for godt. Dette får modellen til at lave forudsigelser, der enten er for tæt på eller for løst forbundet med dens træningsdata. En overfit model forudsiger træningsdata for godt, fordi den har lært dataenes detaljer og støj for godt. En underfit model er ikke nøjagtig, da den hverken kan analysere sine træningsdata eller data, den endnu ikke har 'set', korrekt. + +![overfitting model](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> Infografik af [Jen Looper](https://twitter.com/jenlooper) + +## Parameterjustering + +Når din indledende træning er afsluttet, observer modellens kvalitet og overvej at forbedre den ved at justere dens 'hyperparametre'. Læs mere om processen [i dokumentationen](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). + +## Forudsigelse + +Dette er øjeblikket, hvor du kan bruge helt nye data til at teste modellens nøjagtighed. I en 'anvendt' ML-indstilling, hvor du opbygger webressourcer til at bruge modellen i produktion, kan denne proces involvere indsamling af brugerinput (et knaptryk, for eksempel) for at indstille en variabel og sende den til modellen for inferens eller evaluering. + +I disse lektioner vil du opdage, hvordan du bruger disse trin til at forberede, opbygge, teste, evaluere og forudsige - alle dataforskerens bevægelser og mere, mens du skrider frem i din rejse mod at blive en 'full stack' ML-ingeniør. + +--- + +## 🚀Udfordring + +Tegn et flowdiagram, der afspejler trinnene for en ML-praktiker. Hvor ser du dig selv lige nu i processen? Hvor forudser du, at du vil finde vanskeligheder? Hvad virker nemt for dig? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Søg online efter interviews med dataforskere, der diskuterer deres daglige arbejde. Her er [et](https://www.youtube.com/watch?v=Z3IjgbbCEfs). + +## Opgave + +[Interview en dataforsker](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/4-techniques-of-ML/assignment.md b/translations/da/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 000000000..3a205aaa4 --- /dev/null +++ b/translations/da/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Interview en data scientist + +## Instruktioner + +I din virksomhed, i en brugergruppe eller blandt dine venner eller medstuderende, skal du tale med en person, der arbejder professionelt som data scientist. Skriv et kort essay (500 ord) om deres daglige arbejdsopgaver. Er de specialister, eller arbejder de 'full stack'? + +## Bedømmelseskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------------------------------------- | ----------------------------------------------------------------- | --------------------- | +| | Et essay med korrekt længde, med angivne kilder, præsenteret som en .doc-fil | Essayet er dårligt kildeangivet eller kortere end den krævede længde | Intet essay præsenteret | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/1-Introduction/README.md b/translations/da/1-Introduction/README.md new file mode 100644 index 000000000..4dc280431 --- /dev/null +++ b/translations/da/1-Introduction/README.md @@ -0,0 +1,37 @@ + +# Introduktion til maskinlæring + +I denne del af pensum vil du blive introduceret til de grundlæggende begreber inden for maskinlæring, hvad det er, og lære om dets historie samt de teknikker, forskere bruger til at arbejde med det. Lad os udforske denne nye verden af ML sammen! + +![globe](../../../1-Introduction/images/globe.jpg) +> Foto af Bill OxfordUnsplash + +### Lektioner + +1. [Introduktion til maskinlæring](1-intro-to-ML/README.md) +1. [Historien om maskinlæring og AI](2-history-of-ML/README.md) +1. [Retfærdighed og maskinlæring](3-fairness/README.md) +1. [Teknikker inden for maskinlæring](4-techniques-of-ML/README.md) + +### Krediteringer + +"Introduktion til maskinlæring" blev skrevet med ♥️ af et team af folk, herunder [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) og [Jen Looper](https://twitter.com/jenlooper) + +"Historien om maskinlæring" blev skrevet med ♥️ af [Jen Looper](https://twitter.com/jenlooper) og [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Retfærdighed og maskinlæring" blev skrevet med ♥️ af [Tomomi Imura](https://twitter.com/girliemac) + +"Teknikker inden for maskinlæring" blev skrevet med ♥️ af [Jen Looper](https://twitter.com/jenlooper) og [Chris Noring](https://twitter.com/softchris) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/1-Tools/README.md b/translations/da/2-Regression/1-Tools/README.md new file mode 100644 index 000000000..a37c09270 --- /dev/null +++ b/translations/da/2-Regression/1-Tools/README.md @@ -0,0 +1,238 @@ + +# Kom godt i gang med Python og Scikit-learn til regressionsmodeller + +![Oversigt over regressioner i en sketchnote](../../../../sketchnotes/ml-regression.png) + +> Sketchnote af [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Denne lektion er også tilgængelig i R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Introduktion + +I disse fire lektioner vil du lære, hvordan man bygger regressionsmodeller. Vi vil snart diskutere, hvad de bruges til. Men før du gør noget, skal du sørge for, at du har de rigtige værktøjer klar til at starte processen! + +I denne lektion vil du lære at: + +- Konfigurere din computer til lokale machine learning-opgaver. +- Arbejde med Jupyter-notebooks. +- Bruge Scikit-learn, herunder installation. +- Udforske lineær regression med en praktisk øvelse. + +## Installationer og konfigurationer + +[![ML for begyndere - Konfigurer dine værktøjer til at bygge Machine Learning-modeller](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML for begyndere - Konfigurer dine værktøjer til at bygge Machine Learning-modeller") + +> 🎥 Klik på billedet ovenfor for en kort video om konfiguration af din computer til ML. + +1. **Installer Python**. Sørg for, at [Python](https://www.python.org/downloads/) er installeret på din computer. Du vil bruge Python til mange data science- og machine learning-opgaver. De fleste computersystemer har allerede en Python-installation. Der findes også nyttige [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), som kan gøre opsætningen lettere for nogle brugere. + + Nogle anvendelser af Python kræver én version af softwaren, mens andre kræver en anden version. Derfor er det nyttigt at arbejde i et [virtuelt miljø](https://docs.python.org/3/library/venv.html). + +2. **Installer Visual Studio Code**. Sørg for, at du har Visual Studio Code installeret på din computer. Følg disse instruktioner for at [installere Visual Studio Code](https://code.visualstudio.com/) til den grundlæggende installation. Du vil bruge Python i Visual Studio Code i dette kursus, så det kan være en god idé at opdatere din viden om, hvordan man [konfigurerer Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) til Python-udvikling. + + > Bliv fortrolig med Python ved at gennemgå denne samling af [Learn-moduler](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![Opsæt Python med Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Opsæt Python med Visual Studio Code") + > + > 🎥 Klik på billedet ovenfor for en video: Brug Python i VS Code. + +3. **Installer Scikit-learn** ved at følge [disse instruktioner](https://scikit-learn.org/stable/install.html). Da du skal sikre dig, at du bruger Python 3, anbefales det, at du bruger et virtuelt miljø. Bemærk, at hvis du installerer dette bibliotek på en M1 Mac, er der særlige instruktioner på den side, der er linket til ovenfor. + +4. **Installer Jupyter Notebook**. Du skal [installere Jupyter-pakken](https://pypi.org/project/jupyter/). + +## Dit ML-udviklingsmiljø + +Du vil bruge **notebooks** til at udvikle din Python-kode og oprette machine learning-modeller. Denne type fil er et almindeligt værktøj for dataforskere, og de kan identificeres ved deres suffix eller filtype `.ipynb`. + +Notebooks er et interaktivt miljø, der giver udvikleren mulighed for både at kode og tilføje noter samt skrive dokumentation omkring koden, hvilket er meget nyttigt for eksperimentelle eller forskningsorienterede projekter. + +[![ML for begyndere - Opsæt Jupyter Notebooks for at begynde at bygge regressionsmodeller](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML for begyndere - Opsæt Jupyter Notebooks for at begynde at bygge regressionsmodeller") + +> 🎥 Klik på billedet ovenfor for en kort video om denne øvelse. + +### Øvelse - arbejde med en notebook + +I denne mappe finder du filen _notebook.ipynb_. + +1. Åbn _notebook.ipynb_ i Visual Studio Code. + + En Jupyter-server vil starte med Python 3+. Du vil finde områder i notebooken, der kan `køres`, stykker af kode. Du kan køre en kodeblok ved at vælge ikonet, der ligner en afspilningsknap. + +2. Vælg `md`-ikonet og tilføj lidt markdown med følgende tekst **# Velkommen til din notebook**. + + Tilføj derefter noget Python-kode. + +3. Skriv **print('hello notebook')** i kodeblokken. +4. Vælg pilen for at køre koden. + + Du bør se den udskrevne erklæring: + + ```output + hello notebook + ``` + +![VS Code med en notebook åben](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Du kan blande din kode med kommentarer for at selv-dokumentere notebooken. + +✅ Tænk et øjeblik over, hvor forskelligt en webudviklers arbejdsmiljø er i forhold til en dataforskers. + +## Kom godt i gang med Scikit-learn + +Nu hvor Python er sat op i dit lokale miljø, og du er fortrolig med Jupyter-notebooks, lad os blive lige så fortrolige med Scikit-learn (udtales `sci` som i `science`). Scikit-learn tilbyder en [omfattende API](https://scikit-learn.org/stable/modules/classes.html#api-ref) til at hjælpe dig med at udføre ML-opgaver. + +Ifølge deres [websted](https://scikit-learn.org/stable/getting_started.html) er "Scikit-learn et open source machine learning-bibliotek, der understøtter superviseret og usuperviseret læring. Det tilbyder også forskellige værktøjer til modeltilpasning, databehandling, modelvalg og evaluering samt mange andre funktioner." + +I dette kursus vil du bruge Scikit-learn og andre værktøjer til at bygge machine learning-modeller til at udføre det, vi kalder 'traditionelle machine learning'-opgaver. Vi har bevidst undgået neurale netværk og deep learning, da de er bedre dækket i vores kommende 'AI for Beginners'-curriculum. + +Scikit-learn gør det nemt at bygge modeller og evaluere dem til brug. Det fokuserer primært på brugen af numeriske data og indeholder flere færdiglavede datasæt til brug som læringsværktøjer. Det inkluderer også forudbyggede modeller, som studerende kan prøve. Lad os udforske processen med at indlæse forpakkede data og bruge en indbygget estimator til den første ML-model med Scikit-learn med nogle grundlæggende data. + +## Øvelse - din første Scikit-learn notebook + +> Denne tutorial er inspireret af [eksemplet på lineær regression](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) på Scikit-learns websted. + +[![ML for begyndere - Dit første projekt med lineær regression i Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML for begyndere - Dit første projekt med lineær regression i Python") + +> 🎥 Klik på billedet ovenfor for en kort video om denne øvelse. + +I filen _notebook.ipynb_ tilknyttet denne lektion skal du rydde alle celler ved at trykke på 'skraldespand'-ikonet. + +I denne sektion vil du arbejde med et lille datasæt om diabetes, som er indbygget i Scikit-learn til læringsformål. Forestil dig, at du ville teste en behandling for diabetiske patienter. Machine Learning-modeller kan hjælpe dig med at afgøre, hvilke patienter der vil reagere bedre på behandlingen baseret på kombinationer af variabler. Selv en meget grundlæggende regressionsmodel, når den visualiseres, kan vise information om variabler, der kan hjælpe dig med at organisere dine teoretiske kliniske forsøg. + +✅ Der findes mange typer regressionsmetoder, og hvilken du vælger afhænger af det svar, du leder efter. Hvis du vil forudsige den sandsynlige højde for en person i en given alder, vil du bruge lineær regression, da du søger en **numerisk værdi**. Hvis du er interesseret i at finde ud af, om en type køkken skal betragtes som vegansk eller ej, leder du efter en **kategoriinddeling**, så du vil bruge logistisk regression. Du vil lære mere om logistisk regression senere. Tænk lidt over nogle spørgsmål, du kan stille til data, og hvilken af disse metoder der ville være mest passende. + +Lad os komme i gang med denne opgave. + +### Importer biblioteker + +Til denne opgave vil vi importere nogle biblioteker: + +- **matplotlib**. Det er et nyttigt [grafværktøj](https://matplotlib.org/), og vi vil bruge det til at oprette en linjeplot. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) er et nyttigt bibliotek til håndtering af numeriske data i Python. +- **sklearn**. Dette er [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)-biblioteket. + +Importer nogle biblioteker til at hjælpe med dine opgaver. + +1. Tilføj imports ved at skrive følgende kode: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Ovenfor importerer du `matplotlib`, `numpy`, og du importerer `datasets`, `linear_model` og `model_selection` fra `sklearn`. `model_selection` bruges til at opdele data i trænings- og test-sæt. + +### Diabetes-datasættet + +Det indbyggede [diabetes-datasæt](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) inkluderer 442 prøver af data omkring diabetes med 10 feature-variabler, nogle af dem inkluderer: + +- age: alder i år +- bmi: body mass index +- bp: gennemsnitligt blodtryk +- s1 tc: T-celler (en type hvide blodceller) + +✅ Dette datasæt inkluderer begrebet 'køn' som en feature-variabel, der er vigtig for forskning omkring diabetes. Mange medicinske datasæt inkluderer denne type binær klassifikation. Tænk lidt over, hvordan kategoriseringer som denne kan udelukke visse dele af befolkningen fra behandlinger. + +Nu skal du indlæse X- og y-data. + +> 🎓 Husk, dette er superviseret læring, og vi har brug for et navngivet 'y'-mål. + +I en ny kodecelle skal du indlæse diabetes-datasættet ved at kalde `load_diabetes()`. Inputtet `return_X_y=True` signalerer, at `X` vil være en datamatrix, og `y` vil være regressionsmålet. + +1. Tilføj nogle print-kommandoer for at vise formen på datamatricen og dens første element: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Det, du får tilbage som svar, er en tuple. Det, du gør, er at tildele de to første værdier af tuplen til henholdsvis `X` og `y`. Læs mere [om tuples](https://wikipedia.org/wiki/Tuple). + + Du kan se, at disse data har 442 elementer formet i arrays med 10 elementer: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Tænk lidt over forholdet mellem dataene og regressionsmålet. Lineær regression forudsiger forholdet mellem feature X og målvariabel y. Kan du finde [målet](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) for diabetes-datasættet i dokumentationen? Hvad demonstrerer dette datasæt, givet målet? + +2. Vælg derefter en del af dette datasæt til at plotte ved at vælge den 3. kolonne i datasættet. Du kan gøre dette ved at bruge `:`-operatoren til at vælge alle rækker og derefter vælge den 3. kolonne ved hjælp af indekset (2). Du kan også omforme dataene til at være et 2D-array - som krævet for plotning - ved at bruge `reshape(n_rows, n_columns)`. Hvis en af parametrene er -1, beregnes den tilsvarende dimension automatisk. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ Print dataene når som helst for at kontrollere deres form. + +3. Nu hvor du har data klar til at blive plottet, kan du se, om en maskine kan hjælpe med at bestemme en logisk opdeling mellem tallene i dette datasæt. For at gøre dette skal du opdele både dataene (X) og målet (y) i test- og træningssæt. Scikit-learn har en ligetil måde at gøre dette på; du kan opdele dine testdata på et givet punkt. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Nu er du klar til at træne din model! Indlæs den lineære regressionsmodel og træn den med dine X- og y-træningssæt ved hjælp af `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` er en funktion, du vil se i mange ML-biblioteker som TensorFlow. + +5. Derefter skal du oprette en forudsigelse ved hjælp af testdata ved hjælp af funktionen `predict()`. Dette vil blive brugt til at tegne linjen mellem data-grupperne. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Nu er det tid til at vise dataene i et plot. Matplotlib er et meget nyttigt værktøj til denne opgave. Opret et scatterplot af alle X- og y-testdata, og brug forudsigelsen til at tegne en linje på det mest passende sted mellem modellens data-grupperinger. + + ```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() + ``` + + ![et scatterplot, der viser datapunkter omkring diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Tænk lidt over, hvad der foregår her. En lige linje løber gennem mange små datapunkter, men hvad gør den egentlig? Kan du se, hvordan du burde kunne bruge denne linje til at forudsige, hvor et nyt, ukendt datapunkt skulle passe i forhold til plottets y-akse? Prøv at sætte ord på den praktiske anvendelse af denne model. + +Tillykke, du har bygget din første lineære regressionsmodel, lavet en forudsigelse med den og vist den i et plot! + +--- +## 🚀Udfordring + +Plot en anden variabel fra dette datasæt. Tip: rediger denne linje: `X = X[:,2]`. Givet målet for dette datasæt, hvad kan du opdage om udviklingen af diabetes som en sygdom? +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +I denne tutorial arbejdede du med simpel lineær regression, frem for univariat eller multivariat regression. Læs lidt om forskellene mellem disse metoder, eller se [denne video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Læs mere om begrebet regression og tænk over, hvilke slags spørgsmål der kan besvares med denne teknik. Tag [denne tutorial](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) for at uddybe din forståelse. + +## Opgave + +[Et andet datasæt](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/1-Tools/assignment.md b/translations/da/2-Regression/1-Tools/assignment.md new file mode 100644 index 000000000..53d957d75 --- /dev/null +++ b/translations/da/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# Regression med Scikit-learn + +## Instruktioner + +Tag et kig på [Linnerud-datasættet](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) i Scikit-learn. Dette datasæt har flere [mål](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Det består af tre trænings- (data) og tre fysiologiske (mål) variabler, der er indsamlet fra tyve midaldrende mænd i en fitnessklub'. + +Med dine egne ord, beskriv hvordan man opretter en regressionsmodel, der kan plotte forholdet mellem taljemål og antallet af udførte mavebøjninger. Gør det samme for de andre datapunkter i dette datasæt. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| ----------------------------- | ----------------------------------- | ----------------------------- | -------------------------- | +| Indsend en beskrivende tekst | En velskrevet tekst er indsendt | Et par sætninger er indsendt | Ingen beskrivelse er givet | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/1-Tools/solution/Julia/README.md b/translations/da/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 000000000..9f393dc26 --- /dev/null +++ b/translations/da/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/2-Data/README.md b/translations/da/2-Regression/2-Data/README.md new file mode 100644 index 000000000..27cee6573 --- /dev/null +++ b/translations/da/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# Byg en regressionsmodel med Scikit-learn: forbered og visualiser data + +![Data visualisering infographic](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infographic af [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Denne lektion er også tilgængelig i R!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Introduktion + +Nu hvor du har de nødvendige værktøjer til at begynde at bygge maskinlæringsmodeller med Scikit-learn, er du klar til at begynde at stille spørgsmål til dine data. Når du arbejder med data og anvender ML-løsninger, er det meget vigtigt at forstå, hvordan man stiller de rigtige spørgsmål for at udnytte potentialet i dit datasæt korrekt. + +I denne lektion vil du lære: + +- Hvordan du forbereder dine data til modelbygning. +- Hvordan du bruger Matplotlib til datavisualisering. + +## Stille de rigtige spørgsmål til dine data + +Det spørgsmål, du ønsker besvaret, vil afgøre, hvilken type ML-algoritmer du skal bruge. Og kvaliteten af det svar, du får, vil i høj grad afhænge af kvaliteten af dine data. + +Tag et kig på [dataene](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), der er leveret til denne lektion. Du kan åbne denne .csv-fil i VS Code. En hurtig gennemgang viser straks, at der er tomme felter og en blanding af tekst og numeriske data. Der er også en mærkelig kolonne kaldet 'Package', hvor dataene er en blanding af 'sacks', 'bins' og andre værdier. Dataene er faktisk lidt rodede. + +[![ML for begyndere - Hvordan analyserer og renser man et datasæt](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML for begyndere - Hvordan analyserer og renser man et datasæt") + +> 🎥 Klik på billedet ovenfor for en kort video, der gennemgår forberedelsen af dataene til denne lektion. + +Det er faktisk ikke særlig almindeligt at få et datasæt, der er helt klar til brug til at skabe en ML-model direkte. I denne lektion vil du lære, hvordan du forbereder et råt datasæt ved hjælp af standard Python-biblioteker. Du vil også lære forskellige teknikker til at visualisere dataene. + +## Case study: 'græskarmarkedet' + +I denne mappe finder du en .csv-fil i roden af `data`-mappen kaldet [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), som indeholder 1757 linjer med data om markedet for græskar, sorteret i grupperinger efter by. Dette er rå data, der er hentet fra [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice), distribueret af United States Department of Agriculture. + +### Forberedelse af data + +Disse data er offentligt tilgængelige. De kan downloades i mange separate filer, per by, fra USDA's hjemmeside. For at undgå for mange separate filer har vi sammenføjet alle bydataene til ét regneark, så vi har allerede _forberedt_ dataene en smule. Lad os nu tage et nærmere kig på dataene. + +### Græskardata - tidlige konklusioner + +Hvad bemærker du ved disse data? Du har allerede set, at der er en blanding af tekst, tal, tomme felter og mærkelige værdier, som du skal finde mening i. + +Hvilket spørgsmål kan du stille til disse data ved hjælp af en regressionsmetode? Hvad med "Forudsig prisen på et græskar til salg i en given måned". Når du ser på dataene igen, er der nogle ændringer, du skal foretage for at skabe den datastruktur, der er nødvendig for opgaven. + +## Øvelse - analyser græskardataene + +Lad os bruge [Pandas](https://pandas.pydata.org/) (navnet står for `Python Data Analysis`), et værktøj, der er meget nyttigt til at forme data, til at analysere og forberede disse græskardata. + +### Først, tjek for manglende datoer + +Du skal først tage skridt til at tjekke for manglende datoer: + +1. Konverter datoerne til et månedsformat (disse er amerikanske datoer, så formatet er `MM/DD/YYYY`). +2. Uddrag måneden til en ny kolonne. + +Åbn _notebook.ipynb_-filen i Visual Studio Code og importer regnearket til en ny Pandas dataframe. + +1. Brug funktionen `head()` til at se de første fem rækker. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Hvilken funktion ville du bruge til at se de sidste fem rækker? + +1. Tjek om der er manglende data i den aktuelle dataframe: + + ```python + pumpkins.isnull().sum() + ``` + + Der er manglende data, men måske betyder det ikke noget for den aktuelle opgave. + +1. For at gøre din dataframe lettere at arbejde med, vælg kun de kolonner, du har brug for, ved hjælp af funktionen `loc`, som udtrækker en gruppe af rækker (angivet som første parameter) og kolonner (angivet som anden parameter) fra den originale dataframe. Udtrykket `:` i nedenstående tilfælde betyder "alle rækker". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### For det andet, bestem gennemsnitsprisen på græskar + +Tænk over, hvordan du kan bestemme gennemsnitsprisen på et græskar i en given måned. Hvilke kolonner ville du vælge til denne opgave? Hint: du skal bruge 3 kolonner. + +Løsning: Tag gennemsnittet af kolonnerne `Low Price` og `High Price` for at udfylde den nye Price-kolonne, og konverter Date-kolonnen til kun at vise måneden. Heldigvis, ifølge ovenstående tjek, er der ingen manglende data for datoer eller priser. + +1. For at beregne gennemsnittet, tilføj følgende kode: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Du er velkommen til at udskrive data, du gerne vil tjekke, ved hjælp af `print(month)`. + +2. Kopier nu dine konverterede data til en ny Pandas dataframe: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Hvis du udskriver din dataframe, vil du se et rent, ryddeligt datasæt, som du kan bygge din nye regressionsmodel på. + +### Men vent! Der er noget mærkeligt her + +Hvis du ser på kolonnen `Package`, bliver græskar solgt i mange forskellige konfigurationer. Nogle bliver solgt i '1 1/9 bushel'-mål, og nogle i '1/2 bushel'-mål, nogle per græskar, nogle per pund, og nogle i store kasser med varierende bredder. + +> Græskar synes at være meget svære at veje konsekvent + +Når man dykker ned i de originale data, er det interessant, at alt med `Unit of Sale` lig med 'EACH' eller 'PER BIN' også har `Package`-typen per tomme, per bin eller 'each'. Græskar synes at være meget svære at veje konsekvent, så lad os filtrere dem ved kun at vælge græskar med strengen 'bushel' i deres `Package`-kolonne. + +1. Tilføj et filter øverst i filen, under den oprindelige .csv-import: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Hvis du udskriver dataene nu, kan du se, at du kun får de cirka 415 rækker med data, der indeholder græskar per bushel. + +### Men vent! Der er én ting mere at gøre + +Bemærkede du, at bushel-mængden varierer per række? Du skal normalisere prissætningen, så du viser prisen per bushel, så lav nogle beregninger for at standardisere det. + +1. Tilføj disse linjer efter blokken, der opretter new_pumpkins-dataframen: + + ```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) + ``` + +✅ Ifølge [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) afhænger en bushels vægt af typen af produkt, da det er en volumenmåling. "En bushel tomater, for eksempel, skal veje 56 pund... Blade og grøntsager fylder mere med mindre vægt, så en bushel spinat er kun 20 pund." Det er alt sammen ret kompliceret! Lad os ikke bekymre os om at lave en bushel-til-pund-konvertering, og i stedet prissætte per bushel. Al denne undersøgelse af bushels af græskar viser dog, hvor vigtigt det er at forstå naturen af dine data! + +Nu kan du analysere prissætningen per enhed baseret på deres bushel-måling. Hvis du udskriver dataene en gang til, kan du se, hvordan det er standardiseret. + +✅ Bemærkede du, at græskar solgt per halv bushel er meget dyre? Kan du finde ud af hvorfor? Hint: små græskar er meget dyrere end store, sandsynligvis fordi der er så mange flere af dem per bushel, givet den ubrugte plads, som et stort hul græskar til tærte optager. + +## Visualiseringsstrategier + +En del af dataforskerens rolle er at demonstrere kvaliteten og naturen af de data, de arbejder med. For at gøre dette skaber de ofte interessante visualiseringer, såsom grafer, diagrammer og plots, der viser forskellige aspekter af dataene. På denne måde kan de visuelt vise relationer og mangler, der ellers er svære at opdage. + +[![ML for begyndere - Hvordan visualiserer man data med Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML for begyndere - Hvordan visualiserer man data med Matplotlib") + +> 🎥 Klik på billedet ovenfor for en kort video, der gennemgår visualisering af dataene til denne lektion. + +Visualiseringer kan også hjælpe med at bestemme den maskinlæringsteknik, der er mest passende for dataene. Et scatterplot, der ser ud til at følge en linje, indikerer for eksempel, at dataene er en god kandidat til en lineær regressionsøvelse. + +Et datavisualiseringsbibliotek, der fungerer godt i Jupyter notebooks, er [Matplotlib](https://matplotlib.org/) (som du også så i den forrige lektion). + +> Få mere erfaring med datavisualisering i [disse tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Øvelse - eksperimentér med Matplotlib + +Prøv at skabe nogle grundlæggende plots for at vise den nye dataframe, du lige har oprettet. Hvad ville et grundlæggende linjeplot vise? + +1. Importér Matplotlib øverst i filen, under Pandas-importen: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Kør hele notebooken igen for at opdatere. +1. Nederst i notebooken, tilføj en celle for at plotte dataene som en boks: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Et scatterplot, der viser forholdet mellem pris og måned](../../../../2-Regression/2-Data/images/scatterplot.png) + + Er dette et nyttigt plot? Overrasker noget ved det dig? + + Det er ikke særlig nyttigt, da det blot viser dine data som en spredning af punkter i en given måned. + +### Gør det nyttigt + +For at få diagrammer til at vise nyttige data, skal du normalt gruppere dataene på en eller anden måde. Lad os prøve at skabe et plot, hvor y-aksen viser månederne, og dataene demonstrerer fordelingen af data. + +1. Tilføj en celle for at skabe et grupperet søjlediagram: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Et søjlediagram, der viser forholdet mellem pris og måned](../../../../2-Regression/2-Data/images/barchart.png) + + Dette er en mere nyttig datavisualisering! Det ser ud til at indikere, at den højeste pris for græskar forekommer i september og oktober. Stemmer det overens med dine forventninger? Hvorfor eller hvorfor ikke? + +--- + +## 🚀Udfordring + +Udforsk de forskellige typer visualiseringer, som Matplotlib tilbyder. Hvilke typer er mest passende for regressionsproblemer? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Tag et kig på de mange måder at visualisere data på. Lav en liste over de forskellige biblioteker, der er tilgængelige, og notér hvilke der er bedst til bestemte typer opgaver, for eksempel 2D-visualiseringer vs. 3D-visualiseringer. Hvad opdager du? + +## Opgave + +[Udforsk visualisering](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/2-Data/assignment.md b/translations/da/2-Regression/2-Data/assignment.md new file mode 100644 index 000000000..17b4200b1 --- /dev/null +++ b/translations/da/2-Regression/2-Data/assignment.md @@ -0,0 +1,23 @@ + +# Udforskning af Visualiseringer + +Der findes flere forskellige biblioteker til datavisualisering. Lav nogle visualiseringer ved hjælp af Græskar-dataene i denne lektion med matplotlib og seaborn i en prøve-notebook. Hvilke biblioteker er nemmest at arbejde med? + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver Forbedring | +| --------- | ----------- | ------------- | ----------------- | +| | En notebook er indsendt med to udforskninger/visualiseringer | En notebook er indsendt med én udforskning/visualisering | En notebook er ikke indsendt | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/2-Data/solution/Julia/README.md b/translations/da/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 000000000..d4fdfdef6 --- /dev/null +++ b/translations/da/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/3-Linear/README.md b/translations/da/2-Regression/3-Linear/README.md new file mode 100644 index 000000000..40b165d43 --- /dev/null +++ b/translations/da/2-Regression/3-Linear/README.md @@ -0,0 +1,380 @@ + +# Byg en regressionsmodel med Scikit-learn: regression på fire måder + +![Infografik om lineær vs. polynomisk regression](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Infografik af [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Denne lektion er også tilgængelig i R!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Introduktion + +Indtil nu har du udforsket, hvad regression er, med eksempeldata fra græskarpris-datasættet, som vi vil bruge gennem hele denne lektion. Du har også visualiseret det med Matplotlib. + +Nu er du klar til at dykke dybere ned i regression for maskinlæring. Mens visualisering hjælper dig med at forstå data, ligger den virkelige styrke i maskinlæring i _træning af modeller_. Modeller trænes på historiske data for automatisk at fange dataafhængigheder, og de giver dig mulighed for at forudsige resultater for nye data, som modellen ikke har set før. + +I denne lektion vil du lære mere om to typer regression: _grundlæggende lineær regression_ og _polynomisk regression_, sammen med noget af den matematik, der ligger bag disse teknikker. Disse modeller vil give os mulighed for at forudsige græskarpriser baseret på forskellige inputdata. + +[![ML for begyndere - Forståelse af lineær regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML for begyndere - Forståelse af lineær regression") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over lineær regression. + +> Gennem hele dette pensum antager vi minimal viden om matematik og søger at gøre det tilgængeligt for studerende fra andre områder, så hold øje med noter, 🧮 callouts, diagrammer og andre læringsværktøjer, der kan hjælpe med forståelsen. + +### Forudsætninger + +Du bør nu være bekendt med strukturen af græskardataene, som vi undersøger. Du kan finde det forudindlæst og forudrenset i denne lektions _notebook.ipynb_-fil. I filen vises græskarprisen pr. bushel i en ny data frame. Sørg for, at du kan køre disse notebooks i kerner i Visual Studio Code. + +### Forberedelse + +Som en påmindelse indlæser du disse data for at stille spørgsmål til dem. + +- Hvornår er det bedste tidspunkt at købe græskar? +- Hvilken pris kan jeg forvente for en kasse med miniaturegræskar? +- Skal jeg købe dem i halv-bushel kurve eller i 1 1/9 bushel kasser? +Lad os fortsætte med at grave i disse data. + +I den forrige lektion oprettede du en Pandas data frame og fyldte den med en del af det originale datasæt, hvor du standardiserede prisen pr. bushel. Ved at gøre det var du dog kun i stand til at samle omkring 400 datapunkter og kun for efterårsmånederne. + +Tag et kig på de data, der er forudindlæst i denne lektions tilhørende notebook. Dataene er forudindlæst, og et indledende scatterplot er oprettet for at vise månedsdata. Måske kan vi få lidt mere detaljeret information om dataenes natur ved at rense dem yderligere. + +## En lineær regressionslinje + +Som du lærte i Lektion 1, er målet med en lineær regressionsøvelse at kunne plotte en linje for at: + +- **Vis variableforhold**. Vis forholdet mellem variabler +- **Lav forudsigelser**. Lav præcise forudsigelser om, hvor et nyt datapunkt vil falde i forhold til den linje. + +Det er typisk for **Least-Squares Regression** at tegne denne type linje. Udtrykket 'least-squares' betyder, at alle datapunkterne omkring regressionslinjen kvadreres og derefter lægges sammen. Ideelt set er den endelige sum så lille som muligt, fordi vi ønsker et lavt antal fejl, eller `least-squares`. + +Vi gør dette, fordi vi ønsker at modellere en linje, der har den mindste kumulative afstand fra alle vores datapunkter. Vi kvadrerer også termerne, før vi lægger dem sammen, da vi er interesserede i deres størrelse snarere end deres retning. + +> **🧮 Vis mig matematikken** +> +> Denne linje, kaldet _linjen for bedste pasform_, kan udtrykkes ved [en ligning](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` er den 'forklarende variabel'. `Y` er den 'afhængige variabel'. Hældningen af linjen er `b`, og `a` er y-skæringen, som refererer til værdien af `Y`, når `X = 0`. +> +>![beregn hældningen](../../../../2-Regression/3-Linear/images/slope.png) +> +> Først beregnes hældningen `b`. Infografik af [Jen Looper](https://twitter.com/jenlooper) +> +> Med andre ord, og med henvisning til det oprindelige spørgsmål om græskardata: "forudsige prisen på et græskar pr. bushel efter måned", ville `X` referere til prisen, og `Y` ville referere til salgsdatoen. +> +>![fuldfør ligningen](../../../../2-Regression/3-Linear/images/calculation.png) +> +> Beregn værdien af Y. Hvis du betaler omkring $4, må det være april! Infografik af [Jen Looper](https://twitter.com/jenlooper) +> +> Matematikken, der beregner linjen, skal demonstrere hældningen af linjen, som også afhænger af skæringspunktet, eller hvor `Y` er placeret, når `X = 0`. +> +> Du kan se metoden til beregning af disse værdier på [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) webstedet. Besøg også [denne Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) for at se, hvordan talværdierne påvirker linjen. + +## Korrelation + +Et andet begreb, du skal forstå, er **korrelationskoefficienten** mellem givne X- og Y-variabler. Ved hjælp af et scatterplot kan du hurtigt visualisere denne koefficient. Et plot med datapunkter spredt i en pæn linje har høj korrelation, men et plot med datapunkter spredt overalt mellem X og Y har lav korrelation. + +En god lineær regressionsmodel vil være en, der har en høj (nærmere 1 end 0) korrelationskoefficient ved hjælp af Least-Squares Regression-metoden med en regressionslinje. + +✅ Kør notebooken, der ledsager denne lektion, og kig på scatterplottet for måned til pris. Ser dataene, der forbinder måned til pris for græskarsalg, ud til at have høj eller lav korrelation ifølge din visuelle fortolkning af scatterplottet? Ændrer det sig, hvis du bruger en mere detaljeret måling i stedet for `Month`, fx *dag i året* (dvs. antal dage siden årets begyndelse)? + +I koden nedenfor antager vi, at vi har renset dataene og opnået en data frame kaldet `new_pumpkins`, der ligner følgende: + +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 + +> Koden til at rense dataene er tilgængelig i [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Vi har udført de samme rengøringsskridt som i den forrige lektion og har beregnet `DayOfYear`-kolonnen ved hjælp af følgende udtryk: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Nu hvor du har en forståelse af matematikken bag lineær regression, lad os oprette en regressionsmodel for at se, om vi kan forudsige, hvilken pakke græskar der vil have de bedste græskarpriser. En person, der køber græskar til en feriegræskarplads, vil måske have denne information for at optimere sine køb af græskarpakker til pladsen. + +## Søger efter korrelation + +[![ML for begyndere - Søger efter korrelation: Nøglen til lineær regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML for begyndere - Søger efter korrelation: Nøglen til lineær regression") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over korrelation. + +Fra den forrige lektion har du sandsynligvis set, at gennemsnitsprisen for forskellige måneder ser sådan ud: + +Gennemsnitspris pr. måned + +Dette antyder, at der bør være en vis korrelation, og vi kan prøve at træne en lineær regressionsmodel til at forudsige forholdet mellem `Month` og `Price`, eller mellem `DayOfYear` og `Price`. Her er scatterplottet, der viser sidstnævnte forhold: + +Scatterplot af pris vs. dag i året + +Lad os se, om der er en korrelation ved hjælp af funktionen `corr`: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Det ser ud til, at korrelationen er ret lille, -0.15 for `Month` og -0.17 for `DayOfMonth`, men der kunne være et andet vigtigt forhold. Det ser ud til, at der er forskellige prisgrupper, der svarer til forskellige græskartyper. For at bekræfte denne hypotese, lad os plotte hver græskarkategori med en anden farve. Ved at sende en `ax`-parameter til scatter-plotfunktionen kan vi plotte alle punkter på samme graf: + +```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) +``` + +Scatterplot af pris vs. dag i året + +Vores undersøgelse antyder, at sorten har større effekt på den samlede pris end den faktiske salgsdato. Vi kan se dette med et søjlediagram: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +Søjlediagram af pris vs. sort + +Lad os fokusere for øjeblikket kun på én græskarsort, 'pie type', og se, hvilken effekt datoen har på prisen: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Scatterplot af pris vs. dag i året + +Hvis vi nu beregner korrelationen mellem `Price` og `DayOfYear` ved hjælp af funktionen `corr`, får vi noget som `-0.27` - hvilket betyder, at det giver mening at træne en forudsigelsesmodel. + +> Før du træner en lineær regressionsmodel, er det vigtigt at sikre, at vores data er rene. Lineær regression fungerer ikke godt med manglende værdier, så det giver mening at fjerne alle tomme celler: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +En anden tilgang ville være at udfylde de tomme værdier med gennemsnitsværdier fra den tilsvarende kolonne. + +## Simpel lineær regression + +[![ML for begyndere - Lineær og polynomisk regression med Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML for begyndere - Lineær og polynomisk regression med Scikit-learn") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over lineær og polynomisk regression. + +For at træne vores lineære regressionsmodel vil vi bruge **Scikit-learn**-biblioteket. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +Vi starter med at adskille inputværdier (features) og det forventede output (label) i separate numpy-arrays: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> Bemærk, at vi var nødt til at udføre `reshape` på inputdataene, for at Linear Regression-pakken kunne forstå det korrekt. Lineær regression forventer et 2D-array som input, hvor hver række i arrayet svarer til en vektor af inputfeatures. I vores tilfælde, da vi kun har én input, har vi brug for et array med formen N×1, hvor N er datasættets størrelse. + +Derefter skal vi opdele dataene i trænings- og testdatasæt, så vi kan validere vores model efter træning: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Endelig tager det kun to linjer kode at træne den faktiske lineære regressionsmodel. Vi definerer `LinearRegression`-objektet og tilpasser det til vores data ved hjælp af metoden `fit`: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +`LinearRegression`-objektet indeholder efter `fit`-processen alle koefficienterne for regressionen, som kan tilgås ved hjælp af `.coef_`-egenskaben. I vores tilfælde er der kun én koefficient, som bør være omkring `-0.017`. Det betyder, at priserne ser ud til at falde lidt med tiden, men ikke meget, omkring 2 cent pr. dag. Vi kan også tilgå skæringspunktet for regressionen med Y-aksen ved hjælp af `lin_reg.intercept_` - det vil være omkring `21` i vores tilfælde, hvilket indikerer prisen i begyndelsen af året. + +For at se, hvor præcis vores model er, kan vi forudsige priser på et testdatasæt og derefter måle, hvor tæt vores forudsigelser er på de forventede værdier. Dette kan gøres ved hjælp af mean square error (MSE)-metrikken, som er gennemsnittet af alle kvadrerede forskelle mellem forventet og forudsagt værdi. + +```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}%)') +``` +Vores fejl ser ud til at ligge omkring 2 punkter, hvilket svarer til ~17%. Ikke så godt. En anden indikator for modelkvalitet er **bestemmelseskoefficienten**, som kan beregnes sådan her: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +Hvis værdien er 0, betyder det, at modellen ikke tager inputdata i betragtning og fungerer som den *dårligste lineære forudsigelse*, hvilket simpelthen er gennemsnitsværdien af resultatet. Værdien 1 betyder, at vi kan forudsige alle forventede output perfekt. I vores tilfælde er koefficienten omkring 0,06, hvilket er ret lavt. + +Vi kan også plotte testdata sammen med regressionslinjen for bedre at se, hvordan regression fungerer i vores tilfælde: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +Lineær regression + +## Polynomisk Regression + +En anden type lineær regression er polynomisk regression. Mens der nogle gange er en lineær sammenhæng mellem variabler - jo større græskar i volumen, jo højere pris - kan disse sammenhænge nogle gange ikke plottes som et plan eller en lige linje. + +✅ Her er [nogle flere eksempler](https://online.stat.psu.edu/stat501/lesson/9/9.8) på data, der kunne bruge polynomisk regression. + +Tag et nyt kig på sammenhængen mellem dato og pris. Ser dette scatterplot ud som om det nødvendigvis skal analyseres med en lige linje? Kan priser ikke svinge? I dette tilfælde kan du prøve polynomisk regression. + +✅ Polynomier er matematiske udtryk, der kan bestå af en eller flere variabler og koefficienter. + +Polynomisk regression skaber en buet linje for bedre at tilpasse sig ikke-lineære data. I vores tilfælde, hvis vi inkluderer en kvadreret `DayOfYear`-variabel i inputdata, burde vi kunne tilpasse vores data med en parabolsk kurve, som vil have et minimum på et bestemt tidspunkt i løbet af året. + +Scikit-learn inkluderer en nyttig [pipeline-API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) til at kombinere forskellige trin i databehandlingen. En **pipeline** er en kæde af **estimators**. I vores tilfælde vil vi oprette en pipeline, der først tilføjer polynomiske funktioner til vores model og derefter træner regressionen: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Ved at bruge `PolynomialFeatures(2)` betyder det, at vi vil inkludere alle anden-gradspolynomier fra inputdata. I vores tilfælde vil det blot betyde `DayOfYear`2, men givet to inputvariabler X og Y, vil dette tilføje X2, XY og Y2. Vi kan også bruge polynomier af højere grad, hvis vi ønsker det. + +Pipelines kan bruges på samme måde som det originale `LinearRegression`-objekt, dvs. vi kan `fit` pipelinen og derefter bruge `predict` til at få forudsigelsesresultater. Her er grafen, der viser testdata og tilnærmningskurven: + +Polynomisk regression + +Ved at bruge polynomisk regression kan vi få en lidt lavere MSE og højere bestemmelseskoefficient, men ikke markant. Vi skal tage andre funktioner i betragtning! + +> Du kan se, at de laveste græskarpriser observeres omkring Halloween. Hvordan kan du forklare dette? + +🎃 Tillykke, du har lige oprettet en model, der kan hjælpe med at forudsige prisen på tærtegræskar. Du kan sandsynligvis gentage den samme procedure for alle græskartyper, men det ville være tidskrævende. Lad os nu lære, hvordan man tager græskarsort i betragtning i vores model! + +## Kategoriske Funktioner + +I en ideel verden ønsker vi at kunne forudsige priser for forskellige græskarsorter ved hjælp af den samme model. Dog er kolonnen `Variety` noget anderledes end kolonner som `Month`, fordi den indeholder ikke-numeriske værdier. Sådanne kolonner kaldes **kategoriske**. + +[![ML for begyndere - Kategoriske funktioner med lineær regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML for begyndere - Kategoriske funktioner med lineær regression") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt om brug af kategoriske funktioner. + +Her kan du se, hvordan gennemsnitsprisen afhænger af sorten: + +Gennemsnitspris efter sort + +For at tage sorten i betragtning skal vi først konvertere den til numerisk form, eller **kode** den. Der er flere måder, vi kan gøre det på: + +* Enkel **numerisk kodning** vil oprette en tabel over forskellige sorter og derefter erstatte sortsnavnet med et indeks i den tabel. Dette er ikke den bedste idé for lineær regression, fordi lineær regression tager den faktiske numeriske værdi af indekset og tilføjer det til resultatet, multipliceret med en koefficient. I vores tilfælde er forholdet mellem indeksnummeret og prisen klart ikke-lineært, selv hvis vi sørger for, at indeksene er ordnet på en bestemt måde. +* **One-hot kodning** vil erstatte kolonnen `Variety` med 4 forskellige kolonner, én for hver sort. Hver kolonne vil indeholde `1`, hvis den tilsvarende række er af en given sort, og `0` ellers. Dette betyder, at der vil være fire koefficienter i lineær regression, én for hver græskarsort, ansvarlig for "startpris" (eller rettere "ekstrapris") for den pågældende sort. + +Koden nedenfor viser, hvordan vi kan one-hot kode en sort: + +```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 + +For at træne lineær regression ved hjælp af one-hot kodet sort som input skal vi blot initialisere `X` og `y` data korrekt: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +Resten af koden er den samme som den, vi brugte ovenfor til at træne lineær regression. Hvis du prøver det, vil du se, at den gennemsnitlige kvadratiske fejl er omtrent den samme, men vi får en meget højere bestemmelseskoefficient (~77%). For at få endnu mere præcise forudsigelser kan vi tage flere kategoriske funktioner i betragtning samt numeriske funktioner som `Month` eller `DayOfYear`. For at få én stor array af funktioner kan vi bruge `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'] +``` + +Her tager vi også `City` og `Package` type i betragtning, hvilket giver os MSE 2.84 (10%) og bestemmelse 0.94! + +## Samlet set + +For at lave den bedste model kan vi bruge kombinerede (one-hot kodede kategoriske + numeriske) data fra ovenstående eksempel sammen med polynomisk regression. Her er den komplette kode for din bekvemmelighed: + +```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) +``` + +Dette burde give os den bedste bestemmelseskoefficient på næsten 97% og MSE=2.23 (~8% forudsigelsesfejl). + +| Model | MSE | Bestemmelse | +|-------|-----|-------------| +| `DayOfYear` Lineær | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polynomisk | 2.73 (17.0%) | 0.08 | +| `Variety` Lineær | 5.24 (19.7%) | 0.77 | +| Alle funktioner Lineær | 2.84 (10.5%) | 0.94 | +| Alle funktioner Polynomisk | 2.23 (8.25%) | 0.97 | + +🏆 Godt gået! Du har oprettet fire regressionsmodeller i én lektion og forbedret modelkvaliteten til 97%. I den sidste sektion om regression vil du lære om logistisk regression til at bestemme kategorier. + +--- +## 🚀Udfordring + +Test flere forskellige variabler i denne notebook for at se, hvordan korrelation svarer til modelnøjagtighed. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +I denne lektion lærte vi om lineær regression. Der er andre vigtige typer af regression. Læs om Stepwise, Ridge, Lasso og Elasticnet teknikker. Et godt kursus at studere for at lære mere er [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). + +## Opgave + +[Byg en model](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/3-Linear/assignment.md b/translations/da/2-Regression/3-Linear/assignment.md new file mode 100644 index 000000000..8302f0849 --- /dev/null +++ b/translations/da/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# Opret en regressionsmodel + +## Instruktioner + +I denne lektion blev du vist, hvordan man bygger en model ved hjælp af både lineær og polynomisk regression. Brug denne viden til at finde et datasæt eller brug et af Scikit-learns indbyggede datasæt til at opbygge en ny model. Forklar i din notebook, hvorfor du valgte den teknik, du gjorde, og demonstrer modellens nøjagtighed. Hvis den ikke er nøjagtig, forklar hvorfor. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------------- | -------------------------- | ------------------------------- | +| | præsenterer en komplet notebook med en veldokumenteret løsning | løsningen er ufuldstændig | løsningen er mangelfuld eller fejlbehæftet | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/3-Linear/solution/Julia/README.md b/translations/da/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 000000000..8bc1bb530 --- /dev/null +++ b/translations/da/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/4-Logistic/README.md b/translations/da/2-Regression/4-Logistic/README.md new file mode 100644 index 000000000..e56c580e3 --- /dev/null +++ b/translations/da/2-Regression/4-Logistic/README.md @@ -0,0 +1,413 @@ + +# Logistisk regression til at forudsige kategorier + +![Infografik om logistisk vs. lineær regression](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Denne lektion er tilgængelig i R!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Introduktion + +I denne sidste lektion om regression, en af de grundlæggende _klassiske_ ML-teknikker, vil vi se nærmere på logistisk regression. Du kan bruge denne teknik til at finde mønstre og forudsige binære kategorier. Er dette slik chokolade eller ej? Er denne sygdom smitsom eller ej? Vil denne kunde vælge dette produkt eller ej? + +I denne lektion vil du lære: + +- Et nyt bibliotek til datavisualisering +- Teknikker til logistisk regression + +✅ Uddyb din forståelse af at arbejde med denne type regression i dette [Learn-modul](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Forudsætning + +Efter at have arbejdet med græskardataene er vi nu tilstrækkeligt bekendte med dem til at indse, at der er én binær kategori, vi kan arbejde med: `Color`. + +Lad os bygge en logistisk regressionsmodel for at forudsige, givet nogle variabler, _hvilken farve et givet græskar sandsynligvis har_ (orange 🎃 eller hvid 👻). + +> Hvorfor taler vi om binær klassifikation i en lektion om regression? Kun af sproglig bekvemmelighed, da logistisk regression [faktisk er en klassifikationsmetode](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), omend en lineær-baseret en. Lær om andre måder at klassificere data på i den næste lektion. + +## Definer spørgsmålet + +For vores formål vil vi udtrykke dette som en binær: 'Hvid' eller 'Ikke hvid'. Der er også en 'stribet' kategori i vores datasæt, men der er få forekomster af den, så vi vil ikke bruge den. Den forsvinder alligevel, når vi fjerner null-værdier fra datasættet. + +> 🎃 Sjov fakta: Vi kalder nogle gange hvide græskar for 'spøgelsesgræskar'. De er ikke særlig nemme at skære i, så de er ikke lige så populære som de orange, men de ser seje ud! Så vi kunne også omformulere vores spørgsmål som: 'Spøgelse' eller 'Ikke spøgelse'. 👻 + +## Om logistisk regression + +Logistisk regression adskiller sig fra lineær regression, som du tidligere har lært om, på nogle vigtige måder. + +[![ML for begyndere - Forståelse af logistisk regression til klassifikation i maskinlæring](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML for begyndere - Forståelse af logistisk regression til klassifikation i maskinlæring") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over logistisk regression. + +### Binær klassifikation + +Logistisk regression tilbyder ikke de samme funktioner som lineær regression. Den førstnævnte giver en forudsigelse om en binær kategori ("hvid eller ikke hvid"), mens den sidstnævnte er i stand til at forudsige kontinuerlige værdier, for eksempel givet oprindelsen af et græskar og tidspunktet for høsten, _hvor meget prisen vil stige_. + +![Græskar klassifikationsmodel](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infografik af [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Andre klassifikationer + +Der findes andre typer logistisk regression, herunder multinomial og ordinal: + +- **Multinomial**, som involverer mere end én kategori - "Orange, Hvid og Stribet". +- **Ordinal**, som involverer ordnede kategorier, nyttigt hvis vi ønskede at ordne vores resultater logisk, som vores græskar, der er ordnet efter et begrænset antal størrelser (mini, sm, med, lg, xl, xxl). + +![Multinomial vs ordinal regression](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### Variabler behøver IKKE at korrelere + +Kan du huske, hvordan lineær regression fungerede bedre med mere korrelerede variabler? Logistisk regression er det modsatte - variablerne behøver ikke at være i overensstemmelse. Det fungerer for disse data, som har noget svage korrelationer. + +### Du har brug for mange rene data + +Logistisk regression giver mere præcise resultater, hvis du bruger flere data; vores lille datasæt er ikke optimalt til denne opgave, så husk det. + +[![ML for begyndere - Dataanalyse og forberedelse til logistisk regression](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML for begyndere - Dataanalyse og forberedelse til logistisk regression") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over forberedelse af data til lineær regression + +✅ Tænk over, hvilke typer data der egner sig godt til logistisk regression + +## Øvelse - ryd op i dataene + +Først skal du rydde lidt op i dataene ved at fjerne null-værdier og vælge kun nogle af kolonnerne: + +1. Tilføj følgende kode: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Du kan altid tage et kig på din nye dataframe: + + ```python + pumpkins.info + ``` + +### Visualisering - kategorisk plot + +Nu har du indlæst [start-notebooken](../../../../2-Regression/4-Logistic/notebook.ipynb) med græskardata igen og ryddet op i den, så du har et datasæt, der indeholder nogle få variabler, inklusive `Color`. Lad os visualisere dataframen i notebooken ved hjælp af et andet bibliotek: [Seaborn](https://seaborn.pydata.org/index.html), som er bygget på Matplotlib, som vi brugte tidligere. + +Seaborn tilbyder nogle smarte måder at visualisere dine data på. For eksempel kan du sammenligne fordelingen af dataene for hver `Variety` og `Color` i et kategorisk plot. + +1. Opret et sådant plot ved hjælp af funktionen `catplot`, brug vores græskardata `pumpkins`, og angiv en farvekodning for hver græskarkategori (orange eller hvid): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Et gitter af visualiserede data](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Ved at observere dataene kan du se, hvordan `Color` relaterer sig til `Variety`. + + ✅ Givet dette kategoriske plot, hvilke interessante undersøgelser kan du forestille dig? + +### Databehandling: feature- og labelkodning + +Vores græskardatasæt indeholder strengværdier for alle dets kolonner. At arbejde med kategoriske data er intuitivt for mennesker, men ikke for maskiner. Maskinlæringsalgoritmer fungerer godt med tal. Derfor er kodning et meget vigtigt trin i databehandlingsfasen, da det gør det muligt for os at omdanne kategoriske data til numeriske data uden at miste nogen information. God kodning fører til opbygning af en god model. + +For feature-kodning er der to hovedtyper af kodere: + +1. Ordinal encoder: Den passer godt til ordinale variabler, som er kategoriske variabler, hvor deres data følger en logisk rækkefølge, som kolonnen `Item Size` i vores datasæt. Den opretter en mapping, så hver kategori repræsenteres af et tal, som er rækkefølgen af kategorien i kolonnen. + + ```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. Kategorisk encoder: Den passer godt til nominelle variabler, som er kategoriske variabler, hvor deres data ikke følger en logisk rækkefølge, som alle funktionerne bortset fra `Item Size` i vores datasæt. Det er en one-hot encoding, hvilket betyder, at hver kategori repræsenteres af en binær kolonne: den kodede variabel er lig med 1, hvis græskarret tilhører den `Variety` og 0 ellers. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` + +Derefter bruges `ColumnTransformer` til at kombinere flere kodere i et enkelt trin og anvende dem på de relevante kolonner. + +```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) +``` + +For at kode labelen bruger vi scikit-learn-klassen `LabelEncoder`, som er en hjælpeklasse til at normalisere labels, så de kun indeholder værdier mellem 0 og n_classes-1 (her, 0 og 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` + +Når vi har kodet funktionerne og labelen, kan vi flette dem til en ny dataframe `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` + +✅ Hvad er fordelene ved at bruge en ordinal encoder til kolonnen `Item Size`? + +### Analyser forholdet mellem variabler + +Nu hvor vi har forbehandlet vores data, kan vi analysere forholdet mellem funktionerne og labelen for at få en idé om, hvor godt modellen vil kunne forudsige labelen givet funktionerne. Den bedste måde at udføre denne type analyse på er at plotte dataene. Vi bruger igen Seaborn-funktionen `catplot` til at visualisere forholdet mellem `Item Size`, `Variety` og `Color` i et kategorisk plot. For bedre at plotte dataene bruger vi den kodede `Item Size`-kolonne og den ukodede `Variety`-kolonne. + +```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}") +``` + +![Et kategorisk plot af visualiserede data](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Brug et swarm plot + +Da `Color` er en binær kategori (Hvid eller Ikke hvid), kræver det 'en [specialiseret tilgang](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) til visualisering'. Der er andre måder at visualisere forholdet mellem denne kategori og andre variabler. + +Du kan visualisere variabler side om side med Seaborn-plots. + +1. Prøv et 'swarm'-plot for at vise fordelingen af værdier: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Et swarm af visualiserede data](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Pas på**: Koden ovenfor kan generere en advarsel, da Seaborn har svært ved at repræsentere så mange datapunkter i et swarm-plot. En mulig løsning er at reducere størrelsen på markøren ved hjælp af parameteren 'size'. Vær dog opmærksom på, at dette påvirker læsbarheden af plottet. + +> **🧮 Vis mig matematikken** +> +> Logistisk regression bygger på konceptet 'maksimal sandsynlighed' ved hjælp af [sigmoid-funktioner](https://wikipedia.org/wiki/Sigmoid_function). En 'Sigmoid-funktion' på et plot ligner en 'S'-form. Den tager en værdi og mapper den til et sted mellem 0 og 1. Dens kurve kaldes også en 'logistisk kurve'. Dens formel ser sådan ud: +> +> ![logistisk funktion](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> hvor sigmoids midtpunkt findes ved x's 0-punkt, L er kurvens maksimale værdi, og k er kurvens stejlhed. Hvis resultatet af funktionen er mere end 0,5, vil den pågældende label blive givet klassen '1' af det binære valg. Hvis ikke, vil den blive klassificeret som '0'. + +## Byg din model + +At bygge en model til at finde disse binære klassifikationer er overraskende ligetil i Scikit-learn. + +[![ML for begyndere - Logistisk regression til klassifikation af data](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML for begyndere - Logistisk regression til klassifikation af data") + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over opbygning af en lineær regressionsmodel + +1. Vælg de variabler, du vil bruge i din klassifikationsmodel, og opdel trænings- og testdatasæt ved at kalde `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. Nu kan du træne din model ved at kalde `fit()` med dine træningsdata og udskrive resultatet: + + ```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)) + ``` + + Tag et kig på din models score. Det er ikke dårligt, taget i betragtning at du kun har omkring 1000 rækker data: + + ```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 + ``` + +## Bedre forståelse via en forvirringsmatrix + +Mens du kan få en score-rapport [termer](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) ved at udskrive ovenstående elementer, kan du muligvis forstå din model lettere ved at bruge en [forvirringsmatrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) til at hjælpe os med at forstå, hvordan modellen klarer sig. + +> 🎓 En '[forvirringsmatrix](https://wikipedia.org/wiki/Confusion_matrix)' (eller 'fejlmatrix') er en tabel, der udtrykker din models sande vs. falske positive og negative, og dermed vurderer nøjagtigheden af forudsigelserne. + +1. For at bruge en forvirringsmatrix skal du kalde `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Tag et kig på din models forvirringsmatrix: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +I Scikit-learn er rækker (akse 0) faktiske labels, og kolonner (akse 1) er forudsagte labels. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Hvad sker der her? Lad os sige, at vores model bliver bedt om at klassificere græskar mellem to binære kategorier, kategori 'hvid' og kategori 'ikke-hvid'. + +- Hvis din model forudsiger et græskar som ikke hvidt, og det faktisk tilhører kategorien 'ikke-hvid', kalder vi det en sand negativ, vist ved det øverste venstre tal. +- Hvis din model forudsiger et græskar som hvidt, og det faktisk tilhører kategorien 'ikke-hvid', kalder vi det en falsk negativ, vist ved det nederste venstre tal. +- Hvis din model forudsiger et græskar som ikke hvidt, og det faktisk tilhører kategorien 'hvid', kalder vi det en falsk positiv, vist ved det øverste højre tal. +- Hvis din model forudsiger et græskar som hvidt, og det faktisk tilhører kategorien 'hvid', kalder vi det en sand positiv, vist ved det nederste højre tal. + +Som du måske har gættet, er det at foretrække at have et større antal sande positive og sande negative og et lavere antal falske positive og falske negative, hvilket indebærer, at modellen klarer sig bedre. +Hvordan relaterer forvirringsmatricen sig til præcision og recall? Husk, at klassifikationsrapporten, der blev printet ovenfor, viste præcision (0.85) og recall (0.67). + +Præcision = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Recall = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ Q: Ifølge forvirringsmatricen, hvordan klarede modellen sig? A: Ikke dårligt; der er et godt antal sande negative, men også nogle få falske negative. + +Lad os genbesøge de begreber, vi så tidligere, ved hjælp af forvirringsmatricens kortlægning af TP/TN og FP/FN: + +🎓 Præcision: TP/(TP + FP) Andelen af relevante instanser blandt de hentede instanser (f.eks. hvilke labels blev korrekt mærket) + +🎓 Recall: TP/(TP + FN) Andelen af relevante instanser, der blev hentet, uanset om de blev korrekt mærket eller ej + +🎓 f1-score: (2 * præcision * recall)/(præcision + recall) Et vægtet gennemsnit af præcision og recall, hvor det bedste er 1 og det værste er 0 + +🎓 Support: Antallet af forekomster af hver hentet label + +🎓 Nøjagtighed: (TP + TN)/(TP + TN + FP + FN) Procentdelen af labels, der blev korrekt forudsagt for en prøve. + +🎓 Macro Avg: Beregningen af de uvægtede gennemsnitlige metrikker for hver label, uden at tage højde for label-ubalance. + +🎓 Weighted Avg: Beregningen af de gennemsnitlige metrikker for hver label, hvor der tages højde for label-ubalance ved at vægte dem efter deres support (antallet af sande instanser for hver label). + +✅ Kan du tænke på, hvilken metrik du bør holde øje med, hvis du vil have din model til at reducere antallet af falske negative? + +## Visualiser ROC-kurven for denne model + +[![ML for begyndere - Analyse af logistisk regression med ROC-kurver](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML for begyndere - Analyse af logistisk regression med ROC-kurver") + + +> 🎥 Klik på billedet ovenfor for en kort videooversigt over ROC-kurver + +Lad os lave endnu en visualisering for at se den såkaldte 'ROC'-kurve: + +```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() +``` + +Ved hjælp af Matplotlib kan du plotte modellens [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) eller ROC. ROC-kurver bruges ofte til at få et overblik over en klassifikators output i forhold til dens sande vs. falske positive. "ROC-kurver har typisk den sande positive rate på Y-aksen og den falske positive rate på X-aksen." Derfor betyder kurvens stejlhed og afstanden mellem midtlinjen og kurven noget: du vil have en kurve, der hurtigt bevæger sig op og over linjen. I vores tilfælde er der falske positive til at starte med, og derefter bevæger linjen sig op og over korrekt: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Til sidst kan du bruge Scikit-learns [`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) til at beregne den faktiske 'Area Under the Curve' (AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +Resultatet er `0.9749908725812341`. Da AUC spænder fra 0 til 1, vil du have en høj score, da en model, der er 100% korrekt i sine forudsigelser, vil have en AUC på 1; i dette tilfælde er modellen _ret god_. + +I fremtidige lektioner om klassifikationer vil du lære, hvordan du kan iterere for at forbedre modellens scores. Men for nu, tillykke! Du har gennemført disse regression-lektioner! + +--- +## 🚀Udfordring + +Der er meget mere at udforske omkring logistisk regression! Men den bedste måde at lære på er at eksperimentere. Find et datasæt, der egner sig til denne type analyse, og byg en model med det. Hvad lærer du? Tip: prøv [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) for interessante datasæt. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Læs de første par sider af [denne artikel fra Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) om nogle praktiske anvendelser af logistisk regression. Tænk over opgaver, der er bedre egnet til den ene eller den anden type regression, som vi har studeret indtil nu. Hvad ville fungere bedst? + +## Opgave + +[Prøv denne regression igen](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/4-Logistic/assignment.md b/translations/da/2-Regression/4-Logistic/assignment.md new file mode 100644 index 000000000..eaf5d64b9 --- /dev/null +++ b/translations/da/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# Gentagelse af noget Regression + +## Instruktioner + +I lektionen brugte du et udsnit af græskardataene. Gå nu tilbage til de originale data og prøv at bruge alle dataene, renset og standardiseret, til at bygge en logistisk regressionsmodel. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Skal forbedres | +| --------- | ---------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | En notebook præsenteres med en velbeskrevet og velfungerende model | En notebook præsenteres med en model, der fungerer minimalt | En notebook præsenteres med en underpræsterende model eller ingen | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/4-Logistic/solution/Julia/README.md b/translations/da/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 000000000..d29e0c53f --- /dev/null +++ b/translations/da/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/2-Regression/README.md b/translations/da/2-Regression/README.md new file mode 100644 index 000000000..c81902467 --- /dev/null +++ b/translations/da/2-Regression/README.md @@ -0,0 +1,54 @@ + +# Regressionsmodeller for maskinlæring +## Regionalt emne: Regressionsmodeller for græskarpriser i Nordamerika 🎃 + +I Nordamerika bliver græskar ofte skåret ud som uhyggelige ansigter til Halloween. Lad os udforske mere om disse fascinerende grøntsager! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) +> Foto af Beth TeutschmannUnsplash + +## Hvad du vil lære + +[![Introduktion til regression](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Introduktionsvideo til regression - Klik for at se!") +> 🎥 Klik på billedet ovenfor for en hurtig introduktionsvideo til denne lektion + +Lektionerne i dette afsnit dækker typer af regression i konteksten af maskinlæring. Regressionsmodeller kan hjælpe med at bestemme _forholdet_ mellem variabler. Denne type model kan forudsige værdier som længde, temperatur eller alder og dermed afdække relationer mellem variabler, mens den analyserer datapunkter. + +I denne serie af lektioner vil du opdage forskellene mellem lineær og logistisk regression, og hvornår du bør vælge den ene frem for den anden. + +[![ML for begyndere - Introduktion til regressionsmodeller for maskinlæring](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML for begyndere - Introduktion til regressionsmodeller for maskinlæring") + +> 🎥 Klik på billedet ovenfor for en kort video, der introducerer regressionsmodeller. + +I denne gruppe af lektioner vil du blive klargjort til at begynde maskinlæringsopgaver, herunder konfigurering af Visual Studio Code til at håndtere notebooks, det almindelige miljø for dataforskere. Du vil opdage Scikit-learn, et bibliotek til maskinlæring, og du vil bygge dine første modeller med fokus på regressionsmodeller i dette kapitel. + +> Der findes nyttige low-code værktøjer, der kan hjælpe dig med at lære at arbejde med regressionsmodeller. Prøv [Azure ML til denne opgave](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### Lektioner + +1. [Værktøjer til arbejdet](1-Tools/README.md) +2. [Håndtering af data](2-Data/README.md) +3. [Lineær og polynomisk regression](3-Linear/README.md) +4. [Logistisk regression](4-Logistic/README.md) + +--- +### Credits + +"ML med regression" er skrevet med ♥️ af [Jen Looper](https://twitter.com/jenlooper) + +♥️ Quizbidragydere inkluderer: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) og [Ornella Altunyan](https://twitter.com/ornelladotcom) + +Græskardatasættet er foreslået af [dette projekt på Kaggle](https://www.kaggle.com/usda/a-year-of-pumpkin-prices), og dets data er hentet fra [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribueret af United States Department of Agriculture. Vi har tilføjet nogle punkter omkring farve baseret på sort for at normalisere fordelingen. Disse data er i offentlig ejendom. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/3-Web-App/1-Web-App/README.md b/translations/da/3-Web-App/1-Web-App/README.md new file mode 100644 index 000000000..152b55fc3 --- /dev/null +++ b/translations/da/3-Web-App/1-Web-App/README.md @@ -0,0 +1,359 @@ + +# Byg en webapp til at bruge en ML-model + +I denne lektion vil du træne en ML-model på et datasæt, der er helt ude af denne verden: _UFO-observationer over det sidste århundrede_, hentet fra NUFORC's database. + +Du vil lære: + +- Hvordan man 'pickler' en trænet model +- Hvordan man bruger den model i en Flask-app + +Vi fortsætter med at bruge notebooks til at rense data og træne vores model, men du kan tage processen et skridt videre ved at udforske brugen af en model 'i det fri', så at sige: i en webapp. + +For at gøre dette skal du bygge en webapp ved hjælp af Flask. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Bygning af en app + +Der er flere måder at bygge webapps på, der kan bruge machine learning-modeller. Din webarkitektur kan påvirke, hvordan din model trænes. Forestil dig, at du arbejder i en virksomhed, hvor data science-gruppen har trænet en model, som de ønsker, at du skal bruge i en app. + +### Overvejelser + +Der er mange spørgsmål, du skal stille: + +- **Er det en webapp eller en mobilapp?** Hvis du bygger en mobilapp eller skal bruge modellen i en IoT-sammenhæng, kan du bruge [TensorFlow Lite](https://www.tensorflow.org/lite/) og bruge modellen i en Android- eller iOS-app. +- **Hvor skal modellen placeres?** I skyen eller lokalt? +- **Offline support.** Skal appen fungere offline? +- **Hvilken teknologi blev brugt til at træne modellen?** Den valgte teknologi kan påvirke de værktøjer, du skal bruge. + - **Brug af TensorFlow.** Hvis du træner en model med TensorFlow, giver det økosystem mulighed for at konvertere en TensorFlow-model til brug i en webapp ved hjælp af [TensorFlow.js](https://www.tensorflow.org/js/). + - **Brug af PyTorch.** Hvis du bygger en model med et bibliotek som [PyTorch](https://pytorch.org/), har du mulighed for at eksportere den i [ONNX](https://onnx.ai/) (Open Neural Network Exchange)-format til brug i JavaScript-webapps, der kan bruge [Onnx Runtime](https://www.onnxruntime.ai/). Denne mulighed vil blive udforsket i en fremtidig lektion for en Scikit-learn-trænet model. + - **Brug af Lobe.ai eller Azure Custom Vision.** Hvis du bruger et ML SaaS-system (Software as a Service) som [Lobe.ai](https://lobe.ai/) eller [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) til at træne en model, giver denne type software måder at eksportere modellen til mange platforme, herunder opbygning af en skræddersyet API, der kan forespørges i skyen af din online-applikation. + +Du har også mulighed for at bygge en hel Flask-webapp, der kan træne modellen direkte i en webbrowser. Dette kan også gøres ved hjælp af TensorFlow.js i en JavaScript-sammenhæng. + +For vores formål, da vi har arbejdet med Python-baserede notebooks, lad os udforske de trin, du skal tage for at eksportere en trænet model fra en sådan notebook til et format, der kan læses af en Python-bygget webapp. + +## Værktøj + +Til denne opgave skal du bruge to værktøjer: Flask og Pickle, som begge kører på Python. + +✅ Hvad er [Flask](https://palletsprojects.com/p/flask/)? Defineret som et 'mikro-framework' af sine skabere, giver Flask de grundlæggende funktioner i webframeworks ved hjælp af Python og en templating-motor til at bygge websider. Tag et kig på [dette Learn-modul](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) for at øve dig i at bygge med Flask. + +✅ Hvad er [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 er et Python-modul, der serialiserer og de-serialiserer en Python-objektstruktur. Når du 'pickler' en model, serialiserer eller flader du dens struktur ud til brug på nettet. Vær forsigtig: pickle er ikke i sig selv sikker, så vær forsigtig, hvis du bliver bedt om at 'un-pickle' en fil. En pickled fil har suffikset `.pkl`. + +## Øvelse - rens dine data + +I denne lektion vil du bruge data fra 80.000 UFO-observationer, indsamlet af [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Disse data har nogle interessante beskrivelser af UFO-observationer, for eksempel: + +- **Lang eksempelbeskrivelse.** "En mand kommer ud af en lysstråle, der skinner på en græsmark om natten, og han løber mod Texas Instruments' parkeringsplads". +- **Kort eksempelbeskrivelse.** "lysene jagtede os". + +Regnearket [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) inkluderer kolonner om `city`, `state` og `country`, hvor observationen fandt sted, objektets `shape` og dets `latitude` og `longitude`. + +I den tomme [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb), der er inkluderet i denne lektion: + +1. Importer `pandas`, `matplotlib` og `numpy`, som du gjorde i tidligere lektioner, og importer UFO-regnearket. Du kan tage et kig på et eksempel-datasæt: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Konverter UFO-dataene til en lille dataframe med friske titler. Tjek de unikke værdier i `Country`-feltet. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Nu kan du reducere mængden af data, vi skal håndtere, ved at droppe eventuelle null-værdier og kun importere observationer mellem 1-60 sekunder: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Importer Scikit-learns `LabelEncoder`-bibliotek for at konvertere tekstværdier for lande til et nummer: + + ✅ LabelEncoder koder data alfabetisk + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Dine data bør se sådan ud: + + ```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 + ``` + +## Øvelse - byg din model + +Nu kan du gøre dig klar til at træne en model ved at opdele dataene i trænings- og testgrupper. + +1. Vælg de tre funktioner, du vil træne på som din X-vektor, og y-vektoren vil være `Country`. Du vil kunne indtaste `Seconds`, `Latitude` og `Longitude` og få et land-id som resultat. + + ```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. Træn din model ved hjælp af logistisk 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)) + ``` + +Nøjagtigheden er ikke dårlig **(omkring 95%)**, hvilket ikke er overraskende, da `Country` og `Latitude/Longitude` korrelerer. + +Den model, du har oprettet, er ikke særlig revolutionerende, da du burde kunne udlede et `Country` fra dets `Latitude` og `Longitude`, men det er en god øvelse at prøve at træne fra rå data, som du har renset, eksporteret og derefter bruge denne model i en webapp. + +## Øvelse - 'pickle' din model + +Nu er det tid til at _pickle_ din model! Du kan gøre det med få linjer kode. Når den er _pickled_, skal du indlæse din pickled model og teste den mod en eksempel-datarray, der indeholder værdier for sekunder, breddegrad og længdegrad. + +```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]])) +``` + +Modellen returnerer **'3'**, hvilket er landekoden for Storbritannien. Vildt! 👽 + +## Øvelse - byg en Flask-app + +Nu kan du bygge en Flask-app til at kalde din model og returnere lignende resultater, men på en mere visuelt tiltalende måde. + +1. Start med at oprette en mappe kaldet **web-app** ved siden af _notebook.ipynb_-filen, hvor din _ufo-model.pkl_-fil ligger. + +1. I den mappe skal du oprette tre flere mapper: **static**, med en mappe **css** indeni, og **templates**. Du bør nu have følgende filer og mapper: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Se løsningsmappen for at få et overblik over den færdige app + +1. Den første fil, der skal oprettes i _web-app_-mappen, er **requirements.txt**-filen. Ligesom _package.json_ i en JavaScript-app, lister denne fil afhængigheder, der kræves af appen. I **requirements.txt** tilføj linjerne: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Kør nu denne fil ved at navigere til _web-app_: + + ```bash + cd web-app + ``` + +1. I din terminal skal du skrive `pip install` for at installere de biblioteker, der er angivet i _requirements.txt_: + + ```bash + pip install -r requirements.txt + ``` + +1. Nu er du klar til at oprette tre flere filer for at færdiggøre appen: + + 1. Opret **app.py** i roden. + 2. Opret **index.html** i _templates_-mappen. + 3. Opret **styles.css** i _static/css_-mappen. + +1. Udfyld _styles.css_-filen med nogle få stilarter: + + ```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. Dernæst skal du udfylde _index.html_-filen: + + ```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 }}

                      + +
                      + +
                      + + + + ``` + + Tag et kig på templating i denne fil. Bemærk 'mustache'-syntaksen omkring variabler, der vil blive leveret af appen, som for eksempel prediction-teksten: `{{}}`. Der er også en formular, der sender en prediction til `/predict`-ruten. + + Endelig er du klar til at bygge Python-filen, der driver forbruget af modellen og visningen af forudsigelser: + +1. I `app.py` tilføj: + + ```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: Når du tilføjer [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode), mens du kører webappen ved hjælp af Flask, vil eventuelle ændringer, du foretager i din applikation, straks blive afspejlet uden behov for at genstarte serveren. Pas på! Aktiver ikke denne tilstand i en produktionsapp. + +Hvis du kører `python app.py` eller `python3 app.py` - starter din webserver lokalt, og du kan udfylde en kort formular for at få svar på dit brændende spørgsmål om, hvor UFO'er er blevet observeret! + +Før du gør det, skal du tage et kig på delene af `app.py`: + +1. Først indlæses afhængigheder, og appen starter. +1. Derefter importeres modellen. +1. Derefter renderes index.html på hjemmeruten. + +På `/predict`-ruten sker der flere ting, når formularen sendes: + +1. Formularvariablerne indsamles og konverteres til en numpy-array. De sendes derefter til modellen, og en prediction returneres. +2. De lande, vi ønsker vist, genrenderes som læsbar tekst fra deres forudsagte landekode, og den værdi sendes tilbage til index.html for at blive renderet i templaten. + +At bruge en model på denne måde, med Flask og en pickled model, er relativt ligetil. Det sværeste er at forstå, hvilken form dataene skal have for at blive sendt til modellen for at få en prediction. Det afhænger helt af, hvordan modellen blev trænet. Denne har tre datapunkter, der skal indtastes for at få en prediction. + +I en professionel sammenhæng kan du se, hvor vigtig god kommunikation er mellem dem, der træner modellen, og dem, der bruger den i en web- eller mobilapp. I vores tilfælde er det kun én person, dig! + +--- + +## 🚀 Udfordring + +I stedet for at arbejde i en notebook og importere modellen til Flask-appen, kunne du træne modellen direkte i Flask-appen! Prøv at konvertere din Python-kode i notebooken, måske efter dine data er renset, til at træne modellen fra appen på en rute kaldet `train`. Hvad er fordele og ulemper ved at forfølge denne metode? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Der er mange måder at bygge en webapp på, der kan bruge ML-modeller. Lav en liste over måder, du kunne bruge JavaScript eller Python til at bygge en webapp, der udnytter machine learning. Overvej arkitektur: Skal modellen blive i appen eller leve i skyen? Hvis det sidste, hvordan ville du få adgang til den? Tegn en arkitekturmodel for en anvendt ML-webløsning. + +## Opgave + +[Prøv en anden model](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/3-Web-App/1-Web-App/assignment.md b/translations/da/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 000000000..33e69b193 --- /dev/null +++ b/translations/da/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,25 @@ + +# Prøv en anden model + +## Instruktioner + +Nu hvor du har bygget en webapp ved hjælp af en trænet regressionsmodel, skal du bruge en af modellerne fra en tidligere lektion om regression til at lave denne webapp igen. Du kan beholde stilen eller designe den anderledes for at afspejle græskardataene. Sørg for at ændre input, så de passer til din models træningsmetode. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| -------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ----------------------------------- | +| | Webappen fungerer som forventet og er implementeret i skyen | Webappen har fejl eller viser uventede resultater | Webappen fungerer ikke korrekt | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/3-Web-App/README.md b/translations/da/3-Web-App/README.md new file mode 100644 index 000000000..f1fba0fb0 --- /dev/null +++ b/translations/da/3-Web-App/README.md @@ -0,0 +1,35 @@ + +# Byg en webapp til at bruge din ML-model + +I denne del af pensum vil du blive introduceret til et anvendt ML-emne: hvordan du gemmer din Scikit-learn-model som en fil, der kan bruges til at lave forudsigelser i en webapplikation. Når modellen er gemt, lærer du, hvordan du bruger den i en webapp bygget i Flask. Først opretter du en model ved hjælp af nogle data, der handler om UFO-observationer! Derefter bygger du en webapp, der giver dig mulighed for at indtaste et antal sekunder sammen med en bredde- og længdegradsværdi for at forudsige, hvilket land der rapporterede at have set en UFO. + +![UFO Parkering](../../../3-Web-App/images/ufo.jpg) + +Foto af Michael HerrenUnsplash + +## Lektioner + +1. [Byg en Webapp](1-Web-App/README.md) + +## Krediteringer + +"Byg en Webapp" blev skrevet med ♥️ af [Jen Looper](https://twitter.com/jenlooper). + +♥️ Quizzerne blev skrevet af Rohan Raj. + +Datasættet er hentet fra [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +Webapp-arkitekturen blev delvist foreslået af [denne artikel](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) og [dette repo](https://github.com/abhinavsagar/machine-learning-deployment) af Abhinav Sagar. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/1-Introduction/README.md b/translations/da/4-Classification/1-Introduction/README.md new file mode 100644 index 000000000..fa1e05e9c --- /dev/null +++ b/translations/da/4-Classification/1-Introduction/README.md @@ -0,0 +1,313 @@ + +# Introduktion til klassifikation + +I disse fire lektioner vil du udforske et grundlæggende fokusområde inden for klassisk maskinlæring - _klassifikation_. Vi vil gennemgå brugen af forskellige klassifikationsalgoritmer med et datasæt om alle de fantastiske køkkener fra Asien og Indien. Håber du er sulten! + +![bare en knivspids!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Fejr pan-asiatiske køkkener i disse lektioner! Billede af [Jen Looper](https://twitter.com/jenlooper) + +Klassifikation er en form for [supervised learning](https://wikipedia.org/wiki/Supervised_learning), der har meget til fælles med regressionsteknikker. Hvis maskinlæring handler om at forudsige værdier eller navne på ting ved hjælp af datasæt, falder klassifikation generelt i to grupper: _binær klassifikation_ og _multiklassifikation_. + +[![Introduktion til klassifikation](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introduktion til klassifikation") + +> 🎥 Klik på billedet ovenfor for en video: MIT's John Guttag introducerer klassifikation + +Husk: + +- **Lineær regression** hjalp dig med at forudsige forholdet mellem variabler og lave præcise forudsigelser om, hvor et nyt datapunkt ville falde i forhold til den linje. Så du kunne forudsige _hvad prisen på et græskar ville være i september vs. december_, for eksempel. +- **Logistisk regression** hjalp dig med at opdage "binære kategorier": ved dette prisniveau, _er dette græskar orange eller ikke-orange_? + +Klassifikation bruger forskellige algoritmer til at bestemme andre måder at identificere en datapunkts label eller klasse. Lad os arbejde med dette køkkendatasæt for at se, om vi ved at observere en gruppe ingredienser kan bestemme dets oprindelseskøkken. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Denne lektion er tilgængelig i R!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Introduktion + +Klassifikation er en af de grundlæggende aktiviteter for maskinlæringsforskere og dataanalytikere. Fra grundlæggende klassifikation af en binær værdi ("er denne e-mail spam eller ikke?") til kompleks billedklassifikation og segmentering ved hjælp af computer vision, er det altid nyttigt at kunne sortere data i klasser og stille spørgsmål til dem. + +For at formulere processen på en mere videnskabelig måde skaber din klassifikationsmetode en forudsigelsesmodel, der gør det muligt for dig at kortlægge forholdet mellem inputvariabler og outputvariabler. + +![binær vs. multiklassifikation](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Binære vs. multiklasseproblemer, som klassifikationsalgoritmer skal håndtere. Infografik af [Jen Looper](https://twitter.com/jenlooper) + +Før vi begynder processen med at rense vores data, visualisere dem og forberede dem til vores ML-opgaver, lad os lære lidt om de forskellige måder, maskinlæring kan bruges til at klassificere data. + +Afledt af [statistik](https://wikipedia.org/wiki/Statistical_classification) bruger klassifikation med klassisk maskinlæring funktioner som `smoker`, `weight` og `age` til at bestemme _sandsynligheden for at udvikle X sygdom_. Som en supervised learning-teknik, der ligner de regression-øvelser, du udførte tidligere, er dine data mærket, og ML-algoritmerne bruger disse labels til at klassificere og forudsige klasser (eller 'features') af et datasæt og tildele dem til en gruppe eller et resultat. + +✅ Tag et øjeblik til at forestille dig et datasæt om køkkener. Hvad ville en multiklassemodel kunne svare på? Hvad ville en binær model kunne svare på? Hvad hvis du ville afgøre, om et givet køkken sandsynligvis ville bruge bukkehorn? Hvad hvis du ville se, om du, givet en pose med stjerneanis, artiskokker, blomkål og peberrod, kunne lave en typisk indisk ret? + +[![Skøre mystiske kurve](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Skøre mystiske kurve") + +> 🎥 Klik på billedet ovenfor for en video. Hele præmissen for showet 'Chopped' er den 'mystiske kurv', hvor kokke skal lave en ret ud af et tilfældigt valg af ingredienser. En ML-model ville helt sikkert have hjulpet! + +## Hej 'classifier' + +Spørgsmålet, vi vil stille til dette køkkendatasæt, er faktisk et **multiklasse-spørgsmål**, da vi har flere potentielle nationale køkkener at arbejde med. Givet en batch af ingredienser, hvilken af disse mange klasser passer dataene til? + +Scikit-learn tilbyder flere forskellige algoritmer til at klassificere data, afhængigt af hvilken type problem du vil løse. I de næste to lektioner vil du lære om flere af disse algoritmer. + +## Øvelse - rens og balancer dine data + +Den første opgave, før vi starter dette projekt, er at rense og **balancere** dine data for at opnå bedre resultater. Start med den tomme _notebook.ipynb_-fil i roden af denne mappe. + +Det første, der skal installeres, er [imblearn](https://imbalanced-learn.org/stable/). Dette er en Scikit-learn-pakke, der giver dig mulighed for bedre at balancere dataene (du vil lære mere om denne opgave om et øjeblik). + +1. For at installere `imblearn`, kør `pip install`, som vist her: + + ```python + pip install imblearn + ``` + +1. Importér de pakker, du har brug for til at importere dine data og visualisere dem, og importér også `SMOTE` fra `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 + ``` + + Nu er du klar til at importere dataene. + +1. Den næste opgave er at importere dataene: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Brug af `read_csv()` vil læse indholdet af csv-filen _cusines.csv_ og placere det i variablen `df`. + +1. Tjek dataenes form: + + ```python + df.head() + ``` + + De første fem rækker ser sådan ud: + + ```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. Få information om disse data ved at kalde `info()`: + + ```python + df.info() + ``` + + Din output ligner: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Øvelse - lær om køkkener + +Nu begynder arbejdet at blive mere interessant. Lad os opdage fordelingen af data pr. køkken. + +1. Plot dataene som søjler ved at kalde `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![fordeling af køkkendata](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Der er et begrænset antal køkkener, men fordelingen af data er ujævn. Det kan du rette! Før du gør det, skal du udforske lidt mere. + +1. Find ud af, hvor mange data der er tilgængelige pr. køkken, og print det ud: + + ```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}') + ``` + + Outputtet ser sådan ud: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Opdag ingredienser + +Nu kan du grave dybere ned i dataene og lære, hvad de typiske ingredienser pr. køkken er. Du bør rense tilbagevendende data, der skaber forvirring mellem køkkener, så lad os lære om dette problem. + +1. Opret en funktion `create_ingredient()` i Python for at oprette en ingrediens-datastruktur. Denne funktion starter med at fjerne en ubrugelig kolonne og sortere ingredienser efter deres antal: + + ```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 + ``` + + Nu kan du bruge den funktion til at få en idé om de ti mest populære ingredienser pr. køkken. + +1. Kald `create_ingredient()` og plot det ved at kalde `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Gør det samme for de japanske data: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![japansk](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Nu for de kinesiske ingredienser: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![kinesisk](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Plot de indiske ingredienser: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![indisk](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Til sidst, plot de koreanske ingredienser: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![koreansk](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Nu skal du fjerne de mest almindelige ingredienser, der skaber forvirring mellem forskellige køkkener, ved at kalde `drop()`: + + Alle elsker ris, hvidløg og ingefær! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Balancer datasættet + +Nu hvor du har renset dataene, skal du bruge [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" - til at balancere dem. + +1. Kald `fit_resample()`, denne strategi genererer nye prøver ved interpolation. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Ved at balancere dine data vil du få bedre resultater, når du klassificerer dem. Tænk på en binær klassifikation. Hvis de fleste af dine data er én klasse, vil en ML-model forudsige den klasse oftere, bare fordi der er flere data for den. Balancering af dataene fjerner denne skævhed. + +1. Nu kan du tjekke antallet af labels pr. ingrediens: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Din output ser sådan ud: + + ```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 + ``` + + Dataene er nu rene, balancerede og meget lækre! + +1. Det sidste trin er at gemme dine balancerede data, inklusive labels og features, i en ny datastruktur, der kan eksporteres til en fil: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Du kan tage et sidste kig på dataene ved hjælp af `transformed_df.head()` og `transformed_df.info()`. Gem en kopi af disse data til brug i fremtidige lektioner: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Denne friske CSV kan nu findes i roden af data-mappen. + +--- + +## 🚀Udfordring + +Dette pensum indeholder flere interessante datasæt. Gennemse `data`-mapperne og se, om nogle indeholder datasæt, der ville være passende til binær eller multiklasseklassifikation? Hvilke spørgsmål ville du stille til dette datasæt? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Udforsk SMOTEs API. Hvilke anvendelsesscenarier er det bedst egnet til? Hvilke problemer løser det? + +## Opgave + +[Udforsk klassifikationsmetoder](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/1-Introduction/assignment.md b/translations/da/4-Classification/1-Introduction/assignment.md new file mode 100644 index 000000000..a11188b6f --- /dev/null +++ b/translations/da/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Udforsk klassifikationsmetoder + +## Instruktioner + +I [Scikit-learn dokumentationen](https://scikit-learn.org/stable/supervised_learning.html) finder du en lang liste over måder at klassificere data på. Lav en lille skattejagt i disse dokumenter: dit mål er at finde klassifikationsmetoder og matche et datasæt fra dette pensum, et spørgsmål du kan stille om det, og en klassifikationsteknik. Opret et regneark eller en tabel i en .doc-fil og forklar, hvordan datasættet ville fungere med klassifikationsalgoritmen. + +## Vurderingskriterier + +| Kriterier | Eksemplarisk | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | et dokument præsenteres med en oversigt over 5 algoritmer sammen med en klassifikationsteknik. Oversigten er velbeskrevet og detaljeret. | et dokument præsenteres med en oversigt over 3 algoritmer sammen med en klassifikationsteknik. Oversigten er velbeskrevet og detaljeret. | et dokument præsenteres med en oversigt over færre end tre algoritmer sammen med en klassifikationsteknik, og oversigten er hverken velbeskrevet eller detaljeret. | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/1-Introduction/solution/Julia/README.md b/translations/da/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..b463d1495 --- /dev/null +++ b/translations/da/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/2-Classifiers-1/README.md b/translations/da/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 000000000..36fb6598f --- /dev/null +++ b/translations/da/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# Klassifikatorer for køkkener 1 + +I denne lektion vil du bruge det datasæt, du gemte fra den sidste lektion, fyldt med balancerede og rene data om køkkener. + +Du vil bruge dette datasæt med en række klassifikatorer til _at forudsige et givet nationalt køkken baseret på en gruppe ingredienser_. Mens du gør dette, vil du lære mere om nogle af de måder, algoritmer kan bruges til klassifikationsopgaver. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) +# Forberedelse + +Forudsat at du har gennemført [Lektion 1](../1-Introduction/README.md), skal du sikre dig, at en _cleaned_cuisines.csv_-fil findes i rodmappen `/data` for disse fire lektioner. + +## Øvelse - forudsige et nationalt køkken + +1. Arbejd i denne lektions _notebook.ipynb_-mappe, og importer filen sammen med Pandas-biblioteket: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Dataene ser sådan ud: + +| | 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. Importer nu flere biblioteker: + + ```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. Del X- og y-koordinaterne op i to dataframes til træning. `cuisine` kan være labels-dataframen: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Det vil se sådan ud: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Fjern kolonnen `Unnamed: 0` og kolonnen `cuisine` ved at kalde `drop()`. Gem resten af dataene som træningsfunktioner: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Dine funktioner ser sådan ud: + +| | 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 | + +Nu er du klar til at træne din model! + +## Valg af klassifikator + +Nu hvor dine data er rene og klar til træning, skal du beslutte, hvilken algoritme du vil bruge til opgaven. + +Scikit-learn grupperer klassifikation under Supervised Learning, og i den kategori finder du mange måder at klassificere på. [Udvalget](https://scikit-learn.org/stable/supervised_learning.html) kan virke overvældende ved første øjekast. Følgende metoder inkluderer alle klassifikationsteknikker: + +- Lineære modeller +- Support Vector Machines +- Stokastisk gradientnedstigning +- Nærmeste naboer +- Gaussian-processer +- Beslutningstræer +- Ensemble-metoder (voting Classifier) +- Multiclass- og multioutput-algoritmer (multiclass- og multilabel-klassifikation, multiclass-multioutput-klassifikation) + +> Du kan også bruge [neural netværk til at klassificere data](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), men det ligger uden for denne lektions omfang. + +### Hvilken klassifikator skal du vælge? + +Så, hvilken klassifikator skal du vælge? Ofte kan det være en god idé at prøve flere og se, hvilken der giver det bedste resultat. Scikit-learn tilbyder en [side-by-side sammenligning](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) på et oprettet datasæt, hvor KNeighbors, SVC på to måder, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB og QuadraticDiscriminationAnalysis sammenlignes og visualiseres: + +![sammenligning af klassifikatorer](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Diagrammer genereret fra Scikit-learns dokumentation + +> AutoML løser dette problem elegant ved at køre disse sammenligninger i skyen, så du kan vælge den bedste algoritme til dine data. Prøv det [her](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### En bedre tilgang + +En bedre tilgang end blot at gætte er at følge ideerne på dette downloadbare [ML Cheat Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Her opdager vi, at vi for vores multiclass-problem har nogle valgmuligheder: + +![cheatsheet for multiclass-problemer](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> En sektion af Microsofts Algorithm Cheat Sheet, der beskriver muligheder for multiclass-klassifikation + +✅ Download dette cheat sheet, print det ud, og hæng det op på din væg! + +### Overvejelser + +Lad os se, om vi kan ræsonnere os frem til forskellige tilgange givet de begrænsninger, vi har: + +- **Neural netværk er for tunge**. Givet vores rene, men minimale datasæt, og det faktum at vi kører træning lokalt via notebooks, er neural netværk for tunge til denne opgave. +- **Ingen to-klassifikator**. Vi bruger ikke en to-klassifikator, så det udelukker one-vs-all. +- **Beslutningstræ eller logistisk regression kunne fungere**. Et beslutningstræ kunne fungere, eller logistisk regression for multiclass-data. +- **Multiclass Boosted Decision Trees løser et andet problem**. Multiclass Boosted Decision Tree er mest egnet til ikke-parametriske opgaver, f.eks. opgaver designet til at opbygge rangeringer, så det er ikke nyttigt for os. + +### Brug af Scikit-learn + +Vi vil bruge Scikit-learn til at analysere vores data. Der er dog mange måder at bruge logistisk regression i Scikit-learn. Se på [parametrene, der kan angives](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Grundlæggende er der to vigtige parametre - `multi_class` og `solver` - som vi skal angive, når vi beder Scikit-learn om at udføre en logistisk regression. `multi_class`-værdien anvender en bestemt adfærd. Værdien af solver angiver, hvilken algoritme der skal bruges. Ikke alle solvers kan kombineres med alle `multi_class`-værdier. + +Ifølge dokumentationen, i multiclass-tilfældet, træningsalgoritmen: + +- **Bruger one-vs-rest (OvR)-skemaet**, hvis `multi_class`-indstillingen er sat til `ovr` +- **Bruger krydsentropitab**, hvis `multi_class`-indstillingen er sat til `multinomial`. (I øjeblikket understøttes `multinomial`-indstillingen kun af ‘lbfgs’, ‘sag’, ‘saga’ og ‘newton-cg’-solvers.) + +> 🎓 'Skemaet' her kan enten være 'ovr' (one-vs-rest) eller 'multinomial'. Da logistisk regression egentlig er designet til at understøtte binær klassifikation, giver disse skemaer den mulighed for bedre at håndtere multiclass-klassifikationsopgaver. [kilde](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 'Solveren' defineres som "den algoritme, der skal bruges i optimeringsproblemet". [kilde](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn tilbyder denne tabel til at forklare, hvordan solvers håndterer forskellige udfordringer præsenteret af forskellige typer datastrukturer: + +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Øvelse - del dataene + +Vi kan fokusere på logistisk regression til vores første træningsforsøg, da du for nylig har lært om sidstnævnte i en tidligere lektion. +Del dine data i trænings- og testgrupper ved at kalde `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) +``` + +## Øvelse - anvend logistisk regression + +Da du bruger multiclass-tilfældet, skal du vælge, hvilket _skema_ du vil bruge, og hvilken _solver_ du vil angive. Brug LogisticRegression med en multiclass-indstilling og **liblinear**-solveren til at træne. + +1. Opret en logistisk regression med multi_class sat til `ovr` og solver sat til `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)) + ``` + + ✅ Prøv en anden solver som `lbfgs`, som ofte er angivet som standard +> Bemærk, brug Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html)-funktionen til at flade dine data ud, når det er nødvendigt. +Nøjagtigheden er god ved over **80%**! + +1. Du kan se denne model i aktion ved at teste en række data (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Resultatet bliver udskrevet: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Prøv et andet rækkenummer og tjek resultaterne + +1. Gå dybere, og undersøg nøjagtigheden af denne forudsigelse: + + ```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() + ``` + + Resultatet bliver udskrevet - indisk køkken er dens bedste gæt, med god sandsynlighed: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Kan du forklare, hvorfor modellen er ret sikker på, at dette er et indisk køkken? + +1. Få flere detaljer ved at udskrive en klassifikationsrapport, som du gjorde i regression-lektionerne: + + ```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 | + +## 🚀Udfordring + +I denne lektion brugte du dine rensede data til at bygge en maskinlæringsmodel, der kan forudsige en national køkkenstil baseret på en række ingredienser. Tag dig tid til at læse om de mange muligheder, Scikit-learn tilbyder til at klassificere data. Gå dybere ned i konceptet 'solver' for at forstå, hvad der sker bag kulisserne. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Undersøg lidt mere om matematikken bag logistisk regression i [denne lektion](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## Opgave + +[Undersøg solvers](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/2-Classifiers-1/assignment.md b/translations/da/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 000000000..936511ad9 --- /dev/null +++ b/translations/da/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,23 @@ + +# Undersøg løserne +## Instruktioner + +I denne lektion lærte du om de forskellige løsningsmetoder, der kombinerer algoritmer med en maskinlæringsproces for at skabe en præcis model. Gennemgå de løsningsmetoder, der er nævnt i lektionen, og vælg to. Med dine egne ord skal du sammenligne og kontrastere disse to løsningsmetoder. Hvilken type problem løser de? Hvordan arbejder de med forskellige datastrukturer? Hvorfor ville du vælge den ene frem for den anden? +## Vurderingskriterier + +| Kriterier | Eksemplarisk | Tilstrækkelig | Kræver forbedring | +| --------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | En .doc-fil præsenteres med to afsnit, ét om hver løsningsmetode, der sammenligner dem grundigt. | En .doc-fil præsenteres med kun ét afsnit | Opgaven er ufuldstændig | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/da/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 000000000..ec1880789 --- /dev/null +++ b/translations/da/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/3-Classifiers-2/README.md b/translations/da/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 000000000..8d745b530 --- /dev/null +++ b/translations/da/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# Klassifikatorer for køkken 2 + +I denne anden lektion om klassifikation vil du udforske flere måder at klassificere numeriske data på. Du vil også lære om konsekvenserne ved at vælge én klassifikator frem for en anden. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +### Forudsætninger + +Vi antager, at du har gennemført de tidligere lektioner og har et renset datasæt i din `data`-mappe kaldet _cleaned_cuisines.csv_ i roden af denne 4-lektionsmappe. + +### Forberedelse + +Vi har indlæst din _notebook.ipynb_-fil med det rensede datasæt og har opdelt det i X- og y-dataframes, klar til modelbygning. + +## Et klassifikationskort + +Tidligere lærte du om de forskellige muligheder, du har, når du klassificerer data ved hjælp af Microsofts snydeark. Scikit-learn tilbyder et lignende, men mere detaljeret snydeark, der kan hjælpe dig med yderligere at indsnævre dine estimators (et andet ord for klassifikatorer): + +![ML Map fra Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Tip: [besøg dette kort online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) og klik dig igennem for at læse dokumentationen. + +### Planen + +Dette kort er meget nyttigt, når du har et klart overblik over dine data, da du kan 'gå' langs dets stier til en beslutning: + +- Vi har >50 prøver +- Vi ønsker at forudsige en kategori +- Vi har mærkede data +- Vi har færre end 100K prøver +- ✨ Vi kan vælge en Linear SVC +- Hvis det ikke virker, da vi har numeriske data + - Vi kan prøve en ✨ KNeighbors Classifier + - Hvis det ikke virker, prøv ✨ SVC og ✨ Ensemble Classifiers + +Dette er en meget nyttig vej at følge. + +## Øvelse - opdel dataene + +Følg denne vej, og start med at importere nogle biblioteker, der skal bruges. + +1. Importér de nødvendige biblioteker: + + ```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. Opdel dine trænings- og testdata: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Linear SVC klassifikator + +Support-Vector clustering (SVC) er en del af Support-Vector-maskinerne inden for ML-teknikker (læs mere om disse nedenfor). I denne metode kan du vælge en 'kernel' for at beslutte, hvordan mærkerne skal grupperes. Parameteren 'C' refererer til 'regularization', som regulerer parametrenes indflydelse. Kernelen kan være en af [flere](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); her sætter vi den til 'linear' for at sikre, at vi udnytter Linear SVC. Sandsynlighed er som standard 'false'; her sætter vi den til 'true' for at indsamle sandsynlighedsvurderinger. Vi sætter den tilfældige tilstand til '0' for at blande dataene og få sandsynligheder. + +### Øvelse - anvend en Linear SVC + +Start med at oprette et array af klassifikatorer. Du vil gradvist tilføje til dette array, mens vi tester. + +1. Start med en Linear SVC: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Træn din model ved hjælp af Linear SVC og udskriv en 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)) + ``` + + Resultatet er ret godt: + + ```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 klassifikator + +K-Neighbors er en del af "neighbors"-familien af ML-metoder, som kan bruges til både superviseret og usuperviseret læring. I denne metode oprettes et foruddefineret antal punkter, og data samles omkring disse punkter, så generaliserede mærker kan forudsiges for dataene. + +### Øvelse - anvend K-Neighbors klassifikatoren + +Den tidligere klassifikator var god og fungerede godt med dataene, men måske kan vi opnå bedre nøjagtighed. Prøv en K-Neighbors klassifikator. + +1. Tilføj en linje til dit klassifikator-array (tilføj et komma efter Linear SVC-elementet): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Resultatet er lidt dårligere: + + ```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 + ``` + + ✅ Lær om [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Support Vector Classifier + +Support-Vector klassifikatorer er en del af [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine)-familien af ML-metoder, der bruges til klassifikations- og regressionopgaver. SVM'er "kortlægger træningseksempler til punkter i rummet" for at maksimere afstanden mellem to kategorier. Efterfølgende data kortlægges ind i dette rum, så deres kategori kan forudsiges. + +### Øvelse - anvend en Support Vector Classifier + +Lad os prøve at opnå lidt bedre nøjagtighed med en Support Vector Classifier. + +1. Tilføj et komma efter K-Neighbors-elementet, og tilføj derefter denne linje: + + ```python + 'SVC': SVC(), + ``` + + Resultatet er ret godt! + + ```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 + ``` + + ✅ Lær om [Support-Vectors](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Ensemble Classifiers + +Lad os følge stien helt til slutningen, selvom den tidligere test var ret god. Lad os prøve nogle 'Ensemble Classifiers', specifikt Random Forest og AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Resultatet er meget godt, især for 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 +``` + +✅ Lær om [Ensemble Classifiers](https://scikit-learn.org/stable/modules/ensemble.html) + +Denne metode inden for Machine Learning "kombinerer forudsigelserne fra flere basismodeller" for at forbedre modellens kvalitet. I vores eksempel brugte vi Random Trees og AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), en gennemsnitsmetode, bygger en 'skov' af 'beslutningstræer' med tilfældighed for at undgå overtilpasning. Parameteren n_estimators er sat til antallet af træer. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) tilpasser en klassifikator til et datasæt og tilpasser derefter kopier af den klassifikator til det samme datasæt. Den fokuserer på vægten af forkert klassificerede elementer og justerer tilpasningen for den næste klassifikator for at rette op. + +--- + +## 🚀Udfordring + +Hver af disse teknikker har et stort antal parametre, som du kan justere. Undersøg hver enkelt tekniks standardparametre, og overvej, hvad justering af disse parametre ville betyde for modellens kvalitet. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Der er mange fagudtryk i disse lektioner, så tag et øjeblik til at gennemgå [denne liste](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) med nyttig terminologi! + +## Opgave + +[Parameterleg](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/3-Classifiers-2/assignment.md b/translations/da/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 000000000..24c52876a --- /dev/null +++ b/translations/da/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# Parameterleg + +## Instruktioner + +Der er mange parametre, der er forudindstillet, når man arbejder med disse klassifikatorer. Intellisense i VS Code kan hjælpe dig med at udforske dem. Vælg en af ML-klassifikationsteknikkerne i denne lektion og gen-træn modeller ved at justere forskellige parameterværdier. Lav en notebook, der forklarer, hvorfor nogle ændringer forbedrer modellens kvalitet, mens andre forringer den. Vær detaljeret i din besvarelse. + +## Vurderingskriterier + +| Kriterier | Eksemplarisk | Tilstrækkelig | Kræver forbedring | +| --------- | -------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------- | +| | En notebook præsenteres med en fuldt opbygget klassifikator, hvor parametre er justeret, og ændringer er forklaret i tekstbokse | En notebook præsenteres delvist eller er dårligt forklaret | En notebook er fejlbehæftet eller mangelfuld | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/da/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 000000000..ce8e4f54c --- /dev/null +++ b/translations/da/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/4-Applied/README.md b/translations/da/4-Classification/4-Applied/README.md new file mode 100644 index 000000000..f80294b58 --- /dev/null +++ b/translations/da/4-Classification/4-Applied/README.md @@ -0,0 +1,329 @@ + +# Byg en webapp til anbefaling af køkkener + +I denne lektion vil du bygge en klassifikationsmodel ved hjælp af nogle af de teknikker, du har lært i tidligere lektioner, og med det lækre køkkendatasæt, der er blevet brugt gennem hele denne serie. Derudover vil du bygge en lille webapp til at bruge en gemt model, der udnytter Onnx's web-runtime. + +En af de mest praktiske anvendelser af maskinlæring er at bygge anbefalingssystemer, og du kan tage det første skridt i den retning i dag! + +[![Præsentation af denne webapp](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 Klik på billedet ovenfor for en video: Jen Looper bygger en webapp ved hjælp af klassificerede køkkendata + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +I denne lektion vil du lære: + +- Hvordan man bygger en model og gemmer den som en Onnx-model +- Hvordan man bruger Netron til at inspicere modellen +- Hvordan man bruger din model i en webapp til inferens + +## Byg din model + +At bygge anvendte ML-systemer er en vigtig del af at udnytte disse teknologier til dine forretningssystemer. Du kan bruge modeller i dine webapplikationer (og dermed bruge dem offline, hvis nødvendigt) ved hjælp af Onnx. + +I en [tidligere lektion](../../3-Web-App/1-Web-App/README.md) byggede du en regressionsmodel om UFO-observationer, "picklede" den og brugte den i en Flask-app. Selvom denne arkitektur er meget nyttig at kende, er det en fuld-stack Python-app, og dine krav kan inkludere brugen af en JavaScript-applikation. + +I denne lektion kan du bygge et grundlæggende JavaScript-baseret system til inferens. Først skal du dog træne en model og konvertere den til brug med Onnx. + +## Øvelse - træning af klassifikationsmodel + +Start med at træne en klassifikationsmodel ved hjælp af det rensede køkkendatasæt, vi har brugt. + +1. Start med at importere nyttige biblioteker: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Du skal bruge '[skl2onnx](https://onnx.ai/sklearn-onnx/)' til at hjælpe med at konvertere din Scikit-learn-model til Onnx-format. + +1. Arbejd derefter med dine data på samme måde som i tidligere lektioner ved at læse en CSV-fil med `read_csv()`: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Fjern de første to unødvendige kolonner og gem de resterende data som 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Gem etiketterne som 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Start træningsrutinen + +Vi vil bruge 'SVC'-biblioteket, som har god nøjagtighed. + +1. Importer de relevante biblioteker fra 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. Opdel trænings- og testdatasæt: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Byg en SVC-klassifikationsmodel, som du gjorde i den tidligere lektion: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Test nu din model ved at kalde `predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Udskriv en klassifikationsrapport for at kontrollere modellens kvalitet: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Som vi så før, er nøjagtigheden god: + + ```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 + ``` + +### Konverter din model til Onnx + +Sørg for at udføre konverteringen med det korrekte antal tensorer. Dette datasæt har 380 ingredienser opført, så du skal angive det antal i `FloatTensorType`: + +1. Konverter med et tensorantal på 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. Opret onx-filen og gem den som **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Bemærk, at du kan angive [indstillinger](https://onnx.ai/sklearn-onnx/parameterized.html) i dit konverteringsscript. I dette tilfælde angav vi 'nocl' til at være True og 'zipmap' til at være False. Da dette er en klassifikationsmodel, har du mulighed for at fjerne ZipMap, som producerer en liste over ordbøger (ikke nødvendigt). `nocl` refererer til klasseinformation, der inkluderes i modellen. Reducer modellens størrelse ved at sætte `nocl` til 'True'. + +Ved at køre hele notebooken vil du nu bygge en Onnx-model og gemme den i denne mappe. + +## Se din model + +Onnx-modeller er ikke særlig synlige i Visual Studio Code, men der er en meget god gratis software, som mange forskere bruger til at visualisere modellen for at sikre, at den er korrekt bygget. Download [Netron](https://github.com/lutzroeder/Netron) og åbn din model.onnx-fil. Du kan se din simple model visualiseret med dens 380 inputs og klassifikator angivet: + +![Netron visualisering](../../../../4-Classification/4-Applied/images/netron.png) + +Netron er et nyttigt værktøj til at se dine modeller. + +Nu er du klar til at bruge denne smarte model i en webapp. Lad os bygge en app, der vil være nyttig, når du kigger i dit køleskab og prøver at finde ud af, hvilken kombination af dine resterende ingredienser du kan bruge til at lave en given ret, som bestemt af din model. + +## Byg en anbefalingswebapplikation + +Du kan bruge din model direkte i en webapp. Denne arkitektur giver dig også mulighed for at køre den lokalt og endda offline, hvis nødvendigt. Start med at oprette en `index.html`-fil i den samme mappe, hvor du gemte din `model.onnx`-fil. + +1. I denne fil _index.html_, tilføj følgende markup: + + ```html + + +
                      + Cuisine Matcher +
                      + + ... + + + ``` + +1. Arbejd nu inden for `body`-tags og tilføj lidt markup for at vise en liste med afkrydsningsfelter, der afspejler nogle ingredienser: + + ```html +

                      Check your refrigerator. What can you create?

                      +
                      +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      + +
                      + + +
                      +
                      +
                      + +
                      + ``` + + Bemærk, at hvert afkrydsningsfelt har en værdi. Dette afspejler den indeks, hvor ingrediensen findes i henhold til datasættet. Æble, for eksempel, i denne alfabetiske liste, optager den femte kolonne, så dens værdi er '4', da vi starter med at tælle fra 0. Du kan konsultere [ingredients spreadsheet](../../../../4-Classification/data/ingredient_indexes.csv) for at finde en given ingrediens' indeks. + + Fortsæt dit arbejde i index.html-filen, og tilføj et script-blok, hvor modellen kaldes efter den sidste lukkende ``. + +1. Først, importer [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime bruges til at muliggøre kørsel af dine Onnx-modeller på tværs af en bred vifte af hardwareplatforme, inklusive optimeringer og en API til brug. + +1. Når Runtime er på plads, kan du kalde det: + + ```html + + ``` + +I denne kode sker der flere ting: + +1. Du oprettede et array med 380 mulige værdier (1 eller 0), der skal indstilles og sendes til modellen til inferens, afhængigt af om et afkrydsningsfelt er markeret. +2. Du oprettede et array med afkrydsningsfelter og en måde at afgøre, om de blev markeret i en `init`-funktion, der kaldes, når applikationen starter. Når et afkrydsningsfelt er markeret, ændres `ingredients`-arrayet for at afspejle den valgte ingrediens. +3. Du oprettede en `testCheckboxes`-funktion, der kontrollerer, om nogen afkrydsningsfelter blev markeret. +4. Du bruger `startInference`-funktionen, når knappen trykkes, og hvis nogen afkrydsningsfelter er markeret, starter du inferens. +5. Inferensrutinen inkluderer: + 1. Opsætning af en asynkron indlæsning af modellen + 2. Oprettelse af en Tensor-struktur til at sende til modellen + 3. Oprettelse af 'feeds', der afspejler `float_input`-input, som du oprettede, da du trænede din model (du kan bruge Netron til at verificere det navn) + 4. Afsendelse af disse 'feeds' til modellen og venten på et svar + +## Test din applikation + +Åbn en terminalsession i Visual Studio Code i den mappe, hvor din index.html-fil ligger. Sørg for, at du har [http-server](https://www.npmjs.com/package/http-server) installeret globalt, og skriv `http-server` ved prompten. En localhost bør åbne, og du kan se din webapp. Tjek, hvilket køkken der anbefales baseret på forskellige ingredienser: + +![webapp med ingredienser](../../../../4-Classification/4-Applied/images/web-app.png) + +Tillykke, du har oprettet en 'anbefalings'-webapp med nogle få felter. Tag dig tid til at udbygge dette system! + +## 🚀Udfordring + +Din webapp er meget minimal, så fortsæt med at udbygge den ved hjælp af ingredienser og deres indekser fra [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv)-data. Hvilke smagskombinationer fungerer for at skabe en given national ret? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Selvom denne lektion kun berørte nytten af at skabe et anbefalingssystem for madingredienser, er dette område af ML-applikationer meget rigt på eksempler. Læs mere om, hvordan disse systemer bygges: + +- 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/ + +## Opgave + +[Byg en ny anbefaler](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/4-Applied/assignment.md b/translations/da/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..e2d0dcdd8 --- /dev/null +++ b/translations/da/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Byg en anbefalingsmotor + +## Instruktioner + +Baseret på dine øvelser i denne lektion ved du nu, hvordan man bygger en JavaScript-baseret webapp ved hjælp af Onnx Runtime og en konverteret Onnx-model. Eksperimentér med at bygge en ny anbefalingsmotor ved hjælp af data fra disse lektioner eller fra andre kilder (husk at give kredit). Du kunne for eksempel lave en anbefalingsmotor for kæledyr baseret på forskellige personlighedstræk eller en anbefalingsmotor for musikgenrer baseret på en persons humør. Vær kreativ! + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | --------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | En webapp og en notebook præsenteres, begge veldokumenterede og fungerende | En af dem mangler eller har fejl | Begge mangler eller har fejl | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/4-Classification/README.md b/translations/da/4-Classification/README.md new file mode 100644 index 000000000..e7cde23dc --- /dev/null +++ b/translations/da/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Kom godt i gang med klassifikation + +## Regionalt emne: Lækre asiatiske og indiske køkkener 🍜 + +I Asien og Indien er madtraditionerne utroligt mangfoldige og meget lækre! Lad os se på data om regionale køkkener for at prøve at forstå deres ingredienser. + +![Thailandsk madbod](../../../4-Classification/images/thai-food.jpg) +> Foto af Lisheng ChangUnsplash + +## Hvad du vil lære + +I denne sektion bygger du videre på din tidligere læring om regression og lærer om andre klassifikatorer, som du kan bruge til bedre at forstå dataene. + +> Der findes nyttige low-code værktøjer, der kan hjælpe dig med at arbejde med klassifikationsmodeller. Prøv [Azure ML til denne opgave](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lektioner + +1. [Introduktion til klassifikation](1-Introduction/README.md) +2. [Flere klassifikatorer](2-Classifiers-1/README.md) +3. [Endnu flere klassifikatorer](3-Classifiers-2/README.md) +4. [Anvendt ML: byg en webapp](4-Applied/README.md) + +## Krediteringer + +"Kom godt i gang med klassifikation" er skrevet med ♥️ af [Cassie Breviu](https://www.twitter.com/cassiebreviu) og [Jen Looper](https://www.twitter.com/jenlooper) + +Datasættet om lækre køkkener er hentet fra [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/1-Visualize/README.md b/translations/da/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..c6ad71036 --- /dev/null +++ b/translations/da/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Introduktion til clustering + +Clustering er en type [Unsupervised Learning](https://wikipedia.org/wiki/Unsupervised_learning), der antager, at et datasæt er ulabeleret, eller at dets input ikke er matchet med foruddefinerede output. Det bruger forskellige algoritmer til at sortere gennem ulabeleret data og levere grupperinger baseret på mønstre, det identificerer i dataene. + +[![No One Like You af PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You af PSquare") + +> 🎥 Klik på billedet ovenfor for en video. Mens du studerer maskinlæring med clustering, kan du nyde nogle nigerianske Dance Hall-numre - dette er en højt vurderet sang fra 2014 af PSquare. + +## [Quiz før forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +### Introduktion + +[Clustering](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) er meget nyttigt til dataudforskning. Lad os se, om det kan hjælpe med at opdage tendenser og mønstre i den måde, nigerianske publikum forbruger musik på. + +✅ Tag et øjeblik til at tænke over anvendelserne af clustering. I hverdagen sker clustering, når du har en bunke vasketøj og skal sortere familiens tøj 🧦👕👖🩲. I datavidenskab sker clustering, når man forsøger at analysere en brugers præferencer eller bestemme egenskaberne for et ulabeleret datasæt. Clustering hjælper på en måde med at skabe orden i kaos, som en sokkeskuffe. + +[![Introduktion til ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduktion til Clustering") + +> 🎥 Klik på billedet ovenfor for en video: MIT's John Guttag introducerer clustering + +I en professionel kontekst kan clustering bruges til at bestemme ting som markedssegmentering, f.eks. hvilke aldersgrupper der køber hvilke varer. En anden anvendelse kunne være anomalidetektion, måske for at opdage svindel i et datasæt med kreditkorttransaktioner. Eller du kunne bruge clustering til at identificere tumorer i en samling af medicinske scanninger. + +✅ Tænk et øjeblik over, hvordan du måske har stødt på clustering 'i det virkelige liv', i en bank-, e-handels- eller forretningskontekst. + +> 🎓 Interessant nok stammer clusteranalyse fra antropologi og psykologi i 1930'erne. Kan du forestille dig, hvordan det kunne være blevet brugt? + +Alternativt kunne du bruge det til at gruppere søgeresultater - f.eks. efter shoppinglinks, billeder eller anmeldelser. Clustering er nyttigt, når du har et stort datasæt, som du vil reducere og udføre mere detaljeret analyse på, så teknikken kan bruges til at lære om data, før andre modeller konstrueres. + +✅ Når dine data er organiseret i klynger, tildeler du dem et cluster-id, og denne teknik kan være nyttig til at bevare et datasæts privatliv; du kan i stedet referere til et datapunkt ved dets cluster-id frem for mere afslørende identificerbare data. Kan du komme på andre grunde til, hvorfor du ville referere til et cluster-id frem for andre elementer i klyngen for at identificere det? + +Uddyb din forståelse af clustering-teknikker i dette [Learn-modul](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) + +## Kom godt i gang med clustering + +[Scikit-learn tilbyder et stort udvalg](https://scikit-learn.org/stable/modules/clustering.html) af metoder til at udføre clustering. Den type, du vælger, afhænger af din anvendelsessituation. Ifølge dokumentationen har hver metode forskellige fordele. Her er en forenklet tabel over de metoder, der understøttes af Scikit-learn, og deres passende anvendelsessituationer: + +| Metodenavn | Anvendelsessituation | +| :--------------------------- | :-------------------------------------------------------------------- | +| K-Means | generelt formål, induktiv | +| Affinity propagation | mange, ujævne klynger, induktiv | +| Mean-shift | mange, ujævne klynger, induktiv | +| Spectral clustering | få, jævne klynger, transduktiv | +| Ward hierarchical clustering | mange, begrænsede klynger, transduktiv | +| Agglomerative clustering | mange, begrænsede, ikke-Euklidiske afstande, transduktiv | +| DBSCAN | ikke-flad geometri, ujævne klynger, transduktiv | +| OPTICS | ikke-flad geometri, ujævne klynger med variabel tæthed, transduktiv | +| Gaussian mixtures | flad geometri, induktiv | +| BIRCH | stort datasæt med outliers, induktiv | + +> 🎓 Hvordan vi skaber klynger har meget at gøre med, hvordan vi samler datapunkterne i grupper. Lad os pakke noget terminologi ud: +> +> 🎓 ['Transduktiv' vs. 'induktiv'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Transduktiv inferens er afledt af observerede træningstilfælde, der kortlægges til specifikke testtilfælde. Induktiv inferens er afledt af træningstilfælde, der kortlægges til generelle regler, som først derefter anvendes på testtilfælde. +> +> Et eksempel: Forestil dig, at du har et datasæt, der kun delvist er labeleret. Nogle ting er 'plader', nogle 'cd'er', og nogle er tomme. Din opgave er at give labels til de tomme. Hvis du vælger en induktiv tilgang, ville du træne en model, der leder efter 'plader' og 'cd'er', og anvende disse labels på dine ulabelerede data. Denne tilgang vil have svært ved at klassificere ting, der faktisk er 'kassetter'. En transduktiv tilgang, derimod, håndterer disse ukendte data mere effektivt, da den arbejder på at gruppere lignende ting sammen og derefter anvender en label til en gruppe. I dette tilfælde kunne klynger afspejle 'runde musikting' og 'firkantede musikting'. +> +> 🎓 ['Ikke-flad' vs. 'flad' geometri](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Afledt af matematisk terminologi refererer ikke-flad vs. flad geometri til målingen af afstande mellem punkter ved enten 'flade' ([Euklidiske](https://wikipedia.org/wiki/Euclidean_geometry)) eller 'ikke-flade' (ikke-Euklidiske) geometriske metoder. +> +>'Flad' i denne sammenhæng refererer til Euklidisk geometri (dele af det undervises som 'plan' geometri), og ikke-flad refererer til ikke-Euklidisk geometri. Hvad har geometri med maskinlæring at gøre? Som to felter, der er rodfæstet i matematik, skal der være en fælles måde at måle afstande mellem punkter i klynger, og det kan gøres på en 'flad' eller 'ikke-flad' måde, afhængigt af dataens natur. [Euklidiske afstande](https://wikipedia.org/wiki/Euclidean_distance) måles som længden af en linjesegment mellem to punkter. [Ikke-Euklidiske afstande](https://wikipedia.org/wiki/Non-Euclidean_geometry) måles langs en kurve. Hvis dine data, visualiseret, synes ikke at eksistere på et plan, kan du have brug for en specialiseret algoritme til at håndtere det. +> +![Flad vs Ikke-flad Geometri Infografik](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infografik af [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Afstande'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Klynger defineres af deres afstandsmatrix, f.eks. afstandene mellem punkter. Denne afstand kan måles på flere måder. Euklidiske klynger defineres af gennemsnittet af punktværdierne og indeholder et 'centroid' eller midtpunkt. Afstande måles således ved afstanden til dette centroid. Ikke-Euklidiske afstande refererer til 'clustroids', punktet tættest på andre punkter. Clustroids kan igen defineres på forskellige måder. +> +> 🎓 ['Begrænset'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Begrænset Clustering](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) introducerer 'semi-supervised' læring i denne unsupervised metode. Forholdene mellem punkter markeres som 'kan ikke linkes' eller 'skal linkes', så nogle regler tvinges på datasættet. +> +>Et eksempel: Hvis en algoritme sættes fri på en batch af ulabelerede eller semi-labelerede data, kan de klynger, den producerer, være af dårlig kvalitet. I eksemplet ovenfor kunne klyngerne gruppere 'runde musikting' og 'firkantede musikting' og 'trekantede ting' og 'kager'. Hvis der gives nogle begrænsninger eller regler at følge ("genstanden skal være lavet af plastik", "genstanden skal kunne producere musik"), kan dette hjælpe med at 'begrænse' algoritmen til at træffe bedre valg. +> +> 🎓 'Tæthed' +> +> Data, der er 'støjende', betragtes som 'tæt'. Afstandene mellem punkter i hver af dets klynger kan vise sig, ved undersøgelse, at være mere eller mindre tætte eller 'overfyldte', og derfor skal disse data analyseres med den passende clustering-metode. [Denne artikel](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) demonstrerer forskellen mellem at bruge K-Means clustering vs. HDBSCAN-algoritmer til at udforske et støjende datasæt med ujævn klyngedensitet. + +## Clustering-algoritmer + +Der findes over 100 clustering-algoritmer, og deres anvendelse afhænger af dataens natur. Lad os diskutere nogle af de vigtigste: + +- **Hierarkisk clustering**. Hvis et objekt klassificeres efter dets nærhed til et nærliggende objekt frem for et længere væk, dannes klynger baseret på deres medlemmers afstand til og fra andre objekter. Scikit-learns agglomerative clustering er hierarkisk. + + ![Hierarkisk clustering Infografik](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infografik af [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Centroid clustering**. Denne populære algoritme kræver valg af 'k', eller antallet af klynger, der skal dannes, hvorefter algoritmen bestemmer midtpunktet for en klynge og samler data omkring dette punkt. [K-means clustering](https://wikipedia.org/wiki/K-means_clustering) er en populær version af centroid clustering. Midtpunktet bestemmes af det nærmeste gennemsnit, deraf navnet. Den kvadrerede afstand fra klyngen minimeres. + + ![Centroid clustering Infografik](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infografik af [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Distributionsbaseret clustering**. Baseret på statistisk modellering fokuserer distributionsbaseret clustering på at bestemme sandsynligheden for, at et datapunkt tilhører en klynge, og tildeler det derefter. Gaussian mixture-metoder tilhører denne type. + +- **Tæthetsbaseret clustering**. Datapunkter tildeles klynger baseret på deres tæthed eller deres gruppering omkring hinanden. Datapunkter langt fra gruppen betragtes som outliers eller støj. DBSCAN, Mean-shift og OPTICS tilhører denne type clustering. + +- **Grid-baseret clustering**. For multidimensionelle datasæt oprettes et gitter, og dataene opdeles blandt gitterets celler, hvilket skaber klynger. + +## Øvelse - cluster dine data + +Clustering som teknik understøttes i høj grad af korrekt visualisering, så lad os komme i gang med at visualisere vores musikdata. Denne øvelse vil hjælpe os med at beslutte, hvilken af metoderne til clustering vi mest effektivt bør bruge til dataens natur. + +1. Åbn filen [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) i denne mappe. + +1. Importér pakken `Seaborn` for god datavisualisering. + + ```python + !pip install seaborn + ``` + +1. Tilføj sangdataene fra [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Indlæs en dataframe med nogle data om sangene. Gør dig klar til at udforske disse data ved at importere bibliotekerne og udskrive dataene: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Tjek de første par linjer af data: + + | | navn | album | kunstner | kunstner_top_genre | udgivelsesdato | længde | popularitet | dansbarhed | akustiskhed | energi | instrumentalisme | livlighed | lydstyrke | talbarhed | tempo | taktart | + | --- | ------------------------ | ---------------------------- | ------------------- | ------------------ | -------------- | ------ | ----------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | + | 0 | Sparky | Mandy & The Jungle | Cruel Santino | alternativ 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. Få nogle oplysninger om dataframe ved at kalde `info()`: + + ```python + df.info() + ``` + + Output ser sådan ud: + + ```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. Dobbelt-tjek for null-værdier ved at kalde `isnull()` og verificere, at summen er 0: + + ```python + df.isnull().sum() + ``` + + Ser godt ud: + + ```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. Beskriv data: + + ```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 | + +> 🤔 Hvis vi arbejder med clustering, en usuperviseret metode, der ikke kræver mærkede data, hvorfor viser vi så disse data med labels? I dataudforskningsfasen er de nyttige, men de er ikke nødvendige for, at clustering-algoritmerne fungerer. Du kunne lige så godt fjerne kolonneoverskrifterne og referere til dataene ved kolonnenummer. + +Se på de generelle værdier i dataene. Bemærk, at popularitet kan være '0', hvilket viser sange, der ikke har nogen rangering. Lad os fjerne dem snart. + +1. Brug et søjlediagram til at finde de mest populære genrer: + + ```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') + ``` + + ![mest populære](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Hvis du vil se flere topværdier, ændr `[:5]` til en større værdi, eller fjern det for at se alle. + +Bemærk, når den øverste genre er beskrevet som 'Missing', betyder det, at Spotify ikke har klassificeret den, så lad os fjerne den. + +1. Fjern manglende data ved at filtrere dem ud + + ```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') + ``` + + Tjek nu genrerne igen: + + ![mest populære](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. De tre øverste genrer dominerer klart dette datasæt. Lad os koncentrere os om `afro dancehall`, `afropop` og `nigerian pop`, og yderligere filtrere datasættet for at fjerne alt med en popularitetsværdi på 0 (hvilket betyder, at det ikke blev klassificeret med en popularitet i datasættet og kan betragtes som støj for vores formål): + + ```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. Lav en hurtig test for at se, om dataene korrelerer på nogen særlig stærk måde: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![korrelationer](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Den eneste stærke korrelation er mellem `energy` og `loudness`, hvilket ikke er så overraskende, da høj musik normalt er ret energisk. Ellers er korrelationerne relativt svage. Det vil være interessant at se, hvad en clustering-algoritme kan få ud af disse data. + + > 🎓 Bemærk, at korrelation ikke indebærer årsagssammenhæng! Vi har bevis for korrelation, men ingen bevis for årsagssammenhæng. En [sjov hjemmeside](https://tylervigen.com/spurious-correlations) har nogle visualiseringer, der understreger dette punkt. + +Er der nogen konvergens i dette datasæt omkring en sangs opfattede popularitet og dansbarhed? En FacetGrid viser, at der er koncentriske cirkler, der stemmer overens, uanset genre. Kunne det være, at nigerianske smag konvergerer på et bestemt niveau af dansbarhed for denne genre? + +✅ Prøv forskellige datapunkter (energy, loudness, speechiness) og flere eller andre musikgenrer. Hvad kan du opdage? Tag et kig på `df.describe()`-tabellen for at se den generelle spredning af datapunkterne. + +### Øvelse - datafordeling + +Er disse tre genrer markant forskellige i opfattelsen af deres dansbarhed, baseret på deres popularitet? + +1. Undersøg datafordelingen for vores tre øverste genrer for popularitet og dansbarhed langs en given x- og y-akse. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Du kan opdage koncentriske cirkler omkring et generelt konvergenspunkt, der viser fordelingen af punkter. + + > 🎓 Bemærk, at dette eksempel bruger en KDE (Kernel Density Estimate)-graf, der repræsenterer dataene ved hjælp af en kontinuerlig sandsynlighedstæthedskurve. Dette giver os mulighed for at fortolke data, når vi arbejder med flere fordelinger. + + Generelt stemmer de tre genrer løst overens med hensyn til deres popularitet og dansbarhed. At bestemme klynger i disse løst tilpassede data vil være en udfordring: + + ![fordeling](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Lav et scatterplot: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Et scatterplot af de samme akser viser et lignende mønster af konvergens + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Generelt kan du bruge scatterplots til at vise klynger af data, så det er meget nyttigt at mestre denne type visualisering. I næste lektion vil vi tage disse filtrerede data og bruge k-means clustering til at opdage grupper i disse data, der ser ud til at overlappe på interessante måder. + +--- + +## 🚀Udfordring + +Som forberedelse til næste lektion, lav et diagram over de forskellige clustering-algoritmer, du måske opdager og bruger i et produktionsmiljø. Hvilke slags problemer forsøger clustering at løse? + +## [Quiz efter lektion](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Før du anvender clustering-algoritmer, som vi har lært, er det en god idé at forstå naturen af dit datasæt. Læs mere om dette emne [her](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Denne nyttige artikel](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) guider dig gennem de forskellige måder, som forskellige clustering-algoritmer opfører sig på, givet forskellige datatyper. + +## Opgave + +[Undersøg andre visualiseringer for clustering](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/1-Visualize/assignment.md b/translations/da/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..b29e3a9cc --- /dev/null +++ b/translations/da/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Undersøg andre visualiseringer for klyngedannelse + +## Instruktioner + +I denne lektion har du arbejdet med nogle visualiseringsteknikker for at få en forståelse af, hvordan du kan plotte dine data som forberedelse til klyngedannelse. Særligt scatterplots er nyttige til at finde grupper af objekter. Undersøg forskellige metoder og forskellige biblioteker til at lave scatterplots, og dokumentér dit arbejde i en notebook. Du kan bruge data fra denne lektion, andre lektioner eller data, du selv finder (husk dog at kreditere kilden i din notebook). Plot nogle data ved hjælp af scatterplots og forklar, hvad du opdager. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ------------------------------------------------------------- | --------------------------------------------------------------------------------------- | ----------------------------------- | +| | En notebook præsenteres med fem veldokumenterede scatterplots | En notebook præsenteres med færre end fem scatterplots og er mindre godt dokumenteret | En ufuldstændig notebook præsenteres | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/da/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..e031ec52a --- /dev/null +++ b/translations/da/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/2-K-Means/README.md b/translations/da/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..a5eb6aebc --- /dev/null +++ b/translations/da/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# K-Means clustering + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +I denne lektion vil du lære, hvordan du opretter klynger ved hjælp af Scikit-learn og det nigerianske musikdatasæt, du importerede tidligere. Vi vil dække det grundlæggende i K-Means til klyngedannelse. Husk, som du lærte i den tidligere lektion, at der er mange måder at arbejde med klynger på, og den metode, du bruger, afhænger af dine data. Vi vil prøve K-Means, da det er den mest almindelige teknik til klyngedannelse. Lad os komme i gang! + +Begreber, du vil lære om: + +- Silhouettescore +- Albue-metoden +- Inerti +- Varians + +## Introduktion + +[K-Means Clustering](https://wikipedia.org/wiki/K-means_clustering) er en metode, der stammer fra signalbehandlingsområdet. Den bruges til at opdele og partitionere grupper af data i 'k' klynger ved hjælp af en række observationer. Hver observation arbejder på at gruppere et givet datapunkt tættest på dets nærmeste 'gennemsnit', eller midtpunktet af en klynge. + +Klyngerne kan visualiseres som [Voronoi-diagrammer](https://wikipedia.org/wiki/Voronoi_diagram), som inkluderer et punkt (eller 'frø') og dets tilsvarende område. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> Infografik af [Jen Looper](https://twitter.com/jenlooper) + +K-Means klyngedannelsesprocessen [udføres i en tretrinsproces](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Algoritmen vælger k-antal midtpunkter ved at tage stikprøver fra datasættet. Derefter gentager den: + 1. Den tildeler hver prøve til det nærmeste midtpunkt. + 2. Den skaber nye midtpunkter ved at tage gennemsnitsværdien af alle prøver, der er tildelt de tidligere midtpunkter. + 3. Derefter beregner den forskellen mellem de nye og gamle midtpunkter og gentager, indtil midtpunkterne stabiliseres. + +En ulempe ved at bruge K-Means er, at du skal fastsætte 'k', altså antallet af midtpunkter. Heldigvis hjælper 'albue-metoden' med at estimere en god startværdi for 'k'. Du vil prøve det om lidt. + +## Forudsætning + +Du vil arbejde i denne lektions [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) fil, som inkluderer dataimporten og den indledende rengøring, du lavede i den sidste lektion. + +## Øvelse - forberedelse + +Start med at tage et nyt kig på sangdataene. + +1. Opret et boxplot ved at kalde `boxplot()` for hver kolonne: + + ```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) + ``` + + Disse data er lidt støjende: ved at observere hver kolonne som et boxplot kan du se outliers. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Du kunne gennemgå datasættet og fjerne disse outliers, men det ville gøre dataene ret minimale. + +1. Vælg for nu, hvilke kolonner du vil bruge til din klyngedannelsesøvelse. Vælg dem med lignende intervaller og kod kolonnen `artist_top_genre` som numeriske data: + + ```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. Nu skal du vælge, hvor mange klynger du vil målrette. Du ved, at der er 3 sanggenrer, som vi har udskilt fra datasættet, så lad os prøve med 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 + ``` + +Du ser en array udskrevet med forudsagte klynger (0, 1 eller 2) for hver række i dataframen. + +1. Brug denne array til at beregne en 'silhouettescore': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Silhouettescore + +Søg efter en silhouettescore tættere på 1. Denne score varierer fra -1 til 1, og hvis scoren er 1, er klyngen tæt og godt adskilt fra andre klynger. En værdi nær 0 repræsenterer overlappende klynger med prøver meget tæt på beslutningsgrænsen for de nærliggende klynger. [(Kilde)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Vores score er **.53**, altså midt i mellem. Dette indikerer, at vores data ikke er særligt velegnede til denne type klyngedannelse, men lad os fortsætte. + +### Øvelse - byg en model + +1. Importér `KMeans` og start klyngedannelsesprocessen. + + ```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_) + + ``` + + Der er nogle dele her, der kræver forklaring. + + > 🎓 range: Dette er iterationerne af klyngedannelsesprocessen. + + > 🎓 random_state: "Bestemmer tilfældig talgenerering til initialisering af midtpunkter." [Kilde](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "within-cluster sums of squares" måler den kvadrerede gennemsnitlige afstand af alle punkter inden for en klynge til klyngens midtpunkt. [Kilde](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inerti: K-Means algoritmer forsøger at vælge midtpunkter for at minimere 'inerti', "et mål for, hvor internt sammenhængende klynger er." [Kilde](https://scikit-learn.org/stable/modules/clustering.html). Værdien tilføjes til wcss-variablen ved hver iteration. + + > 🎓 k-means++: I [Scikit-learn](https://scikit-learn.org/stable/modules/clustering.html#k-means) kan du bruge 'k-means++'-optimeringen, som "initialiserer midtpunkterne til at være (generelt) fjernt fra hinanden, hvilket sandsynligvis fører til bedre resultater end tilfældig initialisering." + +### Albue-metoden + +Tidligere antog du, at fordi du har målrettet 3 sanggenrer, bør du vælge 3 klynger. Men er det tilfældet? + +1. Brug 'albue-metoden' for at være sikker. + + ```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() + ``` + + Brug den `wcss`-variabel, du byggede i det foregående trin, til at oprette et diagram, der viser, hvor 'knækket' i albuen er, hvilket indikerer det optimale antal klynger. Måske er det **faktisk** 3! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Øvelse - vis klyngerne + +1. Prøv processen igen, denne gang med tre klynger, og vis klyngerne som et 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. Tjek modellens nøjagtighed: + + ```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))) + ``` + + Denne models nøjagtighed er ikke særlig god, og formen på klyngerne giver dig et hint om hvorfor. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Disse data er for ubalancerede, for lidt korrelerede, og der er for meget varians mellem kolonneværdierne til at danne gode klynger. Faktisk er de klynger, der dannes, sandsynligvis stærkt påvirket eller skævvredet af de tre genrekategorier, vi definerede ovenfor. Det var en læringsproces! + + I Scikit-learns dokumentation kan du se, at en model som denne, med klynger, der ikke er særlig godt afgrænsede, har et 'varians'-problem: + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infografik fra Scikit-learn + +## Varians + +Varians defineres som "gennemsnittet af de kvadrerede forskelle fra gennemsnittet" [(Kilde)](https://www.mathsisfun.com/data/standard-deviation.html). I konteksten af dette klyngedannelsesproblem refererer det til data, hvor tallene i vores datasæt har en tendens til at afvige lidt for meget fra gennemsnittet. + +✅ Dette er et godt tidspunkt at tænke over alle de måder, du kunne rette dette problem på. Justere dataene lidt mere? Bruge andre kolonner? Bruge en anden algoritme? Tip: Prøv at [skalere dine data](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) for at normalisere dem og teste andre kolonner. + +> Prøv denne '[variansberegner](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' for at forstå konceptet lidt bedre. + +--- + +## 🚀Udfordring + +Brug lidt tid med denne notebook og juster parametrene. Kan du forbedre modellens nøjagtighed ved at rense dataene mere (fjerne outliers, for eksempel)? Du kan bruge vægte til at give mere vægt til bestemte datapunkter. Hvad kan du ellers gøre for at skabe bedre klynger? + +Tip: Prøv at skalere dine data. Der er kommenteret kode i notebooken, der tilføjer standard skalering for at få datakolonnerne til at ligne hinanden mere i forhold til interval. Du vil opdage, at mens silhouettescoren går ned, udjævnes 'knækket' i albuegrafen. Dette skyldes, at hvis dataene ikke skaleres, får data med mindre varians mere vægt. Læs lidt mere om dette problem [her](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Tag et kig på en K-Means Simulator [som denne](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Du kan bruge dette værktøj til at visualisere prøvepunkter og bestemme deres midtpunkter. Du kan redigere dataenes tilfældighed, antal klynger og antal midtpunkter. Hjælper dette dig med at få en idé om, hvordan dataene kan grupperes? + +Tag også et kig på [dette handout om K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) fra Stanford. + +## Opgave + +[Prøv forskellige klyngedannelsesmetoder](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/2-K-Means/assignment.md b/translations/da/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..72f752b5d --- /dev/null +++ b/translations/da/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Prøv forskellige klyngemetoder + +## Instruktioner + +I denne lektion lærte du om K-Means klyngedannelse. Nogle gange er K-Means ikke passende for dine data. Opret en notebook ved hjælp af data enten fra disse lektioner eller fra et andet sted (angiv din kilde) og vis en anden klyngemetode, der IKKE bruger K-Means. Hvad lærte du? + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | -------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | En notebook præsenteres med en veldokumenteret klyngemodel | En notebook præsenteres uden god dokumentation og/eller ufuldstændig | Ufuldstændigt arbejde indsendes | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/da/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..1748f93a5 --- /dev/null +++ b/translations/da/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/5-Clustering/README.md b/translations/da/5-Clustering/README.md new file mode 100644 index 000000000..834f29273 --- /dev/null +++ b/translations/da/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Klyngemodeller til maskinlæring + +Klyngedannelse er en maskinlæringsopgave, hvor man forsøger at finde objekter, der ligner hinanden, og gruppere dem i grupper kaldet klynger. Det, der adskiller klyngedannelse fra andre tilgange inden for maskinlæring, er, at processen sker automatisk. Faktisk kan man sige, at det er det modsatte af superviseret læring. + +## Regionalt emne: klyngemodeller for en nigeriansk målgruppes musiksmag 🎧 + +Nigerias mangfoldige befolkning har en lige så mangfoldig musiksmag. Ved at bruge data hentet fra Spotify (inspireret af [denne artikel](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), kan vi se på noget af den musik, der er populær i Nigeria. Dette datasæt indeholder information om forskellige sanges 'danceability'-score, 'acousticness', lydstyrke, 'speechiness', popularitet og energi. Det bliver spændende at opdage mønstre i disse data! + +![En pladespiller](../../../5-Clustering/images/turntable.jpg) + +> Foto af Marcela LaskoskiUnsplash + +I denne lektionsserie vil du opdage nye måder at analysere data på ved hjælp af klyngedannelsesteknikker. Klyngedannelse er særligt nyttigt, når dit datasæt mangler labels. Hvis det har labels, kan klassifikationsteknikker, som dem du lærte i tidligere lektioner, være mere nyttige. Men i tilfælde, hvor du ønsker at gruppere ulabellede data, er klyngedannelse en fantastisk måde at opdage mønstre på. + +> Der findes nyttige low-code værktøjer, der kan hjælpe dig med at arbejde med klyngemodeller. Prøv [Azure ML til denne opgave](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Lektioner + +1. [Introduktion til klyngedannelse](1-Visualize/README.md) +2. [K-Means klyngedannelse](2-K-Means/README.md) + +## Credits + +Disse lektioner blev skrevet med 🎶 af [Jen Looper](https://www.twitter.com/jenlooper) med værdifulde anmeldelser fra [Rishit Dagli](https://rishit_dagli) og [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +Datasættet [Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) blev hentet fra Kaggle og er baseret på data fra Spotify. + +Nyttige K-Means eksempler, der bidrog til at skabe denne lektion, inkluderer denne [iris-undersøgelse](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), denne [introducerende notebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python), og dette [hypotetiske NGO-eksempel](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/1-Introduction-to-NLP/README.md b/translations/da/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..722fa50cc --- /dev/null +++ b/translations/da/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Introduktion til naturlig sprogbehandling + +Denne lektion dækker en kort historie og vigtige begreber inden for *naturlig sprogbehandling*, et underfelt af *computational linguistics*. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Introduktion + +NLP, som det ofte kaldes, er et af de mest kendte områder, hvor maskinlæring er blevet anvendt og brugt i produktionssoftware. + +✅ Kan du tænke på software, som du bruger hver dag, der sandsynligvis har noget NLP indbygget? Hvad med dine tekstbehandlingsprogrammer eller mobilapps, som du bruger regelmæssigt? + +Du vil lære om: + +- **Idéen om sprog**. Hvordan sprog udviklede sig, og hvad de vigtigste studieområder har været. +- **Definition og begreber**. Du vil også lære definitioner og begreber om, hvordan computere behandler tekst, herunder parsing, grammatik og identifikation af navneord og udsagnsord. Der er nogle kodningsopgaver i denne lektion, og flere vigtige begreber introduceres, som du senere vil lære at kode i de næste lektioner. + +## Computational linguistics + +Computational linguistics er et forsknings- og udviklingsområde gennem mange årtier, der studerer, hvordan computere kan arbejde med, og endda forstå, oversætte og kommunikere med sprog. Naturlig sprogbehandling (NLP) er et relateret felt, der fokuserer på, hvordan computere kan behandle 'naturlige', eller menneskelige, sprog. + +### Eksempel - telefon-diktering + +Hvis du nogensinde har dikteret til din telefon i stedet for at skrive eller stillet en virtuel assistent et spørgsmål, blev din tale konverteret til tekstform og derefter behandlet eller *parset* fra det sprog, du talte. De detekterede nøgleord blev derefter behandlet i et format, som telefonen eller assistenten kunne forstå og handle på. + +![forståelse](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Ægte lingvistisk forståelse er svært! Billede af [Jen Looper](https://twitter.com/jenlooper) + +### Hvordan er denne teknologi mulig? + +Dette er muligt, fordi nogen har skrevet et computerprogram til at gøre det. For nogle årtier siden forudsagde nogle science fiction-forfattere, at folk primært ville tale med deres computere, og at computere altid ville forstå præcis, hvad de mente. Desværre viste det sig at være et sværere problem, end mange forestillede sig, og selvom det er et meget bedre forstået problem i dag, er der betydelige udfordringer med at opnå 'perfekt' naturlig sprogbehandling, når det kommer til at forstå betydningen af en sætning. Dette er et særligt vanskeligt problem, når det kommer til at forstå humor eller opdage følelser som sarkasme i en sætning. + +På dette tidspunkt husker du måske skoleklasser, hvor læreren gennemgik grammatiske dele af en sætning. I nogle lande undervises elever i grammatik og lingvistik som et dedikeret fag, men i mange er disse emner inkluderet som en del af at lære et sprog: enten dit første sprog i folkeskolen (at lære at læse og skrive) og måske et andet sprog i gymnasiet. Bare rolig, hvis du ikke er ekspert i at skelne mellem navneord og udsagnsord eller adverbier og adjektiver! + +Hvis du har svært ved forskellen mellem *simpel nutid* og *nutid progressiv*, er du ikke alene. Dette er en udfordrende ting for mange mennesker, selv for modersmålstalere af et sprog. Den gode nyhed er, at computere er rigtig gode til at anvende formelle regler, og du vil lære at skrive kode, der kan *parse* en sætning lige så godt som et menneske. Den større udfordring, du vil undersøge senere, er at forstå *betydningen* og *følelsen* af en sætning. + +## Forudsætninger + +For denne lektion er den vigtigste forudsætning, at du kan læse og forstå sproget i denne lektion. Der er ingen matematiske problemer eller ligninger, der skal løses. Mens den oprindelige forfatter skrev denne lektion på engelsk, er den også oversat til andre sprog, så du kunne læse en oversættelse. Der er eksempler, hvor en række forskellige sprog bruges (for at sammenligne de forskellige grammatiske regler for forskellige sprog). Disse er *ikke* oversat, men den forklarende tekst er, så betydningen bør være klar. + +For kodningsopgaverne vil du bruge Python, og eksemplerne bruger Python 3.8. + +I denne sektion vil du have brug for og bruge: + +- **Python 3 forståelse**. Forståelse af programmeringssproget Python 3, denne lektion bruger input, loops, fil-læsning, arrays. +- **Visual Studio Code + udvidelse**. Vi vil bruge Visual Studio Code og dets Python-udvidelse. Du kan også bruge en Python IDE efter eget valg. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) er et forenklet tekstbehandlingsbibliotek til Python. Følg instruktionerne på TextBlob-siden for at installere det på dit system (installer også corpora som vist nedenfor): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Tip: Du kan køre Python direkte i VS Code-miljøer. Tjek [dokumentationen](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) for mere information. + +## At tale med maskiner + +Historien om at forsøge at få computere til at forstå menneskeligt sprog går årtier tilbage, og en af de tidligste videnskabsfolk, der overvejede naturlig sprogbehandling, var *Alan Turing*. + +### 'Turing-testen' + +Da Turing forskede i *kunstig intelligens* i 1950'erne, overvejede han, om en samtaletest kunne gives til et menneske og en computer (via skriftlig korrespondance), hvor mennesket i samtalen ikke var sikker på, om de kommunikerede med et andet menneske eller en computer. + +Hvis mennesket efter en vis længde af samtalen ikke kunne afgøre, om svarene kom fra en computer eller ej, kunne computeren så siges at *tænke*? + +### Inspirationen - 'imitationsspillet' + +Idéen til dette kom fra et selskabsspil kaldet *Imitationsspillet*, hvor en forhører er alene i et rum og har til opgave at afgøre, hvem af to personer (i et andet rum) er henholdsvis mand og kvinde. Forhøreren kan sende noter og skal forsøge at finde på spørgsmål, hvor de skriftlige svar afslører kønnet på den mystiske person. Selvfølgelig forsøger spillerne i det andet rum at narre forhøreren ved at besvare spørgsmål på en måde, der vildleder eller forvirrer forhøreren, samtidig med at de giver indtryk af at svare ærligt. + +### Udvikling af Eliza + +I 1960'erne udviklede en MIT-videnskabsmand ved navn *Joseph Weizenbaum* [*Eliza*](https://wikipedia.org/wiki/ELIZA), en computer-'terapeut', der ville stille mennesket spørgsmål og give indtryk af at forstå deres svar. Men selvom Eliza kunne parse en sætning og identificere visse grammatiske konstruktioner og nøgleord for at give et rimeligt svar, kunne den ikke siges at *forstå* sætningen. Hvis Eliza blev præsenteret for en sætning med formatet "**Jeg er** ked af det", kunne den omarrangere og erstatte ord i sætningen for at danne svaret "Hvor længe har **du været** ked af det". + +Dette gav indtryk af, at Eliza forstod udsagnet og stillede et opfølgende spørgsmål, mens den i virkeligheden ændrede tiden og tilføjede nogle ord. Hvis Eliza ikke kunne identificere et nøgleord, som den havde et svar på, ville den i stedet give et tilfældigt svar, der kunne være anvendeligt til mange forskellige udsagn. Eliza kunne nemt narres, for eksempel hvis en bruger skrev "**Du er** en cykel", kunne den svare med "Hvor længe har **jeg været** en cykel?", i stedet for et mere fornuftigt svar. + +[![Chat med Eliza](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Chat med Eliza") + +> 🎥 Klik på billedet ovenfor for en video om det originale ELIZA-program + +> Note: Du kan læse den originale beskrivelse af [Eliza](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract) udgivet i 1966, hvis du har en ACM-konto. Alternativt kan du læse om Eliza på [wikipedia](https://wikipedia.org/wiki/ELIZA) + +## Øvelse - kodning af en grundlæggende samtalebot + +En samtalebot, som Eliza, er et program, der indhenter brugerinput og ser ud til at forstå og svare intelligent. I modsætning til Eliza vil vores bot ikke have flere regler, der giver den indtryk af at have en intelligent samtale. I stedet vil vores bot kun have én evne, nemlig at holde samtalen i gang med tilfældige svar, der måske fungerer i næsten enhver triviel samtale. + +### Planen + +Dine trin, når du bygger en samtalebot: + +1. Udskriv instruktioner, der rådgiver brugeren om, hvordan man interagerer med botten +2. Start en løkke + 1. Accepter brugerinput + 2. Hvis brugeren har bedt om at afslutte, så afslut + 3. Behandl brugerinput og bestem svar (i dette tilfælde er svaret et tilfældigt valg fra en liste over mulige generiske svar) + 4. Udskriv svar +3. Gå tilbage til trin 2 + +### Bygning af botten + +Lad os oprette botten nu. Vi starter med at definere nogle sætninger. + +1. Opret denne bot selv i Python med følgende tilfældige svar: + + ```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?"] + ``` + + Her er noget eksempeloutput til vejledning (brugerinput er på linjerne, der starter med `>`): + + ```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! + ``` + + En mulig løsning på opgaven er [her](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Stop og overvej + + 1. Tror du, at de tilfældige svar ville 'narre' nogen til at tro, at botten faktisk forstod dem? + 2. Hvilke funktioner ville botten have brug for for at være mere effektiv? + 3. Hvis en bot virkelig kunne 'forstå' betydningen af en sætning, ville den så også have brug for at 'huske' betydningen af tidligere sætninger i en samtale? + +--- + +## 🚀Udfordring + +Vælg et af de "stop og overvej"-elementer ovenfor og prøv enten at implementere dem i kode eller skriv en løsning på papir ved hjælp af pseudokode. + +I den næste lektion vil du lære om en række andre tilgange til parsing af naturligt sprog og maskinlæring. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Tag et kig på referencerne nedenfor som yderligere læsemuligheder. + +### Referencer + +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. + +## Opgave + +[Søg efter en bot](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/da/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..52ca81374 --- /dev/null +++ b/translations/da/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Søg efter en bot + +## Instruktioner + +Bots er overalt. Din opgave: find en og adoptere den! Du kan finde dem på hjemmesider, i bankapplikationer og på telefonen, for eksempel når du ringer til finansielle tjenester for rådgivning eller kontoinformation. Analyser botten og se, om du kan forvirre den. Hvis du kan forvirre botten, hvorfor tror du, det skete? Skriv et kort essay om din oplevelse. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | +| | En hel side er skrevet, der forklarer den formodede botarkitektur og beskriver din oplevelse med den | Essayet er ufuldstændigt eller ikke godt undersøgt | Intet essay er indsendt | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/2-Tasks/README.md b/translations/da/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..120d149f3 --- /dev/null +++ b/translations/da/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Almindelige opgaver og teknikker inden for naturlig sprogbehandling + +For de fleste *naturlig sprogbehandling*-opgaver skal teksten, der skal behandles, opdeles, analyseres, og resultaterne gemmes eller krydsrefereres med regler og datasæt. Disse opgaver gør det muligt for programmøren at udlede _betydningen_ eller _intentionen_ eller blot _frekvensen_ af termer og ord i en tekst. + +## [Quiz før forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +Lad os udforske almindelige teknikker, der bruges til at behandle tekst. Kombineret med maskinlæring hjælper disse teknikker dig med at analysere store mængder tekst effektivt. Før du anvender ML på disse opgaver, skal vi dog forstå de problemer, som en NLP-specialist støder på. + +## Almindelige opgaver inden for NLP + +Der er forskellige måder at analysere en tekst, du arbejder med. Der er opgaver, du kan udføre, og gennem disse opgaver kan du opnå en forståelse af teksten og drage konklusioner. Du udfører normalt disse opgaver i en sekvens. + +### Tokenisering + +Det første, de fleste NLP-algoritmer skal gøre, er sandsynligvis at opdele teksten i tokens eller ord. Selvom det lyder enkelt, kan det være vanskeligt at tage højde for tegnsætning og forskellige sprogs ord- og sætningsafgrænsninger. Du kan være nødt til at bruge forskellige metoder til at bestemme afgrænsninger. + +![tokenisering](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokenisering af en sætning fra **Pride and Prejudice**. Infografik af [Jen Looper](https://twitter.com/jenlooper) + +### Embeddings + +[Word embeddings](https://wikipedia.org/wiki/Word_embedding) er en måde at konvertere dine tekstdata til numeriske værdier. Embeddings udføres på en måde, så ord med lignende betydning eller ord, der bruges sammen, grupperes. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "I have the highest respect for your nerves, they are my old friends." - Word embeddings for en sætning i **Pride and Prejudice**. Infografik af [Jen Looper](https://twitter.com/jenlooper) + +✅ Prøv [dette interessante værktøj](https://projector.tensorflow.org/) til at eksperimentere med word embeddings. Ved at klikke på et ord vises grupper af lignende ord: 'toy' grupperes med 'disney', 'lego', 'playstation' og 'console'. + +### Parsing & Part-of-speech Tagging + +Hvert ord, der er blevet tokeniseret, kan tagges som en del af talen - et substantiv, verbum eller adjektiv. Sætningen `the quick red fox jumped over the lazy brown dog` kan f.eks. POS-tagges som fox = substantiv, jumped = verbum. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Parsing af en sætning fra **Pride and Prejudice**. Infografik af [Jen Looper](https://twitter.com/jenlooper) + +Parsing handler om at genkende, hvilke ord der er relateret til hinanden i en sætning - for eksempel `the quick red fox jumped` er en adjektiv-substantiv-verbum-sekvens, der er adskilt fra sekvensen `lazy brown dog`. + +### Ord- og frasefrekvenser + +En nyttig procedure, når man analyserer en stor mængde tekst, er at opbygge en ordbog over hvert ord eller hver frase af interesse og hvor ofte det forekommer. Frasen `the quick red fox jumped over the lazy brown dog` har en ordfrekvens på 2 for the. + +Lad os se på et eksempeltekst, hvor vi tæller frekvensen af ord. Rudyard Kiplings digt The Winners indeholder følgende vers: + +```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. +``` + +Da frasefrekvenser kan være case-insensitive eller case-sensitive efter behov, har frasen `a friend` en frekvens på 2, `the` har en frekvens på 6, og `travels` er 2. + +### N-grams + +En tekst kan opdeles i sekvenser af ord med en fast længde, et enkelt ord (unigram), to ord (bigram), tre ord (trigram) eller et vilkårligt antal ord (n-grams). + +For eksempel `the quick red fox jumped over the lazy brown dog` med en n-gram score på 2 producerer følgende 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 + +Det kan være lettere at visualisere det som en glidende boks over sætningen. Her er det for n-grams af 3 ord, hvor n-grammet er fremhævet i hver sætning: + +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 glidende vindue](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> N-gram værdi på 3: Infografik af [Jen Looper](https://twitter.com/jenlooper) + +### Substantivfrase-ekstraktion + +I de fleste sætninger er der et substantiv, der er subjektet eller objektet i sætningen. På engelsk kan det ofte identificeres ved at have 'a', 'an' eller 'the' foran. At identificere subjektet eller objektet i en sætning ved at 'ekstrahere substantivfrasen' er en almindelig opgave i NLP, når man forsøger at forstå betydningen af en sætning. + +✅ I sætningen "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.", kan du identificere substantivfraserne? + +I sætningen `the quick red fox jumped over the lazy brown dog` er der 2 substantivfraser: **quick red fox** og **lazy brown dog**. + +### Sentimentanalyse + +En sætning eller tekst kan analyseres for sentiment, eller hvor *positiv* eller *negativ* den er. Sentiment måles i *polarity* og *objektivitet/subjektivitet*. Polarity måles fra -1.0 til 1.0 (negativ til positiv) og 0.0 til 1.0 (mest objektiv til mest subjektiv). + +✅ Senere vil du lære, at der er forskellige måder at bestemme sentiment ved hjælp af maskinlæring, men en måde er at have en liste over ord og fraser, der er kategoriseret som positive eller negative af en menneskelig ekspert og anvende den model på tekst for at beregne en polaritetsscore. Kan du se, hvordan dette ville fungere i nogle tilfælde og mindre godt i andre? + +### Bøjning + +Bøjning gør det muligt at tage et ord og finde dets ental eller flertal. + +### Lemmatization + +En *lemma* er grundformen eller hovedordet for et sæt ord, for eksempel *flew*, *flies*, *flying* har en lemma af verbet *fly*. + +Der findes også nyttige databaser til NLP-forskere, især: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) er en database over ord, synonymer, antonymer og mange andre detaljer for hvert ord på mange forskellige sprog. Det er utrolig nyttigt, når man forsøger at bygge oversættelser, stavekontroller eller sprogværktøjer af enhver art. + +## NLP-biblioteker + +Heldigvis behøver du ikke selv at bygge alle disse teknikker, da der findes fremragende Python-biblioteker, der gør det meget mere tilgængeligt for udviklere, der ikke er specialiserede i naturlig sprogbehandling eller maskinlæring. De næste lektioner inkluderer flere eksempler på disse, men her vil du lære nogle nyttige eksempler, der kan hjælpe dig med den næste opgave. + +### Øvelse - brug af `TextBlob` biblioteket + +Lad os bruge et bibliotek kaldet TextBlob, da det indeholder nyttige API'er til at tackle disse typer opgaver. TextBlob "står på de gigantiske skuldre af [NLTK](https://nltk.org) og [pattern](https://github.com/clips/pattern), og fungerer godt med begge." Det har en betydelig mængde ML indlejret i sin API. + +> Bemærk: En nyttig [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) guide er tilgængelig for TextBlob, som anbefales til erfarne Python-udviklere. + +Når man forsøger at identificere *substantivfraser*, tilbyder TextBlob flere muligheder for ekstraktorer til at finde substantivfraser. + +1. Tag et kig på `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 + ``` + + > Hvad sker der her? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) er "En substantivfrase-ekstraktor, der bruger chunk parsing trænet med ConLL-2000 træningskorpus." ConLL-2000 refererer til 2000-konferencen om Computational Natural Language Learning. Hvert år afholdt konferencen en workshop for at tackle et vanskeligt NLP-problem, og i 2000 var det substantiv chunking. En model blev trænet på Wall Street Journal med "sektioner 15-18 som træningsdata (211727 tokens) og sektion 20 som testdata (47377 tokens)". Du kan se de anvendte procedurer [her](https://www.clips.uantwerpen.be/conll2000/chunking/) og [resultaterne](https://ifarm.nl/erikt/research/np-chunking.html). + +### Udfordring - forbedring af din bot med NLP + +I den forrige lektion byggede du en meget simpel Q&A bot. Nu vil du gøre Marvin lidt mere sympatisk ved at analysere din input for sentiment og udskrive et svar, der matcher sentimentet. Du skal også identificere en `noun_phrase` og spørge om den. + +Dine trin, når du bygger en bedre samtalebot: + +1. Udskriv instruktioner, der rådgiver brugeren om, hvordan man interagerer med botten +2. Start loop + 1. Accepter brugerinput + 2. Hvis brugeren har bedt om at afslutte, så afslut + 3. Behandl brugerinput og bestem passende sentimentrespons + 4. Hvis en substantivfrase detekteres i sentimentet, pluraliser den og spørg om mere input om det emne + 5. Udskriv svar +3. loop tilbage til trin 2 + +Her er kodeudsnittet til at bestemme sentiment ved hjælp af TextBlob. Bemærk, at der kun er fire *gradienter* af sentimentrespons (du kan have flere, hvis du vil): + +```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. " +``` + +Her er noget eksempeloutput til vejledning (brugerinput er på linjer, der starter med >): + +```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! +``` + +En mulig løsning på opgaven findes [her](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Videnskontrol + +1. Tror du, at de sympatiske svar ville 'narre' nogen til at tro, at botten faktisk forstod dem? +2. Gør identifikationen af substantivfrasen botten mere 'troværdig'? +3. Hvorfor ville det være nyttigt at ekstrahere en 'substantivfrase' fra en sætning? + +--- + +Implementer botten i den tidligere videnskontrol og test den på en ven. Kan den narre dem? Kan du gøre din bot mere 'troværdig'? + +## 🚀Udfordring + +Tag en opgave fra den tidligere videnskontrol og prøv at implementere den. Test botten på en ven. Kan den narre dem? Kan du gøre din bot mere 'troværdig'? + +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +I de næste par lektioner vil du lære mere om sentimentanalyse. Undersøg denne interessante teknik i artikler som disse på [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Opgave + +[Få en bot til at svare](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/2-Tasks/assignment.md b/translations/da/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..4fa831797 --- /dev/null +++ b/translations/da/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Få en bot til at svare tilbage + +## Instruktioner + +I de tidligere lektioner programmerede du en grundlæggende bot, som du kunne chatte med. Denne bot giver tilfældige svar, indtil du siger 'bye'. Kan du gøre svarene lidt mindre tilfældige og udløse specifikke svar, hvis du siger bestemte ting, som 'hvorfor' eller 'hvordan'? Tænk lidt over, hvordan maskinlæring kunne gøre denne type arbejde mindre manuelt, mens du udvider din bot. Du kan bruge NLTK- eller TextBlob-bibliotekerne til at gøre dine opgaver lettere. + +## Bedømmelseskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | -------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | En ny bot.py-fil præsenteres og dokumenteres | En ny bot-fil præsenteres, men den indeholder fejl | En fil præsenteres ikke | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/3-Translation-Sentiment/README.md b/translations/da/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..c863e6bab --- /dev/null +++ b/translations/da/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Oversættelse og sentimentanalyse med ML + +I de tidligere lektioner lærte du, hvordan man bygger en grundlæggende bot ved hjælp af `TextBlob`, et bibliotek, der integrerer ML bag kulisserne for at udføre grundlæggende NLP-opgaver som udtrækning af navneordssætninger. En anden vigtig udfordring inden for computerlingvistik er præcis _oversættelse_ af en sætning fra et talesprog eller skriftsprog til et andet. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +Oversættelse er et meget vanskeligt problem, som forværres af, at der findes tusindvis af sprog, og hvert sprog kan have meget forskellige grammatiske regler. En tilgang er at konvertere de formelle grammatiske regler for et sprog, som f.eks. engelsk, til en struktur, der er uafhængig af sprog, og derefter oversætte det ved at konvertere tilbage til et andet sprog. Denne tilgang indebærer følgende trin: + +1. **Identifikation**. Identificer eller tag ordene i indgangssproget som navneord, verber osv. +2. **Skab oversættelse**. Lav en direkte oversættelse af hvert ord i målsprogets format. + +### Eksempelsætning, engelsk til irsk + +På 'engelsk' er sætningen _I feel happy_ tre ord i rækkefølgen: + +- **subjekt** (I) +- **verbum** (feel) +- **adjektiv** (happy) + +Men på 'irsk' har den samme sætning en meget anderledes grammatisk struktur - følelser som "*happy*" eller "*sad*" udtrykkes som værende *på* dig. + +Den engelske sætning `I feel happy` på irsk ville være `Tá athas orm`. En *bogstavelig* oversættelse ville være `Happy is upon me`. + +En irsktalende, der oversætter til engelsk, ville sige `I feel happy`, ikke `Happy is upon me`, fordi de forstår meningen med sætningen, selvom ordene og sætningsstrukturen er forskellige. + +Den formelle rækkefølge for sætningen på irsk er: + +- **verbum** (Tá eller is) +- **adjektiv** (athas, eller happy) +- **subjekt** (orm, eller upon me) + +## Oversættelse + +Et naivt oversættelsesprogram kunne oversætte ord alene og ignorere sætningsstrukturen. + +✅ Hvis du har lært et andet (eller tredje eller flere) sprog som voksen, har du måske startet med at tænke på dit modersmål, oversætte et begreb ord for ord i dit hoved til det andet sprog og derefter tale din oversættelse. Dette ligner, hvad naive oversættelsesprogrammer gør. Det er vigtigt at komme forbi denne fase for at opnå flydende sprogkundskaber! + +Naiv oversættelse fører til dårlige (og nogle gange morsomme) fejltolkninger: `I feel happy` oversættes bogstaveligt til `Mise bhraitheann athas` på irsk. Det betyder (bogstaveligt) `me feel happy` og er ikke en gyldig irsk sætning. Selvom engelsk og irsk er sprog, der tales på to nærtliggende øer, er de meget forskellige sprog med forskellige grammatiske strukturer. + +> Du kan se nogle videoer om irske sproglige traditioner, såsom [denne](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Maskinlæringsmetoder + +Indtil videre har du lært om den formelle regeltilgang til naturlig sprogbehandling. En anden tilgang er at ignorere ordenes betydning og _i stedet bruge maskinlæring til at opdage mønstre_. Dette kan fungere i oversættelse, hvis du har masser af tekst (et *corpus*) eller tekster (*corpora*) på både oprindelses- og målsproget. + +For eksempel, overvej tilfældet med *Pride and Prejudice*, en velkendt engelsk roman skrevet af Jane Austen i 1813. Hvis du konsulterer bogen på engelsk og en menneskelig oversættelse af bogen på *fransk*, kunne du opdage fraser i den ene, der er _idiomatisk_ oversat til den anden. Det vil du gøre om lidt. + +For eksempel, når en engelsk frase som `I have no money` oversættes bogstaveligt til fransk, kunne det blive `Je n'ai pas de monnaie`. "Monnaie" er et tricky fransk 'falsk cognate', da 'money' og 'monnaie' ikke er synonyme. En bedre oversættelse, som en menneskelig oversætter kunne lave, ville være `Je n'ai pas d'argent`, fordi det bedre formidler betydningen af, at du ikke har penge (i stedet for 'småpenge', som er betydningen af 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Billede af [Jen Looper](https://twitter.com/jenlooper) + +Hvis en ML-model har nok menneskelige oversættelser til at bygge en model på, kan den forbedre nøjagtigheden af oversættelser ved at identificere almindelige mønstre i tekster, der tidligere er blevet oversat af eksperttalere af begge sprog. + +### Øvelse - oversættelse + +Du kan bruge `TextBlob` til at oversætte sætninger. Prøv den berømte første linje fra **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` gør et ret godt stykke arbejde med oversættelsen: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Det kan argumenteres, at TextBlobs oversættelse er langt mere præcis, faktisk, end den franske oversættelse af bogen fra 1932 af V. Leconte og 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." + +I dette tilfælde gør oversættelsen informeret af ML et bedre arbejde end den menneskelige oversætter, der unødvendigt lægger ord i den oprindelige forfatters mund for 'klarhed'. + +> Hvad sker der her? Og hvorfor er TextBlob så god til oversættelse? Bag kulisserne bruger det Google Translate, en sofistikeret AI, der er i stand til at analysere millioner af fraser for at forudsige de bedste strenge til den aktuelle opgave. Der foregår intet manuelt her, og du skal have en internetforbindelse for at bruge `blob.translate`. + +✅ Prøv nogle flere sætninger. Hvilken er bedre, ML eller menneskelig oversættelse? I hvilke tilfælde? + +## Sentimentanalyse + +Et andet område, hvor maskinlæring kan fungere meget godt, er sentimentanalyse. En ikke-ML tilgang til sentiment er at identificere ord og fraser, der er 'positive' og 'negative'. Derefter, givet et nyt stykke tekst, beregne den samlede værdi af de positive, negative og neutrale ord for at identificere den overordnede sentiment. + +Denne tilgang kan nemt narres, som du måske har set i Marvin-opgaven - sætningen `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` er en sarkastisk, negativ sentiment sætning, men den simple algoritme registrerer 'great', 'wonderful', 'glad' som positive og 'waste', 'lost' og 'dark' som negative. Den overordnede sentiment påvirkes af disse modstridende ord. + +✅ Stop et øjeblik og tænk over, hvordan vi som menneskelige talere formidler sarkasme. Tonefald spiller en stor rolle. Prøv at sige sætningen "Well, that film was awesome" på forskellige måder for at opdage, hvordan din stemme formidler mening. + +### ML-tilgange + +ML-tilgangen ville være manuelt at samle negative og positive tekstkroppe - tweets, eller filmanmeldelser, eller hvad som helst, hvor mennesket har givet en score *og* en skriftlig mening. Derefter kan NLP-teknikker anvendes på meninger og scores, så mønstre opstår (f.eks. positive filmanmeldelser har tendens til at indeholde frasen 'Oscar worthy' mere end negative filmanmeldelser, eller positive restaurantanmeldelser siger 'gourmet' meget mere end 'disgusting'). + +> ⚖️ **Eksempel**: Hvis du arbejdede i en politikers kontor, og der var en ny lov, der blev debatteret, kunne vælgere skrive til kontoret med e-mails, der støtter eller er imod den pågældende nye lov. Lad os sige, at du får til opgave at læse e-mails og sortere dem i 2 bunker, *for* og *imod*. Hvis der var mange e-mails, kunne du blive overvældet af at forsøge at læse dem alle. Ville det ikke være rart, hvis en bot kunne læse dem alle for dig, forstå dem og fortælle dig, hvilken bunke hver e-mail hørte til? +> +> En måde at opnå dette på er at bruge maskinlæring. Du ville træne modellen med en del af de *imod* e-mails og en del af de *for* e-mails. Modellen ville have tendens til at associere fraser og ord med imod-siden og for-siden, *men den ville ikke forstå noget af indholdet*, kun at visse ord og mønstre var mere tilbøjelige til at optræde i en *imod* eller en *for* e-mail. Du kunne teste det med nogle e-mails, som du ikke havde brugt til at træne modellen, og se, om den kom til samme konklusion som dig. Derefter, når du var tilfreds med modellens nøjagtighed, kunne du behandle fremtidige e-mails uden at skulle læse hver enkelt. + +✅ Lyder denne proces som processer, du har brugt i tidligere lektioner? + +## Øvelse - sentimentale sætninger + +Sentiment måles med en *polarity* fra -1 til 1, hvilket betyder, at -1 er den mest negative sentiment, og 1 er den mest positive. Sentiment måles også med en score fra 0 - 1 for objektivitet (0) og subjektivitet (1). + +Tag et nyt kig på Jane Austens *Pride and Prejudice*. Teksten er tilgængelig her på [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Eksemplet nedenfor viser et kort program, der analyserer sentimentet af første og sidste sætning fra bogen og viser dens sentimentpolarity og subjektivitets-/objektivitets-score. + +Du skal bruge `TextBlob`-biblioteket (beskrevet ovenfor) til at bestemme `sentiment` (du behøver ikke at skrive din egen sentimentberegner) i den følgende opgave. + +```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)) +``` + +Du ser følgende output: + +```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) +``` + +## Udfordring - tjek sentimentpolarity + +Din opgave er at afgøre, ved hjælp af sentimentpolarity, om *Pride and Prejudice* har flere absolut positive sætninger end absolut negative. Til denne opgave kan du antage, at en polarity-score på 1 eller -1 er absolut positiv eller negativ henholdsvis. + +**Trin:** + +1. Download en [kopi af Pride and Prejudice](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) fra Project Gutenberg som en .txt-fil. Fjern metadataene i starten og slutningen af filen, så kun den originale tekst er tilbage. +2. Åbn filen i Python og udtræk indholdet som en streng. +3. Opret en TextBlob ved hjælp af bogstrengen. +4. Analyser hver sætning i bogen i en løkke. + 1. Hvis polariteten er 1 eller -1, gem sætningen i en array eller liste over positive eller negative beskeder. +5. Til sidst, udskriv alle de positive sætninger og negative sætninger (separat) og antallet af hver. + +Her er en [eksempelløsning](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Videnstjek + +1. Sentimentet er baseret på ord, der bruges i sætningen, men forstår koden *ordene*? +2. Synes du, at sentimentpolarity er præcis, eller med andre ord, er du *enig* i scores? + 1. Især, er du enig eller uenig i den absolutte **positive** polaritet af følgende sætninger? + * “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. De næste 3 sætninger blev scoret med en absolut positiv sentiment, men ved nærmere læsning er de ikke positive sætninger. Hvorfor troede sentimentanalysen, at de var positive sætninger? + * 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. Er du enig eller uenig i den absolutte **negative** polaritet af følgende sætninger? + - 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! + +✅ Enhver Jane Austen-entusiast vil forstå, at hun ofte bruger sine bøger til at kritisere de mere latterlige aspekter af det engelske regency-samfund. Elizabeth Bennett, hovedpersonen i *Pride and Prejudice*, er en skarp social observatør (ligesom forfatteren), og hendes sprog er ofte stærkt nuanceret. Selv Mr. Darcy (kærlighedsinteressen i historien) bemærker Elizabeths legende og drilske brug af sprog: "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." + +--- + +## 🚀Udfordring + +Kan du gøre Marvin endnu bedre ved at udtrække andre funktioner fra brugerinput? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie +Der er mange måder at udtrække sentiment fra tekst. Tænk på de forretningsapplikationer, der kunne gøre brug af denne teknik. Tænk over, hvordan det kan gå galt. Læs mere om avancerede, virksomhedsparate systemer, der analyserer sentiment, såsom [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). Test nogle af sætningerne fra "Stolthed og fordom" ovenfor og se, om det kan opfange nuancer. + +## Opgave + +[Digterisk frihed](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/3-Translation-Sentiment/assignment.md b/translations/da/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..21643ed14 --- /dev/null +++ b/translations/da/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Poetisk frihed + +## Instruktioner + +I [denne notebook](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) finder du over 500 Emily Dickinson-digte, som tidligere er blevet analyseret for sentiment ved hjælp af Azure tekstanalyse. Brug dette datasæt til at analysere det ved hjælp af de teknikker, der er beskrevet i lektionen. Matcher den foreslåede sentiment i et digt den mere sofistikerede beslutning fra Azure-tjenesten? Hvorfor eller hvorfor ikke, efter din mening? Er der noget, der overrasker dig? + +## Bedømmelseskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | En notebook præsenteres med en solid analyse af en forfatters prøveoutput | Notebooken er ufuldstændig eller udfører ikke analysen | Ingen notebook præsenteres | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/da/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..c1968697d --- /dev/null +++ b/translations/da/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/da/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..66c5db855 --- /dev/null +++ b/translations/da/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/4-Hotel-Reviews-1/README.md b/translations/da/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..7d3fc66b8 --- /dev/null +++ b/translations/da/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,417 @@ + +# Sentimentanalyse med hotelanmeldelser - bearbejdning af data + +I denne sektion vil du bruge teknikkerne fra de tidligere lektioner til at lave en udforskende dataanalyse af et stort datasæt. Når du har fået en god forståelse af nytten af de forskellige kolonner, vil du lære: + +- hvordan man fjerner unødvendige kolonner +- hvordan man beregner nye data baseret på de eksisterende kolonner +- hvordan man gemmer det resulterende datasæt til brug i den endelige udfordring + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +### Introduktion + +Indtil videre har du lært, hvordan tekstdata adskiller sig fra numeriske datatyper. Hvis det er tekst skrevet eller talt af et menneske, kan det analyseres for at finde mønstre, frekvenser, sentiment og mening. Denne lektion introducerer dig til et reelt datasæt med en reel udfordring: **[515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, som inkluderer en [CC0: Public Domain-licens](https://creativecommons.org/publicdomain/zero/1.0/). Det blev indsamlet fra Booking.com fra offentlige kilder. Skaberen af datasættet er Jiashen Liu. + +### Forberedelse + +Du skal bruge: + +* Muligheden for at køre .ipynb-notebooks med Python 3 +* pandas +* NLTK, [som du bør installere lokalt](https://www.nltk.org/install.html) +* Datasættet, som er tilgængeligt på Kaggle [515K Hotel Reviews Data in Europe](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Det fylder omkring 230 MB, når det er udpakket. Download det til rodmappen `/data`, der er tilknyttet disse NLP-lektioner. + +## Udforskende dataanalyse + +Denne udfordring antager, at du bygger en hotelanbefalingsbot ved hjælp af sentimentanalyse og gæsteanmeldelsesscores. Datasættet, du vil bruge, indeholder anmeldelser af 1493 forskellige hoteller i 6 byer. + +Ved hjælp af Python, et datasæt med hotelanmeldelser og NLTK's sentimentanalyse kan du finde ud af: + +* Hvilke ord og sætninger bruges hyppigst i anmeldelserne? +* Korrelerer de officielle *tags*, der beskriver et hotel, med anmeldelsesscores (f.eks. er der flere negative anmeldelser for et bestemt hotel fra *Familie med små børn* end fra *Solorejsende*, hvilket måske indikerer, at det er bedre for *Solorejsende*)? +* Er NLTK's sentiment scores enige med hotelanmelderens numeriske score? + +#### Datasæt + +Lad os udforske det datasæt, du har downloadet og gemt lokalt. Åbn filen i en editor som VS Code eller endda Excel. + +Overskrifterne i datasættet er som følger: + +*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* + +Her er de grupperet på en måde, der måske er lettere at undersøge: +##### Hotelkolonner + +* `Hotel_Name`, `Hotel_Address`, `lat` (breddegrad), `lng` (længdegrad) + * Ved hjælp af *lat* og *lng* kunne du lave et kort med Python, der viser hotellernes placeringer (måske farvekodet for negative og positive anmeldelser) + * Hotel_Address er ikke umiddelbart nyttig for os, og vi vil sandsynligvis erstatte den med et land for lettere sortering og søgning + +**Hotel Meta-review kolonner** + +* `Average_Score` + * Ifølge datasættets skaber er denne kolonne *Gennemsnitsscore for hotellet, beregnet baseret på den seneste kommentar i det sidste år*. Dette virker som en usædvanlig måde at beregne scoren på, men det er de data, der er indsamlet, så vi må tage det for gode varer for nu. + + ✅ Baseret på de andre kolonner i dette datasæt, kan du komme på en anden måde at beregne gennemsnitsscoren på? + +* `Total_Number_of_Reviews` + * Det samlede antal anmeldelser, dette hotel har modtaget - det er ikke klart (uden at skrive noget kode), om dette refererer til anmeldelserne i datasættet. +* `Additional_Number_of_Scoring` + * Dette betyder, at en anmeldelsesscore blev givet, men ingen positiv eller negativ anmeldelse blev skrevet af anmelderen. + +**Anmeldelseskolonner** + +- `Reviewer_Score` + - Dette er en numerisk værdi med højst 1 decimal mellem minimums- og maksimumsværdierne 2.5 og 10 + - Det er ikke forklaret, hvorfor 2.5 er den lavest mulige score +- `Negative_Review` + - Hvis en anmelder ikke skrev noget, vil dette felt have "**No Negative**" + - Bemærk, at en anmelder kan skrive en positiv anmeldelse i kolonnen Negative review (f.eks. "der er intet dårligt ved dette hotel") +- `Review_Total_Negative_Word_Counts` + - Højere antal negative ord indikerer en lavere score (uden at kontrollere sentimentet) +- `Positive_Review` + - Hvis en anmelder ikke skrev noget, vil dette felt have "**No Positive**" + - Bemærk, at en anmelder kan skrive en negativ anmeldelse i kolonnen Positive review (f.eks. "der er absolut intet godt ved dette hotel") +- `Review_Total_Positive_Word_Counts` + - Højere antal positive ord indikerer en højere score (uden at kontrollere sentimentet) +- `Review_Date` og `days_since_review` + - En friskheds- eller forældelsesfaktor kan anvendes på en anmeldelse (ældre anmeldelser er måske ikke lige så præcise som nyere, fordi hotelledelsen har ændret sig, renoveringer er blevet udført, eller en pool er blevet tilføjet osv.) +- `Tags` + - Disse er korte beskrivelser, som en anmelder kan vælge for at beskrive typen af gæst, de var (f.eks. solo eller familie), typen af værelse, de havde, længden af opholdet og hvordan anmeldelsen blev indsendt. + - Desværre er brugen af disse tags problematisk, se afsnittet nedenfor, der diskuterer deres nytte. + +**Anmelderkolonner** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Dette kan være en faktor i en anbefalingsmodel, for eksempel hvis du kan afgøre, at mere produktive anmeldere med hundredevis af anmeldelser er mere tilbøjelige til at være negative frem for positive. Dog er anmelderen af en bestemt anmeldelse ikke identificeret med en unik kode og kan derfor ikke knyttes til et sæt anmeldelser. Der er 30 anmeldere med 100 eller flere anmeldelser, men det er svært at se, hvordan dette kan hjælpe anbefalingsmodellen. +- `Reviewer_Nationality` + - Nogle mennesker kunne tro, at visse nationaliteter er mere tilbøjelige til at give en positiv eller negativ anmeldelse på grund af en national tilbøjelighed. Vær forsigtig med at bygge sådanne anekdotiske synspunkter ind i dine modeller. Disse er nationale (og nogle gange racemæssige) stereotyper, og hver anmelder var en individuel person, der skrev en anmeldelse baseret på deres oplevelse. Det kan være blevet filtreret gennem mange linser såsom deres tidligere hotelophold, den tilbagelagte afstand og deres personlige temperament. At tro, at deres nationalitet var årsagen til en anmeldelsesscore, er svært at retfærdiggøre. + +##### Eksempler + +| Average Score | Total Number Reviews | Reviewer Score | Negative
                      Review | Positive Review | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Dette er i øjeblikket ikke et hotel, men en byggeplads. Jeg blev terroriseret fra tidlig morgen og hele dagen med uacceptabel byggestøj, mens jeg hvilede efter en lang rejse og arbejdede på værelset. Folk arbejdede hele dagen, f.eks. med trykluftbor i de tilstødende værelser. Jeg bad om at få skiftet værelse, men der var ikke noget stille værelse tilgængeligt. For at gøre det værre blev jeg overopkrævet. Jeg tjekkede ud om aftenen, da jeg skulle rejse tidligt med fly og modtog en passende regning. En dag senere foretog hotellet en anden opkrævning uden mit samtykke, som oversteg den bookede pris. Det er et forfærdeligt sted. Straf ikke dig selv ved at booke her. | Intet. Forfærdeligt sted. Hold dig væk. | Forretningsrejse Par Standard dobbeltværelse Opholdt sig 2 nætter | + +Som du kan se, havde denne gæst ikke et godt ophold på dette hotel. Hotellet har en god gennemsnitsscore på 7.8 og 1945 anmeldelser, men denne anmelder gav det 2.5 og skrev 115 ord om, hvor negativt deres ophold var. Hvis de ikke skrev noget i kolonnen Positive_Review, kunne man antage, at der ikke var noget positivt, men de skrev dog 7 advarselsord. Hvis vi kun tæller ord i stedet for betydningen eller sentimentet af ordene, kunne vi få et skævt billede af anmelderens hensigt. Mærkeligt nok er deres score på 2.5 forvirrende, fordi hvis hotelopholdet var så dårligt, hvorfor give det overhovedet nogen point? Ved at undersøge datasættet nøje vil du se, at den lavest mulige score er 2.5, ikke 0. Den højest mulige score er 10. + +##### Tags + +Som nævnt ovenfor giver det ved første øjekast mening at bruge `Tags` til at kategorisere dataene. Desværre er disse tags ikke standardiserede, hvilket betyder, at i et givet hotel kan mulighederne være *Single room*, *Twin room* og *Double room*, men i det næste hotel er de *Deluxe Single Room*, *Classic Queen Room* og *Executive King Room*. Disse kan være de samme ting, men der er så mange variationer, at valget bliver: + +1. Forsøg på at ændre alle termer til en enkelt standard, hvilket er meget vanskeligt, fordi det ikke er klart, hvad konverteringsvejen ville være i hvert tilfælde (f.eks. *Classic single room* maps til *Single room*, men *Superior Queen Room with Courtyard Garden or City View* er meget sværere at mappe). + +1. Vi kan tage en NLP-tilgang og måle hyppigheden af visse termer som *Solo*, *Business Traveller* eller *Family with young kids*, som de gælder for hvert hotel, og inkludere det i anbefalingen. + +Tags er normalt (men ikke altid) et enkelt felt, der indeholder en liste over 5 til 6 kommaseparerede værdier, der svarer til *Type of trip*, *Type of guests*, *Type of room*, *Number of nights* og *Type of device review was submitted on*. Men fordi nogle anmeldere ikke udfylder hvert felt (de kan efterlade et tomt), er værdierne ikke altid i samme rækkefølge. + +Som et eksempel, tag *Type of group*. Der er 1025 unikke muligheder i dette felt i kolonnen `Tags`, og desværre refererer kun nogle af dem til en gruppe (nogle er typen af værelse osv.). Hvis du filtrerer kun dem, der nævner familie, indeholder resultaterne mange *Family room*-typer. Hvis du inkluderer termen *with*, dvs. tæller *Family with*-værdierne, er resultaterne bedre, med over 80.000 af de 515.000 resultater, der indeholder sætningen "Family with young children" eller "Family with older children". + +Dette betyder, at tags-kolonnen ikke er helt ubrugelig for os, men det vil kræve noget arbejde at gøre den nyttig. + +##### Gennemsnitlig hotelscore + +Der er en række mærkværdigheder eller uoverensstemmelser med datasættet, som jeg ikke kan finde ud af, men de er illustreret her, så du er opmærksom på dem, når du bygger dine modeller. Hvis du finder ud af det, så lad os det vide i diskussionssektionen! + +Datasættet har følgende kolonner, der relaterer sig til gennemsnitsscore og antal anmeldelser: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Det hotel med flest anmeldelser i dette datasæt er *Britannia International Hotel Canary Wharf* med 4789 anmeldelser ud af 515.000. Men hvis vi ser på værdien `Total_Number_of_Reviews` for dette hotel, er den 9086. Du kunne antage, at der er mange flere scores uden anmeldelser, så måske skulle vi tilføje værdien i kolonnen `Additional_Number_of_Scoring`. Den værdi er 2682, og hvis vi lægger den til 4789, får vi 7471, hvilket stadig er 1615 mindre end `Total_Number_of_Reviews`. + +Hvis du tager kolonnen `Average_Score`, kunne du antage, at det er gennemsnittet af anmeldelserne i datasættet, men beskrivelsen fra Kaggle er "*Gennemsnitsscore for hotellet, beregnet baseret på den seneste kommentar i det sidste år*". Det virker ikke særlig nyttigt, men vi kan beregne vores eget gennemsnit baseret på anmeldelsesscores i datasættet. Ved at bruge det samme hotel som eksempel er den gennemsnitlige hotelscore angivet som 7.1, men den beregnede score (gennemsnitlig anmelder-score *i* datasættet) er 6.8. Dette er tæt på, men ikke den samme værdi, og vi kan kun gætte på, at de scores, der er givet i `Additional_Number_of_Scoring`-anmeldelserne, øgede gennemsnittet til 7.1. Desværre, uden nogen måde at teste eller bevise den påstand, er det svært at bruge eller stole på `Average_Score`, `Additional_Number_of_Scoring` og `Total_Number_of_Reviews`, når de er baseret på eller refererer til data, vi ikke har. + +For at komplicere tingene yderligere har hotellet med det næsthøjeste antal anmeldelser en beregnet gennemsnitsscore på 8.12, og datasættets `Average_Score` er 8.1. Er denne korrekte score en tilfældighed, eller er det første hotel en uoverensstemmelse? + +På muligheden for, at disse hoteller måske er outliers, og at måske de fleste af værdierne stemmer overens (men nogle gør det ikke af en eller anden grund), vil vi skrive et kort program næste gang for at udforske værdierne i datasættet og bestemme den korrekte brug (eller ikke-brug) af værdierne. +> 🚨 En advarsel +> +> Når du arbejder med dette datasæt, vil du skrive kode, der beregner noget ud fra teksten uden at skulle læse eller analysere teksten selv. Dette er essensen af NLP, at fortolke mening eller følelser uden at en menneskelig person behøver at gøre det. Dog er det muligt, at du vil læse nogle af de negative anmeldelser. Jeg vil opfordre dig til ikke at gøre det, fordi det ikke er nødvendigt. Nogle af dem er fjollede eller irrelevante negative hotelanmeldelser, såsom "Vejret var ikke godt", noget der ligger uden for hotellets eller nogen andens kontrol. Men der er også en mørk side ved nogle anmeldelser. Nogle gange er de negative anmeldelser racistiske, sexistiske eller aldersdiskriminerende. Dette er uheldigt, men forventeligt i et datasæt, der er hentet fra en offentlig hjemmeside. Nogle anmeldere efterlader anmeldelser, som du vil finde smagløse, ubehagelige eller oprørende. Det er bedre at lade koden måle følelsen end at læse dem selv og blive ked af det. Når det er sagt, er det en minoritet, der skriver sådanne ting, men de findes stadig. +## Øvelse - Dataudforskning +### Indlæs data + +Det er nok med at undersøge data visuelt, nu skal du skrive noget kode og få nogle svar! Denne sektion bruger pandas-biblioteket. Din allerførste opgave er at sikre, at du kan indlæse og læse CSV-data. Pandas-biblioteket har en hurtig CSV-loader, og resultatet placeres i en dataframe, som i tidligere lektioner. Den CSV-fil, vi indlæser, har over en halv million rækker, men kun 17 kolonner. Pandas giver dig mange kraftfulde måder at interagere med en dataframe på, herunder muligheden for at udføre operationer på hver række. + +Fra nu af i denne lektion vil der være kodeeksempler og nogle forklaringer af koden samt diskussioner om, hvad resultaterne betyder. Brug den medfølgende _notebook.ipynb_ til din kode. + +Lad os starte med at indlæse datafilen, du skal bruge: + +```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") +``` + +Nu hvor dataene er indlæst, kan vi udføre nogle operationer på dem. Hold denne kode øverst i dit program til den næste del. + +## Udforsk dataene + +I dette tilfælde er dataene allerede *rene*, hvilket betyder, at de er klar til at arbejde med og ikke indeholder tegn på andre sprog, der kunne forstyrre algoritmer, der kun forventer engelske tegn. + +✅ Du kan komme til at arbejde med data, der kræver en indledende behandling for at formatere dem, før du anvender NLP-teknikker, men ikke denne gang. Hvis du skulle, hvordan ville du håndtere ikke-engelske tegn? + +Tag et øjeblik til at sikre, at når dataene er indlæst, kan du udforske dem med kode. Det er meget nemt at fokusere på kolonnerne `Negative_Review` og `Positive_Review`. De er fyldt med naturlig tekst, som dine NLP-algoritmer kan bearbejde. Men vent! Før du springer ind i NLP og sentimentanalyse, bør du følge koden nedenfor for at sikre, at de værdier, der er angivet i datasættet, matcher de værdier, du beregner med pandas. + +## Dataframe-operationer + +Den første opgave i denne lektion er at kontrollere, om følgende påstande er korrekte ved at skrive noget kode, der undersøger dataframen (uden at ændre den). + +> Som med mange programmeringsopgaver er der flere måder at løse dette på, men et godt råd er at gøre det på den enkleste, letteste måde, især hvis det vil være lettere at forstå, når du vender tilbage til denne kode i fremtiden. Med dataframes er der en omfattende API, der ofte har en måde at gøre det, du ønsker, effektivt. + +Behandl følgende spørgsmål som kodningsopgaver og forsøg at besvare dem uden at kigge på løsningen. + +1. Udskriv *formen* af den dataframe, du lige har indlæst (formen er antallet af rækker og kolonner). +2. Beregn frekvensoptællingen for anmeldernationaliteter: + 1. Hvor mange forskellige værdier er der for kolonnen `Reviewer_Nationality`, og hvad er de? + 2. Hvilken anmeldernationalitet er den mest almindelige i datasættet (udskriv land og antal anmeldelser)? + 3. Hvad er de næste 10 mest hyppigt forekommende nationaliteter og deres frekvensoptælling? +3. Hvilket hotel blev anmeldt mest for hver af de 10 mest hyppige anmeldernationaliteter? +4. Hvor mange anmeldelser er der pr. hotel (frekvensoptælling af hotel) i datasættet? +5. Selvom der er en kolonne `Average_Score` for hvert hotel i datasættet, kan du også beregne en gennemsnitsscore (beregne gennemsnittet af alle anmelderes scorer i datasættet for hvert hotel). Tilføj en ny kolonne til din dataframe med kolonneoverskriften `Calc_Average_Score`, der indeholder det beregnede gennemsnit. +6. Har nogle hoteller samme (afrundet til 1 decimal) `Average_Score` og `Calc_Average_Score`? + 1. Prøv at skrive en Python-funktion, der tager en Series (række) som argument og sammenligner værdierne, og udskriver en besked, når værdierne ikke er ens. Brug derefter `.apply()`-metoden til at behandle hver række med funktionen. +7. Beregn og udskriv, hvor mange rækker der har kolonneværdien `Negative_Review` som "No Negative". +8. Beregn og udskriv, hvor mange rækker der har kolonneværdien `Positive_Review` som "No Positive". +9. Beregn og udskriv, hvor mange rækker der har kolonneværdien `Positive_Review` som "No Positive" **og** `Negative_Review` som "No Negative". + +### Kodesvar + +1. Udskriv *formen* af den dataframe, du lige har indlæst (formen er antallet af rækker og kolonner). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Beregn frekvensoptællingen for anmeldernationaliteter: + + 1. Hvor mange forskellige værdier er der for kolonnen `Reviewer_Nationality`, og hvad er de? + 2. Hvilken anmeldernationalitet er den mest almindelige i datasættet (udskriv land og antal anmeldelser)? + + ```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. Hvad er de næste 10 mest hyppigt forekommende nationaliteter og deres frekvensoptælling? + + ```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. Hvilket hotel blev anmeldt mest for hver af de 10 mest hyppige anmeldernationaliteter? + + ```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. Hvor mange anmeldelser er der pr. hotel (frekvensoptælling af hotel) i datasættet? + + ```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 | + + Du bemærker måske, at resultaterne *optalt i datasættet* ikke matcher værdien i `Total_Number_of_Reviews`. Det er uklart, om denne værdi i datasættet repræsenterede det samlede antal anmeldelser, hotellet havde, men ikke alle blev skrabet, eller en anden beregning. `Total_Number_of_Reviews` bruges ikke i modellen på grund af denne uklarhed. + +5. Selvom der er en kolonne `Average_Score` for hvert hotel i datasættet, kan du også beregne en gennemsnitsscore (beregne gennemsnittet af alle anmelderes scorer i datasættet for hvert hotel). Tilføj en ny kolonne til din dataframe med kolonneoverskriften `Calc_Average_Score`, der indeholder det beregnede gennemsnit. Udskriv kolonnerne `Hotel_Name`, `Average_Score` og `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"]]) + ``` + + Du undrer dig måske også over værdien `Average_Score` og hvorfor den nogle gange er forskellig fra den beregnede gennemsnitsscore. Da vi ikke kan vide, hvorfor nogle af værdierne matcher, men andre har en forskel, er det sikrest i dette tilfælde at bruge de anmeldelsesscorer, vi har, til at beregne gennemsnittet selv. Når det er sagt, er forskellene normalt meget små, her er hotellerne med den største afvigelse mellem datasættets gennemsnit og det beregnede gennemsnit: + + | 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 | + + Med kun 1 hotel, der har en forskel i score større end 1, betyder det, at vi sandsynligvis kan ignorere forskellen og bruge den beregnede gennemsnitsscore. + +6. Beregn og udskriv, hvor mange rækker der har kolonneværdien `Negative_Review` som "No Negative". + +7. Beregn og udskriv, hvor mange rækker der har kolonneværdien `Positive_Review` som "No Positive". + +8. Beregn og udskriv, hvor mange rækker der har kolonneværdien `Positive_Review` som "No Positive" **og** `Negative_Review` som "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 + ``` + +## En anden metode + +En anden måde at tælle elementer uden Lambdas og bruge sum til at tælle rækkerne: + + ```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 + ``` + + Du har måske bemærket, at der er 127 rækker, der har både "No Negative" og "No Positive" værdier for kolonnerne `Negative_Review` og `Positive_Review` henholdsvis. Det betyder, at anmelderen gav hotellet en numerisk score, men undlod at skrive enten en positiv eller negativ anmeldelse. Heldigvis er dette et lille antal rækker (127 ud af 515738, eller 0,02%), så det vil sandsynligvis ikke skævvride vores model eller resultater i nogen bestemt retning, men du havde måske ikke forventet, at et datasæt med anmeldelser ville have rækker uden anmeldelser, så det er værd at udforske dataene for at opdage rækker som denne. + +Nu hvor du har udforsket datasættet, vil du i den næste lektion filtrere dataene og tilføje noget sentimentanalyse. + +--- +## 🚀Udfordring + +Denne lektion demonstrerer, som vi så i tidligere lektioner, hvor kritisk vigtigt det er at forstå dine data og deres særheder, før du udfører operationer på dem. Tekstbaserede data kræver især omhyggelig granskning. Grav igennem forskellige teksttunge datasæt og se, om du kan opdage områder, der kunne introducere bias eller skævvredet sentiment i en model. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Tag [denne læringssti om NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) for at opdage værktøjer, du kan prøve, når du bygger tale- og teksttunge modeller. + +## Opgave + +[NLTK](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/da/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..3df3b6b96 --- /dev/null +++ b/translations/da/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Instruktioner + +NLTK er et velkendt bibliotek til brug inden for beregningslingvistik og NLP. Benyt denne mulighed til at læse '[NLTK-bogen](https://www.nltk.org/book/)' og prøv dens øvelser. I denne ikke-bedømte opgave vil du få mulighed for at lære dette bibliotek bedre at kende. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/da/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..9dacd0f27 --- /dev/null +++ b/translations/da/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/da/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 000000000..9443a21c2 --- /dev/null +++ b/translations/da/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/5-Hotel-Reviews-2/README.md b/translations/da/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 000000000..b42caa36c --- /dev/null +++ b/translations/da/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Sentimentanalyse med hotelanmeldelser + +Nu hvor du har udforsket datasættet i detaljer, er det tid til at filtrere kolonnerne og derefter bruge NLP-teknikker på datasættet for at få nye indsigter om hotellerne. + +## [Quiz før forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +### Filtrering & Sentimentanalyse-operationer + +Som du sikkert har bemærket, har datasættet nogle problemer. Nogle kolonner er fyldt med unyttige oplysninger, andre virker forkerte. Hvis de er korrekte, er det uklart, hvordan de blev beregnet, og svarene kan ikke uafhængigt verificeres med dine egne beregninger. + +## Øvelse: lidt mere databehandling + +Rens dataene lidt mere. Tilføj kolonner, der vil være nyttige senere, ændr værdierne i andre kolonner, og fjern visse kolonner helt. + +1. Indledende kolonnebehandling + + 1. Fjern `lat` og `lng` + + 2. Erstat værdierne i `Hotel_Address` med følgende værdier (hvis adressen indeholder navnet på byen og landet, ændres det til kun byen og landet). + + Disse er de eneste byer og lande i datasættet: + + Amsterdam, Nederlandene + + Barcelona, Spanien + + London, Storbritannien + + Milano, Italien + + Paris, Frankrig + + Wien, Østrig + + ```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()) + ``` + + Nu kan du forespørge data på landeniveau: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Nederlandene | 105 | + | Barcelona, Spanien | 211 | + | London, Storbritannien | 400 | + | Milano, Italien | 162 | + | Paris, Frankrig | 458 | + | Wien, Østrig | 158 | + +2. Behandling af hotel-meta-anmeldelseskolonner + + 1. Fjern `Additional_Number_of_Scoring` + + 1. Erstat `Total_Number_of_Reviews` med det samlede antal anmeldelser for det hotel, der faktisk er i datasættet + + 1. Erstat `Average_Score` med vores egen beregnede 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. Behandling af anmeldelseskolonner + + 1. Fjern `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` og `days_since_review` + + 2. Behold `Reviewer_Score`, `Negative_Review` og `Positive_Review` som de er, + + 3. Behold `Tags` for nu + + - Vi vil udføre nogle yderligere filtreringsoperationer på tags i næste afsnit, og derefter vil tags blive fjernet + +4. Behandling af anmelderkolonner + + 1. Fjern `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Behold `Reviewer_Nationality` + +### Tag-kolonner + +Kolonnen `Tag` er problematisk, da den er en liste (i tekstform), der er gemt i kolonnen. Desværre er rækkefølgen og antallet af underafsnit i denne kolonne ikke altid det samme. Det er svært for et menneske at identificere de korrekte sætninger, der er interessante, fordi der er 515.000 rækker og 1427 hoteller, og hver har lidt forskellige muligheder, som en anmelder kunne vælge. Her kommer NLP til sin ret. Du kan scanne teksten og finde de mest almindelige sætninger og tælle dem. + +Desværre er vi ikke interesserede i enkeltord, men i flertalsord-sætninger (f.eks. *Forretningsrejse*). At køre en flertalsord-frekvensfordelingsalgoritme på så mange data (6762646 ord) kunne tage ekstraordinært lang tid, men uden at se på dataene, ville det virke som en nødvendig udgift. Her er eksplorativ dataanalyse nyttig, fordi du har set et eksempel på tags som `[' Forretningsrejse ', ' Solorejsende ', ' Enkeltværelse ', ' Opholdt sig 5 nætter ', ' Indsendt fra en mobil enhed ']`, kan du begynde at spørge, om det er muligt at reducere den behandling, du skal udføre, betydeligt. Heldigvis er det muligt - men først skal du følge nogle trin for at fastslå de interessante tags. + +### Filtrering af tags + +Husk, at målet med datasættet er at tilføje sentiment og kolonner, der vil hjælpe dig med at vælge det bedste hotel (for dig selv eller måske en klient, der beder dig om at lave en hotelanbefalingsbot). Du skal spørge dig selv, om tags er nyttige eller ej i det endelige datasæt. Her er en fortolkning (hvis du havde brug for datasættet af andre grunde, kunne forskellige tags blive inkluderet/udeladt): + +1. Rejsetypen er relevant og bør beholdes +2. Gæstegruppens type er vigtig og bør beholdes +3. Typen af værelse, suite eller studio, som gæsten boede i, er irrelevant (alle hoteller har stort set de samme værelser) +4. Enheden, som anmeldelsen blev indsendt fra, er irrelevant +5. Antallet af nætter, som anmelderen opholdt sig, *kunne* være relevant, hvis du tilskriver længere ophold til, at de kunne lide hotellet mere, men det er tvivlsomt og sandsynligvis irrelevant + +Kort sagt, **behold 2 slags tags og fjern de andre**. + +Først vil du ikke tælle tags, før de er i et bedre format, så det betyder at fjerne firkantede parenteser og citater. Du kan gøre dette på flere måder, men du vil have den hurtigste, da det kan tage lang tid at behandle mange data. Heldigvis har pandas en nem måde at udføre hvert af disse trin. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Hvert tag bliver til noget som: `Forretningsrejse, Solorejsende, Enkeltværelse, Opholdt sig 5 nætter, Indsendt fra en mobil enhed`. + +Næste problem opstår. Nogle anmeldelser, eller rækker, har 5 kolonner, nogle 3, nogle 6. Dette er et resultat af, hvordan datasættet blev oprettet, og det er svært at rette. Du vil gerne have en frekvenstælling af hver sætning, men de er i forskellig rækkefølge i hver anmeldelse, så tællingen kan være forkert, og et hotel kan ikke få et tag tildelt, som det fortjente. + +I stedet vil du bruge den forskellige rækkefølge til din fordel, fordi hvert tag er flertalsord, men også adskilt af et komma! Den enkleste måde at gøre dette på er at oprette 6 midlertidige kolonner med hvert tag indsat i kolonnen, der svarer til dets rækkefølge i tagget. Du kan derefter flette de 6 kolonner til én stor kolonne og køre metoden `value_counts()` på den resulterende kolonne. Når du printer det ud, vil du se, at der var 2428 unikke tags. Her er et lille eksempel: + +| Tag | Count | +| ------------------------------ | ------ | +| Fritidsrejse | 417778 | +| Indsendt fra en mobil enhed | 307640 | +| Par | 252294 | +| Opholdt sig 1 nat | 193645 | +| Opholdt sig 2 nætter | 133937 | +| Solorejsende | 108545 | +| Opholdt sig 3 nætter | 95821 | +| Forretningsrejse | 82939 | +| Gruppe | 65392 | +| Familie med små børn | 61015 | +| Opholdt sig 4 nætter | 47817 | +| Dobbeltværelse | 35207 | +| Standard dobbeltværelse | 32248 | +| Superior dobbeltværelse | 31393 | +| Familie med ældre børn | 26349 | +| Deluxe dobbeltværelse | 24823 | +| Dobbelt- eller twin-værelse | 22393 | +| Opholdt sig 5 nætter | 20845 | +| Standard dobbelt- eller twin-værelse | 17483 | +| Klassisk dobbeltværelse | 16989 | +| Superior dobbelt- eller twin-værelse | 13570 | +| 2 værelser | 12393 | + +Nogle af de almindelige tags som `Indsendt fra en mobil enhed` er ikke nyttige for os, så det kunne være smart at fjerne dem, før du tæller sætningens forekomst, men det er en så hurtig operation, at du kan lade dem være og ignorere dem. + +### Fjernelse af tags for opholdslængde + +Fjernelse af disse tags er trin 1, det reducerer det samlede antal tags, der skal overvejes, en smule. Bemærk, at du ikke fjerner dem fra datasættet, men blot vælger at fjerne dem fra overvejelse som værdier, der skal tælles/beholdes i anmeldelsesdatasættet. + +| Opholdslængde | Count | +| ------------- | ------ | +| Opholdt sig 1 nat | 193645 | +| Opholdt sig 2 nætter | 133937 | +| Opholdt sig 3 nætter | 95821 | +| Opholdt sig 4 nætter | 47817 | +| Opholdt sig 5 nætter | 20845 | +| Opholdt sig 6 nætter | 9776 | +| Opholdt sig 7 nætter | 7399 | +| Opholdt sig 8 nætter | 2502 | +| Opholdt sig 9 nætter | 1293 | +| ... | ... | + +Der er en enorm variation af værelser, suiter, studios, lejligheder og så videre. De betyder stort set det samme og er ikke relevante for dig, så fjern dem fra overvejelse. + +| Værelsestype | Count | +| ----------------------------- | ----- | +| Dobbeltværelse | 35207 | +| Standard dobbeltværelse | 32248 | +| Superior dobbeltværelse | 31393 | +| Deluxe dobbeltværelse | 24823 | +| Dobbelt- eller twin-værelse | 22393 | +| Standard dobbelt- eller twin-værelse | 17483 | +| Klassisk dobbeltværelse | 16989 | +| Superior dobbelt- eller twin-værelse | 13570 | + +Endelig, og dette er glædeligt (fordi det ikke krævede meget behandling overhovedet), vil du være tilbage med følgende *nyttige* tags: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Fritidsrejse | 417778 | +| Par | 252294 | +| Solorejsende | 108545 | +| Forretningsrejse | 82939 | +| Gruppe (kombineret med Rejsende med venner) | 67535 | +| Familie med små børn | 61015 | +| Familie med ældre børn | 26349 | +| Med et kæledyr | 1405 | + +Man kunne argumentere for, at `Rejsende med venner` er det samme som `Gruppe` mere eller mindre, og det ville være rimeligt at kombinere de to som ovenfor. Koden til at identificere de korrekte tags findes i [Tags-notebooken](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Det sidste trin er at oprette nye kolonner for hver af disse tags. Derefter, for hver anmeldelsesrække, hvis kolonnen `Tag` matcher en af de nye kolonner, tilføj en 1, hvis ikke, tilføj en 0. Det endelige resultat vil være en optælling af, hvor mange anmeldere der valgte dette hotel (i aggregat) til f.eks. forretning vs fritid, eller til at tage et kæledyr med, og dette er nyttige oplysninger, når man anbefaler et 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) + +``` + +### Gem din fil + +Til sidst gem datasættet, som det er nu, med et nyt navn. + +```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) +``` + +## Sentimentanalyse-operationer + +I dette sidste afsnit vil du anvende sentimentanalyse på anmeldelseskolonnerne og gemme resultaterne i et datasæt. + +## Øvelse: indlæs og gem de filtrerede data + +Bemærk, at du nu indlæser det filtrerede datasæt, der blev gemt i det foregående afsnit, **ikke** det originale datasæt. + +```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) +``` + +### Fjernelse af stopord + +Hvis du skulle køre sentimentanalyse på de negative og positive anmeldelseskolonner, kunne det tage lang tid. Testet på en kraftfuld test-laptop med hurtig CPU tog det 12 - 14 minutter afhængigt af hvilken sentimentbibliotek der blev brugt. Det er en (relativt) lang tid, så det er værd at undersøge, om det kan gøres hurtigere. + +Fjernelse af stopord, eller almindelige engelske ord, der ikke ændrer sentimenten i en sætning, er det første trin. Ved at fjerne dem bør sentimentanalysen køre hurtigere, men ikke være mindre præcis (da stopordene ikke påvirker sentimenten, men de gør analysen langsommere). + +Den længste negative anmeldelse var 395 ord, men efter fjernelse af stopordene er den 195 ord. + +Fjernelse af stopordene er også en hurtig operation; fjernelse af stopordene fra 2 anmeldelseskolonner over 515.000 rækker tog 3,3 sekunder på test-enheden. Det kunne tage lidt mere eller mindre tid for dig afhængigt af din enheds CPU-hastighed, RAM, om du har en SSD eller ej, og nogle andre faktorer. Den relativt korte varighed af operationen betyder, at hvis det forbedrer sentimentanalysens tid, så er det værd at gøre. + +```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) +``` + +### Udførelse af sentimentanalyse + +Nu skal du beregne sentimentanalysen for både negative og positive anmeldelseskolonner og gemme resultatet i 2 nye kolonner. Testen af sentimenten vil være at sammenligne den med anmelderens score for den samme anmeldelse. For eksempel, hvis sentimenten vurderer, at den negative anmeldelse havde en sentiment på 1 (ekstremt positiv sentiment) og en positiv anmeldelse sentiment på 1, men anmelderen gav hotellet den laveste score muligt, så matcher anmeldelsesteksten ikke scoren, eller sentimentanalysatoren kunne ikke genkende sentimenten korrekt. Du bør forvente, at nogle sentimentscorer er helt forkerte, og ofte vil det være forklarligt, f.eks. anmeldelsen kunne være ekstremt sarkastisk "Selvfølgelig ELSKEDE jeg at sove i et rum uden varme", og sentimentanalysatoren tror, det er positiv sentiment, selvom et menneske, der læser det, ville vide, det var sarkasme. +NLTK leverer forskellige sentiment-analyzatorer, som du kan lære med, og du kan udskifte dem og se, om sentimentet er mere eller mindre præcist. VADER sentimentanalyse bruges her. + +> 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, juni 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"] +``` + +Senere i dit program, når du er klar til at beregne sentiment, kan du anvende det på hver anmeldelse som følger: + +```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") +``` + +Dette tager cirka 120 sekunder på min computer, men det vil variere fra computer til computer. Hvis du vil udskrive resultaterne og se, om sentimentet matcher anmeldelsen: + +```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"]]) +``` + +Det allersidste, du skal gøre med filen, før du bruger den i udfordringen, er at gemme den! Du bør også overveje at omorganisere alle dine nye kolonner, så de er nemme at arbejde med (for et menneske, det er en kosmetisk ændring). + +```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) +``` + +Du bør køre hele koden for [analysenotebooken](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (efter du har kørt [din filtreringsnotebook](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) for at generere filen Hotel_Reviews_Filtered.csv). + +For at opsummere, trinnene er: + +1. Den originale datasetfil **Hotel_Reviews.csv** udforskes i den forrige lektion med [explorer-notebooken](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) +2. Hotel_Reviews.csv filtreres af [filtreringsnotebooken](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb), hvilket resulterer i **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv behandles af [sentimentanalyse-notebooken](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb), hvilket resulterer i **Hotel_Reviews_NLP.csv** +4. Brug Hotel_Reviews_NLP.csv i NLP-udfordringen nedenfor + +### Konklusion + +Da du startede, havde du et datasæt med kolonner og data, men ikke alt kunne verificeres eller bruges. Du har udforsket dataene, filtreret det, du ikke har brug for, konverteret tags til noget nyttigt, beregnet dine egne gennemsnit, tilføjet nogle sentimentkolonner og forhåbentlig lært nogle interessante ting om behandling af naturlig tekst. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Udfordring + +Nu hvor du har analyseret dit datasæt for sentiment, se om du kan bruge strategier, du har lært i dette pensum (måske clustering?) til at identificere mønstre omkring sentiment. + +## Gennemgang & Selvstudie + +Tag [dette Learn-modul](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) for at lære mere og bruge forskellige værktøjer til at udforske sentiment i tekst. + +## Opgave + +[Prøv et andet datasæt](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/da/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 000000000..88e1c3fea --- /dev/null +++ b/translations/da/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Prøv et andet datasæt + +## Instruktioner + +Nu hvor du har lært at bruge NLTK til at tildele sentiment til tekst, prøv et andet datasæt. Du vil sandsynligvis skulle udføre noget databehandling omkring det, så opret en notebook og dokumentér din tankegang. Hvad opdager du? + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------ | ---------------------- | +| | En komplet notebook og datasæt præsenteres med veldokumenterede celler, der forklarer, hvordan sentiment tildeles | Notebooken mangler gode forklaringer | Notebooken er mangelfuld | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/da/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 000000000..d8a1c8cf7 --- /dev/null +++ b/translations/da/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/da/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 000000000..0c7eb8a01 --- /dev/null +++ b/translations/da/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/README.md b/translations/da/6-NLP/README.md new file mode 100644 index 000000000..71b13446c --- /dev/null +++ b/translations/da/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Kom godt i gang med naturlig sprogbehandling + +Naturlig sprogbehandling (NLP) er evnen for et computerprogram til at forstå menneskeligt sprog, som det tales og skrives – kaldet naturligt sprog. Det er en komponent af kunstig intelligens (AI). NLP har eksisteret i mere end 50 år og har rødder i lingvistik. Hele området er rettet mod at hjælpe maskiner med at forstå og bearbejde menneskeligt sprog. Dette kan derefter bruges til at udføre opgaver som stavekontrol eller maskinoversættelse. Det har en række praktiske anvendelser inden for flere områder, herunder medicinsk forskning, søgemaskiner og forretningsanalyse. + +## Regionalt emne: Europæiske sprog og litteratur samt romantiske hoteller i Europa ❤️ + +I denne del af pensum vil du blive introduceret til en af de mest udbredte anvendelser af maskinlæring: naturlig sprogbehandling (NLP). Afledt af computermæssig lingvistik er denne kategori af kunstig intelligens broen mellem mennesker og maskiner via stemme- eller tekstkommunikation. + +I disse lektioner vil vi lære det grundlæggende i NLP ved at bygge små samtalebots for at forstå, hvordan maskinlæring hjælper med at gøre disse samtaler mere og mere 'intelligente'. Du vil rejse tilbage i tiden og chatte med Elizabeth Bennett og Mr. Darcy fra Jane Austens klassiske roman, **Stolthed og fordom**, udgivet i 1813. Derefter vil du udvide din viden ved at lære om sentimentanalyse via hotelanmeldelser i Europa. + +![Stolthed og fordom bog og te](../../../6-NLP/images/p&p.jpg) +> Foto af Elaine HowlinUnsplash + +## Lektioner + +1. [Introduktion til naturlig sprogbehandling](1-Introduction-to-NLP/README.md) +2. [Almindelige NLP-opgaver og teknikker](2-Tasks/README.md) +3. [Oversættelse og sentimentanalyse med maskinlæring](3-Translation-Sentiment/README.md) +4. [Forberedelse af dine data](4-Hotel-Reviews-1/README.md) +5. [NLTK til sentimentanalyse](5-Hotel-Reviews-2/README.md) + +## Kreditering + +Disse lektioner om naturlig sprogbehandling blev skrevet med ☕ af [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/6-NLP/data/README.md b/translations/da/6-NLP/data/README.md new file mode 100644 index 000000000..f9b50150d --- /dev/null +++ b/translations/da/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Download hotelanmeldelsesdataene til denne mappe. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/1-Introduction/README.md b/translations/da/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 000000000..ec0c97e3b --- /dev/null +++ b/translations/da/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Introduktion til tidsserieforudsigelse + +![Oversigt over tidsserier i en sketchnote](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote af [Tomomi Imura](https://www.twitter.com/girlie_mac) + +I denne lektion og den næste vil du lære lidt om tidsserieforudsigelse, en interessant og værdifuld del af en ML-forskers repertoire, som er lidt mindre kendt end andre emner. Tidsserieforudsigelse er en slags 'krystalkugle': baseret på tidligere præstationer af en variabel, såsom pris, kan du forudsige dens fremtidige potentielle værdi. + +[![Introduktion til tidsserieforudsigelse](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Introduktion til tidsserieforudsigelse") + +> 🎥 Klik på billedet ovenfor for en video om tidsserieforudsigelse + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +Det er et nyttigt og interessant felt med reel værdi for erhvervslivet, givet dets direkte anvendelse på problemer som prissætning, lagerbeholdning og forsyningskædeproblemer. Selvom dyb læringsteknikker er begyndt at blive brugt til at opnå flere indsigter for bedre at forudsige fremtidige præstationer, forbliver tidsserieforudsigelse et felt, der i høj grad er informeret af klassiske ML-teknikker. + +> Penn States nyttige tidsseriecurriculum kan findes [her](https://online.stat.psu.edu/stat510/lesson/1) + +## Introduktion + +Forestil dig, at du vedligeholder en række smarte parkeringsmålere, der giver data om, hvor ofte de bruges, og hvor længe over tid. + +> Hvad hvis du kunne forudsige, baseret på målerens tidligere præstationer, dens fremtidige værdi i henhold til udbud og efterspørgsel? + +At forudsige præcist, hvornår man skal handle for at opnå sit mål, er en udfordring, der kunne tackles med tidsserieforudsigelse. Det ville ikke gøre folk glade at blive opkrævet mere i travle perioder, når de leder efter en parkeringsplads, men det ville være en sikker måde at generere indtægter til at rengøre gaderne! + +Lad os udforske nogle af typerne af tidsseriealgoritmer og starte en notebook for at rense og forberede nogle data. De data, du vil analysere, er taget fra GEFCom2014-forudsigelseskonkurrencen. Det består af 3 års timelige elforbrug og temperaturværdier mellem 2012 og 2014. Givet de historiske mønstre for elforbrug og temperatur kan du forudsige fremtidige værdier for elforbrug. + +I dette eksempel vil du lære, hvordan man forudsiger ét tidssteg fremad ved kun at bruge historiske forbrugsdata. Før du starter, er det dog nyttigt at forstå, hvad der foregår bag kulisserne. + +## Nogle definitioner + +Når du støder på begrebet 'tidsserie', skal du forstå dets anvendelse i flere forskellige sammenhænge. + +🎓 **Tidsserie** + +I matematik er "en tidsserie en række datapunkter indekseret (eller listet eller grafet) i tidsorden. Oftest er en tidsserie en sekvens taget på successive lige store punkter i tid." Et eksempel på en tidsserie er den daglige lukningsværdi af [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Brug af tidsserieplots og statistisk modellering ses ofte i signalbehandling, vejrforudsigelse, jordskælvforudsigelse og andre felter, hvor begivenheder opstår, og datapunkter kan plottes over tid. + +🎓 **Tidsserieanalyse** + +Tidsserieanalyse er analysen af ovennævnte tidsseriedata. Tidsseriedata kan tage forskellige former, herunder 'afbrudte tidsserier', som opdager mønstre i en tidsseries udvikling før og efter en afbrydende begivenhed. Den type analyse, der er nødvendig for tidsserien, afhænger af dataens natur. Tidsseriedata kan selv tage form af serier af tal eller tegn. + +Analysen, der skal udføres, bruger en række metoder, herunder frekvensdomæne og tidsdomæne, lineær og ikke-lineær og mere. [Lær mere](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) om de mange måder at analysere denne type data på. + +🎓 **Tidsserieforudsigelse** + +Tidsserieforudsigelse er brugen af en model til at forudsige fremtidige værdier baseret på mønstre vist af tidligere indsamlede data, som de opstod i fortiden. Selvom det er muligt at bruge regressionsmodeller til at udforske tidsseriedata, med tidsindekser som x-variabler på et plot, analyseres sådanne data bedst ved hjælp af specielle typer modeller. + +Tidsseriedata er en liste over ordnede observationer, i modsætning til data, der kan analyseres ved lineær regression. Den mest almindelige er ARIMA, et akronym, der står for "Autoregressive Integrated Moving Average". + +[ARIMA-modeller](https://online.stat.psu.edu/stat510/lesson/1/1.1) "relaterer den nuværende værdi af en serie til tidligere værdier og tidligere forudsigelsesfejl." De er mest passende til at analysere tidsdomænedata, hvor data er ordnet over tid. + +> Der er flere typer ARIMA-modeller, som du kan lære om [her](https://people.duke.edu/~rnau/411arim.htm), og som du vil berøre i den næste lektion. + +I den næste lektion vil du bygge en ARIMA-model ved hjælp af [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), som fokuserer på én variabel, der ændrer sin værdi over tid. Et eksempel på denne type data er [dette datasæt](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), der registrerer den månedlige CO2-koncentration ved Mauna Loa-observatoriet: + +| 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 | + +✅ Identificer den variabel, der ændrer sig over tid i dette datasæt + +## Tidsseriedatas karakteristika, der skal overvejes + +Når du ser på tidsseriedata, kan du bemærke, at det har [visse karakteristika](https://online.stat.psu.edu/stat510/lesson/1/1.1), som du skal tage højde for og afhjælpe for bedre at forstå dets mønstre. Hvis du betragter tidsseriedata som potentielt leverende et 'signal', som du vil analysere, kan disse karakteristika betragtes som 'støj'. Du vil ofte have brug for at reducere denne 'støj' ved at afhjælpe nogle af disse karakteristika ved hjælp af statistiske teknikker. + +Her er nogle begreber, du bør kende for at kunne arbejde med tidsserier: + +🎓 **Trends** + +Trends defineres som målbare stigninger og fald over tid. [Læs mere](https://machinelearningmastery.com/time-series-trends-in-python). I konteksten af tidsserier handler det om, hvordan man bruger og, hvis nødvendigt, fjerner trends fra din tidsserie. + +🎓 **[Sæsonvariation](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Sæsonvariation defineres som periodiske udsving, såsom julehandlen, der kan påvirke salget. [Tag et kig](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) på, hvordan forskellige typer plots viser sæsonvariation i data. + +🎓 **Udkast** + +Udkast er datapunkter, der ligger langt fra den normale datavarians. + +🎓 **Langsigtet cyklus** + +Uafhængigt af sæsonvariation kan data vise en langsigtet cyklus, såsom en økonomisk nedgang, der varer længere end et år. + +🎓 **Konstant varians** + +Over tid viser nogle data konstante udsving, såsom energiforbrug dag og nat. + +🎓 **Pludselige ændringer** + +Data kan vise en pludselig ændring, der kræver yderligere analyse. Den pludselige lukning af virksomheder på grund af COVID, for eksempel, forårsagede ændringer i data. + +✅ Her er et [eksempel på et tidsserieplot](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python), der viser dagligt forbrug af in-game valuta over nogle år. Kan du identificere nogle af de karakteristika, der er nævnt ovenfor, i disse data? + +![In-game valuta forbrug](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Øvelse - kom i gang med data om energiforbrug + +Lad os komme i gang med at oprette en tidsseriemodel for at forudsige fremtidigt energiforbrug baseret på tidligere forbrug. + +> Dataene i dette eksempel er taget fra GEFCom2014-forudsigelseskonkurrencen. Det består af 3 års timelige elforbrug og temperaturværdier mellem 2012 og 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli og Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, juli-september, 2016. + +1. I `working`-mappen for denne lektion, åbn _notebook.ipynb_-filen. Start med at tilføje biblioteker, der vil hjælpe dig med at indlæse og visualisere data + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Bemærk, at du bruger filerne fra den medfølgende `common`-mappe, som opsætter dit miljø og håndterer download af data. + +2. Undersøg derefter dataene som en dataframe ved at kalde `load_data()` og `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Du kan se, at der er to kolonner, der repræsenterer dato og forbrug: + + | | 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. Nu, plot dataene ved at kalde `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() + ``` + + ![energiplot](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Nu, plot den første uge af juli 2014 ved at angive den som input til `energy` i `[fra dato]: [til dato]`-mønsteret: + + ```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() + ``` + + ![juli](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Et smukt plot! Tag et kig på disse plots og se, om du kan bestemme nogle af de karakteristika, der er nævnt ovenfor. Hvad kan vi udlede ved at visualisere dataene? + +I den næste lektion vil du oprette en ARIMA-model for at lave nogle forudsigelser. + +--- + +## 🚀Udfordring + +Lav en liste over alle de industrier og områder, du kan komme i tanke om, der ville drage fordel af tidsserieforudsigelse. Kan du tænke på en anvendelse af disse teknikker inden for kunst? Inden for økonometrik? Økologi? Detailhandel? Industri? Finans? Hvor ellers? + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Selvom vi ikke dækker dem her, bruges neurale netværk nogle gange til at forbedre klassiske metoder til tidsserieforudsigelse. Læs mere om dem [i denne artikel](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Opgave + +[Visualiser flere tidsserier](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/1-Introduction/assignment.md b/translations/da/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 000000000..d976e3f68 --- /dev/null +++ b/translations/da/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Visualiser nogle flere tidsserier + +## Instruktioner + +Du er begyndt at lære om tidsserieprognoser ved at kigge på den type data, der kræver denne særlige modellering. Du har visualiseret nogle data omkring energi. Nu skal du finde andre data, der kunne drage fordel af tidsserieprognoser. Find tre eksempler (prøv [Kaggle](https://kaggle.com) og [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) og opret en notebook til at visualisere dem. Notér eventuelle særlige karakteristika, de har (sæsonvariation, pludselige ændringer eller andre tendenser) i notebooken. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------- | --------------------------------------------------- | --------------------------------------------------------------------------------------- | +| | Tre datasæt er plottet og forklaret i en notebook | To datasæt er plottet og forklaret i en notebook | Få datasæt er plottet eller forklaret i en notebook, eller de præsenterede data er utilstrækkelige | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/da/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..058c8f40f --- /dev/null +++ b/translations/da/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/da/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 000000000..114d8f684 --- /dev/null +++ b/translations/da/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/2-ARIMA/README.md b/translations/da/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 000000000..33feeb2e1 --- /dev/null +++ b/translations/da/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,405 @@ + +# Tidsserieprognoser med ARIMA + +I den forrige lektion lærte du lidt om tidsserieprognoser og indlæste et datasæt, der viser udsving i elektrisk belastning over en tidsperiode. + +[![Introduktion til ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Introduktion til ARIMA") + +> 🎥 Klik på billedet ovenfor for en video: En kort introduktion til ARIMA-modeller. Eksemplet er lavet i R, men konceptet er universelt. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Introduktion + +I denne lektion vil du lære en specifik metode til at bygge modeller med [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). ARIMA-modeller er særligt velegnede til at tilpasse data, der viser [ikke-stationaritet](https://wikipedia.org/wiki/Stationary_process). + +## Generelle begreber + +For at kunne arbejde med ARIMA er der nogle begreber, du skal kende til: + +- 🎓 **Stationaritet**. Fra et statistisk perspektiv refererer stationaritet til data, hvis fordeling ikke ændrer sig, når den forskydes i tid. Ikke-stationære data viser derimod udsving på grund af tendenser, som skal transformeres for at kunne analyseres. Sæsonvariationer kan for eksempel introducere udsving i data og kan fjernes ved en proces kaldet 'sæsonmæssig differencering'. + +- 🎓 **[Differencering](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Differencering af data, igen fra et statistisk perspektiv, refererer til processen med at transformere ikke-stationære data for at gøre dem stationære ved at fjerne deres ikke-konstante tendens. "Differencering fjerner ændringer i niveauet af en tidsserie, eliminerer tendens og sæsonvariation og stabiliserer dermed gennemsnittet af tidsserien." [Papir af Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA i konteksten af tidsserier + +Lad os pakke ARIMA's dele ud for bedre at forstå, hvordan det hjælper os med at modellere tidsserier og lave forudsigelser baseret på dem. + +- **AR - for AutoRegressiv**. Autoregressive modeller ser, som navnet antyder, 'tilbage' i tiden for at analysere tidligere værdier i dine data og lave antagelser om dem. Disse tidligere værdier kaldes 'lags'. Et eksempel kunne være data, der viser månedlige salg af blyanter. Hver måneds salgstal ville blive betragtet som en 'udviklende variabel' i datasættet. Denne model bygges ved, at "den udviklende variabel af interesse regresseres på sine egne forsinkede (dvs. tidligere) værdier." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - for Integreret**. I modsætning til de lignende 'ARMA'-modeller refererer 'I' i ARIMA til dens *[integrerede](https://wikipedia.org/wiki/Order_of_integration)* aspekt. Dataene bliver 'integreret', når differenceringstrin anvendes for at eliminere ikke-stationaritet. + +- **MA - for Glidende Gennemsnit**. Det [glidende gennemsnit](https://wikipedia.org/wiki/Moving-average_model)-aspekt af denne model refererer til outputvariablen, der bestemmes ved at observere de aktuelle og tidligere værdier af lags. + +Kort sagt: ARIMA bruges til at få en model til at passe så tæt som muligt til den særlige form for tidsseriedata. + +## Øvelse - byg en ARIMA-model + +Åbn [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working)-mappen i denne lektion og find filen [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb). + +1. Kør notebooken for at indlæse Python-biblioteket `statsmodels`; du skal bruge dette til ARIMA-modeller. + +1. Indlæs nødvendige biblioteker. + +1. Indlæs nu flere biblioteker, der er nyttige til at plotte data: + + ```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. Indlæs data fra filen `/data/energy.csv` i en Pandas dataframe og kig på det: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Plot alle tilgængelige energidata fra januar 2012 til december 2014. Der bør ikke være nogen overraskelser, da vi så disse data i den sidste lektion: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Nu skal vi bygge en model! + +### Opret trænings- og testdatasæt + +Nu er dine data indlæst, så du kan opdele dem i trænings- og testdatasæt. Du vil træne din model på træningssættet. Som sædvanligt, efter at modellen er færdig med at træne, vil du evaluere dens nøjagtighed ved hjælp af testdatasættet. Du skal sikre dig, at testdatasættet dækker en senere periode end træningssættet for at sikre, at modellen ikke får information fra fremtidige tidsperioder. + +1. Tildel en to-måneders periode fra 1. september til 31. oktober 2014 til træningssættet. Testdatasættet vil inkludere to-måneders perioden fra 1. november til 31. december 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Da disse data afspejler det daglige energiforbrug, er der et stærkt sæsonmønster, men forbruget ligner mest forbruget i de mere nylige dage. + +1. Visualiser forskellene: + + ```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() + ``` + + ![trænings- og testdata](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Derfor bør det være tilstrækkeligt at bruge et relativt lille tidsvindue til at træne dataene. + + > Bemærk: Da den funktion, vi bruger til at tilpasse ARIMA-modellen, bruger in-sample validering under tilpasning, vil vi udelade valideringsdata. + +### Forbered dataene til træning + +Nu skal du forberede dataene til træning ved at udføre filtrering og skalering af dine data. Filtrer dit datasæt, så det kun inkluderer de nødvendige tidsperioder og kolonner, og skaler dataene for at sikre, at de projiceres i intervallet 0,1. + +1. Filtrer det originale datasæt, så det kun inkluderer de nævnte tidsperioder pr. sæt og kun inkluderer den nødvendige kolonne 'load' plus datoen: + + ```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) + ``` + + Du kan se formen af dataene: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Skaler dataene til at være i intervallet (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Visualiser de originale vs. skalerede data: + + ```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](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > De originale data + + ![skaleret](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > De skalerede data + +1. Nu hvor du har kalibreret de skalerede data, kan du skalere testdataene: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Implementer ARIMA + +Det er tid til at implementere ARIMA! Du vil nu bruge `statsmodels`-biblioteket, som du installerede tidligere. + +Nu skal du følge flere trin: + + 1. Definer modellen ved at kalde `SARIMAX()` og angive modelparametrene: p-, d- og q-parametre samt P-, D- og Q-parametre. + 2. Forbered modellen til træningsdataene ved at kalde funktionen `fit()`. + 3. Lav forudsigelser ved at kalde funktionen `forecast()` og angive antallet af trin (horisonten), der skal forudsiges. + +> 🎓 Hvad er alle disse parametre til? I en ARIMA-model er der 3 parametre, der bruges til at hjælpe med at modellere de vigtigste aspekter af en tidsserie: sæsonvariation, tendens og støj. Disse parametre er: + +`p`: parameteren, der er forbundet med den autoregressive del af modellen, som inkorporerer *tidligere* værdier. +`d`: parameteren, der er forbundet med den integrerede del af modellen, som påvirker mængden af *differencering* (🎓 husk differencering 👆?) der skal anvendes på en tidsserie. +`q`: parameteren, der er forbundet med den glidende gennemsnitsdel af modellen. + +> Bemærk: Hvis dine data har en sæsonmæssig komponent - hvilket disse data har - bruger vi en sæsonmæssig ARIMA-model (SARIMA). I så fald skal du bruge et andet sæt parametre: `P`, `D` og `Q`, som beskriver de samme associationer som `p`, `d` og `q`, men svarer til de sæsonmæssige komponenter i modellen. + +1. Start med at indstille din foretrukne horisontværdi. Lad os prøve 3 timer: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Det kan være udfordrende at vælge de bedste værdier for en ARIMA-models parametre, da det er noget subjektivt og tidskrævende. Du kan overveje at bruge en `auto_arima()`-funktion fra [`pyramid`-biblioteket](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Prøv for nu nogle manuelle valg for at finde en god model. + + ```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()) + ``` + + En tabel med resultater udskrives. + +Du har bygget din første model! Nu skal vi finde en måde at evaluere den på. + +### Evaluer din model + +For at evaluere din model kan du udføre den såkaldte `walk forward`-validering. I praksis bliver tidsseriemodeller gen-trænet hver gang nye data bliver tilgængelige. Dette giver modellen mulighed for at lave den bedste forudsigelse på hvert tidspunkt. + +Startende fra begyndelsen af tidsserien, træner du modellen på træningsdatasættet. Derefter laver du en forudsigelse for det næste tidspunkt. Forudsigelsen evalueres mod den kendte værdi. Træningssættet udvides derefter til at inkludere den kendte værdi, og processen gentages. + +> Bemærk: Du bør holde træningssættets vindue fast for mere effektiv træning, så hver gang du tilføjer en ny observation til træningssættet, fjerner du observationen fra begyndelsen af sættet. + +Denne proces giver en mere robust estimering af, hvordan modellen vil præstere i praksis. Dog kommer det med den beregningsmæssige omkostning ved at skabe så mange modeller. Dette er acceptabelt, hvis dataene er små eller modellen er simpel, men kan være et problem i stor skala. + +Walk-forward validering er guldstandarden for evaluering af tidsseriemodeller og anbefales til dine egne projekter. + +1. Først, opret et testdatapunkt for hvert HORIZON-trin. + + ```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 | + + Dataene forskydes horisontalt i henhold til deres horisontpunkt. + +1. Lav forudsigelser på dine testdata ved hjælp af denne glidende vinduesmetode i en løkke på størrelse med testdatasættets længde: + + ```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) + ``` + + Du kan se træningen foregå: + + ```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. Sammenlign forudsigelserne med den faktiske belastning: + + ```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 | + + Observer forudsigelsen af den timelige data sammenlignet med den faktiske belastning. Hvor nøjagtig er den? + +### Tjek modellens nøjagtighed + +Tjek nøjagtigheden af din model ved at teste dens gennemsnitlige absolutte procentfejl (MAPE) over alle forudsigelserne. +> **🧮 Vis mig matematikken** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) bruges til at vise forudsigelsesnøjagtighed som et forhold defineret af ovenstående formel. Forskellen mellem faktisk og forudsagt deles med den faktiske værdi. "Den absolutte værdi i denne beregning summeres for hvert forudsagt tidspunkt og deles med antallet af tilpassede punkter n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Udtryk ligningen i kode: + + ```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. Beregn MAPE for ét trin: + + ```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 for ét trin: 0.5570581332313952 % + +1. Udskriv MAPE for multi-trins prognose: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Et lavt tal er bedst: husk, at en prognose med en MAPE på 10 er 10% ved siden af. + +1. Men som altid er det nemmere at se denne type nøjagtighedsmåling visuelt, så lad os plotte det: + + ```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() + ``` + + ![en tidsseriemodel](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Et rigtig flot plot, der viser en model med god nøjagtighed. Godt arbejde! + +--- + +## 🚀Udfordring + +Undersøg metoder til at teste nøjagtigheden af en tidsseriemodel. Vi berører MAPE i denne lektion, men er der andre metoder, du kunne bruge? Undersøg dem og annotér dem. Et nyttigt dokument kan findes [her](https://otexts.com/fpp2/accuracy.html) + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Denne lektion berører kun det grundlæggende i tidsserieprognoser med ARIMA. Brug lidt tid på at uddybe din viden ved at undersøge [dette repository](https://microsoft.github.io/forecasting/) og dets forskellige modeltyper for at lære andre måder at bygge tidsseriemodeller på. + +## Opgave + +[En ny ARIMA-model](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/2-ARIMA/assignment.md b/translations/da/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 000000000..d5948b490 --- /dev/null +++ b/translations/da/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# En ny ARIMA-model + +## Instruktioner + +Nu hvor du har bygget en ARIMA-model, skal du bygge en ny med friske data (prøv en af [disse datasæt fra Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Annotér dit arbejde i en notebook, visualisér dataene og din model, og test dens nøjagtighed ved hjælp af MAPE. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------- | +| | En notebook præsenteres med en ny ARIMA-model, der er bygget, testet og forklaret med visualiseringer og angivet nøjagtighed. | Den præsenterede notebook er ikke annoteret eller indeholder fejl | En ufuldstændig notebook præsenteres | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/da/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 000000000..64b70bc5a --- /dev/null +++ b/translations/da/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/da/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 000000000..5fdb3a5c4 --- /dev/null +++ b/translations/da/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/3-SVR/README.md b/translations/da/7-TimeSeries/3-SVR/README.md new file mode 100644 index 000000000..e5bb4ea20 --- /dev/null +++ b/translations/da/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Tidsserieforudsigelse med Support Vector Regressor + +I den forrige lektion lærte du, hvordan man bruger ARIMA-modellen til at lave tidsserieforudsigelser. Nu skal du se på Support Vector Regressor-modellen, som er en regressionsmodel, der bruges til at forudsige kontinuerlige data. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Introduktion + +I denne lektion vil du opdage en specifik måde at bygge modeller med [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) til regression, eller **SVR: Support Vector Regressor**. + +### SVR i konteksten af tidsserier [^1] + +Før du forstår vigtigheden af SVR i tidsserieforudsigelse, er her nogle af de vigtige begreber, du skal kende: + +- **Regression:** En superviseret læringsteknik til at forudsige kontinuerlige værdier ud fra et givet sæt input. Ideen er at tilpasse en kurve (eller linje) i funktionsrummet, der har det maksimale antal datapunkter. [Klik her](https://en.wikipedia.org/wiki/Regression_analysis) for mere information. +- **Support Vector Machine (SVM):** En type superviseret maskinlæringsmodel, der bruges til klassifikation, regression og detektion af outliers. Modellen er et hyperplan i funktionsrummet, som i tilfælde af klassifikation fungerer som en grænse, og i tilfælde af regression fungerer som den bedst tilpassede linje. I SVM bruges en Kernel-funktion generelt til at transformere datasættet til et rum med et højere antal dimensioner, så de kan adskilles lettere. [Klik her](https://en.wikipedia.org/wiki/Support-vector_machine) for mere information om SVM'er. +- **Support Vector Regressor (SVR):** En type SVM, der finder den bedst tilpassede linje (som i SVM er et hyperplan), der har det maksimale antal datapunkter. + +### Hvorfor SVR? [^1] + +I den sidste lektion lærte du om ARIMA, som er en meget succesfuld statistisk lineær metode til at forudsige tidsseriedata. Men i mange tilfælde har tidsseriedata *ikke-linearitet*, som ikke kan kortlægges af lineære modeller. I sådanne tilfælde gør SVM's evne til at tage højde for ikke-linearitet i data til regression SVR succesfuld i tidsserieforudsigelse. + +## Øvelse - byg en SVR-model + +De første trin til datapreparation er de samme som i den forrige lektion om [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Åbn mappen [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) i denne lektion og find filen [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb). [^2] + +1. Kør notebooken og importer de nødvendige biblioteker: [^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. Indlæs data fra filen `/data/energy.csv` til en Pandas dataframe og kig på dem: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Plot alle de tilgængelige energidata fra januar 2012 til december 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() + ``` + + ![fulde data](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Nu skal vi bygge vores SVR-model. + +### Opret trænings- og testdatasæt + +Nu er dine data indlæst, så du kan opdele dem i trænings- og testdatasæt. Derefter skal du omforme dataene for at skabe et tidsbaseret datasæt, som vil være nødvendigt for SVR. Du træner din model på træningssættet. Når modellen er færdig med at træne, evaluerer du dens nøjagtighed på træningssættet, testsættet og derefter det fulde datasæt for at se den samlede ydeevne. Du skal sikre dig, at testsættet dækker en senere periode end træningssættet for at sikre, at modellen ikke får information fra fremtidige tidsperioder [^2] (en situation kendt som *overfitting*). + +1. Tildel en to-måneders periode fra 1. september til 31. oktober 2014 til træningssættet. Testsættet vil inkludere to-måneders perioden fra 1. november til 31. december 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Visualiser forskellene: [^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() + ``` + + ![trænings- og testdata](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Forbered dataene til træning + +Nu skal du forberede dataene til træning ved at udføre filtrering og skalering af dine data. Filtrer dit datasæt, så det kun inkluderer de tidsperioder og kolonner, du har brug for, og skaler dataene for at sikre, at de projiceres i intervallet 0,1. + +1. Filtrer det originale datasæt, så det kun inkluderer de nævnte tidsperioder pr. sæt og kun inkluderer den nødvendige kolonne 'load' plus datoen: [^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. Skaler træningsdataene til at være i intervallet (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Skaler nu testdataene: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Opret data med tidssteg [^1] + +For SVR transformerer du inputdataene til formen `[batch, timesteps]`. Så du omformer de eksisterende `train_data` og `test_data`, så der er en ny dimension, der refererer til tidsstegene. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +I dette eksempel tager vi `timesteps = 5`. Så input til modellen er dataene for de første 4 tidssteg, og output vil være dataene for det 5. tidssteg. + +```python +timesteps=5 +``` + +Konvertering af træningsdata til 2D tensor ved hjælp af nested list comprehension: + +```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) +``` + +Konvertering af testdata til 2D tensor: + +```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) +``` + +Udvælgelse af input og output fra trænings- og testdata: + +```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) +``` + +### Implementer SVR [^1] + +Nu er det tid til at implementere SVR. For at læse mere om denne implementering kan du referere til [denne dokumentation](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). For vores implementering følger vi disse trin: + + 1. Definer modellen ved at kalde `SVR()` og angive modelhyperparametrene: kernel, gamma, c og epsilon + 2. Forbered modellen til træningsdataene ved at kalde funktionen `fit()` + 3. Lav forudsigelser ved at kalde funktionen `predict()` + +Nu opretter vi en SVR-model. Her bruger vi [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel) og sætter hyperparametrene gamma, C og epsilon til henholdsvis 0.5, 10 og 0.05. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Tilpas modellen til træningsdata [^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) +``` + +#### Lav model-forudsigelser [^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) +``` + +Du har bygget din SVR! Nu skal vi evaluere den. + +### Evaluer din model [^1] + +For evaluering skal vi først skalere dataene tilbage til vores originale skala. Derefter, for at kontrollere ydeevnen, vil vi plotte den originale og forudsagte tidsserie og også udskrive MAPE-resultatet. + +Skaler det forudsagte og originale output: + +```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)) +``` + +#### Kontroller modelens ydeevne på trænings- og testdata [^1] + +Vi udtrækker tidsstemplerne fra datasættet for at vise dem på x-aksen i vores plot. Bemærk, at vi bruger de første ```timesteps-1``` værdier som input til det første output, så tidsstemplerne for output vil starte derefter. + +```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 +``` + +Plot forudsigelserne for træningsdata: + +```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() +``` + +![forudsigelse af træningsdata](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Udskriv MAPE for træningsdata + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Plot forudsigelserne for testdata + +```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() +``` + +![forudsigelse af testdata](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Udskriv MAPE for testdata + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Du har et meget godt resultat på testdatasættet! + +### Kontroller modelens ydeevne på det fulde datasæt [^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() +``` + +![forudsigelse af fulde data](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Meget flotte plots, der viser en model med god nøjagtighed. Godt arbejde! + +--- + +## 🚀Udfordring + +- Prøv at justere hyperparametrene (gamma, C, epsilon) under oprettelsen af modellen og evaluer på dataene for at se, hvilket sæt hyperparametre giver de bedste resultater på testdataene. For at lære mere om disse hyperparametre kan du referere til dokumentet [her](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Prøv at bruge forskellige kernel-funktioner til modellen og analyser deres ydeevne på datasættet. Et nyttigt dokument kan findes [her](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Prøv at bruge forskellige værdier for `timesteps` for modellen til at kigge tilbage for at lave forudsigelser. + +## [Quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Denne lektion introducerede anvendelsen af SVR til tidsserieforudsigelse. For at læse mere om SVR kan du referere til [denne blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Denne [dokumentation om scikit-learn](https://scikit-learn.org/stable/modules/svm.html) giver en mere omfattende forklaring om SVM'er generelt, [SVR'er](https://scikit-learn.org/stable/modules/svm.html#regression) og også andre implementeringsdetaljer såsom de forskellige [kernel-funktioner](https://scikit-learn.org/stable/modules/svm.html#kernel-functions), der kan bruges, og deres parametre. + +## Opgave + +[En ny SVR-model](assignment.md) + +## Credits + +[^1]: Teksten, koden og output i dette afsnit blev bidraget af [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: Teksten, koden og output i dette afsnit blev taget fra [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/3-SVR/assignment.md b/translations/da/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 000000000..2eaab547e --- /dev/null +++ b/translations/da/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,27 @@ + +# En ny SVR-model + +## Instruktioner [^1] + +Nu hvor du har bygget en SVR-model, skal du bygge en ny med friske data (prøv en af [disse datasæt fra Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Annotér dit arbejde i en notebook, visualisér dataene og din model, og test dens nøjagtighed ved hjælp af passende grafer og MAPE. Prøv også at justere de forskellige hyperparametre og anvende forskellige værdier for tidsintervallerne. + +## Vurderingskriterier [^1] + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------- | +| | En notebook præsenteres med en SVR-model, der er bygget, testet og forklaret med visualiseringer og angivet nøjagtighed. | Den præsenterede notebook er ikke annoteret eller indeholder fejl. | En ufuldstændig notebook præsenteres | + +[^1]:Teksten i denne sektion er baseret på [opgaven fra ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/7-TimeSeries/README.md b/translations/da/7-TimeSeries/README.md new file mode 100644 index 000000000..3f6887667 --- /dev/null +++ b/translations/da/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Introduktion til tidsserieforudsigelse + +Hvad er tidsserieforudsigelse? Det handler om at forudsige fremtidige begivenheder ved at analysere tidligere tendenser. + +## Regionalt emne: globalt elforbrug ✨ + +I disse to lektioner vil du blive introduceret til tidsserieforudsigelse, et område inden for maskinlæring, der måske er mindre kendt, men som alligevel er ekstremt værdifuldt for industrielle og forretningsmæssige anvendelser, blandt andre områder. Selvom neurale netværk kan bruges til at forbedre nytten af disse modeller, vil vi studere dem i konteksten af klassisk maskinlæring, da modellerne hjælper med at forudsige fremtidig præstation baseret på fortiden. + +Vores regionale fokus er elektrisk forbrug i verden, et interessant datasæt til at lære om forudsigelse af fremtidigt energiforbrug baseret på mønstre fra tidligere belastning. Du kan se, hvordan denne type forudsigelse kan være ekstremt nyttig i en forretningsmæssig sammenhæng. + +![elnet](../../../7-TimeSeries/images/electric-grid.jpg) + +Foto af [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) af elektriske tårne på en vej i Rajasthan på [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Lektioner + +1. [Introduktion til tidsserieforudsigelse](1-Introduction/README.md) +2. [Opbygning af ARIMA-tidsseriemodeller](2-ARIMA/README.md) +3. [Opbygning af Support Vector Regressor til tidsserieforudsigelse](3-SVR/README.md) + +## Kreditering + +"Introduktion til tidsserieforudsigelse" blev skrevet med ⚡️ af [Francesca Lazzeri](https://twitter.com/frlazzeri) og [Jen Looper](https://twitter.com/jenlooper). Notebooks blev først offentliggjort online i [Azure "Deep Learning For Time Series"-repoet](https://github.com/Azure/DeepLearningForTimeSeriesForecasting), oprindeligt skrevet af Francesca Lazzeri. SVR-lektionen blev skrevet af [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/1-QLearning/README.md b/translations/da/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 000000000..774da9a16 --- /dev/null +++ b/translations/da/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Introduktion til Forstærkningslæring og Q-Learning + +![Oversigt over forstærkning i maskinlæring i en sketchnote](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote af [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Forstærkningslæring involverer tre vigtige begreber: agenten, nogle tilstande og et sæt handlinger pr. tilstand. Ved at udføre en handling i en specifik tilstand får agenten en belønning. Forestil dig igen computerspillet Super Mario. Du er Mario, du befinder dig i et spilniveau, stående ved kanten af en klippe. Over dig er der en mønt. Du som Mario, i et spilniveau, på en specifik position ... det er din tilstand. Hvis du tager et skridt til højre (en handling), falder du ud over kanten, hvilket giver dig en lav numerisk score. Men hvis du trykker på hop-knappen, scorer du et point og forbliver i live. Det er et positivt resultat, og det bør give dig en positiv numerisk score. + +Ved at bruge forstærkningslæring og en simulator (spillet) kan du lære at spille spillet for at maksimere belønningen, som er at forblive i live og score så mange point som muligt. + +[![Introduktion til Forstærkningslæring](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Klik på billedet ovenfor for at høre Dmitry diskutere Forstærkningslæring + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Forudsætninger og Opsætning + +I denne lektion vil vi eksperimentere med noget kode i Python. Du skal kunne køre Jupyter Notebook-koden fra denne lektion, enten på din computer eller i skyen. + +Du kan åbne [lektionens notebook](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) og gennemgå denne lektion for at bygge. + +> **Bemærk:** Hvis du åbner denne kode fra skyen, skal du også hente filen [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), som bruges i notebook-koden. Tilføj den til samme mappe som notebooken. + +## Introduktion + +I denne lektion vil vi udforske verdenen af **[Peter og Ulven](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, inspireret af et musikalsk eventyr af den russiske komponist [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Vi vil bruge **Forstærkningslæring** til at lade Peter udforske sit miljø, samle lækre æbler og undgå at møde ulven. + +**Forstærkningslæring** (RL) er en læringsteknik, der giver os mulighed for at lære en optimal adfærd for en **agent** i et **miljø** ved at udføre mange eksperimenter. En agent i dette miljø skal have et **mål**, defineret af en **belønningsfunktion**. + +## Miljøet + +For enkelhedens skyld lad os antage, at Peters verden er en kvadratisk spilleplade med størrelsen `bredde` x `højde`, som denne: + +![Peters Miljø](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Hver celle på denne spilleplade kan enten være: + +* **jord**, som Peter og andre væsener kan gå på. +* **vand**, som man selvfølgelig ikke kan gå på. +* et **træ** eller **græs**, et sted hvor man kan hvile sig. +* et **æble**, som repræsenterer noget, Peter ville være glad for at finde for at spise. +* en **ulv**, som er farlig og bør undgås. + +Der er et separat Python-modul, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), som indeholder koden til at arbejde med dette miljø. Fordi denne kode ikke er vigtig for at forstå vores begreber, vil vi importere modulet og bruge det til at oprette spillepladen (kodeblok 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Denne kode bør udskrive et billede af miljøet, der ligner det ovenfor. + +## Handlinger og strategi + +I vores eksempel vil Peters mål være at finde et æble, mens han undgår ulven og andre forhindringer. For at gøre dette kan han i princippet gå rundt, indtil han finder et æble. + +Derfor kan han på enhver position vælge mellem følgende handlinger: op, ned, venstre og højre. + +Vi vil definere disse handlinger som en ordbog og kortlægge dem til par af tilsvarende koordinatændringer. For eksempel vil bevægelse til højre (`R`) svare til et par `(1,0)`. (kodeblok 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()) } +``` + +For at opsummere er strategien og målet for dette scenarie som følger: + +- **Strategien**, for vores agent (Peter) er defineret af en såkaldt **politik**. En politik er en funktion, der returnerer handlingen i en given tilstand. I vores tilfælde er problemet repræsenteret af spillepladen, inklusive spillerens aktuelle position. + +- **Målet**, med forstærkningslæring er at lære en god politik, der gør det muligt for os at løse problemet effektivt. Som en baseline lad os overveje den enkleste politik kaldet **tilfældig gang**. + +## Tilfældig gang + +Lad os først løse vores problem ved at implementere en strategi med tilfældig gang. Med tilfældig gang vil vi tilfældigt vælge den næste handling fra de tilladte handlinger, indtil vi når æblet (kodeblok 3). + +1. Implementer den tilfældige gang med nedenstående kode: + + ```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) + ``` + + Kaldet til `walk` bør returnere længden af den tilsvarende sti, som kan variere fra den ene kørsel til den anden. + +1. Kør gangeksperimentet et antal gange (f.eks. 100), og udskriv de resulterende statistikker (kodeblok 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) + ``` + + Bemærk, at den gennemsnitlige længde af en sti er omkring 30-40 trin, hvilket er ret meget, i betragtning af at den gennemsnitlige afstand til det nærmeste æble er omkring 5-6 trin. + + Du kan også se, hvordan Peters bevægelse ser ud under den tilfældige gang: + + ![Peters Tilfældige Gang](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Belønningsfunktion + +For at gøre vores politik mere intelligent skal vi forstå, hvilke bevægelser der er "bedre" end andre. For at gøre dette skal vi definere vores mål. + +Målet kan defineres i form af en **belønningsfunktion**, som vil returnere en scoreværdi for hver tilstand. Jo højere tallet er, desto bedre er belønningsfunktionen. (kodeblok 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 +``` + +En interessant ting ved belønningsfunktioner er, at i de fleste tilfælde *får vi kun en væsentlig belønning ved slutningen af spillet*. Det betyder, at vores algoritme på en eller anden måde skal huske "gode" trin, der fører til en positiv belønning til sidst, og øge deres betydning. Tilsvarende bør alle bevægelser, der fører til dårlige resultater, frarådes. + +## Q-Learning + +En algoritme, som vi vil diskutere her, kaldes **Q-Learning**. I denne algoritme defineres politikken af en funktion (eller en datastruktur) kaldet en **Q-Table**. Den registrerer "godheden" af hver af handlingerne i en given tilstand. + +Den kaldes en Q-Table, fordi det ofte er praktisk at repræsentere den som en tabel eller en multidimensionel array. Da vores spilleplade har dimensionerne `bredde` x `højde`, kan vi repræsentere Q-Table ved hjælp af en numpy-array med formen `bredde` x `højde` x `len(actions)`: (kodeblok 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Bemærk, at vi initialiserer alle værdierne i Q-Table med en ens værdi, i vores tilfælde - 0.25. Dette svarer til politikken "tilfældig gang", fordi alle bevægelser i hver tilstand er lige gode. Vi kan sende Q-Table til `plot`-funktionen for at visualisere tabellen på spillepladen: `m.plot(Q)`. + +![Peters Miljø](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +I midten af hver celle er der en "pil", der angiver den foretrukne bevægelsesretning. Da alle retninger er ens, vises en prik. + +Nu skal vi køre simuleringen, udforske vores miljø og lære en bedre fordeling af Q-Table-værdier, som gør det muligt for os at finde vejen til æblet meget hurtigere. + +## Essensen af Q-Learning: Bellman-ligningen + +Når vi begynder at bevæge os, vil hver handling have en tilsvarende belønning, dvs. vi kan teoretisk vælge den næste handling baseret på den højeste umiddelbare belønning. Men i de fleste tilstande vil bevægelsen ikke opnå vores mål om at nå æblet, og vi kan derfor ikke straks beslutte, hvilken retning der er bedre. + +> Husk, at det ikke er det umiddelbare resultat, der betyder noget, men snarere det endelige resultat, som vi vil opnå ved slutningen af simuleringen. + +For at tage højde for denne forsinkede belønning skal vi bruge principperne for **[dynamisk programmering](https://en.wikipedia.org/wiki/Dynamic_programming)**, som giver os mulighed for at tænke på vores problem rekursivt. + +Antag, at vi nu er i tilstanden *s*, og vi ønsker at bevæge os til den næste tilstand *s'*. Ved at gøre det vil vi modtage den umiddelbare belønning *r(s,a)*, defineret af belønningsfunktionen, plus en fremtidig belønning. Hvis vi antager, at vores Q-Table korrekt afspejler "attraktiviteten" af hver handling, vil vi i tilstanden *s'* vælge en handling *a*, der svarer til den maksimale værdi af *Q(s',a')*. Således vil den bedste mulige fremtidige belønning, vi kunne få i tilstanden *s*, være defineret som `max` + +## Kontrol af politikken + +Da Q-Tabellen viser "attraktiviteten" af hver handling i hver tilstand, er det ret nemt at bruge den til at definere effektiv navigation i vores verden. I det simpleste tilfælde kan vi vælge den handling, der svarer til den højeste Q-Table-værdi: (kodeblok 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) +``` + +> Hvis du prøver koden ovenfor flere gange, vil du måske bemærke, at den nogle gange "hænger", og du skal trykke på STOP-knappen i notebooken for at afbryde den. Dette sker, fordi der kan være situationer, hvor to tilstande "peger" på hinanden i forhold til optimal Q-værdi, hvilket får agenten til at bevæge sig mellem disse tilstande uendeligt. + +## 🚀Udfordring + +> **Opgave 1:** Modificer `walk`-funktionen til at begrænse den maksimale længde af stien til et bestemt antal trin (f.eks. 100), og se koden ovenfor returnere denne værdi fra tid til anden. + +> **Opgave 2:** Modificer `walk`-funktionen, så den ikke vender tilbage til steder, hvor den allerede har været tidligere. Dette vil forhindre `walk` i at gentage sig selv, men agenten kan stadig ende med at være "fanget" på et sted, hvorfra den ikke kan undslippe. + +## Navigation + +En bedre navigationspolitik ville være den, vi brugte under træningen, som kombinerer udnyttelse og udforskning. I denne politik vil vi vælge hver handling med en vis sandsynlighed, proportional med værdierne i Q-Tabellen. Denne strategi kan stadig resultere i, at agenten vender tilbage til en position, den allerede har udforsket, men som du kan se fra koden nedenfor, resulterer den i en meget kort gennemsnitlig sti til den ønskede placering (husk, at `print_statistics` kører simuleringen 100 gange): (kodeblok 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) +``` + +Efter at have kørt denne kode, bør du få en meget mindre gennemsnitlig stiens længde end før, i området 3-6. + +## Undersøgelse af læringsprocessen + +Som vi har nævnt, er læringsprocessen en balance mellem udforskning og udnyttelse af den viden, der er opnået om problemrummets struktur. Vi har set, at resultaterne af læringen (evnen til at hjælpe en agent med at finde en kort sti til målet) er forbedret, men det er også interessant at observere, hvordan den gennemsnitlige stiens længde opfører sig under læringsprocessen: + +Læringen kan opsummeres som: + +- **Gennemsnitlig stiens længde stiger**. Det, vi ser her, er, at i starten stiger den gennemsnitlige stiens længde. Dette skyldes sandsynligvis, at når vi intet ved om miljøet, er vi tilbøjelige til at blive fanget i dårlige tilstande, vand eller ulv. Når vi lærer mere og begynder at bruge denne viden, kan vi udforske miljøet længere, men vi ved stadig ikke særlig godt, hvor æblerne er. + +- **Stiens længde falder, efterhånden som vi lærer mere**. Når vi lærer nok, bliver det lettere for agenten at nå målet, og stiens længde begynder at falde. Vi er dog stadig åbne for udforskning, så vi afviger ofte fra den bedste sti og udforsker nye muligheder, hvilket gør stien længere end optimal. + +- **Længden stiger pludseligt**. Det, vi også observerer på denne graf, er, at længden på et tidspunkt steg pludseligt. Dette indikerer den stokastiske natur af processen, og at vi på et tidspunkt kan "ødelægge" Q-Table-koefficienterne ved at overskrive dem med nye værdier. Dette bør ideelt set minimeres ved at reducere læringsraten (for eksempel mod slutningen af træningen justerer vi kun Q-Table-værdierne med en lille værdi). + +Samlet set er det vigtigt at huske, at succes og kvaliteten af læringsprocessen afhænger betydeligt af parametre som læringsrate, læringsrate-nedgang og diskonteringsfaktor. Disse kaldes ofte **hyperparametre** for at skelne dem fra **parametre**, som vi optimerer under træningen (for eksempel Q-Table-koefficienter). Processen med at finde de bedste hyperparameterværdier kaldes **hyperparameteroptimering**, og det fortjener et separat emne. + +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +## Opgave +[En Mere Realistisk Verden](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/1-QLearning/assignment.md b/translations/da/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 000000000..9acc78bb1 --- /dev/null +++ b/translations/da/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# En Mere Realistisk Verden + +I vores situation kunne Peter bevæge sig rundt næsten uden at blive træt eller sulten. I en mere realistisk verden skal han sætte sig ned og hvile fra tid til anden og også sørge for at spise. Lad os gøre vores verden mere realistisk ved at implementere følgende regler: + +1. Ved at bevæge sig fra et sted til et andet mister Peter **energi** og opbygger noget **træthed**. +2. Peter kan få mere energi ved at spise æbler. +3. Peter kan slippe af med træthed ved at hvile under træet eller på græsset (dvs. gå ind på en brætposition med et træ eller græs - grøn mark). +4. Peter skal finde og dræbe ulven. +5. For at dræbe ulven skal Peter have visse niveauer af energi og træthed, ellers taber han kampen. + +## Instruktioner + +Brug den originale [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) som udgangspunkt for din løsning. + +Modificer belønningsfunktionen ovenfor i henhold til spillets regler, kør forstærkningslæringsalgoritmen for at lære den bedste strategi for at vinde spillet, og sammenlign resultaterne af tilfældig gang med din algoritme med hensyn til antal vundne og tabte spil. + +> **Note**: I din nye verden er tilstanden mere kompleks og inkluderer, udover menneskets position, også trætheds- og energiniveauer. Du kan vælge at repræsentere tilstanden som en tuple (Bræt, energi, træthed), eller definere en klasse for tilstanden (du kan også vælge at aflede den fra `Board`), eller endda modificere den originale `Board`-klasse inde i [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +I din løsning skal du beholde koden, der er ansvarlig for strategien med tilfældig gang, og sammenligne resultaterne af din algoritme med tilfældig gang til sidst. + +> **Note**: Du kan være nødt til at justere hyperparametre for at få det til at fungere, især antallet af epoker. Fordi succesen i spillet (kampen mod ulven) er en sjælden begivenhed, kan du forvente en meget længere træningstid. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver Forbedring | +| --------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | En notebook præsenteres med definitionen af de nye verdensregler, Q-Learning-algoritmen og nogle tekstforklaringer. Q-Learning er i stand til markant at forbedre resultaterne sammenlignet med tilfældig gang. | Notebook præsenteres, Q-Learning er implementeret og forbedrer resultaterne sammenlignet med tilfældig gang, men ikke markant; eller notebook er dårligt dokumenteret, og koden er ikke velstruktureret | Der er gjort nogle forsøg på at omdefinere verdens regler, men Q-Learning-algoritmen fungerer ikke, eller belønningsfunktionen er ikke fuldt defineret | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/da/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 000000000..98adb85e5 --- /dev/null +++ b/translations/da/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/da/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 000000000..831357f8f --- /dev/null +++ b/translations/da/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/2-Gym/README.md b/translations/da/8-Reinforcement/2-Gym/README.md new file mode 100644 index 000000000..fe5038caf --- /dev/null +++ b/translations/da/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,351 @@ + +# CartPole Skating + +Problemet, vi har arbejdet med i den tidligere lektion, kan virke som et legetøjsproblem, der ikke rigtig har relevans for virkelige scenarier. Dette er dog ikke tilfældet, da mange virkelige problemer deler samme karakteristika – herunder at spille skak eller Go. De er ens, fordi vi også har et bræt med givne regler og en **diskret tilstand**. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## Introduktion + +I denne lektion vil vi anvende de samme principper fra Q-Learning på et problem med en **kontinuerlig tilstand**, dvs. en tilstand, der er givet ved en eller flere reelle tal. Vi vil arbejde med følgende problem: + +> **Problem**: Hvis Peter vil undslippe ulven, skal han kunne bevæge sig hurtigere. Vi vil se, hvordan Peter kan lære at skøjte, især hvordan han kan holde balancen, ved hjælp af Q-Learning. + +![Den store flugt!](../../../../8-Reinforcement/2-Gym/images/escape.png) + +> Peter og hans venner bliver kreative for at undslippe ulven! Billede af [Jen Looper](https://twitter.com/jenlooper) + +Vi vil bruge en forenklet version af balancering kendt som **CartPole**-problemet. I CartPole-verdenen har vi en horisontal slider, der kan bevæge sig til venstre eller højre, og målet er at balancere en lodret stang oven på slideren. + +## Forudsætninger + +I denne lektion vil vi bruge et bibliotek kaldet **OpenAI Gym** til at simulere forskellige **miljøer**. Du kan køre lektionens kode lokalt (f.eks. fra Visual Studio Code), hvor simuleringen åbnes i et nyt vindue. Hvis du kører koden online, skal du muligvis lave nogle justeringer, som beskrevet [her](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +I den tidligere lektion blev spillets regler og tilstand givet af klassen `Board`, som vi selv definerede. Her vil vi bruge et specielt **simuleringsmiljø**, der simulerer fysikken bag den balancerende stang. Et af de mest populære simuleringsmiljøer til træning af reinforcement learning-algoritmer kaldes [Gym](https://gym.openai.com/), som vedligeholdes af [OpenAI](https://openai.com/). Ved at bruge dette Gym kan vi skabe forskellige **miljøer**, fra CartPole-simuleringer til Atari-spil. + +> **Note**: Du kan se andre miljøer, der er tilgængelige fra OpenAI Gym [her](https://gym.openai.com/envs/#classic_control). + +Først skal vi installere Gym og importere de nødvendige biblioteker (kodeblok 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Øvelse - initialiser et CartPole-miljø + +For at arbejde med CartPole-balanceringsproblemet skal vi initialisere det tilsvarende miljø. Hvert miljø er forbundet med: + +- **Observation space**, der definerer strukturen af den information, vi modtager fra miljøet. For CartPole-problemet modtager vi positionen af stangen, hastighed og nogle andre værdier. + +- **Action space**, der definerer mulige handlinger. I vores tilfælde er action space diskret og består af to handlinger - **venstre** og **højre**. (kodeblok 2) + +1. For at initialisere skal du skrive følgende kode: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +For at se, hvordan miljøet fungerer, lad os køre en kort simulering i 100 trin. Ved hvert trin giver vi en af de handlinger, der skal udføres – i denne simulering vælger vi bare tilfældigt en handling fra `action_space`. + +1. Kør koden nedenfor og se, hvad det fører til. + + ✅ Husk, at det er bedst at køre denne kode på en lokal Python-installation! (kodeblok 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Du bør se noget, der ligner dette billede: + + ![ikke-balancerende CartPole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Under simuleringen skal vi få observationer for at beslutte, hvordan vi skal handle. Faktisk returnerer step-funktionen aktuelle observationer, en belønningsfunktion og en "done"-flag, der angiver, om det giver mening at fortsætte simuleringen eller ej: (kodeblok 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() + ``` + + Du vil ende med at se noget som dette i notebook-outputtet: + + ```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 + ``` + + Observationsvektoren, der returneres ved hvert trin i simuleringen, indeholder følgende værdier: + - Position af vognen + - Hastighed af vognen + - Vinkel af stangen + - Rotationshastighed af stangen + +1. Få minimums- og maksimumsværdier for disse tal: (kodeblok 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Du vil også bemærke, at belønningsværdien ved hvert simuleringstrin altid er 1. Dette skyldes, at vores mål er at overleve så længe som muligt, dvs. holde stangen i en rimelig lodret position i længst mulig tid. + + ✅ Faktisk anses CartPole-simuleringen for at være løst, hvis vi formår at opnå en gennemsnitlig belønning på 195 over 100 på hinanden følgende forsøg. + +## Diskretisering af tilstand + +I Q-Learning skal vi opbygge en Q-Table, der definerer, hvad vi skal gøre i hver tilstand. For at kunne gøre dette skal tilstanden være **diskret**, mere præcist skal den indeholde et begrænset antal diskrete værdier. Derfor skal vi på en eller anden måde **diskretisere** vores observationer og kortlægge dem til et begrænset sæt af tilstande. + +Der er et par måder, vi kan gøre dette på: + +- **Opdel i intervaller**. Hvis vi kender intervallet for en bestemt værdi, kan vi opdele dette interval i et antal **intervaller** og derefter erstatte værdien med nummeret på det interval, den tilhører. Dette kan gøres ved hjælp af numpy-metoden [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html). I dette tilfælde vil vi præcist kende størrelsen på tilstanden, da den vil afhænge af antallet af intervaller, vi vælger til digitalisering. + +✅ Vi kan bruge lineær interpolation til at bringe værdier til et begrænset interval (f.eks. fra -20 til 20) og derefter konvertere tal til heltal ved at runde dem. Dette giver os lidt mindre kontrol over størrelsen af tilstanden, især hvis vi ikke kender de nøjagtige intervaller for inputværdierne. For eksempel har 2 ud af 4 værdier i vores tilfælde ikke øvre/nedre grænser for deres værdier, hvilket kan resultere i et uendeligt antal tilstande. + +I vores eksempel vil vi gå med den anden tilgang. Som du måske bemærker senere, på trods af udefinerede øvre/nedre grænser, tager disse værdier sjældent ekstreme værdier uden for visse begrænsede intervaller, så tilstande med ekstreme værdier vil være meget sjældne. + +1. Her er funktionen, der tager observationen fra vores model og producerer en tuple med 4 heltalsværdier: (kodeblok 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Lad os også udforske en anden diskretiseringsmetode ved hjælp af intervaller: (kodeblok 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. Lad os nu køre en kort simulering og observere disse diskrete miljøværdier. Prøv gerne både `discretize` og `discretize_bins` og se, om der er en forskel. + + ✅ `discretize_bins` returnerer intervalnummeret, som er 0-baseret. For værdier af inputvariablen omkring 0 returnerer den nummeret fra midten af intervallet (10). I `discretize` bekymrede vi os ikke om outputværdiernes interval, hvilket tillod dem at være negative, så tilstandsværdierne er ikke forskudt, og 0 svarer til 0. (kodeblok 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() + ``` + + ✅ Fjern kommentaren fra linjen, der starter med `env.render`, hvis du vil se, hvordan miljøet udføres. Ellers kan du udføre det i baggrunden, hvilket er hurtigere. Vi vil bruge denne "usynlige" udførelse under vores Q-Learning-proces. + +## Q-Tabellens struktur + +I vores tidligere lektion var tilstanden et simpelt par af tal fra 0 til 8, og det var derfor bekvemt at repræsentere Q-Table med en numpy-tensor med en form på 8x8x2. Hvis vi bruger intervaller til diskretisering, er størrelsen af vores tilstandsvektor også kendt, så vi kan bruge samme tilgang og repræsentere tilstanden med en array med formen 20x20x10x10x2 (her er 2 dimensionen af action space, og de første dimensioner svarer til antallet af intervaller, vi har valgt at bruge for hver af parametrene i observationsrummet). + +Men nogle gange er de præcise dimensioner af observationsrummet ikke kendt. I tilfælde af funktionen `discretize` kan vi aldrig være sikre på, at vores tilstand holder sig inden for visse grænser, fordi nogle af de oprindelige værdier ikke er begrænsede. Derfor vil vi bruge en lidt anderledes tilgang og repræsentere Q-Table med en ordbog. + +1. Brug parret *(state,action)* som ordbogs-nøgle, og værdien vil svare til Q-Table-indgangsværdien. (kodeblok 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Her definerer vi også en funktion `qvalues()`, som returnerer en liste over Q-Table-værdier for en given tilstand, der svarer til alle mulige handlinger. Hvis indgangen ikke er til stede i Q-Table, returnerer vi 0 som standard. + +## Lad os starte Q-Learning + +Nu er vi klar til at lære Peter at balancere! + +1. Først skal vi sætte nogle hyperparametre: (kodeblok 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Her er `alpha` **læringsraten**, der definerer, i hvilken grad vi skal justere de aktuelle værdier i Q-Table ved hvert trin. I den tidligere lektion startede vi med 1 og reducerede derefter `alpha` til lavere værdier under træningen. I dette eksempel vil vi holde den konstant for enkelhedens skyld, og du kan eksperimentere med at justere `alpha`-værdier senere. + + `gamma` er **diskonteringsfaktoren**, der viser, i hvilken grad vi skal prioritere fremtidig belønning over nuværende belønning. + + `epsilon` er **udforsknings-/udnyttelsesfaktoren**, der bestemmer, om vi skal foretrække udforskning frem for udnyttelse eller omvendt. I vores algoritme vil vi i `epsilon` procent af tilfældene vælge den næste handling baseret på Q-Table-værdier, og i de resterende tilfælde vil vi udføre en tilfældig handling. Dette vil give os mulighed for at udforske områder af søgefeltet, som vi aldrig har set før. + + ✅ Når det gælder balancering – at vælge en tilfældig handling (udforskning) vil fungere som et tilfældigt skub i den forkerte retning, og stangen skal lære at genvinde balancen fra disse "fejl". + +### Forbedr algoritmen + +Vi kan også lave to forbedringer af vores algoritme fra den tidligere lektion: + +- **Beregn gennemsnitlig kumulativ belønning** over et antal simuleringer. Vi vil udskrive fremskridtet hver 5000 iterationer og gennemsnitliggøre vores kumulative belønning over denne periode. Det betyder, at hvis vi får mere end 195 point, kan vi betragte problemet som løst, med endnu højere kvalitet end krævet. + +- **Beregn maksimal gennemsnitlig kumulativ belønning**, `Qmax`, og vi vil gemme Q-Table, der svarer til dette resultat. Når du kører træningen, vil du bemærke, at den gennemsnitlige kumulative belønning nogle gange begynder at falde, og vi ønsker at bevare værdierne i Q-Table, der svarer til den bedste model, der er observeret under træningen. + +1. Saml alle kumulative belønninger ved hver simulering i `rewards`-vektoren til senere plotning. (kodeblok 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=[] + ``` + +Hvad du måske bemærker fra disse resultater: + +- **Tæt på vores mål**. Vi er meget tæt på at opnå målet om at få 195 kumulative belønninger over 100+ på hinanden følgende simuleringer, eller vi har måske faktisk opnået det! Selv hvis vi får mindre tal, ved vi stadig ikke, fordi vi gennemsnitliggør over 5000 kørsel, og kun 100 kørsel er krævet i de formelle kriterier. + +- **Belønning begynder at falde**. Nogle gange begynder belønningen at falde, hvilket betyder, at vi kan "ødelægge" allerede lærte værdier i Q-Table med dem, der gør situationen værre. + +Denne observation er mere tydelig, hvis vi plotter træningsfremskridtet. + +## Plotning af træningsfremskridt + +Under træningen har vi samlet den kumulative belønningsværdi ved hver af iterationerne i `rewards`-vektoren. Her er, hvordan det ser ud, når vi plotter det mod iterationsnummeret: + +```python +plt.plot(rewards) +``` + +![råt fremskridt](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Fra denne graf er det ikke muligt at sige noget, fordi længden af træningssessionerne varierer meget på grund af den stokastiske træningsproces. For at give mere mening til denne graf kan vi beregne **løbende gennemsnit** over en række eksperimenter, lad os sige 100. Dette kan gøres bekvemt ved hjælp af `np.convolve`: (kodeblok 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![træningsfremskridt](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Justering af hyperparametre + +For at gøre læringen mere stabil giver det mening at justere nogle af vores hyperparametre under træningen. Især: + +- **For læringsraten**, `alpha`, kan vi starte med værdier tæt på 1 og derefter gradvist reducere parameteren. Med tiden vil vi få gode sandsynlighedsværdier i Q-Table, og derfor bør vi justere dem lidt og ikke overskrive dem fuldstændigt med nye værdier. + +- **Øg epsilon**. Vi kan langsomt øge `epsilon` for at udforske mindre og udnytte mere. Det giver sandsynligvis mening at starte med en lav værdi af `epsilon` og gradvist øge den til næsten 1. +> **Opgave 1**: Prøv at ændre værdierne for hyperparametrene og se, om du kan opnå en højere samlet belønning. Kommer du over 195? +> **Opgave 2**: For at løse problemet formelt, skal du opnå en gennemsnitlig belønning på 195 over 100 på hinanden følgende kørsler. Mål dette under træningen og sørg for, at du har løst problemet formelt! + +## Se resultatet i aktion + +Det kunne være interessant at se, hvordan den trænede model opfører sig. Lad os køre simuleringen og følge den samme strategi for valg af handlinger som under træningen, hvor vi sampler i henhold til sandsynlighedsfordelingen i Q-Tabellen: (kodeblok 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() +``` + +Du bør se noget lignende dette: + +![en balancerende cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Udfordring + +> **Opgave 3**: Her brugte vi den endelige kopi af Q-Tabellen, som måske ikke er den bedste. Husk, at vi har gemt den bedst præsterende Q-Tabel i variablen `Qbest`! Prøv det samme eksempel med den bedst præsterende Q-Tabel ved at kopiere `Qbest` over til `Q` og se, om du bemærker en forskel. + +> **Opgave 4**: Her valgte vi ikke den bedste handling ved hvert trin, men samplede i stedet med den tilsvarende sandsynlighedsfordeling. Ville det give mere mening altid at vælge den bedste handling med den højeste værdi i Q-Tabellen? Dette kan gøres ved at bruge funktionen `np.argmax` til at finde handlingsnummeret, der svarer til den højeste værdi i Q-Tabellen. Implementer denne strategi og se, om det forbedrer balanceringen. + +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +## Opgave +[Træn en Mountain Car](assignment.md) + +## Konklusion + +Vi har nu lært, hvordan man træner agenter til at opnå gode resultater blot ved at give dem en belønningsfunktion, der definerer den ønskede tilstand i spillet, og ved at give dem mulighed for intelligent at udforske søgeområdet. Vi har med succes anvendt Q-Learning-algoritmen i tilfælde af diskrete og kontinuerlige miljøer, men med diskrete handlinger. + +Det er også vigtigt at studere situationer, hvor handlingsrummet også er kontinuerligt, og hvor observationsrummet er meget mere komplekst, såsom billedet fra skærmen i Atari-spillet. I disse problemer har vi ofte brug for mere kraftfulde maskinlæringsteknikker, såsom neurale netværk, for at opnå gode resultater. Disse mere avancerede emner er genstand for vores kommende mere avancerede AI-kursus. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/2-Gym/assignment.md b/translations/da/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 000000000..ae11e4fc0 --- /dev/null +++ b/translations/da/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,55 @@ + +# Træn Mountain Car + +[OpenAI Gym](http://gym.openai.com) er designet på en måde, hvor alle miljøer tilbyder den samme API - dvs. de samme metoder `reset`, `step` og `render`, samt de samme abstraktioner af **aktionsrum** og **observationsrum**. Derfor bør det være muligt at tilpasse de samme forstærkningslæringsalgoritmer til forskellige miljøer med minimale kodeændringer. + +## Et Mountain Car-miljø + +[Mountain Car-miljøet](https://gym.openai.com/envs/MountainCar-v0/) indeholder en bil, der sidder fast i en dal: + +Målet er at komme ud af dalen og fange flaget ved at udføre en af følgende handlinger ved hvert trin: + +| Værdi | Betydning | +|---|---| +| 0 | Accelerer til venstre | +| 1 | Ingen acceleration | +| 2 | Accelerer til højre | + +Hovedtricket i dette problem er dog, at bilens motor ikke er stærk nok til at bestige bjerget i ét forsøg. Derfor er den eneste måde at lykkes på at køre frem og tilbage for at opbygge momentum. + +Observationsrummet består kun af to værdier: + +| Num | Observation | Min | Max | +|-----|--------------|-----|-----| +| 0 | Bilens position | -1.2| 0.6 | +| 1 | Bilens hastighed | -0.07 | 0.07 | + +Belønningssystemet for Mountain Car er ret tricky: + + * En belønning på 0 gives, hvis agenten når flaget (position = 0.5) på toppen af bjerget. + * En belønning på -1 gives, hvis agentens position er mindre end 0.5. + +Episoden afsluttes, hvis bilens position er mere end 0.5, eller hvis episodens længde overstiger 200. +## Instruktioner + +Tilpas vores forstærkningslæringsalgoritme til at løse Mountain Car-problemet. Start med den eksisterende [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb)-kode, erstat med det nye miljø, ændr funktionerne til diskretisering af tilstande, og prøv at få den eksisterende algoritme til at træne med minimale kodeændringer. Optimer resultatet ved at justere hyperparametre. + +> **Bemærk**: Justering af hyperparametre vil sandsynligvis være nødvendig for at få algoritmen til at konvergere. +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver forbedring | +| --------- | ----------- | ------------- | ----------------- | +| | Q-Learning-algoritmen er succesfuldt tilpasset fra CartPole-eksemplet med minimale kodeændringer og er i stand til at løse problemet med at fange flaget på under 200 trin. | En ny Q-Learning-algoritme er blevet adopteret fra internettet, men er veldokumenteret; eller den eksisterende algoritme er tilpasset, men når ikke de ønskede resultater. | Studenten var ikke i stand til at tilpasse nogen algoritme succesfuldt, men har gjort betydelige fremskridt mod løsningen (implementeret tilstands-diskretisering, Q-Table datastruktur osv.) | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/da/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 000000000..621e09cc1 --- /dev/null +++ b/translations/da/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/2-Gym/solution/R/README.md b/translations/da/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 000000000..446f4bb04 --- /dev/null +++ b/translations/da/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +dette er en midlertidig pladsholder + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/8-Reinforcement/README.md b/translations/da/8-Reinforcement/README.md new file mode 100644 index 000000000..4f4da8170 --- /dev/null +++ b/translations/da/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Introduktion til forstærkningslæring + +Forstærkningslæring, RL, betragtes som en af de grundlæggende paradigmer inden for maskinlæring, ved siden af superviseret læring og usuperviseret læring. RL handler om beslutninger: at træffe de rigtige beslutninger eller i det mindste lære af dem. + +Forestil dig, at du har et simuleret miljø, som f.eks. aktiemarkedet. Hvad sker der, hvis du indfører en given regulering? Har det en positiv eller negativ effekt? Hvis noget negativt sker, skal du tage denne _negative forstærkning_, lære af den og ændre kurs. Hvis det er et positivt resultat, skal du bygge videre på den _positive forstærkning_. + +![Peter og ulven](../../../8-Reinforcement/images/peter.png) + +> Peter og hans venner skal undslippe den sultne ulv! Billede af [Jen Looper](https://twitter.com/jenlooper) + +## Regionalt emne: Peter og ulven (Rusland) + +[Peter og ulven](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) er et musikalsk eventyr skrevet af den russiske komponist [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Det er en historie om den unge pioner Peter, der modigt går ud af sit hus til lysningen i skoven for at jage ulven. I denne sektion vil vi træne maskinlæringsalgoritmer, der kan hjælpe Peter: + +- **Udforske** det omkringliggende område og opbygge et optimalt navigationskort. +- **Lære** at bruge et skateboard og balancere på det for at bevæge sig hurtigere rundt. + +[![Peter og ulven](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Klik på billedet ovenfor for at lytte til Peter og ulven af Prokofiev + +## Forstærkningslæring + +I tidligere sektioner har du set to eksempler på maskinlæringsproblemer: + +- **Superviseret**, hvor vi har datasæt, der foreslår eksempler på løsninger til det problem, vi ønsker at løse. [Klassifikation](../4-Classification/README.md) og [regression](../2-Regression/README.md) er superviserede læringsopgaver. +- **Usuperviseret**, hvor vi ikke har mærkede træningsdata. Det primære eksempel på usuperviseret læring er [Clustering](../5-Clustering/README.md). + +I denne sektion vil vi introducere dig til en ny type læringsproblem, der ikke kræver mærkede træningsdata. Der er flere typer af sådanne problemer: + +- **[Semi-superviseret læring](https://wikipedia.org/wiki/Semi-supervised_learning)**, hvor vi har en masse umærkede data, der kan bruges til at fortræne modellen. +- **[Forstærkningslæring](https://wikipedia.org/wiki/Reinforcement_learning)**, hvor en agent lærer at opføre sig ved at udføre eksperimenter i et simuleret miljø. + +### Eksempel - computerspil + +Forestil dig, at du vil lære en computer at spille et spil, som f.eks. skak eller [Super Mario](https://wikipedia.org/wiki/Super_Mario). For at computeren kan spille et spil, skal den kunne forudsige, hvilket træk den skal foretage i hver af spillets tilstande. Selvom dette kan virke som et klassifikationsproblem, er det det ikke - fordi vi ikke har et datasæt med tilstande og tilsvarende handlinger. Selvom vi måske har nogle data som eksisterende skakpartier eller optagelser af spillere, der spiller Super Mario, er det sandsynligt, at disse data ikke tilstrækkeligt dækker et stort nok antal mulige tilstande. + +I stedet for at lede efter eksisterende spildata er **Forstærkningslæring** (RL) baseret på ideen om *at lade computeren spille* mange gange og observere resultatet. For at anvende Forstærkningslæring har vi brug for to ting: + +- **Et miljø** og **en simulator**, der giver os mulighed for at spille et spil mange gange. Denne simulator skal definere alle spillets regler samt mulige tilstande og handlinger. + +- **En belønningsfunktion**, der fortæller os, hvor godt vi klarede os under hvert træk eller spil. + +Den største forskel mellem andre typer maskinlæring og RL er, at vi i RL typisk ikke ved, om vi vinder eller taber, før vi har afsluttet spillet. Derfor kan vi ikke sige, om et bestemt træk alene er godt eller ej - vi modtager kun en belønning ved slutningen af spillet. Vores mål er at designe algoritmer, der gør det muligt for os at træne en model under usikre forhold. Vi vil lære om en RL-algoritme kaldet **Q-learning**. + +## Lektioner + +1. [Introduktion til forstærkningslæring og Q-Learning](1-QLearning/README.md) +2. [Brug af et gym-simuleringsmiljø](2-Gym/README.md) + +## Credits + +"Introduktion til Forstærkningslæring" er skrevet med ♥️ af [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/9-Real-World/1-Applications/README.md b/translations/da/9-Real-World/1-Applications/README.md new file mode 100644 index 000000000..b606514f4 --- /dev/null +++ b/translations/da/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Postscript: Maskinlæring i den virkelige verden + +![Oversigt over maskinlæring i den virkelige verden i en sketchnote](../../../../sketchnotes/ml-realworld.png) +> Sketchnote af [Tomomi Imura](https://www.twitter.com/girlie_mac) + +I dette pensum har du lært mange måder at forberede data til træning og skabe maskinlæringsmodeller. Du har bygget en række klassiske modeller inden for regression, klyngedannelse, klassifikation, naturlig sprogbehandling og tidsserier. Tillykke! Nu undrer du dig måske over, hvad det hele skal bruges til... hvad er de virkelige anvendelser af disse modeller? + +Selvom AI, som ofte benytter dyb læring, har vakt stor interesse i industrien, er der stadig værdifulde anvendelser for klassiske maskinlæringsmodeller. Du bruger måske allerede nogle af disse anvendelser i dag! I denne lektion vil du udforske, hvordan otte forskellige industrier og fagområder bruger disse typer modeller til at gøre deres applikationer mere effektive, pålidelige, intelligente og værdifulde for brugerne. + +## [Quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Finans + +Finanssektoren tilbyder mange muligheder for maskinlæring. Mange problemer inden for dette område egner sig til at blive modelleret og løst ved hjælp af ML. + +### Kreditkortsvindel + +Vi lærte om [k-means clustering](../../5-Clustering/2-K-Means/README.md) tidligere i kurset, men hvordan kan det bruges til at løse problemer relateret til kreditkortsvindel? + +K-means clustering er nyttigt i en teknik til kreditkortsvindel kaldet **outlier detection**. Outliers, eller afvigelser i observationer om et datasæt, kan fortælle os, om et kreditkort bruges normalt eller om noget usædvanligt foregår. Som vist i det linkede papir kan du sortere kreditkortdata ved hjælp af en k-means clustering-algoritme og tildele hver transaktion til en klynge baseret på, hvor meget den afviger. Derefter kan du evaluere de mest risikable klynger for at afgøre, om transaktionerne er svigagtige eller legitime. +[Reference](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Formueforvaltning + +I formueforvaltning håndterer en person eller virksomhed investeringer på vegne af deres klienter. Deres opgave er at opretholde og øge formuen på lang sigt, så det er afgørende at vælge investeringer, der klarer sig godt. + +En måde at evaluere, hvordan en bestemt investering klarer sig, er gennem statistisk regression. [Lineær regression](../../2-Regression/1-Tools/README.md) er et værdifuldt værktøj til at forstå, hvordan en fond klarer sig i forhold til en benchmark. Vi kan også vurdere, om resultaterne af regressionen er statistisk signifikante, eller hvor meget de vil påvirke en klients investeringer. Du kan endda udvide din analyse med multipel regression, hvor yderligere risikofaktorer kan tages i betragtning. For et eksempel på, hvordan dette ville fungere for en specifik fond, kan du se papiret nedenfor om evaluering af fondsperformance ved hjælp af regression. +[Reference](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Uddannelse + +Uddannelsessektoren er også et meget interessant område, hvor ML kan anvendes. Der er spændende problemer at tackle, såsom at opdage snyd i tests eller essays eller håndtere bias, bevidst eller ubevidst, i bedømmelsesprocessen. + +### Forudsigelse af studerendes adfærd + +[Coursera](https://coursera.com), en online udbyder af åbne kurser, har en fantastisk teknologiblog, hvor de diskuterer mange ingeniørbeslutninger. I denne case study plotter de en regressionslinje for at undersøge en mulig korrelation mellem en lav NPS (Net Promoter Score) og fastholdelse eller frafald fra kurser. +[Reference](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Reducering af bias + +[Grammarly](https://grammarly.com), en skriveassistent, der tjekker for stave- og grammatikfejl, bruger sofistikerede [naturlige sprogbehandlingssystemer](../../6-NLP/README.md) i sine produkter. De har offentliggjort en interessant case study i deres teknologiblog om, hvordan de håndterede kønsbias i maskinlæring, som du lærte om i vores [introduktionslektion om fairness](../../1-Introduction/3-fairness/README.md). +[Reference](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Detailhandel + +Detailsektoren kan bestemt drage fordel af brugen af ML, lige fra at skabe en bedre kunderejse til at optimere lagerstyring. + +### Personalisering af kunderejsen + +Hos Wayfair, en virksomhed der sælger boligartikler som møbler, er det afgørende at hjælpe kunderne med at finde de rigtige produkter til deres smag og behov. I denne artikel beskriver ingeniører fra virksomheden, hvordan de bruger ML og NLP til at "vise de rigtige resultater for kunderne". Deres Query Intent Engine er bygget til at bruge enhedsekstraktion, klassifikatortræning, udtrækning af aktiver og meninger samt sentiment-tagging på kundeanmeldelser. Dette er et klassisk eksempel på, hvordan NLP fungerer i online detailhandel. +[Reference](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Lagerstyring + +Innovative, agile virksomheder som [StitchFix](https://stitchfix.com), en abonnementsservice der sender tøj til forbrugere, er stærkt afhængige af ML til anbefalinger og lagerstyring. Deres stylingteams arbejder sammen med deres merchandisingteams: "En af vores dataforskere eksperimenterede med en genetisk algoritme og anvendte den på beklædning for at forudsige, hvad der ville være et succesfuldt stykke tøj, der ikke eksisterer i dag. Vi præsenterede det for merchandise-teamet, og nu kan de bruge det som et værktøj." +[Reference](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Sundhedssektoren + +Sundhedssektoren kan bruge ML til at optimere forskningsopgaver og logistiske problemer som genindlæggelse af patienter eller at stoppe sygdomme fra at sprede sig. + +### Håndtering af kliniske forsøg + +Toksicitet i kliniske forsøg er en stor bekymring for medicinalvirksomheder. Hvor meget toksicitet er acceptabelt? I denne undersøgelse førte analyser af forskellige kliniske forsøgsmetoder til udviklingen af en ny tilgang til at forudsige sandsynligheden for kliniske forsøgsresultater. Specifikt var de i stand til at bruge random forest til at producere en [klassifikator](../../4-Classification/README.md), der kan skelne mellem grupper af lægemidler. +[Reference](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Håndtering af genindlæggelser på hospitaler + +Hospitalpleje er dyrt, især når patienter skal genindlægges. Denne artikel diskuterer en virksomhed, der bruger ML til at forudsige potentialet for genindlæggelse ved hjælp af [klyngedannelse](../../5-Clustering/README.md) algoritmer. Disse klynger hjælper analytikere med at "opdage grupper af genindlæggelser, der kan have en fælles årsag". +[Reference](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Sygdomshåndtering + +Den nylige pandemi har kastet lys over, hvordan maskinlæring kan hjælpe med at stoppe spredningen af sygdomme. I denne artikel vil du genkende brugen af ARIMA, logistiske kurver, lineær regression og SARIMA. "Dette arbejde er et forsøg på at beregne spredningshastigheden for denne virus og dermed forudsige dødsfald, helbredelser og bekræftede tilfælde, så det kan hjælpe os med at forberede os bedre og overleve." +[Reference](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Økologi og grøn teknologi + +Natur og økologi består af mange følsomme systemer, hvor samspillet mellem dyr og natur kommer i fokus. Det er vigtigt at kunne måle disse systemer nøjagtigt og handle passende, hvis noget sker, som en skovbrand eller et fald i dyrepopulationen. + +### Skovforvaltning + +Du lærte om [Reinforcement Learning](../../8-Reinforcement/README.md) i tidligere lektioner. Det kan være meget nyttigt, når man forsøger at forudsige mønstre i naturen. Især kan det bruges til at spore økologiske problemer som skovbrande og spredning af invasive arter. I Canada brugte en gruppe forskere Reinforcement Learning til at bygge modeller for skovbranddynamik baseret på satellitbilleder. Ved hjælp af en innovativ "spatially spreading process (SSP)" forestillede de sig en skovbrand som "agenten ved enhver celle i landskabet." "Sættet af handlinger, som branden kan tage fra en placering på ethvert tidspunkt, inkluderer spredning nord, syd, øst eller vest eller ikke at sprede sig." + +Denne tilgang vender den sædvanlige RL-opsætning på hovedet, da dynamikken i den tilsvarende Markov Decision Process (MDP) er en kendt funktion for øjeblikkelig skovbrandspredning. Læs mere om de klassiske algoritmer, som denne gruppe brugte, på linket nedenfor. +[Reference](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Bevægelsessporing af dyr + +Mens dyb læring har skabt en revolution i visuel sporing af dyrebevægelser (du kan bygge din egen [isbjørnesporer](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) her), har klassisk ML stadig en plads i denne opgave. + +Sensorer til at spore bevægelser af husdyr og IoT gør brug af denne type visuel behandling, men mere grundlæggende ML-teknikker er nyttige til at forbehandle data. For eksempel blev fåres holdninger overvåget og analyseret ved hjælp af forskellige klassifikatoralgoritmer. Du vil måske genkende ROC-kurven på side 335. +[Reference](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Energistyring + +I vores lektioner om [tidsserieprognoser](../../7-TimeSeries/README.md) introducerede vi konceptet med smarte parkeringsmålere til at generere indtægter for en by baseret på forståelse af udbud og efterspørgsel. Denne artikel diskuterer detaljeret, hvordan klyngedannelse, regression og tidsserieprognoser kombineres for at hjælpe med at forudsige fremtidigt energiforbrug i Irland baseret på smarte målere. +[Reference](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Forsikring + +Forsikringssektoren er en anden sektor, der bruger ML til at konstruere og optimere levedygtige finansielle og aktuarielle modeller. + +### Volatilitetsstyring + +MetLife, en livsforsikringsudbyder, er åben omkring, hvordan de analyserer og reducerer volatilitet i deres finansielle modeller. I denne artikel vil du bemærke visualiseringer af binær og ordinal klassifikation. Du vil også opdage visualiseringer af prognoser. +[Reference](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Kunst, kultur og litteratur + +Inden for kunst, for eksempel journalistik, er der mange interessante problemer. At opdage falske nyheder er et stort problem, da det har vist sig at påvirke folks meninger og endda vælte demokratier. Museer kan også drage fordel af at bruge ML til alt fra at finde forbindelser mellem artefakter til ressourceplanlægning. + +### Falske nyheder + +At opdage falske nyheder er blevet en kamp mellem kat og mus i dagens medier. I denne artikel foreslår forskere, at et system, der kombinerer flere af de ML-teknikker, vi har studeret, kan testes, og den bedste model kan implementeres: "Dette system er baseret på naturlig sprogbehandling til at udtrække funktioner fra dataene, og derefter bruges disse funktioner til træning af maskinlæringsklassifikatorer såsom Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) og Logistic Regression (LR)." +[Reference](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Denne artikel viser, hvordan kombinationen af forskellige ML-domæner kan producere interessante resultater, der kan hjælpe med at stoppe falske nyheder fra at sprede sig og skabe reel skade; i dette tilfælde var drivkraften spredningen af rygter om COVID-behandlinger, der inciterede voldelige optøjer. + +### Museum ML + +Museer står på tærsklen til en AI-revolution, hvor katalogisering og digitalisering af samlinger samt at finde forbindelser mellem artefakter bliver lettere, efterhånden som teknologien udvikler sig. Projekter som [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) hjælper med at låse op for mysterierne i utilgængelige samlinger som Vatikanets arkiver. Men den forretningsmæssige side af museer drager også fordel af ML-modeller. + +For eksempel byggede Art Institute of Chicago modeller til at forudsige, hvad publikum er interesseret i, og hvornår de vil besøge udstillinger. Målet er at skabe individualiserede og optimerede besøgsoplevelser hver gang brugeren besøger museet. "I regnskabsåret 2017 forudsagde modellen besøgstal og indtægter med en nøjagtighed på 1 procent, siger Andrew Simnick, senior vice president ved Art Institute." +[Reference](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Marketing + +### Kundesegmentering + +De mest effektive marketingstrategier målretter kunder på forskellige måder baseret på forskellige grupperinger. I denne artikel diskuteres brugen af klyngedannelsesalgoritmer til at understøtte differentieret marketing. Differentieret marketing hjælper virksomheder med at forbedre brandgenkendelse, nå flere kunder og tjene flere penge. +[Reference](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Udfordring + +Identificer en anden sektor, der drager fordel af nogle af de teknikker, du har lært i dette pensum, og undersøg, hvordan den bruger ML. +## [Quiz efter forelæsning](https://ff-quizzes.netlify.app/en/ml/) + +## Gennemgang & Selvstudie + +Wayfair's data science-team har flere interessante videoer om, hvordan de bruger ML i deres virksomhed. Det er værd at [tage et kig](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Opgave + +[En ML skattejagt](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/9-Real-World/1-Applications/assignment.md b/translations/da/9-Real-World/1-Applications/assignment.md new file mode 100644 index 000000000..c15549a6f --- /dev/null +++ b/translations/da/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# En ML Skattejagt + +## Instruktioner + +I denne lektion lærte du om mange virkelige anvendelser, der blev løst ved hjælp af klassisk ML. Selvom brugen af dyb læring, nye teknikker og værktøjer inden for AI og udnyttelse af neurale netværk har hjulpet med at fremskynde udviklingen af værktøjer til at hjælpe i disse sektorer, har klassisk ML ved brug af teknikkerne i dette pensum stadig stor værdi. + +I denne opgave skal du forestille dig, at du deltager i et hackathon. Brug det, du har lært i pensum, til at foreslå en løsning ved hjælp af klassisk ML til at løse et problem i en af de sektorer, der blev diskuteret i denne lektion. Lav en præsentation, hvor du forklarer, hvordan du vil implementere din idé. Ekstra point, hvis du kan samle eksempler på data og bygge en ML-model for at understøtte dit koncept! + +## Bedømmelseskriterier + +| Kriterier | Eksemplarisk | Tilstrækkeligt | Kræver forbedring | +| --------- | ------------------------------------------------------------------- | ------------------------------------------------ | ---------------------- | +| | En PowerPoint-præsentation fremlægges - bonus for at bygge en model | En ikke-innovativ, grundlæggende præsentation fremlægges | Arbejdet er ufuldstændigt | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/9-Real-World/2-Debugging-ML-Models/README.md b/translations/da/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 000000000..fc80c47d4 --- /dev/null +++ b/translations/da/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,183 @@ + +# Postscript: Model Debugging i Maskinlæring ved hjælp af komponenter fra Responsible AI-dashboardet + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Introduktion + +Maskinlæring påvirker vores daglige liv. AI finder vej ind i nogle af de mest betydningsfulde systemer, der berører os som individer og som samfund, fra sundhedspleje, finans, uddannelse og beskæftigelse. For eksempel er systemer og modeller involveret i daglige beslutningsprocesser, såsom sundhedsdiagnoser eller afsløring af svindel. Som følge heraf mødes fremskridt inden for AI og den accelererede adoption med udviklende samfundsmæssige forventninger og stigende regulering. Vi ser konstant områder, hvor AI-systemer ikke lever op til forventningerne; de afslører nye udfordringer; og regeringer begynder at regulere AI-løsninger. Derfor er det vigtigt, at disse modeller analyseres for at sikre retfærdige, pålidelige, inkluderende, transparente og ansvarlige resultater for alle. + +I dette pensum vil vi se på praktiske værktøjer, der kan bruges til at vurdere, om en model har problemer med ansvarlig AI. Traditionelle debugging-teknikker inden for maskinlæring er ofte baseret på kvantitative beregninger såsom samlet nøjagtighed eller gennemsnitligt fejl-tab. Forestil dig, hvad der kan ske, når de data, du bruger til at bygge disse modeller, mangler visse demografiske grupper, såsom race, køn, politisk holdning, religion, eller uforholdsmæssigt repræsenterer sådanne grupper. Hvad med når modellens output tolkes til at favorisere en bestemt demografisk gruppe? Dette kan føre til over- eller underrepræsentation af disse følsomme egenskabsgrupper, hvilket resulterer i retfærdigheds-, inklusions- eller pålidelighedsproblemer fra modellen. En anden faktor er, at maskinlæringsmodeller ofte betragtes som "black boxes", hvilket gør det svært at forstå og forklare, hvad der driver modellens forudsigelser. Alle disse er udfordringer, som dataforskere og AI-udviklere står over for, når de ikke har tilstrækkelige værktøjer til at debugge og vurdere en models retfærdighed eller troværdighed. + +I denne lektion vil du lære at debugge dine modeller ved hjælp af: + +- **Fejlanalyse**: Identificer, hvor i din datadistribution modellen har høje fejlrater. +- **Modeloversigt**: Udfør sammenlignende analyser på tværs af forskellige datakohorter for at opdage uligheder i modellens præstationsmålinger. +- **Dataanalyse**: Undersøg, hvor der kan være over- eller underrepræsentation af dine data, som kan skævvride din model til at favorisere én demografisk gruppe frem for en anden. +- **Feature Importance**: Forstå hvilke egenskaber der driver modellens forudsigelser på et globalt eller lokalt niveau. + +## Forudsætning + +Som forudsætning bedes du gennemgå [Responsible AI tools for developers](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif om Responsible AI Tools](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Fejlanalyse + +Traditionelle præstationsmålinger for modeller, der bruges til at måle nøjagtighed, er ofte beregninger baseret på korrekte vs. forkerte forudsigelser. For eksempel kan det at fastslå, at en model er nøjagtig 89% af tiden med et fejl-tab på 0,001, betragtes som en god præstation. Fejl er dog ofte ikke jævnt fordelt i det underliggende datasæt. Du kan få en modelnøjagtighed på 89%, men opdage, at der er forskellige områder i dine data, hvor modellen fejler 42% af tiden. Konsekvensen af disse fejlmønstre med visse datagrupper kan føre til retfærdigheds- eller pålidelighedsproblemer. Det er afgørende at forstå områder, hvor modellen klarer sig godt eller dårligt. De dataområder, hvor der er et højt antal unøjagtigheder i din model, kan vise sig at være en vigtig demografisk gruppe. + +![Analyser og debug model-fejl](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Fejlanalyse-komponenten på RAI-dashboardet viser, hvordan model-fejl er fordelt på tværs af forskellige kohorter med en trævisualisering. Dette er nyttigt til at identificere egenskaber eller områder, hvor der er en høj fejlrater i dit datasæt. Ved at se, hvor de fleste af modellens unøjagtigheder kommer fra, kan du begynde at undersøge årsagen. Du kan også oprette datakohorter til at udføre analyser på. Disse datakohorter hjælper i debugging-processen med at afgøre, hvorfor modelpræstationen er god i én kohorte, men fejlagtig i en anden. + +![Fejlanalyse](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +De visuelle indikatorer på trædiagrammet hjælper med at lokalisere problemområderne hurtigere. For eksempel, jo mørkere rød farve en træknude har, jo højere er fejlraten. + +Heatmap er en anden visualiseringsfunktion, som brugere kan anvende til at undersøge fejlraten ved hjælp af én eller to egenskaber for at finde bidragende faktorer til modellens fejl på tværs af hele datasættet eller kohorter. + +![Fejlanalyse Heatmap](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Brug fejlanalyse, når du har brug for at: + +* Få en dyb forståelse af, hvordan model-fejl er fordelt på tværs af et datasæt og på tværs af flere input- og egenskabsdimensioner. +* Bryde de samlede præstationsmålinger ned for automatisk at opdage fejlagtige kohorter og informere dine målrettede afhjælpningstrin. + +## Modeloversigt + +Evaluering af en maskinlæringsmodels præstation kræver en holistisk forståelse af dens adfærd. Dette kan opnås ved at gennemgå mere end én måling, såsom fejlrater, nøjagtighed, recall, præcision eller MAE (Mean Absolute Error) for at finde uligheder blandt præstationsmålinger. Én præstationsmåling kan se godt ud, men unøjagtigheder kan afsløres i en anden måling. Derudover hjælper sammenligning af målinger for uligheder på tværs af hele datasættet eller kohorter med at belyse, hvor modellen klarer sig godt eller dårligt. Dette er især vigtigt for at se modellens præstation blandt følsomme vs. ufølsomme egenskaber (f.eks. patientens race, køn eller alder) for at afdække potentiel uretfærdighed, modellen måtte have. For eksempel kan det at opdage, at modellen er mere fejlagtig i en kohorte med følsomme egenskaber, afsløre potentiel uretfærdighed. + +Modeloversigt-komponenten på RAI-dashboardet hjælper ikke kun med at analysere præstationsmålinger for datarepræsentationen i en kohorte, men giver også brugerne mulighed for at sammenligne modellens adfærd på tværs af forskellige kohorter. + +![Datasæt-kohorter - modeloversigt i RAI-dashboardet](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Komponentens egenskabsbaserede analysefunktionalitet giver brugerne mulighed for at indsnævre datasubgrupper inden for en bestemt egenskab for at identificere anomalier på et detaljeret niveau. For eksempel har dashboardet indbygget intelligens til automatisk at generere kohorter for en bruger-valgt egenskab (f.eks. *"time_in_hospital < 3"* eller *"time_in_hospital >= 7"*). Dette gør det muligt for en bruger at isolere en bestemt egenskab fra en større datagruppe for at se, om den er en nøglefaktor for modellens fejlagtige resultater. + +![Egenskabskohorter - modeloversigt i RAI-dashboardet](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Modeloversigt-komponenten understøtter to klasser af ulighedsmålinger: + +**Ulighed i modelpræstation**: Disse sæt af målinger beregner uligheden (forskellen) i værdierne for den valgte præstationsmåling på tværs af data-subgrupper. Her er nogle eksempler: + +* Ulighed i nøjagtighedsrate +* Ulighed i fejlrater +* Ulighed i præcision +* Ulighed i recall +* Ulighed i Mean Absolute Error (MAE) + +**Ulighed i udvælgelsesrate**: Denne måling indeholder forskellen i udvælgelsesrate (gunstig forudsigelse) blandt subgrupper. Et eksempel på dette er ulighed i lånegodkendelsesrater. Udvælgelsesrate betyder andelen af datapunkter i hver klasse klassificeret som 1 (i binær klassifikation) eller fordelingen af forudsigelsesværdier (i regression). + +## Dataanalyse + +> "Hvis du torturerer data længe nok, vil de tilstå hvad som helst" - Ronald Coase + +Denne udtalelse lyder ekstrem, men det er sandt, at data kan manipuleres til at understøtte enhver konklusion. Sådan manipulation kan nogle gange ske utilsigtet. Som mennesker har vi alle bias, og det er ofte svært at bevidst vide, hvornår man introducerer bias i data. At garantere retfærdighed i AI og maskinlæring forbliver en kompleks udfordring. + +Data er et stort blindt punkt for traditionelle modelpræstationsmålinger. Du kan have høje nøjagtighedsscorer, men dette afspejler ikke altid den underliggende databias, der kunne være i dit datasæt. For eksempel, hvis et datasæt af medarbejdere har 27% kvinder i lederstillinger i en virksomhed og 73% mænd på samme niveau, kan en jobannoncerings-AI-model, der er trænet på disse data, målrette sig mest mod en mandlig målgruppe for seniorjobstillinger. Denne ubalance i data skævvred modellens forudsigelse til at favorisere ét køn. Dette afslører et retfærdighedsproblem, hvor der er kønsbias i AI-modellen. + +Dataanalyse-komponenten på RAI-dashboardet hjælper med at identificere områder, hvor der er over- og underrepræsentation i datasættet. Den hjælper brugere med at diagnosticere årsagen til fejl og retfærdighedsproblemer, der introduceres fra dataubalancer eller manglende repræsentation af en bestemt datagruppe. Dette giver brugerne mulighed for at visualisere datasæt baseret på forudsagte og faktiske resultater, fejlgrupper og specifikke egenskaber. Nogle gange kan det at opdage en underrepræsenteret datagruppe også afsløre, at modellen ikke lærer godt, hvilket resulterer i høje unøjagtigheder. At have en model med databias er ikke kun et retfærdighedsproblem, men viser også, at modellen ikke er inkluderende eller pålidelig. + +![Dataanalyse-komponent på RAI-dashboardet](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Brug dataanalyse, når du har brug for at: + +* Udforske dine datasætstatistikker ved at vælge forskellige filtre for at opdele dine data i forskellige dimensioner (også kendt som kohorter). +* Forstå fordelingen af dit datasæt på tværs af forskellige kohorter og egenskabsgrupper. +* Afgøre, om dine fund relateret til retfærdighed, fejlanalyse og kausalitet (afledt fra andre dashboard-komponenter) skyldes dit datasæts fordeling. +* Beslutte, i hvilke områder du skal indsamle flere data for at afhjælpe fejl, der kommer fra repræsentationsproblemer, label-støj, egenskabsstøj, label-bias og lignende faktorer. + +## Modelfortolkning + +Maskinlæringsmodeller har en tendens til at være "black boxes". Det kan være udfordrende at forstå, hvilke nøgleegenskaber der driver en models forudsigelse. Det er vigtigt at give gennemsigtighed i forhold til, hvorfor en model laver en bestemt forudsigelse. For eksempel, hvis et AI-system forudsiger, at en diabetisk patient er i risiko for at blive genindlagt på et hospital inden for mindre end 30 dage, bør det kunne give understøttende data, der førte til denne forudsigelse. At have understøttende dataindikatorer skaber gennemsigtighed, der hjælper klinikere eller hospitaler med at træffe velinformerede beslutninger. Derudover gør det muligt at forklare, hvorfor en model lavede en forudsigelse for en individuel patient, at man kan opfylde ansvarlighed med sundhedsreguleringer. Når du bruger maskinlæringsmodeller på måder, der påvirker menneskers liv, er det afgørende at forstå og forklare, hvad der påvirker en models adfærd. Model-forklarbarhed og fortolkning hjælper med at besvare spørgsmål i scenarier såsom: + +* Model-debugging: Hvorfor lavede min model denne fejl? Hvordan kan jeg forbedre min model? +* Menneske-AI-samarbejde: Hvordan kan jeg forstå og stole på modellens beslutninger? +* Regulatorisk overholdelse: Opfylder min model lovkrav? + +Feature Importance-komponenten på RAI-dashboardet hjælper dig med at debugge og få en omfattende forståelse af, hvordan en model laver forudsigelser. Det er også et nyttigt værktøj for maskinlæringsprofessionelle og beslutningstagere til at forklare og vise beviser for egenskaber, der påvirker en models adfærd for regulatorisk overholdelse. Brugere kan derefter udforske både globale og lokale forklaringer for at validere, hvilke egenskaber der driver en models forudsigelse. Globale forklaringer viser de vigtigste egenskaber, der påvirkede en models samlede forudsigelse. Lokale forklaringer viser, hvilke egenskaber der førte til en models forudsigelse for en individuel sag. Muligheden for at evaluere lokale forklaringer er også nyttig i debugging eller revision af en specifik sag for bedre at forstå og fortolke, hvorfor en model lavede en korrekt eller ukorrekt forudsigelse. + +![Feature Importance-komponent på RAI-dashboardet](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Globale forklaringer: For eksempel, hvilke egenskaber påvirker den samlede adfærd af en diabetes-hospital-genindlæsningsmodel? +* Lokale forklaringer: For eksempel, hvorfor blev en diabetisk patient over 60 år med tidligere indlæggelser forudsagt til at blive genindlagt eller ikke genindlagt inden for 30 dage på et hospital? + +I debugging-processen med at undersøge en models præstation på tværs af forskellige kohorter viser Feature Importance, hvilken grad af indflydelse en egenskab har på tværs af kohorter. Det hjælper med at afsløre anomalier, når man sammenligner niveauet af indflydelse, egenskaben har på at drive en models fejlagtige forudsigelser. Feature Importance-komponenten kan vise, hvilke værdier i en egenskab der positivt eller negativt påvirkede modellens resultat. For eksempel, hvis en model lavede en ukorrekt forudsigelse, giver komponenten dig mulighed for at bore ned og identificere, hvilke egenskaber eller egenskabsværdier der drev forudsigelsen. Dette detaljeringsniveau hjælper ikke kun med debugging, men skaber gennemsigtighed og ansvarlighed i revisionssituationer. Endelig kan komponenten hjælpe dig med at identificere retfærdighedsproblemer. For at illustrere, hvis en følsom egenskab såsom etnicitet eller køn har stor indflydelse på at drive en models forudsigelse, kan dette være et tegn på race- eller kønsbias i modellen. + +![Feature Importance](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) + +Brug fortolkning, når du har brug for at: + +* Afgøre, hvor troværdige din AI-models forudsigelser er ved at forstå, hvilke egenskaber der er mest vigtige for forudsigelserne. +* Tilgå debugging af din model ved først at forstå den og identificere, om modellen bruger sunde egenskaber eller blot falske korrelationer. +* Afsløre potentielle kilder til uretfærdighed ved at forstå, om modellen baserer forudsigelser på følsomme egenskaber eller på egenskaber, der er stærkt korreleret med dem. +* Opbygge brugerens tillid til modellens beslutninger ved at generere lokale forklaringer for at illustrere deres resultater. +* Fuldføre en regulatorisk revision af et AI-system for at validere modeller og overvåge modellens beslutningers indvirkning på mennesker. + +## Konklusion + +Alle komponenterne i RAI-dashboardet er praktiske værktøjer, der hjælper dig med at bygge maskinlæringsmodeller, der er mindre skadelige og mere troværdige for samfundet. Det forbedrer forebyggelsen af trusler mod menneskerettigheder; diskrimination eller eksklusion af visse grupper fra livsmuligheder; og risikoen for fysisk eller psykologisk skade. Det hjælper også med at opbygge tillid til modellens beslutninger ved at generere lokale forklaringer for at illustrere deres resultater. Nogle af de potentielle skader kan klassificeres som: + +- **Allokering**, hvis et køn eller en etnicitet for eksempel favoriseres frem for en anden. +- **Kvalitet af service**. Hvis du træner data til et specifikt scenarie, men virkeligheden er langt mere kompleks, fører det til en dårligt fungerende service. +- **Stereotyper**. At associere en given gruppe med forudbestemte attributter. +- **Nedvurdering**. At kritisere og mærke noget eller nogen uretfærd +- **Over- eller underrepræsentation**. Ideen er, at en bestemt gruppe ikke er repræsenteret i et bestemt erhverv, og enhver tjeneste eller funktion, der fortsat fremmer dette, bidrager til skade. + +### Azure RAI-dashboard + +[Azure RAI-dashboard](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) er bygget på open source-værktøjer udviklet af førende akademiske institutioner og organisationer, herunder Microsoft. Disse værktøjer er afgørende for dataforskere og AI-udviklere til bedre at forstå modeladfærd, opdage og afhjælpe uønskede problemer i AI-modeller. + +- Lær, hvordan du bruger de forskellige komponenter, ved at tjekke RAI-dashboardets [dokumentation.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Se nogle RAI-dashboard [eksempelsnotebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) til fejlfinding af mere ansvarlige AI-scenarier i Azure Machine Learning. + +--- +## 🚀 Udfordring + +For at forhindre, at statistiske eller datamæssige skævheder opstår fra starten, bør vi: + +- sikre en mangfoldighed af baggrunde og perspektiver blandt de personer, der arbejder på systemerne +- investere i datasæt, der afspejler mangfoldigheden i vores samfund +- udvikle bedre metoder til at opdage og rette skævheder, når de opstår + +Tænk på virkelige scenarier, hvor uretfærdighed er tydelig i modeludvikling og brug. Hvad bør vi ellers overveje? + +## [Quiz efter forelæsningen](https://ff-quizzes.netlify.app/en/ml/) +## Gennemgang & Selvstudie + +I denne lektion har du lært nogle af de praktiske værktøjer til at integrere ansvarlig AI i maskinlæring. + +Se denne workshop for at dykke dybere ned i emnerne: + +- Responsible AI Dashboard: One-stop shop for operationalizing RAI in practice af Besmira Nushi og Mehrnoosh Sameki + +[![Responsible AI Dashboard: One-stop shop for operationalizing RAI in practice](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: One-stop shop for operationalizing RAI in practice") + +> 🎥 Klik på billedet ovenfor for at se videoen: Responsible AI Dashboard: One-stop shop for operationalizing RAI in practice af Besmira Nushi og Mehrnoosh Sameki + +Referér til følgende materialer for at lære mere om ansvarlig AI og hvordan man bygger mere pålidelige modeller: + +- Microsofts RAI-dashboardværktøjer til fejlfinding af ML-modeller: [Ressourcer til ansvarlige AI-værktøjer](https://aka.ms/rai-dashboard) + +- Udforsk Responsible AI-værktøjskassen: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Microsofts RAI-ressourcecenter: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsofts FATE-forskningsgruppe: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Opgave + +[Udforsk RAI-dashboardet](assignment.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/da/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 000000000..be8e6b43f --- /dev/null +++ b/translations/da/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Udforsk Responsible AI (RAI) dashboard + +## Instruktioner + +I denne lektion lærte du om RAI-dashboardet, en samling af komponenter bygget på "open-source"-værktøjer, der hjælper dataforskere med at udføre fejlanalyse, dataudforskning, vurdering af retfærdighed, modeltolkning, kontrafaktiske/hvad-nu-hvis vurderinger og kausalanalyse på AI-systemer. Til denne opgave skal du udforske nogle af RAI-dashboardets eksempler [notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) og rapportere dine resultater i et papir eller en præsentation. + +## Vurderingskriterier + +| Kriterier | Fremragende | Tilstrækkelig | Kræver Forbedring | +| --------- | ----------- | ------------- | ----------------- | +| | Et papir eller en PowerPoint-præsentation fremlægges, der diskuterer RAI-dashboardets komponenter, den notebook der blev kørt, og de konklusioner der blev draget fra at køre den | Et papir fremlægges uden konklusioner | Intet papir fremlægges | + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/9-Real-World/README.md b/translations/da/9-Real-World/README.md new file mode 100644 index 000000000..6c07009c7 --- /dev/null +++ b/translations/da/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Postscript: Virkelige anvendelser af klassisk maskinlæring + +I denne del af pensum vil du blive introduceret til nogle virkelige anvendelser af klassisk maskinlæring. Vi har gennemsøgt internettet for at finde videnskabelige artikler og artikler om anvendelser, der har brugt disse strategier, og undgået neurale netværk, dyb læring og AI så meget som muligt. Lær om, hvordan maskinlæring bruges i forretningssystemer, økologiske anvendelser, finans, kunst og kultur og meget mere. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Foto af Alexis FauvetUnsplash + +## Lektion + +1. [Virkelige anvendelser af maskinlæring](1-Applications/README.md) +2. [Fejlfinding af modeller i maskinlæring ved hjælp af Responsible AI-dashboardkomponenter](2-Debugging-ML-Models/README.md) + +## Kreditering + +"Virkelige anvendelser" blev skrevet af et team af folk, herunder [Jen Looper](https://twitter.com/jenlooper) og [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Fejlfinding af modeller i maskinlæring ved hjælp af Responsible AI-dashboardkomponenter" blev skrevet af [Ruth Yakubu](https://twitter.com/ruthieyakubu) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os intet ansvar for misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/CODE_OF_CONDUCT.md b/translations/da/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..80e3b6035 --- /dev/null +++ b/translations/da/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Microsoft Open Source Adfærdskodeks + +Dette projekt har vedtaget [Microsoft Open Source Adfærdskodeks](https://opensource.microsoft.com/codeofconduct/). + +Ressourcer: + +- [Microsoft Open Source Adfærdskodeks](https://opensource.microsoft.com/codeofconduct/) +- [Microsoft Adfærdskodeks FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +- Kontakt [opencode@microsoft.com](mailto:opencode@microsoft.com) med spørgsmål eller bekymringer + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/CONTRIBUTING.md b/translations/da/CONTRIBUTING.md new file mode 100644 index 000000000..2d0ddc5af --- /dev/null +++ b/translations/da/CONTRIBUTING.md @@ -0,0 +1,30 @@ + +# Bidrag + +Dette projekt byder velkommen til bidrag og forslag. De fleste bidrag kræver, at du +accepterer en Contributor License Agreement (CLA), der erklærer, at du har retten til, +og faktisk giver os rettighederne til at bruge dit bidrag. For detaljer, besøg +https://cla.microsoft.com. + +> Vigtigt: Når du oversætter tekst i dette repo, skal du sikre dig, at du ikke bruger maskinoversættelse. Vi vil verificere oversættelser via fællesskabet, så meld dig kun som frivillig til oversættelser på sprog, hvor du er dygtig. + +Når du indsender en pull request, vil en CLA-bot automatisk afgøre, om du skal +levere en CLA og dekorere PR'en passende (f.eks. label, kommentar). Følg blot +instruktionerne fra botten. Du behøver kun at gøre dette én gang på tværs af alle repositories, der bruger vores CLA. + +Dette projekt har vedtaget [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). +For mere information, se [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) +eller kontakt [opencode@microsoft.com](mailto:opencode@microsoft.com) med eventuelle yderligere spørgsmål eller kommentarer. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/README.md b/translations/da/README.md new file mode 100644 index 000000000..0581b946a --- /dev/null +++ b/translations/da/README.md @@ -0,0 +1,178 @@ + +[![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/) + +### 🌐 Understøttelse af flere sprog + +#### Understøttet via GitHub Action (Automatisk & Altid Opdateret) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](./README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Bliv en del af fællesskabet + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Maskinlæring for begyndere - Et undervisningsforløb + +> 🌍 Rejs rundt i verden, mens vi udforsker maskinlæring gennem verdens kulturer 🌍 + +Cloud Advocates hos Microsoft er glade for at tilbyde et 12-ugers, 26-lektioners undervisningsforløb om **maskinlæring**. I dette forløb vil du lære om det, der nogle gange kaldes **klassisk maskinlæring**, primært ved brug af Scikit-learn som bibliotek og uden at dykke ned i deep learning, som er dækket i vores [AI for Beginners' undervisningsforløb](https://aka.ms/ai4beginners). Kombinér disse lektioner med vores ['Data Science for Beginners' undervisningsforløb](https://aka.ms/ds4beginners), også! + +Rejs med os rundt i verden, mens vi anvender disse klassiske teknikker på data fra mange forskellige områder af verden. Hver lektion inkluderer quizzer før og efter lektionen, skriftlige instruktioner til at gennemføre lektionen, en løsning, en opgave og mere. Vores projektbaserede tilgang giver dig mulighed for at lære, mens du bygger, en dokumenteret metode til at få nye færdigheder til at hænge fast. + +**✍️ Stor tak til vores forfattere** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu og Amy Boyd + +**🎨 Tak også til vores illustratorer** Tomomi Imura, Dasani Madipalli og Jen Looper + +**🙏 Særlig tak 🙏 til vores Microsoft Student Ambassador-forfattere, anmeldere og indholdsbidragydere**, især Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila og Snigdha Agarwal + +**🤩 Ekstra tak til Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi og Vidushi Gupta for vores R-lektioner!** + +# Kom godt i gang + +Følg disse trin: +1. **Fork repositoryet**: Klik på "Fork"-knappen øverst til højre på denne side. +2. **Clone repositoryet**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [find alle ekstra ressourcer til dette kursus i vores Microsoft Learn-samling](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Studerende](https://aka.ms/student-page)**, for at bruge dette undervisningsforløb, fork hele repoet til din egen GitHub-konto og gennemfør øvelserne alene eller i en gruppe: + +- Start med en quiz før lektionen. +- Læs lektionen og gennemfør aktiviteterne, mens du pauser og reflekterer ved hver videnskontrol. +- Prøv at skabe projekterne ved at forstå lektionerne i stedet for blot at køre løsningskoden; dog er denne kode tilgængelig i `/solution`-mapperne i hver projektorienteret lektion. +- Tag quizzen efter lektionen. +- Gennemfør udfordringen. +- Gennemfør opgaven. +- Efter at have afsluttet en gruppe af lektioner, besøg [Diskussionsforumet](https://github.com/microsoft/ML-For-Beginners/discussions) og "lær højt" ved at udfylde den relevante PAT-rubrik. En 'PAT' er et Progress Assessment Tool, som er en rubrik, du udfylder for at fremme din læring. Du kan også reagere på andre PAT'er, så vi kan lære sammen. + +> For yderligere studier anbefaler vi at følge disse [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) moduler og læringsstier. + +**Lærere**, vi har [inkluderet nogle forslag](for-teachers.md) til, hvordan man kan bruge dette undervisningsforløb. + +--- + +## Video-gennemgange + +Nogle af lektionerne er tilgængelige som korte videoer. Du kan finde alle disse i lektionerne eller på [ML for Beginners playlisten på Microsoft Developer YouTube-kanalen](https://aka.ms/ml-beginners-videos) ved at klikke på billedet nedenfor. + +[![ML for beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Mød teamet + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif af** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Klik på billedet ovenfor for en video om projektet og de personer, der skabte det! + +--- + +## Pædagogik + +Vi har valgt to pædagogiske principper, mens vi byggede dette undervisningsforløb: at sikre, at det er **projektbaseret** og at det inkluderer **hyppige quizzer**. Derudover har dette forløb et fælles **tema** for at give det sammenhæng. + +Ved at sikre, at indholdet er knyttet til projekter, bliver processen mere engagerende for studerende, og fastholdelsen af begreber vil blive forbedret. Derudover sætter en lav-stress quiz før en klasse intentionen hos den studerende mod at lære et emne, mens en anden quiz efter klassen sikrer yderligere fastholdelse. Dette undervisningsforløb er designet til at være fleksibelt og sjovt og kan tages i sin helhed eller delvist. Projekterne starter små og bliver gradvist mere komplekse ved slutningen af den 12-ugers cyklus. Dette forløb inkluderer også et efterskrift om virkelige anvendelser af ML, som kan bruges som ekstra kredit eller som grundlag for diskussion. + +> Find vores [Code of Conduct](CODE_OF_CONDUCT.md), [Contributing](CONTRIBUTING.md), og [Translation](TRANSLATIONS.md) retningslinjer. Vi værdsætter din konstruktive feedback! + +## Hver lektion inkluderer + +- valgfri sketchnote +- valgfri supplerende video +- video-gennemgang (kun nogle lektioner) +- [quiz før lektionen](https://ff-quizzes.netlify.app/en/ml/) +- skriftlig lektion +- for projektbaserede lektioner, trin-for-trin vejledninger til, hvordan man bygger projektet +- videnskontroller +- en udfordring +- supplerende læsning +- opgave +- [quiz efter lektionen](https://ff-quizzes.netlify.app/en/ml/) + +> **En note om sprog**: Disse lektioner er primært skrevet i Python, men mange er også tilgængelige i R. For at gennemføre en R-lektion, gå til `/solution`-mappen og kig efter R-lektioner. De inkluderer en .rmd-udvidelse, som repræsenterer en **R Markdown**-fil, der kan beskrives som en indlejring af `kodeblokke` (af R eller andre sprog) og en `YAML-header` (der guider, hvordan output formateres, såsom PDF) i et `Markdown-dokument`. Som sådan tjener det som en eksemplarisk forfatterramme for datavidenskab, da det giver dig mulighed for at kombinere din kode, dens output og dine tanker ved at skrive dem ned i Markdown. Desuden kan R Markdown-dokumenter gengives til outputformater som PDF, HTML eller Word. + +> **En note om quizzer**: Alle quizzer er indeholdt i [Quiz App-mappen](../../quiz-app), med i alt 52 quizzer med tre spørgsmål hver. De er linket fra lektionerne, men quiz-appen kan køres lokalt; følg instruktionen i `quiz-app`-mappen for at hoste lokalt eller udrulle til Azure. + +| Lektion Nummer | Emne | Lektion Gruppe | Læringsmål | Linket Lektion | Forfatter | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Introduktion til maskinlæring | [Introduktion](1-Introduction/README.md) | Lær de grundlæggende begreber bag maskinlæring | [Lektion](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | Historien om maskinlæring | [Introduktion](1-Introduction/README.md) | Lær historien bag dette felt | [Lektion](1-Introduction/2-history-of-ML/README.md) | Jen og Amy | +| 03 | Retfærdighed og maskinlæring | [Introduktion](1-Introduction/README.md) | Hvilke vigtige filosofiske spørgsmål omkring retfærdighed bør studerende overveje, når de bygger og anvender ML-modeller? | [Lektion](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Teknikker til maskinlæring | [Introduction](1-Introduction/README.md) | Hvilke teknikker bruger ML-forskere til at bygge ML-modeller? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris og Jen | +| 05 | Introduktion til regression | [Regression](2-Regression/README.md) | Kom i gang med Python og Scikit-learn til regressionsmodeller | +
                      • [Python](2-Regression/1-Tools/README.md)
                      • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                      |
                      • Jen
                      • Eric Wanjau
                      | +| 06 | Nordamerikanske græskarpriser 🎃 | [Regression](2-Regression/README.md) | Visualiser og rens data som forberedelse til ML |
                      • [Python](2-Regression/2-Data/README.md)
                      • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                      |
                      • Jen
                      • Eric Wanjau
                      | +| 07 | Nordamerikanske græskarpriser 🎃 | [Regression](2-Regression/README.md) | Byg lineære og polynomiske regressionsmodeller |
                      • [Python](2-Regression/3-Linear/README.md)
                      • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                      |
                      • Jen og Dmitry
                      • Eric Wanjau
                      | +| 08 | Nordamerikanske græskarpriser 🎃 | [Regression](2-Regression/README.md) | Byg en logistisk regressionsmodel |
                      • [Python](2-Regression/4-Logistic/README.md)
                      • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                      |
                      • Jen
                      • Eric Wanjau
                      | +| 09 | En webapp 🔌 | [Web App](3-Web-App/README.md) | Byg en webapp til at bruge din trænet model | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Introduktion til klassifikation | [Classification](4-Classification/README.md) | Rens, forbered og visualiser dine data; introduktion til klassifikation |
                      • [Python](4-Classification/1-Introduction/README.md)
                      • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                        • Jen og Cassie
                        • Eric Wanjau
                        | +| 11 | Lækre asiatiske og indiske retter 🍜 | [Classification](4-Classification/README.md) | Introduktion til klassifikatorer |
                        • [Python](4-Classification/2-Classifiers-1/README.md)
                        • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                          • Jen og Cassie
                          • Eric Wanjau
                          | +| 12 | Lækre asiatiske og indiske retter 🍜 | [Classification](4-Classification/README.md) | Flere klassifikatorer |
                          • [Python](4-Classification/3-Classifiers-2/README.md)
                          • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                            • Jen og Cassie
                            • Eric Wanjau
                            | +| 13 | Lækre asiatiske og indiske retter 🍜 | [Classification](4-Classification/README.md) | Byg en anbefalingswebapp ved hjælp af din model | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Introduktion til clustering | [Clustering](5-Clustering/README.md) | Rens, forbered og visualiser dine data; introduktion til clustering |
                            • [Python](5-Clustering/1-Visualize/README.md)
                            • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                              • Jen
                              • Eric Wanjau
                              | +| 15 | Udforskning af nigeriansk musiksmag 🎧 | [Clustering](5-Clustering/README.md) | Udforsk K-Means clustering-metoden |
                              • [Python](5-Clustering/2-K-Means/README.md)
                              • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                • Jen
                                • Eric Wanjau
                                | +| 16 | Introduktion til naturlig sprogbehandling ☕️ | [Natural language processing](6-NLP/README.md) | Lær det grundlæggende om NLP ved at bygge en simpel bot | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Almindelige NLP-opgaver ☕️ | [Natural language processing](6-NLP/README.md) | Uddyb din NLP-viden ved at forstå almindelige opgaver, der kræves ved arbejde med sproglige strukturer | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Oversættelse og sentimentanalyse ♥️ | [Natural language processing](6-NLP/README.md) | Oversættelse og sentimentanalyse med Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Romantiske hoteller i Europa ♥️ | [Natural language processing](6-NLP/README.md) | Sentimentanalyse med hotelanmeldelser 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Romantiske hoteller i Europa ♥️ | [Natural language processing](6-NLP/README.md) | Sentimentanalyse med hotelanmeldelser 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Introduktion til tidsserieforudsigelse | [Time series](7-TimeSeries/README.md) | Introduktion til tidsserieforudsigelse | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Verdens energiforbrug ⚡️ - tidsserieforudsigelse med ARIMA | [Time series](7-TimeSeries/README.md) | Tidsserieforudsigelse med ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Verdens energiforbrug ⚡️ - tidsserieforudsigelse med SVR | [Time series](7-TimeSeries/README.md) | Tidsserieforudsigelse med Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Introduktion til forstærkningslæring | [Reinforcement learning](8-Reinforcement/README.md) | Introduktion til forstærkningslæring med Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Hjælp Peter med at undgå ulven! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Forstærkningslæring Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Virkelige ML-scenarier og applikationer | [ML in the Wild](9-Real-World/README.md) | Interessante og afslørende virkelige applikationer af klassisk ML | [Lesson](9-Real-World/1-Applications/README.md) | Team | +| Postscript | Modeldebugging i ML med RAI-dashboard | [ML in the Wild](9-Real-World/README.md) | Modeldebugging i maskinlæring ved hjælp af Responsible AI-dashboardkomponenter | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [find alle yderligere ressourcer til dette kursus i vores Microsoft Learn-samling](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Offline adgang + +Du kan køre denne dokumentation offline ved at bruge [Docsify](https://docsify.js.org/#/). Fork denne repo, [installer Docsify](https://docsify.js.org/#/quickstart) på din lokale maskine, og skriv derefter `docsify serve` i rodmappen af denne repo. Websiden vil blive serveret på port 3000 på din localhost: `localhost:3000`. + +## PDF'er + +Find en pdf af pensum med links [her](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Andre kurser + +Vores team producerer andre kurser! Tjek: + +- [Generativ AI for begyndere](https://aka.ms/genai-beginners) +- [Generativ AI for begyndere .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generativ AI med JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generativ AI med Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for begyndere](https://aka.ms/ai-beginners) +- [Data Science for begyndere](https://aka.ms/datascience-beginners) +- [ML for begyndere](https://aka.ms/ml-beginners) +- [Cybersikkerhed for begyndere](https://github.com/microsoft/Security-101) +- [Webudvikling for begyndere](https://aka.ms/webdev-beginners) +- [IoT for begyndere](https://aka.ms/iot-beginners) +- [XR-udvikling for begyndere](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for parprogrammering](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET-udviklere](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Vælg dit eget Copilot-eventyr](https://github.com/microsoft/CopilotAdventures) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/SECURITY.md b/translations/da/SECURITY.md new file mode 100644 index 000000000..fb81310aa --- /dev/null +++ b/translations/da/SECURITY.md @@ -0,0 +1,51 @@ + +## Sikkerhed + +Microsoft tager sikkerheden af vores softwareprodukter og -tjenester alvorligt, hvilket inkluderer alle kildekoderepositorier, der administreres gennem vores GitHub-organisationer, som inkluderer [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) og [vores GitHub-organisationer](https://opensource.microsoft.com/). + +Hvis du mener, at du har fundet en sikkerhedssårbarhed i et Microsoft-ejet repository, der opfylder [Microsofts definition af en sikkerhedssårbarhed](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), bedes du rapportere det til os som beskrevet nedenfor. + +## Rapportering af sikkerhedsproblemer + +**Rapportér venligst ikke sikkerhedssårbarheder via offentlige GitHub-issues.** + +Rapportér dem i stedet til Microsoft Security Response Center (MSRC) på [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Hvis du foretrækker at indsende uden at logge ind, kan du sende en e-mail til [secure@microsoft.com](mailto:secure@microsoft.com). Hvis det er muligt, krypter din besked med vores PGP-nøgle; du kan downloade den fra [Microsoft Security Response Center PGP Key-siden](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Du bør modtage et svar inden for 24 timer. Hvis du af en eller anden grund ikke gør det, bedes du følge op via e-mail for at sikre, at vi har modtaget din oprindelige besked. Yderligere information kan findes på [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Inkluder venligst de ønskede oplysninger nedenfor (så meget som du kan give), for at hjælpe os med bedre at forstå arten og omfanget af det mulige problem: + + * Type af problem (f.eks. buffer overflow, SQL injection, cross-site scripting osv.) + * Fulde stier til kildefil(er) relateret til manifestation af problemet + * Placeringen af den berørte kildekode (tag/branch/commit eller direkte URL) + * Eventuelle særlige konfigurationer, der kræves for at genskabe problemet + * Trinvise instruktioner til at genskabe problemet + * Proof-of-concept eller exploit-kode (hvis muligt) + * Indvirkning af problemet, herunder hvordan en angriber kunne udnytte problemet + +Disse oplysninger vil hjælpe os med at prioritere din rapport hurtigere. + +Hvis du rapporterer for en bug bounty, kan mere komplette rapporter bidrage til en højere bounty-belønning. Besøg venligst vores [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty)-side for flere detaljer om vores aktive programmer. + +## Foretrukne sprog + +Vi foretrækker, at al kommunikation foregår på engelsk. + +## Politik + +Microsoft følger princippet om [Koordineret Sårbarhedsrapportering](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at sikre nøjagtighed, skal det bemærkes, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/SUPPORT.md b/translations/da/SUPPORT.md new file mode 100644 index 000000000..f602801df --- /dev/null +++ b/translations/da/SUPPORT.md @@ -0,0 +1,26 @@ + +# Support +## Sådan indsender du problemer og får hjælp + +Dette projekt bruger GitHub Issues til at spore fejl og funktionsanmodninger. Søg venligst blandt de eksisterende +problemer, før du opretter nye, for at undgå dubletter. For nye problemer, opret din fejl eller +funktionsanmodning som et nyt Issue. + +For hjælp og spørgsmål om brugen af dette projekt, opret et Issue. + +## Microsoft Supportpolitik + +Support for dette repository er begrænset til de ressourcer, der er nævnt ovenfor. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/docs/_sidebar.md b/translations/da/docs/_sidebar.md new file mode 100644 index 000000000..eb2d10f96 --- /dev/null +++ b/translations/da/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Introduktion + - [Introduktion til Maskinlæring](../1-Introduction/1-intro-to-ML/README.md) + - [Historien om Maskinlæring](../1-Introduction/2-history-of-ML/README.md) + - [ML og Retfærdighed](../1-Introduction/3-fairness/README.md) + - [Teknikker inden for ML](../1-Introduction/4-techniques-of-ML/README.md) + +- Regression + - [Værktøjer til arbejdet](../2-Regression/1-Tools/README.md) + - [Data](../2-Regression/2-Data/README.md) + - [Lineær Regression](../2-Regression/3-Linear/README.md) + - [Logistisk Regression](../2-Regression/4-Logistic/README.md) + +- Byg en Web App + - [Web App](../3-Web-App/1-Web-App/README.md) + +- Klassifikation + - [Introduktion til Klassifikation](../4-Classification/1-Introduction/README.md) + - [Klassifikatorer 1](../4-Classification/2-Classifiers-1/README.md) + - [Klassifikatorer 2](../4-Classification/3-Classifiers-2/README.md) + - [Anvendt ML](../4-Classification/4-Applied/README.md) + +- Klyngedannelse + - [Visualiser dine Data](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- NLP + - [Introduktion til NLP](../6-NLP/1-Introduction-to-NLP/README.md) + - [NLP Opgaver](../6-NLP/2-Tasks/README.md) + - [Oversættelse og Sentiment](../6-NLP/3-Translation-Sentiment/README.md) + - [Hotelanmeldelser 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Hotelanmeldelser 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Tidsserieforudsigelse + - [Introduktion til Tidsserieforudsigelse](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Forstærkningslæring + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- ML i den virkelige verden + - [Applikationer](../9-Real-World/1-Applications/README.md) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/for-teachers.md b/translations/da/for-teachers.md new file mode 100644 index 000000000..c5aff3690 --- /dev/null +++ b/translations/da/for-teachers.md @@ -0,0 +1,37 @@ + +## For undervisere + +Vil du gerne bruge dette pensum i din undervisning? Du er meget velkommen! + +Faktisk kan du bruge det direkte på GitHub ved at anvende GitHub Classroom. + +For at gøre det, skal du forgrene dette repo. Du skal oprette et repo for hver lektion, så du skal udtrække hver mappe til et separat repo. På den måde kan [GitHub Classroom](https://classroom.github.com/classrooms) håndtere hver lektion individuelt. + +Disse [fulde instruktioner](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) giver dig en idé om, hvordan du kan opsætte dit klasseværelse. + +## Brug af repoet som det er + +Hvis du ønsker at bruge dette repo, som det er, uden at anvende GitHub Classroom, kan det også lade sig gøre. Du skal blot kommunikere med dine elever om, hvilken lektion I skal arbejde med sammen. + +I et online format (Zoom, Teams eller andet) kan du oprette grupperum til quizzerne og vejlede eleverne, så de er klar til at lære. Derefter kan du invitere eleverne til at deltage i quizzerne og indsende deres svar som 'issues' på et bestemt tidspunkt. Du kan gøre det samme med opgaver, hvis du ønsker, at eleverne skal arbejde sammen offentligt. + +Hvis du foretrækker et mere privat format, kan du bede dine elever om at forgrene pensum, lektion for lektion, til deres egne private GitHub-repos og give dig adgang. Derefter kan de fuldføre quizzer og opgaver privat og indsende dem til dig via issues på dit klasseværelsesrepo. + +Der er mange måder at få dette til at fungere i et online klasseværelsesformat. Lad os endelig vide, hvad der fungerer bedst for dig! + +## Giv os dine tanker! + +Vi ønsker at gøre dette pensum så brugbart som muligt for dig og dine elever. Giv os venligst [feedback](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/quiz-app/README.md b/translations/da/quiz-app/README.md new file mode 100644 index 000000000..b72b30dce --- /dev/null +++ b/translations/da/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Quizzer + +Disse quizzer er før- og efterforelæsningsquizzer for ML-kurset på https://aka.ms/ml-beginners + +## Projektopsætning + +``` +npm install +``` + +### Kompilerer og genindlæser til udvikling + +``` +npm run serve +``` + +### Kompilerer og minimerer til produktion + +``` +npm run build +``` + +### Linter og retter filer + +``` +npm run lint +``` + +### Tilpas konfiguration + +Se [Konfigurationsreference](https://cli.vuejs.org/config/). + +Credits: Tak til den originale version af denne quiz-app: https://github.com/arpan45/simple-quiz-vue + +## Udrulning til Azure + +Her er en trin-for-trin guide til at komme i gang: + +1. Fork en GitHub-repository +Sørg for, at din statiske webapp-kode er i din GitHub-repository. Fork denne repository. + +2. Opret en Azure Static Web App +- Opret en [Azure-konto](http://azure.microsoft.com) +- Gå til [Azure-portalen](https://portal.azure.com) +- Klik på "Opret en ressource" og søg efter "Static Web App". +- Klik på "Opret". + +3. Konfigurer den statiske webapp +- Basics: + - Abonnement: Vælg dit Azure-abonnement. + - Ressourcegruppe: Opret en ny ressourcegruppe eller brug en eksisterende. + - Navn: Angiv et navn til din statiske webapp. + - Region: Vælg den region, der er tættest på dine brugere. + +- #### Udrulningsdetaljer: + - Kilde: Vælg "GitHub". + - GitHub-konto: Autoriser Azure til at få adgang til din GitHub-konto. + - Organisation: Vælg din GitHub-organisation. + - Repository: Vælg den repository, der indeholder din statiske webapp. + - Branch: Vælg den branch, du vil udrulle fra. + +- #### Bygningsdetaljer: + - Bygningspresets: Vælg det framework, din app er bygget med (f.eks. React, Angular, Vue osv.). + - App-placering: Angiv mappen, der indeholder din app-kode (f.eks. / hvis den er i roden). + - API-placering: Hvis du har en API, angiv dens placering (valgfrit). + - Output-placering: Angiv mappen, hvor bygningsoutputtet genereres (f.eks. build eller dist). + +4. Gennemse og opret +Gennemse dine indstillinger og klik på "Opret". Azure vil opsætte de nødvendige ressourcer og oprette en GitHub Actions workflow i din repository. + +5. GitHub Actions Workflow +Azure vil automatisk oprette en GitHub Actions workflow-fil i din repository (.github/workflows/azure-static-web-apps-.yml). Denne workflow vil håndtere bygge- og udrulningsprocessen. + +6. Overvåg udrulningen +Gå til fanen "Actions" i din GitHub-repository. +Du bør se en workflow køre. Denne workflow vil bygge og udrulle din statiske webapp til Azure. +Når workflowen er færdig, vil din app være live på den angivne Azure-URL. + +### Eksempel på workflow-fil + +Her er et eksempel på, hvordan GitHub Actions workflow-filen kunne se ud: +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 +``` + +### Yderligere ressourcer +- [Azure Static Web Apps Dokumentation](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions Dokumentation](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på at opnå nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der måtte opstå som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/sketchnotes/LICENSE.md b/translations/da/sketchnotes/LICENSE.md new file mode 100644 index 000000000..6e674064d --- /dev/null +++ b/translations/da/sketchnotes/LICENSE.md @@ -0,0 +1,112 @@ + +Rettigheder, så licenserer du den resulterende database under de samme betingelser som denne offentlige licens; + + c. du må ikke tilbyde eller pålægge yderligere eller forskellige vilkår eller betingelser for, eller anvende Effektive Teknologiske Foranstaltninger på, den licenserede database, der begrænser udøvelsen af de rettigheder, der er givet under denne offentlige licens; og + + d. for at undgå tvivl, gælder denne sektion 4 supplerende til og erstatter ikke dine forpligtelser i henhold til denne offentlige licens, hvor den licenserede database indeholder Licenseret Materiale. + + +Sektion 5 -- Fraskrivelse af garantier og ansvarsbegrænsning. + + a. Medmindre andet er udtrykkeligt angivet af licensgiveren, leveres det licenserede materiale "som det er" og "som tilgængeligt", uden nogen form for garanti, hverken udtrykkelig eller underforstået, herunder, men ikke begrænset til, garantier for salgbarhed, egnethed til et bestemt formål, ikke-krænkelse, eller at brugen af det licenserede materiale vil være uafbrudt eller fejlfri. + + b. I det omfang det er muligt, fraskriver licensgiveren sig ethvert ansvar over for dig for eventuelle tab, omkostninger, udgifter eller skader som følge af denne offentlige licens eller brugen af det licenserede materiale, selvom licensgiveren er blevet informeret om muligheden for sådanne tab, omkostninger, udgifter eller skader. Denne fraskrivelse af ansvar gælder ikke for ansvar, der ikke kan fraskrives eller begrænses i henhold til gældende lovgivning. + + c. I det omfang det er muligt, accepterer du, at du bærer enhver risiko forbundet med din brug af det licenserede materiale i det fulde omfang tilladt i henhold til gældende lovgivning. + + +Sektion 6 -- Varighed og ophør. + + a. Denne offentlige licens gælder i den periode, hvor ophavsretten og lignende rettigheder i det licenserede materiale gælder. Dog, hvis du ikke overholder denne offentlige licens, ophører dine rettigheder under denne licens automatisk. + + b. Hvis dine rettigheder ophører i henhold til sektion 6(a), genoprettes de: + + 1. automatisk fra det tidspunkt, hvor overtrædelsen ophører, forudsat at dette sker inden for 30 dage efter, at du blev opmærksom på overtrædelsen; eller + + 2. efter udtrykkelig genoprettelse fra licensgiveren. + + For at undgå tvivl påvirker denne sektion 6(b) ikke nogen rettigheder, som licensgiveren måtte have til at søge retsmidler for dine overtrædelser. + + c. Sektioner 1, 5, 6, 7 og 8 forbliver gældende efter ophør af denne offentlige licens. + + +Sektion 7 -- Andre vilkår og betingelser. + + a. Licensgiveren skal ikke være bundet af yderligere eller forskellige vilkår eller betingelser, som du kommunikerer. Enhver sådan yderligere eller forskellig kommunikation er ugyldig og uden virkning på denne offentlige licens. + + b. Enhver bestemmelse i denne offentlige licens, der anses for at være uigennemførlig, skal ændres kun i det omfang, der er nødvendigt for at gøre den gennemførlig. Hvis en bestemmelse ikke kan ændres, skal den adskilles fra denne offentlige licens uden at påvirke gyldigheden eller gennemførligheden af de resterende vilkår og betingelser. + + +Sektion 8 -- Fortolkning. + + a. Denne offentlige licens skal fortolkes som en licens, der ikke er en kontrakt. + + b. Intet i denne offentlige licens begrænser eller fratager nogen privilegier og undtagelser i henhold til gældende lovgivning om ophavsret eller andre gældende love. + + c. Denne offentlige licens skal ikke fortolkes som at reducere, begrænse, begrænse eller på nogen måde påvirke licensgiverens rettigheder til det licenserede materiale. + + d. Intet i denne offentlige licens udgør eller kan fortolkes som en fraskrivelse af nogen privilegier eller immuniteter, som licensgiveren måtte have, herunder i tilfælde, hvor licensgiveren er en offentlig enhed eller en international organisation. +Rettigheder, så er den database, hvori du har Sui Generis Database Rettigheder (men ikke dens individuelle indhold), Adaptivt Materiale, + +inklusive med henblik på afsnit 3(b); og +c. Du skal overholde betingelserne i afsnit 3(a), hvis du deler hele eller en væsentlig del af indholdet i databasen. + +For at undgå tvivl, supplerer dette afsnit 4 og erstatter ikke dine forpligtelser under denne offentlige licens, hvor de licenserede rettigheder inkluderer andre ophavsrettigheder og lignende rettigheder. + +### Afsnit 5 – Ansvarsfraskrivelse og begrænsning af ansvar + +a. MEDMINDRE ANDET ER SEPARAT AFTALT AF LICENSGIVEREN, I DET OMFANG DET ER MULIGT, TILBYDER LICENSGIVEREN DET LICENSEREDE MATERIALE SOM DET ER OG SOM TILGÆNGELIGT, OG GIVER INGEN ERKLÆRINGER ELLER GARANTIER AF NOGEN ART VEDRØRENDE DET LICENSEREDE MATERIALE, HVAD ENTEN DET ER UDTRYKKELIGT, UNDERFORSTÅET, LOVBESTEMT ELLER ANDET. DETTE INKLUDERER, UDEN BEGRÆNSNING, GARANTIER FOR EJENDOMSRET, SALGBARHED, EGNETHED TIL ET BESTEMT FORMÅL, IKKE-KRÆNKELSE, FRAVÆR AF SKJULTE ELLER ANDRE DEFEKTER, NØJAGTIGHED, ELLER TILSTEDEVÆRELSE ELLER FRAVÆR AF FEJL, UANSET OM DE ER KENDTE ELLER KAN OPDAGES. HVOR ANSVARSFRASKRIVELSER FOR GARANTIER IKKE ER TILLADT HELT ELLER DELVIST, KAN DENNE ANSVARSFRASKRIVELSE IKKE GÆLDE FOR DIG. + +b. I DET OMFANG DET ER MULIGT, VIL LICENSGIVEREN UNDER INGEN OMSTÆNDIGHEDER VÆRE ANSVARLIG OVER FOR DIG UNDER NOGEN JURIDISK TEORI (INKLUSIVE, UDEN BEGRÆNSNING, UAGTSOMHED) ELLER PÅ ANDEN MÅDE FOR NOGEN DIREKTE, SÆRLIGE, INDIREKTE, HÆNDELIGE, FØLGESKADER, STRAFFENDE, EKSEMPLARISKE ELLER ANDRE TAB, OMKOSTNINGER, UDGIFTER ELLER SKADER, DER OPSTÅR SOM FØLGE AF DENNE OFFENTLIGE LICENS ELLER BRUGEN AF DET LICENSEREDE MATERIALE, SELV HVIS LICENSGIVEREN ER BLEVET INFORMERET OM MULIGHEDEN FOR SÅDANNE TAB, OMKOSTNINGER, UDGIFTER ELLER SKADER. HVOR EN BEGRÆNSNING AF ANSVAR IKKE ER TILLADT HELT ELLER DELVIST, KAN DENNE BEGRÆNSNING IKKE GÆLDE FOR DIG. + +c. Ansvarsfraskrivelsen og begrænsningen af ansvar, der er angivet ovenfor, skal fortolkes på en måde, der, i det omfang det er muligt, mest muligt nærmer sig en absolut ansvarsfraskrivelse og frasigelse af alt ansvar. + +### Afsnit 6 – Varighed og ophør + +a. Denne offentlige licens gælder i den periode, hvor ophavsretten og lignende rettigheder, der er licenseret her, er gældende. Dog, hvis du undlader at overholde denne offentlige licens, ophører dine rettigheder under denne offentlige licens automatisk. + +b. Hvor din ret til at bruge det licenserede materiale er ophørt i henhold til afsnit 6(a), genoprettes den: + +1. automatisk fra den dato, hvor overtrædelsen er afhjulpet, forudsat at den afhjælpes inden for 30 dage efter din opdagelse af overtrædelsen; eller +2. ved udtrykkelig genoprettelse af licensgiveren. + +For at undgå tvivl påvirker dette afsnit 6(b) ikke nogen ret, licensgiveren måtte have til at søge retsmidler for dine overtrædelser af denne offentlige licens. + +c. For at undgå tvivl kan licensgiveren også tilbyde det licenserede materiale under separate vilkår eller betingelser eller stoppe med at distribuere det licenserede materiale til enhver tid; dog vil dette ikke ophæve denne offentlige licens. + +d. Afsnit 1, 5, 6, 7 og 8 forbliver gældende efter ophør af denne offentlige licens. + +### Afsnit 7 – Andre vilkår og betingelser + +a. Licensgiveren er ikke bundet af yderligere eller forskellige vilkår eller betingelser, som du kommunikerer, medmindre det udtrykkeligt er aftalt. + +b. Eventuelle arrangementer, forståelser eller aftaler vedrørende det licenserede materiale, der ikke er angivet heri, er adskilt fra og uafhængige af vilkårene og betingelserne i denne offentlige licens. + +### Afsnit 8 – Fortolkning + +a. For at undgå tvivl reducerer, begrænser, indskrænker eller pålægger denne offentlige licens ikke, og skal ikke fortolkes som at reducere, begrænse, indskrænke eller pålægge betingelser for enhver brug af det licenserede materiale, der lovligt kunne foretages uden tilladelse under denne offentlige licens. + +b. I det omfang det er muligt, hvis nogen bestemmelse i denne offentlige licens anses for at være uigennemførlig, skal den automatisk reformeres til det minimum, der er nødvendigt for at gøre den gennemførlig. Hvis bestemmelsen ikke kan reformeres, skal den adskilles fra denne offentlige licens uden at påvirke gennemførligheden af de resterende vilkår og betingelser. + +c. Ingen vilkår eller betingelser i denne offentlige licens vil blive frafaldet, og ingen manglende overholdelse vil blive accepteret, medmindre det udtrykkeligt er aftalt af licensgiveren. + +d. Intet i denne offentlige licens udgør eller kan fortolkes som en begrænsning af eller frasigelse af nogen privilegier og immuniteter, der gælder for licensgiveren eller dig, herunder fra de juridiske processer i enhver jurisdiktion eller myndighed. + +--- + +Creative Commons er ikke en part i sine offentlige licenser. Ikke desto mindre kan Creative Commons vælge at anvende en af sine offentlige licenser på materiale, det udgiver, og i disse tilfælde vil det blive betragtet som "licensgiveren." Teksten i Creative Commons offentlige licenser er dedikeret til offentligheden under CC0 Public Domain Dedication. Bortset fra det begrænsede formål at indikere, at materiale deles under en Creative Commons offentlig licens eller som ellers tilladt af Creative Commons' politikker offentliggjort på creativecommons.org/policies, autoriserer Creative Commons ikke brugen af varemærket "Creative Commons" eller noget andet varemærke eller logo fra Creative Commons uden forudgående skriftlig tilladelse, herunder, uden begrænsning, i forbindelse med uautoriserede ændringer af nogen af dets offentlige licenser eller andre arrangementer, forståelser eller aftaler vedrørende brugen af licenseret materiale. For at undgå tvivl udgør dette afsnit ikke en del af de offentlige licenser. + +Creative Commons kan kontaktes på creativecommons.org. + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi er ikke ansvarlige for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/da/sketchnotes/README.md b/translations/da/sketchnotes/README.md new file mode 100644 index 000000000..a3106b118 --- /dev/null +++ b/translations/da/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Alle sketchnotes fra pensum kan downloades her. + +🖨 For udskrivning i høj opløsning er TIFF-versionerne tilgængelige på [dette repo](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Oprettet af: [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/) + +--- + +**Ansvarsfraskrivelse**: +Dette dokument er blevet oversat ved hjælp af AI-oversættelsestjenesten [Co-op Translator](https://github.com/Azure/co-op-translator). Selvom vi bestræber os på nøjagtighed, skal du være opmærksom på, at automatiserede oversættelser kan indeholde fejl eller unøjagtigheder. Det originale dokument på dets oprindelige sprog bør betragtes som den autoritative kilde. For kritisk information anbefales professionel menneskelig oversættelse. Vi påtager os ikke ansvar for eventuelle misforståelser eller fejltolkninger, der opstår som følge af brugen af denne oversættelse. \ No newline at end of file diff --git a/translations/de/1-Introduction/1-intro-to-ML/README.md b/translations/de/1-Introduction/1-intro-to-ML/README.md index 8d0856a1e..a69dc59d8 100644 --- a/translations/de/1-Introduction/1-intro-to-ML/README.md +++ b/translations/de/1-Introduction/1-intro-to-ML/README.md @@ -1,96 +1,96 @@ -# Einführung in maschinelles Lernen +# Einführung in Machine Learning -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) --- -[![ML für Anfänger - Einführung in maschinelles Lernen für Anfänger](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML für Anfänger - Einführung in maschinelles Lernen für Anfänger") +[![ML für Anfänger - Einführung in Machine Learning für Anfänger](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML für Anfänger - Einführung in Machine Learning für Anfänger") > 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zu dieser Lektion anzusehen. -Willkommen zu diesem Kurs über klassisches maschinelles Lernen für Anfänger! Egal, ob Sie völlig neu in diesem Thema sind oder ein erfahrener ML-Praktiker, der sein Wissen auffrischen möchte – wir freuen uns, dass Sie dabei sind! Wir möchten einen freundlichen Einstiegspunkt für Ihr ML-Studium schaffen und freuen uns über Ihr [Feedback](https://github.com/microsoft/ML-For-Beginners/discussions), das wir gerne bewerten, beantworten und einarbeiten. +Willkommen zu diesem Kurs über klassisches Machine Learning für Anfänger! Egal, ob Sie völlig neu in diesem Thema sind oder ein erfahrener ML-Praktiker, der sein Wissen auffrischen möchte – wir freuen uns, dass Sie dabei sind! Wir möchten einen freundlichen Ausgangspunkt für Ihr ML-Studium schaffen und freuen uns über Ihr [Feedback](https://github.com/microsoft/ML-For-Beginners/discussions), das wir gerne bewerten, beantworten und einarbeiten. [![Einführung in ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Einführung in ML") -> 🎥 Klicken Sie auf das Bild oben für ein Video: John Guttag vom MIT führt in maschinelles Lernen ein. +> 🎥 Klicken Sie auf das Bild oben, um ein Video anzusehen: John Guttag vom MIT stellt Machine Learning vor. --- -## Einstieg in maschinelles Lernen +## Einstieg in Machine Learning -Bevor Sie mit diesem Lehrplan beginnen, müssen Sie Ihren Computer so einrichten, dass Sie Notebooks lokal ausführen können. +Bevor Sie mit diesem Lehrplan beginnen, sollten Sie Ihren Computer so einrichten, dass Sie Notebooks lokal ausführen können. -- **Konfigurieren Sie Ihren Computer mit diesen Videos**. Verwenden Sie die folgenden Links, um zu erfahren, [wie Sie Python installieren](https://youtu.be/CXZYvNRIAKM) und [einen Texteditor einrichten](https://youtu.be/EU8eayHWoZg) können. +- **Richten Sie Ihren Computer mit diesen Videos ein**. Nutzen Sie die folgenden Links, um zu erfahren, [wie Sie Python installieren](https://youtu.be/CXZYvNRIAKM) und [einen Texteditor einrichten](https://youtu.be/EU8eayHWoZg) können. - **Lernen Sie Python**. Es wird empfohlen, ein grundlegendes Verständnis von [Python](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) zu haben, einer Programmiersprache, die für Datenwissenschaftler nützlich ist und die wir in diesem Kurs verwenden. -- **Lernen Sie Node.js und JavaScript**. Wir verwenden JavaScript auch einige Male in diesem Kurs, wenn wir Webanwendungen erstellen. Daher müssen Sie [Node](https://nodejs.org) und [npm](https://www.npmjs.com/) installieren sowie [Visual Studio Code](https://code.visualstudio.com/) für die Entwicklung mit Python und JavaScript verfügbar haben. -- **Erstellen Sie ein GitHub-Konto**. Da Sie uns hier auf [GitHub](https://github.com) gefunden haben, haben Sie möglicherweise bereits ein Konto. Falls nicht, erstellen Sie eines und forken Sie dann diesen Lehrplan, um ihn selbst zu nutzen. (Geben Sie uns gerne auch einen Stern 😊) +- **Lernen Sie Node.js und JavaScript**. Wir verwenden JavaScript in diesem Kurs gelegentlich beim Erstellen von Webanwendungen. Daher sollten Sie [Node](https://nodejs.org) und [npm](https://www.npmjs.com/) installiert haben sowie [Visual Studio Code](https://code.visualstudio.com/) für die Entwicklung mit Python und JavaScript. +- **Erstellen Sie ein GitHub-Konto**. Da Sie uns hier auf [GitHub](https://github.com) gefunden haben, haben Sie möglicherweise bereits ein Konto. Falls nicht, erstellen Sie eines und forken Sie diesen Lehrplan, um ihn selbst zu nutzen. (Geben Sie uns gerne auch einen Stern 😊) - **Entdecken Sie Scikit-learn**. Machen Sie sich mit [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) vertraut, einer Sammlung von ML-Bibliotheken, die wir in diesen Lektionen verwenden. --- -## Was ist maschinelles Lernen? +## Was ist Machine Learning? -Der Begriff „maschinelles Lernen“ gehört zu den beliebtesten und am häufigsten verwendeten Begriffen der heutigen Zeit. Es ist nicht unwahrscheinlich, dass Sie diesen Begriff mindestens einmal gehört haben, wenn Sie mit Technologie vertraut sind, unabhängig davon, in welchem Bereich Sie arbeiten. Die Mechanik des maschinellen Lernens ist jedoch für die meisten Menschen ein Rätsel. Für einen Anfänger im Bereich maschinelles Lernen kann das Thema manchmal überwältigend wirken. Daher ist es wichtig, zu verstehen, was maschinelles Lernen tatsächlich ist, und es Schritt für Schritt anhand praktischer Beispiele zu lernen. +Der Begriff 'Machine Learning' gehört zu den beliebtesten und am häufigsten verwendeten Begriffen unserer Zeit. Es ist sehr wahrscheinlich, dass Sie diesen Begriff mindestens einmal gehört haben, wenn Sie irgendeine Art von Berührungspunkten mit Technologie haben, unabhängig von Ihrem Arbeitsbereich. Die Mechanismen des Machine Learning sind jedoch für die meisten Menschen ein Rätsel. Für einen Anfänger kann das Thema manchmal überwältigend wirken. Daher ist es wichtig, zu verstehen, was Machine Learning tatsächlich ist, und es Schritt für Schritt anhand praktischer Beispiele zu erlernen. --- ## Der Hype-Zyklus -![ml hype curve](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.de.png) +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) -> Google Trends zeigt den aktuellen „Hype-Zyklus“ des Begriffs „maschinelles Lernen“ +> Google Trends zeigt den aktuellen 'Hype-Zyklus' des Begriffs 'Machine Learning' --- ## Ein geheimnisvolles Universum -Wir leben in einem Universum voller faszinierender Geheimnisse. Große Wissenschaftler wie Stephen Hawking, Albert Einstein und viele andere haben ihr Leben der Suche nach bedeutungsvollen Informationen gewidmet, die die Geheimnisse der Welt um uns herum entschlüsseln. Dies ist die menschliche Bedingung des Lernens: Ein Kind lernt neue Dinge und entdeckt die Struktur seiner Welt Jahr für Jahr, während es erwachsen wird. +Wir leben in einem Universum voller faszinierender Geheimnisse. Große Wissenschaftler wie Stephen Hawking, Albert Einstein und viele andere haben ihr Leben der Suche nach bedeutungsvollen Informationen gewidmet, die die Geheimnisse der Welt um uns herum entschlüsseln. Dies ist die menschliche Bedingung des Lernens: Ein Kind lernt Jahr für Jahr neue Dinge und entdeckt die Struktur seiner Welt, während es erwachsen wird. --- ## Das Gehirn eines Kindes -Das Gehirn eines Kindes und seine Sinne nehmen die Fakten seiner Umgebung wahr und lernen nach und nach die verborgenen Muster des Lebens, die dem Kind helfen, logische Regeln zu entwickeln, um die erlernten Muster zu erkennen. Der Lernprozess des menschlichen Gehirns macht den Menschen zum raffiniertesten Lebewesen dieser Welt. Das kontinuierliche Lernen durch das Entdecken verborgener Muster und das anschließende Innovieren auf diesen Mustern ermöglicht es uns, uns im Laufe unseres Lebens immer weiter zu verbessern. Diese Lernfähigkeit und Weiterentwicklungskapazität hängt mit einem Konzept namens [Gehirnplastizität](https://www.simplypsychology.org/brain-plasticity.html) zusammen. Oberflächlich betrachtet können wir einige motivierende Ähnlichkeiten zwischen dem Lernprozess des menschlichen Gehirns und den Konzepten des maschinellen Lernens ziehen. +Das Gehirn eines Kindes und seine Sinne nehmen die Fakten seiner Umgebung wahr und lernen nach und nach die verborgenen Muster des Lebens, die dem Kind helfen, logische Regeln zu entwickeln, um diese Muster zu erkennen. Der Lernprozess des menschlichen Gehirns macht den Menschen zum komplexesten Lebewesen dieser Welt. Indem wir kontinuierlich lernen, verborgene Muster entdecken und auf diesen Mustern aufbauen, können wir uns im Laufe unseres Lebens immer weiter verbessern. Diese Lernfähigkeit und Weiterentwicklungsmöglichkeit steht im Zusammenhang mit einem Konzept namens [Gehirnplastizität](https://www.simplypsychology.org/brain-plasticity.html). Oberflächlich betrachtet können wir einige motivierende Ähnlichkeiten zwischen dem Lernprozess des menschlichen Gehirns und den Konzepten des Machine Learning ziehen. --- ## Das menschliche Gehirn -Das [menschliche Gehirn](https://www.livescience.com/29365-human-brain.html) nimmt Dinge aus der realen Welt wahr, verarbeitet die wahrgenommene Information, trifft rationale Entscheidungen und führt bestimmte Handlungen basierend auf den Umständen aus. Dies nennen wir intelligentes Verhalten. Wenn wir einen Nachbau des intelligenten Verhaltensprozesses für eine Maschine programmieren, nennen wir das künstliche Intelligenz (KI). +Das [menschliche Gehirn](https://www.livescience.com/29365-human-brain.html) nimmt Dinge aus der realen Welt wahr, verarbeitet die wahrgenommenen Informationen, trifft rationale Entscheidungen und führt bestimmte Handlungen basierend auf den Umständen aus. Dies nennen wir intelligentes Verhalten. Wenn wir einen Nachbau dieses intelligenten Verhaltensprozesses in eine Maschine programmieren, nennen wir das künstliche Intelligenz (KI). --- ## Einige Begriffe -Obwohl die Begriffe oft verwechselt werden, ist maschinelles Lernen (ML) ein wichtiger Teilbereich der künstlichen Intelligenz. **ML beschäftigt sich mit der Verwendung spezialisierter Algorithmen, um bedeutungsvolle Informationen zu entdecken und verborgene Muster aus wahrgenommenen Daten zu finden, um den rationalen Entscheidungsprozess zu unterstützen**. +Obwohl die Begriffe oft verwechselt werden, ist Machine Learning (ML) ein wichtiger Teilbereich der künstlichen Intelligenz. **ML beschäftigt sich mit der Verwendung spezialisierter Algorithmen, um bedeutungsvolle Informationen zu entdecken und verborgene Muster aus wahrgenommenen Daten zu finden, um den rationalen Entscheidungsprozess zu unterstützen**. --- ## KI, ML, Deep Learning -![AI, ML, deep learning, data science](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.de.png) +![KI, ML, Deep Learning, Data Science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) -> Ein Diagramm, das die Beziehungen zwischen KI, ML, Deep Learning und Datenwissenschaft zeigt. Infografik von [Jen Looper](https://twitter.com/jenlooper), inspiriert von [dieser Grafik](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) +> Ein Diagramm, das die Beziehungen zwischen KI, ML, Deep Learning und Data Science zeigt. Infografik von [Jen Looper](https://twitter.com/jenlooper), inspiriert von [dieser Grafik](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) --- ## Zu behandelnde Konzepte -In diesem Lehrplan behandeln wir nur die Kernkonzepte des maschinellen Lernens, die ein Anfänger kennen muss. Wir konzentrieren uns auf das sogenannte „klassische maschinelle Lernen“, hauptsächlich mit Scikit-learn, einer hervorragenden Bibliothek, die viele Studenten nutzen, um die Grundlagen zu lernen. Um breitere Konzepte der künstlichen Intelligenz oder des Deep Learning zu verstehen, ist ein starkes Grundwissen im maschinellen Lernen unerlässlich, und wir möchten es hier anbieten. +In diesem Lehrplan behandeln wir nur die grundlegenden Konzepte des Machine Learning, die ein Anfänger kennen muss. Wir konzentrieren uns auf das sogenannte 'klassische Machine Learning', hauptsächlich unter Verwendung von Scikit-learn, einer hervorragenden Bibliothek, die viele Studenten nutzen, um die Grundlagen zu erlernen. Um breitere Konzepte der künstlichen Intelligenz oder des Deep Learning zu verstehen, ist ein solides Grundwissen im Machine Learning unverzichtbar, und genau das möchten wir hier vermitteln. --- ## In diesem Kurs lernen Sie: -- Kernkonzepte des maschinellen Lernens +- grundlegende Konzepte des Machine Learning - die Geschichte des ML - ML und Fairness - Regressionstechniken im ML - Klassifikationstechniken im ML - Clustering-Techniken im ML -- Techniken der Verarbeitung natürlicher Sprache im ML -- Zeitreihenprognose-Techniken im ML -- Verstärkendes Lernen -- Anwendungen des ML in der realen Welt +- Techniken zur Verarbeitung natürlicher Sprache im ML +- Zeitreihenprognosen im ML +- Reinforcement Learning +- reale Anwendungen für ML --- ## Was wir nicht behandeln @@ -99,47 +99,47 @@ In diesem Lehrplan behandeln wir nur die Kernkonzepte des maschinellen Lernens, - Neuronale Netze - KI -Um das Lernen zu erleichtern, vermeiden wir die Komplexität neuronaler Netze, „Deep Learning“ – den Aufbau von Modellen mit vielen Schichten unter Verwendung neuronaler Netze – und KI, die wir in einem anderen Lehrplan behandeln werden. Wir werden auch einen bevorstehenden Lehrplan zur Datenwissenschaft anbieten, um diesen Aspekt dieses größeren Feldes zu fokussieren. +Um das Lernen zu erleichtern, vermeiden wir die Komplexität neuronaler Netze, des 'Deep Learning' – des Modellbaus mit vielen Schichten unter Verwendung neuronaler Netze – und der KI, die wir in einem anderen Lehrplan behandeln werden. Wir werden auch einen bevorstehenden Lehrplan zur Datenwissenschaft anbieten, um diesen Aspekt dieses größeren Feldes zu vertiefen. --- -## Warum maschinelles Lernen studieren? +## Warum Machine Learning studieren? -Maschinelles Lernen wird aus einer Systemperspektive definiert als die Erstellung automatisierter Systeme, die verborgene Muster aus Daten lernen können, um intelligente Entscheidungen zu unterstützen. +Machine Learning wird aus einer Systemperspektive als die Erstellung automatisierter Systeme definiert, die verborgene Muster aus Daten lernen können, um intelligente Entscheidungen zu unterstützen. Diese Motivation ist lose inspiriert von der Art und Weise, wie das menschliche Gehirn bestimmte Dinge basierend auf den Daten lernt, die es aus der Außenwelt wahrnimmt. -✅ Denken Sie einen Moment darüber nach, warum ein Unternehmen maschinelle Lernstrategien anstelle eines fest codierten regelbasierten Systems verwenden möchte. +✅ Überlegen Sie einen Moment, warum ein Unternehmen Machine Learning-Strategien einsetzen möchte, anstatt eine fest codierte regelbasierte Engine zu erstellen. --- -## Anwendungen des maschinellen Lernens +## Anwendungen von Machine Learning -Anwendungen des maschinellen Lernens sind mittlerweile fast überall und so allgegenwärtig wie die Daten, die in unseren Gesellschaften fließen, generiert durch unsere Smartphones, vernetzte Geräte und andere Systeme. Angesichts des enormen Potenzials moderner maschineller Lernalgorithmen erforschen Forscher ihre Fähigkeit, multidimensionale und interdisziplinäre Probleme des realen Lebens mit großartigen positiven Ergebnissen zu lösen. +Anwendungen von Machine Learning sind mittlerweile fast überall und so allgegenwärtig wie die Daten, die in unseren Gesellschaften durch Smartphones, vernetzte Geräte und andere Systeme generiert werden. Angesichts des enormen Potenzials moderner Machine Learning-Algorithmen erforschen Forscher ihre Fähigkeit, multidimensionale und multidisziplinäre reale Probleme mit großartigen positiven Ergebnissen zu lösen. --- ## Beispiele für angewandtes ML -**Maschinelles Lernen kann auf viele Arten genutzt werden**: +**Machine Learning kann auf viele Arten genutzt werden**: -- Um die Wahrscheinlichkeit einer Krankheit anhand der medizinischen Vorgeschichte oder Berichte eines Patienten vorherzusagen. +- Um die Wahrscheinlichkeit einer Krankheit anhand der Krankengeschichte oder Berichte eines Patienten vorherzusagen. - Um Wetterdaten zu nutzen, um Wetterereignisse vorherzusagen. - Um die Stimmung eines Textes zu verstehen. - Um Fake News zu erkennen und die Verbreitung von Propaganda zu stoppen. -Finanzen, Wirtschaft, Geowissenschaften, Weltraumforschung, biomedizinische Technik, Kognitionswissenschaften und sogar Bereiche der Geisteswissenschaften haben maschinelles Lernen adaptiert, um die mühsamen, datenintensiven Probleme ihrer Domäne zu lösen. +Finanzen, Wirtschaft, Erdwissenschaften, Weltraumforschung, biomedizinische Technik, Kognitionswissenschaften und sogar Geisteswissenschaften haben Machine Learning adaptiert, um die mühsamen, datenintensiven Probleme ihrer Domänen zu lösen. --- ## Fazit -Maschinelles Lernen automatisiert den Prozess der Mustererkennung, indem es bedeutungsvolle Erkenntnisse aus realen oder generierten Daten gewinnt. Es hat sich als äußerst wertvoll in Bereichen wie Wirtschaft, Gesundheit und Finanzen erwiesen. +Machine Learning automatisiert den Prozess der Mustererkennung, indem es bedeutungsvolle Einblicke aus realen oder generierten Daten gewinnt. Es hat sich in Bereichen wie Wirtschaft, Gesundheit und Finanzen als äußerst wertvoll erwiesen. -In naher Zukunft wird das Verständnis der Grundlagen des maschinellen Lernens für Menschen aus jedem Bereich aufgrund seiner weit verbreiteten Anwendung unverzichtbar sein. +In naher Zukunft wird das Verständnis der Grundlagen des Machine Learning für Menschen aus allen Bereichen aufgrund seiner weit verbreiteten Anwendung unverzichtbar sein. --- # 🚀 Herausforderung -Skizzieren Sie auf Papier oder mit einer Online-App wie [Excalidraw](https://excalidraw.com/) Ihr Verständnis der Unterschiede zwischen KI, ML, Deep Learning und Datenwissenschaft. Fügen Sie einige Ideen hinzu, welche Probleme mit diesen Techniken gut gelöst werden können. +Skizzieren Sie auf Papier oder mit einer Online-App wie [Excalidraw](https://excalidraw.com/) Ihr Verständnis der Unterschiede zwischen KI, ML, Deep Learning und Data Science. Fügen Sie einige Ideen hinzu, welche Probleme mit diesen Techniken gut gelöst werden können. -# [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) --- # Überprüfung & Selbststudium @@ -156,4 +156,4 @@ Machen Sie einen [Lernpfad](https://docs.microsoft.com/learn/modules/introductio --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/1-Introduction/2-history-of-ML/README.md b/translations/de/1-Introduction/2-history-of-ML/README.md index 19a250759..d5e397a40 100644 --- a/translations/de/1-Introduction/2-history-of-ML/README.md +++ b/translations/de/1-Introduction/2-history-of-ML/README.md @@ -1,18 +1,18 @@ # Geschichte des maschinellen Lernens -![Zusammenfassung der Geschichte des maschinellen Lernens in einer Sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.de.png) +![Zusammenfassung der Geschichte des maschinellen Lernens in einer Sketchnote](../../../../sketchnotes/ml-history.png) > Sketchnote von [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) --- @@ -22,133 +22,134 @@ CO_OP_TRANSLATOR_METADATA: In dieser Lektion gehen wir die wichtigsten Meilensteine in der Geschichte des maschinellen Lernens und der künstlichen Intelligenz durch. -Die Geschichte der künstlichen Intelligenz (KI) als Forschungsfeld ist eng mit der Geschichte des maschinellen Lernens verbunden, da die Algorithmen und rechnerischen Fortschritte, die ML zugrunde liegen, die Entwicklung der KI vorangetrieben haben. Es ist wichtig zu bedenken, dass sich diese Bereiche zwar erst in den 1950er Jahren als eigenständige Forschungsgebiete herauskristallisierten, aber wichtige [algorithmische, statistische, mathematische, rechnerische und technische Entdeckungen](https://wikipedia.org/wiki/Timeline_of_machine_learning) bereits vorher gemacht wurden und sich mit dieser Ära überschnitten. Tatsächlich beschäftigen sich Menschen schon seit [Hunderten von Jahren](https://wikipedia.org/wiki/History_of_artificial_intelligence) mit diesen Fragen: Dieser Artikel beleuchtet die historischen intellektuellen Grundlagen der Idee einer „denkenden Maschine“. +Die Geschichte der künstlichen Intelligenz (KI) als Forschungsfeld ist eng mit der Geschichte des maschinellen Lernens verbunden, da die Algorithmen und rechnerischen Fortschritte, die ML zugrunde liegen, zur Entwicklung der KI beigetragen haben. Es ist hilfreich, sich daran zu erinnern, dass, obwohl sich diese Bereiche als eigenständige Forschungsgebiete in den 1950er Jahren herauskristallisierten, wichtige [algorithmische, statistische, mathematische, rechnerische und technische Entdeckungen](https://wikipedia.org/wiki/Timeline_of_machine_learning) diese Ära vorwegnahmen und überlappten. Tatsächlich beschäftigen sich Menschen schon seit [Hunderten von Jahren](https://wikipedia.org/wiki/History_of_artificial_intelligence) mit diesen Fragen: Dieser Artikel beleuchtet die historischen intellektuellen Grundlagen der Idee einer „denkenden Maschine“. --- ## Bedeutende Entdeckungen -- 1763, 1812 [Bayes-Theorem](https://wikipedia.org/wiki/Bayes%27_theorem) und seine Vorgänger. Dieses Theorem und seine Anwendungen bilden die Grundlage der Inferenz und beschreiben die Wahrscheinlichkeit eines Ereignisses basierend auf vorherigem Wissen. -- 1805 [Methode der kleinsten Quadrate](https://wikipedia.org/wiki/Least_squares) von dem französischen Mathematiker Adrien-Marie Legendre. Diese Theorie, die Sie in unserer Regressionseinheit kennenlernen werden, hilft bei der Datenanpassung. -- 1913 [Markow-Ketten](https://wikipedia.org/wiki/Markov_chain), benannt nach dem russischen Mathematiker Andrey Markov, werden verwendet, um eine Abfolge möglicher Ereignisse basierend auf einem vorherigen Zustand zu beschreiben. -- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) ist eine Art linearer Klassifikator, der von dem amerikanischen Psychologen Frank Rosenblatt erfunden wurde und die Grundlage für Fortschritte im Deep Learning bildet. +- 1763, 1812 [Bayes-Theorem](https://wikipedia.org/wiki/Bayes%27_theorem) und seine Vorläufer. Dieses Theorem und seine Anwendungen bilden die Grundlage für Inferenz, indem sie die Wahrscheinlichkeit eines Ereignisses basierend auf Vorwissen beschreiben. +- 1805 [Methode der kleinsten Quadrate](https://wikipedia.org/wiki/Least_squares) des französischen Mathematikers Adrien-Marie Legendre. Diese Theorie, die Sie in unserer Regressionseinheit kennenlernen werden, hilft bei der Datenanpassung. +- 1913 [Markow-Ketten](https://wikipedia.org/wiki/Markov_chain), benannt nach dem russischen Mathematiker Andrey Markov, beschreiben eine Abfolge möglicher Ereignisse basierend auf einem vorherigen Zustand. +- 1957 [Perzeptron](https://wikipedia.org/wiki/Perceptron), ein von dem amerikanischen Psychologen Frank Rosenblatt erfundener linearer Klassifikator, der die Grundlage für Fortschritte im Deep Learning bildet. --- -- 1967 [Nächster Nachbar](https://wikipedia.org/wiki/Nearest_neighbor) ist ein Algorithmus, der ursprünglich zur Routenplanung entwickelt wurde. Im ML-Kontext wird er zur Mustererkennung verwendet. +- 1967 [Nächster-Nachbar-Algorithmus](https://wikipedia.org/wiki/Nearest_neighbor), ursprünglich entwickelt, um Routen zu kartieren. Im ML-Kontext wird er zur Mustererkennung verwendet. - 1970 [Backpropagation](https://wikipedia.org/wiki/Backpropagation) wird verwendet, um [Feedforward-Neuronale Netze](https://wikipedia.org/wiki/Feedforward_neural_network) zu trainieren. - 1982 [Rekurrente Neuronale Netze](https://wikipedia.org/wiki/Recurrent_neural_network) sind künstliche neuronale Netze, die aus Feedforward-Netzen abgeleitet sind und zeitliche Graphen erstellen. -✅ Machen Sie ein wenig Recherche. Welche anderen Daten sind Ihrer Meinung nach entscheidend in der Geschichte des maschinellen Lernens und der KI? +✅ Recherchieren Sie ein wenig. Welche anderen Daten sind Ihrer Meinung nach entscheidend in der Geschichte des maschinellen Lernens und der KI? --- ## 1950: Maschinen, die denken -Alan Turing, eine wirklich bemerkenswerte Persönlichkeit, die [2019 von der Öffentlichkeit](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) als der größte Wissenschaftler des 20. Jahrhunderts gewählt wurde, wird zugeschrieben, die Grundlage für das Konzept einer „denkenden Maschine“ gelegt zu haben. Er setzte sich mit Kritikern auseinander und suchte nach empirischen Beweisen für dieses Konzept, unter anderem durch die Entwicklung des [Turing-Tests](https://www.bbc.com/news/technology-18475646), den Sie in unseren NLP-Lektionen näher kennenlernen werden. +Alan Turing, eine wahrhaft bemerkenswerte Persönlichkeit, die [2019 von der Öffentlichkeit](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) zum größten Wissenschaftler des 20. Jahrhunderts gewählt wurde, wird zugeschrieben, das Fundament für das Konzept einer „denkenden Maschine“ gelegt zu haben. Er setzte sich mit Skeptikern auseinander und suchte nach empirischen Beweisen für dieses Konzept, unter anderem durch die Entwicklung des [Turing-Tests](https://www.bbc.com/news/technology-18475646), den Sie in unseren NLP-Lektionen näher kennenlernen werden. --- ## 1956: Dartmouth Summer Research Project -„Das Dartmouth Summer Research Project zur künstlichen Intelligenz war ein wegweisendes Ereignis für die KI als Forschungsfeld“, und hier wurde der Begriff „künstliche Intelligenz“ geprägt ([Quelle](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). +„Das Dartmouth Summer Research Project zur künstlichen Intelligenz war ein wegweisendes Ereignis für das Feld der künstlichen Intelligenz“, und hier wurde der Begriff „künstliche Intelligenz“ geprägt ([Quelle](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). -> Jeder Aspekt des Lernens oder eines anderen Merkmals der Intelligenz kann im Prinzip so genau beschrieben werden, dass eine Maschine dazu gebracht werden kann, ihn zu simulieren. +> Jeder Aspekt des Lernens oder eines anderen Merkmals von Intelligenz kann im Prinzip so präzise beschrieben werden, dass eine Maschine es simulieren kann. --- -Der leitende Forscher, Mathematikprofessor John McCarthy, hoffte „auf der Grundlage der Vermutung vorzugehen, dass jeder Aspekt des Lernens oder eines anderen Merkmals der Intelligenz im Prinzip so genau beschrieben werden kann, dass eine Maschine dazu gebracht werden kann, ihn zu simulieren.“ Zu den Teilnehmern gehörte auch eine weitere bedeutende Persönlichkeit des Feldes, Marvin Minsky. +Der leitende Forscher, Mathematikprofessor John McCarthy, hoffte, „auf der Grundlage der Vermutung vorzugehen, dass jeder Aspekt des Lernens oder eines anderen Merkmals von Intelligenz im Prinzip so präzise beschrieben werden kann, dass eine Maschine es simulieren kann.“ Zu den Teilnehmern gehörte auch eine weitere Koryphäe des Feldes, Marvin Minsky. -Der Workshop wird dafür anerkannt, mehrere Diskussionen angestoßen und gefördert zu haben, darunter „der Aufstieg symbolischer Methoden, Systeme, die sich auf begrenzte Domänen konzentrieren (frühe Expertensysteme), und deduktive Systeme versus induktive Systeme.“ ([Quelle](https://wikipedia.org/wiki/Dartmouth_workshop)). +Der Workshop wird dafür verantwortlich gemacht, mehrere Diskussionen angestoßen und gefördert zu haben, darunter „den Aufstieg symbolischer Methoden, Systeme, die sich auf begrenzte Domänen konzentrieren (frühe Expertensysteme), und deduktive Systeme versus induktive Systeme.“ ([Quelle](https://wikipedia.org/wiki/Dartmouth_workshop)). --- ## 1956 - 1974: „Die goldenen Jahre“ -Von den 1950er Jahren bis Mitte der 1970er Jahre herrschte große Zuversicht, dass KI viele Probleme lösen könnte. 1967 erklärte Marvin Minsky selbstbewusst: „Innerhalb einer Generation ... wird das Problem der Schaffung von ‚künstlicher Intelligenz‘ im Wesentlichen gelöst sein.“ (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) +Von den 1950er Jahren bis Mitte der 1970er Jahre herrschte großer Optimismus, dass KI viele Probleme lösen könnte. 1967 erklärte Marvin Minsky zuversichtlich: „Innerhalb einer Generation ... wird das Problem, ‚künstliche Intelligenz‘ zu schaffen, im Wesentlichen gelöst sein.“ (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) -Die Forschung zur Verarbeitung natürlicher Sprache blühte auf, Suchalgorithmen wurden verfeinert und leistungsfähiger gemacht, und das Konzept der „Mikrowelten“ wurde entwickelt, in denen einfache Aufgaben mit einfachen Sprachbefehlen ausgeführt werden konnten. +Die Forschung zur Verarbeitung natürlicher Sprache blühte auf, Suchalgorithmen wurden verfeinert und leistungsfähiger, und das Konzept der „Mikrowelten“ wurde entwickelt, in denen einfache Aufgaben mit einfachen Sprachbefehlen ausgeführt werden konnten. --- -Die Forschung wurde von Regierungsbehörden gut finanziert, Fortschritte in der Berechnung und bei Algorithmen wurden erzielt, und Prototypen intelligenter Maschinen wurden gebaut. Einige dieser Maschinen umfassen: +Die Forschung wurde gut von Regierungsbehörden finanziert, Fortschritte in der Rechenleistung und bei Algorithmen wurden erzielt, und Prototypen intelligenter Maschinen wurden gebaut. Einige dieser Maschinen umfassen: -* [Shakey der Roboter](https://wikipedia.org/wiki/Shakey_the_robot), der sich bewegen und entscheiden konnte, wie er Aufgaben „intelligent“ ausführt. +* [Shakey der Roboter](https://wikipedia.org/wiki/Shakey_the_robot), der sich bewegen und „intelligent“ entscheiden konnte, wie Aufgaben ausgeführt werden sollten. - ![Shakey, ein intelligenter Roboter](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.de.jpg) + ![Shakey, ein intelligenter Roboter](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > Shakey im Jahr 1972 --- * Eliza, ein früher „Chatterbot“, konnte mit Menschen kommunizieren und als primitiver „Therapeut“ fungieren. Sie werden mehr über Eliza in den NLP-Lektionen erfahren. - ![Eliza, ein Bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.de.png) - > Eine Version von Eliza, ein Chatbot + ![Eliza, ein Bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Eine Version von Eliza, einem Chatbot --- -* „Blocks World“ war ein Beispiel für eine Mikrowelt, in der Blöcke gestapelt und sortiert werden konnten und Experimente zur Entscheidungsfindung von Maschinen durchgeführt wurden. Fortschritte mit Bibliotheken wie [SHRDLU](https://wikipedia.org/wiki/SHRDLU) trieben die Sprachverarbeitung voran. +* „Blocks World“ war ein Beispiel für eine Mikrowelt, in der Blöcke gestapelt und sortiert werden konnten, und Experimente zur Entscheidungsfindung von Maschinen durchgeführt wurden. Fortschritte mit Bibliotheken wie [SHRDLU](https://wikipedia.org/wiki/SHRDLU) trieben die Sprachverarbeitung voran. [![Blocks World mit SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "Blocks World mit SHRDLU") > 🎥 Klicken Sie auf das Bild oben für ein Video: Blocks World mit SHRDLU --- -## 1974 - 1980: „AI Winter“ +## 1974 - 1980: „KI-Winter“ + +Mitte der 1970er Jahre wurde klar, dass die Komplexität der Entwicklung „intelligenter Maschinen“ unterschätzt und ihr Potenzial angesichts der verfügbaren Rechenleistung überschätzt worden war. Die Finanzierung versiegte, und das Vertrauen in das Feld nahm ab. Einige Probleme, die das Vertrauen beeinträchtigten, waren: -Mitte der 1970er Jahre wurde klar, dass die Komplexität der Schaffung „intelligenter Maschinen“ unterschätzt und ihr Versprechen angesichts der verfügbaren Rechenleistung überbewertet worden war. Die Finanzierung versiegte und das Vertrauen in das Feld nahm ab. Einige Probleme, die das Vertrauen beeinträchtigten, waren: --- - **Einschränkungen**. Die Rechenleistung war zu begrenzt. -- **Kombinatorische Explosion**. Die Anzahl der zu trainierenden Parameter wuchs exponentiell, je mehr von Computern verlangt wurde, ohne dass sich die Rechenleistung und -fähigkeit parallel weiterentwickelten. +- **Kombinatorische Explosion**. Die Anzahl der zu trainierenden Parameter wuchs exponentiell, je mehr von Computern verlangt wurde, ohne dass die Rechenleistung und -fähigkeit parallel dazu wuchsen. - **Mangel an Daten**. Es gab einen Mangel an Daten, der den Prozess des Testens, Entwickelns und Verfeinerns von Algorithmen behinderte. -- **Stellen wir die richtigen Fragen?**. Die gestellten Fragen selbst wurden infrage gestellt. Forscher sahen sich Kritik an ihren Ansätzen gegenüber: - - Turing-Tests wurden unter anderem durch die „Chinese Room Theory“ infrage gestellt, die besagt, dass „das Programmieren eines digitalen Computers ihn zwar so erscheinen lassen kann, als würde er Sprache verstehen, aber kein echtes Verständnis erzeugen könnte.“ ([Quelle](https://plato.stanford.edu/entries/chinese-room/)) - - Die Ethik der Einführung künstlicher Intelligenzen wie des „Therapeuten“ ELIZA in die Gesellschaft wurde herausgefordert. +- **Stellen wir die richtigen Fragen?**. Die gestellten Fragen selbst wurden infrage gestellt. Forscher sahen sich Kritik an ihren Ansätzen ausgesetzt: + - Turing-Tests wurden unter anderem durch die „Chinese Room“-Theorie infrage gestellt, die besagt, dass „das Programmieren eines digitalen Computers zwar den Anschein erwecken kann, Sprache zu verstehen, aber kein echtes Verständnis erzeugen kann.“ ([Quelle](https://plato.stanford.edu/entries/chinese-room/)) + - Die Ethik der Einführung künstlicher Intelligenzen wie des „Therapeuten“ ELIZA in die Gesellschaft wurde hinterfragt. --- -Gleichzeitig begannen sich verschiedene Schulen der KI-Forschung zu bilden. Es entstand eine Dichotomie zwischen ["Scruffy" vs. "Neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies)-Praktiken. _Scruffy_-Labore optimierten Programme stundenlang, bis sie die gewünschten Ergebnisse erzielten. _Neat_-Labore „konzentrierten sich auf Logik und formale Problemlösung“. ELIZA und SHRDLU waren bekannte _Scruffy_-Systeme. In den 1980er Jahren, als die Nachfrage nach reproduzierbaren ML-Systemen aufkam, setzte sich der _Neat_-Ansatz allmählich durch, da seine Ergebnisse besser erklärbar sind. +Gleichzeitig begannen sich verschiedene Schulen der KI-Forschung zu bilden. Es entstand eine Dichotomie zwischen ["Scruffy" vs. "Neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies)-Praktiken. _Scruffy_-Labore optimierten Programme stundenlang, bis sie die gewünschten Ergebnisse erzielten. _Neat_-Labore „konzentrierten sich auf Logik und formale Problemlösung“. ELIZA und SHRDLU waren bekannte _Scruffy_-Systeme. In den 1980er Jahren, als die Nachfrage nach reproduzierbaren ML-Systemen wuchs, setzte sich der _Neat_-Ansatz allmählich durch, da seine Ergebnisse besser erklärbar sind. --- ## 1980er Jahre: Expertensysteme -Mit dem Wachstum des Feldes wurde sein Nutzen für Unternehmen deutlicher, und in den 1980er Jahren verbreiteten sich „Expertensysteme“. „Expertensysteme gehörten zu den ersten wirklich erfolgreichen Formen von künstlicher Intelligenz (KI)-Software.“ ([Quelle](https://wikipedia.org/wiki/Expert_system)). +Mit dem Wachstum des Feldes wurde sein Nutzen für Unternehmen deutlicher, und in den 1980er Jahren verbreiteten sich „Expertensysteme“. „Expertensysteme waren eine der ersten wirklich erfolgreichen Formen von KI-Software.“ ([Quelle](https://wikipedia.org/wiki/Expert_system)) -Diese Art von System ist tatsächlich _hybrid_ und besteht teilweise aus einer Regel-Engine, die Geschäftsanforderungen definiert, und einer Inferenz-Engine, die das Regelwerk nutzt, um neue Fakten abzuleiten. +Dieser Systemtyp ist tatsächlich _hybrid_ und besteht teilweise aus einer Regel-Engine, die Geschäftsanforderungen definiert, und einer Inferenz-Engine, die das Regelwerk nutzt, um neue Fakten abzuleiten. In dieser Ära wurde auch den neuronalen Netzen zunehmend Aufmerksamkeit geschenkt. --- -## 1987 - 1993: AI „Chill“ +## 1987 - 1993: „KI-Abkühlung“ -Die Verbreitung spezialisierter Expertensystem-Hardware hatte den unglücklichen Effekt, zu spezialisiert zu werden. Der Aufstieg von Personal Computern konkurrierte mit diesen großen, spezialisierten, zentralisierten Systemen. Die Demokratisierung des Rechnens hatte begonnen und ebnete schließlich den Weg für die moderne Explosion von Big Data. +Die Verbreitung spezialisierter Hardware für Expertensysteme hatte den unglücklichen Effekt, zu spezialisiert zu werden. Der Aufstieg von Personal Computern konkurrierte mit diesen großen, spezialisierten, zentralisierten Systemen. Die Demokratisierung des Rechnens hatte begonnen und ebnete schließlich den Weg für die moderne Explosion von Big Data. --- ## 1993 - 2011 -Diese Epoche markierte eine neue Ära für ML und KI, um einige der Probleme zu lösen, die zuvor durch den Mangel an Daten und Rechenleistung verursacht worden waren. Die Menge an Daten begann rapide zu wachsen und wurde zunehmend verfügbar, sowohl zum Guten als auch zum Schlechten, insbesondere mit der Einführung des Smartphones um 2007. Die Rechenleistung nahm exponentiell zu, und Algorithmen entwickelten sich parallel dazu weiter. Das Feld begann, Reife zu erlangen, da die ungebundenen Tage der Vergangenheit sich zu einer echten Disziplin formten. +Diese Epoche markierte eine neue Ära für ML und KI, um einige der Probleme zu lösen, die zuvor durch den Mangel an Daten und Rechenleistung verursacht worden waren. Die Menge an Daten begann rapide zu wachsen und wurde zunehmend verfügbar, sowohl zum Guten als auch zum Schlechten, insbesondere mit dem Aufkommen des Smartphones um 2007. Die Rechenleistung wuchs exponentiell, und Algorithmen entwickelten sich parallel dazu weiter. Das Feld begann, sich zu einer echten Disziplin zu entwickeln, während die unstrukturierten Ansätze der Vergangenheit allmählich einer gereiften Struktur wichen. --- ## Heute -Heute berühren maschinelles Lernen und KI fast jeden Teil unseres Lebens. Diese Ära erfordert ein sorgfältiges Verständnis der Risiken und potenziellen Auswirkungen dieser Algorithmen auf das menschliche Leben. Wie Brad Smith von Microsoft erklärt hat: „Informationstechnologie wirft Fragen auf, die das Herzstück grundlegender Menschenrechtsfragen wie Privatsphäre und Meinungsfreiheit berühren. Diese Fragen erhöhen die Verantwortung für Technologieunternehmen, die diese Produkte entwickeln. Aus unserer Sicht erfordern sie auch eine durchdachte staatliche Regulierung und die Entwicklung von Normen für akzeptable Anwendungen.“ ([Quelle](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). +Heute berühren maschinelles Lernen und KI fast jeden Bereich unseres Lebens. Diese Ära erfordert ein sorgfältiges Verständnis der Risiken und potenziellen Auswirkungen dieser Algorithmen auf das menschliche Leben. Wie Brad Smith von Microsoft erklärt hat: „Informationstechnologie wirft Fragen auf, die das Herzstück grundlegender Menschenrechtsfragen wie Datenschutz und Meinungsfreiheit betreffen. Diese Fragen erhöhen die Verantwortung von Technologieunternehmen, die diese Produkte entwickeln. Unserer Ansicht nach erfordern sie auch eine durchdachte staatliche Regulierung und die Entwicklung von Normen für akzeptable Nutzungen.“ ([Quelle](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)) --- Es bleibt abzuwarten, was die Zukunft bringt, aber es ist wichtig, diese Computersysteme sowie die Software und Algorithmen, die sie ausführen, zu verstehen. Wir hoffen, dass dieses Curriculum Ihnen hilft, ein besseres Verständnis zu erlangen, damit Sie selbst entscheiden können. [![Die Geschichte des Deep Learning](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Die Geschichte des Deep Learning") -> 🎥 Klicken Sie auf das Bild oben für ein Video: Yann LeCun diskutiert die Geschichte des Deep Learning in diesem Vortrag +> 🎥 Klicken Sie auf das Bild oben für ein Video: Yann LeCun spricht in diesem Vortrag über die Geschichte des Deep Learning --- ## 🚀 Herausforderung Tauchen Sie in einen dieser historischen Momente ein und erfahren Sie mehr über die Menschen dahinter. Es gibt faszinierende Persönlichkeiten, und keine wissenschaftliche Entdeckung wurde jemals in einem kulturellen Vakuum gemacht. Was entdecken Sie? -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) --- -## Überprüfung & Selbststudium +## Rückblick & Selbststudium -Hier sind einige Dinge, die Sie sich ansehen und anhören können: +Hier sind einige Inhalte zum Anschauen und Anhören: -[Dieser Podcast, in dem Amy Boyd die Entwicklung der KI diskutiert](http://runasradio.com/Shows/Show/739) +[Dieser Podcast, in dem Amy Boyd über die Entwicklung der KI spricht](http://runasradio.com/Shows/Show/739) [![Die Geschichte der KI von Amy Boyd](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Die Geschichte der KI von Amy Boyd") @@ -161,4 +162,4 @@ Hier sind einige Dinge, die Sie sich ansehen und anhören können: --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/1-Introduction/3-fairness/README.md b/translations/de/1-Introduction/3-fairness/README.md index 425e95608..222b20c30 100644 --- a/translations/de/1-Introduction/3-fairness/README.md +++ b/translations/de/1-Introduction/3-fairness/README.md @@ -1,33 +1,33 @@ -# Entwicklung von Machine-Learning-Lösungen mit verantwortungsbewusster KI +# Aufbau von Machine-Learning-Lösungen mit verantwortungsbewusster KI -![Zusammenfassung der verantwortungsbewussten KI im Machine Learning in einer Sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.de.png) +![Zusammenfassung von verantwortungsbewusster KI im Machine Learning in einer Sketchnote](../../../../sketchnotes/ml-fairness.png) > Sketchnote von [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) ## Einführung -In diesem Lehrplan werden Sie beginnen zu entdecken, wie Machine Learning unser tägliches Leben beeinflussen kann und bereits beeinflusst. Schon jetzt sind Systeme und Modelle in alltägliche Entscheidungsprozesse eingebunden, wie etwa bei medizinischen Diagnosen, Kreditgenehmigungen oder der Betrugserkennung. Daher ist es wichtig, dass diese Modelle zuverlässig arbeiten, um vertrauenswürdige Ergebnisse zu liefern. Wie jede Softwareanwendung können auch KI-Systeme Erwartungen nicht erfüllen oder unerwünschte Ergebnisse liefern. Deshalb ist es entscheidend, das Verhalten eines KI-Modells verstehen und erklären zu können. +In diesem Lehrplan werden Sie entdecken, wie Machine Learning unser tägliches Leben beeinflusst. Schon jetzt sind Systeme und Modelle in alltägliche Entscheidungsprozesse eingebunden, wie z. B. bei medizinischen Diagnosen, Kreditgenehmigungen oder der Betrugserkennung. Daher ist es wichtig, dass diese Modelle zuverlässig arbeiten und vertrauenswürdige Ergebnisse liefern. Genau wie jede andere Softwareanwendung können KI-Systeme Erwartungen nicht erfüllen oder unerwünschte Ergebnisse liefern. Deshalb ist es entscheidend, das Verhalten eines KI-Modells zu verstehen und erklären zu können. -Stellen Sie sich vor, was passieren kann, wenn die Daten, die Sie zur Erstellung dieser Modelle verwenden, bestimmte demografische Gruppen wie Rasse, Geschlecht, politische Ansichten oder Religion nicht berücksichtigen oder diese unverhältnismäßig repräsentieren. Was passiert, wenn die Ergebnisse des Modells so interpretiert werden, dass sie eine bestimmte demografische Gruppe bevorzugen? Welche Konsequenzen hat das für die Anwendung? Und was passiert, wenn das Modell ein schädliches Ergebnis liefert? Wer ist für das Verhalten des KI-Systems verantwortlich? Dies sind einige der Fragen, die wir in diesem Lehrplan untersuchen werden. +Stellen Sie sich vor, was passieren kann, wenn die Daten, die Sie zur Erstellung dieser Modelle verwenden, bestimmte demografische Gruppen wie Ethnie, Geschlecht, politische Ansichten oder Religion nicht berücksichtigen oder unverhältnismäßig repräsentieren. Was passiert, wenn die Ergebnisse des Modells so interpretiert werden, dass sie eine bestimmte demografische Gruppe bevorzugen? Welche Konsequenzen hat das für die Anwendung? Und was passiert, wenn das Modell ein schädliches Ergebnis liefert? Wer ist für das Verhalten des KI-Systems verantwortlich? Diese Fragen werden wir in diesem Lehrplan untersuchen. In dieser Lektion werden Sie: -- Ihr Bewusstsein für die Bedeutung von Fairness im Machine Learning und die damit verbundenen Schäden schärfen. -- Sich mit der Praxis vertraut machen, Ausreißer und ungewöhnliche Szenarien zu untersuchen, um Zuverlässigkeit und Sicherheit zu gewährleisten. -- Ein Verständnis dafür gewinnen, wie wichtig es ist, alle Menschen durch die Gestaltung inklusiver Systeme zu stärken. -- Erkunden, wie entscheidend es ist, die Privatsphäre und Sicherheit von Daten und Menschen zu schützen. +- Ein Bewusstsein für die Bedeutung von Fairness im Machine Learning und fairnessbezogene Schäden entwickeln. +- Die Praxis des Erkundens von Ausreißern und ungewöhnlichen Szenarien kennenlernen, um Zuverlässigkeit und Sicherheit zu gewährleisten. +- Verstehen, warum es wichtig ist, inklusive Systeme zu entwerfen, die alle Menschen einbeziehen. +- Erforschen, wie entscheidend es ist, die Privatsphäre und Sicherheit von Daten und Menschen zu schützen. - Die Bedeutung eines transparenten Ansatzes erkennen, um das Verhalten von KI-Modellen zu erklären. -- Sich bewusst machen, wie essenziell Verantwortlichkeit ist, um Vertrauen in KI-Systeme aufzubauen. +- Verstehen, warum Verantwortlichkeit essenziell ist, um Vertrauen in KI-Systeme aufzubauen. ## Voraussetzungen @@ -41,124 +41,124 @@ Erfahren Sie mehr über verantwortungsbewusste KI, indem Sie diesem [Lernpfad](h ## Fairness -KI-Systeme sollten alle Menschen fair behandeln und vermeiden, ähnliche Gruppen unterschiedlich zu beeinflussen. Beispielsweise sollten KI-Systeme bei medizinischen Behandlungen, Kreditanträgen oder Beschäftigungsentscheidungen die gleichen Empfehlungen für alle mit ähnlichen Symptomen, finanziellen Umständen oder beruflichen Qualifikationen geben. Jeder von uns trägt als Mensch ererbte Vorurteile mit sich, die unsere Entscheidungen und Handlungen beeinflussen. Diese Vorurteile können sich in den Daten widerspiegeln, die wir zur Schulung von KI-Systemen verwenden. Solche Manipulationen können manchmal unbeabsichtigt geschehen. Es ist oft schwierig, bewusst zu erkennen, wann man Vorurteile in Daten einführt. +KI-Systeme sollten alle Menschen fair behandeln und vermeiden, ähnliche Gruppen unterschiedlich zu beeinflussen. Beispielsweise sollten KI-Systeme bei medizinischen Behandlungen, Kreditanträgen oder Beschäftigungsentscheidungen dieselben Empfehlungen für Menschen mit ähnlichen Symptomen, finanziellen Verhältnissen oder beruflichen Qualifikationen geben. Jeder von uns trägt unbewusste Vorurteile mit sich, die unsere Entscheidungen und Handlungen beeinflussen. Diese Vorurteile können sich in den Daten widerspiegeln, die wir zur Schulung von KI-Systemen verwenden. Solche Verzerrungen können manchmal unbeabsichtigt auftreten. Es ist oft schwierig, bewusst zu erkennen, wann man Vorurteile in Daten einführt. -**„Unfairness“** umfasst negative Auswirkungen oder „Schäden“ für eine Gruppe von Menschen, wie etwa solche, die durch Rasse, Geschlecht, Alter oder Behinderungsstatus definiert sind. Die Hauptschäden im Zusammenhang mit Fairness können wie folgt klassifiziert werden: +**„Unfairness“** umfasst negative Auswirkungen oder „Schäden“ für eine Gruppe von Menschen, z. B. definiert durch Ethnie, Geschlecht, Alter oder Behinderungsstatus. Die Hauptarten von fairnessbezogenen Schäden lassen sich wie folgt klassifizieren: -- **Zuweisung**, wenn beispielsweise ein Geschlecht oder eine Ethnie gegenüber einer anderen bevorzugt wird. -- **Qualität des Dienstes**. Wenn die Daten für ein spezifisches Szenario trainiert werden, die Realität jedoch viel komplexer ist, führt dies zu einem schlecht funktionierenden Dienst. Zum Beispiel ein Seifenspender, der scheinbar keine Menschen mit dunkler Haut erkennen konnte. [Referenz](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **Herabsetzung**. Unfaire Kritik oder Etikettierung von etwas oder jemandem. Ein Beispiel ist eine Bildkennzeichnungstechnologie, die Bilder von dunkelhäutigen Menschen fälschlicherweise als Gorillas bezeichnete. -- **Über- oder Unterrepräsentation**. Die Idee, dass eine bestimmte Gruppe in einem bestimmten Beruf nicht gesehen wird, und jede Funktion oder Dienstleistung, die dies weiter fördert, trägt zu Schaden bei. -- **Stereotypisierung**. Die Zuordnung vorgefertigter Attribute zu einer bestimmten Gruppe. Zum Beispiel kann ein Sprachübersetzungssystem zwischen Englisch und Türkisch Ungenauigkeiten aufweisen, die auf stereotypische Geschlechtsassoziationen zurückzuführen sind. +- **Zuweisung**: Wenn z. B. ein Geschlecht oder eine Ethnie gegenüber einer anderen bevorzugt wird. +- **Qualität des Dienstes**: Wenn die Daten für ein spezifisches Szenario trainiert wurden, die Realität jedoch viel komplexer ist, führt dies zu einer schlechten Leistung des Dienstes. Ein Beispiel ist ein Seifenspender, der Menschen mit dunkler Hautfarbe nicht erkennen konnte. [Referenz](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Herabwürdigung**: Unfaire Kritik oder Etikettierung von etwas oder jemandem. Ein Beispiel ist eine Bildkennzeichnungstechnologie, die dunkelhäutige Menschen fälschlicherweise als Gorillas bezeichnete. +- **Über- oder Unterrepräsentation**: Die Idee, dass eine bestimmte Gruppe in einem bestimmten Beruf nicht sichtbar ist, und jede Funktion, die dies weiter fördert, trägt zu Schaden bei. +- **Stereotypisierung**: Die Zuordnung vorgefertigter Eigenschaften zu einer bestimmten Gruppe. Ein Beispiel ist ein Sprachübersetzungssystem zwischen Englisch und Türkisch, das aufgrund von stereotypischen Geschlechterassoziationen Ungenauigkeiten aufweist. -![Übersetzung ins Türkische](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.de.png) +![Übersetzung ins Türkische](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > Übersetzung ins Türkische -![Übersetzung zurück ins Englische](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.de.png) +![Übersetzung zurück ins Englische](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) > Übersetzung zurück ins Englische -Beim Entwerfen und Testen von KI-Systemen müssen wir sicherstellen, dass KI fair ist und nicht so programmiert wird, dass sie voreingenommene oder diskriminierende Entscheidungen trifft, die auch Menschen untersagt sind. Fairness in KI und Machine Learning zu garantieren bleibt eine komplexe soziotechnische Herausforderung. +Beim Entwerfen und Testen von KI-Systemen müssen wir sicherstellen, dass KI fair ist und nicht so programmiert wird, dass sie voreingenommene oder diskriminierende Entscheidungen trifft, die auch Menschen nicht treffen dürfen. Fairness in KI und Machine Learning zu gewährleisten, bleibt eine komplexe soziotechnische Herausforderung. ### Zuverlässigkeit und Sicherheit -Um Vertrauen aufzubauen, müssen KI-Systeme zuverlässig, sicher und konsistent unter normalen und unerwarteten Bedingungen sein. Es ist wichtig zu wissen, wie sich KI-Systeme in einer Vielzahl von Situationen verhalten, insbesondere bei Ausreißern. Beim Aufbau von KI-Lösungen muss ein erheblicher Fokus darauf gelegt werden, wie eine breite Palette von Umständen gehandhabt werden kann, denen die KI-Lösungen begegnen könnten. Zum Beispiel muss ein selbstfahrendes Auto die Sicherheit der Menschen als oberste Priorität betrachten. Folglich muss die KI, die das Auto antreibt, alle möglichen Szenarien berücksichtigen, denen das Auto begegnen könnte, wie Nacht, Gewitter oder Schneestürme, Kinder, die über die Straße laufen, Haustiere, Straßenbauarbeiten usw. Wie gut ein KI-System eine Vielzahl von Bedingungen zuverlässig und sicher handhaben kann, spiegelt das Maß an Antizipation wider, das der Datenwissenschaftler oder KI-Entwickler während des Designs oder Tests des Systems berücksichtigt hat. +Um Vertrauen aufzubauen, müssen KI-Systeme zuverlässig, sicher und konsistent unter normalen und unerwarteten Bedingungen sein. Es ist wichtig zu wissen, wie sich KI-Systeme in verschiedenen Situationen verhalten, insbesondere bei Ausreißern. Beim Aufbau von KI-Lösungen sollte ein erheblicher Fokus darauf gelegt werden, wie eine Vielzahl von Umständen gehandhabt werden kann, denen die KI-Lösungen begegnen könnten. Zum Beispiel muss ein selbstfahrendes Auto die Sicherheit der Menschen als oberste Priorität betrachten. Daher muss die KI, die das Auto antreibt, alle möglichen Szenarien berücksichtigen, denen das Auto begegnen könnte, wie z. B. Nacht, Gewitter, Schneestürme, Kinder, die über die Straße rennen, Haustiere, Straßenbauarbeiten usw. Wie gut ein KI-System eine Vielzahl von Bedingungen zuverlässig und sicher bewältigen kann, spiegelt das Maß an Voraussicht wider, das der Datenwissenschaftler oder KI-Entwickler während des Designs oder Tests des Systems berücksichtigt hat. > [🎥 Klicken Sie hier für ein Video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) ### Inklusivität -KI-Systeme sollten so gestaltet sein, dass sie alle einbeziehen und stärken. Beim Entwerfen und Implementieren von KI-Systemen identifizieren und adressieren Datenwissenschaftler und KI-Entwickler potenzielle Barrieren im System, die Menschen unbeabsichtigt ausschließen könnten. Zum Beispiel gibt es weltweit 1 Milliarde Menschen mit Behinderungen. Mit den Fortschritten in der KI können sie in ihrem täglichen Leben leichter auf eine Vielzahl von Informationen und Möglichkeiten zugreifen. Durch die Beseitigung von Barrieren entstehen Chancen, KI-Produkte mit besseren Erfahrungen zu entwickeln, die allen zugutekommen. +KI-Systeme sollten so gestaltet sein, dass sie alle Menschen einbeziehen und befähigen. Beim Entwerfen und Implementieren von KI-Systemen identifizieren und adressieren Datenwissenschaftler und KI-Entwickler potenzielle Barrieren im System, die Menschen unbeabsichtigt ausschließen könnten. Zum Beispiel gibt es weltweit 1 Milliarde Menschen mit Behinderungen. Mit den Fortschritten in der KI können sie leichter auf eine Vielzahl von Informationen und Möglichkeiten in ihrem täglichen Leben zugreifen. Durch die Beseitigung von Barrieren entstehen Chancen, KI-Produkte mit besseren Erfahrungen zu entwickeln, die allen zugutekommen. -> [🎥 Klicken Sie hier für ein Video: Inklusivität in KI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) +> [🎥 Klicken Sie hier für ein Video: Inklusivität in der KI](https://www.microsoft.com/videoplayer/embed/RE4vl9v) ### Sicherheit und Datenschutz -KI-Systeme sollten sicher sein und die Privatsphäre der Menschen respektieren. Menschen haben weniger Vertrauen in Systeme, die ihre Privatsphäre, Informationen oder ihr Leben gefährden. Beim Training von Machine-Learning-Modellen verlassen wir uns auf Daten, um die besten Ergebnisse zu erzielen. Dabei muss die Herkunft und Integrität der Daten berücksichtigt werden. Zum Beispiel: Wurden die Daten von Nutzern eingereicht oder waren sie öffentlich verfügbar? Während der Arbeit mit den Daten ist es entscheidend, KI-Systeme zu entwickeln, die vertrauliche Informationen schützen und Angriffen widerstehen können. Da KI immer häufiger eingesetzt wird, wird der Schutz der Privatsphäre und die Sicherung wichtiger persönlicher und geschäftlicher Informationen immer wichtiger und komplexer. Datenschutz- und Datensicherheitsfragen erfordern besonders große Aufmerksamkeit bei KI, da der Zugang zu Daten entscheidend ist, damit KI-Systeme genaue und fundierte Vorhersagen und Entscheidungen über Menschen treffen können. +KI-Systeme sollten sicher sein und die Privatsphäre der Menschen respektieren. Menschen vertrauen Systemen weniger, die ihre Privatsphäre, Informationen oder ihr Leben gefährden. Beim Training von Machine-Learning-Modellen verlassen wir uns auf Daten, um die besten Ergebnisse zu erzielen. Dabei muss die Herkunft und Integrität der Daten berücksichtigt werden. Zum Beispiel: Wurden die Daten von Nutzern bereitgestellt oder waren sie öffentlich zugänglich? Während der Arbeit mit den Daten ist es entscheidend, KI-Systeme zu entwickeln, die vertrauliche Informationen schützen und Angriffen widerstehen können. Da KI immer weiter verbreitet wird, wird der Schutz der Privatsphäre und die Sicherung wichtiger persönlicher und geschäftlicher Informationen immer kritischer und komplexer. Datenschutz- und Datensicherheitsfragen erfordern besondere Aufmerksamkeit, da der Zugang zu Daten für KI-Systeme essenziell ist, um genaue und fundierte Vorhersagen und Entscheidungen über Menschen zu treffen. -> [🎥 Klicken Sie hier für ein Video: Sicherheit in KI](https://www.microsoft.com/videoplayer/embed/RE4voJF) +> [🎥 Klicken Sie hier für ein Video: Sicherheit in der KI](https://www.microsoft.com/videoplayer/embed/RE4voJF) - Als Branche haben wir bedeutende Fortschritte im Bereich Datenschutz und Sicherheit gemacht, die maßgeblich durch Vorschriften wie die DSGVO (Datenschutz-Grundverordnung) vorangetrieben wurden. - Dennoch müssen wir bei KI-Systemen die Spannung zwischen dem Bedarf an mehr persönlichen Daten, um Systeme persönlicher und effektiver zu machen, und dem Datenschutz anerkennen. -- Ähnlich wie bei der Geburt vernetzter Computer mit dem Internet sehen wir auch einen enormen Anstieg der Sicherheitsprobleme im Zusammenhang mit KI. -- Gleichzeitig wird KI genutzt, um die Sicherheit zu verbessern. Ein Beispiel: Die meisten modernen Antiviren-Scanner werden heute von KI-Heuristiken betrieben. +- Genau wie bei der Einführung vernetzter Computer mit dem Internet sehen wir auch einen starken Anstieg der Sicherheitsprobleme im Zusammenhang mit KI. +- Gleichzeitig wird KI genutzt, um die Sicherheit zu verbessern. Zum Beispiel werden die meisten modernen Antiviren-Scanner heute von KI-Heuristiken angetrieben. - Wir müssen sicherstellen, dass unsere Datenwissenschaftsprozesse harmonisch mit den neuesten Datenschutz- und Sicherheitspraktiken zusammenarbeiten. ### Transparenz -KI-Systeme sollten verständlich sein. Ein wesentlicher Bestandteil der Transparenz ist die Erklärung des Verhaltens von KI-Systemen und ihrer Komponenten. Die Verbesserung des Verständnisses von KI-Systemen erfordert, dass Interessengruppen verstehen, wie und warum sie funktionieren, damit sie potenzielle Leistungsprobleme, Sicherheits- und Datenschutzbedenken, Vorurteile, ausschließende Praktiken oder unbeabsichtigte Ergebnisse identifizieren können. Wir glauben auch, dass diejenigen, die KI-Systeme nutzen, ehrlich und offen darüber sein sollten, wann, warum und wie sie sich entscheiden, diese einzusetzen. Ebenso über die Grenzen der Systeme, die sie verwenden. Zum Beispiel: Wenn eine Bank ein KI-System zur Unterstützung ihrer Kreditentscheidungen einsetzt, ist es wichtig, die Ergebnisse zu prüfen und zu verstehen, welche Daten die Empfehlungen des Systems beeinflussen. Regierungen beginnen, KI branchenübergreifend zu regulieren, daher müssen Datenwissenschaftler und Organisationen erklären, ob ein KI-System die regulatorischen Anforderungen erfüllt, insbesondere wenn es zu einem unerwünschten Ergebnis kommt. +KI-Systeme sollten verständlich sein. Ein wesentlicher Bestandteil der Transparenz ist die Erklärung des Verhaltens von KI-Systemen und ihrer Komponenten. Die Verbesserung des Verständnisses von KI-Systemen erfordert, dass Interessengruppen verstehen, wie und warum sie funktionieren, damit sie potenzielle Leistungsprobleme, Sicherheits- und Datenschutzbedenken, Vorurteile, ausschließende Praktiken oder unbeabsichtigte Ergebnisse identifizieren können. Wir glauben auch, dass diejenigen, die KI-Systeme nutzen, ehrlich und offen darüber sein sollten, wann, warum und wie sie diese einsetzen. Ebenso über die Grenzen der Systeme, die sie verwenden. Zum Beispiel: Wenn eine Bank ein KI-System zur Unterstützung ihrer Kreditentscheidungen einsetzt, ist es wichtig, die Ergebnisse zu überprüfen und zu verstehen, welche Daten die Empfehlungen des Systems beeinflussen. Regierungen beginnen, KI branchenübergreifend zu regulieren, daher müssen Datenwissenschaftler und Organisationen erklären, ob ein KI-System die regulatorischen Anforderungen erfüllt, insbesondere wenn es zu einem unerwünschten Ergebnis kommt. -> [🎥 Klicken Sie hier für ein Video: Transparenz in KI](https://www.microsoft.com/videoplayer/embed/RE4voJF) +> [🎥 Klicken Sie hier für ein Video: Transparenz in der KI](https://www.microsoft.com/videoplayer/embed/RE4voJF) -- Da KI-Systeme so komplex sind, ist es schwierig zu verstehen, wie sie funktionieren und die Ergebnisse zu interpretieren. -- Dieses mangelnde Verständnis beeinflusst die Art und Weise, wie diese Systeme verwaltet, operationalisiert und dokumentiert werden. -- Noch wichtiger ist, dass dieses mangelnde Verständnis die Entscheidungen beeinflusst, die auf Grundlage der von diesen Systemen erzeugten Ergebnisse getroffen werden. +- Da KI-Systeme so komplex sind, ist es schwierig zu verstehen, wie sie funktionieren und ihre Ergebnisse zu interpretieren. +- Dieses mangelnde Verständnis beeinflusst, wie diese Systeme verwaltet, operationalisiert und dokumentiert werden. +- Noch wichtiger ist, dass dieses mangelnde Verständnis die Entscheidungen beeinflusst, die auf Basis der Ergebnisse dieser Systeme getroffen werden. ### Verantwortlichkeit -Die Menschen, die KI-Systeme entwerfen und einsetzen, müssen für die Funktionsweise ihrer Systeme verantwortlich sein. Die Notwendigkeit von Verantwortlichkeit ist besonders wichtig bei sensiblen Technologien wie Gesichtserkennung. In letzter Zeit gibt es eine wachsende Nachfrage nach Gesichtserkennungstechnologie, insbesondere von Strafverfolgungsbehörden, die das Potenzial der Technologie in Anwendungen wie der Suche nach vermissten Kindern sehen. Diese Technologien könnten jedoch von einer Regierung genutzt werden, um die Grundfreiheiten ihrer Bürger zu gefährden, indem sie beispielsweise eine kontinuierliche Überwachung bestimmter Personen ermöglichen. Daher müssen Datenwissenschaftler und Organisationen verantwortlich dafür sein, wie ihr KI-System Einzelpersonen oder die Gesellschaft beeinflusst. +Die Menschen, die KI-Systeme entwerfen und einsetzen, müssen für deren Betrieb verantwortlich sein. Die Notwendigkeit der Verantwortlichkeit ist besonders wichtig bei sensiblen Technologien wie Gesichtserkennung. In letzter Zeit gibt es eine wachsende Nachfrage nach Gesichtserkennungstechnologie, insbesondere von Strafverfolgungsbehörden, die das Potenzial der Technologie beispielsweise bei der Suche nach vermissten Kindern sehen. Diese Technologien könnten jedoch von einer Regierung genutzt werden, um die Grundfreiheiten ihrer Bürger zu gefährden, indem sie beispielsweise eine kontinuierliche Überwachung bestimmter Personen ermöglichen. Daher müssen Datenwissenschaftler und Organisationen verantwortlich dafür sein, wie ihr KI-System Einzelpersonen oder die Gesellschaft beeinflusst. -[![Führender KI-Forscher warnt vor Massenüberwachung durch Gesichtserkennung](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.de.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsofts Ansatz für verantwortungsbewusste KI") +[![Führender KI-Forscher warnt vor Massenüberwachung durch Gesichtserkennung](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsofts Ansatz für verantwortungsbewusste KI") > 🎥 Klicken Sie auf das Bild oben für ein Video: Warnungen vor Massenüberwachung durch Gesichtserkennung -Letztendlich ist eine der größten Fragen für unsere Generation, als die erste Generation, die KI in die Gesellschaft bringt, wie wir sicherstellen können, dass Computer weiterhin den Menschen gegenüber verantwortlich bleiben und wie wir sicherstellen können, dass die Menschen, die Computer entwerfen, allen anderen gegenüber verantwortlich bleiben. +Letztendlich ist eine der größten Fragen für unsere Generation, als die erste Generation, die KI in die Gesellschaft bringt, wie wir sicherstellen können, dass Computer den Menschen gegenüber rechenschaftspflichtig bleiben und dass die Menschen, die Computer entwerfen, allen anderen gegenüber rechenschaftspflichtig bleiben. ## Auswirkungen bewerten -Bevor ein Machine-Learning-Modell trainiert wird, ist es wichtig, eine Auswirkungsbewertung durchzuführen, um den Zweck des KI-Systems zu verstehen; wie es verwendet werden soll; wo es eingesetzt wird; und wer mit dem System interagieren wird. Diese Bewertungen sind hilfreich für Prüfer oder Tester, die das System evaluieren, um zu wissen, welche Faktoren bei der Identifizierung potenzieller Risiken und erwarteter Konsequenzen berücksichtigt werden müssen. +Bevor ein Machine-Learning-Modell trainiert wird, ist es wichtig, eine Auswirkungsbewertung durchzuführen, um den Zweck des KI-Systems zu verstehen: Was ist der beabsichtigte Nutzen? Wo wird es eingesetzt? Und wer wird mit dem System interagieren? Diese Bewertungen helfen Prüfern oder Testern, die das System bewerten, zu wissen, welche Faktoren bei der Identifizierung potenzieller Risiken und erwarteter Konsequenzen zu berücksichtigen sind. -Die folgenden Bereiche sollten bei der Durchführung einer Auswirkungsbewertung berücksichtigt werden: +Die folgenden Bereiche stehen bei einer Auswirkungsbewertung im Fokus: -* **Negative Auswirkungen auf Einzelpersonen**. Es ist wichtig, sich über Einschränkungen oder Anforderungen, nicht unterstützte Verwendungen oder bekannte Einschränkungen, die die Leistung des Systems beeinträchtigen könnten, bewusst zu sein, um sicherzustellen, dass das System nicht auf eine Weise verwendet wird, die Einzelpersonen schaden könnte. -* **Datenanforderungen**. Ein Verständnis dafür, wie und wo das System Daten verwendet, ermöglicht es Prüfern, mögliche Datenanforderungen zu untersuchen, die berücksichtigt werden müssen (z. B. DSGVO- oder HIPPA-Datenvorschriften). Darüber hinaus sollte geprüft werden, ob die Quelle oder Menge der Daten für das Training ausreichend ist. -* **Zusammenfassung der Auswirkungen**. Eine Liste potenzieller Schäden erstellen, die durch die Nutzung des Systems entstehen könnten. Während des gesamten ML-Lebenszyklus überprüfen, ob die identifizierten Probleme gemindert oder adressiert wurden. -* **Anwendbare Ziele** für jedes der sechs Kernprinzipien. Bewerten, ob die Ziele jedes Prinzips erreicht wurden und ob es Lücken gibt. +* **Negative Auswirkungen auf Einzelpersonen**: Es ist wichtig, sich über Einschränkungen, Anforderungen, nicht unterstützte Verwendungen oder bekannte Begrenzungen bewusst zu sein, die die Leistung des Systems beeinträchtigen könnten, um sicherzustellen, dass das System nicht auf eine Weise verwendet wird, die Einzelpersonen schaden könnte. +* **Datenanforderungen**: Ein Verständnis dafür zu gewinnen, wie und wo das System Daten verwendet, ermöglicht es Prüfern, Datenanforderungen zu identifizieren, die berücksichtigt werden müssen (z. B. DSGVO- oder HIPAA-Datenvorschriften). Außerdem sollte geprüft werden, ob die Quelle oder Menge der Daten für das Training ausreicht. +* **Zusammenfassung der Auswirkungen**: Eine Liste potenzieller Schäden erstellen, die durch die Nutzung des Systems entstehen könnten. Während des gesamten ML-Lebenszyklus überprüfen, ob die identifizierten Probleme behoben oder adressiert wurden. +* **Ziele für die sechs Kernprinzipien**: Bewerten, ob die Ziele jedes Prinzips erreicht wurden und ob es Lücken gibt. ## Debugging mit verantwortungsbewusster KI -Ähnlich wie beim Debugging einer Softwareanwendung ist das Debugging eines KI-Systems ein notwendiger Prozess zur Identifizierung und Behebung von Problemen im System. Es gibt viele Faktoren, die dazu führen können, dass ein Modell nicht wie erwartet oder verantwortungsvoll funktioniert. Die meisten traditionellen Leistungsmetriken für Modelle sind quantitative Zusammenfassungen der Leistung eines Modells, die nicht ausreichen, um zu analysieren, wie ein Modell gegen die Prinzipien der verantwortungsbewussten KI verstößt. Darüber hinaus ist ein Machine-Learning-Modell eine Blackbox, die es schwierig macht, zu verstehen, was seine Ergebnisse antreibt oder eine Erklärung zu liefern, wenn es einen Fehler macht. Später in diesem Kurs werden wir lernen, wie man das Responsible AI-Dashboard verwendet, um KI-Systeme zu debuggen. Das Dashboard bietet ein ganzheitliches Werkzeug für Datenwissenschaftler und KI-Entwickler, um: +Ähnlich wie beim Debugging einer Softwareanwendung ist das Debugging eines KI-Systems ein notwendiger Prozess, um Probleme im System zu identifizieren und zu lösen. Es gibt viele Faktoren, die dazu führen können, dass ein Modell nicht wie erwartet oder verantwortungsvoll funktioniert. Die meisten traditionellen Leistungsmetriken für Modelle sind quantitative Zusammenfassungen der Modellleistung, die nicht ausreichen, um zu analysieren, wie ein Modell gegen die Prinzipien der verantwortungsbewussten KI verstößt. Darüber hinaus ist ein Machine-Learning-Modell eine Blackbox, die es schwierig macht, die Gründe für seine Ergebnisse zu verstehen oder Erklärungen zu liefern, wenn es Fehler macht. Später in diesem Kurs lernen wir, wie man das Responsible AI Dashboard verwendet, um KI-Systeme zu debuggen. Das Dashboard bietet ein umfassendes Werkzeug für Datenwissenschaftler und KI-Entwickler, um: -* **Fehleranalyse**. Um die Fehlerverteilung des Modells zu identifizieren, die die Fairness oder Zuverlässigkeit des Systems beeinflussen kann. -* **Modellübersicht**. Um herauszufinden, wo es Leistungsunterschiede des Modells über verschiedene Datenkohorten gibt. -* **Datenanalyse**. Um die Datenverteilung zu verstehen und mögliche Vorurteile in den Daten zu identifizieren, die zu Fairness-, Inklusivitäts- und Zuverlässigkeitsproblemen führen könnten. -* **Modellinterpretierbarkeit**. Um zu verstehen, was die Vorhersagen des Modells beeinflusst. Dies hilft, das Verhalten des Modells zu erklären, was für Transparenz und Verantwortlichkeit wichtig ist. +* **Fehleranalyse**: Die Fehlerverteilung des Modells zu identifizieren, die die Fairness oder Zuverlässigkeit des Systems beeinträchtigen könnte. +* **Modellübersicht**: Zu entdecken, wo es Leistungsunterschiede des Modells über verschiedene Datenkohorten hinweg gibt. +* **Datenanalyse**: Die Datenverteilung zu verstehen und potenzielle Verzerrungen in den Daten zu identifizieren, die zu Fairness-, Inklusivitäts- und Zuverlässigkeitsproblemen führen könnten. +* **Modellinterpretierbarkeit**: Zu verstehen, was die Vorhersagen des Modells beeinflusst. Dies hilft, das Verhalten des Modells zu erklären, was für Transparenz und Verantwortlichkeit wichtig ist. ## 🚀 Herausforderung -Um Schäden von Anfang an zu verhindern, sollten wir: +Um Schäden von vornherein zu vermeiden, sollten wir: - eine Vielfalt an Hintergründen und Perspektiven unter den Menschen haben, die an den Systemen arbeiten - in Datensätze investieren, die die Vielfalt unserer Gesellschaft widerspiegeln - bessere Methoden im gesamten Machine-Learning-Lebenszyklus entwickeln, um verantwortungsbewusste KI zu erkennen und zu korrigieren, wenn sie auftritt -Denken Sie über reale Szenarien nach, in denen die Unzuverlässigkeit eines Modells beim Modellaufbau und -einsatz offensichtlich ist. Was sollten wir noch berücksichtigen? +Denken Sie an reale Szenarien, in denen die Unzuverlässigkeit eines Modells beim Erstellen und Verwenden offensichtlich wird. Was sollten wir noch berücksichtigen? -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) -## Überprüfung & Selbststudium -In dieser Lektion haben Sie einige Grundlagen der Konzepte von Fairness und Unfairness im maschinellen Lernen kennengelernt. +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) -Sehen Sie sich diesen Workshop an, um tiefer in die Themen einzutauchen: +## Rückblick & Selbststudium -- Auf der Suche nach verantwortungsvoller KI: Prinzipien in die Praxis umsetzen von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma +In dieser Lektion haben Sie einige Grundlagen zu den Konzepten von Fairness und Unfairness im Machine Learning gelernt. +Schauen Sie sich diesen Workshop an, um tiefer in die Themen einzutauchen: -[![Responsible AI Toolbox: Ein Open-Source-Framework für verantwortungsvolle KI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Ein Open-Source-Framework für verantwortungsvolle KI") +- Auf der Suche nach verantwortungsvoller KI: Prinzipien in die Praxis umsetzen von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma +[![Responsible AI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI") -> 🎥 Klicken Sie auf das Bild oben für ein Video: RAI Toolbox: Ein Open-Source-Framework für verantwortungsvolle KI von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma +> 🎥 Klicken Sie auf das Bild oben für ein Video: RAI Toolbox: Ein Open-Source-Framework für den Aufbau verantwortungsvoller KI von Besmira Nushi, Mehrnoosh Sameki und Amit Sharma -Lesen Sie außerdem: +Lesen Sie außerdem: -- Microsofts RAI-Ressourcenzentrum: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- Microsofts RAI-Ressourcenzentrum: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- Microsofts FATE-Forschungsgruppe: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- Microsofts FATE-Forschungsgruppe: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -RAI Toolbox: +RAI Toolbox: -- [Responsible AI Toolbox GitHub Repository](https://github.com/microsoft/responsible-ai-toolbox) +- [Responsible AI Toolbox GitHub-Repository](https://github.com/microsoft/responsible-ai-toolbox) Lesen Sie über die Tools von Azure Machine Learning, um Fairness sicherzustellen: -- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) ## Aufgabe @@ -167,4 +167,4 @@ Lesen Sie über die Tools von Azure Machine Learning, um Fairness sicherzustelle --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/1-Introduction/4-techniques-of-ML/README.md b/translations/de/1-Introduction/4-techniques-of-ML/README.md index c8cffec4c..a6b8c2438 100644 --- a/translations/de/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/de/1-Introduction/4-techniques-of-ML/README.md @@ -1,20 +1,20 @@ # Techniken des maschinellen Lernens -Der Prozess des Erstellens, Nutzens und Wartens von Modellen des maschinellen Lernens (ML) und der Daten, die sie verwenden, unterscheidet sich stark von vielen anderen Entwicklungs-Workflows. In dieser Lektion werden wir den Prozess entmystifizieren und die wichtigsten Techniken skizzieren, die Sie kennen müssen. Sie werden: +Der Prozess des Erstellens, Nutzens und Wartens von Modellen des maschinellen Lernens sowie der Daten, die sie verwenden, unterscheidet sich stark von vielen anderen Entwicklungs-Workflows. In dieser Lektion werden wir den Prozess entmystifizieren und die wichtigsten Techniken skizzieren, die Sie kennen müssen. Sie werden: - Die grundlegenden Prozesse des maschinellen Lernens auf hoher Ebene verstehen. -- Grundlegende Konzepte wie "Modelle", "Vorhersagen" und "Trainingsdaten" erkunden. +- Grundkonzepte wie "Modelle", "Vorhersagen" und "Trainingsdaten" erkunden. -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) [![ML für Anfänger - Techniken des maschinellen Lernens](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML für Anfänger - Techniken des maschinellen Lernens") @@ -22,34 +22,34 @@ Der Prozess des Erstellens, Nutzens und Wartens von Modellen des maschinellen Le ## Einführung -Auf hoher Ebene besteht die Kunst, Prozesse des maschinellen Lernens zu erstellen, aus mehreren Schritten: +Auf hoher Ebene besteht die Kunst, Prozesse des maschinellen Lernens (ML) zu erstellen, aus mehreren Schritten: -1. **Die Frage festlegen**. Die meisten ML-Prozesse beginnen mit einer Frage, die nicht durch ein einfaches bedingtes Programm oder eine regelbasierte Engine beantwortet werden kann. Diese Fragen drehen sich oft um Vorhersagen, die auf einer Sammlung von Daten basieren. -2. **Daten sammeln und vorbereiten**. Um Ihre Frage beantworten zu können, benötigen Sie Daten. Die Qualität und manchmal auch die Menge Ihrer Daten bestimmen, wie gut Sie Ihre ursprüngliche Frage beantworten können. Die Visualisierung von Daten ist ein wichtiger Aspekt dieser Phase. Diese Phase umfasst auch das Aufteilen der Daten in eine Trainings- und Testgruppe, um ein Modell zu erstellen. -3. **Eine Trainingsmethode wählen**. Abhängig von Ihrer Frage und der Art Ihrer Daten müssen Sie entscheiden, wie Sie ein Modell trainieren möchten, um Ihre Daten bestmöglich zu reflektieren und genaue Vorhersagen zu treffen. Dieser Teil des ML-Prozesses erfordert spezifisches Fachwissen und oft eine beträchtliche Menge an Experimenten. -4. **Das Modell trainieren**. Mithilfe Ihrer Trainingsdaten verwenden Sie verschiedene Algorithmen, um ein Modell zu trainieren, das Muster in den Daten erkennt. Das Modell kann interne Gewichte nutzen, die angepasst werden können, um bestimmte Teile der Daten gegenüber anderen zu bevorzugen, um ein besseres Modell zu erstellen. -5. **Das Modell bewerten**. Sie verwenden bisher unbekannte Daten (Ihre Testdaten) aus Ihrem gesammelten Satz, um zu sehen, wie das Modell abschneidet. -6. **Parameteranpassung**. Basierend auf der Leistung Ihres Modells können Sie den Prozess mit unterschiedlichen Parametern oder Variablen, die das Verhalten der Algorithmen steuern, wiederholen. -7. **Vorhersagen**. Verwenden Sie neue Eingaben, um die Genauigkeit Ihres Modells zu testen. +1. **Formulieren Sie die Frage.** Die meisten ML-Prozesse beginnen mit einer Frage, die nicht durch ein einfaches bedingtes Programm oder eine regelbasierte Engine beantwortet werden kann. Diese Fragen drehen sich oft um Vorhersagen, die auf einer Sammlung von Daten basieren. +2. **Sammeln und vorbereiten von Daten.** Um Ihre Frage beantworten zu können, benötigen Sie Daten. Die Qualität und manchmal auch die Menge Ihrer Daten bestimmen, wie gut Sie Ihre ursprüngliche Frage beantworten können. Die Visualisierung von Daten ist ein wichtiger Aspekt dieser Phase. Diese Phase umfasst auch das Aufteilen der Daten in eine Trainings- und Testgruppe, um ein Modell zu erstellen. +3. **Wählen Sie eine Trainingsmethode.** Abhängig von Ihrer Frage und der Art Ihrer Daten müssen Sie entscheiden, wie Sie ein Modell trainieren möchten, um Ihre Daten bestmöglich zu repräsentieren und genaue Vorhersagen zu treffen. Dieser Teil des ML-Prozesses erfordert spezifisches Fachwissen und oft eine beträchtliche Menge an Experimenten. +4. **Trainieren Sie das Modell.** Mithilfe Ihrer Trainingsdaten verwenden Sie verschiedene Algorithmen, um ein Modell zu trainieren, das Muster in den Daten erkennt. Das Modell kann interne Gewichte nutzen, die angepasst werden können, um bestimmte Teile der Daten gegenüber anderen zu bevorzugen, um ein besseres Modell zu erstellen. +5. **Bewerten Sie das Modell.** Sie verwenden bisher unbekannte Daten (Ihre Testdaten) aus Ihrem gesammelten Satz, um zu sehen, wie das Modell abschneidet. +6. **Parameteranpassung.** Basierend auf der Leistung Ihres Modells können Sie den Prozess mit unterschiedlichen Parametern oder Variablen, die das Verhalten der Algorithmen steuern, wiederholen. +7. **Vorhersagen.** Verwenden Sie neue Eingaben, um die Genauigkeit Ihres Modells zu testen. ## Welche Frage soll gestellt werden? -Computer sind besonders gut darin, versteckte Muster in Daten zu entdecken. Diese Fähigkeit ist sehr hilfreich für Forscher, die Fragen zu einem bestimmten Bereich haben, die nicht leicht durch die Erstellung einer regelbasierten Engine beantwortet werden können. Bei einer versicherungsmathematischen Aufgabe könnte ein Datenwissenschaftler beispielsweise handgefertigte Regeln zur Sterblichkeit von Rauchern im Vergleich zu Nichtrauchern erstellen. +Computer sind besonders gut darin, versteckte Muster in Daten zu entdecken. Diese Fähigkeit ist sehr hilfreich für Forscher, die Fragen zu einem bestimmten Bereich haben, die nicht leicht durch die Erstellung einer bedingungsbasierten Regel-Engine beantwortet werden können. Bei einer versicherungsmathematischen Aufgabe könnte ein Datenwissenschaftler beispielsweise handgefertigte Regeln zur Sterblichkeit von Rauchern im Vergleich zu Nichtrauchern erstellen. -Wenn jedoch viele andere Variablen in die Gleichung einbezogen werden, könnte sich ein ML-Modell als effizienter erweisen, um zukünftige Sterblichkeitsraten basierend auf vergangenen Gesundheitsdaten vorherzusagen. Ein fröhlicheres Beispiel könnte die Wettervorhersage für den Monat April an einem bestimmten Ort sein, basierend auf Daten wie Breitengrad, Längengrad, Klimawandel, Nähe zum Ozean, Jetstream-Mustern und mehr. +Wenn jedoch viele andere Variablen in die Gleichung einfließen, könnte sich ein ML-Modell als effizienter erweisen, um zukünftige Sterblichkeitsraten basierend auf vergangenen Gesundheitsdaten vorherzusagen. Ein fröhlicheres Beispiel könnte die Wettervorhersage für den Monat April an einem bestimmten Ort sein, basierend auf Daten wie Breitengrad, Längengrad, Klimawandel, Nähe zum Ozean, Jetstream-Mustern und mehr. ✅ Diese [Präsentation](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) zu Wettermodellen bietet eine historische Perspektive zur Nutzung von ML in der Wetteranalyse. ## Aufgaben vor dem Modellaufbau -Bevor Sie mit dem Aufbau Ihres Modells beginnen, gibt es mehrere Aufgaben, die Sie erledigen müssen. Um Ihre Frage zu testen und eine Hypothese basierend auf den Vorhersagen eines Modells zu bilden, müssen Sie mehrere Elemente identifizieren und konfigurieren. +Bevor Sie mit dem Aufbau Ihres Modells beginnen, gibt es mehrere Aufgaben, die Sie erledigen müssen. Um Ihre Frage zu testen und eine Hypothese basierend auf den Vorhersagen eines Modells zu formulieren, müssen Sie mehrere Elemente identifizieren und konfigurieren. ### Daten Um Ihre Frage mit einer gewissen Sicherheit beantworten zu können, benötigen Sie eine ausreichende Menge an Daten des richtigen Typs. Es gibt zwei Dinge, die Sie an diesem Punkt tun müssen: -- **Daten sammeln**. Denken Sie an die vorherige Lektion zur Fairness in der Datenanalyse und sammeln Sie Ihre Daten sorgfältig. Achten Sie auf die Quellen dieser Daten, mögliche inhärente Verzerrungen und dokumentieren Sie deren Herkunft. -- **Daten vorbereiten**. Es gibt mehrere Schritte im Datenvorbereitungsprozess. Sie müssen möglicherweise Daten zusammenführen und normalisieren, wenn sie aus verschiedenen Quellen stammen. Sie können die Qualität und Quantität der Daten durch verschiedene Methoden verbessern, wie z. B. das Konvertieren von Zeichenfolgen in Zahlen (wie wir es in [Clustering](../../5-Clustering/1-Visualize/README.md) tun). Sie könnten auch neue Daten basierend auf den ursprünglichen Daten generieren (wie wir es in [Klassifikation](../../4-Classification/1-Introduction/README.md) tun). Sie können die Daten bereinigen und bearbeiten (wie wir es vor der [Web-App](../../3-Web-App/README.md)-Lektion tun). Schließlich müssen Sie die Daten möglicherweise auch zufällig anordnen und mischen, je nach Ihren Trainingstechniken. +- **Daten sammeln.** Denken Sie an die vorherige Lektion zur Fairness in der Datenanalyse und sammeln Sie Ihre Daten sorgfältig. Achten Sie auf die Quellen dieser Daten, mögliche inhärente Verzerrungen und dokumentieren Sie deren Herkunft. +- **Daten vorbereiten.** Es gibt mehrere Schritte im Datenvorbereitungsprozess. Sie müssen möglicherweise Daten zusammenstellen und normalisieren, wenn sie aus verschiedenen Quellen stammen. Sie können die Qualität und Quantität der Daten durch verschiedene Methoden verbessern, wie z. B. das Konvertieren von Zeichenfolgen in Zahlen (wie wir es in [Clustering](../../5-Clustering/1-Visualize/README.md) tun). Sie könnten auch neue Daten basierend auf den ursprünglichen generieren (wie wir es in [Klassifikation](../../4-Classification/1-Introduction/README.md) tun). Sie können die Daten bereinigen und bearbeiten (wie wir es vor der [Web-App](../../3-Web-App/README.md)-Lektion tun werden). Schließlich müssen Sie die Daten möglicherweise auch zufällig anordnen und mischen, je nach Ihren Trainingstechniken. ✅ Nachdem Sie Ihre Daten gesammelt und verarbeitet haben, nehmen Sie sich einen Moment Zeit, um zu prüfen, ob deren Struktur es Ihnen ermöglicht, Ihre beabsichtigte Frage zu beantworten. Es könnte sein, dass die Daten für Ihre Aufgabe nicht gut geeignet sind, wie wir in unseren [Clustering](../../5-Clustering/1-Visualize/README.md)-Lektionen herausfinden! @@ -65,27 +65,27 @@ Ein Ziel ist das, was Sie vorhersagen möchten. Das Ziel, in der Regel als `y` i ### Visualisieren Sie Ihre Daten -Ein wichtiger Aspekt im Werkzeugkasten eines Datenwissenschaftlers ist die Fähigkeit, Daten mit mehreren hervorragenden Bibliotheken wie Seaborn oder MatPlotLib zu visualisieren. Die visuelle Darstellung Ihrer Daten könnte es Ihnen ermöglichen, versteckte Korrelationen zu entdecken, die Sie nutzen können. Ihre Visualisierungen könnten Ihnen auch helfen, Verzerrungen oder unausgewogene Daten aufzudecken (wie wir in [Klassifikation](../../4-Classification/2-Classifiers-1/README.md) herausfinden). +Ein wichtiger Aspekt im Werkzeugkasten eines Datenwissenschaftlers ist die Fähigkeit, Daten mithilfe mehrerer hervorragender Bibliotheken wie Seaborn oder MatPlotLib zu visualisieren. Die visuelle Darstellung Ihrer Daten könnte es Ihnen ermöglichen, versteckte Korrelationen zu entdecken, die Sie nutzen können. Ihre Visualisierungen könnten Ihnen auch helfen, Verzerrungen oder unausgewogene Daten aufzudecken (wie wir in [Klassifikation](../../4-Classification/2-Classifiers-1/README.md) herausfinden). ### Teilen Sie Ihren Datensatz -Vor dem Training müssen Sie Ihren Datensatz in zwei oder mehr ungleiche Teile aufteilen, die die Daten dennoch gut repräsentieren. +Vor dem Training müssen Sie Ihren Datensatz in zwei oder mehr Teile ungleicher Größe aufteilen, die die Daten dennoch gut repräsentieren. -- **Training**. Dieser Teil des Datensatzes wird an Ihr Modell angepasst, um es zu trainieren. Dieser Satz macht den Großteil des ursprünglichen Datensatzes aus. -- **Testen**. Ein Testdatensatz ist eine unabhängige Gruppe von Daten, die oft aus den ursprünglichen Daten entnommen wird und die Sie verwenden, um die Leistung des erstellten Modells zu bestätigen. -- **Validieren**. Ein Validierungssatz ist eine kleinere unabhängige Gruppe von Beispielen, die Sie verwenden, um die Hyperparameter oder die Architektur des Modells zu optimieren, um das Modell zu verbessern. Abhängig von der Größe Ihrer Daten und der Frage, die Sie stellen, müssen Sie diesen dritten Satz möglicherweise nicht erstellen (wie wir in [Zeitreihenprognosen](../../7-TimeSeries/1-Introduction/README.md) feststellen). +- **Training.** Dieser Teil des Datensatzes wird an Ihr Modell angepasst, um es zu trainieren. Dieser Satz macht den Großteil des ursprünglichen Datensatzes aus. +- **Testen.** Ein Testdatensatz ist eine unabhängige Gruppe von Daten, die oft aus den ursprünglichen Daten entnommen wird und mit der Sie die Leistung des erstellten Modells überprüfen. +- **Validieren.** Ein Validierungssatz ist eine kleinere unabhängige Gruppe von Beispielen, die Sie verwenden, um die Hyperparameter oder die Architektur des Modells zu optimieren, um das Modell zu verbessern. Abhängig von der Größe Ihrer Daten und der Frage, die Sie stellen, müssen Sie diesen dritten Satz möglicherweise nicht erstellen (wie wir in [Zeitreihenprognosen](../../7-TimeSeries/1-Introduction/README.md) feststellen). ## Ein Modell erstellen -Mithilfe Ihrer Trainingsdaten besteht Ihr Ziel darin, ein Modell oder eine statistische Darstellung Ihrer Daten zu erstellen, indem Sie verschiedene Algorithmen verwenden, um es zu **trainieren**. Das Training eines Modells setzt es Daten aus und ermöglicht es ihm, Annahmen über wahrgenommene Muster zu treffen, diese zu validieren und anzunehmen oder abzulehnen. +Mithilfe Ihrer Trainingsdaten ist es Ihr Ziel, ein Modell oder eine statistische Darstellung Ihrer Daten zu erstellen, indem Sie verschiedene Algorithmen verwenden, um es zu **trainieren**. Das Training eines Modells setzt es Daten aus und ermöglicht es ihm, Annahmen über wahrgenommene Muster zu treffen, diese zu validieren und anzunehmen oder abzulehnen. -### Eine Trainingsmethode wählen +### Entscheiden Sie sich für eine Trainingsmethode -Abhängig von Ihrer Frage und der Art Ihrer Daten wählen Sie eine Methode, um sie zu trainieren. Wenn Sie [Scikit-learn's Dokumentation](https://scikit-learn.org/stable/user_guide.html) durchgehen - die wir in diesem Kurs verwenden - können Sie viele Möglichkeiten erkunden, ein Modell zu trainieren. Abhängig von Ihrer Erfahrung müssen Sie möglicherweise mehrere Methoden ausprobieren, um das beste Modell zu erstellen. Sie werden wahrscheinlich einen Prozess durchlaufen, bei dem Datenwissenschaftler die Leistung eines Modells bewerten, indem sie ihm unbekannte Daten zuführen, die Genauigkeit, Verzerrungen und andere qualitätsmindernde Probleme überprüfen und die am besten geeignete Trainingsmethode für die jeweilige Aufgabe auswählen. +Abhängig von Ihrer Frage und der Art Ihrer Daten wählen Sie eine Methode, um sie zu trainieren. Wenn Sie die [Dokumentation von Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - die wir in diesem Kurs verwenden - durchgehen, können Sie viele Möglichkeiten erkunden, ein Modell zu trainieren. Abhängig von Ihrer Erfahrung müssen Sie möglicherweise mehrere Methoden ausprobieren, um das beste Modell zu erstellen. Sie werden wahrscheinlich einen Prozess durchlaufen, bei dem Datenwissenschaftler die Leistung eines Modells bewerten, indem sie ihm unbekannte Daten zuführen, die Genauigkeit, Verzerrungen und andere qualitätsmindernde Probleme überprüfen und die am besten geeignete Trainingsmethode für die jeweilige Aufgabe auswählen. ### Ein Modell trainieren -Mit Ihren Trainingsdaten sind Sie bereit, sie zu "fitten", um ein Modell zu erstellen. Sie werden feststellen, dass Sie in vielen ML-Bibliotheken den Code 'model.fit' finden - zu diesem Zeitpunkt senden Sie Ihre Merkmalsvariable als Array von Werten (in der Regel 'X') und eine Zielvariable (in der Regel 'y'). +Mit Ihren Trainingsdaten sind Sie bereit, sie zu "fitten", um ein Modell zu erstellen. Sie werden feststellen, dass Sie in vielen ML-Bibliotheken den Code 'model.fit' finden - zu diesem Zeitpunkt senden Sie Ihre Merkmalsvariable als Array von Werten (in der Regel 'X') und eine Zielvariable (in der Regel 'y') ein. ### Das Modell bewerten @@ -97,7 +97,7 @@ Im Kontext des maschinellen Lernens bezieht sich die Modellanpassung auf die Gen 🎓 **Underfitting** und **Overfitting** sind häufige Probleme, die die Qualität des Modells beeinträchtigen, da das Modell entweder nicht gut genug oder zu gut passt. Dies führt dazu, dass das Modell Vorhersagen entweder zu eng oder zu locker an seine Trainingsdaten anpasst. Ein überangepasstes Modell sagt Trainingsdaten zu gut voraus, da es die Details und das Rauschen der Daten zu gut gelernt hat. Ein unterangepasstes Modell ist nicht genau, da es weder seine Trainingsdaten noch Daten, die es noch nicht "gesehen" hat, genau analysieren kann. -![überangepasstes Modell](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.de.png) +![überangepasstes Modell](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) > Infografik von [Jen Looper](https://twitter.com/jenlooper) ## Parameteranpassung @@ -108,7 +108,7 @@ Sobald Ihr erstes Training abgeschlossen ist, beobachten Sie die Qualität des M Dies ist der Moment, in dem Sie völlig neue Daten verwenden können, um die Genauigkeit Ihres Modells zu testen. In einem 'angewandten' ML-Setting, in dem Sie Webanwendungen erstellen, um das Modell in der Produktion zu verwenden, könnte dieser Prozess das Sammeln von Benutzereingaben (z. B. einen Knopfdruck) umfassen, um eine Variable festzulegen und sie an das Modell zur Inferenz oder Bewertung zu senden. -In diesen Lektionen werden Sie entdecken, wie Sie diese Schritte nutzen, um vorzubereiten, zu erstellen, zu testen, zu bewerten und vorherzusagen - all die Aufgaben eines Datenwissenschaftlers und mehr, während Sie auf Ihrem Weg zum 'Full-Stack'-ML-Ingenieur voranschreiten. +In diesen Lektionen werden Sie entdecken, wie Sie diese Schritte nutzen, um vorzubereiten, zu bauen, zu testen, zu bewerten und vorherzusagen - all die Gesten eines Datenwissenschaftlers und mehr, während Sie auf Ihrer Reise zum 'Full-Stack'-ML-Ingenieur voranschreiten. --- @@ -116,9 +116,9 @@ In diesen Lektionen werden Sie entdecken, wie Sie diese Schritte nutzen, um vorz Erstellen Sie ein Flussdiagramm, das die Schritte eines ML-Praktikers darstellt. Wo sehen Sie sich derzeit im Prozess? Wo erwarten Sie Schwierigkeiten? Was erscheint Ihnen einfach? -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) -## Rückblick & Selbststudium +## Überprüfung & Selbststudium Suchen Sie online nach Interviews mit Datenwissenschaftlern, die über ihre tägliche Arbeit sprechen. Hier ist [eins](https://www.youtube.com/watch?v=Z3IjgbbCEfs). @@ -129,4 +129,4 @@ Suchen Sie online nach Interviews mit Datenwissenschaftlern, die über ihre täg --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/2-Regression/1-Tools/README.md b/translations/de/2-Regression/1-Tools/README.md index c853429fe..871cfa40c 100644 --- a/translations/de/2-Regression/1-Tools/README.md +++ b/translations/de/2-Regression/1-Tools/README.md @@ -1,115 +1,115 @@ -# Erste Schritte mit Python und Scikit-learn für Regressionsmodelle +# Einstieg in Python und Scikit-learn für Regressionsmodelle -![Zusammenfassung von Regressionen in einer Sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.de.png) +![Zusammenfassung von Regressionen in einer Sketchnote](../../../../sketchnotes/ml-regression.png) > Sketchnote von [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz vor der Lektion](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/) > ### [Diese Lektion ist auch in R verfügbar!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## Einführung -In diesen vier Lektionen lernen Sie, wie man Regressionsmodelle erstellt. Wir werden gleich besprechen, wofür diese verwendet werden. Aber bevor Sie irgendetwas tun, stellen Sie sicher, dass Sie die richtigen Werkzeuge haben, um den Prozess zu starten! +In diesen vier Lektionen lernen Sie, wie man Regressionsmodelle erstellt. Wir werden gleich besprechen, wofür diese verwendet werden. Aber bevor Sie loslegen, stellen Sie sicher, dass Sie die richtigen Werkzeuge eingerichtet haben, um den Prozess zu starten! In dieser Lektion lernen Sie: -- Ihren Computer für lokale Machine-Learning-Aufgaben zu konfigurieren. -- Mit Jupyter-Notebooks zu arbeiten. -- Scikit-learn zu verwenden, einschließlich der Installation. -- Lineare Regression mit einer praktischen Übung zu erkunden. +- Wie Sie Ihren Computer für lokale Machine-Learning-Aufgaben konfigurieren. +- Wie Sie mit Jupyter-Notebooks arbeiten. +- Wie Sie Scikit-learn verwenden, einschließlich der Installation. +- Wie Sie lineare Regression durch eine praktische Übung erkunden. ## Installationen und Konfigurationen -[![ML für Anfänger - Richten Sie Ihre Werkzeuge ein, um Machine-Learning-Modelle zu erstellen](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML für Anfänger - Richten Sie Ihre Werkzeuge ein, um Machine-Learning-Modelle zu erstellen") +[![ML für Anfänger - Richten Sie Ihre Tools ein, um Machine-Learning-Modelle zu erstellen](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML für Anfänger - Richten Sie Ihre Tools ein, um Machine-Learning-Modelle zu erstellen") -> 🎥 Klicken Sie auf das Bild oben für ein kurzes Video zur Konfiguration Ihres Computers für ML. +> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zur Konfiguration Ihres Computers für ML anzusehen. -1. **Python installieren**. Stellen Sie sicher, dass [Python](https://www.python.org/downloads/) auf Ihrem Computer installiert ist. Sie werden Python für viele Aufgaben in der Datenwissenschaft und im maschinellen Lernen verwenden. Die meisten Computersysteme haben bereits eine Python-Installation. Es gibt auch nützliche [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), die die Einrichtung für einige Benutzer erleichtern. +1. **Installieren Sie Python**. Stellen Sie sicher, dass [Python](https://www.python.org/downloads/) auf Ihrem Computer installiert ist. Sie werden Python für viele Aufgaben in den Bereichen Datenwissenschaft und maschinelles Lernen verwenden. Die meisten Computersysteme haben Python bereits vorinstalliert. Es gibt auch nützliche [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), die die Einrichtung für einige Benutzer erleichtern. Einige Anwendungen von Python erfordern jedoch eine bestimmte Version der Software, während andere eine andere Version benötigen. Aus diesem Grund ist es sinnvoll, in einer [virtuellen Umgebung](https://docs.python.org/3/library/venv.html) zu arbeiten. -2. **Visual Studio Code installieren**. Stellen Sie sicher, dass Visual Studio Code auf Ihrem Computer installiert ist. Folgen Sie diesen Anweisungen, um [Visual Studio Code zu installieren](https://code.visualstudio.com/) für die grundlegende Installation. Sie werden Python in Visual Studio Code in diesem Kurs verwenden, daher sollten Sie sich mit der [Konfiguration von Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) für die Python-Entwicklung vertraut machen. +2. **Installieren Sie Visual Studio Code**. Stellen Sie sicher, dass Visual Studio Code auf Ihrem Computer installiert ist. Folgen Sie diesen Anweisungen, um [Visual Studio Code zu installieren](https://code.visualstudio.com/). In diesem Kurs werden Sie Python in Visual Studio Code verwenden, daher sollten Sie sich mit der [Konfiguration von Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) für die Python-Entwicklung vertraut machen. - > Machen Sie sich mit Python vertraut, indem Sie diese Sammlung von [Learn-Modulen](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) durcharbeiten. + > Machen Sie sich mit Python vertraut, indem Sie diese Sammlung von [Lernmodulen](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) durcharbeiten. > > [![Python mit Visual Studio Code einrichten](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Python mit Visual Studio Code einrichten") > - > 🎥 Klicken Sie auf das Bild oben für ein Video: Python in VS Code verwenden. + > 🎥 Klicken Sie auf das Bild oben, um ein Video über die Verwendung von Python in VS Code anzusehen. -3. **Scikit-learn installieren**, indem Sie [diesen Anweisungen](https://scikit-learn.org/stable/install.html) folgen. Da Sie sicherstellen müssen, dass Sie Python 3 verwenden, wird empfohlen, eine virtuelle Umgebung zu verwenden. Beachten Sie, dass es spezielle Anweisungen gibt, wenn Sie diese Bibliothek auf einem M1 Mac installieren. +3. **Installieren Sie Scikit-learn**, indem Sie [diesen Anweisungen](https://scikit-learn.org/stable/install.html) folgen. Da Sie sicherstellen müssen, dass Sie Python 3 verwenden, wird empfohlen, eine virtuelle Umgebung zu nutzen. Beachten Sie, dass es spezielle Anweisungen gibt, wenn Sie diese Bibliothek auf einem M1 Mac installieren. -4. **Jupyter Notebook installieren**. Sie müssen das [Jupyter-Paket installieren](https://pypi.org/project/jupyter/). +4. **Installieren Sie Jupyter Notebook**. Sie müssen das [Jupyter-Paket installieren](https://pypi.org/project/jupyter/). ## Ihre ML-Entwicklungsumgebung -Sie werden **Notebooks** verwenden, um Ihren Python-Code zu entwickeln und Machine-Learning-Modelle zu erstellen. Diese Art von Datei ist ein häufig verwendetes Werkzeug für Datenwissenschaftler und kann an ihrer Endung `.ipynb` erkannt werden. +Sie werden **Notebooks** verwenden, um Ihren Python-Code zu entwickeln und Machine-Learning-Modelle zu erstellen. Diese Art von Datei ist ein gängiges Werkzeug für Datenwissenschaftler und kann an ihrer Endung `.ipynb` erkannt werden. -Notebooks sind eine interaktive Umgebung, die es Entwicklern ermöglicht, sowohl Code zu schreiben als auch Notizen und Dokumentation rund um den Code hinzuzufügen, was besonders hilfreich für experimentelle oder forschungsorientierte Projekte ist. +Notebooks sind eine interaktive Umgebung, die es Entwicklern ermöglicht, sowohl Code zu schreiben als auch Notizen und Dokumentationen rund um den Code hinzuzufügen. Dies ist besonders hilfreich für experimentelle oder forschungsorientierte Projekte. -[![ML für Anfänger - Jupyter Notebooks einrichten, um mit der Erstellung von Regressionsmodellen zu beginnen](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML für Anfänger - Jupyter Notebooks einrichten, um mit der Erstellung von Regressionsmodellen zu beginnen") +[![ML für Anfänger - Jupyter-Notebooks einrichten, um Regressionsmodelle zu erstellen](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML für Anfänger - Jupyter-Notebooks einrichten, um Regressionsmodelle zu erstellen") -> 🎥 Klicken Sie auf das Bild oben für ein kurzes Video, das diese Übung durchgeht. +> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zu dieser Übung anzusehen. -### Übung - Mit einem Notebook arbeiten +### Übung - Arbeiten mit einem Notebook In diesem Ordner finden Sie die Datei _notebook.ipynb_. 1. Öffnen Sie _notebook.ipynb_ in Visual Studio Code. - Ein Jupyter-Server wird mit Python 3+ gestartet. Sie finden Bereiche des Notebooks, die `ausgeführt` werden können, also Codeabschnitte. Sie können einen Codeblock ausführen, indem Sie das Symbol auswählen, das wie eine Wiedergabetaste aussieht. + Ein Jupyter-Server wird mit Python 3+ gestartet. Sie finden Bereiche im Notebook, die `ausgeführt` werden können, also Codeabschnitte. Sie können einen Codeblock ausführen, indem Sie das Symbol auswählen, das wie eine Wiedergabetaste aussieht. -2. Wählen Sie das `md`-Symbol und fügen Sie ein wenig Markdown sowie den folgenden Text hinzu: **# Willkommen in Ihrem Notebook**. +2. Wählen Sie das `md`-Symbol und fügen Sie etwas Markdown sowie den folgenden Text hinzu: **# Willkommen in Ihrem Notebook**. Fügen Sie anschließend etwas Python-Code hinzu. 3. Geben Sie **print('hello notebook')** in den Codeblock ein. -4. Wählen Sie den Pfeil aus, um den Code auszuführen. +4. Wählen Sie den Pfeil, um den Code auszuführen. - Sie sollten die gedruckte Aussage sehen: + Sie sollten die folgende Ausgabe sehen: ```output hello notebook ``` -![VS Code mit einem geöffneten Notebook](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.de.jpg) +![VS Code mit einem geöffneten Notebook](../../../../2-Regression/1-Tools/images/notebook.jpg) -Sie können Ihren Code mit Kommentaren durchsetzen, um das Notebook selbst zu dokumentieren. +Sie können Ihren Code mit Kommentaren versehen, um das Notebook selbst zu dokumentieren. ✅ Denken Sie einen Moment darüber nach, wie unterschiedlich die Arbeitsumgebung eines Webentwicklers im Vergleich zu der eines Datenwissenschaftlers ist. ## Einführung in Scikit-learn -Jetzt, da Python in Ihrer lokalen Umgebung eingerichtet ist und Sie sich mit Jupyter-Notebooks vertraut gemacht haben, machen wir uns ebenso vertraut mit Scikit-learn (ausgesprochen `sci` wie in `science`). Scikit-learn bietet eine [umfangreiche API](https://scikit-learn.org/stable/modules/classes.html#api-ref), die Ihnen bei der Durchführung von ML-Aufgaben hilft. +Jetzt, da Python in Ihrer lokalen Umgebung eingerichtet ist und Sie sich mit Jupyter-Notebooks vertraut gemacht haben, machen wir uns ebenso mit Scikit-learn vertraut (ausgesprochen `sci` wie in `science`). Scikit-learn bietet eine [umfangreiche API](https://scikit-learn.org/stable/modules/classes.html#api-ref), die Ihnen bei der Durchführung von ML-Aufgaben hilft. -Laut ihrer [Website](https://scikit-learn.org/stable/getting_started.html) ist "Scikit-learn eine Open-Source-Machine-Learning-Bibliothek, die sowohl überwachte als auch unüberwachte Lernmethoden unterstützt. Sie bietet auch verschiedene Werkzeuge für Modellanpassung, Datenvorverarbeitung, Modellauswahl und -bewertung sowie viele andere Hilfsmittel." +Laut ihrer [Website](https://scikit-learn.org/stable/getting_started.html) ist "Scikit-learn eine Open-Source-Bibliothek für maschinelles Lernen, die sowohl überwachtes als auch unüberwachtes Lernen unterstützt. Sie bietet auch verschiedene Werkzeuge für Modellanpassung, Datenvorverarbeitung, Modellauswahl und -bewertung sowie viele andere Hilfsmittel." -In diesem Kurs werden Sie Scikit-learn und andere Werkzeuge verwenden, um Machine-Learning-Modelle zu erstellen, die sogenannte 'traditionelle Machine-Learning'-Aufgaben ausführen. Wir haben bewusst auf neuronale Netzwerke und Deep Learning verzichtet, da diese besser in unserem kommenden 'AI for Beginners'-Lehrplan behandelt werden. +In diesem Kurs werden Sie Scikit-learn und andere Werkzeuge verwenden, um Machine-Learning-Modelle für sogenannte "traditionelle Machine-Learning"-Aufgaben zu erstellen. Wir haben bewusst auf neuronale Netze und Deep Learning verzichtet, da diese besser in unserem kommenden Lehrplan "KI für Anfänger" behandelt werden. -Scikit-learn macht es einfach, Modelle zu erstellen und zu bewerten. Es konzentriert sich hauptsächlich auf die Verwendung numerischer Daten und enthält mehrere vorgefertigte Datensätze, die als Lernwerkzeuge verwendet werden können. Es enthält auch vorgefertigte Modelle, die Studenten ausprobieren können. Lassen Sie uns den Prozess des Ladens vorgefertigter Daten und der Verwendung eines eingebauten Schätzers für das erste ML-Modell mit Scikit-learn erkunden. +Scikit-learn macht es einfach, Modelle zu erstellen und zu bewerten. Es konzentriert sich hauptsächlich auf die Verwendung numerischer Daten und enthält mehrere vorgefertigte Datensätze, die als Lernwerkzeuge dienen. Es bietet auch vorgefertigte Modelle, die Schüler ausprobieren können. Lassen Sie uns den Prozess des Ladens vorgefertigter Daten und der Verwendung eines eingebauten Schätzers für ein erstes ML-Modell mit Scikit-learn erkunden. ## Übung - Ihr erstes Scikit-learn-Notebook -> Dieses Tutorial wurde inspiriert von dem [Beispiel zur linearen Regression](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) auf der Scikit-learn-Website. +> Dieses Tutorial wurde vom [Beispiel zur linearen Regression](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) auf der Scikit-learn-Website inspiriert. -[![ML für Anfänger - Ihr erstes Projekt zur linearen Regression in Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML für Anfänger - Ihr erstes Projekt zur linearen Regression in Python") +[![ML für Anfänger - Ihr erstes lineares Regressionsprojekt in Python](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML für Anfänger - Ihr erstes lineares Regressionsprojekt in Python") -> 🎥 Klicken Sie auf das Bild oben für ein kurzes Video, das diese Übung durchgeht. +> 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zu dieser Übung anzusehen. -In der Datei _notebook.ipynb_, die mit dieser Lektion verbunden ist, löschen Sie alle Zellen, indem Sie auf das Symbol 'Mülleimer' klicken. +In der Datei _notebook.ipynb_, die mit dieser Lektion verbunden ist, löschen Sie alle Zellen, indem Sie auf das Symbol "Papierkorb" klicken. -In diesem Abschnitt arbeiten Sie mit einem kleinen Datensatz über Diabetes, der in Scikit-learn für Lernzwecke integriert ist. Stellen Sie sich vor, Sie wollten eine Behandlung für Diabetespatienten testen. Machine-Learning-Modelle könnten Ihnen helfen zu bestimmen, welche Patienten besser auf die Behandlung ansprechen würden, basierend auf Kombinationen von Variablen. Selbst ein sehr einfaches Regressionsmodell könnte, wenn es visualisiert wird, Informationen über Variablen zeigen, die Ihnen helfen könnten, Ihre theoretischen klinischen Studien zu organisieren. +In diesem Abschnitt arbeiten Sie mit einem kleinen Datensatz über Diabetes, der in Scikit-learn integriert ist und zu Lernzwecken dient. Stellen Sie sich vor, Sie möchten eine Behandlung für Diabetespatienten testen. Machine-Learning-Modelle könnten Ihnen helfen, herauszufinden, welche Patienten basierend auf Kombinationen von Variablen besser auf die Behandlung ansprechen würden. Selbst ein sehr einfaches Regressionsmodell könnte, wenn es visualisiert wird, Informationen über Variablen liefern, die Ihnen helfen könnten, Ihre theoretischen klinischen Studien zu organisieren. -✅ Es gibt viele Arten von Regressionsmethoden, und welche Sie wählen, hängt von der Frage ab, die Sie beantworten möchten. Wenn Sie die wahrscheinliche Größe einer Person in einem bestimmten Alter vorhersagen möchten, würden Sie lineare Regression verwenden, da Sie einen **numerischen Wert** suchen. Wenn Sie herausfinden möchten, ob eine Art von Küche als vegan betrachtet werden sollte oder nicht, suchen Sie nach einer **Kategoriezuweisung**, sodass Sie logistische Regression verwenden würden. Sie werden später mehr über logistische Regression lernen. Denken Sie ein wenig über einige Fragen nach, die Sie an Daten stellen können, und welche dieser Methoden dafür besser geeignet wären. +✅ Es gibt viele Arten von Regressionsmethoden, und welche Sie wählen, hängt von der Frage ab, die Sie beantworten möchten. Wenn Sie beispielsweise die wahrscheinliche Größe einer Person in einem bestimmten Alter vorhersagen möchten, würden Sie lineare Regression verwenden, da Sie einen **numerischen Wert** suchen. Wenn Sie hingegen herausfinden möchten, ob eine bestimmte Küche als vegan betrachtet werden sollte oder nicht, suchen Sie nach einer **Kategorisierung** und würden logistische Regression verwenden. Sie werden später mehr über logistische Regression lernen. Überlegen Sie sich einige Fragen, die Sie an Daten stellen könnten, und welche dieser Methoden dafür besser geeignet wäre. Lassen Sie uns mit dieser Aufgabe beginnen. @@ -117,11 +117,11 @@ Lassen Sie uns mit dieser Aufgabe beginnen. Für diese Aufgabe importieren wir einige Bibliotheken: -- **matplotlib**. Es ist ein nützliches [Grafikwerkzeug](https://matplotlib.org/) und wir werden es verwenden, um ein Liniendiagramm zu erstellen. -- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ist eine nützliche Bibliothek für die Verarbeitung numerischer Daten in Python. +- **matplotlib**. Ein nützliches [Grafikwerkzeug](https://matplotlib.org/), das wir verwenden, um ein Liniendiagramm zu erstellen. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) ist eine nützliche Bibliothek für den Umgang mit numerischen Daten in Python. - **sklearn**. Dies ist die [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)-Bibliothek. -Importieren Sie einige Bibliotheken, die Ihnen bei Ihren Aufgaben helfen. +Importieren Sie einige Bibliotheken, um Ihre Aufgaben zu unterstützen. 1. Fügen Sie die Importe hinzu, indem Sie den folgenden Code eingeben: @@ -131,24 +131,24 @@ Importieren Sie einige Bibliotheken, die Ihnen bei Ihren Aufgaben helfen. from sklearn import datasets, linear_model, model_selection ``` - Oben importieren Sie `matplotlib`, `numpy` und Sie importieren `datasets`, `linear_model` und `model_selection` aus `sklearn`. `model_selection` wird verwendet, um Daten in Trainings- und Testsets aufzuteilen. + Oben importieren Sie `matplotlib`, `numpy` und `datasets`, `linear_model` sowie `model_selection` aus `sklearn`. `model_selection` wird verwendet, um Daten in Trainings- und Testsets aufzuteilen. ### Der Diabetes-Datensatz -Der integrierte [Diabetes-Datensatz](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) enthält 442 Datenproben zu Diabetes mit 10 Feature-Variablen, darunter: +Der integrierte [Diabetes-Datensatz](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) enthält 442 Datenproben zu Diabetes mit 10 Merkmalvariablen, darunter: - age: Alter in Jahren - bmi: Body-Mass-Index - bp: Durchschnittlicher Blutdruck - s1 tc: T-Zellen (eine Art von weißen Blutkörperchen) -✅ Dieser Datensatz enthält das Konzept von 'Geschlecht' als Feature-Variable, die für die Forschung zu Diabetes wichtig ist. Viele medizinische Datensätze enthalten diese Art von binärer Klassifikation. Denken Sie ein wenig darüber nach, wie solche Kategorisierungen bestimmte Teile der Bevölkerung von Behandlungen ausschließen könnten. +✅ Dieser Datensatz enthält das Konzept von "Geschlecht" als Merkmalvariable, das für die Forschung zu Diabetes wichtig ist. Viele medizinische Datensätze enthalten diese Art von binärer Klassifikation. Überlegen Sie, wie solche Kategorisierungen bestimmte Teile der Bevölkerung von Behandlungen ausschließen könnten. Laden Sie nun die X- und y-Daten. > 🎓 Denken Sie daran, dass dies überwachtes Lernen ist und wir ein benanntes 'y'-Ziel benötigen. -In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabetes()` aufrufen. Der Input `return_X_y=True` signalisiert, dass `X` eine Datenmatrix und `y` das Regressionsziel sein wird. +In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabetes()` aufrufen. Der Eingabeparameter `return_X_y=True` signalisiert, dass `X` eine Datenmatrix und `y` das Regressionsziel sein wird. 1. Fügen Sie einige Print-Befehle hinzu, um die Form der Datenmatrix und ihr erstes Element anzuzeigen: @@ -158,9 +158,9 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe print(X[0]) ``` - Was Sie als Antwort erhalten, ist ein Tupel. Sie weisen die beiden ersten Werte des Tupels `X` und `y` zu. Erfahren Sie mehr [über Tupel](https://wikipedia.org/wiki/Tuple). + Was Sie als Antwort erhalten, ist ein Tupel. Sie weisen die beiden ersten Werte des Tupels `X` und `y` zu. Erfahren Sie mehr über [Tupel](https://wikipedia.org/wiki/Tuple). - Sie können sehen, dass diese Daten 442 Elemente enthalten, die in Arrays mit 10 Elementen geformt sind: + Sie können sehen, dass diese Daten 442 Elemente in Arrays mit 10 Elementen enthalten: ```text (442, 10) @@ -168,9 +168,9 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` - ✅ Denken Sie ein wenig über die Beziehung zwischen den Daten und dem Regressionsziel nach. Lineare Regression sagt Beziehungen zwischen Feature X und Zielvariable y voraus. Können Sie das [Ziel](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) für den Diabetes-Datensatz in der Dokumentation finden? Was zeigt dieser Datensatz, wenn man das Ziel betrachtet? + ✅ Denken Sie über die Beziehung zwischen den Daten und dem Regressionsziel nach. Lineare Regression sagt Beziehungen zwischen Merkmal X und Zielvariable y voraus. Können Sie das [Ziel](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) für den Diabetes-Datensatz in der Dokumentation finden? Was zeigt dieser Datensatz, wenn man das Ziel betrachtet? -2. Wählen Sie als Nächstes einen Teil dieses Datensatzes aus, um ihn zu plotten, indem Sie die dritte Spalte des Datensatzes auswählen. Sie können dies tun, indem Sie den `:`-Operator verwenden, um alle Zeilen auszuwählen, und dann die dritte Spalte mit dem Index (2) auswählen. Sie können die Daten auch in ein 2D-Array umformen - wie für das Plotten erforderlich - indem Sie `reshape(n_rows, n_columns)` verwenden. Wenn einer der Parameter -1 ist, wird die entsprechende Dimension automatisch berechnet. +2. Wählen Sie als Nächstes einen Teil dieses Datensatzes aus, um ihn zu plotten, indem Sie die dritte Spalte des Datensatzes auswählen. Sie können dies tun, indem Sie den `:`-Operator verwenden, um alle Zeilen auszuwählen, und dann die dritte Spalte mit dem Index (2) auswählen. Sie können die Daten auch in ein 2D-Array umformen, wie es für das Plotten erforderlich ist, indem Sie `reshape(n_rows, n_columns)` verwenden. Wenn einer der Parameter -1 ist, wird die entsprechende Dimension automatisch berechnet. ```python X = X[:, 2] @@ -179,7 +179,7 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe ✅ Drucken Sie die Daten jederzeit aus, um ihre Form zu überprüfen. -3. Jetzt, da Sie Daten bereit zum Plotten haben, können Sie sehen, ob eine Maschine helfen kann, eine logische Trennung zwischen den Zahlen in diesem Datensatz zu bestimmen. Dazu müssen Sie sowohl die Daten (X) als auch das Ziel (y) in Test- und Trainingssets aufteilen. Scikit-learn bietet eine einfache Möglichkeit, dies zu tun; Sie können Ihre Testdaten an einem bestimmten Punkt aufteilen. +3. Jetzt, da Sie die Daten zum Plotten bereit haben, können Sie sehen, ob eine Maschine helfen kann, eine logische Trennung zwischen den Zahlen in diesem Datensatz zu bestimmen. Dazu müssen Sie sowohl die Daten (X) als auch das Ziel (y) in Test- und Trainingssets aufteilen. Scikit-learn bietet eine einfache Möglichkeit, dies zu tun; Sie können Ihre Testdaten an einem bestimmten Punkt aufteilen. ```python X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) @@ -194,13 +194,13 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe ✅ `model.fit()` ist eine Funktion, die Sie in vielen ML-Bibliotheken wie TensorFlow sehen werden. -5. Erstellen Sie anschließend eine Vorhersage mit Testdaten, indem Sie die Funktion `predict()` verwenden. Diese wird verwendet, um die Linie zwischen den Datengruppen zu zeichnen. +5. Erstellen Sie dann eine Vorhersage mit Testdaten, indem Sie die Funktion `predict()` verwenden. Diese wird verwendet, um die Linie zwischen den Datengruppen zu zeichnen. ```python y_pred = model.predict(X_test) ``` -6. Jetzt ist es Zeit, die Daten in einem Diagramm anzuzeigen. Matplotlib ist ein sehr nützliches Werkzeug für diese Aufgabe. Erstellen Sie ein Streudiagramm aller X- und y-Testdaten und verwenden Sie die Vorhersage, um eine Linie an der passendsten Stelle zwischen den Datengruppierungen des Modells zu zeichnen. +6. Jetzt ist es an der Zeit, die Daten in einem Diagramm darzustellen. Matplotlib ist ein sehr nützliches Werkzeug für diese Aufgabe. Erstellen Sie ein Streudiagramm aller X- und y-Testdaten und verwenden Sie die Vorhersage, um eine Linie an der passendsten Stelle zwischen den Datengruppierungen des Modells zu zeichnen. ```python plt.scatter(X_test, y_test, color='black') @@ -211,17 +211,17 @@ In einer neuen Codezelle laden Sie den Diabetes-Datensatz, indem Sie `load_diabe plt.show() ``` - ![Ein Streudiagramm, das Datenpunkte zu Diabetes zeigt](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.de.png) -✅ Denk ein wenig darüber nach, was hier passiert. Eine gerade Linie verläuft durch viele kleine Datenpunkte, aber was genau macht sie? Kannst du erkennen, wie du diese Linie nutzen könntest, um vorherzusagen, wo ein neuer, unbekannter Datenpunkt in Bezug auf die y-Achse des Plots liegen sollte? Versuche, den praktischen Nutzen dieses Modells in Worte zu fassen. + ![Ein Streudiagramm, das Datenpunkte zu Diabetes zeigt](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Überlege ein wenig, was hier passiert. Eine gerade Linie verläuft durch viele kleine Datenpunkte, aber was genau macht sie? Kannst du erkennen, wie du diese Linie nutzen könntest, um vorherzusagen, wo ein neuer, unbekannter Datenpunkt in Bezug auf die y-Achse des Plots liegen sollte? Versuche, den praktischen Nutzen dieses Modells in Worte zu fassen. -Herzlichen Glückwunsch, du hast dein erstes lineares Regressionsmodell erstellt, eine Vorhersage damit gemacht und sie in einem Plot dargestellt! +Herzlichen Glückwunsch, du hast dein erstes lineares Regressionsmodell erstellt, eine Vorhersage damit gemacht und es in einem Plot dargestellt! --- -## 🚀 Herausforderung +## 🚀Herausforderung -Zeichne eine andere Variable aus diesem Datensatz. Hinweis: Bearbeite diese Zeile: `X = X[:,2]`. Angesichts des Ziels dieses Datensatzes, was kannst du über den Verlauf von Diabetes als Krankheit herausfinden? +Plotte eine andere Variable aus diesem Datensatz. Hinweis: Bearbeite diese Zeile: `X = X[:,2]`. Angesichts des Ziels dieses Datensatzes, was kannst du über den Verlauf von Diabetes als Krankheit herausfinden? -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) ## Rückblick & Selbststudium @@ -236,4 +236,4 @@ Lies mehr über das Konzept der Regression und denke darüber nach, welche Arten --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/2-Regression/2-Data/README.md b/translations/de/2-Regression/2-Data/README.md index a5afc056a..4187c121c 100644 --- a/translations/de/2-Regression/2-Data/README.md +++ b/translations/de/2-Regression/2-Data/README.md @@ -1,25 +1,25 @@ # Erstellen eines Regressionsmodells mit Scikit-learn: Daten vorbereiten und visualisieren -![Infografik zur Datenvisualisierung](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.de.png) +![Infografik zur Datenvisualisierung](../../../../2-Regression/2-Data/images/data-visualization.png) Infografik von [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/) > ### [Diese Lektion ist auch in R verfügbar!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) ## Einführung -Jetzt, da Sie mit den notwendigen Tools ausgestattet sind, um mit dem Aufbau von Machine-Learning-Modellen mit Scikit-learn zu beginnen, können Sie anfangen, Fragen zu Ihren Daten zu stellen. Wenn Sie mit Daten arbeiten und ML-Lösungen anwenden, ist es äußerst wichtig, die richtigen Fragen zu stellen, um das Potenzial Ihres Datensatzes voll auszuschöpfen. +Nachdem Sie nun die notwendigen Werkzeuge eingerichtet haben, um mit dem Aufbau von Machine-Learning-Modellen in Scikit-learn zu beginnen, können Sie anfangen, Fragen an Ihre Daten zu stellen. Wenn Sie mit Daten arbeiten und ML-Lösungen anwenden, ist es entscheidend, die richtigen Fragen zu stellen, um das volle Potenzial Ihres Datensatzes auszuschöpfen. In dieser Lektion lernen Sie: @@ -28,39 +28,39 @@ In dieser Lektion lernen Sie: ## Die richtigen Fragen an Ihre Daten stellen -Die Frage, die Sie beantwortet haben möchten, bestimmt, welche Art von ML-Algorithmen Sie verwenden werden. Und die Qualität der Antwort hängt stark von der Beschaffenheit Ihrer Daten ab. +Die Frage, die Sie beantwortet haben möchten, bestimmt, welche Art von ML-Algorithmen Sie verwenden. Und die Qualität der Antwort hängt stark von der Beschaffenheit Ihrer Daten ab. -Werfen Sie einen Blick auf die [Daten](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die für diese Lektion bereitgestellt wurden. Sie können diese .csv-Datei in VS Code öffnen. Ein kurzer Blick zeigt sofort, dass es Leerstellen und eine Mischung aus Zeichenketten und numerischen Daten gibt. Es gibt auch eine seltsame Spalte namens 'Package', in der die Daten eine Mischung aus 'sacks', 'bins' und anderen Werten sind. Die Daten sind tatsächlich ein wenig chaotisch. +Werfen Sie einen Blick auf die [Daten](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die für diese Lektion bereitgestellt wurden. Sie können diese .csv-Datei in VS Code öffnen. Ein kurzer Blick zeigt sofort, dass es Lücken gibt und eine Mischung aus Zeichenketten und numerischen Daten vorliegt. Es gibt auch eine seltsame Spalte namens 'Package', in der die Daten eine Mischung aus 'sacks', 'bins' und anderen Werten sind. Die Daten sind tatsächlich ein bisschen chaotisch. [![ML für Anfänger - Wie man einen Datensatz analysiert und bereinigt](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML für Anfänger - Wie man einen Datensatz analysiert und bereinigt") > 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zur Vorbereitung der Daten für diese Lektion anzusehen. -Es ist tatsächlich nicht sehr üblich, einen Datensatz zu erhalten, der vollständig bereit ist, um direkt ein ML-Modell zu erstellen. In dieser Lektion lernen Sie, wie Sie einen Rohdatensatz mit Standard-Python-Bibliotheken vorbereiten. Sie lernen auch verschiedene Techniken zur Visualisierung der Daten. +Es ist tatsächlich nicht sehr häufig, dass man einen Datensatz erhält, der vollständig bereit ist, um direkt ein ML-Modell zu erstellen. In dieser Lektion lernen Sie, wie Sie einen Rohdatensatz mit Standard-Python-Bibliotheken vorbereiten. Außerdem lernen Sie verschiedene Techniken zur Visualisierung der Daten kennen. ## Fallstudie: 'Der Kürbismarkt' -In diesem Ordner finden Sie eine .csv-Datei im Stammordner `data` namens [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die 1757 Zeilen Daten über den Markt für Kürbisse enthält, sortiert nach Städten. Dies sind Rohdaten, die aus den [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) des US-Landwirtschaftsministeriums extrahiert wurden. +In diesem Ordner finden Sie eine .csv-Datei im Stammverzeichnis des `data`-Ordners namens [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), die 1757 Zeilen mit Daten über den Kürbismarkt enthält, sortiert nach Städten. Dies sind Rohdaten, die aus den [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) des US-Landwirtschaftsministeriums extrahiert wurden. ### Daten vorbereiten -Diese Daten sind gemeinfrei. Sie können auf der USDA-Website in vielen separaten Dateien, nach Städten sortiert, heruntergeladen werden. Um zu vermeiden, dass zu viele separate Dateien entstehen, haben wir alle Städtedaten in eine Tabelle zusammengeführt, sodass die Daten bereits _etwas_ vorbereitet sind. Schauen wir uns die Daten nun genauer an. +Diese Daten sind gemeinfrei. Sie können in vielen separaten Dateien, nach Städten sortiert, von der USDA-Website heruntergeladen werden. Um zu vermeiden, dass zu viele separate Dateien vorliegen, haben wir alle Städtedaten in eine Tabelle zusammengeführt, sodass die Daten bereits etwas _vorbereitet_ wurden. Schauen wir uns die Daten nun genauer an. -### Die Kürbisdaten - erste Schlussfolgerungen +### Die Kürbis-Daten - erste Eindrücke -Was fällt Ihnen an diesen Daten auf? Sie haben bereits gesehen, dass es eine Mischung aus Zeichenketten, Zahlen, Leerstellen und seltsamen Werten gibt, die Sie verstehen müssen. +Was fällt Ihnen an diesen Daten auf? Sie haben bereits gesehen, dass es eine Mischung aus Zeichenketten, Zahlen, Lücken und seltsamen Werten gibt, die Sie interpretieren müssen. -Welche Frage können Sie mit diesen Daten unter Verwendung einer Regressionstechnik stellen? Wie wäre es mit "Den Preis eines Kürbisses für den Verkauf in einem bestimmten Monat vorhersagen"? Wenn Sie die Daten erneut betrachten, gibt es einige Änderungen, die Sie vornehmen müssen, um die für die Aufgabe erforderliche Datenstruktur zu erstellen. +Welche Frage könnten Sie mit diesen Daten unter Verwendung einer Regressionsmethode stellen? Wie wäre es mit: "Den Preis eines Kürbisses für einen bestimmten Monat vorhersagen". Wenn Sie die Daten erneut betrachten, gibt es einige Änderungen, die Sie vornehmen müssen, um die für diese Aufgabe erforderliche Datenstruktur zu erstellen. -## Übung - Die Kürbisdaten analysieren +## Übung - Analysieren der Kürbis-Daten -Verwenden wir [Pandas](https://pandas.pydata.org/) (der Name steht für `Python Data Analysis`), ein sehr nützliches Tool zur Datenaufbereitung, um diese Kürbisdaten zu analysieren und vorzubereiten. +Verwenden wir [Pandas](https://pandas.pydata.org/), ein sehr nützliches Tool zur Datenanalyse, um diese Kürbis-Daten zu analysieren und vorzubereiten. ### Zuerst fehlende Daten überprüfen Zunächst müssen Sie Schritte unternehmen, um fehlende Daten zu überprüfen: -1. Konvertieren Sie die Daten in ein Monatsformat (dies sind US-Daten, das Format ist `MM/DD/YYYY`). +1. Konvertieren Sie die Daten in ein Monatsformat (es handelt sich um US-Daten, daher ist das Format `MM/DD/YYYY`). 2. Extrahieren Sie den Monat in eine neue Spalte. Öffnen Sie die Datei _notebook.ipynb_ in Visual Studio Code und importieren Sie die Tabelle in ein neues Pandas-Dataframe. @@ -81,20 +81,20 @@ Zunächst müssen Sie Schritte unternehmen, um fehlende Daten zu überprüfen: pumpkins.isnull().sum() ``` - Es gibt fehlende Daten, aber vielleicht spielt das für die Aufgabe keine Rolle. + Es gibt fehlende Daten, aber möglicherweise sind diese für die aktuelle Aufgabe nicht relevant. -1. Um Ihr Dataframe einfacher zu bearbeiten, wählen Sie nur die benötigten Spalten aus, indem Sie die Funktion `loc` verwenden, die aus dem ursprünglichen Dataframe eine Gruppe von Zeilen (als erster Parameter übergeben) und Spalten (als zweiter Parameter übergeben) extrahiert. Der Ausdruck `:` bedeutet in diesem Fall "alle Zeilen". +1. Um Ihr Dataframe einfacher zu gestalten, wählen Sie nur die benötigten Spalten aus, indem Sie die Funktion `loc` verwenden, die aus dem ursprünglichen Dataframe eine Gruppe von Zeilen (als erster Parameter übergeben) und Spalten (als zweiter Parameter übergeben) extrahiert. Der Ausdruck `:` im folgenden Fall bedeutet "alle Zeilen". ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] pumpkins = pumpkins.loc[:, columns_to_select] ``` -### Zweitens den Durchschnittspreis eines Kürbisses bestimmen +### Zweitens, den Durchschnittspreis eines Kürbisses bestimmen Überlegen Sie, wie Sie den Durchschnittspreis eines Kürbisses in einem bestimmten Monat bestimmen können. Welche Spalten würden Sie für diese Aufgabe auswählen? Hinweis: Sie benötigen 3 Spalten. -Lösung: Nehmen Sie den Durchschnitt der Spalten `Low Price` und `High Price`, um die neue Spalte Price zu füllen, und konvertieren Sie die Spalte Date so, dass nur der Monat angezeigt wird. Glücklicherweise gibt es laut der obigen Überprüfung keine fehlenden Daten für Daten oder Preise. +Lösung: Nehmen Sie den Durchschnitt der Spalten `Low Price` und `High Price`, um die neue Spalte `Price` zu füllen, und konvertieren Sie die Spalte `Date`, sodass nur der Monat angezeigt wird. Glücklicherweise gibt es laut der oben durchgeführten Überprüfung keine fehlenden Daten für Daten oder Preise. 1. Um den Durchschnitt zu berechnen, fügen Sie den folgenden Code hinzu: @@ -113,29 +113,29 @@ Lösung: Nehmen Sie den Durchschnitt der Spalten `Low Price` und `High Price`, u new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) ``` - Wenn Sie Ihr Dataframe ausdrucken, sehen Sie einen sauberen, aufgeräumten Datensatz, auf dem Sie Ihr neues Regressionsmodell aufbauen können. + Wenn Sie Ihr Dataframe ausgeben, sehen Sie einen sauberen, aufgeräumten Datensatz, auf dessen Grundlage Sie Ihr neues Regressionsmodell erstellen können. -### Aber Moment! Hier ist etwas Seltsames +### Aber Moment! Etwas ist hier seltsam Wenn Sie sich die Spalte `Package` ansehen, werden Kürbisse in vielen verschiedenen Konfigurationen verkauft. Einige werden in '1 1/9 bushel'-Maßen verkauft, andere in '1/2 bushel'-Maßen, einige pro Kürbis, einige pro Pfund und einige in großen Kisten mit unterschiedlichen Breiten. -> Kürbisse scheinen sehr schwer konsistent zu wiegen +> Kürbisse scheinen schwer konsistent zu wiegen -Wenn man sich die Originaldaten ansieht, ist es interessant, dass alles mit `Unit of Sale` gleich 'EACH' oder 'PER BIN' auch den `Package`-Typ pro Zoll, pro Bin oder 'each' hat. Kürbisse scheinen sehr schwer konsistent zu wiegen, daher filtern wir sie, indem wir nur Kürbisse mit dem String 'bushel' in ihrer `Package`-Spalte auswählen. +Wenn man sich die Originaldaten ansieht, ist es interessant, dass alles mit `Unit of Sale` gleich 'EACH' oder 'PER BIN' auch den `Package`-Typ pro Zoll, pro Kiste oder 'each' hat. Kürbisse scheinen schwer konsistent zu wiegen, daher filtern wir sie, indem wir nur Kürbisse mit dem String 'bushel' in ihrer `Package`-Spalte auswählen. -1. Fügen Sie einen Filter oben in der Datei unter dem ursprünglichen .csv-Import hinzu: +1. Fügen Sie einen Filter am Anfang der Datei unter dem ersten .csv-Import hinzu: ```python pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] ``` - Wenn Sie die Daten jetzt ausdrucken, sehen Sie, dass Sie nur die etwa 415 Zeilen mit Daten erhalten, die Kürbisse nach dem Bushel enthalten. + Wenn Sie die Daten jetzt ausgeben, sehen Sie, dass Sie nur die etwa 415 Zeilen mit Daten erhalten, die Kürbisse nach dem Bushel enthalten. ### Aber Moment! Es gibt noch etwas zu tun -Haben Sie bemerkt, dass die Bushel-Menge pro Zeile variiert? Sie müssen die Preise normalisieren, sodass Sie die Preise pro Bushel anzeigen. Machen Sie also einige Berechnungen, um dies zu standardisieren. +Haben Sie bemerkt, dass die Bushel-Menge pro Zeile variiert? Sie müssen die Preise normalisieren, sodass Sie die Preise pro Bushel anzeigen. Führen Sie also einige Berechnungen durch, um dies zu standardisieren. -1. Fügen Sie diese Zeilen nach dem Block hinzu, der das neue_pumpkins-Dataframe erstellt: +1. Fügen Sie diese Zeilen nach dem Block hinzu, der das `new_pumpkins`-Dataframe erstellt: ```python new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) @@ -143,31 +143,31 @@ Haben Sie bemerkt, dass die Bushel-Menge pro Zeile variiert? Sie müssen die Pre new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) ``` -✅ Laut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) hängt das Gewicht eines Bushels von der Art des Produkts ab, da es sich um eine Volumenmessung handelt. "Ein Bushel Tomaten soll beispielsweise 56 Pfund wiegen... Blätter und Grünzeug nehmen mehr Platz mit weniger Gewicht ein, sodass ein Bushel Spinat nur 20 Pfund wiegt." Das ist alles ziemlich kompliziert! Lassen Sie uns die Umrechnung von Bushel zu Pfund ignorieren und stattdessen nach Bushel berechnen. All diese Studien zu Bushels von Kürbissen zeigen jedoch, wie wichtig es ist, die Natur Ihrer Daten zu verstehen! +✅ Laut [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308) hängt das Gewicht eines Bushels von der Art des Produkts ab, da es sich um eine Volumenmessung handelt. "Ein Bushel Tomaten wiegt beispielsweise 56 Pfund... Blätter und Grünzeug nehmen mehr Platz mit weniger Gewicht ein, daher wiegt ein Bushel Spinat nur 20 Pfund." Das ist alles ziemlich kompliziert! Lassen Sie uns die Umrechnung von Bushel zu Pfund ignorieren und stattdessen den Preis pro Bushel berechnen. All diese Studien zu Bushels von Kürbissen zeigen jedoch, wie wichtig es ist, die Natur Ihrer Daten zu verstehen! -Jetzt können Sie die Preise pro Einheit basierend auf ihrer Bushel-Messung analysieren. Wenn Sie die Daten noch einmal ausdrucken, können Sie sehen, wie sie standardisiert sind. +Nun können Sie die Preise pro Einheit basierend auf ihrer Bushel-Messung analysieren. Wenn Sie die Daten noch einmal ausgeben, sehen Sie, wie sie standardisiert wurden. -✅ Haben Sie bemerkt, dass Kürbisse, die nach dem halben Bushel verkauft werden, sehr teuer sind? Können Sie herausfinden, warum? Hinweis: Kleine Kürbisse sind viel teurer als große, wahrscheinlich weil es so viel mehr von ihnen pro Bushel gibt, angesichts des ungenutzten Raums, den ein großer hohler Kürbis für Kuchen einnimmt. +✅ Haben Sie bemerkt, dass Kürbisse, die nach dem halben Bushel verkauft werden, sehr teuer sind? Können Sie herausfinden, warum? Hinweis: Kleine Kürbisse sind viel teurer als große, wahrscheinlich weil es viel mehr davon pro Bushel gibt, da ein großer hohler Kürbis viel Platz einnimmt. ## Visualisierungsstrategien -Ein Teil der Rolle eines Data Scientists besteht darin, die Qualität und Natur der Daten, mit denen er arbeitet, zu demonstrieren. Dazu erstellen sie oft interessante Visualisierungen, wie Diagramme, Grafiken und Charts, die verschiedene Aspekte der Daten zeigen. Auf diese Weise können sie visuell Beziehungen und Lücken aufzeigen, die sonst schwer zu erkennen wären. +Ein Teil der Aufgabe eines Datenwissenschaftlers besteht darin, die Qualität und Beschaffenheit der Daten, mit denen er arbeitet, zu demonstrieren. Dazu erstellen sie oft interessante Visualisierungen, wie Diagramme, Grafiken und Charts, die verschiedene Aspekte der Daten zeigen. Auf diese Weise können sie Beziehungen und Lücken visuell darstellen, die sonst schwer zu erkennen wären. [![ML für Anfänger - Wie man Daten mit Matplotlib visualisiert](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML für Anfänger - Wie man Daten mit Matplotlib visualisiert") > 🎥 Klicken Sie auf das Bild oben, um ein kurzes Video zur Visualisierung der Daten für diese Lektion anzusehen. -Visualisierungen können auch helfen, die am besten geeignete Machine-Learning-Technik für die Daten zu bestimmen. Ein Streudiagramm, das einer Linie zu folgen scheint, zeigt beispielsweise, dass die Daten ein guter Kandidat für eine lineare Regression sind. +Visualisierungen können auch dabei helfen, die am besten geeignete Machine-Learning-Technik für die Daten zu bestimmen. Ein Streudiagramm, das einer Linie zu folgen scheint, deutet beispielsweise darauf hin, dass die Daten gut für eine lineare Regression geeignet sind. Eine Datenvisualisierungsbibliothek, die gut in Jupyter-Notebooks funktioniert, ist [Matplotlib](https://matplotlib.org/) (die Sie auch in der vorherigen Lektion gesehen haben). -> Sammeln Sie mehr Erfahrung mit Datenvisualisierung in [diesen Tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). +> Erhalten Sie mehr Erfahrung mit der Datenvisualisierung in [diesen Tutorials](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). -## Übung - Mit Matplotlib experimentieren +## Übung - Experimentieren mit Matplotlib Versuchen Sie, einige grundlegende Diagramme zu erstellen, um das neue Dataframe anzuzeigen, das Sie gerade erstellt haben. Was würde ein einfaches Liniendiagramm zeigen? -1. Importieren Sie Matplotlib oben in der Datei, unter dem Pandas-Import: +1. Importieren Sie Matplotlib am Anfang der Datei, unter dem Pandas-Import: ```python import matplotlib.pyplot as plt @@ -183,15 +183,15 @@ Versuchen Sie, einige grundlegende Diagramme zu erstellen, um das neue Dataframe plt.show() ``` - ![Ein Streudiagramm, das die Beziehung zwischen Preis und Monat zeigt](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.de.png) + ![Ein Streudiagramm, das die Beziehung zwischen Preis und Monat zeigt](../../../../2-Regression/2-Data/images/scatterplot.png) Ist dies ein nützliches Diagramm? Überrascht Sie etwas daran? - Es ist nicht besonders nützlich, da es Ihre Daten nur als Punktverteilung in einem bestimmten Monat anzeigt. + Es ist nicht besonders nützlich, da es nur die Verteilung Ihrer Daten in einem bestimmten Monat anzeigt. ### Machen Sie es nützlich -Um Diagramme nützliche Daten anzeigen zu lassen, müssen Sie die Daten normalerweise irgendwie gruppieren. Versuchen wir, ein Diagramm zu erstellen, bei dem die y-Achse die Monate zeigt und die Daten die Verteilung der Daten darstellen. +Um Diagramme nützlich zu machen, müssen Sie die Daten in der Regel irgendwie gruppieren. Versuchen wir, ein Diagramm zu erstellen, bei dem die y-Achse die Monate zeigt und die Daten die Verteilung darstellen. 1. Fügen Sie eine Zelle hinzu, um ein gruppiertes Balkendiagramm zu erstellen: @@ -200,7 +200,7 @@ Um Diagramme nützliche Daten anzeigen zu lassen, müssen Sie die Daten normaler plt.ylabel("Pumpkin Price") ``` - ![Ein Balkendiagramm, das die Beziehung zwischen Preis und Monat zeigt](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.de.png) + ![Ein Balkendiagramm, das die Beziehung zwischen Preis und Monat zeigt](../../../../2-Regression/2-Data/images/barchart.png) Dies ist eine nützlichere Datenvisualisierung! Es scheint darauf hinzudeuten, dass die höchsten Preise für Kürbisse im September und Oktober auftreten. Entspricht das Ihrer Erwartung? Warum oder warum nicht? @@ -208,13 +208,13 @@ Um Diagramme nützliche Daten anzeigen zu lassen, müssen Sie die Daten normaler ## 🚀 Herausforderung -Erforschen Sie die verschiedenen Arten von Visualisierungen, die Matplotlib bietet. Welche Typen sind am besten für Regressionsprobleme geeignet? +Erforschen Sie die verschiedenen Arten von Visualisierungen, die Matplotlib bietet. Welche Arten sind am besten für Regressionsprobleme geeignet? -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [Quiz nach der Lektion](https://ff-quizzes.netlify.app/en/ml/) ## Rückblick & Selbststudium -Schauen Sie sich die vielen Möglichkeiten zur Visualisierung von Daten an. Erstellen Sie eine Liste der verschiedenen verfügbaren Bibliotheken und notieren Sie, welche für bestimmte Arten von Aufgaben am besten geeignet sind, z. B. 2D-Visualisierungen vs. 3D-Visualisierungen. Was entdecken Sie? +Schauen Sie sich die vielen Möglichkeiten zur Datenvisualisierung an. Erstellen Sie eine Liste der verschiedenen verfügbaren Bibliotheken und notieren Sie, welche für bestimmte Aufgaben am besten geeignet sind, z. B. 2D-Visualisierungen vs. 3D-Visualisierungen. Was entdecken Sie? ## Aufgabe @@ -223,4 +223,4 @@ Schauen Sie sich die vielen Möglichkeiten zur Visualisierung von Daten an. Erst --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/2-Regression/3-Linear/README.md b/translations/de/2-Regression/3-Linear/README.md index c51f5dd85..35ad7c6e2 100644 --- a/translations/de/2-Regression/3-Linear/README.md +++ b/translations/de/2-Regression/3-Linear/README.md @@ -1,64 +1,64 @@ # Erstellen eines Regressionsmodells mit Scikit-learn: Regression auf vier Arten -![Infografik zu linearer vs. polynomialer Regression](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.de.png) +![Infografik zu linearer vs. polynomialer Regression](../../../../2-Regression/3-Linear/images/linear-polynomial.png) > Infografik von [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) > ### [Diese Lektion ist auch in R verfügbar!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### Einführung -Bisher hast du untersucht, was Regression ist, anhand von Beispieldaten aus dem Kürbispreis-Datensatz, den wir in dieser Lektion verwenden werden. Du hast ihn auch mit Matplotlib visualisiert. +Bisher haben Sie untersucht, was Regression ist, anhand von Beispieldaten aus dem Kürbispreisdataset, das wir in dieser Lektion verwenden werden. Sie haben es auch mit Matplotlib visualisiert. -Jetzt bist du bereit, tiefer in die Regression für maschinelles Lernen einzutauchen. Während die Visualisierung hilft, Daten zu verstehen, liegt die wahre Stärke des maschinellen Lernens im _Trainieren von Modellen_. Modelle werden mit historischen Daten trainiert, um automatisch Datenabhängigkeiten zu erfassen, und sie ermöglichen es, Ergebnisse für neue Daten vorherzusagen, die das Modell zuvor nicht gesehen hat. +Jetzt sind Sie bereit, tiefer in die Regression für maschinelles Lernen einzutauchen. Während die Visualisierung Ihnen hilft, Daten zu verstehen, liegt die wahre Stärke des maschinellen Lernens im _Trainieren von Modellen_. Modelle werden mit historischen Daten trainiert, um automatisch Datenabhängigkeiten zu erfassen, und sie ermöglichen es Ihnen, Ergebnisse für neue Daten vorherzusagen, die das Modell zuvor nicht gesehen hat. -In dieser Lektion wirst du mehr über zwei Arten von Regression lernen: _einfache lineare Regression_ und _polynomiale Regression_, zusammen mit einigen mathematischen Grundlagen dieser Techniken. Diese Modelle ermöglichen es uns, Kürbispreise basierend auf verschiedenen Eingabedaten vorherzusagen. +In dieser Lektion lernen Sie mehr über zwei Arten von Regression: _einfache lineare Regression_ und _polynomiale Regression_, zusammen mit einigen mathematischen Grundlagen dieser Techniken. Diese Modelle ermöglichen es uns, Kürbispreise basierend auf verschiedenen Eingabedaten vorherzusagen. [![ML für Anfänger - Verständnis der linearen Regression](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML für Anfänger - Verständnis der linearen Regression") -> 🎥 Klicke auf das Bild oben für eine kurze Videoübersicht zur linearen Regression. +> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zur linearen Regression. -> Im gesamten Lehrplan gehen wir von minimalen Mathematikkenntnissen aus und versuchen, das Thema für Studierende aus anderen Bereichen zugänglich zu machen. Achte auf Notizen, 🧮 Hinweise, Diagramme und andere Lernhilfen, die das Verständnis erleichtern. +> Im gesamten Lehrplan gehen wir von minimalen mathematischen Kenntnissen aus und versuchen, das Thema für Studierende aus anderen Fachbereichen zugänglich zu machen. Achten Sie auf Notizen, 🧮 Hinweise, Diagramme und andere Lernhilfen, die das Verständnis erleichtern. ### Voraussetzungen -Du solltest inzwischen mit der Struktur der Kürbisdaten vertraut sein, die wir untersuchen. Du findest sie vorab geladen und bereinigt in der Datei _notebook.ipynb_ dieser Lektion. In der Datei wird der Kürbispreis pro Scheffel in einem neuen DataFrame angezeigt. Stelle sicher, dass du diese Notebooks in Visual Studio Code ausführen kannst. +Sie sollten inzwischen mit der Struktur der Kürbisdaten vertraut sein, die wir untersuchen. Sie finden sie vorab geladen und bereinigt in der Datei _notebook.ipynb_ dieser Lektion. In der Datei wird der Kürbispreis pro Scheffel in einem neuen DataFrame angezeigt. Stellen Sie sicher, dass Sie diese Notebooks in Visual Studio Code-Kernels ausführen können. ### Vorbereitung -Zur Erinnerung: Du lädst diese Daten, um Fragen dazu zu stellen. +Zur Erinnerung: Sie laden diese Daten, um Fragen dazu zu stellen. - Wann ist die beste Zeit, Kürbisse zu kaufen? - Welchen Preis kann ich für eine Kiste Miniaturkürbisse erwarten? - Sollte ich sie in halben Scheffelkörben oder in 1 1/9 Scheffelkisten kaufen? -Lass uns weiter in diese Daten eintauchen. +Lassen Sie uns weiter in diese Daten eintauchen. -In der vorherigen Lektion hast du einen Pandas-DataFrame erstellt und ihn mit einem Teil des ursprünglichen Datensatzes gefüllt, wobei du die Preise pro Scheffel standardisiert hast. Dadurch konntest du jedoch nur etwa 400 Datenpunkte sammeln, und das nur für die Herbstmonate. +In der vorherigen Lektion haben Sie einen Pandas-DataFrame erstellt und ihn mit einem Teil des ursprünglichen Datasets gefüllt, indem Sie die Preise pro Scheffel standardisiert haben. Dadurch konnten Sie jedoch nur etwa 400 Datenpunkte sammeln, und das nur für die Herbstmonate. -Schau dir die Daten an, die wir in dem begleitenden Notebook dieser Lektion vorab geladen haben. Die Daten sind vorab geladen, und ein erster Streudiagramm wurde erstellt, um Monatsdaten zu zeigen. Vielleicht können wir durch eine gründlichere Bereinigung der Daten noch mehr Details über die Natur der Daten erhalten. +Werfen Sie einen Blick auf die Daten, die wir in dem begleitenden Notebook dieser Lektion vorab geladen haben. Die Daten sind vorab geladen, und ein erster Streudiagramm wurde erstellt, um Monatsdaten darzustellen. Vielleicht können wir durch eine gründlichere Bereinigung der Daten noch mehr Details über die Natur der Daten erhalten. ## Eine lineare Regressionslinie -Wie du in Lektion 1 gelernt hast, besteht das Ziel einer linearen Regression darin, eine Linie zu zeichnen, um: +Wie Sie in Lektion 1 gelernt haben, besteht das Ziel einer linearen Regression darin, eine Linie zu zeichnen, um: - **Beziehungen zwischen Variablen zu zeigen**. Die Beziehung zwischen Variablen darzustellen. - **Vorhersagen zu treffen**. Genaue Vorhersagen darüber zu machen, wo ein neuer Datenpunkt im Verhältnis zu dieser Linie liegen würde. -Typisch für die **Methode der kleinsten Quadrate** ist es, diese Art von Linie zu zeichnen. Der Begriff "kleinste Quadrate" bedeutet, dass alle Datenpunkte um die Regressionslinie quadriert und dann addiert werden. Idealerweise ist diese Summe so klein wie möglich, da wir eine geringe Fehleranzahl oder `kleinste Quadrate` anstreben. +Typisch für die **Methode der kleinsten Quadrate** ist es, diese Art von Linie zu zeichnen. Der Begriff "kleinste Quadrate" bedeutet, dass alle Datenpunkte um die Regressionslinie quadriert und dann addiert werden. Idealerweise ist diese endgültige Summe so klein wie möglich, da wir eine geringe Anzahl von Fehlern oder `kleinste Quadrate` wünschen. Wir tun dies, da wir eine Linie modellieren möchten, die die geringste kumulative Entfernung von allen unseren Datenpunkten hat. Wir quadrieren die Terme vor dem Addieren, da uns die Größe der Abweichung wichtiger ist als ihre Richtung. > **🧮 Zeig mir die Mathematik** > -> Diese Linie, die als _Best-Fit-Linie_ bezeichnet wird, kann durch [eine Gleichung](https://en.wikipedia.org/wiki/Simple_linear_regression) ausgedrückt werden: +> Diese Linie, die als _Linie der besten Anpassung_ bezeichnet wird, kann durch [eine Gleichung](https://en.wikipedia.org/wiki/Simple_linear_regression) ausgedrückt werden: > > ``` > Y = a + bX @@ -66,53 +66,53 @@ Wir tun dies, da wir eine Linie modellieren möchten, die die geringste kumulati > > `X` ist die 'erklärende Variable'. `Y` ist die 'abhängige Variable'. Die Steigung der Linie ist `b`, und `a` ist der y-Achsenabschnitt, der den Wert von `Y` angibt, wenn `X = 0`. > ->![Berechnung der Steigung](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.de.png) +>![Berechnung der Steigung](../../../../2-Regression/3-Linear/images/slope.png) > -> Zuerst berechnen wir die Steigung `b`. Infografik von [Jen Looper](https://twitter.com/jenlooper) +> Zuerst berechnen Sie die Steigung `b`. Infografik von [Jen Looper](https://twitter.com/jenlooper) > -> Mit Bezug auf die ursprüngliche Frage zu den Kürbisdaten: "Vorhersage des Preises eines Kürbisses pro Scheffel nach Monat", würde `X` den Preis und `Y` den Verkaufsmonat darstellen. +> Mit anderen Worten, und bezogen auf die ursprüngliche Frage zu den Kürbisdaten: "Vorhersage des Preises eines Kürbisses pro Scheffel nach Monat", würde sich `X` auf den Preis und `Y` auf den Verkaufsmonat beziehen. > ->![Vervollständigung der Gleichung](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.de.png) +>![Vervollständigung der Gleichung](../../../../2-Regression/3-Linear/images/calculation.png) > -> Berechnung des Wertes von Y. Wenn du etwa 4 $ zahlst, muss es April sein! Infografik von [Jen Looper](https://twitter.com/jenlooper) +> Berechnen Sie den Wert von Y. Wenn Sie etwa 4 $ zahlen, muss es April sein! Infografik von [Jen Looper](https://twitter.com/jenlooper) > -> Die Mathematik, die die Linie berechnet, muss die Steigung der Linie zeigen, die auch vom Achsenabschnitt abhängt, oder wo `Y` liegt, wenn `X = 0`. +> Die Mathematik, die die Linie berechnet, muss die Steigung der Linie demonstrieren, die auch vom Achsenabschnitt abhängt, oder wo `Y` liegt, wenn `X = 0`. > -> Du kannst die Methode zur Berechnung dieser Werte auf der Website [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) beobachten. Besuche auch [diesen Rechner für die Methode der kleinsten Quadrate](https://www.mathsisfun.com/data/least-squares-calculator.html), um zu sehen, wie die Werte die Linie beeinflussen. +> Sie können die Methode zur Berechnung dieser Werte auf der Website [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) beobachten. Besuchen Sie auch [diesen Rechner für die Methode der kleinsten Quadrate](https://www.mathsisfun.com/data/least-squares-calculator.html), um zu sehen, wie die Werte der Zahlen die Linie beeinflussen. ## Korrelation -Ein weiterer Begriff, den du verstehen solltest, ist der **Korrelationskoeffizient** zwischen den gegebenen X- und Y-Variablen. Mit einem Streudiagramm kannst du diesen Koeffizienten schnell visualisieren. Ein Diagramm mit Datenpunkten, die in einer ordentlichen Linie verstreut sind, hat eine hohe Korrelation, während ein Diagramm mit Datenpunkten, die überall zwischen X und Y verstreut sind, eine niedrige Korrelation hat. +Ein weiterer Begriff, den Sie verstehen sollten, ist der **Korrelationskoeffizient** zwischen den gegebenen X- und Y-Variablen. Mit einem Streudiagramm können Sie diesen Koeffizienten schnell visualisieren. Ein Diagramm mit Datenpunkten, die in einer ordentlichen Linie verstreut sind, hat eine hohe Korrelation, aber ein Diagramm mit Datenpunkten, die überall zwischen X und Y verstreut sind, hat eine niedrige Korrelation. -Ein gutes lineares Regressionsmodell ist eines, das eine hohe (näher an 1 als an 0) Korrelation aufweist, basierend auf der Methode der kleinsten Quadrate mit einer Regressionslinie. +Ein gutes lineares Regressionsmodell ist eines, das einen hohen (näher an 1 als an 0) Korrelationskoeffizienten mit der Methode der kleinsten Quadrate und einer Regressionslinie hat. -✅ Führe das begleitende Notebook dieser Lektion aus und sieh dir das Streudiagramm von Monat zu Preis an. Scheint die Datenassoziation zwischen Monat und Preis für Kürbisverkäufe laut deiner visuellen Interpretation des Streudiagramms eine hohe oder niedrige Korrelation zu haben? Ändert sich das, wenn du eine feinere Messung anstelle von `Monat` verwendest, z. B. *Tag des Jahres* (d. h. Anzahl der Tage seit Jahresbeginn)? +✅ Führen Sie das begleitende Notebook dieser Lektion aus und betrachten Sie das Streudiagramm von Monat zu Preis. Scheint die Datenassoziation zwischen Monat und Preis für Kürbisverkäufe Ihrer visuellen Interpretation des Streudiagramms zufolge eine hohe oder niedrige Korrelation zu haben? Ändert sich das, wenn Sie eine feinere Messung anstelle von `Monat` verwenden, z. B. *Tag des Jahres* (d. h. Anzahl der Tage seit Jahresbeginn)? -Im folgenden Code nehmen wir an, dass wir die Daten bereinigt haben und einen DataFrame namens `new_pumpkins` erhalten haben, ähnlich dem folgenden: +Im folgenden Code nehmen wir an, dass wir die Daten bereinigt und einen DataFrame namens `new_pumpkins` erhalten haben, ähnlich dem folgenden: ID | Monat | TagDesJahres | Sorte | Stadt | Verpackung | Niedriger Preis | Hoher Preis | Preis ----|-------|--------------|-------|-------|------------|-----------------|-------------|------ -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 +---|-------|--------------|-------|-------|------------|-----------------|-------------|------- +70 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 Scheffelkisten | 15.0 | 15.0 | 13.636364 +71 | 9 | 267 | PIE TYPE | BALTIMORE | 1 1/9 Scheffelkisten | 18.0 | 18.0 | 16.363636 +72 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 Scheffelkisten | 18.0 | 18.0 | 16.363636 +73 | 10 | 274 | PIE TYPE | BALTIMORE | 1 1/9 Scheffelkisten | 17.0 | 17.0 | 15.454545 +74 | 10 | 281 | PIE TYPE | BALTIMORE | 1 1/9 Scheffelkisten | 15.0 | 15.0 | 13.636364 -> Der Code zur Bereinigung der Daten ist verfügbar in [`notebook.ipynb`](notebook.ipynb). Wir haben die gleichen Bereinigungsschritte wie in der vorherigen Lektion durchgeführt und die Spalte `TagDesJahres` mit folgendem Ausdruck berechnet: +> Der Code zur Bereinigung der Daten ist verfügbar in [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Wir haben die gleichen Bereinigungsschritte wie in der vorherigen Lektion durchgeführt und die Spalte `TagDesJahres` mit dem folgenden Ausdruck berechnet: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) ``` -Jetzt, da du die Mathematik hinter der linearen Regression verstehst, lass uns ein Regressionsmodell erstellen, um zu sehen, ob wir vorhersagen können, welches Kürbispaket die besten Kürbispreise hat. Jemand, der Kürbisse für einen Feiertags-Kürbisstand kauft, könnte diese Informationen benötigen, um seine Einkäufe von Kürbispaketen für den Stand zu optimieren. +Jetzt, da Sie die Mathematik hinter der linearen Regression verstanden haben, lassen Sie uns ein Regressionsmodell erstellen, um zu sehen, ob wir vorhersagen können, welches Kürbispaket die besten Kürbispreise haben wird. Jemand, der Kürbisse für einen Feiertags-Kürbisstand kauft, könnte diese Informationen benötigen, um seine Einkäufe von Kürbispaketen für den Stand zu optimieren. -## Suche nach Korrelation +## Auf der Suche nach Korrelation -[![ML für Anfänger - Suche nach Korrelation: Der Schlüssel zur linearen Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML für Anfänger - Suche nach Korrelation: Der Schlüssel zur linearen Regression") +[![ML für Anfänger - Auf der Suche nach Korrelation: Der Schlüssel zur linearen Regression](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "ML für Anfänger - Auf der Suche nach Korrelation: Der Schlüssel zur linearen Regression") -> 🎥 Klicke auf das Bild oben für eine kurze Videoübersicht zur Korrelation. +> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zur Korrelation. -Aus der vorherigen Lektion hast du wahrscheinlich gesehen, dass der Durchschnittspreis für verschiedene Monate wie folgt aussieht: +Aus der vorherigen Lektion haben Sie wahrscheinlich gesehen, dass der Durchschnittspreis für verschiedene Monate wie folgt aussieht: Durchschnittspreis nach Monat @@ -120,14 +120,14 @@ Dies deutet darauf hin, dass es eine gewisse Korrelation geben sollte, und wir k Streudiagramm von Preis vs. Tag des Jahres -Lass uns sehen, ob es eine Korrelation gibt, indem wir die Funktion `corr` verwenden: +Lassen Sie uns sehen, ob es eine Korrelation gibt, indem wir die Funktion `corr` verwenden: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -Es sieht so aus, als ob die Korrelation ziemlich gering ist, -0.15 für `Monat` und -0.17 für `TagDesJahres`, aber es könnte eine andere wichtige Beziehung geben. Es scheint, dass es verschiedene Preiscluster gibt, die mit verschiedenen Kürbissorten korrespondieren. Um diese Hypothese zu bestätigen, lass uns jede Kürbiskategorie mit einer anderen Farbe darstellen. Indem wir einen `ax`-Parameter an die `scatter`-Plot-Funktion übergeben, können wir alle Punkte im selben Diagramm darstellen: +Es sieht so aus, als ob die Korrelation ziemlich gering ist, -0.15 nach `Monat` und -0.17 nach `TagDesMonats`, aber es könnte eine andere wichtige Beziehung geben. Es scheint, dass es verschiedene Preiscluster gibt, die mit verschiedenen Kürbissorten korrespondieren. Um diese Hypothese zu bestätigen, lassen Sie uns jede Kürbiskategorie mit einer anderen Farbe darstellen. Indem wir einen `ax`-Parameter an die `scatter`-Plot-Funktion übergeben, können wir alle Punkte im selben Diagramm darstellen: ```python ax=None @@ -147,7 +147,7 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') Balkendiagramm von Preis vs. Sorte -Lass uns für den Moment nur auf eine Kürbissorte, den 'Pie Type', fokussieren und sehen, welchen Einfluss das Datum auf den Preis hat: +Lassen Sie uns uns vorerst nur auf eine Kürbissorte, den 'Pie Type', konzentrieren und sehen, welchen Einfluss das Datum auf den Preis hat: ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] @@ -157,7 +157,7 @@ pie_pumpkins.plot.scatter('DayOfYear','Price') Wenn wir jetzt die Korrelation zwischen `Preis` und `TagDesJahres` mit der Funktion `corr` berechnen, erhalten wir etwa `-0.27` - was bedeutet, dass das Trainieren eines Vorhersagemodells sinnvoll ist. -> Bevor wir ein lineares Regressionsmodell trainieren, ist es wichtig sicherzustellen, dass unsere Daten sauber sind. Lineare Regression funktioniert nicht gut mit fehlenden Werten, daher macht es Sinn, alle leeren Zellen zu entfernen: +> Bevor Sie ein lineares Regressionsmodell trainieren, ist es wichtig sicherzustellen, dass Ihre Daten sauber sind. Lineare Regression funktioniert nicht gut mit fehlenden Werten, daher ist es sinnvoll, alle leeren Zellen zu entfernen: ```python pie_pumpkins.dropna(inplace=True) @@ -170,7 +170,7 @@ Eine andere Herangehensweise wäre, diese leeren Werte mit den Mittelwerten der [![ML für Anfänger - Lineare und polynomiale Regression mit Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "ML für Anfänger - Lineare und polynomiale Regression mit Scikit-learn") -> 🎥 Klicke auf das Bild oben für eine kurze Videoübersicht zur linearen und polynomialen Regression. +> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zur linearen und polynomialen Regression. Um unser lineares Regressionsmodell zu trainieren, verwenden wir die **Scikit-learn**-Bibliothek. @@ -187,7 +187,7 @@ X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Beachte, dass wir `reshape` auf die Eingabedaten anwenden mussten, damit das Paket für lineare Regression sie korrekt versteht. Lineare Regression erwartet ein 2D-Array als Eingabe, wobei jede Zeile des Arrays einem Vektor von Eingabefeatures entspricht. In unserem Fall, da wir nur eine Eingabe haben, benötigen wir ein Array mit der Form N×1, wobei N die Datensatzgröße ist. +> Beachten Sie, dass wir `reshape` auf die Eingabedaten anwenden mussten, damit das Paket für lineare Regression sie korrekt versteht. Lineare Regression erwartet ein 2D-Array als Eingabe, wobei jede Zeile des Arrays einem Vektor von Eingabefeatures entspricht. In unserem Fall, da wir nur eine Eingabe haben, benötigen wir ein Array mit der Form N×1, wobei N die Größe des Datasets ist. Dann müssen wir die Daten in Trainings- und Testdatensätze aufteilen, damit wir unser Modell nach dem Training validieren können: @@ -195,14 +195,14 @@ Dann müssen wir die Daten in Trainings- und Testdatensätze aufteilen, damit wi X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -Das eigentliche Training des linearen Regressionsmodells dauert nur zwei Codezeilen. Wir definieren das `LinearRegression`-Objekt und passen es mit der Methode `fit` an unsere Daten an: +Schließlich dauert das Training des eigentlichen linearen Regressionsmodells nur zwei Codezeilen. Wir definieren das `LinearRegression`-Objekt und passen es mit der Methode `fit` an unsere Daten an: ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -Das `LinearRegression`-Objekt enthält nach dem `fit`-Vorgang alle Koeffizienten der Regression, die über die Eigenschaft `.coef_` abgerufen werden können. In unserem Fall gibt es nur einen Koeffizienten, der etwa `-0.017` sein sollte. Das bedeutet, dass die Preise mit der Zeit leicht sinken, aber nicht zu stark, etwa um 2 Cent pro Tag. Wir können auch den Schnittpunkt der Regression mit der Y-Achse über `lin_reg.intercept_` abrufen - er wird in unserem Fall etwa `21` sein, was den Preis zu Jahresbeginn angibt. +Das `LinearRegression`-Objekt enthält nach dem `fit`-Vorgang alle Koeffizienten der Regression, die über die Eigenschaft `.coef_` abgerufen werden können. In unserem Fall gibt es nur einen Koeffizienten, der etwa `-0.017` sein sollte. Das bedeutet, dass die Preise mit der Zeit etwas sinken, aber nicht zu stark, etwa um 2 Cent pro Tag. Wir können auch den Schnittpunkt der Regression mit der Y-Achse über `lin_reg.intercept_` abrufen - er wird in unserem Fall etwa `21` betragen, was den Preis zu Jahresbeginn angibt. Um zu sehen, wie genau unser Modell ist, können wir die Preise auf einem Testdatensatz vorhersagen und dann messen, wie nah unsere Vorhersagen an den erwarteten Werten liegen. Dies kann mit der Mean-Square-Error (MSE)-Metrik erfolgen, die den Mittelwert aller quadrierten Unterschiede zwischen erwartetem und vorhergesagtem Wert darstellt. @@ -212,20 +212,20 @@ 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}%)') ``` -Unser Fehler scheint sich auf zwei Punkte zu konzentrieren, was etwa 17 % entspricht. Nicht besonders gut. Ein weiterer Indikator für die Modellqualität ist der **Bestimmtheitskoeffizient**, der wie folgt berechnet werden kann: +Unser Fehler scheint sich auf 2 Punkte zu konzentrieren, was etwa 17 % entspricht. Nicht besonders gut. Ein weiterer Indikator für die Modellqualität ist der **Bestimmtheitskoeffizient**, der wie folgt berechnet werden kann: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) -``` -Wenn der Wert 0 ist, bedeutet das, dass das Modell die Eingabedaten nicht berücksichtigt und als *schlechtester linearer Prädiktor* agiert, der einfach den Mittelwert des Ergebnisses darstellt. Der Wert 1 bedeutet, dass wir alle erwarteten Ausgaben perfekt vorhersagen können. In unserem Fall liegt der Koeffizient bei etwa 0,06, was ziemlich niedrig ist. +``` +Wenn der Wert 0 ist, bedeutet das, dass das Modell die Eingabedaten nicht berücksichtigt und als *schlechtester linearer Prädiktor* agiert, was einfach der Mittelwert des Ergebnisses ist. Ein Wert von 1 bedeutet, dass wir alle erwarteten Ausgaben perfekt vorhersagen können. In unserem Fall liegt der Koeffizient bei etwa 0,06, was ziemlich niedrig ist. -Wir können auch die Testdaten zusammen mit der Regressionslinie darstellen, um besser zu sehen, wie die Regression in unserem Fall funktioniert: +Wir können auch die Testdaten zusammen mit der Regressionslinie plotten, um besser zu sehen, wie die Regression in unserem Fall funktioniert: ```python plt.scatter(X_test,y_test) plt.plot(X_test,pred) -``` +``` Lineare Regression @@ -235,11 +235,11 @@ Eine andere Art der linearen Regression ist die polynomiale Regression. Während ✅ Hier sind [einige weitere Beispiele](https://online.stat.psu.edu/stat501/lesson/9/9.8) für Daten, die polynomiale Regression verwenden könnten. -Betrachten Sie erneut die Beziehung zwischen Datum und Preis. Sieht dieses Streudiagramm so aus, als sollte es unbedingt durch eine gerade Linie analysiert werden? Können Preise nicht schwanken? In diesem Fall können Sie polynomiale Regression ausprobieren. +Schauen Sie sich die Beziehung zwischen Datum und Preis noch einmal an. Sieht dieses Streudiagramm so aus, als sollte es unbedingt durch eine gerade Linie analysiert werden? Können Preise nicht schwanken? In diesem Fall können Sie polynomiale Regression ausprobieren. ✅ Polynome sind mathematische Ausdrücke, die aus einer oder mehreren Variablen und Koeffizienten bestehen können. -Die polynomiale Regression erstellt eine gekrümmte Linie, um nichtlineare Daten besser anzupassen. In unserem Fall sollten wir, wenn wir eine quadrierte `DayOfYear`-Variable in die Eingabedaten aufnehmen, unsere Daten mit einer parabolischen Kurve anpassen können, die zu einem bestimmten Zeitpunkt im Jahr ein Minimum erreicht. +Die polynomiale Regression erstellt eine gekrümmte Linie, um nichtlineare Daten besser anzupassen. In unserem Fall sollten wir, wenn wir eine quadrierte `DayOfYear`-Variable in die Eingabedaten aufnehmen, unsere Daten mit einer parabolischen Kurve anpassen können, die an einem bestimmten Punkt im Jahr ein Minimum hat. Scikit-learn enthält eine hilfreiche [Pipeline-API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline), um verschiedene Schritte der Datenverarbeitung zu kombinieren. Eine **Pipeline** ist eine Kette von **Schätzern**. In unserem Fall erstellen wir eine Pipeline, die zuerst polynomiale Merkmale zu unserem Modell hinzufügt und dann die Regression trainiert: @@ -250,25 +250,25 @@ from sklearn.pipeline import make_pipeline pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) -``` +``` -Die Verwendung von `PolynomialFeatures(2)` bedeutet, dass wir alle Polynome zweiten Grades aus den Eingabedaten einbeziehen. In unserem Fall bedeutet das einfach `DayOfYear`2, aber bei zwei Eingabevariablen X und Y fügt dies X2, XY und Y2 hinzu. Wir können auch Polynome höheren Grades verwenden, wenn wir möchten. +Die Verwendung von `PolynomialFeatures(2)` bedeutet, dass wir alle Polynome zweiten Grades aus den Eingabedaten einbeziehen. In unserem Fall bedeutet das einfach `DayOfYear`2, aber bei zwei Eingabevariablen X und Y würde dies X2, XY und Y2 hinzufügen. Wir können auch Polynome höheren Grades verwenden, wenn wir möchten. -Pipelines können genauso verwendet werden wie das ursprüngliche `LinearRegression`-Objekt, d. h. wir können die Pipeline `fit`ten und dann `predict` verwenden, um die Vorhersageergebnisse zu erhalten. Hier ist das Diagramm, das Testdaten und die Annäherungskurve zeigt: +Pipelines können genauso verwendet werden wie das ursprüngliche `LinearRegression`-Objekt, d. h. wir können die Pipeline `fit`ten und dann `predict` verwenden, um die Vorhersageergebnisse zu erhalten. Hier ist das Diagramm, das die Testdaten und die Annäherungskurve zeigt: Polynomiale Regression -Mit der polynomialen Regression können wir einen etwas niedrigeren MSE und einen höheren Bestimmtheitskoeffizienten erzielen, aber nicht signifikant. Wir müssen andere Merkmale berücksichtigen! +Mit polynomialer Regression können wir einen etwas niedrigeren MSE und eine höhere Bestimmtheit erreichen, aber nicht signifikant. Wir müssen andere Merkmale berücksichtigen! -> Sie können sehen, dass die minimalen Kürbispreise irgendwo um Halloween beobachtet werden. Wie können Sie das erklären? +> Sie können sehen, dass die minimalen Kürbispreise irgendwo um Halloween herum beobachtet werden. Wie können Sie das erklären? -🎃 Herzlichen Glückwunsch, Sie haben gerade ein Modell erstellt, das helfen kann, den Preis von Kürbissen für Kuchen vorherzusagen. Sie können wahrscheinlich dasselbe Verfahren für alle Kürbissorten wiederholen, aber das wäre mühsam. Lernen wir jetzt, wie man Kürbissorten in unser Modell einbezieht! +🎃 Herzlichen Glückwunsch, Sie haben gerade ein Modell erstellt, das helfen kann, den Preis von Kürbissen für Kuchen vorherzusagen. Sie könnten wahrscheinlich das gleiche Verfahren für alle Kürbissorten wiederholen, aber das wäre mühsam. Lernen wir jetzt, wie man Kürbissorten in unser Modell einbezieht! ## Kategorische Merkmale In der idealen Welt möchten wir in der Lage sein, Preise für verschiedene Kürbissorten mit demselben Modell vorherzusagen. Die Spalte `Variety` unterscheidet sich jedoch etwas von Spalten wie `Month`, da sie nicht-numerische Werte enthält. Solche Spalten werden als **kategorisch** bezeichnet. -[![ML für Anfänger - Kategorische Merkmalsvorhersagen mit linearer Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML für Anfänger - Kategorische Merkmalsvorhersagen mit linearer Regression") +[![ML für Anfänger – Kategorische Merkmalsvorhersagen mit linearer Regression](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML für Anfänger – Kategorische Merkmalsvorhersagen mit linearer Regression") > 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zur Verwendung kategorischer Merkmale. @@ -276,34 +276,34 @@ Hier können Sie sehen, wie der Durchschnittspreis von der Sorte abhängt: Durchschnittspreis nach Sorte -Um die Sorte zu berücksichtigen, müssen wir sie zuerst in numerische Form umwandeln, oder **codieren**. Es gibt mehrere Möglichkeiten, dies zu tun: +Um die Sorte zu berücksichtigen, müssen wir sie zuerst in numerische Form umwandeln, also **kodieren**. Es gibt mehrere Möglichkeiten, dies zu tun: -* Einfache **numerische Codierung** erstellt eine Tabelle mit verschiedenen Sorten und ersetzt dann den Sortennamen durch einen Index in dieser Tabelle. Dies ist keine gute Idee für die lineare Regression, da die lineare Regression den tatsächlichen numerischen Wert des Index nimmt und ihn mit einem Koeffizienten multipliziert, um ihn zum Ergebnis hinzuzufügen. In unserem Fall ist die Beziehung zwischen der Indexnummer und dem Preis eindeutig nicht linear, selbst wenn wir sicherstellen, dass die Indizes in einer bestimmten Reihenfolge angeordnet sind. -* **One-hot-Codierung** ersetzt die Spalte `Variety` durch 4 verschiedene Spalten, eine für jede Sorte. Jede Spalte enthält `1`, wenn die entsprechende Zeile einer bestimmten Sorte entspricht, und `0` andernfalls. Das bedeutet, dass es in der linearen Regression vier Koeffizienten gibt, einen für jede Kürbissorte, die für den "Startpreis" (oder eher "Zusatzpreis") für diese bestimmte Sorte verantwortlich sind. +* Eine einfache **numerische Kodierung** erstellt eine Tabelle mit verschiedenen Sorten und ersetzt dann den Sortennamen durch einen Index in dieser Tabelle. Dies ist keine gute Idee für die lineare Regression, da die lineare Regression den tatsächlichen numerischen Wert des Indexes nimmt und ihn mit einem Koeffizienten multipliziert, um ihn zum Ergebnis hinzuzufügen. In unserem Fall ist die Beziehung zwischen der Indexnummer und dem Preis eindeutig nicht linear, selbst wenn wir sicherstellen, dass die Indizes in einer bestimmten Reihenfolge angeordnet sind. +* **One-Hot-Encoding** ersetzt die Spalte `Variety` durch 4 verschiedene Spalten, eine für jede Sorte. Jede Spalte enthält `1`, wenn die entsprechende Zeile einer bestimmten Sorte entspricht, und `0` andernfalls. Das bedeutet, dass es in der linearen Regression vier Koeffizienten gibt, einen für jede Kürbissorte, die für den "Startpreis" (oder eher den "zusätzlichen Preis") für diese bestimmte Sorte verantwortlich sind. -Der folgende Code zeigt, wie wir eine Sorte one-hot codieren können: +Der folgende Code zeigt, wie wir eine Sorte mit One-Hot-Encoding kodieren können: ```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 + 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 -Um die lineare Regression mit einer one-hot codierten Sorte als Eingabe zu trainieren, müssen wir nur die `X`- und `y`-Daten korrekt initialisieren: +Um die lineare Regression mit One-Hot-kodierter Sorte als Eingabe zu trainieren, müssen wir nur die `X`- und `y`-Daten korrekt initialisieren: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] -``` +``` Der Rest des Codes ist derselbe wie der, den wir oben verwendet haben, um die lineare Regression zu trainieren. Wenn Sie es ausprobieren, werden Sie sehen, dass der mittlere quadratische Fehler ungefähr gleich bleibt, aber wir erhalten einen viel höheren Bestimmtheitskoeffizienten (~77 %). Um noch genauere Vorhersagen zu erhalten, können wir mehr kategorische Merkmale sowie numerische Merkmale wie `Month` oder `DayOfYear` berücksichtigen. Um ein großes Array von Merkmalen zu erhalten, können wir `join` verwenden: @@ -313,13 +313,13 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .join(pd.get_dummies(new_pumpkins['City'])) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] -``` +``` -Hier berücksichtigen wir auch `City` und `Package`-Typ, was uns einen MSE von 2,84 (10 %) und einen Bestimmtheitskoeffizienten von 0,94 gibt! +Hier berücksichtigen wir auch `City` und `Package`-Typ, was uns einen MSE von 2,84 (10 %) und eine Bestimmtheit von 0,94 gibt! -## Alles zusammenführen +## Alles zusammenfügen -Um das beste Modell zu erstellen, können wir kombinierte (one-hot codierte kategorische + numerische) Daten aus dem obigen Beispiel zusammen mit polynomialer Regression verwenden. Hier ist der vollständige Code zu Ihrer Bequemlichkeit: +Um das beste Modell zu erstellen, können wir kombinierte (One-Hot-kodierte kategorische + numerische) Daten aus dem obigen Beispiel zusammen mit polynomialer Regression verwenden. Hier ist der vollständige Code für Ihre Bequemlichkeit: ```python # set up training data @@ -345,36 +345,37 @@ 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) -``` +``` Dies sollte uns den besten Bestimmtheitskoeffizienten von fast 97 % und MSE=2,23 (~8 % Vorhersagefehler) geben. -| Modell | MSE | Bestimmtheitskoeffizient | -|-------|-----|---------------------------| -| `DayOfYear` Linear | 2,77 (17,2 %) | 0,07 | -| `DayOfYear` Polynomial | 2,73 (17,0 %) | 0,08 | -| `Variety` Linear | 5,24 (19,7 %) | 0,77 | -| Alle Merkmale Linear | 2,84 (10,5 %) | 0,94 | -| Alle Merkmale Polynomial | 2,23 (8,25 %) | 0,97 | +| Modell | MSE | Bestimmtheit | +|--------|-----|--------------| +| `DayOfYear` Linear | 2,77 (17,2 %) | 0,07 | +| `DayOfYear` Polynomial | 2,73 (17,0 %) | 0,08 | +| `Variety` Linear | 5,24 (19,7 %) | 0,77 | +| Alle Merkmale Linear | 2,84 (10,5 %) | 0,94 | +| Alle Merkmale Polynomial | 2,23 (8,25 %) | 0,97 | 🏆 Gut gemacht! Sie haben in einer Lektion vier Regressionsmodelle erstellt und die Modellqualität auf 97 % verbessert. Im letzten Abschnitt zur Regression lernen Sie die logistische Regression kennen, um Kategorien zu bestimmen. --- + ## 🚀 Herausforderung -Testen Sie mehrere verschiedene Variablen in diesem Notebook, um zu sehen, wie die Korrelation mit der Modellgenauigkeit zusammenhängt. +Testen Sie in diesem Notebook verschiedene Variablen, um zu sehen, wie die Korrelation mit der Modellgenauigkeit zusammenhängt. -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) -## Überprüfung & Selbststudium +## Rückblick & Selbststudium -In dieser Lektion haben wir über lineare Regression gelernt. Es gibt andere wichtige Arten der Regression. Lesen Sie über Stepwise-, Ridge-, Lasso- und Elasticnet-Techniken. Ein guter Kurs, um mehr zu lernen, ist der [Stanford Statistical Learning Kurs](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). +In dieser Lektion haben wir über lineare Regression gelernt. Es gibt andere wichtige Arten der Regression. Lesen Sie über Stepwise-, Ridge-, Lasso- und Elasticnet-Techniken. Ein guter Kurs, um mehr zu lernen, ist der [Stanford Statistical Learning Course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). ## Aufgabe -[Erstellen Sie ein Modell](assignment.md) +[Erstellen Sie ein Modell](assignment.md) --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/2-Regression/4-Logistic/README.md b/translations/de/2-Regression/4-Logistic/README.md index bb777b080..121e8cc87 100644 --- a/translations/de/2-Regression/4-Logistic/README.md +++ b/translations/de/2-Regression/4-Logistic/README.md @@ -1,23 +1,23 @@ # Logistische Regression zur Vorhersage von Kategorien -![Infografik: Logistische vs. Lineare Regression](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.de.png) +![Infografik: Logistische vs. Lineare Regression](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/) > ### [Diese Lektion ist auch in R verfügbar!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) ## Einführung -In dieser letzten Lektion über Regression, eine der grundlegenden _klassischen_ ML-Techniken, werfen wir einen Blick auf die logistische Regression. Diese Technik wird verwendet, um Muster zu erkennen und binäre Kategorien vorherzusagen. Ist diese Süßigkeit Schokolade oder nicht? Ist diese Krankheit ansteckend oder nicht? Wird dieser Kunde dieses Produkt wählen oder nicht? +In dieser letzten Lektion zur Regression, einer der grundlegenden _klassischen_ ML-Techniken, werfen wir einen Blick auf die logistische Regression. Diese Technik wird verwendet, um Muster zu erkennen und binäre Kategorien vorherzusagen. Ist diese Süßigkeit Schokolade oder nicht? Ist diese Krankheit ansteckend oder nicht? Wird dieser Kunde dieses Produkt wählen oder nicht? In dieser Lektion lernen Sie: @@ -26,57 +26,57 @@ In dieser Lektion lernen Sie: ✅ Vertiefen Sie Ihr Verständnis für diese Art der Regression in diesem [Learn-Modul](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) -## Voraussetzung +## Voraussetzungen Nachdem wir mit den Kürbisdaten gearbeitet haben, sind wir nun vertraut genug, um zu erkennen, dass es eine binäre Kategorie gibt, mit der wir arbeiten können: `Color`. -Lassen Sie uns ein Modell der logistischen Regression erstellen, um vorherzusagen, _welche Farbe ein bestimmter Kürbis wahrscheinlich hat_ (orange 🎃 oder weiß 👻), basierend auf einigen Variablen. +Lassen Sie uns ein Modell der logistischen Regression erstellen, um vorherzusagen, _welche Farbe ein gegebener Kürbis wahrscheinlich hat_ (orange 🎃 oder weiß 👻), basierend auf einigen Variablen. -> Warum sprechen wir über binäre Klassifikation in einer Lektion über Regression? Nur aus sprachlicher Bequemlichkeit, da die logistische Regression [eigentlich eine Klassifikationsmethode](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression) ist, wenn auch eine lineare. Lernen Sie in der nächsten Lektion weitere Methoden zur Klassifikation von Daten kennen. +> Warum sprechen wir in einer Lektion über Regression über binäre Klassifikation? Nur aus sprachlicher Bequemlichkeit, da die logistische Regression [eigentlich eine Klassifikationsmethode](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression) ist, wenn auch eine lineare. Lernen Sie in der nächsten Lektion weitere Methoden zur Klassifikation von Daten kennen. ## Die Frage definieren -Für unsere Zwecke drücken wir dies als Binärwert aus: 'Weiß' oder 'Nicht Weiß'. Es gibt auch eine 'gestreifte' Kategorie in unserem Datensatz, aber es gibt nur wenige Instanzen davon, daher werden wir sie nicht verwenden. Sie verschwindet ohnehin, sobald wir Nullwerte aus dem Datensatz entfernen. +Für unsere Zwecke formulieren wir dies als Binärfrage: 'Weiß' oder 'Nicht Weiß'. Es gibt auch eine 'gestreifte' Kategorie in unserem Datensatz, aber es gibt nur wenige Instanzen davon, sodass wir sie nicht verwenden. Sie verschwindet ohnehin, sobald wir Nullwerte aus dem Datensatz entfernen. -> 🎃 Fun Fact: Wir nennen weiße Kürbisse manchmal 'Geister'-Kürbisse. Sie sind nicht sehr leicht zu schnitzen, daher sind sie nicht so beliebt wie die orangefarbenen, aber sie sehen cool aus! Wir könnten unsere Frage also auch so formulieren: 'Geist' oder 'Nicht Geist'. 👻 +> 🎃 Fun Fact: Weiße Kürbisse werden manchmal als 'Geisterkürbisse' bezeichnet. Sie sind nicht sehr leicht zu schnitzen, daher sind sie nicht so beliebt wie die orangefarbenen, aber sie sehen cool aus! Wir könnten unsere Frage also auch so formulieren: 'Geist' oder 'Nicht Geist'. 👻 ## Über logistische Regression -Die logistische Regression unterscheidet sich in einigen wichtigen Punkten von der linearen Regression, die Sie zuvor gelernt haben. +Die logistische Regression unterscheidet sich in einigen wichtigen Punkten von der linearen Regression, die Sie zuvor kennengelernt haben. [![ML für Anfänger - Verständnis der logistischen Regression für maschinelles Lernen](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML für Anfänger - Verständnis der logistischen Regression für maschinelles Lernen") -> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht über die logistische Regression. +> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zur logistischen Regression. ### Binäre Klassifikation -Die logistische Regression bietet nicht die gleichen Funktionen wie die lineare Regression. Erstere bietet eine Vorhersage über eine binäre Kategorie ("weiß oder nicht weiß"), während letztere kontinuierliche Werte vorhersagen kann, z. B. basierend auf der Herkunft eines Kürbisses und der Erntezeit, _wie stark sein Preis steigen wird_. +Die logistische Regression bietet nicht dieselben Funktionen wie die lineare Regression. Erstere liefert eine Vorhersage über eine binäre Kategorie ("weiß oder nicht weiß"), während letztere kontinuierliche Werte vorhersagen kann, z. B. wie stark der Preis eines Kürbisses basierend auf seinem Ursprung und der Erntezeit steigen wird. -![Kürbis-Klassifikationsmodell](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.de.png) +![Kürbis-Klassifikationsmodell](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) > Infografik von [Dasani Madipalli](https://twitter.com/dasani_decoded) ### Andere Klassifikationen -Es gibt andere Arten der logistischen Regression, einschließlich multinomialer und ordinaler: +Es gibt andere Arten der logistischen Regression, darunter multinomial und ordinal: - **Multinomial**, bei der es mehr als eine Kategorie gibt - "Orange, Weiß und Gestreift". -- **Ordinal**, bei der geordnete Kategorien verwendet werden, nützlich, wenn wir unsere Ergebnisse logisch ordnen möchten, wie unsere Kürbisse, die nach einer begrenzten Anzahl von Größen geordnet sind (mini, sm, med, lg, xl, xxl). +- **Ordinal**, bei der es geordnete Kategorien gibt, nützlich, wenn wir unsere Ergebnisse logisch ordnen möchten, wie z. B. unsere Kürbisse, die nach einer endlichen Anzahl von Größen (mini, sm, med, lg, xl, xxl) geordnet sind. -![Multinomiale vs. ordinale Regression](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.de.png) +![Multinomiale vs. ordinale Regression](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) -### Variablen müssen NICHT korrelieren +### Variablen MÜSSEN NICHT korrelieren -Erinnern Sie sich daran, wie die lineare Regression mit stärker korrelierten Variablen besser funktionierte? Die logistische Regression ist das Gegenteil – die Variablen müssen nicht übereinstimmen. Das funktioniert für diese Daten, die nur schwache Korrelationen aufweisen. +Erinnern Sie sich, wie die lineare Regression mit stärker korrelierten Variablen besser funktionierte? Bei der logistischen Regression ist das Gegenteil der Fall – die Variablen müssen nicht übereinstimmen. Das funktioniert gut für diese Daten, die nur schwache Korrelationen aufweisen. ### Sie benötigen viele saubere Daten Die logistische Regression liefert genauere Ergebnisse, wenn Sie mehr Daten verwenden; unser kleiner Datensatz ist für diese Aufgabe nicht optimal, also behalten Sie das im Hinterkopf. -[![ML für Anfänger - Datenanalyse und -vorbereitung für logistische Regression](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML für Anfänger - Datenanalyse und -vorbereitung für logistische Regression") +[![ML für Anfänger - Datenanalyse und Vorbereitung für logistische Regression](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML für Anfänger - Datenanalyse und Vorbereitung für logistische Regression") -> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht über die Datenvorbereitung für die lineare Regression. +> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zur Datenvorbereitung für die lineare Regression. -✅ Denken Sie über die Arten von Daten nach, die sich gut für die logistische Regression eignen würden. +✅ Überlegen Sie, welche Arten von Daten sich gut für die logistische Regression eignen würden. ## Übung - Daten bereinigen @@ -92,17 +92,17 @@ Bereinigen Sie zunächst die Daten ein wenig, indem Sie Nullwerte entfernen und pumpkins.dropna(inplace=True) ``` - Sie können jederzeit einen Blick auf Ihren neuen Dataframe werfen: + Sie können sich jederzeit Ihren neuen DataFrame ansehen: ```python pumpkins.info ``` -### Visualisierung - kategorisches Diagramm +### Visualisierung - Kategorisches Diagramm -Bis jetzt haben Sie das [Starter-Notebook](./notebook.ipynb) mit Kürbisdaten erneut geladen und bereinigt, sodass ein Datensatz mit einigen Variablen, einschließlich `Color`, erhalten bleibt. Lassen Sie uns den Dataframe im Notebook mit einer anderen Bibliothek visualisieren: [Seaborn](https://seaborn.pydata.org/index.html), das auf Matplotlib basiert, das wir zuvor verwendet haben. +Bis jetzt haben Sie das [Starter-Notebook](../../../../2-Regression/4-Logistic/notebook.ipynb) mit Kürbisdaten geladen und bereinigt, sodass ein Datensatz mit einigen Variablen, einschließlich `Color`, erhalten bleibt. Lassen Sie uns den DataFrame im Notebook mit einer anderen Bibliothek visualisieren: [Seaborn](https://seaborn.pydata.org/index.html), das auf Matplotlib basiert, das wir zuvor verwendet haben. -Seaborn bietet einige interessante Möglichkeiten, Ihre Daten zu visualisieren. Beispielsweise können Sie die Verteilungen der Daten für jede `Variety` und `Color` in einem kategorischen Diagramm vergleichen. +Seaborn bietet einige interessante Möglichkeiten, Ihre Daten zu visualisieren. Zum Beispiel können Sie die Verteilungen der Daten für jede `Variety` und `Color` in einem kategorischen Diagramm vergleichen. 1. Erstellen Sie ein solches Diagramm mit der Funktion `catplot`, indem Sie unsere Kürbisdaten `pumpkins` verwenden und eine Farbzuordnung für jede Kürbiskategorie (orange oder weiß) angeben: @@ -120,19 +120,19 @@ Seaborn bietet einige interessante Möglichkeiten, Ihre Daten zu visualisieren. ) ``` - ![Ein Raster visualisierter Daten](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.de.png) + ![Ein Raster visualisierter Daten](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) Durch die Beobachtung der Daten können Sie sehen, wie die Farbdaten mit der Sorte zusammenhängen. - ✅ Angesichts dieses kategorischen Diagramms, welche interessanten Untersuchungen können Sie sich vorstellen? + ✅ Welche interessanten Untersuchungen können Sie sich anhand dieses kategorischen Diagramms vorstellen? ### Datenvorverarbeitung: Feature- und Label-Encoding -Unser Kürbis-Datensatz enthält Zeichenkettenwerte für alle seine Spalten. Mit kategorischen Daten zu arbeiten, ist für Menschen intuitiv, aber nicht für Maschinen. Maschinelle Lernalgorithmen funktionieren gut mit Zahlen. Deshalb ist Encoding ein sehr wichtiger Schritt in der Datenvorverarbeitungsphase, da es uns ermöglicht, kategorische Daten in numerische Daten umzuwandeln, ohne Informationen zu verlieren. Gutes Encoding führt zu einem guten Modell. +Unser Kürbisdatensatz enthält Zeichenkettenwerte für alle Spalten. Mit kategorialen Daten zu arbeiten, ist für Menschen intuitiv, aber nicht für Maschinen. Maschinelle Lernalgorithmen arbeiten gut mit Zahlen. Deshalb ist Encoding ein sehr wichtiger Schritt in der Datenvorverarbeitungsphase, da es uns ermöglicht, kategoriale Daten in numerische Daten umzuwandeln, ohne Informationen zu verlieren. Gutes Encoding führt zu einem guten Modell. Für das Feature-Encoding gibt es zwei Haupttypen von Encodern: -1. Ordinaler Encoder: Er eignet sich gut für ordinale Variablen, also kategorische Variablen, bei denen die Daten einer logischen Reihenfolge folgen, wie die Spalte `Item Size` in unserem Datensatz. Er erstellt eine Zuordnung, sodass jede Kategorie durch eine Zahl dargestellt wird, die die Reihenfolge der Kategorie in der Spalte ist. +1. Ordinal-Encoder: Er eignet sich gut für ordinale Variablen, also kategoriale Variablen, deren Daten einer logischen Reihenfolge folgen, wie die Spalte `Item Size` in unserem Datensatz. Er erstellt eine Zuordnung, sodass jede Kategorie durch eine Zahl dargestellt wird, die der Reihenfolge der Kategorie in der Spalte entspricht. ```python from sklearn.preprocessing import OrdinalEncoder @@ -142,7 +142,7 @@ Für das Feature-Encoding gibt es zwei Haupttypen von Encodern: ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. Kategorischer Encoder: Er eignet sich gut für nominale Variablen, also kategorische Variablen, bei denen die Daten keiner logischen Reihenfolge folgen, wie alle Features außer `Item Size` in unserem Datensatz. Es handelt sich um ein One-Hot-Encoding, was bedeutet, dass jede Kategorie durch eine binäre Spalte dargestellt wird: Die codierte Variable ist gleich 1, wenn der Kürbis zu dieser Sorte gehört, und 0, wenn nicht. +2. Kategorischer Encoder: Er eignet sich gut für nominale Variablen, also kategoriale Variablen, deren Daten keiner logischen Reihenfolge folgen, wie alle Merkmale außer `Item Size` in unserem Datensatz. Es handelt sich um ein One-Hot-Encoding, was bedeutet, dass jede Kategorie durch eine binäre Spalte dargestellt wird: Die codierte Variable ist gleich 1, wenn der Kürbis zu dieser Sorte gehört, und 0, andernfalls. ```python from sklearn.preprocessing import OneHotEncoder @@ -165,7 +165,7 @@ Dann wird `ColumnTransformer` verwendet, um mehrere Encoder in einem einzigen Sc encoded_features = ct.fit_transform(pumpkins) ``` -Für das Label-Encoding verwenden wir die `LabelEncoder`-Klasse von scikit-learn, eine Utility-Klasse, die Labels normalisiert, sodass sie nur Werte zwischen 0 und n_classes-1 enthalten (hier 0 und 1). +Zum Codieren des Labels verwenden wir die `LabelEncoder`-Klasse von Scikit-learn, eine Dienstprogrammsklasse, die dabei hilft, Labels zu normalisieren, sodass sie nur Werte zwischen 0 und n_classes-1 (hier 0 und 1) enthalten. ```python from sklearn.preprocessing import LabelEncoder @@ -174,17 +174,17 @@ Für das Label-Encoding verwenden wir die `LabelEncoder`-Klasse von scikit-learn encoded_label = label_encoder.fit_transform(pumpkins['Color']) ``` -Sobald wir die Features und das Label codiert haben, können wir sie zu einem neuen Dataframe `encoded_pumpkins` zusammenführen. +Sobald wir die Merkmale und das Label codiert haben, können wir sie in einem neuen DataFrame `encoded_pumpkins` zusammenführen. ```python encoded_pumpkins = encoded_features.assign(Color=encoded_label) ``` -✅ Was sind die Vorteile der Verwendung eines ordinalen Encoders für die Spalte `Item Size`? +✅ Welche Vorteile hat die Verwendung eines Ordinal-Encoders für die Spalte `Item Size`? ### Beziehungen zwischen Variablen analysieren -Nachdem wir unsere Daten vorverarbeitet haben, können wir die Beziehungen zwischen den Features und dem Label analysieren, um eine Vorstellung davon zu bekommen, wie gut das Modell das Label anhand der Features vorhersagen kann. Die beste Möglichkeit, diese Art der Analyse durchzuführen, ist das Plotten der Daten. Wir verwenden erneut die Funktion `catplot` von Seaborn, um die Beziehungen zwischen `Item Size`, `Variety` und `Color` in einem kategorischen Diagramm zu visualisieren. Um die Daten besser darzustellen, verwenden wir die codierte Spalte `Item Size` und die nicht codierte Spalte `Variety`. +Nachdem wir unsere Daten vorverarbeitet haben, können wir die Beziehungen zwischen den Merkmalen und dem Label analysieren, um eine Vorstellung davon zu bekommen, wie gut das Modell das Label anhand der Merkmale vorhersagen kann. Die beste Möglichkeit, diese Art von Analyse durchzuführen, ist das Plotten der Daten. Wir verwenden erneut die Seaborn-Funktion `catplot`, um die Beziehungen zwischen `Item Size`, `Variety` und `Color` in einem kategorischen Diagramm zu visualisieren. Um die Daten besser darzustellen, verwenden wir die codierte Spalte `Item Size` und die nicht codierte Spalte `Variety`. ```python palette = { @@ -204,11 +204,11 @@ Nachdem wir unsere Daten vorverarbeitet haben, können wir die Beziehungen zwisc g.set_titles(row_template="{row_name}") ``` -![Ein kategorisches Diagramm visualisierter Daten](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.de.png) +![Ein kategorisches Diagramm visualisierter Daten](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) -### Verwendung eines Swarm-Plots +### Verwenden Sie einen Swarm-Plot -Da `Color` eine binäre Kategorie ist (Weiß oder Nicht Weiß), benötigt sie 'einen [spezialisierten Ansatz](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) zur Visualisierung'. Es gibt andere Möglichkeiten, die Beziehung dieser Kategorie zu anderen Variablen zu visualisieren. +Da `Color` eine binäre Kategorie (Weiß oder Nicht Weiß) ist, benötigt sie 'einen [spezialisierten Ansatz](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) zur Visualisierung'. Es gibt andere Möglichkeiten, die Beziehung dieser Kategorie zu anderen Variablen zu visualisieren. Sie können Variablen nebeneinander mit Seaborn-Diagrammen visualisieren. @@ -222,27 +222,27 @@ Sie können Variablen nebeneinander mit Seaborn-Diagrammen visualisieren. sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) ``` - ![Ein Schwarm visualisierter Daten](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.de.png) + ![Ein Schwarm visualisierter Daten](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**Achtung**: Der obige Code könnte eine Warnung generieren, da Seaborn Schwierigkeiten hat, eine solche Menge an Datenpunkten in einem Swarm-Plot darzustellen. Eine mögliche Lösung besteht darin, die Größe des Markers mit dem Parameter 'size' zu verringern. Beachten Sie jedoch, dass dies die Lesbarkeit des Diagramms beeinträchtigt. +**Achtung**: Der obige Code könnte eine Warnung generieren, da Seaborn Schwierigkeiten hat, eine solche Menge an Datenpunkten in einem Swarm-Plot darzustellen. Eine mögliche Lösung ist, die Größe der Marker mit dem Parameter 'size' zu verringern. Beachten Sie jedoch, dass dies die Lesbarkeit des Diagramms beeinträchtigen kann. > **🧮 Zeigen Sie mir die Mathematik** > -> Die logistische Regression basiert auf dem Konzept der 'Maximum-Likelihood' unter Verwendung von [Sigmoid-Funktionen](https://wikipedia.org/wiki/Sigmoid_function). Eine 'Sigmoid-Funktion' auf einem Diagramm sieht aus wie eine 'S'-Form. Sie nimmt einen Wert und ordnet ihn irgendwo zwischen 0 und 1 zu. Ihre Kurve wird auch als 'logistische Kurve' bezeichnet. Ihre Formel sieht wie folgt aus: +> Die logistische Regression basiert auf dem Konzept der 'Maximum-Likelihood' unter Verwendung von [Sigmoid-Funktionen](https://wikipedia.org/wiki/Sigmoid_function). Eine 'Sigmoid-Funktion' sieht auf einem Diagramm wie eine 'S'-Form aus. Sie nimmt einen Wert und ordnet ihn einem Bereich zwischen 0 und 1 zu. Ihre Kurve wird auch als 'logistische Kurve' bezeichnet. Ihre Formel sieht so aus: > -> ![logistische Funktion](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.de.png) +> ![logistische Funktion](../../../../2-Regression/4-Logistic/images/sigmoid.png) > -> Dabei liegt der Mittelpunkt der Sigmoid-Funktion bei x = 0, L ist der maximale Wert der Kurve und k ist die Steilheit der Kurve. Wenn das Ergebnis der Funktion größer als 0,5 ist, wird das betreffende Label der Klasse '1' der binären Wahl zugeordnet. Andernfalls wird es als '0' klassifiziert. +> Dabei liegt der Mittelpunkt der Sigmoid-Funktion bei x = 0, L ist der maximale Wert der Kurve, und k ist die Steilheit der Kurve. Wenn das Ergebnis der Funktion größer als 0,5 ist, wird das Label der Klasse '1' der binären Wahl zugeordnet. Andernfalls wird es als '0' klassifiziert. -## Modell erstellen +## Erstellen Sie Ihr Modell -Ein Modell zu erstellen, um diese binäre Klassifikation zu finden, ist überraschend einfach in Scikit-learn. +Ein Modell zu erstellen, um diese binäre Klassifikation zu finden, ist in Scikit-learn überraschend einfach. [![ML für Anfänger - Logistische Regression zur Klassifikation von Daten](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML für Anfänger - Logistische Regression zur Klassifikation von Daten") -> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht über den Aufbau eines linearen Regressionsmodells. +> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht zum Erstellen eines linearen Regressionsmodells. -1. Wählen Sie die Variablen aus, die Sie in Ihrem Klassifikationsmodell verwenden möchten, und teilen Sie die Trainings- und Testsets mit `train_test_split()`: +1. Wählen Sie die Variablen aus, die Sie in Ihrem Klassifikationsmodell verwenden möchten, und teilen Sie die Trainings- und Testdatensätze mit `train_test_split()` auf: ```python from sklearn.model_selection import train_test_split @@ -254,7 +254,7 @@ Ein Modell zu erstellen, um diese binäre Klassifikation zu finden, ist überras ``` -2. Jetzt können Sie Ihr Modell trainieren, indem Sie `fit()` mit Ihren Trainingsdaten aufrufen und das Ergebnis ausgeben: +2. Jetzt können Sie Ihr Modell trainieren, indem Sie `fit()` mit Ihren Trainingsdaten aufrufen, und das Ergebnis ausgeben: ```python from sklearn.metrics import f1_score, classification_report @@ -269,7 +269,7 @@ Ein Modell zu erstellen, um diese binäre Klassifikation zu finden, ist überras print('F1-score: ', f1_score(y_test, predictions)) ``` - Werfen Sie einen Blick auf die Bewertung Ihres Modells. Es ist nicht schlecht, wenn man bedenkt, dass Sie nur etwa 1000 Zeilen Daten haben: + Werfen Sie einen Blick auf die Bewertung Ihres Modells. Es ist nicht schlecht, wenn man bedenkt, dass Sie nur etwa 1000 Datenzeilen haben: ```output precision recall f1-score support @@ -292,9 +292,9 @@ Ein Modell zu erstellen, um diese binäre Klassifikation zu finden, ist überras ## Bessere Verständlichkeit durch eine Konfusionsmatrix -Während Sie einen Bewertungsbericht [Begriffe](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) ausgeben können, indem Sie die oben genannten Elemente drucken, können Sie Ihr Modell möglicherweise besser verstehen, indem Sie eine [Konfusionsmatrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) verwenden, um zu verstehen, wie das Modell funktioniert. +Während Sie einen Bewertungsbericht [Begriffe](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) durch die oben genannten Elemente ausgeben können, könnten Sie Ihr Modell leichter verstehen, indem Sie eine [Konfusionsmatrix](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) verwenden, um zu analysieren, wie das Modell abschneidet. -> 🎓 Eine '[Konfusionsmatrix](https://wikipedia.org/wiki/Confusion_matrix)' (oder 'Fehlermatrix') ist eine Tabelle, die die tatsächlichen vs. falschen Positiven und Negativen Ihres Modells ausdrückt und somit die Genauigkeit der Vorhersagen misst. +> 🎓 Eine '[Konfusionsmatrix](https://wikipedia.org/wiki/Confusion_matrix)' (oder 'Fehlermatrix') ist eine Tabelle, die die tatsächlichen vs. vorhergesagten positiven und negativen Werte Ihres Modells darstellt und so die Genauigkeit der Vorhersagen misst. 1. Um eine Konfusionsmatrix zu verwenden, rufen Sie `confusion_matrix()` auf: @@ -317,45 +317,45 @@ In Scikit-learn sind die Zeilen (Achse 0) die tatsächlichen Labels und die Spal | 0 | TN | FP | | 1 | FN | TP | -Was passiert hier? Angenommen, unser Modell wird gebeten, Kürbisse zwischen zwei binären Kategorien zu klassifizieren, Kategorie 'weiß' und Kategorie 'nicht-weiß'. +Was passiert hier? Angenommen, unser Modell soll Kürbisse zwischen zwei binären Kategorien klassifizieren: Kategorie 'weiß' und Kategorie 'nicht-weiß'. -- Wenn Ihr Modell einen Kürbis als nicht weiß vorhersagt und er tatsächlich zur Kategorie 'nicht-weiß' gehört, nennen wir dies ein True Negative, dargestellt durch die Zahl oben links. -- Wenn Ihr Modell einen Kürbis als weiß vorhersagt und er tatsächlich zur Kategorie 'nicht-weiß' gehört, nennen wir dies ein False Negative, dargestellt durch die Zahl unten links. -- Wenn Ihr Modell einen Kürbis als nicht weiß vorhersagt und er tatsächlich zur Kategorie 'weiß' gehört, nennen wir dies ein False Positive, dargestellt durch die Zahl oben rechts. -- Wenn Ihr Modell einen Kürbis als weiß vorhersagt und er tatsächlich zur Kategorie 'weiß' gehört, nennen wir dies ein True Positive, dargestellt durch die Zahl unten rechts. +- Wenn Ihr Modell einen Kürbis als nicht weiß vorhersagt und er tatsächlich zur Kategorie 'nicht-weiß' gehört, nennen wir das ein True Negative (TN), dargestellt durch die Zahl oben links. +- Wenn Ihr Modell einen Kürbis als weiß vorhersagt und er tatsächlich zur Kategorie 'nicht-weiß' gehört, nennen wir das ein False Negative (FN), dargestellt durch die Zahl unten links. +- Wenn Ihr Modell einen Kürbis als nicht weiß vorhersagt und er tatsächlich zur Kategorie 'weiß' gehört, nennen wir das ein False Positive (FP), dargestellt durch die Zahl oben rechts. +- Wenn Ihr Modell einen Kürbis als weiß vorhersagt und er tatsächlich zur Kategorie 'weiß' gehört, nennen wir das ein True Positive (TP), dargestellt durch die Zahl unten rechts. -Wie Sie sich denken können, ist es vorzuziehen, eine größere Anzahl von True Positives und True Negatives und eine geringere Anzahl von False Positives und False Negatives zu haben, was darauf hinweist, dass das Modell besser funktioniert. -Wie hängt die Konfusionsmatrix mit Präzision und Recall zusammen? Erinnern Sie sich, dass der oben gedruckte Klassifikationsbericht eine Präzision von 0,85 und einen Recall von 0,67 zeigte. +Wie Sie sich denken können, ist es wünschenswert, eine größere Anzahl von True Positives und True Negatives sowie eine geringere Anzahl von False Positives und False Negatives zu haben, was darauf hinweist, dass das Modell besser abschneidet. +Wie hängt die Konfusionsmatrix mit Präzision und Recall zusammen? Denken Sie daran, dass der oben gedruckte Klassifikationsbericht eine Präzision von 0,85 und einen Recall von 0,67 zeigte. Präzision = tp / (tp + fp) = 22 / (22 + 4) = 0,8461538461538461 Recall = tp / (tp + fn) = 22 / (22 + 11) = 0,6666666666666666 -✅ F: Wie hat das Modell laut der Konfusionsmatrix abgeschnitten? A: Gar nicht schlecht; es gibt eine gute Anzahl von True Negatives, aber auch einige False Negatives. +✅ F: Wie hat das Modell laut der Konfusionsmatrix abgeschnitten? A: Gar nicht schlecht; es gibt eine gute Anzahl an True Negatives, aber auch ein paar False Negatives. -Lassen Sie uns die Begriffe, die wir zuvor gesehen haben, mit Hilfe der Zuordnung von TP/TN und FP/FN in der Konfusionsmatrix erneut betrachten: +Lassen Sie uns die Begriffe, die wir zuvor gesehen haben, mit Hilfe der Zuordnung von TP/TN und FP/FN in der Konfusionsmatrix noch einmal betrachten: -🎓 Präzision: TP/(TP + FP) Der Anteil relevanter Instanzen unter den abgerufenen Instanzen (z. B. welche Labels gut zugeordnet wurden) +🎓 Präzision: TP/(TP + FP) Der Anteil relevanter Instanzen unter den abgerufenen Instanzen (z. B. welche Labels korrekt zugeordnet wurden) -🎓 Recall: TP/(TP + FN) Der Anteil relevanter Instanzen, die abgerufen wurden, unabhängig davon, ob sie gut zugeordnet wurden oder nicht +🎓 Recall: TP/(TP + FN) Der Anteil relevanter Instanzen, die abgerufen wurden, unabhängig davon, ob sie korrekt zugeordnet wurden oder nicht -🎓 F1-Score: (2 * Präzision * Recall)/(Präzision + Recall) Ein gewichteter Durchschnitt von Präzision und Recall, wobei 1 das Beste und 0 das Schlechteste ist +🎓 f1-Score: (2 * Präzision * Recall)/(Präzision + Recall) Ein gewichteter Durchschnitt von Präzision und Recall, wobei 1 das Beste und 0 das Schlechteste ist 🎓 Support: Die Anzahl der Vorkommen jedes abgerufenen Labels 🎓 Genauigkeit: (TP + TN)/(TP + TN + FP + FN) Der Prozentsatz der Labels, die für eine Stichprobe korrekt vorhergesagt wurden. -🎓 Makro-Durchschnitt: Die Berechnung der ungewichteten Durchschnittswerte für jedes Label, ohne die Ungleichheit der Labels zu berücksichtigen. +🎓 Makro-Durchschnitt: Die Berechnung des ungewichteten Durchschnitts der Metriken für jedes Label, ohne das Ungleichgewicht der Labels zu berücksichtigen. -🎓 Gewichteter Durchschnitt: Die Berechnung der Durchschnittswerte für jedes Label, wobei die Ungleichheit der Labels durch Gewichtung nach ihrer Unterstützung (der Anzahl der tatsächlichen Instanzen für jedes Label) berücksichtigt wird. +🎓 Gewichteter Durchschnitt: Die Berechnung des Durchschnitts der Metriken für jedes Label, wobei das Ungleichgewicht der Labels durch Gewichtung nach ihrem Support (der Anzahl der tatsächlichen Instanzen für jedes Label) berücksichtigt wird. -✅ Können Sie sich vorstellen, welchen Metrikwert Sie beobachten sollten, wenn Sie die Anzahl der False Negatives reduzieren möchten? +✅ Können Sie sich vorstellen, welche Metrik Sie beobachten sollten, wenn Sie die Anzahl der False Negatives reduzieren möchten? -## Visualisieren Sie die ROC-Kurve dieses Modells +## Visualisierung der ROC-Kurve dieses Modells [![ML für Anfänger - Analyse der Leistung von logistischer Regression mit ROC-Kurven](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML für Anfänger - Analyse der Leistung von logistischer Regression mit ROC-Kurven") -> 🎥 Klicken Sie auf das Bild oben für eine kurze Videoübersicht über ROC-Kurven +> 🎥 Klicken Sie auf das obige Bild für eine kurze Videoübersicht zu ROC-Kurven Lassen Sie uns eine weitere Visualisierung durchführen, um die sogenannte 'ROC'-Kurve zu sehen: @@ -377,9 +377,9 @@ plt.title('ROC Curve') plt.show() ``` -Verwenden Sie Matplotlib, um die [Receiver Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) oder ROC des Modells zu zeichnen. ROC-Kurven werden häufig verwendet, um die Ausgabe eines Klassifikators in Bezug auf seine True Positives und False Positives zu betrachten. "ROC-Kurven zeigen typischerweise die True Positive Rate auf der Y-Achse und die False Positive Rate auf der X-Achse." Daher sind die Steilheit der Kurve und der Abstand zwischen der Mittellinie und der Kurve wichtig: Sie möchten eine Kurve, die schnell nach oben und über die Linie geht. In unserem Fall gibt es zunächst False Positives, und dann geht die Linie richtig nach oben und darüber: +Verwenden Sie Matplotlib, um die [Receiver Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) oder ROC des Modells zu zeichnen. ROC-Kurven werden oft verwendet, um die Ausgabe eines Klassifikators in Bezug auf seine True Positives und False Positives zu betrachten. "ROC-Kurven zeigen typischerweise die True Positive Rate auf der Y-Achse und die False Positive Rate auf der X-Achse." Daher sind die Steilheit der Kurve und der Abstand zwischen der Mittellinie und der Kurve wichtig: Sie möchten eine Kurve, die schnell nach oben und über die Linie verläuft. In unserem Fall gibt es zunächst False Positives, und dann verläuft die Linie korrekt nach oben und darüber: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.de.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) Verwenden Sie abschließend die [`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) von Scikit-learn, um die tatsächliche 'Fläche unter der Kurve' (AUC) zu berechnen: @@ -387,20 +387,20 @@ Verwenden Sie abschließend die [`roc_auc_score` API](https://scikit-learn.org/s auc = roc_auc_score(y_test,y_scores[:,1]) print(auc) ``` -Das Ergebnis ist `0.9749908725812341`. Da die AUC von 0 bis 1 reicht, möchten Sie einen hohen Wert erzielen, da ein Modell, das 100 % korrekte Vorhersagen trifft, eine AUC von 1 hat; in diesem Fall ist das Modell _ziemlich gut_. +Das Ergebnis ist `0.9749908725812341`. Da die AUC von 0 bis 1 reicht, möchten Sie einen hohen Wert erzielen, da ein Modell, das zu 100 % korrekte Vorhersagen trifft, eine AUC von 1 hat; in diesem Fall ist das Modell _ziemlich gut_. In zukünftigen Lektionen zu Klassifikationen werden Sie lernen, wie Sie iterativ die Werte Ihres Modells verbessern können. Aber für den Moment: Herzlichen Glückwunsch! Sie haben diese Lektionen zur Regression abgeschlossen! --- -## 🚀 Herausforderung +## 🚀Herausforderung -Es gibt noch viel mehr über logistische Regression zu entdecken! Aber der beste Weg zu lernen ist zu experimentieren. Finden Sie einen Datensatz, der sich für diese Art der Analyse eignet, und erstellen Sie ein Modell damit. Was lernen Sie dabei? Tipp: Probieren Sie [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) für interessante Datensätze aus. +Es gibt noch viel mehr über logistische Regression zu entdecken! Aber der beste Weg zu lernen ist, zu experimentieren. Finden Sie einen Datensatz, der sich für diese Art der Analyse eignet, und erstellen Sie ein Modell damit. Was lernen Sie dabei? Tipp: Probieren Sie [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) für interessante Datensätze aus. -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) -## Überprüfung & Selbststudium +## Rückblick & Selbststudium -Lesen Sie die ersten Seiten [dieses Papiers von Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) über einige praktische Anwendungen der logistischen Regression. Denken Sie über Aufgaben nach, die besser für die eine oder andere Art von Regression geeignet sind, die wir bis jetzt studiert haben. Was würde am besten funktionieren? +Lesen Sie die ersten Seiten [dieses Papiers von Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) über einige praktische Anwendungen der logistischen Regression. Denken Sie über Aufgaben nach, die besser für die eine oder andere Art von Regression geeignet sind, die wir bisher studiert haben. Was würde am besten funktionieren? ## Aufgabe @@ -409,4 +409,4 @@ Lesen Sie die ersten Seiten [dieses Papiers von Stanford](https://web.stanford.e --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 durch die Nutzung dieser Übersetzung entstehen. \ No newline at end of file diff --git a/translations/de/3-Web-App/1-Web-App/README.md b/translations/de/3-Web-App/1-Web-App/README.md index a04183172..77c9b92cd 100644 --- a/translations/de/3-Web-App/1-Web-App/README.md +++ b/translations/de/3-Web-App/1-Web-App/README.md @@ -1,67 +1,67 @@ # Erstellen einer Web-App zur Nutzung eines ML-Modells -In dieser Lektion wirst du ein ML-Modell mit einem Datensatz trainieren, der nicht von dieser Welt ist: _UFO-Sichtungen des letzten Jahrhunderts_, basierend auf der Datenbank von NUFORC. +In dieser Lektion wirst du ein ML-Modell mit einem außergewöhnlichen Datensatz trainieren: _UFO-Sichtungen des letzten Jahrhunderts_, basierend auf der Datenbank von NUFORC. Du wirst lernen: - Wie man ein trainiertes Modell "pickelt" - Wie man dieses Modell in einer Flask-App verwendet -Wir werden weiterhin Notebooks nutzen, um Daten zu bereinigen und unser Modell zu trainieren. Du kannst den Prozess jedoch einen Schritt weiterführen, indem du das Modell "in freier Wildbahn" einsetzt, sozusagen: in einer Web-App. +Wir werden weiterhin Notebooks verwenden, um Daten zu bereinigen und unser Modell zu trainieren. Du kannst den Prozess jedoch einen Schritt weiterführen, indem du das Modell "in freier Wildbahn" einsetzt, also in einer Web-App. -Dazu musst du eine Web-App mit Flask erstellen. +Dafür musst du eine Web-App mit Flask erstellen. -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/) -## Erstellen einer App +## Eine App erstellen -Es gibt verschiedene Möglichkeiten, Web-Apps zu erstellen, die ML-Modelle nutzen. Deine Web-Architektur kann beeinflussen, wie dein Modell trainiert wird. Stell dir vor, du arbeitest in einem Unternehmen, in dem die Data-Science-Abteilung ein Modell trainiert hat, das du in einer App verwenden sollst. +Es gibt verschiedene Möglichkeiten, Web-Apps zu erstellen, die Machine-Learning-Modelle nutzen. Deine Web-Architektur kann beeinflussen, wie dein Modell trainiert wird. Stell dir vor, du arbeitest in einem Unternehmen, in dem die Data-Science-Abteilung ein Modell trainiert hat, das du in einer App verwenden sollst. ### Überlegungen Es gibt viele Fragen, die du dir stellen musst: -- **Ist es eine Web-App oder eine Mobile-App?** Wenn du eine Mobile-App erstellst oder das Modell in einem IoT-Kontext verwenden möchtest, könntest du [TensorFlow Lite](https://www.tensorflow.org/lite/) nutzen, um das Modell in einer Android- oder iOS-App zu verwenden. +- **Ist es eine Web-App oder eine Mobile-App?** Wenn du eine Mobile-App erstellst oder das Modell in einem IoT-Kontext verwenden möchtest, könntest du [TensorFlow Lite](https://www.tensorflow.org/lite/) nutzen, um das Modell in einer Android- oder iOS-App einzusetzen. - **Wo wird das Modell gespeichert?** In der Cloud oder lokal? - **Offline-Unterstützung.** Muss die App offline funktionieren? - **Welche Technologie wurde verwendet, um das Modell zu trainieren?** Die gewählte Technologie kann die benötigten Tools beeinflussen. - - **Verwendung von TensorFlow.** Wenn du ein Modell mit TensorFlow trainierst, bietet dieses Ökosystem die Möglichkeit, ein TensorFlow-Modell für die Nutzung in einer Web-App mit [TensorFlow.js](https://www.tensorflow.org/js/) zu konvertieren. - - **Verwendung von PyTorch.** Wenn du ein Modell mit einer Bibliothek wie [PyTorch](https://pytorch.org/) erstellst, hast du die Möglichkeit, es im [ONNX](https://onnx.ai/) (Open Neural Network Exchange)-Format zu exportieren, um es in JavaScript-Web-Apps zu verwenden, die die [Onnx Runtime](https://www.onnxruntime.ai/) nutzen können. Diese Option wird in einer zukünftigen Lektion für ein mit Scikit-learn trainiertes Modell untersucht. - - **Verwendung von Lobe.ai oder Azure Custom Vision.** Wenn du ein ML-SaaS (Software as a Service)-System wie [Lobe.ai](https://lobe.ai/) oder [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) verwendest, um ein Modell zu trainieren, bietet diese Art von Software Möglichkeiten, das Modell für viele Plattformen zu exportieren, einschließlich der Erstellung einer maßgeschneiderten API, die von deiner Online-Anwendung in der Cloud abgefragt werden kann. + - **Verwendung von TensorFlow.** Wenn du ein Modell mit TensorFlow trainierst, bietet dieses Ökosystem die Möglichkeit, ein TensorFlow-Modell für die Verwendung in einer Web-App mit [TensorFlow.js](https://www.tensorflow.org/js/) zu konvertieren. + - **Verwendung von PyTorch.** Wenn du ein Modell mit einer Bibliothek wie [PyTorch](https://pytorch.org/) erstellst, kannst du es im [ONNX](https://onnx.ai/) (Open Neural Network Exchange)-Format exportieren, um es in JavaScript-Web-Apps mit [Onnx Runtime](https://www.onnxruntime.ai/) zu verwenden. Diese Option wird in einer zukünftigen Lektion für ein mit Scikit-learn trainiertes Modell untersucht. + - **Verwendung von Lobe.ai oder Azure Custom Vision.** Wenn du ein ML-SaaS (Software as a Service)-System wie [Lobe.ai](https://lobe.ai/) oder [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) verwendest, um ein Modell zu trainieren, bietet diese Software Möglichkeiten, das Modell für viele Plattformen zu exportieren, einschließlich der Erstellung einer maßgeschneiderten API, die von deiner Online-Anwendung in der Cloud abgefragt werden kann. -Du hast auch die Möglichkeit, eine vollständige Flask-Web-App zu erstellen, die das Modell direkt im Webbrowser trainieren kann. Dies kann auch mit TensorFlow.js in einem JavaScript-Kontext erfolgen. +Du hast auch die Möglichkeit, eine komplette Flask-Web-App zu erstellen, die das Modell direkt im Webbrowser trainieren kann. Dies kann auch mit TensorFlow.js in einem JavaScript-Kontext erfolgen. -Da wir mit Python-basierten Notebooks gearbeitet haben, schauen wir uns die Schritte an, die erforderlich sind, um ein trainiertes Modell aus einem solchen Notebook in ein Format zu exportieren, das von einer Python-basierten Web-App gelesen werden kann. +Für unsere Zwecke, da wir mit Python-basierten Notebooks arbeiten, schauen wir uns die Schritte an, die erforderlich sind, um ein trainiertes Modell aus einem solchen Notebook in ein Format zu exportieren, das von einer Python-basierten Web-App gelesen werden kann. -## Tool +## Werkzeug -Für diese Aufgabe benötigst du zwei Tools: Flask und Pickle, beide laufen auf Python. +Für diese Aufgabe benötigst du zwei Tools: Flask und Pickle, die beide auf Python laufen. -✅ Was ist [Flask](https://palletsprojects.com/p/flask/)? Von seinen Entwicklern als "Micro-Framework" definiert, bietet Flask die grundlegenden Funktionen von Web-Frameworks mit Python und einer Template-Engine zur Erstellung von Webseiten. Schau dir [dieses Lernmodul](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) an, um das Arbeiten mit Flask zu üben. +✅ Was ist [Flask](https://palletsprojects.com/p/flask/)? Flask wird von seinen Entwicklern als "Micro-Framework" definiert und bietet die grundlegenden Funktionen von Web-Frameworks mit Python sowie eine Template-Engine zur Erstellung von Webseiten. Schau dir [dieses Lernmodul](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) an, um das Arbeiten mit Flask zu üben. -✅ Was ist [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 ist ein Python-Modul, das eine Python-Objektstruktur serialisiert und deserialisiert. Wenn du ein Modell "pickelst", serialisierst oder flachst du dessen Struktur ab, um es im Web zu verwenden. Vorsicht: Pickle ist nicht von Natur aus sicher, sei also vorsichtig, wenn du aufgefordert wirst, eine Datei zu "un-pickeln". Eine gepickelte Datei hat die Endung `.pkl`. +✅ Was ist [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 ist ein Python-Modul, das die Struktur eines Python-Objekts serialisiert und deserialisiert. Wenn du ein Modell "pickelst", serialisierst oder flachst du dessen Struktur ab, um es im Web zu verwenden. Vorsicht: Pickle ist nicht von Natur aus sicher, also sei vorsichtig, wenn du aufgefordert wirst, eine Datei zu "ent-pickeln". Eine gepickelte Datei hat die Endung `.pkl`. ## Übung - Daten bereinigen In dieser Lektion wirst du Daten von 80.000 UFO-Sichtungen verwenden, die vom [NUFORC](https://nuforc.org) (National UFO Reporting Center) gesammelt wurden. Diese Daten enthalten einige interessante Beschreibungen von UFO-Sichtungen, zum Beispiel: -- **Lange Beispielbeschreibung.** "Ein Mann tritt aus einem Lichtstrahl hervor, der nachts auf ein grasbewachsenes Feld scheint, und rennt in Richtung des Texas Instruments-Parkplatzes". -- **Kurze Beispielbeschreibung.** "Die Lichter haben uns verfolgt". +- **Lange Beispielbeschreibung.** "Ein Mann tritt aus einem Lichtstrahl, der nachts auf ein Grasfeld scheint, und rennt in Richtung des Parkplatzes von Texas Instruments." +- **Kurze Beispielbeschreibung.** "Die Lichter haben uns verfolgt." -Die [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv)-Tabelle enthält Spalten über die `city`, `state` und `country`, in denen die Sichtung stattfand, die `shape` des Objekts sowie dessen `latitude` und `longitude`. +Die Tabelle [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) enthält Spalten über die `city`, `state` und `country`, in denen die Sichtung stattfand, die `shape` des Objekts sowie dessen `latitude` und `longitude`. -Im leeren [Notebook](notebook.ipynb), das in dieser Lektion enthalten ist: +Im leeren [Notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb), das in dieser Lektion enthalten ist: -1. Importiere `pandas`, `matplotlib` und `numpy`, wie du es in den vorherigen Lektionen getan hast, und importiere die UFO-Tabelle. Du kannst dir einen Beispiel-Datensatz ansehen: +1. Importiere `pandas`, `matplotlib` und `numpy`, wie du es in den vorherigen Lektionen getan hast, und importiere die UFO-Tabelle. Du kannst dir einen Beispieldatensatz ansehen: ```python import pandas as pd @@ -79,7 +79,7 @@ Im leeren [Notebook](notebook.ipynb), das in dieser Lektion enthalten ist: ufos.Country.unique() ``` -1. Reduziere nun die Menge der Daten, mit denen wir arbeiten müssen, indem du alle Nullwerte entfernst und nur Sichtungen zwischen 1-60 Sekunden importierst: +1. Reduziere nun die Datenmenge, indem du alle Nullwerte entfernst und nur Sichtungen zwischen 1-60 Sekunden importierst: ```python ufos.dropna(inplace=True) @@ -116,7 +116,7 @@ Im leeren [Notebook](notebook.ipynb), das in dieser Lektion enthalten ist: Jetzt kannst du dich darauf vorbereiten, ein Modell zu trainieren, indem du die Daten in Trainings- und Testgruppen aufteilst. -1. Wähle die drei Merkmale aus, die du als X-Vektor trainieren möchtest, und der y-Vektor wird das `Country`. Du möchtest `Seconds`, `Latitude` und `Longitude` eingeben und eine Länder-ID zurückerhalten. +1. Wähle die drei Merkmale aus, auf denen du trainieren möchtest, als deinen X-Vektor, und der y-Vektor wird das `Country` sein. Du möchtest in der Lage sein, `Seconds`, `Latitude` und `Longitude` einzugeben und eine Länder-ID zurückzubekommen. ```python from sklearn.model_selection import train_test_split @@ -145,11 +145,11 @@ Jetzt kannst du dich darauf vorbereiten, ein Modell zu trainieren, indem du die Die Genauigkeit ist nicht schlecht **(etwa 95%)**, was nicht überraschend ist, da `Country` und `Latitude/Longitude` korrelieren. -Das Modell, das du erstellt hast, ist nicht sehr revolutionär, da du ein `Country` aus dessen `Latitude` und `Longitude` ableiten solltest. Aber es ist eine gute Übung, um zu lernen, wie man aus Rohdaten trainiert, diese bereinigt, exportiert und dann das Modell in einer Web-App verwendet. +Das Modell, das du erstellt hast, ist nicht besonders revolutionär, da du ein `Country` aus dessen `Latitude` und `Longitude` ableiten können solltest. Es ist jedoch eine gute Übung, aus Rohdaten zu trainieren, die du bereinigt, exportiert und dann in einer Web-App verwendet hast. ## Übung - Modell "pickeln" -Jetzt ist es Zeit, dein Modell zu _pickeln_! Das kannst du mit wenigen Codezeilen tun. Sobald es _gepickelt_ ist, lade dein gepickeltes Modell und teste es mit einem Beispiel-Datenarray, das Werte für Sekunden, Breite und Länge enthält. +Jetzt ist es an der Zeit, dein Modell zu _pickeln_! Das kannst du in wenigen Codezeilen tun. Sobald es _gepickelt_ ist, lade dein gepickeltes Modell und teste es mit einem Beispieldatenarray, das Werte für Sekunden, Breitengrad und Längengrad enthält: ```python import pickle @@ -160,13 +160,13 @@ model = pickle.load(open('ufo-model.pkl','rb')) print(model.predict([[50,44,-12]])) ``` -Das Modell gibt **'3'** zurück, was der Ländercode für Großbritannien ist. Verrückt! 👽 +Das Modell gibt **'3'** zurück, was der Ländercode für das Vereinigte Königreich ist. Verrückt! 👽 ## Übung - Flask-App erstellen -Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnliche Ergebnisse auf visuell ansprechende Weise zurückzugeben. +Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnliche Ergebnisse auf eine visuell ansprechendere Weise zurückzugeben. -1. Erstelle zunächst einen Ordner namens **web-app** neben der Datei _notebook.ipynb_, in der sich deine Datei _ufo-model.pkl_ befindet. +1. Erstelle zunächst einen Ordner namens **web-app** neben der Datei _notebook.ipynb_, in der sich auch deine Datei _ufo-model.pkl_ befindet. 1. Erstelle in diesem Ordner drei weitere Ordner: **static**, mit einem Ordner **css** darin, und **templates**. Du solltest nun die folgenden Dateien und Verzeichnisse haben: @@ -181,7 +181,7 @@ Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnlich ✅ Sieh dir den Lösungsordner an, um die fertige App zu sehen -1. Die erste Datei, die du im Ordner _web-app_ erstellen musst, ist die Datei **requirements.txt**. Wie _package.json_ in einer JavaScript-App listet diese Datei die Abhängigkeiten auf, die von der App benötigt werden. Füge in **requirements.txt** die Zeilen hinzu: +1. Die erste Datei, die du im Ordner _web-app_ erstellst, ist die Datei **requirements.txt**. Wie _package.json_ in einer JavaScript-App listet diese Datei die Abhängigkeiten auf, die die App benötigt. Füge in **requirements.txt** die Zeilen hinzu: ```text scikit-learn @@ -190,7 +190,7 @@ Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnlich flask ``` -1. Führe diese Datei aus, indem du zu _web-app_ navigierst: +1. Führe diese Datei nun aus, indem du zu _web-app_ navigierst: ```bash cd web-app @@ -208,7 +208,7 @@ Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnlich 2. Erstelle **index.html** im Verzeichnis _templates_. 3. Erstelle **styles.css** im Verzeichnis _static/css_. -1. Baue die Datei _styles.css_ mit ein paar Styles aus: +1. Baue die Datei _styles.css_ mit ein paar Stilen aus: ```css body { @@ -279,7 +279,7 @@ Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnlich Schau dir das Templating in dieser Datei an. Beachte die "Mustache"-Syntax um Variablen, die von der App bereitgestellt werden, wie den Vorhersagetext: `{{}}`. Es gibt auch ein Formular, das eine Vorhersage an die Route `/predict` sendet. - Schließlich bist du bereit, die Python-Datei zu erstellen, die den Verbrauch des Modells und die Anzeige der Vorhersagen steuert: + Schließlich bist du bereit, die Python-Datei zu erstellen, die den Konsum des Modells und die Anzeige der Vorhersagen steuert: 1. Füge in `app.py` Folgendes hinzu: @@ -322,32 +322,32 @@ Jetzt kannst du eine Flask-App erstellen, um dein Modell aufzurufen und ähnlich Wenn du `python app.py` oder `python3 app.py` ausführst, startet dein Webserver lokal, und du kannst ein kurzes Formular ausfüllen, um eine Antwort auf deine brennende Frage zu erhalten, wo UFOs gesichtet wurden! -Bevor du das tust, schau dir die Teile von `app.py` an: +Bevor du das tust, wirf einen Blick auf die Teile von `app.py`: -1. Zuerst werden die Abhängigkeiten geladen und die App gestartet. +1. Zuerst werden Abhängigkeiten geladen und die App gestartet. 1. Dann wird das Modell importiert. -1. Dann wird index.html auf der Home-Route gerendert. +1. Anschließend wird index.html auf der Home-Route gerendert. -Auf der `/predict`-Route passiert Folgendes, wenn das Formular gesendet wird: +Auf der Route `/predict` passiert Folgendes, wenn das Formular gesendet wird: -1. Die Formularvariablen werden gesammelt und in ein numpy-Array umgewandelt. Sie werden dann an das Modell gesendet und eine Vorhersage wird zurückgegeben. -2. Die Länder, die wir anzeigen möchten, werden aus ihrem vorhergesagten Ländercode wieder in lesbaren Text umgewandelt, und dieser Wert wird zurück an index.html gesendet, um im Template gerendert zu werden. +1. Die Formularvariablen werden gesammelt und in ein Numpy-Array konvertiert. Sie werden dann an das Modell gesendet, und eine Vorhersage wird zurückgegeben. +2. Die Länder, die angezeigt werden sollen, werden aus ihrem vorhergesagten Ländercode in lesbaren Text umgewandelt, und dieser Wert wird zurück an index.html gesendet, um im Template gerendert zu werden. -Ein Modell auf diese Weise mit Flask und einem gepickelten Modell zu verwenden, ist relativ einfach. Das Schwierigste ist zu verstehen, welche Form die Daten haben müssen, die an das Modell gesendet werden, um eine Vorhersage zu erhalten. Das hängt ganz davon ab, wie das Modell trainiert wurde. Dieses Modell benötigt drei Datenpunkte, um eine Vorhersage zu liefern. +Ein Modell auf diese Weise mit Flask und einem gepickelten Modell zu verwenden, ist relativ einfach. Das Schwierigste ist, zu verstehen, in welcher Form die Daten an das Modell gesendet werden müssen, um eine Vorhersage zu erhalten. Das hängt davon ab, wie das Modell trainiert wurde. Dieses Modell benötigt drei Datenpunkte, um eine Vorhersage zu treffen. -In einem professionellen Umfeld kannst du sehen, wie wichtig gute Kommunikation zwischen denjenigen ist, die das Modell trainieren, und denen, die es in einer Web- oder Mobile-App verwenden. In unserem Fall ist es nur eine Person: du! +In einem professionellen Umfeld kannst du sehen, wie wichtig eine gute Kommunikation zwischen den Personen ist, die das Modell trainieren, und denen, die es in einer Web- oder Mobile-App verwenden. In unserem Fall bist du es selbst! --- ## 🚀 Herausforderung -Anstatt in einem Notebook zu arbeiten und das Modell in die Flask-App zu importieren, könntest du das Modell direkt in der Flask-App trainieren! Versuche, deinen Python-Code aus dem Notebook, vielleicht nachdem deine Daten bereinigt wurden, so zu konvertieren, dass das Modell innerhalb der App auf einer Route namens `train` trainiert wird. Was sind die Vor- und Nachteile dieser Methode? +Anstatt in einem Notebook zu arbeiten und das Modell in die Flask-App zu importieren, könntest du das Modell direkt in der Flask-App trainieren! Versuche, deinen Python-Code aus dem Notebook zu konvertieren, vielleicht nachdem deine Daten bereinigt wurden, um das Modell innerhalb der App auf einer Route namens `train` zu trainieren. Was sind die Vor- und Nachteile dieser Methode? -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [Quiz nach der Lektion](https://ff-quizzes.netlify.app/en/ml/) ## Rückblick & Selbststudium -Es gibt viele Möglichkeiten, eine Web-App zu erstellen, die ML-Modelle nutzt. Mache eine Liste der Möglichkeiten, wie du JavaScript oder Python verwenden könntest, um eine Web-App zu erstellen, die maschinelles Lernen nutzt. Überlege dir die Architektur: Sollte das Modell in der App bleiben oder in der Cloud leben? Wenn Letzteres, wie würdest du darauf zugreifen? Zeichne ein Architekturmodell für eine angewandte ML-Web-Lösung. +Es gibt viele Möglichkeiten, eine Web-App zu erstellen, die ML-Modelle nutzt. Erstelle eine Liste der Möglichkeiten, wie du JavaScript oder Python verwenden könntest, um eine Web-App zu erstellen, die Machine Learning nutzt. Überlege dir die Architektur: Sollte das Modell in der App bleiben oder in der Cloud leben? Wenn Letzteres, wie würdest du darauf zugreifen? Zeichne ein Architekturmodell für eine angewandte ML-Weblösung. ## Aufgabe @@ -356,4 +356,4 @@ Es gibt viele Möglichkeiten, eine Web-App zu erstellen, die ML-Modelle nutzt. M --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/4-Classification/1-Introduction/README.md b/translations/de/4-Classification/1-Introduction/README.md index 5faf1e216..f220e31a5 100644 --- a/translations/de/4-Classification/1-Introduction/README.md +++ b/translations/de/4-Classification/1-Introduction/README.md @@ -1,68 +1,68 @@ # Einführung in die Klassifikation -In diesen vier Lektionen wirst du einen grundlegenden Schwerpunkt des klassischen maschinellen Lernens erkunden – _Klassifikation_. Wir werden verschiedene Klassifikationsalgorithmen mit einem Datensatz über die großartigen Küchen Asiens und Indiens durchgehen. Hoffentlich hast du Appetit! +In diesen vier Lektionen wirst du einen grundlegenden Schwerpunkt des klassischen maschinellen Lernens erkunden – _Klassifikation_. Wir werden verschiedene Klassifikationsalgorithmen anhand eines Datensatzes über die großartigen Küchen Asiens und Indiens durchgehen. Hoffentlich hast du Appetit! -![nur eine Prise!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.de.png) +![nur eine Prise!](../../../../4-Classification/1-Introduction/images/pinch.png) -> Feiere panasiatische Küchen in diesen Lektionen! Bild von [Jen Looper](https://twitter.com/jenlooper) +> Feiere pan-asiatische Küchen in diesen Lektionen! Bild von [Jen Looper](https://twitter.com/jenlooper) -Klassifikation ist eine Form des [überwachten Lernens](https://wikipedia.org/wiki/Supervised_learning), die viele Gemeinsamkeiten mit Regressionstechniken hat. Wenn maschinelles Lernen darauf abzielt, Werte oder Namen für Dinge anhand von Datensätzen vorherzusagen, dann fällt die Klassifikation im Allgemeinen in zwei Gruppen: _binäre Klassifikation_ und _Multiklassen-Klassifikation_. +Klassifikation ist eine Form des [überwachten Lernens](https://wikipedia.org/wiki/Supervised_learning), die viele Gemeinsamkeiten mit Regressionsmethoden hat. Wenn maschinelles Lernen darum geht, Werte oder Namen für Dinge anhand von Datensätzen vorherzusagen, dann fällt die Klassifikation im Allgemeinen in zwei Gruppen: _binäre Klassifikation_ und _Mehrklassenklassifikation_. [![Einführung in die Klassifikation](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Einführung in die Klassifikation") -> 🎥 Klicke auf das Bild oben für ein Video: John Guttag von MIT führt in die Klassifikation ein +> 🎥 Klicke auf das Bild oben für ein Video: John Guttag vom MIT stellt die Klassifikation vor Erinnere dich: -- **Lineare Regression** half dir, Beziehungen zwischen Variablen vorherzusagen und genaue Vorhersagen darüber zu treffen, wo ein neuer Datenpunkt im Verhältnis zu dieser Linie liegen würde. So konntest du beispielsweise vorhersagen, _wie viel ein Kürbis im September vs. Dezember kosten würde_. +- **Lineare Regression** half dir, Beziehungen zwischen Variablen vorherzusagen und genaue Vorhersagen darüber zu treffen, wo ein neuer Datenpunkt in Bezug auf diese Linie liegen würde. So konntest du beispielsweise vorhersagen, _wie viel ein Kürbis im September im Vergleich zu Dezember kosten würde_. - **Logistische Regression** half dir, "binäre Kategorien" zu entdecken: Bei diesem Preisniveau, _ist dieser Kürbis orange oder nicht-orange_? -Klassifikation verwendet verschiedene Algorithmen, um andere Möglichkeiten zu finden, das Label oder die Klasse eines Datenpunkts zu bestimmen. Lass uns mit diesen Küchendaten arbeiten, um zu sehen, ob wir anhand einer Gruppe von Zutaten die Herkunftsküche bestimmen können. +Die Klassifikation verwendet verschiedene Algorithmen, um andere Möglichkeiten zu finden, das Label oder die Klasse eines Datenpunkts zu bestimmen. Lass uns mit diesen Küchendaten arbeiten, um zu sehen, ob wir anhand einer Gruppe von Zutaten die Herkunftsküche bestimmen können. -## [Quiz vor der Lektion](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) +## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/) > ### [Diese Lektion ist auch in R verfügbar!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) ### Einführung -Klassifikation ist eine der grundlegenden Tätigkeiten von Forschern und Datenwissenschaftlern im Bereich des maschinellen Lernens. Von der einfachen Klassifikation eines binären Wertes ("Ist diese E-Mail Spam oder nicht?") bis hin zur komplexen Bildklassifikation und -segmentierung mit Computer Vision – es ist immer nützlich, Daten in Klassen zu sortieren und Fragen dazu zu stellen. +Die Klassifikation ist eine der grundlegenden Tätigkeiten von Forschern und Datenwissenschaftlern im Bereich des maschinellen Lernens. Von der einfachen Klassifikation eines binären Wertes ("Ist diese E-Mail Spam oder nicht?") bis hin zur komplexen Bildklassifikation und -segmentierung mithilfe von Computer Vision ist es immer nützlich, Daten in Klassen einzuteilen und Fragen dazu zu stellen. -Um den Prozess wissenschaftlicher auszudrücken: Deine Klassifikationsmethode erstellt ein prädiktives Modell, das es dir ermöglicht, die Beziehung zwischen Eingabevariablen und Ausgabevariablen abzubilden. +Wissenschaftlich ausgedrückt erstellt deine Klassifikationsmethode ein prädiktives Modell, das es dir ermöglicht, die Beziehung zwischen Eingabevariablen und Ausgabevariablen abzubilden. -![binäre vs. Multiklassen-Klassifikation](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.de.png) +![binäre vs. Mehrklassenklassifikation](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) -> Binäre vs. Multiklassen-Probleme, die Klassifikationsalgorithmen bewältigen können. Infografik von [Jen Looper](https://twitter.com/jenlooper) +> Binäre vs. Mehrklassenprobleme, die Klassifikationsalgorithmen bewältigen müssen. Infografik von [Jen Looper](https://twitter.com/jenlooper) -Bevor wir mit dem Prozess des Bereinigens, Visualisierens und Vorbereitens unserer Daten für unsere ML-Aufgaben beginnen, lass uns ein wenig über die verschiedenen Möglichkeiten lernen, wie maschinelles Lernen zur Klassifikation von Daten genutzt werden kann. +Bevor wir mit der Bereinigung unserer Daten, ihrer Visualisierung und der Vorbereitung für unsere ML-Aufgaben beginnen, lass uns ein wenig über die verschiedenen Möglichkeiten lernen, wie maschinelles Lernen zur Klassifikation von Daten genutzt werden kann. -Abgeleitet aus der [Statistik](https://wikipedia.org/wiki/Statistical_classification) verwendet die Klassifikation im klassischen maschinellen Lernen Merkmale wie `smoker`, `weight` und `age`, um die _Wahrscheinlichkeit der Entwicklung von Krankheit X_ zu bestimmen. Als eine Technik des überwachten Lernens, ähnlich den Regressionsexperimenten, die du zuvor durchgeführt hast, sind deine Daten beschriftet, und die ML-Algorithmen verwenden diese Beschriftungen, um Klassen (oder 'Merkmale') eines Datensatzes zu klassifizieren und vorherzusagen und sie einer Gruppe oder einem Ergebnis zuzuordnen. +Abgeleitet aus der [Statistik](https://wikipedia.org/wiki/Statistical_classification) verwendet die Klassifikation im klassischen maschinellen Lernen Merkmale wie `smoker`, `weight` und `age`, um die _Wahrscheinlichkeit der Entwicklung von Krankheit X_ zu bestimmen. Als eine Technik des überwachten Lernens, ähnlich den Regressionsübungen, die du zuvor durchgeführt hast, sind deine Daten beschriftet, und die ML-Algorithmen verwenden diese Beschriftungen, um Klassen (oder 'Merkmale') eines Datensatzes zu klassifizieren und vorherzusagen und sie einer Gruppe oder einem Ergebnis zuzuordnen. -✅ Nimm dir einen Moment Zeit, um dir einen Datensatz über Küchen vorzustellen. Welche Fragen könnte ein Multiklassen-Modell beantworten? Welche Fragen könnte ein binäres Modell beantworten? Was wäre, wenn du herausfinden möchtest, ob eine bestimmte Küche wahrscheinlich Bockshornklee verwendet? Was wäre, wenn du herausfinden möchtest, ob du mit einer Tüte voller Sternanis, Artischocken, Blumenkohl und Meerrettich ein typisches indisches Gericht zubereiten könntest? +✅ Nimm dir einen Moment Zeit, um dir einen Datensatz über Küchen vorzustellen. Welche Fragen könnte ein Mehrklassenmodell beantworten? Welche Fragen könnte ein binäres Modell beantworten? Was wäre, wenn du herausfinden möchtest, ob eine bestimmte Küche wahrscheinlich Bockshornklee verwendet? Oder was wäre, wenn du sehen möchtest, ob du mit einer Tüte voller Sternanis, Artischocken, Blumenkohl und Meerrettich ein typisches indisches Gericht zubereiten könntest? [![Verrückte Mystery-Körbe](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Verrückte Mystery-Körbe") -> 🎥 Klicke auf das Bild oben für ein Video. Das ganze Konzept der Show 'Chopped' basiert auf dem 'Mystery-Korb', bei dem Köche aus einer zufälligen Auswahl von Zutaten ein Gericht zubereiten müssen. Sicherlich hätte ein ML-Modell geholfen! +> 🎥 Klicke auf das Bild oben für ein Video. Die ganze Prämisse der Show 'Chopped' ist der 'Mystery-Korb', bei dem Köche aus einer zufälligen Auswahl an Zutaten ein Gericht zaubern müssen. Sicherlich hätte ein ML-Modell geholfen! ## Hallo 'Classifier' -Die Frage, die wir diesem Küchendatensatz stellen möchten, ist tatsächlich eine **Multiklassen-Frage**, da wir mehrere potenzielle nationale Küchen zur Auswahl haben. Angenommen, wir haben eine Gruppe von Zutaten – zu welcher dieser vielen Klassen passt die Daten? +Die Frage, die wir an diesen Küchendatensatz stellen möchten, ist tatsächlich eine **Mehrklassenfrage**, da wir mit mehreren potenziellen Nationalküchen arbeiten. Angesichts einer Reihe von Zutaten, zu welcher dieser vielen Klassen passt die Daten? -Scikit-learn bietet verschiedene Algorithmen zur Klassifikation von Daten, je nachdem, welche Art von Problem du lösen möchtest. In den nächsten zwei Lektionen wirst du einige dieser Algorithmen kennenlernen. +Scikit-learn bietet mehrere verschiedene Algorithmen zur Klassifikation von Daten, je nachdem, welche Art von Problem du lösen möchtest. In den nächsten zwei Lektionen wirst du einige dieser Algorithmen kennenlernen. ## Übung – Daten bereinigen und ausbalancieren -Die erste Aufgabe, bevor du mit diesem Projekt beginnst, besteht darin, deine Daten zu bereinigen und **auszubalancieren**, um bessere Ergebnisse zu erzielen. Beginne mit der leeren Datei _notebook.ipynb_ im Stammverzeichnis dieses Ordners. +Die erste Aufgabe, bevor wir mit diesem Projekt beginnen, besteht darin, die Daten zu bereinigen und **auszubalancieren**, um bessere Ergebnisse zu erzielen. Beginne mit der leeren Datei _notebook.ipynb_ im Stammverzeichnis dieses Ordners. -Das erste, was du installieren musst, ist [imblearn](https://imbalanced-learn.org/stable/). Dies ist ein Scikit-learn-Paket, das dir ermöglicht, die Daten besser auszubalancieren (du wirst gleich mehr über diese Aufgabe erfahren). +Das erste, was du installieren musst, ist [imblearn](https://imbalanced-learn.org/stable/). Dies ist ein Scikit-learn-Paket, das dir hilft, die Daten besser auszubalancieren (du wirst gleich mehr über diese Aufgabe erfahren). 1. Um `imblearn` zu installieren, führe `pip install` aus, wie folgt: @@ -88,7 +88,7 @@ Das erste, was du installieren musst, ist [imblearn](https://imbalanced-learn.or df = pd.read_csv('../data/cuisines.csv') ``` - Mit `read_csv()` werden die Inhalte der CSV-Datei _cusines.csv_ gelesen und in der Variable `df` gespeichert. + Mit `read_csv()` liest du den Inhalt der CSV-Datei _cusines.csv_ und speicherst ihn in der Variablen `df`. 1. Überprüfe die Form der Daten: @@ -108,7 +108,7 @@ Das erste, was du installieren musst, ist [imblearn](https://imbalanced-learn.or | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | ``` -1. Rufe `info()` auf, um Informationen über die Daten zu erhalten: +1. Hole dir Informationen über diese Daten, indem du `info()` aufrufst: ```python df.info() @@ -128,15 +128,15 @@ Das erste, was du installieren musst, ist [imblearn](https://imbalanced-learn.or Jetzt wird die Arbeit interessanter. Lass uns die Verteilung der Daten pro Küche entdecken. -1. Plotte die Daten als Balken, indem du `barh()` aufrufst: +1. Stelle die Daten als Balken dar, indem du `barh()` aufrufst: ```python df.cuisine.value_counts().plot.barh() ``` - ![Verteilung der Küchendaten](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.de.png) + ![Verteilung der Küchendaten](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) - Es gibt eine begrenzte Anzahl von Küchen, aber die Verteilung der Daten ist ungleichmäßig. Du kannst das beheben! Bevor du das tust, erkunde die Daten ein wenig mehr. + Es gibt eine begrenzte Anzahl von Küchen, aber die Verteilung der Daten ist ungleichmäßig. Das kannst du beheben! Bevor du das tust, erkunde noch ein wenig mehr. 1. Finde heraus, wie viele Daten pro Küche verfügbar sind, und gib sie aus: @@ -166,9 +166,9 @@ Jetzt wird die Arbeit interessanter. Lass uns die Verteilung der Daten pro Küch ## Zutaten entdecken -Jetzt kannst du tiefer in die Daten eintauchen und herausfinden, welche typischen Zutaten pro Küche vorkommen. Du solltest wiederkehrende Daten bereinigen, die Verwirrung zwischen den Küchen schaffen. Lass uns mehr über dieses Problem erfahren. +Jetzt kannst du tiefer in die Daten eintauchen und herausfinden, welche typischen Zutaten pro Küche verwendet werden. Du solltest wiederkehrende Daten bereinigen, die Verwirrung zwischen den Küchen stiften. Lass uns mehr über dieses Problem erfahren. -1. Erstelle eine Funktion `create_ingredient()` in Python, um ein Zutaten-Datenframe zu erstellen. Diese Funktion beginnt damit, eine wenig hilfreiche Spalte zu entfernen und Zutaten nach ihrer Häufigkeit zu sortieren: +1. Erstelle eine Funktion `create_ingredient()` in Python, um ein Zutaten-Datenframe zu erstellen. Diese Funktion beginnt damit, eine nicht hilfreiche Spalte zu entfernen, und sortiert die Zutaten nach ihrer Häufigkeit: ```python def create_ingredient_df(df): @@ -181,14 +181,14 @@ Jetzt kannst du tiefer in die Daten eintauchen und herausfinden, welche typische Jetzt kannst du diese Funktion verwenden, um eine Vorstellung von den zehn beliebtesten Zutaten pro Küche zu bekommen. -1. Rufe `create_ingredient()` auf und plotte die Daten mit `barh()`: +1. Rufe `create_ingredient()` auf und stelle die Daten mit `barh()` dar: ```python thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh() ``` - ![thai](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.de.png) + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) 1. Mache dasselbe für die japanischen Daten: @@ -197,7 +197,7 @@ Jetzt kannst du tiefer in die Daten eintauchen und herausfinden, welche typische japanese_ingredient_df.head(10).plot.barh() ``` - ![japanisch](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.de.png) + ![japanisch](../../../../4-Classification/1-Introduction/images/japanese.png) 1. Nun für die chinesischen Zutaten: @@ -206,27 +206,27 @@ Jetzt kannst du tiefer in die Daten eintauchen und herausfinden, welche typische chinese_ingredient_df.head(10).plot.barh() ``` - ![chinesisch](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.de.png) + ![chinesisch](../../../../4-Classification/1-Introduction/images/chinese.png) -1. Plotte die indischen Zutaten: +1. Stelle die indischen Zutaten dar: ```python indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh() ``` - ![indisch](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.de.png) + ![indisch](../../../../4-Classification/1-Introduction/images/indian.png) -1. Schließlich plotte die koreanischen Zutaten: +1. Schließlich stelle die koreanischen Zutaten dar: ```python korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() ``` - ![koreanisch](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.de.png) + ![koreanisch](../../../../4-Classification/1-Introduction/images/korean.png) -1. Entferne nun die häufigsten Zutaten, die Verwirrung zwischen verschiedenen Küchen schaffen, indem du `drop()` aufrufst: +1. Entferne nun die häufigsten Zutaten, die Verwirrung zwischen verschiedenen Küchen stiften, indem du `drop()` aufrufst: Jeder liebt Reis, Knoblauch und Ingwer! @@ -236,7 +236,7 @@ Jetzt kannst du tiefer in die Daten eintauchen und herausfinden, welche typische feature_df.head() ``` -## Datensatz ausbalancieren +## Den Datensatz ausbalancieren Nachdem du die Daten bereinigt hast, verwende [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) – "Synthetic Minority Over-sampling Technique" – um sie auszugleichen. @@ -247,7 +247,7 @@ Nachdem du die Daten bereinigt hast, verwende [SMOTE](https://imbalanced-learn.o transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) ``` - Durch das Ausbalancieren deiner Daten erzielst du bessere Ergebnisse bei der Klassifikation. Denke an eine binäre Klassifikation. Wenn die meisten deiner Daten einer Klasse angehören, wird ein ML-Modell diese Klasse häufiger vorhersagen, einfach weil es mehr Daten dafür gibt. Das Ausbalancieren der Daten nimmt jede Verzerrung und hilft, diese Ungleichheit zu beseitigen. + Durch das Ausbalancieren deiner Daten erzielst du bessere Ergebnisse bei der Klassifikation. Denke an eine binäre Klassifikation. Wenn die meisten deiner Daten einer Klasse angehören, wird ein ML-Modell diese Klasse häufiger vorhersagen, einfach weil es mehr Daten dafür gibt. Das Ausbalancieren der Daten nimmt verzerrte Daten und hilft, dieses Ungleichgewicht zu beseitigen. 1. Jetzt kannst du die Anzahl der Labels pro Zutat überprüfen: @@ -281,7 +281,7 @@ Nachdem du die Daten bereinigt hast, verwende [SMOTE](https://imbalanced-learn.o transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') ``` -1. Du kannst dir die Daten noch einmal mit `transformed_df.head()` und `transformed_df.info()` ansehen. Speichere eine Kopie dieser Daten für die Verwendung in zukünftigen Lektionen: +1. Du kannst einen letzten Blick auf die Daten werfen, indem du `transformed_df.head()` und `transformed_df.info()` aufrufst. Speichere eine Kopie dieser Daten für die Verwendung in zukünftigen Lektionen: ```python transformed_df.head() @@ -289,17 +289,17 @@ Nachdem du die Daten bereinigt hast, verwende [SMOTE](https://imbalanced-learn.o transformed_df.to_csv("../data/cleaned_cuisines.csv") ``` - Diese frische CSV-Datei befindet sich jetzt im Stammordner der Daten. + Diese frische CSV-Datei befindet sich nun im Stamm-Datenordner. --- ## 🚀 Herausforderung -Dieses Curriculum enthält mehrere interessante Datensätze. Durchsuche die `data`-Ordner und sieh nach, ob einer Datensätze enthält, die für binäre oder Multiklassen-Klassifikation geeignet wären. Welche Fragen würdest du diesem Datensatz stellen? +Dieses Curriculum enthält mehrere interessante Datensätze. Durchsuche die `data`-Ordner und sieh nach, ob einer Datensätze enthält, die sich für binäre oder Mehrklassenklassifikation eignen. Welche Fragen würdest du an diesen Datensatz stellen? -## [Quiz nach der Lektion](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) +## [Quiz nach der Lektion](https://ff-quizzes.netlify.app/en/ml/) -## Überprüfung & Selbststudium +## Rückblick & Selbststudium Erkunde die API von SMOTE. Für welche Anwendungsfälle ist sie am besten geeignet? Welche Probleme löst sie? @@ -310,4 +310,4 @@ Erkunde die API von SMOTE. Für welche Anwendungsfälle ist sie am besten geeign --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mithilfe des KI-Übersetzungsdienstes [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file diff --git a/translations/de/4-Classification/2-Classifiers-1/README.md b/translations/de/4-Classification/2-Classifiers-1/README.md index 5ea9cfd5a..1bad711e3 100644 --- a/translations/de/4-Classification/2-Classifiers-1/README.md +++ b/translations/de/4-Classification/2-Classifiers-1/README.md @@ -1,24 +1,24 @@ -# Klassifikatoren für Küchen 1 +# Küchenklassifikatoren 1 -In dieser Lektion wirst du den Datensatz verwenden, den du in der letzten Lektion gespeichert hast. Er enthält ausgewogene, bereinigte Daten über verschiedene Küchen. +In dieser Lektion wirst du den Datensatz verwenden, den du in der letzten Lektion gespeichert hast. Er enthält ausgewogene, bereinigte Daten rund um verschiedene Küchen. -Du wirst diesen Datensatz mit einer Vielzahl von Klassifikatoren nutzen, um _eine nationale Küche basierend auf einer Gruppe von Zutaten vorherzusagen_. Dabei lernst du mehr über die verschiedenen Möglichkeiten, wie Algorithmen für Klassifikationsaufgaben eingesetzt werden können. +Du wirst diesen Datensatz mit einer Vielzahl von Klassifikatoren nutzen, um _eine nationale Küche basierend auf einer Gruppe von Zutaten vorherzusagen_. Dabei wirst du mehr über einige der Methoden lernen, wie Algorithmen für Klassifikationsaufgaben eingesetzt werden können. -## [Quiz vor der Lektion](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) # Vorbereitung -Vorausgesetzt, du hast [Lektion 1](../1-Introduction/README.md) abgeschlossen, stelle sicher, dass eine Datei namens _cleaned_cuisines.csv_ im Stammverzeichnis des Ordners `/data` für diese vier Lektionen vorhanden ist. +Falls du [Lektion 1](../1-Introduction/README.md) abgeschlossen hast, stelle sicher, dass eine Datei namens _cleaned_cuisines.csv_ im Root-Ordner `/data` für diese vier Lektionen existiert. -## Übung – Eine nationale Küche vorhersagen +## Übung - Vorhersage einer nationalen Küche 1. Arbeite im Ordner _notebook.ipynb_ dieser Lektion und importiere die Datei zusammen mit der Pandas-Bibliothek: @@ -28,7 +28,7 @@ Vorausgesetzt, du hast [Lektion 1](../1-Introduction/README.md) abgeschlossen, s cuisines_df.head() ``` - Die Daten sehen wie folgt aus: + Die Daten sehen so aus: | | 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 | | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | @@ -49,7 +49,7 @@ Vorausgesetzt, du hast [Lektion 1](../1-Introduction/README.md) abgeschlossen, s import numpy as np ``` -1. Teile die X- und y-Koordinaten in zwei DataFrames für das Training auf. `cuisine` kann das Label-DataFrame sein: +1. Teile die X- und y-Koordinaten in zwei Dataframes für das Training auf. `cuisine` kann das Labels-Dataframe sein: ```python cuisines_label_df = cuisines_df['cuisine'] @@ -86,11 +86,11 @@ Vorausgesetzt, du hast [Lektion 1](../1-Introduction/README.md) abgeschlossen, s Jetzt bist du bereit, dein Modell zu trainieren! -## Den richtigen Klassifikator auswählen +## Auswahl des Klassifikators -Da deine Daten nun bereinigt und bereit für das Training sind, musst du entscheiden, welchen Algorithmus du für die Aufgabe verwenden möchtest. +Jetzt, da deine Daten bereinigt und bereit für das Training sind, musst du entscheiden, welchen Algorithmus du für die Aufgabe verwenden möchtest. -Scikit-learn ordnet Klassifikation unter Überwachtes Lernen ein, und in dieser Kategorie findest du viele Möglichkeiten zur Klassifikation. [Die Vielfalt](https://scikit-learn.org/stable/supervised_learning.html) kann auf den ersten Blick überwältigend sein. Die folgenden Methoden umfassen Klassifikationstechniken: +Scikit-learn gruppiert Klassifikation unter Überwachtem Lernen, und in dieser Kategorie findest du viele Möglichkeiten zur Klassifikation. [Die Vielfalt](https://scikit-learn.org/stable/supervised_learning.html) kann auf den ersten Blick überwältigend sein. Die folgenden Methoden beinhalten alle Klassifikationstechniken: - Lineare Modelle - Support Vector Machines @@ -105,62 +105,62 @@ Scikit-learn ordnet Klassifikation unter Überwachtes Lernen ein, und in dieser ### Welchen Klassifikator wählen? -Welchen Klassifikator solltest du also wählen? Oft ist es sinnvoll, mehrere auszuprobieren und nach einem guten Ergebnis zu suchen. Scikit-learn bietet einen [Vergleich nebeneinander](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) auf einem erstellten Datensatz, bei dem KNeighbors, SVC auf zwei Arten, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB und QuadraticDiscriminationAnalysis verglichen werden. Die Ergebnisse werden visualisiert: +Welchen Klassifikator solltest du also wählen? Oft ist es sinnvoll, mehrere auszuprobieren und nach einem guten Ergebnis zu suchen. Scikit-learn bietet einen [Vergleich nebeneinander](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) auf einem erstellten Datensatz, der KNeighbors, SVC auf zwei Arten, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB und QuadraticDiscriminationAnalysis vergleicht und die Ergebnisse visualisiert: -![Vergleich von Klassifikatoren](../../../../translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.de.png) -> Diagramme aus der Scikit-learn-Dokumentation +![Vergleich von Klassifikatoren](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Diagramme aus der Dokumentation von Scikit-learn > AutoML löst dieses Problem elegant, indem es diese Vergleiche in der Cloud durchführt und dir ermöglicht, den besten Algorithmus für deine Daten auszuwählen. Probiere es [hier](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) aus. ### Ein besserer Ansatz -Ein besserer Ansatz als wildes Raten ist es, die Ideen auf diesem herunterladbaren [ML-Cheat-Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) zu befolgen. Hier erfahren wir, dass wir für unser Multiklassenproblem einige Optionen haben: +Ein besserer Ansatz als wildes Raten ist es, die Ideen auf diesem herunterladbaren [ML Cheat Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) zu befolgen. Hier erfahren wir, dass wir für unser Multiklassenproblem einige Optionen haben: -![Cheatsheet für Multiklassenprobleme](../../../../translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.de.png) -> Ein Abschnitt des Algorithmus-Cheat-Sheets von Microsoft, der Optionen für Multiklassenklassifikation beschreibt +![Cheatsheet für Multiklassenprobleme](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Ein Abschnitt des Algorithmus-Cheat Sheets von Microsoft, der Multiklassen-Klassifikationsoptionen beschreibt -✅ Lade dieses Cheat-Sheet herunter, drucke es aus und hänge es an deine Wand! +✅ Lade dieses Cheat Sheet herunter, drucke es aus und hänge es an deine Wand! ### Überlegungen -Lass uns überlegen, welche Ansätze angesichts unserer Einschränkungen sinnvoll sind: +Lass uns sehen, ob wir verschiedene Ansätze basierend auf den Einschränkungen, die wir haben, durchdenken können: -- **Neuronale Netze sind zu aufwendig**. Angesichts unseres bereinigten, aber minimalen Datensatzes und der Tatsache, dass wir das Training lokal über Notebooks durchführen, sind neuronale Netze für diese Aufgabe zu schwergewichtig. -- **Kein Zwei-Klassen-Klassifikator**. Wir verwenden keinen Zwei-Klassen-Klassifikator, daher scheidet One-vs-All aus. -- **Entscheidungsbaum oder logistische Regression könnten funktionieren**. Ein Entscheidungsbaum könnte funktionieren oder eine logistische Regression für Multiklassendaten. -- **Multiklassen-Boosted-Entscheidungsbäume lösen ein anderes Problem**. Der Multiklassen-Boosted-Entscheidungsbaum eignet sich am besten für nichtparametrische Aufgaben, z. B. Aufgaben zur Erstellung von Rankings, und ist daher für uns nicht nützlich. +- **Neuronale Netze sind zu schwergewichtig**. Angesichts unseres bereinigten, aber minimalen Datensatzes und der Tatsache, dass wir das Training lokal über Notebooks durchführen, sind neuronale Netze für diese Aufgabe zu schwergewichtig. +- **Kein Zwei-Klassen-Klassifikator**. Wir verwenden keinen Zwei-Klassen-Klassifikator, daher fällt One-vs-All weg. +- **Entscheidungsbaum oder logistische Regression könnten funktionieren**. Ein Entscheidungsbaum könnte funktionieren oder logistische Regression für Multiklassen-Daten. +- **Multiklassen-Boosted-Entscheidungsbäume lösen ein anderes Problem**. Der Multiklassen-Boosted-Entscheidungsbaum ist am besten geeignet für nichtparametrische Aufgaben, z. B. Aufgaben, die Rankings erstellen sollen, daher ist er für uns nicht nützlich. ### Verwendung von Scikit-learn -Wir werden Scikit-learn verwenden, um unsere Daten zu analysieren. Es gibt jedoch viele Möglichkeiten, logistische Regression in Scikit-learn zu verwenden. Sieh dir die [Parameter an, die übergeben werden können](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). +Wir werden Scikit-learn verwenden, um unsere Daten zu analysieren. Es gibt jedoch viele Möglichkeiten, logistische Regression in Scikit-learn zu verwenden. Schau dir die [Parameter an, die übergeben werden können](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). -Im Wesentlichen gibt es zwei wichtige Parameter – `multi_class` und `solver` –, die wir angeben müssen, wenn wir Scikit-learn bitten, eine logistische Regression durchzuführen. Der Wert von `multi_class` legt ein bestimmtes Verhalten fest. Der Wert des Solvers gibt an, welcher Algorithmus verwendet werden soll. Nicht alle Solver können mit allen `multi_class`-Werten kombiniert werden. +Im Wesentlichen gibt es zwei wichtige Parameter - `multi_class` und `solver` -, die wir angeben müssen, wenn wir Scikit-learn bitten, eine logistische Regression durchzuführen. Der Wert von `multi_class` legt ein bestimmtes Verhalten fest. Der Wert des Solvers gibt an, welchen Algorithmus verwendet werden soll. Nicht alle Solver können mit allen `multi_class`-Werten kombiniert werden. Laut der Dokumentation verwendet der Trainingsalgorithmus im Multiklassenfall: -- **Das One-vs-Rest (OvR)-Schema**, wenn die Option `multi_class` auf `ovr` gesetzt ist -- **Den Kreuzentropieverlust**, wenn die Option `multi_class` auf `multinomial` gesetzt ist. (Derzeit wird die Option `multinomial` nur von den Solvern ‘lbfgs’, ‘sag’, ‘saga’ und ‘newton-cg’ unterstützt.) +- **Das One-vs-Rest (OvR)-Schema**, wenn die `multi_class`-Option auf `ovr` gesetzt ist +- **Den Kreuzentropie-Verlust**, wenn die `multi_class`-Option auf `multinomial` gesetzt ist. (Derzeit wird die `multinomial`-Option nur von den Solvern ‘lbfgs’, ‘sag’, ‘saga’ und ‘newton-cg’ unterstützt.) -> 🎓 Das 'Schema' kann entweder 'ovr' (One-vs-Rest) oder 'multinomial' sein. Da die logistische Regression eigentlich für die binäre Klassifikation entwickelt wurde, ermöglichen diese Schemata, sie besser für Multiklassenklassifikationsaufgaben zu nutzen. [Quelle](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) +> 🎓 Das 'Schema' kann entweder 'ovr' (One-vs-Rest) oder 'multinomial' sein. Da die logistische Regression eigentlich für die Unterstützung der binären Klassifikation entwickelt wurde, ermöglichen diese Schemata, dass sie besser mit Multiklassen-Klassifikationsaufgaben umgehen kann. [Quelle](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) > 🎓 Der 'Solver' wird definiert als "der Algorithmus, der im Optimierungsproblem verwendet wird". [Quelle](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). Scikit-learn bietet diese Tabelle, um zu erklären, wie Solver mit verschiedenen Herausforderungen umgehen, die durch unterschiedliche Datenstrukturen entstehen: -![Solver](../../../../translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.de.png) +![Solver](../../../../4-Classification/2-Classifiers-1/images/solvers.png) -## Übung – Daten aufteilen +## Übung - Daten aufteilen -Wir können uns für unseren ersten Trainingsversuch auf die logistische Regression konzentrieren, da du diese kürzlich in einer vorherigen Lektion gelernt hast. +Wir können uns auf die logistische Regression für unseren ersten Trainingsversuch konzentrieren, da du kürzlich in einer vorherigen Lektion darüber gelernt hast. Teile deine Daten in Trainings- und Testgruppen auf, indem du `train_test_split()` aufrufst: ```python X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) ``` -## Übung – Logistische Regression anwenden +## Übung - logistische Regression anwenden -Da du den Multiklassenfall verwendest, musst du ein _Schema_ und einen _Solver_ auswählen. Verwende LogisticRegression mit einer Multiklassen-Einstellung und dem **liblinear**-Solver für das Training. +Da du den Multiklassenfall verwendest, musst du wählen, welches _Schema_ du verwenden möchtest und welchen _Solver_ du festlegen möchtest. Verwende LogisticRegression mit einer Multiklassen-Einstellung und dem **liblinear**-Solver für das Training. 1. Erstelle eine logistische Regression mit `multi_class` auf `ovr` und dem Solver auf `liblinear` gesetzt: @@ -172,7 +172,7 @@ Da du den Multiklassenfall verwendest, musst du ein _Schema_ und einen _Solver_ print ("Accuracy is {}".format(accuracy)) ``` - ✅ Probiere einen anderen Solver wie `lbfgs` aus, der oft als Standard gesetzt ist. + ✅ Probiere einen anderen Solver wie `lbfgs`, der oft als Standard gesetzt ist > Hinweis: Verwenden Sie die Pandas-Funktion [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html), um Ihre Daten bei Bedarf zu glätten. Die Genauigkeit liegt bei über **80%**! @@ -238,11 +238,11 @@ Die Genauigkeit liegt bei über **80%**! In dieser Lektion haben Sie Ihre bereinigten Daten verwendet, um ein Machine-Learning-Modell zu erstellen, das eine nationale Küche basierend auf einer Reihe von Zutaten vorhersagen kann. Nehmen Sie sich Zeit, um die vielen Optionen zu lesen, die Scikit-learn zur Klassifizierung von Daten bietet. Tauchen Sie tiefer in das Konzept des 'Solvers' ein, um zu verstehen, was hinter den Kulissen passiert. -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) -## Rückblick & Selbststudium +## Überprüfung & Selbststudium -Tauchen Sie etwas tiefer in die Mathematik hinter der logistischen Regression ein in [dieser Lektion](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf). +Tauchen Sie etwas tiefer in die Mathematik hinter der logistischen Regression ein in [dieser Lektion](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) ## Aufgabe [Studieren Sie die Solver](assignment.md) @@ -250,4 +250,4 @@ Tauchen Sie etwas tiefer in die Mathematik hinter der logistischen Regression ei --- **Haftungsausschluss**: -Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, beachten Sie bitte, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 sich aus der Nutzung dieser Übersetzung ergeben. \ No newline at end of file +Dieses Dokument wurde mit dem KI-Übersetzungsdienst [Co-op Translator](https://github.com/Azure/co-op-translator) übersetzt. Obwohl wir uns um Genauigkeit bemühen, weisen wir darauf hin, dass automatisierte Übersetzungen Fehler oder Ungenauigkeiten enthalten können. Das Originaldokument in seiner ursprünglichen Sprache sollte als 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 Nutzung dieser Übersetzung entstehen. \ No newline at end of file diff --git a/translations/de/4-Classification/3-Classifiers-2/README.md b/translations/de/4-Classification/3-Classifiers-2/README.md index bcdf77e92..9b2696830 100644 --- a/translations/de/4-Classification/3-Classifiers-2/README.md +++ b/translations/de/4-Classification/3-Classifiers-2/README.md @@ -1,49 +1,49 @@ -# Küchenklassifikatoren 2 +# Klassifikatoren für Küchen 2 -In dieser zweiten Lektion zur Klassifikation wirst du weitere Möglichkeiten zur Klassifikation numerischer Daten erkunden. Außerdem wirst du die Auswirkungen kennenlernen, die die Wahl eines Klassifikators gegenüber einem anderen haben kann. +In dieser zweiten Lektion zur Klassifikation wirst du weitere Methoden zur Klassifikation numerischer Daten erkunden. Außerdem lernst du die Konsequenzen kennen, die sich aus der Wahl eines Klassifikators ergeben. -## [Quiz vor der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) +## [Quiz vor der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) ### Voraussetzungen -Wir gehen davon aus, dass du die vorherigen Lektionen abgeschlossen hast und einen bereinigten Datensatz in deinem `data`-Ordner namens _cleaned_cuisines.csv_ im Hauptverzeichnis dieses 4-Lektionen-Ordners hast. +Wir gehen davon aus, dass du die vorherigen Lektionen abgeschlossen hast und ein bereinigtes Dataset in deinem `data`-Ordner namens _cleaned_cuisines.csv_ im Hauptverzeichnis dieses 4-Lektionen-Ordners hast. ### Vorbereitung -Wir haben deine _notebook.ipynb_-Datei mit dem bereinigten Datensatz geladen und in X- und y-Datenframes unterteilt, die bereit für den Modellierungsprozess sind. +Wir haben deine Datei _notebook.ipynb_ mit dem bereinigten Dataset geladen und in X- und y-Datenframes aufgeteilt, die bereit für den Modellierungsprozess sind. ## Eine Klassifikationskarte -Zuvor hast du die verschiedenen Optionen kennengelernt, die dir bei der Klassifikation von Daten mithilfe des Cheat Sheets von Microsoft zur Verfügung stehen. Scikit-learn bietet ein ähnliches, aber detaillierteres Cheat Sheet, das dir dabei helfen kann, deine Auswahl an Schätzern (ein anderer Begriff für Klassifikatoren) weiter einzugrenzen: +Zuvor hast du die verschiedenen Optionen kennengelernt, die dir bei der Klassifikation von Daten mithilfe des Microsoft-Spickzettels zur Verfügung stehen. Scikit-learn bietet einen ähnlichen, aber detaillierteren Spickzettel, der dir dabei helfen kann, deine Auswahl an Schätzern (ein anderer Begriff für Klassifikatoren) weiter einzugrenzen: -![ML-Karte von Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.de.png) -> Tipp: [Besuche diese Karte online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) und klicke entlang des Pfades, um die Dokumentation zu lesen. +![ML-Karte von Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Tipp: [Besuche diese Karte online](https://scikit-learn.org/stable/tutorial/machine_learning_map/) und klicke entlang des Pfads, um die Dokumentation zu lesen. ### Der Plan -Diese Karte ist sehr hilfreich, sobald du ein klares Verständnis deiner Daten hast, da du entlang ihrer Pfade zu einer Entscheidung „gehen“ kannst: +Diese Karte ist sehr hilfreich, sobald du ein klares Verständnis deiner Daten hast, da du ihre Pfade entlanggehen kannst, um eine Entscheidung zu treffen: - Wir haben >50 Stichproben - Wir möchten eine Kategorie vorhersagen - Wir haben beschriftete Daten - Wir haben weniger als 100.000 Stichproben -- ✨ Wir können einen Linear SVC wählen +- ✨ Wir können einen Linearen SVC wählen - Falls das nicht funktioniert, da wir numerische Daten haben: - Können wir einen ✨ KNeighbors-Klassifikator ausprobieren - Falls das nicht funktioniert, probiere ✨ SVC und ✨ Ensemble-Klassifikatoren -Dies ist ein sehr hilfreicher Weg, dem man folgen kann. +Dies ist ein sehr hilfreicher Pfad, dem man folgen kann. -## Übung - Daten aufteilen +## Übung – Daten aufteilen Entlang dieses Pfades sollten wir zunächst einige Bibliotheken importieren, die wir verwenden möchten. @@ -65,15 +65,15 @@ Entlang dieses Pfades sollten wir zunächst einige Bibliotheken importieren, die X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) ``` -## Linear SVC-Klassifikator +## Linearer SVC-Klassifikator -Support-Vector Clustering (SVC) ist ein Mitglied der Familie der Support-Vector-Maschinen-Techniken des maschinellen Lernens (mehr dazu unten). Bei dieser Methode kannst du einen 'Kernel' wählen, um zu entscheiden, wie die Labels gruppiert werden. Der Parameter 'C' bezieht sich auf die 'Regularisierung', die den Einfluss der Parameter reguliert. Der Kernel kann einer von [mehreren](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) sein; hier setzen wir ihn auf 'linear', um sicherzustellen, dass wir Linear SVC nutzen. Die Wahrscheinlichkeit ist standardmäßig auf 'false' gesetzt; hier setzen wir sie auf 'true', um Wahrscheinlichkeitsabschätzungen zu erhalten. Wir setzen den Zufallszustand auf '0', um die Daten zu mischen und Wahrscheinlichkeiten zu erhalten. +Support-Vector Clustering (SVC) ist ein Mitglied der Familie der Support-Vector-Maschinen (SVM), einer Technik des maschinellen Lernens (mehr dazu unten). Bei dieser Methode kannst du einen 'Kernel' auswählen, um zu entscheiden, wie die Labels gruppiert werden. Der Parameter 'C' steht für 'Regularisierung', der den Einfluss der Parameter reguliert. Der Kernel kann einer von [mehreren](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) sein; hier setzen wir ihn auf 'linear', um sicherzustellen, dass wir linearen SVC nutzen. Die Wahrscheinlichkeit ist standardmäßig auf 'false' gesetzt; hier setzen wir sie auf 'true', um Wahrscheinlichkeitsabschätzungen zu erhalten. Wir setzen den Zufallszustand auf '0', um die Daten zu mischen und Wahrscheinlichkeiten zu erhalten. -### Übung - Linear SVC anwenden +### Übung – Linearen SVC anwenden Beginne damit, ein Array von Klassifikatoren zu erstellen. Du wirst dieses Array schrittweise erweitern, während wir testen. -1. Beginne mit einem Linear SVC: +1. Beginne mit einem Linearen SVC: ```python C = 10 @@ -83,7 +83,7 @@ Beginne damit, ein Array von Klassifikatoren zu erstellen. Du wirst dieses Array } ``` -2. Trainiere dein Modell mit dem Linear SVC und drucke einen Bericht aus: +2. Trainiere dein Modell mit dem Linearen SVC und gib einen Bericht aus: ```python n_classifiers = len(classifiers) @@ -116,13 +116,13 @@ Beginne damit, ein Array von Klassifikatoren zu erstellen. Du wirst dieses Array ## K-Neighbors-Klassifikator -K-Neighbors ist Teil der Familie der "Nachbarn"-Methoden des maschinellen Lernens, die sowohl für überwachtes als auch für unüberwachtes Lernen verwendet werden können. Bei dieser Methode wird eine vordefinierte Anzahl von Punkten erstellt, und Daten werden um diese Punkte herum gesammelt, sodass generalisierte Labels für die Daten vorhergesagt werden können. +K-Neighbors gehört zur Familie der "Nachbarn"-Methoden des maschinellen Lernens, die sowohl für überwachtes als auch unüberwachtes Lernen verwendet werden können. Bei dieser Methode wird eine vordefinierte Anzahl von Punkten erstellt, und Daten werden um diese Punkte herum gesammelt, sodass generalisierte Labels für die Daten vorhergesagt werden können. -### Übung - K-Neighbors-Klassifikator anwenden +### Übung – K-Neighbors-Klassifikator anwenden -Der vorherige Klassifikator war gut und hat gut mit den Daten funktioniert, aber vielleicht können wir eine bessere Genauigkeit erzielen. Probiere einen K-Neighbors-Klassifikator aus. +Der vorherige Klassifikator war gut und funktionierte gut mit den Daten, aber vielleicht können wir eine bessere Genauigkeit erzielen. Probiere einen K-Neighbors-Klassifikator aus. -1. Füge eine Zeile zu deinem Klassifikator-Array hinzu (füge ein Komma nach dem Linear SVC-Element hinzu): +1. Füge eine Zeile zu deinem Klassifikator-Array hinzu (füge ein Komma nach dem Linearen SVC-Element hinzu): ```python 'KNN classifier': KNeighborsClassifier(C), @@ -149,11 +149,11 @@ Der vorherige Klassifikator war gut und hat gut mit den Daten funktioniert, aber ## Support-Vector-Klassifikator -Support-Vector-Klassifikatoren sind Teil der [Support-Vector-Maschinen](https://wikipedia.org/wiki/Support-vector_machine)-Familie von ML-Methoden, die für Klassifikations- und Regressionstasks verwendet werden. SVMs "mappen Trainingsbeispiele auf Punkte im Raum", um den Abstand zwischen zwei Kategorien zu maximieren. Nachfolgende Daten werden in diesen Raum gemappt, sodass ihre Kategorie vorhergesagt werden kann. +Support-Vector-Klassifikatoren gehören zur [Support-Vector-Maschine](https://wikipedia.org/wiki/Support-vector_machine)-Familie von ML-Methoden, die für Klassifikations- und Regressionsaufgaben verwendet werden. SVMs "mappen Trainingsbeispiele auf Punkte im Raum", um den Abstand zwischen zwei Kategorien zu maximieren. Nachfolgende Daten werden in diesen Raum gemappt, sodass ihre Kategorie vorhergesagt werden kann. -### Übung - Support-Vector-Klassifikator anwenden +### Übung – Support-Vector-Klassifikator anwenden -Lass uns versuchen, eine etwas bessere Genauigkeit mit einem Support-Vector-Klassifikator zu erzielen. +Versuchen wir, mit einem Support-Vector-Klassifikator eine etwas bessere Genauigkeit zu erzielen. 1. Füge ein Komma nach dem K-Neighbors-Element hinzu und füge dann diese Zeile hinzu: @@ -182,14 +182,14 @@ Lass uns versuchen, eine etwas bessere Genauigkeit mit einem Support-Vector-Klas ## Ensemble-Klassifikatoren -Lass uns den Pfad bis zum Ende verfolgen, auch wenn der vorherige Test ziemlich gut war. Lass uns einige 'Ensemble-Klassifikatoren' ausprobieren, insbesondere Random Forest und AdaBoost: +Lass uns den Pfad bis zum Ende verfolgen, auch wenn der vorherige Test ziemlich gut war. Probieren wir einige 'Ensemble-Klassifikatoren' aus, insbesondere Random Forest und AdaBoost: ```python 'RFST': RandomForestClassifier(n_estimators=100), 'ADA': AdaBoostClassifier(n_estimators=100) ``` -Das Ergebnis ist sehr gut, besonders bei Random Forest: +Das Ergebnis ist sehr gut, besonders für Random Forest: ```output Accuracy (train) for RFST: 84.5% @@ -223,9 +223,9 @@ weighted avg 0.73 0.72 0.72 1199 Diese Methode des maschinellen Lernens "kombiniert die Vorhersagen mehrerer Basis-Schätzer", um die Qualität des Modells zu verbessern. In unserem Beispiel haben wir Random Trees und AdaBoost verwendet. -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), eine Durchschnittsmethode, erstellt einen 'Wald' aus 'Entscheidungsbäumen', die mit Zufälligkeit durchsetzt sind, um Überanpassung zu vermeiden. Der Parameter n_estimators wird auf die Anzahl der Bäume gesetzt. +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), eine Mittelungsmethode, erstellt einen 'Wald' aus 'Entscheidungsbäumen', die mit Zufälligkeit durchsetzt sind, um Überanpassung zu vermeiden. Der Parameter n_estimators gibt die Anzahl der Bäume an. -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) passt einen Klassifikator an einen Datensatz an und passt dann Kopien dieses Klassifikators an denselben Datensatz an. Es konzentriert sich auf die Gewichte von falsch klassifizierten Elementen und passt die Anpassung für den nächsten Klassifikator an, um diese zu korrigieren. +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) passt einen Klassifikator an ein Dataset an und passt dann Kopien dieses Klassifikators an dasselbe Dataset an. Dabei wird der Fokus auf die Gewichte falsch klassifizierter Elemente gelegt, und die Anpassung für den nächsten Klassifikator wird entsprechend korrigiert. --- @@ -233,7 +233,7 @@ Diese Methode des maschinellen Lernens "kombiniert die Vorhersagen mehrerer Basi Jede dieser Techniken hat eine große Anzahl von Parametern, die du anpassen kannst. Recherchiere die Standardparameter jeder Technik und überlege, was das Anpassen dieser Parameter für die Qualität des Modells bedeuten würde. -## [Quiz nach der Vorlesung](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) +## [Quiz nach der Vorlesung](https://ff-quizzes.netlify.app/en/ml/) ## Rückblick & Selbststudium @@ -241,7 +241,7 @@ Es gibt viele Fachbegriffe in diesen Lektionen, also nimm dir einen Moment Zeit, ## Aufgabe -[Parameter-Spiel](assignment.md) +[Parameter-Spielerei](assignment.md) --- diff --git a/translations/de/4-Classification/4-Applied/README.md b/translations/de/4-Classification/4-Applied/README.md index b847a0ee2..3f44130ef 100644 --- a/translations/de/4-Classification/4-Applied/README.md +++ b/translations/de/4-Classification/4-Applied/README.md @@ -1,66 +1,66 @@ -# Erstellen Sie eine Web-App zur Empfehlung von Küchen +# Erstellen einer Web-App zur Empfehlung von Küchen -In dieser Lektion erstellen Sie ein Klassifikationsmodell mit einigen der Techniken, die Sie in den vorherigen Lektionen gelernt haben, und verwenden dabei den köstlichen Küchen-Datensatz, der in dieser Serie verwendet wurde. Außerdem erstellen Sie eine kleine Web-App, um ein gespeichertes Modell zu nutzen, indem Sie die Web-Laufzeit von Onnx verwenden. +In dieser Lektion wirst du ein Klassifikationsmodell erstellen, indem du einige der Techniken anwendest, die du in den vorherigen Lektionen gelernt hast, und mit dem köstlichen Küchendatensatz arbeitest, der in dieser Serie verwendet wurde. Außerdem wirst du eine kleine Web-App entwickeln, um ein gespeichertes Modell zu nutzen, indem du die Web-Laufzeit von Onnx einsetzt. -Eine der nützlichsten praktischen Anwendungen des maschinellen Lernens ist der Aufbau von Empfehlungssystemen, und Sie können heute den ersten Schritt in diese Richtung machen! +Eine der nützlichsten praktischen Anwendungen des maschinellen Lernens ist der Aufbau von Empfehlungssystemen, und du kannst heute den ersten Schritt in diese Richtung machen! [![Präsentation dieser Web-App](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Angewandtes ML") -> 🎥 Klicken Sie auf das Bild oben für ein Video: Jen Looper erstellt eine Web-App mit klassifizierten Küchendaten +> 🎥 Klicke auf das Bild oben für ein Video: Jen Looper erstellt eine Web-App mit klassifizierten Küchendaten -## [Quiz vor der Lektion](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) +## [Quiz vor der Lektion](https://ff-quizzes.netlify.app/en/ml/) -In dieser Lektion lernen Sie: +In dieser Lektion wirst du lernen: - Wie man ein Modell erstellt und es als Onnx-Modell speichert - Wie man Netron verwendet, um das Modell zu inspizieren - Wie man das Modell in einer Web-App für Inferenz verwendet -## Erstellen Sie Ihr Modell +## Erstelle dein Modell -Der Aufbau angewandter ML-Systeme ist ein wichtiger Bestandteil der Nutzung dieser Technologien für Ihre Geschäftssysteme. Sie können Modelle in Ihre Webanwendungen integrieren (und sie somit bei Bedarf offline verwenden), indem Sie Onnx verwenden. +Der Aufbau angewandter ML-Systeme ist ein wichtiger Teil der Nutzung dieser Technologien für Geschäftssysteme. Du kannst Modelle innerhalb deiner Webanwendungen verwenden (und sie somit bei Bedarf offline nutzen), indem du Onnx einsetzt. -In einer [vorherigen Lektion](../../3-Web-App/1-Web-App/README.md) haben Sie ein Regressionsmodell zu UFO-Sichtungen erstellt, es "eingepickelt" und in einer Flask-App verwendet. Obwohl diese Architektur sehr nützlich ist, handelt es sich um eine vollständige Python-App, und Ihre Anforderungen könnten die Verwendung einer JavaScript-Anwendung umfassen. +In einer [vorherigen Lektion](../../3-Web-App/1-Web-App/README.md) hast du ein Regressionsmodell über UFO-Sichtungen erstellt, es "eingemacht" und in einer Flask-App verwendet. Obwohl diese Architektur sehr nützlich ist, handelt es sich um eine vollständige Python-App, und deine Anforderungen könnten die Nutzung einer JavaScript-Anwendung umfassen. -In dieser Lektion können Sie ein einfaches JavaScript-basiertes System für Inferenz erstellen. Zunächst müssen Sie jedoch ein Modell trainieren und es für die Verwendung mit Onnx konvertieren. +In dieser Lektion kannst du ein einfaches JavaScript-basiertes System für Inferenz erstellen. Zunächst musst du jedoch ein Modell trainieren und es für die Verwendung mit Onnx konvertieren. ## Übung - Klassifikationsmodell trainieren -Trainieren Sie zunächst ein Klassifikationsmodell mit dem bereinigten Küchen-Datensatz, den wir verwendet haben. +Trainiere zunächst ein Klassifikationsmodell mit dem bereinigten Küchendatensatz, den wir verwendet haben. -1. Beginnen Sie mit dem Import nützlicher Bibliotheken: +1. Beginne mit dem Import nützlicher Bibliotheken: ```python !pip install skl2onnx import pandas as pd ``` - Sie benötigen '[skl2onnx](https://onnx.ai/sklearn-onnx/)', um Ihr Scikit-learn-Modell in das Onnx-Format zu konvertieren. + Du benötigst '[skl2onnx](https://onnx.ai/sklearn-onnx/)', um dein Scikit-learn-Modell in das Onnx-Format zu konvertieren. -1. Arbeiten Sie dann mit Ihren Daten wie in den vorherigen Lektionen, indem Sie eine CSV-Datei mit `read_csv()` lesen: +1. Arbeite dann mit deinen Daten wie in den vorherigen Lektionen, indem du eine CSV-Datei mit `read_csv()` liest: ```python data = pd.read_csv('../data/cleaned_cuisines.csv') data.head() ``` -1. Entfernen Sie die ersten beiden unnötigen Spalten und speichern Sie die verbleibenden Daten als 'X': +1. Entferne die ersten beiden unnötigen Spalten und speichere die verbleibenden Daten als 'X': ```python X = data.iloc[:,2:] X.head() ``` -1. Speichern Sie die Labels als 'y': +1. Speichere die Labels als 'y': ```python y = data[['cuisine']] @@ -68,11 +68,11 @@ Trainieren Sie zunächst ein Klassifikationsmodell mit dem bereinigten Küchen-D ``` -### Beginnen Sie mit dem Trainingsprozess +### Beginne die Trainingsroutine -Wir verwenden die 'SVC'-Bibliothek, die eine gute Genauigkeit bietet. +Wir werden die 'SVC'-Bibliothek verwenden, die eine gute Genauigkeit bietet. -1. Importieren Sie die entsprechenden Bibliotheken aus Scikit-learn: +1. Importiere die entsprechenden Bibliotheken aus Scikit-learn: ```python from sklearn.model_selection import train_test_split @@ -81,26 +81,26 @@ Wir verwenden die 'SVC'-Bibliothek, die eine gute Genauigkeit bietet. from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report ``` -1. Trennen Sie Trainings- und Testdaten: +1. Teile die Trainings- und Testdaten: ```python X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) ``` -1. Erstellen Sie ein SVC-Klassifikationsmodell wie in der vorherigen Lektion: +1. Erstelle ein SVC-Klassifikationsmodell wie in der vorherigen Lektion: ```python model = SVC(kernel='linear', C=10, probability=True,random_state=0) model.fit(X_train,y_train.values.ravel()) ``` -1. Testen Sie nun Ihr Modell, indem Sie `predict()` aufrufen: +1. Teste nun dein Modell, indem du `predict()` aufrufst: ```python y_pred = model.predict(X_test) ``` -1. Drucken Sie einen Klassifikationsbericht aus, um die Qualität des Modells zu überprüfen: +1. Gib einen Klassifikationsbericht aus, um die Qualität des Modells zu überprüfen: ```python print(classification_report(y_test,y_pred)) @@ -122,11 +122,11 @@ Wir verwenden die 'SVC'-Bibliothek, die eine gute Genauigkeit bietet. weighted avg 0.79 0.79 0.79 1199 ``` -### Konvertieren Sie Ihr Modell in Onnx +### Konvertiere dein Modell in Onnx -Stellen Sie sicher, dass die Konvertierung mit der richtigen Tensor-Anzahl erfolgt. Dieser Datensatz enthält 380 aufgelistete Zutaten, daher müssen Sie diese Zahl in `FloatTensorType` angeben: +Stelle sicher, dass die Konvertierung mit der richtigen Tensor-Anzahl erfolgt. Dieser Datensatz enthält 380 aufgelistete Zutaten, daher musst du diese Zahl in `FloatTensorType` angeben: -1. Konvertieren Sie mit einer Tensor-Anzahl von 380. +1. Konvertiere mit einer Tensor-Anzahl von 380. ```python from skl2onnx import convert_sklearn @@ -136,7 +136,7 @@ Stellen Sie sicher, dass die Konvertierung mit der richtigen Tensor-Anzahl erfol options = {id(model): {'nocl': True, 'zipmap': False}} ``` -1. Erstellen Sie die Onnx-Datei und speichern Sie sie als **model.onnx**: +1. Erstelle die Onnx-Datei und speichere sie als **model.onnx**: ```python onx = convert_sklearn(model, initial_types=initial_type, options=options) @@ -144,25 +144,25 @@ Stellen Sie sicher, dass die Konvertierung mit der richtigen Tensor-Anzahl erfol f.write(onx.SerializeToString()) ``` - > Hinweis: Sie können [Optionen](https://onnx.ai/sklearn-onnx/parameterized.html) in Ihrem Konvertierungsskript übergeben. In diesem Fall haben wir 'nocl' auf True und 'zipmap' auf False gesetzt. Da es sich um ein Klassifikationsmodell handelt, haben Sie die Möglichkeit, ZipMap zu entfernen, das eine Liste von Wörterbüchern erzeugt (nicht erforderlich). `nocl` bezieht sich darauf, ob Klasseninformationen im Modell enthalten sind. Reduzieren Sie die Größe Ihres Modells, indem Sie `nocl` auf 'True' setzen. + > Hinweis: Du kannst [Optionen](https://onnx.ai/sklearn-onnx/parameterized.html) in deinem Konvertierungsskript übergeben. In diesem Fall haben wir 'nocl' auf True und 'zipmap' auf False gesetzt. Da es sich um ein Klassifikationsmodell handelt, hast du die Möglichkeit, ZipMap zu entfernen, das eine Liste von Wörterbüchern erzeugt (nicht erforderlich). `nocl` bezieht sich darauf, ob Klasseninformationen im Modell enthalten sind. Reduziere die Größe deines Modells, indem du `nocl` auf 'True' setzt. -Wenn Sie das gesamte Notebook ausführen, wird ein Onnx-Modell erstellt und in diesem Ordner gespeichert. +Wenn du das gesamte Notebook ausführst, wird ein Onnx-Modell erstellt und in diesem Ordner gespeichert. -## Betrachten Sie Ihr Modell +## Betrachte dein Modell -Onnx-Modelle sind in Visual Studio Code nicht sehr sichtbar, aber es gibt eine sehr gute kostenlose Software, die viele Forscher verwenden, um das Modell zu visualisieren und sicherzustellen, dass es korrekt erstellt wurde. Laden Sie [Netron](https://github.com/lutzroeder/Netron) herunter und öffnen Sie Ihre model.onnx-Datei. Sie können Ihr einfaches Modell visualisiert sehen, mit seinen 380 Eingaben und dem Klassifikator: +Onnx-Modelle sind in Visual Studio Code nicht sehr sichtbar, aber es gibt eine sehr gute kostenlose Software, die viele Forscher verwenden, um das Modell zu visualisieren und sicherzustellen, dass es korrekt erstellt wurde. Lade [Netron](https://github.com/lutzroeder/Netron) herunter und öffne deine model.onnx-Datei. Du kannst dein einfaches Modell visualisiert sehen, mit seinen 380 Eingaben und dem Klassifikator: -![Netron-Visualisierung](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.de.png) +![Netron-Visualisierung](../../../../4-Classification/4-Applied/images/netron.png) -Netron ist ein hilfreiches Tool, um Ihre Modelle zu betrachten. +Netron ist ein hilfreiches Tool, um deine Modelle zu betrachten. -Jetzt sind Sie bereit, dieses praktische Modell in einer Web-App zu verwenden. Lassen Sie uns eine App erstellen, die nützlich ist, wenn Sie in Ihren Kühlschrank schauen und herausfinden möchten, welche Kombination Ihrer übrig gebliebenen Zutaten Sie verwenden können, um eine bestimmte Küche zuzubereiten, wie von Ihrem Modell bestimmt. +Jetzt bist du bereit, dieses praktische Modell in einer Web-App zu verwenden. Lass uns eine App erstellen, die nützlich ist, wenn du in deinen Kühlschrank schaust und herausfinden möchtest, welche Kombination deiner übrig gebliebenen Zutaten du verwenden kannst, um eine bestimmte Küche zu kochen, wie von deinem Modell bestimmt. -## Erstellen Sie eine Empfehlungs-Webanwendung +## Erstelle eine Empfehlungs-Webanwendung -Sie können Ihr Modell direkt in einer Web-App verwenden. Diese Architektur ermöglicht es Ihnen auch, sie lokal und sogar offline auszuführen, falls erforderlich. Beginnen Sie mit der Erstellung einer `index.html`-Datei im selben Ordner, in dem Sie Ihre `model.onnx`-Datei gespeichert haben. +Du kannst dein Modell direkt in einer Web-App verwenden. Diese Architektur ermöglicht es dir auch, sie lokal und sogar offline auszuführen, falls erforderlich. Beginne mit der Erstellung einer `index.html`-Datei im selben Ordner, in dem du deine `model.onnx`-Datei gespeichert hast. -1. Fügen Sie in dieser Datei _index.html_ das folgende Markup hinzu: +1. Füge in dieser Datei _index.html_ das folgende Markup hinzu: ```html @@ -176,7 +176,7 @@ Sie können Ihr Modell direkt in einer Web-App verwenden. Diese Architektur erm ``` -1. Fügen Sie nun innerhalb der `body`-Tags ein wenig Markup hinzu, um eine Liste von Kontrollkästchen anzuzeigen, die einige Zutaten widerspiegeln: +1. Füge nun innerhalb der `body`-Tags ein wenig Markup hinzu, um eine Liste von Kontrollkästchen anzuzeigen, die einige Zutaten widerspiegeln: ```html

                                Check your refrigerator. What can you create?

                                @@ -221,19 +221,19 @@ Sie können Ihr Modell direkt in einer Web-App verwenden. Diese Architektur erm ``` - Beachten Sie, dass jedes Kontrollkästchen einen Wert erhält. Dieser spiegelt den Index wider, an dem die Zutat gemäß dem Datensatz gefunden wird. Apfel, zum Beispiel, in dieser alphabetischen Liste, belegt die fünfte Spalte, daher ist sein Wert '4', da wir bei 0 zu zählen beginnen. Sie können die [Zutaten-Tabelle](../../../../4-Classification/data/ingredient_indexes.csv) konsultieren, um den Index einer bestimmten Zutat zu finden. + Beachte, dass jedes Kontrollkästchen einen Wert hat. Dieser spiegelt den Index wider, an dem die Zutat gemäß dem Datensatz gefunden wird. Apfel, zum Beispiel, in dieser alphabetischen Liste, belegt die fünfte Spalte, daher ist sein Wert '4', da wir bei 0 zu zählen beginnen. Du kannst die [Zutaten-Tabelle](../../../../4-Classification/data/ingredient_indexes.csv) konsultieren, um den Index einer bestimmten Zutat zu finden. - Fahren Sie mit Ihrer Arbeit in der index.html-Datei fort und fügen Sie einen Skriptblock hinzu, in dem das Modell nach dem abschließenden ``-Tag aufgerufen wird. + Setze deine Arbeit in der index.html-Datei fort und füge einen Skriptblock hinzu, in dem das Modell nach dem letzten abschließenden `` aufgerufen wird. -1. Importieren Sie zunächst die [Onnx Runtime](https://www.onnxruntime.ai/): +1. Importiere zunächst die [Onnx Runtime](https://www.onnxruntime.ai/): ```html ``` - > Onnx Runtime wird verwendet, um die Ausführung Ihrer Onnx-Modelle auf einer Vielzahl von Hardwareplattformen zu ermöglichen, einschließlich Optimierungen und einer API zur Nutzung. + > Onnx Runtime wird verwendet, um die Ausführung deiner Onnx-Modelle auf einer Vielzahl von Hardwareplattformen zu ermöglichen, einschließlich Optimierungen und einer API zur Nutzung. -1. Sobald die Runtime eingerichtet ist, können Sie sie aufrufen: +1. Sobald die Runtime eingerichtet ist, kannst du sie aufrufen: ```html + ``` + + > Το Onnx Runtime χρησιμοποιείται για να επιτρέψει την εκτέλεση των μοντέλων Onnx σας σε μια ευρεία γκάμα πλατφορμών υλικού, συμπεριλαμβανομένων βελτιστοποιήσεων και ενός API για χρήση. + +1. Μόλις το Runtime είναι στη θέση του, μπορείτε να το καλέσετε: + + ```html + + ``` + +Σε αυτόν τον κώδικα, συμβαίνουν αρκετά πράγματα: + +1. Δημιουργήσατε έναν πίνακα με 380 πιθανές τιμές (1 ή 0) που θα οριστούν και θα σταλούν στο μοντέλο για πρόβλεψη, ανάλογα με το αν έχει επιλεγεί ένα checkbox συστατικού. +2. Δημιουργήσατε έναν πίνακα με checkboxes και έναν τρόπο να προσδιορίσετε αν έχουν επιλεγεί σε μια συνάρτηση `init` που καλείται όταν ξεκινά η εφαρμογή. Όταν επιλέγεται ένα checkbox, ο πίνακας `ingredients` τροποποιείται για να αντικατοπτρίζει το επιλεγμένο συστατικό. +3. Δημιουργήσατε μια συνάρτηση `testCheckboxes` που ελέγχει αν έχει επιλεγεί κάποιο checkbox. +4. Χρησιμοποιείτε τη συνάρτηση `startInference` όταν πατηθεί το κουμπί και, αν έχει επιλεγεί κάποιο checkbox, ξεκινάτε την πρόβλεψη. +5. Η διαδικασία πρόβλεψης περιλαμβάνει: + 1. Ρύθμιση ασύγχρονης φόρτωσης του μοντέλου + 2. Δημιουργία δομής Tensor για αποστολή στο μοντέλο + 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 συστατικών](../../../../4-Classification/4-Applied/images/web-app.png) + +Συγχαρητήρια, δημιουργήσατε μια εφαρμογή web 'προτάσεων' με λίγα πεδία. Αφιερώστε λίγο χρόνο για να αναπτύξετε αυτό το σύστημα! + +## 🚀Πρόκληση + +Η εφαρμογή web σας είναι πολύ βασική, οπότε συνεχίστε να την αναπτύσσετε χρησιμοποιώντας συστατικά και τους δείκτες τους από τα δεδομένα [ingredient_indexes](../../../../4-Classification/data/ingredient_indexes.csv). Ποιοι συνδυασμοί γεύσεων λειτουργούν για τη δημιουργία ενός εθνικού πιάτου; + +## [Μετά το μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Ενώ αυτό το μάθημα απλώς άγγιξε τη χρησιμότητα της δημιουργίας ενός συστήματος προτάσεων για συστατικά τροφίμων, αυτή η περιοχή εφαρμογών μηχανικής μάθησης είναι πολύ πλούσια σε παραδείγματα. Διαβάστε περισσότερα για το πώς κατασκευάζονται αυτά τα συστήματα: + +- https://www.sciencedirect.com/topics/computer-science/recommendation-engine +- https://www.technologyreview.com/2014/08/25/171547/the-ultimate-challenge-for-recommendation-engines/ +- https://www.technologyreview.com/2015/03/23/168831/everything-is-a-recommendation/ + +## Εργασία + +[Δημιουργήστε ένα νέο σύστημα προτάσεων](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/4-Classification/4-Applied/assignment.md b/translations/el/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..65c6263e9 --- /dev/null +++ b/translations/el/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Δημιουργία ενός συστήματος προτάσεων + +## Οδηγίες + +Με βάση τις ασκήσεις σε αυτό το μάθημα, τώρα γνωρίζετε πώς να δημιουργήσετε μια διαδικτυακή εφαρμογή βασισμένη σε JavaScript χρησιμοποιώντας το Onnx Runtime και ένα μετατρεπόμενο μοντέλο Onnx. Πειραματιστείτε με τη δημιουργία ενός νέου συστήματος προτάσεων χρησιμοποιώντας δεδομένα από αυτά τα μαθήματα ή από άλλες πηγές (παρακαλώ δώστε τα εύσημα). Μπορείτε να δημιουργήσετε ένα σύστημα προτάσεων για κατοικίδια με βάση διάφορα χαρακτηριστικά προσωπικότητας ή ένα σύστημα προτάσεων για είδη μουσικής με βάση τη διάθεση ενός ατόμου. Γίνετε δημιουργικοί! + +## Κριτήρια Αξιολόγησης + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Παρουσιάζεται μια διαδικτυακή εφαρμογή και ένα σημειωματάριο, και τα δύο καλά τεκμηριωμένα και λειτουργικά | Ένα από τα δύο λείπει ή έχει ελλείψεις | Και τα δύο είτε λείπουν είτε έχουν ελλείψεις | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/4-Classification/README.md b/translations/el/4-Classification/README.md new file mode 100644 index 000000000..ad78e156f --- /dev/null +++ b/translations/el/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Ξεκινώντας με την ταξινόμηση + +## Περιφερειακό θέμα: Νόστιμες Ασιατικές και Ινδικές Κουζίνες 🍜 + +Στην Ασία και την Ινδία, οι παραδόσεις γύρω από το φαγητό είναι εξαιρετικά ποικίλες και πολύ νόστιμες! Ας δούμε δεδομένα σχετικά με τις περιφερειακές κουζίνες για να προσπαθήσουμε να κατανοήσουμε τα συστατικά τους. + +![Πωλητής ταϊλανδέζικου φαγητού](../../../4-Classification/images/thai-food.jpg) +> Φωτογραφία από Lisheng Chang στο 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. [Εφαρμοσμένη ML: δημιουργία web εφαρμογής](4-Applied/README.md) + +## Πιστώσεις + +Το "Ξεκινώντας με την ταξινόμηση" γράφτηκε με ♥️ από [Cassie Breviu](https://www.twitter.com/cassiebreviu) και [Jen Looper](https://www.twitter.com/jenlooper) + +Το dataset για τις νόστιμες κουζίνες προέρχεται από το [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/1-Visualize/README.md b/translations/el/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..0764f5821 --- /dev/null +++ b/translations/el/5-Clustering/1-Visualize/README.md @@ -0,0 +1,322 @@ + +# Εισαγωγή στην ομαδοποίηση + +Η ομαδοποίηση είναι ένας τύπος [Μη Εποπτευόμενης Μάθησης](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") + +> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα βίντεο. Ενώ μελετάτε τη μηχανική μάθηση με την ομαδοποίηση, απολαύστε μερικά κομμάτια Nigerian Dance Hall - αυτό είναι ένα πολύ δημοφιλές τραγούδι από το 2014 από τους PSquare. + +## [Κουίζ πριν το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +### Εισαγωγή + +Η [ομαδοποίηση](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) είναι πολύ χρήσιμη για την εξερεύνηση δεδομένων. Ας δούμε αν μπορεί να βοηθήσει στην ανακάλυψη τάσεων και μοτίβων στον τρόπο που το κοινό της Νιγηρίας καταναλώνει μουσική. + +✅ Σκεφτείτε για ένα λεπτό τις χρήσεις της ομαδοποίησης. Στην καθημερινή ζωή, η ομαδοποίηση συμβαίνει κάθε φορά που έχετε έναν σωρό από ρούχα και πρέπει να ταξινομήσετε τα ρούχα των μελών της οικογένειάς σας 🧦👕👖🩲. Στην επιστήμη δεδομένων, η ομαδοποίηση συμβαίνει όταν προσπαθείτε να αναλύσετε τις προτιμήσεις ενός χρήστη ή να προσδιορίσετε τα χαρακτηριστικά οποιουδήποτε μη επισημασμένου συνόλου δεδομένων. Η ομαδοποίηση, με έναν τρόπο, βοηθά να βάλουμε τάξη στο χάος, όπως ένα συρτάρι με κάλτσες. + +[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") + +> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα βίντεο: Ο John Guttag από το MIT παρουσιάζει την ομαδοποίηση. + +Σε επαγγελματικό περιβάλλον, η ομαδοποίηση μπορεί να χρησιμοποιηθεί για τον καθορισμό πραγμάτων όπως η τμηματοποίηση της αγοράς, για παράδειγμα, για να προσδιοριστεί ποιες ηλικιακές ομάδες αγοράζουν ποια προϊόντα. Μια άλλη χρήση θα μπορούσε να είναι η ανίχνευση ανωμαλιών, ίσως για την ανίχνευση απάτης από ένα σύνολο δεδομένων συναλλαγών πιστωτικών καρτών. Ή μπορεί να χρησιμοποιήσετε την ομαδοποίηση για να προσδιορίσετε όγκους σε μια παρτίδα ιατρικών σαρώσεων. + +✅ Σκεφτείτε για ένα λεπτό πώς μπορεί να έχετε συναντήσει την ομαδοποίηση 'στην πράξη', σε τραπεζικό, ηλεκτρονικό εμπόριο ή επιχειρηματικό περιβάλλον. + +> 🎓 Ενδιαφέρον είναι ότι η ανάλυση ομαδοποίησης ξεκίνησε στους τομείς της Ανθρωπολογίας και της Ψυχολογίας τη δεκαετία του 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 | μεγάλο σύνολο δεδομένων με εξαιρέσεις, επαγωγική | + +> 🎓 Ο τρόπος με τον οποίο δημιουργούμε ομάδες έχει να κάνει πολύ με το πώς συγκεντρώνουμε τα σημεία δεδομένων σε ομάδες. Ας αναλύσουμε μερικές έννοιες: +> +> 🎓 ['Μεταγωγική' vs. 'Επαγωγική'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Η μεταγωγική συμπερασματολογία προκύπτει από παρατηρούμενες περιπτώσεις εκπαίδευσης που αντιστοιχούν σε συγκεκριμένες περιπτώσεις δοκιμής. Η επαγωγική συμπερασματολογία προκύπτει από περιπτώσεις εκπαίδευσης που αντιστοιχούν σε γενικούς κανόνες, οι οποίοι στη συνέχεια εφαρμόζονται σε περιπτώσεις δοκιμής. +> +> Ένα παράδειγμα: Φανταστείτε ότι έχετε ένα σύνολο δεδομένων που είναι μόνο εν μέρει επισημασμένο. Κάποια πράγματα είναι 'δίσκοι', κάποια 'cds', και κάποια είναι κενά. Η δουλειά σας είναι να παρέχετε ετικέτες για τα κενά. Αν επιλέξετε μια επαγωγική προσέγγιση, θα εκπαιδεύσετε ένα μοντέλο που αναζητά 'δίσκους' και 'cds', και θα εφαρμόσετε αυτές τις ετικέτες στα μη επισημασμένα δεδομένα σας. Αυτή η προσέγγιση θα δυσκολευτεί να ταξινομήσει πράγματα που είναι στην πραγματικότητα 'κασέτες'. Μια μεταγωγική προσέγγιση, από την άλλη πλευρά, χειρίζεται αυτά τα άγνωστα δεδομένα πιο αποτελεσματικά καθώς εργάζεται για να ομαδοποιήσει παρόμοια αντικείμενα μαζί και στη συνέχεια εφαρμόζει μια ετικέτα σε μια ομάδα. Σε αυτήν την περίπτωση, οι ομάδες μπορεί να αντικατοπτρίζουν 'στρογγυλά μουσικά αντικείμενα' και 'τετράγωνα μουσικά αντικείμενα'. +> +> 🎓 ['Μη επίπεδη' vs. 'Επίπεδη' γεωμετρία](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Προερχόμενη από τη μαθηματική ορολογία, η μη επίπεδη vs. επίπεδη γεωμετρία αναφέρεται στη μέτρηση των αποστάσεων μεταξύ σημείων είτε με 'επίπεδη' ([Ευκλείδεια](https://wikipedia.org/wiki/Euclidean_geometry)) είτε με 'μη επίπεδη' (μη Ευκλείδεια) γεωμετρικές μεθόδους. +> +>'Επίπεδη' σε αυτό το πλαίσιο αναφέρεται στην Ευκλείδεια γεωμετρία (μέρη της οποίας διδάσκονται ως 'επίπεδη' γεωμετρία), και μη επίπεδη αναφέρεται στη μη Ευκλείδεια γεωμετρία. Τι σχέση έχει η γεωμετρία με τη μηχανική μάθηση; Λοιπόν, ως δύο πεδία που βασίζονται στα μαθηματικά, πρέπει να υπάρχει ένας κοινός τρόπος μέτρησης των αποστάσεων μεταξύ σημείων σε ομάδες, και αυτό μπορεί να γίνει με 'επίπεδο' ή 'μη επίπεδο' τρόπο, ανάλογα με τη φύση των δεδομένων. [Ευκλείδειες αποστάσεις](https://wikipedia.org/wiki/Euclidean_distance) μετρώνται ως το μήκος ενός τμήματος γραμμής μεταξύ δύο σημείων. [Μη Ευκλείδειες αποστάσεις](https://wikipedia.org/wiki/Non-Euclidean_geometry) μετρώνται κατά μήκος μιας καμπύλης. Αν τα δεδομένα σας, οπτικοποιημένα, φαίνεται να μην υπάρχουν σε ένα επίπεδο, μπορεί να χρειαστεί να χρησιμοποιήσετε έναν εξειδικευμένο αλγόριθμο για να τα χειριστείτε. +> +![Flat vs Nonflat Geometry Infographic](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infographic από [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Αποστάσεις'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Οι ομάδες ορίζονται από τη μήτρα αποστάσεων τους, π.χ. τις αποστάσεις μεταξύ σημείων. Αυτή η απόσταση μπορεί να μετρηθεί με διάφορους τρόπους. Οι Ευκλείδειες ομάδες ορίζονται από τον μέσο όρο των τιμών των σημείων και περιέχουν ένα 'κέντρο' ή κεντρικό σημείο. Οι αποστάσεις μετρώνται έτσι από την απόσταση από αυτό το κέντρο. Οι μη Ευκλείδειες αποστάσεις αναφέρονται σε 'clustroids', το σημείο που είναι πιο κοντά σε άλλα σημεία. Τα clustroids με τη σειρά τους μπορούν να οριστούν με διάφορους τρόπους. +> +> 🎓 ['Περιορισμένες'](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 clustering και HDBSCAN για την εξερεύνηση ενός θορυβώδους συνόλου δεδομένων με άνιση πυκνότητα ομάδων. + +## Αλγόριθμοι ομαδοποίησης + +Υπάρχουν πάνω από 100 αλγόριθμοι ομαδοποίησης, και η χρήση τους εξαρτάται από τη φύση των δεδομένων που έχουμε. Ας συζητήσουμε μερικούς από τους κύριους: + +- **Ιεραρχική ομαδοποίηση**. Αν ένα αντικείμενο ταξινομηθεί με βάση την εγγύτητά του σε ένα κοντινό αντικείμενο, αντί για ένα πιο μακρινό, οι ομάδες σχηματίζονται με βάση την απόσταση των μελών τους από και προς άλλα αντικείμενα. Η ιεραρχική ομαδοποίηση του Scikit-learn είναι ιεραρχική. + + ![Hierarchical clustering Infographic](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infographic από [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Ομαδοποίηση με κέντρο**. Αυτός ο δημοφιλής αλγόριθμος απαιτεί την επιλογή του 'k', ή του αριθμού των ομάδων που θα σχηματιστούν, μετά την οποία ο αλγόριθμος καθορίζει το κεντρικό σημείο μιας ομάδας και συγκεντρώνει δεδομένα γύρω από αυτό το σημείο. Η [ομαδοποίηση K-means](https://wikipedia.org/wiki/K-means_clustering) είναι μια δημοφιλής έκδοση της ομαδοποίησης με κέντρο. Το κέντρο καθορίζεται από τον πλησιέστερο μέσο όρο, εξ ου και το όνομα. Η τετραγωνική απόσταση από την ομάδα ελαχιστοποιείται. + + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infographic από [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Ομαδοποίηση βάσει κατανομής**. Βασισμένη στη στατιστική μοντελοποίηση, η ομαδοποίηση βάσει κατανομής επικεντρώνεται στον καθορισμό της πιθανότητας ότι ένα σημείο δεδομένων ανήκει σε μια ομάδα και το αναθέτει ανάλογα. Οι μέθοδοι Gaussian mixture ανήκουν σε αυτόν τον τύπο. + +- **Ομαδοποίηση βάσει πυκνότητας**. Τα σημεία δεδομένων ανατίθενται σε ομάδες με βάση την πυκνότητά τους, ή τη συγκέντρωσή τους γύρω από το ένα το άλλο. Τα σημεία δεδομένων μακριά από την ομάδα θεωρούνται εξαιρέσεις ή θόρυβος. Οι DBSCAN, Mean-shift και OPTICS ανήκουν σε αυτόν τον τύπο ομαδοποίησης. + +- **Ομαδοποίηση βάσει πλέγματος**. Για πολυδιάστατα σύνολα δεδομένων, δημιουργείται ένα πλέγμα και τα δεδομένα διαιρούνται μεταξύ των κελιών του πλέγματος, δημιουργώντας έτσι ομάδες. + +## Άσκηση - ομαδοποιήστε τα δεδομένα σας + +Η ομαδοποίηση ως τεχνική βοηθάται πολύ από την κατάλληλη οπτικοποίηση, οπότε ας ξεκινήσουμε οπτικοποιώντας τα μουσικά μας δεδομένα. Αυτή η άσκηση θα μας βοηθήσει να αποφασίσουμε ποια από τις μεθόδους ομαδοποίησης θα πρέπει να χρησιμοποιήσουμε πιο αποτελεσματικά +| 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. Λάβετε κάποιες πληροφορίες για το dataframe, καλώντας `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 | + +> 🤔 Εάν δουλεύουμε με 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](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Εάν θέλετε να δείτε περισσότερες κορυφαίες τιμές, αλλάξτε το top `[:5]` σε μεγαλύτερη τιμή ή αφαιρέστε το για να δείτε όλα. + +Σημειώστε ότι όταν το κορυφαίο είδος περιγράφεται ως 'Missing', αυτό σημαίνει ότι το Spotify δεν το ταξινόμησε, οπότε ας το αφαιρέσουμε. + +1. Αφαιρέστε τα δεδομένα που λείπουν φιλτράροντάς τα: + + ```python + df = df[df['artist_top_genre'] != 'Missing'] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + + Τώρα ελέγξτε ξανά τα είδη: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. Τα τρία κορυφαία είδη κυριαρχούν σαφώς σε αυτό το dataset. Ας επικεντρωθούμε στα `afro dancehall`, `afropop`, και `nigerian pop`, και επιπλέον φιλτράρουμε το dataset για να αφαιρέσουμε οτιδήποτε έχει τιμή δημοτικότητας 0 (που σημαίνει ότι δεν ταξινομήθηκε με δημοτικότητα στο dataset και μπορεί να θεωρηθεί θόρυβος για τους σκοπούς μας): + + ```python + df = df[(df['artist_top_genre'] == 'afro dancehall') | (df['artist_top_genre'] == 'afropop') | (df['artist_top_genre'] == 'nigerian pop')] + df = df[(df['popularity'] > 0)] + top = df['artist_top_genre'].value_counts() + plt.figure(figsize=(10,7)) + sns.barplot(x=top.index,y=top.values) + plt.xticks(rotation=45) + plt.title('Top genres',color = 'blue') + ``` + +1. Κάντε μια γρήγορη δοκιμή για να δείτε αν τα δεδομένα συσχετίζονται με κάποιο ιδιαίτερα ισχυρό τρόπο: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Η μόνη ισχυρή συσχέτιση είναι μεταξύ `energy` και `loudness`, κάτι που δεν είναι πολύ εκπληκτικό, δεδομένου ότι η δυνατή μουσική είναι συνήθως αρκετά ενεργητική. Κατά τα άλλα, οι συσχετίσεις είναι σχετικά αδύναμες. Θα είναι ενδιαφέρον να δούμε τι μπορεί να κάνει ένας αλγόριθμος clustering με αυτά τα δεδομένα. + + > 🎓 Σημειώστε ότι η συσχέτιση δεν υποδηλώνει αιτιότητα! Έχουμε απόδειξη συσχέτισης αλλά όχι απόδειξη αιτιότητας. Ένας [διασκεδαστικός ιστότοπος](https://tylervigen.com/spurious-correlations) έχει οπτικοποιήσεις που τονίζουν αυτό το σημείο. + +Υπάρχει κάποια σύγκλιση σε αυτό το dataset γύρω από την αντιληπτή δημοτικότητα και την χορευτικότητα ενός τραγουδιού; Ένα FacetGrid δείχνει ότι υπάρχουν ομόκεντροι κύκλοι που ευθυγραμμίζονται, ανεξαρτήτως είδους. Θα μπορούσε να είναι ότι οι νιγηριανές προτιμήσεις συγκλίνουν σε ένα συγκεκριμένο επίπεδο χορευτικότητας για αυτό το είδος; + +✅ Δοκιμάστε διαφορετικά σημεία δεδομένων (energy, loudness, speechiness) και περισσότερα ή διαφορετικά μουσικά είδη. Τι μπορείτε να ανακαλύψετε; Ρίξτε μια ματιά στον πίνακα `df.describe()` για να δείτε τη γενική κατανομή των σημείων δεδομένων. + +### Άσκηση - κατανομή δεδομένων + +Είναι αυτά τα τρία είδη σημαντικά διαφορετικά στην αντίληψη της χορευτικότητάς τους, με βάση τη δημοτικότητά τους; + +1. Εξετάστε την κατανομή δεδομένων των τριών κορυφαίων ειδών μας για τη δημοτικότητα και τη χορευτικότητα κατά μήκος ενός δεδομένου x και y άξονα. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Μπορείτε να ανακαλύψετε ομόκεντρους κύκλους γύρω από ένα γενικό σημείο σύγκλισης, που δείχνουν την κατανομή των σημείων. + + > 🎓 Σημειώστε ότι αυτό το παράδειγμα χρησιμοποιεί ένα γράφημα KDE (Kernel Density Estimate) που αναπαριστά τα δεδομένα χρησιμοποιώντας μια συνεχή καμπύλη πυκνότητας πιθανότητας. Αυτό μας επιτρέπει να ερμηνεύσουμε δεδομένα όταν δουλεύουμε με πολλαπλές κατανομές. + + Γενικά, τα τρία είδη ευθυγραμμίζονται χαλαρά όσον αφορά τη δημοτικότητα και τη χορευτικότητα. Ο προσδιορισμός clusters σε αυτά τα χαλαρά ευθυγραμμισμένα δεδομένα θα είναι μια πρόκληση: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Δημιουργήστε ένα scatter plot: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Ένα scatterplot των ίδιων αξόνων δείχνει ένα παρόμοιο μοτίβο σύγκλισης + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Γενικά, για το clustering, μπορείτε να χρησιμοποιήσετε scatterplots για να δείξετε clusters δεδομένων, οπότε η εξοικείωση με αυτόν τον τύπο οπτικοποίησης είναι πολύ χρήσιμη. Στο επόμενο μάθημα, θα πάρουμε αυτά τα φιλτραρισμένα δεδομένα και θα χρησιμοποιήσουμε το k-means clustering για να ανακαλύψουμε ομάδες σε αυτά τα δεδομένα που φαίνεται να επικαλύπτονται με ενδιαφέροντες τρόπους. + +--- + +## 🚀Πρόκληση + +Στο πλαίσιο της προετοιμασίας για το επόμενο μάθημα, δημιουργήστε ένα διάγραμμα σχετικά με τους διάφορους αλγόριθμους clustering που μπορεί να ανακαλύψετε και να χρησιμοποιήσετε σε ένα παραγωγικό περιβάλλον. Τι είδους προβλήματα προσπαθεί να αντιμετωπίσει το clustering; + +## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Πριν εφαρμόσετε αλγόριθμους clustering, όπως έχουμε μάθει, είναι καλή ιδέα να κατανοήσετε τη φύση του dataset σας. Διαβάστε περισσότερα για αυτό το θέμα [εδώ](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/) σας καθοδηγεί στους διαφορετικούς τρόπους με τους οποίους διάφοροι αλγόριθμοι clustering συμπεριφέρονται, δεδομένων διαφορετικών σχημάτων δεδομένων. + +## Εργασία + +[Ερευνήστε άλλες οπτικοποιήσεις για το clustering](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/1-Visualize/assignment.md b/translations/el/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..f66959501 --- /dev/null +++ b/translations/el/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Εξερεύνηση άλλων οπτικοποιήσεων για ομαδοποίηση + +## Οδηγίες + +Σε αυτό το μάθημα, δουλέψατε με κάποιες τεχνικές οπτικοποίησης για να κατανοήσετε πώς να σχεδιάσετε τα δεδομένα σας ως προετοιμασία για την ομαδοποίησή τους. Τα διαγράμματα διασποράς, συγκεκριμένα, είναι χρήσιμα για την εύρεση ομάδων αντικειμένων. Ερευνήστε διαφορετικούς τρόπους και διαφορετικές βιβλιοθήκες για τη δημιουργία διαγραμμάτων διασποράς και καταγράψτε τη δουλειά σας σε ένα σημειωματάριο. Μπορείτε να χρησιμοποιήσετε τα δεδομένα από αυτό το μάθημα, άλλα μαθήματα ή δεδομένα που βρίσκετε μόνοι σας (παρακαλώ αναφέρετε την πηγή τους, ωστόσο, στο σημειωματάριό σας). Σχεδιάστε κάποια δεδομένα χρησιμοποιώντας διαγράμματα διασποράς και εξηγήστε τι ανακαλύπτετε. + +## Κριτήρια Αξιολόγησης + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | +| | Παρουσιάζεται ένα σημειωματάριο με πέντε καλά τεκμηριωμένα διαγράμματα διασποράς | Παρουσιάζεται ένα σημειωματάριο με λιγότερα από πέντε διαγράμματα διασποράς και είναι λιγότερο τεκμηριωμένο | Παρουσιάζεται ένα ελλιπές σημειωματάριο | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/el/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..cfda4af73 --- /dev/null +++ b/translations/el/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/2-K-Means/README.md b/translations/el/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..c6a6ffb51 --- /dev/null +++ b/translations/el/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# Ομαδοποίηση K-Means + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +Σε αυτό το μάθημα, θα μάθετε πώς να δημιουργείτε ομάδες χρησιμοποιώντας το Scikit-learn και το σύνολο δεδομένων της νιγηριανής μουσικής που εισαγάγατε νωρίτερα. Θα καλύψουμε τα βασικά του K-Means για την Ομαδοποίηση. Να θυμάστε ότι, όπως μάθατε στο προηγούμενο μάθημα, υπάρχουν πολλοί τρόποι να δουλέψετε με ομάδες και η μέθοδος που χρησιμοποιείτε εξαρτάται από τα δεδομένα σας. Θα δοκιμάσουμε το K-Means καθώς είναι η πιο κοινή τεχνική ομαδοποίησης. Ας ξεκινήσουμε! + +Όροι που θα μάθετε: + +- Βαθμολογία Silhouette +- Μέθοδος Elbow +- Αδράνεια +- Διακύμανση + +## Εισαγωγή + +Η [Ομαδοποίηση K-Means](https://wikipedia.org/wiki/K-means_clustering) είναι μια μέθοδος που προέρχεται από τον τομέα της επεξεργασίας σήματος. Χρησιμοποιείται για να διαιρέσει και να κατατμήσει ομάδες δεδομένων σε 'k' ομάδες χρησιμοποιώντας μια σειρά παρατηρήσεων. Κάθε παρατήρηση λειτουργεί για να ομαδοποιήσει ένα δεδομένο σημείο δεδομένων πιο κοντά στο πλησιέστερο 'μέσο', ή το κεντρικό σημείο μιας ομάδας. + +Οι ομάδες μπορούν να οπτικοποιηθούν ως [Διαγράμματα Voronoi](https://wikipedia.org/wiki/Voronoi_diagram), τα οποία περιλαμβάνουν ένα σημείο (ή 'σπόρο') και την αντίστοιχη περιοχή του. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> infographic από [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', δηλαδή τον αριθμό των κέντρων. Ευτυχώς, η 'μέθοδος elbow' βοηθά να εκτιμήσετε μια καλή αρχική τιμή για το 'k'. Θα το δοκιμάσετε σε λίγο. + +## Προαπαιτούμενα + +Θα εργαστείτε στο αρχείο [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/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](../../../../5-Clustering/2-K-Means/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) για κάθε γραμμή του dataframe. + +1. Χρησιμοποιήστε αυτόν τον πίνακα για να υπολογίσετε μια 'βαθμολογία silhouette': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Βαθμολογία Silhouette + +Αναζητήστε μια βαθμολογία silhouette κοντά στο 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: "άθροισμα τετραγώνων εντός της ομάδας" μετρά τη μέση τετραγωνική απόσταση όλων των σημείων εντός μιας ομάδας από το κέντρο της ομάδας. [Πηγή](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++', η οποία "αρχικοποιεί τα κέντρα ώστε να είναι (γενικά) απομακρυσμένα μεταξύ τους, οδηγώντας πιθανώς σε καλύτερα αποτελέσματα από την τυχαία αρχικοποίηση." + +### Μέθοδος Elbow + +Προηγουμένως, υποθέσατε ότι, επειδή στοχεύσατε 3 είδη τραγουδιών, θα πρέπει να επιλέξετε 3 ομάδες. Αλλά ισχύει αυτό; + +1. Χρησιμοποιήστε τη 'μέθοδο elbow' για να βεβαιωθείτε. + + ```python + plt.figure(figsize=(10,5)) + sns.lineplot(x=range(1, 11), y=wcss, marker='o', color='red') + plt.title('Elbow') + plt.xlabel('Number of clusters') + plt.ylabel('WCSS') + plt.show() + ``` + + Χρησιμοποιήστε τη μεταβλητή `wcss` που δημιουργήσατε στο προηγούμενο βήμα για να δημιουργήσετε ένα γράφημα που δείχνει πού βρίσκεται η 'κάμψη' στον αγκώνα, η οποία υποδεικνύει τον βέλτιστο αριθμό ομάδων. Ίσως είναι **όντως** 3! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Άσκηση - εμφάνιση των ομάδων + +1. Δοκιμάστε ξανά τη διαδικασία, αυτή τη φορά ορίζοντας τρεις ομάδες, και εμφανίστε τις ομάδες ως 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](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Αυτά τα δεδομένα είναι πολύ μη ισορροπημένα, έχουν πολύ λίγη συσχέτιση και υπάρχει υπερβολική διακύμανση μεταξύ των τιμών των στηλών για να ομαδοποιηθούν καλά. Στην πραγματικότητα, οι ομάδες που σχηματίζονται πιθανότατα επηρεάζονται ή παραμορφώνονται έντονα από τις τρεις κατηγορίες ειδών που ορίσαμε παραπάνω. Ήταν μια διαδικασία μάθησης! + + Στην τεκμηρίωση του Scikit-learn, μπορείτε να δείτε ότι ένα μοντέλο σαν αυτό, με ομάδες που δεν είναι πολύ καλά διαχωρισμένες, έχει πρόβλημα 'διακύμανσης': + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infographic από το 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)' για να κατανοήσετε λίγο περισσότερο την έννοια. + +--- + +## 🚀Πρόκληση + +Περάστε λίγο χρόνο με αυτό το notebook, τροποποιώντας παραμέτρους. Μπορείτε να βελτιώσετε την ακρίβεια του μοντέλου καθαρίζοντας περισσότερο τα δεδομένα (αφαιρώντας ακραίες τιμές, για παράδειγμα); Μπορείτε να χρησιμοποιήσετε βάρη για να δώσετε μεγαλύτερη βαρύτητα σε συγκεκριμένα δείγματα δεδομένων. Τι άλλο μπορείτε να κάνετε για να δημιουργήσετε καλύτερες ομάδες; + +Υπόδειξη: Δοκιμάστε να κλιμακώσετε τα δεδομένα σας. Υπάρχει σχολιασμένος κώδικας στο notebook που προσθέτει τυπική κλιμάκωση για να κάνουν οι στήλες δεδομένων να μοιάζουν περισσότερο μεταξύ τους όσον αφορά το εύρος. Θα διαπιστώσετε ότι ενώ η βαθμολογία silhouette μειώνεται, η 'κάμψη' στο γράφημα elbow εξομαλύνεται. Αυτό συμβαίνει επειδή αφήνοντας τα δεδομένα χωρίς κλιμάκωση επιτρέπει στα δεδομένα με λιγότερη διακύμανση να έχουν μεγαλύτερη βαρύτητα. Διαβάστε λίγο περισσότερο για αυτό το πρόβλημα [εδώ](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Μετά-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Ρίξτε μια ματιά σε έναν Προσομοιωτή K-Means [όπως αυτόν](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Μπορείτε να χρησιμοποιήσετε αυτό το εργαλείο για να οπτικοποιήσετε δείγματα δεδομένων και να καθορίσετε τα κέντρα τους. Μπορείτε να επεξεργαστείτε την τυχαιότητα των δεδομένων, τον αριθμό των ομάδων και τον αριθμό των κέντρων. Σας βοηθά αυτό να αποκτήσετε μια ιδέα για το πώς μπορούν να ομαδοποιηθούν τα δεδομένα; + +Επίσης, ρίξτε μια ματιά σε [αυτό το φυλλάδιο για το K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) από το Stanford. + +## Εργασία + +[Δοκιμάστε διαφορετικές μεθόδους ομαδοποίησης](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/2-K-Means/assignment.md b/translations/el/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..6ff28354f --- /dev/null +++ b/translations/el/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Δοκιμάστε διαφορετικές μεθόδους ομαδοποίησης + +## Οδηγίες + +Σε αυτό το μάθημα μάθατε για την ομαδοποίηση K-Means. Μερικές φορές η μέθοδος K-Means δεν είναι κατάλληλη για τα δεδομένα σας. Δημιουργήστε ένα notebook χρησιμοποιώντας δεδομένα είτε από αυτά τα μαθήματα είτε από κάποια άλλη πηγή (αναφέρετε την πηγή σας) και παρουσιάστε μια διαφορετική μέθοδο ομαδοποίησης που ΔΕΝ χρησιμοποιεί το K-Means. Τι μάθατε; + +## Κριτήρια Αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ------------------------------------------------------------- | ------------------------------------------------------------------- | --------------------------- | +| | Παρουσιάζεται ένα notebook με καλά τεκμηριωμένο μοντέλο ομαδοποίησης | Παρουσιάζεται ένα notebook χωρίς καλή τεκμηρίωση και/ή ελλιπές | Υποβάλλεται ελλιπής εργασία | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/el/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..57263e47c --- /dev/null +++ b/translations/el/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/5-Clustering/README.md b/translations/el/5-Clustering/README.md new file mode 100644 index 000000000..01cd46f9f --- /dev/null +++ b/translations/el/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Μοντέλα ομαδοποίησης για μηχανική μάθηση + +Η ομαδοποίηση είναι μια εργασία μηχανικής μάθησης που στοχεύει να βρει αντικείμενα που μοιάζουν μεταξύ τους και να τα ομαδοποιήσει σε ομάδες που ονομάζονται συστάδες. Αυτό που διαφοροποιεί την ομαδοποίηση από άλλες προσεγγίσεις στη μηχανική μάθηση είναι ότι όλα γίνονται αυτόματα. Στην πραγματικότητα, είναι δίκαιο να πούμε ότι είναι το αντίθετο της εποπτευόμενης μάθησης. + +## Τοπικό θέμα: μοντέλα ομαδοποίησης για τις μουσικές προτιμήσεις του κοινού της Νιγηρίας 🎧 + +Το ποικιλόμορφο κοινό της Νιγηρίας έχει ποικιλόμορφες μουσικές προτιμήσεις. Χρησιμοποιώντας δεδομένα που συλλέχθηκαν από το Spotify (εμπνευσμένα από [αυτό το άρθρο](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), ας εξετάσουμε μερικά δημοφιλή τραγούδια στη Νιγηρία. Αυτό το σύνολο δεδομένων περιλαμβάνει πληροφορίες για διάφορα τραγούδια, όπως το σκορ 'danceability', την 'acousticness', την ένταση, την 'speechiness', τη δημοτικότητα και την ενέργεια. Θα είναι ενδιαφέρον να ανακαλύψουμε μοτίβα σε αυτά τα δεδομένα! + +![Ένα πικάπ](../../../5-Clustering/images/turntable.jpg) + +> Φωτογραφία από Marcela Laskoski στο 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-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 και συλλέχθηκε από το Spotify. + +Χρήσιμα παραδείγματα K-Means που βοήθησαν στη δημιουργία αυτού του μαθήματος περιλαμβάνουν αυτήν την [εξερεύνηση του iris](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), αυτό το [εισαγωγικό notebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python) και αυτό το [υποθετικό παράδειγμα ΜΚΟ](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/1-Introduction-to-NLP/README.md b/translations/el/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..2567b9e8b --- /dev/null +++ b/translations/el/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Εισαγωγή στην επεξεργασία φυσικής γλώσσας + +Αυτό το μάθημα καλύπτει μια σύντομη ιστορία και σημαντικές έννοιες της *επεξεργασίας φυσικής γλώσσας*, ενός υποτομέα της *υπολογιστικής γλωσσολογίας*. + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Εισαγωγή + +Η επεξεργασία φυσικής γλώσσας (NLP), όπως είναι ευρέως γνωστή, είναι ένας από τους πιο γνωστούς τομείς όπου η μηχανική μάθηση έχει εφαρμοστεί και χρησιμοποιηθεί σε λογισμικό παραγωγής. + +✅ Μπορείτε να σκεφτείτε λογισμικό που χρησιμοποιείτε καθημερινά και πιθανότατα περιέχει κάποια ενσωματωμένη επεξεργασία φυσικής γλώσσας; Τι γίνεται με τα προγράμματα επεξεργασίας κειμένου ή τις εφαρμογές κινητών που χρησιμοποιείτε τακτικά; + +Θα μάθετε για: + +- **Την ιδέα των γλωσσών**. Πώς αναπτύχθηκαν οι γλώσσες και ποιοι ήταν οι κύριοι τομείς μελέτης. +- **Ορισμούς και έννοιες**. Θα μάθετε επίσης ορισμούς και έννοιες σχετικά με το πώς οι υπολογιστές επεξεργάζονται κείμενο, συμπεριλαμβανομένων της ανάλυσης, της γραμματικής και της αναγνώρισης ουσιαστικών και ρημάτων. Υπάρχουν κάποιες εργασίες προγραμματισμού σε αυτό το μάθημα, και εισάγονται αρκετές σημαντικές έννοιες που θα μάθετε να προγραμματίζετε αργότερα στα επόμενα μαθήματα. + +## Υπολογιστική γλωσσολογία + +Η υπολογιστική γλωσσολογία είναι ένας τομέας έρευνας και ανάπτυξης που μελετά εδώ και δεκαετίες πώς οι υπολογιστές μπορούν να συνεργαστούν με, να κατανοήσουν, να μεταφράσουν και να επικοινωνήσουν με γλώσσες. Η επεξεργασία φυσικής γλώσσας (NLP) είναι ένας συναφής τομέας που επικεντρώνεται στο πώς οι υπολογιστές μπορούν να επεξεργαστούν τις 'φυσικές', δηλαδή τις ανθρώπινες, γλώσσες. + +### Παράδειγμα - υπαγόρευση στο τηλέφωνο + +Αν έχετε ποτέ υπαγορεύσει στο τηλέφωνό σας αντί να πληκτρολογήσετε ή έχετε κάνει μια ερώτηση σε έναν εικονικό βοηθό, η ομιλία σας μετατράπηκε σε μορφή κειμένου και στη συνέχεια επεξεργάστηκε ή *αναλύθηκε* από τη γλώσσα που μιλήσατε. Οι ανιχνευμένες λέξεις-κλειδιά στη συνέχεια επεξεργάστηκαν σε μια μορφή που το τηλέφωνο ή ο βοηθός μπορούσε να κατανοήσει και να ενεργήσει. + +![κατανόηση](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Η πραγματική γλωσσική κατανόηση είναι δύσκολη! Εικόνα από [Jen Looper](https://twitter.com/jenlooper) + +### Πώς είναι δυνατή αυτή η τεχνολογία; + +Αυτό είναι δυνατό επειδή κάποιος έγραψε ένα πρόγραμμα υπολογιστή για να το κάνει. Πριν από μερικές δεκαετίες, κάποιοι συγγραφείς επιστημονικής φαντασίας προέβλεψαν ότι οι άνθρωποι θα μιλούσαν κυρίως στους υπολογιστές τους και οι υπολογιστές θα καταλάβαιναν πάντα ακριβώς τι εννοούσαν. Δυστυχώς, αποδείχθηκε ότι είναι ένα πιο δύσκολο πρόβλημα από ό,τι φαντάζονταν πολλοί, και ενώ σήμερα είναι ένα πολύ καλύτερα κατανοητό πρόβλημα, υπάρχουν σημαντικές προκλήσεις για την επίτευξη της 'τέλειας' επεξεργασίας φυσικής γλώσσας όσον αφορά την κατανόηση του νοήματος μιας πρότασης. Αυτό είναι ιδιαίτερα δύσκολο όταν πρόκειται για την κατανόηση του χιούμορ ή την ανίχνευση συναισθημάτων όπως η ειρωνεία σε μια πρόταση. + +Σε αυτό το σημείο, ίσως θυμάστε σχολικά μαθήματα όπου ο δάσκαλος κάλυπτε τα μέρη της γραμματικής σε μια πρόταση. Σε ορισμένες χώρες, οι μαθητές διδάσκονται γραμματική και γλωσσολογία ως ξεχωριστό μάθημα, αλλά σε πολλές, αυτά τα θέματα περιλαμβάνονται ως μέρος της εκμάθησης μιας γλώσσας: είτε της πρώτης σας γλώσσας στο δημοτικό σχολείο (εκμάθηση ανάγνωσης και γραφής) και ίσως μιας δεύτερης γλώσσας στο γυμνάσιο ή λύκειο. Μην ανησυχείτε αν δεν είστε ειδικός στη διάκριση ουσιαστικών από ρήματα ή επιρρημάτων από επίθετα! + +Αν δυσκολεύεστε με τη διαφορά μεταξύ του *απλού ενεστώτα* και του *παρατατικού ενεστώτα*, δεν είστε μόνοι. Αυτό είναι μια πρόκληση για πολλούς ανθρώπους, ακόμη και για φυσικούς ομιλητές μιας γλώσσας. Τα καλά νέα είναι ότι οι υπολογιστές είναι πολύ καλοί στην εφαρμογή τυπικών κανόνων, και θα μάθετε να γράφετε κώδικα που μπορεί να *αναλύσει* μια πρόταση εξίσου καλά με έναν άνθρωπο. Η μεγαλύτερη πρόκληση που θα εξετάσετε αργότερα είναι η κατανόηση του *νοήματος* και του *συναισθήματος* μιας πρότασης. + +## Προαπαιτούμενα + +Για αυτό το μάθημα, το κύριο προαπαιτούμενο είναι να μπορείτε να διαβάσετε και να κατανοήσετε τη γλώσσα αυτού του μαθήματος. Δεν υπάρχουν μαθηματικά προβλήματα ή εξισώσεις για να λύσετε. Ενώ ο αρχικός συγγραφέας έγραψε αυτό το μάθημα στα Αγγλικά, έχει επίσης μεταφραστεί σε άλλες γλώσσες, οπότε μπορεί να διαβάζετε μια μετάφραση. Υπάρχουν παραδείγματα όπου χρησιμοποιούνται διάφορες γλώσσες (για να συγκριθούν οι διαφορετικοί γραμματικοί κανόνες διαφορετικών γλωσσών). Αυτά *δεν* μεταφράζονται, αλλά το επεξηγηματικό κείμενο μεταφράζεται, ώστε το νόημα να είναι σαφές. + +Για τις εργασίες προγραμματισμού, θα χρησιμοποιήσετε Python και τα παραδείγματα χρησιμοποιούν Python 3.8. + +Σε αυτή την ενότητα, θα χρειαστείτε και θα χρησιμοποιήσετε: + +- **Κατανόηση Python 3**. Κατανόηση της γλώσσας προγραμματισμού Python 3, αυτό το μάθημα χρησιμοποιεί εισόδους, βρόχους, ανάγνωση αρχείων, πίνακες. +- **Visual Studio Code + επέκταση**. Θα χρησιμοποιήσουμε το Visual Studio Code και την επέκταση Python του. Μπορείτε επίσης να χρησιμοποιήσετε ένα IDE Python της επιλογής σας. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) είναι μια απλοποιημένη βιβλιοθήκη επεξεργασίας κειμένου για Python. Ακολουθήστε τις οδηγίες στον ιστότοπο του TextBlob για να το εγκαταστήσετε στο σύστημά σας (εγκαταστήστε επίσης τα corpora, όπως φαίνεται παρακάτω): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Συμβουλή: Μπορείτε να εκτελέσετε Python απευθείας σε περιβάλλοντα VS Code. Ελέγξτε τα [έγγραφα](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) για περισσότερες πληροφορίες. + +## Συνομιλία με μηχανές + +Η ιστορία της προσπάθειας να κάνουν οι υπολογιστές να κατανοήσουν την ανθρώπινη γλώσσα πηγαίνει πίσω δεκαετίες, και ένας από τους πρώτους επιστήμονες που εξέτασε την επεξεργασία φυσικής γλώσσας ήταν ο *Alan Turing*. + +### Το 'τεστ Turing' + +Όταν ο Turing ερευνούσε την *τεχνητή νοημοσύνη* τη δεκαετία του 1950, σκέφτηκε αν θα μπορούσε να δοθεί ένα τεστ συνομιλίας σε έναν άνθρωπο και έναν υπολογιστή (μέσω γραπτής αλληλογραφίας) όπου ο άνθρωπος στη συνομιλία δεν ήταν σίγουρος αν συνομιλούσε με άλλον άνθρωπο ή με υπολογιστή. + +Αν, μετά από μια ορισμένη διάρκεια συνομιλίας, ο άνθρωπος δεν μπορούσε να προσδιορίσει αν οι απαντήσεις προέρχονταν από υπολογιστή ή όχι, τότε θα μπορούσε να ειπωθεί ότι ο υπολογιστής *σκέφτεται*; + +### Η έμπνευση - 'το παιχνίδι μίμησης' + +Η ιδέα για αυτό προήλθε από ένα παιχνίδι πάρτι που ονομάζεται *Το Παιχνίδι Μίμησης*, όπου ένας ανακριτής είναι μόνος σε ένα δωμάτιο και έχει ως καθήκον να προσδιορίσει ποιοι από δύο ανθρώπους (σε άλλο δωμάτιο) είναι άνδρας και γυναίκα αντίστοιχα. Ο ανακριτής μπορεί να στείλει σημειώσεις και πρέπει να προσπαθήσει να σκεφτεί ερωτήσεις όπου οι γραπτές απαντήσεις αποκαλύπτουν το φύλο του μυστηριώδους ατόμου. Φυσικά, οι παίκτες στο άλλο δωμάτιο προσπαθούν να παραπλανήσουν τον ανακριτή απαντώντας σε ερωτήσεις με τρόπο που να τον μπερδεύει ή να τον παραπλανεί, ενώ παράλληλα δίνουν την εντύπωση ότι απαντούν ειλικρινά. + +### Ανάπτυξη της Eliza + +Τη δεκαετία του 1960, ένας επιστήμονας του MIT, ο *Joseph Weizenbaum*, ανέπτυξε την [*Eliza*](https://wikipedia.org/wiki/ELIZA), μια υπολογιστική 'θεραπεύτρια' που έκανε ερωτήσεις στον άνθρωπο και έδινε την εντύπωση ότι κατανοούσε τις απαντήσεις του. Ωστόσο, ενώ η Eliza μπορούσε να αναλύσει μια πρόταση και να εντοπίσει ορισμένες γραμματικές δομές και λέξεις-κλειδιά ώστε να δώσει μια λογική απάντηση, δεν μπορούσε να ειπωθεί ότι *κατανοούσε* την πρόταση. Αν η Eliza παρουσιαζόταν με μια πρόταση που ακολουθούσε τη μορφή "**Είμαι** λυπημένος", θα μπορούσε να αναδιατάξει και να αντικαταστήσει λέξεις στην πρόταση για να σχηματίσει την απάντηση "Πόσο καιρό είστε λυπημένος;". + +Αυτό έδινε την εντύπωση ότι η Eliza κατανοούσε τη δήλωση και έκανε μια επόμενη ερώτηση, ενώ στην πραγματικότητα άλλαζε τον χρόνο και πρόσθετε κάποιες λέξεις. Αν η Eliza δεν μπορούσε να εντοπίσει μια λέξη-κλειδί για την οποία είχε μια απάντηση, θα έδινε μια τυχαία απάντηση που θα μπορούσε να εφαρμοστεί σε πολλές διαφορετικές δηλώσεις. Η Eliza μπορούσε να ξεγελαστεί εύκολα, για παράδειγμα αν ένας χρήστης έγραφε "**Είσαι** ένα ποδήλατο", θα μπορούσε να απαντήσει "Πόσο καιρό είμαι ποδήλατο;", αντί για μια πιο λογική απάντηση. + +[![Συνομιλία με την 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. Εναλλακτικά, διαβάστε για την Eliza στη [Wikipedia](https://wikipedia.org/wiki/ELIZA). + +## Άσκηση - προγραμματισμός ενός βασικού συνομιλητικού bot + +Ένα συνομιλητικό bot, όπως η Eliza, είναι ένα πρόγραμμα που λαμβάνει εισόδους από τον χρήστη και φαίνεται να κατανοεί και να απαντά έξυπνα. Σε αντίθεση με την Eliza, το bot μας δεν θα έχει πολλούς κανόνες που του δίνουν την εντύπωση ότι έχει μια έξυπνη συνομιλία. Αντίθετα, το bot μας θα έχει μόνο μία δυνατότητα, να συνεχίζει τη συνομιλία με τυχαίες απαντήσεις που μπορεί να λειτουργούν σε σχεδόν οποιαδήποτε απλή συνομιλία. + +### Το σχέδιο + +Τα βήματά σας για την κατασκευή ενός συνομιλητικού bot: + +1. Εκτυπώστε οδηγίες που συμβουλεύουν τον χρήστη πώς να αλληλεπιδράσει με το bot +2. Ξεκινήστε έναν βρόχο + 1. Αποδεχτείτε την είσοδο του χρήστη + 2. Αν ο χρήστης ζητήσει να τερματίσει, τότε τερματίστε + 3. Επεξεργαστείτε την είσοδο του χρήστη και καθορίστε την απάντηση (σε αυτή την περίπτωση, η απάντηση είναι μια τυχαία επιλογή από μια λίστα πιθανών γενικών απαντήσεων) + 4. Εκτυπώστε την απάντηση +3. Επιστρέψτε στο βήμα 2 + +### Δημιουργία του bot + +Ας δημιουργήσουμε το bot τώρα. Θα ξεκινήσουμε ορίζοντας κάποιες φράσεις. + +1. Δημιουργήστε αυτό το bot μόνοι σας σε 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. Πιστεύετε ότι οι τυχαίες απαντήσεις θα 'ξεγελούσαν' κάποιον ώστε να πιστέψει ότι το bot πραγματικά τον κατανοεί; + 2. Ποια χαρακτηριστικά θα χρειαζόταν το bot για να είναι πιο αποτελεσματικό; + 3. Αν ένα bot μπορούσε πραγματικά να 'κατανοήσει' το νόημα μιας πρότασης, θα χρειαζόταν να 'θυμάται' το νόημα προηγούμενων προτάσεων σε μια συνομιλία επίσης; + +--- + +## 🚀Πρόκληση + +Επιλέξτε ένα από τα στοιχεία "σταματήστε και σκεφτείτε" παραπάνω και είτε προσπαθήστε να το υλοποιήσετε σε κώδικα είτε γράψτε μια λύση σε χαρτί χρησιμοποιώντας ψευδοκώδικα. + +Στο επόμενο μάθημα, θα μάθετε για μια σειρά από άλλες προσεγγίσεις για την ανάλυση φυσικής γλώσσας και τη μηχανική μάθηση. + +## [Μετά-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Ρίξτε μια ματιά στις παρακάτω αναφορές ως ευκαιρίες για περαιτέρω ανάγνωση. + +### Αναφορές + +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. + +## Εργασία + +[Αναζητήστε ένα bot](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/el/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..61c6b1850 --- /dev/null +++ b/translations/el/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Αναζήτηση για ένα bot + +## Οδηγίες + +Τα bots είναι παντού. Η αποστολή σας: βρείτε ένα και υιοθετήστε το! Μπορείτε να τα βρείτε σε ιστοσελίδες, σε εφαρμογές τραπεζών και στο τηλέφωνο, για παράδειγμα όταν καλείτε εταιρείες χρηματοοικονομικών υπηρεσιών για συμβουλές ή πληροφορίες λογαριασμού. Αναλύστε το bot και δείτε αν μπορείτε να το μπερδέψετε. Αν καταφέρετε να το μπερδέψετε, γιατί πιστεύετε ότι συνέβη αυτό; Γράψτε ένα σύντομο κείμενο για την εμπειρία σας. + +## Κριτήρια Αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ----------------------------------------------------------------------------------------------------------- | ------------------------------------------ | --------------------- | +| | Έχει γραφτεί ένα πλήρες κείμενο μιας σελίδας, που εξηγεί την υποτιθέμενη αρχιτεκτονική του bot και περιγράφει την εμπειρία σας με αυτό | Το κείμενο είναι ελλιπές ή δεν έχει ερευνηθεί καλά | Δεν έχει υποβληθεί κείμενο | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/2-Tasks/README.md b/translations/el/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..f4453d674 --- /dev/null +++ b/translations/el/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Κοινές εργασίες και τεχνικές επεξεργασίας φυσικής γλώσσας + +Για τις περισσότερες εργασίες επεξεργασίας *φυσικής γλώσσας*, το κείμενο που πρόκειται να επεξεργαστεί πρέπει να διασπαστεί, να εξεταστεί και τα αποτελέσματα να αποθηκευτούν ή να διασταυρωθούν με κανόνες και σύνολα δεδομένων. Αυτές οι εργασίες επιτρέπουν στον προγραμματιστή να εξάγει το _νόημα_ ή την _πρόθεση_ ή μόνο τη _συχνότητα_ των όρων και των λέξεων σε ένα κείμενο. + +## [Προ-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +Ας ανακαλύψουμε κοινές τεχνικές που χρησιμοποιούνται στην επεξεργασία κειμένου. Σε συνδυασμό με τη μηχανική μάθηση, αυτές οι τεχνικές σας βοηθούν να αναλύσετε μεγάλες ποσότητες κειμένου αποτελεσματικά. Πριν εφαρμόσετε τη μηχανική μάθηση σε αυτές τις εργασίες, ας κατανοήσουμε τα προβλήματα που αντιμετωπίζει ένας ειδικός στην επεξεργασία φυσικής γλώσσας. + +## Κοινές εργασίες στην επεξεργασία φυσικής γλώσσας + +Υπάρχουν διάφοροι τρόποι για να αναλύσετε ένα κείμενο με το οποίο εργάζεστε. Υπάρχουν εργασίες που μπορείτε να εκτελέσετε και μέσω αυτών μπορείτε να κατανοήσετε το κείμενο και να εξαγάγετε συμπεράσματα. Συνήθως εκτελείτε αυτές τις εργασίες με μια συγκεκριμένη ακολουθία. + +### Διαχωρισμός σε λέξεις (Tokenization) + +Πιθανώς το πρώτο πράγμα που πρέπει να κάνουν οι περισσότεροι αλγόριθμοι επεξεργασίας φυσικής γλώσσας είναι να διασπάσουν το κείμενο σε tokens, δηλαδή λέξεις. Ενώ αυτό ακούγεται απλό, η ανάγκη να ληφθούν υπόψη τα σημεία στίξης και οι διαφορετικοί διαχωριστές λέξεων και προτάσεων σε διάφορες γλώσσες μπορεί να το κάνει δύσκολο. Ίσως χρειαστεί να χρησιμοποιήσετε διάφορες μεθόδους για να προσδιορίσετε τα όρια. + +![tokenization](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Διαχωρισμός μιας πρότασης από το **Περηφάνια και Προκατάληψη**. Γραφικό από [Jen Looper](https://twitter.com/jenlooper) + +### Ενσωματώσεις (Embeddings) + +[Ενσωματώσεις λέξεων](https://wikipedia.org/wiki/Word_embedding) είναι ένας τρόπος να μετατρέψετε τα δεδομένα του κειμένου σας σε αριθμητική μορφή. Οι ενσωματώσεις γίνονται με τέτοιο τρόπο ώστε λέξεις με παρόμοιο νόημα ή λέξεις που χρησιμοποιούνται μαζί να ομαδοποιούνται. + +![word embeddings](../../../../6-NLP/2-Tasks/images/embedding.png) +> "Έχω τον μέγιστο σεβασμό για τα νεύρα σας, είναι παλιοί μου φίλοι." - Ενσωματώσεις λέξεων για μια πρόταση από το **Περηφάνια και Προκατάληψη**. Γραφικό από [Jen Looper](https://twitter.com/jenlooper) + +✅ Δοκιμάστε [αυτό το ενδιαφέρον εργαλείο](https://projector.tensorflow.org/) για να πειραματιστείτε με ενσωματώσεις λέξεων. Κάνοντας κλικ σε μια λέξη εμφανίζονται ομάδες παρόμοιων λέξεων: 'toy' ομαδοποιείται με 'disney', 'lego', 'playstation' και 'console'. + +### Ανάλυση & Ετικέτες μέρους του λόγου (Parsing & Part-of-speech Tagging) + +Κάθε λέξη που έχει διαχωριστεί μπορεί να επισημανθεί ως μέρος του λόγου - ουσιαστικό, ρήμα ή επίθετο. Η πρόταση `the quick red fox jumped over the lazy brown dog` μπορεί να επισημανθεί ως fox = ουσιαστικό, jumped = ρήμα. + +![parsing](../../../../6-NLP/2-Tasks/images/parse.png) + +> Ανάλυση μιας πρότασης από το **Περηφάνια και Προκατάληψη**. Γραφικό από [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 για τη λέξη "the". + +Ας δούμε ένα παράδειγμα κειμένου όπου μετράμε τη συχνότητα των λέξεων. Το ποίημα του 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), δύο λέξεις (bigram), τρεις λέξεις (trigram) ή οποιονδήποτε αριθμό λέξεων (n-grams). + +Για παράδειγμα, η φράση `the quick red fox jumped over the lazy brown dog` με βαθμολογία n-gram 2 παράγει τα εξής 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 + +Μπορεί να είναι πιο εύκολο να το οπτικοποιήσετε ως ένα κινούμενο πλαίσιο πάνω από την πρόταση. Εδώ είναι για n-grams των 3 λέξεων, το 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](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> Τιμή N-gram 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 (πιο αντικειμενικό έως πιο υποκειμενικό). + +✅ Αργότερα θα μάθετε ότι υπάρχουν διαφορετικοί τρόποι για να προσδιορίσετε το συναίσθημα χρησιμοποιώντας μηχανική μάθηση, αλλά ένας τρόπος είναι να έχετε μια λίστα λέξεων και φράσεων που έχουν κατηγοριοποιηθεί ως θετικές ή αρνητικές από έναν ανθρώπινο ειδικό και να εφαρμόσετε αυτό το μοντέλο στο κείμενο για να υπολογίσετε μια βαθμολογία πολικότητας. Μπορείτε να δείτε πώς αυτό θα λειτουργούσε σε ορισμένες περιπτώσεις και λιγότερο καλά σε άλλες; + +### Κλίση (Inflection) + +Η κλίση σας επιτρέπει να πάρετε μια λέξη και να βρείτε τον ενικό ή τον πληθυντικό της λέξης. + +### Λημματοποίηση (Lemmatization) + +Ένα *λήμμα* είναι η ρίζα ή η κύρια λέξη για ένα σύνολο λέξεων, για παράδειγμα *flew*, *flies*, *flying* έχουν ως λήμμα το ρήμα *fly*. + +Υπάρχουν επίσης χρήσιμες βάσεις δεδομένων διαθέσιμες για τον ερευνητή επεξεργασίας φυσικής γλώσσας, όπως: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) είναι μια βάση δεδομένων λέξεων, συνωνύμων, αντωνύμων και πολλών άλλων λεπτομερειών για κάθε λέξη σε πολλές διαφορετικές γλώσσες. Είναι εξαιρετικά χρήσιμη όταν προσπαθείτε να δημιουργήσετε μεταφράσεις, διορθωτές ορθογραφίας ή εργαλεία γλώσσας οποιουδήποτε τύπου. + +## Βιβλιοθήκες επεξεργασίας φυσικής γλώσσας + +Ευτυχώς, δεν χρειάζεται να δημιουργήσετε όλες αυτές τις τεχνικές μόνοι σας, καθώς υπάρχουν εξαιρετικές βιβλιοθήκες Python διαθέσιμες που τις καθιστούν πολύ πιο προσιτές σε προγραμματιστές που δεν είναι εξειδικευμένοι στην επεξεργασία φυσικής γλώσσας ή στη μηχανική μάθηση. Τα επόμενα μαθήματα περιλαμβάνουν περισσότερα παραδείγματα από αυτές, αλλά εδώ θα μάθετε μερικά χρήσιμα παραδείγματα για να σας βοηθήσουν με την επόμενη εργασία. + +### Άσκηση - χρήση της βιβλιοθήκης `TextBlob` + +Ας χρησιμοποιήσουμε μια βιβλιοθήκη που ονομάζεται TextBlob καθώς περιέχει χρήσιμα APIs για την αντιμετώπιση αυτών των τύπων εργασιών. Το TextBlob "βασίζεται στους γίγαντες [NLTK](https://nltk.org) και [pattern](https://github.com/clips/pattern), και συνεργάζεται καλά και με τα δύο." Έχει σημαντική ποσότητα μηχανικής μάθησης ενσωματωμένη στο API του. + +> Σημείωση: Ένας χρήσιμος [Οδηγός Γρήγορης Εκκίνησης](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) είναι διαθέσιμος για το TextBlob και συνιστάται για έμπειρους προγραμματιστές Python. + +Όταν προσπαθείτε να εντοπίσετε *φράσεις με ουσιαστικά*, το TextBlob προσφέρει αρκετές επιλογές εξαγωγέων για να βρείτε φράσεις με ουσιαστικά. + +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) είναι "Ένας εξαγωγέας φράσεων με ουσιαστικά που χρησιμοποιεί chunk parsing εκπαιδευμένο με το ConLL-2000 training corpus." Το ConLL-2000 αναφέρεται στο Συνέδριο του 2000 για την Υπολογιστική Μάθηση Φυσικής Γλώσσας. Κάθε χρόνο το συνέδριο φιλοξενούσε ένα εργαστήριο για την αντιμετώπιση ενός δύσκολου προβλήματος επεξεργασίας φυσικής γλώσσας, και το 2000 ήταν το noun chunking. Ένα μοντέλο εκπαιδεύτηκε στο Wall Street Journal, με "sections 15-18 ως δεδομένα εκπαίδευσης (211727 tokens) και section 20 ως δεδομένα δοκιμής (47377 tokens)". Μπορείτε να δείτε τις διαδικασίες που χρησιμοποιήθηκαν [εδώ](https://www.clips.uantwerpen.be/conll2000/chunking/) και τα [αποτελέσματα](https://ifarm.nl/erikt/research/np-chunking.html). + +### Πρόκληση - βελτίωση του bot σας με επεξεργασία φυσικής γλώσσας + +Στο προηγούμενο μάθημα δημιουργήσατε ένα πολύ απλό bot ερωτήσεων και απαντήσεων. Τώρα, θα κάνετε τον Marvin λίγο πιο συμπαθητικό αναλύοντας την είσοδο σας για συναίσθημα και εκτυπώνοντας μια απάντηση που ταιριάζει με το συναίσθημα. Θα χρειαστεί επίσης να εντοπίσετε μια `noun_phrase` και να ρωτήσετε γι' αυτήν. + +Τα βήματά σας για τη δημιουργία ενός καλύτερου συνομιλητικού bot: + +1. Εκτυπώστε οδηγίες που συμβουλεύουν τον χρήστη πώς να αλληλεπιδράσει με το bot. +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. Πιστεύετε ότι οι συμπαθητικές απαντήσεις θα 'ξεγελούσαν' κάποιον ώστε να πιστέψει ότι το bot πραγματικά τον καταλαβαίνει; +2. Κάνει η αναγνώριση της φράσης με ουσιαστικό το bot πιο 'πιστευτό'; +3. Γιατί θα ήταν χρήσιμο να εξάγετε μια 'φράση με ουσιαστικό' από μια πρόταση; + +--- + +Υλοποιήστε το bot στον προηγούμενο έλεγχο γνώσεων και δοκιμάστε το σε έναν φίλο. Μπορεί να τον ξεγελάσει; Μπορείτε να κάνετε το bot σας πιο 'πιστευτό'; + +## 🚀Πρόκληση + +Πάρτε μια εργασία από τον προηγούμενο έλεγχο γνώσεων και προσπαθήστε να την υλοποιήσετε. Δοκιμάστε το bot σε έναν φίλο. Μπορεί να τον ξεγελάσει; Μπορείτε να κάνετε το bot σας πιο 'πιστευτό'; + +## [Μετά-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Στα επόμενα μαθήματα θα μάθετε περισσότερα για την ανάλυση συναισθήματος. Ερευνήστε αυτήν την ενδιαφέρουσα τεχνική σε άρθρα όπως αυτά στο [KDNuggets](https://www.kdnuggets.com/tag/nlp) + +## Εργασία + +[Κάντε ένα bot να απαντά](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/2-Tasks/assignment.md b/translations/el/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..a96b0d9c2 --- /dev/null +++ b/translations/el/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Κάντε έναν Bot να απαντά + +## Οδηγίες + +Στα προηγούμενα μαθήματα, προγραμματίσατε έναν βασικό bot με τον οποίο μπορείτε να συνομιλήσετε. Αυτός ο bot δίνει τυχαίες απαντήσεις μέχρι να πείτε 'αντίο'. Μπορείτε να κάνετε τις απαντήσεις λίγο λιγότερο τυχαίες και να ενεργοποιείτε συγκεκριμένες απαντήσεις όταν λέτε συγκεκριμένα πράγματα, όπως 'γιατί' ή 'πώς'; Σκεφτείτε πώς η μηχανική μάθηση θα μπορούσε να κάνει αυτό το είδος εργασίας λιγότερο χειροκίνητο καθώς επεκτείνετε τον bot σας. Μπορείτε να χρησιμοποιήσετε τις βιβλιοθήκες NLTK ή TextBlob για να κάνετε τις εργασίες σας ευκολότερες. + +## Κριτήρια Αξιολόγησης + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Παρουσιάζεται ένα νέο αρχείο bot.py και τεκμηριώνεται | Παρουσιάζεται ένα νέο αρχείο bot αλλά περιέχει σφάλματα | Δεν παρουσιάζεται αρχείο | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/3-Translation-Sentiment/README.md b/translations/el/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..02bc2851e --- /dev/null +++ b/translations/el/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,180 @@ + +# Μετάφραση και ανάλυση συναισθημάτων με ML + +Στα προηγούμενα μαθήματα μάθατε πώς να δημιουργείτε ένα βασικό bot χρησιμοποιώντας το `TextBlob`, μια βιβλιοθήκη που ενσωματώνει ML στο παρασκήνιο για να εκτελεί βασικές εργασίες NLP, όπως η εξαγωγή φράσεων ουσιαστικών. Μια άλλη σημαντική πρόκληση στη γλωσσολογία υπολογιστών είναι η ακριβής _μετάφραση_ μιας πρότασης από μία ομιλούμενη ή γραπτή γλώσσα σε μια άλλη. + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +Η μετάφραση είναι ένα πολύ δύσκολο πρόβλημα, επιβαρυμένο από το γεγονός ότι υπάρχουν χιλιάδες γλώσσες και κάθε μία μπορεί να έχει πολύ διαφορετικούς γραμματικούς κανόνες. Μια προσέγγιση είναι να μετατρέψετε τους επίσημους γραμματικούς κανόνες μιας γλώσσας, όπως τα Αγγλικά, σε μια δομή ανεξάρτητη από τη γλώσσα και στη συνέχεια να την μεταφράσετε μετατρέποντάς την πίσω σε μια άλλη γλώσσα. Αυτή η προσέγγιση σημαίνει ότι θα ακολουθήσετε τα εξής βήματα: + +1. **Αναγνώριση**. Αναγνωρίστε ή επισημάνετε τις λέξεις στην εισαγωγική γλώσσα ως ουσιαστικά, ρήματα κ.λπ. +2. **Δημιουργία μετάφρασης**. Παράγετε μια άμεση μετάφραση κάθε λέξης στη μορφή της γλώσσας-στόχου. + +### Παράδειγμα πρότασης, Αγγλικά προς Ιρλανδικά + +Στα 'Αγγλικά', η πρόταση _I feel happy_ αποτελείται από τρεις λέξεις με τη σειρά: + +- **υποκείμενο** (I) +- **ρήμα** (feel) +- **επίθετο** (happy) + +Ωστόσο, στη γλώσσα 'Ιρλανδικά', η ίδια πρόταση έχει πολύ διαφορετική γραμματική δομή - τα συναισθήματα όπως "*happy*" ή "*sad*" εκφράζονται ως κάτι που είναι *επάνω* σου. + +Η αγγλική φράση `I feel happy` στα Ιρλανδικά θα ήταν `Tá athas orm`. Μια *κυριολεκτική* μετάφραση θα ήταν `Happy is upon me`. + +Ένας Ιρλανδός ομιλητής που μεταφράζει στα Αγγλικά θα έλεγε `I feel happy`, όχι `Happy is upon me`, επειδή κατανοεί το νόημα της πρότασης, ακόμα κι αν οι λέξεις και η δομή της πρότασης είναι διαφορετικές. + +Η επίσημη σειρά για την πρόταση στα Ιρλανδικά είναι: + +- **ρήμα** (Tá ή is) +- **επίθετο** (athas, ή happy) +- **υποκείμενο** (orm, ή upon me) + +## Μετάφραση + +Ένα απλοϊκό πρόγραμμα μετάφρασης μπορεί να μεταφράσει μόνο λέξεις, αγνοώντας τη δομή της πρότασης. + +✅ Εάν έχετε μάθει μια δεύτερη (ή τρίτη ή περισσότερες) γλώσσα ως ενήλικας, ίσως ξεκινήσατε σκεπτόμενοι στη μητρική σας γλώσσα, μεταφράζοντας μια έννοια λέξη προς λέξη στο μυαλό σας στη δεύτερη γλώσσα και στη συνέχεια εκφωνώντας τη μετάφρασή σας. Αυτό είναι παρόμοιο με αυτό που κάνουν τα απλοϊκά προγράμματα μετάφρασης υπολογιστών. Είναι σημαντικό να ξεπεράσετε αυτή τη φάση για να αποκτήσετε ευχέρεια! + +Η απλοϊκή μετάφραση οδηγεί σε κακές (και μερικές φορές ξεκαρδιστικές) λανθασμένες μεταφράσεις: `I feel happy` μεταφράζεται κυριολεκτικά ως `Mise bhraitheann athas` στα Ιρλανδικά. Αυτό σημαίνει (κυριολεκτικά) `me feel happy` και δεν είναι έγκυρη Ιρλανδική πρόταση. Παρόλο που τα Αγγλικά και τα Ιρλανδικά είναι γλώσσες που ομιλούνται σε δύο γειτονικά νησιά, είναι πολύ διαφορετικές γλώσσες με διαφορετικές γραμματικές δομές. + +> Μπορείτε να παρακολουθήσετε μερικά βίντεο σχετικά με τις γλωσσικές παραδόσεις των Ιρλανδικών, όπως [αυτό](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Προσεγγίσεις μηχανικής μάθησης + +Μέχρι τώρα, έχετε μάθει για την προσέγγιση των επίσημων κανόνων στην επεξεργασία φυσικής γλώσσας. Μια άλλη προσέγγιση είναι να αγνοήσετε το νόημα των λέξεων και _αντί να χρησιμοποιήσετε μηχανική μάθηση για να ανιχνεύσετε μοτίβα_. Αυτό μπορεί να λειτουργήσει στη μετάφραση εάν έχετε πολλά κείμενα (ένα *corpus*) ή κείμενα (*corpora*) τόσο στην αρχική όσο και στη γλώσσα-στόχο. + +Για παράδειγμα, σκεφτείτε την περίπτωση του *Περηφάνια και Προκατάληψη*, ενός γνωστού αγγλικού μυθιστορήματος γραμμένου από την Jane Austen το 1813. Εάν συμβουλευτείτε το βιβλίο στα Αγγλικά και μια ανθρώπινη μετάφραση του βιβλίου στα *Γαλλικά*, θα μπορούσατε να ανιχνεύσετε φράσεις που είναι _ιδιωματικά_ μεταφρασμένες από τη μία γλώσσα στην άλλη. Θα το κάνετε αυτό σε λίγο. + +Για παράδειγμα, όταν μια αγγλική φράση όπως `I have no money` μεταφράζεται κυριολεκτικά στα Γαλλικά, μπορεί να γίνει `Je n'ai pas de monnaie`. Η "Monnaie" είναι ένα δύσκολο γαλλικό 'ψευδο-ομόλογο', καθώς 'money' και 'monnaie' δεν είναι συνώνυμα. Μια καλύτερη μετάφραση που θα μπορούσε να κάνει ένας άνθρωπος θα ήταν `Je n'ai pas d'argent`, επειδή μεταφέρει καλύτερα το νόημα ότι δεν έχετε χρήματα (αντί για 'ψιλά', που είναι η έννοια του 'monnaie'). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Εικόνα από [Jen Looper](https://twitter.com/jenlooper) + +Εάν ένα μοντέλο ML έχει αρκετές ανθρώπινες μεταφράσεις για να δημιουργήσει ένα μοντέλο, μπορεί να βελτιώσει την ακρίβεια των μεταφράσεων εντοπίζοντας κοινά μοτίβα σε κείμενα που έχουν μεταφραστεί προηγουμένως από ειδικούς ανθρώπινους ομιλητές και των δύο γλωσσών. + +### Άσκηση - μετάφραση + +Μπορείτε να χρησιμοποιήσετε το `TextBlob` για να μεταφράσετε προτάσεις. Δοκιμάστε την διάσημη πρώτη γραμμή του **Περηφάνια και Προκατάληψη**: + +```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." + +Σε αυτή την περίπτωση, η μετάφραση που ενημερώνεται από ML κάνει καλύτερη δουλειά από τον ανθρώπινο μεταφραστή που προσθέτει περιττά λόγια στο στόμα του αρχικού συγγραφέα για 'σαφήνεια'. + +> Τι συμβαίνει εδώ; και γιατί το TextBlob είναι τόσο καλό στη μετάφραση; Λοιπόν, στο παρασκήνιο, χρησιμοποιεί το Google translate, ένα εξελιγμένο AI που μπορεί να αναλύσει εκατομμύρια φράσεις για να προβλέψει τις καλύτερες ακολουθίες για την εκάστοτε εργασία. Δεν υπάρχει τίποτα χειροκίνητο εδώ και χρειάζεστε σύνδεση στο διαδίκτυο για να χρησιμοποιήσετε το `blob.translate`. + +✅ Δοκιμάστε μερικές ακόμα προτάσεις. Ποια είναι καλύτερη, η ML ή η ανθρώπινη μετάφραση; Σε ποιες περιπτώσεις; + +## Ανάλυση συναισθημάτων + +Ένας άλλος τομέας όπου η μηχανική μάθηση μπορεί να λειτουργήσει πολύ καλά είναι η ανάλυση συναισθημάτων. Μια μη-ML προσέγγιση για τα συναισθήματα είναι να εντοπίσετε λέξεις και φράσεις που είναι 'θετικές' και 'αρνητικές'. Στη συνέχεια, δεδομένου ενός νέου κειμένου, υπολογίστε τη συνολική αξία των θετικών, αρνητικών και ουδέτερων λέξεων για να προσδιορίσετε τη συνολική διάθεση. + +Αυτή η προσέγγιση μπορεί να ξεγελαστεί εύκολα, όπως ίσως έχετε δει στην εργασία Marvin - η πρόταση `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` είναι μια σαρκαστική, αρνητική πρόταση, αλλά ο απλός αλγόριθμος ανιχνεύει 'great', 'wonderful', 'glad' ως θετικά και 'waste', 'lost' και 'dark' ως αρνητικά. Η συνολική διάθεση επηρεάζεται από αυτές τις αντικρουόμενες λέξεις. + +✅ Σταματήστε για λίγο και σκεφτείτε πώς μεταφέρουμε τον σαρκασμό ως ανθρώπινοι ομιλητές. Η τονική έμφαση παίζει μεγάλο ρόλο. Προσπαθήστε να πείτε τη φράση "Well, that film was awesome" με διαφορετικούς τρόπους για να ανακαλύψετε πώς η φωνή σας μεταφέρει νόημα. + +### Προσεγγίσεις ML + +Η προσέγγιση ML θα ήταν να συγκεντρώσετε χειροκίνητα αρνητικά και θετικά σώματα κειμένου - tweets, ή κριτικές ταινιών, ή οτιδήποτε όπου ο άνθρωπος έχει δώσει μια βαθμολογία *και* μια γραπτή γνώμη. Στη συνέχεια, μπορούν να εφαρμοστούν τεχνικές NLP στις γνώμες και τις βαθμολογίες, ώστε να προκύψουν μοτίβα (π.χ., θετικές κριτικές ταινιών τείνουν να έχουν τη φράση 'Oscar worthy' περισσότερο από αρνητικές κριτικές ταινιών, ή θετικές κριτικές εστιατορίων λένε 'gourmet' πολύ περισσότερο από 'disgusting'). + +> ⚖️ **Παράδειγμα**: Εάν εργαζόσασταν στο γραφείο ενός πολιτικού και υπήρχε κάποιος νέος νόμος υπό συζήτηση, οι πολίτες μπορεί να έγραφαν στο γραφείο με emails υπέρ ή κατά του συγκεκριμένου νέου νόμου. Ας πούμε ότι σας ανατέθηκε να διαβάσετε τα emails και να τα ταξινομήσετε σε 2 κατηγορίες, *υπέρ* και *κατά*. Εάν υπήρχαν πολλά emails, μπορεί να αισθανθείτε υπερβολική πίεση προσπαθώντας να τα διαβάσετε όλα. Δεν θα ήταν ωραίο αν ένα bot μπορούσε να τα διαβάσει όλα για εσάς, να τα κατανοήσει και να σας πει σε ποια κατηγορία ανήκει κάθε email; +> +> Ένας τρόπος για να το πετύχετε αυτό είναι να χρησιμοποιήσετε Μηχανική Μάθηση. Θα εκπαιδεύατε το μοντέλο με ένα μέρος των emails *κατά* και ένα μέρος των emails *υπέρ*. Το μοντέλο θα τείνει να συσχετίζει φράσεις και λέξεις με την πλευρά κατά και την πλευρά υπέρ, *αλλά δεν θα κατανοούσε κανένα από τα περιεχόμενα*, μόνο ότι ορισμένες λέξεις και μοτίβα ήταν πιο πιθανό να εμφανιστούν σε ένα email *κατά* ή *υπέρ*. Θα μπορούσατε να το δοκιμάσετε με μερικά emails που δεν είχατε χρησιμοποιήσει για να εκπαιδεύσετε το μοντέλο και να δείτε αν κατέληγε στο ίδιο συμπέρασμα με εσάς. Στη συνέχεια, μόλις ήσασταν ικανοποιημένοι με την ακρίβεια του μοντέλου, θα μπορούσατε να επεξεργαστείτε μελλοντικά emails χωρίς να χρειάζεται να διαβάσετε το καθένα. + +✅ Μοιάζει αυτή η διαδικασία με διαδικασίες που έχετε χρησιμοποιήσει σε προηγούμενα μαθήματα; + +## Άσκηση - συναισθηματικές προτάσεις + +Τα συναισθήματα μετρώνται με μια *πολικότητα* από -1 έως 1, που σημαίνει ότι -1 είναι το πιο αρνητικό συναίσθημα και 1 είναι το πιο θετικό. Τα συναισθήματα μετρώνται επίσης με μια βαθμολογία από 0 έως 1 για αντικειμενικότητα (0) και υποκειμενικότητα (1). + +Ρίξτε μια άλλη ματιά στο *Περηφάνια και Προκατάληψη* της Jane Austen. Το κείμενο είναι διαθέσιμο εδώ στο [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Το παρακάτω δείγμα δείχνει ένα σύντομο πρόγραμμα που αναλύει τα συναισθήματα των πρώτων και τελευταίων προτάσεων του βιβλίου και εμφανίζει την πολικότητα συναισθήματος και τη βαθμολογία υποκειμενικότητας/αντικειμενικότητας. + +Θα πρέπει να χρησιμοποιήσετε τη βιβλιοθήκη `TextBlob` (που περιγράφεται παραπάνω) για να προσδιορίσετε το `sentiment` (δεν χρειάζεται να γράψετε τον δικό σας υπολογιστή συναισθημάτων) στην ακόλουθη εργασία. + +```python +from textblob import TextBlob + +quote1 = """It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want of a wife.""" + +quote2 = """Darcy, as well as Elizabeth, really loved them; and they were both ever sensible of the warmest gratitude towards the persons who, by bringing her into Derbyshire, had been the means of uniting them.""" + +sentiment1 = TextBlob(quote1).sentiment +sentiment2 = TextBlob(quote2).sentiment + +print(quote1 + " has a sentiment of " + str(sentiment1)) +print(quote2 + " has a sentiment of " + str(sentiment2)) +``` + +Βλέπετε το ακόλουθο αποτέλεσμα: + +```output +It is a truth universally acknowledged, that a single man in possession of a good fortune, must be in want # of a wife. has a sentiment of Sentiment(polarity=0.20952380952380953, subjectivity=0.27142857142857146) + +Darcy, as well as Elizabeth, really loved them; and they were + both ever sensible of the warmest gratitude towards the persons + who, by bringing her into Derbyshire, had been the means of + uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) +``` + +## Πρόκληση - ελέγξτε την πολικότητα συναισθήματος + +Η εργασία σας είναι να προσδιορίσετε, χρησιμοποιώντας την πολικότητα συναισθήματος, εάν το *Περηφάνια και Προκατάληψη* έχει περισσότερες απόλυτα θετικές προτάσεις από απόλυτα αρνητικές. Για αυτή την εργασία, μπορείτε να υποθέσετε ότι μια βαθμολογία πολικότητας 1 ή -1 είναι απόλυτα θετική ή αρνητική αντίστοιχα. + +**Βήματα:** + +1. Κατεβάστε ένα [αντίγραφο του Περηφάνια και Προκατάληψη](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) από το Project Gutenberg ως αρχείο .txt. Αφαιρέστε τα μεταδεδομένα στην αρχή και το τέλος του αρχείου, αφήνοντας μόνο το αρχικό κείμενο +2. Ανοίξτε το αρχείο σε Python και εξαγάγετε το περιεχόμενο ως string +3. Δημιουργήστε ένα TextBlob χρησιμοποιώντας το string του βιβλίου +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 προ +Υπάρχουν πολλοί τρόποι για να εξάγουμε το συναίσθημα από κείμενο. Σκεφτείτε τις επιχειρηματικές εφαρμογές που θα μπορούσαν να χρησιμοποιήσουν αυτήν την τεχνική. Σκεφτείτε πώς μπορεί να πάει στραβά. Διαβάστε περισσότερα για εξελιγμένα συστήματα έτοιμα για επιχειρήσεις που αναλύουν το συναίσθημα, όπως το [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). Δοκιμάστε μερικές από τις προτάσεις του "Περηφάνια και Προκατάληψη" παραπάνω και δείτε αν μπορεί να ανιχνεύσει λεπτές αποχρώσεις. + +## Εργασία + +[Ποιητική άδεια](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/3-Translation-Sentiment/assignment.md b/translations/el/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..e9b59f2a6 --- /dev/null +++ b/translations/el/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Ποιητική άδεια + +## Οδηγίες + +Στο [αυτό το σημειωματάριο](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) μπορείτε να βρείτε πάνω από 500 ποιήματα της Emily Dickinson που έχουν ήδη αναλυθεί για συναισθήματα χρησιμοποιώντας την υπηρεσία ανάλυσης κειμένου της Azure. Χρησιμοποιώντας αυτό το σύνολο δεδομένων, αναλύστε το χρησιμοποιώντας τις τεχνικές που περιγράφονται στο μάθημα. Ταιριάζει το προτεινόμενο συναίσθημα ενός ποιήματος με την απόφαση της πιο εξελιγμένης υπηρεσίας της Azure; Γιατί ή γιατί όχι, κατά τη γνώμη σας; Σας εκπλήσσει κάτι; + +## Κριτήρια αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Παρουσιάζεται ένα σημειωματάριο με μια ολοκληρωμένη ανάλυση του δείγματος ενός συγγραφέα | Το σημειωματάριο είναι ελλιπές ή δεν πραγματοποιεί ανάλυση | Δεν παρουσιάζεται σημειωματάριο | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/el/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..a37527e34 --- /dev/null +++ b/translations/el/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/el/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..cde29bd20 --- /dev/null +++ b/translations/el/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/4-Hotel-Reviews-1/README.md b/translations/el/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..078d9218c --- /dev/null +++ b/translations/el/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,411 @@ + +# Ανάλυση συναισθημάτων με κριτικές ξενοδοχείων - επεξεργασία δεδομένων + +Σε αυτή την ενότητα θα χρησιμοποιήσετε τις τεχνικές που μάθατε στα προηγούμενα μαθήματα για να κάνετε μια διερευνητική ανάλυση δεδομένων σε ένα μεγάλο σύνολο δεδομένων. Αφού αποκτήσετε μια καλή κατανόηση της χρησιμότητας των διάφορων στηλών, θα μάθετε: + +- πώς να αφαιρέσετε τις περιττές στήλες +- πώς να υπολογίσετε νέα δεδομένα βασισμένα στις υπάρχουσες στήλες +- πώς να αποθηκεύσετε το προκύπτον σύνολο δεδομένων για χρήση στην τελική πρόκληση + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +### Εισαγωγή + +Μέχρι τώρα έχετε μάθει πώς τα δεδομένα κειμένου διαφέρουν από τα αριθμητικά δεδομένα. Εάν πρόκειται για κείμενο που έχει γραφτεί ή ειπωθεί από έναν άνθρωπο, μπορεί να αναλυθεί για να βρεθούν μοτίβα, συχνότητες, συναισθήματα και νόημα. Αυτό το μάθημα σας εισάγει σε ένα πραγματικό σύνολο δεδομένων με μια πραγματική πρόκληση: **[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/). Τα δεδομένα έχουν συλλεχθεί από δημόσιες πηγές του Booking.com. Δημιουργός του συνόλου δεδομένων είναι ο Jiashen Liu. + +### Προετοιμασία + +Θα χρειαστείτε: + +* Τη δυνατότητα να εκτελέσετε .ipynb notebooks χρησιμοποιώντας Python 3 +* pandas +* NLTK, [το οποίο πρέπει να εγκαταστήσετε τοπικά](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 αποσυμπιεσμένο. Κατεβάστε το στον root φάκελο `/data` που σχετίζεται με αυτά τα μαθήματα NLP. + +## Διερευνητική ανάλυση δεδομένων + +Αυτή η πρόκληση υποθέτει ότι δημιουργείτε ένα bot σύστασης ξενοδοχείων χρησιμοποιώντας ανάλυση συναισθημάτων και βαθμολογίες επισκεπτών. Το σύνολο δεδομένων που θα χρησιμοποιήσετε περιλαμβάνει κριτικές για 1493 διαφορετικά ξενοδοχεία σε 6 πόλεις. + +Χρησιμοποιώντας Python, ένα σύνολο δεδομένων κριτικών ξενοδοχείων και την ανάλυση συναισθημάτων του NLTK, μπορείτε να ανακαλύψετε: + +* Ποιες είναι οι πιο συχνά χρησιμοποιούμενες λέξεις και φράσεις στις κριτικές; +* Συμφωνούν οι επίσημες *ετικέτες* που περιγράφουν ένα ξενοδοχείο με τις βαθμολογίες των κριτικών (π.χ. υπάρχουν περισσότερες αρνητικές κριτικές για ένα συγκεκριμένο ξενοδοχείο από *Οικογένειες με μικρά παιδιά* παρά από *Μοναχικούς ταξιδιώτες*, ίσως υποδεικνύοντας ότι είναι καλύτερο για *Μοναχικούς ταξιδιώτες*); +* Συμφωνούν οι βαθμολογίες συναισθημάτων του NLTK με τη αριθμητική βαθμολογία του κριτικού; + +#### Σύνολο δεδομένων + +Ας εξερευνήσουμε το σύνολο δεδομένων που έχετε κατεβάσει και αποθηκεύσει τοπικά. Ανοίξτε το αρχείο σε έναν επεξεργαστή όπως το VS Code ή ακόμα και το Excel. + +Οι επικεφαλίδες στο σύνολο δεδομένων είναι οι εξής: + +*Hotel_Address, Additional_Number_of_Scoring, Review_Date, Average_Score, Hotel_Name, Reviewer_Nationality, Negative_Review, Review_Total_Negative_Word_Counts, Total_Number_of_Reviews, Positive_Review, Review_Total_Positive_Word_Counts, Total_Number_of_Reviews_Reviewer_Has_Given, Reviewer_Score, Tags, days_since_review, lat, lng* + +Εδώ είναι ομαδοποιημένες με τρόπο που μπορεί να είναι πιο εύκολο να εξεταστούν: +##### Στήλες ξενοδοχείου + +* `Hotel_Name`, `Hotel_Address`, `lat` (γεωγραφικό πλάτος), `lng` (γεωγραφικό μήκος) + * Χρησιμοποιώντας *lat* και *lng* μπορείτε να σχεδιάσετε έναν χάρτη με Python που δείχνει τις τοποθεσίες των ξενοδοχείων (ίσως με χρωματική κωδικοποίηση για αρνητικές και θετικές κριτικές) + * Το Hotel_Address δεν είναι προφανώς χρήσιμο για εμάς, και πιθανότατα θα το αντικαταστήσουμε με μια χώρα για ευκολότερη ταξινόμηση και αναζήτηση + +**Στήλες μετα-κριτικών ξενοδοχείου** + +* `Average_Score` + * Σύμφωνα με τον δημιουργό του συνόλου δεδομένων, αυτή η στήλη είναι η *Μέση βαθμολογία του ξενοδοχείου, υπολογισμένη βάσει του τελευταίου σχολίου του τελευταίου έτους*. Αυτό φαίνεται σαν ένας ασυνήθιστος τρόπος υπολογισμού της βαθμολογίας, αλλά είναι τα δεδομένα που συλλέχθηκαν, οπότε μπορούμε να τα δεχτούμε προς το παρόν. + + ✅ Βάσει των άλλων στηλών σε αυτά τα δεδομένα, μπορείτε να σκεφτείτε έναν άλλο τρόπο υπολογισμού της μέσης βαθμολογίας; + +* `Total_Number_of_Reviews` + * Ο συνολικός αριθμός κριτικών που έχει λάβει αυτό το ξενοδοχείο - δεν είναι σαφές (χωρίς να γράψουμε κάποιον κώδικα) αν αυτό αναφέρεται στις κριτικές του συνόλου δεδομένων. +* `Additional_Number_of_Scoring` + * Αυτό σημαίνει ότι δόθηκε βαθμολογία αλλά δεν γράφτηκε θετική ή αρνητική κριτική από τον κριτικό. + +**Στήλες κριτικών** + +- `Reviewer_Score` + - Αυτή είναι μια αριθμητική τιμή με το πολύ 1 δεκαδικό ψηφίο μεταξύ των ελάχιστων και μέγιστων τιμών 2.5 και 10 + - Δεν εξηγείται γιατί το 2.5 είναι η χαμηλότερη δυνατή βαθμολογία +- `Negative_Review` + - Εάν ένας κριτικός δεν έγραψε τίποτα, αυτό το πεδίο θα έχει "**No Negative**" + - Σημειώστε ότι ένας κριτικός μπορεί να γράψει μια θετική κριτική στη στήλη αρνητικής κριτικής (π.χ. "δεν υπάρχει τίποτα κακό σε αυτό το ξενοδοχείο") +- `Review_Total_Negative_Word_Counts` + - Υψηλότεροι αριθμοί αρνητικών λέξεων υποδεικνύουν χαμηλότερη βαθμολογία (χωρίς να ελέγχεται η συναισθηματικότητα) +- `Positive_Review` + - Εάν ένας κριτικός δεν έγραψε τίποτα, αυτό το πεδίο θα έχει "**No Positive**" + - Σημειώστε ότι ένας κριτικός μπορεί να γράψει μια αρνητική κριτική στη στήλη θετικής κριτικής (π.χ. "δεν υπάρχει τίποτα καλό σε αυτό το ξενοδοχείο") +- `Review_Total_Positive_Word_Counts` + - Υψηλότεροι αριθμοί θετικών λέξεων υποδεικνύουν υψηλότερη βαθμολογία (χωρίς να ελέγχεται η συναισθηματικότητα) +- `Review_Date` και `days_since_review` + - Μπορεί να εφαρμοστεί ένα μέτρο φρεσκάδας ή παλαιότητας σε μια κριτική (οι παλαιότερες κριτικές μπορεί να μην είναι τόσο ακριβείς όσο οι νεότερες λόγω αλλαγών στη διαχείριση του ξενοδοχείου, ανακαινίσεων ή προσθήκης πισίνας κ.λπ.) +- `Tags` + - Αυτές είναι σύντομες περιγραφές που μπορεί να επιλέξει ένας κριτικός για να περιγράψει τον τύπο επισκέπτη που ήταν (π.χ. μοναχικός ή οικογένεια), τον τύπο δωματίου που είχε, τη διάρκεια παραμονής και πώς υποβλήθηκε η κριτική. + - Δυστυχώς, η χρήση αυτών των ετικετών είναι προβληματική, δείτε την ενότητα παρακάτω που συζητά τη χρησιμότητά τους. + +**Στήλες κριτικών επισκεπτών** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Αυτό μπορεί να είναι ένας παράγοντας σε ένα μοντέλο σύστασης, για παράδειγμα, εάν μπορούσατε να προσδιορίσετε ότι οι πιο παραγωγικοί κριτικοί με εκατοντάδες κριτικές ήταν πιο πιθανό να είναι αρνητικοί παρά θετικοί. Ωστόσο, ο κριτικός οποιασδήποτε συγκεκριμένης κριτικής δεν προσδιορίζεται με έναν μοναδικό κωδικό και επομένως δεν μπορεί να συνδεθεί με ένα σύνολο κριτικών. Υπάρχουν 30 κριτικοί με 100 ή περισσότερες κριτικές, αλλά είναι δύσκολο να δούμε πώς αυτό μπορεί να βοηθήσει το μοντέλο σύστασης. +- `Reviewer_Nationality` + - Κάποιοι μπορεί να πιστεύουν ότι ορισμένες εθνικότητες είναι πιο πιθανό να δώσουν θετική ή αρνητική κριτική λόγω εθνικής κλίσης. Να είστε προσεκτικοί όταν ενσωματώνετε τέτοιες απόψεις στο μοντέλο σας. Αυτά είναι εθνικά (και μερικές φορές φυλετικά) στερεότυπα, και κάθε κριτικός ήταν ένα άτομο που έγραψε μια κριτική βάσει της εμπειρίας του. Μπορεί να έχει φιλτραριστεί μέσα από πολλούς φακούς, όπως οι προηγούμενες διαμονές του σε ξενοδοχεία, η απόσταση που ταξίδεψε και η προσωπική του ιδιοσυγκρασία. Το να πιστεύουμε ότι η εθνικότητά τους ήταν ο λόγος για τη βαθμολογία της κριτικής είναι δύσκολο να δικαιολογηθεί. + +##### Παραδείγματα + +| Average Score | Total Number Reviews | Reviewer Score | Negative
                                Review | Positive Review | Tags | +| -------------- | ---------------------- | ---------------- | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------- | ----------------------------------------------------------------------------------------- | +| 7.8 | 1945 | 2.5 | Αυτό δεν είναι αυτή τη στιγμή ξενοδοχείο αλλά εργοτάξιο. Τρομοκρατήθηκα από νωρίς το πρωί και όλη μέρα με απαράδεκτο θόρυβο από κατασκευές ενώ ξεκουραζόμουν μετά από ένα μακρύ ταξίδι και δούλευα στο δωμάτιο. Άνθρωποι δούλευαν όλη μέρα, π.χ. με κομπρεσέρ στα διπλανά δωμάτια. Ζήτησα αλλαγή δωματίου αλλά δεν υπήρχε ήσυχο δωμάτιο διαθέσιμο. Για να χειροτερέψουν τα πράγματα, χρεώθηκα υπερβολικά. Έκανα check-out το βράδυ καθώς έπρεπε να φύγω πολύ νωρίς για πτήση και έλαβα τον κατάλληλο λογαριασμό. Μια μέρα αργότερα το ξενοδοχείο έκανε άλλη χρέωση χωρίς τη συγκατάθεσή μου, υπερβαίνοντας την τιμή κράτησης. Είναι ένα τρομερό μέρος. Μην τιμωρείτε τον εαυτό σας κάνοντας κράτηση εδώ. | Τίποτα. Τρομερό μέρος. Μακριά. | Επαγγελματικό ταξίδι, Ζευγάρι, Standard Double Room, Διαμονή 2 νύχτες | + +Όπως μπορείτε να δείτε, αυτός ο επισκέπτης δεν είχε ευχάριστη διαμονή σε αυτό το ξενοδοχείο. Το ξενοδοχείο έχει μια καλή μέση βαθμολογία 7.8 και 1945 κριτικές, αλλά αυτός ο κριτικός του έδωσε 2.5 και έγραψε 115 λέξεις για το πόσο αρνητική ήταν η διαμονή του. Αν δεν έγραφε τίποτα στη στήλη Positive_Review, θα μπορούσατε να υποθέσετε ότι δεν υπήρχε τίποτα θετικό, αλλά έγραψε 7 λέξεις προειδοποίησης. Αν απλώς μετρούσαμε λέξεις αντί για το νόημα ή το συναίσθημα των λέξεων, θα μπορούσαμε να έχουμε μια παραμορφωμένη εικόνα της πρόθεσης του κριτικού. Παράξενα, η βαθμολογία του 2.5 είναι μπερδεμένη, γιατί αν η διαμονή στο ξενοδοχείο ήταν τόσο κακή, γιατί να δώσει οποιοδήποτε βαθμό; Εξετάζοντας το σύνολο δεδομένων προσεκτικά, θα δείτε ότι η χαμηλότερη δυνατή βαθμολογία είναι 2.5, όχι 0. Η υψηλότερη δυνατή βαθμολογία είναι 10. + +##### Ετικέτες + +Όπως αναφέρθηκε παραπάνω, με την πρώτη ματιά, η ιδέα να χρησιμοποιηθούν οι `Tags` για την κατηγοριοποίηση των δεδομένων φαίνεται λογική. Δυστυχώς, αυτές οι ετικέτες δεν είναι τυποποιημένες, πράγμα που σημαίνει ότι σε ένα δεδομένο ξενοδοχείο, οι επιλογές μπορεί να είναι *Single room*, *Twin room* και *Double room*, αλλά στο επόμενο ξενοδοχείο, είναι *Deluxe Single Room*, *Classic Queen Room* και *Executive King Room*. Αυτά μπορεί να είναι τα ίδια πράγματα, αλλά υπάρχουν τόσες πολλές παραλλαγές που η επιλογή γίνεται: + +1. Προσπάθεια αλλαγής όλων των όρων σε ένα ενιαίο πρότυπο, κάτι που είναι πολύ δύσκολο, επειδή δεν είναι σαφές ποια θα ήταν η διαδρομή μετατροπής σε κάθε περίπτωση (π.χ. *Classic single room* αντιστοιχεί σε *Single room* αλλά *Superior Queen Room with Courtyard Garden or City View* είναι πολύ πιο δύσκολο να αντιστοιχιστεί) + +1. Μπορούμε να πάρουμε μια προσέγγιση NLP και να μετρήσουμε τη συχνότητα ορισμένων όρων όπως *Solo*, *Business Traveller* ή *Family with young kids* καθώς εφαρμόζονται σε κάθε ξενοδοχείο, και να το ενσωματώσουμε στο μοντέλο σύστασης. + +Οι ετικέτες είναι συνήθως (αλλά όχι πάντα) ένα μόνο πεδίο που περιέχει μια λίστα από 5 έως 6 τιμές χωρισμένες με κόμμα, που αντιστοιχούν σε *Τύπο ταξιδιού*, *Τύπο επισκεπτών*, *Τύπο δωματίου*, *Αριθμό νυχτών* και *Τύπο συσκευής από την οποία υποβλήθηκε η κριτική*. Ωστόσο, επειδή κάποιοι κριτικοί δεν συμπληρώνουν κάθε πεδίο (μπορεί να αφήσουν ένα κενό), οι τιμές δεν είναι πάντα με την ίδια σειρά. + +Ως παράδειγμα, πάρτε τον *Τύπο ομάδας*. Υπάρχουν 1025 μοναδικές δυνατότητες σε αυτό το πεδίο στη στήλη `Tags`, και δυστυχώς μόνο μερικές από αυτές αναφέρονται σε ομάδα (κάποιες είναι ο τύπος δωματίου κ.λπ.). Εάν φιλτράρετε μόνο αυτές που αναφέρουν οικογένεια, τα αποτελέσματα περιέχουν πολλές τιμές τύπου *Family room*. Εάν συμπεριλάβετε τον όρο *with*, δηλαδή μετρήσετε τις τιμές *Family with*, τα αποτελέσματα είναι καλύτερα, με πάνω από 80,000 από τα 515,000 αποτελέσματα να περιέχουν τη φράση "Family with young children" ή "Family with older children". + +Αυτό σημαίνει ότι η στήλη ετικετών δεν είναι εντελώς άχρηστη για εμάς, αλλά θα χρειαστεί κάποια δουλειά για να γίνει χρήσιμη. + +##### Μέση βαθμολογία ξενοδοχείου + +Υπάρχουν ορισμένες παραξενιές ή ασυμφωνίες με το σύνολο δεδομένων που δεν μπορώ να καταλάβω, αλλά παρουσιάζονται εδώ ώστε να είστε ενήμεροι όταν δημιουργείτε τα μοντέλα σας. Εάν το καταλάβετε, ενημερώστε μας στην ενότητα συζήτησης! + +Το σύνολο δεδομένων έχει τις εξής στήλες που σχετίζονται με τη μέση βαθμολογία και τον αριθμό κριτικών: + +1. Hotel_Name +2. Additional_Number_of_Scoring +3. Average_Score +4. Total_Number_of_Reviews +5. Reviewer_Score + +Το ξενοδοχείο με τις περισσότερες κριτικές σε αυτό το σύνολο δεδομένων είναι το *Britannia International Hotel Canary Wharf* με 4789 κριτικές από τις 515,000. Αλλά αν κοιτάξουμε την τιμή `Total_Number_of_Reviews` για αυτό το ξενοδοχείο, είναι 9086. Μπορεί να υποθέσετε ότι υπάρχουν πολλές περισσότερες βαθμολογίες χωρίς κριτικές, οπότε ίσως πρέπει να προσθέσουμε την τιμή της στήλης `Additional_Number +> 🚨 Μια σημείωση προσοχής +> +> Όταν εργάζεστε με αυτό το σύνολο δεδομένων, θα γράψετε κώδικα που υπολογίζει κάτι από το κείμενο χωρίς να χρειάζεται να το διαβάσετε ή να το αναλύσετε οι ίδιοι. Αυτή είναι η ουσία της Επεξεργασίας Φυσικής Γλώσσας (NLP), η ερμηνεία νοήματος ή συναισθήματος χωρίς να χρειάζεται να το κάνει ένας άνθρωπος. Ωστόσο, είναι πιθανό να διαβάσετε κάποιες από τις αρνητικές κριτικές. Θα σας προέτρεπα να μην το κάνετε, γιατί δεν είναι απαραίτητο. Κάποιες από αυτές είναι ανόητες ή άσχετες αρνητικές κριτικές για ξενοδοχεία, όπως "Ο καιρός δεν ήταν καλός", κάτι που είναι πέρα από τον έλεγχο του ξενοδοχείου ή, πράγματι, οποιουδήποτε. Αλλά υπάρχει και μια σκοτεινή πλευρά σε κάποιες κριτικές. Μερικές φορές οι αρνητικές κριτικές είναι ρατσιστικές, σεξιστικές ή ηλικιακές. Αυτό είναι δυσάρεστο αλλά αναμενόμενο σε ένα σύνολο δεδομένων που έχει συλλεχθεί από μια δημόσια ιστοσελίδα. Κάποιοι κριτικοί αφήνουν σχόλια που μπορεί να βρείτε αποκρουστικά, άβολα ή ενοχλητικά. Καλύτερα να αφήσετε τον κώδικα να μετρήσει το συναίσθημα παρά να τα διαβάσετε οι ίδιοι και να αναστατωθείτε. Με αυτά τα δεδομένα, είναι μια μειοψηφία που γράφει τέτοια πράγματα, αλλά υπάρχουν παρ' όλα αυτά. +## Άσκηση - Εξερεύνηση δεδομένων +### Φόρτωση δεδομένων + +Αρκετά με την οπτική εξέταση των δεδομένων, τώρα θα γράψετε κώδικα για να πάρετε απαντήσεις! Αυτή η ενότητα χρησιμοποιεί τη βιβλιοθήκη pandas. Η πρώτη σας εργασία είναι να βεβαιωθείτε ότι μπορείτε να φορτώσετε και να διαβάσετε τα δεδομένα CSV. Η βιβλιοθήκη pandas διαθέτει έναν γρήγορο φορτωτή CSV, και το αποτέλεσμα τοποθετείται σε ένα dataframe, όπως στις προηγούμενες ενότητες. Το CSV που φορτώνουμε έχει πάνω από μισό εκατομμύριο γραμμές, αλλά μόνο 17 στήλες. Η pandas σας προσφέρει πολλές ισχυρές δυνατότητες για να αλληλεπιδράσετε με ένα dataframe, συμπεριλαμβανομένης της δυνατότητας να εκτελέσετε λειτουργίες σε κάθε γραμμή. + +Από εδώ και στο εξής σε αυτό το μάθημα, θα υπάρχουν αποσπάσματα κώδικα, εξηγήσεις του κώδικα και συζητήσεις για το τι σημαίνουν τα αποτελέσματα. Χρησιμοποιήστε το _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 και την ανάλυση συναισθημάτων, θα πρέπει να ακολουθήσετε τον παρακάτω κώδικα για να βεβαιωθείτε ότι οι τιμές που δίνονται στο dataset ταιριάζουν με τις τιμές που υπολογίζετε με την pandas. + +## Λειτουργίες στο dataframe + +Η πρώτη εργασία σε αυτό το μάθημα είναι να ελέγξετε αν οι παρακάτω υποθέσεις είναι σωστές γράφοντας κώδικα που εξετάζει το dataframe (χωρίς να το αλλάξετε). + +> Όπως πολλές εργασίες προγραμματισμού, υπάρχουν διάφοροι τρόποι να το ολοκληρώσετε, αλλά μια καλή συμβουλή είναι να το κάνετε με τον πιο απλό και εύκολο τρόπο, ειδικά αν θα είναι πιο εύκολο να κατανοηθεί όταν επιστρέψετε σε αυτόν τον κώδικα στο μέλλον. Με τα dataframes, υπάρχει ένα ολοκληρωμένο API που συχνά θα έχει έναν τρόπο να κάνετε αυτό που θέλετε αποτελεσματικά. + +Αντιμετωπίστε τις παρακάτω ερωτήσεις ως εργασίες προγραμματισμού και προσπαθήστε να τις απαντήσετε χωρίς να κοιτάξετε τη λύση. + +1. Εκτυπώστε το *σχήμα* του dataframe που μόλις φορτώσατε (το σχήμα είναι ο αριθμός των γραμμών και στηλών). +2. Υπολογίστε τη συχνότητα εμφάνισης για τις εθνικότητες των κριτών: + 1. Πόσες διαφορετικές τιμές υπάρχουν για τη στήλη `Reviewer_Nationality` και ποιες είναι αυτές; + 2. Ποια εθνικότητα κριτών είναι η πιο συχνή στο dataset (εκτυπώστε τη χώρα και τον αριθμό των κριτικών); + 3. Ποιες είναι οι επόμενες 10 πιο συχνές εθνικότητες και η συχνότητα εμφάνισής τους; +3. Ποιο ήταν το πιο συχνά αξιολογημένο ξενοδοχείο για κάθε μία από τις 10 πιο συχνές εθνικότητες κριτών; +4. Πόσες κριτικές υπάρχουν ανά ξενοδοχείο (συχνότητα εμφάνισης ξενοδοχείου) στο dataset; +5. Παρόλο που υπάρχει μια στήλη `Average_Score` για κάθε ξενοδοχείο στο dataset, μπορείτε επίσης να υπολογίσετε έναν μέσο όρο (λαμβάνοντας τον μέσο όρο όλων των βαθμολογιών των κριτών στο dataset για κάθε ξενοδοχείο). Προσθέστε μια νέα στήλη στο dataframe σας με την επικεφαλίδα `Calc_Average_Score` που περιέχει αυτόν τον υπολογισμένο μέσο όρο. +6. Υπάρχουν ξενοδοχεία που έχουν την ίδια (στρογγυλοποιημένη στο 1 δεκαδικό ψηφίο) `Average_Score` και `Calc_Average_Score`; + 1. Δοκιμάστε να γράψετε μια συνάρτηση Python που παίρνει μια σειρά (γραμμή) ως όρισμα και συγκρίνει τις τιμές, εκτυπώνοντας ένα μήνυμα όταν οι τιμές δεν είναι ίσες. Στη συνέχεια, χρησιμοποιήστε τη μέθοδο `.apply()` για να επεξεργαστείτε κάθε γραμμή με τη συνάρτηση. +7. Υπολογίστε και εκτυπώστε πόσες γραμμές έχουν τιμές "No Negative" στη στήλη `Negative_Review`. +8. Υπολογίστε και εκτυπώστε πόσες γραμμές έχουν τιμές "No Positive" στη στήλη `Positive_Review`. +9. Υπολογίστε και εκτυπώστε πόσες γραμμές έχουν τιμές "No Positive" στη στήλη `Positive_Review` **και** τιμές "No Negative" στη στήλη `Negative_Review`. + +### Απαντήσεις κώδικα + +1. Εκτυπώστε το *σχήμα* του dataframe που μόλις φορτώσατε (το σχήμα είναι ο αριθμός των γραμμών και στηλών). + + ```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. Ποια εθνικότητα κριτών είναι η πιο συχνή στο dataset (εκτυπώστε τη χώρα και τον αριθμό των κριτικών); + + ```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. Πόσες κριτικές υπάρχουν ανά ξενοδοχείο (συχνότητα εμφάνισης ξενοδοχείου) στο dataset; + + ```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 | + + Ίσως παρατηρήσετε ότι τα *αποτελέσματα που μετρήθηκαν στο dataset* δεν ταιριάζουν με την τιμή στο `Total_Number_of_Reviews`. Δεν είναι σαφές αν αυτή η τιμή στο dataset αντιπροσώπευε τον συνολικό αριθμό κριτικών που είχε το ξενοδοχείο, αλλά δεν είχαν όλες συλλεχθεί, ή κάποια άλλη μέτρηση. Το `Total_Number_of_Reviews` δεν χρησιμοποιείται στο μοντέλο λόγω αυτής της ασάφειας. + +5. Παρόλο που υπάρχει μια στήλη `Average_Score` για κάθε ξενοδοχείο στο dataset, μπορείτε επίσης να υπολογίσετε έναν μέσο όρο (λαμβάνοντας τον μέσο όρο όλων των βαθμολογιών των κριτών στο dataset για κάθε ξενοδοχείο). Προσθέστε μια νέα στήλη στο dataframe σας με την επικεφαλίδα `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` και γιατί μερικές φορές διαφέρει από τον υπολογισμένο μέσο όρο. Επειδή δεν μπορούμε να γνωρίζουμε γιατί μερικές από τις τιμές ταιριάζουν, αλλά άλλες έχουν διαφορά, είναι πιο ασφαλές σε αυτή την περίπτωση να χρησιμοποιήσουμε τις βαθμολογίες των κριτικών που έχουμε για να υπολογίσουμε τον μέσο όρο μόνοι μας. Παρόλα αυτά, οι διαφορές είναι συνήθως πολύ μικρές, εδώ είναι τα ξενοδοχεία με τη μεγαλύτερη απόκλιση από τον μέσο όρο του dataset και τον υπολογισμένο μέσο όρο: + + | 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" στη στήλη `Positive_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 + ``` + +## Ένας άλλος τρόπος + +Ένας άλλος τρόπος να μετρήσετε αντικείμενα χωρίς Lambdas, και να χρησιμοποιήσετε το 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 + ``` + + Ίσως παρατηρήσατε ότι υπάρχουν 127 γραμμές που έχουν και "No Negative" και "No Positive" τιμές για τις στήλες `Negative_Review` και `Positive_Review` αντίστοιχα. Αυτό σημαίνει ότι ο κριτής έδωσε στο ξενοδοχείο μια αριθμητική βαθμολογία, αλλά αρνήθηκε να γράψει είτε θετική είτε αρνητική κριτική. Ευτυχώς, αυτό είναι ένα μικρό ποσοστό γραμμών (127 από 515738, ή 0.02%), οπότε πιθανώς δεν θα επηρεάσει το μοντέλο ή τα αποτελέσματα προς κάποια συγκεκριμένη κατεύθυνση, αλλά ίσως να μην περιμένατε ένα dataset κριτικών να έχει γραμμές χωρίς κριτικές, οπότε αξίζει να εξερευνήσετε τα δεδομένα για να ανακαλύψετε γραμμές σαν αυτές. + +Τώρα που εξερευνήσατε το dataset, στο επόμενο μάθημα θα φιλτράρετε τα δεδομένα και θα προσθέσετε ανάλυση συναισθημάτων. + +--- +## 🚀Πρόκληση + +Αυτό το μάθημα δείχνει, όπως είδαμε σε προηγούμενα μαθήματα, πόσο κρίσιμα σημαντικό είναι να κατανοήσετε τα δεδομένα σας και τις ιδιαιτερότητές τους πριν εκτελέσετε λειτουργίες πάνω τους. Τα δεδομένα που βασίζονται σε κείμενο, ειδικότερα, απαιτούν προσεκτική εξέταση. Ψάξτε σε διάφορα datasets με έντονο κείμενο και δείτε αν μπορείτε να ανακαλύψετε περιοχές που θα μπορούσαν να εισάγουν προκατάληψη ή παραμορφωμένο συναίσθημα σε ένα μοντέλο. + +## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Πάρτε [αυτό το Learning Path για NLP](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) για να ανακαλύψετε εργαλεία που μπορείτε να δοκιμάσετε όταν δημιουργείτε μοντέλα με έντονο λόγο και κείμενο. + +## Εργασία + +[NLTK](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/el/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..dfc79c539 --- /dev/null +++ b/translations/el/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Οδηγίες + +Το NLTK είναι μια γνωστή βιβλιοθήκη για χρήση στη υπολογιστική γλωσσολογία και την επεξεργασία φυσικής γλώσσας (NLP). Εκμεταλλευτείτε αυτήν την ευκαιρία για να διαβάσετε το '[NLTK book](https://www.nltk.org/book/)' και να δοκιμάσετε τις ασκήσεις του. Σε αυτήν την εργασία χωρίς βαθμολόγηση, θα έχετε την ευκαιρία να γνωρίσετε αυτήν τη βιβλιοθήκη πιο βαθιά. + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/el/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..ad03f7ffc --- /dev/null +++ b/translations/el/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/el/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 000000000..e06c6a208 --- /dev/null +++ b/translations/el/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/5-Hotel-Reviews-2/README.md b/translations/el/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 000000000..3f0ef4e8c --- /dev/null +++ b/translations/el/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,359 @@ + +# Ανάλυση συναισθημάτων με κριτικές ξενοδοχείων + +Τώρα που έχετε εξερευνήσει το σύνολο δεδομένων λεπτομερώς, είναι ώρα να φιλτράρετε τις στήλες και να χρησιμοποιήσετε τεχνικές NLP στο σύνολο δεδομένων για να αποκτήσετε νέες πληροφορίες σχετικά με τα ξενοδοχεία. + +## [Προ-διάλεξη κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +### Ενέργειες Φιλτραρίσματος & Ανάλυσης Συναισθημάτων + +Όπως πιθανώς έχετε παρατηρήσει, το σύνολο δεδομένων έχει κάποια προβλήματα. Ορισμένες στήλες είναι γεμάτες με άχρηστες πληροφορίες, ενώ άλλες φαίνονται λανθασμένες. Ακόμα κι αν είναι σωστές, δεν είναι σαφές πώς υπολογίστηκαν, και οι απαντήσεις δεν μπορούν να επαληθευτούν ανεξάρτητα μέσω των δικών σας υπολογισμών. + +## Άσκηση: Λίγη περισσότερη επεξεργασία δεδομένων + +Καθαρίστε τα δεδομένα λίγο περισσότερο. Προσθέστε στήλες που θα είναι χρήσιμες αργότερα, αλλάξτε τις τιμές σε άλλες στήλες και διαγράψτε ορισμένες στήλες εντελώς. + +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"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Άμστερνταμ, Ολλανδία | 105 | + | Βαρκελώνη, Ισπανία | 211 | + | Λονδίνο, Ηνωμένο Βασίλειο | 400 | + | Μιλάνο, Ιταλία | 162 | + | Παρίσι, Γαλλία | 458 | + | Βιέννη, Αυστρία | 158 | + +2. Επεξεργασία στηλών Μετα-κριτικής Ξενοδοχείου + + 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` είναι προβληματική καθώς είναι μια λίστα (σε μορφή κειμένου) αποθηκευμένη στη στήλη. Δυστυχώς, η σειρά και ο αριθμός των υποτμημάτων σε αυτή τη στήλη δεν είναι πάντα τα ίδια. Είναι δύσκολο για έναν άνθρωπο να εντοπίσει τις σωστές φράσεις που πρέπει να ενδιαφερθεί, επειδή υπάρχουν 515.000 γραμμές και 1427 ξενοδοχεία, και κάθε ένα έχει ελαφρώς διαφορετικές επιλογές που θα μπορούσε να επιλέξει ένας κριτικός. Εδώ είναι που το NLP διαπρέπει. Μπορείτε να σαρώσετε το κείμενο και να βρείτε τις πιο κοινές φράσεις και να τις μετρήσετε. + +Δυστυχώς, δεν μας ενδιαφέρουν οι μεμονωμένες λέξεις, αλλά οι φράσεις πολλών λέξεων (π.χ. *Επαγγελματικό ταξίδι*). Η εκτέλεση ενός αλγορίθμου κατανομής συχνότητας φράσεων πολλών λέξεων σε τόσα δεδομένα (6762646 λέξεις) θα μπορούσε να πάρει εξαιρετικά πολύ χρόνο, αλλά χωρίς να κοιτάξετε τα δεδομένα, φαίνεται ότι είναι απαραίτητη δαπάνη. Εδώ είναι που η εξερευνητική ανάλυση δεδομένων είναι χρήσιμη, επειδή έχετε δει ένα δείγμα των ετικετών όπως `[' Επαγγελματικό ταξίδι ', ' Μοναχικός ταξιδιώτης ', ' Μονόκλινο δωμάτιο ', ' Έμεινε 5 νύχτες ', ' Υποβλήθηκε από κινητή συσκευή ']`, μπορείτε να αρχίσετε να ρωτάτε αν είναι δυνατόν να μειώσετε σημαντικά την επεξεργασία που πρέπει να κάνετε. Ευτυχώς, είναι - αλλά πρώτα πρέπει να ακολουθήσετε μερικά βήματα για να διαπιστώσετε τις ετικέτες ενδιαφέροντος. + +### Φιλτράρισμα ετικετών + +Θυμηθείτε ότι ο στόχος του συνόλου δεδομένων είναι να προσθέσετε συναισθήματα και στήλες που θα σας βοηθήσουν να επιλέξετε το καλύτερο ξενοδοχείο (για εσάς ή ίσως για έναν πελάτη που σας αναθέτει να δημιουργήσετε ένα bot σύστασης ξενοδοχείου). Πρέπει να αναρωτηθείτε αν οι ετικέτες είναι χρήσιμες ή όχι στο τελικό σύνολο δεδομένων. Εδώ είναι μια ερμηνεία (αν χρειαζόσασταν το σύνολο δεδομένων για άλλους λόγους, διαφορετικές ετικέτες μπορεί να παραμείνουν/αφαιρεθούν από την επιλογή): + +1. Ο τύπος ταξιδιού είναι σχετικός και πρέπει να παραμείνει +2. Ο τύπος της ομάδας επισκεπτών είναι σημαντικός και πρέπει να παραμείνει +3. Ο τύπος δωματίου, σουίτας ή στούντιο που έμεινε ο επισκέπτης είναι άσχετος (όλα τα ξενοδοχεία έχουν βασικά τα ίδια δωμάτια) +4. Η συσκευή από την οποία υποβλήθηκε η κριτική είναι άσχετη +5. Ο αριθμός των νυχτών που έμεινε ο κριτικός *θα μπορούσε* να είναι σχετικός αν αποδίδατε μεγαλύτερες διαμονές με το να τους αρέσει περισσότερο το ξενοδοχείο, αλλά είναι αμφίβολο και πιθανώς άσχετο + +Συνοπτικά, **κρατήστε 2 είδη ετικετών και αφαιρέστε τις υπόλοιπες**. + +Πρώτα, δεν θέλετε να μετρήσετε τις ετικέτες μέχρι να είναι σε καλύτερη μορφή, οπότε αυτό σημαίνει να αφαιρέσετε τα τετράγωνα αγκύλες και τα εισαγωγικά. Μπορείτε να το κάνετε αυτό με διάφορους τρόπους, αλλά θέλετε τον πιο γρήγορο καθώς θα μπορούσε να πάρει πολύ χρόνο να επεξεργαστείτε πολλά δεδομένα. Ευτυχώς, το 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) +``` + +Κάθε ετικέτα γίνεται κάτι σαν: `Επαγγελματικό ταξίδι, Μοναχικός ταξιδιώτης, Μονόκλινο δωμάτιο, Έμεινε 5 νύχτες, Υποβλήθηκε από κινητή συσκευή`. + +Στη συνέχεια βρίσκουμε ένα πρόβλημα. Ορισμένες κριτικές ή γραμμές έχουν 5 στήλες, άλλες 3, άλλες 6. Αυτό είναι αποτέλεσμα του πώς δημιουργήθηκε το σύνολο δεδομένων και δύσκολο να διορθωθεί. Θέλετε να πάρετε μια καταμέτρηση συχνότητας κάθε φράσης, αλλά είναι σε διαφορετική σειρά σε κάθε κριτική, οπότε η καταμέτρηση μπορεί να είναι λανθασμένη και ένα ξενοδοχείο μπορεί να μην πάρει μια ετικέτα που του άξιζε. + +Αντί να το διορθώσετε, θα χρησιμοποιήσετε τη διαφορετική σειρά προς όφελός μας, επειδή κάθε ετικέτα είναι πολλών λέξεων αλλά επίσης χωρίζεται με κόμμα! Ο απλούστερος τρόπος να το κάνετε αυτό είναι να δημιουργήσετε 6 προσωρινές στήλες με κάθε ετικέτα να εισάγεται στη στήλη που αντιστοιχεί στη σειρά της ετικέτας. Στη συνέχεια μπορείτε να συγχωνεύσετε τις 6 στήλες σε μία μεγάλη στήλη και να εκτελέσετε τη μέθοδο `value_counts()` στη resulting στήλη. Εκτυπώνοντας αυτό, θα δείτε ότι υπήρχαν 2428 μοναδικές ετικέτες. Εδώ είναι ένα μικρό δείγμα: + +| Ετικέτα | Καταμέτρηση | +| ------------------------------ | ----------- | +| Ταξίδι αναψυχής | 417778 | +| Υποβλήθηκε από κινητή συσκευή | 307640 | +| Ζευγάρι | 252294 | +| Έμεινε 1 νύχτα | 193645 | +| Έμεινε 2 νύχτες | 133937 | +| Μοναχικός ταξιδιώτης | 108545 | +| Έμεινε 3 νύχτες | 95821 | +| Επαγγελματικό ταξίδι | 82939 | +| Ομάδα | 65392 | +| Οικογένεια με μικρά παιδιά | 61015 | +| Έμεινε 4 νύχτες | 47817 | +| Δίκλινο δωμάτιο | 35207 | +| Standard Δίκλινο δωμάτιο | 32248 | +| Superior Δίκλινο δωμάτιο | 31393 | +| Οικογένεια με μεγαλύτερα παιδιά | 26349 | +| Deluxe Δίκλινο δωμάτιο | 24823 | +| Δίκλινο ή Twin δωμάτιο | 22393 | +| Έμεινε 5 νύχτες | 20845 | +| Standard Δίκλινο ή Twin δωμάτιο | 17483 | +| Classic Δίκλινο δωμάτιο | 16989 | +| Superior Δίκλινο ή Twin δωμάτιο | 13570 | +| 2 δωμάτια | 12393 | + +Ορισμένες από τις κοινές ετικέτες όπως `Υποβλήθηκε από κινητή συσκευή` δεν μας είναι χρήσιμες, οπότε ίσως είναι έξυπνο να τις αφαιρέσουμε πριν μετρήσουμε την εμφάνιση φράσεων, αλλά είναι τόσο γρήγορη λειτουργία που μπορείτε να τις αφήσετε και να τις αγνοήσετε. + +### Αφαίρεση ετικετών διάρκειας διαμονής + +Η αφαίρεση αυτών των ετικετών είναι το πρώτο βήμα, μειώνει τον συνολικό αριθμό ετικετών που πρέπει να ληφθούν υπόψη ελαφρώς. Σημειώστε ότι δεν τις αφαιρείτε από το σύνολο δεδομένων, απλώς επιλέγετε να τις αφαιρέσετε από την εξέταση ως τιμές για καταμέτρηση/διατήρηση στο σύνολο δεδομένων κριτικών. + +| Διάρκεια διαμονής | Καταμέτρηση | +| ----------------- | ----------- | +| Έμεινε 1 νύχτα | 193645 | +| Έμεινε 2 νύχτες | 133937 | +| Έμεινε 3 νύχτες | 95821 | +| Έμεινε 4 νύχτες | 47817 | +| Έμεινε 5 νύχτες | 20845 | +| Έμεινε 6 νύχτες | 9776 | +| Έμεινε 7 νύχτες | 7399 | +| Έμεινε 8 νύχτες | 2502 | +| Έμεινε 9 νύχτες | 1293 | +| ... | ... | + +Υπάρχει μια τεράστια ποικιλία δωματίων, σουιτών, στούντιο, διαμερισμάτων και ούτω καθεξής. Όλα σημαίνουν περίπου το ίδιο πράγμα και δεν είναι σχετικά για εσάς, οπότε αφαιρέστε τα από την εξέταση. + +| Τύπος δωματίου | Καταμέτρηση | +| ---------------------------- | ----------- | +| Δίκλινο δωμάτιο | 35207 | +| Standard Δίκλινο δωμάτιο | 32248 | +| Superior Δίκλινο δωμάτιο | 31393 | +| Deluxe Δίκλινο δωμάτιο | 24823 | +| Δίκλινο ή Twin δωμάτιο | 22393 | +| Standard Δίκλινο ή Twin δωμάτιο | 17483 | +| Classic Δίκλινο δωμάτιο | 16989 | +| Superior Δίκλινο ή Twin δωμάτιο | 13570 | + +Τέλος, και αυτό είναι ευχάριστο (επειδή δεν χρειάστηκε πολλή επεξεργασία), θα μείνετε με τις εξής *χρήσιμες* ετικέτες: + +| Ετικέτα | Καταμέτρηση | +| -------------------------------------------- | ----------- | +| Ταξίδι αναψυχής | 417778 | +| Ζευγάρι | 252294 | +| Μοναχικός ταξιδιώτης | 108545 | +| Επαγγελματικό ταξίδι | 82939 | +| Ομάδα (συνδυασμένο με Ταξιδιώτες με φίλους) | 67535 | +| Οικογένεια με μικρά παιδιά | 61015 | +| Οικογένεια με μεγαλύτερα παιδιά | 26349 | +| Με κατοικίδιο | 1405 | + +Θα μπορούσατε να υποστηρίξετε ότι το `Ταξιδιώτες με φίλους` είναι το ίδιο με το `Ομάδα` λίγο πολύ, και θα ήταν δίκαιο να τα συνδυάσετε όπως παραπάνω. Ο κώδικας για την αναγνώριση των σωστών ετικετών βρίσκεται στο [notebook Ετικετών](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Το τελικό βήμα είναι να δημιουργήσετε νέες στήλες για κάθε μία από αυτές τις ετικέτες. Στη συνέχεια, για κάθε γραμμή κριτικής, αν η στήλη `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) +``` + +### Αφαίρεση λέξεων-σταματημάτων + +Αν εκτελούσατε ανάλυση συναισθημάτων στις στήλες αρνητικής και θετικής κριτικής, θα μπορούσε να πάρει πολύ χρόνο. Δοκιμασμένο σε ένα ισχυρό laptop με γρήγορη CPU +Το NLTK παρέχει διάφορους αναλυτές συναισθημάτων για να μάθετε, και μπορείτε να τους αντικαταστήσετε και να δείτε αν η ανάλυση συναισθημάτων είναι πιο ή λιγότερο ακριβής. Εδώ χρησιμοποιείται η ανάλυση συναισθημάτων VADER. + +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Ένα Οικονομικό Μοντέλο Βασισμένο σε Κανόνες για Ανάλυση Συναισθημάτων Κειμένου Κοινωνικών Μέσων. Όγδοο Διεθνές Συνέδριο για Weblogs και Κοινωνικά Μέσα (ICWSM-14). Ann Arbor, MI, Ιούνιος 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 στην πρόκληση NLP παρακάτω + +### Συμπέρασμα + +Όταν ξεκινήσατε, είχατε ένα σύνολο δεδομένων με στήλες και δεδομένα, αλλά δεν μπορούσαν όλα να επαληθευτούν ή να χρησιμοποιηθούν. Εξερευνήσατε τα δεδομένα, φιλτράρατε ό,τι δεν χρειαζόταν, μετατρέψατε ετικέτες σε κάτι χρήσιμο, υπολογίσατε τους δικούς σας μέσους όρους, προσθέσατε κάποιες στήλες συναισθημάτων και, ελπίζουμε, μάθατε ενδιαφέροντα πράγματα για την επεξεργασία φυσικού κειμένου. + +## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Πρόκληση + +Τώρα που έχετε αναλύσει το σύνολο δεδομένων σας για συναισθήματα, δείτε αν μπορείτε να χρησιμοποιήσετε στρατηγικές που έχετε μάθει σε αυτό το πρόγραμμα σπουδών (ίσως clustering;) για να προσδιορίσετε μοτίβα γύρω από τα συναισθήματα. + +## Ανασκόπηση & Αυτομελέτη + +Πάρτε [αυτό το Learn module](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) για να μάθετε περισσότερα και να χρησιμοποιήσετε διαφορετικά εργαλεία για να εξερευνήσετε τα συναισθήματα στο κείμενο. + +## Εργασία + +[Δοκιμάστε ένα διαφορετικό σύνολο δεδομένων](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/el/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 000000000..93b31f0b5 --- /dev/null +++ b/translations/el/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Δοκιμάστε ένα διαφορετικό σύνολο δεδομένων + +## Οδηγίες + +Τώρα που έχετε μάθει να χρησιμοποιείτε το NLTK για να αποδίδετε συναισθήματα σε κείμενο, δοκιμάστε ένα διαφορετικό σύνολο δεδομένων. Πιθανότατα θα χρειαστεί να κάνετε κάποια επεξεργασία δεδομένων γύρω από αυτό, οπότε δημιουργήστε ένα notebook και καταγράψτε τη διαδικασία σκέψης σας. Τι ανακαλύπτετε; + +## Κριτήρια Αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ---------------------------------------------------------------------------------------------------------------- | ---------------------------------------- | ---------------------- | +| | Παρουσιάζεται ένα πλήρες notebook και σύνολο δεδομένων με καλά τεκμηριωμένα κελιά που εξηγούν πώς αποδίδεται το συναίσθημα | Το notebook δεν έχει καλές εξηγήσεις | Το notebook έχει ελλείψεις | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/el/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 000000000..1072b41a1 --- /dev/null +++ b/translations/el/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/el/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 000000000..230bb3ef6 --- /dev/null +++ b/translations/el/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/README.md b/translations/el/6-NLP/README.md new file mode 100644 index 000000000..22674bbe0 --- /dev/null +++ b/translations/el/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Ξεκινώντας με την επεξεργασία φυσικής γλώσσας + +Η επεξεργασία φυσικής γλώσσας (NLP) είναι η ικανότητα ενός προγράμματος υπολογιστή να κατανοεί την ανθρώπινη γλώσσα όπως αυτή μιλιέται και γράφεται — γνωστή ως φυσική γλώσσα. Αποτελεί μέρος της τεχνητής νοημοσύνης (AI). Η NLP υπάρχει εδώ και περισσότερα από 50 χρόνια και έχει τις ρίζες της στον τομέα της γλωσσολογίας. Ολόκληρος ο τομέας επικεντρώνεται στο να βοηθήσει τις μηχανές να κατανοήσουν και να επεξεργαστούν την ανθρώπινη γλώσσα. Αυτό μπορεί στη συνέχεια να χρησιμοποιηθεί για την εκτέλεση εργασιών όπως η διόρθωση ορθογραφίας ή η μηχανική μετάφραση. Έχει μια ποικιλία εφαρμογών στον πραγματικό κόσμο σε διάφορους τομείς, όπως η ιατρική έρευνα, οι μηχανές αναζήτησης και η επιχειρηματική ευφυΐα. + +## Θέμα περιοχής: Ευρωπαϊκές γλώσσες και λογοτεχνία και ρομαντικά ξενοδοχεία της Ευρώπης ❤️ + +Σε αυτή την ενότητα του προγράμματος σπουδών, θα εισαχθείτε σε μία από τις πιο διαδεδομένες χρήσεις της μηχανικής μάθησης: την επεξεργασία φυσικής γλώσσας (NLP). Προερχόμενη από την υπολογιστική γλωσσολογία, αυτή η κατηγορία τεχνητής νοημοσύνης αποτελεί τη γέφυρα μεταξύ ανθρώπων και μηχανών μέσω φωνητικής ή γραπτής επικοινωνίας. + +Σε αυτά τα μαθήματα θα μάθουμε τα βασικά της NLP δημιουργώντας μικρά συνομιλητικά bots για να κατανοήσουμε πώς η μηχανική μάθηση βοηθά να γίνονται αυτές οι συνομιλίες όλο και πιο "έξυπνες". Θα ταξιδέψετε πίσω στον χρόνο, συνομιλώντας με την Ελίζαμπεθ Μπένετ και τον κύριο Ντάρσι από το κλασικό μυθιστόρημα της Τζέιν Όστεν, **Περηφάνια και Προκατάληψη**, που δημοσιεύθηκε το 1813. Στη συνέχεια, θα διευρύνετε τις γνώσεις σας μαθαίνοντας για την ανάλυση συναισθημάτων μέσω κριτικών ξενοδοχείων στην Ευρώπη. + +![Βιβλίο Περηφάνια και Προκατάληψη και τσάι](../../../6-NLP/images/p&p.jpg) +> Φωτογραφία από Elaine Howlin στο 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) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/6-NLP/data/README.md b/translations/el/6-NLP/data/README.md new file mode 100644 index 000000000..e7e9a5477 --- /dev/null +++ b/translations/el/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Κατεβάστε τα δεδομένα αξιολόγησης του ξενοδοχείου σε αυτόν τον φάκελο. + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/1-Introduction/README.md b/translations/el/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 000000000..477d83038 --- /dev/null +++ b/translations/el/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,195 @@ + +# Εισαγωγή στην πρόβλεψη χρονοσειρών + +![Περίληψη χρονοσειρών σε σκίτσο](../../../../sketchnotes/ml-timeseries.png) + +> Σκίτσο από την [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Σε αυτό το μάθημα και το επόμενο, θα μάθετε λίγα πράγματα για την πρόβλεψη χρονοσειρών, ένα ενδιαφέρον και πολύτιμο μέρος του ρεπερτορίου ενός επιστήμονα ML που είναι λιγότερο γνωστό από άλλα θέματα. Η πρόβλεψη χρονοσειρών είναι σαν μια «κρυστάλλινη σφαίρα»: βασισμένη στην προηγούμενη απόδοση μιας μεταβλητής, όπως η τιμή, μπορείτε να προβλέψετε την πιθανή μελλοντική της αξία. + +[![Εισαγωγή στην πρόβλεψη χρονοσειρών](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Εισαγωγή στην πρόβλεψη χρονοσειρών") + +> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα βίντεο σχετικά με την πρόβλεψη χρονοσειρών + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +Είναι ένα χρήσιμο και ενδιαφέρον πεδίο με πραγματική αξία για τις επιχειρήσεις, δεδομένης της άμεσης εφαρμογής του σε προβλήματα τιμολόγησης, αποθεμάτων και ζητημάτων εφοδιαστικής αλυσίδας. Ενώ οι τεχνικές βαθιάς μάθησης έχουν αρχίσει να χρησιμοποιούνται για την απόκτηση περισσότερων πληροφοριών για την καλύτερη πρόβλεψη της μελλοντικής απόδοσης, η πρόβλεψη χρονοσειρών παραμένει ένα πεδίο που ενημερώνεται σε μεγάλο βαθμό από κλασικές τεχνικές ML. + +> Το χρήσιμο πρόγραμμα σπουδών για χρονοσειρές του Penn State μπορείτε να το βρείτε [εδώ](https://online.stat.psu.edu/stat510/lesson/1) + +## Εισαγωγή + +Ας υποθέσουμε ότι διαχειρίζεστε μια σειρά από έξυπνα παρκόμετρα που παρέχουν δεδομένα σχετικά με το πόσο συχνά χρησιμοποιούνται και για πόσο χρόνο με την πάροδο του χρόνου. + +> Τι θα γινόταν αν μπορούσατε να προβλέψετε, βάσει της προηγούμενης απόδοσης του μετρητή, την μελλοντική του αξία σύμφωνα με τους νόμους της προσφοράς και της ζήτησης; + +Η ακριβής πρόβλεψη του πότε να δράσετε για να επιτύχετε τον στόχο σας είναι μια πρόκληση που θα μπορούσε να αντιμετωπιστεί με την πρόβλεψη χρονοσειρών. Δεν θα έκανε τους ανθρώπους χαρούμενους να χρεώνονται περισσότερο σε ώρες αιχμής όταν ψάχνουν για θέση στάθμευσης, αλλά θα ήταν ένας σίγουρος τρόπος για να δημιουργήσετε έσοδα για τον καθαρισμό των δρόμων! + +Ας εξερευνήσουμε μερικούς από τους τύπους αλγορίθμων χρονοσειρών και ας ξεκινήσουμε ένα notebook για να καθαρίσουμε και να προετοιμάσουμε κάποια δεδομένα. Τα δεδομένα που θα αναλύσετε προέρχονται από τον διαγωνισμό πρόβλεψης GEFCom2014. Αποτελούνται από 3 χρόνια ωριαίων τιμών ηλεκτρικού φορτίου και θερμοκρασίας μεταξύ 2012 και 2014. Δεδομένων των ιστορικών μοτίβων του ηλεκτρικού φορτίου και της θερμοκρασίας, μπορείτε να προβλέψετε μελλοντικές τιμές του ηλεκτρικού φορτίου. + +Σε αυτό το παράδειγμα, θα μάθετε πώς να προβλέπετε ένα βήμα μπροστά, χρησιμοποιώντας μόνο ιστορικά δεδομένα φορτίου. Πριν ξεκινήσετε, ωστόσο, είναι χρήσιμο να κατανοήσετε τι συμβαίνει πίσω από τις σκηνές. + +## Κάποιες ορισμοί + +Όταν συναντάτε τον όρο «χρονοσειρές», πρέπει να κατανοήσετε τη χρήση του σε διάφορα πλαίσια. + +🎓 **Χρονοσειρές** + +Στα μαθηματικά, «μια χρονοσειρά είναι μια σειρά σημείων δεδομένων που κατατάσσονται (ή καταγράφονται ή σχεδιάζονται) με χρονολογική σειρά. Πιο συχνά, μια χρονοσειρά είναι μια ακολουθία που λαμβάνεται σε διαδοχικά, εξίσου απομακρυσμένα σημεία στον χρόνο.» Ένα παράδειγμα χρονοσειράς είναι η ημερήσια τιμή κλεισίματος του [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series). Η χρήση γραφημάτων χρονοσειρών και στατιστικής μοντελοποίησης συναντάται συχνά στην επεξεργασία σήματος, την πρόβλεψη καιρού, την πρόβλεψη σεισμών και άλλους τομείς όπου συμβαίνουν γεγονότα και τα σημεία δεδομένων μπορούν να σχεδιαστούν με την πάροδο του χρόνου. + +🎓 **Ανάλυση χρονοσειρών** + +Η ανάλυση χρονοσειρών είναι η ανάλυση των προαναφερθέντων δεδομένων χρονοσειρών. Τα δεδομένα χρονοσειρών μπορούν να πάρουν διαφορετικές μορφές, συμπεριλαμβανομένων των «διακοπτόμενων χρονοσειρών» που ανιχνεύουν μοτίβα στην εξέλιξη μιας χρονοσειράς πριν και μετά από ένα διακοπτικό γεγονός. Ο τύπος ανάλυσης που απαιτείται για τις χρονοσειρές εξαρτάται από τη φύση των δεδομένων. Τα δεδομένα χρονοσειρών μπορούν να πάρουν τη μορφή σειρών αριθμών ή χαρακτήρων. + +Η ανάλυση που θα πραγματοποιηθεί χρησιμοποιεί μια ποικιλία μεθόδων, συμπεριλαμβανομένων των μεθόδων συχνότητας και χρόνου, γραμμικών και μη γραμμικών, και άλλων. [Μάθετε περισσότερα](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) για τους πολλούς τρόπους ανάλυσης αυτού του τύπου δεδομένων. + +🎓 **Πρόβλεψη χρονοσειρών** + +Η πρόβλεψη χρονοσειρών είναι η χρήση ενός μοντέλου για την πρόβλεψη μελλοντικών τιμών βάσει μοτίβων που εμφανίζονται από δεδομένα που έχουν συλλεχθεί στο παρελθόν. Ενώ είναι δυνατό να χρησιμοποιηθούν μοντέλα παλινδρόμησης για την εξερεύνηση δεδομένων χρονοσειρών, με δείκτες χρόνου ως μεταβλητές x σε ένα γράφημα, τέτοια δεδομένα αναλύονται καλύτερα χρησιμοποιώντας ειδικούς τύπους μοντέλων. + +Τα δεδομένα χρονοσειρών είναι μια λίστα διατεταγμένων παρατηρήσεων, σε αντίθεση με δεδομένα που μπορούν να αναλυθούν με γραμμική παλινδρόμηση. Το πιο κοινό μοντέλο είναι το ARIMA, ένα ακρωνύμιο που σημαίνει «Αυτοπαλινδρόμηση Ενσωματωμένη Κινούμενη Μέση». + +[Τα μοντέλα ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) «συσχετίζουν την τρέχουσα τιμή μιας σειράς με προηγούμενες τιμές και προηγούμενα σφάλματα πρόβλεψης.» Είναι πιο κατάλληλα για την ανάλυση δεδομένων χρονοσειρών, όπου τα δεδομένα είναι διατεταγμένα με την πάροδο του χρόνου. + +> Υπάρχουν διάφοροι τύποι μοντέλων ARIMA, για τους οποίους μπορείτε να μάθετε περισσότερα [εδώ](https://people.duke.edu/~rnau/411arim.htm) και θα τα εξετάσετε στο επόμενο μάθημα. + +Στο επόμενο μάθημα, θα δημιουργήσετε ένα μοντέλο ARIMA χρησιμοποιώντας [Μονομεταβλητές Χρονοσειρές](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm), που εστιάζουν σε μία μεταβλητή που αλλάζει την τιμή της με την πάροδο του χρόνου. Ένα παράδειγμα αυτού του τύπου δεδομένων είναι [αυτό το σύνολο δεδομένων](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm) που καταγράφει τη μηνιαία συγκέντρωση CO2 στο Παρατηρητήριο 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 | + +✅ Εντοπίστε τη μεταβλητή που αλλάζει με την πάροδο του χρόνου σε αυτό το σύνολο δεδομένων. + +## Χαρακτηριστικά δεδομένων χρονοσειρών που πρέπει να λάβετε υπόψη + +Όταν εξετάζετε δεδομένα χρονοσειρών, μπορεί να παρατηρήσετε ότι έχουν [ορισμένα χαρακτηριστικά](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) που δείχνει την ημερήσια δαπάνη εντός παιχνιδιού για μερικά χρόνια. Μπορείτε να εντοπίσετε κάποια από τα χαρακτηριστικά που αναφέρονται παραπάνω σε αυτά τα δεδομένα; + +![Δαπάνη εντός παιχνιδιού](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Άσκηση - ξεκινώντας με δεδομένα χρήσης ενέργειας + +Ας ξεκινήσουμε δημιουργώντας ένα μοντέλο χρονοσειρών για την πρόβλεψη της μελλοντικής χρήσης ενέργειας δεδομένης της προηγούμενης χρήσης. + +> Τα δεδομένα σε αυτό το παράδειγμα προέρχονται από τον διαγωνισμό πρόβλεψης GEFCom2014. Αποτελούνται από 3 χρόνια ωριαίων τιμών ηλεκτρικού φορτίου και θερμοκρασίας μεταξύ 2012 και 2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli και Rob J. Hyndman, "Πιθανολογική πρόβλεψη ενέργειας: Παγκόσμιος Διαγωνισμός Πρόβλεψης Ενέργειας 2014 και πέρα", 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`, ο οποίος ρυθμίζει το περιβάλλον σας και χειρίζεται τη λήψη των δεδομένων. + +2. Στη συνέχεια, εξετάστε τα δεδομένα ως dataframe καλώντας `load_data()` και `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Μπορείτε να δείτε ότι υπάρχουν δύο στήλες που αντιπροσωπεύουν την ημερομηνία και το φορτίο: + + | | 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()`: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + ![γράφημα ενέργειας](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Τώρα, σχεδιάστε την πρώτη εβδομάδα του Ιουλίου 2014, παρέχοντάς την ως είσοδο στο `energy` με το μοτίβο `[από ημερομηνία]: [έως ημερομηνία]`: + + ```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() + ``` + + ![Ιούλιος](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Ένα όμορφο γράφημα! Ρίξτε μια ματιά σε αυτά τα γραφήματα και δείτε αν μπορείτε να προσδιορίσετε κάποια από τα χαρακτηριστικά που αναφέρονται παραπάνω. Τι μπορούμε να συμπεράνουμε οπτικοποιώντας τα δεδομένα; + +Στο επόμενο μάθημα, θα δημιουργήσετε ένα μοντέλο ARIMA για να κάνετε κάποιες προβλέψεις. + +--- + +## 🚀Πρόκληση + +Φτιάξτε μια λίστα με όλες τις βιομηχανίες και τους τομείς έρευνας που μπορείτε να σκεφτείτε ότι θα επωφελούνταν από την πρόβλεψη χρονοσειρών. Μπορείτε να σκεφτείτε μια εφαρμογή αυτών των τεχνικών στις τέχνες; Στην Οικονομετρία; Στην Οικολογία; Στο Λιανικό Εμπόριο; Στη Βιομηχανία; Στα Οικονομικά; Πού αλλού; + +## [Μετά το μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Αν και δεν + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/1-Introduction/assignment.md b/translations/el/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 000000000..af48a58e3 --- /dev/null +++ b/translations/el/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Οπτικοποίηση περισσότερων Χρονοσειρών + +## Οδηγίες + +Έχετε αρχίσει να μαθαίνετε για την Πρόβλεψη Χρονοσειρών εξετάζοντας τον τύπο δεδομένων που απαιτεί αυτήν την ειδική μοντελοποίηση. Έχετε οπτικοποιήσει κάποια δεδομένα σχετικά με την ενέργεια. Τώρα, αναζητήστε άλλα δεδομένα που θα μπορούσαν να επωφεληθούν από την Πρόβλεψη Χρονοσειρών. Βρείτε τρία παραδείγματα (δοκιμάστε [Kaggle](https://kaggle.com) και [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) και δημιουργήστε ένα notebook για να τα οπτικοποιήσετε. Σημειώστε οποιαδήποτε ιδιαίτερα χαρακτηριστικά που έχουν (εποχικότητα, απότομες αλλαγές ή άλλες τάσεις) στο notebook. + +## Κριτήρια Αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ------------------------------------------------------ | -------------------------------------------------- | --------------------------------------------------------------------------------------- | +| | Τρία σύνολα δεδομένων έχουν σχεδιαστεί και εξηγηθεί σε ένα notebook | Δύο σύνολα δεδομένων έχουν σχεδιαστεί και εξηγηθεί σε ένα notebook | Λίγα σύνολα δεδομένων έχουν σχεδιαστεί ή εξηγηθεί σε ένα notebook ή τα δεδομένα που παρουσιάζονται είναι ανεπαρκή | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/el/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..542dd1083 --- /dev/null +++ b/translations/el/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/el/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 000000000..86c9b7f39 --- /dev/null +++ b/translations/el/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένας προσωρινός δείκτης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/2-ARIMA/README.md b/translations/el/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 000000000..0693cc58b --- /dev/null +++ b/translations/el/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,399 @@ + +# Πρόβλεψη χρονοσειρών με ARIMA + +Στο προηγούμενο μάθημα, μάθατε λίγα πράγματα για την πρόβλεψη χρονοσειρών και φορτώσατε ένα σύνολο δεδομένων που δείχνει τις διακυμάνσεις του ηλεκτρικού φορτίου σε μια χρονική περίοδο. + +[![Εισαγωγή στο ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Εισαγωγή στο ARIMA") + +> 🎥 Κάντε κλικ στην εικόνα παραπάνω για ένα βίντεο: Μια σύντομη εισαγωγή στα μοντέλα ARIMA. Το παράδειγμα γίνεται σε R, αλλά οι έννοιες είναι καθολικές. + +## [Κουίζ πριν το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Εισαγωγή + +Σε αυτό το μάθημα, θα ανακαλύψετε έναν συγκεκριμένο τρόπο για να δημιουργήσετε μοντέλα με [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average). Τα μοντέλα ARIMA είναι ιδιαίτερα κατάλληλα για δεδομένα που παρουσιάζουν [μη στασιμότητα](https://wikipedia.org/wiki/Stationary_process). + +## Γενικές έννοιες + +Για να μπορέσετε να εργαστείτε με το ARIMA, υπάρχουν κάποιες έννοιες που πρέπει να γνωρίζετε: + +- 🎓 **Στασιμότητα**. Από στατιστική άποψη, η στασιμότητα αναφέρεται σε δεδομένα των οποίων η κατανομή δεν αλλάζει όταν μετατοπίζονται χρονικά. Τα μη σταθερά δεδομένα, λοιπόν, παρουσιάζουν διακυμάνσεις λόγω τάσεων που πρέπει να μετασχηματιστούν για να αναλυθούν. Η εποχικότητα, για παράδειγμα, μπορεί να εισάγει διακυμάνσεις στα δεδομένα και μπορεί να εξαλειφθεί μέσω μιας διαδικασίας 'εποχικής διαφοροποίησης'. + +- 🎓 **[Διαφοροποίηση](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Η διαφοροποίηση δεδομένων, πάλι από στατιστική άποψη, αναφέρεται στη διαδικασία μετασχηματισμού μη σταθερών δεδομένων ώστε να γίνουν σταθερά, αφαιρώντας την μη σταθερή τάση τους. "Η διαφοροποίηση αφαιρεί τις αλλαγές στο επίπεδο μιας χρονοσειράς, εξαλείφοντας την τάση και την εποχικότητα και, κατά συνέπεια, σταθεροποιώντας τον μέσο όρο της χρονοσειράς." [Έγγραφο από Shixiong et al](https://arxiv.org/abs/1904.07632) + +## ARIMA στο πλαίσιο των χρονοσειρών + +Ας αναλύσουμε τα μέρη του ARIMA για να κατανοήσουμε καλύτερα πώς μας βοηθά να μοντελοποιήσουμε χρονοσειρές και να κάνουμε προβλέψεις. + +- **AR - για AutoRegressive**. Τα αυτοπαλινδρομικά μοντέλα, όπως υποδηλώνει το όνομα, κοιτάζουν 'πίσω' στον χρόνο για να αναλύσουν προηγούμενες τιμές στα δεδομένα σας και να κάνουν υποθέσεις γι' αυτές. Αυτές οι προηγούμενες τιμές ονομάζονται 'lags'. Ένα παράδειγμα θα ήταν δεδομένα που δείχνουν μηνιαίες πωλήσεις μολυβιών. Το σύνολο πωλήσεων κάθε μήνα θα θεωρούνταν 'μεταβαλλόμενη μεταβλητή' στο σύνολο δεδομένων. Αυτό το μοντέλο κατασκευάζεται καθώς η "μεταβαλλόμενη μεταβλητή ενδιαφέροντος παλινδρομείται στις δικές της καθυστερημένες (δηλαδή, προηγούμενες) τιμές." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - για Integrated**. Σε αντίθεση με τα παρόμοια μοντέλα 'ARMA', το 'I' στο ARIMA αναφέρεται στην *[ενσωματωμένη](https://wikipedia.org/wiki/Order_of_integration)* πτυχή του. Τα δεδομένα 'ενσωματώνονται' όταν εφαρμόζονται βήματα διαφοροποίησης για την εξάλειψη της μη στασιμότητας. + +- **MA - για Moving Average**. Η πτυχή [κινούμενου μέσου](https://wikipedia.org/wiki/Moving-average_model) αυτού του μοντέλου αναφέρεται στη μεταβλητή εξόδου που καθορίζεται παρατηρώντας τις τρέχουσες και προηγούμενες τιμές των lags. + +Συμπέρασμα: Το ARIMA χρησιμοποιείται για να κάνει ένα μοντέλο να ταιριάζει όσο το δυνατόν καλύτερα στη συγκεκριμένη μορφή δεδομένων χρονοσειρών. + +## Άσκηση - δημιουργία μοντέλου ARIMA + +Ανοίξτε τον φάκελο [_/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. Εκτελέστε το notebook για να φορτώσετε τη βιβλιοθήκη Python `statsmodels`. Θα χρειαστείτε αυτήν για τα μοντέλα ARIMA. + +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` σε ένα dataframe Pandas και δείτε τα: + + ```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() + ``` + + ![δεδομένα εκπαίδευσης και δοκιμής](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Επομένως, η χρήση ενός σχετικά μικρού χρονικού παραθύρου για την εκπαίδευση των δεδομένων θα πρέπει να είναι επαρκής. + + > Σημείωση: Δεδομένου ότι η συνάρτηση που χρησιμοποιούμε για την προσαρμογή του μοντέλου ARIMA χρησιμοποιεί επικύρωση εντός δείγματος κατά την προσαρμογή, θα παραλείψουμε τα δεδομένα επικύρωσης. + +### Προετοιμασία των δεδομένων για εκπαίδευση + +Τώρα, πρέπει να προετοιμάσετε τα δεδομένα για εκπαίδευση, εκτελώντας φιλτράρισμα και κλιμάκωση των δεδομένων σας. Φιλτράρετε το σύνολο δεδομένων σας ώστε να περιλαμβάνει μόνο τις χρονικές περιόδους και τις στήλες που χρειάζεστε, και κλιμακώστε τα δεδομένα ώστε να προβάλλονται στο διάστημα 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. Οπτικοποιήστε τα αρχικά δεδομένα σε σύγκριση με τα κλιμακωμένα δεδομένα: + + ```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() + ``` + + ![αρχικά](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Τα αρχικά δεδομένα + + ![κλιμακωμένα](../../../../7-TimeSeries/2-ARIMA/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()` και καθορίζοντας τον αριθμό βημάτων (τον `ορίζοντα`) για πρόβλεψη. + +> 🎓 Τι σημαίνουν όλες αυτές οι παράμετροι; Σε ένα μοντέλο ARIMA υπάρχουν 3 παράμετροι που χρησιμοποιούνται για να βοηθήσουν στη μοντελοποίηση των κύριων πτυχών μιας χρονοσειράς: εποχικότητα, τάση και θόρυβος. Αυτές οι παράμετροι είναι: + +`p`: η παράμετρος που σχετίζεται με την αυτοπαλινδρομική πτυχή του μοντέλου, η οποία ενσωματώνει *παρελθοντικές* τιμές. +`d`: η παράμετρος που σχετίζεται με την ενσωματωμένη πτυχή του μοντέλου, η οποία επηρεάζει την ποσότητα *διαφοροποίησης* (🎓 θυμηθείτε τη διαφοροποίηση 👆;) που εφαρμόζεται σε μια χρονοσειρά. +`q`: η παράμετρος που σχετίζεται με την πτυχή του κινούμενου μέσου του μοντέλου. + +> Σημείωση: Εάν τα δεδομένα σας έχουν εποχική πτυχή - όπως αυτά εδώ - , χρησιμοποιούμε ένα εποχικό μοντέλο ARIMA (SARIMA). Σε αυτήν την περίπτωση, πρέπει να χρησιμοποιήσετε ένα άλλο σύνολο παραμέτρων: `P`, `D` και `Q`, που περιγράφουν τις ίδιες συσχετίσεις με τις `p`, `d` και `q`, αλλά αντιστοιχούν στις εποχικές συνιστώσες του μοντέλου. + +1. Ξεκινήστε ορίζοντας την προτιμώμενη τιμή ορίζοντα. Ας δοκιμάσουμε 3 ώρες: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + Η επιλογή των καλύτερων τιμών για τις παραμέτρους ενός μοντέλου ARIMA μπορεί να είναι δύσκολη, καθώς είναι κάπως υποκειμενική και χρονοβόρα. Μπορείτε να εξετάσετε τη χρήση της συνάρτησης `auto_arima()` από τη βιβλιοθήκη [`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()) + ``` + + Ένας πίνακας αποτελεσμάτων εκτυπώνεται. + +Δημιουργήσατε το πρώτο σας μοντέλο! Τώρα πρέπει να βρούμε έναν τρόπο να το αξιολογήσουμε. + +### Αξιολόγηση του μοντέλου σας + +Για να αξιολογήσετε το μοντέλο σας, μπορείτε να εκτελέσετε την λεγόμενη επικύρωση `walk forward`. Στην πράξη, τα μοντέλα χρονοσειρών επανεκπαιδεύονται κάθε φορά που γίνονται διαθέσιμα νέα δεδομένα. Αυτό επιτρέπει στο μοντέλο να κάνει την καλύτερη πρόβλεψη σε κάθε χρονικό βήμα. + +Ξεκινώντας από την αρχή της χρονοσειράς χρησιμοποιώντας αυτήν την τεχνική, εκπαιδεύστε το μοντέλο στο σύνολο δεδομένων εκπαίδευσης. Στη συνέχεια, κάντε μια πρόβλεψη για το επόμενο χρονικό βήμα. Η πρόβλεψη αξιολογείται σε σχέση με την γνωστή τιμή. Το σύνολο εκπαίδευσης επεκτείνεται στη συνέχεια ώστε να περιλαμβάνει την γνωστή τιμή και η διαδικασία επαναλαμβάνεται. + +> Σημείωση: Θα πρέπει να διατηρείτε το παράθυρο του συνόλου εκπαίδευσης σταθερό για πιο αποτελεσματική εκπαίδευση, ώστε κάθε φορά που προσθέτετε μια νέα παρατήρηση στο σύνολο εκπαίδευσης, να αφαιρείτε την παρατήρηση από την αρχή του συνόλου. + +Αυτή η διαδικασία παρέχει μια πιο αξιόπιστη εκτίμηση του πώς θα αποδίδει το μοντέλο στην πράξη. Ωστόσο, έχει το υπολογιστικό κόστος της δημιουργίας τόσων πολλών μοντέλων. Αυτό είναι αποδεκτό εάν τα δεδομένα είναι μικρά ή εάν το μοντέλο είναι απλό, αλλά θα μπορούσε να είναι πρόβλημα σε μεγαλύτερη κλίμακα. + +Η επικύρωση walk-forward είναι το χρυσό πρότυπο για την αξιολόγηση μοντέλων χρονοσειρών και συνιστάται για τα δικά σας έργα. + +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 | + + Τα δεδομένα μετατοπίζονται οριζόντια σύμφωνα με το σημείο ορίζοντα. + +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() + ``` + + Έξοδος + | | | 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 +> **🧮 Δείξε μου τα μαθηματικά** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) χρησιμοποιείται για να δείξει την ακρίβεια πρόβλεψης ως αναλογία που ορίζεται από τον παραπάνω τύπο. Η διαφορά μεταξύ της πραγματικής και της προβλεπόμενης τιμής διαιρείται με την πραγματική. +> +> "Η απόλυτη τιμή σε αυτόν τον υπολογισμό αθροίζεται για κάθε προβλεπόμενο σημείο στον χρόνο και διαιρείται με τον αριθμό των προσαρμοσμένων σημείων 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. Υπολογίστε το 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 % + ``` + + Ένας χαμηλός αριθμός είναι καλύτερος: σκεφτείτε ότι μια πρόβλεψη με MAPE 10 είναι εκτός κατά 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() + ``` + + ![ένα μοντέλο χρονοσειρών](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Ένα πολύ ωραίο γράφημα, που δείχνει ένα μοντέλο με καλή ακρίβεια. Μπράβο! + +--- + +## 🚀Πρόκληση + +Εξερευνήστε τους τρόπους για να δοκιμάσετε την ακρίβεια ενός μοντέλου χρονοσειρών. Αναφέραμε το MAPE σε αυτό το μάθημα, αλλά υπάρχουν άλλες μέθοδοι που θα μπορούσατε να χρησιμοποιήσετε; Ερευνήστε τις και σχολιάστε τις. Ένα χρήσιμο έγγραφο μπορείτε να βρείτε [εδώ](https://otexts.com/fpp2/accuracy.html) + +## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Αυτό το μάθημα καλύπτει μόνο τα βασικά της πρόβλεψης χρονοσειρών με ARIMA. Αφιερώστε χρόνο για να εμβαθύνετε τις γνώσεις σας εξερευνώντας [αυτό το αποθετήριο](https://microsoft.github.io/forecasting/) και τους διάφορους τύπους μοντέλων του για να μάθετε άλλους τρόπους δημιουργίας μοντέλων χρονοσειρών. + +## Εργασία + +[Ένα νέο μοντέλο ARIMA](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/2-ARIMA/assignment.md b/translations/el/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 000000000..b7cbbd694 --- /dev/null +++ b/translations/el/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Ένα νέο μοντέλο ARIMA + +## Οδηγίες + +Τώρα που έχετε δημιουργήσει ένα μοντέλο ARIMA, δημιουργήστε ένα νέο με φρέσκα δεδομένα (δοκιμάστε ένα από [αυτά τα σύνολα δεδομένων από το Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Σχολιάστε τη δουλειά σας σε ένα notebook, οπτικοποιήστε τα δεδομένα και το μοντέλο σας, και δοκιμάστε την ακρίβειά του χρησιμοποιώντας το MAPE. + +## Κριτήρια Αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | +| | Παρουσιάζεται ένα notebook με νέο μοντέλο ARIMA, δοκιμασμένο και εξηγημένο με οπτικοποιήσεις και δηλωμένη ακρίβεια. | Το notebook που παρουσιάζεται δεν είναι σχολιασμένο ή περιέχει σφάλματα | Παρουσιάζεται ένα ελλιπές notebook | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/el/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 000000000..5d57e99b5 --- /dev/null +++ b/translations/el/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/el/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 000000000..1cc666f94 --- /dev/null +++ b/translations/el/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένας προσωρινός δείκτης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/3-SVR/README.md b/translations/el/7-TimeSeries/3-SVR/README.md new file mode 100644 index 000000000..a3e18e6ca --- /dev/null +++ b/translations/el/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,400 @@ + +# Πρόβλεψη Χρονοσειρών με Support Vector Regressor + +Στο προηγούμενο μάθημα, μάθατε πώς να χρησιμοποιείτε το μοντέλο ARIMA για να κάνετε προβλέψεις χρονοσειρών. Τώρα θα εξετάσετε το μοντέλο Support Vector Regressor, το οποίο είναι ένα μοντέλο παλινδρόμησης που χρησιμοποιείται για την πρόβλεψη συνεχών δεδομένων. + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Εισαγωγή + +Σε αυτό το μάθημα, θα ανακαλύψετε έναν συγκεκριμένο τρόπο για να δημιουργήσετε μοντέλα με [**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) για περισσότερες πληροφορίες. +- **Support Vector Machine (SVM):** Ένας τύπος εποπτευόμενου μοντέλου μηχανικής μάθησης που χρησιμοποιείται για ταξινόμηση, παλινδρόμηση και ανίχνευση ανωμαλιών. Το μοντέλο είναι ένα υπερεπίπεδο στον χώρο χαρακτηριστικών, το οποίο στην περίπτωση της ταξινόμησης λειτουργεί ως όριο, και στην περίπτωση της παλινδρόμησης λειτουργεί ως η καλύτερη γραμμή προσαρμογής. Στο SVM, μια συνάρτηση Kernel χρησιμοποιείται γενικά για τη μετατροπή του συνόλου δεδομένων σε έναν χώρο με μεγαλύτερο αριθμό διαστάσεων, ώστε να μπορούν να διαχωριστούν εύκολα. [Κάντε κλικ εδώ](https://en.wikipedia.org/wiki/Support-vector_machine) για περισσότερες πληροφορίες σχετικά με τα SVM. +- **Support Vector Regressor (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. Εκτελέστε το notebook και εισάγετε τις απαραίτητες βιβλιοθήκες: [^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` σε ένα Pandas dataframe και δείτε τα: [^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() + ``` + + ![πλήρη δεδομένα](../../../../7-TimeSeries/3-SVR/images/full-data.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() + ``` + + ![δεδομένα εκπαίδευσης και δοκιμής](../../../../7-TimeSeries/3-SVR/images/train-test.png) + + + +### Προετοιμασία των δεδομένων για εκπαίδευση + +Τώρα, πρέπει να προετοιμάσετε τα δεδομένα για εκπαίδευση πραγματοποιώντας φιλτράρισμα και κλιμάκωση των δεδομένων σας. Φιλτράρετε το σύνολο δεδομένων σας ώστε να περιλαμβάνει μόνο τις χρονικές περιόδους και τις στήλες που χρειάζεστε, και κλιμάκωση για να διασφαλίσετε ότι τα δεδομένα προβάλλονται στο διάστημα 0,1. + +1. Φιλτράρετε το αρχικό σύνολο δεδομένων ώστε να περιλαμβάνει μόνο τις προαναφερθείσες χρονικές περιόδους ανά σύνολο και μόνο τη στήλη 'load' και την ημερομηνία: [^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]`. Έτσι, αναδιαμορφώνετε τα υπάρχοντα `train_data` και `test_data` ώστε να υπάρχει μια νέα διάσταση που αναφέρεται στα χρονικά βήματα. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Για αυτό το παράδειγμα, παίρνουμε `timesteps = 5`. Έτσι, οι είσοδοι στο μοντέλο είναι τα δεδομένα για τα πρώτα 4 χρονικά βήματα, και η έξοδος θα είναι τα δεδομένα για το 5ο χρονικό βήμα. + +```python +timesteps=5 +``` + +Μετατροπή δεδομένων εκπαίδευσης σε 2D tensor χρησιμοποιώντας εμφωλευμένη λίστα κατανόησης: + +```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 tensor: + +```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()` και περνώντας τις υπερπαραμέτρους του μοντέλου: kernel, gamma, c και epsilon + 2. Προετοιμάστε το μοντέλο για τα δεδομένα εκπαίδευσης καλώντας τη συνάρτηση `fit()` + 3. Κάντε προβλέψεις καλώντας τη συνάρτηση `predict()` + +Τώρα δημιουργούμε ένα μοντέλο SVR. Εδώ χρησιμοποιούμε το [RBF kernel](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), και ορίζουμε τις υπερπαραμέτρους gamma, C και epsilon ως 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() +``` + +![πρόβλεψη δεδομένων εκπαίδευσης](../../../../7-TimeSeries/3-SVR/images/train-data-predict.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() +``` + +![πρόβλεψη δεδομένων δοκιμής](../../../../7-TimeSeries/3-SVR/images/test-data-predict.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() +``` + +![πρόβλεψη πλήρων δεδομένων](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + + + +🏆 Πολύ ωραία γραφήματα, που δείχνουν ένα μοντέλο με καλή ακρίβεια. Μπράβο! + +--- + +## 🚀Πρόκληση + +- Προσπαθήστε να τροποποιήσετε τις υπερπαραμέτρους (gamma, C, epsilon) κατά τη δημιουργία του μοντέλου και να αξιολογήσετε τα δεδομένα για να δείτε ποιο σύνολο υπερπαραμέτρων δίνει τα καλύτερα αποτελέσματα στα δεδομένα δοκιμής. Για να μάθετε περισσότερα σχετικά με αυτές τις υπερπαραμέτρους, μπορείτε να ανατρέξετε στο έγγραφο [εδώ](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Προσπαθήστε να χρησιμοποιήσετε διαφορετικές συναρτήσεις kernel για το μοντέλο και να αναλύσετε τις επιδόσεις τους στο σύνολο δεδομένων. Ένα χρήσιμο έγγραφο μπορείτε να βρείτε [εδώ](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Προσπαθήστε να χρησιμοποιήσετε διαφορετικές τιμές για `timesteps` για το μοντέλο ώστε να κοιτάξει πίσω για να κάνει πρόβλεψη. + +## [Μετά το μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Αυτό το μάθημα είχε σκοπό να εισαγάγει την εφαρμογή του SVR για την πρόβλεψη χρονοσειρών. Για να διαβάσετε περισσότερα σχετικά με το SVR, μπορείτε να ανατρέξετε [σε αυτό το blog](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Αυτή η [τεκμηρίωση στο scikit-learn](https://scikit-learn.org/stable/modules/svm.html) παρέχει μια πιο ολοκληρωμένη εξήγηση σχετικά με τα SVM γενικά, [SVRs](https://scikit-learn.org/stable/modules/svm.html#regression) και επίσης άλλες λεπτομέρειες υλοποίησης όπως οι διαφορετικές [συναρτήσεις kernel](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) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/3-SVR/assignment.md b/translations/el/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 000000000..f487e15c5 --- /dev/null +++ b/translations/el/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,27 @@ + +# Ένα νέο μοντέλο SVR + +## Οδηγίες [^1] + +Τώρα που έχετε δημιουργήσει ένα μοντέλο SVR, δημιουργήστε ένα νέο με φρέσκα δεδομένα (δοκιμάστε ένα από [αυτά τα σύνολα δεδομένων από το Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Σχολιάστε τη δουλειά σας σε ένα notebook, οπτικοποιήστε τα δεδομένα και το μοντέλο σας, και δοκιμάστε την ακρίβειά του χρησιμοποιώντας κατάλληλα γραφήματα και MAPE. Επίσης, δοκιμάστε να τροποποιήσετε τις διάφορες υπερπαραμέτρους και να χρησιμοποιήσετε διαφορετικές τιμές για τα timesteps. + +## Κριτήρια Αξιολόγησης [^1] + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------- | +| | Παρουσιάζεται ένα notebook με μοντέλο SVR που έχει δημιουργηθεί, δοκιμαστεί και εξηγηθεί με οπτικοποιήσεις και δηλωμένη ακρίβεια. | Το notebook που παρουσιάζεται δεν είναι σχολιασμένο ή περιέχει σφάλματα. | Παρουσιάζεται ένα ελλιπές notebook | + +[^1]: Το κείμενο σε αυτή την ενότητα βασίστηκε στην [εργασία από το ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/7-TimeSeries/README.md b/translations/el/7-TimeSeries/README.md new file mode 100644 index 000000000..9785b6b12 --- /dev/null +++ b/translations/el/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Εισαγωγή στην πρόβλεψη χρονοσειρών + +Τι είναι η πρόβλεψη χρονοσειρών; Πρόκειται για την πρόβλεψη μελλοντικών γεγονότων μέσω της ανάλυσης των τάσεων του παρελθόντος. + +## Περιφερειακό θέμα: παγκόσμια χρήση ηλεκτρικής ενέργειας ✨ + +Σε αυτά τα δύο μαθήματα, θα εισαχθείτε στην πρόβλεψη χρονοσειρών, μια σχετικά λιγότερο γνωστή περιοχή της μηχανικής μάθησης που είναι ωστόσο εξαιρετικά πολύτιμη για βιομηχανικές και επιχειρηματικές εφαρμογές, μεταξύ άλλων πεδίων. Παρόλο που τα νευρωνικά δίκτυα μπορούν να χρησιμοποιηθούν για την ενίσχυση της χρησιμότητας αυτών των μοντέλων, θα τα μελετήσουμε στο πλαίσιο της κλασικής μηχανικής μάθησης, καθώς τα μοντέλα βοηθούν στην πρόβλεψη της μελλοντικής απόδοσης βάσει του παρελθόντος. + +Η περιφερειακή μας εστίαση είναι η χρήση ηλεκτρικής ενέργειας στον κόσμο, ένα ενδιαφέρον σύνολο δεδομένων για να μάθετε πώς να προβλέπετε τη μελλοντική κατανάλωση ενέργειας βάσει των μοτίβων του παρελθόντος φορτίου. Μπορείτε να δείτε πώς αυτό το είδος πρόβλεψης μπορεί να είναι εξαιρετικά χρήσιμο σε ένα επιχειρηματικό περιβάλλον. + +![ηλεκτρικό δίκτυο](../../../7-TimeSeries/images/electric-grid.jpg) + +Φωτογραφία από [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) με ηλεκτρικούς πύργους σε έναν δρόμο στο Rajasthan στο [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). Τα notebooks εμφανίστηκαν για πρώτη φορά online στο [Azure "Deep Learning For Time Series" repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) που αρχικά γράφτηκε από τη Francesca Lazzeri. Το μάθημα SVR γράφτηκε από τον [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/1-QLearning/README.md b/translations/el/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 000000000..8c798c483 --- /dev/null +++ b/translations/el/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Εισαγωγή στη Μάθηση Ενίσχυσης και Q-Learning + +![Περίληψη της μάθησης ενίσχυσης στη μηχανική μάθηση σε ένα σκίτσο](../../../../sketchnotes/ml-reinforcement.png) +> Σκίτσο από [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Η μάθηση ενίσχυσης περιλαμβάνει τρεις σημαντικές έννοιες: τον πράκτορα, κάποιες καταστάσεις και ένα σύνολο ενεργειών ανά κατάσταση. Εκτελώντας μια ενέργεια σε μια συγκεκριμένη κατάσταση, ο πράκτορας λαμβάνει μια ανταμοιβή. Φανταστείτε ξανά το παιχνίδι στον υπολογιστή Super Mario. Είστε ο Mario, βρίσκεστε σε ένα επίπεδο του παιχνιδιού, δίπλα σε μια άκρη γκρεμού. Πάνω σας υπάρχει ένα νόμισμα. Εσείς, ως Mario, σε ένα επίπεδο του παιχνιδιού, σε μια συγκεκριμένη θέση... αυτή είναι η κατάστασή σας. Αν κάνετε ένα βήμα προς τα δεξιά (μια ενέργεια), θα πέσετε από την άκρη και θα λάβετε χαμηλή αριθμητική βαθμολογία. Ωστόσο, αν πατήσετε το κουμπί άλματος, θα κερδίσετε έναν πόντο και θα παραμείνετε ζωντανοί. Αυτό είναι ένα θετικό αποτέλεσμα και θα πρέπει να σας απονείμει μια θετική αριθμητική βαθμολογία. + +Χρησιμοποιώντας τη μάθηση ενίσχυσης και έναν προσομοιωτή (το παιχνίδι), μπορείτε να μάθετε πώς να παίζετε το παιχνίδι για να μεγιστοποιήσετε την ανταμοιβή, δηλαδή να παραμείνετε ζωντανοί και να συγκεντρώσετε όσο το δυνατόν περισσότερους πόντους. + +[![Εισαγωγή στη Μάθηση Ενίσχυσης](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Κάντε κλικ στην εικόνα παραπάνω για να ακούσετε τον Dmitry να συζητά για τη Μάθηση Ενίσχυσης + +## [Κουίζ πριν το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Προαπαιτούμενα και Ρύθμιση + +Σε αυτό το μάθημα, θα πειραματιστούμε με κώδικα σε Python. Θα πρέπει να μπορείτε να εκτελέσετε τον κώδικα του Jupyter Notebook από αυτό το μάθημα, είτε στον υπολογιστή σας είτε κάπου στο cloud. + +Μπορείτε να ανοίξετε [το notebook του μαθήματος](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) και να ακολουθήσετε το μάθημα για να το δημιουργήσετε. + +> **Σημείωση:** Εάν ανοίγετε αυτόν τον κώδικα από το cloud, θα πρέπει επίσης να κατεβάσετε το αρχείο [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), το οποίο χρησιμοποιείται στον κώδικα του notebook. Προσθέστε το στον ίδιο κατάλογο με το notebook. + +## Εισαγωγή + +Σε αυτό το μάθημα, θα εξερευνήσουμε τον κόσμο του **[Πέτρου και του Λύκου](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, εμπνευσμένο από ένα μουσικό παραμύθι του Ρώσου συνθέτη [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Θα χρησιμοποιήσουμε τη **Μάθηση Ενίσχυσης** για να αφήσουμε τον Πέτρο να εξερευνήσει το περιβάλλον του, να συλλέξει νόστιμα μήλα και να αποφύγει τη συνάντηση με τον λύκο. + +Η **Μάθηση Ενίσχυσης** (RL) είναι μια τεχνική μάθησης που μας επιτρέπει να μάθουμε τη βέλτιστη συμπεριφορά ενός **πράκτορα** σε κάποιο **περιβάλλον** μέσω πολλών πειραμάτων. Ένας πράκτορας σε αυτό το περιβάλλον πρέπει να έχει κάποιο **στόχο**, ο οποίος ορίζεται από μια **συνάρτηση ανταμοιβής**. + +## Το περιβάλλον + +Για απλότητα, ας θεωρήσουμε ότι ο κόσμος του Πέτρου είναι ένας τετράγωνος πίνακας μεγέθους `width` x `height`, όπως αυτός: + +![Περιβάλλον του Πέτρου](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Κάθε κελί σε αυτόν τον πίνακα μπορεί να είναι: + +* **έδαφος**, πάνω στο οποίο ο Πέτρος και άλλα πλάσματα μπορούν να περπατήσουν. +* **νερό**, πάνω στο οποίο προφανώς δεν μπορείτε να περπατήσετε. +* **δέντρο** ή **γρασίδι**, ένα μέρος όπου μπορείτε να ξεκουραστείτε. +* **μήλο**, που αντιπροσωπεύει κάτι που ο Πέτρος θα χαρεί να βρει για να τραφεί. +* **λύκος**, που είναι επικίνδυνος και πρέπει να αποφεύγεται. + +Υπάρχει ένα ξεχωριστό Python module, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), το οποίο περιέχει τον κώδικα για να δουλέψουμε με αυτό το περιβάλλον. Επειδή αυτός ο κώδικας δεν είναι σημαντικός για την κατανόηση των εννοιών μας, θα εισάγουμε το module και θα το χρησιμοποιήσουμε για να δημιουργήσουμε τον δείγμα πίνακα (code block 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Αυτός ο κώδικας θα πρέπει να εκτυπώσει μια εικόνα του περιβάλλοντος παρόμοια με την παραπάνω. + +## Ενέργειες και πολιτική + +Στο παράδειγμά μας, ο στόχος του Πέτρου θα είναι να βρει ένα μήλο, ενώ θα αποφεύγει τον λύκο και άλλα εμπόδια. Για να το κάνει αυτό, μπορεί ουσιαστικά να περπατήσει γύρω μέχρι να βρει ένα μήλο. + +Επομένως, σε οποιαδήποτε θέση, μπορεί να επιλέξει μία από τις ακόλουθες ενέργειες: πάνω, κάτω, αριστερά και δεξιά. + +Θα ορίσουμε αυτές τις ενέργειες ως ένα λεξικό και θα τις αντιστοιχίσουμε σε ζεύγη αντίστοιχων αλλαγών συντεταγμένων. Για παράδειγμα, η κίνηση προς τα δεξιά (`R`) θα αντιστοιχεί σε ένα ζεύγος `(1,0)`. (code block 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()) } +``` + +Συνοψίζοντας, η στρατηγική και ο στόχος αυτού του σεναρίου είναι οι εξής: + +- **Η στρατηγική** του πράκτορά μας (Πέτρος) ορίζεται από τη λεγόμενη **πολιτική**. Μια πολιτική είναι μια συνάρτηση που επιστρέφει την ενέργεια σε οποιαδήποτε δεδομένη κατάσταση. Στην περίπτωσή μας, η κατάσταση του προβλήματος αντιπροσωπεύεται από τον πίνακα, συμπεριλαμβανομένης της τρέχουσας θέσης του παίκτη. + +- **Ο στόχος** της μάθησης ενίσχυσης είναι να μάθουμε τελικά μια καλή πολιτική που θα μας επιτρέψει να λύσουμε το πρόβλημα αποτελεσματικά. Ωστόσο, ως βάση, ας θεωρήσουμε την απλούστερη πολιτική που ονομάζεται **τυχαία περιπλάνηση**. + +## Τυχαία περιπλάνηση + +Ας λύσουμε πρώτα το πρόβλημά μας υλοποιώντας μια στρατηγική τυχαίας περιπλάνησης. Με την τυχαία περιπλάνηση, θα επιλέγουμε τυχαία την επόμενη ενέργεια από τις επιτρεπόμενες ενέργειες, μέχρι να φτάσουμε στο μήλο (code block 3). + +1. Υλοποιήστε την τυχαία περιπλάνηση με τον παρακάτω κώδικα: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + Η κλήση στη `walk` θα πρέπει να επιστρέψει το μήκος της αντίστοιχης διαδρομής, το οποίο μπορεί να διαφέρει από τη μία εκτέλεση στην άλλη. + +1. Εκτελέστε το πείραμα περιπλάνησης αρκετές φορές (π.χ. 100) και εκτυπώστε τα αποτελέσματα (code block 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) + ``` + + Σημειώστε ότι το μέσο μήκος μιας διαδρομής είναι περίπου 30-40 βήματα, που είναι αρκετά μεγάλο, δεδομένου ότι η μέση απόσταση από το πλησιέστερο μήλο είναι περίπου 5-6 βήματα. + + Μπορείτε επίσης να δείτε πώς φαίνεται η κίνηση του Πέτρου κατά την τυχαία περιπλάνηση: + + ![Τυχαία Περιπλάνηση του Πέτρου](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Συνάρτηση ανταμοιβής + +Για να κάνουμε την πολιτική μας πιο έξυπνη, πρέπει να κατανοήσουμε ποιες κινήσεις είναι "καλύτερες" από άλλες. Για να το κάνουμε αυτό, πρέπει να ορίσουμε τον στόχο μας. + +Ο στόχος μπορεί να οριστεί με όρους μιας **συνάρτησης ανταμοιβής**, η οποία θα επιστρέφει κάποια τιμή βαθμολογίας για κάθε κατάσταση. Όσο μεγαλύτερος ο αριθμός, τόσο καλύτερη η συνάρτηση ανταμοιβής. (code block 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 +``` + +Ένα ενδιαφέρον πράγμα σχετικά με τις συναρτήσεις ανταμοιβής είναι ότι στις περισσότερες περιπτώσεις, *λαμβάνουμε ουσιαστική ανταμοιβή μόνο στο τέλος του παιχνιδιού*. Αυτό σημαίνει ότι ο αλγόριθμός μας πρέπει με κάποιο τρόπο να θυμάται "καλές" κινήσεις που οδηγούν σε θετική ανταμοιβή στο τέλος και να αυξάνει τη σημασία τους. Παρομοίως, όλες οι κινήσεις που οδηγούν σε κακά αποτελέσματα πρέπει να αποθαρρύνονται. + +## Q-Learning + +Ο αλγόριθμος που θα συζητήσουμε εδώ ονομάζεται **Q-Learning**. Σε αυτόν τον αλγόριθμο, η πολιτική ορίζεται από μια συνάρτηση (ή μια δομή δεδομένων) που ονομάζεται **Q-Table**. Καταγράφει την "καλοσύνη" κάθε ενέργειας σε μια δεδομένη κατάσταση. + +Ονομάζεται Q-Table επειδή είναι συχνά βολικό να την αναπαραστήσουμε ως πίνακα ή πολυδιάστατο array. Δεδομένου ότι ο πίνακάς μας έχει διαστάσεις `width` x `height`, μπορούμε να αναπαραστήσουμε την Q-Table χρησιμοποιώντας ένα numpy array με σχήμα `width` x `height` x `len(actions)`: (code block 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Παρατηρήστε ότι αρχικοποιούμε όλες τις τιμές της Q-Table με ίση τιμή, στην περίπτωσή μας - 0.25. Αυτό αντιστοιχεί στην πολιτική "τυχαίας περιπλάνησης", επειδή όλες οι κινήσεις σε κάθε κατάσταση είναι εξίσου καλές. Μπορούμε να περάσουμε την Q-Table στη συνάρτηση `plot` για να οπτικοποιήσουμε τον πίνακα στον πίνακα: `m.plot(Q)`. + +![Περιβάλλον του Πέτρου](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +Στο κέντρο κάθε κελιού υπάρχει ένα "βέλος" που υποδεικνύει την προτιμώμενη κατεύθυνση κίνησης. Επειδή όλες οι κατευθύνσεις είναι ίσες, εμφανίζεται μια κουκκίδα. + +Τώρα πρέπει να εκτελέσουμε την προσομοίωση, να εξερευνήσουμε το περιβάλλον μας και να μάθουμε μια καλύτερη κατανομή τιμών Q-Table, η οποία θα μας επιτρέψει να βρούμε τον δρόμο προς το μήλο πολύ πιο γρήγορα. + +## Ουσία του Q-Learning: Εξίσωση Bellman + +Μόλις αρχίσουμε να κινούμαστε, κάθε ενέργεια θα έχει μια αντίστοιχη ανταμοιβή, δηλαδή θεωρητικά μπορούμε να επιλέξουμε την επόμενη ενέργεια με βάση την υψηλότερη άμεση ανταμοιβή. Ωστόσο, στις περισσότερες καταστάσεις, η κίνηση δεν θα επιτύχει τον στόχο μας να φτάσουμε στο μήλο, και έτσι δεν μπορούμε να αποφασίσουμε άμεσα ποια κατεύθυνση είναι καλύτερη. + +> Θυμηθείτε ότι δεν έχει σημασία το άμεσο αποτέλεσμα, αλλά μάλλον το τελικό αποτέλεσμα, το οποίο θα επιτύχουμε στο τέλος της προσομοίωσης. + +Για να λάβουμε υπόψη αυτήν την καθυστερημένη ανταμοιβή, πρέπει να χρησιμοποιήσουμε τις αρχές του **[δυναμικού προγραμματισμού](https://en.wikipedia.org/wiki/Dynamic_programming)**, που μας επιτρέπουν να σκεφτούμε το πρόβλημά μας αναδρομικά. + +Ας υποθέσουμε ότι βρισκόμαστε τώρα στην κατάσταση *s*, και θέλουμε να μετακινηθούμε στην επόμενη κατάσταση *s'*. Κάνοντας αυτό, θα λάβουμε την άμεση ανταμοιβή *r(s,a)*, που ορίζεται από τη συνάρτηση ανταμοιβής, συν κάποια μελλοντική ανταμοιβή. Αν υποθέσουμε ότι η Q-Table μας αντικατοπτρίζει σωστά την "ελκυστικότητα" κάθε ενέργειας, τότε στην κατάσταση *s'* θα επιλέξουμε μια ενέργεια *a* που αντιστοιχεί στη μέγιστη τιμή του *Q(s',a')*. Έτσι, η καλύτερη δυνατή μελλοντική ανταμοιβή που θα μπορούσαμε να λάβουμε στην κατάσταση *s* θα οριστεί ως `max` + +## Έλεγχος της πολιτικής + +Δεδομένου ότι ο Πίνακας Q (Q-Table) καταγράφει την "ελκυστικότητα" κάθε ενέργειας σε κάθε κατάσταση, είναι αρκετά εύκολο να τον χρησιμοποιήσουμε για να ορίσουμε την αποδοτική πλοήγηση στον κόσμο μας. Στην πιο απλή περίπτωση, μπορούμε να επιλέξουμε την ενέργεια που αντιστοιχεί στη μεγαλύτερη τιμή του Πίνακα Q: (κώδικας 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 στο notebook για να τον διακόψετε. Αυτό συμβαίνει επειδή μπορεί να υπάρχουν καταστάσεις όπου δύο καταστάσεις "δείχνουν" η μία την άλλη με βάση τη βέλτιστη τιμή Q, οπότε ο πράκτορας καταλήγει να κινείται μεταξύ αυτών των καταστάσεων επ' αόριστον. + +## 🚀Πρόκληση + +> **Εργασία 1:** Τροποποιήστε τη συνάρτηση `walk` ώστε να περιορίσετε το μέγιστο μήκος της διαδρομής σε έναν συγκεκριμένο αριθμό βημάτων (π.χ., 100) και παρατηρήστε τον παραπάνω κώδικα να επιστρέφει αυτή την τιμή κατά διαστήματα. + +> **Εργασία 2:** Τροποποιήστε τη συνάρτηση `walk` ώστε να μην επιστρέφει σε μέρη που έχει ήδη επισκεφθεί. Αυτό θα αποτρέψει τη `walk` από το να επαναλαμβάνει βρόχους, ωστόσο, ο πράκτορας μπορεί ακόμα να "παγιδευτεί" σε μια τοποθεσία από την οποία δεν μπορεί να διαφύγει. + +## Πλοήγηση + +Μια καλύτερη πολιτική πλοήγησης θα ήταν αυτή που χρησιμοποιήσαμε κατά την εκπαίδευση, η οποία συνδυάζει εκμετάλλευση και εξερεύνηση. Σε αυτή την πολιτική, θα επιλέγουμε κάθε ενέργεια με μια συγκεκριμένη πιθανότητα, ανάλογη με τις τιμές στον Πίνακα Q. Αυτή η στρατηγική μπορεί ακόμα να οδηγήσει τον πράκτορα να επιστρέψει σε μια θέση που έχει ήδη εξερευνήσει, αλλά, όπως μπορείτε να δείτε από τον παρακάτω κώδικα, οδηγεί σε πολύ μικρότερο μέσο μήκος διαδρομής προς την επιθυμητή τοποθεσία (θυμηθείτε ότι το `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 αντικαθιστώντας τους με νέες τιμές. Αυτό ιδανικά θα πρέπει να ελαχιστοποιηθεί μειώνοντας τον ρυθμό μάθησης (για παράδειγμα, προς το τέλος της εκπαίδευσης, προσαρμόζουμε τις τιμές του Πίνακα Q μόνο κατά μια μικρή τιμή). + +Συνολικά, είναι σημαντικό να θυμόμαστε ότι η επιτυχία και η ποιότητα της διαδικασίας μάθησης εξαρτώνται σημαντικά από παραμέτρους, όπως ο ρυθμός μάθησης, η μείωση του ρυθμού μάθησης και ο συντελεστής έκπτωσης. Αυτές συχνά ονομάζονται **υπερπαράμετροι**, για να διακριθούν από τις **παραμέτρους**, τις οποίες βελτιστοποιούμε κατά την εκπαίδευση (για παράδειγμα, τους συντελεστές του Πίνακα Q). Η διαδικασία εύρεσης των καλύτερων τιμών υπερπαραμέτρων ονομάζεται **βελτιστοποίηση υπερπαραμέτρων** και αξίζει ξεχωριστή ανάλυση. + +## [Κουίζ μετά τη διάλεξη](https://ff-quizzes.netlify.app/en/ml/) + +## Ανάθεση +[Ένας Πιο Ρεαλιστικός Κόσμος](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/1-QLearning/assignment.md b/translations/el/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 000000000..9ad7b6b86 --- /dev/null +++ b/translations/el/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Ένας Πιο Ρεαλιστικός Κόσμος + +Στην περίπτωσή μας, ο Πέτρος μπορούσε να κινείται σχεδόν χωρίς να κουράζεται ή να πεινάει. Σε έναν πιο ρεαλιστικό κόσμο, πρέπει να κάθεται και να ξεκουράζεται από καιρό σε καιρό, καθώς και να τρέφεται. Ας κάνουμε τον κόσμο μας πιο ρεαλιστικό, εφαρμόζοντας τους παρακάτω κανόνες: + +1. Μετακινούμενος από ένα μέρος σε άλλο, ο Πέτρος χάνει **ενέργεια** και αποκτά **κούραση**. +2. Ο Πέτρος μπορεί να αποκτήσει περισσότερη ενέργεια τρώγοντας μήλα. +3. Ο Πέτρος μπορεί να απαλλαγεί από την κούραση ξεκουραζόμενος κάτω από το δέντρο ή στο γρασίδι (δηλαδή περπατώντας σε μια θέση του πίνακα που έχει δέντρο ή γρασίδι - πράσινο πεδίο). +4. Ο Πέτρος πρέπει να βρει και να σκοτώσει τον λύκο. +5. Για να σκοτώσει τον λύκο, ο Πέτρος πρέπει να έχει συγκεκριμένα επίπεδα ενέργειας και κούρασης, διαφορετικά χάνει τη μάχη. + +## Οδηγίες + +Χρησιμοποιήστε το αρχικό [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) ως σημείο εκκίνησης για τη λύση σας. + +Τροποποιήστε τη συνάρτηση ανταμοιβής σύμφωνα με τους κανόνες του παιχνιδιού, εκτελέστε τον αλγόριθμο ενισχυτικής μάθησης για να μάθετε την καλύτερη στρατηγική για να κερδίσετε το παιχνίδι και συγκρίνετε τα αποτελέσματα της τυχαίας περιήγησης με τον αλγόριθμό σας όσον αφορά τον αριθμό των παιχνιδιών που κερδήθηκαν και χάθηκαν. + +> **Note**: Στον νέο σας κόσμο, η κατάσταση είναι πιο σύνθετη και, εκτός από τη θέση του ανθρώπου, περιλαμβάνει επίσης επίπεδα κούρασης και ενέργειας. Μπορείτε να επιλέξετε να εκπροσωπήσετε την κατάσταση ως μια πλειάδα (Πίνακας, ενέργεια, κούραση), να ορίσετε μια κλάση για την κατάσταση (μπορείτε επίσης να την παραγάγετε από την `Board`), ή ακόμα και να τροποποιήσετε την αρχική κλάση `Board` μέσα στο [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Στη λύση σας, παρακαλώ διατηρήστε τον κώδικα που είναι υπεύθυνος για τη στρατηγική τυχαίας περιήγησης και συγκρίνετε τα αποτελέσματα του αλγορίθμου σας με την τυχαία περιήγηση στο τέλος. + +> **Note**: Ίσως χρειαστεί να προσαρμόσετε τις υπερπαραμέτρους για να λειτουργήσει, ειδικά τον αριθμό των εποχών. Επειδή η επιτυχία του παιχνιδιού (η μάχη με τον λύκο) είναι ένα σπάνιο γεγονός, μπορείτε να περιμένετε πολύ μεγαλύτερο χρόνο εκπαίδευσης. + +## Κριτήρια Αξιολόγησης + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Παρουσιάζεται ένα σημειωματάριο με τον ορισμό των νέων κανόνων του κόσμου, τον αλγόριθμο Q-Learning και κάποιες κειμενικές εξηγήσεις. Το Q-Learning βελτιώνει σημαντικά τα αποτελέσματα σε σύγκριση με την τυχαία περιήγηση. | Παρουσιάζεται σημειωματάριο, το Q-Learning υλοποιείται και βελτιώνει τα αποτελέσματα σε σύγκριση με την τυχαία περιήγηση, αλλά όχι σημαντικά· ή το σημειωματάριο είναι κακώς τεκμηριωμένο και ο κώδικας δεν είναι καλά δομημένος. | Γίνεται κάποια προσπάθεια να επαναπροσδιοριστούν οι κανόνες του κόσμου, αλλά ο αλγόριθμος Q-Learning δεν λειτουργεί ή η συνάρτηση ανταμοιβής δεν είναι πλήρως ορισμένη. | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/el/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 000000000..38f77b54c --- /dev/null +++ b/translations/el/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/el/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 000000000..e9b8401f4 --- /dev/null +++ b/translations/el/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/2-Gym/README.md b/translations/el/8-Reinforcement/2-Gym/README.md new file mode 100644 index 000000000..0423483b8 --- /dev/null +++ b/translations/el/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,331 @@ + +## Προαπαιτούμενα + +Σε αυτό το μάθημα, θα χρησιμοποιήσουμε μια βιβλιοθήκη που ονομάζεται **OpenAI Gym** για να προσομοιώσουμε διαφορετικά **περιβάλλοντα**. Μπορείτε να εκτελέσετε τον κώδικα αυτού του μαθήματος τοπικά (π.χ. από το Visual Studio Code), οπότε η προσομοίωση θα ανοίξει σε νέο παράθυρο. Όταν εκτελείτε τον κώδικα online, ίσως χρειαστεί να κάνετε κάποιες τροποποιήσεις, όπως περιγράφεται [εδώ](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/). Χρησιμοποιώντας αυτό το gym μπορούμε να δημιουργήσουμε διάφορα **περιβάλλοντα**, από προσομοίωση cartpole έως παιχνίδια Atari. + +> **Σημείωση**: Μπορείτε να δείτε άλλα διαθέσιμα περιβάλλοντα από το OpenAI Gym [εδώ](https://gym.openai.com/envs/#classic_control). + +Αρχικά, ας εγκαταστήσουμε το gym και να εισάγουμε τις απαραίτητες βιβλιοθήκες (code block 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Άσκηση - αρχικοποίηση περιβάλλοντος cartpole + +Για να δουλέψουμε με το πρόβλημα ισορροπίας του cartpole, πρέπει να αρχικοποιήσουμε το αντίστοιχο περιβάλλον. Κάθε περιβάλλον συνδέεται με: + +- **Observation space** που ορίζει τη δομή των πληροφοριών που λαμβάνουμε από το περιβάλλον. Στο πρόβλημα του cartpole, λαμβάνουμε τη θέση του πόλου, την ταχύτητα και κάποιες άλλες τιμές. + +- **Action space** που ορίζει τις δυνατές ενέργειες. Στην περίπτωσή μας, το action space είναι διακριτό και αποτελείται από δύο ενέργειες - **αριστερά** και **δεξιά**. (code block 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! (code block 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Θα πρέπει να βλέπετε κάτι παρόμοιο με αυτήν την εικόνα: + + ![μη ισορροπημένο cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Κατά τη διάρκεια της προσομοίωσης, πρέπει να λαμβάνουμε παρατηρήσεις για να αποφασίσουμε πώς να δράσουμε. Στην πραγματικότητα, η συνάρτηση step επιστρέφει τις τρέχουσες παρατηρήσεις, μια συνάρτηση ανταμοιβής και τη σημαία done που υποδεικνύει αν έχει νόημα να συνεχίσουμε την προσομοίωση ή όχι: (code block 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() + ``` + + Θα καταλήξετε να βλέπετε κάτι σαν αυτό στην έξοδο του 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 + ``` + + Το διάνυσμα παρατήρησης που επιστρέφεται σε κάθε βήμα της προσομοίωσης περιέχει τις εξής τιμές: + - Θέση του καροτσιού + - Ταχύτητα του καροτσιού + - Γωνία του πόλου + - Ρυθμός περιστροφής του πόλου + +1. Βρείτε την ελάχιστη και μέγιστη τιμή αυτών των αριθμών: (code block 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Μπορεί επίσης να παρατηρήσετε ότι η τιμή ανταμοιβής σε κάθε βήμα της προσομοίωσης είναι πάντα 1. Αυτό συμβαίνει επειδή ο στόχος μας είναι να επιβιώσουμε όσο το δυνατόν περισσότερο, δηλαδή να διατηρήσουμε τον πόλο σε μια σχετικά κάθετη θέση για τη μεγαλύτερη δυνατή χρονική περίοδο. + + ✅ Στην πραγματικότητα, η προσομοίωση CartPole θεωρείται λυμένη αν καταφέρουμε να πετύχουμε μέση ανταμοιβή 195 σε 100 συνεχόμενες δοκιμές. + +## Διακριτοποίηση κατάστασης + +Στο Q-Learning, πρέπει να δημιουργήσουμε έναν Πίνακα Q που ορίζει τι να κάνουμε σε κάθε κατάσταση. Για να το κάνουμε αυτό, η κατάσταση πρέπει να είναι **διακριτή**, πιο συγκεκριμένα, πρέπει να περιέχει πεπερασμένο αριθμό διακριτών τιμών. Έτσι, πρέπει με κάποιο τρόπο να **διακριτοποιήσουμε** τις παρατηρήσεις μας, αντιστοιχίζοντάς τες σε ένα πεπερασμένο σύνολο καταστάσεων. + +Υπάρχουν μερικοί τρόποι να το κάνουμε αυτό: + +- **Διαίρεση σε διαστήματα**. Αν γνωρίζουμε το εύρος μιας συγκεκριμένης τιμής, μπορούμε να διαιρέσουμε αυτό το εύρος σε έναν αριθμό **διαστημάτων** και στη συνέχεια να αντικαταστήσουμε την τιμή με τον αριθμό του διαστήματος στο οποίο ανήκει. Αυτό μπορεί να γίνει χρησιμοποιώντας τη μέθοδο [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) της numpy. Σε αυτή την περίπτωση, θα γνωρίζουμε ακριβώς το μέγεθος της κατάστασης, καθώς θα εξαρτάται από τον αριθμό των διαστημάτων που επιλέγουμε για την ψηφιοποίηση. + +✅ Μπορούμε να χρησιμοποιήσουμε γραμμική παρεμβολή για να φέρουμε τις τιμές σε κάποιο πεπερασμένο εύρος (π.χ. από -20 έως 20) και στη συνέχεια να μετατρέψουμε τους αριθμούς σε ακέραιους στρογγυλοποιώντας τους. Αυτό μας δίνει λίγο λιγότερο έλεγχο στο μέγεθος της κατάστασης, ειδικά αν δεν γνωρίζουμε τα ακριβή εύρη των τιμών εισόδου. Για παράδειγμα, στην περίπτωσή μας, 2 από τις 4 τιμές δεν έχουν ανώτερα/κατώτερα όρια, κάτι που μπορεί να οδηγήσει σε άπειρο αριθμό καταστάσεων. + +Στο παράδειγμά μας, θα ακολουθήσουμε τη δεύτερη προσέγγιση. Όπως θα παρατηρήσετε αργότερα, παρά τα απροσδιόριστα ανώτερα/κατώτερα όρια, αυτές οι τιμές σπάνια λαμβάνουν τιμές εκτός ορισμένων πεπερασμένων εύρων, επομένως αυτές οι καταστάσεις με ακραίες τιμές θα είναι πολύ σπάνιες. + +1. Εδώ είναι η συνάρτηση που θα πάρει την παρατήρηση από το μοντέλο μας και θα παράγει μια πλειάδα από 4 ακέραιες τιμές: (code block 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Ας εξερευνήσουμε επίσης μια άλλη μέθοδο διακριτοποίησης χρησιμοποιώντας διαστήματα: (code block 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` όσο και το `discretize_bins` και δείτε αν υπάρχει διαφορά. + + ✅ Το discretize_bins επιστρέφει τον αριθμό του διαστήματος, που ξεκινά από το 0. Έτσι, για τιμές της μεταβλητής εισόδου γύρω στο 0 επιστρέφει τον αριθμό από το μέσο του εύρους (10). Στο discretize, δεν μας ένοιαζε το εύρος των τιμών εξόδου, επιτρέποντάς τους να είναι αρνητικές, επομένως οι τιμές κατάστασης δεν μετατοπίζονται και το 0 αντιστοιχεί στο 0. (code block 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-Learning. + +## Η δομή του Πίνακα Q + +Στο προηγούμενο μάθημα, η κατάσταση ήταν ένα απλό ζεύγος αριθμών από το 0 έως το 8, και έτσι ήταν βολικό να αναπαραστήσουμε τον Πίνακα Q με έναν πίνακα numpy με σχήμα 8x8x2. Αν χρησιμοποιήσουμε τη διακριτοποίηση με διαστήματα, το μέγεθος του διανύσματος κατάστασης μας είναι επίσης γνωστό, οπότε μπορούμε να χρησιμοποιήσουμε την ίδια προσέγγιση και να αναπαραστήσουμε την κατάσταση με έναν πίνακα σχήματος 20x20x10x10x2 (εδώ το 2 είναι η διάσταση του action space και οι πρώτες διαστάσεις αντιστοιχούν στον αριθμό των διαστημάτων που έχουμε επιλέξει να χρησιμοποιήσουμε για κάθε μία από τις παραμέτρους στο observation space). + +Ωστόσο, μερικές φορές οι ακριβείς διαστάσεις του observation space δεν είναι γνωστές. Στην περίπτωση της συνάρτησης `discretize`, μπορεί να μην είμαστε ποτέ σίγουροι ότι η κατάστασή μας παραμένει εντός ορισμένων ορίων, επειδή ορισμένες από τις αρχικές τιμές δεν είναι περιορισμένες. Έτσι, θα χρησιμοποιήσουμε μια ελαφρώς διαφορετική προσέγγιση και θα αναπαραστήσουμε τον Πίνακα Q με ένα λεξικό. + +1. Χρησιμοποιήστε το ζεύγος *(state,action)* ως το κλειδί του λεξικού και η τιμή θα αντιστοιχεί στην τιμή του Πίνακα Q. (code block 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Εδώ ορίζουμε επίσης μια συνάρτηση `qvalues()`, η οποία επιστρέφει μια λίστα τιμών του Πίνακα Q για μια δεδομένη κατάσταση που αντιστοιχεί σε όλες τις δυνατές ενέργειες. Αν η εγγραφή δεν υπάρχει στον Πίνακα Q, θα επιστρέψουμε 0 ως προεπιλογή. + +## Ας ξεκινήσουμε το Q-Learning + +Τώρα είμαστε έτοιμοι να διδάξουμε στον Πέτρο πώς να ισορροπεί! + +1. Πρώτα, ας ορίσουμε κάποιες υπερπαραμέτρους: (code block 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Εδώ, το `alpha` είναι ο **ρυθμός μάθησης** που καθορίζει σε ποιο βαθμό πρέπει να προσαρμόζουμε τις τρέχουσες τιμές του Πίνακα Q σε κάθε βήμα. Στο προηγούμενο μάθημα ξεκινήσαμε με 1 και στη συνέχεια μειώσαμε το `alpha` σε χαμηλότερες τιμές κατά την εκπαίδευση. Σε αυτό το παράδειγμα θα το κρατήσουμε σταθερό για απλότητα, και μπορείτε να πειραματιστείτε με την προσαρμογή των τιμών του `alpha` αργότερα. + + Το `gamma` είναι ο **παράγοντας έκπτωσης** που δείχνει σε ποιο βαθμό πρέπει να δίνουμε προτεραιότητα στη μελλοντική ανταμοιβή έναντι της τρέχουσας ανταμοιβής. + + Το `epsilon` είναι ο **παράγοντας εξερεύνησης/εκμετάλλευσης** που καθορίζει αν πρέπει να προτιμούμε την εξερεύνηση ή την εκμετάλλευση. Στον αλγόριθμό μας, σε ποσοστό `epsilon` των περιπτώσεων θα επιλέγουμε την επόμενη ενέργεια σύμφωνα με τις τιμές του Πίνακα Q, και στις υπόλοιπες περιπτώσεις θα εκτελούμε μια τυχαία ενέργεια. Αυτό θα μας επιτρέψει να εξερευνήσουμε περιοχές του χώρου αναζήτησης που δεν έχουμε δει ποτέ πριν. + + ✅ Όσον αφορά την ισορροπία - η επιλογή τυχαίας ενέργειας (εξερεύνηση) θα λειτουργεί σαν ένα τυχαίο χτύπημα προς τη λάθος κατεύθυνση, και ο πόλος θα πρέπει να μάθει πώς να ανακτά την ισορροπία από αυτά τα "λάθη". + +### Βελτίωση του αλγορίθμου + +Μπορούμε επίσης να κάνουμε δύο βελτιώσεις στον αλγόριθμό μας από το προηγούμενο μάθημα: + +- **Υπολογισμός μέσης σωρευτικής ανταμοιβής**, σε έναν αριθμό προσομοιώσεων. Θα εκτυπώνουμε την πρόοδο κάθε 5000 επαναλήψεις και θα υπολογίζουμε τη μέση σωρευτική ανταμοιβή σε αυτή την περίοδο. Αυτό σημαίνει ότι αν πετύχουμε περισσότερους από 195 πόντους - μπορούμε να θεωρήσουμε το πρόβλημα λυμένο, με ακόμη υψηλότερη ποιότητα από την απαιτούμενη. + +- **Υπολογισμός μέγιστης μέσης σωρευτικής ανταμοιβής**, `Qmax`, και θα αποθηκεύουμε τον Πίνακα Q που αντιστοιχεί σε αυτό το αποτέλεσμα. Όταν εκτελείτε την εκπαίδευση, θα παρατηρήσετε ότι μερικές φορές η μέση σωρευτική ανταμοιβή αρχίζει να μειώνεται, και θέλουμε να διατηρήσουμε τις τιμές του Πίνακα Q που αντιστοιχούν στο καλύτερο μοντέλο που παρατηρήθηκε κατά την εκπαίδευση. + +1. Συλλέξτε όλες τις σωρευτικές ανταμοιβές σε κάθε προσομοίωση στο διάνυσμα `rewards` για περαιτέρω σχεδίαση. (code block 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=[] + ``` + +Αυτό που μπορεί να παρατηρήσετε από αυτά τα αποτελέσματα: + +- **Κοντά στον στόχο μας**. Είμαστε πολύ κοντά στην επίτευξη του στόχου να πετύχουμε 195 σωρευτικές ανταμοιβές σε 100+ συνεχόμενες εκτελέσεις της προσομοίωσης, ή μπορεί να το έχουμε ήδη πετύχει! Ακόμα κι αν πετύχουμε μικρότερους αριθμούς, δεν το γνωρίζουμε, επειδή υπολογίζουμε τον μέσο όρο σε 5000 εκτελέσεις, και μόνο 100 εκτελέσεις απαιτούνται στα επίσημα κριτήρια. + +- **Η ανταμοιβή αρχίζει να μειώνεται**. Μερικές φορές η ανταμοιβή αρχίζει να μειώνεται, κάτι που σημαίνει ότι μπορούμε να "καταστρέψουμε" ήδη μαθημένες τιμές στον Πίνακα Q με αυτές που κάνουν την κατάσταση χειρότερη. + +Αυτή η παρατήρηση είναι πιο εμφανής αν σχεδιάσουμε την πρόοδο της εκπαίδευσης. + +## Σχεδίαση Προόδου Εκπαίδευσης + +Κατά την εκπαίδευση, έχουμε συλλέξει την τιμή σωρευτικής ανταμοιβής σε κάθε μία από τις επαναλήψεις στο διάνυσμα `rewards`. Εδώ είναι πώς φαίνεται όταν το σχεδιάζουμε σε σχέση με τον αριθμό επαναλήψεων: + +```python +plt.plot(rewards) +``` + +![ακατέργαστη πρόοδος](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Από αυτό το γράφημα, δεν είναι δυνατό να πούμε κάτι, επειδή λόγω της φύσης της στοχαστικής διαδικασίας εκπαίδευσης το μήκος των συνεδριών εκπαίδευσης ποικίλλει πολύ. Για να βγάλουμε περισσότερο νόημα από αυτό το γράφημα, μπορούμε να υπολογίσουμε τον **κινούμενο μέσο όρο** σε μια σειρά πειραμάτων, ας πούμε 100. Αυτό μπορεί να γίνει εύκολα χρησιμοποιώντας το `np.convolve`: (code block 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![πρόοδος εκπαίδευσης](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Μεταβολή υπερπαραμέτρων + +Για να κάνουμε τη μάθηση πιο σταθερή, έχει νόημα να προσαρμόσουμε κάποιες από τις υπερπαραμέτρους μας κατά την εκπαίδευση. Συγκεκριμένα: + +- **Για τον ρυθμό μάθησης**, `alpha`, μπορούμε να ξεκιν +> **Εργασία 1**: Πειραματιστείτε με τις τιμές των υπερπαραμέτρων και δείτε αν μπορείτε να πετύχετε υψηλότερη συνολική ανταμοιβή. Φτάνετε πάνω από 195; +> **Εργασία 2**: Για να λύσετε επίσημα το πρόβλημα, πρέπει να πετύχετε μέσο όρο ανταμοιβής 195 σε 100 συνεχόμενες εκτελέσεις. Μετρήστε το κατά τη διάρκεια της εκπαίδευσης και βεβαιωθείτε ότι έχετε λύσει επίσημα το πρόβλημα! + +## Βλέποντας το αποτέλεσμα σε δράση + +Θα ήταν ενδιαφέρον να δούμε πώς συμπεριφέρεται το εκπαιδευμένο μοντέλο. Ας τρέξουμε τη προσομοίωση και ακολουθήσουμε την ίδια στρατηγική επιλογής ενεργειών όπως κατά την εκπαίδευση, δειγματοληπτώντας σύμφωνα με την κατανομή πιθανότητας στον Q-Table: (code block 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-Table, η οποία μπορεί να μην είναι η καλύτερη. Θυμηθείτε ότι έχουμε αποθηκεύσει το Q-Table με την καλύτερη απόδοση στη μεταβλητή `Qbest`! Δοκιμάστε το ίδιο παράδειγμα με το Q-Table με την καλύτερη απόδοση, αντιγράφοντας το `Qbest` στο `Q` και δείτε αν παρατηρείτε τη διαφορά. + +> **Εργασία 4**: Εδώ δεν επιλέγαμε την καλύτερη ενέργεια σε κάθε βήμα, αλλά δειγματοληπτούσαμε με την αντίστοιχη κατανομή πιθανότητας. Θα είχε περισσότερο νόημα να επιλέγουμε πάντα την καλύτερη ενέργεια, με τη μεγαλύτερη τιμή στο Q-Table; Αυτό μπορεί να γίνει χρησιμοποιώντας τη συνάρτηση `np.argmax` για να βρούμε τον αριθμό της ενέργειας που αντιστοιχεί στη μεγαλύτερη τιμή του Q-Table. Υλοποιήστε αυτή τη στρατηγική και δείτε αν βελτιώνει την ισορροπία. + +## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +## Εργασία +[Εκπαιδεύστε ένα Mountain Car](assignment.md) + +## Συμπέρασμα + +Μάθαμε πλέον πώς να εκπαιδεύουμε πράκτορες ώστε να πετυχαίνουν καλά αποτελέσματα απλώς παρέχοντάς τους μια συνάρτηση ανταμοιβής που ορίζει την επιθυμητή κατάσταση του παιχνιδιού και δίνοντάς τους την ευκαιρία να εξερευνήσουν έξυπνα τον χώρο αναζήτησης. Εφαρμόσαμε με επιτυχία τον αλγόριθμο Q-Learning σε περιπτώσεις διακριτών και συνεχών περιβαλλόντων, αλλά με διακριτές ενέργειες. + +Είναι σημαντικό να μελετήσουμε επίσης καταστάσεις όπου η κατάσταση των ενεργειών είναι επίσης συνεχής και όταν ο χώρος παρατήρησης είναι πολύ πιο περίπλοκος, όπως η εικόνα από την οθόνη του παιχνιδιού Atari. Σε αυτά τα προβλήματα συχνά χρειάζεται να χρησιμοποιήσουμε πιο ισχυρές τεχνικές μηχανικής μάθησης, όπως νευρωνικά δίκτυα, για να πετύχουμε καλά αποτελέσματα. Αυτά τα πιο προχωρημένα θέματα είναι το αντικείμενο του επερχόμενου πιο προχωρημένου μαθήματος AI. + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/2-Gym/assignment.md b/translations/el/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 000000000..cb4c9551e --- /dev/null +++ b/translations/el/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,57 @@ + +# Εκπαίδευση Mountain Car + +[OpenAI Gym](http://gym.openai.com) έχει σχεδιαστεί με τέτοιο τρόπο ώστε όλα τα περιβάλλοντα να παρέχουν το ίδιο API - δηλαδή τις ίδιες μεθόδους `reset`, `step` και `render`, και τις ίδιες αφαιρέσεις του **χώρου δράσεων** και του **χώρου παρατηρήσεων**. Έτσι, θα πρέπει να είναι δυνατό να προσαρμοστούν οι ίδιοι αλγόριθμοι ενισχυτικής μάθησης σε διαφορετικά περιβάλλοντα με ελάχιστες αλλαγές στον κώδικα. + +## Περιβάλλον Mountain Car + +Το [περιβάλλον Mountain Car](https://gym.openai.com/envs/MountainCar-v0/) περιλαμβάνει ένα αυτοκίνητο που έχει κολλήσει σε μια κοιλάδα: + +Ο στόχος είναι να βγει από την κοιλάδα και να πιάσει τη σημαία, κάνοντας σε κάθε βήμα μία από τις παρακάτω ενέργειες: + +| Τιμή | Σημασία | +|---|---| +| 0 | Επιτάχυνση προς τα αριστερά | +| 1 | Χωρίς επιτάχυνση | +| 2 | Επιτάχυνση προς τα δεξιά | + +Το κύριο κόλπο αυτού του προβλήματος είναι, ωστόσο, ότι η μηχανή του αυτοκινήτου δεν είναι αρκετά ισχυρή για να ανέβει το βουνό με μία μόνο προσπάθεια. Επομένως, ο μόνος τρόπος για να πετύχει είναι να κινείται μπρος-πίσω για να αποκτήσει ορμή. + +Ο χώρος παρατηρήσεων αποτελείται μόνο από δύο τιμές: + +| Αριθμός | Παρατήρηση | Ελάχιστο | Μέγιστο | +|-----|--------------|-----|-----| +| 0 | Θέση Αυτοκινήτου | -1.2 | 0.6 | +| 1 | Ταχύτητα Αυτοκινήτου | -0.07 | 0.07 | + +Το σύστημα ανταμοιβής για το Mountain Car είναι αρκετά περίπλοκο: + + * Ανταμοιβή 0 δίνεται αν ο πράκτορας φτάσει τη σημαία (θέση = 0.5) στην κορυφή του βουνού. + * Ανταμοιβή -1 δίνεται αν η θέση του πράκτορα είναι μικρότερη από 0.5. + +Το επεισόδιο τερματίζεται αν η θέση του αυτοκινήτου είναι μεγαλύτερη από 0.5 ή αν το μήκος του επεισοδίου υπερβαίνει τα 200 βήματα. + +## Οδηγίες + +Προσαρμόστε τον αλγόριθμο ενισχυτικής μάθησης μας για να λύσετε το πρόβλημα του Mountain Car. Ξεκινήστε με τον υπάρχοντα κώδικα στο [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb), αντικαταστήστε το νέο περιβάλλον, αλλάξτε τις συναρτήσεις διακριτοποίησης κατάστασης και προσπαθήστε να κάνετε τον υπάρχοντα αλγόριθμο να εκπαιδευτεί με ελάχιστες τροποποιήσεις στον κώδικα. Βελτιστοποιήστε το αποτέλεσμα προσαρμόζοντας τις υπερπαραμέτρους. + +> **Σημείωση**: Η προσαρμογή των υπερπαραμέτρων πιθανότατα θα χρειαστεί για να συγκλίνει ο αλγόριθμος. + +## Κριτήρια Αξιολόγησης + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | --------- | -------- | ----------------- | +| | Ο αλγόριθμος Q-Learning έχει προσαρμοστεί επιτυχώς από το παράδειγμα του CartPole, με ελάχιστες τροποποιήσεις στον κώδικα, και είναι σε θέση να λύσει το πρόβλημα της κατάκτησης της σημαίας σε λιγότερα από 200 βήματα. | Ένας νέος αλγόριθμος Q-Learning έχει υιοθετηθεί από το Διαδίκτυο, αλλά είναι καλά τεκμηριωμένος· ή ο υπάρχων αλγόριθμος έχει υιοθετηθεί, αλλά δεν φτάνει στα επιθυμητά αποτελέσματα. | Ο μαθητής δεν κατάφερε να υιοθετήσει επιτυχώς κανέναν αλγόριθμο, αλλά έχει κάνει σημαντικά βήματα προς τη λύση (υλοποίησε διακριτοποίηση κατάστασης, δομή δεδομένων Q-Table, κ.λπ.) | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/el/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 000000000..cba982ec8 --- /dev/null +++ b/translations/el/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + +Αυτό είναι ένα προσωρινό σύμβολο κράτησης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/2-Gym/solution/R/README.md b/translations/el/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 000000000..0c5a4903d --- /dev/null +++ b/translations/el/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +αυτό είναι ένας προσωρινός δείκτης θέσης + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/8-Reinforcement/README.md b/translations/el/8-Reinforcement/README.md new file mode 100644 index 000000000..f9f2b864b --- /dev/null +++ b/translations/el/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Εισαγωγή στη μάθηση ενίσχυσης + +Η μάθηση ενίσχυσης, RL, θεωρείται ένα από τα βασικά παραδείγματα μηχανικής μάθησης, δίπλα στη μάθηση με επίβλεψη και τη μάθηση χωρίς επίβλεψη. Η RL αφορά τις αποφάσεις: τη λήψη σωστών αποφάσεων ή τουλάχιστον τη μάθηση από αυτές. + +Φανταστείτε ότι έχετε ένα προσομοιωμένο περιβάλλον, όπως η χρηματιστηριακή αγορά. Τι συμβαίνει αν επιβάλλετε έναν συγκεκριμένο κανονισμό; Έχει θετική ή αρνητική επίδραση; Αν συμβεί κάτι αρνητικό, πρέπει να λάβετε αυτήν την _αρνητική ενίσχυση_, να μάθετε από αυτήν και να αλλάξετε πορεία. Αν το αποτέλεσμα είναι θετικό, πρέπει να χτίσετε πάνω σε αυτήν την _θετική ενίσχυση_. + +![ο Πέτρος και ο λύκος](../../../8-Reinforcement/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). Είναι η ιστορία του νεαρού πρωτοπόρου Πέτρου, που θαρραλέα βγαίνει από το σπίτι του στο ξέφωτο του δάσους για να κυνηγήσει τον λύκο. Σε αυτήν την ενότητα, θα εκπαιδεύσουμε αλγόριθμους μηχανικής μάθησης που θα βοηθήσουν τον Πέτρο: + +- **Να εξερευνήσει** την γύρω περιοχή και να δημιουργήσει έναν βέλτιστο χάρτη πλοήγησης +- **Να μάθει** πώς να χρησιμοποιεί ένα skateboard και να ισορροπεί πάνω σε αυτό, ώστε να κινείται πιο γρήγορα. + +[![Ο Πέτρος και ο Λύκος](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)**, στην οποία ένας πράκτορας μαθαίνει πώς να συμπεριφέρεται πραγματοποιώντας πειράματα σε ένα προσομοιωμένο περιβάλλον. + +### Παράδειγμα - παιχνίδι υπολογιστή + +Ας υποθέσουμε ότι θέλετε να διδάξετε έναν υπολογιστή να παίζει ένα παιχνίδι, όπως σκάκι ή [Super Mario](https://wikipedia.org/wiki/Super_Mario). Για να παίξει ο υπολογιστής ένα παιχνίδι, πρέπει να προβλέψει ποια κίνηση να κάνει σε κάθε κατάσταση του παιχνιδιού. Ενώ αυτό μπορεί να φαίνεται σαν πρόβλημα ταξινόμησης, δεν είναι - επειδή δεν έχουμε ένα σύνολο δεδομένων με καταστάσεις και αντίστοιχες ενέργειες. Παρόλο που μπορεί να έχουμε δεδομένα όπως υπάρχοντες αγώνες σκακιού ή εγγραφές παικτών που παίζουν Super Mario, είναι πιθανό αυτά τα δεδομένα να μην καλύπτουν επαρκώς μεγάλο αριθμό πιθανών καταστάσεων. + +Αντί να αναζητούμε υπάρχοντα δεδομένα παιχνιδιού, η **Μάθηση Ενίσχυσης** (RL) βασίζεται στην ιδέα του *να κάνουμε τον υπολογιστή να παίξει* πολλές φορές και να παρατηρήσουμε το αποτέλεσμα. Έτσι, για να εφαρμόσουμε τη Μάθηση Ενίσχυσης, χρειαζόμαστε δύο πράγματα: + +- **Ένα περιβάλλον** και **έναν προσομοιωτή** που μας επιτρέπουν να παίξουμε ένα παιχνίδι πολλές φορές. Αυτός ο προσομοιωτής θα ορίζει όλους τους κανόνες του παιχνιδιού καθώς και τις πιθανές καταστάσεις και ενέργειες. + +- **Μια συνάρτηση ανταμοιβής**, που θα μας λέει πόσο καλά τα πήγαμε κατά τη διάρκεια κάθε κίνησης ή παιχνιδιού. + +Η κύρια διαφορά μεταξύ άλλων τύπων μηχανικής μάθησης και RL είναι ότι στη RL συνήθως δεν γνωρίζουμε αν κερδίζουμε ή χάνουμε μέχρι να τελειώσει το παιχνίδι. Έτσι, δεν μπορούμε να πούμε αν μια συγκεκριμένη κίνηση από μόνη της είναι καλή ή όχι - λαμβάνουμε ανταμοιβή μόνο στο τέλος του παιχνιδιού. Και ο στόχος μας είναι να σχεδιάσουμε αλγόριθμους που θα μας επιτρέψουν να εκπαιδεύσουμε ένα μοντέλο υπό αβέβαιες συνθήκες. Θα μάθουμε για έναν αλγόριθμο RL που ονομάζεται **Q-learning**. + +## Μαθήματα + +1. [Εισαγωγή στη μάθηση ενίσχυσης και το Q-Learning](1-QLearning/README.md) +2. [Χρήση ενός προσομοιωμένου περιβάλλοντος γυμναστικής](2-Gym/README.md) + +## Πιστώσεις + +Το "Εισαγωγή στη Μάθηση Ενίσχυσης" γράφτηκε με ♥️ από τον [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/9-Real-World/1-Applications/README.md b/translations/el/9-Real-World/1-Applications/README.md new file mode 100644 index 000000000..1e6fdc154 --- /dev/null +++ b/translations/el/9-Real-World/1-Applications/README.md @@ -0,0 +1,130 @@ + +# Υστερόγραφο: Μηχανική μάθηση στον πραγματικό κόσμο + +![Περίληψη της μηχανικής μάθησης στον πραγματικό κόσμο σε ένα σκίτσο](../../../../sketchnotes/ml-realworld.png) +> Σκίτσο από την [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Σε αυτό το πρόγραμμα σπουδών, μάθατε πολλούς τρόπους για να προετοιμάσετε δεδομένα για εκπαίδευση και να δημιουργήσετε μοντέλα μηχανικής μάθησης. Δημιουργήσατε μια σειρά από κλασικά μοντέλα παλινδρόμησης, ομαδοποίησης, ταξινόμησης, επεξεργασίας φυσικής γλώσσας και χρονοσειρών. Συγχαρητήρια! Τώρα, ίσως αναρωτιέστε ποιος είναι ο σκοπός όλων αυτών... ποιες είναι οι πραγματικές εφαρμογές αυτών των μοντέλων; + +Παρόλο που η βιομηχανία έχει δείξει μεγάλο ενδιαφέρον για την τεχνητή νοημοσύνη, η οποία συνήθως βασίζεται στη βαθιά μάθηση, υπάρχουν ακόμα πολύτιμες εφαρμογές για τα κλασικά μοντέλα μηχανικής μάθησης. Ίσως χρησιμοποιείτε ήδη κάποιες από αυτές τις εφαρμογές σήμερα! Σε αυτό το μάθημα, θα εξερευνήσετε πώς οκτώ διαφορετικοί κλάδοι και τομείς εξειδίκευσης χρησιμοποιούν αυτούς τους τύπους μοντέλων για να κάνουν τις εφαρμογές τους πιο αποδοτικές, αξιόπιστες, έξυπνες και πολύτιμες για τους χρήστες. + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Χρηματοοικονομικά + +Ο χρηματοοικονομικός τομέας προσφέρει πολλές ευκαιρίες για μηχανική μάθηση. Πολλά προβλήματα σε αυτόν τον τομέα μπορούν να μοντελοποιηθούν και να λυθούν χρησιμοποιώντας ML. + +### Ανίχνευση απάτης με πιστωτικές κάρτες + +Μάθαμε για την [ομαδοποίηση 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), ένας πάροχος διαδικτυακών ανοιχτών μαθημάτων, έχει ένα εξαιρετικό τεχνολογικό blog όπου συζητούν πολλές μηχανικές αποφάσεις. Σε αυτή τη μελέτη περίπτωσης, σχεδίασαν μια γραμμή παλινδρόμησης για να εξερευνήσουν τυχόν συσχέτιση μεταξύ χαμηλής βαθμολογίας NPS (Net Promoter Score) και διατήρησης ή εγκατάλειψης μαθημάτων. +[Αναφορά](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) σε όλα τα προϊόντα της. Δημοσίευσαν μια ενδιαφέρουσα μελέτη περίπτωσης στο τεχνολογικό τους blog σχετικά με το πώς αντιμετώπισαν την προκατάληψη φύλου στη μηχανική μάθηση, την οποία μάθατε στο [εισαγωγικό μάθημα για τη δικαιοσύνη](../../1-Introduction/3-fairness/README.md). +[Αναφορά](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Λιανικό εμπόριο + +Ο τομέας του λιανικού εμπορίου μπορεί σίγουρα να επωφεληθεί από τη χρήση της μηχανικής μάθησης, από τη δημιουργία μιας καλύτερης εμπειρίας πελάτη έως τη βέλτιστη διαχείριση αποθεμάτων. + +### Εξατομίκευση της εμπειρίας πελάτη + +Στην Wayfair, μια εταιρεία που πωλεί είδη σπιτιού όπως έπιπλα, η βοήθεια στους πελάτες να βρουν τα κατάλληλα προϊόντα για τις προτιμήσεις και τις ανάγκες τους είναι πρωταρχικής σημασίας. Σε αυτό το άρθρο, οι μηχανικοί της εταιρείας περιγράφουν πώς χρησιμοποιούν ML και NLP για να "προβάλλουν τα σωστά αποτελέσματα στους πελάτες". Συγκεκριμένα, η Μηχανή Πρόθεσης Ερωτήματος τους έχει κατασκευαστεί για να χρησιμοποιεί εξαγωγή οντοτήτων, εκπαίδευση ταξινομητών, εξαγωγή στοιχείων και απόψεων, και ετικέτες συναισθημάτων στις κριτικές πελατών. Αυτή είναι μια κλασική περίπτωση χρήσης του NLP στο διαδικτυακό λιανικό εμπόριο. +[Αναφορά](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) + +### Διαχείριση επανεισαγωγής ασθενών + +Η νοσοκομειακή φροντίδα είναι δαπανηρή, ειδικά όταν οι ασθενείς πρέπει να επανεισαχθούν. Αυτό το άρθρο συζητά μια εταιρεία που χρησιμοποιεί ML για να προβλέψει την πιθανότητα επανεισαγωγής χρησιμοποιώντας [αλγόριθμους ομαδοποίησης](../../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)", οραματίστηκαν μια δασική πυρκαγιά ως "ο πράκτορας σε οποιοδήποτε κελί στο τοπίο." "Το σύνολο των ενεργειών που μπορεί να λάβει η φωτιά από μια τοποθεσία σε οποιοδήποτε σημείο του χρόνου περιλαμβάνει την εξάπλωση προς βορρά, νότο, ανατολή ή δύση ή τη μη εξάπλωση. + +Αυτή η προσέγγιση αντιστρέφει τη συνήθη ρύθμιση της Ενισχυτικής Μάθησης, καθώς η δυναμική της αντίστοιχης Διαδικασίας Λήψης Αποφάσεων Markov (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) εδώ), η κλασική ML εξακολουθεί να έχει θέση σε αυτή την εργασία. + +Οι αισθητήρες για την παρακολούθηση των κινήσεων των ζώων εκτροφής και το IoT κάνουν χρήση αυτού του τύπου οπτικής επεξεργασίας, αλλά πιο βασικές τεχνικές ML είναι χρήσιμες για την προεπεξεργασία δεδομένων. Για παράδειγμα, σε αυτό το άρθρο, οι στάσεις των προβάτων παρακολουθήθηκαν και αναλύθηκαν χρησιμοποιώντας διάφορους αλγόριθμους ταξινόμησης. Μπορεί να αναγνωρίσετε την καμπύλη ROC στη σελίδα 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) + +## 💼 Ασφάλιση + +Ο ασφαλιστικός τομέας είναι ένας άλλος τομέας που χρησιμοποιεί ML για τη δημιουργία και τη βελτιστοποίηση βιώσιμων χρηματοοικονομικών και αναλογιστικών μοντέλων. + +### Διαχείριση μεταβλητότητας + +Η MetLife, ένας πάροχος ασφάλισης ζωής, είναι ανοιχτή σχετικά με τον τρόπο που αναλύει και μετριάζει τη μεταβλητότητα στα χρηματοοικονομικά της μοντέλα. Σε αυτό το άρθρο θα παρατηρήσετε οπτικοποιήσεις δυαδικής και τακτικής ταξινόμησης. Θα ανακαλύψετε επίσης οπτικοποιήσεις πρόβλεψης. +[Αναφορά](https://invest +## [Κουίζ μετά τη διάλεξη](https://ff-quizzes.netlify.app/en/ml/) + +## Ανασκόπηση & Αυτομελέτη + +Η ομάδα επιστήμης δεδομένων της Wayfair έχει αρκετά ενδιαφέροντα βίντεο σχετικά με το πώς χρησιμοποιούν τη Μηχανική Μάθηση στην εταιρεία τους. Αξίζει [να ρίξετε μια ματιά](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Εργασία + +[Κυνήγι θησαυρού στη Μηχανική Μάθηση](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/9-Real-World/1-Applications/assignment.md b/translations/el/9-Real-World/1-Applications/assignment.md new file mode 100644 index 000000000..a94b523f9 --- /dev/null +++ b/translations/el/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# Ένα Κυνήγι Θησαυρού ML + +## Οδηγίες + +Σε αυτό το μάθημα, μάθατε για πολλές πραγματικές περιπτώσεις χρήσης που λύθηκαν χρησιμοποιώντας κλασικό ML. Παρόλο που η χρήση βαθιάς μάθησης, νέων τεχνικών και εργαλείων στην AI, καθώς και η αξιοποίηση νευρωνικών δικτύων έχει βοηθήσει στην επιτάχυνση της παραγωγής εργαλείων για να βοηθήσουν αυτούς τους τομείς, το κλασικό ML χρησιμοποιώντας τις τεχνικές αυτού του προγράμματος σπουδών εξακολουθεί να έχει μεγάλη αξία. + +Σε αυτή την εργασία, φανταστείτε ότι συμμετέχετε σε ένα hackathon. Χρησιμοποιήστε όσα μάθατε στο πρόγραμμα σπουδών για να προτείνετε μια λύση χρησιμοποιώντας κλασικό ML για να λύσετε ένα πρόβλημα σε έναν από τους τομείς που συζητήθηκαν σε αυτό το μάθημα. Δημιουργήστε μια παρουσίαση όπου θα συζητήσετε πώς θα υλοποιήσετε την ιδέα σας. Επιπλέον πόντοι αν μπορείτε να συγκεντρώσετε δείγματα δεδομένων και να δημιουργήσετε ένα μοντέλο ML για να υποστηρίξετε την ιδέα σας! + +## Κριτήρια Αξιολόγησης + +| Κριτήριο | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | ------------------------------------------------------------------- | ------------------------------------------------- | ---------------------- | +| | Παρουσιάζεται μια παρουσίαση PowerPoint - επιπλέον πόντοι για τη δημιουργία μοντέλου | Παρουσιάζεται μια μη καινοτόμος, βασική παρουσίαση | Η εργασία είναι ελλιπής | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/9-Real-World/2-Debugging-ML-Models/README.md b/translations/el/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 000000000..8978ad822 --- /dev/null +++ b/translations/el/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,151 @@ + +# Υστερόγραφο: Εντοπισμός σφαλμάτων μοντέλων στη Μηχανική Μάθηση με χρήση των στοιχείων του πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης + +## [Προ-μάθημα κουίζ](https://ff-quizzes.netlify.app/en/ml/) + +## Εισαγωγή + +Η μηχανική μάθηση επηρεάζει την καθημερινή μας ζωή. Η τεχνητή νοημοσύνη βρίσκει τον δρόμο της σε μερικά από τα πιο σημαντικά συστήματα που μας επηρεάζουν ως άτομα αλλά και ως κοινωνία, όπως η υγειονομική περίθαλψη, τα οικονομικά, η εκπαίδευση και η απασχόληση. Για παράδειγμα, συστήματα και μοντέλα εμπλέκονται σε καθημερινές διαδικασίες λήψης αποφάσεων, όπως η διάγνωση ασθενειών ή η ανίχνευση απάτης. Ως αποτέλεσμα, οι εξελίξεις στην τεχνητή νοημοσύνη, μαζί με την επιταχυνόμενη υιοθέτησή της, αντιμετωπίζονται με μεταβαλλόμενες κοινωνικές προσδοκίες και αυξανόμενη ρύθμιση. Συνεχώς βλέπουμε περιοχές όπου τα συστήματα τεχνητής νοημοσύνης δεν ανταποκρίνονται στις προσδοκίες, εκθέτουν νέες προκλήσεις και οι κυβερνήσεις αρχίζουν να ρυθμίζουν τις λύσεις τεχνητής νοημοσύνης. Επομένως, είναι σημαντικό αυτά τα μοντέλα να αναλύονται ώστε να παρέχουν δίκαια, αξιόπιστα, συμπεριληπτικά, διαφανή και υπεύθυνα αποτελέσματα για όλους. + +Σε αυτό το πρόγραμμα σπουδών, θα εξετάσουμε πρακτικά εργαλεία που μπορούν να χρησιμοποιηθούν για να αξιολογηθεί αν ένα μοντέλο έχει ζητήματα υπεύθυνης τεχνητής νοημοσύνης. Οι παραδοσιακές τεχνικές εντοπισμού σφαλμάτων στη μηχανική μάθηση τείνουν να βασίζονται σε ποσοτικούς υπολογισμούς, όπως η συνολική ακρίβεια ή η μέση απώλεια σφάλματος. Φανταστείτε τι μπορεί να συμβεί όταν τα δεδομένα που χρησιμοποιείτε για να δημιουργήσετε αυτά τα μοντέλα στερούνται ορισμένων δημογραφικών στοιχείων, όπως η φυλή, το φύλο, η πολιτική άποψη, η θρησκεία ή αντιπροσωπεύουν δυσανάλογα τέτοια δημογραφικά στοιχεία. Τι γίνεται όταν η έξοδος του μοντέλου ερμηνεύεται ώστε να ευνοεί κάποια δημογραφική ομάδα; Αυτό μπορεί να εισάγει υπερβολική ή ανεπαρκή εκπροσώπηση αυτών των ευαίσθητων χαρακτηριστικών, οδηγώντας σε ζητήματα δικαιοσύνης, συμπερίληψης ή αξιοπιστίας από το μοντέλο. Ένας άλλος παράγοντας είναι ότι τα μοντέλα μηχανικής μάθησης θεωρούνται "μαύρα κουτιά", γεγονός που καθιστά δύσκολο να κατανοηθεί και να εξηγηθεί τι οδηγεί την πρόβλεψη ενός μοντέλου. Όλα αυτά είναι προκλήσεις που αντιμετωπίζουν οι επιστήμονες δεδομένων και οι προγραμματιστές τεχνητής νοημοσύνης όταν δεν διαθέτουν επαρκή εργαλεία για να εντοπίσουν σφάλματα και να αξιολογήσουν τη δικαιοσύνη ή την αξιοπιστία ενός μοντέλου. + +Σε αυτό το μάθημα, θα μάθετε πώς να εντοπίζετε σφάλματα στα μοντέλα σας χρησιμοποιώντας: + +- **Ανάλυση Σφαλμάτων**: εντοπισμός περιοχών στη διανομή δεδομένων όπου το μοντέλο έχει υψηλά ποσοστά σφαλμάτων. +- **Επισκόπηση Μοντέλου**: συγκριτική ανάλυση μεταξύ διαφορετικών ομάδων δεδομένων για την ανακάλυψη διαφορών στις μετρικές απόδοσης του μοντέλου. +- **Ανάλυση Δεδομένων**: διερεύνηση περιοχών όπου μπορεί να υπάρχει υπερβολική ή ανεπαρκής εκπροσώπηση των δεδομένων που μπορεί να προκαλέσει την ευνοϊκή πρόβλεψη του μοντέλου για μια δημογραφική ομάδα έναντι μιας άλλης. +- **Σημαντικότητα Χαρακτηριστικών**: κατανόηση των χαρακτηριστικών που οδηγούν τις προβλέψεις του μοντέλου σε παγκόσμιο ή τοπικό επίπεδο. + +## Προαπαιτούμενα + +Ως προαπαιτούμενο, παρακαλούμε να ανατρέξετε στο [Υπεύθυνα εργαλεία τεχνητής νοημοσύνης για προγραμματιστές](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif για Υπεύθυνα Εργαλεία Τεχνητής Νοημοσύνης](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Ανάλυση Σφαλμάτων + +Οι παραδοσιακές μετρικές απόδοσης μοντέλων που χρησιμοποιούνται για τη μέτρηση της ακρίβειας είναι κυρίως υπολογισμοί που βασίζονται σε σωστές έναντι λανθασμένων προβλέψεων. Για παράδειγμα, ο προσδιορισμός ότι ένα μοντέλο είναι ακριβές κατά 89% με απώλεια σφάλματος 0.001 μπορεί να θεωρηθεί καλή απόδοση. Ωστόσο, τα σφάλματα δεν κατανέμονται πάντα ομοιόμορφα στο υποκείμενο σύνολο δεδομένων. Μπορεί να έχετε βαθμολογία ακρίβειας μοντέλου 89%, αλλά να ανακαλύψετε ότι υπάρχουν διαφορετικές περιοχές των δεδομένων σας στις οποίες το μοντέλο αποτυγχάνει κατά 42% του χρόνου. Οι συνέπειες αυτών των μοτίβων αποτυχίας με ορισμένες ομάδες δεδομένων μπορούν να οδηγήσουν σε ζητήματα δικαιοσύνης ή αξιοπιστίας. Είναι απαραίτητο να κατανοήσετε τις περιοχές όπου το μοντέλο αποδίδει καλά ή όχι. Οι περιοχές δεδομένων όπου υπάρχουν υψηλά ποσοστά ανακρίβειας στο μοντέλο σας μπορεί να αποδειχθούν σημαντικές δημογραφικές ομάδες δεδομένων. + +![Ανάλυση και εντοπισμός σφαλμάτων μοντέλου](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +Η συνιστώσα Ανάλυσης Σφαλμάτων στον πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης απεικονίζει πώς η αποτυχία του μοντέλου κατανέμεται σε διάφορες ομάδες με μια οπτικοποίηση δέντρου. Αυτό είναι χρήσιμο για τον εντοπισμό χαρακτηριστικών ή περιοχών όπου υπάρχει υψηλό ποσοστό σφαλμάτων στο σύνολο δεδομένων σας. Βλέποντας από πού προέρχονται οι περισσότερες ανακρίβειες του μοντέλου, μπορείτε να αρχίσετε να διερευνάτε τη βασική αιτία. Μπορείτε επίσης να δημιουργήσετε ομάδες δεδομένων για να πραγματοποιήσετε ανάλυση. Αυτές οι ομάδες δεδομένων βοηθούν στη διαδικασία εντοπισμού σφαλμάτων για να προσδιορίσετε γιατί η απόδοση του μοντέλου είναι καλή σε μια ομάδα, αλλά λανθασμένη σε μια άλλη. + +![Ανάλυση Σφαλμάτων](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Οι οπτικοί δείκτες στον χάρτη δέντρου βοηθούν στον εντοπισμό των προβληματικών περιοχών πιο γρήγορα. Για παράδειγμα, όσο πιο σκούρο κόκκινο είναι ένας κόμβος δέντρου, τόσο υψηλότερο είναι το ποσοστό σφάλματος. + +Ο θερμικός χάρτης είναι μια άλλη λειτουργία οπτικοποίησης που οι χρήστες μπορούν να χρησιμοποιήσουν για να διερευνήσουν το ποσοστό σφάλματος χρησιμοποιώντας ένα ή δύο χαρακτηριστικά για να βρουν έναν παράγοντα που συμβάλλει στα σφάλματα του μοντέλου σε ολόκληρο το σύνολο δεδομένων ή τις ομάδες. + +![Θερμικός Χάρτης Ανάλυσης Σφαλμάτων](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Χρησιμοποιήστε την ανάλυση σφαλμάτων όταν χρειάζεστε: + +* Βαθιά κατανόηση του πώς οι αποτυχίες του μοντέλου κατανέμονται σε ένα σύνολο δεδομένων και σε διάφορες διαστάσεις εισόδου και χαρακτηριστικών. +* Ανάλυση των συνολικών μετρικών απόδοσης για την αυτόματη ανακάλυψη λανθασμένων ομάδων δεδομένων ώστε να ενημερώσετε τα στοχευμένα βήματα μετριασμού. + +## Επισκόπηση Μοντέλου + +Η αξιολόγηση της απόδοσης ενός μοντέλου μηχανικής μάθησης απαιτεί την απόκτηση μιας ολιστικής κατανόησης της συμπεριφοράς του. Αυτό μπορεί να επιτευχθεί με την ανασκόπηση περισσότερων από μία μετρικών, όπως το ποσοστό σφάλματος, η ακρίβεια, η ανάκληση, η ακρίβεια ή το MAE (Μέσο Απόλυτο Σφάλμα), για να βρεθούν διαφορές μεταξύ των μετρικών απόδοσης. Μια μετρική απόδοσης μπορεί να φαίνεται εξαιρετική, αλλά οι ανακρίβειες μπορούν να αποκαλυφθούν σε μια άλλη μετρική. Επιπλέον, η σύγκριση των μετρικών για διαφορές σε ολόκληρο το σύνολο δεδομένων ή τις ομάδες βοηθά να φωτιστούν περιοχές όπου το μοντέλο αποδίδει καλά ή όχι. Αυτό είναι ιδιαίτερα σημαντικό για να δούμε την απόδοση του μοντέλου μεταξύ ευαίσθητων και μη ευαίσθητων χαρακτηριστικών (π.χ., φυλή ασθενών, φύλο ή ηλικία) ώστε να αποκαλυφθεί πιθανή αδικία που μπορεί να έχει το μοντέλο. Για παράδειγμα, η ανακάλυψη ότι το μοντέλο είναι πιο λανθασμένο σε μια ομάδα που έχει ευαίσθητα χαρακτηριστικά μπορεί να αποκαλύψει πιθανή αδικία που μπορεί να έχει το μοντέλο. + +Η συνιστώσα Επισκόπησης Μοντέλου του πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης βοηθά όχι μόνο στην ανάλυση των μετρικών απόδοσης της εκπροσώπησης δεδομένων σε μια ομάδα, αλλά δίνει στους χρήστες τη δυνατότητα να συγκρίνουν τη συμπεριφορά του μοντέλου μεταξύ διαφορετικών ομάδων. + +![Ομάδες δεδομένων - επισκόπηση μοντέλου στον πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Η λειτουργία ανάλυσης βάσει χαρακτηριστικών της συνιστώσας επιτρέπει στους χρήστες να περιορίσουν υποομάδες δεδομένων μέσα σε ένα συγκεκριμένο χαρακτηριστικό για να εντοπίσουν ανωμαλίες σε λεπτομερές επίπεδο. Για παράδειγμα, ο πίνακας ελέγχου διαθέτει ενσωματωμένη νοημοσύνη για να δημιουργεί αυτόματα ομάδες για ένα χαρακτηριστικό που επιλέγει ο χρήστης (π.χ., *"time_in_hospital < 3"* ή *"time_in_hospital >= 7"*). Αυτό επιτρέπει στον χρήστη να απομονώσει ένα συγκεκριμένο χαρακτηριστικό από μια μεγαλύτερη ομάδα δεδομένων για να δει αν είναι βασικός παράγοντας των λανθασμένων αποτελεσμάτων του μοντέλου. + +![Ομάδες χαρακτηριστικών - επισκόπηση μοντέλου στον πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Η συνιστώσα Επισκόπησης Μοντέλου υποστηρίζει δύο κατηγορίες μετρικών διαφορών: + +**Διαφορά στην απόδοση του μοντέλου**: Αυτά τα σύνολα μετρικών υπολογίζουν τη διαφορά στις τιμές της επιλεγμένης μετρικής απόδοσης μεταξύ υποομάδων δεδομένων. Εδώ είναι μερικά παραδείγματα: + +* Διαφορά στο ποσοστό ακρίβειας +* Διαφορά στο ποσοστό σφάλματος +* Διαφορά στην ακρίβεια +* Διαφορά στην ανάκληση +* Διαφορά στο μέσο απόλυτο σφάλμα (MAE) + +**Διαφορά στο ποσοστό επιλογής**: Αυτή η μετρική περιέχει τη διαφορά στο ποσοστό επιλογής (ευνοϊκή πρόβλεψη) μεταξύ υποομάδων. Ένα παράδειγμα αυτού είναι η διαφορά στα ποσοστά έγκρισης δανείων. Το ποσοστό επιλογής σημαίνει το κλάσμα των σημείων δεδομένων σε κάθε κατηγορία που ταξινομούνται ως 1 (σε δυαδική ταξινόμηση) ή η κατανομή των τιμών πρόβλεψης (σε παλινδρόμηση). + +## Ανάλυση Δεδομένων + +> "Αν βασανίσεις τα δεδομένα αρκετά, θα ομολογήσουν οτιδήποτε" - Ronald Coase + +Αυτή η δήλωση ακούγεται υπερβολική, αλλά είναι αλήθεια ότι τα δεδομένα μπορούν να χειραγωγηθούν για να υποστηρίξουν οποιοδήποτε συμπέρασμα. Μια τέτοια χειραγώγηση μπορεί μερικές φορές να συμβεί ακούσια. Ως άνθρωποι, όλοι έχουμε προκαταλήψεις, και είναι συχνά δύσκολο να γνωρίζουμε συνειδητά πότε εισάγουμε προκατάληψη στα δεδομένα. Η διασφάλιση της δικαιοσύνης στην τεχνητή νοημοσύνη και τη μηχανική μάθηση παραμένει μια σύνθετη πρόκληση. + +Τα δεδομένα αποτελούν ένα μεγάλο τυφλό σημείο για τις παραδοσιακές μετρικές απόδοσης μοντέλων. Μπορεί να έχετε υψηλές βαθμολογίες ακρίβειας, αλλά αυτό δεν αντικατοπτρίζει πάντα την υποκείμενη προκατάληψη δεδομένων που μπορεί να υπάρχει στο σύνολο δεδομένων σας. Για παράδειγμα, αν ένα σύνολο δεδομένων εργαζομένων έχει 27% γυναίκες σε εκτελεστικές θέσεις σε μια εταιρεία και 73% άνδρες στο ίδιο επίπεδο, ένα μοντέλο διαφήμισης θέσεων εργασίας που εκπαιδεύεται σε αυτά τα δεδομένα μπορεί να στοχεύει κυρίως ανδρικό κοινό για θέσεις ανώτερου επιπέδου. Αυτή η ανισορροπία στα δεδομένα επηρέασε την πρόβλεψη του μοντέλου ώστε να ευνοεί ένα φύλο. Αυτό αποκαλύπτει ένα ζήτημα δικαιοσύνης όπου υπάρχει προκατάληψη φύλου στο μοντέλο τεχνητής νοημοσύνης. + +Η συνιστώσα Ανάλυσης Δεδομένων στον πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης βοηθά στον εντοπισμό περιοχών όπου υπάρχει υπερβολική ή ανεπαρκής εκπροσώπηση στο σύνολο δεδομένων. Βοηθά τους χρήστες να διαγνώσουν τη βασική αιτία σφαλμάτων και ζητημάτων δικαιοσύνης που εισάγονται από ανισορροπίες δεδομένων ή έλλειψη εκπροσώπησης μιας συγκεκριμένης ομάδας δεδομένων. Αυτό δίνει στους χρήστες τη δυνατότητα να οπτικοποιούν σύνολα δεδομένων βάσει προβλεπόμενων και πραγματικών αποτελεσμάτων, ομάδων σφαλμάτων και συγκεκριμένων χαρακτηριστικών. Μερικές φορές η ανακάλυψη μιας υποεκπροσωπούμενης ομάδας δεδομένων μπορεί επίσης να αποκαλύψει ότι το μοντέλο δεν μαθαίνει καλά, εξ ου και οι υψηλές ανακρίβειες. Ένα μοντέλο που έχει προκατάληψη δεδομένων δεν είναι μόνο ζήτημα δικαιοσύνης αλλά δείχνει ότι το μοντέλο δεν είναι συμπεριληπτικό ή αξιόπιστο. + +![Συνιστώσα Ανάλυσης Δεδομένων στον Πίνακα Ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Χρησιμοποιήστε την ανάλυση δεδομένων όταν χρειάζεστε: + +* Εξερεύνηση στατιστικών του συνόλου δεδομένων σας επιλέγοντας διαφορετικά φίλτρα για να διαχωρίσετε τα δεδομένα σας σε διαφορετικές διαστάσεις (γνωστές και ως ομάδες). +* Κατανόηση της κατανομής του συνόλου δεδομένων σας σε διαφορετικές ομάδες και χαρακτηριστικά. +* Προσδιορισμός αν τα ευρήματά σας σχετικά με τη δικαιοσύνη, την ανάλυση σφαλμάτων και την αιτιότητα (που προέρχονται από άλλες συνιστώσες του πίνακα ελέγχου) είναι αποτέλεσμα της κατανομής του συνόλου δεδομένων σας. +* Απόφαση για το πού να συλλέξετε περισσότερα δεδομένα για να μετριάσετε σφάλματα που προέρχονται από ζητήματα εκπροσώπησης, θόρυβο ετικετών, θόρυβο χαρακτηριστικών, προκατάληψη ετικετών και παρόμοιους παράγοντες. + +## Ερμηνευσιμότητα Μοντέλου + +Τα μοντέλα μηχανικής μάθησης τείνουν να είναι "μαύρα κουτιά". Η κατανόηση των βασικών +- **Υπερβολική ή ανεπαρκής εκπροσώπηση**. Η ιδέα είναι ότι μια συγκεκριμένη ομάδα δεν εμφανίζεται σε ένα συγκεκριμένο επάγγελμα, και οποιαδήποτε υπηρεσία ή λειτουργία που συνεχίζει να προωθεί αυτό συμβάλλει στη βλάβη. + +### Πίνακας ελέγχου Azure RAI + +[Πίνακας ελέγχου Azure RAI](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) βασίζεται σε εργαλεία ανοιχτού κώδικα που έχουν αναπτυχθεί από κορυφαία ακαδημαϊκά ιδρύματα και οργανισμούς, συμπεριλαμβανομένης της Microsoft, και είναι καθοριστικά για τους επιστήμονες δεδομένων και τους προγραμματιστές AI ώστε να κατανοήσουν καλύτερα τη συμπεριφορά των μοντέλων, να εντοπίσουν και να μετριάσουν ανεπιθύμητα ζητήματα από μοντέλα AI. + +- Μάθετε πώς να χρησιμοποιείτε τα διάφορα στοιχεία, εξετάζοντας την τεκμηρίωση του πίνακα ελέγχου RAI [docs.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Δείτε μερικά δείγματα σημειωματάριων του πίνακα ελέγχου RAI [sample notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) για την αποσφαλμάτωση πιο υπεύθυνων σεναρίων AI στο Azure Machine Learning. + +--- +## 🚀 Πρόκληση + +Για να αποτρέψουμε την εισαγωγή στατιστικών ή δεδομένων προκαταλήψεων από την αρχή, πρέπει: + +- να έχουμε ποικιλία υποβάθρων και προοπτικών μεταξύ των ανθρώπων που εργάζονται στα συστήματα +- να επενδύσουμε σε σύνολα δεδομένων που αντικατοπτρίζουν την ποικιλομορφία της κοινωνίας μας +- να αναπτύξουμε καλύτερες μεθόδους για την ανίχνευση και διόρθωση προκαταλήψεων όταν αυτές εμφανίζονται + +Σκεφτείτε πραγματικά σενάρια όπου η αδικία είναι εμφανής στη δημιουργία και χρήση μοντέλων. Τι άλλο πρέπει να λάβουμε υπόψη; + +## [Κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) +## Ανασκόπηση & Αυτομελέτη + +Σε αυτό το μάθημα, μάθατε μερικά από τα πρακτικά εργαλεία για την ενσωμάτωση υπεύθυνης AI στη μηχανική μάθηση. + +Παρακολουθήστε αυτό το εργαστήριο για να εμβαθύνετε στα θέματα: + +- Πίνακας ελέγχου Υπεύθυνης AI: Μια ολοκληρωμένη λύση για την επιχειρησιακή εφαρμογή της RAI στην πράξη από τις Besmira Nushi και Mehrnoosh Sameki + +[![Πίνακας ελέγχου Υπεύθυνης AI: Μια ολοκληρωμένη λύση για την επιχειρησιακή εφαρμογή της RAI στην πράξη](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Πίνακας ελέγχου Υπεύθυνης AI: Μια ολοκληρωμένη λύση για την επιχειρησιακή εφαρμογή της RAI στην πράξη") + +> 🎥 Κάντε κλικ στην εικόνα παραπάνω για το βίντεο: Πίνακας ελέγχου Υπεύθυνης AI: Μια ολοκληρωμένη λύση για την επιχειρησιακή εφαρμογή της RAI στην πράξη από τις Besmira Nushi και Mehrnoosh Sameki + +Ανατρέξτε στα παρακάτω υλικά για να μάθετε περισσότερα σχετικά με την υπεύθυνη AI και πώς να δημιουργήσετε πιο αξιόπιστα μοντέλα: + +- Εργαλεία του πίνακα ελέγχου RAI της Microsoft για την αποσφαλμάτωση μοντέλων ML: [Πόροι εργαλείων Υπεύθυνης AI](https://aka.ms/rai-dashboard) + +- Εξερευνήστε το εργαλείο Υπεύθυνης AI: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Κέντρο πόρων RAI της Microsoft: [Πόροι Υπεύθυνης AI – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Ερευνητική ομάδα FATE της Microsoft: [FATE: Δικαιοσύνη, Λογοδοσία, Διαφάνεια και Ηθική στην AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Εργασία + +[Εξερευνήστε τον πίνακα ελέγχου RAI](assignment.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/el/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 000000000..1efc10bc5 --- /dev/null +++ b/translations/el/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Εξερευνήστε τον πίνακα ελέγχου Υπεύθυνης Τεχνητής Νοημοσύνης (RAI) + +## Οδηγίες + +Σε αυτό το μάθημα μάθατε για τον πίνακα ελέγχου RAI, ένα σύνολο από εργαλεία που βασίζονται σε "ανοιχτού κώδικα" για να βοηθήσουν τους επιστήμονες δεδομένων να πραγματοποιήσουν ανάλυση σφαλμάτων, εξερεύνηση δεδομένων, αξιολόγηση δικαιοσύνης, ερμηνεία μοντέλων, αξιολογήσεις αντιπαραδειγμάτων/τι-θα-γινόταν και αιτιακή ανάλυση σε συστήματα τεχνητής νοημοσύνης. Για αυτήν την εργασία, εξερευνήστε μερικά από τα δείγματα [notebooks](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) του πίνακα ελέγχου RAI και αναφέρετε τα ευρήματά σας σε μια εργασία ή παρουσίαση. + +## Κριτήρια Αξιολόγησης + +| Κριτήρια | Εξαιρετικό | Επαρκές | Χρειάζεται Βελτίωση | +| -------- | --------- | -------- | ----------------- | +| | Παρουσιάζεται μια εργασία ή παρουσίαση PowerPoint που συζητά τα εργαλεία του πίνακα ελέγχου RAI, το notebook που εκτελέστηκε και τα συμπεράσματα που προέκυψαν από την εκτέλεσή του | Παρουσιάζεται μια εργασία χωρίς συμπεράσματα | Δεν παρουσιάζεται εργασία | + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/9-Real-World/README.md b/translations/el/9-Real-World/README.md new file mode 100644 index 000000000..f791fccdc --- /dev/null +++ b/translations/el/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Υστερόγραφο: Πραγματικές εφαρμογές της κλασικής μηχανικής μάθησης + +Σε αυτή την ενότητα του προγράμματος σπουδών, θα γνωρίσετε μερικές πραγματικές εφαρμογές της κλασικής μηχανικής μάθησης. Έχουμε ερευνήσει το διαδίκτυο για να βρούμε επιστημονικά άρθρα και δημοσιεύσεις σχετικά με εφαρμογές που έχουν χρησιμοποιήσει αυτές τις στρατηγικές, αποφεύγοντας όσο το δυνατόν περισσότερο τα νευρωνικά δίκτυα, τη βαθιά μάθηση και την τεχνητή νοημοσύνη. Μάθετε πώς η μηχανική μάθηση χρησιμοποιείται σε επιχειρηματικά συστήματα, οικολογικές εφαρμογές, χρηματοοικονομικά, τέχνες και πολιτισμό, και πολλά άλλα. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Φωτογραφία από Alexis Fauvet στο Unsplash + +## Μάθημα + +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). + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/CODE_OF_CONDUCT.md b/translations/el/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..9b4a63942 --- /dev/null +++ b/translations/el/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Κώδικας Δεοντολογίας Ανοιχτού Κώδικα της Microsoft + +Αυτό το έργο έχει υιοθετήσει τον [Κώδικα Δεοντολογίας Ανοιχτού Κώδικα της Microsoft](https://opensource.microsoft.com/codeofconduct/). + +Πόροι: + +- [Κώδικας Δεοντολογίας Ανοιχτού Κώδικα της Microsoft](https://opensource.microsoft.com/codeofconduct/) +- [Συχνές Ερωτήσεις για τον Κώδικα Δεοντολογίας](https://opensource.microsoft.com/codeofconduct/faq/) +- Επικοινωνήστε με [opencode@microsoft.com](mailto:opencode@microsoft.com) για ερωτήσεις ή ανησυχίες + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική μετάφραση από ανθρώπους. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/CONTRIBUTING.md b/translations/el/CONTRIBUTING.md new file mode 100644 index 000000000..4a49cd937 --- /dev/null +++ b/translations/el/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# Συμμετοχή + +Αυτό το έργο καλωσορίζει συνεισφορές και προτάσεις. Οι περισσότερες συνεισφορές απαιτούν να συμφωνήσετε με μια Συμφωνία Άδειας Χρήσης Συνεισφορέα (CLA), δηλώνοντας ότι έχετε το δικαίωμα και πράγματι παραχωρείτε σε εμάς τα δικαιώματα να χρησιμοποιήσουμε τη συνεισφορά σας. Για λεπτομέρειες, επισκεφθείτε το https://cla.microsoft.com. + +> Σημαντικό: όταν μεταφράζετε κείμενο σε αυτό το αποθετήριο, βεβαιωθείτε ότι δεν χρησιμοποιείτε μηχανική μετάφραση. Θα επαληθεύσουμε τις μεταφράσεις μέσω της κοινότητας, οπότε παρακαλούμε να προσφέρετε μεταφράσεις μόνο σε γλώσσες στις οποίες είστε άπταιστοι. + +Όταν υποβάλετε ένα pull request, ένα CLA-bot θα καθορίσει αυτόματα εάν χρειάζεται να παρέχετε CLA και θα διαμορφώσει το PR κατάλληλα (π.χ., ετικέτα, σχόλιο). Απλώς ακολουθήστε τις οδηγίες που παρέχονται από το bot. Θα χρειαστεί να το κάνετε αυτό μόνο μία φορά για όλα τα αποθετήρια που χρησιμοποιούν το CLA μας. + +Αυτό το έργο έχει υιοθετήσει τον [Κώδικα Δεοντολογίας Ανοιχτού Κώδικα της Microsoft](https://opensource.microsoft.com/codeofconduct/). +Για περισσότερες πληροφορίες, δείτε τις [Συχνές Ερωτήσεις για τον Κώδικα Δεοντολογίας](https://opensource.microsoft.com/codeofconduct/faq/) +ή επικοινωνήστε με το [opencode@microsoft.com](mailto:opencode@microsoft.com) για οποιεσδήποτε επιπλέον ερωτήσεις ή σχόλια. + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/README.md b/translations/el/README.md new file mode 100644 index 000000000..4e106c009 --- /dev/null +++ b/translations/el/README.md @@ -0,0 +1,177 @@ + +[![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/) + +### 🌐 Υποστήριξη Πολλών Γλωσσών + +#### Υποστηρίζεται μέσω GitHub Action (Αυτοματοποιημένο & Πάντα Ενημερωμένο) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](./README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Γίνετε μέλος της κοινότητας + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Μηχανική Μάθηση για Αρχάριους - Ένα Πρόγραμμα Σπουδών + +> 🌍 Ταξιδέψτε σε όλο τον κόσμο καθώς εξερευνούμε τη Μηχανική Μάθηση μέσω των πολιτισμών του κόσμου 🌍 + +Οι Cloud Advocates της 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 + +**🤩 Επιπλέον ευγνωμοσύνη στους Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi και Vidushi Gupta για τα μαθήματα R μας!** + +# Ξεκινώντας + +Ακολουθήστε αυτά τα βήματα: +1. **Κάντε Fork το Αποθετήριο**: Πατήστε το κουμπί "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)**, για να χρησιμοποιήσετε αυτό το πρόγραμμα σπουδών, κάντε fork ολόκληρο το αποθετήριο στον δικό σας λογαριασμό GitHub και ολοκληρώστε τις ασκήσεις μόνοι σας ή με μια ομάδα: + +- Ξεκινήστε με ένα κουίζ πριν από το μάθημα. +- Διαβάστε το μάθημα και ολοκληρώστε τις δραστηριότητες, κάνοντας παύση και αναστοχασμό σε κάθε έλεγχο γνώσεων. +- Προσπαθήστε να δημιουργήσετε τα έργα κατανοώντας τα μαθήματα αντί να εκτελείτε τον κώδικα λύσης. Ωστόσο, αυτός ο κώδικας είναι διαθέσιμος στους φακέλους `/solution` σε κάθε μάθημα που βασίζεται σε έργο. +- Κάντε το κουίζ μετά το μάθημα. +- Ολοκληρώστε την πρόκληση. +- Ολοκληρώστε την εργασία. +- Αφού ολοκληρώσετε μια ομάδα μαθημάτων, επισκεφθείτε τον [Πίνακα Συζητήσεων](https://github.com/microsoft/ML-For-Beginners/discussions) και "μάθετε δυνατά" συμπληρώνοντας το κατάλληλο PAT rubric. Ένα 'PAT' είναι ένα Εργαλείο Αξιολόγησης Προόδου που είναι ένα rubric που συμπληρώνετε για να προωθήσετε τη μάθησή σας. Μπορείτε επίσης να αντιδράσετε σε άλλα PATs ώστε να μάθουμε μαζί. + +> Για περαιτέρω μελέτη, προτείνουμε να ακολουθήσετε αυτά τα [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) modules και learning paths. + +**Καθηγητές**, έχουμε [συμπεριλάβει κάποιες προτάσεις](for-teachers.md) για το πώς να χρησιμοποιήσετε αυτό το πρόγραμμα σπουδών. + +--- + +## Βίντεο Οδηγίες + +Μερικά από τα μαθήματα είναι διαθέσιμα ως σύντομα βίντεο. Μπορείτε να βρείτε όλα αυτά ενσωματωμένα στα μαθήματα ή στη [λίστα αναπαραγωγής "ML for Beginners" στο κανάλι Microsoft Developer στο YouTube](https://aka.ms/ml-beginners-videos) κάνοντας κλικ στην παρακάτω εικόνα. + +[![ML for beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Γνωρίστε την Ομάδα + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif από** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Κάντε κλικ στην παραπάνω εικόνα για ένα βίντεο σχετικά με το έργο και τους ανθρώπους που το δημιούργησαν! + +--- + +## Παιδαγωγική + +Επιλέξαμε δύο παιδαγωγικές αρχές κατά τη δημιουργία αυτού του προγράμματος σπουδών: να είναι πρακτικό **βασισμένο σε έργα** και να περιλαμβάνει **συχνά κουίζ**. Επιπλέον, αυτό το πρόγραμμα σπουδών έχει ένα κοινό **θέμα** για να του δώσει συνοχή. + +Με την εξασφάλιση ότι το περιεχόμενο ευθυγραμμίζεται με έργα, η διαδικασία γίνεται πιο ενδιαφέρουσα για τους μαθητές και η διατήρηση των εννοιών ενισχύεται. Επιπλέον, ένα κουίζ χαμηλού κινδύνου πριν από το μάθημα θέτει την πρόθεση του μαθητή να μάθει ένα θέμα, ενώ ένα δεύτερο κουίζ μετά το μάθημα εξασφαλίζει περαιτέρω διατήρηση. Αυτό το πρόγραμμα σπουδών σχεδιάστηκε για να είναι ευέλικτο και διασκεδαστικό και μπορεί να ληφθεί ολόκληρο ή εν μέρει. Τα έργα ξεκινούν μικρά και γίνονται ολοένα και πιο περίπλοκα μέχρι το τέλος του κύκλου των 12 εβδομάδων. Αυτό το πρόγραμμα σπουδών περιλαμβάνει επίσης ένα επίμετρο για τις εφαρμογές της Μηχανικής Μάθησης στον πραγματικό κόσμο, το οποίο μπορεί να χρησιμοποιηθεί ως επιπλέον πίστωση ή ως βάση για συζήτηση. + +> Βρείτε τον [Κώδικα Συμπεριφοράς](CODE_OF_CONDUCT.md), [Οδηγίες Συνεισφοράς](CONTRIBUTING.md) και [Οδηγίες Μετάφρασης](TRANSLATIONS.md). Καλωσορίζουμε τα εποικοδομητικά σας σχόλια! + +## Κάθε μάθημα περιλαμβάνει + +- προαιρετικό σκίτσο +- προαιρετικό συμπληρωματικό βίντεο +- βίντεο οδηγίες (μόνο σε ορισμένα μαθήματα) +- [κουίζ προθέρμανσης πριν το μάθημα](https://ff-quizzes.netlify.app/en/ml/) +- γραπτό μάθημα +- για μαθήματα που βασίζονται σε έργα, οδηγίες βήμα προς βήμα για την κατασκευή του έργου +- έλεγχοι γνώσεων +- μια πρόκληση +- συμπληρωματική ανάγνωση +- εργασία +- [κουίζ μετά το μάθημα](https://ff-quizzes.netlify.app/en/ml/) + +> **Σημείωση για τις γλώσσες**: Αυτά τα μαθήματα είναι κυρίως γραμμένα σε Python, αλλά πολλά είναι επίσης διαθέσιμα σε R. Για να ολοκληρώσετε ένα μάθημα R, μεταβείτε στον φάκελο `/solution` και αναζητήστε μαθήματα R. Περιλαμβάνουν μια επέκταση .rmd που αντιπροσωπεύει ένα **R Markdown** αρχείο, το οποίο μπορεί να οριστεί απλά ως ενσωμάτωση `code chunks` (σε R ή άλλες γλώσσες) και ενός `YAML header` (που καθοδηγεί πώς να μορφοποιηθούν εξαγωγές όπως PDF) σε ένα `Markdown document`. Ως εκ τούτου, χρησιμεύει ως ένα εξαιρετικό πλαίσιο συγγραφής για την επιστήμη δεδομένων, καθώς σας επιτρέπει να συνδυάσετε τον κώδικά σας, την έξοδό του και τις σκέψεις σας γράφοντάς τες σε Markdown. Επιπλέον, τα R Markdown έγγραφα μπορούν να αποδοθούν σε μορφές εξαγωγής όπως PDF, HTML ή Word. + +> **Σημείωση για τα κουίζ**: Όλα τα κουίζ περιέχονται στον φάκελο [Quiz App](../../quiz-app), για συνολικά 52 κουίζ των τριών ερωτήσεων το καθένα. Συνδέονται μέσα στα μαθήματα, αλλά η εφαρμογή κουίζ μπορεί να εκτελεστεί τοπικά. Ακολουθήστε τις οδηγίες στον φάκελο `quiz-app` για τοπική φιλοξενία ή ανάπτυξη στο Azure. + +| Αριθμός Μαθήματος | Θέμα | Ομαδοποίηση Μαθημάτων | Στόχοι Μάθησης | Συνδεδεμένο Μάθημα | Συγγραφέας | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 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) | Ποια είναι τα σημαντικά φιλοσοφικά ζητήματα γύρω από τη δικαιοσύνη που πρέπει να εξετάσουν οι μαθητές όταν δημιουργούν και εφαρμόζουν μοντέλα ML; | [Μάθημα](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Τεχνικές για μηχανική μάθηση | [Introduction](1-Introduction/README.md) | Ποιες τεχνικές χρησιμοποιούν οι ερευνητές ML για να δημιουργήσουν μοντέλα μηχανικής μάθησης; | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris και Jen | +| 05 | Εισαγωγή στην παλινδρόμηση | [Regression](2-Regression/README.md) | Ξεκινήστε με Python και Scikit-learn για μοντέλα παλινδρόμησης | +
                                • [Python](2-Regression/1-Tools/README.md)
                                • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                |
                                • Jen
                                • Eric Wanjau
                                | +| 06 | Τιμές κολοκύθας στη Βόρεια Αμερική 🎃 | [Regression](2-Regression/README.md) | Οπτικοποιήστε και καθαρίστε δεδομένα για προετοιμασία ML |
                                • [Python](2-Regression/2-Data/README.md)
                                • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                |
                                • Jen
                                • Eric Wanjau
                                | +| 07 | Τιμές κολοκύθας στη Βόρεια Αμερική 🎃 | [Regression](2-Regression/README.md) | Δημιουργήστε γραμμικά και πολυωνυμικά μοντέλα παλινδρόμησης |
                                • [Python](2-Regression/3-Linear/README.md)
                                • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                |
                                • Jen και Dmitry
                                • Eric Wanjau
                                | +| 08 | Τιμές κολοκύθας στη Βόρεια Αμερική 🎃 | [Regression](2-Regression/README.md) | Δημιουργήστε ένα μοντέλο λογιστικής παλινδρόμησης |
                                • [Python](2-Regression/4-Logistic/README.md)
                                • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                |
                                • Jen
                                • Eric Wanjau
                                | +| 09 | Μια Web Εφαρμογή 🔌 | [Web App](3-Web-App/README.md) | Δημιουργήστε μια web εφαρμογή για να χρησιμοποιήσετε το εκπαιδευμένο μοντέλο σας | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Εισαγωγή στην ταξινόμηση | [Classification](4-Classification/README.md) | Καθαρίστε, προετοιμάστε και οπτικοποιήστε τα δεδομένα σας· εισαγωγή στην ταξινόμηση |
                                • [Python](4-Classification/1-Introduction/README.md)
                                • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                  • Jen και Cassie
                                  • Eric Wanjau
                                  | +| 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) |
                                    • Jen και Cassie
                                    • Eric Wanjau
                                    | +| 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) |
                                      • Jen και Cassie
                                      • Eric Wanjau
                                      | +| 13 | Νόστιμες ασιατικές και ινδικές κουζίνες 🍜 | [Classification](4-Classification/README.md) | Δημιουργήστε μια web εφαρμογή συστάσεων χρησιμοποιώντας το μοντέλο σας | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Εισαγωγή στην ομαδοποίηση | [Clustering](5-Clustering/README.md) | Καθαρίστε, προετοιμάστε και οπτικοποιήστε τα δεδομένα σας· Εισαγωγή στην ομαδοποίηση |
                                      • [Python](5-Clustering/1-Visualize/README.md)
                                      • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                        • Jen
                                        • Eric Wanjau
                                        | +| 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) | Μάθετε τα βασικά για την επεξεργασία φυσικής γλώσσας δημιουργώντας ένα απλό bot | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Κοινές εργασίες NLP ☕️ | [Natural language processing](6-NLP/README.md) | Εμβαθύνετε τις γνώσεις σας στην επεξεργασία φυσικής γλώσσας κατανοώντας κοινές εργασίες που απαιτούνται για τη διαχείριση γλωσσικών δομών | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Μετάφραση και ανάλυση συναισθημάτων ♥️ | [Natural language processing](6-NLP/README.md) | Μετάφραση και ανάλυση συναισθημάτων με τη Jane Austen | [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) | Πρόβλεψη χρονοσειρών με Support Vector Regressor | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Εισαγωγή στην ενισχυτική μάθηση | [Reinforcement learning](8-Reinforcement/README.md) | Εισαγωγή στην ενισχυτική μάθηση με Q-Learning | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Βοηθήστε τον Peter να αποφύγει τον λύκο! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Ενισχυτική μάθηση με Gym | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Σενάρια και εφαρμογές ML στον πραγματικό κόσμο | [ML in the Wild](9-Real-World/README.md) | Ενδιαφέρουσες και αποκαλυπτικές εφαρμογές κλασικής μηχανικής μάθησης | [Lesson](9-Real-World/1-Applications/README.md) | Team | +| Postscript | Εντοπισμός σφαλμάτων μοντέλων ML με τον πίνακα RAI | [ML in the Wild](9-Real-World/README.md) | Εντοπισμός σφαλμάτων μοντέλων μηχανικής μάθησης χρησιμοποιώντας στοιχεία του πίνακα Responsible 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/#/). Κάντε fork αυτό το repo, [εγκαταστήστε το Docsify](https://docsify.js.org/#/quickstart) στον τοπικό σας υπολογιστή και στη συνέχεια, στον βασικό φάκελο αυτού του repo, πληκτρολογήστε `docsify serve`. Ο ιστότοπος θα εξυπηρετείται στην πόρτα 3000 στον localhost σας: `localhost:3000`. + +## PDFs + +Βρείτε ένα pdf του προγράμματος σπουδών με συνδέσμους [εδώ](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + +## 🎒 Άλλα Μαθήματα + +Η ομάδα μας δημιουργεί και άλλα μαθήματα! Δείτε: + +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Paired Programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/SECURITY.md b/translations/el/SECURITY.md new file mode 100644 index 000000000..3466f578e --- /dev/null +++ b/translations/el/SECURITY.md @@ -0,0 +1,51 @@ + +## Ασφάλεια + +Η 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). + +Αν προτιμάτε να υποβάλετε χωρίς να συνδεθείτε, στείλτε email στο [secure@microsoft.com](mailto:secure@microsoft.com). Εάν είναι δυνατόν, κρυπτογραφήστε το μήνυμά σας με το PGP κλειδί μας· μπορείτε να το κατεβάσετε από τη [σελίδα PGP Key του Microsoft Security Response Center](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Θα πρέπει να λάβετε απάντηση εντός 24 ωρών. Εάν για κάποιο λόγο δεν λάβετε, παρακαλούμε να ακολουθήσετε μέσω email για να βεβαιωθείτε ότι λάβαμε το αρχικό σας μήνυμα. Επιπλέον πληροφορίες μπορείτε να βρείτε στη διεύθυνση [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Παρακαλούμε να συμπεριλάβετε τις ζητούμενες πληροφορίες που αναφέρονται παρακάτω (όσο περισσότερες μπορείτε να παρέχετε) για να μας βοηθήσετε να κατανοήσουμε καλύτερα τη φύση και την έκταση του πιθανού ζητήματος: + + * Τύπος ζητήματος (π.χ. buffer overflow, SQL injection, cross-site scripting, κ.λπ.) + * Πλήρη μονοπάτια των αρχείων πηγαίου κώδικα που σχετίζονται με την εκδήλωση του ζητήματος + * Η τοποθεσία του επηρεασμένου πηγαίου κώδικα (tag/branch/commit ή άμεσο URL) + * Οποιαδήποτε ειδική διαμόρφωση απαιτείται για την αναπαραγωγή του ζητήματος + * Βήμα προς βήμα οδηγίες για την αναπαραγωγή του ζητήματος + * Proof-of-concept ή exploit code (αν είναι δυνατόν) + * Επίδραση του ζητήματος, συμπεριλαμβανομένου του τρόπου με τον οποίο ένας επιτιθέμενος μπορεί να εκμεταλλευτεί το ζήτημα + +Αυτές οι πληροφορίες θα μας βοηθήσουν να αξιολογήσουμε την αναφορά σας πιο γρήγορα. + +Αν αναφέρετε για ένα bug bounty, πιο ολοκληρωμένες αναφορές μπορούν να συμβάλουν σε μεγαλύτερη ανταμοιβή. Παρακαλούμε επισκεφθείτε τη [σελίδα του Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) για περισσότερες λεπτομέρειες σχετικά με τα ενεργά προγράμματά μας. + +## Προτιμώμενες Γλώσσες + +Προτιμούμε όλες οι επικοινωνίες να γίνονται στα Αγγλικά. + +## Πολιτική + +Η Microsoft ακολουθεί την αρχή της [Συντονισμένης Αποκάλυψης Ευπαθειών](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτόματες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/SUPPORT.md b/translations/el/SUPPORT.md new file mode 100644 index 000000000..1611ce95f --- /dev/null +++ b/translations/el/SUPPORT.md @@ -0,0 +1,26 @@ + +# Υποστήριξη +## Πώς να αναφέρετε προβλήματα και να λάβετε βοήθεια + +Αυτό το έργο χρησιμοποιεί το GitHub Issues για την παρακολούθηση σφαλμάτων και αιτημάτων λειτουργιών. Παρακαλούμε αναζητήστε τα υπάρχοντα +προβλήματα πριν αναφέρετε νέα, ώστε να αποφύγετε διπλές καταχωρήσεις. Για νέα προβλήματα, αναφέρετε το σφάλμα ή +το αίτημα λειτουργίας σας ως νέο ζήτημα. + +Για βοήθεια και ερωτήσεις σχετικά με τη χρήση αυτού του έργου, αναφέρετε ένα ζήτημα. + +## Πολιτική Υποστήριξης της Microsoft + +Η υποστήριξη για αυτό το αποθετήριο περιορίζεται στους πόρους που αναφέρονται παραπάνω. + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/docs/_sidebar.md b/translations/el/docs/_sidebar.md new file mode 100644 index 000000000..989b2276b --- /dev/null +++ b/translations/el/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Εισαγωγή + - [Εισαγωγή στη Μηχανική Μάθηση](../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) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- Επεξεργασία Φυσικής Γλώσσας (NLP) + - [Εισαγωγή στην Επεξεργασία Φυσικής Γλώσσας](../6-NLP/1-Introduction-to-NLP/README.md) + - [Εργασίες NLP](../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) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Ενισχυτική Μάθηση + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Μηχανική Μάθηση στον Πραγματικό Κόσμο + - [Εφαρμογές](../9-Real-World/1-Applications/README.md) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/for-teachers.md b/translations/el/for-teachers.md new file mode 100644 index 000000000..e46c081d8 --- /dev/null +++ b/translations/el/for-teachers.md @@ -0,0 +1,37 @@ + +## Για Εκπαιδευτικούς + +Θα θέλατε να χρησιμοποιήσετε αυτό το πρόγραμμα σπουδών στην τάξη σας; Μη διστάσετε! + +Στην πραγματικότητα, μπορείτε να το χρησιμοποιήσετε απευθείας μέσα στο GitHub, χρησιμοποιώντας το GitHub Classroom. + +Για να το κάνετε αυτό, κάντε fork αυτό το repo. Θα χρειαστεί να δημιουργήσετε ένα repo για κάθε μάθημα, οπότε θα χρειαστεί να εξαγάγετε κάθε φάκελο σε ξεχωριστό repo. Με αυτόν τον τρόπο, [GitHub Classroom](https://classroom.github.com/classrooms) μπορεί να αναγνωρίσει κάθε μάθημα ξεχωριστά. + +Αυτές οι [πλήρεις οδηγίες](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) θα σας δώσουν μια ιδέα για το πώς να οργανώσετε την τάξη σας. + +## Χρήση του repo όπως είναι + +Αν θέλετε να χρησιμοποιήσετε αυτό το repo όπως είναι, χωρίς να χρησιμοποιήσετε το GitHub Classroom, αυτό είναι επίσης εφικτό. Θα χρειαστεί να επικοινωνήσετε με τους μαθητές σας για να τους καθοδηγήσετε σχετικά με το ποιο μάθημα να δουλέψουν μαζί. + +Σε μια διαδικτυακή μορφή (Zoom, Teams ή άλλο), μπορείτε να δημιουργήσετε ομάδες εργασίας για τα κουίζ και να καθοδηγήσετε τους μαθητές ώστε να είναι έτοιμοι να μάθουν. Στη συνέχεια, προσκαλέστε τους μαθητές να συμμετάσχουν στα κουίζ και να υποβάλουν τις απαντήσεις τους ως 'issues' σε συγκεκριμένη ώρα. Μπορείτε να κάνετε το ίδιο και με τις εργασίες, αν θέλετε οι μαθητές να συνεργαστούν δημόσια. + +Αν προτιμάτε μια πιο ιδιωτική μορφή, ζητήστε από τους μαθητές σας να κάνουν fork το πρόγραμμα σπουδών, μάθημα προς μάθημα, στα δικά τους ιδιωτικά repos στο GitHub και να σας δώσουν πρόσβαση. Έπειτα, μπορούν να ολοκληρώσουν τα κουίζ και τις εργασίες ιδιωτικά και να σας τα υποβάλουν μέσω issues στο repo της τάξης σας. + +Υπάρχουν πολλοί τρόποι για να κάνετε αυτό να λειτουργήσει σε μια διαδικτυακή τάξη. Παρακαλούμε ενημερώστε μας για το τι λειτουργεί καλύτερα για εσάς! + +## Παρακαλούμε δώστε μας τις σκέψεις σας! + +Θέλουμε να κάνουμε αυτό το πρόγραμμα σπουδών να λειτουργεί για εσάς και τους μαθητές σας. Παρακαλούμε δώστε μας [σχόλια](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/quiz-app/README.md b/translations/el/quiz-app/README.md new file mode 100644 index 000000000..29edee7d9 --- /dev/null +++ b/translations/el/quiz-app/README.md @@ -0,0 +1,127 @@ + +# Κουίζ + +Αυτά τα κουίζ είναι τα κουίζ πριν και μετά τη διάλεξη για το πρόγραμμα σπουδών ML στο https://aka.ms/ml-beginners + +## Ρύθμιση έργου + +``` +npm install +``` + +### Συμπίεση και άμεση επαναφόρτωση για ανάπτυξη + +``` +npm run serve +``` + +### Συμπίεση και ελαχιστοποίηση για παραγωγή + +``` +npm run build +``` + +### Έλεγχος και διόρθωση αρχείων + +``` +npm run lint +``` + +### Προσαρμογή ρυθμίσεων + +Δείτε [Αναφορά Ρυθμίσεων](https://cli.vuejs.org/config/). + +Ευχαριστίες: Ευχαριστούμε την αρχική έκδοση αυτής της εφαρμογής κουίζ: https://github.com/arpan45/simple-quiz-vue + +## Ανάπτυξη στο Azure + +Ακολουθεί ένας οδηγός βήμα προς βήμα για να ξεκινήσετε: + +1. Κλωνοποίηση ενός GitHub Repository +Βεβαιωθείτε ότι ο κώδικας της στατικής web εφαρμογής σας βρίσκεται στο GitHub repository σας. Κλωνοποιήστε αυτό το repository. + +2. Δημιουργία μιας Στατικής Web Εφαρμογής στο Azure +- Δημιουργήστε έναν [λογαριασμό Azure](http://azure.microsoft.com) +- Μεταβείτε στο [Azure portal](https://portal.azure.com) +- Κάντε κλικ στο “Create a resource” και αναζητήστε “Static Web App”. +- Κάντε κλικ στο “Create”. + +3. Ρύθμιση της Στατικής Web Εφαρμογής +- Βασικά: + - Συνδρομή: Επιλέξτε τη συνδρομή σας στο Azure. + - Ομάδα Πόρων: Δημιουργήστε μια νέα ομάδα πόρων ή χρησιμοποιήστε μια υπάρχουσα. + - Όνομα: Δώστε ένα όνομα για τη στατική web εφαρμογή σας. + - Περιοχή: Επιλέξτε την περιοχή που είναι πιο κοντά στους χρήστες σας. + +- #### Λεπτομέρειες Ανάπτυξης: + - Πηγή: Επιλέξτε “GitHub”. + - Λογαριασμός GitHub: Εξουσιοδοτήστε το Azure να έχει πρόσβαση στον λογαριασμό σας στο GitHub. + - Οργάνωση: Επιλέξτε την οργάνωση σας στο GitHub. + - Repository: Επιλέξτε το repository που περιέχει τη στατική web εφαρμογή σας. + - Κλάδος: Επιλέξτε τον κλάδο από τον οποίο θέλετε να γίνει η ανάπτυξη. + +- #### Λεπτομέρειες Κατασκευής: + - Προεπιλογές Κατασκευής: Επιλέξτε το framework με το οποίο έχει κατασκευαστεί η εφαρμογή σας (π.χ., React, Angular, Vue, κλπ.). + - Τοποθεσία Εφαρμογής: Καθορίστε τον φάκελο που περιέχει τον κώδικα της εφαρμογής σας (π.χ., / αν βρίσκεται στη ρίζα). + - Τοποθεσία API: Αν έχετε API, καθορίστε την τοποθεσία του (προαιρετικό). + - Τοποθεσία Εξόδου: Καθορίστε τον φάκελο όπου δημιουργείται η έξοδος της κατασκευής (π.χ., build ή dist). + +4. Ανασκόπηση και Δημιουργία +Ανασκοπήστε τις ρυθμίσεις σας και κάντε κλικ στο “Create”. Το Azure θα δημιουργήσει τους απαραίτητους πόρους και θα δημιουργήσει ένα GitHub Actions workflow στο repository σας. + +5. GitHub Actions Workflow +Το Azure θα δημιουργήσει αυτόματα ένα αρχείο GitHub Actions workflow στο repository σας (.github/workflows/azure-static-web-apps-.yml). Αυτό το workflow θα χειριστεί τη διαδικασία κατασκευής και ανάπτυξης. + +6. Παρακολούθηση της Ανάπτυξης +Μεταβείτε στην καρτέλα “Actions” στο repository σας στο GitHub. +Θα πρέπει να δείτε ένα workflow να εκτελείται. Αυτό το workflow θα κατασκευάσει και θα αναπτύξει τη στατική web εφαρμογή σας στο Azure. +Μόλις ολοκληρωθεί το workflow, η εφαρμογή σας θα είναι διαθέσιμη στη διεύθυνση URL που παρέχεται από το Azure. + +### Παράδειγμα Αρχείου Workflow + +Ακολουθεί ένα παράδειγμα του αρχείου GitHub Actions workflow: +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 +``` + +### Πρόσθετοι Πόροι +- [Τεκμηρίωση Στατικών Web Εφαρμογών στο Azure](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [Τεκμηρίωση GitHub Actions](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/sketchnotes/LICENSE.md b/translations/el/sketchnotes/LICENSE.md new file mode 100644 index 000000000..30e2d040e --- /dev/null +++ b/translations/el/sketchnotes/LICENSE.md @@ -0,0 +1,96 @@ + +Διεθνής Άδεια Creative Commons Αναφορά-Παρόμοια Διανομή 4.0 + +======================================================================= + +Η 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 Αναφορά-Παρόμοια Διανομή 4.0 + +Με την άσκηση των Αδειοδοτημένων Δικαιωμάτων (όπως ορίζονται παρακάτω), αποδέχεστε και συμφωνείτε να δεσμεύεστε από τους όρους και τις προϋποθέσεις αυτής της Διεθνούς Δημόσιας Άδειας Creative Commons Αναφορά-Παρόμοια Διανομή 4.0 ("Δημόσια Άδεια"). Στο βαθμό που αυτή η Δημόσια Άδεια μπορεί να ερμηνευθεί ως σύμβαση, σας παραχωρούνται τα Αδειοδοτημένα Δικαιώματα ως αντάλλαγμα για την αποδοχή αυτών των όρων και προϋποθέσεων, και ο Αδειοδότης σας παραχωρεί αυτά τα δικαιώματα ως αντάλλαγμα για τα οφέλη που λαμβάνει από τη διάθεση του Αδειοδοτημένου Υλικού υπό αυτούς τους όρους και προϋποθέσεις. + + +Δικαιώματα, τότε η βάση δεδομένων στην οποία έχετε Δικαιώματα Sui Generis Database (αλλά όχι τα μεμονωμένα περιεχόμενά της) είναι Προσαρμοσμένο Υλικό, + +συμπεριλαμβανομένου για τους σκοπούς του Τμήματος 3(β)· και +γ. Πρέπει να συμμορφώνεστε με τις προϋποθέσεις του Τμήματος 3(α) εάν κοινοποιείτε όλα ή ένα σημαντικό μέρος των περιεχομένων της βάσης δεδομένων. + +Για αποφυγή αμφιβολιών, αυτό το Τμήμα 4 συμπληρώνει και δεν αντικαθιστά τις υποχρεώσεις σας βάσει αυτής της Δημόσιας Άδειας όπου τα Αδειοδοτημένα Δικαιώματα περιλαμβάνουν άλλα Δικαιώματα Πνευματικής Ιδιοκτησίας και Παρόμοια Δικαιώματα. + +--- + +Τμήμα 5 -- Αποποίηση Εγγυήσεων και Περιορισμός Ευθύνης. + +α. ΕΚΤΟΣ ΕΑΝ Ο ΛΟΓΟΘΕΤΗΣ ΕΧΕΙ ΑΝΑΛΑΒΕΙ ΞΕΧΩΡΙΣΤΑ, ΣΤΟ ΜΕΤΡΟ ΤΟΥ ΔΥΝΑΤΟΥ, Ο ΛΟΓΟΘΕΤΗΣ ΠΡΟΣΦΕΡΕΙ ΤΟ ΑΔΕΙΟΔΟΤΗΜΕΝΟ ΥΛΙΚΟ ΩΣ ΕΧΕΙ ΚΑΙ ΩΣ ΔΙΑΘΕΣΙΜΟ, ΚΑΙ ΔΕΝ ΠΑΡΕΧΕΙ ΚΑΜΙΑ ΔΗΛΩΣΗ Ή ΕΓΓΥΗΣΗ ΟΠΟΙΟΥΔΗΠΟΤΕ ΕΙΔΟΥΣ ΣΧΕΤΙΚΑ ΜΕ ΤΟ ΑΔΕΙΟΔΟΤΗΜΕΝΟ ΥΛΙΚΟ, ΕΙΤΕ ΡΗΤΗ, ΕΙΤΕ ΣΙΩΠΗΡΗ, ΕΙΤΕ ΝΟΜΟΘΕΤΙΚΗ, ΕΙΤΕ ΑΛΛΗ. ΑΥΤΟ ΠΕΡΙΛΑΜΒΑΝΕΙ, ΧΩΡΙΣ ΠΕΡΙΟΡΙΣΜΟ, ΕΓΓΥΗΣΕΙΣ ΤΙΤΛΟΥ, ΕΜΠΟΡΕΥΣΙΜΟΤΗΤΑΣ, ΚΑΤΑΛΛΗΛΟΤΗΤΑΣ ΓΙΑ ΣΥΓΚΕΚΡΙΜΕΝΟ ΣΚΟΠΟ, ΜΗ ΠΑΡΑΒΙΑΣΗΣ, ΑΠΟΥΣΙΑΣ ΛΑΝΘΑΝΟΥΣΩΝ Ή ΑΛΛΩΝ ΕΛΑΤΤΩΜΑΤΩΝ, ΑΚΡΙΒΕΙΑΣ Ή ΠΑΡΟΥΣΙΑΣ Ή ΑΠΟΥΣΙΑΣ ΣΦΑΛΜΑΤΩΝ, ΕΙΤΕ ΕΙΝΑΙ ΓΝΩΣΤΑ ΕΙΤΕ ΑΝΑΚΑΛΥΨΙΜΑ. ΟΠΟΥ Η ΑΠΟΠΟΙΗΣΗ ΕΓΓΥΗΣΕΩΝ ΔΕΝ ΕΠΙΤΡΕΠΕΤΑΙ ΕΝ ΜΕΡΕΙ Ή ΕΝ ΟΛΩ, ΑΥΤΗ Η ΑΠΟΠΟΙΗΣΗ ΕΝΔΕΧΕΤΑΙ ΝΑ ΜΗΝ ΙΣΧΥΕΙ ΓΙΑ ΕΣΑΣ. + +β. ΣΤΟ ΜΕΤΡΟ ΤΟΥ ΔΥΝΑΤΟΥ, ΣΕ ΚΑΜΙΑ ΠΕΡΙΠΤΩΣΗ Ο ΛΟΓΟΘΕΤΗΣ ΔΕΝ ΘΑ ΕΙΝΑΙ ΥΠΕΥΘΥΝΟΣ ΠΡΟΣ ΕΣΑΣ ΒΑΣΕΙ ΟΠΟΙΑΣΔΗΠΟΤΕ ΝΟΜΙΚΗΣ ΘΕΩΡΙΑΣ (ΣΥΜΠΕΡΙΛΑΜΒΑΝΟΜΕΝΗΣ, ΧΩΡΙΣ ΠΕΡΙΟΡΙΣΜΟ, ΑΜΕΛΕΙΑΣ) Ή ΑΛΛΩΣ ΓΙΑ ΟΠΟΙΕΣΔΗΠΟΤΕ ΑΜΕΣΕΣ, ΕΙΔΙΚΕΣ, ΕΜΜΕΣΕΣ, ΣΥΜΠΤΩΜΑΤΙΚΕΣ, ΣΥΝΕΠΑΓΟΜΕΝΕΣ, ΠΟΙΝΙΚΕΣ, ΠΑΡΑΔΕΙΓΜΑΤΙΚΕΣ Ή ΑΛΛΕΣ ΖΗΜΙΕΣ, ΚΟΣΤΗ, ΕΞΟΔΑ Ή ΑΠΩΛΕΙΕΣ ΠΟΥ ΠΡΟΚΥΠΤΟΥΝ ΑΠΟ ΑΥΤΗ ΤΗ ΔΗΜΟΣΙΑ ΑΔΕΙΑ Ή ΤΗ ΧΡΗΣΗ ΤΟΥ ΑΔΕΙΟΔΟΤΗΜΕΝΟΥ ΥΛΙΚΟΥ, ΑΚΟΜΑ ΚΑΙ ΑΝ Ο ΛΟΓΟΘΕΤΗΣ ΕΧΕΙ ΕΝΗΜΕΡΩΘΕΙ ΓΙΑ ΤΗΝ ΠΙΘΑΝΟΤΗΤΑ ΤΕΤΟΙΩΝ ΑΠΩΛΕΙΩΝ, ΚΟΣΤΩΝ, ΕΞΟΔΩΝ Ή ΖΗΜΙΩΝ. ΟΠΟΥ Ο ΠΕΡΙΟΡΙΣΜΟΣ ΕΥΘΥΝΗΣ ΔΕΝ ΕΠΙΤΡΕΠΕΤΑΙ ΕΝ ΜΕΡΕΙ Ή ΕΝ ΟΛΩ, ΑΥΤΟΣ Ο ΠΕΡΙΟΡΙΣΜΟΣ ΕΝΔΕΧΕΤΑΙ ΝΑ ΜΗΝ ΙΣΧΥΕΙ ΓΙΑ ΕΣΑΣ. + +γ. Η αποποίηση εγγυήσεων και ο περιορισμός ευθύνης που παρέχονται παραπάνω θα ερμηνεύονται κατά τρόπο που, στο μέτρο του δυνατού, προσεγγίζει περισσότερο μια απόλυτη αποποίηση και παραίτηση από κάθε ευθύνη. + +--- + +Τμήμα 6 -- Διάρκεια και Λήξη. + +α. Αυτή η Δημόσια Άδεια ισχύει για τη διάρκεια των Δικαιωμάτων Πνευματικής Ιδιοκτησίας και Παρόμοιων Δικαιωμάτων που αδειοδοτούνται εδώ. Ωστόσο, εάν δεν συμμορφώνεστε με αυτή τη Δημόσια Άδεια, τότε τα δικαιώματά σας βάσει αυτής της Δημόσιας Άδειας τερματίζονται αυτόματα. + +β. Όπου το δικαίωμά σας να χρησιμοποιείτε το Αδειοδοτημένο Υλικό έχει τερματιστεί βάσει του Τμήματος 6(α), επανέρχεται: + +1. αυτόματα από την ημερομηνία που διορθώνεται η παραβίαση, υπό την προϋπόθεση ότι διορθώνεται εντός 30 ημερών από την ανακάλυψη της παραβίασης· ή +2. με ρητή επανενεργοποίηση από τον Λογοθέτη. + +Για αποφυγή αμφιβολιών, αυτό το Τμήμα 6(β) δεν επηρεάζει οποιοδήποτε δικαίωμα που μπορεί να έχει ο Λογοθέτης να επιδιώξει ένδικα μέσα για τις παραβιάσεις σας αυτής της Δημόσιας Άδειας. + +γ. Για αποφυγή αμφιβολιών, ο Λογοθέτης μπορεί επίσης να προσφέρει το Αδειοδοτημένο Υλικό υπό ξεχωριστούς όρους ή προϋποθέσεις ή να σταματήσει να διανέμει το Αδειοδοτημένο Υλικό οποιαδήποτε στιγμή· ωστόσο, αυτό δεν θα τερματίσει αυτή τη Δημόσια Άδεια. + +δ. Τα Τμήματα 1, 5, 6, 7 και 8 παραμένουν σε ισχύ μετά τη λήξη αυτής της Δημόσιας Άδειας. + +--- + +Τμήμα 7 -- Άλλοι Όροι και Προϋποθέσεις. + +α. Ο Λογοθέτης δεν δεσμεύεται από οποιουσδήποτε πρόσθετους ή διαφορετικούς όρους ή προϋποθέσεις που επικοινωνούνται από εσάς, εκτός εάν συμφωνηθούν ρητά. + +β. Οποιαδήποτε διευθέτηση, κατανόηση ή συμφωνία σχετικά με το Αδειοδοτημένο Υλικό που δεν αναφέρεται εδώ είναι ξεχωριστή και ανεξάρτητη από τους όρους και τις προϋποθέσεις αυτής της Δημόσιας Άδειας. + +--- + +Τμήμα 8 -- Ερμηνεία. + +α. Για αποφυγή αμφιβολιών, αυτή η Δημόσια Άδεια δεν μειώνει, περιορίζει, περιορίζει ή επιβάλλει προϋποθέσεις σε οποιαδήποτε χρήση του Αδειοδοτημένου Υλικού που θα μπορούσε νόμιμα να γίνει χωρίς άδεια βάσει αυτής της Δημόσιας Άδειας. + +β. Στο μέτρο του δυνατού, εάν οποιαδήποτε διάταξη αυτής της Δημόσιας Άδειας θεωρηθεί ανεφάρμοστη, θα αναμορφωθεί αυτόματα στο ελάχιστο απαραίτητο για να καταστεί εφαρμόσιμη. Εάν η διάταξη δεν μπορεί να αναμορφωθεί, θα αποκοπεί από αυτή τη Δημόσια Άδεια χωρίς να επηρεαστεί η εφαρμοσιμότητα των υπόλοιπων όρων και προϋποθέσεων. + +γ. Κανένας όρος ή προϋπόθεση αυτής της Δημόσιας Άδειας δεν θα παραιτηθεί και καμία αποτυχία συμμόρφωσης δεν θα θεωρηθεί ότι έχει γίνει αποδεκτή, εκτός εάν συμφωνηθεί ρητά από τον Λογοθέτη. + +δ. Τίποτα σε αυτή τη Δημόσια Άδεια δεν συνιστά ή μπορεί να ερμηνευθεί ως περιορισμός ή παραίτηση από οποιαδήποτε προνόμια και ασυλίες που ισχύουν για τον Λογοθέτη ή εσάς, συμπεριλαμβανομένων των νομικών διαδικασιών οποιασδήποτε δικαιοδοσίας ή αρχής. + +--- + +======================================================================= + +Το Creative Commons δεν αποτελεί μέρος των δημόσιων αδειών του. Παρ' όλα αυτά, το Creative Commons μπορεί να επιλέξει να εφαρμόσει μία από τις δημόσιες άδειές του σε υλικό που δημοσιεύει και σε αυτές τις περιπτώσεις θα θεωρείται ο "Λογοθέτης". Το κείμενο των δημόσιων αδειών του Creative Commons είναι αφιερωμένο στο δημόσιο τομέα βάσει της CC0 Public Domain Dedication. Εκτός από τον περιορισμένο σκοπό της ένδειξης ότι το υλικό κοινοποιείται βάσει δημόσιας άδειας Creative Commons ή όπως επιτρέπεται από τις πολιτικές του Creative Commons που δημοσιεύονται στο creativecommons.org/policies, το Creative Commons δεν εξουσιοδοτεί τη χρήση του εμπορικού σήματος "Creative Commons" ή οποιουδήποτε άλλου εμπορικού σήματος ή λογότυπου του Creative Commons χωρίς την προηγούμενη γραπτή συγκατάθεσή του, συμπεριλαμβανομένων, χωρίς περιορισμό, σε σχέση με οποιεσδήποτε μη εξουσιοδοτημένες τροποποιήσεις σε οποιαδήποτε από τις δημόσιες άδειές του ή οποιεσδήποτε άλλες διευθετήσεις, κατανοήσεις ή συμφωνίες σχετικά με τη χρήση αδειοδοτημένου υλικού. Για αποφυγή αμφιβολιών, αυτή η παράγραφος δεν αποτελεί μέρος των δημόσιων αδειών. + +Το Creative Commons μπορεί να επικοινωνηθεί στο creativecommons.org. + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία αυτόματης μετάφρασης [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν σφάλματα ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ No newline at end of file diff --git a/translations/el/sketchnotes/README.md b/translations/el/sketchnotes/README.md new file mode 100644 index 000000000..e7ab9297c --- /dev/null +++ b/translations/el/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Όλες οι σημειώσεις σκίτσων του προγράμματος σπουδών μπορούν να ληφθούν εδώ. + +🖨 Για εκτύπωση σε υψηλή ανάλυση, οι εκδόσεις 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/) + +--- + +**Αποποίηση ευθύνης**: +Αυτό το έγγραφο έχει μεταφραστεί χρησιμοποιώντας την υπηρεσία μετάφρασης AI [Co-op Translator](https://github.com/Azure/co-op-translator). Παρόλο που καταβάλλουμε προσπάθειες για ακρίβεια, παρακαλούμε να έχετε υπόψη ότι οι αυτοματοποιημένες μεταφράσεις ενδέχεται να περιέχουν λάθη ή ανακρίβειες. Το πρωτότυπο έγγραφο στη μητρική του γλώσσα θα πρέπει να θεωρείται η αυθεντική πηγή. Για κρίσιμες πληροφορίες, συνιστάται επαγγελματική ανθρώπινη μετάφραση. Δεν φέρουμε ευθύνη για τυχόν παρεξηγήσεις ή εσφαλμένες ερμηνείες που προκύπτουν από τη χρήση αυτής της μετάφρασης. \ 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 index 904279355..d9abed8ea 100644 --- a/translations/es/1-Introduction/1-intro-to-ML/README.md +++ b/translations/es/1-Introduction/1-intro-to-ML/README.md @@ -1,23 +1,23 @@ # Introducción al aprendizaje automático -## [Cuestionario previo a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [Cuestionario previo a la clase](https://ff-quizzes.netlify.app/en/ml/) --- [![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. +> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre esta lección. -¡Bienvenido a este curso sobre 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). +¡Bienvenido a este curso sobre 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 estaremos encantados de evaluar, responder e incorporar tus [comentarios](https://github.com/microsoft/ML-For-Beginners/discussions). [![Introducción al aprendizaje automático](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introducción al aprendizaje automático") @@ -26,11 +26,11 @@ CO_OP_TRANSLATOR_METADATA: --- ## 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. +Antes de comenzar con este plan de estudios, necesitas tener tu computadora configurada y lista para ejecutar notebooks de manera local. -- **Configura tu máquina con estos videos**. Usa 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 desarrollo. +- **Configura tu máquina con estos videos**. Usa 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 utilizamos 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 para desarrollo tanto en Python como en JavaScript. +- **Aprende Node.js y JavaScript**. También utilizamos 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 para el desarrollo tanto en Python como en JavaScript. - **Crea una cuenta de GitHub**. Ya 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. (También puedes 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. @@ -42,7 +42,7 @@ El término 'aprendizaje automático' es uno de los más populares y frecuenteme --- ## La curva de expectativas -![curva de expectativas de ML](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.es.png) +![curva de expectativas de ML](../../../../1-Introduction/1-intro-to-ML/images/hype.png) > Google Trends muestra la reciente 'curva de expectativas' del término 'aprendizaje automático'. @@ -59,7 +59,7 @@ El cerebro y los sentidos de un niño perciben los hechos de su entorno y gradua --- ## 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). +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 de manera inteligente. Cuando programamos una réplica del proceso de comportamiento inteligente en una máquina, se llama inteligencia artificial (IA). --- ## Algunos términos @@ -69,14 +69,14 @@ Aunque los términos pueden confundirse, el aprendizaje automático (ML) es un s --- ## IA, ML, Aprendizaje profundo -![IA, ML, aprendizaje profundo, ciencia de datos](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.es.png) +![IA, ML, aprendizaje profundo, ciencia de datos](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) > Un diagrama que muestra las relaciones entre IA, ML, aprendizaje profundo y ciencia de datos. Infografía por [Jen Looper](https://twitter.com/jenlooper) inspirada en [este gráfico](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', principalmente utilizando Scikit-learn, una excelente biblioteca que muchos estudiantes usan para aprender los fundamentos. Para entender conceptos más amplios de inteligencia artificial o aprendizaje profundo, es indispensable un conocimiento fundamental sólido del aprendizaje automático, y queremos ofrecerlo aquí. +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', principalmente utilizando Scikit-learn, una excelente biblioteca que muchos estudiantes usan para aprender los fundamentos. Para entender conceptos más amplios de inteligencia artificial o aprendizaje profundo, es indispensable tener un conocimiento fundamental sólido del aprendizaje automático, y por eso queremos ofrecerlo aquí. --- ## En este curso aprenderás: @@ -99,7 +99,7 @@ En este plan de estudios, vamos a cubrir solo los conceptos básicos del aprendi - redes neuronales - IA -Para ofrecer una mejor experiencia de aprendizaje, evitaremos las complejidades de las redes neuronales, el 'aprendizaje profundo' - construcción de modelos con muchas capas utilizando 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. +Para ofrecer una mejor experiencia de aprendizaje, evitaremos las complejidades de las redes neuronales, el 'aprendizaje profundo' - construcción de modelos con muchas capas utilizando redes neuronales - y la IA, que discutiremos en un plan de estudios diferente. También ofreceremos un próximo plan de estudios sobre ciencia de datos para centrarnos en ese aspecto de este campo más amplio. --- ## ¿Por qué estudiar aprendizaje automático? @@ -125,7 +125,7 @@ Las aplicaciones del aprendizaje automático están ahora casi en todas partes y - 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, ciencias cognitivas e incluso campos en las humanidades han adaptado el aprendizaje automático para resolver los arduos problemas de procesamiento de datos en sus áreas. +Finanzas, economía, ciencias de la tierra, exploración espacial, ingeniería biomédica, ciencias cognitivas e incluso áreas de las humanidades han adaptado el aprendizaje automático para resolver los arduos problemas de procesamiento de datos en sus dominios. --- ## Conclusión @@ -137,9 +137,9 @@ En un futuro cercano, entender los fundamentos del aprendizaje automático será --- # 🚀 Desafío -Dibuja, en papel o usando 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 sobre los problemas que cada una de estas técnicas es buena resolviendo. +Dibuja, en papel o usando 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 sobre los problemas que cada una de estas técnicas es buena para resolver. -# [Cuestionario posterior a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [Cuestionario posterior a la clase](https://ff-quizzes.netlify.app/en/ml/) --- # Revisión y autoestudio @@ -151,9 +151,9 @@ Toma un [Camino de Aprendizaje](https://docs.microsoft.com/learn/modules/introdu --- # Tarea -[Comienza a trabajar](assignment.md) +[Ponte en marcha](assignment.md) --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 malentendidos o interpretaciones erróneas que puedan surgir 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 index 9d2a7fd2d..3f4e91222 100644 --- a/translations/es/1-Introduction/2-history-of-ML/README.md +++ b/translations/es/1-Introduction/2-history-of-ML/README.md @@ -1,24 +1,24 @@ # Historia del aprendizaje automático -![Resumen de la historia del aprendizaje automático en un sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.es.png) +![Resumen de la historia del aprendizaje automático en un sketchnote](../../../../sketchnotes/ml-history.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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) --- [![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. +> 🎥 Haz clic en la imagen de arriba para ver un breve video 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. @@ -38,7 +38,7 @@ La historia de la inteligencia artificial (IA) como campo está entrelazada con - 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 destacan como fundamentales en la historia del aprendizaje automático y la inteligencia artificial? +✅ Investiga un poco. ¿Qué otras fechas destacan como fundamentales en la historia del aprendizaje automático y la IA? --- ## 1950: Máquinas que piensan @@ -50,11 +50,11 @@ Alan Turing, una persona verdaderamente extraordinaria que fue votada [por el p "El Proyecto de investigación de verano en 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, en principio, describirse tan precisamente que se puede construir una máquina para simularlo. +> Cada aspecto del aprendizaje o cualquier otra característica de la inteligencia puede, en principio, describirse tan precisamente que se pueda construir una máquina que 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, en principio, describirse tan precisamente que se puede construir una máquina para simularlo". Los participantes incluyeron a otro destacado en el campo, Marvin Minsky. +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, en principio, describirse tan precisamente que se pueda construir una máquina que lo simule". Los participantes incluyeron a otro destacado en el campo, Marvin Minsky. El taller es reconocido por haber iniciado y fomentado varias discusiones, incluyendo "el auge de los métodos simbólicos, sistemas enfocados en dominios limitados (primeros sistemas expertos) y sistemas deductivos frente a sistemas inductivos". ([fuente](https://wikipedia.org/wiki/Dartmouth_workshop)). @@ -71,14 +71,14 @@ La investigación fue bien financiada por agencias gubernamentales, se lograron * [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, un robot inteligente](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > Shakey en 1972 --- * Eliza, un primer 'chatterbot', podía conversar con personas y actuar como un 'terapeuta' primitivo. Aprenderás más sobre Eliza en las lecciones de procesamiento de lenguaje natural. - ![Eliza, un bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.es.png) + ![Eliza, un bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) > Una versión de Eliza, un chatbot --- @@ -96,7 +96,7 @@ A mediados de los años 70, se hizo evidente que la complejidad de crear 'máqui --- - **Limitaciones**. La potencia computacional era demasiado limitada. - **Explosión combinatoria**. La cantidad de parámetros necesarios para entrenar creció exponencialmente a medida que se pedía más a las computadoras, sin una evolución paralela de la potencia y capacidad computacional. -- **Escasez de datos**. Había una escasez de datos que dificultaba el proceso de prueba, desarrollo y refinamiento de algoritmos. +- **Escasez de datos**. Había una escasez de datos que dificultaba el proceso de probar, desarrollar y refinar algoritmos. - **¿Estamos haciendo las preguntas correctas?**. Las mismas preguntas que se estaban planteando comenzaron a ser cuestionadas. Los investigadores comenzaron a recibir críticas sobre sus enfoques: - Los tests de Turing fueron cuestionados 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. @@ -108,11 +108,11 @@ Al mismo tiempo, comenzaron a formarse varias escuelas de pensamiento sobre IA. --- ## Sistemas expertos en los años 80 -A medida que el campo creció, su beneficio para los negocios se hizo más claro, y en los años 80 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)). +A medida que el campo creció, su beneficio para los negocios 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 sistema es en realidad _híbrido_, compuesto parcialmente por un motor de reglas que define los requisitos comerciales y un motor de inferencia que aprovecha el sistema de reglas para deducir nuevos hechos. +Este tipo de sistema es en realidad _híbrido_, compuesto parcialmente por un motor de reglas que define los requisitos empresariales y un motor de inferencia que aprovecha el sistema de reglas para deducir nuevos hechos. -Esta era también vio una atención creciente hacia las redes neuronales. +Esta era también vio una creciente atención hacia las redes neuronales. --- ## 1987 - 1993: Enfriamiento de la IA @@ -122,7 +122,7 @@ La proliferación de hardware especializado para sistemas expertos tuvo el desaf --- ## 1993 - 2011 -Esta época marcó una nueva era para el aprendizaje automático y la IA, permitiendo resolver algunos de los problemas que habían sido causados anteriormente por la falta de datos y potencia computacional. La cantidad de datos comenzó a aumentar rápidamente y a estar más ampliamente disponible, para bien y para mal, especialmente con la llegada del smartphone alrededor de 2007. La potencia computacional se expandió exponencialmente, y los algoritmos evolucionaron junto con ella. El campo comenzó a ganar madurez a medida que los días desenfrenados del pasado comenzaron a cristalizarse en una verdadera disciplina. +Esta época marcó una nueva era para el aprendizaje automático y la IA, permitiendo resolver algunos de los problemas causados anteriormente por la falta de datos y potencia computacional. La cantidad de datos comenzó a aumentar rápidamente y a estar más ampliamente disponible, para bien y para mal, especialmente con la llegada del smartphone alrededor de 2007. La potencia computacional se expandió exponencialmente, y los algoritmos evolucionaron junto con ella. El campo comenzó a ganar madurez a medida que los días desenfrenados del pasado comenzaron a cristalizarse en una verdadera disciplina. --- ## Hoy @@ -134,19 +134,19 @@ Hoy en día, el aprendizaje automático y la IA tocan casi todas las partes de n Queda por ver qué depara el futuro, pero es importante comprender estos sistemas informáticos y el software y los 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 ver un video: Yann LeCun analiza la historia del aprendizaje profundo en esta conferencia +> 🎥 Haz clic en la imagen de arriba para ver un video: Yann LeCun habla sobre 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/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) --- ## Revisión y autoestudio -Aquí hay elementos para ver y escuchar: +Aquí tienes elementos para ver y escuchar: [Este podcast donde Amy Boyd analiza la evolución de la IA](http://runasradio.com/Shows/Show/739) @@ -161,4 +161,4 @@ Aquí hay elementos para ver y escuchar: --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index 99f2931b3..a9c3a3f89 100644 --- a/translations/es/1-Introduction/3-fairness/README.md +++ b/translations/es/1-Introduction/3-fairness/README.md @@ -1,28 +1,28 @@ # 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) +![Resumen de IA responsable en aprendizaje automático en un sketchnote](../../../../sketchnotes/ml-fairness.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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ## 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 médicos, 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 no deseado. Es por eso que es esencial poder entender y explicar el comportamiento de un modelo de IA. +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 médicos, 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 algún grupo demográfico? ¿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. +Imagina lo que puede suceder cuando los datos que utilizas para construir estos modelos carecen de ciertos grupos demográficos, como raza, género, visión política, religión, o representan desproporcionadamente dichos grupos. ¿Qué pasa cuando la salida del modelo se interpreta para favorecer a algún grupo demográfico? ¿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, aprenderás a: -- Reconocer la importancia de la equidad en el aprendizaje automático y los daños relacionados con la falta de equidad. +- Concienciarte sobre la importancia de la equidad en el aprendizaje automático y los daños relacionados con la falta de equidad. - Familiarizarte con la práctica de explorar valores atípicos y escenarios inusuales para garantizar confiabilidad y seguridad. - Comprender la necesidad de empoderar a todos mediante el diseño de sistemas inclusivos. - Explorar lo vital que es proteger la privacidad y seguridad de los datos y las personas. @@ -31,13 +31,13 @@ En esta lección, aprenderás a: ## Prerrequisito -Como prerrequisito, toma el "Camino de Aprendizaje de Principios de IA Responsable" y mira el video a continuación sobre el tema: +Como prerrequisito, toma el "Camino de Aprendizaje de Principios de IA Responsable" y mira el siguiente video sobre el tema: Aprende más sobre IA Responsable siguiendo este [Camino 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 +> 🎥 Haz clic en la imagen de arriba para ver el video: Enfoque de Microsoft hacia la IA Responsable ## Equidad @@ -45,23 +45,23 @@ Los sistemas de IA deben tratar a todos de manera justa y evitar afectar a grupo **“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 pueden clasificarse como: -- **Asignación**, si un género o etnia, por ejemplo, es favorecido sobre otro. +- **Asignación**, si, por ejemplo, se favorece 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, esto lleva a un servicio de bajo rendimiento. Por ejemplo, un dispensador de jabón 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ó erróneamente imágenes de personas de piel oscura como gorilas. +- **Denigración**. Criticar y etiquetar algo o alguien de manera injusta. Por ejemplo, una tecnología de etiquetado de imágenes etiquetó erróneamente imágenes de personas de piel oscura como gorilas. - **Sobre- o sub-representación**. La idea de que un cierto grupo no se ve en una determinada 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 entre inglés y turco puede tener inexactitudes debido a palabras con asociaciones estereotipadas de género. +- **Estereotipos**. Asociar un grupo dado con atributos preasignados. Por ejemplo, un sistema de traducción entre inglés y turco puede tener inexactitudes debido a palabras con asociaciones estereotípicas de género. -![traducción al turco](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.es.png) +![traducción al turco](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > traducción al turco -![traducción de regreso al inglés](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.es.png) -> traducción de regreso al inglés +![traducción de vuelta al inglés](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.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, las cuales también están prohibidas para los seres humanos. Garantizar la equidad en la IA y el aprendizaje automático sigue siendo un desafío sociotécnico complejo. ### Confiabilidad y seguridad -Para generar confianza, los sistemas de IA deben ser confiables, 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 valores atípicos. Al construir soluciones de IA, se necesita un enfoque sustancial en cómo manejar una amplia variedad de circunstancias que las soluciones de IA podrían encontrar. Por ejemplo, un automóvil autónomo debe priorizar la seguridad de las personas. Como resultado, la IA que impulsa el automóvil necesita considerar todos los posibles escenarios que el automóvil podría enfrentar, como la 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 confiable y segura refleja el nivel de anticipación que el científico de datos o desarrollador de IA consideró durante el diseño o prueba del sistema. +Para generar confianza, los sistemas de IA deben ser confiables, 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 valores atípicos. Al construir soluciones de IA, se necesita un enfoque sustancial en cómo manejar una amplia variedad de circunstancias que las soluciones de IA podrían encontrar. Por ejemplo, un automóvil autónomo debe priorizar la seguridad de las personas. Como resultado, la IA que impulsa el automóvil debe considerar todos los posibles escenarios que el automóvil podría enfrentar, como la noche, tormentas eléctricas o ventiscas, niños cruzando la calle, mascotas, construcciones en la carretera, etc. Qué tan bien un sistema de IA puede manejar una amplia gama de condiciones de manera confiable y segura refleja el nivel de anticipación que el científico de datos o desarrollador de IA consideró durante el diseño o prueba del sistema. > [🎥 Haz clic aquí para ver un video: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) @@ -73,7 +73,7 @@ Los sistemas de IA deben diseñarse para involucrar y empoderar a todos. Al dise ### Seguridad y privacidad -Los sistemas de IA deben ser seguros y respetar la privacidad de las personas. Las personas tienen menos confianza en 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, ¿los datos fueron enviados por el usuario o estaban disponibles públicamente? Luego, al trabajar con los datos, es crucial desarrollar sistemas de IA que puedan proteger 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 está volviendo más crítico y complejo. Los problemas de privacidad y seguridad de datos requieren especial atención en 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. +Los sistemas de IA deben ser seguros y respetar la privacidad de las personas. Las personas tienen menos confianza en 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, ¿los datos fueron enviados por el usuario o estaban disponibles públicamente? Luego, al trabajar con los datos, es crucial desarrollar sistemas de IA que puedan proteger 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 está volviendo más crítico y complejo. Los problemas de privacidad y seguridad de los datos requieren especial atención en 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 ver un video: seguridad en IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) @@ -81,7 +81,7 @@ Los sistemas de IA deben ser seguros y respetar la privacidad de las personas. L - 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 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 utiliza para mejorar la seguridad. Por ejemplo, la mayoría de los escáneres antivirus modernos están impulsados por heurísticas de IA. -- Necesitamos asegurarnos de que nuestros procesos de ciencia de datos se integren armoniosamente con las últimas prácticas de privacidad y seguridad. +- Necesitamos asegurarnos de que nuestros procesos de Ciencia de Datos se integren armoniosamente con las últimas prácticas de privacidad y seguridad. ### Transparencia @@ -95,24 +95,24 @@ Los sistemas de IA deben ser comprensibles. Una parte crucial de la transparenci ### 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 utilizadas por un gobierno para poner en riesgo las libertades fundamentales de sus ciudadanos al, por ejemplo, habilitar 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 las personas o la sociedad. +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 utilizadas por un gobierno para poner en riesgo las libertades fundamentales de sus ciudadanos, por ejemplo, habilitando 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 las personas o la sociedad. -[![Investigador líder en IA advierte sobre 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") +[![Investigador líder en IA advierte sobre vigilancia masiva a través del reconocimiento facial](../../../../1-Introduction/3-fairness/images/accountability.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 vigilancia masiva a través del reconocimiento facial +> 🎥 Haz clic en la imagen de arriba para ver el video: Advertencias sobre vigilancia masiva a través del reconocimiento facial En última instancia, una de las mayores preguntas para nuestra generación, como la primera generación que está llevando la IA a la sociedad, es cómo garantizar que las computadoras sigan siendo responsables ante las personas y cómo garantizar 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 entender el propósito del sistema de IA; cuál es su uso previsto; dónde se desplegará; y quién interactuará con el sistema. Estas evaluaciones son útiles para los revisores o evaluadores del sistema para saber qué factores considerar al identificar riesgos potenciales y consecuencias esperadas. +Antes de entrenar un modelo de aprendizaje automático, es importante realizar una evaluación de impacto para entender el propósito del sistema de IA; cuál es el uso previsto; dónde se desplegará; y quién interactuará con el sistema. Esto es útil para los revisores o evaluadores del sistema para saber qué factores considerar al identificar riesgos potenciales 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 compatible o cualquier limitación conocida que obstaculice el rendimiento del sistema es vital para garantizar que el sistema no se utilice de manera que pueda causar daño a las personas. * **Requisitos de datos**. Comprender cómo y dónde el sistema utilizará datos permite a los revisores explorar cualquier requisito de datos que debas tener en cuenta (por ejemplo, regulaciones de datos como GDPR o HIPAA). Además, examina si la fuente o cantidad de datos es suficiente 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 aprendizaje automático, revisa si los problemas identificados se han mitigado o abordado. -* **Metas aplicables** para cada uno de los seis principios fundamentales. Evalúa si se cumplen las metas de cada principio y si hay alguna brecha. +* **Metas aplicables** para cada uno de los seis principios fundamentales. Evalúa si las metas de cada principio se cumplen y si hay alguna brecha. ## Depuración con IA responsable @@ -120,45 +120,45 @@ Al igual que depurar una aplicación de software, depurar un sistema de IA es un * **Análisis de errores**. Para identificar la distribución de errores del modelo que puede afectar la equidad o confiabilidad del sistema. * **Visión general del modelo**. Para descubrir dónde hay disparidades en el rendimiento del modelo entre 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 confiabilidad. +* **Análisis de datos**. Para entender la distribución de datos e identificar cualquier sesgo potencial en los datos que podría generar problemas de equidad, inclusión y confiabilidad. * **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: +Para prevenir daños desde el principio, deberíamos: -- tener diversidad de antecedentes y perspectivas entre las personas que trabajan en los sistemas +- contar con 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 problemas de IA responsable cuando ocurran Piensa en escenarios de la vida real donde la falta de confianza en un modelo sea evidente en su construcción y uso. ¿Qué más deberíamos considerar? -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) + ## Revisión y autoestudio -En esta lección, has aprendido algunos conceptos básicos sobre la equidad y la falta de equidad en el aprendizaje automático. -Mira este taller para profundizar en los temas: +En esta lección, has aprendido algunos conceptos básicos sobre la equidad y la falta de equidad en el aprendizaje automático. +Mira este taller para profundizar en los temas: - En busca de una IA responsable: Llevando los principios a la práctica por Besmira Nushi, Mehrnoosh Sameki y Amit Sharma [![Responsible AI 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 el video: RAI Toolbox: Un marco de código abierto para construir IA responsable por Besmira Nushi, Mehrnoosh Sameki y Amit Sharma -Además, lee: +Además, lee: -- Centro de recursos de IA responsable de Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- Centro de recursos de RAI de Microsoft: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- Grupo de investigación FATE de Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- Grupo de investigación FATE de Microsoft: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -RAI Toolbox: +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) +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) ## Tarea @@ -167,4 +167,4 @@ Lee sobre las herramientas de Azure Machine Learning para garantizar la equidad: --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index c592544e3..86216de1a 100644 --- a/translations/es/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/es/1-Introduction/4-techniques-of-ML/README.md @@ -1,8 +1,8 @@ # Comienza con Python y Scikit-learn para modelos de regresión -![Resumen de regresiones en un sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.es.png) +![Resumen de regresiones en un sketchnote](../../../../sketchnotes/ml-regression.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/9/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) > ### [¡Esta lección está disponible en R!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) @@ -32,7 +32,7 @@ En esta lección, aprenderás a: [![ML para principiantes - Configura tus herramientas para construir modelos de aprendizaje automático](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML para principiantes - Configura tus herramientas para construir modelos de aprendizaje automático") -> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre cómo configurar tu computadora para ML. +> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre cómo configurar tu computadora para ML. 1. **Instalar 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 disponibles [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. @@ -58,7 +58,7 @@ Los notebooks son un entorno interactivo que permite al desarrollador tanto codi [![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 breve video sobre este ejercicio. +> 🎥 Haz clic en la imagen de arriba para ver un video corto sobre este ejercicio. ### Ejercicio - trabajar con un notebook @@ -81,11 +81,11 @@ En esta carpeta, encontrarás el archivo _notebook.ipynb_. hello notebook ``` -![VS Code con un notebook abierto](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.es.jpg) +![VS Code con un notebook abierto](../../../../2-Regression/1-Tools/images/notebook.jpg) Puedes intercalar tu código con comentarios para auto-documentar el notebook. -✅ Piensa por un momento en cómo es diferente el entorno de trabajo de un desarrollador web frente al de un científico de datos. +✅ Piensa por un momento en cómo es diferente 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 @@ -103,11 +103,11 @@ Scikit-learn hace que sea sencillo construir modelos y evaluarlos para su uso. S [![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 breve video sobre este ejercicio. +> 🎥 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 'papelera'. -En esta sección, trabajarás con un pequeño conjunto de datos sobre diabetes que está integrado en Scikit-learn para fines de aprendizaje. Imagina que quisieras 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, basándote en 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. +En esta sección, trabajarás con un pequeño conjunto de datos sobre diabetes que está integrado en Scikit-learn para propósitos de aprendizaje. Imagina que quisieras 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, basándote en 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 quieres predecir la altura probable de una persona dada su edad, usarías regresión lineal, ya que estás buscando un **valor numérico**. Si estás interesado en descubrir si un tipo de cocina debería considerarse vegana o no, estás buscando una **asignación de categoría**, por lo que usarías regresión logística. Aprenderás más sobre 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. @@ -117,7 +117,7 @@ Vamos a comenzar con esta tarea. 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. +- **matplotlib**. Es una herramienta útil para [graficar](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). @@ -185,7 +185,7 @@ En una nueva celda de código, carga el conjunto de datos de diabetes llamando a X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) ``` -4. 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()`: +4. ¡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() @@ -200,7 +200,7 @@ En una nueva celda de código, carga el conjunto de datos de diabetes llamando a y_pred = model.predict(X_test) ``` -6. Ahora es momento de mostrar los datos en un gráfico. Matplotlib es una herramienta muy útil para esta tarea. Crea un gráfico 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 grupos de datos del modelo. +6. Ahora es momento de mostrar los datos en un gráfico. Matplotlib es una herramienta muy útil para esta tarea. Crea un gráfico 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 grupos de datos del modelo. ```python plt.scatter(X_test, y_test, color='black') @@ -211,21 +211,21 @@ En una nueva celda de código, carga el conjunto de datos de diabetes llamando a plt.show() ``` - ![un gráfico de dispersión mostrando puntos de datos sobre diabetes](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.es.png) + ![un gráfico de dispersión mostrando puntos de datos sobre diabetes](../../../../2-Regression/1-Tools/images/scatterplot.png) ✅ Piensa un poco en lo que está sucediendo aquí. Una línea recta está atravesando 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! +¡Felicidades! Has construido tu primer modelo de regresión lineal, creado una predicción con él y la has mostrado 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 posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## 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). +En este tutorial, trabajaste con regresión lineal simple, en lugar de regresión univariante 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 responderse con 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. @@ -236,4 +236,4 @@ Lee más sobre el concepto de regresión y piensa en qué tipo de preguntas pued --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index e8f28ff21..a54efd0ae 100644 --- a/translations/es/2-Regression/2-Data/README.md +++ b/translations/es/2-Regression/2-Data/README.md @@ -1,46 +1,46 @@ # 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 de visualización de datos](../../../../2-Regression/2-Data/images/data-visualization.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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) > ### [¡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 formular preguntas sobre tus datos. Al trabajar con datos y aplicar soluciones de aprendizaje automático, es muy importante saber cómo formular la pregunta correcta para desbloquear adecuadamente el potencial de tu conjunto de datos. +Ahora que tienes las herramientas necesarias para comenzar a construir modelos de aprendizaje automático con Scikit-learn, estás listo para empezar a formular preguntas sobre tus datos. Al trabajar con datos y aplicar soluciones de ML, es muy importante saber 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 construir modelos. - Cómo usar Matplotlib para la visualización de datos. -## Formular la pregunta correcta sobre tus datos +## Hacer la pregunta correcta sobre tus datos -La pregunta que necesitas responder determinará qué tipo de algoritmos de aprendizaje automático utilizarás. Y la calidad de la respuesta que obtengas dependerá en gran medida de la naturaleza de 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 revisión rápida muestra inmediatamente que hay espacios en blanco y una mezcla de datos de tipo cadena y numéricos. También hay una columna extraña llamada 'Package' donde los datos son una mezcla entre 'sacks', 'bins' y otros valores. De hecho, los datos están un poco desordenados. +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 revisión rápida muestra que hay espacios en blanco y una mezcla de datos de tipo cadena y numéricos. También hay una columna extraña llamada 'Package' donde los datos son una mezcla entre 'sacks', 'bins' y otros valores. De hecho, los datos están 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 aprendizaje automático directamente. En esta lección, aprenderás cómo preparar un conjunto de datos sin procesar utilizando bibliotecas estándar de Python. También aprenderás varias técnicas para visualizar los datos. +De hecho, no es muy común recibir un conjunto de datos completamente listo para usar y crear un modelo de ML directamente. En esta lección, aprenderás cómo preparar un conjunto de datos sin procesar utilizando bibliotecas estándar de Python. También aprenderás varias técnicas para visualizar los datos. ## Caso de estudio: '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, organizados en agrupaciones por ciudad. Estos son datos sin procesar 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. +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, agrupados por ciudad. Estos son datos sin procesar 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. ### Preparar los datos @@ -50,11 +50,11 @@ Estos datos son de dominio público. Se pueden descargar en muchos archivos sepa ¿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 formular sobre estos datos utilizando una técnica de regresión? ¿Qué tal "Predecir el precio de una calabaza en venta durante un mes determinado"? Al observar nuevamente los datos, hay algunos cambios que necesitas hacer para crear la estructura de datos necesaria para esta tarea. +¿Qué pregunta puedes hacer sobre 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 esta tarea. ## Ejercicio - analizar los datos de calabazas -Utilicemos [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. +Usemos [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 faltan fechas @@ -63,7 +63,7 @@ Primero necesitarás tomar medidas para verificar si faltan fechas: 1. Convierte las fechas al 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 a un nuevo dataframe de Pandas. +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. @@ -83,7 +83,7 @@ Abre el archivo _notebook.ipynb_ en Visual Studio Code e importa la hoja de cál Hay datos faltantes, pero tal vez no importen para la tarea en cuestión. -1. Para que tu dataframe sea más fácil de trabajar, selecciona solo las columnas que necesitas, utilizando la función `loc`, que extrae del dataframe original un grupo de filas (pasadas como primer parámetro) y columnas (pasadas como segundo parámetro). La expresión `:` en el caso siguiente significa "todas las filas". +1. Para que tu dataframe sea más fácil de trabajar, selecciona solo las columnas que necesitas, usando la función `loc`, que extrae del dataframe original un grupo de filas (pasadas como primer parámetro) y columnas (pasadas como segundo parámetro). La expresión `:` en el caso siguiente significa "todas las filas". ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] @@ -121,7 +121,7 @@ Si miras la columna `Package`, las calabazas se venden en muchas configuraciones > Parece que las calabazas son muy difíciles de pesar de manera consistente. -Al profundizar en los datos originales, es interesante notar que cualquier cosa con `Unit of Sale` igual a 'EACH' o 'PER BIN' también tiene el tipo de `Package` por pulgada, por bin, o 'each'. Parece que las calabazas son muy difíciles de pesar de manera consistente, así que filtremos seleccionando solo las calabazas con la cadena 'bushel' en su columna `Package`. +Al profundizar en los datos originales, es interesante notar que cualquier cosa con `Unit of Sale` igual a 'EACH' o 'PER BIN' también tiene el tipo `Package` por pulgada, por bin, o 'each'. Parece que las calabazas son muy difíciles de pesar de manera consistente, así que filtremos seleccionando solo las calabazas con la cadena 'bushel' en su columna `Package`. 1. Agrega un filtro en la parte superior del archivo, debajo de la importación inicial del .csv: @@ -151,7 +151,7 @@ Ahora puedes analizar el precio por unidad basado en su medida de bushel. Si imp ## 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 hacerlo, a menudo crean visualizaciones interesantes, como gráficos, diagramas y tablas, que muestran diferentes aspectos de los datos. De esta manera, pueden mostrar visualmente relaciones y vacíos que de otro modo serían difíciles de descubrir. +Parte del rol del científico de datos es demostrar la calidad y naturaleza de los datos con los que están trabajando. Para hacerlo, a menudo crean visualizaciones interesantes, como gráficos, diagramas y tablas, que muestran diferentes aspectos de los datos. De esta manera, pueden mostrar visualmente relaciones y brechas que de otro modo 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") @@ -183,7 +183,7 @@ Intenta crear algunos gráficos básicos para mostrar el nuevo dataframe que aca plt.show() ``` - ![Un gráfico de dispersión que muestra la relación entre precio y mes](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.es.png) + ![Un gráfico de dispersión que muestra la relación entre precio y mes](../../../../2-Regression/2-Data/images/scatterplot.png) ¿Es este un gráfico útil? ¿Hay algo que te sorprenda? @@ -200,9 +200,9 @@ Para que los gráficos muestren datos útiles, generalmente necesitas agrupar lo plt.ylabel("Pumpkin Price") ``` - ![Un gráfico de barras que muestra la relación entre precio y mes](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.es.png) + ![Un gráfico de barras que muestra la relación entre precio y mes](../../../../2-Regression/2-Data/images/barchart.png) - ¡Este es un gráfico de datos más útil! Parece indicar que el precio más alto de las calabazas ocurre en septiembre y octubre. ¿Cumple con tus expectativas? ¿Por qué sí o por qué no? + ¡Este es un gráfico de datos más útil! Parece indicar que el precio más alto de las calabazas ocurre en septiembre y octubre. ¿Cumple con tus expectativas? ¿Por qué o por qué no? --- @@ -210,17 +210,17 @@ Para que los gráficos muestren datos útiles, generalmente necesitas agrupar lo Explora los diferentes tipos de visualización que ofrece Matplotlib. ¿Qué tipos son más apropiados para problemas de regresión? -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) -## Repaso y autoestudio +## Revisión y autoestudio Echa un vistazo a las muchas formas de visualizar datos. Haz una lista de las diversas bibliotecas disponibles y anota cuáles son mejores para ciertos tipos de tareas, por ejemplo, visualizaciones en 2D frente a visualizaciones en 3D. ¿Qué descubres? ## Tarea -[Explorar la visualización](assignment.md) +[Explorar visualización](assignment.md) --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index 3273ecd2a..433e45122 100644 --- a/translations/es/2-Regression/3-Linear/README.md +++ b/translations/es/2-Regression/3-Linear/README.md @@ -1,49 +1,49 @@ -# Construir un modelo de regresión usando Scikit-learn: regresión de cuatro maneras +# Construir un modelo de regresión usando Scikit-learn: cuatro formas de regresión -![Infografía de regresión lineal vs polinómica](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.es.png) +![Infografía de regresión lineal vs polinómica](../../../../2-Regression/3-Linear/images/linear-polynomial.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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) > ### [¡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 obtenidos del conjunto de datos de precios de calabazas que utilizaremos a lo largo de esta lección. También lo has visualizado usando Matplotlib. +Hasta ahora has explorado qué es la regresión con datos de muestra obtenidos del conjunto de datos de precios de calabazas que utilizaremos a lo largo de esta lección. También lo has visualizado utilizando Matplotlib. -Ahora estás listo para profundizar en la regresión para ML. Aunque la visualización te permite comprender 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 permiten predecir resultados para nuevos datos que el modelo no ha visto antes. +Ahora estás listo para profundizar más en la regresión para ML. Mientras que la visualización te permite comprender 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 matemáticas subyacentes a estas técnicas. Estos modelos nos permitirán predecir los precios de las calabazas dependiendo de diferentes datos de entrada. +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. Estos 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 ver un breve video sobre la regresión lineal. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre la regresión lineal. -> A lo largo de este currículo, asumimos un conocimiento mínimo de matemáticas y buscamos hacerlo accesible para estudiantes de otros campos, así que presta atención a notas, 🧮 llamados, diagramas y otras herramientas de aprendizaje para facilitar la comprensión. +> A lo largo de este plan de estudios, asumimos un conocimiento mínimo de matemáticas y buscamos hacerlo accesible para estudiantes provenientes de otros campos, así que presta atención a las notas, 🧮 llamados, diagramas y otras herramientas de aprendizaje para facilitar la comprensión. ### Prerrequisitos -A estas alturas deberías estar familiarizado con la estructura de los datos de calabazas que estamos examinando. Puedes encontrarlo precargado y preprocesado en el archivo _notebook.ipynb_ de esta lección. En el archivo, el precio de las calabazas se muestra por bushel en un nuevo marco de datos. Asegúrate de poder ejecutar estos notebooks en kernels en Visual Studio Code. +A estas alturas deberías estar familiarizado con la estructura de los datos de calabazas que estamos examinando. Puedes encontrarlos precargados y preprocesados en el archivo _notebook.ipynb_ de esta lección. En el archivo, el precio de las calabazas se muestra por bushel en un nuevo marco de datos. Asegúrate de poder ejecutar estos notebooks en kernels en Visual Studio Code. ### Preparación Como recordatorio, estás cargando estos datos para hacer preguntas sobre ellos. - ¿Cuándo es el mejor momento para comprar calabazas? -- ¿Qué precio puedo esperar por un caso de calabazas miniatura? +- ¿Qué precio puedo esperar por un paquete de calabazas miniatura? - ¿Debería comprarlas en cestas de medio bushel o en cajas de 1 1/9 bushel? -Sigamos profundizando en estos datos. +Sigamos investigando 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 bushel. Sin embargo, al hacer eso, solo pudiste recopilar alrededor de 400 puntos de datos y solo para los meses de otoño. -Echa un vistazo a los datos que hemos precargado en el notebook que acompaña esta lección. Los datos están precargados y se ha graficado un diagrama 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. +Echa un vistazo a los datos que precargamos en el notebook que acompaña esta lección. Los datos están precargados y se ha trazado 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 @@ -58,7 +58,7 @@ Hacemos esto porque queremos modelar una línea que tenga la menor distancia acu > **🧮 Muéstrame las matemáticas** > -> Esta línea, llamada la _línea de mejor ajuste_, puede expresarse mediante [una ecuación](https://en.wikipedia.org/wiki/Simple_linear_regression): +> Esta línea, llamada _línea de mejor ajuste_, puede expresarse mediante [una ecuación](https://en.wikipedia.org/wiki/Simple_linear_regression): > > ``` > Y = a + bX @@ -66,59 +66,59 @@ Hacemos esto porque queremos modelar una línea que tenga la menor distancia acu > > `X` es la 'variable explicativa'. `Y` es la 'variable dependiente'. La pendiente de la línea es `b` y `a` es la intersección con el eje Y, que se refiere al valor de `Y` cuando `X = 0`. > ->![calcular la pendiente](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.es.png) +>![calcular la pendiente](../../../../2-Regression/3-Linear/images/slope.png) > > Primero, calcula la pendiente `b`. Infografía por [Jen Looper](https://twitter.com/jenlooper) > > En otras palabras, y refiriéndonos a la pregunta original de los datos de calabazas: "predecir el precio de una calabaza por bushel según el mes", `X` se referiría al precio y `Y` se referiría al mes de venta. > ->![completar la ecuación](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.es.png) +>![completar la ecuación](../../../../2-Regression/3-Linear/images/calculation.png) > > Calcula el valor de Y. Si estás pagando alrededor de $4, ¡debe ser abril! Infografía por [Jen Looper](https://twitter.com/jenlooper) > > Las matemáticas que calculan la línea deben demostrar la pendiente de la línea, que también depende de la intersección, o dónde se sitúa `Y` cuando `X = 0`. > -> Puedes observar el método de cálculo de estos valores en el sitio web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). También visita [este calculador 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. +> Puedes observar el método de cálculo para estos valores en el sitio web [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). También visita [este calculador de mínimos cuadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para ver cómo los valores de los números afectan la línea. ## Correlación -Otro término que debes entender es el **Coeficiente de Correlación** entre las variables X y Y dadas. Usando un diagrama de dispersión, puedes visualizar rápidamente este coeficiente. Un gráfico con puntos de datos dispersos en una línea ordenada tiene alta correlación, pero un gráfico con puntos de datos dispersos por todas partes entre X y Y tiene baja correlación. +Otro término que debes entender es el **Coeficiente de Correlación** entre las variables X e Y dadas. 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 tiene alta correlación, pero un gráfico con puntos de datos dispersos por todas partes entre X e Y tiene baja correlación. -Un buen modelo de regresión lineal será aquel que tenga un Coeficiente de Correlación alto (más cercano a 1 que a 0) utilizando el método de Mínimos Cuadrados con una línea de regresión. +Un buen modelo de regresión lineal será aquel que tenga un Coeficiente de Correlación alto (más cercano a 1 que a 0) utilizando el método de Regresión de Mínimos Cuadrados con una línea de regresión. -✅ Ejecuta el notebook que acompaña esta lección y observa el diagrama de dispersión de Mes a Precio. Según tu interpretación visual del diagrama de dispersión, ¿parece que los datos que asocian Mes con Precio para las ventas de calabazas tienen alta o baja correlación? ¿Cambia eso si usas una medida más detallada en lugar de `Mes`, por ejemplo, *día del año* (es decir, número de días desde el inicio del año)? +✅ Ejecuta el notebook que acompaña esta lección y observa el gráfico de dispersión de Mes a Precio. Según tu interpretación visual del gráfico de dispersión, ¿parece que los datos que asocian Mes con Precio para las ventas de calabazas tienen alta o baja correlación? ¿Cambia eso si usas una medida más detallada en lugar de `Mes`, por ejemplo, *día del año* (es decir, el número de días desde el inicio del año)? En el código a continuación, asumiremos que hemos limpiado los datos y obtenido un marco de datos llamado `new_pumpkins`, similar al siguiente: ID | Mes | DíaDelAño | Variedad | Ciudad | Paquete | Precio Bajo | Precio Alto | Precio ---|-----|-----------|----------|--------|---------|-------------|-------------|------- -70 | 9 | 267 | TIPO PARA PIE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 -71 | 9 | 267 | TIPO PARA PIE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 -72 | 10 | 274 | TIPO PARA PIE | BALTIMORE | 1 1/9 bushel cartons | 18.0 | 18.0 | 16.363636 -73 | 10 | 274 | TIPO PARA PIE | BALTIMORE | 1 1/9 bushel cartons | 17.0 | 17.0 | 15.454545 -74 | 10 | 281 | TIPO PARA PIE | BALTIMORE | 1 1/9 bushel cartons | 15.0 | 15.0 | 13.636364 +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 -> El código para limpiar los datos está disponible en [`notebook.ipynb`](notebook.ipynb). Hemos realizado los mismos pasos de limpieza que en la lección anterior y hemos calculado la columna `DíaDelAño` usando la siguiente expresión: +> El código para limpiar los datos está disponible en [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Hemos realizado los mismos pasos de limpieza que en la lección anterior y hemos calculado la columna `DíaDelAño` utilizando 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. Alguien que compre calabazas para un huerto de calabazas festivo podría querer esta información para optimizar sus compras de paquetes de calabazas para el huerto. +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. Alguien que compre calabazas para un huerto de calabazas festivo podría querer esta información para optimizar sus compras de paquetes de calabazas para el huerto. ## Buscando correlación -[![ML para principiantes - Buscando correlación: La clave de 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 de la regresión lineal") +[![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 ver un breve video sobre correlación. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre 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 `Mes` y `Precio`, o entre `DíaDelAño` y `Precio`. Aquí está el diagrama de dispersión que muestra esta última relación: +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 `Mes` y `Precio`, o entre `DíaDelAño` y `Precio`. Aquí está el gráfico de dispersión que muestra esta última relación: -Diagrama de dispersión de Precio vs. Día del Año +Gráfico de dispersión de Precio vs. Día del Año Veamos si hay una correlación usando la función `corr`: @@ -127,7 +127,7 @@ 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 `Mes` y -0.17 por el `DíaDelMes`, pero podría haber otra relación importante. Parece que hay diferentes grupos de precios que corresponden a diferentes variedades de calabazas. Para confirmar esta hipótesis, tracemos cada categoría de calabaza usando un color diferente. Al pasar un parámetro `ax` a la función de trazado `scatter`, podemos graficar todos los puntos en el mismo gráfico: +Parece que la correlación es bastante pequeña, -0.15 por `Mes` y -0.17 por `DíaDelAño`, pero podría haber otra relación importante. Parece que hay diferentes grupos de precios que corresponden a diferentes variedades de calabazas. Para confirmar esta hipótesis, tracemos cada categoría de calabaza usando un color diferente. Al pasar un parámetro `ax` a la función de trazado de dispersión podemos trazar todos los puntos en el mismo gráfico: ```python ax=None @@ -137,7 +137,7 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): ax = df.plot.scatter('DayOfYear','Price',ax=ax,c=colors[i],label=var) ``` -Diagrama de dispersión de Precio vs. Día del Año +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: @@ -147,17 +147,17 @@ 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 pie', y veamos qué efecto tiene la fecha en el precio: +Centrémonos por el momento solo en una variedad de calabaza, el 'tipo pie', 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') ``` -Diagrama de dispersión de Precio vs. Día del Año +Gráfico de dispersión de Precio vs. Día del Año -Si ahora calculamos la correlación entre `Precio` y `DíaDelAño` usando la función `corr`, obtendremos algo como `-0.27`, lo que significa que entrenar un modelo predictivo tiene sentido. +Si ahora calculamos la correlación entre `Precio` y `DíaDelAño` usando la función `corr`, obtendremos algo como `-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 eliminar todas las celdas vacías: +> 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) @@ -170,7 +170,7 @@ Otra opción sería llenar esos valores vacíos con valores promedio de la colum [![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 ver un breve video sobre regresión lineal y polinómica. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre regresión lineal y polinómica. Para entrenar nuestro modelo de Regresión Lineal, utilizaremos la biblioteca **Scikit-learn**. @@ -180,16 +180,16 @@ 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 arreglos numpy separados: +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 un arreglo 2D como entrada, donde cada fila del arreglo corresponde a un vector de características de entrada. En nuestro caso, dado que solo tenemos una entrada, necesitamos un arreglo con forma N×1, donde N es el tamaño del conjunto de datos. +> Nota que tuvimos que realizar un `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, dado que 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 poder validar nuestro modelo después del entrenamiento: +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) @@ -202,9 +202,9 @@ lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -El objeto `LinearRegression` después de ajustarse contiene todos los coeficientes de la regresión, que pueden accederse usando la propiedad `.coef_`. En nuestro caso, solo hay un coeficiente, que debería estar alrededor de `-0.017`. Esto significa que los precios parecen bajar un poco con el tiempo, pero no demasiado, alrededor de 2 centavos por día. También podemos acceder al punto de intersección de la regresión con el eje Y usando `lin_reg.intercept_`, que estará alrededor de `21` en nuestro caso, indicando el precio al inicio del año. +El objeto `LinearRegression` después de ajustarse contiene todos los coeficientes de la regresión, que se pueden acceder usando la propiedad `.coef_`. En nuestro caso, solo hay un coeficiente, que debería estar alrededor de `-0.017`. Esto significa que los precios parecen bajar un poco con el tiempo, pero no demasiado, alrededor de 2 centavos por día. También podemos acceder al punto de intersección de la regresión con el eje Y usando `lin_reg.intercept_`, que estará alrededor de `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 puede hacerse usando la métrica de error cuadrático medio (MSE), que es el promedio de todas las diferencias al cuadrado entre el valor esperado y el predicho. +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 el promedio de todas las diferencias al cuadrado entre el valor esperado y el predicho. ```python pred = lin_reg.predict(X_test) @@ -217,31 +217,31 @@ Nuestro error parece estar en torno a 2 puntos, lo que equivale a ~17%. No es mu ```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 simplemente es el valor promedio del resultado. El valor de 1 significa que podemos predecir perfectamente todos los resultados esperados. En nuestro caso, el coeficiente está alrededor de 0.06, lo cual es bastante bajo. +``` +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 simplemente es el valor promedio del resultado. Un valor de 1 significa que podemos predecir perfectamente todos los resultados esperados. En nuestro caso, el coeficiente está 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 +## Regresión Polinómica -Otro tipo de Regresión Lineal es la Regresión Polinómica. Aunque a veces existe una relación lineal entre las variables - cuanto mayor es el volumen de la calabaza, mayor es el precio - en ocasiones estas relaciones no pueden representarse como un plano o una línea recta. +Otro tipo de Regresión Lineal es la Regresión Polinómica. Aunque a veces existe una relación lineal entre las variables - cuanto mayor es el volumen de la calabaza, mayor es el precio - en otras ocasiones estas relaciones no pueden representarse como un plano o una línea recta. -✅ Aquí hay [algunos ejemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de datos que podrían usar Regresión Polinómica +✅ Aquí hay [algunos ejemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de datos que podrían usar Regresión Polinómica. -Observa nuevamente la relación entre Fecha y Precio. ¿Este diagrama de dispersión parece que debería analizarse necesariamente con una línea recta? ¿No pueden fluctuar los precios? En este caso, puedes intentar con regresión polinómica. +Observa nuevamente la relación entre Fecha y Precio. ¿Este diagrama de dispersión parece que debería analizarse necesariamente con una línea recta? ¿No pueden fluctuar los precios? En este caso, puedes intentar con regresión polinómica. -✅ Los polinomios son expresiones matemáticas que pueden consistir en una o más variables y coeficientes +✅ 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 cierto punto del año. +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 cierto punto 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. Un **pipeline** es una cadena de **estimadores**. En nuestro caso, crearemos un pipeline que primero agrega características polinómicas a nuestro modelo y luego entrena la regresión: +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. Un **pipeline** es una cadena de **estimadores**. En nuestro caso, crearemos un pipeline que primero agrega características polinómicas a nuestro modelo y luego entrena la regresión: ```python from sklearn.preprocessing import PolynomialFeatures @@ -250,62 +250,62 @@ from sklearn.pipeline import make_pipeline pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) -``` +``` -Usar `PolynomialFeatures(2)` significa que incluiremos todos los polinomios de segundo grado de los datos de entrada. En nuestro caso, simplemente significará `DayOfYear`2, pero dado dos variables de entrada X e Y, esto agregará X2, XY y Y2. También podemos usar polinomios de mayor grado si lo deseamos. +Usar `PolynomialFeatures(2)` significa que incluiremos todos los polinomios de segundo grado de los datos de entrada. En nuestro caso, esto simplemente significará `DayOfYear`2, pero dado dos variables de entrada X e Y, esto agregará X2, XY y Y2. También podemos usar polinomios de mayor grado si lo deseamos. -Los pipelines pueden usarse de la misma manera que el objeto original `LinearRegression`, es decir, podemos usar `fit` en el pipeline y luego usar `predict` para obtener los resultados de predicción. Aquí está el gráfico que muestra los datos de prueba y la curva de aproximación: +Los pipelines pueden usarse de la misma manera que el objeto original `LinearRegression`, es decir, podemos usar `fit` en el pipeline y luego usar `predict` para obtener los resultados de predicción. Aquí está el gráfico que muestra los datos de prueba y la curva de aproximación: -Regresión polinómica +Regresión polinómica -Usando Regresión Polinómica, podemos obtener un MSE ligeramente más bajo y un coeficiente de determinación más alto, pero no significativamente. ¡Necesitamos tomar en cuenta otras características! +Usando Regresión Polinómica, podemos obtener un MSE ligeramente más bajo y un coeficiente de determinación más alto, pero no significativamente. ¡Necesitamos tomar en cuenta otras características! -> Puedes observar que los precios mínimos de las calabazas se registran en algún momento cerca de Halloween. ¿Cómo puedes explicar esto? +> Puedes observar que los precios mínimos de las calabazas se registran en algún momento cerca de Halloween. ¿Cómo puedes explicar esto? -🎃 ¡Felicidades! Acabas de crear un modelo que puede ayudar a predecir el precio de las calabazas para pastel. Probablemente puedas repetir el mismo procedimiento para todos los tipos de calabazas, pero eso sería tedioso. ¡Ahora aprendamos cómo tomar en cuenta la variedad de calabazas en nuestro modelo! +🎃 ¡Felicidades! Acabas de crear un modelo que puede ayudar a predecir el precio de las calabazas para pastel. Probablemente podrías repetir el mismo procedimiento para todos los tipos de calabazas, pero eso sería tedioso. ¡Ahora aprendamos cómo tomar en cuenta la variedad de calabazas en nuestro modelo! -## Características Categóricas +## Características Categóricas -En un mundo ideal, queremos poder predecir precios para diferentes variedades de calabazas usando el mismo modelo. Sin embargo, la columna `Variety` es algo diferente de columnas como `Month`, porque contiene valores no numéricos. Estas columnas se llaman **categóricas**. +En un mundo ideal, queremos poder predecir precios para diferentes variedades de calabazas usando el mismo modelo. Sin embargo, la columna `Variety` es algo diferente de columnas como `Month`, porque contiene valores no numéricos. Estas columnas se llaman **categóricas**. -[![ML para principiantes - Predicciones con características categóricas usando Regresión Lineal](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML para principiantes - Predicciones con características categóricas usando Regresión Lineal") +[![ML para principiantes - Predicciones con características categóricas usando Regresión Lineal](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML para principiantes - Predicciones con características categóricas usando Regresión Lineal") -> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre el uso de características categóricas. +> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre el uso de características categóricas. -Aquí puedes ver cómo el precio promedio depende de la variedad: +Aquí puedes ver cómo el precio promedio depende de la variedad: -Precio promedio por variedad +Precio promedio por variedad -Para tomar en cuenta la variedad, primero necesitamos convertirla a forma numérica, o **codificarla**. Hay varias formas de hacerlo: +Para tomar en cuenta la variedad, primero necesitamos convertirla a forma numérica, o **codificarla**. Hay varias maneras de hacerlo: -* La **codificación numérica simple** construirá una tabla de diferentes variedades y luego reemplazará el nombre de la variedad por un índice en esa tabla. Esta no es la mejor idea para la regresión lineal, porque la regresión lineal toma el valor numérico real del índice y lo agrega al resultado, multiplicándolo por algún coeficiente. En nuestro caso, la relación entre el número de índice y el precio claramente no es lineal, incluso si nos aseguramos de que los índices estén ordenados de alguna manera específica. -* La **codificación one-hot** reemplazará la columna `Variety` por 4 columnas diferentes, una para cada variedad. Cada columna contendrá `1` si la fila correspondiente es de una variedad dada, y `0` en caso contrario. Esto significa que habrá cuatro coeficientes en la regresión lineal, uno para cada variedad de calabaza, responsables del "precio inicial" (o más bien "precio adicional") para esa variedad en particular. +* La **codificación numérica simple** construirá una tabla de diferentes variedades y luego reemplazará el nombre de la variedad por un índice en esa tabla. Esta no es la mejor idea para la regresión lineal, porque la regresión lineal toma el valor numérico real del índice y lo agrega al resultado, multiplicándolo por algún coeficiente. En nuestro caso, la relación entre el número de índice y el precio claramente no es lineal, incluso si nos aseguramos de que los índices estén ordenados de alguna manera específica. +* La **codificación one-hot** reemplazará la columna `Variety` por 4 columnas diferentes, una para cada variedad. Cada columna contendrá `1` si la fila correspondiente es de una variedad dada, y `0` en caso contrario. Esto significa que habrá cuatro coeficientes en la regresión lineal, uno para cada variedad de calabaza, responsables del "precio inicial" (o más bien "precio adicional") para esa variedad en particular. -El siguiente código muestra cómo podemos codificar una variedad usando one-hot encoding: +El siguiente código muestra cómo podemos codificar una variedad usando one-hot: ```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 + 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 como one-hot en los datos de entrada, solo necesitamos inicializar correctamente los datos `X` y `y`: +Para entrenar la regresión lineal usando la variedad codificada como one-hot en los datos de entrada, solo necesitamos inicializar correctamente los datos `X` y `y`: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] -``` +``` -El resto del código es el mismo que usamos anteriormente 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 tomar en cuenta más características categóricas, así como características numéricas, como `Month` o `DayOfYear`. Para obtener un gran conjunto de características, podemos usar `join`: +El resto del código es el mismo que usamos anteriormente 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 tomar en cuenta más características categóricas, así como características numéricas, como `Month` o `DayOfYear`. Para obtener un gran conjunto de características, podemos usar `join`: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -313,13 +313,13 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .join(pd.get_dummies(new_pumpkins['City'])) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] -``` +``` -Aquí también tomamos en cuenta `City` y el tipo de `Package`, lo que nos da un MSE de 2.84 (10%) y un coeficiente de determinación de 0.94. +Aquí también tomamos en cuenta `City` y el tipo de `Package`, lo que nos da un MSE de 2.84 (10%) y un coeficiente de determinación de 0.94. -## Juntándolo todo +## Juntándolo todo -Para crear el mejor modelo, podemos usar datos combinados (categóricos codificados como one-hot + numéricos) del ejemplo anterior junto con Regresión Polinómica. Aquí está el código completo para tu conveniencia: +Para crear el mejor modelo, podemos usar datos combinados (categóricos codificados como one-hot + numéricos) del ejemplo anterior junto con Regresión Polinómica. Aquí está el código completo para tu conveniencia: ```python # set up training data @@ -345,36 +345,36 @@ 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 un MSE=2.23 (~8% de error de predicción). +Esto debería darnos el mejor coeficiente de determinación de casi 97% y un MSE=2.23 (~8% de error de predicción). -| Modelo | MSE | Determinación | -|-------|-----|---------------| -| `DayOfYear` Lineal | 2.77 (17.2%) | 0.07 | -| `DayOfYear` Polinómico | 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ómico | 2.23 (8.25%) | 0.97 | +| Modelo | MSE | Determinación | +|--------|-----|---------------| +| `DayOfYear` Lineal | 2.77 (17.2%) | 0.07 | +| `DayOfYear` Polinómico | 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ómico | 2.23 (8.25%) | 0.97 | -🏆 ¡Bien hecho! Creaste cuatro modelos de Regresión en una sola lección y mejoraste la calidad del modelo al 97%. En la sección final sobre Regresión, aprenderás sobre Regresión Logística para determinar categorías. +🏆 ¡Bien hecho! Creaste cuatro modelos de Regresión en una sola lección y mejoraste la calidad del modelo al 97%. En la sección final sobre Regresión, aprenderás sobre Regresión Logística para determinar categorías. ---- -## 🚀Desafío +--- +## 🚀Desafío -Prueba varias variables diferentes en este notebook para ver cómo la correlación corresponde a la precisión del modelo. +Prueba varias variables diferentes en este notebook 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/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) -## Revisión y Autoestudio +## Revisión y Autoestudio -En esta lección aprendimos sobre Regresión Lineal. Hay otros tipos importantes de Regresión. Lee sobre las técnicas Stepwise, Ridge, Lasso y Elasticnet. Un buen curso para aprender más es el [curso de Aprendizaje Estadístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). +En esta lección aprendimos sobre Regresión Lineal. Hay otros tipos importantes de Regresión. Lee sobre las técnicas Stepwise, Ridge, Lasso y Elasticnet. Un buen curso para estudiar y aprender más es el [curso de Stanford sobre Aprendizaje Estadístico](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). -## Tarea +## Tarea -[Construye un Modelo](assignment.md) +[Construye un Modelo](assignment.md) --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index a3f4ccb5a..dd68dda4d 100644 --- a/translations/es/2-Regression/4-Logistic/README.md +++ b/translations/es/2-Regression/4-Logistic/README.md @@ -1,23 +1,23 @@ # 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) +![Infografía de regresión logística vs. regresión lineal](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) > ### [¡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 dulce de chocolate o no? ¿Es esta enfermedad contagiosa o no? ¿Elegirá este cliente este producto o no? +En esta última lección sobre Regresión, una de las técnicas básicas _clásicas_ de ML, exploraremos la Regresión Logística. Utilizarías esta técnica para descubrir patrones y predecir categorías binarias. ¿Es este dulce de chocolate o no? ¿Es esta enfermedad contagiosa o no? ¿Elegirá este cliente este producto o no? En esta lección, aprenderás: @@ -28,31 +28,31 @@ En esta lección, aprenderás: ## Prerrequisitos -Habiendo trabajado con los datos de calabazas, ahora estamos lo suficientemente familiarizados con ellos como para darnos cuenta de que hay una categoría binaria con la que podemos trabajar: `Color`. +Después de trabajar con los datos de calabazas, ya estamos lo suficientemente familiarizados con ellos como 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 métodos lineales. Aprende sobre otras formas de clasificar datos en el próximo grupo de lecciones. +> ¿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 un enfoque lineal. Aprende sobre otras formas de clasificar datos en el próximo grupo de lecciones. -## Definir la pregunta +## Define la pregunta -Para nuestros propósitos, expresaremos esto como un binario: 'Blanca' o 'No Blanca'. También hay una categoría 'rayada' en nuestro conjunto de datos, pero hay pocas instancias de ella, por lo que no la utilizaremos. De todos modos, desaparece una vez que eliminamos los valores nulos del conjunto de datos. +Para nuestros propósitos, expresaremos esto como un binario: 'Blanca' o 'No Blanca'. También hay una categoría 'rayada' en nuestro conjunto de datos, pero hay pocos casos de ella, por lo que no la usaremos. De todos modos, desaparece una vez que eliminamos los valores nulos del conjunto de datos. -> 🎃 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 tienen un aspecto genial. Así que también podríamos reformular nuestra pregunta como: 'Fantasma' o 'No Fantasma'. 👻 +> 🎃 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 tienen un aspecto genial! 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, que aprendiste anteriormente, en algunos aspectos importantes. -[![ML para principiantes - Comprendiendo la regresión logística para la clasificación en aprendizaje automático](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML para principiantes - Comprendiendo la regresión logística para la clasificación en aprendizaje automático") +[![ML para principiantes - Comprendiendo la Regresión Logística para la Clasificación en Machine Learning](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML para principiantes - Comprendiendo la Regresión Logística para la Clasificación en Machine Learning") -> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre la regresión logística. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre 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 ("blanca o no blanca"), mientras que la segunda es capaz de predecir valores continuos, por ejemplo, dado el origen de una calabaza y el momento de la cosecha, _cuánto subirá su precio_. -![Modelo de clasificación de calabazas](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.es.png) +![Modelo de clasificación de calabazas](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) > Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) ### Otras clasificaciones @@ -60,25 +60,25 @@ La regresión logística no ofrece las mismas características que la regresión Existen otros tipos de regresión logística, incluyendo multinomial y ordinal: - **Multinomial**, que implica tener más de una categoría - "Naranja, Blanca 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, sm, med, lg, xl, xxl). +- **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ña, mediana, grande, XL, XXL). -![Regresión multinomial vs ordinal](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.es.png) +![Regresión multinomial vs ordinal](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) ### Las variables NO tienen que correlacionarse -¿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. Esto funciona para estos datos que tienen correlaciones algo débiles. +¿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 estar alineadas. Esto 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 utilizas 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") +[![ML para principiantes - Análisis y Preparación de Datos para la 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 la Regresión Logística") -> 🎥 Haz clic en la imagen de arriba para ver un breve video sobre la preparación de datos para regresión lineal. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre la preparación de datos para la regresión lineal. -✅ Piensa en los tipos de datos que se prestarían bien para la regresión logística. +✅ Piensa en los tipos de datos que se prestarían bien a la regresión logística. -## Ejercicio - ordenar los datos +## Ejercicio - organiza los datos Primero, limpia un poco los datos, eliminando valores nulos y seleccionando solo algunas de las columnas: @@ -100,11 +100,11 @@ Primero, limpia un poco los datos, eliminando valores nulos y seleccionando solo ### Visualización - gráfico categórico -Hasta ahora has cargado el [notebook inicial](./notebook.ipynb) con datos de calabazas una vez más y los has limpiado para preservar un conjunto de datos que contiene algunas variables, incluyendo `Color`. Visualicemos el dataframe en el notebook usando una biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que está construida sobre Matplotlib, que usamos anteriormente. +Hasta ahora has cargado el [notebook inicial](../../../../2-Regression/4-Logistic/notebook.ipynb) con datos de calabazas una vez más y lo has limpiado para preservar un conjunto de datos que contiene algunas variables, incluyendo `Color`. Visualicemos el dataframe en el notebook usando una biblioteca diferente: [Seaborn](https://seaborn.pydata.org/index.html), que está construida sobre Matplotlib, que usamos anteriormente. Seaborn ofrece 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 dicho gráfico utilizando la función `catplot`, usando nuestros datos de calabazas `pumpkins`, y especificando un mapeo de colores para cada categoría de calabaza (naranja o blanca): +1. Crea dicho gráfico usando la función `catplot`, con nuestros datos de calabazas `pumpkins`, y especificando un mapeo de colores para cada categoría de calabaza (naranja o blanca): ```python import seaborn as sns @@ -120,7 +120,7 @@ Seaborn ofrece formas interesantes de visualizar tus datos. Por ejemplo, puedes ) ``` - ![Una cuadrícula de datos visualizados](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.es.png) + ![Una cuadrícula de datos visualizados](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) Al observar los datos, puedes ver cómo los datos de Color se relacionan con Variety. @@ -128,9 +128,9 @@ Seaborn ofrece formas interesantes de visualizar tus datos. Por ejemplo, puedes ### 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. Es por eso que 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 conduce a la construcción de un buen modelo. +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 conduce a la construcción de un buen modelo. -Para la codificación de características hay dos tipos principales de codificadores: +Para la codificación de características, hay dos tipos principales de codificadores: 1. Codificador ordinal: es adecuado para 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 de modo que cada categoría esté representada por un número, que es el orden de la categoría en la columna. @@ -142,7 +142,7 @@ Para la codificación de características hay dos tipos principales de codificad ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. Codificador categórico: es adecuado para 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 tipo one-hot, 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. +2. Codificador categórico: es adecuado para 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 one-hot, 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 @@ -151,7 +151,7 @@ Para la codificación de características hay dos tipos principales de codificad categorical_encoder = OneHotEncoder(sparse_output=False) ``` -Luego, se utiliza `ColumnTransformer` para combinar múltiples codificadores en un solo paso y aplicarlos a las columnas correspondientes. +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 @@ -182,11 +182,9 @@ Una vez que hemos codificado las características y la etiqueta, podemos fusiona ✅ ¿Cuáles son las ventajas de usar un codificador ordinal para la columna `Item Size`? -### Analizar relaciones entre variables +### Analiza las relaciones entre variables -Ahora que hemos preprocesado nuestros datos, podemos analizar las relaciones entre las características y la etiqueta para tener una idea de qué tan bien el modelo podrá predecir la etiqueta dadas las características. - -La mejor manera de realizar este tipo de análisis es graficar los datos. Usaremos nuevamente la función `catplot` de Seaborn para visualizar las relaciones entre `Item Size`, `Variety` y `Color` en un gráfico categórico. Para graficar mejor los datos, utilizaremos la columna codificada `Item Size` y la columna no codificada `Variety`. +Ahora que hemos preprocesado nuestros datos, podemos analizar las relaciones entre las características y la etiqueta para hacernos una idea de qué tan bien el modelo podrá predecir la etiqueta dadas las características. La mejor manera de realizar este tipo de análisis es graficando los datos. Usaremos nuevamente la función `catplot` de Seaborn para visualizar las relaciones entre `Item Size`, `Variety` y `Color` en un gráfico categórico. Para graficar mejor los datos, usaremos la columna codificada `Item Size` y la columna sin codificar `Variety`. ```python palette = { @@ -206,9 +204,9 @@ La mejor manera de realizar este tipo de análisis es graficar los datos. Usarem g.set_titles(row_template="{row_name}") ``` -![Un gráfico categórico de datos visualizados](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.es.png) +![Un gráfico categórico de datos visualizados](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) -### Usar un gráfico de enjambre +### Usa un gráfico de enjambre Dado que Color es una categoría binaria (Blanca 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. @@ -224,25 +222,25 @@ Puedes visualizar variables lado a lado con gráficos de Seaborn. 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) + ![Un enjambre de datos visualizados](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**Atención**: el código anterior podría generar una advertencia, ya que Seaborn falla al 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. +**Cuidado**: el código anterior podría generar una advertencia, ya que Seaborn falla al 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 tiene forma de 'S'. Toma un valor y lo mapea a un rango entre 0 y 1. Su curva también se llama 'curva logística'. Su fórmula es la siguiente: > -> ![función logística](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.es.png) +> ![función logística](../../../../2-Regression/4-Logistic/images/sigmoid.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 se clasificará como '1' de la elección binaria. Si no, se clasificará como '0'. +> 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 pendiente de la curva. Si el resultado de la función es mayor a 0.5, la etiqueta en cuestión se clasificará como '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") +[![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 ver un breve video sobre cómo construir un modelo de regresión lineal. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre cómo construir un modelo de regresión lineal. 1. Selecciona las variables que deseas usar en tu modelo de clasificación y divide los conjuntos de entrenamiento y prueba llamando a `train_test_split()`: @@ -271,7 +269,7 @@ Construir un modelo para encontrar estas clasificaciones binarias es sorprendent print('F1-score: ', f1_score(y_test, predictions)) ``` - Observa el informe de tu modelo. No está mal, considerando que solo tienes alrededor de 1000 filas de datos: + Observa el puntaje de tu modelo. No está mal, considerando que solo tienes alrededor de 1000 filas de datos: ```output precision recall f1-score support @@ -294,7 +292,7 @@ Construir un modelo para encontrar estas clasificaciones binarias es sorprendent ## 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 tu modelo más fácilmente utilizando 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. +Aunque puedes obtener un informe de puntaje [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 utilizando 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. @@ -319,12 +317,12 @@ En Scikit-learn, las filas (eje 0) son etiquetas reales y las columnas (eje 1) s | 0 | TN | FP | | 1 | FN | TP | -¿Qué está pasando aquí? Supongamos que nuestro modelo se le pide clasificar calabazas entre dos categorías binarias, categoría 'blanca' y categoría 'no blanca'. +¿Qué está pasando aquí? Supongamos que nuestro modelo debe clasificar calabazas entre dos categorías binarias, categoría 'blanca' y categoría 'no blanca'. -- Si tu modelo predice una calabaza como no blanca y pertenece a la categoría 'no blanca' en realidad, lo llamamos un verdadero negativo, mostrado por el número en la esquina superior izquierda. -- Si tu modelo predice una calabaza como blanca y pertenece a la categoría 'no blanca' en realidad, lo llamamos un falso negativo, mostrado por el número en la esquina inferior izquierda. -- Si tu modelo predice una calabaza como no blanca y pertenece a la categoría 'blanca' en realidad, lo llamamos un falso positivo, mostrado por el número en la esquina superior derecha. -- Si tu modelo predice una calabaza como blanca y pertenece a la categoría 'blanca' en realidad, lo llamamos un verdadero positivo, mostrado por el número en la esquina inferior derecha. +- Si tu modelo predice una calabaza como no blanca y en realidad pertenece a la categoría 'no blanca', lo llamamos un verdadero negativo, mostrado por el número en la esquina superior izquierda. +- Si tu modelo predice una calabaza como blanca y en realidad pertenece a la categoría 'no blanca', lo llamamos un falso negativo, mostrado por el número en la esquina inferior izquierda. +- Si tu modelo predice una calabaza como no blanca y en realidad pertenece a la categoría 'blanca', lo llamamos un falso positivo, mostrado por el número en la esquina superior derecha. +- Si tu modelo predice una calabaza como blanca y en realidad pertenece a la categoría 'blanca', lo llamamos un verdadero positivo, mostrado por el número en la esquina inferior derecha. 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 mostrado anteriormente indicó una precisión (0.85) y un recall (0.67). @@ -335,29 +333,29 @@ 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 de TP/TN y FP/FN en la matriz de confusión: +Volvamos a revisar los términos que vimos antes con la ayuda del mapeo de TP/TN y FP/FN en 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. +🎓 f1-score: (2 * precisión * recall)/(precisión + recall) Un promedio ponderado de la precisión y el recall, donde el mejor valor es 1 y el peor es 0. 🎓 Soporte: El número de ocurrencias de cada etiqueta recuperada. 🎓 Exactitud: (TP + TN)/(TP + TN + FP + FN) El porcentaje de etiquetas predichas correctamente para una muestra. -🎓 Promedio Macro: El cálculo de las métricas promedio no ponderadas para cada etiqueta, sin tener en cuenta el desequilibrio de etiquetas. +🎓 Promedio Macro: El cálculo de las métricas medias no ponderadas para cada etiqueta, sin tener en cuenta el desequilibrio de etiquetas. -🎓 Promedio Ponderado: El cálculo de las métricas promedio para cada etiqueta, teniendo en cuenta el desequilibrio de etiquetas al ponderarlas según su soporte (el número de instancias verdaderas para cada etiqueta). +🎓 Promedio Ponderado: El cálculo de las métricas medias para cada etiqueta, teniendo en cuenta el desequilibrio de etiquetas al ponderarlas según su soporte (el número de instancias verdaderas para cada etiqueta). -✅ ¿Puedes pensar en qué métrica deberías fijarte si quieres que tu modelo reduzca el número de falsos negativos? +✅ ¿Puedes pensar en qué métrica deberías enfocarte si quieres que tu modelo reduzca el número de falsos negativos? ## Visualizar 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 ver un breve video sobre las curvas ROC. +> 🎥 Haz clic en la imagen de arriba para un breve video sobre las curvas ROC. Hagamos una visualización más para observar la llamada curva 'ROC': @@ -379,11 +377,11 @@ 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 del rendimiento de un clasificador en términos de sus verdaderos positivos frente a sus falsos positivos. "Las curvas ROC típicamente muestran 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 son importantes: quieres 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 la línea correctamente: +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 usan a menudo para obtener una vista del rendimiento de un clasificador en términos de sus verdaderos positivos frente a los falsos positivos. "Las curvas ROC típicamente muestran 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 son importantes: quieres una curva que suba rápidamente y se aleje de la línea. En nuestro caso, hay falsos positivos al principio, y luego la línea sube y se aleja correctamente: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.es.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.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' (AUC): +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]) @@ -391,18 +389,18 @@ print(auc) ``` El resultado es `0.9749908725812341`. Dado que el AUC varía de 0 a 1, quieres un puntaje alto, ya que un modelo que sea 100% correcto en sus predicciones tendrá un AUC de 1; en este caso, el modelo es _bastante bueno_. -En futuras lecciones sobre clasificaciones, aprenderás cómo iterar para mejorar los puntajes de tu modelo. Pero por ahora, ¡felicitaciones! ¡Has completado estas lecciones de regresión! +En futuras lecciones sobre clasificaciones, aprenderás cómo iterar para mejorar los puntajes de tu modelo. Pero por ahora, ¡felicitaciones! ¡Has completado estas lecciones sobre regresión! --- ## 🚀Desafío -¡Hay mucho más que explorar sobre la regresión logística! Pero la mejor manera de aprender es experimentar. Encuentra un conjunto de datos que se preste a este tipo de análisis y construye un modelo con él. ¿Qué aprendes? consejo: prueba [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para conjuntos de datos interesantes. +¡Hay mucho más que explorar sobre la regresión logística! Pero la mejor manera de aprender es experimentando. Encuentra un conjunto de datos que se preste a este tipo de análisis y construye un modelo con él. ¿Qué aprendes? Consejo: prueba [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) para encontrar conjuntos de datos interesantes. -## [Cuestionario posterior a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Revisión y Autoestudio -Lee las primeras páginas de [este artículo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sobre algunos usos prácticos de la regresión logística. Piensa en tareas que sean más adecuadas para uno u otro tipo de tareas de regresión que hemos estudiado hasta ahora. ¿Qué funcionaría mejor? +Lee las primeras páginas de [este artículo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sobre algunos usos prácticos de la regresión logística. Piensa en tareas que se adapten mejor a uno u otro tipo de tareas de regresión que hemos estudiado hasta ahora. ¿Qué funcionaría mejor? ## Tarea @@ -411,4 +409,4 @@ Lee las primeras páginas de [este artículo de Stanford](https://web.stanford.e --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index e759ab65d..df9ee5952 100644 --- a/translations/es/3-Web-App/1-Web-App/README.md +++ b/translations/es/3-Web-App/1-Web-App/README.md @@ -1,8 +1,8 @@ # Clasificadores de cocina 1 -En esta lección, utilizarás el conjunto de datos que guardaste en la lección anterior, lleno de datos equilibrados y limpios sobre cocinas. +En esta lección, usarás el conjunto de datos que guardaste en la última lección, lleno de datos equilibrados y limpios sobre cocinas. -Usarás este conjunto de datos con una variedad de clasificadores para _predecir una cocina nacional específica basada en 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. +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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) # Preparación -Asumiendo que completaste la [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. +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 @@ -67,7 +67,7 @@ Asumiendo que completaste la [Lección 1](../1-Introduction/README.md), asegúra Name: cuisine, dtype: object ``` -1. Elimina la columna `Unnamed: 0` y la columna `cuisine` usando `drop()`. Guarda el resto de los datos como características entrenables: +1. Elimina la columna `Unnamed: 0` y la columna `cuisine`, usando `drop()`. Guarda el resto de los datos como características entrenables: ```python cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) @@ -90,34 +90,34 @@ Asumiendo que completaste la [Lección 1](../1-Introduction/README.md), asegúra Ahora que tus datos están limpios y listos para el entrenamiento, debes decidir qué algoritmo usar para la tarea. -Scikit-learn agrupa la clasificación bajo Aprendizaje Supervisado, y en esa categoría encontrarás muchas formas de clasificar. [La variedad](https://scikit-learn.org/stable/supervised_learning.html) puede ser abrumadora a primera vista. Los siguientes métodos incluyen técnicas de clasificación: +Scikit-learn agrupa la clasificación bajo Aprendizaje Supervisado, y en esa categoría encontrarás muchas formas de clasificar. [La variedad](https://scikit-learn.org/stable/supervised_learning.html) puede ser bastante abrumadora a primera vista. Los siguientes métodos incluyen técnicas de clasificación: - Modelos Lineales -- Máquinas de Soporte Vectorial +- Máquinas de Vectores de Soporte - Descenso de Gradiente Estocástico - Vecinos Más Cercanos - Procesos Gaussianos - Árboles de Decisión -- Métodos de Ensamble (voting Classifier) -- Algoritmos Multiclase y Multioutput (clasificación multiclase y multilabel, clasificación multiclase-multioutput) +- Métodos de Ensamble (clasificador por votación) +- Algoritmos multicategoría y multioutput (clasificación multicategoría y multilabel, clasificación multicategoría-multioutput) > También puedes usar [redes neuronales para clasificar datos](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), pero eso está fuera del alcance de esta lección. ### ¿Qué clasificador elegir? -Entonces, ¿qué clasificador deberías elegir? A menudo, probar varios y buscar un buen resultado es una forma de experimentar. Scikit-learn 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 de dos maneras, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB y QuadraticDiscrinationAnalysis, mostrando los resultados visualizados: +Entonces, ¿qué clasificador deberías elegir? A menudo, probar varios y buscar un buen resultado es una forma de evaluar. Scikit-learn 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 de dos maneras, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB y QuadraticDiscriminationAnalysis, mostrando los resultados visualizados: -![comparación de clasificadores](../../../../translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.es.png) +![comparación de clasificadores](../../../../4-Classification/2-Classifiers-1/images/comparison.png) > Gráficos generados en la documentación de Scikit-learn > AutoML resuelve este problema de manera eficiente al realizar 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 enfoque mejor -Una mejor manera que adivinar al azar es seguir las ideas de esta [hoja de trucos de ML descargable](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: +Una mejor manera que adivinar al azar, sin embargo, es seguir las ideas en esta descargable [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 multicategoría, tenemos algunas opciones: -![hoja de trucos para problemas multiclase](../../../../translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.es.png) -> Una sección de la Hoja de Trucos de Algoritmos de Microsoft, detallando opciones de clasificación multiclase +![hoja de trucos para problemas multicategoría](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Una sección de la Hoja de Trucos de Algoritmos de Microsoft, detallando opciones de clasificación multicategoría ✅ Descarga esta hoja de trucos, imprímela y cuélgala en tu pared. @@ -125,33 +125,33 @@ Una mejor manera que adivinar al azar es seguir las ideas de esta [hoja de truco Veamos si podemos razonar sobre diferentes enfoques dados los límites que tenemos: -- **Las redes neuronales son demasiado pesadas**. Dado nuestro conjunto de datos limpio pero mínimo, y el hecho de que estamos entrenando localmente a través de notebooks, las redes neuronales son demasiado pesadas para esta tarea. -- **No usamos clasificadores de dos clases**. No usamos un clasificador de dos clases, por lo que descartamos el enfoque one-vs-all. -- **Un árbol de decisión o regresión logística podrían 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 otro problema**. Los árboles de decisión potenciados multiclase son más adecuados para tareas no paramétricas, como las diseñadas para construir rankings, por lo que no son útiles para nosotros. +- **Las redes neuronales son demasiado pesadas**. Dado nuestro conjunto de datos limpio pero mínimo, y el hecho de que estamos ejecutando el entrenamiento localmente a través de notebooks, las redes neuronales son demasiado pesadas para esta tarea. +- **No usamos clasificadores de dos clases**. No usamos un clasificador de dos clases, por lo que descartamos el enfoque uno-contra-todos. +- **Un árbol de decisión o regresión logística podrían funcionar**. Un árbol de decisión podría funcionar, o regresión logística para datos multicategoría. +- **Los árboles de decisión potenciados multicategoría resuelven un problema diferente**. El árbol de decisión potenciado multicategoría es más adecuado para tareas no paramétricas, por ejemplo, tareas diseñadas para construir rankings, por lo que no es útil para nosotros. ### Usando Scikit-learn -Usaremos Scikit-learn para analizar nuestros datos. Sin embargo, hay muchas formas de usar la regresión logística en Scikit-learn. Echa un vistazo a los [parámetros que puedes pasar](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). +Usaremos Scikit-learn para analizar nuestros datos. Sin embargo, hay muchas formas de usar regresión logística en Scikit-learn. Echa un vistazo a los [parámetros que puedes pasar](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). -Esencialmente, hay dos parámetros importantes - `multi_class` y `solver` - que necesitamos especificar cuando pedimos a Scikit-learn que realice una regresión logística. El valor de `multi_class` aplica un cierto comportamiento. El valor del solver indica qué algoritmo usar. No todos los solvers pueden combinarse con todos los valores de `multi_class`. +Esencialmente hay dos parámetros importantes - `multi_class` y `solver` - que necesitamos especificar cuando pedimos a Scikit-learn que realice una regresión logística. El valor de `multi_class` aplica un cierto comportamiento. El valor del solver es el algoritmo que se usará. No todos los solvers pueden ser emparejados con todos los valores de `multi_class`. -Según la documentación, en el caso multiclase, el algoritmo de entrenamiento: +Según la documentación, en el caso multicategoría, el algoritmo de entrenamiento: -- **Usa el esquema one-vs-rest (OvR)**, si la opción `multi_class` está configurada como `ovr`. -- **Usa la pérdida de entropía cruzada**, si la opción `multi_class` está configurada como `multinomial`. (Actualmente, la opción `multinomial` solo es compatible con los solvers ‘lbfgs’, ‘sag’, ‘saga’ y ‘newton-cg’). +- **Usa el esquema uno-contra-resto (OvR)**, si la opción `multi_class` está configurada como `ovr`. +- **Usa la pérdida de entropía cruzada**, si la opción `multi_class` está configurada como `multinomial`. (Actualmente la opción `multinomial` solo es compatible con los solvers ‘lbfgs’, ‘sag’, ‘saga’ y ‘newton-cg’). -> 🎓 El 'esquema' aquí puede ser 'ovr' (one-vs-rest) o 'multinomial'. Dado que la regresión logística está diseñada principalmente para soportar clasificación binaria, estos esquemas le permiten manejar mejor tareas de clasificación multiclase. [fuente](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) +> 🎓 El 'esquema' aquí puede ser 'ovr' (uno-contra-resto) o 'multinomial'. Dado que la regresión logística está realmente diseñada para soportar clasificación binaria, estos esquemas le permiten manejar mejor tareas de clasificación multicategoría. [fuente](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) > 🎓 El 'solver' se define 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 cómo los solvers manejan diferentes desafíos presentados por diferentes tipos de estructuras de datos: -![solvers](../../../../translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.es.png) +![solvers](../../../../4-Classification/2-Classifiers-1/images/solvers.png) ## Ejercicio - dividir los datos -Podemos centrarnos en la regresión logística para nuestro primer intento de entrenamiento, ya que recientemente aprendiste sobre ella en una lección anterior. +Podemos centrarnos en la regresión logística para nuestra primera prueba de entrenamiento, ya que recientemente aprendiste sobre esta en una lección anterior. Divide tus datos en grupos de entrenamiento y prueba llamando a `train_test_split()`: ```python @@ -160,9 +160,9 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine ## Ejercicio - aplicar regresión logística -Dado que estás usando el caso multiclase, necesitas elegir qué _esquema_ usar y qué _solver_ configurar. Usa LogisticRegression con una configuración multiclase y el solver **liblinear** para entrenar. +Dado que estás usando el caso multicategoría, necesitas elegir qué _esquema_ usar y qué _solver_ configurar. Usa LogisticRegression con una configuración multicategoría y el solver **liblinear** para entrenar. -1. Crea una regresión logística con `multi_class` configurado como `ovr` y el solver configurado como `liblinear`: +1. Crea una regresión logística con multi_class configurado como `ovr` y el solver configurado como `liblinear`: ```python lr = LogisticRegression(multi_class='ovr',solver='liblinear') @@ -230,15 +230,15 @@ Dado que estás usando el caso multiclase, necesitas elegir qué _esquema_ usar | 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 | + | exactitud | 0.80 | 1199 | | | + | promedio macro | 0.80 | 0.80 | 0.80 | 1199 | + | promedio ponderado | 0.80 | 0.80 | 0.80 | 1199 | ## 🚀Desafío En esta lección, utilizaste tus datos limpios para construir un modelo de aprendizaje automático que puede predecir una cocina nacional basada en una serie de ingredientes. Tómate un tiempo para leer las muchas opciones que Scikit-learn ofrece para clasificar datos. Profundiza en el concepto de 'solver' para entender qué sucede detrás de escena. -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Revisión y autoestudio @@ -250,4 +250,4 @@ Investiga un poco más sobre las matemáticas detrás de la regresión logístic --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index 70204e587..e1ba25c26 100644 --- a/translations/es/4-Classification/3-Classifiers-2/README.md +++ b/translations/es/4-Classification/3-Classifiers-2/README.md @@ -1,17 +1,17 @@ # Clasificadores de cocina 2 -En esta segunda lección sobre 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. +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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ### Prerrequisitos @@ -23,23 +23,23 @@ Hemos cargado tu archivo _notebook.ipynb_ con el conjunto de datos limpio y lo h ## Un mapa de clasificación -Anteriormente, aprendiste sobre las diversas opciones que tienes al clasificar datos utilizando la hoja de referencia de Microsoft. Scikit-learn ofrece una hoja de referencia similar, pero más detallada, que puede ayudarte aún más a reducir tus opciones de estimadores (otro término para clasificadores): +Anteriormente, aprendiste sobre las diversas opciones que tienes al clasificar datos utilizando la hoja de referencia de Microsoft. Scikit-learn ofrece una hoja de referencia similar, pero más detallada, que puede ayudarte aún más a reducir tus estimadores (otro término para clasificadores): -![Mapa de ML de Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.es.png) +![Mapa de ML de Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) > Consejo: [visita este mapa en línea](https://scikit-learn.org/stable/tutorial/machine_learning_map/) y haz clic en el camino para leer la documentación. ### El plan -Este mapa es muy útil una vez que tienes un entendimiento claro de tus datos, ya que puedes "caminar" por sus caminos hacia una decisión: +Este mapa es muy útil una vez que tienes una comprensión clara 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, dado que tenemos datos numéricos: +- Si eso no funciona, dado que tenemos datos numéricos - Podemos intentar un ✨ KNeighbors Classifier - - Si eso tampoco funciona, probar con ✨ SVC y ✨ Ensemble Classifiers + - Si eso no funciona, probar ✨ SVC y ✨ Ensemble Classifiers Este es un camino muy útil a seguir. @@ -67,11 +67,11 @@ Siguiendo este camino, deberíamos comenzar importando algunas bibliotecas para ## Clasificador Linear SVC -El clustering de vectores de soporte (SVC) es un miembro de la familia de técnicas de aprendizaje automático de Máquinas de Vectores de Soporte (SVM, por sus siglas en inglés) (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 la '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 como 'linear' para asegurarnos de aprovechar el Linear SVC. La probabilidad por defecto es 'false'; aquí la configuramos como 'true' para obtener estimaciones de probabilidad. Establecemos el estado aleatorio en '0' para mezclar los datos y obtener probabilidades. +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 abajo). En este método, puedes elegir un 'kernel' para decidir cómo agrupar las etiquetas. El parámetro 'C' se refiere a la '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 como 'linear' para asegurarnos de aprovechar el Linear SVC. La probabilidad por defecto es 'false'; aquí la configuramos como '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 probemos. +Comienza creando un array de clasificadores. Irás añadiendo progresivamente a este array mientras probamos. 1. Comienza con un Linear SVC: @@ -116,13 +116,13 @@ Comienza creando un array de clasificadores. Irás agregando progresivamente a e ## 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 los datos se agrupan alrededor de estos puntos para que se puedan predecir etiquetas generalizadas para los datos. +K-Neighbors es parte de la familia de métodos de ML "neighbors", que pueden ser utilizados 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 una mejor precisión. Prueba un clasificador K-Neighbors. +El clasificador anterior fue bueno y funcionó bien con los datos, pero tal vez podamos obtener mejor precisión. Prueba un clasificador K-Neighbors. -1. Agrega una línea a tu array de clasificadores (agrega una coma después del elemento Linear SVC): +1. Añade una línea a tu array de clasificadores (añade una coma después del elemento Linear SVC): ```python 'KNN classifier': KNeighborsClassifier(C), @@ -147,15 +147,15 @@ El clasificador anterior fue bueno y funcionó bien con los datos, pero tal vez ✅ Aprende sobre [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) -## Clasificador de Vectores de Soporte +## Clasificador de vectores de soporte -Los clasificadores de Vectores de Soporte son parte de la familia de métodos de ML [Máquinas de Vectores de Soporte](https://wikipedia.org/wiki/Support-vector_machine) que se utilizan para tareas de clasificación y regresión. Las SVM "mapean ejemplos de entrenamiento a puntos en el espacio" para maximizar la distancia entre dos categorías. Los datos posteriores se mapean en este espacio para que se pueda predecir su categoría. +Los clasificadores de vectores de soporte son parte de la familia de [máquinas de vectores de soporte](https://wikipedia.org/wiki/Support-vector_machine) de métodos de ML que se utilizan para tareas de clasificación y regresión. Las SVM "mapean ejemplos de entrenamiento a puntos en el espacio" para maximizar la distancia entre dos categorías. Los datos posteriores se mapean en este espacio para que se pueda predecir su categoría. -### Ejercicio - aplicar un clasificador de Vectores de Soporte +### Ejercicio - aplicar un clasificador de vectores de soporte -Intentemos obtener una mejor precisión con un clasificador de Vectores de Soporte. +Intentemos 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: +1. Añade una coma después del elemento K-Neighbors y luego añade esta línea: ```python 'SVC': SVC(), @@ -178,11 +178,11 @@ Intentemos obtener una mejor precisión con un clasificador de Vectores de Sopor weighted avg 0.84 0.83 0.83 1199 ``` - ✅ Aprende sobre [Vectores de Soporte](https://scikit-learn.org/stable/modules/svm.html#svm) + ✅ Aprende sobre [vectores de soporte](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: +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), @@ -219,11 +219,11 @@ Accuracy (train) for ADA: 72.4% weighted avg 0.73 0.72 0.72 1199 ``` -✅ Aprende sobre [Clasificadores Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) +✅ Aprende sobre [clasificadores Ensemble](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. +Este método de aprendizaje automático "combina las predicciones de varios estimadores base" para mejorar la calidad del modelo. En nuestro ejemplo, utilizamos 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. +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), un método de promediación, 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. @@ -231,19 +231,19 @@ Este método de aprendizaje automático "combina las predicciones de varios esti ## 🚀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 una y piensa en lo que significaría ajustar estos parámetros para la calidad del modelo. +Cada una de estas técnicas tiene un gran número de parámetros que puedes ajustar. Investiga los parámetros predeterminados de cada una 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/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) -## Repaso y autoestudio +## Revisión y autoestudio Hay mucho vocabulario técnico en estas lecciones, así que tómate un momento para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) de terminología útil. ## Tarea -[Experimenta con parámetros](assignment.md) +[Prueba de parámetros](assignment.md) --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 malentendidos o interpretaciones erróneas que puedan surgir 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 index ede28d777..e4be40c62 100644 --- a/translations/es/4-Classification/4-Applied/README.md +++ b/translations/es/4-Classification/4-Applied/README.md @@ -1,8 +1,8 @@ # Introducción a la agrupación -La agrupación es un tipo de [Aprendizaje No Supervisado](https://wikipedia.org/wiki/Aprendizaje_no_supervisado) que asume que un conjunto de datos no está etiquetado o que sus entradas no están asociadas con salidas predefinidas. Utiliza varios algoritmos para clasificar datos no etiquetados y proporcionar agrupaciones según los patrones que detecta en los datos. +La agrupación es un tipo de [aprendizaje no supervisado](https://wikipedia.org/wiki/Unsupervised_learning) que asume que un conjunto de datos no está etiquetado o que sus entradas no están asociadas con salidas predefinidas. Utiliza varios algoritmos para clasificar datos no etiquetados y proporcionar agrupaciones según los patrones que detecta 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 un video. Mientras estudias aprendizaje automático con agrupación, disfruta de algunos temas de Dance Hall nigeriano: esta es una canción muy popular de 2014 de PSquare. -## [Cuestionario previo a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ### 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 las audiencias nigerianas consumen música. -✅ Tómate un minuto para pensar en los usos de la agrupación. En la vida cotidiana, la agrupación ocurre cada vez que tienes un montón de ropa y necesitas separar la ropa de los diferentes miembros de tu familia 🧦👕👖🩲. En ciencia de datos, la agrupación ocurre al intentar 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 dar sentido al caos, como un cajón de calcetines. +✅ 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 un montón de ropa y necesitas clasificar la ropa de los miembros de tu familia 🧦👕👖🩲. En ciencia de datos, la agrupación ocurre al intentar 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 dar sentido al caos, como un cajón de calcetines. [![Introducción al aprendizaje automático](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introducción a la agrupación") > 🎥 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 de mercados, identificando qué grupos de edad compran qué productos, por ejemplo. Otro uso sería la detección de anomalías, tal vez para identificar fraudes en un conjunto de datos de transacciones con tarjetas de crédito. O podrías usar la agrupación para identificar tumores en un lote de escaneos médicos. +En un entorno profesional, la agrupación puede usarse para determinar cosas como la segmentación de mercado, identificando qué grupos de edad compran qué productos, por ejemplo. Otro uso sería la detección de anomalías, tal vez para identificar fraudes en un conjunto de datos de transacciones con tarjetas de crédito. O podrías usar la agrupación para identificar tumores en un lote de escaneos médicos. -✅ Piensa un momento en cómo podrías haber encontrado la agrupación 'en la vida real', en un entorno bancario, de comercio electrónico o empresarial. +✅ Piensa un minuto en cómo podrías haber encontrado la agrupación 'en la vida real', en un entorno bancario, de comercio electrónico o empresarial. > 🎓 Curiosamente, el análisis de agrupación 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 ejemplo, en enlaces de compras, imágenes o reseñas. 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 detallado, por lo que la técnica puede usarse para aprender sobre los datos antes de construir otros modelos. +Alternativamente, podrías usarlo para agrupar resultados de búsqueda, como 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 detallado, por lo que la técnica puede usarse para aprender sobre los datos antes de construir 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 de un conjunto de datos; en lugar de referirte a un punto de datos por información identificable, puedes referirte a él por su Id de grupo. ¿Puedes pensar en otras razones por las que preferirías referirte a un Id de grupo en lugar de otros elementos del grupo para identificarlo? @@ -43,73 +43,73 @@ Profundiza tu comprensión de las técnicas de agrupación en este [módulo de a [Scikit-learn ofrece una amplia variedad](https://scikit-learn.org/stable/modules/clustering.html) de métodos para realizar agrupación. 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 | -| Propagación de afinidad | muchos grupos desiguales, inductivo | -| Mean-shift | muchos grupos desiguales, inductivo | -| Agrupación espectral | pocos grupos iguales, transductivo | -| Agrupación jerárquica Ward | muchos grupos restringidos, transductivo | -| Agrupación aglomerativa | muchos grupos restringidos, distancias no euclidianas, transductivo | -| DBSCAN | geometría no plana, grupos desiguales, transductivo | +| 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 iguales, 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 | -| Mezclas gaussianas | geometría plana, inductivo | -| BIRCH | conjunto de datos grande con valores atípicos, inductivo | +| 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. Desglosémoslo: +> 🎓 Cómo creamos grupos tiene mucho que ver con cómo agrupamos los puntos de datos. Desglosémoslo: > > 🎓 ['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. +> 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 luego se aplican a casos de prueba. > -> Un ejemplo: Imagina que tienes un conjunto de datos que está parcialmente etiquetado. Algunas cosas son 'discos', otras 'CDs', y otras están en blanco. Tu tarea es proporcionar etiquetas para los elementos en blanco. 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 al trabajar para agrupar elementos similares y luego aplicar una etiqueta a un grupo. En este caso, los grupos podrían reflejar 'cosas musicales redondas' y 'cosas musicales cuadradas'. +> Un ejemplo: Imagina que tienes un conjunto de datos que está solo parcialmente etiquetado. Algunas cosas son 'discos', otras 'CDs', y otras están en blanco. Tu trabajo es proporcionar etiquetas para los elementos en blanco. 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 al agrupar elementos similares y luego aplicar 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, 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/Geometr%C3%ADa_euclidiana)) o 'no planos' (no euclidianos). +> 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 distancias entre puntos en grupos, y eso puede hacerse de manera 'plana' o 'no plana', dependiendo de la naturaleza de los datos. [Las distancias euclidianas](https://wikipedia.org/wiki/Distancia_euclidiana) se miden como la longitud de un segmento de línea entre dos puntos. [Las distancias no euclidianas](https://wikipedia.org/wiki/Geometr%C3%ADa_no_euclidiana) se miden a lo largo de una curva. Si tus datos, visualizados, parecen no existir en un plano, podrías necesitar usar un algoritmo especializado para manejarlos. +>'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 distancias entre puntos en grupos, y eso puede hacerse 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, podrías necesitar usar un algoritmo especializado para manejarlos. > -![Infografía de geometría plana vs. no plana](../../../../translated_images/flat-nonflat.d1c8c6e2a96110c1d57fa0b72913f6aab3c245478524d25baf7f4a18efcde224.es.png) +![Infografía de geometría plana vs. no plana](../../../../5-Clustering/1-Visualize/images/flat-nonflat.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 puede medirse 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 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. +> Los grupos se definen por su matriz de distancias, es decir, las distancias entre puntos. Esta distancia puede medirse 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 se miden así 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 aprendizaje 'semi-supervisado' en este método no supervisado. Las relaciones entre puntos se marcan como 'no puede vincular' o 'debe vincular', por lo que se imponen algunas reglas al conjunto de datos. +> [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 puede vincular' o 'debe vincular', 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', 'cosas musicales cuadradas', 'cosas triangulares' y 'galletas'. Si se le dan algunas restricciones o reglas a seguir ("el artículo debe estar hecho de plástico", "el artículo necesita poder producir música"), esto puede ayudar a 'restringir' el algoritmo para tomar mejores decisiones. +>Un ejemplo: Si un algoritmo se deja libre 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', 'cosas musicales cuadradas', 'cosas triangulares' y 'galletas'. Si se le dan algunas restricciones o reglas a seguir ("el artículo debe estar hecho de plástico", "el artículo necesita 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 necesitan ser analizados 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 agrupación K-Means vs. algoritmos HDBSCAN para explorar un conjunto de datos ruidoso con densidad de grupos desigual. +> Los datos que son 'ruidosos' se consideran 'densos'. Las distancias entre puntos en cada uno de sus grupos pueden resultar, al examinarlas, más o menos densas, o 'congestionadas', y por lo tanto estos datos necesitan 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 agrupación K-Means vs. algoritmos HDBSCAN para explorar un conjunto de datos ruidoso 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 en cuestión. Discutamos algunos de los principales: +Existen más de 100 algoritmos de agrupación, y su uso depende de la naturaleza de los datos en cuestión. 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 uno más lejano, los grupos se forman en función de la distancia de sus miembros hacia y desde otros objetos. La agrupación aglomerativa de Scikit-learn es jerárquica. +- **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 hacia y desde otros objetos. La agrupación aglomerativa de Scikit-learn es jerárquica. - ![Infografía de agrupación jerárquica](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.es.png) + ![Infografía de agrupación jerárquica](../../../../5-Clustering/1-Visualize/images/hierarchical.png) > Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **Agrupación por centroides**. Este popular algoritmo requiere elegir '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 agrupación por centroides. El centro se determina por la media más cercana, de ahí el nombre. La distancia cuadrada desde el grupo se minimiza. +- **Agrupación por centroides**. Este algoritmo popular requiere elegir '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 por centroides. El centro se determina por la media más cercana, de ahí el nombre. La distancia cuadrada desde el grupo se minimiza. - ![Infografía de agrupación por centroides](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.es.png) + ![Infografía de agrupación por centroides](../../../../5-Clustering/1-Visualize/images/centroid.png) > Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) - **Agrupación basada en distribución**. Basada en modelos estadísticos, 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 según su densidad, o su agrupación alrededor de otros puntos. 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 densidad**. Los puntos de datos se asignan a grupos según 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 agrupación como técnica se beneficia enormemente de una 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 de manera más efectiva para la naturaleza de estos datos. +La técnica de agrupación se beneficia enormemente de una 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 de manera más efectiva 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. @@ -131,10 +131,10 @@ La agrupación como técnica se beneficia enormemente de una visualización adec Revisa las primeras líneas de datos: - | | nombre | álbum | artista | género_principal_artista | fecha_lanzamiento | duración | popularidad | bailabilidad | acústica | energía | instrumentalidad | vivacidad | volumen | hablabilidad | tempo | compás | - | --- | ----------------------- | ---------------------------- | ------------------- | ------------------------- | ----------------- | -------- | ----------- | ------------ | -------- | ------ | ---------------- | --------- | ------- | ------------ | ------- | --------------- | - | 0 | Sparky | Mandy & The Jungle | Cruel Santino | r&b alternativo | 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 | + | | 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 | @@ -218,7 +218,7 @@ La agrupación como técnica se beneficia enormemente de una visualización adec | 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 clustering, un método no supervisado que no requiere datos etiquetados, ¿por qué estamos mostrando estos datos con etiquetas? En la fase de exploración de datos, son útiles, pero no son necesarios para que los algoritmos de clustering funcionen. Podrías eliminar los encabezados de las columnas y referirte a los datos por número de columna. +> 🤔 Si estamos trabajando con clustering, un método no supervisado que no requiere datos etiquetados, ¿por qué estamos mostrando estos datos con etiquetas? En la fase de exploración de datos son útiles, pero no son necesarios para que los algoritmos de clustering funcionen. Podrías eliminar los encabezados de las columnas y referirte a los datos por número de columna. Observa los valores generales de los datos. Nota que la popularidad puede ser '0', lo que muestra canciones que no tienen ranking. Eliminemos esos valores pronto. @@ -234,7 +234,7 @@ Observa los valores generales de los datos. Nota que la popularidad puede ser '0 plt.title('Top genres',color = 'blue') ``` - ![más populares](../../../../translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.es.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) ✅ Si deseas ver más valores principales, cambia el top `[:5]` a un valor mayor o elimínalo para ver todo. @@ -253,9 +253,9 @@ Nota que cuando el género principal se describe como 'Missing', significa que S Ahora verifica nuevamente los géneros: - ![todos los géneros](../../../../translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.es.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) -1. Los tres géneros principales dominan este conjunto de datos. Concentrémonos en `afro dancehall`, `afropop` y `nigerian pop`, además de filtrar el conjunto de datos para eliminar cualquier valor de popularidad igual a 0 (lo que significa que no fue clasificado con una popularidad en el conjunto de datos y puede considerarse ruido para nuestros propósitos): +1. Los tres géneros principales dominan este conjunto de datos. Concentrémonos en `afro dancehall`, `afropop` y `nigerian pop`, y además filtremos el conjunto de datos para eliminar cualquier valor de popularidad igual a 0 (lo que significa que no fue clasificado con una popularidad en el conjunto de datos y puede considerarse 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')] @@ -275,7 +275,7 @@ Nota que cuando el género principal se describe como 'Missing', significa que S sns.heatmap(corrmat, vmax=.8, square=True) ``` - ![correlaciones](../../../../translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.es.png) + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) La única correlación fuerte es entre `energy` y `loudness`, lo cual no es muy sorprendente, dado que la música fuerte suele ser bastante energética. Por lo demás, las correlaciones son relativamente débiles. Será interesante ver qué puede hacer un algoritmo de clustering con estos datos. @@ -307,7 +307,7 @@ Nota que cuando el género principal se describe como 'Missing', significa que S En general, los tres géneros se alinean de manera suelta en términos de su popularidad y capacidad de baile. Determinar clusters en estos datos alineados de manera suelta será un desafío: - ![distribución](../../../../translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.es.png) + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) 1. Crea un gráfico de dispersión: @@ -319,7 +319,7 @@ Nota que cuando el género principal se describe como 'Missing', significa que S Un gráfico de dispersión de los mismos ejes muestra un patrón similar de convergencia. - ![Facetgrid](../../../../translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.es.png) + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) En general, para clustering, puedes usar gráficos de dispersión para mostrar clusters de datos, por lo que dominar este tipo de visualización es muy útil. En la próxima lección, tomaremos estos datos filtrados y usaremos clustering k-means para descubrir grupos en estos datos que parecen superponerse de maneras interesantes. @@ -329,13 +329,13 @@ En general, para clustering, puedes usar gráficos de dispersión para mostrar c En preparación para la próxima lección, haz un gráfico sobre los diversos algoritmos de clustering que podrías descubrir y usar en un entorno de producción. ¿Qué tipo de problemas está tratando de abordar el clustering? -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## 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 varios algoritmos de clustering se comportan, dados diferentes formatos de datos. +[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 varios algoritmos de clustering se comportan, dadas diferentes formas de datos. ## Tarea diff --git a/translations/es/5-Clustering/2-K-Means/README.md b/translations/es/5-Clustering/2-K-Means/README.md index b98d94761..c4e9a40d6 100644 --- a/translations/es/5-Clustering/2-K-Means/README.md +++ b/translations/es/5-Clustering/2-K-Means/README.md @@ -1,17 +1,17 @@ # Agrupamiento K-Means -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) -En esta lección, aprenderás cómo crear agrupaciones 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 agrupaciones y el método que utilices depende de tus datos. Probaremos K-Means ya que es la técnica de agrupamiento más común. ¡Comencemos! +En esta lección, aprenderás a crear agrupaciones 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 agrupaciones y el método que utilices dependerá de tus datos. Probaremos K-Means, ya que es la técnica de agrupamiento más común. ¡Comencemos! Términos que aprenderás: @@ -22,32 +22,32 @@ Términos que aprenderás: ## Introducción -[El agrupamiento K-Means](https://wikipedia.org/wiki/K-means_clustering) es un método derivado del ámbito del procesamiento de señales. Se utiliza para dividir y particionar grupos de datos en 'k' agrupaciones 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 una agrupación. +[El agrupamiento K-Means](https://wikipedia.org/wiki/K-means_clustering) es un método derivado del ámbito del procesamiento de señales. Se utiliza para dividir y particionar grupos de datos en 'k' agrupaciones utilizando una serie de observaciones. Cada observación trabaja para agrupar un punto de datos dado al 'promedio' más cercano, o el punto central de una agrupación. Las agrupaciones pueden visualizarse 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) +![diagrama de voronoi](../../../../5-Clustering/2-K-Means/images/voronoi.png) > Infografía por [Jen Looper](https://twitter.com/jenlooper) El proceso de agrupamiento K-Means [se ejecuta en tres pasos](https://scikit-learn.org/stable/modules/clustering.html#k-means): -1. El algoritmo selecciona un número k de puntos centrales mediante muestreo del conjunto de datos. Después de esto, realiza un bucle: +1. El algoritmo selecciona un número k de puntos centrales muestreando del conjunto de datos. Después, entra en un bucle: 1. Asigna cada muestra al centroide más cercano. 2. Crea nuevos centroides tomando el valor promedio de todas las muestras asignadas a los centroides anteriores. - 3. Luego, calcula la diferencia entre los nuevos y los antiguos centroides y repite hasta que los centroides se estabilicen. + 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 necesitas 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. ## Prerrequisito -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 realizaste en la última lección. +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 realizaste en la lección anterior. ## Ejercicio - preparación Comienza revisando nuevamente los datos de las canciones. -1. Crea un diagrama de caja, llamando a `boxplot()` para cada columna: +1. Crea un diagrama de caja llamando a `boxplot()` para cada columna: ```python plt.figure(figsize=(20,20), dpi=200) @@ -91,9 +91,9 @@ Comienza revisando nuevamente los datos de las canciones. 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) + ![valores atípicos](../../../../5-Clustering/2-K-Means/images/boxplots.png) -Podrías revisar el conjunto de datos y eliminar estos valores atípicos, pero eso haría que los datos sean bastante mínimos. +Podrías recorrer el conjunto de datos y eliminar estos valores atípicos, pero eso haría que los datos sean 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: @@ -110,7 +110,7 @@ Podrías revisar el conjunto de datos y eliminar estos valores atípicos, pero e y = le.transform(y) ``` -1. Ahora necesitas elegir cuántas agrupaciones apuntar. Sabes que hay 3 géneros de canciones que extrajimos del conjunto de datos, así que probemos con 3: +1. Ahora necesitas elegir cuántas agrupaciones apuntar. Sabes que hay 3 géneros musicales que extrajimos del conjunto de datos, así que probemos con 3: ```python from sklearn.cluster import KMeans @@ -127,7 +127,7 @@ Podrías revisar el conjunto de datos y eliminar estos valores atípicos, pero e y_cluster_kmeans ``` -Ves un arreglo impreso con agrupaciones predichas (0, 1 o 2) para cada fila del dataframe. +Verás un arreglo impreso con las agrupaciones predichas (0, 1 o 2) para cada fila del dataframe. 1. Usa este arreglo para calcular una 'puntuación de silueta': @@ -139,9 +139,9 @@ Ves un arreglo impreso con agrupaciones predichas (0, 1 o 2) para cada fila del ## Puntuación de silueta -Busca una puntuación de silueta cercana a 1. Esta puntuación varía de -1 a 1, y si la puntuación es 1, la agrupación es densa y bien separada de otras agrupaciones. Un valor cercano a 0 representa agrupaciones superpuestas con muestras muy cerca del límite de decisión de las agrupaciones vecinas. [(Fuente)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) +Busca una puntuación de silueta cercana a 1. Esta puntuación varía de -1 a 1, y si la puntuación es 1, la agrupación es densa y está bien separada de otras agrupaciones. Un valor cercano a 0 representa agrupaciones superpuestas con muestras muy cercanas al límite de decisión de las agrupaciones vecinas. [(Fuente)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) -Nuestra puntuación es **.53**, justo en el medio. Esto indica que nuestros datos no están particularmente bien adaptados a este tipo de agrupamiento, pero continuemos. +Nuestra puntuación es **0.53**, 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 @@ -172,7 +172,7 @@ Nuestra puntuación es **.53**, justo en el medio. Esto indica que nuestros dato ### Método del codo -Anteriormente, dedujiste que, dado que has apuntado a 3 géneros de canciones, deberías elegir 3 agrupaciones. ¿Pero es ese el caso? +Anteriormente, dedujiste que, dado que apuntaste a 3 géneros musicales, deberías elegir 3 agrupaciones. ¿Pero es ese el caso? 1. Usa el 'método del codo' para asegurarte. @@ -185,13 +185,13 @@ Anteriormente, dedujiste que, dado que has apuntado a 3 géneros de canciones, d 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 agrupaciones. ¡Quizás sí sean 3! + 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 agrupaciones. ¡Quizás sí sea 3! - ![método del codo](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.es.png) + ![método del codo](../../../../5-Clustering/2-K-Means/images/elbow.png) ## Ejercicio - mostrar las agrupaciones -1. Prueba el proceso nuevamente, esta vez configurando tres agrupaciones, y muestra las agrupaciones como un gráfico de dispersión: +1. Intenta el proceso nuevamente, esta vez configurando tres agrupaciones, y muestra las agrupaciones como un diagrama de dispersión: ```python from sklearn.cluster import KMeans @@ -216,22 +216,22 @@ Anteriormente, dedujiste que, dado que has apuntado a 3 géneros de canciones, d 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 las agrupaciones te da una pista de por qué. + La precisión de este modelo no es muy buena, y la forma de las agrupaciones te da una pista del porqué. - ![agrupaciones](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.es.png) + ![agrupaciones](../../../../5-Clustering/2-K-Means/images/clusters.png) - Estos datos están demasiado desequilibrados, tienen poca correlación y hay demasiada variación entre los valores de las columnas para agrupar bien. De hecho, las agrupaciones que se forman probablemente están fuertemente influenciadas o sesgadas por las tres categorías de géneros que definimos anteriormente. ¡Eso fue un proceso de aprendizaje! + Estos datos están demasiado desequilibrados, poco correlacionados y hay demasiada varianza entre los valores de las columnas para agruparlos bien. De hecho, las agrupaciones que se forman probablemente están muy influenciadas o sesgadas por las tres categorías de géneros que definimos anteriormente. ¡Fue un proceso de aprendizaje! En la documentación de Scikit-learn, puedes ver que un modelo como este, con agrupaciones no muy bien delimitadas, tiene un problema de 'varianza': - ![modelos problemáticos](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.es.png) + ![modelos problemáticos](../../../../5-Clustering/2-K-Means/images/problems.png) > Infografía de Scikit-learn ## Varianza La varianza se define como "el promedio de las diferencias al cuadrado respecto a la media" [(Fuente)](https://www.mathsisfun.com/data/standard-deviation.html). En el contexto de este problema de agrupamiento, se refiere a datos cuyos números tienden a divergir demasiado de la media. -✅ Este es un gran momento para pensar en todas las formas en que podrías corregir este problema. ¿Modificar un poco más los datos? ¿Usar diferentes columnas? ¿Probar un algoritmo diferente? Pista: Intenta [escalar tus datos](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) para normalizarlos y prueba otras columnas. +✅ 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: Prueba [escalar tus datos](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) para normalizarlos y prueba con otras columnas. > Prueba este '[calculador de varianza](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' para entender mejor el concepto. @@ -239,17 +239,17 @@ La varianza se define como "el promedio de las diferencias al cuadrado respecto ## 🚀Desafío -Dedica tiempo a este notebook 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 importancia a ciertas muestras de datos. ¿Qué más puedes hacer para crear mejores agrupaciones? +Dedica algo de tiempo a este notebook 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 importancia a ciertas muestras de datos. ¿Qué más puedes hacer para crear mejores agrupaciones? -Pista: Intenta 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. Descubrirás que, aunque la puntuación de silueta disminuye, 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). +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 en términos de rango. Descubrirás que, aunque la puntuación de silueta disminuye, 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/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) -## Revisión y autoestudio +## Repaso 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 agrupaciones y el número de centroides. ¿Esto te ayuda a tener una idea de cómo se pueden agrupar los datos? +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 agrupaciones y el número de centroides. ¿Te ayuda esto a tener una idea de cómo se pueden agrupar los datos? -También, revisa [este documento sobre K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) de Stanford. +Además, revisa [este documento sobre K-Means](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) de Stanford. ## Tarea diff --git a/translations/es/6-NLP/1-Introduction-to-NLP/README.md b/translations/es/6-NLP/1-Introduction-to-NLP/README.md index f267e04ab..7b4e0d3ee 100644 --- a/translations/es/6-NLP/1-Introduction-to-NLP/README.md +++ b/translations/es/6-NLP/1-Introduction-to-NLP/README.md @@ -1,8 +1,8 @@ -# Traducción y análisis de sentimiento con ML +# Traducción y análisis de sentimientos con ML -En las lecciones anteriores aprendiste a construir un bot básico utilizando `TextBlob`, una biblioteca que incorpora aprendizaje automático detrás de escena para realizar tareas básicas de PLN 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. +En las lecciones anteriores aprendiste cómo construir un bot básico utilizando `TextBlob`, una biblioteca que incorpora ML detrás de escena para realizar tareas básicas de PLN 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 lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) +## [Cuestionario previo a la clase](https://ff-quizzes.netlify.app/en/ml/) -La traducción es un problema muy complejo debido al hecho de que existen miles de idiomas, cada uno con reglas gramaticales muy diferentes. Un enfoque consiste en convertir las reglas gramaticales formales de un idioma, como el inglés, en una estructura independiente del idioma, y luego traducirla convirtiéndola nuevamente a otro idioma. Este enfoque implica los siguientes pasos: +La traducción es un problema muy difícil, agravado por el hecho de que hay miles de idiomas y cada uno puede tener reglas gramaticales muy diferentes. Una de las aproximaciones es convertir las reglas gramaticales formales de un idioma, como el inglés, en una estructura independiente del idioma, y luego traducirla convirtiéndola nuevamente a otro idioma. Este enfoque implica los siguientes pasos: 1. **Identificación**. Identificar o etiquetar las palabras en el idioma de entrada como sustantivos, verbos, etc. 2. **Crear la traducción**. Producir una traducción directa de cada palabra en el formato del idioma de destino. @@ -42,25 +42,25 @@ El orden formal de la oración en irlandés es: 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 diciendo 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! +✅ 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 expresando tu traducción. Esto es similar a lo que hacen los programas de traducción computacional ingenuos. ¡Es importante superar esta fase para alcanzar la fluidez! -La traducción ingenua conduce a malas (y a veces hilarantes) traducciones erróneas: `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, son idiomas muy diferentes con estructuras gramaticales distintas. +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, son idiomas muy diferentes con estructuras gramaticales distintas. > 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 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 destino. +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 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, el de origen y el de destino. -Por ejemplo, considera el caso de *Orgullo y Prejuicio*, una novela inglesa muy 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 traduzcan _idiomáticamente_ al otro. Lo harás en un momento. +Por ejemplo, considera el caso de *Orgullo y Prejuicio*, una novela inglesa muy 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_ al otro. Harás esto 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' complicado en francés, 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'). +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 cognado 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) +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) -> Imagen de [Jen Looper](https://twitter.com/jenlooper) +> Imagen por [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 traducidos previamente por hablantes humanos expertos de ambos idiomas. +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 @@ -78,33 +78,33 @@ 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: +Se puede argumentar que la traducción de TextBlob es mucho más precisa, 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, quien innecesariamente pone palabras en la boca del autor original para 'claridad'. +En este caso, la traducción informada por ML hace un mejor trabajo que el traductor humano que pone innecesariamente palabras 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á utilizando Google Translate, una IA sofisticada capaz de analizar millones de frases para predecir las mejores cadenas para la tarea en cuestión. Aquí no hay nada manual y necesitas una conexión a internet para usar `blob.translate`. +> ¿Qué está pasando aquí? ¿Y por qué TextBlob es tan bueno en la traducción? Bueno, detrás de escena, está utilizando 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 aquí y necesitas una conexión a internet para usar `blob.translate`. -✅ Prueba algunas oraciones más. ¿Cuál es mejor, la traducción de ML o la humana? ¿En qué casos? +✅ Prueba algunas oraciones más. ¿Cuál es mejor, la traducción por ML o la humana? ¿En qué casos? -## Análisis de sentimiento +## Análisis de sentimientos -Otra área donde el aprendizaje automático puede funcionar muy bien es el análisis de sentimiento. Un enfoque no basado en ML para el sentimiento es identificar palabras y frases que son 'positivas' y 'negativas'. Luego, dado un nuevo texto, calcular el valor total de las palabras positivas, negativas y neutrales para identificar el sentimiento general. +Otra área donde el aprendizaje automático puede funcionar muy bien es el análisis de sentimientos. Un enfoque no basado en ML para el sentimiento es identificar palabras y frases que son 'positivas' y 'negativas'. Luego, dado un nuevo texto, calcular el valor total de las palabras positivas, negativas y neutrales para identificar el sentimiento general. -Este enfoque es fácilmente engañado, como pudiste haber 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 negativa, pero el algoritmo simple detecta 'great', 'wonderful', 'glad' como positivas y 'waste', 'lost' y 'dark' como negativas. El sentimiento general se ve influido por estas palabras conflictivas. +Este enfoque es fácilmente engañado, como habrás 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 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 influido por estas palabras conflictivas. ✅ Detente un momento 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 textos 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 PLN a las opiniones y puntuaciones, de modo que emerjan patrones (por ejemplo, las reseñas positivas de películas tienden a tener la frase 'Oscar worthy' más que las reseñas negativas, o las reseñas positivas de restaurantes dicen 'gourmet' mucho más que 'disgusting'). +El enfoque de ML sería reunir 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 PLN a las opiniones y puntuaciones, para que emerjan patrones (por ejemplo, las reseñas de películas positivas tienden a tener la frase 'Oscar worthy' más que las reseñas negativas, o las reseñas positivas de restaurantes 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 ciudadanos podrían escribir a la oficina con correos electrónicos a favor o en contra de la nueva ley. Supongamos que te encargan leer los correos electrónicos y clasificarlos en 2 pilas, *a favor* y *en contra*. Si hubiera muchos correos electrónicos, podrías sentirte abrumado al intentar leerlos todos. ¿No sería genial si un bot pudiera leerlos todos por ti, entenderlos y decirte en qué pila pertenece cada correo electrónico? +> ⚖️ **Ejemplo**: Si trabajas en la oficina de un político y se está debatiendo una nueva ley, los ciudadanos podrían escribir correos electrónicos a la oficina apoyando o en contra de la ley en particular. Supongamos que te encargan leer los correos electrónicos y clasificarlos en 2 grupos, *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é grupo pertenece cada correo electrónico? > -> Una forma de lograr eso es usar aprendizaje automático. Entrenarías el modelo con una parte de los correos electrónicos *en contra* y una parte de los *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 son más propensos a 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 llega a la misma conclusión que tú. Luego, una vez que estés satisfecho con la precisión del modelo, podrías procesar correos electrónicos futuros sin tener que leer cada uno. +> Una forma de lograr esto es usar aprendizaje automático. Entrenarías el modelo con una parte de los correos electrónicos *en contra* y una parte 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 son más propensos a aparecer en un correo electrónico *en contra* o *a favor*. Podrías probarlo con algunos correos electrónicos que no hayas usado para entrenar el modelo y ver si llega a la misma conclusión que tú. Luego, una vez que estés satisfecho con la precisión del modelo, podrías procesar correos electrónicos futuros sin tener que leer cada uno. -✅ ¿Este proceso te suena a procesos que has usado en lecciones anteriores? +✅ ¿Este proceso te suena similar a procesos que has usado en lecciones anteriores? ## Ejercicio - oraciones sentimentales @@ -112,7 +112,7 @@ El sentimiento se mide con una *polaridad* de -1 a 1, donde -1 es el sentimiento 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 anteriormente) para determinar el `sentimiento` (no necesitas escribir tu propio calculador de sentimiento) en la siguiente tarea. +Debes usar la biblioteca `TextBlob` (descrita anteriormente) para determinar el `sentimiento` (no necesitas escribir tu propio calculador de sentimientos) en la siguiente tarea. ```python from textblob import TextBlob @@ -128,7 +128,7 @@ print(quote1 + " has a sentiment of " + str(sentiment1)) print(quote2 + " has a sentiment of " + str(sentiment2)) ``` -Ves la siguiente salida: +Ves el siguiente resultado: ```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) @@ -139,25 +139,25 @@ Darcy, as well as Elizabeth, really loved them; and they were uniting them. has a sentiment of Sentiment(polarity=0.7, subjectivity=0.8) ``` -## Desafío - comprobar la polaridad del sentimiento +## Desafío - verificar polaridad de sentimientos -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. +Tu tarea es determinar, utilizando la polaridad de sentimientos, 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 inicio 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. +3. Crea un TextBlob utilizando la cadena del libro. 4. Analiza cada oración del libro en un bucle. 1. Si la polaridad es 1 o -1, almacena la oración en un array 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í tienes una [solución de ejemplo](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). +Aquí hay una [solución de ejemplo](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). ✅ Verificación de conocimiento 1. El sentimiento se basa en las palabras utilizadas en la oración, pero ¿el código *entiende* las palabras? -2. ¿Crees que la polaridad del sentimiento es precisa, o en otras palabras, ¿estás de acuerdo con las puntuaciones? +2. ¿Crees que la polaridad de sentimientos 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 absolutamente **positiva** 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. @@ -167,7 +167,7 @@ Aquí tienes una [solución de ejemplo](https://github.com/microsoft/ML-For-Begi * “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? + 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 sentimientos 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. @@ -177,7 +177,7 @@ Aquí tienes una [solución de ejemplo](https://github.com/microsoft/ML-For-Begi - The pause was to Elizabeth’s feelings dreadful. - It would be dreadful! -✅ Cualquier aficionado a Jane Austen entenderá que 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á lleno de matices. Incluso Mr. Darcy (el interés amoroso en la historia) nota el uso juguetón y burlón del lenguaje por parte de Elizabeth: "He tenido el placer de conocerla el tiempo suficiente para saber que encuentra gran disfrute en profesar ocasionalmente opiniones que de hecho no son las suyas". +✅ 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 aguda (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 por parte de Elizabeth: "He tenido el placer de conocerte lo suficiente como para saber que disfrutas mucho ocasionalmente profesando opiniones que en realidad no son tuyas". --- @@ -185,10 +185,10 @@ Aquí tienes una [solución de ejemplo](https://github.com/microsoft/ML-For-Begi ¿Puedes mejorar a Marvin aún más extrayendo otras características de la entrada del usuario? -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) +## [Cuestionario posterior a la clase](https://ff-quizzes.netlify.app/en/ml/) ## Revisión y autoestudio -Hay muchas maneras de extraer el sentimiento de un texto. Piensa en las aplicaciones empresariales que podrían utilizar esta técnica. Reflexiona sobre cómo podría salir mal. Lee más sobre sistemas sofisticados y preparados para empresas 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 frases de Orgullo y Prejuicio mencionadas anteriormente y observa si puede detectar matices. +Hay muchas maneras de extraer el sentimiento de un texto. Piensa en las aplicaciones empresariales que podrían utilizar esta técnica. Reflexiona sobre cómo podría salir mal. Lee más sobre sistemas sofisticados y listos para empresas 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 frases de Orgullo y Prejuicio mencionadas anteriormente y observa si puede detectar matices. ## Tarea @@ -197,4 +197,4 @@ Hay muchas maneras de extraer el sentimiento de un texto. Piensa en las aplicaci --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automáticas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index 0712c2c17..ef13b317f 100644 --- a/translations/es/6-NLP/4-Hotel-Reviews-1/README.md +++ b/translations/es/6-NLP/4-Hotel-Reviews-1/README.md @@ -1,8 +1,8 @@ # Análisis de sentimientos con reseñas de hoteles -Ahora que has explorado el conjunto de datos en detalle, es momento de filtrar las columnas y luego usar técnicas de PLN (Procesamiento de Lenguaje Natural) en el conjunto de datos para obtener nuevas perspectivas sobre los hoteles. +Ahora que has explorado el conjunto de datos en detalle, es momento de filtrar las columnas y luego usar técnicas de procesamiento de lenguaje natural (NLP) 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/) +## [Cuestionario previo a la clase](https://ff-quizzes.netlify.app/en/ml/) ### Operaciones de filtrado y análisis de sentimientos -Como probablemente hayas 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 se calcularon, y las respuestas no pueden ser verificadas de forma independiente con tus propios cálculos. +Como probablemente hayas 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 se calcularon, y las respuestas no pueden ser verificadas de manera independiente con tus propios cálculos. ## Ejercicio: un poco más de procesamiento de datos @@ -25,16 +25,21 @@ Limpia los datos un poco más. Agrega columnas que serán útiles más adelante, 1. Elimina `lat` y `lng`. - 2. Sustituye 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). + 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 por solo 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 + Ámsterdam, Países Bajos + + Barcelona, España + + Londres, Reino Unido + + Milán, Italia + + París, Francia + + Viena, Austria ```python def replace_address(row): @@ -65,22 +70,22 @@ Limpia los datos un poco más. Agrega columnas que serán útiles más adelante, | Hotel_Address | Hotel_Name | | :--------------------- | :--------: | - | Amsterdam, Netherlands | 105 | - | Barcelona, Spain | 211 | - | London, United Kingdom | 400 | - | Milan, Italy | 162 | - | Paris, France | 458 | - | Vienna, Austria | 158 | + | Ámsterdam, Países Bajos | 105 | + | Barcelona, España | 211 | + | Londres, Reino Unido | 400 | + | Milán, Italia | 162 | + | París, Francia | 458 | + | Viena, Austria | 158 | 2. Procesar columnas de meta-reseñas de hoteles 1. Elimina `Additional_Number_of_Scoring`. - 2. Sustituye `Total_Number_of_Reviews` con el número total de reseñas para ese hotel que realmente están en el conjunto de datos. + 2. 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. - 3. Sustituye `Average_Score` con nuestra propia puntuación calculada. + 3. Reemplaza `Average_Score` con nuestro propio puntaje calculado. - ```python + ```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 @@ -96,7 +101,7 @@ Limpia los datos un poco más. Agrega columnas que serán útiles más adelante, 3. Conserva `Tags` por ahora. - - Realizaremos algunas operaciones de filtrado adicionales en las etiquetas en la siguiente sección y luego eliminaremos las etiquetas. + - Realizaremos algunas operaciones de filtrado adicionales en las etiquetas en la siguiente sección y luego las eliminaremos. 4. Procesar columnas de los revisores @@ -106,23 +111,23 @@ Limpia los datos un poco más. Agrega columnas que serán útiles más adelante, ### Columnas de etiquetas -La columna `Tag` es problemática ya que es una lista (en forma de texto) almacenada en la columna. Desafortunadamente, el orden y el número de subsecciones en esta columna no siempre son los mismos. Es difícil para una persona identificar las frases correctas de interés, porque hay 515,000 filas y 1,427 hoteles, y cada uno tiene opciones ligeramente diferentes que un revisor podría elegir. Aquí es donde el PLN brilla. Puedes escanear el texto y encontrar las frases más comunes, y contarlas. +La columna `Tag` es problemática ya que es una lista (en forma de texto) almacenada en la columna. Desafortunadamente, el orden y el número de subsecciones en esta columna no siempre son los mismos. Es difícil para un humano identificar las frases correctas de interés, porque hay 515,000 filas y 1427 hoteles, y cada uno tiene opciones ligeramente diferentes que un revisor podría elegir. Aquí es donde el NLP brilla. Puedes escanear el texto y encontrar las frases más comunes, y contarlas. -Desafortunadamente, no estamos interesados en palabras individuales, sino en frases de varias palabras (por ejemplo, *Viaje de negocios*). Ejecutar un algoritmo de distribución de frecuencia de frases en tantos datos (6,762,646 palabras) podría tomar un tiempo extraordinario, pero sin mirar los datos, parecería que es un gasto necesario. Aquí es donde el análisis exploratorio de datos resulta útil, porque al haber visto una muestra de las etiquetas como `[' Viaje de negocios ', ' Viajero solo ', ' Habitación individual ', ' Estancia de 5 noches ', ' Enviado desde un dispositivo móvil ']`, puedes comenzar a preguntarte si es posible reducir enormemente el procesamiento que tienes que hacer. Afortunadamente, lo es, pero primero necesitas seguir algunos pasos para determinar las etiquetas de interés. +Desafortunadamente, no estamos interesados en palabras individuales, sino en frases de varias palabras (por ejemplo, *Viaje de negocios*). Ejecutar un algoritmo de distribución de frecuencia de frases en tantos datos (6762646 palabras) podría tomar un tiempo extraordinario, pero sin mirar los datos, parecería que es un gasto necesario. Aquí es donde el análisis exploratorio de datos resulta útil, porque al haber visto una muestra de las etiquetas como `[' Viaje de negocios ', ' Viajero solo ', ' Habitación individual ', ' Estancia de 5 noches ', ' Enviado desde un dispositivo móvil ']`, puedes comenzar a preguntarte si es posible reducir significativamente el procesamiento que tienes que hacer. Afortunadamente, lo es, pero primero necesitas seguir algunos pasos para determinar las etiquetas de interés. -### Filtrando etiquetas +### Filtrar etiquetas -Recuerda que el objetivo del conjunto de datos es agregar sentimiento y columnas que te ayuden a elegir el mejor hotel (para ti o tal vez para un cliente que te encargue crear un bot de recomendaciones de hoteles). Debes 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 para otros fines, diferentes etiquetas podrían incluirse/excluirse): +Recuerda que el objetivo del conjunto de datos es agregar sentimientos y columnas que te ayuden a elegir el mejor hotel (para ti o tal vez para un cliente que te encargue crear un bot de recomendación de hoteles). Debes 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 permanecer o salir de la selección): -1. El tipo de viaje es relevante y debería mantenerse. -2. El tipo de grupo de huéspedes es importante y debería mantenerse. +1. El tipo de viaje es relevante y debería permanecer. +2. El tipo de grupo de huéspedes es importante y debería permanecer. 3. El tipo de habitación, suite o estudio en el que se hospedó el huésped es irrelevante (todos los hoteles tienen básicamente las mismas habitaciones). -4. El dispositivo desde el que 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 con que les gustó más el hotel, pero es poco probable y probablemente irrelevante. +4. El dispositivo desde el cual se envió la reseña es irrelevante. +5. El número de noches que el revisor se hospedó *podría* ser relevante si atribuyes estancias más largas con que les gustó más el hotel, pero es poco probable y probablemente irrelevante. -En resumen, **mantén 2 tipos de etiquetas y elimina las demás**. +En resumen, **conserva 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 tomar mucho tiempo procesar tantos datos. Afortunadamente, pandas tiene una forma sencilla de realizar cada uno de estos pasos. +Primero, no quieres contar las etiquetas hasta que estén en un formato mejor, 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 tomar mucho tiempo procesar muchos datos. Afortunadamente, pandas tiene una forma fácil de realizar cada uno de estos pasos. ```Python # Remove opening and closing brackets @@ -133,83 +138,83 @@ df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) Cada etiqueta se convierte en algo como: `Viaje de negocios, Viajero solo, Habitación individual, Estancia de 5 noches, Enviado desde un dispositivo móvil`. -A continuación, encontramos un problema. Algunas reseñas, o filas, tienen 5 columnas, otras 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 diferente orden en cada reseña, por lo que el conteo podría estar desfasado, y un hotel podría no recibir una etiqueta que merecía. +A continuación, encontramos un problema. Algunas reseñas, o filas, tienen 5 columnas, otras 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 diferentes órdenes en cada reseña, por lo que el conteo podría estar incorrecto y un hotel podría no recibir una etiqueta que merecía. -En su lugar, usarás el orden diferente a tu favor, porque cada etiqueta es de varias palabras pero también está separada por una coma. La forma más sencilla de hacer esto es crear 6 columnas temporales con cada etiqueta insertada en la columna correspondiente a su orden en la etiqueta. Luego puedes fusionar las 6 columnas en una gran columna y ejecutar el método `value_counts()` en la columna resultante. Al imprimir eso, verás que había 2,428 etiquetas únicas. Aquí hay una pequeña muestra: +En cambio, usarás el orden diferente a tu favor, porque cada etiqueta es de varias palabras pero también está separada por una coma. La forma más sencilla de hacer esto es crear 6 columnas temporales con cada etiqueta insertada en la columna correspondiente a su orden en la etiqueta. Luego puedes fusionar las 6 columnas en una gran columna y ejecutar el método `value_counts()` en la columna resultante. Al imprimir eso, verás que había 2428 etiquetas únicas. Aquí hay una pequeña muestra: -| Etiqueta | Conteo | -| ------------------------------- | ------- | -| Viaje de ocio | 417778 | +| Tag | Count | +| ------------------------------ | ------ | +| Viaje de ocio | 417778 | | Enviado desde un dispositivo móvil | 307640 | -| Pareja | 252294 | -| Estancia de 1 noche | 193645 | -| Estancia de 2 noches | 133937 | -| Viajero solo | 108545 | -| Estancia de 3 noches | 95821 | -| Viaje de negocios | 82939 | -| Grupo | 65392 | -| Familia con niños pequeños | 61015 | -| Estancia de 4 noches | 47817 | -| Habitación doble | 35207 | -| Habitación doble estándar | 32248 | -| Habitación doble superior | 31393 | -| Familia con niños mayores | 26349 | -| Habitación doble deluxe | 24823 | -| Habitación doble o twin | 22393 | -| Estancia de 5 noches | 20845 | -| Habitación doble o twin estándar | 17483 | -| Habitación doble clásica | 16989 | -| Habitación doble o twin superior | 13570 | -| 2 habitaciones | 12393 | +| Pareja | 252294 | +| Estancia de 1 noche | 193645 | +| Estancia de 2 noches | 133937 | +| Viajero solo | 108545 | +| Estancia de 3 noches | 95821 | +| Viaje de negocios | 82939 | +| Grupo | 65392 | +| Familia con niños pequeños | 61015 | +| Estancia de 4 noches | 47817 | +| Habitación doble | 35207 | +| Habitación doble estándar | 32248 | +| Habitación doble superior | 31393 | +| Familia con niños mayores | 26349 | +| Habitación doble deluxe | 24823 | +| Habitación doble o twin | 22393 | +| Estancia de 5 noches | 20845 | +| Habitación doble estándar o twin | 17483 | +| Habitación doble clásica | 16989 | +| Habitación doble superior o twin | 13570 | +| 2 habitaciones | 12393 | Algunas de las etiquetas comunes como `Enviado desde un dispositivo móvil` no nos son útiles, por lo que podría ser inteligente eliminarlas antes de contar la ocurrencia de frases, pero es una operación tan rápida que puedes dejarlas y simplemente ignorarlas. -### Eliminando las etiquetas de duración de la estancia - -Eliminar estas etiquetas es el paso 1, lo que reduce ligeramente el número total de etiquetas a considerar. Nota que no las eliminas del conjunto de datos, solo decides no considerarlas como valores a contar/mantener en el conjunto de datos de reseñas. - -| Duración de la estancia | Conteo | -| ------------------------ | ------- | -| Estancia de 1 noche | 193645 | -| Estancia de 2 noches | 133937 | -| Estancia de 3 noches | 95821 | -| Estancia de 4 noches | 47817 | -| Estancia de 5 noches | 20845 | -| Estancia de 6 noches | 9776 | -| Estancia de 7 noches | 7399 | -| Estancia de 8 noches | 2502 | -| Estancia de 9 noches | 1293 | -| ... | ... | - -Hay una gran variedad de habitaciones, suites, estudios, apartamentos, etc. Todos significan más o menos lo mismo y no son relevantes para ti, así que elimínalos de la consideración. - -| Tipo de habitación | Conteo | -| -------------------------- | ------ | -| Habitación doble | 35207 | -| Habitación doble estándar | 32248 | -| Habitación doble superior | 31393 | -| Habitación doble deluxe | 24823 | -| Habitación doble o twin | 22393 | -| Habitación doble o twin estándar | 17483 | -| Habitación doble clásica | 16989 | -| Habitación doble o twin superior | 13570 | - -Finalmente, y esto es satisfactorio (porque no requirió mucho procesamiento), te quedarás con las siguientes etiquetas *útiles*: - -| Etiqueta | Conteo | -| -------------------------------------------- | ------- | -| Viaje de ocio | 417778 | -| Pareja | 252294 | -| Viajero solo | 108545 | -| Viaje de negocios | 82939 | -| Grupo (combinado con Viajeros con amigos) | 67535 | -| Familia con niños pequeños | 61015 | -| Familia con niños mayores | 26349 | -| Con una mascota | 1405 | - -Podrías argumentar que `Viajeros con amigos` es lo mismo que `Grupo`, más o menos, y sería razonable combinarlos como se muestra arriba. El código para identificar las etiquetas correctas está en [el cuaderno de etiquetas](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). - -El paso final 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, agrega un 0. El resultado final será un conteo 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. +### Eliminar las etiquetas de duración de la estancia + +Eliminar estas etiquetas es el paso 1, reduce ligeramente el número total de etiquetas a considerar. Nota que no las eliminas del conjunto de datos, solo eliges eliminarlas de la consideración como valores para contar/conservar en el conjunto de reseñas. + +| Duración de la estancia | Count | +| ----------------------- | ------ | +| Estancia de 1 noche | 193645 | +| Estancia de 2 noches | 133937 | +| Estancia de 3 noches | 95821 | +| Estancia de 4 noches | 47817 | +| Estancia de 5 noches | 20845 | +| Estancia de 6 noches | 9776 | +| Estancia de 7 noches | 7399 | +| Estancia de 8 noches | 2502 | +| Estancia de 9 noches | 1293 | +| ... | ... | + +Hay una gran variedad de habitaciones, suites, estudios, apartamentos y demás. Todos significan aproximadamente lo mismo y no son relevantes para ti, así que elimínalos de la consideración. + +| Tipo de habitación | Count | +| ------------------------------- | ----- | +| Habitación doble | 35207 | +| Habitación doble estándar | 32248 | +| Habitación doble superior | 31393 | +| Habitación doble deluxe | 24823 | +| Habitación doble o twin | 22393 | +| Habitación doble estándar o twin | 17483 | +| Habitación doble clásica | 16989 | +| Habitación doble superior o twin | 13570 | + +Finalmente, y esto es encantador (porque no tomó mucho procesamiento en absoluto), te quedarás con las siguientes etiquetas *útiles*: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Viaje de ocio | 417778 | +| Pareja | 252294 | +| Viajero solo | 108545 | +| Viaje de negocios | 82939 | +| Grupo (combinado con Viajeros con amigos) | 67535 | +| Familia con niños pequeños | 61015 | +| Familia con niños mayores | 26349 | +| Con una mascota | 1405 | + +Podrías argumentar que `Viajeros con amigos` es lo mismo que `Grupo` más o menos, y sería justo combinarlos como se muestra arriba. El código para identificar las etiquetas correctas está en [el cuaderno de etiquetas](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +El paso final 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, agrega un 0. El resultado final será un conteo 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 @@ -243,7 +248,7 @@ df.to_csv(r'../data/Hotel_Reviews_Filtered.csv', index = False) En esta sección final, aplicarás análisis de sentimientos a las columnas de reseñas y guardarás los resultados en un conjunto de datos. -## Ejercicio: carga y guarda los datos filtrados +## Ejercicio: cargar y guardar los datos filtrados Nota que ahora estás cargando el conjunto de datos filtrado que se guardó en la sección anterior, **no** el conjunto de datos original. @@ -266,15 +271,15 @@ print("Saving results to Hotel_Reviews_NLP.csv") df.to_csv(r'../data/Hotel_Reviews_NLP.csv', index = False) ``` -### Eliminando palabras vacías +### Eliminar palabras vacías -Si ejecutaras el análisis de sentimientos en las columnas de reseñas negativas y positivas, podría tomar mucho tiempo. Probado en un portátil de prueba potente con un CPU rápido, tomó entre 12 y 14 minutos dependiendo de la biblioteca de análisis de sentimientos utilizada. Ese es un tiempo (relativamente) largo, por lo que vale la pena investigar si se puede acelerar. +Si ejecutaras análisis de sentimientos en las columnas de reseñas negativas y positivas, podría tomar mucho tiempo. Probado en una laptop de prueba potente con CPU rápida, tomó entre 12 y 14 minutos dependiendo de la biblioteca de análisis de sentimientos utilizada. Ese 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 sentimientos 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; eliminarlas de 2 columnas de reseñas en más de 515,000 filas tomó 3.3 segundos en el dispositivo de prueba. Podría tomar un poco más o menos tiempo dependiendo de la velocidad de tu CPU, RAM, si tienes un SSD o no, y otros factores. La relativa brevedad de la operación significa que, si mejora el tiempo de análisis de sentimientos, vale la pena hacerlo. +Eliminar las palabras vacías también es una operación rápida, eliminarlas de 2 columnas de reseñas en más de 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 sentimientos, entonces vale la pena hacerlo. ```python from nltk.corpus import stopwords @@ -296,12 +301,12 @@ df.Negative_Review = df.Negative_Review.apply(remove_stopwords) df.Positive_Review = df.Positive_Review.apply(remove_stopwords) ``` -### Realizando análisis de sentimientos -Ahora deberías calcular el análisis de sentimiento para las 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 análisis de sentimiento determina que la reseña negativa tiene un sentimiento de 1 (sentimiento extremadamente positivo) y la reseña positiva también tiene un sentimiento de 1, pero el revisor 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 correctamente el sentimiento. Deberías esperar que algunos puntajes de sentimiento sean completamente incorrectos, y a menudo eso será explicable, por ejemplo, la reseña podría ser extremadamente sarcástica: "Por supuesto que AMÉ dormir en una habitación sin calefacción", y el analizador de sentimientos podría interpretar eso como un sentimiento positivo, aunque un humano que lo lea sabría que es sarcasmo. +### Realizar análisis de sentimientos -NLTK proporciona diferentes analizadores de sentimientos para aprender, y puedes sustituirlos para ver si el sentimiento es más o menos preciso. Aquí se utiliza el análisis de sentimiento VADER. +Ahora deberías calcular el análisis de sentimientos para las 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 análisis de sentimientos piensa que la reseña negativa tenía un sentimiento de 1 (sentimiento extremadamente positivo) y un sentimiento de reseña positiva de 1, pero el revisor 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 correctamente el sentimiento. Deberías esperar que algunas puntuaciones de sentimiento sean completamente incorrectas, y a menudo eso será explicable, por ejemplo, la reseña podría ser extremadamente sarcástica: "Por supuesto que AMÉ 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 es sarcasmo. +NLTK ofrece diferentes analizadores de sentimientos para aprender, y puedes sustituirlos y ver si el análisis de sentimientos es más o menos preciso. Aquí se utiliza el análisis de sentimientos VADER. -> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Un modelo parsimonioso basado en reglas para el análisis de sentimientos en texto de redes sociales. Octava Conferencia Internacional sobre Blogs y Medios Sociales (ICWSM-14). Ann Arbor, MI, junio de 2014. +> Hutto, C.J. & Gilbert, E.E. (2014). VADER: Un modelo parsimonioso basado en reglas para el análisis de sentimientos de textos en redes sociales. Octava Conferencia Internacional sobre Blogs y Redes Sociales (ICWSM-14). Ann Arbor, MI, junio de 2014. ```python from nltk.sentiment.vader import SentimentIntensityAnalyzer @@ -332,7 +337,7 @@ end = time.time() print("Calculating sentiment took " + str(round(end - start, 2)) + " seconds") ``` -Esto toma aproximadamente 120 segundos en mi computadora, pero puede variar en cada equipo. Si quieres imprimir los resultados y verificar si el sentimiento coincide con la reseña: +Esto toma aproximadamente 120 segundos en mi computadora, pero puede variar en cada equipo. Si deseas imprimir los resultados y verificar si el sentimiento coincide con la reseña: ```python df = df.sort_values(by=["Negative_Sentiment"], ascending=True) @@ -341,7 +346,7 @@ 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 reordenar todas tus nuevas columnas para que sean fáciles de trabajar (para un humano, es un cambio cosmético). +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 una persona, es un cambio estético). ```python # Reorder the columns (This is cosmetic, but to make it easier to explore the data later) @@ -351,28 +356,28 @@ print("Saving results to Hotel_Reviews_NLP.csv") df.to_csv(r"../data/Hotel_Reviews_NLP.csv", index = False) ``` -Deberías ejecutar todo el código del [notebook 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 notebook 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). +Debes ejecutar todo el código del [notebook 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 [el notebook 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 repasar, los pasos son: -1. El archivo del conjunto de datos original **Hotel_Reviews.csv** se explora en la lección anterior con [el notebook de exploración](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) -2. Hotel_Reviews.csv se filtra con [el notebook 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 con [el notebook 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 NLP a continuación +1. El archivo del conjunto de datos original **Hotel_Reviews.csv** se explora en la lección anterior con [el notebook 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 con [el notebook 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 con [el notebook de análisis de sentimientos](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 NLP 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, añadido algunas columnas de sentimiento y, con suerte, aprendido cosas interesantes sobre el procesamiento de texto natural. +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, añadido algunas columnas de sentimientos y, con suerte, aprendido cosas interesantes sobre el procesamiento de texto natural. -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/40/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Desafío -Ahora que tienes tu conjunto de datos analizado para el sentimiento, intenta usar estrategias que has aprendido en este curso (¿quizás clustering?) para determinar patrones alrededor del sentimiento. +Ahora que tienes tu conjunto de datos analizado para sentimientos, intenta usar las estrategias que has aprendido en este curso (¿quizás agrupamiento?) para determinar patrones relacionados con los sentimientos. ## 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 texto. +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 diferentes herramientas para explorar sentimientos en texto. ## Tarea @@ -381,4 +386,4 @@ Toma [este módulo de Learn](https://docs.microsoft.com/en-us/learn/modules/clas --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index bfa1dffe2..54e857523 100644 --- a/translations/es/7-TimeSeries/1-Introduction/README.md +++ b/translations/es/7-TimeSeries/1-Introduction/README.md @@ -1,88 +1,88 @@ # Introducción a la predicción de series temporales -![Resumen de series temporales en un sketchnote](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.es.png) +![Resumen de series temporales en un sketchnote](../../../../sketchnotes/ml-timeseries.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 como una especie de 'bola de cristal': basada en el rendimiento pasado de una variable como el precio, puedes predecir su valor potencial futuro. +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 como una especie de 'bola de cristal': basándote 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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) -Es un campo útil e interesante con un valor real para los negocios, dado su aplicación directa a problemas de precios, inventarios y cuestiones de la cadena de suministro. Aunque las técnicas de aprendizaje profundo han comenzado a utilizarse para obtener más información y predecir mejor el rendimiento futuro, la predicción de series temporales sigue siendo un campo muy influenciado por técnicas clásicas de ML. +Es un campo útil e interesante con un valor real para los negocios, dado su uso directo en problemas de precios, inventarios y cuestiones 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 influenciado por técnicas clásicas de ML. > El útil currículo de series temporales de Penn State se puede encontrar [aquí](https://online.stat.psu.edu/stat510/lesson/1) ## Introducción -Supongamos que mantienes una red de parquímetros inteligentes que proporcionan datos sobre la frecuencia y duración de su uso a lo largo del tiempo. +Supongamos que gestionas una red de parquímetros inteligentes que proporcionan datos sobre la frecuencia y duración de su uso a lo largo del tiempo. -> ¿Qué pasaría si pudieras predecir, basándote en el rendimiento pasado del parquímetro, su valor futuro según las leyes de oferta y demanda? +> ¿Qué pasaría si pudieras predecir, basándote en el rendimiento pasado del parquímetro, su valor futuro según las leyes de la oferta y la 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 cobre más en momentos de alta demanda cuando buscan un lugar para estacionar, pero sería una forma segura de generar ingresos para limpiar las calles. +Predecir con precisión cuándo actuar para lograr tu objetivo es un desafío que podría abordarse con la predicción de series temporales. No haría feliz a la gente que se les cobre más en horas pico cuando buscan un lugar para estacionar, ¡pero sería una forma segura de generar ingresos para limpiar las calles! -Exploremos algunos de los tipos de algoritmos de series temporales y comencemos un notebook para limpiar y preparar algunos datos. Los datos que analizarás provienen de la competencia de predicción GEFCom2014. Consisten en 3 años de valores horarios de carga eléctrica y temperatura entre 2012 y 2014. Dado los patrones históricos de carga eléctrica y temperatura, puedes predecir valores futuros de carga eléctrica. +Exploremos algunos de los tipos de algoritmos de series temporales y comencemos un cuaderno para limpiar y preparar algunos datos. Los datos que analizarás provienen de la competencia de predicción GEFCom2014. Consisten en 3 años de valores horarios de carga eléctrica y temperatura entre 2012 y 2014. Dado el patrón histórico 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 hacia adelante, utilizando únicamente datos históricos de carga. Sin embargo, antes de comenzar, es útil entender qué está sucediendo detrás de escena. +En este ejemplo, aprenderás a predecir un paso de tiempo hacia adelante, utilizando únicamente 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 'series temporales', necesitas entender su uso en varios contextos diferentes. +Cuando te encuentres con el término 'series temporales', necesitas entender su uso en varios contextos diferentes. 🎓 **Series temporales** -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 sucesivos igualmente espaciados en el tiempo". 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 el procesamiento de señales, predicción del clima, predicción de terremotos y otros campos donde ocurren eventos y los puntos de datos pueden graficarse a lo largo del tiempo. +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 sucesivos igualmente espaciados en el tiempo". 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 el modelado estadístico se encuentra frecuentemente en el procesamiento de señales, la predicción del clima, la predicción de terremotos y otros campos donde ocurren eventos y los puntos de datos pueden graficarse 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 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í mismos pueden tomar la forma de series de números o caracteres. -El análisis que se realiza utiliza una variedad de métodos, incluyendo dominio de frecuencia y dominio de tiempo, lineales y no lineales, 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. +El análisis que se realiza utiliza una variedad de métodos, incluidos dominio de frecuencia y dominio de tiempo, lineales y no lineales, 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, dichos datos se analizan mejor utilizando tipos especiales de modelos. +La predicción de series temporales es el uso de un modelo para predecir valores futuros basados en patrones mostrados por datos previamente recopilados a medida que 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, dichos 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". +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 Autorregresivo". -[Los 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 en el dominio del tiempo, donde los datos están ordenados a lo largo del tiempo. +[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 en el dominio del tiempo, donde los datos están ordenados a lo largo del tiempo. -> Hay varios tipos de modelos ARIMA, sobre los cuales puedes aprender [aquí](https://people.duke.edu/~rnau/411arim.htm) y que abordarás en la próxima lección. +> Hay varios tipos de modelos ARIMA, que puedes aprender [aquí](https://people.duke.edu/~rnau/411arim.htm) y que abordará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 centra 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: +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 | +| 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 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 como 'ruido'. A menudo necesitarás reducir este 'ruido' compensando algunas de estas características utilizando técnicas estadísticas. +Al observar 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 un posible '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 técnicas estadísticas. Aquí hay algunos conceptos que deberías conocer para trabajar con series temporales: @@ -92,7 +92,7 @@ Las tendencias se definen como aumentos y disminuciones medibles a lo largo del 🎓 **[Estacionalidad](https://machinelearningmastery.com/time-series-seasonality-with-python/)** -La estacionalidad se define como fluctuaciones periódicas, como las compras durante las vacaciones 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 estacionalidad en los datos. +La estacionalidad se define como fluctuaciones periódicas, como las 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** @@ -104,15 +104,15 @@ Independientemente de la estacionalidad, los datos podrían mostrar un ciclo a l 🎓 **Varianza constante** -Con el tiempo, algunos datos muestran fluctuaciones constantes, como el uso de energía por día y noche. +Con el tiempo, algunos datos muestran fluctuaciones constantes, como el uso de energía durante el día y la noche. 🎓 **Cambios abruptos** -Los datos podrían mostrar un cambio abrupto que podría necesitar un análisis más profundo. El cierre repentino de negocios debido a COVID, por ejemplo, causó cambios en los datos. +Los datos podrían mostrar un cambio abrupto que podría necesitar un análisis más profundo. El cierre repentino 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) +![Gasto en moneda dentro del juego](../../../../7-TimeSeries/1-Introduction/images/currency.png) ## Ejercicio - comenzando con datos de uso de energía @@ -141,7 +141,7 @@ Comencemos creando un modelo de series temporales para predecir el uso futuro de energy.head() ``` - Puedes ver que hay dos columnas que representan fecha y carga: + Puedes ver que hay dos columnas que representan la fecha y la carga: | | load | | :-----------------: | :----: | @@ -160,9 +160,9 @@ Comencemos creando un modelo de series temporales para predecir el uso futuro de plt.show() ``` - ![gráfico de energía](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.es.png) + ![gráfico de energía](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) -4. Ahora, grafica la primera semana de julio de 2014, proporcionándola como entrada al `energy` en el patrón `[desde fecha]: [hasta fecha]`: +4. Ahora, grafica la primera semana de julio de 2014, proporcionando esta fecha como entrada al `energy` en el patrón `[desde fecha]: [hasta fecha]`: ```python energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) @@ -171,11 +171,11 @@ Comencemos creando un modelo de series temporales para predecir el uso futuro de plt.show() ``` - ![julio](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.es.png) + ![julio](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) ¡Un gráfico hermoso! Observa estos gráficos y ve si puedes determinar alguna de las características mencionadas anteriormente. ¿Qué podemos deducir al visualizar los datos? -En la próxima lección, crearás un modelo ARIMA para realizar algunas predicciones. +En la próxima lección, crearás un modelo ARIMA para generar algunas predicciones. --- @@ -183,11 +183,11 @@ En la próxima lección, crearás un modelo ARIMA para realizar algunas predicci Haz una lista de todas las industrias y áreas de investigación que se te ocurran que podrían beneficiarse 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? ¿Retail? ¿Industria? ¿Finanzas? ¿Dónde más? -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Revisión y autoestudio -Aunque no los cubriremos aquí, las redes neuronales a veces se utilizan 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) +Aunque no los cubriremos aquí, las redes neuronales a veces se utilizan 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 @@ -196,4 +196,4 @@ Aunque no los cubriremos aquí, las redes neuronales a veces se utilizan para me --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index dba1e1f76..eeb8ad3fe 100644 --- a/translations/es/7-TimeSeries/2-ARIMA/README.md +++ b/translations/es/7-TimeSeries/2-ARIMA/README.md @@ -1,21 +1,21 @@ # 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 durante un período de tiempo. +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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Introducción @@ -25,27 +25,27 @@ En esta lección, descubrirás una forma específica de construir modelos con [A Para 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, por lo tanto, muestran fluctuaciones debido a tendencias que deben transformarse para ser analizados. La estacionalidad, por ejemplo, puede introducir fluctuaciones en los datos y puede eliminarse mediante un proceso de 'diferenciación estacional'. +- 🎓 **Estacionariedad**. En un contexto estadístico, la estacionariedad se refiere a datos cuya distribución no cambia al desplazarse en el tiempo. Los datos no estacionarios, por lo tanto, 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)**. La diferenciación de 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." [Artículo de Shixiong et al](https://arxiv.org/abs/1904.07632) ## ARIMA en el contexto de series temporales -Desglosaremos las partes de ARIMA para entender mejor cómo nos ayuda a modelar series temporales y hacer predicciones. +Desglosemos las partes de ARIMA para entender mejor cómo nos ayuda a modelar series temporales y hacer predicciones. -- **AR - de AutoRegresivo**. Los modelos autorregresivos, como su nombre lo 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 'retardos'. Un ejemplo sería datos que muestran las 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 retardados (es decir, anteriores)." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) +- **AR - de AutoRegresivo**. Los modelos autorregresivos, como su nombre lo indica, miran 'hacia atrás' en el tiempo para analizar valores previos en tus datos y hacer suposiciones sobre ellos. Estos valores previos se llaman 'lags' (rezagos). Un ejemplo sería un conjunto de datos que muestra las 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, valores 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 retardos. +- **MA - de Media Móvil**. El aspecto de [media 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 utiliza para ajustar un modelo a la forma especial de los datos de series temporales lo más cerca posible. +En resumen: ARIMA se utiliza 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. Ejecuta el notebook para cargar la biblioteca de Python `statsmodels`; la necesitarás para los modelos ARIMA. 1. Carga las bibliotecas necesarias. @@ -79,7 +79,7 @@ Abre la carpeta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/ 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: +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 lección anterior: ```python energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) @@ -92,7 +92,7 @@ Abre la carpeta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/ ### 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 utilizando el conjunto de prueba. Debes asegurarte de que el conjunto de prueba cubra un período posterior en el tiempo al conjunto de entrenamiento para garantizar que el modelo no obtenga información de períodos futuros. +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 entrenar, evaluarás su precisión utilizando el conjunto de prueba. Debes asegurarte de que el conjunto de prueba cubra un período posterior en el tiempo al conjunto de entrenamiento para garantizar 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: @@ -101,7 +101,7 @@ Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenami test_start_dt = '2014-12-30 00:00:00' ``` - Dado que estos datos reflejan el consumo diario de energía, hay un patrón estacional fuerte, pero el consumo es más similar al consumo en días más recientes. + 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 de días más recientes. 1. Visualiza las diferencias: @@ -114,7 +114,7 @@ Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenami plt.show() ``` - ![datos de entrenamiento y prueba](../../../../translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.es.png) + ![datos de entrenamiento y prueba](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) Por lo tanto, usar una ventana de tiempo relativamente pequeña para entrenar los datos debería ser suficiente. @@ -122,9 +122,9 @@ Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenami ### Preparar los datos para el entrenamiento -Ahora necesitas preparar los datos para el entrenamiento realizando 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 garantizar que los datos se proyecten en el intervalo 0,1. +Ahora necesitas preparar los datos para el entrenamiento realizando un 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 los datos para asegurarte de que estén proyectados 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 la columna necesaria 'load' más la fecha: +1. Filtra el conjunto de datos original para incluir solo los períodos de tiempo mencionados por conjunto e incluyendo únicamente la columna necesaria 'load' más la fecha: ```python train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] @@ -157,11 +157,11 @@ Ahora necesitas preparar los datos para el entrenamiento realizando filtrado y e plt.show() ``` - ![original](../../../../translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.es.png) + ![original](../../../../7-TimeSeries/2-ARIMA/images/original.png) > Los datos originales - ![escalados](../../../../translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.es.png) + ![escalados](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) > Los datos escalados @@ -179,14 +179,14 @@ Ahora necesitas preparar los datos para el entrenamiento realizando filtrado y e Ahora necesitas seguir varios pasos: 1. Define el modelo llamando a `SARIMAX()` y pasando los parámetros del modelo: parámetros p, d y q, y parámetros P, D y Q. - 2. Prepara el modelo para los datos de entrenamiento llamando a la función fit(). - 3. Haz predicciones llamando a la función `forecast()` y especificando el número de pasos (el `horizonte`) para pronosticar. + 2. Prepara el modelo para los datos de entrenamiento llamando a la función `fit()`. + 3. Realiza predicciones llamando a la función `forecast()` y especificando el número de pasos (el `horizonte`) a pronosticar. > 🎓 ¿Para qué son todos estos parámetros? En un modelo ARIMA hay 3 parámetros que se utilizan para ayudar a modelar los aspectos principales de una serie temporal: estacionalidad, tendencia y ruido. Estos parámetros son: -`p`: el parámetro asociado con el aspecto autorregresivo del modelo, que incorpora valores *pasados*. -`d`: el parámetro asociado con la parte integrada del modelo, que afecta la cantidad de *diferenciación* (🎓 recuerda la diferenciación 👆) que se aplica a una serie temporal. -`q`: el parámetro asociado con la parte de promedio móvil del modelo. +`p`: el parámetro asociado con el aspecto autorregresivo del modelo, que incorpora valores *pasados*. +`d`: el parámetro asociado con la parte integrada del modelo, que afecta la cantidad de *diferenciación* (🎓 ¿recuerdas la diferenciación 👆?) que se aplica a una serie temporal. +`q`: el parámetro asociado con la parte de media móvil del modelo. > Nota: Si tus datos tienen un aspecto estacional - como en este caso -, usamos un modelo ARIMA estacional (SARIMA). En ese caso, necesitas usar otro conjunto de parámetros: `P`, `D` y `Q`, que describen las mismas asociaciones que `p`, `d` y `q`, pero corresponden a los componentes estacionales del modelo. @@ -198,7 +198,7 @@ Ahora necesitas seguir varios pasos: 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 función `auto_arima()` de la biblioteca [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + 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 función `auto_arima()` de la [biblioteca `pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). 1. Por ahora, intenta algunas selecciones manuales para encontrar un buen modelo. @@ -220,11 +220,11 @@ Ahora necesitas seguir varios pasos: 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 el mejor pronóstico en cada paso de tiempo. -Comenzando al inicio 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 frente al valor conocido. El conjunto de entrenamiento se expande para incluir el valor conocido y el proceso se repite. +Comenzando al principio de la serie temporal con esta técnica, entrena el modelo en el conjunto de datos de entrenamiento. Luego realiza una predicción en el siguiente paso de tiempo. La predicción se evalúa en comparación con el valor conocido. El conjunto de entrenamiento se amplía para incluir el valor conocido y el proceso se repite. -> 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 inicio del conjunto. +> Nota: Deberías 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 principio del conjunto. -Este proceso proporciona una estimación más robusta de cómo el modelo funcionará 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. +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 para la evaluación de modelos de series temporales y se recomienda para tus propios proyectos. @@ -250,7 +250,7 @@ La validación walk-forward es el estándar de oro para la evaluación de modelo Los datos se desplazan horizontalmente según su punto de horizonte. -1. Haz predicciones en tus datos de prueba utilizando este enfoque de ventana deslizante en un bucle del tamaño de la longitud de los datos de prueba: +1. Realiza predicciones en tus datos de prueba utilizando este enfoque de ventana deslizante en un bucle del tamaño de la longitud de los datos de prueba: ```python %%time @@ -280,7 +280,7 @@ La validación walk-forward es el estándar de oro para la evaluación de modelo print(t+1, ': predicted =', yhat, 'expected =', obs) ``` - Puedes observar el entrenamiento ocurriendo: + Puedes observar el entrenamiento en curso: ```output 2014-12-30 00:00:00 @@ -304,7 +304,7 @@ La validación walk-forward es el estándar de oro para la evaluación de modelo eval_df.head() ``` - Salida + Salida | | | timestamp | h | prediction | actual | | --- | ---------- | --------- | --- | ---------- | -------- | | 0 | 2014-12-30 | 00:00:00 | t+1 | 3,008.74 | 3,023.00 | @@ -313,14 +313,14 @@ La validación walk-forward es el estándar de oro para la evaluación de modelo | 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, comparada con la carga real. ¿Qué tan precisa es? + 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) en todas las predicciones. > **🧮 Muéstrame las matemáticas** > -> ![MAPE](../../../../translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.es.png) +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) > > [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) se utiliza para mostrar la precisión de las predicciones como una proporción definida por la fórmula anterior. La diferencia entre el valor real y el valor predicho se divide por el valor real. > "El valor absoluto en este cálculo se suma para cada punto pronosticado en el tiempo y se divide por el número de puntos ajustados n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) @@ -340,7 +340,7 @@ Verifica la precisión de tu modelo probando su error porcentual absoluto medio MAPE de pronóstico de un paso: 0.5570581332313952 % -1. Imprimir el MAPE de pronóstico de múltiples pasos: +1. Imprimir el MAPE del pronóstico de múltiples pasos: ```python print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') @@ -350,7 +350,7 @@ Verifica la precisión de tu modelo probando su error porcentual absoluto medio Multi-step forecast MAPE: 1.1460048657704118 % ``` - Un número bajo es mejor: considera que un pronóstico con un MAPE de 10 está desviado en un 10%. + Un número bajo es lo mejor: considera que un pronóstico con 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 de forma visual, así que vamos a graficarlo: @@ -380,21 +380,21 @@ Verifica la precisión de tu modelo probando su error porcentual absoluto medio plt.show() ``` - ![un modelo de series temporales](../../../../translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.es.png) + ![un modelo de series temporales](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) -🏆 Una gráfica muy buena, mostrando un modelo con buena precisión. ¡Bien hecho! +🏆 Un gráfico muy bueno, mostrando 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) +Investiga las formas de probar la precisión de un modelo de series temporales. En esta lección hablamos sobre el MAPE, 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/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) -## Revisión y Autoestudio +## Revisión y autoestudio -Esta lección aborda solo los conceptos básicos de la predicción 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. +Esta lección solo toca los conceptos básicos de la predicción de series temporales con ARIMA. Tómate un tiempo para profundizar en 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 @@ -403,4 +403,4 @@ Esta lección aborda solo los conceptos básicos de la predicción de series tem --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index 3f3caeff6..e8dd91e5c 100644 --- a/translations/es/7-TimeSeries/3-SVR/README.md +++ b/translations/es/7-TimeSeries/3-SVR/README.md @@ -1,17 +1,17 @@ # Pronóstico de Series Temporales con Support Vector Regressor -En la lección anterior, aprendiste a usar el modelo ARIMA para realizar predicciones de series temporales. Ahora exploraremos el modelo Support Vector Regressor, que es un modelo de regresión utilizado para predecir datos continuos. +En la lección anterior, aprendiste a usar el modelo ARIMA para realizar predicciones de series temporales. Ahora explorarás el modelo Support Vector Regressor, 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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Introducción @@ -22,7 +22,7 @@ En esta lección, descubrirás una forma específica de construir modelos con [* Antes de entender la importancia de SVR en la predicción de series temporales, aquí tienes algunos conceptos importantes que necesitas conocer: - **Regresión:** Técnica de aprendizaje supervisado para predecir valores continuos a partir de un conjunto 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. -- **Support Vector Machine (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 un límite, y en el caso de la regresión actúa como la línea de mejor ajuste. En SVM, generalmente se utiliza una función Kernel para transformar el conjunto de datos a un espacio de mayor número de dimensiones, de modo que puedan ser fácilmente separables. [Haz clic aquí](https://en.wikipedia.org/wiki/Support-vector_machine) para más información sobre SVMs. +- **Support Vector Machine (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 clasificación actúa como un límite, y en el caso de regresión actúa como la línea de mejor ajuste. En SVM, generalmente se utiliza una función Kernel para transformar el conjunto de datos a un espacio de mayor número de dimensiones, de modo que puedan ser fácilmente separables. [Haz clic aquí](https://en.wikipedia.org/wiki/Support-vector_machine) para más información sobre SVMs. - **Support Vector Regressor (SVR):** Un tipo de SVM, que encuentra 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] @@ -71,15 +71,15 @@ Abre la carpeta [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/ plt.show() ``` - ![datos completos](../../../../translated_images/full-data.a82ec9957e580e976f651a4fc38f280b9229c6efdbe3cfe7c60abaa9486d2cbe.es.png) + ![datos completos](../../../../7-TimeSeries/3-SVR/images/full-data.png) Ahora, construyamos nuestro modelo SVR. ### Crear conjuntos de entrenamiento y prueba -Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenamiento y prueba. Luego, reformateará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. Una vez que el modelo haya terminado de entrenarse, evaluarás su precisión en el conjunto de entrenamiento, el conjunto de prueba y luego en el conjunto de datos completo para ver el rendimiento general. Debes asegurarte de que el conjunto de prueba cubra un período posterior en el tiempo al conjunto de entrenamiento para garantizar que el modelo no obtenga información de períodos futuros [^2] (una situación conocida como *sobreajuste*). +Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenamiento y prueba. Luego, reformateará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. Una vez que el modelo haya terminado de entrenarse, evaluarás su precisión en el conjunto de entrenamiento, el conjunto de prueba y luego en el conjunto de datos completo para ver el rendimiento general. Debes asegurarte de que el conjunto de prueba cubra un período posterior en el tiempo al conjunto de entrenamiento para garantizar que el modelo no obtenga información de períodos futuros [^2] (una situación conocida como *sobreajuste*). -1. Asigna un período de dos meses del 1 de septiembre al 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] +1. Asigna un período de dos meses, del 1 de septiembre al 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' @@ -97,13 +97,13 @@ Ahora que tus datos están cargados, puedes separarlos en conjuntos de entrenami plt.show() ``` - ![datos de entrenamiento y prueba](../../../../translated_images/train-test.ead0cecbfc341921d4875eccf25fed5eefbb860cdbb69cabcc2276c49e4b33e5.es.png) + ![datos de entrenamiento y prueba](../../../../7-TimeSeries/3-SVR/images/train-test.png) ### Preparar los datos para el entrenamiento Ahora necesitas preparar los datos para el entrenamiento realizando un filtrado y escalado de tus datos. Filtra tu conjunto de datos para incluir solo los períodos de tiempo y columnas necesarios, y escala los datos para asegurarte de que estén proyectados 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 únicamente la columna 'load' más la fecha: [^2] +1. Filtra el conjunto de datos original para incluir solo los períodos de tiempo mencionados anteriormente por conjunto e incluyendo únicamente la columna 'load' más la fecha: [^2] ```python train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] @@ -133,7 +133,7 @@ Ahora necesitas preparar los datos para el entrenamiento realizando un filtrado ### Crear datos con pasos de tiempo [^1] -Para el SVR, transformas los datos de entrada para que tengan la forma `[batch, timesteps]`. Por lo tanto, reformateas los `train_data` y `test_data` existentes de manera que haya una nueva dimensión que se refiera a los pasos de tiempo. +Para el SVR, transformas los datos de entrada para que tengan la forma `[batch, timesteps]`. Por lo tanto, reformateas los `train_data` y `test_data` existentes de manera que haya una nueva dimensión que se refiera a los pasos de tiempo. ```python # Converting to numpy arrays @@ -141,7 +141,7 @@ train_data = train.values test_data = test.values ``` -En este ejemplo, tomamos `timesteps = 5`. Por lo tanto, las entradas al modelo son los datos de los primeros 4 pasos de tiempo, y la salida serán los datos del quinto paso de tiempo. +Para este ejemplo, tomamos `timesteps = 5`. Por lo tanto, las entradas al modelo son los datos de los primeros 4 pasos de tiempo, y la salida serán los datos del quinto paso de tiempo. ```python timesteps=5 @@ -226,7 +226,7 @@ print(y_train_pred.shape, y_test_pred.shape) ### Evaluar tu modelo [^1] -Para la evaluación, primero escalaremos los datos de vuelta a su escala original. Luego, para verificar el rendimiento, graficaremos la serie temporal original y la predicha, y también imprimiremos el resultado de MAPE. +Para la evaluación, primero escalaremos los datos de vuelta 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: @@ -248,7 +248,7 @@ 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 mostrarlas en el eje x de nuestro gráfico. Ten en cuenta 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. +Extraemos las marcas de tiempo del conjunto de datos para mostrarlas en el eje x de nuestro gráfico. Ten en cuenta que estamos utilizando 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:] @@ -273,9 +273,9 @@ plt.title("Training data prediction") plt.show() ``` -![predicción de datos de entrenamiento](../../../../translated_images/train-data-predict.3c4ef4e78553104ffdd53d47a4c06414007947ea328e9261ddf48d3eafdefbbf.es.png) +![predicción de datos de entrenamiento](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) -Imprime MAPE para los datos de entrenamiento: +Imprime el MAPE para los datos de entrenamiento: ```python print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') @@ -296,9 +296,9 @@ plt.xlabel('Timestamp') plt.show() ``` -![predicción de datos de prueba](../../../../translated_images/test-data-predict.8afc47ee7e52874f514ebdda4a798647e9ecf44a97cc927c535246fcf7a28aa9.es.png) +![predicción de datos de prueba](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) -Imprime MAPE para los datos de prueba: +Imprime el MAPE para los datos de prueba: ```python print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') @@ -352,7 +352,7 @@ plt.xlabel('Timestamp') plt.show() ``` -![predicción de datos completos](../../../../translated_images/full-data-predict.4f0fed16a131c8f3bcc57a3060039dc7f2f714a05b07b68c513e0fe7fb3d8964.es.png) +![predicción de datos completos](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) ```python print('MAPE: ', mape(Y_pred, Y)*100, '%') @@ -372,11 +372,11 @@ MAPE: 2.0572089029888656 % - Intenta usar diferentes funciones kernel para el modelo y analiza su rendimiento en el conjunto de datos. Un documento útil se encuentra [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 y haga predicciones. -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/52/) +## [Cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Revisión y Autoestudio -Esta lección fue una introducción a 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 SVMs 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. +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 SVMs 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 @@ -384,8 +384,8 @@ Esta lección fue una introducción a la aplicación de SVR para el pronóstico ## Créditos -[^1]: El texto, código y resultados en esta sección fueron contribuidos por [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) -[^2]: El texto, código y resultados en esta sección fueron tomados de [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) +[^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) --- diff --git a/translations/es/8-Reinforcement/1-QLearning/README.md b/translations/es/8-Reinforcement/1-QLearning/README.md index 64e258add..d57e68ade 100644 --- a/translations/es/8-Reinforcement/1-QLearning/README.md +++ b/translations/es/8-Reinforcement/1-QLearning/README.md @@ -1,26 +1,26 @@ # 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) +![Resumen del refuerzo en el aprendizaje automático en un sketchnote](../../../../sketchnotes/ml-reinforcement.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 específico, el agente recibe una recompensa. Imagina nuevamente el videojuego Super Mario. Tú eres Mario, estás en un nivel del juego, parado junto al borde de un acantilado. Sobre ti hay una moneda. Tú, siendo Mario, en un nivel del juego, en una posición específica... ese es tu estado. Moverte un paso hacia la derecha (una acción) te llevará al borde del acantilado, y eso te daría una puntuación numérica baja. Sin embargo, presionar el botón de salto te permitiría obtener un punto y seguir vivo. Ese es un resultado positivo y debería otorgarte una puntuación numérica positiva. +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 específico, el agente recibe una recompensa. Imagina nuevamente el videojuego Super Mario. Tú eres Mario, estás en un nivel del juego, parado junto al borde de un acantilado. Sobre ti hay una moneda. Tú, siendo Mario, en un nivel del juego, en una posición específica... ese es tu estado. Moverte un paso hacia la derecha (una acción) te llevará al borde y te dará una puntuación numérica baja. Sin embargo, presionar el botón de salto te permitirá ganar un punto y seguir vivo. Ese es un resultado positivo y debería otorgarte una puntuación numérica positiva. -Usando aprendizaje por refuerzo y un simulador (el juego), puedes aprender a jugar para maximizar la recompensa, que es mantenerse vivo y obtener la mayor cantidad de puntos posible. +Usando aprendizaje por refuerzo y un simulador (el juego), puedes aprender a jugar para maximizar la recompensa, que es permanecer vivo y obtener la mayor cantidad de puntos posible. [![Introducción 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 previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Prerrequisitos y Configuración @@ -32,15 +32,15 @@ Puedes abrir [el notebook de la lección](https://github.com/microsoft/ML-For-Be ## 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 un compositor ruso, [Sergei Prokofiev](https://es.wikipedia.org/wiki/Sergu%C3%A9i_Prok%C3%B3fiev). Usaremos **Aprendizaje por Refuerzo** para permitir que Pedro explore su entorno, recoja manzanas deliciosas y evite encontrarse con el lobo. +En esta lección, exploraremos el mundo de **[Pedro y el Lobo](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)**, inspirado en un cuento musical de hadas de un compositor ruso, [Sergei Prokofiev](https://en.wikipedia.org/wiki/Sergei_Prokofiev). Usaremos **Aprendizaje por Refuerzo** para permitir que Pedro explore su entorno, recoja manzanas deliciosas 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 **Aprendizaje por Refuerzo** (RL) es una técnica de aprendizaje que nos permite aprender un comportamiento óptimo de un **agente** en algún **entorno** realizando muchos experimentos. Un agente en este entorno debe tener algún **objetivo**, definido por una **función de recompensa**. ## El entorno Para simplificar, consideremos el mundo de Pedro como un tablero cuadrado de tamaño `ancho` x `alto`, como este: -![Entorno de Pedro](../../../../translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.es.png) +![Entorno de Pedro](../../../../8-Reinforcement/1-QLearning/images/environment.png) Cada celda en este tablero puede ser: @@ -65,7 +65,7 @@ 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, mientras evita al lobo y otros obstáculos. Para ello, esencialmente puede caminar por el tablero hasta encontrar una manzana. +En nuestro ejemplo, el objetivo de Pedro sería encontrar una manzana, mientras evita al lobo y otros obstáculos. Para lograr esto, esencialmente puede caminar por el tablero hasta encontrar una manzana. Por lo tanto, en cualquier posición, puede elegir entre una de las siguientes acciones: arriba, abajo, izquierda y derecha. @@ -117,7 +117,7 @@ Primero resolvamos nuestro problema implementando una estrategia de camino aleat 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 camino varias veces (digamos, 100), y muestra las estadísticas resultantes (bloque de código 4): +1. Ejecuta el experimento de camino varias veces (digamos, 100) y muestra las estadísticas resultantes (bloque de código 4): ```python def print_statistics(policy): @@ -142,7 +142,7 @@ Primero resolvamos nuestro problema implementando una estrategia de camino aleat ## Función de recompensa -Para hacer nuestra política más inteligente, necesitamos entender qué movimientos son "mejores" que otros. Para ello, necesitamos definir nuestro objetivo. +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) @@ -163,7 +163,7 @@ def reward(m,pos=None): 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 debería recordar 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 deberían desalentarse. +Lo interesante de 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 debería recordar 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 deberían desalentarse. ## Q-Learning @@ -177,7 +177,7 @@ 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 "camino aleatorio", porque todos los movimientos en cada estado son igualmente buenos. Podemos pasar la Q-Table a la función `plot` para visualizar la tabla en el tablero: `m.plot(Q)`. -![Entorno de Pedro](../../../../translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.es.png) +![Entorno de Pedro](../../../../8-Reinforcement/1-QLearning/images/env_init.png) En el centro de cada celda hay una "flecha" que indica la dirección preferida de movimiento. Dado que todas las direcciones son iguales, se muestra un punto. @@ -189,13 +189,13 @@ Una vez que comenzamos a movernos, cada acción tendrá una recompensa correspon > Recuerda que no importa el resultado inmediato, sino el resultado final, que obtendremos al final de la simulación. -Para tener en cuenta esta recompensa diferida, necesitamos usar los principios de **[programación dinámica](https://es.wikipedia.org/wiki/Programaci%C3%B3n_din%C3%A1mica)**, que nos permiten pensar en nuestro problema de manera recursiva. +Para tener en cuenta esta recompensa diferida, necesitamos usar los principios de la **[programación dinámica](https://en.wikipedia.org/wiki/Dynamic_programming)**, que nos permiten pensar en nuestro problema de manera recursiva. -Supongamos que ahora estamos en el estado *s*, y queremos movernos al siguiente estado *s'*. Al hacerlo, recibiremos la recompensa inmediata *r(s,a)*, definida por la función de recompensa, más alguna recompensa futura. Si suponemos que nuestra Q-Table refleja correctamente la "atractividad" de cada acción, entonces en el estado *s'* elegiremos una acción *a* que corresponda al valor máximo de *Q(s',a')*. Así, la mejor recompensa futura posible que podríamos obtener en el estado *s* se definirá como `max` +Supongamos que ahora estamos en el estado *s*, y queremos movernos al siguiente estado *s'*. Al hacerlo, recibiremos la recompensa inmediata *r(s,a)*, definida por la función de recompensa, más alguna recompensa futura. Si suponemos que nuestra Q-Table refleja correctamente la "atractividad" de cada acción, entonces en el estado *s'* elegiremos una acción *a'* que corresponda al valor máximo de *Q(s',a')*. Así, la mejor recompensa futura posible que podríamos obtener en el estado *s* se definirá como `max` -## Verificando la política +## Comprobando la política -Dado que la Q-Table enumera la "atractividad" de cada acción en cada estado, es bastante sencillo 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) +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): @@ -207,17 +207,17 @@ def qpolicy_strict(m): walk(m,qpolicy_strict) ``` -> Si pruebas el código anterior varias veces, puede que notes que a veces se "queda colgado" y necesitas presionar el botón STOP en el notebook para interrumpirlo. Esto ocurre porque podría haber situaciones en las que dos estados "apuntan" el uno al otro en términos de valor óptimo de Q, en cuyo caso el agente termina moviéndose entre esos estados indefinidamente. +> Si pruebas el código anterior varias veces, puede que notes que a veces se "queda colgado" y necesitas presionar el botón STOP en el notebook para interrumpirlo. Esto ocurre porque podría haber situaciones en las que dos estados "apuntan" el uno al otro en términos de valor óptimo de Q-Value, en cuyo caso el agente termina moviéndose entre esos estados indefinidamente. ## 🚀Desafío > **Tarea 1:** Modifica la función `walk` para limitar la longitud máxima del camino a un cierto número de pasos (por ejemplo, 100), y observa cómo el código anterior devuelve este valor de vez en cuando. -> **Tarea 2:** Modifica la función `walk` para que no regrese a los lugares donde ya ha estado previamente. Esto evitará que `walk` entre en bucles, sin embargo, el agente aún puede terminar "atrapado" en una ubicación de la que no pueda escapar. +> **Tarea 2:** Modifica la función `walk` para que no regrese a los lugares donde ya ha estado previamente. Esto evitará que `walk` entre en bucles, sin embargo, el agente aún puede terminar "atrapado" en una ubicación de la que no puede escapar. ## Navegación -Una política de navegación mejor sería la que usamos durante el entrenamiento, que combina explotación y exploración. En esta política, seleccionaremos cada acción con cierta probabilidad, proporcional a los valores en la Q-Table. Esta estrategia aún puede resultar en que el agente regrese a una posición que ya ha explorado, pero, como puedes ver en el código a continuación, resulta en un camino promedio muy corto hacia la ubicación deseada (recuerda que `print_statistics` ejecuta la simulación 100 veces): (bloque de código 10) +Una política de navegación mejor sería la que usamos durante el entrenamiento, que combina explotación y exploración. En esta política, seleccionaremos cada acción con cierta probabilidad, proporcional a los valores en la Q-Table. Esta estrategia aún puede hacer que el agente regrese a una posición que ya ha explorado, pero, como puedes ver en el código a continuación, resulta en un camino promedio muy corto hacia la ubicación deseada (recuerda que `print_statistics` ejecuta la simulación 100 veces): (bloque de código 10) ```python def qpolicy(m): @@ -237,7 +237,7 @@ Como hemos mencionado, el proceso de aprendizaje es un equilibrio entre la explo ## Los aprendizajes pueden resumirse como: -- **La longitud promedio del camino aumenta**. Lo que vemos aquí es que al principio, la longitud promedio del camino aumenta. Esto probablemente se debe al hecho de que cuando no sabemos nada sobre el entorno, es más probable que quedemos atrapados en estados desfavorables, como agua o lobos. 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 promedio del camino aumenta**. Lo que vemos aquí es que al principio, la longitud promedio del camino aumenta. Esto probablemente se debe al hecho de que cuando no sabemos nada sobre el entorno, es probable que quedemos atrapados en estados desfavorables, como agua o lobos. 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 alcanzar el objetivo, y la longitud del camino comienza a disminuir. Sin embargo, aún 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. @@ -245,9 +245,9 @@ Como hemos mencionado, el proceso de aprendizaje es un equilibrio entre la explo En general, es importante recordar que el éxito y la calidad del proceso de aprendizaje dependen significativamente de parámetros como la tasa de aprendizaje, la disminución de la tasa de aprendizaje y el factor de descuento. A menudo se les llama **hiperparámetros**, para distinguirlos de los **parámetros**, que optimizamos durante el entrenamiento (por ejemplo, los 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 post-lectura](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) +## [Cuestionario post-clase](https://ff-quizzes.netlify.app/en/ml/) -## Asignación +## Tarea [Un Mundo Más Realista](assignment.md) --- diff --git a/translations/es/8-Reinforcement/2-Gym/README.md b/translations/es/8-Reinforcement/2-Gym/README.md index 8a814bdbd..95aa4a77b 100644 --- a/translations/es/8-Reinforcement/2-Gym/README.md +++ b/translations/es/8-Reinforcement/2-Gym/README.md @@ -1,17 +1,17 @@ # CartPole Patinaje -El problema que resolvimos en la lección anterior puede parecer un problema de juguete, sin mucha aplicación en escenarios de la vida real. Sin embargo, este no es el caso, ya que muchos problemas del mundo real comparten esta misma estructura, como jugar al Ajedrez o al Go. Son similares porque también tenemos un tablero con reglas definidas y un **estado discreto**. +El problema que resolvimos en la lección anterior puede parecer un problema de juguete, sin mucha aplicación en escenarios de la vida real. Sin embargo, este no es el caso, ya que muchos problemas del mundo real comparten características similares, como jugar al ajedrez o al Go. Son similares porque también tenemos un tablero con reglas definidas y un **estado discreto**. -## [Cuestionario previo a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/47/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ## Introducción @@ -19,19 +19,19 @@ En esta lección aplicaremos los mismos principios de Q-Learning a un problema c > **Problema**: Si Pedro quiere escapar del lobo, necesita aprender a moverse más rápido. Veremos cómo Pedro puede aprender a patinar, en particular, a mantener el equilibrio, utilizando Q-Learning. -![¡La gran escapada!](../../../../translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.es.png) +![¡La gran escapada!](../../../../8-Reinforcement/2-Gym/images/escape.png) > ¡Pedro 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 del **CartPole**. En el mundo del CartPole, tenemos un deslizador horizontal que puede moverse a la izquierda o a la derecha, y el objetivo es equilibrar un poste vertical sobre el deslizador. +Usaremos una versión simplificada del equilibrio conocida como el problema del **CartPole**. En el mundo del CartPole, tenemos un deslizador horizontal que puede moverse a la izquierda o a la derecha, y el objetivo es equilibrar un palo vertical sobre el deslizador. ## Prerrequisitos -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. Si ejecutas el código en línea, es posible que necesites hacer algunos ajustes, como se describe [aquí](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). +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. Si ejecutas el código en línea, es posible que necesites hacer algunos ajustes, 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 estaban definidos por la clase `Board`, que creamos 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/), mantenido por [OpenAI](https://openai.com/). Usando este Gym, podemos crear diferentes **entornos**, desde simulaciones de CartPole hasta juegos de Atari. +En la lección anterior, las reglas del juego y el estado estaban definidos por la clase `Board` que creamos nosotros mismos. Aquí utilizaremos un **entorno de simulación** especial, que simulará la física detrás del palo 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/), 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). @@ -51,7 +51,7 @@ import random Para trabajar con el problema de equilibrio de CartPole, necesitamos inicializar el entorno correspondiente. Cada entorno está asociado con: -- Un **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. +- Un **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 palo, la velocidad y otros valores. - Un **espacio de acción** que define las acciones posibles. En nuestro caso, el espacio de acción es discreto y consta de dos acciones: **izquierda** y **derecha**. (bloque de código 2) @@ -64,7 +64,7 @@ Para trabajar con el problema de equilibrio de CartPole, necesitamos inicializar 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 una acción al azar del `action_space`. +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 una acción aleatoriamente del `action_space`. 1. Ejecuta el siguiente código y observa el resultado. @@ -112,8 +112,8 @@ Para ver cómo funciona el entorno, ejecutemos una simulación corta de 100 paso 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 - - Velocidad de rotación del poste + - Ángulo del palo + - Tasa de rotación del palo 1. Obtén el valor mínimo y máximo de esos números: (bloque de código 5) @@ -122,9 +122,9 @@ Para ver cómo funciona el entorno, ejecutemos una simulación corta de 100 paso print(env.observation_space.high) ``` - También notarás que el valor de recompensa en cada paso de la simulación siempre es 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. + También notarás que el valor de recompensa en cada paso de la simulación siempre es 1. Esto se debe a que nuestro objetivo es sobrevivir el mayor tiempo posible, es decir, mantener el palo 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 en 100 intentos consecutivos. + ✅ De hecho, la simulación de CartPole se considera resuelta si logramos obtener una recompensa promedio de 195 en 100 ensayos consecutivos. ## Discretización del estado @@ -132,11 +132,11 @@ En Q-Learning, necesitamos construir una Q-Table que defina qué hacer en cada e Hay algunas formas de hacer esto: -- **Dividir en intervalos**. Si conocemos el intervalo de un valor determinado, podemos dividir este intervalo en un número de **intervalos**, y luego reemplazar el valor por el número del intervalo al que pertenece. Esto se puede hacer usando el método [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) de numpy. En este caso, conoceremos con precisión el tamaño del estado, ya que dependerá del número de intervalos que seleccionemos para la digitalización. +- **Dividir en intervalos**. Si conocemos el intervalo de un valor determinado, podemos dividir este intervalo en un número de **intervalos**, y luego reemplazar el valor por el número del intervalo 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 con precisión el tamaño del estado, ya que dependerá del número de intervalos que seleccionemos para la digitalización. ✅ Podemos usar interpolación lineal para llevar los valores a un intervalo finito (por ejemplo, de -20 a 20), y luego convertir los números a 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, lo que puede resultar en un número infinito de estados. -En nuestro ejemplo, utilizaremos el segundo enfoque. Como notarás más adelante, a pesar de los límites indefinidos, esos valores rara vez toman valores fuera de ciertos intervalos finitos, por lo que esos estados con valores extremos serán muy raros. +En nuestro ejemplo, utilizaremos el segundo enfoque. Como notarás 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) @@ -145,7 +145,7 @@ En nuestro ejemplo, utilizaremos el segundo enfoque. Como notarás más adelante 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 usando intervalos: (bloque de código 7) +1. Exploremos también otro método de discretización utilizando intervalos: (bloque de código 7) ```python def create_bins(i,num): @@ -163,7 +163,7 @@ En nuestro ejemplo, utilizaremos el segundo enfoque. Como notarás más adelante 1. Ahora ejecutemos una simulación corta y observemos esos valores discretos del entorno. Siéntete libre de probar tanto `discretize` como `discretize_bins` y observa si hay alguna diferencia. - ✅ `discretize_bins` devuelve el número del intervalo, que comienza en 0. Por lo tanto, para valores de la variable de entrada cercanos a 0, devuelve el número del medio del intervalo (10). En `discretize`, no nos preocupamos por el rango de valores de salida, permitiendo que sean negativos, por lo que los valores del estado no están desplazados, y 0 corresponde a 0. (bloque de código 8) + ✅ `discretize_bins` devuelve el número del intervalo, que comienza en 0. Por lo tanto, para valores de la variable de entrada cercanos a 0, devuelve el número del medio del intervalo (10). En `discretize`, no nos preocupamos por el rango de los valores de salida, permitiendo que sean 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() @@ -197,9 +197,9 @@ Sin embargo, a veces las dimensiones precisas del espacio de observación no son 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 acciones posibles. Si la entrada no está presente en la Q-Table, devolveremos 0 como valor predeterminado. -## Comencemos con Q-Learning +## ¡Comencemos con Q-Learning! -¡Ahora estamos listos para enseñar a Pedro a mantener el equilibrio! +Ahora estamos listos para enseñar a Pedro a mantener el equilibrio. 1. Primero, definamos algunos hiperparámetros: (bloque de código 10) @@ -210,23 +210,23 @@ Sin embargo, a veces las dimensiones precisas del espacio de observación no son epsilon = 0.90 ``` - Aquí, `alpha` es la **tasa de aprendizaje**, que define en qué medida debemos ajustar los valores actuales de la Q-Table en cada paso. En la lección anterior comenzamos con 1 y luego disminuimos `alpha` a valores más bajos durante el entrenamiento. En este ejemplo lo mantendremos constante por simplicidad, pero puedes experimentar ajustando los valores de `alpha` más adelante. + Aquí, `alpha` es la **tasa de aprendizaje** que define en qué medida debemos ajustar los valores actuales de la Q-Table en cada paso. En la lección anterior comenzamos con 1 y luego disminuimos `alpha` a valores más bajos durante el entrenamiento. En este ejemplo lo mantendremos constante por simplicidad, pero puedes experimentar ajustando los valores de `alpha` más adelante. - `gamma` es el **factor de descuento**, que indica en qué medida debemos priorizar la recompensa futura sobre la recompensa actual. + `gamma` es el **factor de descuento** que muestra en qué medida debemos priorizar la recompensa futura sobre la recompensa actual. - `epsilon` es el **factor de exploración/explotación**, que determina si debemos preferir la exploración o la explotación. En nuestro algoritmo, en un porcentaje `epsilon` de los casos seleccionaremos la siguiente acción según los valores de la Q-Table, y en el resto de los casos ejecutaremos una acción aleatoria. Esto nos permitirá explorar áreas del espacio de búsqueda que nunca hemos visto antes. + `epsilon` es el **factor de exploración/explotación** que determina si debemos preferir la exploración o la explotación. En nuestro algoritmo, en un porcentaje `epsilon` de los casos seleccionaremos la siguiente acción según los valores de la Q-Table, y en el porcentaje restante ejecutaremos una acción aleatoria. Esto nos permitirá explorar áreas del espacio de búsqueda que nunca hemos visto antes. - ✅ En términos de equilibrio: elegir una acción aleatoria (exploración) actuaría como un empujón aleatorio en la dirección equivocada, y el poste tendría que aprender a recuperar el equilibrio de esos "errores". + ✅ En términos de equilibrio, elegir una acción aleatoria (exploración) actuaría como un empujón aleatorio en la dirección equivocada, y el palo tendría que aprender a recuperar el equilibrio de esos "errores". ### Mejorar el algoritmo Podemos hacer dos mejoras a nuestro algoritmo de la lección anterior: -- **Calcular la recompensa acumulativa promedio** a lo largo de un número de simulaciones. Imprimiremos el progreso cada 5000 iteraciones, y promediaremos nuestra recompensa acumulativa durante ese período de tiempo. Esto significa que si obtenemos más de 195 puntos, podemos considerar el problema resuelto, con una calidad incluso mayor a la requerida. +- **Calcular la recompensa acumulativa promedio**, durante un número de simulaciones. Imprimiremos el progreso cada 5000 iteraciones, y promediaremos nuestra recompensa acumulativa durante ese período de tiempo. Esto significa que si obtenemos más de 195 puntos, podemos considerar el problema resuelto, con una calidad incluso mayor a la requerida. - **Calcular el resultado acumulativo promedio máximo**, `Qmax`, y almacenaremos la Q-Table correspondiente a ese resultado. Cuando ejecutes el entrenamiento, notarás que a veces el resultado acumulativo promedio comienza a disminuir, y queremos conservar los valores de la Q-Table que corresponden al mejor modelo observado durante el entrenamiento. -1. Recopila todas las recompensas acumulativas en cada simulación en el vector `rewards` para graficarlas más adelante. (bloque de código 11) +1. Recopila todas las recompensas acumulativas en cada simulación en el vector `rewards` para su posterior representación gráfica. (bloque de código 11) ```python def probs(v,eps=1e-4): @@ -269,7 +269,7 @@ Podemos hacer dos mejoras a nuestro algoritmo de la lección anterior: Lo que puedes notar de estos resultados: -- **Cerca de nuestro objetivo**. Estamos muy cerca de alcanzar el objetivo de obtener 195 recompensas acumulativas en más de 100 ejecuciones consecutivas de la simulación, ¡o incluso podríamos haberlo logrado! Incluso si obtenemos números más bajos, no lo sabremos con certeza, ya que promediamos sobre 5000 ejecuciones, y solo se requieren 100 ejecuciones en el criterio formal. +- **Cerca de nuestro objetivo**. Estamos muy cerca de alcanzar el objetivo de obtener 195 recompensas acumulativas en más de 100 ejecuciones consecutivas de la simulación, ¡o incluso podemos haberlo logrado! Incluso si obtenemos números más bajos, no lo sabremos con certeza, ya que promediamos sobre 5000 ejecuciones, y solo se requieren 100 ejecuciones según 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 otros que empeoran la situación. @@ -283,9 +283,9 @@ Durante el entrenamiento, hemos recopilado el valor de la recompensa acumulativa plt.plot(rewards) ``` -![progreso sin procesar](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.es.png) +![progreso sin procesar](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) -En este gráfico no es posible sacar conclusiones, ya que 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** a lo largo de una serie de experimentos, digamos 100. Esto se puede hacer convenientemente usando `np.convolve`: (bloque de código 12) +En este gráfico no es posible sacar conclusiones, ya que 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): @@ -294,17 +294,17 @@ def running_average(x,window): plt.plot(running_average(rewards,100)) ``` -![progreso del entrenamiento](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.es.png) +![progreso del entrenamiento](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) ## Variar los hiperparámetros -Para hacer que el aprendizaje sea más estable, tiene sentido ajustar algunos de nuestros hiperparámetros durante el entrenamiento. En particular: +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`, podemos comenzar con valores cercanos a 1 y luego ir disminuyendo el parámetro. Con el tiempo, obtendremos buenos valores de probabilidad en la Q-Table, por lo que deberíamos ajustarlos ligeramente y no sobrescribirlos completamente con nuevos valores. +- **Para la tasa de aprendizaje**, `alpha`, podemos comenzar con valores cercanos a 1 y luego ir disminuyendo el parámetro. Con el tiempo, obtendremos buenos valores de probabilidad en la Q-Table, y por lo tanto deberíamos ajustarlos ligeramente, y no sobrescribirlos completamente con nuevos valores. -- **Aumentar epsilon**. Podríamos querer aumentar lentamente el valor de `epsilon` para explorar menos y explotar más. Probablemente tenga sentido comenzar con un valor bajo de `epsilon` y aumentarlo hasta casi 1. -> **Tarea 1**: Prueba con diferentes valores de hiperparámetros y observa si puedes lograr una recompensa acumulativa mayor. ¿Estás obteniendo más de 195? -> **Tarea 2**: Para resolver formalmente el problema, necesitas alcanzar un promedio de 195 de recompensa en 100 ejecuciones consecutivas. Mide eso durante el entrenamiento y asegúrate de que has resuelto formalmente el problema. +- **Aumentar epsilon**. Podríamos querer aumentar lentamente el valor de `epsilon`, para explorar menos y explotar más. Probablemente tenga sentido comenzar con un valor bajo de `epsilon` y aumentarlo hasta casi 1. +> **Tarea 1**: Prueba con diferentes valores de hiperparámetros y observa si puedes lograr una recompensa acumulativa más alta. ¿Estás obteniendo más de 195? +> **Tarea 2**: Para resolver formalmente el problema, necesitas alcanzar un promedio de recompensa de 195 a lo largo de 100 ejecuciones consecutivas. Mide eso durante el entrenamiento y asegúrate de que has resuelto el problema formalmente. ## Ver el resultado en acción @@ -324,28 +324,28 @@ env.close() Deberías ver algo como esto: -![un carrito equilibrando un poste](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) +![un carrito equilibrando](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) --- ## 🚀Desafío -> **Tarea 3**: Aquí estuvimos utilizando la copia final de la Q-Table, que puede que no sea la mejor. Recuerda que hemos guardado la Q-Table con mejor rendimiento en la variable `Qbest`. ¡Prueba el mismo ejemplo con la Q-Table de mejor rendimiento copiando `Qbest` sobre `Q` y observa si notas alguna diferencia! +> **Tarea 3**: Aquí estuvimos utilizando la copia final de la Q-Table, que puede no ser la mejor. Recuerda que hemos almacenado la Q-Table con mejor rendimiento en la variable `Qbest`. ¡Prueba el mismo ejemplo con la Q-Table de mejor rendimiento copiando `Qbest` sobre `Q` y observa si notas alguna diferencia! -> **Tarea 4**: Aquí no estábamos seleccionando la mejor acción en cada paso, sino que estábamos muestreando según la distribución de probabilidad correspondiente. ¿Tendría más sentido seleccionar siempre la mejor acción, aquella con el valor más alto en la Q-Table? Esto se puede hacer utilizando la función `np.argmax` para encontrar el número de acción correspondiente al valor más alto en la Q-Table. Implementa esta estrategia y observa si mejora el equilibrio. +> **Tarea 4**: Aquí no estábamos seleccionando la mejor acción en cada paso, sino muestreando con la distribución de probabilidad correspondiente. ¿Tendría más sentido seleccionar siempre la mejor acción, con el valor más alto en la Q-Table? Esto se puede hacer utilizando la función `np.argmax` para encontrar el número de acción correspondiente al valor más alto en la Q-Table. Implementa esta estrategia y observa si mejora el equilibrio. -## [Cuestionario posterior a la lección](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) +## [Cuestionario post-clase](https://ff-quizzes.netlify.app/en/ml/) ## Asignación [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 defina 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 casos de entornos discretos y continuos, pero con acciones discretas. +Ahora hemos aprendido cómo entrenar agentes para lograr buenos resultados simplemente proporcionando 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 casos de entornos discretos y continuos, pero con acciones discretas. -Es importante también estudiar situaciones donde el estado de las acciones sea continuo, y cuando el espacio de observación sea mucho más complejo, como la imagen de la pantalla de un juego de Atari. En esos problemas, a menudo necesitamos usar técnicas de aprendizaje automático más potentes, como redes neuronales, para lograr buenos resultados. Esos temas más avanzados serán el objeto de nuestro próximo curso avanzado de IA. +Es importante también estudiar situaciones donde el estado de las acciones sea continuo y cuando el espacio de observación sea mucho más complejo, como la imagen de la pantalla de un 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. Estos temas más avanzados serán el enfoque de nuestro próximo curso avanzado de IA. --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Aunque nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir 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 index 162af0585..4e4f85966 100644 --- a/translations/es/9-Real-World/1-Applications/README.md +++ b/translations/es/9-Real-World/1-Applications/README.md @@ -1,44 +1,44 @@ # 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) +![Resumen del aprendizaje automático en el mundo real en un sketchnote](../../../../sketchnotes/ml-realworld.png) > Sketchnote por [Tomomi Imura](https://www.twitter.com/girlie_mac) -En este currículo, 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, agrupamiento, clasificación, procesamiento de lenguaje natural y series temporales. ¡Felicidades! Ahora, podrías estar preguntándote para qué sirve todo esto... ¿cuáles son las aplicaciones reales de estos modelos? +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, agrupamiento, clasificación, procesamiento de lenguaje natural y series temporales. ¡Felicidades! Ahora, podrías estar preguntándote para qué sirve todo esto... ¿cuáles son las aplicaciones reales de estos modelos? -Aunque la industria ha mostrado mucho interés en la IA, que generalmente utiliza aprendizaje profundo, todavía hay aplicaciones valiosas para los modelos clásicos de aprendizaje automático. ¡Incluso podrías estar usando algunas de estas aplicaciones hoy en día! En esta lección, explorarás cómo ocho industrias y dominios temáticos diferentes utilizan estos tipos de modelos para hacer que sus aplicaciones sean más eficientes, confiables, inteligentes y valiosas para los usuarios. +Aunque la inteligencia artificial (IA), que generalmente utiliza aprendizaje profundo, ha captado mucho interés en la industria, todavía hay aplicaciones valiosas para los modelos clásicos de aprendizaje automático. ¡Incluso podrías estar usando algunas de estas aplicaciones hoy en día! En esta lección, explorarás cómo ocho industrias y dominios temáticos 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/) +## [Cuestionario previo a la lección](https://ff-quizzes.netlify.app/en/ml/) ## 💰 Finanzas -El sector financiero ofrece muchas oportunidades para el aprendizaje automático. Muchos problemas en esta área se prestan para ser modelados y resueltos utilizando ML. +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 [agrupamiento k-means](../../5-Clustering/2-K-Means/README.md) anteriormente en el curso, pero ¿cómo puede usarse para resolver problemas relacionados con el fraude con tarjetas de crédito? -El agrupamiento k-means es útil en 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 de 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 vinculado a continuación, puedes clasificar los datos de tarjetas de crédito utilizando un algoritmo de agrupamiento k-means y asignar cada transacción a un grupo según qué tan atípica parezca ser. Luego, puedes evaluar los grupos más riesgosos para determinar si las transacciones son fraudulentas o legítimas. +El agrupamiento k-means es útil en 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 de 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 agrupamiento k-means y asignar cada transacción a un grupo según qué tan atípica parezca ser. Luego, puedes evaluar los grupos más riesgosos para determinar transacciones fraudulentas frente a legítimas. [Referencia](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) ### Gestión de patrimonios -En la gestión de patrimonios, 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. +En la gestión de patrimonios, una persona 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 en particular es mediante la regresión estadística. La [regresión lineal](../../2-Regression/1-Tools/README.md) es una herramienta valiosa para entender cómo un fondo se desempeña en relación con un 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 ampliar 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 desempeño de fondos utilizando regresión. +Una forma de evaluar cómo se desempeña una inversión en 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 un 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 ampliar tu análisis utilizando regresión múltiple, donde se pueden tener en cuenta factores de riesgo adicionales. Para un ejemplo de cómo funcionaría esto para un fondo específico, consulta el artículo a continuación sobre la evaluación del desempeño 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 ML. Hay problemas interesantes que abordar, como detectar trampas en exámenes o ensayos, o gestionar sesgos, intencionados o no, en el proceso de corrección. +El sector educativo también es un área muy interesante donde se puede aplicar ML. Hay problemas fascinantes 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 @@ -47,61 +47,59 @@ El sector educativo también es un área muy interesante donde se puede aplicar ### Mitigación de sesgos -[Grammarly](https://grammarly.com), un asistente de escritura que verifica errores de ortografía y gramática, 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 técnico sobre cómo abordaron el sesgo de género en el aprendizaje automático, lo cual aprendiste en nuestra [lección introductoria sobre equidad](../../1-Introduction/3-fairness/README.md). +[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 técnico sobre cómo abordaron el sesgo de género en el aprendizaje automático, algo 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 +## 👜 Comercio minorista -El sector minorista definitivamente puede beneficiarse del uso de ML, desde crear una mejor experiencia para el cliente hasta gestionar inventarios de manera óptima. +El sector minorista puede beneficiarse enormemente del uso de ML, desde crear una mejor experiencia para el cliente hasta optimizar el inventario. ### 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 fundamental. En este artículo, los ingenieros de la empresa describen cómo utilizan ML y NLP para "mostrar los resultados correctos a los clientes". En particular, su motor de intención de consulta se ha 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. +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 fundamental. En este artículo, los ingenieros de la empresa describen cómo utilizan ML y NLP para "mostrar los resultados correctos a los clientes". En particular, su motor de intención de consulta se ha construido para usar extracción de entidades, entrenamiento de clasificadores, extracción de 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 inventarios -Empresas innovadoras y ágiles como [StitchFix](https://stitchfix.com), un servicio de cajas que envía ropa a los consumidores, dependen en gran medida de ML para recomendaciones y gestión de inventarios. Sus equipos de estilismo trabajan junto 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 prendas para predecir qué sería una pieza de ropa exitosa que no existe hoy. Lo llevamos al equipo de comercialización y ahora pueden usarlo como una herramienta". +Empresas innovadoras y ágiles como [StitchFix](https://stitchfix.com), un servicio de cajas que envía ropa a los consumidores, dependen en gran medida de ML para recomendaciones y gestión de inventarios. Sus equipos de estilismo trabajan junto con sus equipos de comercialización: "uno de nuestros científicos de datos experimentó con un algoritmo genético y lo aplicó a prendas para predecir qué sería una pieza de ropa exitosa que aún no existe. 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 +## 🏥 Salud -El sector de la atención médica puede aprovechar 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. +El sector de la salud puede aprovechar ML para optimizar tareas de investigación y también problemas logísticos como la readmisión de pacientes o la prevención de 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, analizar 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) capaz de distinguir entre grupos de medicamentos. +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 los resultados de los ensayos clínicos. Específicamente, pudieron usar random forest para producir un [clasificador](../../4-Classification/README.md) capaz de distinguir entre grupos de medicamentos. [Referencia](https://www.sciencedirect.com/science/article/pii/S2451945616302914) -### Gestión de readmisión hospitalaria +### Gestión de readmisiones hospitalarias -La atención hospitalaria es costosa, especialmente cuando los pacientes tienen que ser readmitidos. Este artículo analiza una empresa que utiliza ML para predecir el potencial de readmisión utilizando [agrupamiento](../../5-Clustering/README.md) de algoritmos. Estos grupos ayudan a los analistas a "descubrir grupos de readmisiones que pueden compartir una causa común". +La atención hospitalaria es costosa, especialmente cuando los pacientes deben ser readmitidos. Este artículo analiza una empresa que utiliza ML para predecir el potencial de readmisión utilizando algoritmos de [agrupamiento](../../5-Clustering/README.md). Estos grupos 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". +La reciente pandemia ha puesto de relieve cómo 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 podamos 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 la naturaleza entra en juego. Es importante poder medir estos sistemas con precisión y actuar adecuadamente si ocurre algo, como un incendio forestal o una disminución en la población animal. +La naturaleza y la ecología consisten en muchos sistemas sensibles donde la interacción entre animales y la naturaleza es clave. Es importante medir estos sistemas con precisión y actuar adecuadamente si ocurre algo, como un incendio forestal o una disminución en la población animal. ### Gestión forestal -Aprendiste sobre [aprendizaje por refuerzo](../../8-Reinforcement/README.md) en lecciones anteriores. Puede ser muy útil al intentar predecir patrones en la naturaleza. En particular, puede usarse para rastrear problemas ecológicos como incendios forestales y la propagación de especies invasoras. En Canadá, un grupo de investigadores utilizó aprendizaje por refuerzo para construir modelos de dinámica de incendios forestales a partir de imágenes satelitales. Usando un innovador "proceso de propagación espacial (SSP)", imaginaron 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 de RL, ya que la dinámica del correspondiente Proceso de Decisión de Markov (MDP) 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. +Aprendiste sobre [aprendizaje por refuerzo](../../8-Reinforcement/README.md) en lecciones anteriores. Puede ser muy útil al intentar predecir patrones en la naturaleza. En particular, puede usarse para rastrear problemas ecológicos como incendios forestales y la propagación de especies invasoras. En Canadá, un grupo de investigadores utilizó aprendizaje por refuerzo para construir modelos de dinámica de incendios forestales a partir de imágenes satelitales. Usando un innovador "proceso de propagación espacial (SSP)", imaginaron 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 al norte, sur, este u oeste o no propagarse". [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 movimientos de 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. +Aunque el aprendizaje profundo ha revolucionado el seguimiento visual de movimientos de 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 movimientos de animales de granja e 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 posturas de ovejas utilizando varios algoritmos clasificadores. Podrías reconocer la curva ROC en la página 335. [Referencia](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) -### ⚡️ Gestión energética +### ⚡️ 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 analiza en detalle cómo el agrupamiento, la regresión y el pronóstico de series temporales se combinaron para ayudar a predecir el uso futuro de energía en Irlanda, basado en medidores inteligentes. [Referencia](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) @@ -112,46 +110,46 @@ El sector de seguros es otro sector que utiliza ML para construir y optimizar mo ### Gestión de volatilidad -MetLife, un proveedor de seguros de vida, es transparente 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ósticos. +MetLife, un proveedor de seguros de vida, es transparente sobre cómo 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ósticos. [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 desestabilizar 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. +En las artes, por ejemplo en el periodismo, hay muchos problemas interesantes. Detectar noticias falsas es un gran desafío, ya que se ha demostrado que influyen en la opinión de las personas e incluso pueden desestabilizar 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 actuales. En este artículo, los investigadores sugieren que un sistema que combine varias de las técnicas de ML que hemos estudiado puede ser probado y el mejor modelo desplegado: "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)." +Detectar noticias falsas se ha convertido en un juego del gato y el ratón en los medios de comunicación actuales. En este artículo, los investigadores sugieren que un sistema que combine varias de las técnicas de ML que hemos estudiado puede probarse y desplegarse 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 entrenar 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 combinar diferentes dominios de ML puede producir resultados interesantes que pueden ayudar a detener la propagación de noticias falsas y evitar daños reales; en este caso, el impulso fue la propagación de rumores sobre tratamientos para el COVID que incitaron violencia colectiva. +Este artículo muestra cómo combinar diferentes dominios de ML puede producir resultados interesantes que ayuden a detener la propagación de noticias falsas y evitar daños reales; en este caso, el impulso fue la propagación de rumores sobre tratamientos para el COVID que incitaron a la violencia. ### 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 Vaticanos. Pero el aspecto comercial de los museos también se beneficia de los modelos de ML. +Los museos están al borde 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 Vaticanos. Pero el aspecto comercial de los museos también se beneficia de los modelos de ML. -Por ejemplo, el Instituto de Arte de Chicago construyó modelos para predecir qué intereses tienen los visitantes y cuándo asistirán a 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 Instituto de Arte." +Por ejemplo, el Instituto de Arte de Chicago construyó modelos para predecir qué interesa a las audiencias y cuándo asistirán a exposiciones. El objetivo es crear experiencias de visitante 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% de precisión, dice Andrew Simnick, vicepresidente senior del Instituto de Arte". [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 apuntan a los clientes de diferentes maneras según varios grupos. En este artículo, se discuten los usos de los algoritmos de agrupamiento para apoyar el marketing diferenciado. El marketing diferenciado ayuda a las empresas a mejorar el reconocimiento de marca, llegar a más clientes y generar más ingresos. +Las estrategias de marketing más efectivas apuntan a los clientes de diferentes maneras según varios grupos. En este artículo, se discuten los usos de los algoritmos de agrupamiento para apoyar el marketing diferenciado. El marketing diferenciado ayuda a las empresas a mejorar el reconocimiento de marca, llegar 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 curso y descubre cómo utiliza ML. -## [Cuestionario posterior a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) +Identifica otro sector que se beneficie de algunas de las técnicas que aprendiste en este plan de estudios y descubre cómo utiliza ML. +## [Cuestionario posterior a la clase](https://ff-quizzes.netlify.app/en/ml/) -## Revisión y estudio personal +## 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 [echarles un vistazo](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos). +El equipo de ciencia de datos de Wayfair tiene varios videos interesantes sobre cómo utilizan el aprendizaje automático en su empresa. Vale la pena [echarles un vistazo](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos). ## Tarea -[Una búsqueda del tesoro de ML](assignment.md) +[Una búsqueda del tesoro de aprendizaje automático](assignment.md) --- 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 index 153c7e11f..56a74bf00 100644 --- a/translations/es/9-Real-World/2-Debugging-ML-Models/README.md +++ b/translations/es/9-Real-World/2-Debugging-ML-Models/README.md @@ -1,28 +1,28 @@ # Posdata: Depuración de modelos de aprendizaje automático utilizando componentes del panel de IA Responsable -## [Cuestionario previo a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [Cuestionario previo a la clase](https://ff-quizzes.netlify.app/en/ml/) ## Introducción El aprendizaje automático impacta nuestra vida cotidiana. La IA está encontrando su lugar en algunos de los sistemas más importantes que nos afectan como individuos y como 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 de toma de decisiones diarias, como diagnósticos médicos o detección de fraudes. En consecuencia, los avances en IA junto con su 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 no cumplen con 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, confiables, inclusivos, transparentes y responsables para todos. -En este currículo, exploraremos herramientas prácticas que pueden ser utilizadas para evaluar si un modelo tiene problemas relacionados con 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 promedio de error. Imagina lo que puede suceder cuando los datos que estás utilizando para construir estos modelos carecen de ciertos grupos demográficos, como raza, género, visión política, religión, o representan desproporcionadamente dichos grupos demográficos. ¿Qué sucede cuando la salida del modelo se interpreta como favorable para algunos grupos demográficos? Esto puede introducir una representación excesiva o insuficiente de estos grupos sensibles, resultando en problemas de equidad, inclusión o confiabilidad del modelo. Otro factor es que los modelos de aprendizaje automático son considerados cajas negras, lo que dificulta entender y explicar qué impulsa las predicciones 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 este plan de estudios, exploraremos herramientas prácticas que pueden utilizarse para evaluar si un modelo tiene problemas relacionados con la 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 promedio de error. Imagina lo que puede suceder cuando los datos que estás utilizando para construir estos modelos carecen de ciertos grupos demográficos, como raza, género, visión política, religión, o representan desproporcionadamente dichos grupos demográficos. ¿Qué sucede cuando la salida del modelo se interpreta como favorable para algún grupo demográfico? Esto puede introducir una representación excesiva o insuficiente de estos grupos sensibles, lo que resulta en problemas de equidad, inclusión o confiabilidad del modelo. Otro factor es que los modelos de aprendizaje automático son considerados cajas negras, lo que dificulta entender y explicar qué impulsa las predicciones 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 a depurar tus modelos utilizando: - **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 análisis comparativos 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 pueda sesgar tu modelo para favorecer un grupo demográfico sobre otro. -- **Importancia de las características**: entender qué características están impulsando las predicciones de tu modelo a nivel global o local. +- **Importancia de las características**: comprender qué características están impulsando las predicciones de tu modelo a nivel global o local. ## Prerrequisito @@ -32,19 +32,19 @@ Como prerrequisito, revisa [Herramientas de IA Responsable para desarrolladores] ## Análisis de errores -Las métricas tradicionales de rendimiento de modelos utilizadas para medir la precisión son principalmente cálculos basados en predicciones correctas frente a 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. Las consecuencias de estos patrones de falla con ciertos grupos de datos pueden llevar a problemas de equidad o confiabilidad. 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 grupo demográfico importante. +Las métricas tradicionales de rendimiento de modelos utilizadas para medir la precisión son principalmente cálculos basados en predicciones correctas frente a 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 confiabilidad. Es esencial comprender 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 grupo demográfico importante. -![Analizar y depurar errores del modelo](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.es.png) +![Analizar y depurar errores del modelo](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) -El componente de Análisis de Errores en el panel de IA Responsable ilustra cómo se distribuyen las fallas del modelo entre varios cohortes con una visualización en forma de á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. +El componente de Análisis de Errores en el panel de IA Responsable ilustra cómo se distribuyen las fallas del modelo entre varios cohortes con una visualización en forma de árbol. Esto es útil para identificar características o áreas donde hay una alta tasa de error en tu conjunto de datos. Al observar 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) +![Análisis de errores](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) Los indicadores visuales en el mapa del árbol ayudan a localizar las áreas problemáticas más rápidamente. Por ejemplo, cuanto más oscuro sea el tono de rojo en un nodo del árbol, mayor será la tasa de error. El mapa de calor es otra funcionalidad de visualización que los usuarios pueden utilizar para investigar la tasa de error utilizando 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) +![Mapa de calor de análisis de errores](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) Utiliza el análisis de errores cuando necesites: @@ -53,15 +53,15 @@ Utiliza el análisis de errores cuando necesites: ## 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 parecer excelente, pero las inexactitudes pueden exponerse en otra métrica. Además, comparar las métricas para encontrar 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 para observar el rendimiento del modelo entre características sensibles e insensibles (por ejemplo, raza, género o edad del paciente) para descubrir posibles problemas de equidad que pueda tener el modelo. Por ejemplo, descubrir que el modelo es más erróneo en un cohorte que tiene características sensibles puede revelar posibles problemas de equidad. +Evaluar el rendimiento de un modelo de aprendizaje automático requiere obtener una comprensión holística de su comportamiento. Esto puede lograrse 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 parecer excelente, pero las inexactitudes pueden exponerse en otra métrica. Además, comparar las métricas para encontrar 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 para observar el rendimiento del modelo entre características sensibles frente a insensibles (por ejemplo, raza, género o edad del paciente) para descubrir posibles problemas de equidad que pueda tener el modelo. Por ejemplo, descubrir que el modelo es más erróneo en un cohorte que tiene características sensibles puede revelar posibles problemas de equidad en el modelo. -El componente de Visión General del Modelo en el panel de IA Responsable ayuda no solo a analizar las métricas de rendimiento de la representación de datos en un cohorte, sino que también brinda a los usuarios la capacidad de comparar el comportamiento del modelo entre diferentes cohortes. +El componente de Visión General del Modelo del panel de IA Responsable ayuda no solo a analizar las métricas de rendimiento de la representación de datos en un cohorte, sino que también brinda a los usuarios la capacidad de comparar el comportamiento del modelo entre diferentes cohortes. -![Cohortes de conjuntos de datos - visión general del modelo en el panel de IA Responsable](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.es.png) +![Cohortes de conjuntos de datos - visión general del modelo en el panel de IA Responsable](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.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 panel 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 factor clave en los resultados erróneos del modelo. +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 panel tiene inteligencia integrada 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 al usuario aislar una característica particular de un grupo de datos más grande para ver si es un factor clave en los resultados erróneos del modelo. -![Cohortes de características - visión general del modelo en el panel de IA Responsable](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.es.png) +![Cohortes de características - visión general del modelo en el panel de IA Responsable](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) El componente de Visión General del Modelo admite dos clases de métricas de disparidad: @@ -79,13 +79,13 @@ El componente de Visión General del Modelo admite dos clases de métricas de di > "Si torturas los datos lo suficiente, confesarán cualquier cosa" - Ronald Coase -Esta afirmación suena extrema, pero es cierto que los datos pueden ser manipulados para respaldar 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 sesgos en los datos. Garantizar la equidad en la IA y el aprendizaje automático sigue siendo un desafío complejo. +Esta afirmación suena extrema, pero es cierto que los datos pueden manipularse para respaldar 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 sesgos 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 de modelos. Puedes tener puntuaciones de precisión altas, pero esto no siempre refleja el sesgo subyacente en los datos que podría estar en tu conjunto de datos. Por ejemplo, si un conjunto de datos de empleados tiene un 27% de mujeres en puestos ejecutivos en una empresa y un 73% de hombres en el mismo nivel, un modelo de IA de publicidad de empleo entrenado con estos datos puede dirigirse principalmente a una audiencia masculina para puestos de nivel superior. Tener este desequilibrio en los datos sesgó la predicción del modelo para favorecer un género. Esto revela un problema de equidad donde hay un sesgo de género en el modelo de IA. +Los datos son un gran punto ciego para las métricas tradicionales de rendimiento de modelos. Puedes tener puntuaciones de precisión altas, pero esto no siempre refleja el sesgo subyacente en los datos que podría estar en tu conjunto de datos. Por ejemplo, si un conjunto de datos de empleados tiene un 27% de mujeres en puestos ejecutivos en una empresa y un 73% de hombres en el mismo nivel, un modelo de IA para publicidad de empleo entrenado con estos datos puede dirigirse principalmente a una audiencia masculina para puestos de alto nivel. Tener este desequilibrio en los datos sesgó la predicción del modelo para favorecer 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 panel de IA Responsable ayuda a identificar áreas donde hay una representación excesiva o insuficiente 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 brinda 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 solo es un problema de equidad, sino que muestra que el modelo no es inclusivo ni confiable. +El componente de Análisis de Datos en el panel de IA Responsable ayuda a identificar áreas donde hay una representación excesiva o insuficiente en el conjunto de datos. Ayuda a los usuarios a diagnosticar la causa raíz de errores y problemas de equidad introducidos por desequilibrios en los datos o la falta de representación de un grupo de datos particular. Esto brinda 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 en los datos no solo es un problema de equidad, sino que muestra que el modelo no es inclusivo ni confiable. -![Componente de análisis de datos en el panel de IA Responsable](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.es.png) +![Componente de análisis de datos en el panel de IA Responsable](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) Utiliza el análisis de datos cuando necesites: @@ -96,40 +96,40 @@ Utiliza el análisis de datos cuando necesites: ## 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 médicos o hospitales a tomar decisiones bien informadas. Además, poder explicar por qué un modelo hizo una predicción para un paciente individual permite responsabilidad con las regulaciones de salud. Cuando utilizas 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: +Los modelos de aprendizaje automático tienden a ser cajas negras. Comprender 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 determinada 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 médicos o hospitales a tomar decisiones bien informadas. Además, poder explicar por qué un modelo hizo una predicción para un paciente individual permite responsabilidad con las regulaciones de salud. Cuando utilizas modelos de aprendizaje automático de maneras que afectan la vida de las personas, es crucial comprender 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? +* Cumplimiento normativo: ¿Cumple mi modelo con los requisitos legales? -El componente de Importancia de las Características del panel de IA Responsable 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 las características que influyen en el comportamiento de un modelo para el cumplimiento regulatorio. 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 explicar por qué un modelo hizo una predicción precisa o inexacta. +El componente de Importancia de las Características del panel de IA Responsable 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 las características que influyen en el comportamiento de un modelo para el cumplimiento normativo. Los usuarios pueden explorar explicaciones globales y 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 explicar por qué un modelo hizo una predicción precisa o inexacta. -![Componente de importancia de características del panel de IA Responsable](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.es.png) +![Componente de importancia de características en el panel de IA Responsable](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) * Explicaciones globales: Por ejemplo, ¿qué características afectan el comportamiento general de un modelo de readmisión hospitalaria para pacientes diabéticos? * 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 al examinar el rendimiento de un modelo entre diferentes cohortes, la Importancia de las Características muestra qué nivel de impacto tiene una característica entre 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 las 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 no solo ayuda 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 etnicidad o género tiene una alta influencia en impulsar la predicción de un modelo, esto podría ser un indicio de sesgo racial o de género en el modelo. +En el proceso de depuración al examinar el rendimiento de un modelo entre diferentes cohortes, la Importancia de las Características muestra qué nivel de impacto tiene una característica en 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 las 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 no solo ayuda 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 etnia o género tiene una alta influencia en impulsar la predicción de un modelo, esto podría ser un indicio de sesgo racial o de género en el modelo. -![Importancia de características](../../../../translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.es.png) +![Importancia de características](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) Utiliza la interpretabilidad cuando necesites: -* Determinar cuán confiables son las predicciones de tu sistema de IA entendiendo 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 simplemente correlaciones falsas. -* Descubrir posibles fuentes de inequidad entendiendo si el modelo está basando sus predicciones en características sensibles o en características altamente correlacionadas con ellas. -* Generar confianza del usuario en las decisiones de tu modelo generando explicaciones locales para ilustrar sus resultados. +* Determinar qué tan confiables son las predicciones de tu sistema de IA al comprender qué características son más importantes para las predicciones. +* Abordar la depuración de tu modelo al comprenderlo primero e identificar si el modelo está utilizando características saludables o simplemente correlaciones falsas. +* Descubrir posibles fuentes de inequidad al comprender si el modelo está basando sus predicciones en características sensibles o en características altamente correlacionadas con ellas. +* Generar confianza en las decisiones de tu modelo al generar 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 las personas. ## Conclusión -Todos los componentes del panel de IA Responsable 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. Mejoran la prevención de amenazas a los derechos humanos; la discriminación o exclusión de ciertos grupos de oportunidades de vida; y el riesgo de daño físico o psicológico. También ayudan a generar confianza en las decisiones de tu modelo al generar explicaciones locales para ilustrar sus resultados. Algunos de los posibles daños pueden clasificarse como: +Todos los componentes del panel de IA Responsable son herramientas prácticas para ayudarte a construir modelos de aprendizaje automático que sean menos perjudiciales y más confiables para la sociedad. Mejoran la prevención de amenazas a los derechos humanos; la discriminación o exclusión de ciertos grupos de oportunidades de vida; y el riesgo de daño físico o psicológico. También ayudan a generar confianza en las decisiones de tu modelo al generar explicaciones locales para ilustrar sus resultados. Algunos de los posibles daños pueden clasificarse como: -- **Asignación**, si un género o etnicidad, por ejemplo, es favorecido sobre otro. +- **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, esto lleva a un servicio de bajo rendimiento. - **Estereotipos**. Asociar un grupo dado con atributos preasignados. - **Denigración**. Criticar injustamente y etiquetar algo o alguien. -- **Representación excesiva o insuficiente**. La idea es que un cierto grupo no se vea representado en una determinada profesión, y cualquier servicio o función que siga promoviendo eso está contribuyendo al daño. +- **Sobre- o sub-representación**. La idea es que un cierto grupo no se vea en una determinada profesión, y cualquier servicio o función que siga promoviendo eso está contribuyendo al daño. ### Azure RAI dashboard @@ -146,11 +146,11 @@ Para evitar que se introduzcan sesgos estadísticos o de datos desde el principi - contar con 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 sesgos cuando ocurran +- desarrollar mejores métodos para detectar y corregir sesgos cuando ocurren Piensa en escenarios de la vida real donde la injusticia sea evidente en la construcción y uso de modelos. ¿Qué más deberíamos considerar? -## [Cuestionario posterior a la clase](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) +## [Cuestionario posterior a la clase](https://ff-quizzes.netlify.app/en/ml/) ## Revisión y Autoestudio En esta lección, has aprendido algunas herramientas prácticas para incorporar IA responsable en el aprendizaje automático. @@ -181,4 +181,4 @@ Consulta los siguientes materiales para aprender más sobre IA responsable y có --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 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 index 927b78b57..fd07e8bc7 100644 --- a/translations/es/README.md +++ b/translations/es/README.md @@ -1,49 +1,49 @@ -[![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/) +[![Licencia de GitHub](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![Contribuidores de GitHub](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![Problemas de GitHub](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![Solicitudes de extracción de GitHub](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/) +[![Observadores de GitHub](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![Bifurcaciones de GitHub](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![Estrellas de GitHub](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) -### 🌐 Soporte multilingüe +### 🌐 Soporte multilingüe -#### Soporte mediante GitHub Action (Automatizado y siempre actualizado) +#### Soporte a través de GitHub Action (Automatizado y siempre actualizado) -[French](../fr/README.md) | [Spanish](./README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](../fi/README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) +[Francés](../fr/README.md) | [Español](./README.md) | [Alemán](../de/README.md) | [Ruso](../ru/README.md) | [Árabe](../ar/README.md) | [Persa (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chino (Simplificado)](../zh/README.md) | [Chino (Tradicional, Macao)](../mo/README.md) | [Chino (Tradicional, Hong Kong)](../hk/README.md) | [Chino (Tradicional, Taiwán)](../tw/README.md) | [Japonés](../ja/README.md) | [Coreano](../ko/README.md) | [Hindi](../hi/README.md) | [Bengalí](../bn/README.md) | [Maratí](../mr/README.md) | [Nepalí](../ne/README.md) | [Panyabí (Gurmukhi)](../pa/README.md) | [Portugués (Portugal)](../pt/README.md) | [Portugués (Brasil)](../br/README.md) | [Italiano](../it/README.md) | [Polaco](../pl/README.md) | [Turco](../tr/README.md) | [Griego](../el/README.md) | [Tailandés](../th/README.md) | [Sueco](../sv/README.md) | [Danés](../da/README.md) | [Noruego](../no/README.md) | [Finlandés](../fi/README.md) | [Holandés](../nl/README.md) | [Hebreo](../he/README.md) | [Vietnamita](../vi/README.md) | [Indonesio](../id/README.md) | [Malayo](../ms/README.md) | [Tagalo (Filipino)](../tl/README.md) | [Suajili](../sw/README.md) | [Húngaro](../hu/README.md) | [Checo](../cs/README.md) | [Eslovaco](../sk/README.md) | [Rumano](../ro/README.md) | [Búlgaro](../bg/README.md) | [Serbio (Cirílico)](../sr/README.md) | [Croata](../hr/README.md) | [Esloveno](../sl/README.md) | [Ucraniano](../uk/README.md) | [Birmano (Myanmar)](../my/README.md) -#### Únete a la comunidad +#### Únete a la comunidad [![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) -# Aprendizaje Automático para Principiantes - Un Currículo +# 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 🌍 +> 🌍 Viaja por el mundo mientras exploramos el Aprendizaje Automático a través de las culturas del mundo 🌍 -Los Cloud Advocates de Microsoft se complacen en 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 ['Ciencia de Datos para Principiantes'](https://aka.ms/ds4beginners), ¡también! +Los Cloud Advocates de Microsoft se complacen en 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 IA 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 por el 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 forma comprobada para que las nuevas habilidades se afiancen. +Viaja con nosotros por el mundo mientras aplicamos estas técnicas clásicas a datos de muchas áreas del mundo. Cada lección incluye cuestionarios previos y posteriores a 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 forma comprobada de que las nuevas habilidades "se queden". **✍️ Un agradecimiento especial 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 -**🙏 Agradecimiento especial 🙏 a nuestros Microsoft Student Ambassadors autores, revisores y colaboradores de contenido**, en particular Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila y Snigdha Agarwal +**🙏 Agradecimiento especial 🙏 a nuestros Microsoft Student Ambassadors autores, revisores y contribuyentes de contenido**, en particular Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila y Snigdha Agarwal **🤩 Gratitud extra a los Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi y Vidushi Gupta por nuestras lecciones en R!** -# Comenzando +# Comenzando 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. @@ -51,7 +51,7 @@ Sigue estos pasos: > [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 en tu propia cuenta de GitHub y completa los ejercicios por tu cuenta o en grupo: +**[Estudiantes](https://aka.ms/student-page)**, para usar este currículo, haz un fork de todo el repositorio en tu propia cuenta de GitHub y completa los ejercicios por tu cuenta o con un grupo: - Comienza 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. @@ -59,88 +59,88 @@ Sigue estos pasos: - 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" completando la rúbrica PAT correspondiente. Un 'PAT' es una Herramienta de Evaluación de Progreso que es una rúbrica que completas para profundizar tu aprendizaje. También puedes reaccionar a otros PATs para que aprendamos juntos. +- 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" completando la rúbrica PAT correspondiente. Un 'PAT' es una Herramienta de Evaluación de Progreso que es una rúbrica que completas para profundizar 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). +> Para un estudio más profundo, 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. --- -## Tutoriales en video +## Tutoriales en video -Algunas de las lecciones están disponibles en formato de video corto. Puedes encontrar todos estos 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. +Algunas de las lecciones están disponibles en formato de video corto. Puedes encontrar todos estos videos integrados 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. -[![ML para principiantes banner](../../translated_images/ml-for-beginners-video-banner.63f694a100034bc6251134294459696e070a3a9a04632e9fe6a24aa0de4a7384.es.png)](https://aka.ms/ml-beginners-videos) +[![Banner de ML para principiantes](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) --- -## Conoce al equipo +## Conoce al equipo [![Video promocional](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) **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. +> 🎥 ¡Haz clic en la imagen de arriba para ver un video sobre el proyecto y las personas que lo crearon! --- -## Pedagogía +## Pedagogía Hemos elegido dos principios pedagógicos al construir este currículo: asegurarnos de 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 asegurarnos de que el contenido se alinee con proyectos, el proceso se vuelve más atractivo para los estudiantes y se mejora la retención de conceptos. Además, un cuestionario de bajo riesgo antes de una 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 reales de ML, que puede usarse como crédito adicional o como base para discusión. +Al asegurarnos de que el contenido esté alineado con proyectos, el proceso se vuelve más atractivo para los estudiantes y la retención de conceptos se verá aumentada. Además, un cuestionario de bajo riesgo antes de una 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 epílogo sobre aplicaciones del mundo real del aprendizaje automático, que puede usarse como crédito adicional o como base para discusión. -> Encuentra nuestro [Código de Conducta](CODE_OF_CONDUCT.md), [Contribuciones](CONTRIBUTING.md) y [Directrices de Traducción](TRANSLATIONS.md). ¡Agradecemos tus comentarios constructivos! +> Encuentra nuestro [Código de Conducta](CODE_OF_CONDUCT.md), [Contribuciones](CONTRIBUTING.md) y [Pautas de Traducción](TRANSLATIONS.md). ¡Agradecemos tus comentarios constructivos! -## Cada lección incluye +## Cada lección incluye - sketchnote opcional - video complementario opcional - tutorial en video (solo algunas lecciones) -- cuestionario de calentamiento previo a la lección +- [cuestionario de calentamiento previo a la lección](https://ff-quizzes.netlify.app/en/ml/) - 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 +- [cuestionario posterior a la lección](https://ff-quizzes.netlify.app/en/ml/) -> **Una nota sobre 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 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 combinación de `fragmentos de código` (de R u otros lenguajes) y un `encabezado YAML` (que guía cómo formatear salidas como PDF) en un `documento Markdown`. Como tal, sirve como un marco ejemplar de autoría 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 en formatos de salida como PDF, HTML o Word. +> **Nota sobre 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 a la carpeta `/solution` y busca las lecciones en R. Estas incluyen una extensión .rmd que representa un archivo **R Markdown**, que puede definirse simplemente como una integración de `fragmentos de código` (de R u otros lenguajes) y un `encabezado YAML` (que guía cómo formatear salidas como PDF) en un `documento Markdown`. Como tal, sirve como un marco ejemplar para la autoría en ciencia de datos, ya que te permite combinar tu código, su salida y tus pensamientos al escribirlos en Markdown. Además, los documentos R Markdown pueden renderizarse en formatos de salida como PDF, HTML o Word. -> **Una nota sobre los cuestionarios**: Todos los cuestionarios están contenidos en la carpeta [Quiz App](../../quiz-app), para un total de 52 cuestionarios de tres preguntas cada uno. Están vinculados desde las lecciones, pero la aplicación de cuestionarios puede ejecutarse localmente; sigue las instrucciones en la carpeta `quiz-app` para alojarla localmente o implementarla en Azure. +> **Nota sobre los cuestionarios**: Todos los cuestionarios están contenidos en la [carpeta Quiz App](../../quiz-app), para un total de 52 cuestionarios de tres preguntas cada uno. Están vinculados 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 implementarla en Azure. | 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/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 detrás de este campo | [Lección](1-Introduction/2-history-of-ML/README.md) | Jen y Amy | -| 03 | Justicia y aprendizaje automático | [Introducción](1-Introduction/README.md) | ¿Cuáles son los importantes temas filosóficos sobre justicia que los estudiantes deben considerar al construir y aplicar modelos de ML? | [Lección](1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | Técnicas para el aprendizaje automático | [Introducción](1-Introduction/README.md) | ¿Qué técnicas utilizan los investigadores de ML para construir modelos de ML? | [Lección](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 | +| 03 | Equidad en el aprendizaje automático | [Introducción](1-Introduction/README.md) | ¿Cuáles son los temas filosóficos importantes sobre la equidad que los estudiantes deben considerar al construir y aplicar modelos de ML? | [Lección](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Técnicas para el aprendizaje automático | [Introducción](1-Introduction/README.md) | ¿Qué técnicas utilizan los investigadores de ML para construir modelos de ML? | [Lección](1-Introduction/4-techniques-of-ML/README.md) | Chris y Jen | +| 05 | Introducción a la regresión | [Regresión](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 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 gustos musicales en Nigeria 🎧 | [Clustering](5-Clustering/README.md) | Explora el método 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 | Introducción al procesamiento de lenguaje natural ☕️ | [Natural language processing](6-NLP/README.md) | Aprende los conceptos básicos de NLP construyendo un bot simple | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | Tareas comunes de NLP ☕️ | [Natural language processing](6-NLP/README.md) | Profundiza en NLP entendiendo tareas comunes al trabajar con estructuras de lenguaje | [Python](6-NLP/2-Tasks/README.md) | Stephen | -| 18 | Traducción y análisis de sentimientos ♥️ | [Natural language processing](6-NLP/README.md) | Traducción y análisis de sentimientos 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 sentimientos 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 sentimientos 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 mundial de energía ⚡️ - predicción 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 mundial de energía ⚡️ - predicción 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) | Gym 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 | [Lesson](9-Real-World/1-Applications/README.md) | Team | -| Postscript | Depuración de modelos en ML usando el panel RAI | [ML in the Wild](9-Real-World/README.md) | Depuración de modelos en Machine Learning usando componentes del panel de IA Responsable | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | +| 06 | Precios de calabazas en Norteamérica 🎃 | [Regresión](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 🎃 | [Regresión](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 🎃 | [Regresión](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 🔌 | [Aplicación Web](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 | [Clasificación](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 🍜 | [Clasificación](4-Classification/README.md) | Introducción a 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 🍜 | [Clasificación](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 🍜 | [Clasificación](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 gustos musicales nigerianos 🎧 | [Clustering](5-Clustering/README.md) | Explora el método 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 | Introducción al procesamiento de lenguaje natural ☕️ | [Procesamiento de lenguaje natural](6-NLP/README.md) | Aprende los conceptos básicos de NLP construyendo un bot simple | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Tareas comunes de NLP ☕️ | [Procesamiento de lenguaje natural](6-NLP/README.md) | Profundiza en tus conocimientos de NLP entendiendo tareas comunes al trabajar con estructuras de lenguaje | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Traducción y análisis de sentimientos ♥️ | [Procesamiento de lenguaje natural](6-NLP/README.md) | Traducción y análisis de sentimientos con Jane Austen | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Hoteles románticos de Europa ♥️ | [Procesamiento de lenguaje natural](6-NLP/README.md) | Análisis de sentimientos con reseñas de hoteles 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Hoteles románticos de Europa ♥️ | [Procesamiento de lenguaje natural](6-NLP/README.md) | Análisis de sentimientos 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 | [Series temporales](7-TimeSeries/README.md) | Introducción a la predicción de series temporales | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Uso mundial de energía ⚡️ - predicción con ARIMA | [Series temporales](7-TimeSeries/README.md) | Predicción de series temporales con ARIMA | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Uso mundial de energía ⚡️ - predicción con SVR | [Series temporales](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 | [Aprendizaje por refuerzo](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! 🐺 | [Aprendizaje por refuerzo](8-Reinforcement/README.md)| Gym de aprendizaje por refuerzo | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Escenarios y aplicaciones reales de ML | [ML en el mundo real](9-Real-World/README.md) | Aplicaciones interesantes y reveladoras de ML clásico | [Lección](9-Real-World/1-Applications/README.md) | Equipo | +| Postscript | Depuración de modelos de ML con el panel RAI | [ML en el mundo real](9-Real-World/README.md) | Depuración de modelos de Machine Learning usando componentes del panel de IA Responsable | [Lección](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) @@ -152,10 +152,9 @@ Puedes ejecutar esta documentación sin conexión usando [Docsify](https://docsi Encuentra un PDF del plan de estudios con enlaces [aquí](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). - ## 🎒 Otros Cursos -¡Nuestro equipo produce otros cursos! Descubre: +¡Nuestro equipo produce otros cursos! Echa un vistazo a: - [Generative AI for Beginners](https://aka.ms/genai-beginners) - [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) @@ -175,4 +174,4 @@ Encuentra un PDF del plan de estudios con enlaces [aquí](https://microsoft.gith --- **Descargo de responsabilidad**: -Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). Si bien nos esforzamos por garantizar la 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 malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file +Este documento ha sido traducido utilizando el servicio de traducción automática [Co-op Translator](https://github.com/Azure/co-op-translator). 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 como la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción. \ No newline at end of file diff --git a/translations/fa/1-Introduction/1-intro-to-ML/README.md b/translations/fa/1-Introduction/1-intro-to-ML/README.md index dd1c6765e..532f88b70 100644 --- a/translations/fa/1-Introduction/1-intro-to-ML/README.md +++ b/translations/fa/1-Introduction/1-intro-to-ML/README.md @@ -1,82 +1,82 @@ # مقدمه‌ای بر یادگیری ماشین -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) --- [![یادگیری ماشین برای مبتدیان - مقدمه‌ای بر یادگیری ماشین برای مبتدیان](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "یادگیری ماشین برای مبتدیان - مقدمه‌ای بر یادگیری ماشین برای مبتدیان") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره این درس مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا ویدئوی کوتاهی درباره این درس مشاهده کنید. -به این دوره آموزشی درباره یادگیری ماشین کلاسیک برای مبتدیان خوش آمدید! چه کاملاً تازه‌کار باشید و چه یک متخصص یادگیری ماشین که به دنبال مرور یک موضوع خاص است، خوشحالیم که به ما پیوسته‌اید! هدف ما ایجاد یک نقطه شروع دوستانه برای مطالعه یادگیری ماشین شماست و خوشحال می‌شویم بازخورد شما را ارزیابی، پاسخ داده و در این دوره بگنجانیم. [بازخورد خود را ارائه دهید](https://github.com/microsoft/ML-For-Beginners/discussions). +به این دوره آموزشی درباره یادگیری ماشین کلاسیک برای مبتدیان خوش آمدید! چه کاملاً تازه‌کار باشید و چه یک متخصص یادگیری ماشین که به دنبال مرور یک موضوع خاص است، خوشحالیم که به ما پیوسته‌اید! هدف ما ایجاد یک نقطه شروع دوستانه برای مطالعه یادگیری ماشین شماست و خوشحال می‌شویم بازخورد شما را [ارزیابی، پاسخ‌دهی و اعمال کنیم](https://github.com/microsoft/ML-For-Beginners/discussions). [![مقدمه‌ای بر یادگیری ماشین](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "مقدمه‌ای بر یادگیری ماشین") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیویی از جان گوتاگ از MIT درباره یادگیری ماشین مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا ویدئوی جان گوتاگ از 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 و جاوااسکریپت را یاد بگیرید**. ما همچنین چند بار در این دوره از جاوااسکریپت برای ساخت اپلیکیشن‌های وب استفاده می‌کنیم، بنابراین باید [node](https://nodejs.org) و [npm](https://www.npmjs.com/) نصب شده باشند و [Visual Studio Code](https://code.visualstudio.com/) برای توسعه پایتون و جاوااسکریپت در دسترس باشد. -- **یک حساب GitHub ایجاد کنید**. از آنجا که ما را در [GitHub](https://github.com) پیدا کرده‌اید، ممکن است قبلاً حساب داشته باشید، اما اگر ندارید، یکی ایجاد کنید و سپس این دوره را برای استفاده شخصی خود فورک کنید. (لطفاً به ما یک ستاره بدهید 😊) +- **کامپیوتر خود را با این ویدئوها تنظیم کنید**. از لینک‌های زیر استفاده کنید تا [نصب پایتون](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 را یاد بگیرید**. ما همچنین چند بار در این دوره از JavaScript برای ساخت اپلیکیشن‌های وب استفاده می‌کنیم، بنابراین باید [node](https://nodejs.org) و [npm](https://www.npmjs.com/) نصب شده باشند و [Visual Studio Code](https://code.visualstudio.com/) برای توسعه پایتون و JavaScript در دسترس باشد. +- **یک حساب GitHub ایجاد کنید**. از آنجا که ما را در [GitHub](https://github.com) پیدا کرده‌اید، ممکن است قبلاً حساب داشته باشید، اما اگر ندارید، یکی ایجاد کنید و سپس این دوره آموزشی را فورک کنید تا خودتان از آن استفاده کنید. (خوشحال می‌شویم اگر به ما یک ستاره بدهید 😊) - **Scikit-learn را بررسی کنید**. با [Scikit-learn](https://scikit-learn.org/stable/user_guide.html)، مجموعه‌ای از کتابخانه‌های یادگیری ماشین که در این درس‌ها به آنها اشاره می‌کنیم، آشنا شوید. --- ## یادگیری ماشین چیست؟ -اصطلاح "یادگیری ماشین" یکی از محبوب‌ترین و پرکاربردترین اصطلاحات امروز است. احتمال زیادی وجود دارد که حداقل یک بار این اصطلاح را شنیده باشید، اگر با فناوری آشنایی داشته باشید، فارغ از اینکه در چه حوزه‌ای کار می‌کنید. اما مکانیزم یادگیری ماشین برای اکثر افراد یک راز است. برای یک مبتدی در یادگیری ماشین، این موضوع گاهی اوقات می‌تواند گیج‌کننده باشد. بنابراین، مهم است که بفهمیم یادگیری ماشین واقعاً چیست و آن را گام به گام، از طریق مثال‌های عملی یاد بگیریم. +اصطلاح "یادگیری ماشین" یکی از محبوب‌ترین و پرکاربردترین اصطلاحات امروز است. احتمال زیادی وجود دارد که حداقل یک بار این اصطلاح را شنیده باشید، اگر با فناوری آشنایی داشته باشید، فارغ از اینکه در چه حوزه‌ای کار می‌کنید. اما مکانیزم یادگیری ماشین برای اکثر افراد یک راز است. برای یک مبتدی در یادگیری ماشین، این موضوع گاهی اوقات می‌تواند گیج‌کننده باشد. بنابراین، مهم است که بفهمیم یادگیری ماشین واقعاً چیست و آن را قدم به قدم، از طریق مثال‌های عملی یاد بگیریم. --- ## منحنی هیجان -![منحنی هیجان یادگیری ماشین](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.fa.png) +![منحنی هیجان یادگیری ماشین](../../../../1-Introduction/1-intro-to-ML/images/hype.png) -> Google Trends نشان‌دهنده "منحنی هیجان" اخیر اصطلاح "یادگیری ماشین" است. +> Google Trends منحنی هیجان اخیر اصطلاح "یادگیری ماشین" را نشان می‌دهد. --- ## جهانی اسرارآمیز -ما در جهانی پر از اسرار جذاب زندگی می‌کنیم. دانشمندان بزرگی مانند استیون هاوکینگ، آلبرت انیشتین و بسیاری دیگر زندگی خود را وقف جستجوی اطلاعات معناداری کرده‌اند که اسرار دنیای اطراف ما را آشکار می‌کند. این همان وضعیت انسانی یادگیری است: یک کودک انسان چیزهای جدیدی یاد می‌گیرد و ساختار دنیای خود را سال به سال با رشد به بزرگسالی کشف می‌کند. +ما در جهانی پر از اسرار جذاب زندگی می‌کنیم. دانشمندان بزرگی مانند استیون هاوکینگ، آلبرت انیشتین و بسیاری دیگر زندگی خود را وقف جستجوی اطلاعات معنادار کرده‌اند که اسرار دنیای اطراف ما را آشکار می‌کند. این همان وضعیت انسانی یادگیری است: یک کودک انسان چیزهای جدیدی یاد می‌گیرد و ساختار دنیای خود را سال به سال با رشد به بزرگسالی کشف می‌کند. --- ## مغز کودک -مغز و حواس یک کودک حقایق اطراف خود را درک می‌کنند و به تدریج الگوهای پنهان زندگی را یاد می‌گیرند که به کودک کمک می‌کند قوانین منطقی برای شناسایی الگوهای یادگرفته شده بسازد. فرآیند یادگیری مغز انسان، انسان‌ها را به پیچیده‌ترین موجودات زنده این دنیا تبدیل کرده است. یادگیری مداوم با کشف الگوهای پنهان و سپس نوآوری بر اساس آن الگوها به ما امکان می‌دهد که در طول زندگی خود بهتر و بهتر شویم. این ظرفیت یادگیری و قابلیت تکامل به مفهومی به نام [انعطاف‌پذیری مغز](https://www.simplypsychology.org/brain-plasticity.html) مرتبط است. به طور سطحی، می‌توانیم برخی شباهت‌های انگیزشی بین فرآیند یادگیری مغز انسان و مفاهیم یادگیری ماشین ترسیم کنیم. +مغز و حواس یک کودک حقایق اطراف خود را درک می‌کنند و به تدریج الگوهای پنهان زندگی را یاد می‌گیرند که به کودک کمک می‌کند قوانین منطقی برای شناسایی الگوهای یادگرفته شده بسازد. فرآیند یادگیری مغز انسان، انسان‌ها را به پیچیده‌ترین موجودات زنده این دنیا تبدیل کرده است. یادگیری مداوم با کشف الگوهای پنهان و سپس نوآوری بر اساس آن الگوها به ما امکان می‌دهد که در طول زندگی خود بهتر و بهتر شویم. این ظرفیت یادگیری و قابلیت تکامل به مفهومی به نام [انعطاف‌پذیری مغز](https://www.simplypsychology.org/brain-plasticity.html) مرتبط است. به طور سطحی، می‌توانیم شباهت‌های انگیزشی بین فرآیند یادگیری مغز انسان و مفاهیم یادگیری ماشین ترسیم کنیم. --- ## مغز انسان -[مغز انسان](https://www.livescience.com/29365-human-brain.html) چیزهایی را از دنیای واقعی درک می‌کند، اطلاعات درک‌شده را پردازش می‌کند، تصمیمات منطقی می‌گیرد و بر اساس شرایط اقدامات خاصی انجام می‌دهد. این همان چیزی است که ما آن را رفتار هوشمندانه می‌نامیم. وقتی فرآیند رفتار هوشمندانه را به صورت مصنوعی به یک ماشین برنامه‌ریزی کنیم، به آن هوش مصنوعی (AI) می‌گویند. +[مغز انسان](https://www.livescience.com/29365-human-brain.html) چیزهایی را از دنیای واقعی درک می‌کند، اطلاعات درک‌شده را پردازش می‌کند، تصمیمات منطقی می‌گیرد و بر اساس شرایط اقدامات خاصی انجام می‌دهد. این همان چیزی است که ما آن را رفتار هوشمندانه می‌نامیم. وقتی فرآیند رفتار هوشمندانه را به صورت مصنوعی به یک ماشین برنامه‌ریزی می‌کنیم، به آن هوش مصنوعی (AI) می‌گویند. --- ## برخی اصطلاحات -اگرچه ممکن است این اصطلاحات گیج‌کننده باشند، یادگیری ماشین (ML) یک زیرمجموعه مهم از هوش مصنوعی است. **یادگیری ماشین به استفاده از الگوریتم‌های تخصصی برای کشف اطلاعات معنادار و یافتن الگوهای پنهان از داده‌های درک‌شده برای تأیید فرآیند تصمیم‌گیری منطقی می‌پردازد**. +اگرچه این اصطلاحات ممکن است گیج‌کننده باشند، یادگیری ماشین (ML) یک زیرمجموعه مهم از هوش مصنوعی است. **یادگیری ماشین به استفاده از الگوریتم‌های تخصصی برای کشف اطلاعات معنادار و یافتن الگوهای پنهان از داده‌های درک‌شده برای تأیید فرآیند تصمیم‌گیری منطقی می‌پردازد**. --- ## هوش مصنوعی، یادگیری ماشین، یادگیری عمیق -![هوش مصنوعی، یادگیری ماشین، یادگیری عمیق، علم داده](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.fa.png) +![هوش مصنوعی، یادگیری ماشین، یادگیری عمیق، علم داده](../../../../1-Introduction/1-intro-to-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، یک کتابخانه عالی که بسیاری از دانش‌آموزان برای یادگیری اصول استفاده می‌کنند، بررسی می‌کنیم. برای درک مفاهیم گسترده‌تر هوش مصنوعی یا یادگیری عمیق، داشتن دانش بنیادی قوی از یادگیری ماشین ضروری است، و ما قصد داریم آن را در اینجا ارائه دهیم. +در این دوره آموزشی، ما فقط مفاهیم اصلی یادگیری ماشین را که یک مبتدی باید بداند پوشش می‌دهیم. ما چیزی را که "یادگیری ماشین کلاسیک" می‌نامیم، عمدتاً با استفاده از Scikit-learn، یک کتابخانه عالی که بسیاری از دانش‌آموزان برای یادگیری اصول استفاده می‌کنند، آموزش می‌دهیم. برای درک مفاهیم گسترده‌تر هوش مصنوعی یا یادگیری عمیق، داشتن دانش بنیادی قوی از یادگیری ماشین ضروری است، و ما قصد داریم آن را در اینجا ارائه دهیم. --- ## در این دوره شما یاد خواهید گرفت: @@ -99,16 +99,16 @@ CO_OP_TRANSLATOR_METADATA: - شبکه‌های عصبی - هوش مصنوعی -برای تجربه یادگیری بهتر، از پیچیدگی‌های شبکه‌های عصبی، یادگیری عمیق - ساخت مدل‌های چندلایه با استفاده از شبکه‌های عصبی - و هوش مصنوعی اجتناب خواهیم کرد، که در یک دوره آموزشی دیگر به آن‌ها خواهیم پرداخت. همچنین یک دوره آموزشی آینده درباره علم داده ارائه خواهیم داد تا بر این جنبه از این حوزه بزرگ‌تر تمرکز کنیم. +برای تجربه یادگیری بهتر، از پیچیدگی‌های شبکه‌های عصبی، یادگیری عمیق - مدل‌سازی چندلایه با استفاده از شبکه‌های عصبی - و هوش مصنوعی اجتناب خواهیم کرد، که در یک دوره آموزشی دیگر به آن‌ها خواهیم پرداخت. همچنین یک دوره آموزشی آینده درباره علم داده ارائه خواهیم داد تا بر جنبه‌های این حوزه بزرگ‌تر تمرکز کنیم. --- ## چرا یادگیری ماشین مطالعه کنیم؟ یادگیری ماشین، از دیدگاه سیستمی، به عنوان ایجاد سیستم‌های خودکار تعریف می‌شود که می‌توانند الگوهای پنهان را از داده‌ها یاد بگیرند تا به تصمیم‌گیری هوشمندانه کمک کنند. -این انگیزه به طور آزادانه از نحوه یادگیری مغز انسان برخی چیزها بر اساس داده‌هایی که از دنیای بیرونی درک می‌کند، الهام گرفته شده است. +این انگیزه به طور کلی از نحوه یادگیری مغز انسان بر اساس داده‌هایی که از دنیای بیرون درک می‌کند، الهام گرفته شده است. -✅ برای یک لحظه فکر کنید که چرا یک کسب‌وکار ممکن است بخواهد از استراتژی‌های یادگیری ماشین استفاده کند به جای ایجاد یک موتور مبتنی بر قوانین سخت‌کد شده. +✅ برای یک دقیقه فکر کنید که چرا یک کسب‌وکار ممکن است بخواهد از استراتژی‌های یادگیری ماشین استفاده کند در مقابل ایجاد یک موتور مبتنی بر قوانین سخت‌کد شده. --- ## کاربردهای یادگیری ماشین @@ -121,7 +121,7 @@ CO_OP_TRANSLATOR_METADATA: **شما می‌توانید یادگیری ماشین را به روش‌های مختلفی استفاده کنید**: - پیش‌بینی احتمال بیماری از تاریخچه پزشکی یا گزارش‌های بیمار. -- استفاده از داده‌های هواشناسی برای پیش‌بینی رویدادهای آب‌وهوایی. +- استفاده از داده‌های هواشناسی برای پیش‌بینی رویدادهای جوی. - درک احساسات یک متن. - شناسایی اخبار جعلی برای جلوگیری از انتشار تبلیغات. @@ -137,9 +137,9 @@ CO_OP_TRANSLATOR_METADATA: --- # 🚀 چالش -در یک کاغذ یا با استفاده از یک اپلیکیشن آنلاین مانند [Excalidraw](https://excalidraw.com/)، تفاوت‌های بین هوش مصنوعی، یادگیری ماشین، یادگیری عمیق و علم داده را ترسیم کنید. برخی ایده‌ها درباره مشکلاتی که هر یک از این تکنیک‌ها در حل آن‌ها خوب هستند اضافه کنید. +در یک کاغذ یا با استفاده از یک اپلیکیشن آنلاین مانند [Excalidraw](https://excalidraw.com/)، تفاوت‌های بین هوش مصنوعی، یادگیری ماشین، یادگیری عمیق و علم داده را ترسیم کنید. برخی از ایده‌های مشکلاتی که هر یک از این تکنیک‌ها برای حل آن‌ها مناسب هستند را اضافه کنید. -# [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/2/) +# [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) --- # مرور و مطالعه شخصی diff --git a/translations/fa/1-Introduction/2-history-of-ML/README.md b/translations/fa/1-Introduction/2-history-of-ML/README.md index a399fd1f3..629f5c978 100644 --- a/translations/fa/1-Introduction/2-history-of-ML/README.md +++ b/translations/fa/1-Introduction/2-history-of-ML/README.md @@ -1,152 +1,152 @@ # تاریخچه یادگیری ماشین -![خلاصه‌ای از تاریخچه یادگیری ماشین در یک اسکیچ‌نوت](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.fa.png) -> اسکیچ‌نوت توسط [تومومی ایمورا](https://www.twitter.com/girlie_mac) +![خلاصه‌ای از تاریخچه یادگیری ماشین در یک اسکچ‌نوت](../../../../sketchnotes/ml-history.png) +> اسکچ‌نوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) --- [![یادگیری ماشین برای مبتدیان - تاریخچه یادگیری ماشین](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "یادگیری ماشین برای مبتدیان - تاریخچه یادگیری ماشین") -> 🎥 برای مشاهده ویدئوی کوتاهی که این درس را توضیح می‌دهد، روی تصویر بالا کلیک کنید. +> 🎥 روی تصویر بالا کلیک کنید تا ویدئوی کوتاهی درباره این درس مشاهده کنید. در این درس، به بررسی نقاط عطف مهم در تاریخچه یادگیری ماشین و هوش مصنوعی خواهیم پرداخت. -تاریخچه هوش مصنوعی (AI) به عنوان یک حوزه علمی با تاریخچه یادگیری ماشین در هم تنیده است، زیرا الگوریتم‌ها و پیشرفت‌های محاسباتی که زیربنای یادگیری ماشین هستند، به توسعه هوش مصنوعی کمک کرده‌اند. به یاد داشته باشید که اگرچه این حوزه‌ها به عنوان زمینه‌های مجزا از دهه ۱۹۵۰ شکل گرفتند، اما [کشفیات الگوریتمی، آماری، ریاضیاتی، محاسباتی و فنی](https://wikipedia.org/wiki/Timeline_of_machine_learning) مهمی پیش از این دوره رخ داده و با آن همپوشانی داشته‌اند. در واقع، انسان‌ها برای [صدها سال](https://wikipedia.org/wiki/History_of_artificial_intelligence) به این سوالات فکر کرده‌اند: این مقاله به بررسی پایه‌های فکری تاریخی ایده «ماشین متفکر» می‌پردازد. +تاریخچه هوش مصنوعی (AI) به عنوان یک حوزه علمی با تاریخچه یادگیری ماشین در هم تنیده است، زیرا الگوریتم‌ها و پیشرفت‌های محاسباتی که پایه یادگیری ماشین را تشکیل می‌دهند، به توسعه هوش مصنوعی کمک کرده‌اند. لازم است به یاد داشته باشیم که اگرچه این حوزه‌ها به عنوان زمینه‌های تحقیقاتی مستقل از دهه ۱۹۵۰ شکل گرفتند، کشفیات مهم [الگوریتمی، آماری، ریاضیاتی، محاسباتی و تکنیکی](https://wikipedia.org/wiki/Timeline_of_machine_learning) پیش از این دوره و در طول آن رخ داده‌اند. در واقع، انسان‌ها صدها سال است که به این سوالات فکر می‌کنند. این مقاله به بررسی پایه‌های فکری تاریخی ایده "ماشین فکر کننده" می‌پردازد. --- ## کشفیات برجسته -- ۱۷۶۳، ۱۸۱۲ [قضیه بیز](https://wikipedia.org/wiki/Bayes%27_theorem) و پیشینیان آن. این قضیه و کاربردهای آن زیربنای استنتاج را تشکیل می‌دهند و احتمال وقوع یک رویداد را بر اساس دانش قبلی توصیف می‌کنند. -- ۱۸۰۵ [نظریه کمترین مربعات](https://wikipedia.org/wiki/Least_squares) توسط ریاضیدان فرانسوی آدریان-ماری لژاندر. این نظریه که در واحد رگرسیون یاد خواهید گرفت، به برازش داده‌ها کمک می‌کند. -- ۱۹۱۳ [زنجیره‌های مارکوف](https://wikipedia.org/wiki/Markov_chain)، که به نام ریاضیدان روسی آندری مارکوف نام‌گذاری شده است، برای توصیف دنباله‌ای از رویدادهای ممکن بر اساس یک حالت قبلی استفاده می‌شود. -- ۱۹۵۷ [پرسیپترون](https://wikipedia.org/wiki/Perceptron) نوعی طبقه‌بند خطی است که توسط روانشناس آمریکایی فرانک روزنبلات اختراع شد و زیربنای پیشرفت‌های یادگیری عمیق است. +- ۱۷۶۳، ۱۸۱۲ [قضیه بیز](https://wikipedia.org/wiki/Bayes%27_theorem) و پیشینیان آن. این قضیه و کاربردهای آن پایه استنتاج را تشکیل می‌دهند و احتمال وقوع یک رویداد را بر اساس دانش قبلی توصیف می‌کنند. +- ۱۸۰۵ [نظریه کمترین مربعات](https://wikipedia.org/wiki/Least_squares) توسط ریاضیدان فرانسوی آدرین-ماری لژاندر. این نظریه که در واحد رگرسیون یاد خواهید گرفت، به تطبیق داده‌ها کمک می‌کند. +- ۱۹۱۳ [زنجیره‌های مارکوف](https://wikipedia.org/wiki/Markov_chain)، نام‌گذاری شده به افتخار ریاضیدان روسی آندری مارکوف، برای توصیف دنباله‌ای از رویدادهای ممکن بر اساس حالت قبلی استفاده می‌شود. +- ۱۹۵۷ [پرسیپترون](https://wikipedia.org/wiki/Perceptron) نوعی طبقه‌بند خطی است که توسط روانشناس آمریکایی فرانک روزنبلات اختراع شد و پایه پیشرفت‌های یادگیری عمیق را تشکیل می‌دهد. --- -- ۱۹۶۷ [نزدیک‌ترین همسایه](https://wikipedia.org/wiki/Nearest_neighbor) الگوریتمی است که در ابتدا برای مسیریابی طراحی شد. در زمینه یادگیری ماشین، برای شناسایی الگوها استفاده می‌شود. -- ۱۹۷۰ [پس‌انتشار خطا](https://wikipedia.org/wiki/Backpropagation) برای آموزش [شبکه‌های عصبی پیش‌خور](https://wikipedia.org/wiki/Feedforward_neural_network) استفاده می‌شود. -- ۱۹۸۲ [شبکه‌های عصبی بازگشتی](https://wikipedia.org/wiki/Recurrent_neural_network) شبکه‌های عصبی مصنوعی هستند که از شبکه‌های عصبی پیش‌خور مشتق شده‌اند و گراف‌های زمانی ایجاد می‌کنند. +- ۱۹۶۷ [نزدیک‌ترین همسایه](https://wikipedia.org/wiki/Nearest_neighbor) الگوریتمی است که در ابتدا برای نقشه‌برداری مسیرها طراحی شده بود. در زمینه یادگیری ماشین برای تشخیص الگوها استفاده می‌شود. +- ۱۹۷۰ [پس‌انتشار](https://wikipedia.org/wiki/Backpropagation) برای آموزش [شبکه‌های عصبی پیش‌خور](https://wikipedia.org/wiki/Feedforward_neural_network) استفاده می‌شود. +- ۱۹۸۲ [شبکه‌های عصبی بازگشتی](https://wikipedia.org/wiki/Recurrent_neural_network) شبکه‌های عصبی مصنوعی مشتق شده از شبکه‌های عصبی پیش‌خور هستند که نمودارهای زمانی ایجاد می‌کنند. -✅ کمی تحقیق کنید. چه تاریخ‌های دیگری به عنوان نقاط عطف در تاریخ یادگیری ماشین و هوش مصنوعی برجسته هستند؟ +✅ کمی تحقیق کنید. چه تاریخ‌های دیگری به عنوان نقاط عطف در تاریخچه یادگیری ماشین و هوش مصنوعی برجسته هستند؟ --- ## ۱۹۵۰: ماشین‌هایی که فکر می‌کنند -آلن تورینگ، فردی واقعاً شگفت‌انگیز که [در سال ۲۰۱۹ توسط عموم مردم](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) به عنوان بزرگ‌ترین دانشمند قرن بیستم انتخاب شد، به عنوان کسی که به شکل‌گیری مفهوم «ماشینی که می‌تواند فکر کند» کمک کرد، شناخته می‌شود. او با مخالفان و نیاز خود به شواهد تجربی برای این مفهوم دست و پنجه نرم کرد و بخشی از این کار را با ایجاد [آزمون تورینگ](https://www.bbc.com/news/technology-18475646) انجام داد که در درس‌های پردازش زبان طبیعی (NLP) به آن خواهید پرداخت. +آلن تورینگ، فردی واقعاً خارق‌العاده که [در سال ۲۰۱۹ توسط عموم مردم](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) به عنوان بزرگ‌ترین دانشمند قرن بیستم انتخاب شد، به عنوان کسی که به ایجاد مفهوم "ماشینی که می‌تواند فکر کند" کمک کرد، شناخته می‌شود. او با مخالفان و نیاز خود به شواهد تجربی برای این مفهوم دست و پنجه نرم کرد و بخشی از این تلاش‌ها را با ایجاد [آزمون تورینگ](https://www.bbc.com/news/technology-18475646) انجام داد که در درس‌های پردازش زبان طبیعی (NLP) به آن پرداخته خواهد شد. --- ## ۱۹۵۶: پروژه تحقیقاتی تابستانی دارتموث -"پروژه تحقیقاتی تابستانی دارتموث در زمینه هوش مصنوعی یک رویداد مهم برای هوش مصنوعی به عنوان یک حوزه علمی بود" و در اینجا بود که اصطلاح «هوش مصنوعی» ابداع شد ([منبع](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). +"پروژه تحقیقاتی تابستانی دارتموث در زمینه هوش مصنوعی یک رویداد مهم برای هوش مصنوعی به عنوان یک حوزه علمی بود" و در اینجا بود که اصطلاح "هوش مصنوعی" ابداع شد ([منبع](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). -> هر جنبه‌ای از یادگیری یا هر ویژگی دیگر هوش را می‌توان به گونه‌ای دقیق توصیف کرد که بتوان ماشینی ساخت که آن را شبیه‌سازی کند. +> هر جنبه‌ای از یادگیری یا هر ویژگی دیگر هوش به طور اصولی می‌تواند به گونه‌ای دقیق توصیف شود که یک ماشین بتواند آن را شبیه‌سازی کند. --- -محقق اصلی، پروفسور ریاضیات جان مک‌کارتی، امیدوار بود "بر اساس این فرضیه پیش برود که هر جنبه‌ای از یادگیری یا هر ویژگی دیگر هوش را می‌توان به گونه‌ای دقیق توصیف کرد که ماشینی بتواند آن را شبیه‌سازی کند." شرکت‌کنندگان شامل یکی دیگر از بزرگان این حوزه، ماروین مینسکی، بودند. +محقق اصلی، پروفسور ریاضیات جان مک‌کارتی، امیدوار بود "بر اساس این فرضیه پیش برود که هر جنبه‌ای از یادگیری یا هر ویژگی دیگر هوش به طور اصولی می‌تواند به گونه‌ای دقیق توصیف شود که یک ماشین بتواند آن را شبیه‌سازی کند." شرکت‌کنندگان شامل یکی دیگر از بزرگان این حوزه، ماروین مینسکی، بودند. -این کارگاه به آغاز و تشویق چندین بحث از جمله "ظهور روش‌های نمادین، سیستم‌های متمرکز بر حوزه‌های محدود (سیستم‌های خبره اولیه) و سیستم‌های استنتاجی در مقابل سیستم‌های استقرایی" اعتبار داده شده است ([منبع](https://wikipedia.org/wiki/Dartmouth_workshop)). +این کارگاه به آغاز و تشویق چندین بحث از جمله "ظهور روش‌های نمادین، سیستم‌های متمرکز بر حوزه‌های محدود (سیستم‌های خبره اولیه)، و سیستم‌های استنتاجی در مقابل سیستم‌های استقرایی" اعتبار داده شده است ([منبع](https://wikipedia.org/wiki/Dartmouth_workshop)). --- ## ۱۹۵۶ - ۱۹۷۴: "سال‌های طلایی" -از دهه ۱۹۵۰ تا اواسط دهه ۱۹۷۰، خوش‌بینی زیادی وجود داشت که هوش مصنوعی می‌تواند بسیاری از مشکلات را حل کند. در سال ۱۹۶۷، ماروین مینسکی با اطمینان اعلام کرد که "در عرض یک نسل ... مشکل ایجاد 'هوش مصنوعی' به طور اساسی حل خواهد شد." (مینسکی، ماروین (۱۹۶۷)، محاسبات: ماشین‌های محدود و نامحدود، انگلوود کلیفس، نیوجرسی: پرنتیس-هال) +از دهه ۱۹۵۰ تا اواسط دهه ۷۰، خوش‌بینی زیادی وجود داشت که هوش مصنوعی می‌تواند بسیاری از مشکلات را حل کند. در سال ۱۹۶۷، ماروین مینسکی با اطمینان بیان کرد که "در یک نسل ... مشکل ایجاد 'هوش مصنوعی' به طور قابل توجهی حل خواهد شد." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) -تحقیقات پردازش زبان طبیعی رونق گرفت، جستجو بهبود یافت و قدرتمندتر شد، و مفهوم «جهان‌های کوچک» ایجاد شد، جایی که وظایف ساده با استفاده از دستورالعمل‌های زبان ساده انجام می‌شد. +تحقیقات پردازش زبان طبیعی شکوفا شد، جستجو بهبود یافت و قدرتمندتر شد، و مفهوم "جهان‌های کوچک" ایجاد شد، جایی که وظایف ساده با استفاده از دستورالعمل‌های زبان ساده انجام می‌شد. --- -تحقیقات توسط آژانس‌های دولتی به خوبی تأمین مالی شد، پیشرفت‌هایی در محاسبات و الگوریتم‌ها حاصل شد، و نمونه‌های اولیه ماشین‌های هوشمند ساخته شدند. برخی از این ماشین‌ها عبارتند از: +تحقیقات توسط آژانس‌های دولتی به خوبی تأمین مالی شد، پیشرفت‌هایی در محاسبات و الگوریتم‌ها صورت گرفت، و نمونه‌های اولیه ماشین‌های هوشمند ساخته شدند. برخی از این ماشین‌ها شامل موارد زیر هستند: -* [ربات شیکی](https://wikipedia.org/wiki/Shakey_the_robot)، که می‌توانست به طور هوشمندانه حرکت کند و تصمیم بگیرد که چگونه وظایف را انجام دهد. +* [ربات شیکی](https://wikipedia.org/wiki/Shakey_the_robot)، که می‌توانست به طور هوشمند حرکت کند و تصمیم بگیرد که چگونه وظایف را انجام دهد. - ![شیکی، یک ربات هوشمند](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.fa.jpg) + ![شیکی، یک ربات هوشمند](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > شیکی در سال ۱۹۷۲ --- -* الیزا، یک «چت‌بات» اولیه، می‌توانست با مردم گفتگو کند و به عنوان یک «روان‌درمانگر» ابتدایی عمل کند. در درس‌های NLP بیشتر درباره الیزا خواهید آموخت. +* الیزا، یک "چتر‌بات" اولیه، می‌توانست با مردم گفتگو کند و به عنوان یک "درمانگر" ابتدایی عمل کند. در درس‌های NLP بیشتر درباره الیزا خواهید آموخت. - ![الیزا، یک ربات گفتگو](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.fa.png) - > نسخه‌ای از الیزا، یک چت‌بات + ![الیزا، یک بات](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > نسخه‌ای از الیزا، یک چتر‌بات --- -* "جهان بلوک‌ها" نمونه‌ای از یک جهان کوچک بود که در آن بلوک‌ها می‌توانستند چیده و مرتب شوند و آزمایش‌هایی در آموزش ماشین‌ها برای تصمیم‌گیری انجام می‌شد. پیشرفت‌هایی که با کتابخانه‌هایی مانند [SHRDLU](https://wikipedia.org/wiki/SHRDLU) حاصل شد، به پیشبرد پردازش زبان کمک کرد. +* "جهان بلوک‌ها" نمونه‌ای از یک جهان کوچک بود که در آن بلوک‌ها می‌توانستند انباشته و مرتب شوند، و آزمایش‌هایی در آموزش ماشین‌ها برای تصمیم‌گیری انجام می‌شد. پیشرفت‌هایی که با کتابخانه‌هایی مانند [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ساخته شدند، به پیشبرد پردازش زبان کمک کردند. [![جهان بلوک‌ها با SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "جهان بلوک‌ها با SHRDLU") - > 🎥 برای مشاهده ویدئو کلیک کنید: جهان بلوک‌ها با SHRDLU + > 🎥 روی تصویر بالا کلیک کنید تا ویدئویی درباره جهان بلوک‌ها با SHRDLU مشاهده کنید. --- ## ۱۹۷۴ - ۱۹۸۰: "زمستان هوش مصنوعی" -تا اواسط دهه ۱۹۷۰، مشخص شد که پیچیدگی ساخت ماشین‌های «هوشمند» دست کم گرفته شده و وعده‌های آن، با توجه به قدرت محاسباتی موجود، بیش از حد بزرگ‌نمایی شده است. تأمین مالی کاهش یافت و اعتماد به این حوزه کاهش یافت. برخی از مسائلی که بر اعتماد تأثیر گذاشتند عبارت بودند از: +تا اواسط دهه ۱۹۷۰، مشخص شد که پیچیدگی ساخت ماشین‌های "هوشمند" کمتر از حد تصور شده و وعده‌های آن، با توجه به قدرت محاسبات موجود، بیش از حد بزرگ‌نمایی شده است. بودجه کاهش یافت و اعتماد به این حوزه کاهش یافت. برخی از مشکلاتی که بر اعتماد تأثیر گذاشتند شامل موارد زیر بودند: --- - **محدودیت‌ها**. قدرت محاسباتی بسیار محدود بود. -- **انفجار ترکیبی**. تعداد پارامترهایی که باید آموزش داده می‌شد، به صورت نمایی افزایش یافت، بدون اینکه قدرت و قابلیت محاسباتی به موازات آن تکامل یابد. -- **کمبود داده**. کمبود داده فرآیند آزمایش، توسعه و بهبود الگوریتم‌ها را مختل کرد. -- **آیا سوالات درستی می‌پرسیم؟**. خود سوالاتی که مطرح می‌شدند، زیر سوال رفتند. محققان با انتقاداتی درباره رویکردهایشان مواجه شدند: - - آزمون‌های تورینگ با نظریاتی مانند «اتاق چینی» زیر سوال رفتند که مطرح می‌کرد، "برنامه‌نویسی یک کامپیوتر دیجیتال ممکن است باعث شود که به نظر برسد زبان را می‌فهمد، اما نمی‌تواند درک واقعی ایجاد کند." ([منبع](https://plato.stanford.edu/entries/chinese-room/)) - - اخلاق معرفی هوش مصنوعی‌هایی مانند «روان‌درمانگر» الیزا به جامعه به چالش کشیده شد. +- **انفجار ترکیبی**. تعداد پارامترهایی که باید آموزش داده می‌شدند به صورت نمایی افزایش یافت، بدون اینکه قدرت و قابلیت محاسباتی به موازات آن تکامل یابد. +- **کمبود داده**. کمبود داده فرآیند آزمایش، توسعه و اصلاح الگوریتم‌ها را مختل کرد. +- **آیا سوالات درستی می‌پرسیم؟**. خود سوالاتی که مطرح می‌شدند مورد سوال قرار گرفتند. محققان شروع به دریافت انتقاداتی درباره رویکردهای خود کردند: + - آزمون‌های تورینگ با نظریه‌هایی مانند "اتاق چینی" زیر سوال رفتند که مطرح می‌کردند "برنامه‌ریزی یک کامپیوتر دیجیتال ممکن است باعث شود که به نظر برسد زبان را می‌فهمد، اما نمی‌تواند فهم واقعی ایجاد کند." ([منبع](https://plato.stanford.edu/entries/chinese-room/)) + - اخلاق معرفی هوش‌های مصنوعی مانند "درمانگر" الیزا به جامعه به چالش کشیده شد. --- -در همین زمان، مدارس مختلف فکری در زمینه هوش مصنوعی شکل گرفتند. یک دوگانگی بین [روش‌های "شلخته" و "مرتب"](https://wikipedia.org/wiki/Neats_and_scruffies) ایجاد شد. آزمایشگاه‌های _شلخته_ برنامه‌ها را تا رسیدن به نتایج دلخواه تنظیم می‌کردند. آزمایشگاه‌های _مرتب_ "بر منطق و حل مسئله رسمی تمرکز داشتند". الیزا و SHRDLU سیستم‌های _شلخته_ شناخته‌شده‌ای بودند. در دهه ۱۹۸۰، با افزایش تقاضا برای بازتولیدپذیری سیستم‌های یادگیری ماشین، رویکرد _مرتب_ به تدریج پیشتاز شد زیرا نتایج آن توضیح‌پذیرتر بودند. +در همین زمان، مدارس مختلف هوش مصنوعی شروع به شکل‌گیری کردند. یک دوگانگی بین روش‌های ["شلوغ" و "مرتب"](https://wikipedia.org/wiki/Neats_and_scruffies) ایجاد شد. آزمایشگاه‌های _شلوغ_ برنامه‌ها را تا رسیدن به نتایج مطلوب تنظیم می‌کردند. آزمایشگاه‌های _مرتب_ "بر منطق و حل مسئله رسمی تمرکز داشتند". الیزا و SHRDLU سیستم‌های _شلوغ_ شناخته‌شده‌ای بودند. در دهه ۱۹۸۰، با ظهور تقاضا برای قابل‌تکرار بودن سیستم‌های یادگیری ماشین، رویکرد _مرتب_ به تدریج پیشرفت کرد زیرا نتایج آن قابل توضیح‌تر بودند. --- ## سیستم‌های خبره دهه ۱۹۸۰ -با رشد این حوزه، مزایای آن برای کسب‌وکارها آشکارتر شد و در دهه ۱۹۸۰ سیستم‌های «خبره» گسترش یافتند. "سیستم‌های خبره از اولین اشکال موفق نرم‌افزار هوش مصنوعی (AI) بودند." ([منبع](https://wikipedia.org/wiki/Expert_system)). +با رشد این حوزه، مزایای آن برای کسب‌وکارها واضح‌تر شد و در دهه ۱۹۸۰ سیستم‌های "خبره" گسترش یافتند. "سیستم‌های خبره از اولین اشکال واقعاً موفق نرم‌افزار هوش مصنوعی (AI) بودند." ([منبع](https://wikipedia.org/wiki/Expert_system)). -این نوع سیستم در واقع _ترکیبی_ بود، که بخشی از آن شامل یک موتور قوانین برای تعریف نیازهای کسب‌وکار و بخشی دیگر شامل یک موتور استنتاج بود که از سیستم قوانین برای استنتاج حقایق جدید استفاده می‌کرد. +این نوع سیستم در واقع _ترکیبی_ است، که بخشی از آن شامل یک موتور قوانین برای تعریف نیازهای کسب‌وکار و یک موتور استنتاج است که از سیستم قوانین برای استنتاج حقایق جدید استفاده می‌کند. این دوره همچنین شاهد توجه بیشتر به شبکه‌های عصبی بود. --- -## ۱۹۸۷ - ۱۹۹۳: "سرمای هوش مصنوعی" +## ۱۹۸۷ - ۱۹۹۳: "سردی هوش مصنوعی" -گسترش سخت‌افزارهای تخصصی سیستم‌های خبره اثر نامطلوبی داشت و بیش از حد تخصصی شد. ظهور کامپیوترهای شخصی نیز با این سیستم‌های بزرگ، تخصصی و متمرکز رقابت کرد. دموکراتیزه شدن محاسبات آغاز شد و در نهایت راه را برای انفجار مدرن داده‌های بزرگ هموار کرد. +گسترش سخت‌افزارهای تخصصی سیستم‌های خبره اثر ناخوشایندی داشت و بیش از حد تخصصی شد. ظهور کامپیوترهای شخصی نیز با این سیستم‌های بزرگ، تخصصی و متمرکز رقابت کرد. دموکراتیزه شدن محاسبات آغاز شد و در نهایت راه را برای انفجار مدرن داده‌های بزرگ هموار کرد. --- ## ۱۹۹۳ - ۲۰۱۱ -این دوره شاهد عصر جدیدی برای یادگیری ماشین و هوش مصنوعی بود که توانست برخی از مشکلات ناشی از کمبود داده و قدرت محاسباتی را حل کند. حجم داده‌ها به سرعت افزایش یافت و به طور گسترده‌تری در دسترس قرار گرفت، چه خوب و چه بد، به ویژه با ظهور گوشی‌های هوشمند در حدود سال ۲۰۰۷. قدرت محاسباتی به صورت نمایی گسترش یافت و الگوریتم‌ها نیز همراه با آن تکامل یافتند. این حوزه شروع به بلوغ کرد زیرا روزهای آزاد و بی‌قید گذشته به تدریج به یک رشته علمی واقعی تبدیل شد. +این دوره شاهد عصر جدیدی برای یادگیری ماشین و هوش مصنوعی بود که توانست برخی از مشکلات ناشی از کمبود داده و قدرت محاسباتی را حل کند. مقدار داده‌ها به سرعت افزایش یافت و در دسترس‌تر شد، چه خوب و چه بد، به ویژه با ظهور گوشی‌های هوشمند در حدود سال ۲۰۰۷. قدرت محاسباتی به صورت نمایی گسترش یافت و الگوریتم‌ها نیز همراه با آن تکامل یافتند. این حوزه شروع به بلوغ کرد زیرا روزهای آزاد گذشته به تدریج به یک رشته واقعی تبدیل شدند. --- ## اکنون -امروزه یادگیری ماشین و هوش مصنوعی تقریباً در تمام جنبه‌های زندگی ما حضور دارند. این دوره نیازمند درک دقیق خطرات و اثرات بالقوه این الگوریتم‌ها بر زندگی انسان‌ها است. همان‌طور که برد اسمیت از مایکروسافت بیان کرده است: "فناوری اطلاعات مسائلی را مطرح می‌کند که به قلب حفاظت از حقوق اساسی بشر مانند حریم خصوصی و آزادی بیان می‌پردازد. این مسائل مسئولیت شرکت‌های فناوری که این محصولات را ایجاد می‌کنند، افزایش می‌دهد. به نظر ما، این مسائل همچنین نیازمند مقررات دولتی مدبرانه و توسعه هنجارهایی در مورد استفاده‌های قابل قبول است" ([منبع](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). +امروزه یادگیری ماشین و هوش مصنوعی تقریباً هر بخش از زندگی ما را لمس می‌کنند. این دوره نیازمند درک دقیق خطرات و اثرات بالقوه این الگوریتم‌ها بر زندگی انسان‌ها است. همان‌طور که برد اسمیت از مایکروسافت بیان کرده است: "فناوری اطلاعات مسائلی را مطرح می‌کند که به قلب حفاظت از حقوق اساسی انسانی مانند حریم خصوصی و آزادی بیان می‌پردازد. این مسائل مسئولیت شرکت‌های فناوری که این محصولات را ایجاد می‌کنند را افزایش می‌دهد. به نظر ما، این مسائل همچنین نیازمند مقررات دولتی متفکرانه و توسعه هنجارهایی در مورد استفاده‌های قابل قبول هستند." ([منبع](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/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) --- ## مرور و مطالعه شخصی -موارد زیر را مشاهده و گوش دهید: +مواردی برای مشاهده و گوش دادن: [این پادکست که در آن امی بوید درباره تکامل هوش مصنوعی صحبت می‌کند](http://runasradio.com/Shows/Show/739) diff --git a/translations/fa/1-Introduction/3-fairness/README.md b/translations/fa/1-Introduction/3-fairness/README.md index 07b043703..facfe644d 100644 --- a/translations/fa/1-Introduction/3-fairness/README.md +++ b/translations/fa/1-Introduction/3-fairness/README.md @@ -1,161 +1,160 @@ # ساخت راه‌حل‌های یادگیری ماشین با هوش مصنوعی مسئولانه -![خلاصه‌ای از هوش مصنوعی مسئولانه در یادگیری ماشین در یک اسکیچ‌نوت](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.fa.png) -> اسکیچ‌نوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac) +![خلاصه‌ای از هوش مصنوعی مسئولانه در یادگیری ماشین در یک طرح](../../../../sketchnotes/ml-fairness.png) +> طرح توسط [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) ## مقدمه -در این دوره آموزشی، شما شروع به کشف خواهید کرد که چگونه یادگیری ماشین می‌تواند و در حال حاضر زندگی روزمره ما را تحت تأثیر قرار می‌دهد. حتی اکنون، سیستم‌ها و مدل‌ها در وظایف تصمیم‌گیری روزانه مانند تشخیص‌های پزشکی، تأیید وام یا شناسایی تقلب دخیل هستند. بنابراین، مهم است که این مدل‌ها به خوبی کار کنند تا نتایجی قابل اعتماد ارائه دهند. همانند هر برنامه نرم‌افزاری، سیستم‌های هوش مصنوعی نیز ممکن است انتظارات را برآورده نکنند یا نتایج نامطلوبی داشته باشند. به همین دلیل ضروری است که بتوانیم رفتار یک مدل هوش مصنوعی را درک و توضیح دهیم. +در این دوره آموزشی، شما شروع به کشف خواهید کرد که چگونه یادگیری ماشین می‌تواند و در حال حاضر زندگی روزمره ما را تحت تأثیر قرار می‌دهد. حتی اکنون، سیستم‌ها و مدل‌ها در وظایف تصمیم‌گیری روزانه مانند تشخیص‌های پزشکی، تأیید وام یا شناسایی تقلب دخیل هستند. بنابراین، مهم است که این مدل‌ها به خوبی کار کنند تا نتایجی قابل اعتماد ارائه دهند. همانند هر برنامه نرم‌افزاری، سیستم‌های هوش مصنوعی ممکن است انتظارات را برآورده نکنند یا نتایج نامطلوبی داشته باشند. به همین دلیل ضروری است که بتوانیم رفتار یک مدل هوش مصنوعی را درک و توضیح دهیم. -تصور کنید چه اتفاقی می‌افتد وقتی داده‌هایی که برای ساخت این مدل‌ها استفاده می‌کنید فاقد برخی از جمعیت‌شناسی‌ها مانند نژاد، جنسیت، دیدگاه سیاسی، مذهب یا نمایندگی نامتناسب این جمعیت‌شناسی‌ها باشد. اگر خروجی مدل به گونه‌ای تفسیر شود که به نفع یک گروه خاص باشد، چه پیامدی برای برنامه خواهد داشت؟ علاوه بر این، اگر مدل نتیجه‌ای نامطلوب داشته باشد و به افراد آسیب برساند، چه اتفاقی می‌افتد؟ چه کسی مسئول رفتار سیستم‌های هوش مصنوعی است؟ این‌ها برخی از سوالاتی هستند که در این دوره آموزشی بررسی خواهیم کرد. +تصور کنید چه اتفاقی می‌افتد وقتی داده‌هایی که برای ساخت این مدل‌ها استفاده می‌کنید فاقد برخی گروه‌های جمعیتی مانند نژاد، جنسیت، دیدگاه سیاسی، مذهب یا نمایندگی نامتناسب این گروه‌ها باشد. یا وقتی خروجی مدل به گونه‌ای تفسیر شود که به نفع برخی گروه‌های جمعیتی باشد. پیامد این امر برای برنامه چیست؟ علاوه بر این، وقتی مدل نتیجه‌ای نامطلوب داشته باشد و به افراد آسیب برساند، چه اتفاقی می‌افتد؟ چه کسی مسئول رفتار سیستم‌های هوش مصنوعی است؟ این‌ها برخی از سوالاتی هستند که در این دوره آموزشی بررسی خواهیم کرد. در این درس، شما: -- اهمیت عدالت در یادگیری ماشین و آسیب‌های مرتبط با آن را درک خواهید کرد. +- اهمیت عدالت در یادگیری ماشین و آسیب‌های مرتبط با عدالت را درک خواهید کرد. - با تمرین بررسی موارد استثنایی و سناریوهای غیرمعمول برای اطمینان از قابلیت اطمینان و ایمنی آشنا خواهید شد. - نیاز به توانمندسازی همه افراد از طریق طراحی سیستم‌های فراگیر را درک خواهید کرد. - اهمیت حفاظت از حریم خصوصی و امنیت داده‌ها و افراد را بررسی خواهید کرد. -- اهمیت رویکرد شفاف برای توضیح رفتار مدل‌های هوش مصنوعی را خواهید دید. +- اهمیت داشتن رویکرد شفاف برای توضیح رفتار مدل‌های هوش مصنوعی را خواهید دید. - به اهمیت مسئولیت‌پذیری برای ایجاد اعتماد در سیستم‌های هوش مصنوعی توجه خواهید کرد. ## پیش‌نیاز -به عنوان پیش‌نیاز، لطفاً مسیر یادگیری "اصول هوش مصنوعی مسئولانه" را بگذرانید و ویدیوی زیر را در این موضوع مشاهده کنید: +به عنوان پیش‌نیاز، لطفاً مسیر یادگیری "اصول هوش مصنوعی مسئولانه" را طی کنید و ویدئوی زیر را در این موضوع مشاهده کنید: -برای یادگیری بیشتر درباره هوش مصنوعی مسئولانه، این [مسیر یادگیری](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) را دنبال کنید. +اطلاعات بیشتر درباره هوش مصنوعی مسئولانه را با دنبال کردن این [مسیر یادگیری](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) بیاموزید. [![رویکرد مایکروسافت به هوش مصنوعی مسئولانه](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "رویکرد مایکروسافت به هوش مصنوعی مسئولانه") -> 🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید: رویکرد مایکروسافت به هوش مصنوعی مسئولانه +> 🎥 روی تصویر بالا کلیک کنید برای ویدئو: رویکرد مایکروسافت به هوش مصنوعی مسئولانه ## عدالت -سیستم‌های هوش مصنوعی باید با همه افراد به طور عادلانه رفتار کنند و از تأثیرگذاری متفاوت بر گروه‌های مشابه اجتناب کنند. برای مثال، زمانی که سیستم‌های هوش مصنوعی راهنمایی‌هایی در مورد درمان پزشکی، درخواست‌های وام یا اشتغال ارائه می‌دهند، باید توصیه‌های مشابهی به همه افراد با شرایط مشابه ارائه دهند. هر یک از ما به عنوان انسان، تعصباتی داریم که بر تصمیمات و اقدامات ما تأثیر می‌گذارد. این تعصبات می‌توانند در داده‌هایی که برای آموزش سیستم‌های هوش مصنوعی استفاده می‌کنیم، مشهود باشند. چنین دستکاری‌هایی گاهی به صورت ناخواسته اتفاق می‌افتد. اغلب دشوار است که آگاهانه بدانیم چه زمانی در داده‌ها تعصب وارد می‌کنیم. +سیستم‌های هوش مصنوعی باید با همه افراد به طور عادلانه رفتار کنند و از تأثیرگذاری متفاوت بر گروه‌های مشابه اجتناب کنند. برای مثال، وقتی سیستم‌های هوش مصنوعی راهنمایی‌هایی درباره درمان پزشکی، درخواست‌های وام یا استخدام ارائه می‌دهند، باید توصیه‌های مشابهی به همه افراد با علائم مشابه، شرایط مالی مشابه یا صلاحیت‌های حرفه‌ای مشابه بدهند. هر یک از ما به عنوان انسان، تعصباتی را به ارث برده‌ایم که بر تصمیمات و اقدامات ما تأثیر می‌گذارد. این تعصبات می‌توانند در داده‌هایی که برای آموزش سیستم‌های هوش مصنوعی استفاده می‌کنیم، مشهود باشند. چنین دستکاری‌هایی گاهی به طور ناخواسته اتفاق می‌افتد. اغلب دشوار است که به طور آگاهانه بدانیم چه زمانی در داده‌ها تعصب وارد می‌کنیم. -**"بی‌عدالتی"** شامل تأثیرات منفی یا "آسیب‌ها" برای یک گروه از افراد است، مانند گروه‌هایی که بر اساس نژاد، جنسیت، سن یا وضعیت معلولیت تعریف می‌شوند. آسیب‌های اصلی مرتبط با عدالت را می‌توان به صورت زیر طبقه‌بندی کرد: +**"بی‌عدالتی"** شامل تأثیرات منفی یا "آسیب‌ها" برای گروهی از افراد است، مانند گروه‌هایی که بر اساس نژاد، جنسیت، سن یا وضعیت معلولیت تعریف شده‌اند. آسیب‌های اصلی مرتبط با عدالت را می‌توان به صورت زیر طبقه‌بندی کرد: -- **تخصیص**، اگر یک جنسیت یا قومیت به عنوان مثال بر دیگری ترجیح داده شود. -- **کیفیت خدمات**. اگر داده‌ها را برای یک سناریوی خاص آموزش دهید اما واقعیت بسیار پیچیده‌تر باشد، این منجر به خدمات ضعیف می‌شود. برای مثال، یک دستگاه پخش صابون که نمی‌تواند پوست تیره را تشخیص دهد. [منبع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) -- **تحقیر**. انتقاد ناعادلانه و برچسب زدن به چیزی یا کسی. برای مثال، یک فناوری برچسب‌گذاری تصویر به اشتباه تصاویر افراد با پوست تیره را به عنوان گوریل برچسب‌گذاری کرد. -- **نمایندگی بیش از حد یا کم**. ایده این است که یک گروه خاص در یک حرفه خاص دیده نمی‌شود و هر خدمات یا عملکردی که به ترویج این موضوع ادامه دهد، به آسیب کمک می‌کند. -- **کلیشه‌سازی**. ارتباط دادن یک گروه خاص با ویژگی‌های از پیش تعیین‌شده. برای مثال، یک سیستم ترجمه زبان بین انگلیسی و ترکی ممکن است به دلیل کلمات با ارتباطات کلیشه‌ای به جنسیت، نادرست عمل کند. +- **تخصیص**، اگر برای مثال یک جنسیت یا قومیت بر دیگری ترجیح داده شود. +- **کیفیت خدمات**. اگر داده‌ها را برای یک سناریوی خاص آموزش دهید اما واقعیت بسیار پیچیده‌تر باشد، منجر به خدمات ضعیف می‌شود. برای مثال، یک دستگاه پخش صابون که به نظر نمی‌رسد بتواند افراد با پوست تیره را تشخیص دهد. [منبع](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **تحقیر**. انتقاد ناعادلانه و برچسب زدن به چیزی یا کسی. برای مثال، یک فناوری برچسب‌گذاری تصویر به طور بدنامی تصاویر افراد با پوست تیره را به عنوان گوریل‌ها اشتباه برچسب‌گذاری کرد. +- **نمایندگی بیش از حد یا کم**. ایده این است که یک گروه خاص در یک حرفه خاص دیده نمی‌شود، و هر خدمات یا عملکردی که به ترویج این امر ادامه دهد، به آسیب کمک می‌کند. +- **کلیشه‌سازی**. ارتباط دادن یک گروه خاص با ویژگی‌های از پیش تعیین‌شده. برای مثال، یک سیستم ترجمه زبان بین انگلیسی و ترکی ممکن است به دلیل کلمات با ارتباطات کلیشه‌ای به جنسیت، نادرستی‌هایی داشته باشد. -![ترجمه به ترکی](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.fa.png) +![ترجمه به ترکی](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > ترجمه به ترکی -![ترجمه به انگلیسی](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.fa.png) +![ترجمه به انگلیسی](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) > ترجمه به انگلیسی هنگام طراحی و آزمایش سیستم‌های هوش مصنوعی، باید اطمینان حاصل کنیم که هوش مصنوعی عادلانه است و به گونه‌ای برنامه‌ریزی نشده است که تصمیمات متعصبانه یا تبعیض‌آمیز بگیرد، تصمیماتی که انسان‌ها نیز از گرفتن آن‌ها منع شده‌اند. تضمین عدالت در هوش مصنوعی و یادگیری ماشین همچنان یک چالش پیچیده اجتماعی-فنی است. ### قابلیت اطمینان و ایمنی -برای ایجاد اعتماد، سیستم‌های هوش مصنوعی باید در شرایط عادی و غیرمنتظره قابل اعتماد، ایمن و سازگار باشند. مهم است بدانیم که سیستم‌های هوش مصنوعی در شرایط مختلف چگونه رفتار خواهند کرد، به ویژه زمانی که با موارد استثنایی مواجه می‌شوند. هنگام ساخت راه‌حل‌های هوش مصنوعی، باید تمرکز زیادی بر نحوه مدیریت طیف گسترده‌ای از شرایطی که این راه‌حل‌ها ممکن است با آن‌ها روبرو شوند، وجود داشته باشد. برای مثال، یک خودروی خودران باید ایمنی افراد را به عنوان اولویت اصلی در نظر بگیرد. در نتیجه، هوش مصنوعی که خودرو را هدایت می‌کند باید تمام سناریوهای ممکن را که خودرو ممکن است با آن‌ها مواجه شود، مانند شب، طوفان، کولاک، کودکان در حال دویدن در خیابان، حیوانات خانگی، ساخت‌وسازهای جاده‌ای و غیره در نظر بگیرد. میزان توانایی یک سیستم هوش مصنوعی در مدیریت طیف گسترده‌ای از شرایط به طور قابل اعتماد و ایمن، سطح پیش‌بینی‌پذیری دانشمند داده یا توسعه‌دهنده هوش مصنوعی را در طول طراحی یا آزمایش سیستم منعکس می‌کند. +برای ایجاد اعتماد، سیستم‌های هوش مصنوعی باید قابل اعتماد، ایمن و سازگار در شرایط عادی و غیرمنتظره باشند. مهم است بدانیم که سیستم‌های هوش مصنوعی در انواع مختلف شرایط چگونه رفتار خواهند کرد، به ویژه زمانی که موارد استثنایی هستند. هنگام ساخت راه‌حل‌های هوش مصنوعی، باید تمرکز قابل توجهی بر نحوه مدیریت انواع مختلف شرایطی که راه‌حل‌های هوش مصنوعی با آن‌ها مواجه می‌شوند، وجود داشته باشد. برای مثال، یک ماشین خودران باید ایمنی افراد را به عنوان اولویت اصلی قرار دهد. در نتیجه، هوش مصنوعی که ماشین را قدرت می‌بخشد باید تمام سناریوهای ممکن را که ماشین ممکن است با آن‌ها روبرو شود، مانند شب، طوفان‌های رعد و برق یا کولاک، کودکان در حال دویدن در خیابان، حیوانات خانگی، ساخت‌وسازهای جاده‌ای و غیره در نظر بگیرد. اینکه یک سیستم هوش مصنوعی چقدر می‌تواند طیف گسترده‌ای از شرایط را به طور قابل اعتماد و ایمن مدیریت کند، سطح پیش‌بینی‌پذیری را که دانشمند داده یا توسعه‌دهنده هوش مصنوعی در طراحی یا آزمایش سیستم در نظر گرفته است، منعکس می‌کند. -> [🎥 برای مشاهده ویدیو اینجا کلیک کنید: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) +> [🎥 روی اینجا کلیک کنید برای ویدئو: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) ### فراگیری -سیستم‌های هوش مصنوعی باید به گونه‌ای طراحی شوند که همه افراد را درگیر و توانمند کنند. هنگام طراحی و پیاده‌سازی سیستم‌های هوش مصنوعی، دانشمندان داده و توسعه‌دهندگان هوش مصنوعی باید موانع احتمالی را که ممکن است به طور ناخواسته افراد را مستثنی کند، شناسایی و برطرف کنند. برای مثال، یک میلیارد نفر در سراسر جهان با معلولیت زندگی می‌کنند. با پیشرفت هوش مصنوعی، آن‌ها می‌توانند به طیف گسترده‌ای از اطلاعات و فرصت‌ها در زندگی روزمره خود دسترسی آسان‌تری داشته باشند. با رفع این موانع، فرصت‌هایی برای نوآوری و توسعه محصولات هوش مصنوعی با تجربیات بهتر که به نفع همه است، ایجاد می‌شود. +سیستم‌های هوش مصنوعی باید به گونه‌ای طراحی شوند که همه افراد را درگیر و توانمند کنند. هنگام طراحی و اجرای سیستم‌های هوش مصنوعی، دانشمندان داده و توسعه‌دهندگان هوش مصنوعی موانع احتمالی در سیستم را شناسایی و برطرف می‌کنند که ممکن است به طور ناخواسته افراد را حذف کند. برای مثال، یک میلیارد نفر در سراسر جهان دارای معلولیت هستند. با پیشرفت هوش مصنوعی، آن‌ها می‌توانند به طیف گسترده‌ای از اطلاعات و فرصت‌ها در زندگی روزمره خود دسترسی آسان‌تری داشته باشند. با رفع موانع، فرصت‌هایی برای نوآوری و توسعه محصولات هوش مصنوعی با تجربیات بهتر ایجاد می‌شود که به نفع همه است. -> [🎥 برای مشاهده ویدیو اینجا کلیک کنید: فراگیری در هوش مصنوعی](https://www.microsoft.com/videoplayer/embed/RE4vl9v) +> [🎥 روی اینجا کلیک کنید برای ویدئو: فراگیری در هوش مصنوعی](https://www.microsoft.com/videoplayer/embed/RE4vl9v) ### امنیت و حریم خصوصی -سیستم‌های هوش مصنوعی باید ایمن باشند و به حریم خصوصی افراد احترام بگذارند. افراد به سیستم‌هایی که حریم خصوصی، اطلاعات یا زندگی آن‌ها را به خطر می‌اندازند، کمتر اعتماد می‌کنند. هنگام آموزش مدل‌های یادگیری ماشین، ما برای دستیابی به بهترین نتایج به داده‌ها متکی هستیم. در این فرآیند، منبع داده و یکپارچگی آن باید در نظر گرفته شود. برای مثال، آیا داده‌ها توسط کاربر ارائه شده‌اند یا به صورت عمومی در دسترس بوده‌اند؟ علاوه بر این، هنگام کار با داده‌ها، توسعه سیستم‌های هوش مصنوعی که بتوانند اطلاعات محرمانه را محافظت کنند و در برابر حملات مقاوم باشند، بسیار مهم است. با گسترش هوش مصنوعی، حفاظت از حریم خصوصی و امنیت اطلاعات شخصی و تجاری مهم‌تر و پیچیده‌تر می‌شود. مسائل مربوط به حریم خصوصی و امنیت داده‌ها نیازمند توجه ویژه‌ای در هوش مصنوعی هستند زیرا دسترسی به داده‌ها برای سیستم‌های هوش مصنوعی ضروری است تا پیش‌بینی‌ها و تصمیمات دقیق و آگاهانه‌ای درباره افراد انجام دهند. +سیستم‌های هوش مصنوعی باید ایمن باشند و به حریم خصوصی افراد احترام بگذارند. افراد کمتر به سیستم‌هایی اعتماد دارند که حریم خصوصی، اطلاعات یا زندگی آن‌ها را به خطر می‌اندازند. هنگام آموزش مدل‌های یادگیری ماشین، ما به داده‌ها برای تولید بهترین نتایج متکی هستیم. در این فرآیند، منبع داده‌ها و یکپارچگی آن‌ها باید مورد توجه قرار گیرد. برای مثال، آیا داده‌ها توسط کاربر ارسال شده‌اند یا به صورت عمومی در دسترس هستند؟ سپس، هنگام کار با داده‌ها، ضروری است که سیستم‌های هوش مصنوعی توسعه داده شوند که بتوانند اطلاعات محرمانه را محافظت کنند و در برابر حملات مقاومت کنند. با گسترش هوش مصنوعی، حفاظت از حریم خصوصی و امنیت اطلاعات شخصی و تجاری مهم‌تر و پیچیده‌تر می‌شود. مسائل مربوط به حریم خصوصی و امنیت داده‌ها نیاز به توجه ویژه‌ای در هوش مصنوعی دارند زیرا دسترسی به داده‌ها برای سیستم‌های هوش مصنوعی ضروری است تا پیش‌بینی‌ها و تصمیمات دقیق و آگاهانه‌ای درباره افراد انجام دهند. -> [🎥 برای مشاهده ویدیو اینجا کلیک کنید: امنیت در هوش مصنوعی](https://www.microsoft.com/videoplayer/embed/RE4voJF) +> [🎥 روی اینجا کلیک کنید برای ویدئو: امنیت در هوش مصنوعی](https://www.microsoft.com/videoplayer/embed/RE4voJF) -- به عنوان یک صنعت، ما پیشرفت‌های قابل توجهی در زمینه حریم خصوصی و امنیت داشته‌ایم که به طور قابل توجهی توسط مقرراتی مانند GDPR (مقررات عمومی حفاظت از داده‌ها) تقویت شده است. -- با این حال، در سیستم‌های هوش مصنوعی باید به تنش بین نیاز به داده‌های شخصی بیشتر برای شخصی‌تر و مؤثرتر کردن سیستم‌ها و حریم خصوصی اذعان کنیم. -- همان‌طور که با ظهور کامپیوترهای متصل به اینترنت شاهد افزایش چشمگیر مسائل امنیتی بودیم، اکنون نیز شاهد افزایش قابل توجه مسائل امنیتی مرتبط با هوش مصنوعی هستیم. -- در عین حال، شاهد استفاده از هوش مصنوعی برای بهبود امنیت بوده‌ایم. به عنوان مثال، اکثر اسکنرهای ضدویروس مدرن امروز توسط هوش مصنوعی هدایت می‌شوند. +- به عنوان یک صنعت، ما پیشرفت‌های قابل توجهی در حریم خصوصی و امنیت داشته‌ایم که به طور قابل توجهی توسط مقرراتی مانند GDPR (مقررات عمومی حفاظت از داده‌ها) تقویت شده است. +- با این حال، با سیستم‌های هوش مصنوعی باید تنش بین نیاز به داده‌های شخصی بیشتر برای شخصی‌تر و مؤثرتر کردن سیستم‌ها و حریم خصوصی را بپذیریم. +- همانند تولد کامپیوترهای متصل به اینترنت، ما همچنین شاهد افزایش قابل توجهی در تعداد مسائل امنیتی مرتبط با هوش مصنوعی هستیم. +- در عین حال، ما شاهد استفاده از هوش مصنوعی برای بهبود امنیت بوده‌ایم. به عنوان مثال، اکثر اسکنرهای ضد ویروس مدرن امروز توسط الگوریتم‌های هوش مصنوعی هدایت می‌شوند. - ما باید اطمینان حاصل کنیم که فرآیندهای علم داده ما به طور هماهنگ با آخرین شیوه‌های حریم خصوصی و امنیت ترکیب شوند. ### شفافیت -سیستم‌های هوش مصنوعی باید قابل درک باشند. بخش مهمی از شفافیت، توضیح رفتار سیستم‌های هوش مصنوعی و اجزای آن‌ها است. بهبود درک سیستم‌های هوش مصنوعی مستلزم آن است که ذینفعان بفهمند این سیستم‌ها چگونه و چرا کار می‌کنند تا بتوانند مسائل احتمالی عملکرد، نگرانی‌های ایمنی و حریم خصوصی، تعصبات، شیوه‌های انحصاری یا نتایج ناخواسته را شناسایی کنند. ما همچنین معتقدیم که کسانی که از سیستم‌های هوش مصنوعی استفاده می‌کنند باید صادق و شفاف باشند که چه زمانی، چرا و چگونه تصمیم به استفاده از آن‌ها گرفته‌اند. همچنین محدودیت‌های سیستم‌هایی که استفاده می‌کنند را توضیح دهند. برای مثال، اگر یک بانک از یک سیستم هوش مصنوعی برای پشتیبانی از تصمیمات وام‌دهی مصرف‌کننده استفاده کند، مهم است که نتایج را بررسی کند و بفهمد کدام داده‌ها بر توصیه‌های سیستم تأثیر می‌گذارند. دولت‌ها شروع به تنظیم هوش مصنوعی در صنایع مختلف کرده‌اند، بنابراین دانشمندان داده و سازمان‌ها باید توضیح دهند که آیا یک سیستم هوش مصنوعی الزامات قانونی را برآورده می‌کند، به ویژه زمانی که نتیجه‌ای نامطلوب وجود دارد. +سیستم‌های هوش مصنوعی باید قابل فهم باشند. بخش مهمی از شفافیت، توضیح رفتار سیستم‌های هوش مصنوعی و اجزای آن‌ها است. بهبود درک سیستم‌های هوش مصنوعی مستلزم آن است که ذینفعان نحوه و دلیل عملکرد آن‌ها را درک کنند تا بتوانند مسائل بالقوه عملکردی، نگرانی‌های ایمنی و حریم خصوصی، تعصبات، شیوه‌های حذف‌کننده یا نتایج ناخواسته را شناسایی کنند. ما همچنین معتقدیم که کسانی که از سیستم‌های هوش مصنوعی استفاده می‌کنند باید صادق و شفاف باشند که چه زمانی، چرا و چگونه تصمیم به استفاده از آن‌ها می‌گیرند. همچنین محدودیت‌های سیستم‌هایی که استفاده می‌کنند. برای مثال، اگر یک بانک از سیستم هوش مصنوعی برای حمایت از تصمیمات وام‌دهی مصرف‌کننده خود استفاده کند، مهم است که نتایج را بررسی کند و بفهمد کدام داده‌ها بر توصیه‌های سیستم تأثیر می‌گذارند. دولت‌ها شروع به تنظیم هوش مصنوعی در صنایع مختلف کرده‌اند، بنابراین دانشمندان داده و سازمان‌ها باید توضیح دهند که آیا یک سیستم هوش مصنوعی الزامات قانونی را برآورده می‌کند، به ویژه زمانی که نتیجه‌ای نامطلوب وجود دارد. -> [🎥 برای مشاهده ویدیو اینجا کلیک کنید: شفافیت در هوش مصنوعی](https://www.microsoft.com/videoplayer/embed/RE4voJF) +> [🎥 روی اینجا کلیک کنید برای ویدئو: شفافیت در هوش مصنوعی](https://www.microsoft.com/videoplayer/embed/RE4voJF) -- به دلیل پیچیدگی سیستم‌های هوش مصنوعی، درک نحوه کار آن‌ها و تفسیر نتایج دشوار است. -- این عدم درک بر نحوه مدیریت، عملیاتی کردن و مستندسازی این سیستم‌ها تأثیر می‌گذارد. -- این عدم درک، مهم‌تر از همه، بر تصمیماتی که با استفاده از نتایج این سیستم‌ها گرفته می‌شود، تأثیر می‌گذارد. +- از آنجا که سیستم‌های هوش مصنوعی بسیار پیچیده هستند، درک نحوه عملکرد آن‌ها و تفسیر نتایج دشوار است. +- این عدم درک بر نحوه مدیریت، عملیاتی شدن و مستندسازی این سیستم‌ها تأثیر می‌گذارد. +- این عدم درک مهم‌تر از همه بر تصمیماتی که با استفاده از نتایج تولید شده توسط این سیستم‌ها گرفته می‌شود، تأثیر می‌گذارد. ### مسئولیت‌پذیری -افرادی که سیستم‌های هوش مصنوعی را طراحی و پیاده‌سازی می‌کنند باید مسئول نحوه عملکرد سیستم‌های خود باشند. نیاز به مسئولیت‌پذیری به ویژه در فناوری‌های حساس مانند تشخیص چهره بسیار مهم است. اخیراً، تقاضا برای فناوری تشخیص چهره، به ویژه از سوی سازمان‌های اجرای قانون که پتانسیل این فناوری را در مواردی مانند یافتن کودکان گمشده می‌بینند، افزایش یافته است. با این حال، این فناوری‌ها می‌توانند به طور بالقوه توسط یک دولت برای به خطر انداختن آزادی‌های اساسی شهروندان خود، مثلاً با امکان نظارت مداوم بر افراد خاص، استفاده شوند. بنابراین، دانشمندان داده و سازمان‌ها باید مسئول تأثیر سیستم هوش مصنوعی خود بر افراد یا جامعه باشند. +افرادی که سیستم‌های هوش مصنوعی را طراحی و اجرا می‌کنند باید مسئول نحوه عملکرد سیستم‌های خود باشند. نیاز به مسئولیت‌پذیری به ویژه در فناوری‌های حساس مانند تشخیص چهره بسیار مهم است. اخیراً، تقاضا برای فناوری تشخیص چهره افزایش یافته است، به ویژه از سوی سازمان‌های اجرای قانون که پتانسیل این فناوری را در استفاده‌هایی مانند یافتن کودکان گمشده می‌بینند. با این حال، این فناوری‌ها می‌توانند به طور بالقوه توسط یک دولت برای به خطر انداختن آزادی‌های اساسی شهروندان خود استفاده شوند، به عنوان مثال، با امکان نظارت مداوم بر افراد خاص. بنابراین، دانشمندان داده و سازمان‌ها باید مسئول تأثیر سیستم هوش مصنوعی خود بر افراد یا جامعه باشند. -[![هشدارهای یک محقق برجسته هوش مصنوعی درباره نظارت گسترده از طریق تشخیص چهره](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.fa.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "رویکرد مایکروسافت به هوش مصنوعی مسئولانه") +[![هشدار محقق برجسته هوش مصنوعی درباره نظارت گسترده از طریق تشخیص چهره](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "رویکرد مایکروسافت به هوش مصنوعی مسئولانه") -> 🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید: هشدارهای نظارت گسترده از طریق تشخیص چهره +> 🎥 روی تصویر بالا کلیک کنید برای ویدئو: هشدار درباره نظارت گسترده از طریق تشخیص چهره -در نهایت، یکی از بزرگ‌ترین سوالات نسل ما، به عنوان اولین نسلی که هوش مصنوعی را به جامعه می‌آورد، این است که چگونه می‌توان اطمینان حاصل کرد که کامپیوترها همچنان به مردم پاسخگو خواهند بود و چگونه می‌توان اطمینان حاصل کرد که افرادی که کامپیوترها را طراحی می‌کنند به همه افراد دیگر پاسخگو خواهند بود. +در نهایت یکی از بزرگ‌ترین سوالات برای نسل ما، به عنوان اولین نسلی که هوش مصنوعی را به جامعه می‌آورد، این است که چگونه می‌توان اطمینان حاصل کرد که کامپیوترها همچنان مسئولیت‌پذیر باقی می‌مانند و چگونه می‌توان اطمینان حاصل کرد که افرادی که کامپیوترها را طراحی می‌کنند مسئولیت‌پذیر باقی می‌مانند. ## ارزیابی تأثیر -قبل از آموزش یک مدل یادگیری ماشین، مهم است که یک ارزیابی تأثیر انجام شود تا هدف سیستم هوش مصنوعی، استفاده مورد نظر، محل استقرار و افرادی که با سیستم تعامل خواهند داشت، مشخص شود. این ارزیابی‌ها برای بازبینان یا آزمایش‌کنندگان مفید است تا بدانند چه عواملی را هنگام شناسایی خطرات احتمالی و پیامدهای مورد انتظار در نظر بگیرند. +قبل از آموزش یک مدل یادگیری ماشین، مهم است که یک ارزیابی تأثیر انجام شود تا هدف سیستم هوش مصنوعی، استفاده مورد نظر، محل اجرا و افرادی که با سیستم تعامل خواهند داشت، درک شود. این موارد برای بازبین‌ها یا آزمایش‌کنندگان سیستم مفید هستند تا بدانند چه عواملی را باید هنگام شناسایی خطرات بالقوه و پیامدهای مورد انتظار در نظر بگیرند. موارد زیر حوزه‌های تمرکز هنگام انجام ارزیابی تأثیر هستند: -- **تأثیر منفی بر افراد**. آگاهی از هرگونه محدودیت یا الزامات، استفاده‌های پشتیبانی‌نشده یا هرگونه محدودیت شناخته‌شده که عملکرد سیستم را مختل می‌کند، برای اطمینان از عدم استفاده از سیستم به گونه‌ای که به افراد آسیب برساند، حیاتی است. -- **نیازهای داده**. درک نحوه و محل استفاده سیستم از داده‌ها به بازبینان کمک می‌کند تا هرگونه نیاز داده‌ای که باید به آن توجه شود (مانند مقررات داده GDPR یا HIPPA) را بررسی کنند. علاوه بر این، بررسی کنید که آیا منبع یا مقدار داده برای آموزش کافی است. -- **خلاصه تأثیر**. فهرستی از آسیب‌های احتمالی که ممکن است از استفاده از سیستم ناشی شود، جمع‌آوری کنید. در طول چرخه عمر یادگیری ماشین، بررسی کنید که آیا مسائل شناسایی‌شده کاهش یافته یا برطرف شده‌اند. -- **اهداف قابل اجرا** برای هر یک از شش اصل اصلی. ارزیابی کنید که آیا اهداف هر یک از اصول برآورده شده‌اند و آیا شکاف‌هایی وجود دارد. +* **تأثیر نامطلوب بر افراد**. آگاهی از هرگونه محدودیت یا الزامات، استفاده غیرپشتیبانی شده یا هر محدودیت شناخته شده‌ای که عملکرد سیستم را مختل می‌کند، برای اطمینان از اینکه سیستم به گونه‌ای استفاده نمی‌شود که به افراد آسیب برساند، حیاتی است. +* **نیازهای داده**. درک نحوه و محل استفاده سیستم از داده‌ها به بازبین‌ها امکان می‌دهد تا هرگونه نیاز داده‌ای را که باید به آن توجه شود (مانند مقررات داده GDPR یا HIPPA) بررسی کنند. علاوه بر این، بررسی کنید که آیا منبع یا مقدار داده برای آموزش کافی است. +* **خلاصه تأثیر**. فهرستی از آسیب‌های بالقوه‌ای که ممکن است از استفاده از سیستم ایجاد شود، جمع‌آوری کنید. در طول چرخه عمر یادگیری ماشین، بررسی کنید که آیا مسائل شناسایی شده کاهش یافته یا برطرف شده‌اند. +* **اهداف قابل اجرا** برای هر یک از شش اصل اصلی. ارزیابی کنید که آیا اهداف هر یک از اصول برآورده شده‌اند و آیا شکاف‌هایی وجود دارد. ## اشکال‌زدایی با هوش مصنوعی مسئولانه -مشابه اشکال‌زدایی یک برنامه نرم‌افزاری، اشکال‌زدایی یک سیستم هوش مصنوعی فرآیندی ضروری برای شناسایی و رفع مشکلات در سیستم است. عوامل زیادی وجود دارند که می‌توانند بر عملکرد یک مدل تأثیر بگذارند و باعث شوند که به درستی یا به طور مسئولانه عمل نکند. اکثر معیارهای عملکرد مدل‌های سنتی، تجمیعات کمی از عملکرد مدل هستند که برای تحلیل چگونگی نقض اصول هوش مصنوعی مسئولانه کافی نیستند. علاوه بر این، یک مدل یادگیری ماشین یک جعبه سیاه است که درک آنچه باعث نتیجه آن می‌شود یا ارائه توضیح زمانی که اشتباه می‌کند را دشوار می‌کند. در ادامه این دوره، یاد خواهیم گرفت که چگونه از داشبورد هوش مصنوعی مسئولانه برای کمک به اشکال‌زدایی سیستم‌های هوش مصنوعی استفاده کنیم. این داشبورد ابزاری جامع برای دانشمندان داده و توسعه‌دهندگان هوش مصنوعی فراهم می‌کند تا: +مشابه اشکال‌زدایی یک برنامه نرم‌افزاری، اشکال‌زدایی یک سیستم هوش مصنوعی فرآیند ضروری شناسایی و حل مشکلات در سیستم است. عوامل زیادی وجود دارند که می‌توانند باعث شوند یک مدل به طور مورد انتظار یا مسئولانه عمل نکند. اکثر معیارهای عملکرد مدل‌های سنتی، تجمعات کمی از عملکرد مدل هستند که برای تحلیل نحوه نقض اصول هوش مصنوعی مسئولانه کافی نیستند. علاوه بر این، یک مدل یادگیری ماشین یک جعبه سیاه است که درک آنچه باعث نتیجه آن می‌شود یا ارائه توضیح زمانی که اشتباه می‌کند، دشوار است. در ادامه این دوره، یاد خواهیم گرفت که چگونه از داشبورد هوش مصنوعی مسئولانه برای کمک به اشکال‌زدایی سیستم‌های هوش مصنوعی استفاده کنیم. این داشبورد ابزار جامعی برای دانشمندان داده و توسعه‌دهندگان هوش مصنوعی فراهم می‌کند تا انجام دهند: -- **تحلیل خطا**. برای شناسایی توزیع خطای مدل که می‌تواند بر عدالت یا قابلیت اطمینان سیستم تأثیر بگذارد. -- **نمای کلی مدل**. برای کشف جایی که در عملکرد مدل در میان گروه‌های داده تفاوت وجود دارد. -- **تحلیل داده‌ها**. برای درک توزیع داده‌ها و شناسایی هرگونه تعصب احتمالی در داده‌ها که می‌تواند منجر به مسائل عدالت، فراگیری و قابلیت اطمینان شود. -- **قابلیت تفسیر مدل**. برای درک آنچه بر پیش‌بینی‌های مدل تأثیر می‌گذارد یا آن را تحت تأثیر قرار می‌دهد. این امر در توضیح رفتار مدل که برای شفافیت و مسئولیت‌پذیری مهم است، کمک می‌کند. +* **تحلیل خطا**. برای شناسایی توزیع خطاهای مدل که می‌تواند بر عدالت یا قابلیت اطمینان سیستم تأثیر بگذارد. +* **نمای کلی مدل**. برای کشف اینکه کجا در عملکرد مدل در میان گروه‌های داده تفاوت وجود دارد. +* **تحلیل داده‌ها**. برای درک توزیع داده‌ها و شناسایی هرگونه تعصب بالقوه در داده‌ها که می‌تواند منجر به مسائل عدالت، فراگیری و قابلیت اطمینان شود. +* **قابلیت تفسیر مدل**. برای درک اینکه چه چیزی بر پیش‌بینی‌های مدل تأثیر می‌گذارد یا آن‌ها را تحت تأثیر قرار می‌دهد. این امر به توضیح رفتار مدل کمک می‌کند که برای شفافیت و مسئولیت‌پذیری مهم است. ## 🚀 چالش -برای جلوگیری از ورود آسیب‌ها در وهله اول، باید: +برای جلوگیری از معرفی آسیب‌ها در وهله اول، باید: -- تنوع پس‌زمینه‌ها و دیدگاه‌ها را در میان افرادی که روی سیستم‌ها کار می‌کنند، داشته باشیم. -- در مجموعه داده‌هایی که تنوع جامعه ما را منع -در این درس، شما با مفاهیم اولیه عدالت و ناعدالتی در یادگیری ماشین آشنا شدید. - -این کارگاه را مشاهده کنید تا عمیق‌تر به این موضوعات بپردازید: +- تنوع در پیشینه‌ها و دیدگاه‌ها در میان افرادی که روی سیستم‌ها کار می‌کنند داشته باشیم. +- در مجموعه داده‌هایی که تنوع جامعه ما را منعکس می‌کنند سرمایه‌گذاری کنیم. +- روش‌های بهتری در طول چرخه +تماشای این کارگاه برای بررسی عمیق‌تر موضوعات: - در جستجوی هوش مصنوعی مسئولانه: تبدیل اصول به عمل توسط بسیمرا نوشی، مهرنوش سامکی و آمیت شارما -[![Responsible AI Toolbox: چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه") +[![جعبه‌ابزار هوش مصنوعی مسئولانه: یک چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: یک چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه") -> 🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید: RAI Toolbox: چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه توسط بسیمرا نوشی، مهرنوش سامکی و آمیت شارما +> 🎥 برای مشاهده ویدیو روی تصویر بالا کلیک کنید: جعبه‌ابزار هوش مصنوعی مسئولانه: یک چارچوب متن‌باز برای ساخت هوش مصنوعی مسئولانه توسط بسیمرا نوشی، مهرنوش سامکی و آمیت شارما همچنین بخوانید: -- مرکز منابع هوش مصنوعی مسئولانه مایکروسافت: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- مرکز منابع هوش مصنوعی مسئولانه مایکروسافت: [منابع هوش مصنوعی مسئولانه – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- گروه تحقیقاتی FATE مایکروسافت: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- گروه تحقیقاتی FATE مایکروسافت: [FATE: عدالت، پاسخگویی، شفافیت و اخلاق در هوش مصنوعی - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -RAI Toolbox: +جعبه‌ابزار هوش مصنوعی مسئولانه: -- [مخزن GitHub ابزار هوش مصنوعی مسئولانه](https://github.com/microsoft/responsible-ai-toolbox) +- [مخزن GitHub جعبه‌ابزار هوش مصنوعی مسئولانه](https://github.com/microsoft/responsible-ai-toolbox) -درباره ابزارهای Azure Machine Learning برای تضمین عدالت مطالعه کنید: +درباره ابزارهای Azure Machine Learning برای تضمین عدالت بخوانید: - [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) ## تکلیف -[ابزار هوش مصنوعی مسئولانه را بررسی کنید](assignment.md) +[جعبه‌ابزار هوش مصنوعی مسئولانه را بررسی کنید](assignment.md) --- diff --git a/translations/fa/1-Introduction/4-techniques-of-ML/README.md b/translations/fa/1-Introduction/4-techniques-of-ML/README.md index ada15265b..42379fa19 100644 --- a/translations/fa/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/fa/1-Introduction/4-techniques-of-ML/README.md @@ -1,126 +1,126 @@ # تکنیک‌های یادگیری ماشین -فرآیند ساخت، استفاده و نگهداری مدل‌های یادگیری ماشین و داده‌هایی که از آن‌ها استفاده می‌شود، بسیار متفاوت از بسیاری از جریان‌های کاری توسعه دیگر است. در این درس، این فرآیند را روشن می‌کنیم و تکنیک‌های اصلی که باید بدانید را توضیح می‌دهیم. شما: +فرآیند ساخت، استفاده و نگهداری مدل‌های یادگیری ماشین و داده‌هایی که از آن‌ها استفاده می‌کنند، بسیار متفاوت از بسیاری از جریان‌های کاری توسعه دیگر است. در این درس، این فرآیند را روشن می‌کنیم و تکنیک‌های اصلی که باید بدانید را توضیح می‌دهیم. شما: - فرآیندهای پایه‌ای یادگیری ماشین را در سطح بالا درک خواهید کرد. - مفاهیم پایه‌ای مانند «مدل‌ها»، «پیش‌بینی‌ها» و «داده‌های آموزشی» را بررسی خواهید کرد. -## [پرسش‌نامه قبل از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) [![یادگیری ماشین برای مبتدیان - تکنیک‌های یادگیری ماشین](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "یادگیری ماشین برای مبتدیان - تکنیک‌های یادگیری ماشین") -> 🎥 برای مشاهده ویدئوی کوتاه مربوط به این درس، روی تصویر بالا کلیک کنید. +> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره این درس مشاهده کنید. ## مقدمه در سطح بالا، هنر ایجاد فرآیندهای یادگیری ماشین (ML) شامل چندین مرحله است: -1. **تصمیم‌گیری درباره سؤال**. بیشتر فرآیندهای یادگیری ماشین با پرسیدن یک سؤال شروع می‌شوند که نمی‌توان آن را با یک برنامه شرطی ساده یا موتور مبتنی بر قوانین پاسخ داد. این سؤالات اغلب حول پیش‌بینی‌هایی بر اساس مجموعه‌ای از داده‌ها می‌چرخند. -2. **جمع‌آوری و آماده‌سازی داده‌ها**. برای پاسخ دادن به سؤال خود، به داده نیاز دارید. کیفیت و گاهی اوقات کمیت داده‌های شما تعیین می‌کند که چقدر می‌توانید به سؤال اولیه خود پاسخ دهید. تجسم داده‌ها جنبه مهمی از این مرحله است. این مرحله همچنین شامل تقسیم داده‌ها به گروه‌های آموزشی و آزمایشی برای ساخت مدل است. -3. **انتخاب روش آموزشی**. بسته به سؤال شما و ماهیت داده‌هایتان، باید انتخاب کنید که چگونه می‌خواهید مدلی بسازید که بهترین بازتاب داده‌های شما باشد و پیش‌بینی‌های دقیقی بر اساس آن انجام دهد. این بخش از فرآیند یادگیری ماشین نیاز به تخصص خاص و اغلب مقدار قابل توجهی آزمایش دارد. -4. **آموزش مدل**. با استفاده از داده‌های آموزشی، از الگوریتم‌های مختلف برای آموزش مدل استفاده می‌کنید تا الگوهای موجود در داده‌ها را شناسایی کند. مدل ممکن است از وزن‌های داخلی استفاده کند که می‌توان آن‌ها را تنظیم کرد تا بخش‌های خاصی از داده‌ها را نسبت به دیگران ترجیح دهد و مدل بهتری بسازد. -5. **ارزیابی مدل**. از داده‌هایی که قبلاً دیده نشده‌اند (داده‌های آزمایشی) از مجموعه جمع‌آوری‌شده خود استفاده می‌کنید تا ببینید مدل چگونه عمل می‌کند. -6. **تنظیم پارامترها**. بر اساس عملکرد مدل خود، می‌توانید فرآیند را با استفاده از پارامترها یا متغیرهای مختلفی که رفتار الگوریتم‌های مورد استفاده برای آموزش مدل را کنترل می‌کنند، دوباره انجام دهید. +1. **تصمیم‌گیری درباره سؤال**. بیشتر فرآیندهای ML با پرسیدن یک سؤال شروع می‌شوند که نمی‌توان آن را با یک برنامه شرطی ساده یا موتور مبتنی بر قوانین پاسخ داد. این سؤالات اغلب حول پیش‌بینی‌هایی بر اساس مجموعه‌ای از داده‌ها می‌چرخند. +2. **جمع‌آوری و آماده‌سازی داده‌ها**. برای پاسخ به سؤال خود، به داده نیاز دارید. کیفیت و گاهی اوقات کمیت داده‌های شما تعیین می‌کند که چقدر می‌توانید به سؤال اولیه خود پاسخ دهید. تجسم داده‌ها جنبه مهمی از این مرحله است. این مرحله همچنین شامل تقسیم داده‌ها به گروه‌های آموزشی و آزمایشی برای ساخت مدل است. +3. **انتخاب روش آموزشی**. بسته به سؤال شما و ماهیت داده‌هایتان، باید انتخاب کنید که چگونه می‌خواهید مدلی را آموزش دهید که بهترین بازتاب داده‌های شما باشد و پیش‌بینی‌های دقیقی بر اساس آن انجام دهد. این بخش از فرآیند ML شما نیاز به تخصص خاص و اغلب مقدار قابل توجهی آزمایش دارد. +4. **آموزش مدل**. با استفاده از داده‌های آموزشی خود، از الگوریتم‌های مختلفی برای آموزش مدل استفاده می‌کنید تا الگوهای موجود در داده‌ها را شناسایی کند. مدل ممکن است از وزن‌های داخلی استفاده کند که می‌توان آن‌ها را تنظیم کرد تا بخش‌های خاصی از داده‌ها را نسبت به دیگران ترجیح دهد و مدل بهتری بسازد. +5. **ارزیابی مدل**. از داده‌هایی که قبلاً دیده نشده‌اند (داده‌های آزمایشی شما) از مجموعه جمع‌آوری‌شده خود استفاده می‌کنید تا ببینید مدل چگونه عمل می‌کند. +6. **تنظیم پارامترها**. بر اساس عملکرد مدل خود، می‌توانید فرآیند را با استفاده از پارامترها یا متغیرهای مختلفی که رفتار الگوریتم‌های استفاده‌شده برای آموزش مدل را کنترل می‌کنند، دوباره انجام دهید. 7. **پیش‌بینی**. از ورودی‌های جدید برای آزمایش دقت مدل خود استفاده کنید. ## چه سؤالی باید پرسید؟ -کامپیوترها به‌طور خاص در کشف الگوهای پنهان در داده‌ها مهارت دارند. این قابلیت برای محققانی که سؤالاتی درباره یک حوزه خاص دارند که نمی‌توان به راحتی با ایجاد یک موتور مبتنی بر قوانین شرطی پاسخ داد، بسیار مفید است. برای مثال، در یک وظیفه بیمه‌ای، یک دانشمند داده ممکن است بتواند قوانین دستی درباره مرگ و میر افراد سیگاری در مقابل غیرسیگاری‌ها ایجاد کند. +کامپیوترها به‌طور خاص در کشف الگوهای پنهان در داده‌ها مهارت دارند. این قابلیت برای محققانی که سؤالاتی درباره یک حوزه خاص دارند که نمی‌توان به‌راحتی با ایجاد یک موتور مبتنی بر قوانین شرطی پاسخ داد، بسیار مفید است. برای مثال، در یک وظیفه بیمه‌ای، یک دانشمند داده ممکن است بتواند قوانین دستی درباره مرگ‌ومیر افراد سیگاری در مقابل غیرسیگاری‌ها ایجاد کند. -با این حال، وقتی متغیرهای زیادی وارد معادله می‌شوند، یک مدل یادگیری ماشین ممکن است برای پیش‌بینی نرخ مرگ و میر آینده بر اساس تاریخچه سلامت گذشته کارآمدتر باشد. یک مثال شادتر ممکن است پیش‌بینی آب و هوا برای ماه آوریل در یک مکان خاص باشد که بر اساس داده‌هایی شامل عرض جغرافیایی، طول جغرافیایی، تغییرات آب و هوایی، نزدیکی به اقیانوس، الگوهای جریان جت و موارد دیگر انجام می‌شود. +با این حال، وقتی متغیرهای زیادی وارد معادله می‌شوند، یک مدل ML ممکن است کارآمدتر باشد تا نرخ مرگ‌ومیر آینده را بر اساس تاریخچه سلامت گذشته پیش‌بینی کند. یک مثال شادتر ممکن است پیش‌بینی آب‌وهوا برای ماه آوریل در یک مکان خاص باشد، بر اساس داده‌هایی که شامل عرض جغرافیایی، طول جغرافیایی، تغییرات اقلیمی، نزدیکی به اقیانوس، الگوهای جریان جت و موارد دیگر است. -✅ این [اسلایدها](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) درباره مدل‌های آب و هوا، دیدگاه تاریخی برای استفاده از یادگیری ماشین در تحلیل آب و هوا ارائه می‌دهند. +✅ این [اسلایدها](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) درباره مدل‌های آب‌وهوا، دیدگاه تاریخی برای استفاده از ML در تحلیل آب‌وهوا ارائه می‌دهند. ## وظایف پیش از ساخت -قبل از شروع به ساخت مدل خود، چندین وظیفه وجود دارد که باید انجام دهید. برای آزمایش سؤال خود و ایجاد یک فرضیه بر اساس پیش‌بینی‌های مدل، باید چندین عنصر را شناسایی و تنظیم کنید. +قبل از شروع به ساخت مدل خود، چندین وظیفه وجود دارد که باید انجام دهید. برای آزمایش سؤال خود و تشکیل یک فرضیه بر اساس پیش‌بینی‌های مدل، باید چندین عنصر را شناسایی و پیکربندی کنید. ### داده‌ها -برای پاسخ دادن به سؤال خود با هر نوع قطعیتی، به مقدار مناسبی از داده‌های مناسب نیاز دارید. در این مرحله دو کار باید انجام دهید: +برای پاسخ به سؤال خود با هر نوع قطعیتی، به مقدار مناسبی از داده‌های درست نیاز دارید. در این مرحله دو کار باید انجام دهید: -- **جمع‌آوری داده‌ها**. با توجه به درس قبلی درباره انصاف در تحلیل داده‌ها، داده‌های خود را با دقت جمع‌آوری کنید. از منابع این داده‌ها، هرگونه تعصب ذاتی که ممکن است داشته باشند، آگاه باشید و منشأ آن‌ها را مستند کنید. -- **آماده‌سازی داده‌ها**. فرآیند آماده‌سازی داده‌ها شامل چندین مرحله است. ممکن است نیاز باشد داده‌ها را جمع‌آوری و نرمال‌سازی کنید اگر از منابع متنوعی آمده باشند. می‌توانید کیفیت و کمیت داده‌ها را از طریق روش‌های مختلفی مانند تبدیل رشته‌ها به اعداد (همان‌طور که در [خوشه‌بندی](../../5-Clustering/1-Visualize/README.md) انجام می‌دهیم) بهبود دهید. همچنین ممکن است داده‌های جدیدی بر اساس داده‌های اصلی تولید کنید (همان‌طور که در [طبقه‌بندی](../../4-Classification/1-Introduction/README.md) انجام می‌دهیم). می‌توانید داده‌ها را پاک‌سازی و ویرایش کنید (همان‌طور که قبل از درس [برنامه وب](../../3-Web-App/README.md) انجام خواهیم داد). در نهایت، ممکن است نیاز باشد داده‌ها را تصادفی‌سازی و مخلوط کنید، بسته به تکنیک‌های آموزشی خود. +- **جمع‌آوری داده‌ها**. با توجه به درس قبلی درباره انصاف در تحلیل داده‌ها، داده‌های خود را با دقت جمع‌آوری کنید. از منابع این داده‌ها، هرگونه تعصب ذاتی که ممکن است داشته باشد، آگاه باشید و منشأ آن را مستند کنید. +- **آماده‌سازی داده‌ها**. فرآیند آماده‌سازی داده‌ها شامل چندین مرحله است. ممکن است نیاز باشد داده‌ها را جمع‌آوری و نرمال‌سازی کنید اگر از منابع متنوعی آمده باشند. می‌توانید کیفیت و کمیت داده‌ها را از طریق روش‌های مختلفی مانند تبدیل رشته‌ها به اعداد (همان‌طور که در [خوشه‌بندی](../../5-Clustering/1-Visualize/README.md) انجام می‌دهیم) بهبود دهید. ممکن است داده‌های جدیدی بر اساس داده‌های اصلی تولید کنید (همان‌طور که در [طبقه‌بندی](../../4-Classification/1-Introduction/README.md) انجام می‌دهیم). می‌توانید داده‌ها را پاک‌سازی و ویرایش کنید (همان‌طور که قبل از درس [برنامه وب](../../3-Web-App/README.md) انجام خواهیم داد). در نهایت، ممکن است نیاز باشد داده‌ها را تصادفی‌سازی و مخلوط کنید، بسته به تکنیک‌های آموزشی شما. -✅ پس از جمع‌آوری و پردازش داده‌های خود، لحظه‌ای وقت بگذارید تا ببینید آیا شکل آن‌ها به شما اجازه می‌دهد سؤال مورد نظر خود را پاسخ دهید یا خیر. ممکن است داده‌ها در وظیفه مورد نظر شما عملکرد خوبی نداشته باشند، همان‌طور که در درس‌های [خوشه‌بندی](../../5-Clustering/1-Visualize/README.md) کشف می‌کنیم! +✅ پس از جمع‌آوری و پردازش داده‌های خود، لحظه‌ای وقت بگذارید تا ببینید آیا شکل آن‌ها به شما اجازه می‌دهد سؤال مورد نظر خود را پاسخ دهید. ممکن است داده‌ها در وظیفه مورد نظر شما عملکرد خوبی نداشته باشند، همان‌طور که در درس‌های [خوشه‌بندی](../../5-Clustering/1-Visualize/README.md) کشف می‌کنیم! ### ویژگی‌ها و هدف -یک [ویژگی](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) یک خاصیت قابل اندازه‌گیری از داده‌های شما است. در بسیاری از مجموعه داده‌ها، به‌صورت عنوان ستون مانند «تاریخ»، «اندازه» یا «رنگ» بیان می‌شود. متغیر ویژگی شما، که معمولاً در کد به‌صورت `X` نشان داده می‌شود، متغیر ورودی است که برای آموزش مدل استفاده خواهد شد. +یک [ویژگی](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) یک خاصیت قابل اندازه‌گیری از داده‌های شماست. در بسیاری از مجموعه داده‌ها، به‌عنوان عنوان ستون‌هایی مانند «تاریخ»، «اندازه» یا «رنگ» بیان می‌شود. متغیر ویژگی شما، که معمولاً در کد به‌صورت `X` نشان داده می‌شود، متغیر ورودی است که برای آموزش مدل استفاده خواهد شد. -هدف چیزی است که شما سعی دارید پیش‌بینی کنید. هدف که معمولاً به‌صورت `y` در کد نشان داده می‌شود، پاسخ به سؤالی است که شما سعی دارید از داده‌های خود بپرسید: در ماه دسامبر، کدو تنبل‌های ارزان‌تر چه **رنگی** خواهند داشت؟ در سان‌فرانسیسکو، کدام محله‌ها بهترین **قیمت** املاک را خواهند داشت؟ گاهی هدف به‌عنوان ویژگی برچسب نیز شناخته می‌شود. +هدف چیزی است که شما سعی دارید پیش‌بینی کنید. هدف که معمولاً به‌صورت `y` در کد نشان داده می‌شود، پاسخ به سؤالی است که شما سعی دارید از داده‌های خود بپرسید: در ماه دسامبر، کدوهای **چه رنگی** ارزان‌تر خواهند بود؟ در سان‌فرانسیسکو، کدام محله‌ها بهترین **قیمت** املاک را خواهند داشت؟ گاهی هدف به‌عنوان ویژگی برچسب نیز شناخته می‌شود. ### انتخاب متغیر ویژگی -🎓 **انتخاب ویژگی و استخراج ویژگی** چگونه می‌دانید کدام متغیر را هنگام ساخت مدل انتخاب کنید؟ احتمالاً فرآیند انتخاب ویژگی یا استخراج ویژگی را طی خواهید کرد تا متغیرهای مناسب برای بهترین مدل را انتخاب کنید. با این حال، آن‌ها یکسان نیستند: «استخراج ویژگی ویژگی‌های جدیدی از توابع ویژگی‌های اصلی ایجاد می‌کند، در حالی که انتخاب ویژگی یک زیرمجموعه از ویژگی‌ها را بازمی‌گرداند.» ([منبع](https://wikipedia.org/wiki/Feature_selection)) +🎓 **انتخاب ویژگی و استخراج ویژگی** چگونه می‌دانید کدام متغیر را هنگام ساخت مدل انتخاب کنید؟ احتمالاً فرآیندی از انتخاب ویژگی یا استخراج ویژگی را طی خواهید کرد تا متغیرهای مناسب برای بهترین مدل را انتخاب کنید. با این حال، آن‌ها یکسان نیستند: «استخراج ویژگی ویژگی‌های جدیدی از توابع ویژگی‌های اصلی ایجاد می‌کند، در حالی که انتخاب ویژگی یک زیرمجموعه از ویژگی‌ها را بازمی‌گرداند.» ([منبع](https://wikipedia.org/wiki/Feature_selection)) ### تجسم داده‌های خود -یکی از جنبه‌های مهم ابزارهای دانشمند داده، قدرت تجسم داده‌ها با استفاده از چندین کتابخانه عالی مانند Seaborn یا MatPlotLib است. نمایش داده‌های خود به‌صورت بصری ممکن است به شما اجازه دهد تا همبستگی‌های پنهانی را کشف کنید که می‌توانید از آن‌ها استفاده کنید. تجسم‌های شما ممکن است به شما کمک کنند تا تعصب یا داده‌های نامتعادل را کشف کنید (همان‌طور که در [طبقه‌بندی](../../4-Classification/2-Classifiers-1/README.md) کشف می‌کنیم). +یکی از جنبه‌های مهم ابزارهای دانشمند داده، قدرت تجسم داده‌ها با استفاده از چندین کتابخانه عالی مانند Seaborn یا MatPlotLib است. نمایش داده‌های خود به‌صورت بصری ممکن است به شما اجازه دهد تا همبستگی‌های پنهانی را کشف کنید که می‌توانید از آن‌ها بهره‌برداری کنید. تجسم‌های شما ممکن است به شما کمک کنند تا تعصب یا داده‌های نامتعادل را کشف کنید (همان‌طور که در [طبقه‌بندی](../../4-Classification/2-Classifiers-1/README.md) کشف می‌کنیم). -### تقسیم مجموعه داده +### تقسیم مجموعه داده خود قبل از آموزش، باید مجموعه داده خود را به دو یا چند بخش با اندازه‌های نابرابر تقسیم کنید که همچنان داده‌ها را به‌خوبی نمایندگی کنند. -- **آموزشی**. این بخش از مجموعه داده برای آموزش مدل شما استفاده می‌شود. این مجموعه بخش عمده‌ای از مجموعه داده اصلی را تشکیل می‌دهد. -- **آزمایشی**. مجموعه داده آزمایشی یک گروه مستقل از داده‌ها است، که اغلب از داده‌های اصلی جمع‌آوری شده است، که برای تأیید عملکرد مدل ساخته شده استفاده می‌کنید. -- **اعتباریابی**. مجموعه اعتباریابی یک گروه کوچک‌تر مستقل از نمونه‌ها است که برای تنظیم پارامترهای مدل یا معماری آن استفاده می‌کنید تا مدل را بهبود دهید. بسته به اندازه داده‌های شما و سؤالی که می‌پرسید، ممکن است نیازی به ساخت این مجموعه سوم نداشته باشید (همان‌طور که در [پیش‌بینی سری زمانی](../../7-TimeSeries/1-Introduction/README.md) اشاره می‌کنیم). +- **آموزشی**. این بخش از مجموعه داده به مدل شما برای آموزش آن اختصاص داده می‌شود. این مجموعه بخش عمده‌ای از مجموعه داده اصلی را تشکیل می‌دهد. +- **آزمایشی**. مجموعه داده آزمایشی یک گروه مستقل از داده‌هاست، که اغلب از داده‌های اصلی جمع‌آوری شده است، که برای تأیید عملکرد مدل ساخته‌شده استفاده می‌کنید. +- **اعتباریابی**. مجموعه اعتباریابی یک گروه کوچک‌تر مستقل از نمونه‌هاست که برای تنظیم پارامترهای مدل یا معماری آن برای بهبود مدل استفاده می‌کنید. بسته به اندازه داده‌های شما و سؤالی که می‌پرسید، ممکن است نیازی به ساخت این مجموعه سوم نداشته باشید (همان‌طور که در [پیش‌بینی سری زمانی](../../7-TimeSeries/1-Introduction/README.md) اشاره می‌کنیم). ## ساخت مدل -با استفاده از داده‌های آموزشی، هدف شما ساخت یک مدل یا نمای آماری از داده‌های خود است که با استفاده از الگوریتم‌های مختلف آن را **آموزش** می‌دهید. آموزش مدل آن را در معرض داده‌ها قرار می‌دهد و به آن اجازه می‌دهد فرضیاتی درباره الگوهای مشاهده‌شده ایجاد کند، آن‌ها را تأیید کند و بپذیرد یا رد کند. +با استفاده از داده‌های آموزشی خود، هدف شما ساخت یک مدل یا نمای آماری از داده‌های شماست، با استفاده از الگوریتم‌های مختلف برای **آموزش** آن. آموزش یک مدل آن را در معرض داده‌ها قرار می‌دهد و به آن اجازه می‌دهد تا فرضیاتی درباره الگوهای درک‌شده کشف کند، تأیید کند و بپذیرد یا رد کند. ### تصمیم‌گیری درباره روش آموزشی -بسته به سؤال شما و ماهیت داده‌های شما، روشی برای آموزش آن انتخاب خواهید کرد. با مرور [مستندات Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - که در این دوره استفاده می‌کنیم - می‌توانید روش‌های مختلفی برای آموزش مدل را بررسی کنید. بسته به تجربه شما، ممکن است مجبور شوید چندین روش مختلف را امتحان کنید تا بهترین مدل را بسازید. احتمالاً فرآیندی را طی خواهید کرد که در آن دانشمندان داده عملکرد مدل را با تغذیه داده‌های دیده‌نشده ارزیابی می‌کنند، دقت، تعصب و سایر مسائل کاهش‌دهنده کیفیت را بررسی می‌کنند و مناسب‌ترین روش آموزشی را برای وظیفه مورد نظر انتخاب می‌کنند. +بسته به سؤال شما و ماهیت داده‌های شما، روش آموزشی را انتخاب خواهید کرد. با مرور [مستندات Scikit-learn](https://scikit-learn.org/stable/user_guide.html) - که در این دوره استفاده می‌کنیم - می‌توانید روش‌های زیادی برای آموزش مدل را بررسی کنید. بسته به تجربه شما، ممکن است مجبور شوید چندین روش مختلف را امتحان کنید تا بهترین مدل را بسازید. احتمالاً فرآیندی را طی خواهید کرد که در آن دانشمندان داده عملکرد مدل را با تغذیه داده‌های دیده‌نشده ارزیابی می‌کنند، دقت، تعصب و سایر مسائل کاهش‌دهنده کیفیت را بررسی می‌کنند و مناسب‌ترین روش آموزشی را برای وظیفه مورد نظر انتخاب می‌کنند. ### آموزش مدل -با داشتن داده‌های آموزشی، آماده هستید تا آن را «تناسب» دهید و یک مدل ایجاد کنید. متوجه خواهید شد که در بسیاری از کتابخانه‌های یادگیری ماشین کدی به نام 'model.fit' وجود دارد - در این زمان است که متغیر ویژگی خود را به‌صورت آرایه‌ای از مقادیر (معمولاً 'X') و یک متغیر هدف (معمولاً 'y') ارسال می‌کنید. +با داده‌های آموزشی خود آماده هستید تا آن را «تناسب» دهید و یک مدل ایجاد کنید. متوجه خواهید شد که در بسیاری از کتابخانه‌های ML کد 'model.fit' وجود دارد - در این زمان است که متغیر ویژگی خود را به‌صورت آرایه‌ای از مقادیر (معمولاً 'X') و یک متغیر هدف (معمولاً 'y') ارسال می‌کنید. ### ارزیابی مدل -پس از تکمیل فرآیند آموزش (ممکن است برای آموزش یک مدل بزرگ چندین تکرار یا «دوره» طول بکشد)، قادر خواهید بود کیفیت مدل را با استفاده از داده‌های آزمایشی برای سنجش عملکرد آن ارزیابی کنید. این داده‌ها زیرمجموعه‌ای از داده‌های اصلی هستند که مدل قبلاً آن‌ها را تحلیل نکرده است. می‌توانید جدولی از معیارهای مربوط به کیفیت مدل خود چاپ کنید. +پس از تکمیل فرآیند آموزش (ممکن است برای آموزش یک مدل بزرگ چندین تکرار یا «دوره» طول بکشد)، می‌توانید کیفیت مدل را با استفاده از داده‌های آزمایشی برای سنجش عملکرد آن ارزیابی کنید. این داده‌ها زیرمجموعه‌ای از داده‌های اصلی هستند که مدل قبلاً آن‌ها را تحلیل نکرده است. می‌توانید جدولی از معیارهای کیفیت مدل خود چاپ کنید. 🎓 **تناسب مدل** در زمینه یادگیری ماشین، تناسب مدل به دقت عملکرد زیرین مدل اشاره دارد که تلاش می‌کند داده‌هایی را که با آن‌ها آشنا نیست تحلیل کند. -🎓 **تناسب کم** و **تناسب بیش از حد** مشکلات رایجی هستند که کیفیت مدل را کاهش می‌دهند، زیرا مدل یا به اندازه کافی خوب تناسب ندارد یا بیش از حد تناسب دارد. این باعث می‌شود مدل پیش‌بینی‌هایی انجام دهد که یا بیش از حد با داده‌های آموزشی هماهنگ هستند یا خیلی کم هماهنگ هستند. یک مدل با تناسب بیش از حد داده‌های آموزشی را بیش از حد خوب پیش‌بینی می‌کند زیرا جزئیات و نویز داده‌ها را بیش از حد خوب یاد گرفته است. یک مدل با تناسب کم دقیق نیست زیرا نمی‌تواند داده‌های آموزشی خود یا داده‌هایی که هنوز «ندیده» است را به‌درستی تحلیل کند. +🎓 **تناسب کم** و **تناسب بیش‌ازحد** مشکلات رایجی هستند که کیفیت مدل را کاهش می‌دهند، زیرا مدل یا به‌اندازه کافی خوب تناسب ندارد یا بیش‌ازحد تناسب دارد. این باعث می‌شود مدل پیش‌بینی‌هایی انجام دهد که یا بیش‌ازحد با داده‌های آموزشی هماهنگ هستند یا بیش‌ازحد از آن‌ها فاصله دارند. یک مدل تناسب بیش‌ازحد داده‌های آموزشی را بیش‌ازحد خوب پیش‌بینی می‌کند زیرا جزئیات و نویز داده‌ها را بیش‌ازحد خوب یاد گرفته است. یک مدل تناسب کم دقیق نیست زیرا نمی‌تواند داده‌های آموزشی خود یا داده‌هایی که هنوز «ندیده» است را به‌درستی تحلیل کند. -![مدل با تناسب بیش از حد](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.fa.png) +![مدل تناسب بیش‌ازحد](../../../../1-Introduction/4-techniques-of-ML/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). +پس از تکمیل آموزش اولیه، کیفیت مدل را مشاهده کنید و بهبود آن را با تنظیم «پارامترهای فرا» در نظر بگیرید. درباره این فرآیند بیشتر بخوانید [در مستندات](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). ## پیش‌بینی -این لحظه‌ای است که می‌توانید از داده‌های کاملاً جدید برای آزمایش دقت مدل خود استفاده کنید. در یک تنظیم یادگیری ماشین «کاربردی»، جایی که شما دارایی‌های وب را برای استفاده از مدل در تولید می‌سازید، این فرآیند ممکن است شامل جمع‌آوری ورودی کاربر (برای مثال فشار دادن یک دکمه) برای تنظیم یک متغیر و ارسال آن به مدل برای استنتاج یا ارزیابی باشد. +این لحظه‌ای است که می‌توانید از داده‌های کاملاً جدید برای آزمایش دقت مدل خود استفاده کنید. در یک محیط ML «کاربردی»، جایی که شما دارایی‌های وبی برای استفاده از مدل در تولید می‌سازید، این فرآیند ممکن است شامل جمع‌آوری ورودی کاربر (مثلاً فشار دادن یک دکمه) برای تنظیم یک متغیر و ارسال آن به مدل برای استنتاج یا ارزیابی باشد. -در این درس‌ها، شما کشف خواهید کرد که چگونه از این مراحل برای آماده‌سازی، ساخت، آزمایش، ارزیابی و پیش‌بینی استفاده کنید - تمام حرکات یک دانشمند داده و بیشتر، همان‌طور که در سفر خود برای تبدیل شدن به یک مهندس یادگیری ماشین «تمام‌عیار» پیشرفت می‌کنید. +در این درس‌ها، شما کشف خواهید کرد که چگونه از این مراحل برای آماده‌سازی، ساخت، آزمایش، ارزیابی و پیش‌بینی استفاده کنید - تمام حرکات یک دانشمند داده و بیشتر، همان‌طور که در سفر خود برای تبدیل شدن به یک مهندس ML «تمام‌عیار» پیشرفت می‌کنید. --- ## 🚀چالش -یک نمودار جریان رسم کنید که مراحل یک متخصص یادگیری ماشین را نشان دهد. در حال حاضر خود را در کدام مرحله می‌بینید؟ پیش‌بینی می‌کنید کجا با دشواری مواجه شوید؟ چه چیزی به نظر شما آسان می‌آید؟ +یک نمودار جریان رسم کنید که مراحل یک متخصص ML را نشان دهد. در حال حاضر خود را در کدام مرحله می‌بینید؟ پیش‌بینی می‌کنید کجا با دشواری مواجه شوید؟ چه چیزی برای شما آسان به نظر می‌رسد؟ -## [پرسش‌نامه بعد از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -به‌صورت آنلاین به دنبال مصاحبه‌هایی با دانشمندان داده بگردید که درباره کار روزانه خود صحبت می‌کنند. اینجا [یکی](https://www.youtube.com/watch?v=Z3IjgbbCEfs) از آن‌ها است. +به‌صورت آنلاین جستجو کنید تا مصاحبه‌هایی با دانشمندان داده پیدا کنید که درباره کار روزانه خود صحبت می‌کنند. اینجا یک [نمونه](https://www.youtube.com/watch?v=Z3IjgbbCEfs) است. ## تکلیف @@ -129,4 +129,4 @@ CO_OP_TRANSLATOR_METADATA: --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/2-Regression/1-Tools/README.md b/translations/fa/2-Regression/1-Tools/README.md index a64ee8a4d..3f3c9ce53 100644 --- a/translations/fa/2-Regression/1-Tools/README.md +++ b/translations/fa/2-Regression/1-Tools/README.md @@ -1,64 +1,64 @@ # شروع کار با پایتون و Scikit-learn برای مدل‌های رگرسیون -![خلاصه‌ای از رگرسیون‌ها در یک اسکچ‌نوت](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.fa.png) +![خلاصه‌ای از رگرسیون‌ها در یک اسکچ‌نوت](../../../../sketchnotes/ml-regression.png) > اسکچ‌نوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) > ### [این درس به زبان R نیز موجود است!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) ## مقدمه -در این چهار درس، یاد می‌گیرید که چگونه مدل‌های رگرسیون بسازید. به زودی در مورد کاربردهای آن صحبت خواهیم کرد. اما قبل از هر کاری، مطمئن شوید که ابزارهای مناسب برای شروع فرآیند را در اختیار دارید! +در این چهار درس، شما یاد خواهید گرفت که چگونه مدل‌های رگرسیون بسازید. به زودی در مورد کاربردهای این مدل‌ها صحبت خواهیم کرد. اما قبل از شروع، مطمئن شوید که ابزارهای مناسب برای شروع فرآیند را در اختیار دارید! -در این درس، یاد می‌گیرید که چگونه: +در این درس، شما یاد خواهید گرفت که: -- کامپیوتر خود را برای انجام وظایف یادگیری ماشین محلی تنظیم کنید. -- با نوت‌بوک‌های Jupyter کار کنید. -- از Scikit-learn استفاده کنید، از جمله نصب آن. -- با یک تمرین عملی، رگرسیون خطی را بررسی کنید. +- کامپیوتر خود را برای وظایف یادگیری ماشین محلی تنظیم کنید. +- با Jupyter notebooks کار کنید. +- از Scikit-learn استفاده کنید، شامل نصب آن. +- رگرسیون خطی را با یک تمرین عملی بررسی کنید. ## نصب‌ها و تنظیمات -[![یادگیری ماشین برای مبتدیان - آماده‌سازی ابزارها برای ساخت مدل‌های یادگیری ماشین](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "یادگیری ماشین برای مبتدیان - آماده‌سازی ابزارها برای ساخت مدل‌های یادگیری ماشین") +[![یادگیری ماشین برای مبتدیان - تنظیم ابزارها برای ساخت مدل‌های یادگیری ماشین](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "یادگیری ماشین برای مبتدیان - تنظیم ابزارها برای ساخت مدل‌های یادگیری ماشین") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره تنظیم کامپیوتر برای یادگیری ماشین مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره تنظیم کامپیوتر برای یادگیری ماشین مشاهده کنید. -1. **پایتون را نصب کنید.** مطمئن شوید که [پایتون](https://www.python.org/downloads/) روی کامپیوتر شما نصب شده است. شما از پایتون برای بسیاری از وظایف داده‌کاوی و یادگیری ماشین استفاده خواهید کرد. اکثر سیستم‌های کامپیوتری از قبل نصب پایتون را دارند. همچنین [بسته‌های کدنویسی پایتون](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفیدی وجود دارند که برای برخی کاربران فرآیند نصب را آسان‌تر می‌کنند. +1. **نصب پایتون**. مطمئن شوید که [پایتون](https://www.python.org/downloads/) روی کامپیوتر شما نصب شده است. شما از پایتون برای بسیاری از وظایف علم داده و یادگیری ماشین استفاده خواهید کرد. اکثر سیستم‌های کامپیوتری از قبل شامل نصب پایتون هستند. همچنین بسته‌های [Python Coding Packs](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott) مفیدی وجود دارند که تنظیمات را برای برخی کاربران آسان‌تر می‌کنند. - با این حال، برخی از کاربردهای پایتون به یک نسخه خاص از نرم‌افزار نیاز دارند، در حالی که برخی دیگر به نسخه دیگری نیاز دارند. به همین دلیل، کار در یک [محیط مجازی](https://docs.python.org/3/library/venv.html) مفید است. + برخی کاربردهای پایتون ممکن است به یک نسخه خاص از نرم‌افزار نیاز داشته باشند، در حالی که دیگر کاربردها به نسخه دیگری نیاز دارند. به همین دلیل، کار کردن در یک [محیط مجازی](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 استفاده خواهید کرد، بنابراین ممکن است بخواهید نحوه [پیکربندی Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) برای توسعه پایتون را مرور کنید. +2. **نصب Visual Studio Code**. مطمئن شوید که Visual Studio Code روی کامپیوتر شما نصب شده است. دستورالعمل‌های [نصب Visual Studio Code](https://code.visualstudio.com/) را برای نصب پایه دنبال کنید. شما در این دوره از پایتون در Visual Studio Code استفاده خواهید کرد، بنابراین ممکن است بخواهید نحوه [تنظیم Visual Studio Code](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) برای توسعه پایتون را مرور کنید. - > با کار کردن روی این مجموعه از [ماژول‌های یادگیری](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) با پایتون راحت‌تر شوید. + > با کار کردن روی این مجموعه [ماژول‌های یادگیری](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) با پایتون راحت‌تر شوید. > > [![تنظیم پایتون با Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "تنظیم پایتون با Visual Studio Code") > - > 🎥 روی تصویر بالا کلیک کنید تا ویدیویی درباره استفاده از پایتون در VS Code مشاهده کنید. + > 🎥 روی تصویر بالا کلیک کنید تا یک ویدئو درباره استفاده از پایتون در VS Code مشاهده کنید. -3. **نصب Scikit-learn.** با دنبال کردن [این دستورالعمل‌ها](https://scikit-learn.org/stable/install.html) Scikit-learn را نصب کنید. از آنجا که باید از پایتون 3 استفاده کنید، توصیه می‌شود از یک محیط مجازی استفاده کنید. توجه داشته باشید که اگر این کتابخانه را روی یک مک M1 نصب می‌کنید، دستورالعمل‌های خاصی در صفحه لینک شده وجود دارد. +3. **نصب Scikit-learn**، با دنبال کردن [این دستورالعمل‌ها](https://scikit-learn.org/stable/install.html). از آنجا که باید مطمئن شوید که از پایتون 3 استفاده می‌کنید، توصیه می‌شود از یک محیط مجازی استفاده کنید. توجه داشته باشید، اگر این کتابخانه را روی یک مک M1 نصب می‌کنید، دستورالعمل‌های خاصی در صفحه لینک شده وجود دارد. -4. **نصب Jupyter Notebook.** شما باید [بسته Jupyter](https://pypi.org/project/jupyter/) را نصب کنید. +4. **نصب Jupyter Notebook**. شما باید [بسته Jupyter](https://pypi.org/project/jupyter/) را نصب کنید. ## محیط نویسندگی یادگیری ماشین شما -شما از **نوت‌بوک‌ها** برای توسعه کد پایتون و ایجاد مدل‌های یادگیری ماشین استفاده خواهید کرد. این نوع فایل ابزاری رایج برای دانشمندان داده است و با پسوند `.ipynb` شناسایی می‌شود. +شما از **notebooks** برای توسعه کد پایتون و ایجاد مدل‌های یادگیری ماشین استفاده خواهید کرد. این نوع فایل یک ابزار رایج برای دانشمندان داده است و با پسوند `.ipynb` شناسایی می‌شود. -نوت‌بوک‌ها محیطی تعاملی هستند که به توسعه‌دهنده اجازه می‌دهند هم کدنویسی کنند و هم یادداشت‌ها و مستندات مربوط به کد را اضافه کنند، که برای پروژه‌های تحقیقاتی یا آزمایشی بسیار مفید است. +نوت‌بوک‌ها یک محیط تعاملی هستند که به توسعه‌دهنده اجازه می‌دهند هم کدنویسی کنند و هم یادداشت‌ها و مستندات پیرامون کد بنویسند، که برای پروژه‌های آزمایشی یا تحقیقاتی بسیار مفید است. [![یادگیری ماشین برای مبتدیان - تنظیم Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "یادگیری ماشین برای مبتدیان - تنظیم Jupyter Notebooks برای شروع ساخت مدل‌های رگرسیون") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره این تمرین مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره این تمرین مشاهده کنید. ### تمرین - کار با یک نوت‌بوک @@ -66,36 +66,36 @@ CO_OP_TRANSLATOR_METADATA: 1. فایل _notebook.ipynb_ را در Visual Studio Code باز کنید. - یک سرور Jupyter با پایتون 3+ راه‌اندازی خواهد شد. در نوت‌بوک بخش‌هایی وجود دارد که می‌توانید آن‌ها را `اجرا` کنید، یعنی قطعات کد. می‌توانید یک بلوک کد را با انتخاب آیکونی که شبیه دکمه پخش است اجرا کنید. + یک سرور Jupyter با پایتون 3+ شروع خواهد شد. شما بخش‌هایی از نوت‌بوک را پیدا خواهید کرد که می‌توانند `اجرا شوند`، قطعات کد. شما می‌توانید یک بلوک کد را با انتخاب آیکونی که شبیه دکمه پخش است اجرا کنید. -2. آیکون `md` را انتخاب کنید و کمی متن مارک‌داون اضافه کنید، مانند متن زیر: **# به نوت‌بوک خود خوش آمدید**. +2. آیکون `md` را انتخاب کنید و کمی متن مارک‌داون اضافه کنید، و متن زیر را وارد کنید **# خوش آمدید به نوت‌بوک خود**. سپس کمی کد پایتون اضافه کنید. -3. در بلوک کد تایپ کنید: **print('hello notebook')**. -4. فلش را برای اجرای کد انتخاب کنید. +3. در بلوک کد تایپ کنید **print('hello notebook')**. +4. فلش را انتخاب کنید تا کد اجرا شود. - باید عبارت چاپ شده را ببینید: + شما باید عبارت چاپ شده را مشاهده کنید: ```output hello notebook ``` -![VS Code با یک نوت‌بوک باز](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.fa.jpg) +![VS Code با یک نوت‌بوک باز](../../../../2-Regression/1-Tools/images/notebook.jpg) -می‌توانید کد خود را با یادداشت‌هایی ترکیب کنید تا نوت‌بوک را خودمستند کنید. +شما می‌توانید کد خود را با نظرات ترکیب کنید تا نوت‌بوک را خود-مستند کنید. -✅ برای یک لحظه فکر کنید که محیط کاری یک توسعه‌دهنده وب چقدر با محیط یک دانشمند داده متفاوت است. +✅ برای یک دقیقه فکر کنید که محیط کاری یک توسعه‌دهنده وب چقدر با محیط کاری یک دانشمند داده متفاوت است. -## شروع به کار با Scikit-learn +## شروع کار با Scikit-learn -حالا که پایتون در محیط محلی شما تنظیم شده و با نوت‌بوک‌های Jupyter راحت هستید، بیایید با Scikit-learn نیز آشنا شویم. Scikit-learn (که به صورت `سای` مانند `ساینس` تلفظ می‌شود) یک [API گسترده](https://scikit-learn.org/stable/modules/classes.html#api-ref) ارائه می‌دهد که به شما در انجام وظایف یادگیری ماشین کمک می‌کند. +اکنون که پایتون در محیط محلی شما تنظیم شده است و با Jupyter notebooks راحت هستید، بیایید با Scikit-learn نیز راحت شویم (تلفظ آن `sci` مانند `science`). Scikit-learn یک [API گسترده](https://scikit-learn.org/stable/modules/classes.html#api-ref) ارائه می‌دهد تا به شما در انجام وظایف یادگیری ماشین کمک کند. -طبق گفته [وب‌سایت آن‌ها](https://scikit-learn.org/stable/getting_started.html)، "Scikit-learn یک کتابخانه یادگیری ماشین متن‌باز است که از یادگیری نظارت‌شده و بدون نظارت پشتیبانی می‌کند. همچنین ابزارهای مختلفی برای برازش مدل، پیش‌پردازش داده‌ها، انتخاب مدل و ارزیابی، و بسیاری از امکانات دیگر ارائه می‌دهد." +طبق [وب‌سایت آن‌ها](https://scikit-learn.org/stable/getting_started.html)، "Scikit-learn یک کتابخانه یادگیری ماشین متن‌باز است که از یادگیری نظارت‌شده و بدون نظارت پشتیبانی می‌کند. همچنین ابزارهای مختلفی برای برازش مدل، پیش‌پردازش داده‌ها، انتخاب مدل و ارزیابی، و بسیاری از امکانات دیگر ارائه می‌دهد." -در این دوره، از Scikit-learn و ابزارهای دیگر برای ساخت مدل‌های یادگیری ماشین استفاده خواهید کرد تا وظایفی را که به آن‌ها "یادگیری ماشین سنتی" می‌گوییم انجام دهید. ما عمداً از شبکه‌های عصبی و یادگیری عمیق اجتناب کرده‌ایم، زیرا این موضوعات در دوره "هوش مصنوعی برای مبتدیان" ما بهتر پوشش داده می‌شوند. +در این دوره، شما از Scikit-learn و ابزارهای دیگر برای ساخت مدل‌های یادگیری ماشین استفاده خواهید کرد تا وظایفی را که به آن‌ها "یادگیری ماشین سنتی" می‌گوییم انجام دهید. ما عمداً از شبکه‌های عصبی و یادگیری عمیق اجتناب کرده‌ایم، زیرا آن‌ها بهتر در برنامه درسی آینده ما با عنوان "AI برای مبتدیان" پوشش داده می‌شوند. -Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای استفاده آسان می‌کند. این کتابخانه عمدتاً بر استفاده از داده‌های عددی تمرکز دارد و شامل چندین مجموعه داده آماده برای استفاده به عنوان ابزارهای یادگیری است. همچنین مدل‌های از پیش ساخته شده‌ای برای دانشجویان دارد تا آن‌ها را امتحان کنند. بیایید فرآیند بارگذاری داده‌های از پیش بسته‌بندی شده و استفاده از یک تخمین‌گر برای اولین مدل یادگیری ماشین با Scikit-learn را با داده‌های پایه بررسی کنیم. +Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها برای استفاده را ساده می‌کند. این کتابخانه عمدتاً بر استفاده از داده‌های عددی تمرکز دارد و شامل چندین مجموعه داده آماده برای استفاده به عنوان ابزارهای یادگیری است. همچنین مدل‌های پیش‌ساخته‌ای برای دانش‌آموزان دارد تا امتحان کنند. بیایید فرآیند بارگذاری داده‌های از پیش بسته‌بندی شده و استفاده از یک تخمین‌گر برای اولین مدل یادگیری ماشین با Scikit-learn را با داده‌های پایه بررسی کنیم. ## تمرین - اولین نوت‌بوک Scikit-learn شما @@ -103,23 +103,23 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای [![یادگیری ماشین برای مبتدیان - اولین پروژه رگرسیون خطی شما در پایتون](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "یادگیری ماشین برای مبتدیان - اولین پروژه رگرسیون خطی شما در پایتون") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره این تمرین مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره این تمرین مشاهده کنید. -در فایل _notebook.ipynb_ مرتبط با این درس، تمام سلول‌ها را با فشار دادن آیکون "سطل زباله" پاک کنید. +در فایل _notebook.ipynb_ مرتبط با این درس، تمام سلول‌ها را با فشار دادن آیکون 'سطل زباله' پاک کنید. -در این بخش، با یک مجموعه داده کوچک درباره دیابت که در Scikit-learn برای اهداف آموزشی ساخته شده است کار خواهید کرد. تصور کنید که می‌خواهید یک درمان برای بیماران دیابتی آزمایش کنید. مدل‌های یادگیری ماشین ممکن است به شما کمک کنند تعیین کنید کدام بیماران بر اساس ترکیب متغیرها بهتر به درمان پاسخ می‌دهند. حتی یک مدل رگرسیون بسیار ساده، زمانی که به صورت تصویری نمایش داده شود، ممکن است اطلاعاتی درباره متغیرهایی ارائه دهد که به شما در سازماندهی آزمایش‌های بالینی نظری کمک کند. +در این بخش، شما با یک مجموعه داده کوچک درباره دیابت که در Scikit-learn برای اهداف یادگیری ساخته شده است کار خواهید کرد. تصور کنید که می‌خواهید یک درمان برای بیماران دیابتی آزمایش کنید. مدل‌های یادگیری ماشین ممکن است به شما کمک کنند تعیین کنید کدام بیماران بر اساس ترکیب متغیرها بهتر به درمان پاسخ می‌دهند. حتی یک مدل رگرسیون بسیار پایه، زمانی که بصری‌سازی شود، ممکن است اطلاعاتی درباره متغیرهایی ارائه دهد که به شما در سازماندهی آزمایش‌های بالینی نظری کمک کند. -✅ روش‌های مختلفی برای رگرسیون وجود دارد و انتخاب شما بستگی به سوالی دارد که می‌خواهید پاسخ دهید. اگر می‌خواهید قد احتمالی یک فرد با توجه به سن او را پیش‌بینی کنید، از رگرسیون خطی استفاده می‌کنید، زیرا به دنبال یک **مقدار عددی** هستید. اگر می‌خواهید بدانید که آیا یک نوع غذا باید به عنوان وگان در نظر گرفته شود یا نه، به دنبال **تخصیص دسته‌بندی** هستید، بنابراین از رگرسیون لجستیک استفاده می‌کنید. بعداً درباره رگرسیون لجستیک بیشتر یاد خواهید گرفت. کمی فکر کنید که چه سوالاتی می‌توانید از داده‌ها بپرسید و کدام یک از این روش‌ها مناسب‌تر است. +✅ روش‌های رگرسیون زیادی وجود دارند، و انتخاب شما بستگی به پاسخی دارد که به دنبال آن هستید. اگر می‌خواهید ارتفاع احتمالی یک فرد را بر اساس سن او پیش‌بینی کنید، از رگرسیون خطی استفاده می‌کنید، زیرا به دنبال یک **مقدار عددی** هستید. اگر علاقه‌مند به کشف این هستید که آیا یک نوع غذا باید به عنوان وگان در نظر گرفته شود یا نه، به دنبال یک **تخصیص دسته‌بندی** هستید، بنابراین از رگرسیون لجستیک استفاده می‌کنید. بعداً درباره رگرسیون لجستیک بیشتر یاد خواهید گرفت. کمی فکر کنید که چه سوالاتی می‌توانید از داده‌ها بپرسید و کدام یک از این روش‌ها مناسب‌تر خواهد بود. بیایید این کار را شروع کنیم. ### وارد کردن کتابخانه‌ها -برای این کار، برخی کتابخانه‌ها را وارد می‌کنیم: +برای این کار، ما برخی کتابخانه‌ها را وارد خواهیم کرد: -- **matplotlib**. این یک [ابزار گرافیکی](https://matplotlib.org/) مفید است و از آن برای ایجاد نمودار خطی استفاده خواهیم کرد. +- **matplotlib**. این یک [ابزار گرافیکی](https://matplotlib.org/) مفید است و ما از آن برای ایجاد یک نمودار خطی استفاده خواهیم کرد. - **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) یک کتابخانه مفید برای کار با داده‌های عددی در پایتون است. -- **sklearn**. این همان کتابخانه [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) است. +- **sklearn**. این همان [کتابخانه Scikit-learn](https://scikit-learn.org/stable/user_guide.html) است. برخی کتابخانه‌ها را برای کمک به وظایف خود وارد کنید. @@ -131,26 +131,26 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای from sklearn import datasets, linear_model, model_selection ``` - در کد بالا، `matplotlib` و `numpy` را وارد می‌کنید و `datasets`، `linear_model` و `model_selection` را از `sklearn` وارد می‌کنید. `model_selection` برای تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی استفاده می‌شود. + در بالا، شما `matplotlib` و `numpy` را وارد می‌کنید و `datasets`، `linear_model` و `model_selection` را از `sklearn` وارد می‌کنید. `model_selection` برای تقسیم داده‌ها به مجموعه‌های آموزشی و آزمایشی استفاده می‌شود. ### مجموعه داده دیابت -مجموعه داده [دیابت](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) شامل 442 نمونه داده درباره دیابت است که دارای 10 متغیر ویژگی است. برخی از این متغیرها عبارتند از: +مجموعه داده [دیابت](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) شامل 442 نمونه داده درباره دیابت است، با 10 متغیر ویژگی، برخی از آن‌ها شامل: -- سن: سن به سال -- شاخص توده بدنی (BMI) -- فشار خون متوسط (BP) -- سلول‌های T: نوعی از گلبول‌های سفید خون +- age: سن به سال +- bmi: شاخص توده بدنی +- bp: فشار خون متوسط +- s1 tc: سلول‌های T (نوعی از گلبول‌های سفید خون) -✅ این مجموعه داده شامل مفهوم "جنسیت" به عنوان یک متغیر ویژگی است که در تحقیقات مربوط به دیابت مهم است. بسیاری از مجموعه داده‌های پزشکی شامل این نوع طبقه‌بندی باینری هستند. کمی فکر کنید که چگونه چنین دسته‌بندی‌هایی ممکن است بخش‌هایی از جمعیت را از درمان‌ها مستثنی کنند. +✅ این مجموعه داده شامل مفهوم 'جنسیت' به عنوان یک متغیر ویژگی مهم برای تحقیق درباره دیابت است. بسیاری از مجموعه داده‌های پزشکی شامل این نوع طبقه‌بندی دودویی هستند. کمی فکر کنید که چگونه چنین دسته‌بندی‌هایی ممکن است بخش‌هایی از جمعیت را از درمان‌ها حذف کنند. -حالا داده‌های X و y را بارگذاری کنید. +اکنون داده‌های X و y را بارگذاری کنید. -> 🎓 به یاد داشته باشید، این یادگیری نظارت‌شده است و ما به یک هدف نام‌گذاری شده 'y' نیاز داریم. +> 🎓 به یاد داشته باشید، این یادگیری نظارت‌شده است و ما به یک هدف 'y' نام‌گذاری شده نیاز داریم. -در یک سلول کد جدید، مجموعه داده دیابت را با فراخوانی `load_diabetes()` بارگذاری کنید. ورودی `return_X_y=True` نشان می‌دهد که `X` یک ماتریس داده و `y` هدف رگرسیون خواهد بود. +در یک سلول کد جدید، مجموعه داده دیابت را با فراخوانی `load_diabetes()` بارگذاری کنید. ورودی `return_X_y=True` نشان می‌دهد که `X` یک ماتریس داده خواهد بود و `y` هدف رگرسیون خواهد بود. -1. چند دستور چاپ اضافه کنید تا شکل ماتریس داده و اولین عنصر آن را نشان دهید: +1. برخی دستورات چاپ اضافه کنید تا شکل ماتریس داده و اولین عنصر آن را نشان دهید: ```python X, y = datasets.load_diabetes(return_X_y=True) @@ -158,9 +158,9 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای print(X[0]) ``` - چیزی که به عنوان پاسخ دریافت می‌کنید، یک تاپل است. کاری که انجام می‌دهید این است که دو مقدار اول تاپل را به ترتیب به `X` و `y` اختصاص می‌دهید. درباره [تاپل‌ها](https://wikipedia.org/wiki/Tuple) بیشتر بیاموزید. + چیزی که به عنوان پاسخ دریافت می‌کنید، یک tuple است. کاری که انجام می‌دهید این است که دو مقدار اول tuple را به ترتیب به `X` و `y` اختصاص دهید. بیشتر درباره [tuple‌ها](https://wikipedia.org/wiki/Tuple) یاد بگیرید. - می‌توانید ببینید که این داده‌ها شامل 442 آیتم هستند که به صورت آرایه‌هایی با 10 عنصر شکل گرفته‌اند: + شما می‌توانید ببینید که این داده‌ها شامل 442 آیتم هستند که در آرایه‌هایی با 10 عنصر شکل گرفته‌اند: ```text (442, 10) @@ -168,9 +168,9 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای -0.04340085 -0.00259226 0.01990842 -0.01764613] ``` - ✅ کمی درباره رابطه بین داده‌ها و هدف رگرسیون فکر کنید. رگرسیون خطی روابط بین ویژگی X و متغیر هدف y را پیش‌بینی می‌کند. آیا می‌توانید [هدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) مجموعه داده دیابت را در مستندات پیدا کنید؟ این مجموعه داده چه چیزی را نشان می‌دهد، با توجه به هدف؟ + ✅ کمی فکر کنید درباره رابطه بین داده‌ها و هدف رگرسیون. رگرسیون خطی روابط بین ویژگی X و متغیر هدف y را پیش‌بینی می‌کند. آیا می‌توانید [هدف](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) مجموعه داده دیابت را در مستندات پیدا کنید؟ این مجموعه داده چه چیزی را نشان می‌دهد، با توجه به هدف؟ -2. در مرحله بعد، بخشی از این مجموعه داده را برای رسم انتخاب کنید. این کار را با انتخاب ستون سوم مجموعه داده انجام دهید. می‌توانید این کار را با استفاده از عملگر `:` برای انتخاب تمام سطرها و سپس انتخاب ستون سوم با استفاده از شاخص (2) انجام دهید. همچنین می‌توانید داده‌ها را به صورت آرایه 2 بعدی تغییر شکل دهید - همانطور که برای رسم لازم است - با استفاده از `reshape(n_rows, n_columns)`. اگر یکی از پارامترها -1 باشد، بعد مربوطه به طور خودکار محاسبه می‌شود. +2. سپس، بخشی از این مجموعه داده را برای رسم انتخاب کنید، با انتخاب ستون سوم مجموعه داده. شما می‌توانید این کار را با استفاده از عملگر `:` برای انتخاب تمام ردیف‌ها انجام دهید، و سپس ستون سوم را با استفاده از ایندکس (2) انتخاب کنید. همچنین می‌توانید داده‌ها را به یک آرایه 2D تغییر شکل دهید - همانطور که برای رسم لازم است - با استفاده از `reshape(n_rows, n_columns)`. اگر یکی از پارامترها -1 باشد، بعد مربوطه به طور خودکار محاسبه می‌شود. ```python X = X[:, 2] @@ -179,13 +179,13 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای ✅ در هر زمان، داده‌ها را چاپ کنید تا شکل آن‌ها را بررسی کنید. -3. حالا که داده‌ها آماده رسم هستند، می‌توانید ببینید آیا یک ماشین می‌تواند یک تقسیم منطقی بین اعداد در این مجموعه داده تعیین کند. برای این کار، باید هم داده‌ها (X) و هم هدف (y) را به مجموعه‌های آزمایشی و آموزشی تقسیم کنید. Scikit-learn یک روش ساده برای انجام این کار دارد؛ می‌توانید داده‌های آزمایشی خود را در یک نقطه مشخص تقسیم کنید. +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()` آموزش دهید: +4. اکنون آماده آموزش مدل خود هستید! مدل رگرسیون خطی را بارگذاری کنید و آن را با مجموعه‌های آموزشی X و y خود با استفاده از `model.fit()` آموزش دهید: ```python model = linear_model.LinearRegression() @@ -194,13 +194,13 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای ✅ `model.fit()` یک تابع است که در بسیاری از کتابخانه‌های یادگیری ماشین مانند TensorFlow مشاهده خواهید کرد. -5. سپس، با استفاده از داده‌های آزمایشی، یک پیش‌بینی ایجاد کنید. این پیش‌بینی برای رسم خط بین گروه‌های داده استفاده خواهد شد. +5. سپس، با استفاده از داده‌های آزمایشی، یک پیش‌بینی ایجاد کنید، با استفاده از تابع `predict()`. این برای رسم خط بین گروه‌های داده استفاده خواهد شد. ```python y_pred = model.predict(X_test) ``` -6. حالا وقت آن است که داده‌ها را در یک نمودار نشان دهید. Matplotlib ابزاری بسیار مفید برای این کار است. یک نمودار پراکندگی از تمام داده‌های آزمایشی X و y ایجاد کنید و از پیش‌بینی برای رسم خط در مناسب‌ترین مکان بین گروه‌های داده مدل استفاده کنید. +6. اکنون زمان نمایش داده‌ها در یک نمودار است. Matplotlib یک ابزار بسیار مفید برای این کار است. یک نمودار پراکندگی از تمام داده‌های آزمایشی X و y ایجاد کنید، و از پیش‌بینی برای رسم یک خط در مناسب‌ترین مکان، بین گروه‌های داده مدل استفاده کنید. ```python plt.scatter(X_test, y_test, color='black') @@ -211,17 +211,17 @@ Scikit-learn ساخت مدل‌ها و ارزیابی آن‌ها را برای plt.show() ``` - ![یک نمودار پراکندگی که نقاط داده مربوط به دیابت را نشان می‌دهد](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.fa.png) -✅ کمی فکر کنید که اینجا چه اتفاقی می‌افتد. یک خط مستقیم از میان نقاط کوچک زیادی از داده عبور می‌کند، اما دقیقاً چه کاری انجام می‌دهد؟ آیا می‌توانید ببینید که چگونه باید بتوانید از این خط برای پیش‌بینی محل قرارگیری یک نقطه داده جدید و دیده‌نشده در رابطه با محور y نمودار استفاده کنید؟ سعی کنید کاربرد عملی این مدل را به زبان بیاورید. + ![یک نمودار پراکندگی که نقاط داده درباره دیابت را نشان می‌دهد](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ کمی فکر کنید که اینجا چه اتفاقی می‌افتد. یک خط مستقیم از میان نقاط کوچک زیادی از داده عبور می‌کند، اما دقیقاً چه کاری انجام می‌دهد؟ آیا می‌توانید ببینید که چگونه باید بتوانید از این خط برای پیش‌بینی محل قرارگیری یک نقطه داده جدید و دیده‌نشده نسبت به محور y نمودار استفاده کنید؟ سعی کنید کاربرد عملی این مدل را به زبان بیاورید. تبریک می‌گویم، شما اولین مدل رگرسیون خطی خود را ساختید، با آن یک پیش‌بینی انجام دادید و آن را در یک نمودار نمایش دادید! --- ## 🚀چالش -یک متغیر متفاوت از این مجموعه داده را رسم کنید. نکته: این خط را ویرایش کنید: `X = X[:,2]`. با توجه به هدف این مجموعه داده، چه چیزی می‌توانید درباره پیشرفت بیماری دیابت کشف کنید؟ +یک متغیر دیگر از این مجموعه داده را رسم کنید. نکته: این خط را ویرایش کنید: `X = X[:,2]`. با توجه به هدف این مجموعه داده، چه چیزی می‌توانید درباره پیشرفت بیماری دیابت کشف کنید؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی diff --git a/translations/fa/2-Regression/2-Data/README.md b/translations/fa/2-Regression/2-Data/README.md index 7ca59cb46..a2c419b17 100644 --- a/translations/fa/2-Regression/2-Data/README.md +++ b/translations/fa/2-Regression/2-Data/README.md @@ -1,66 +1,66 @@ -# ساخت یک مدل رگرسیون با استفاده از Scikit-learn: آماده‌سازی و تجسم داده‌ها +# ساخت مدل رگرسیون با استفاده از Scikit-learn: آماده‌سازی و مصورسازی داده‌ها -![اینفوگرافیک تجسم داده‌ها](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.fa.png) +![اینفوگرافیک مصورسازی داده‌ها](../../../../2-Regression/2-Data/images/data-visualization.png) -اینفوگرافیک توسط [داسانی مادپالی](https://twitter.com/dasani_decoded) +اینفوگرافیک توسط [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) > ### [این درس به زبان R نیز موجود است!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) ## مقدمه -حالا که ابزارهای لازم برای شروع ساخت مدل‌های یادگیری ماشین با Scikit-learn را در اختیار دارید، آماده‌اید تا سوالاتی از داده‌های خود بپرسید. هنگام کار با داده‌ها و اعمال راه‌حل‌های یادگیری ماشین، بسیار مهم است که بدانید چگونه سوالات درست بپرسید تا بتوانید پتانسیل‌های داده‌های خود را به درستی کشف کنید. +حالا که ابزارهای لازم برای شروع ساخت مدل‌های یادگیری ماشین با Scikit-learn را آماده کرده‌اید، آماده‌اید تا سوالاتی از داده‌های خود بپرسید. هنگام کار با داده‌ها و اعمال راه‌حل‌های یادگیری ماشین، بسیار مهم است که بدانید چگونه سوالات درست بپرسید تا بتوانید پتانسیل‌های داده‌های خود را به درستی کشف کنید. -در این درس، شما یاد خواهید گرفت: +در این درس، یاد خواهید گرفت: - چگونه داده‌های خود را برای ساخت مدل آماده کنید. -- چگونه از Matplotlib برای تجسم داده‌ها استفاده کنید. +- چگونه از Matplotlib برای مصورسازی داده‌ها استفاده کنید. ## پرسیدن سوالات درست از داده‌ها -سوالی که می‌خواهید پاسخ آن را بیابید، تعیین می‌کند که از چه نوع الگوریتم‌های یادگیری ماشین استفاده خواهید کرد. کیفیت پاسخی که دریافت می‌کنید نیز به شدت به ماهیت داده‌های شما بستگی دارد. +سوالی که نیاز دارید به آن پاسخ داده شود، نوع الگوریتم‌های یادگیری ماشین که استفاده خواهید کرد را تعیین می‌کند. کیفیت پاسخی که دریافت می‌کنید نیز به شدت به ماهیت داده‌های شما وابسته است. -به [داده‌ها](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) که برای این درس ارائه شده است نگاهی بیندازید. می‌توانید این فایل .csv را در VS Code باز کنید. با یک نگاه سریع متوجه می‌شوید که داده‌ها شامل مقادیر خالی و ترکیبی از رشته‌ها و داده‌های عددی هستند. همچنین یک ستون عجیب به نام 'Package' وجود دارد که داده‌های آن ترکیبی از 'sacks'، 'bins' و مقادیر دیگر است. در واقع، داده‌ها کمی به هم ریخته هستند. +به [داده‌ها](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) ارائه‌شده برای این درس نگاهی بیندازید. می‌توانید این فایل .csv را در VS Code باز کنید. یک نگاه سریع نشان می‌دهد که داده‌ها شامل جاهای خالی و ترکیبی از رشته‌ها و داده‌های عددی هستند. همچنین یک ستون عجیب به نام 'Package' وجود دارد که داده‌های آن ترکیبی از 'sacks'، 'bins' و مقادیر دیگر است. در واقع، داده‌ها کمی به‌هم‌ریخته هستند. [![یادگیری ماشین برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "یادگیری ماشین برای مبتدیان - چگونه یک مجموعه داده را تحلیل و پاکسازی کنیم") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره آماده‌سازی داده‌ها برای این درس مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره آماده‌سازی داده‌ها برای این درس مشاهده کنید. -در واقع، بسیار نادر است که یک مجموعه داده کاملاً آماده برای استفاده و ساخت مدل یادگیری ماشین به شما داده شود. در این درس، یاد می‌گیرید که چگونه یک مجموعه داده خام را با استفاده از کتابخانه‌های استاندارد پایتون آماده کنید. همچنین تکنیک‌های مختلفی برای تجسم داده‌ها خواهید آموخت. +در واقع، بسیار نادر است که یک مجموعه داده کاملاً آماده برای استفاده جهت ساخت مدل یادگیری ماشین به شما داده شود. در این درس، یاد خواهید گرفت که چگونه یک مجموعه داده خام را با استفاده از کتابخانه‌های استاندارد پایتون آماده کنید. همچنین تکنیک‌های مختلفی برای مصورسازی داده‌ها خواهید آموخت. ## مطالعه موردی: 'بازار کدو تنبل' -در این پوشه، یک فایل .csv در پوشه اصلی `data` به نام [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) پیدا خواهید کرد که شامل 1757 خط داده درباره بازار کدو تنبل است که بر اساس شهرها گروه‌بندی شده‌اند. این داده‌ها خام هستند و از [گزارش‌های استاندارد بازارهای محصولات خاص](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) که توسط وزارت کشاورزی ایالات متحده منتشر شده‌اند، استخراج شده‌اند. +در این پوشه، یک فایل .csv در پوشه اصلی `data` به نام [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv) وجود دارد که شامل 1757 خط داده درباره بازار کدو تنبل است، که بر اساس شهرها گروه‌بندی شده‌اند. این داده‌ها خام هستند و از [گزارش‌های استاندارد بازارهای محصولات خاص](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) که توسط وزارت کشاورزی ایالات متحده منتشر شده‌اند، استخراج شده‌اند. ### آماده‌سازی داده‌ها -این داده‌ها در حوزه عمومی قرار دارند. می‌توان آن‌ها را از وب‌سایت USDA به صورت فایل‌های جداگانه برای هر شهر دانلود کرد. برای جلوگیری از داشتن فایل‌های جداگانه زیاد، ما تمام داده‌های شهرها را در یک صفحه گسترده ترکیب کرده‌ایم، بنابراین تا حدی داده‌ها را _آماده_ کرده‌ایم. حالا بیایید نگاهی دقیق‌تر به داده‌ها بیندازیم. +این داده‌ها در حوزه عمومی قرار دارند. می‌توان آن‌ها را از وب‌سایت USDA در فایل‌های جداگانه، برای هر شهر، دانلود کرد. برای جلوگیری از داشتن فایل‌های جداگانه زیاد، ما تمام داده‌های شهرها را در یک صفحه گسترده ترکیب کرده‌ایم، بنابراین تا حدی داده‌ها را _آماده‌سازی_ کرده‌ایم. حالا بیایید نگاهی دقیق‌تر به داده‌ها بیندازیم. ### داده‌های کدو تنبل - نتیجه‌گیری اولیه -چه چیزی در مورد این داده‌ها متوجه می‌شوید؟ قبلاً دیدید که ترکیبی از رشته‌ها، اعداد، مقادیر خالی و مقادیر عجیب وجود دارد که باید آن‌ها را درک کنید. +چه چیزی در مورد این داده‌ها متوجه می‌شوید؟ قبلاً دیدید که ترکیبی از رشته‌ها، اعداد، جاهای خالی و مقادیر عجیب وجود دارد که باید آن‌ها را درک کنید. -چه سوالی می‌توانید از این داده‌ها با استفاده از تکنیک رگرسیون بپرسید؟ مثلاً "پیش‌بینی قیمت یک کدو تنبل برای فروش در یک ماه خاص". با نگاه دوباره به داده‌ها، تغییراتی وجود دارد که باید برای ایجاد ساختار داده‌ای لازم برای این کار انجام دهید. +چه سوالی می‌توانید از این داده‌ها بپرسید، با استفاده از تکنیک رگرسیون؟ مثلاً "پیش‌بینی قیمت کدو تنبل برای فروش در یک ماه خاص". با نگاه دوباره به داده‌ها، تغییراتی وجود دارد که باید انجام دهید تا ساختار داده‌ها را برای این وظیفه ایجاد کنید. ## تمرین - تحلیل داده‌های کدو تنبل -بیایید از [Pandas](https://pandas.pydata.org/) که ابزاری بسیار مفید برای شکل‌دهی داده‌ها است، برای تحلیل و آماده‌سازی این داده‌های کدو تنبل استفاده کنیم. +بیایید از [Pandas](https://pandas.pydata.org/) (نام آن مخفف `Python Data Analysis` است)، ابزاری بسیار مفید برای شکل‌دهی داده‌ها، استفاده کنیم تا داده‌های کدو تنبل را تحلیل و آماده کنیم. -### ابتدا، بررسی تاریخ‌های گمشده +### ابتدا، بررسی تاریخ‌های گم‌شده -ابتدا باید اقداماتی برای بررسی تاریخ‌های گمشده انجام دهید: +ابتدا باید اقداماتی برای بررسی تاریخ‌های گم‌شده انجام دهید: -1. تاریخ‌ها را به فرمت ماه تبدیل کنید (این تاریخ‌ها به فرمت ایالات متحده هستند، یعنی `MM/DD/YYYY`). +1. تاریخ‌ها را به فرمت ماه تبدیل کنید (این‌ها تاریخ‌های ایالات متحده هستند، بنابراین فرمت آن‌ها `MM/DD/YYYY` است). 2. ماه را به یک ستون جدید استخراج کنید. فایل _notebook.ipynb_ را در Visual Studio Code باز کنید و صفحه گسترده را به یک دیتافریم جدید Pandas وارد کنید. @@ -75,15 +75,15 @@ CO_OP_TRANSLATOR_METADATA: ✅ از چه تابعی برای مشاهده پنج ردیف آخر استفاده می‌کنید؟ -1. بررسی کنید که آیا داده‌های گمشده‌ای در دیتافریم فعلی وجود دارد: +1. بررسی کنید که آیا داده‌های گم‌شده در دیتافریم فعلی وجود دارد: ```python pumpkins.isnull().sum() ``` - داده‌های گمشده وجود دارد، اما شاید برای کار فعلی اهمیتی نداشته باشد. + داده‌های گم‌شده وجود دارند، اما شاید برای وظیفه مورد نظر اهمیتی نداشته باشند. -1. برای کار با دیتافریم خود راحت‌تر، فقط ستون‌هایی را که نیاز دارید با استفاده از تابع `loc` انتخاب کنید. این تابع از دیتافریم اصلی گروهی از ردیف‌ها (به عنوان پارامتر اول) و ستون‌ها (به عنوان پارامتر دوم) را استخراج می‌کند. عبارت `:` در مثال زیر به معنای "همه ردیف‌ها" است. +1. برای آسان‌تر کردن کار با دیتافریم خود، فقط ستون‌هایی را که نیاز دارید انتخاب کنید، با استفاده از تابع `loc` که از دیتافریم اصلی گروهی از ردیف‌ها (به عنوان پارامتر اول) و ستون‌ها (به عنوان پارامتر دوم) استخراج می‌کند. عبارت `:` در مثال زیر به معنای "همه ردیف‌ها" است. ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] @@ -92,9 +92,9 @@ CO_OP_TRANSLATOR_METADATA: ### دوم، تعیین میانگین قیمت کدو تنبل -فکر کنید چگونه می‌توانید میانگین قیمت یک کدو تنبل را در یک ماه خاص تعیین کنید. برای این کار به کدام ستون‌ها نیاز دارید؟ نکته: به سه ستون نیاز خواهید داشت. +فکر کنید چگونه می‌توانید میانگین قیمت کدو تنبل را در یک ماه خاص تعیین کنید. برای این وظیفه چه ستون‌هایی را انتخاب می‌کنید؟ نکته: شما به 3 ستون نیاز دارید. -راه‌حل: میانگین ستون‌های `Low Price` و `High Price` را برای پر کردن ستون جدید Price محاسبه کنید و ستون Date را به گونه‌ای تبدیل کنید که فقط ماه را نشان دهد. خوشبختانه، طبق بررسی بالا، هیچ داده گمشده‌ای برای تاریخ‌ها یا قیمت‌ها وجود ندارد. +راه‌حل: میانگین ستون‌های `Low Price` و `High Price` را محاسبه کنید تا ستون جدید Price را پر کنید، و ستون Date را به گونه‌ای تبدیل کنید که فقط ماه را نشان دهد. خوشبختانه، طبق بررسی بالا، هیچ داده گم‌شده‌ای برای تاریخ‌ها یا قیمت‌ها وجود ندارد. 1. برای محاسبه میانگین، کد زیر را اضافه کنید: @@ -105,7 +105,7 @@ CO_OP_TRANSLATOR_METADATA: ``` - ✅ هر داده‌ای که می‌خواهید بررسی کنید را با استفاده از `print(month)` چاپ کنید. + ✅ هر داده‌ای را که دوست دارید بررسی کنید با استفاده از `print(month)` چاپ کنید. 2. حالا داده‌های تبدیل‌شده خود را به یک دیتافریم جدید Pandas کپی کنید: @@ -117,11 +117,11 @@ CO_OP_TRANSLATOR_METADATA: ### اما صبر کنید! چیزی عجیب اینجا وجود دارد -اگر به ستون `Package` نگاه کنید، کدو تنبل‌ها در پیکربندی‌های مختلفی فروخته می‌شوند. برخی در اندازه‌های '1 1/9 bushel' فروخته می‌شوند، برخی در اندازه‌های '1/2 bushel'، برخی به ازای هر کدو تنبل، برخی به ازای هر پوند، و برخی در جعبه‌های بزرگ با عرض‌های مختلف. +اگر به ستون `Package` نگاه کنید، کدو تنبل‌ها در پیکربندی‌های مختلفی فروخته می‌شوند. برخی در اندازه‌های '1 1/9 bushel'، برخی در اندازه‌های '1/2 bushel'، برخی به ازای هر کدو تنبل، برخی به ازای هر پوند، و برخی در جعبه‌های بزرگ با عرض‌های مختلف فروخته می‌شوند. > به نظر می‌رسد وزن کردن کدو تنبل‌ها به طور مداوم بسیار دشوار است -با بررسی داده‌های اصلی، جالب است که هر چیزی که `Unit of Sale` آن برابر با 'EACH' یا 'PER BIN' است، همچنین نوع `Package` آن به صورت هر اینچ، هر جعبه، یا 'each' است. به نظر می‌رسد وزن کردن کدو تنبل‌ها به طور مداوم بسیار دشوار است، بنابراین بیایید آن‌ها را با انتخاب فقط کدو تنبل‌هایی که در ستون `Package` آن‌ها عبارت 'bushel' وجود دارد، فیلتر کنیم. +با بررسی داده‌های اصلی، جالب است که هر چیزی که `Unit of Sale` برابر با 'EACH' یا 'PER BIN' دارد، همچنین نوع `Package` آن به ازای اینچ، به ازای هر جعبه، یا 'each' است. به نظر می‌رسد وزن کردن کدو تنبل‌ها به طور مداوم بسیار دشوار است، بنابراین بیایید آن‌ها را با انتخاب فقط کدو تنبل‌هایی که رشته 'bushel' در ستون `Package` دارند، فیلتر کنیم. 1. یک فیلتر در بالای فایل، زیر وارد کردن اولیه .csv اضافه کنید: @@ -129,13 +129,13 @@ CO_OP_TRANSLATOR_METADATA: pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] ``` - اگر اکنون داده‌ها را چاپ کنید، می‌بینید که فقط حدود 415 ردیف داده شامل کدو تنبل‌هایی که به صورت بوشل فروخته می‌شوند، باقی مانده است. + اگر اکنون داده‌ها را چاپ کنید، می‌توانید ببینید که فقط حدود 415 ردیف داده شامل کدو تنبل‌ها به ازای هر بوشل را دریافت می‌کنید. -### اما صبر کنید! یک کار دیگر هم باید انجام دهید +### اما صبر کنید! یک کار دیگر باید انجام شود -آیا متوجه شدید که مقدار بوشل در هر ردیف متفاوت است؟ باید قیمت‌ها را نرمال‌سازی کنید تا قیمت‌ها را به ازای هر بوشل نشان دهید، بنابراین کمی محاسبه انجام دهید تا آن را استاندارد کنید. +آیا متوجه شدید که مقدار بوشل در هر ردیف متفاوت است؟ شما باید قیمت‌گذاری را نرمال‌سازی کنید تا قیمت به ازای هر بوشل را نشان دهید، بنابراین کمی محاسبه انجام دهید تا آن را استاندارد کنید. -1. این خطوط را بعد از بلوک ایجاد دیتافریم جدید `new_pumpkins` اضافه کنید: +1. این خطوط را بعد از بلوک ایجاد دیتافریم new_pumpkins اضافه کنید: ```python new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) @@ -143,29 +143,29 @@ CO_OP_TRANSLATOR_METADATA: 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 پوند است." این موضوع بسیار پیچیده است! بیایید به تبدیل بوشل به پوند نپردازیم و به جای آن قیمت را بر اساس بوشل محاسبه کنیم. تمام این مطالعه درباره بوشل‌های کدو تنبل، با این حال، نشان می‌دهد که چقدر مهم است که ماهیت داده‌های خود را درک کنید! +✅ طبق [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308)، وزن یک بوشل به نوع محصول بستگی دارد، زیرا این یک اندازه‌گیری حجمی است. "یک بوشل گوجه‌فرنگی، به عنوان مثال، باید 56 پوند وزن داشته باشد... برگ‌ها و سبزیجات فضای بیشتری با وزن کمتر اشغال می‌کنند، بنابراین یک بوشل اسفناج فقط 20 پوند است." این همه بسیار پیچیده است! بیایید به تبدیل بوشل به پوند نپردازیم و به جای آن قیمت‌گذاری به ازای بوشل را انجام دهیم. تمام این مطالعه درباره بوشل‌های کدو تنبل، با این حال، نشان می‌دهد که چقدر مهم است که ماهیت داده‌های خود را درک کنید! -حالا می‌توانید قیمت‌ها را بر اساس واحد بوشل تحلیل کنید. اگر داده‌ها را یک بار دیگر چاپ کنید، می‌بینید که چگونه استاندارد شده‌اند. +حالا می‌توانید قیمت‌گذاری به ازای واحد را بر اساس اندازه‌گیری بوشل تحلیل کنید. اگر داده‌ها را یک بار دیگر چاپ کنید، می‌توانید ببینید که چگونه استاندارد شده‌اند. -✅ آیا متوجه شدید که کدو تنبل‌هایی که به صورت نیم‌بوشل فروخته می‌شوند بسیار گران هستند؟ می‌توانید بفهمید چرا؟ نکته: کدو تنبل‌های کوچک بسیار گران‌تر از کدو تنبل‌های بزرگ هستند، احتمالاً به این دلیل که تعداد بیشتری از آن‌ها در هر بوشل وجود دارد، با توجه به فضای خالی که یک کدو تنبل بزرگ اشغال می‌کند. +✅ آیا متوجه شدید که کدو تنبل‌هایی که به ازای نیم‌بوشل فروخته می‌شوند بسیار گران هستند؟ آیا می‌توانید دلیل آن را پیدا کنید؟ نکته: کدو تنبل‌های کوچک بسیار گران‌تر از کدو تنبل‌های بزرگ هستند، احتمالاً به این دلیل که تعداد بیشتری از آن‌ها در هر بوشل وجود دارد، با توجه به فضای خالی که توسط یک کدو تنبل بزرگ توخالی اشغال می‌شود. -## استراتژی‌های تجسم داده‌ها +## استراتژی‌های مصورسازی -یکی از وظایف دانشمند داده این است که کیفیت و ماهیت داده‌هایی که با آن‌ها کار می‌کند را نشان دهد. برای این کار، آن‌ها اغلب تجسم‌های جالبی ایجاد می‌کنند، مانند نمودارها، گراف‌ها و چارت‌ها که جنبه‌های مختلف داده‌ها را نشان می‌دهند. به این ترتیب، آن‌ها می‌توانند روابط و شکاف‌هایی را که در غیر این صورت سخت است کشف کنند، به صورت بصری نشان دهند. +بخشی از نقش دانشمند داده این است که کیفیت و ماهیت داده‌هایی که با آن‌ها کار می‌کند را نشان دهد. برای این کار، آن‌ها اغلب مصورسازی‌های جالبی، مانند نمودارها، گراف‌ها و چارت‌ها، ایجاد می‌کنند که جنبه‌های مختلف داده‌ها را نشان می‌دهند. به این ترتیب، آن‌ها می‌توانند روابط و شکاف‌هایی را که در غیر این صورت سخت است کشف شوند، به صورت بصری نشان دهند. -[![یادگیری ماشین برای مبتدیان - چگونه داده‌ها را با Matplotlib تجسم کنیم](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "یادگیری ماشین برای مبتدیان - چگونه داده‌ها را با Matplotlib تجسم کنیم") +[![یادگیری ماشین برای مبتدیان - چگونه داده‌ها را با Matplotlib مصورسازی کنیم](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "یادگیری ماشین برای مبتدیان - چگونه داده‌ها را با Matplotlib مصورسازی کنیم") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیوی کوتاهی درباره تجسم داده‌ها برای این درس مشاهده کنید. +> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره مصورسازی داده‌ها برای این درس مشاهده کنید. -تجسم‌ها همچنین می‌توانند به تعیین تکنیک یادگیری ماشین مناسب برای داده‌ها کمک کنند. برای مثال، یک نمودار پراکندگی که به نظر می‌رسد یک خط را دنبال می‌کند، نشان می‌دهد که داده‌ها برای یک تمرین رگرسیون خطی مناسب هستند. +مصورسازی‌ها همچنین می‌توانند به تعیین تکنیک یادگیری ماشین مناسب برای داده‌ها کمک کنند. یک نمودار پراکندگی که به نظر می‌رسد یک خط را دنبال می‌کند، به عنوان مثال، نشان می‌دهد که داده‌ها کاندیدای خوبی برای یک تمرین رگرسیون خطی هستند. -یکی از کتابخانه‌های تجسم داده‌ها که در نوت‌بوک‌های Jupyter به خوبی کار می‌کند، [Matplotlib](https://matplotlib.org/) است (که در درس قبلی نیز آن را دیدید). +یکی از کتابخانه‌های مصورسازی داده که در نوت‌بوک‌های Jupyter خوب کار می‌کند، [Matplotlib](https://matplotlib.org/) است (که در درس قبلی نیز آن را دیدید). -> تجربه بیشتری در تجسم داده‌ها در [این آموزش‌ها](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) کسب کنید. +> تجربه بیشتری در مصورسازی داده‌ها در [این آموزش‌ها](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott) کسب کنید. ## تمرین - آزمایش با Matplotlib -سعی کنید برخی نمودارهای پایه‌ای برای نمایش دیتافریم جدیدی که ایجاد کرده‌اید، بسازید. یک نمودار خطی ساده چه چیزی را نشان می‌دهد؟ +سعی کنید برخی نمودارهای پایه برای نمایش دیتافریم جدیدی که ایجاد کرده‌اید، بسازید. یک نمودار خطی پایه چه چیزی را نشان می‌دهد؟ 1. Matplotlib را در بالای فایل، زیر وارد کردن Pandas وارد کنید: @@ -174,7 +174,7 @@ CO_OP_TRANSLATOR_METADATA: ``` 1. کل نوت‌بوک را دوباره اجرا کنید تا تازه شود. -1. در انتهای نوت‌بوک، یک سلول برای رسم داده‌ها به صورت جعبه اضافه کنید: +1. در پایین نوت‌بوک، یک سلول برای رسم داده‌ها به صورت جعبه اضافه کنید: ```python price = new_pumpkins.Price @@ -183,7 +183,7 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![یک نمودار پراکندگی که رابطه قیمت و ماه را نشان می‌دهد](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.fa.png) + ![یک نمودار پراکندگی که رابطه قیمت با ماه را نشان می‌دهد](../../../../2-Regression/2-Data/images/scatterplot.png) آیا این نمودار مفید است؟ آیا چیزی در مورد آن شما را شگفت‌زده می‌کند؟ @@ -191,34 +191,34 @@ CO_OP_TRANSLATOR_METADATA: ### آن را مفید کنید -برای اینکه نمودارها داده‌های مفیدی نمایش دهند، معمولاً باید داده‌ها را به نوعی گروه‌بندی کنید. بیایید یک نمودار ایجاد کنیم که محور y ماه‌ها را نشان دهد و داده‌ها توزیع داده‌ها را نشان دهند. +برای اینکه نمودارها داده‌های مفید را نمایش دهند، معمولاً باید داده‌ها را به نوعی گروه‌بندی کنید. بیایید سعی کنیم نموداری ایجاد کنیم که محور y ماه‌ها را نشان دهد و داده‌ها توزیع داده‌ها را نشان دهند. -1. یک سلول برای ایجاد یک نمودار میله‌ای گروه‌بندی‌شده اضافه کنید: +1. یک سلول برای ایجاد نمودار میله‌ای گروه‌بندی‌شده اضافه کنید: ```python new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') plt.ylabel("Pumpkin Price") ``` - ![یک نمودار میله‌ای که رابطه قیمت و ماه را نشان می‌دهد](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.fa.png) + ![یک نمودار میله‌ای که رابطه قیمت با ماه را نشان می‌دهد](../../../../2-Regression/2-Data/images/barchart.png) - این یک تجسم داده مفیدتر است! به نظر می‌رسد که بالاترین قیمت کدو تنبل در ماه‌های سپتامبر و اکتبر رخ می‌دهد. آیا این با انتظارات شما مطابقت دارد؟ چرا یا چرا نه؟ + این یک مصورسازی داده مفیدتر است! به نظر می‌رسد که بالاترین قیمت برای کدو تنبل‌ها در ماه‌های سپتامبر و اکتبر رخ می‌دهد. آیا این مطابق انتظار شماست؟ چرا یا چرا نه؟ --- ## 🚀چالش -انواع مختلف تجسم‌هایی که Matplotlib ارائه می‌دهد را بررسی کنید. کدام نوع‌ها برای مسائل رگرسیون مناسب‌تر هستند؟ +انواع مختلف مصورسازی‌هایی که Matplotlib ارائه می‌دهد را بررسی کنید. کدام نوع‌ها برای مسائل رگرسیون مناسب‌تر هستند؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -به روش‌های مختلف تجسم داده‌ها نگاهی بیندازید. لیستی از کتابخانه‌های مختلف موجود تهیه کنید و مشخص کنید کدام یک برای انواع خاصی از وظایف مناسب‌تر هستند، مثلاً تجسم‌های دو بعدی در مقابل سه بعدی. چه چیزی کشف می‌کنید؟ +به روش‌های مختلف مصورسازی داده‌ها نگاهی بیندازید. لیستی از کتابخانه‌های مختلف موجود تهیه کنید و مشخص کنید کدام برای انواع خاصی از وظایف مناسب‌تر هستند، مثلاً مصورسازی‌های 2D در مقابل 3D. چه چیزی کشف می‌کنید؟ ## تکلیف -[کاوش در تجسم داده‌ها](assignment.md) +[بررسی مصورسازی](assignment.md) --- diff --git a/translations/fa/2-Regression/3-Linear/README.md b/translations/fa/2-Regression/3-Linear/README.md index e6b062182..21f0ef2b4 100644 --- a/translations/fa/2-Regression/3-Linear/README.md +++ b/translations/fa/2-Regression/3-Linear/README.md @@ -1,30 +1,30 @@ # ساخت مدل رگرسیون با استفاده از Scikit-learn: چهار روش رگرسیون -![اینفوگرافیک رگرسیون خطی و چندجمله‌ای](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.fa.png) +![اینفوگرافیک رگرسیون خطی و چندجمله‌ای](../../../../2-Regression/3-Linear/images/linear-polynomial.png) > اینفوگرافیک توسط [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) > ### [این درس به زبان R نیز موجود است!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) ### مقدمه -تا اینجا شما با مفهوم رگرسیون آشنا شده‌اید و داده‌های نمونه‌ای از مجموعه داده‌های قیمت کدو تنبل را که در طول این درس استفاده خواهیم کرد، بررسی کرده‌اید. همچنین این داده‌ها را با استفاده از Matplotlib بصری‌سازی کرده‌اید. +تا اینجا شما با مفهوم رگرسیون آشنا شده‌اید و داده‌های نمونه‌ای از مجموعه داده‌های قیمت‌گذاری کدو تنبل را بررسی کرده‌اید که در طول این درس از آن استفاده خواهیم کرد. همچنین این داده‌ها را با استفاده از Matplotlib بصری‌سازی کرده‌اید. -اکنون آماده هستید تا به عمق بیشتری در رگرسیون برای یادگیری ماشین بپردازید. در حالی که بصری‌سازی به شما کمک می‌کند داده‌ها را درک کنید، قدرت واقعی یادگیری ماشین از _آموزش مدل‌ها_ ناشی می‌شود. مدل‌ها بر اساس داده‌های تاریخی آموزش داده می‌شوند تا وابستگی‌های داده‌ها را به صورت خودکار ثبت کنند و به شما امکان پیش‌بینی نتایج برای داده‌های جدیدی را می‌دهند که مدل قبلاً ندیده است. +اکنون آماده هستید تا به عمق بیشتری در موضوع رگرسیون برای یادگیری ماشین بپردازید. در حالی که بصری‌سازی به شما کمک می‌کند داده‌ها را درک کنید، قدرت واقعی یادگیری ماشین در _آموزش مدل‌ها_ نهفته است. مدل‌ها بر اساس داده‌های تاریخی آموزش داده می‌شوند تا وابستگی‌های داده‌ها را به طور خودکار شناسایی کنند و به شما امکان می‌دهند نتایج را برای داده‌های جدیدی که مدل قبلاً ندیده است پیش‌بینی کنید. -در این درس، شما با دو نوع رگرسیون بیشتر آشنا خواهید شد: _رگرسیون خطی ساده_ و _رگرسیون چندجمله‌ای_، همراه با برخی از ریاضیات پایه‌ای این تکنیک‌ها. این مدل‌ها به ما امکان پیش‌بینی قیمت کدو تنبل را بر اساس داده‌های ورودی مختلف می‌دهند. +در این درس، شما با دو نوع رگرسیون بیشتر آشنا خواهید شد: _رگرسیون خطی ساده_ و _رگرسیون چندجمله‌ای_، همراه با برخی از ریاضیات پایه‌ای این تکنیک‌ها. این مدل‌ها به ما امکان می‌دهند قیمت کدو تنبل را بر اساس داده‌های ورودی مختلف پیش‌بینی کنیم. [![یادگیری ماشین برای مبتدیان - درک رگرسیون خطی](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "یادگیری ماشین برای مبتدیان - درک رگرسیون خطی") -> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره رگرسیون خطی مشاهده کنید. +> 🎥 برای مشاهده ویدئوی کوتاه درباره رگرسیون خطی، روی تصویر بالا کلیک کنید. > در طول این دوره آموزشی، ما فرض می‌کنیم که دانش ریاضی شما حداقلی است و تلاش می‌کنیم آن را برای دانش‌آموزانی که از زمینه‌های دیگر می‌آیند قابل دسترس کنیم. بنابراین به یادداشت‌ها، 🧮 نکات، نمودارها و ابزارهای یادگیری دیگر برای کمک به درک توجه کنید. @@ -34,25 +34,25 @@ CO_OP_TRANSLATOR_METADATA: ### آماده‌سازی -به یاد داشته باشید که شما این داده‌ها را بارگذاری می‌کنید تا از آن‌ها سوالاتی بپرسید. +به یاد داشته باشید که شما این داده‌ها را بارگذاری می‌کنید تا سوالاتی از آن بپرسید. - بهترین زمان برای خرید کدو تنبل چه زمانی است؟ - چه قیمتی را می‌توانم برای یک جعبه کدو تنبل کوچک انتظار داشته باشم؟ -- آیا باید آن‌ها را در سبدهای نیم‌بوشل بخرم یا در جعبه‌های 1 1/9 بوشل؟ +- آیا باید آن‌ها را در سبد‌های نیم‌بوشل بخرم یا در جعبه‌های 1 1/9 بوشل؟ بیایید به بررسی این داده‌ها ادامه دهیم. -در درس قبلی، شما یک فریم داده Pandas ایجاد کردید و آن را با بخشی از مجموعه داده اصلی پر کردید، قیمت‌ها را به صورت استاندارد به ازای هر بوشل تنظیم کردید. با این حال، با انجام این کار، فقط توانستید حدود 400 نقطه داده جمع‌آوری کنید و فقط برای ماه‌های پاییز. +در درس قبلی، شما یک فریم داده Pandas ایجاد کردید و آن را با بخشی از مجموعه داده اصلی پر کردید، قیمت‌ها را بر اساس بوشل استانداردسازی کردید. با این حال، با انجام این کار، فقط توانستید حدود 400 نقطه داده جمع‌آوری کنید و فقط برای ماه‌های پاییز. به داده‌هایی که در نوت‌بوک همراه این درس از پیش بارگذاری شده‌اند نگاهی بیندازید. داده‌ها از پیش بارگذاری شده‌اند و یک نمودار پراکندگی اولیه برای نمایش داده‌های ماه رسم شده است. شاید بتوانیم با پاک‌سازی بیشتر، جزئیات بیشتری درباره ماهیت داده‌ها به دست آوریم. -## یک خط رگرسیون خطی +## خط رگرسیون خطی -همان‌طور که در درس 1 یاد گرفتید، هدف یک تمرین رگرسیون خطی این است که بتوانید یک خط رسم کنید تا: +همانطور که در درس 1 یاد گرفتید، هدف یک تمرین رگرسیون خطی این است که بتوانید یک خط رسم کنید تا: - **روابط متغیرها را نشان دهید**. رابطه بین متغیرها را نشان دهید. -- **پیش‌بینی کنید**. پیش‌بینی‌های دقیقی درباره محل قرارگیری یک نقطه داده جدید نسبت به آن خط انجام دهید. +- **پیش‌بینی کنید**. پیش‌بینی‌های دقیقی درباره اینکه یک نقطه داده جدید در رابطه با آن خط کجا قرار می‌گیرد انجام دهید. -در رگرسیون **کمترین مربعات** معمول است که این نوع خط رسم شود. اصطلاح "کمترین مربعات" به این معناست که تمام نقاط داده اطراف خط رگرسیون مربع شده و سپس جمع می‌شوند. ایده‌آل این است که این مجموع نهایی تا حد ممکن کوچک باشد، زیرا ما می‌خواهیم تعداد خطاها کم باشد یا همان `کمترین مربعات`. +در رگرسیون **کمترین مربعات** معمول است که این نوع خط را رسم کنید. اصطلاح "کمترین مربعات" به این معناست که تمام نقاط داده اطراف خط رگرسیون مربع شده و سپس جمع می‌شوند. ایده‌آل این است که این مجموع نهایی تا حد ممکن کوچک باشد، زیرا ما می‌خواهیم تعداد خطاها کم باشد، یا همان `کمترین مربعات`. ما این کار را انجام می‌دهیم زیرا می‌خواهیم مدلی از یک خط داشته باشیم که کمترین فاصله تجمعی از تمام نقاط داده ما را داشته باشد. همچنین قبل از جمع کردن، مقادیر را مربع می‌کنیم زیرا به بزرگی آن‌ها اهمیت می‌دهیم نه جهت آن‌ها. @@ -66,13 +66,13 @@ CO_OP_TRANSLATOR_METADATA: > > `X` متغیر توضیحی است. `Y` متغیر وابسته است. شیب خط `b` است و `a` نقطه تقاطع با محور y است که به مقدار `Y` زمانی که `X = 0` اشاره دارد. > ->![محاسبه شیب](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.fa.png) +>![محاسبه شیب](../../../../2-Regression/3-Linear/images/slope.png) > > ابتدا شیب `b` را محاسبه کنید. اینفوگرافیک توسط [Jen Looper](https://twitter.com/jenlooper) > -> به عبارت دیگر، و با اشاره به سوال اصلی داده‌های کدو تنبل: "پیش‌بینی قیمت کدو تنبل به ازای هر بوشل بر اساس ماه"، `X` به قیمت اشاره دارد و `Y` به ماه فروش اشاره دارد. +> به عبارت دیگر، و با اشاره به سوال اصلی داده‌های کدو تنبل: "پیش‌بینی قیمت کدو تنبل به ازای هر بوشل بر اساس ماه"، `X` به قیمت اشاره دارد و `Y` به ماه فروش. > ->![تکمیل معادله](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.fa.png) +>![تکمیل معادله](../../../../2-Regression/3-Linear/images/calculation.png) > > مقدار `Y` را محاسبه کنید. اگر حدود 4 دلار پرداخت می‌کنید، باید ماه آوریل باشد! اینفوگرافیک توسط [Jen Looper](https://twitter.com/jenlooper) > @@ -84,9 +84,9 @@ CO_OP_TRANSLATOR_METADATA: یک اصطلاح دیگر که باید درک کنید **ضریب همبستگی** بین متغیرهای X و Y داده شده است. با استفاده از نمودار پراکندگی، می‌توانید این ضریب را به سرعت بصری‌سازی کنید. نموداری با نقاط داده پراکنده در یک خط مرتب دارای همبستگی بالا است، اما نموداری با نقاط داده پراکنده در همه جا بین X و Y دارای همبستگی پایین است. -یک مدل رگرسیون خطی خوب مدلی است که با استفاده از روش کمترین مربعات رگرسیون و یک خط رگرسیون، ضریب همبستگی بالایی (نزدیک‌تر به 1 نسبت به 0) داشته باشد. +یک مدل رگرسیون خطی خوب مدلی است که با استفاده از روش کمترین مربعات رگرسیون و یک خط رگرسیون، ضریب همبستگی بالایی (نزدیک‌تر به 1 تا 0) داشته باشد. -✅ نوت‌بوک همراه این درس را اجرا کنید و به نمودار پراکندگی ماه به قیمت نگاه کنید. آیا داده‌های مرتبط با ماه به قیمت برای فروش کدو تنبل به نظر شما همبستگی بالا یا پایینی دارند، بر اساس تفسیر بصری شما از نمودار پراکندگی؟ آیا این تغییر می‌کند اگر از اندازه‌گیری دقیق‌تر به جای `ماه` استفاده کنید، مانند *روز سال* (یعنی تعداد روزها از ابتدای سال)؟ +✅ نوت‌بوک همراه این درس را اجرا کنید و به نمودار پراکندگی ماه به قیمت نگاه کنید. آیا داده‌های مرتبط با ماه به قیمت برای فروش کدو تنبل به نظر شما همبستگی بالا یا پایینی دارند، بر اساس تفسیر بصری شما از نمودار پراکندگی؟ آیا این تغییر می‌کند اگر به جای `ماه` از اندازه‌گیری دقیق‌تر مانند *روز سال* (یعنی تعداد روزها از ابتدای سال) استفاده کنید؟ در کد زیر، فرض می‌کنیم که داده‌ها را پاک‌سازی کرده‌ایم و یک فریم داده به نام `new_pumpkins` به دست آورده‌ایم، مشابه موارد زیر: @@ -98,7 +98,7 @@ ID | ماه | روز سال | نوع | شهر | بسته‌بندی | قیمت 73 | 10 | 274 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | نوع پای | بالتیمور | جعبه‌های 1 1/9 بوشل | 15.0 | 15.0 | 13.636364 -> کد پاک‌سازی داده‌ها در [`notebook.ipynb`](notebook.ipynb) موجود است. ما همان مراحل پاک‌سازی درس قبلی را انجام داده‌ایم و ستون `روز سال` را با استفاده از عبارت زیر محاسبه کرده‌ایم: +> کد پاک‌سازی داده‌ها در [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb) موجود است. ما همان مراحل پاک‌سازی درس قبلی را انجام داده‌ایم و ستون `روز سال` را با استفاده از عبارت زیر محاسبه کرده‌ایم: ```python day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) @@ -110,24 +110,24 @@ day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt. [![یادگیری ماشین برای مبتدیان - جستجوی همبستگی: کلید رگرسیون خطی](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "یادگیری ماشین برای مبتدیان - جستجوی همبستگی: کلید رگرسیون خطی") -> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره همبستگی مشاهده کنید. +> 🎥 برای مشاهده ویدئوی کوتاه درباره همبستگی، روی تصویر بالا کلیک کنید. از درس قبلی احتمالاً دیده‌اید که میانگین قیمت برای ماه‌های مختلف به این شکل است: میانگین قیمت بر اساس ماه -این نشان می‌دهد که باید مقداری همبستگی وجود داشته باشد، و می‌توانیم تلاش کنیم مدل رگرسیون خطی را برای پیش‌بینی رابطه بین `ماه` و `قیمت` یا بین `روز سال` و `قیمت` آموزش دهیم. اینجا نمودار پراکندگی‌ای است که رابطه دوم را نشان می‌دهد: +این نشان می‌دهد که باید مقداری همبستگی وجود داشته باشد، و می‌توانیم تلاش کنیم مدل رگرسیون خطی را آموزش دهیم تا رابطه بین `ماه` و `قیمت` یا بین `روز سال` و `قیمت` را پیش‌بینی کنیم. در اینجا نمودار پراکندگی که رابطه دوم را نشان می‌دهد آورده شده است: نمودار پراکندگی قیمت در مقابل روز سال -بیایید ببینیم آیا همبستگی وجود دارد با استفاده از تابع `corr`: +بیایید ببینیم آیا همبستگی وجود دارد یا نه با استفاده از تابع `corr`: ```python print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) ``` -به نظر می‌رسد که همبستگی بسیار کم است، -0.15 بر اساس `ماه` و -0.17 بر اساس `روز ماه`، اما ممکن است رابطه مهم دیگری وجود داشته باشد. به نظر می‌رسد که دسته‌های مختلف قیمت‌ها مربوط به انواع مختلف کدو تنبل هستند. برای تأیید این فرضیه، بیایید هر دسته کدو تنبل را با یک رنگ متفاوت رسم کنیم. با ارسال پارامتر `ax` به تابع رسم پراکندگی می‌توانیم تمام نقاط را روی یک نمودار رسم کنیم: +به نظر می‌رسد که همبستگی بسیار کم است، -0.15 بر اساس `ماه` و -0.17 بر اساس `روز سال`، اما ممکن است رابطه مهم دیگری وجود داشته باشد. به نظر می‌رسد که دسته‌های مختلف قیمت‌ها مربوط به انواع مختلف کدو تنبل هستند. برای تأیید این فرضیه، بیایید هر دسته کدو تنبل را با رنگ متفاوتی رسم کنیم. با ارسال پارامتر `ax` به تابع رسم پراکندگی، می‌توانیم تمام نقاط را روی یک نمودار رسم کنیم: ```python ax=None @@ -139,7 +139,7 @@ for i,var in enumerate(new_pumpkins['Variety'].unique()): نمودار پراکندگی قیمت در مقابل روز سال -تحقیقات ما نشان می‌دهد که نوع کدو تنبل تأثیر بیشتری بر قیمت کلی نسبت به تاریخ فروش دارد. می‌توانیم این را با یک نمودار میله‌ای ببینیم: +تحقیقات ما نشان می‌دهد که نوع کدو تنبل تأثیر بیشتری بر قیمت کلی دارد تا تاریخ فروش واقعی. می‌توانیم این را با یک نمودار میله‌ای ببینیم: ```python new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') @@ -155,7 +155,7 @@ pie_pumpkins.plot.scatter('DayOfYear','Price') ``` نمودار پراکندگی قیمت در مقابل روز سال -اگر اکنون همبستگی بین `قیمت` و `روز سال` را با استفاده از تابع `corr` محاسبه کنیم، چیزی حدود `-0.27` به دست خواهیم آورد - که نشان می‌دهد آموزش یک مدل پیش‌بینی منطقی است. +اگر اکنون همبستگی بین `قیمت` و `روز سال` را با استفاده از تابع `corr` محاسبه کنیم، چیزی حدود `-0.27` به دست خواهیم آورد - که به این معناست که آموزش یک مدل پیش‌بینی منطقی است. > قبل از آموزش مدل رگرسیون خطی، مهم است که مطمئن شویم داده‌های ما پاک هستند. رگرسیون خطی با مقادیر گمشده خوب کار نمی‌کند، بنابراین منطقی است که تمام سلول‌های خالی را حذف کنیم: @@ -170,7 +170,7 @@ pie_pumpkins.info() [![یادگیری ماشین برای مبتدیان - رگرسیون خطی و چندجمله‌ای با استفاده از Scikit-learn](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "یادگیری ماشین برای مبتدیان - رگرسیون خطی و چندجمله‌ای با استفاده از Scikit-learn") -> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره رگرسیون خطی و چندجمله‌ای مشاهده کنید. +> 🎥 برای مشاهده ویدئوی کوتاه درباره رگرسیون خطی و چندجمله‌ای، روی تصویر بالا کلیک کنید. برای آموزش مدل رگرسیون خطی خود، از کتابخانه **Scikit-learn** استفاده خواهیم کرد. @@ -187,7 +187,7 @@ X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> توجه داشته باشید که ما باید `reshape` را روی داده‌های ورودی انجام دهیم تا بسته رگرسیون خطی آن را به درستی درک کند. رگرسیون خطی یک آرایه دو‌بعدی را به عنوان ورودی انتظار دارد، که هر سطر آرایه مربوط به یک بردار از ویژگی‌های ورودی است. در مورد ما، چون فقط یک ورودی داریم - به آرایه‌ای با شکل N×1 نیاز داریم، که N اندازه مجموعه داده است. +> توجه داشته باشید که ما مجبور بودیم داده‌های ورودی را با استفاده از `reshape` تغییر شکل دهیم تا بسته رگرسیون خطی بتواند آن را به درستی درک کند. رگرسیون خطی یک آرایه دو‌بعدی را به عنوان ورودی انتظار دارد، جایی که هر سطر آرایه مربوط به یک بردار از ویژگی‌های ورودی است. در مورد ما، از آنجا که فقط یک ورودی داریم - به آرایه‌ای با شکل N×1 نیاز داریم، جایی که N اندازه مجموعه داده است. سپس، باید داده‌ها را به مجموعه‌های آموزشی و آزمایشی تقسیم کنیم تا بتوانیم مدل خود را پس از آموزش اعتبارسنجی کنیم: @@ -202,9 +202,9 @@ lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -شیء `LinearRegression` پس از تطبیق شامل تمام ضرایب رگرسیون است، که می‌توان با استفاده از ویژگی `.coef_` به آن‌ها دسترسی داشت. در مورد ما، فقط یک ضریب وجود دارد، که باید حدود `-0.017` باشد. این به این معناست که قیمت‌ها به نظر می‌رسد کمی با گذشت زمان کاهش می‌یابند، اما نه خیلی زیاد، حدود 2 سنت در روز. همچنین می‌توانیم نقطه تقاطع رگرسیون با محور Y را با استفاده از `lin_reg.intercept_` دسترسی داشته باشیم - که در مورد ما حدود `21` خواهد بود، که نشان‌دهنده قیمت در ابتدای سال است. +شیء `LinearRegression` پس از تطبیق شامل تمام ضرایب رگرسیون است که می‌توان با استفاده از ویژگی `.coef_` به آن‌ها دسترسی پیدا کرد. در مورد ما، فقط یک ضریب وجود دارد، که باید حدود `-0.017` باشد. این به این معناست که قیمت‌ها به نظر می‌رسد کمی با گذشت زمان کاهش می‌یابند، اما نه خیلی زیاد، حدود 2 سنت در روز. همچنین می‌توانیم نقطه تقاطع رگرسیون با محور Y را با استفاده از `lin_reg.intercept_` دسترسی پیدا کنیم - که در مورد ما حدود `21` خواهد بود، که نشان‌دهنده قیمت در ابتدای سال است. -برای دیدن اینکه مدل ما چقدر دقیق است، می‌توانیم قیمت‌ها را در مجموعه داده آزمایشی پیش‌بینی کنیم و سپس اندازه‌گیری کنیم که پیش‌بینی‌های ما چقدر به مقادیر مورد انتظار نزدیک هستند. این کار را می‌توان با معیار خطای میانگین مربعات (MSE) انجام داد، که میانگین تمام تفاوت‌های مربعی بین مقدار مورد انتظار و مقدار پیش‌بینی‌شده است. +برای دیدن اینکه مدل ما چقدر دقیق است، می‌توانیم قیمت‌ها را در مجموعه داده آزمایشی پیش‌بینی کنیم و سپس اندازه‌گیری کنیم که پیش‌بینی‌های ما چقدر به مقادیر مورد انتظار نزدیک هستند. این کار را می‌توان با استفاده از معیار خطای میانگین مربعات (MSE) انجام داد، که میانگین تمام تفاوت‌های مربعی بین مقدار مورد انتظار و پیش‌بینی شده است. ```python pred = lin_reg.predict(X_test) @@ -212,13 +212,13 @@ 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}%)') ``` -به نظر می‌رسد خطای ما در حدود ۲ نقطه است، که تقریباً برابر با ۱۷٪ می‌باشد. این خیلی خوب نیست. یکی دیگر از شاخص‌های کیفیت مدل **ضریب تعیین** است، که می‌توان آن را به این صورت محاسبه کرد: +خطای ما به نظر می‌رسد در حدود ۲ نقطه باشد، که تقریباً ۱۷٪ است. چندان خوب نیست. یکی دیگر از شاخص‌های کیفیت مدل **ضریب تعیین** است، که می‌توان آن را به این صورت به دست آورد: ```python score = lin_reg.score(X_train,y_train) print('Model determination: ', score) ``` -اگر مقدار برابر با ۰ باشد، به این معناست که مدل داده‌های ورودی را در نظر نمی‌گیرد و به عنوان *بدترین پیش‌بینی‌کننده خطی* عمل می‌کند، که صرفاً میانگین نتایج است. مقدار ۱ نشان می‌دهد که می‌توانیم تمام خروجی‌های مورد انتظار را به طور کامل پیش‌بینی کنیم. در مورد ما، ضریب تعیین حدود ۰.۰۶ است، که بسیار پایین است. +اگر مقدار برابر با ۰ باشد، به این معناست که مدل داده‌های ورودی را در نظر نمی‌گیرد و به عنوان *بدترین پیش‌بینی‌کننده خطی* عمل می‌کند، که صرفاً میانگین نتایج است. مقدار ۱ به این معناست که می‌توانیم تمام خروجی‌های مورد انتظار را به طور کامل پیش‌بینی کنیم. در مورد ما، ضریب تعیین حدود ۰.۰۶ است که بسیار پایین است. ما همچنین می‌توانیم داده‌های آزمایشی را همراه با خط رگرسیون رسم کنیم تا بهتر ببینیم که رگرسیون در مورد ما چگونه عمل می‌کند: @@ -235,13 +235,13 @@ plt.plot(X_test,pred) ✅ [اینجا چند مثال دیگر](https://online.stat.psu.edu/stat501/lesson/9/9.8) از داده‌هایی که می‌توانند از رگرسیون چندجمله‌ای استفاده کنند آورده شده است. -یک بار دیگر به رابطه بین تاریخ و قیمت نگاه کنید. آیا این نمودار پراکندگی به نظر می‌رسد که باید لزوماً با یک خط مستقیم تحلیل شود؟ آیا قیمت‌ها نمی‌توانند نوسان داشته باشند؟ در این حالت، می‌توانید رگرسیون چندجمله‌ای را امتحان کنید. +یک بار دیگر به رابطه بین تاریخ و قیمت نگاه کنید. آیا این نمودار پراکندگی به نظر می‌رسد که باید حتماً با یک خط مستقیم تحلیل شود؟ آیا قیمت‌ها نمی‌توانند نوسان داشته باشند؟ در این مورد، می‌توانید رگرسیون چندجمله‌ای را امتحان کنید. ✅ چندجمله‌ای‌ها عبارت‌های ریاضی هستند که ممکن است شامل یک یا چند متغیر و ضرایب باشند. -رگرسیون چندجمله‌ای یک خط منحنی ایجاد می‌کند تا داده‌های غیرخطی را بهتر تطبیق دهد. در مورد ما، اگر یک متغیر `DayOfYear` به توان دو را به داده‌های ورودی اضافه کنیم، باید بتوانیم داده‌های خود را با یک منحنی سهمی تطبیق دهیم، که در یک نقطه خاص در طول سال حداقل خواهد بود. +رگرسیون چندجمله‌ای یک خط منحنی ایجاد می‌کند تا داده‌های غیرخطی را بهتر تطبیق دهد. در مورد ما، اگر یک متغیر `DayOfYear` به توان دو را به داده‌های ورودی اضافه کنیم، باید بتوانیم داده‌های خود را با یک منحنی سهمی تطبیق دهیم که در یک نقطه خاص در طول سال حداقل خواهد بود. -کتابخانه Scikit-learn شامل یک [API خط لوله](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) مفید است که مراحل مختلف پردازش داده‌ها را با هم ترکیب می‌کند. **خط لوله** زنجیره‌ای از **تخمین‌گرها** است. در مورد ما، یک خط لوله ایجاد خواهیم کرد که ابتدا ویژگی‌های چندجمله‌ای را به مدل اضافه می‌کند و سپس رگرسیون را آموزش می‌دهد: +Scikit-learn یک [API خط لوله](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) مفید برای ترکیب مراحل مختلف پردازش داده‌ها ارائه می‌دهد. **خط لوله** زنجیره‌ای از **تخمین‌گرها** است. در مورد ما، یک خط لوله ایجاد خواهیم کرد که ابتدا ویژگی‌های چندجمله‌ای را به مدل اضافه می‌کند و سپس رگرسیون را آموزش می‌دهد: ```python from sklearn.preprocessing import PolynomialFeatures @@ -252,36 +252,36 @@ pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) ``` -استفاده از `PolynomialFeatures(2)` به این معناست که تمام چندجمله‌ای‌های درجه دوم از داده‌های ورودی را شامل می‌شود. در مورد ما، این فقط به معنای `DayOfYear`2 خواهد بود، اما با دو متغیر ورودی X و Y، این شامل X2، XY و Y2 نیز خواهد بود. اگر بخواهیم، می‌توانیم از چندجمله‌ای‌های درجه بالاتر نیز استفاده کنیم. +استفاده از `PolynomialFeatures(2)` به این معناست که تمام چندجمله‌ای‌های درجه دوم از داده‌های ورودی را شامل خواهیم کرد. در مورد ما این فقط به معنای `DayOfYear`2 خواهد بود، اما با دو متغیر ورودی X و Y، این شامل X2، XY و Y2 خواهد بود. اگر بخواهیم، می‌توانیم از چندجمله‌ای‌های درجه بالاتر نیز استفاده کنیم. -خط لوله‌ها را می‌توان به همان شیوه‌ای که شیء اصلی `LinearRegression` استفاده می‌شود، به کار برد، یعنی می‌توانیم خط لوله را `fit` کنیم و سپس از `predict` برای دریافت نتایج پیش‌بینی استفاده کنیم. اینجا نموداری است که داده‌های آزمایشی و منحنی تقریب را نشان می‌دهد: +خط لوله‌ها را می‌توان به همان شیوه‌ای که شیء اصلی `LinearRegression` استفاده می‌شود، یعنی با `fit` کردن خط لوله و سپس استفاده از `predict` برای دریافت نتایج پیش‌بینی، استفاده کرد. اینجا نمودار داده‌های آزمایشی و منحنی تقریب آورده شده است: رگرسیون چندجمله‌ای با استفاده از رگرسیون چندجمله‌ای، می‌توانیم MSE کمی پایین‌تر و ضریب تعیین بالاتری داشته باشیم، اما نه به طور قابل توجهی. باید ویژگی‌های دیگر را نیز در نظر بگیریم! -> می‌توانید ببینید که حداقل قیمت‌های کدو تنبل در حوالی هالووین مشاهده می‌شود. چگونه می‌توانید این را توضیح دهید؟ +> می‌توانید ببینید که قیمت‌های حداقل کدو تنبل در حوالی هالووین مشاهده می‌شود. چگونه می‌توانید این را توضیح دهید؟ -🎃 تبریک می‌گوییم، شما مدلی ایجاد کردید که می‌تواند قیمت کدو تنبل‌های پای را پیش‌بینی کند. احتمالاً می‌توانید همین روش را برای همه انواع کدو تنبل تکرار کنید، اما این کار خسته‌کننده خواهد بود. حالا بیایید یاد بگیریم که چگونه نوع کدو تنبل را در مدل خود در نظر بگیریم! +🎃 تبریک می‌گویم، شما مدلی ایجاد کردید که می‌تواند به پیش‌بینی قیمت کدو تنبل پای کمک کند. احتمالاً می‌توانید همین روش را برای همه انواع کدو تنبل تکرار کنید، اما این کار خسته‌کننده خواهد بود. حالا بیایید یاد بگیریم که چگونه نوع کدو تنبل را در مدل خود در نظر بگیریم! ## ویژگی‌های دسته‌بندی‌شده -در دنیای ایده‌آل، می‌خواهیم بتوانیم قیمت‌ها را برای انواع مختلف کدو تنبل با استفاده از یک مدل پیش‌بینی کنیم. با این حال، ستون `Variety` کمی متفاوت از ستون‌هایی مانند `Month` است، زیرا شامل مقادیر غیرعددی است. چنین ستون‌هایی **دسته‌بندی‌شده** نامیده می‌شوند. +در دنیای ایده‌آل، ما می‌خواهیم بتوانیم قیمت‌ها را برای انواع مختلف کدو تنبل با استفاده از همان مدل پیش‌بینی کنیم. با این حال، ستون `Variety` کمی متفاوت از ستون‌هایی مانند `Month` است، زیرا شامل مقادیر غیرعددی است. چنین ستون‌هایی **دسته‌بندی‌شده** نامیده می‌شوند. [![یادگیری ماشین برای مبتدیان - پیش‌بینی ویژگی‌های دسته‌بندی‌شده با رگرسیون خطی](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "یادگیری ماشین برای مبتدیان - پیش‌بینی ویژگی‌های دسته‌بندی‌شده با رگرسیون خطی") -> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره استفاده از ویژگی‌های دسته‌بندی‌شده ببینید. +> 🎥 روی تصویر بالا کلیک کنید تا یک ویدئوی کوتاه درباره استفاده از ویژگی‌های دسته‌بندی‌شده مشاهده کنید. اینجا می‌توانید ببینید که چگونه قیمت متوسط به نوع کدو تنبل بستگی دارد: قیمت متوسط بر اساس نوع -برای در نظر گرفتن نوع کدو تنبل، ابتدا باید آن را به شکل عددی تبدیل کنیم، یا **کدگذاری** کنیم. چند روش برای این کار وجود دارد: +برای در نظر گرفتن نوع کدو تنبل، ابتدا باید آن را به شکل عددی تبدیل کنیم، یا **رمزگذاری** کنیم. چند روش برای انجام این کار وجود دارد: -* **کدگذاری عددی ساده** یک جدول از انواع مختلف ایجاد می‌کند و سپس نام نوع را با یک شاخص در آن جدول جایگزین می‌کند. این روش برای رگرسیون خطی بهترین نیست، زیرا رگرسیون خطی مقدار عددی واقعی شاخص را می‌گیرد و آن را به نتیجه اضافه می‌کند، ضرب در یک ضریب خاص. در مورد ما، رابطه بین شماره شاخص و قیمت به وضوح غیرخطی است، حتی اگر مطمئن شویم که شاخص‌ها به ترتیب خاصی مرتب شده‌اند. -* **کدگذاری یک‌داغ** ستون `Variety` را با ۴ ستون مختلف جایگزین می‌کند، یکی برای هر نوع. هر ستون شامل `1` خواهد بود اگر ردیف مربوطه از نوع خاصی باشد، و در غیر این صورت `0`. این به این معناست که در رگرسیون خطی، چهار ضریب وجود خواهد داشت، یکی برای هر نوع کدو تنبل، که مسئول "قیمت پایه" (یا بهتر بگوییم "قیمت اضافی") برای آن نوع خاص است. +* **رمزگذاری عددی ساده** یک جدول از انواع مختلف ایجاد می‌کند و سپس نام نوع را با یک شاخص در آن جدول جایگزین می‌کند. این بهترین روش برای رگرسیون خطی نیست، زیرا رگرسیون خطی مقدار عددی واقعی شاخص را می‌گیرد و آن را به نتیجه اضافه می‌کند، ضرب در یک ضریب. در مورد ما، رابطه بین شماره شاخص و قیمت به وضوح غیرخطی است، حتی اگر مطمئن شویم که شاخص‌ها به ترتیب خاصی مرتب شده‌اند. +* **رمزگذاری یک‌به‌چند** ستون `Variety` را با ۴ ستون مختلف جایگزین می‌کند، یکی برای هر نوع. هر ستون شامل `1` خواهد بود اگر ردیف مربوطه از یک نوع خاص باشد، و در غیر این صورت `0`. این به این معناست که در رگرسیون خطی، چهار ضریب وجود خواهد داشت، یکی برای هر نوع کدو تنبل، که مسئول "قیمت شروع" (یا بهتر بگوییم "قیمت اضافی") برای آن نوع خاص است. -کد زیر نشان می‌دهد که چگونه می‌توان یک نوع را به صورت یک‌داغ کدگذاری کرد: +کد زیر نشان می‌دهد که چگونه می‌توان یک نوع را به صورت یک‌به‌چند رمزگذاری کرد: ```python pd.get_dummies(new_pumpkins['Variety']) @@ -298,14 +298,14 @@ pd.get_dummies(new_pumpkins['Variety']) 1741 | 0 | 1 | 0 | 0 1742 | 0 | 1 | 0 | 0 -برای آموزش رگرسیون خطی با استفاده از نوع کدگذاری‌شده به صورت یک‌داغ به عنوان ورودی، فقط باید داده‌های `X` و `y` را به درستی مقداردهی کنیم: +برای آموزش رگرسیون خطی با استفاده از نوع رمزگذاری‌شده به صورت یک‌به‌چند به عنوان ورودی، فقط باید داده‌های `X` و `y` را به درستی مقداردهی کنیم: ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] ``` -بقیه کد مشابه چیزی است که در بالا برای آموزش رگرسیون خطی استفاده کردیم. اگر آن را امتحان کنید، خواهید دید که میانگین مربعات خطا تقریباً همان است، اما ضریب تعیین بسیار بالاتر (~77٪) است. برای پیش‌بینی‌های دقیق‌تر، می‌توانیم ویژگی‌های دسته‌بندی‌شده بیشتری را در نظر بگیریم، همچنین ویژگی‌های عددی مانند `Month` یا `DayOfYear`. برای ایجاد یک آرایه بزرگ از ویژگی‌ها، می‌توانیم از `join` استفاده کنیم: +بقیه کد مشابه چیزی است که در بالا برای آموزش رگرسیون خطی استفاده کردیم. اگر آن را امتحان کنید، خواهید دید که میانگین مربعات خطا تقریباً همان است، اما ضریب تعیین بسیار بالاتر (~77٪) است. برای دریافت پیش‌بینی‌های دقیق‌تر، می‌توانیم ویژگی‌های دسته‌بندی‌شده بیشتری را در نظر بگیریم، همچنین ویژگی‌های عددی مانند `Month` یا `DayOfYear`. برای دریافت یک آرایه بزرگ از ویژگی‌ها، می‌توانیم از `join` استفاده کنیم: ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -315,11 +315,11 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ y = new_pumpkins['Price'] ``` -اینجا همچنین `City` و نوع `Package` را در نظر می‌گیریم، که به ما MSE برابر با 2.84 (10٪) و ضریب تعیین 0.94 می‌دهد! +اینجا همچنین `City` و نوع `Package` را در نظر می‌گیریم، که MSE 2.84 (10٪) و ضریب تعیین 0.94 را به ما می‌دهد! -## جمع‌بندی همه چیز +## همه چیز را کنار هم قرار دادن -برای ایجاد بهترین مدل، می‌توانیم داده‌های ترکیبی (دسته‌بندی‌شده کدگذاری‌شده به صورت یک‌داغ + عددی) از مثال بالا را همراه با رگرسیون چندجمله‌ای استفاده کنیم. اینجا کد کامل برای راحتی شما آورده شده است: +برای ایجاد بهترین مدل، می‌توانیم داده‌های ترکیبی (دسته‌بندی‌شده رمزگذاری‌شده به صورت یک‌به‌چند + عددی) از مثال بالا را همراه با رگرسیون چندجمله‌ای استفاده کنیم. اینجا کد کامل برای راحتی شما آورده شده است: ```python # set up training data @@ -357,7 +357,7 @@ print('Model determination: ', score) | همه ویژگی‌ها خطی | 2.84 (10.5٪) | 0.94 | | همه ویژگی‌ها چندجمله‌ای | 2.23 (8.25٪) | 0.97 | -🏆 آفرین! شما چهار مدل رگرسیون را در یک درس ایجاد کردید و کیفیت مدل را به 97٪ بهبود دادید. در بخش نهایی درباره رگرسیون، یاد خواهید گرفت که چگونه از رگرسیون لجستیک برای تعیین دسته‌ها استفاده کنید. +🏆 عالی کار کردید! شما چهار مدل رگرسیون را در یک درس ایجاد کردید و کیفیت مدل را به 97٪ بهبود دادید. در بخش نهایی درباره رگرسیون، یاد خواهید گرفت که چگونه از رگرسیون لجستیک برای تعیین دسته‌ها استفاده کنید. --- @@ -365,11 +365,11 @@ print('Model determination: ', score) چندین متغیر مختلف را در این دفترچه آزمایش کنید تا ببینید چگونه همبستگی با دقت مدل مطابقت دارد. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -در این درس درباره رگرسیون خطی یاد گرفتیم. انواع مهم دیگری از رگرسیون نیز وجود دارند. درباره تکنیک‌های Stepwise، Ridge، Lasso و Elasticnet مطالعه کنید. یک دوره خوب برای یادگیری بیشتر [دوره یادگیری آماری استنفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) است. +در این درس درباره رگرسیون خطی یاد گرفتیم. انواع مهم دیگری از رگرسیون وجود دارند. درباره تکنیک‌های Stepwise، Ridge، Lasso و Elasticnet مطالعه کنید. یک دوره خوب برای یادگیری بیشتر [دوره یادگیری آماری استنفورد](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) است. ## تکلیف @@ -378,4 +378,4 @@ print('Model determination: ', score) --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/2-Regression/4-Logistic/README.md b/translations/fa/2-Regression/4-Logistic/README.md index 9777d489c..8c3218d61 100644 --- a/translations/fa/2-Regression/4-Logistic/README.md +++ b/translations/fa/2-Regression/4-Logistic/README.md @@ -1,23 +1,23 @@ # رگرسیون لجستیک برای پیش‌بینی دسته‌ها -![اینفوگرافیک رگرسیون لجستیک در مقابل رگرسیون خطی](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.fa.png) +![اینفوگرافیک رگرسیون لجستیک در مقابل رگرسیون خطی](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) > ### [این درس به زبان R نیز موجود است!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) ## مقدمه -در این درس پایانی درباره رگرسیون، یکی از تکنیک‌های پایه‌ای و کلاسیک یادگیری ماشین، به رگرسیون لجستیک خواهیم پرداخت. از این تکنیک برای کشف الگوها جهت پیش‌بینی دسته‌های دودویی استفاده می‌شود. آیا این آب‌نبات شکلاتی است یا نه؟ آیا این بیماری واگیردار است یا نه؟ آیا این مشتری این محصول را انتخاب خواهد کرد یا نه؟ +در این درس پایانی درباره رگرسیون، یکی از تکنیک‌های پایه‌ای و کلاسیک یادگیری ماشین، به بررسی رگرسیون لجستیک می‌پردازیم. از این تکنیک برای کشف الگوها و پیش‌بینی دسته‌های دودویی استفاده می‌شود. آیا این آب‌نبات شکلاتی است یا نه؟ آیا این بیماری واگیردار است یا نه؟ آیا این مشتری این محصول را انتخاب خواهد کرد یا نه؟ در این درس یاد خواهید گرفت: @@ -36,13 +36,13 @@ CO_OP_TRANSLATOR_METADATA: ## تعریف سوال -برای اهداف ما، این را به صورت دودویی بیان می‌کنیم: 'سفید' یا 'غیر سفید'. همچنین یک دسته 'راه‌راه' در مجموعه داده ما وجود دارد، اما تعداد نمونه‌های آن کم است، بنابراین از آن استفاده نمی‌کنیم. این دسته به هر حال پس از حذف مقادیر خالی از مجموعه داده ناپدید می‌شود. +برای اهداف ما، این سوال را به صورت دودویی بیان می‌کنیم: 'سفید' یا 'غیر سفید'. همچنین یک دسته 'راه‌راه' در مجموعه داده ما وجود دارد، اما تعداد نمونه‌های آن کم است، بنابراین از آن استفاده نمی‌کنیم. این دسته به هر حال پس از حذف مقادیر خالی از مجموعه داده ناپدید می‌شود. > 🎃 نکته جالب: گاهی اوقات کدوهای سفید را کدوهای 'شبح' می‌نامیم. آن‌ها خیلی راحت برای حکاکی نیستند، بنابراین به اندازه کدوهای نارنجی محبوب نیستند، اما ظاهر جالبی دارند! بنابراین می‌توانیم سوال خود را به این صورت نیز بازفرموله کنیم: 'شبح' یا 'غیر شبح'. 👻 ## درباره رگرسیون لجستیک -رگرسیون لجستیک در چندین جنبه مهم با رگرسیون خطی که قبلاً درباره آن آموختید، متفاوت است. +رگرسیون لجستیک در چندین جنبه مهم با رگرسیون خطی که قبلاً درباره آن آموختید، تفاوت دارد. [![یادگیری ماشین برای مبتدیان - درک رگرسیون لجستیک برای دسته‌بندی داده‌ها](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "یادگیری ماشین برای مبتدیان - درک رگرسیون لجستیک برای دسته‌بندی داده‌ها") @@ -52,23 +52,23 @@ CO_OP_TRANSLATOR_METADATA: رگرسیون لجستیک ویژگی‌های مشابه رگرسیون خطی را ارائه نمی‌دهد. اولی پیش‌بینی درباره یک دسته دودویی ("سفید یا غیر سفید") ارائه می‌دهد، در حالی که دومی قادر به پیش‌بینی مقادیر پیوسته است، برای مثال با توجه به منشأ کدو تنبل و زمان برداشت، _چقدر قیمت آن افزایش خواهد یافت_. -![مدل دسته‌بندی کدو تنبل](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.fa.png) +![مدل دسته‌بندی کدو تنبل](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) > اینفوگرافیک توسط [Dasani Madipalli](https://twitter.com/dasani_decoded) ### دسته‌بندی‌های دیگر -انواع دیگری از رگرسیون لجستیک وجود دارد، از جمله چندجمله‌ای و ترتیبی: +انواع دیگری از رگرسیون لجستیک وجود دارد، از جمله چندگانه و ترتیبی: -- **چندجمله‌ای**، که شامل داشتن بیش از یک دسته است - "نارنجی، سفید و راه‌راه". -- **ترتیبی**، که شامل دسته‌های مرتب شده است، مفید اگر بخواهیم نتایج خود را به صورت منطقی مرتب کنیم، مانند کدوهای ما که بر اساس تعداد محدودی از اندازه‌ها مرتب شده‌اند (کوچک، متوسط، بزرگ، خیلی بزرگ). +- **چندگانه**، که شامل داشتن بیش از یک دسته است - "نارنجی، سفید و راه‌راه". +- **ترتیبی**، که شامل دسته‌های مرتب شده است، مفید اگر بخواهیم نتایج خود را به صورت منطقی مرتب کنیم، مانند کدوهای تنبل که بر اساس تعداد محدودی از اندازه‌ها مرتب شده‌اند (کوچک، متوسط، بزرگ، و غیره). -![رگرسیون چندجمله‌ای در مقابل ترتیبی](../../../../translated_images/multinomial-vs-ordinal.36701b4850e37d86c9dd49f7bef93a2f94dbdb8fe03443eb68f0542f97f28f29.fa.png) +![رگرسیون چندگانه در مقابل ترتیبی](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) ### متغیرها لازم نیست همبستگی داشته باشند به یاد دارید که رگرسیون خطی با متغیرهای همبسته بهتر کار می‌کرد؟ رگرسیون لجستیک برعکس است - متغیرها لازم نیست هم‌راستا باشند. این برای این داده‌ها که همبستگی‌های نسبتاً ضعیفی دارند، مناسب است. -### شما به داده‌های تمیز زیادی نیاز دارید +### نیاز به داده‌های تمیز و زیاد رگرسیون لجستیک نتایج دقیق‌تری ارائه می‌دهد اگر از داده‌های بیشتری استفاده کنید؛ مجموعه داده کوچک ما برای این کار بهینه نیست، بنابراین این نکته را در نظر داشته باشید. @@ -98,11 +98,11 @@ CO_OP_TRANSLATOR_METADATA: ### مصورسازی - نمودار دسته‌بندی -تا اینجا شما [دفترچه شروع](./notebook.ipynb) را با داده‌های کدو تنبل بارگذاری کرده‌اید و آن را تمیز کرده‌اید تا مجموعه داده‌ای شامل چند متغیر، از جمله `Color` حفظ شود. بیایید دیتافریم را در دفترچه با استفاده از یک کتابخانه متفاوت مصورسازی کنیم: [Seaborn](https://seaborn.pydata.org/index.html)، که بر اساس Matplotlib ساخته شده است که قبلاً استفاده کردیم. +تا اینجا شما [دفترچه شروع](../../../../2-Regression/4-Logistic/notebook.ipynb) را با داده‌های کدو تنبل بارگذاری کرده‌اید و آن را تمیز کرده‌اید تا مجموعه داده‌ای شامل چند متغیر، از جمله `Color` حفظ شود. بیایید دیتافریم را در دفترچه با استفاده از یک کتابخانه متفاوت مصورسازی کنیم: [Seaborn](https://seaborn.pydata.org/index.html)، که بر اساس Matplotlib ساخته شده است که قبلاً استفاده کردیم. -Seaborn روش‌های جالبی برای مصورسازی داده‌های شما ارائه می‌دهد. برای مثال، می‌توانید توزیع داده‌ها را برای هر `Variety` و `Color` در یک نمودار دسته‌بندی مقایسه کنید. +Seaborn روش‌های جالبی برای مصورسازی داده‌ها ارائه می‌دهد. برای مثال، می‌توانید توزیع داده‌ها را برای هر `Variety` و `Color` در یک نمودار دسته‌بندی مقایسه کنید. -1. چنین نموداری را با استفاده از تابع `catplot`، داده‌های کدو تنبل `pumpkins`، و مشخص کردن یک نگاشت رنگی برای هر دسته کدو تنبل (نارنجی یا سفید) ایجاد کنید: +1. چنین نموداری را با استفاده از تابع `catplot`، داده‌های کدو تنبل `pumpkins`، و مشخص کردن یک نقشه رنگی برای هر دسته کدو تنبل (نارنجی یا سفید) ایجاد کنید: ```python import seaborn as sns @@ -118,7 +118,7 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های ) ``` - ![شبکه‌ای از داده‌های مصورسازی شده](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.fa.png) + ![شبکه‌ای از داده‌های مصورسازی شده](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) با مشاهده داده‌ها، می‌توانید ببینید که داده‌های رنگ چگونه به نوع کدو تنبل مرتبط هستند. @@ -126,11 +126,11 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های ### پیش‌پردازش داده‌ها: کدگذاری ویژگی‌ها و برچسب‌ها -مجموعه داده کدو تنبل ما شامل مقادیر رشته‌ای برای تمام ستون‌های آن است. کار با داده‌های دسته‌بندی برای انسان‌ها شهودی است اما برای ماشین‌ها نه. الگوریتم‌های یادگیری ماشین با اعداد بهتر کار می‌کنند. به همین دلیل کدگذاری یک مرحله بسیار مهم در مرحله پیش‌پردازش داده‌ها است، زیرا به ما امکان می‌دهد داده‌های دسته‌بندی را به داده‌های عددی تبدیل کنیم، بدون از دست دادن اطلاعات. کدگذاری خوب منجر به ساخت یک مدل خوب می‌شود. +مجموعه داده‌های کدو تنبل ما شامل مقادیر رشته‌ای برای تمام ستون‌های آن است. کار با داده‌های دسته‌بندی برای انسان‌ها شهودی است اما برای ماشین‌ها نه. الگوریتم‌های یادگیری ماشین با اعداد بهتر کار می‌کنند. به همین دلیل کدگذاری یک مرحله بسیار مهم در فاز پیش‌پردازش داده‌ها است، زیرا به ما امکان می‌دهد داده‌های دسته‌بندی را به داده‌های عددی تبدیل کنیم، بدون از دست دادن اطلاعات. کدگذاری خوب منجر به ساخت یک مدل خوب می‌شود. برای کدگذاری ویژگی‌ها دو نوع اصلی کدگذار وجود دارد: -1. کدگذار ترتیبی: برای متغیرهای ترتیبی مناسب است، که متغیرهای دسته‌بندی هستند که داده‌های آن‌ها از یک ترتیب منطقی پیروی می‌کنند، مانند ستون `Item Size` در مجموعه داده ما. این کدگذار یک نگاشت ایجاد می‌کند که هر دسته با یک عدد نشان داده می‌شود، که ترتیب دسته در ستون است. +1. کدگذار ترتیبی: برای متغیرهای ترتیبی مناسب است، که متغیرهای دسته‌بندی هستند که داده‌های آن‌ها از یک ترتیب منطقی پیروی می‌کنند، مانند ستون `Item Size` در مجموعه داده ما. این کدگذار یک نقشه ایجاد می‌کند که هر دسته با یک عدد نشان داده می‌شود، که ترتیب دسته در ستون است. ```python from sklearn.preprocessing import OrdinalEncoder @@ -140,7 +140,7 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. کدگذار دسته‌بندی: برای متغیرهای اسمی مناسب است، که متغیرهای دسته‌بندی هستند که داده‌های آن‌ها از یک ترتیب منطقی پیروی نمی‌کنند، مانند تمام ویژگی‌های متفاوت از `Item Size` در مجموعه داده ما. این یک کدگذاری یک‌به‌چند است، به این معنی که هر دسته با یک ستون دودویی نشان داده می‌شود: متغیر کدگذاری شده برابر با 1 است اگر کدو تنبل متعلق به آن نوع باشد و در غیر این صورت برابر با 0 است. +2. کدگذار دسته‌بندی: برای متغیرهای اسمی مناسب است، که متغیرهای دسته‌بندی هستند که داده‌های آن‌ها از یک ترتیب منطقی پیروی نمی‌کنند، مانند تمام ویژگی‌های متفاوت از `Item Size` در مجموعه داده ما. این یک کدگذاری یک‌به‌یک است، به این معنی که هر دسته با یک ستون دودویی نشان داده می‌شود: متغیر کدگذاری شده برابر با 1 است اگر کدو تنبل متعلق به آن نوع باشد و در غیر این صورت برابر با 0 است. ```python from sklearn.preprocessing import OneHotEncoder @@ -163,7 +163,7 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های encoded_features = ct.fit_transform(pumpkins) ``` -از طرف دیگر، برای کدگذاری برچسب، از کلاس `LabelEncoder` در scikit-learn استفاده می‌کنیم، که یک کلاس کمکی برای کمک به نرمال‌سازی برچسب‌ها است به طوری که فقط شامل مقادیر بین 0 و n_classes-1 (اینجا، 0 و 1) باشد. +از طرف دیگر، برای کدگذاری برچسب، از کلاس `LabelEncoder` در scikit-learn استفاده می‌کنیم، که یک کلاس کمکی برای نرمال‌سازی برچسب‌ها است به طوری که فقط شامل مقادیر بین 0 و n_classes-1 (اینجا، 0 و 1) باشد. ```python from sklearn.preprocessing import LabelEncoder @@ -182,7 +182,7 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های ### تحلیل روابط بین متغیرها -اکنون که داده‌های خود را پیش‌پردازش کرده‌ایم، می‌توانیم روابط بین ویژگی‌ها و برچسب را تحلیل کنیم تا ایده‌ای از اینکه مدل چقدر قادر به پیش‌بینی برچسب با توجه به ویژگی‌ها خواهد بود، به دست آوریم. بهترین راه برای انجام این نوع تحلیل، رسم داده‌ها است. دوباره از تابع `catplot` در Seaborn استفاده خواهیم کرد تا روابط بین `Item Size`، `Variety` و `Color` را در یک نمودار دسته‌بندی مصورسازی کنیم. برای بهتر رسم داده‌ها از ستون کدگذاری شده `Item Size` و ستون غیرکدگذاری شده `Variety` استفاده خواهیم کرد. +اکنون که داده‌های خود را پیش‌پردازش کرده‌ایم، می‌توانیم روابط بین ویژگی‌ها و برچسب را تحلیل کنیم تا ایده‌ای از اینکه مدل چقدر قادر خواهد بود برچسب را با توجه به ویژگی‌ها پیش‌بینی کند، به دست آوریم. بهترین راه برای انجام این نوع تحلیل، رسم داده‌ها است. دوباره از تابع `catplot` در Seaborn استفاده خواهیم کرد تا روابط بین `Item Size`، `Variety` و `Color` را در یک نمودار دسته‌بندی مصورسازی کنیم. برای بهتر رسم کردن داده‌ها از ستون کدگذاری شده `Item Size` و ستون کدگذاری نشده `Variety` استفاده خواهیم کرد. ```python palette = { @@ -202,11 +202,11 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های g.set_titles(row_template="{row_name}") ``` -![نمودار دسته‌بندی داده‌های مصورسازی شده](../../../../translated_images/pumpkins_catplot_2.87a354447880b3889278155957f8f60dd63db4598de5a6d0fda91c334d31f9f1.fa.png) +![یک نمودار دسته‌بندی از داده‌های مصورسازی شده](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) ### استفاده از نمودار Swarm -از آنجا که `Color` یک دسته دودویی است (سفید یا غیر سفید)، نیاز به 'یک [رویکرد تخصصی](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) برای مصورسازی' دارد. روش‌های دیگری برای مصورسازی رابطه این دسته با سایر متغیرها وجود دارد. +از آنجا که `Color` یک دسته‌بندی دودویی است (سفید یا غیر سفید)، نیاز به 'یک [رویکرد تخصصی](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) برای مصورسازی' دارد. روش‌های دیگری برای مصورسازی رابطه این دسته با سایر متغیرها وجود دارد. می‌توانید متغیرها را کنار هم با نمودارهای Seaborn مصورسازی کنید. @@ -220,17 +220,17 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) ``` - ![یک Swarm از داده‌های مصورسازی شده](../../../../translated_images/swarm_2.efeacfca536c2b577dc7b5f8891f28926663fbf62d893ab5e1278ae734ca104e.fa.png) + ![یک نمودار Swarm از داده‌های مصورسازی شده](../../../../2-Regression/4-Logistic/images/swarm_2.png) -**توجه**: کد بالا ممکن است یک هشدار ایجاد کند، زیرا Seaborn نمی‌تواند چنین مقدار زیادی از نقاط داده را در یک نمودار Swarm نمایش دهد. یک راه‌حل ممکن کاهش اندازه نشانگر با استفاده از پارامتر 'size' است. با این حال، توجه داشته باشید که این بر خوانایی نمودار تأثیر می‌گذارد. +**توجه کنید**: کد بالا ممکن است یک هشدار ایجاد کند، زیرا Seaborn نمی‌تواند چنین تعداد زیادی از نقاط داده را در یک نمودار Swarm نمایش دهد. یک راه‌حل ممکن کاهش اندازه نشانگر با استفاده از پارامتر 'size' است. با این حال، توجه داشته باشید که این بر خوانایی نمودار تأثیر می‌گذارد. > **🧮 ریاضیات را به من نشان بده** > -> رگرسیون لجستیک بر مفهوم 'حداکثر احتمال' با استفاده از [توابع سیگموئید](https://wikipedia.org/wiki/Sigmoid_function) متکی است. یک 'تابع سیگموئید' در نمودار شبیه یک شکل 'S' است. این مقدار را می‌گیرد و آن را به جایی بین 0 و 1 نگاشت می‌کند. منحنی آن همچنین به عنوان 'منحنی لجستیک' شناخته می‌شود. فرمول آن به این صورت است: +> رگرسیون لجستیک بر مفهوم 'بیشینه احتمال' با استفاده از [توابع سیگموید](https://wikipedia.org/wiki/Sigmoid_function) متکی است. یک 'تابع سیگموید' در نمودار شبیه یک شکل 'S' است. این مقدار را می‌گیرد و آن را به جایی بین 0 و 1 نگاشت می‌کند. منحنی آن همچنین به عنوان 'منحنی لجستیک' شناخته می‌شود. فرمول آن به این صورت است: > -> ![تابع لجستیک](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.fa.png) +> ![تابع لجستیک](../../../../2-Regression/4-Logistic/images/sigmoid.png) > -> که نقطه میانی سیگموئید در نقطه 0 محور x قرار دارد، L حداکثر مقدار منحنی است، و k شیب منحنی است. اگر نتیجه تابع بیشتر از 0.5 باشد، برچسب مورد نظر به کلاس '1' از انتخاب دودویی داده می‌شود. در غیر این صورت، به عنوان '0' طبقه‌بندی می‌شود. +> که نقطه میانی سیگموید در نقطه 0 محور x قرار دارد، L حداکثر مقدار منحنی است، و k شیب منحنی است. اگر نتیجه تابع بیشتر از 0.5 باشد، برچسب مورد نظر به کلاس '1' از انتخاب دودویی اختصاص داده می‌شود. در غیر این صورت، به کلاس '0' اختصاص داده می‌شود. ## ساخت مدل خود @@ -290,9 +290,9 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های ## درک بهتر از طریق ماتریس سردرگمی -در حالی که می‌توانید گزارش امتیاز [اصطلاحات](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://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)' (یا 'ماتریس خطا') جدولی است که مثبت‌ها و منفی‌های واقعی و کاذب مدل شما را بیان می‌کند و بنابراین دقت پیش‌بینی‌ها را ارزیابی می‌کند. +> 🎓 یک '[ماتریس سردرگمی](https://wikipedia.org/wiki/Confusion_matrix)' (یا 'ماتریس خطا') جدولی است که مثبت‌ها و منفی‌های واقعی و کاذب مدل شما را بیان می‌کند و دقت پیش‌بینی‌ها را ارزیابی می‌کند. 1. برای استفاده از ماتریس سردرگمی، `confusion_matrix()` را فراخوانی کنید: @@ -308,54 +308,54 @@ Seaborn روش‌های جالبی برای مصورسازی داده‌های [ 11, 22]]) ``` -در Scikit-learn، ردیف‌ها (محور 0) برچسب‌های واقعی هستند و ستون‌ها (محور 1) برچسب‌های پیش‌بینی شده هستند. +در Scikit-learn، ردیف‌های ماتریس سردرگمی (محور 0) برچسب‌های واقعی هستند و ستون‌ها (محور 1) برچسب‌های پیش‌بینی شده. | | 0 | 1 | | :---: | :---: | :---: | | 0 | TN | FP | | 1 | FN | TP | -چه اتفاقی می‌افتد؟ فرض کنید مدل ما از آن خواسته شده است که کدوها را بین دو دسته دودویی، دسته 'سفید' و دسته 'غیر سفید' طبقه‌بندی کند. +چه اتفاقی می‌افتد؟ فرض کنید مدل ما از آن خواسته شده است که کدوهای تنبل را بین دو دسته‌بندی دودویی، دسته 'سفید' و دسته 'غیر سفید' طبقه‌بندی کند. -- اگر مدل شما یک کدو را به عنوان غیر سفید پیش‌بینی کند و در واقع متعلق به دسته 'غیر سفید' باشد، آن را یک منفی واقعی می‌نامیم، که با عدد بالا سمت چپ نشان داده می‌شود. -- اگر مدل شما یک کدو را به عنوان سفید پیش‌بینی کند و در واقع متعلق به دسته 'غیر سفید' باشد، آن را یک منفی کاذب می‌نامیم، که با عدد پایین سمت چپ نشان داده می‌شود. -- اگر مدل شما یک کدو را به عنوان غیر سفید پیش‌بینی کند و در واقع متعلق به دسته 'سفید' باشد، آن را یک مثبت کاذب می‌نامیم، که با عدد بالا سمت راست نشان داده می‌شود. -- اگر مدل شما یک کدو را به عنوان سفید پیش‌بینی کند و در واقع متعلق به دسته 'سفید' باشد، آن را یک مثبت واقعی می‌نامیم، که با عدد پایین سمت راست نشان داده می‌شود. +- اگر مدل شما یک کدو تنبل را به عنوان غیر سفید پیش‌بینی کند و در واقع متعلق به دسته 'غیر سفید' باشد، آن را یک منفی واقعی می‌نامیم، که با عدد بالا سمت چپ نشان داده می‌شود. +- اگر مدل شما یک کدو تنبل را به عنوان سفید پیش‌بینی کند و در واقع متعلق به دسته 'غیر سفید' باشد، آن را یک منفی کاذب می‌نامیم، که با عدد پایین سمت چپ نشان داده می‌شود. +- اگر مدل شما یک کدو تنبل را به عنوان غیر سفید پیش‌بینی کند و در واقع متعلق به دسته 'سفید' باشد، آن را یک مثبت کاذب می‌نامیم، که با عدد بالا سمت راست نشان داده می‌شود. +- اگر مدل شما یک کدو تنبل را به عنوان سفید پیش‌بینی کند و در واقع متعلق به دسته 'سفید' باشد، آن را یک مثبت واقعی می‌نامیم، که با عدد پایین سمت راست نشان داده می‌شود. -همانطور که ممکن است حدس زده باشید، ترجیح داده می‌شود تعداد مثبت‌های واقعی و منفی‌های واقعی بیشتر و تعداد مثبت‌های کاذب و منفی‌های کاذب کمتر باشد، که نشان می‌دهد مدل بهتر عمل می‌کند. -ارتباط ماتریس سردرگمی با دقت و بازیابی چگونه است؟ به یاد داشته باشید که گزارش طبقه‌بندی چاپ‌شده در بالا دقت (0.85) و بازیابی (0.67) را نشان داد. +همان‌طور که ممکن است حدس زده باشید، ترجیح داده می‌شود تعداد مثبت‌های واقعی و منفی‌های واقعی بیشتر و تعداد مثبت‌های کاذب و منفی‌های کاذب کمتر باشد، که نشان‌دهنده عملکرد بهتر مدل است. +چگونه ماتریس سردرگمی به دقت و یادآوری مرتبط است؟ به یاد داشته باشید، گزارش طبقه‌بندی که در بالا چاپ شد دقت (0.85) و یادآوری (0.67) را نشان داد. دقت = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 -بازیابی = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 +یادآوری = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 -✅ سؤال: بر اساس ماتریس سردرگمی، عملکرد مدل چگونه بود؟ پاسخ: بد نبود؛ تعداد قابل توجهی منفی‌های درست وجود دارد، اما چند منفی کاذب نیز مشاهده می‌شود. +✅ سوال: بر اساس ماتریس سردرگمی، مدل چگونه عمل کرد؟ پاسخ: بد نیست؛ تعداد قابل توجهی از منفی‌های درست وجود دارد اما همچنین چند منفی اشتباه نیز دیده می‌شود. -بیایید اصطلاحاتی که قبلاً دیدیم را با کمک ماتریس سردرگمی و نگاشت TP/TN و FP/FN دوباره مرور کنیم: +بیایید اصطلاحاتی که قبلاً دیدیم را با کمک ماتریس سردرگمی و نقشه‌برداری TP/TN و FP/FN دوباره مرور کنیم: -🎓 دقت: TP/(TP + FP) کسری از نمونه‌های مرتبط در میان نمونه‌های بازیابی‌شده (مثلاً کدام برچسب‌ها به‌خوبی برچسب‌گذاری شده‌اند) +🎓 دقت: TP/(TP + FP) بخشی از نمونه‌های مرتبط در میان نمونه‌های بازیابی شده (مثلاً کدام برچسب‌ها به درستی برچسب‌گذاری شده‌اند) -🎓 بازیابی: TP/(TP + FN) کسری از نمونه‌های مرتبط که بازیابی شده‌اند، چه به‌خوبی برچسب‌گذاری شده باشند یا نه +🎓 یادآوری: TP/(TP + FN) بخشی از نمونه‌های مرتبط که بازیابی شده‌اند، چه به درستی برچسب‌گذاری شده باشند یا نه -🎓 امتیاز f1: (2 * دقت * بازیابی)/(دقت + بازیابی) میانگین وزنی دقت و بازیابی، که بهترین مقدار آن 1 و بدترین مقدار آن 0 است +🎓 امتیاز f1: (2 * دقت * یادآوری)/(دقت + یادآوری) میانگین وزنی دقت و یادآوری، که بهترین مقدار آن 1 و بدترین مقدار آن 0 است -🎓 پشتیبانی: تعداد وقوع هر برچسب بازیابی‌شده +🎓 پشتیبانی: تعداد وقوع هر برچسب بازیابی شده -🎓 دقت کلی: (TP + TN)/(TP + TN + FP + FN) درصد برچسب‌هایی که برای یک نمونه به‌درستی پیش‌بینی شده‌اند. +🎓 دقت کلی: (TP + TN)/(TP + TN + FP + FN) درصد برچسب‌هایی که برای یک نمونه به درستی پیش‌بینی شده‌اند. 🎓 میانگین ماکرو: محاسبه میانگین بدون وزن معیارها برای هر برچسب، بدون در نظر گرفتن عدم تعادل برچسب‌ها. 🎓 میانگین وزنی: محاسبه میانگین معیارها برای هر برچسب، با در نظر گرفتن عدم تعادل برچسب‌ها و وزن‌دهی آن‌ها بر اساس پشتیبانی (تعداد نمونه‌های درست برای هر برچسب). -✅ آیا می‌توانید فکر کنید که کدام معیار را باید دنبال کنید اگر بخواهید تعداد منفی‌های کاذب مدل را کاهش دهید؟ +✅ آیا می‌توانید فکر کنید کدام معیار را باید دنبال کنید اگر بخواهید مدل شما تعداد منفی‌های اشتباه را کاهش دهد؟ -## نمایش منحنی ROC این مدل +## منحنی ROC این مدل را تجسم کنید -[![ML for beginners - Analyzing Logistic Regression Performance with ROC Curves](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML for beginners - Analyzing Logistic Regression Performance with ROC Curves") +[![یادگیری ماشین برای مبتدیان - تحلیل عملکرد رگرسیون لجستیک با منحنی‌های ROC](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "یادگیری ماشین برای مبتدیان - تحلیل عملکرد رگرسیون لجستیک با منحنی‌های ROC") -> 🎥 برای مشاهده یک ویدئوی کوتاه درباره منحنی‌های ROC، روی تصویر بالا کلیک کنید. +> 🎥 برای مشاهده یک ویدئوی کوتاه درباره منحنی‌های ROC روی تصویر بالا کلیک کنید -بیایید یک تصویرسازی دیگر انجام دهیم تا منحنی معروف 'ROC' را ببینیم: +بیایید یک تجسم دیگر انجام دهیم تا منحنی معروف به 'ROC' را ببینیم: ```python from sklearn.metrics import roc_curve, roc_auc_score @@ -375,9 +375,9 @@ plt.title('ROC Curve') plt.show() ``` -با استفاده از Matplotlib، منحنی [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) یا ROC مدل را رسم کنید. منحنی‌های ROC معمولاً برای مشاهده خروجی یک طبقه‌بند از نظر مثبت‌های درست در مقابل مثبت‌های کاذب استفاده می‌شوند. "منحنی‌های ROC معمولاً نرخ مثبت درست را روی محور Y و نرخ مثبت کاذب را روی محور X نشان می‌دهند." بنابراین، شیب منحنی و فاصله بین خط میانی و منحنی اهمیت دارد: شما منحنی‌ای می‌خواهید که سریعاً به سمت بالا و بالای خط حرکت کند. در مورد ما، ابتدا مثبت‌های کاذب وجود دارند و سپس خط به‌درستی به سمت بالا و بالای خط حرکت می‌کند: +با استفاده از Matplotlib، منحنی [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) یا ROC مدل را رسم کنید. منحنی‌های ROC معمولاً برای مشاهده خروجی یک طبقه‌بند از نظر مثبت‌های درست در مقابل مثبت‌های اشتباه استفاده می‌شوند. "منحنی‌های ROC معمولاً نرخ مثبت درست را روی محور Y و نرخ مثبت اشتباه را روی محور X نشان می‌دهند." بنابراین، شیب منحنی و فاصله بین خط میانی و منحنی اهمیت دارد: شما یک منحنی می‌خواهید که سریعاً به سمت بالا و بالای خط حرکت کند. در مورد ما، ابتدا مثبت‌های اشتباه وجود دارند و سپس خط به درستی به سمت بالا و بالای خط حرکت می‌کند: -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.fa.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) در نهایت، از 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 استفاده کنید تا 'مساحت زیر منحنی' (AUC) واقعی را محاسبه کنید: @@ -385,7 +385,7 @@ plt.show() auc = roc_auc_score(y_test,y_scores[:,1]) print(auc) ``` -نتیجه `0.9749908725812341` است. با توجه به اینکه AUC از 0 تا 1 متغیر است، شما یک امتیاز بزرگ می‌خواهید، زیرا مدلی که 100% پیش‌بینی‌هایش درست باشد، AUC برابر با 1 خواهد داشت؛ در این مورد، مدل _خیلی خوب_ است. +نتیجه `0.9749908725812341` است. با توجه به اینکه AUC از 0 تا 1 متغیر است، شما یک امتیاز بزرگ می‌خواهید، زیرا مدلی که 100٪ پیش‌بینی‌هایش درست باشد، AUC برابر با 1 خواهد داشت؛ در این مورد، مدل _خیلی خوب_ است. در درس‌های آینده درباره طبقه‌بندی‌ها، یاد خواهید گرفت که چگونه برای بهبود امتیازات مدل خود تکرار کنید. اما فعلاً، تبریک می‌گوییم! شما این درس‌های رگرسیون را به پایان رساندید! @@ -394,7 +394,7 @@ print(auc) چیزهای زیادی برای بررسی در مورد رگرسیون لجستیک وجود دارد! اما بهترین راه برای یادگیری، آزمایش کردن است. یک مجموعه داده پیدا کنید که برای این نوع تحلیل مناسب باشد و با آن یک مدل بسازید. چه چیزی یاد می‌گیرید؟ نکته: برای مجموعه داده‌های جالب [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) را امتحان کنید. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی diff --git a/translations/fa/3-Web-App/1-Web-App/README.md b/translations/fa/3-Web-App/1-Web-App/README.md index 59a417e4d..c4d7a5085 100644 --- a/translations/fa/3-Web-App/1-Web-App/README.md +++ b/translations/fa/3-Web-App/1-Web-App/README.md @@ -1,26 +1,26 @@ # ساخت یک اپلیکیشن وب برای استفاده از مدل یادگیری ماشین -در این درس، شما یک مدل یادگیری ماشین را بر روی مجموعه داده‌ای که از این دنیا نیست آموزش خواهید داد: _مشاهدات بشقاب‌پرنده در طول قرن گذشته_، که از پایگاه داده NUFORC جمع‌آوری شده است. +در این درس، شما یک مدل یادگیری ماشین را بر روی مجموعه داده‌ای که از این دنیا نیست آموزش خواهید داد: _مشاهدات بشقاب پرنده در طول قرن گذشته_، که از پایگاه داده NUFORC جمع‌آوری شده است. شما یاد خواهید گرفت: -- چگونه یک مدل آموزش‌دیده را "pickle" کنید +- چگونه یک مدل آموزش‌دیده را «pickle» کنید - چگونه از آن مدل در یک اپلیکیشن Flask استفاده کنید ما همچنان از نوت‌بوک‌ها برای پاکسازی داده‌ها و آموزش مدل استفاده خواهیم کرد، اما می‌توانید این فرآیند را یک قدم جلوتر ببرید و مدل را در دنیای واقعی، به عبارتی در یک اپلیکیشن وب، به کار ببرید. برای انجام این کار، باید یک اپلیکیشن وب با استفاده از Flask بسازید. -## [پیش‌ آزمون](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [پیش‌ آزمون](https://ff-quizzes.netlify.app/en/ml/) ## ساخت اپلیکیشن @@ -30,15 +30,15 @@ CO_OP_TRANSLATOR_METADATA: سؤالات زیادی وجود دارد که باید بپرسید: -- **آیا اپلیکیشن وب است یا موبایل؟** اگر در حال ساخت یک اپلیکیشن موبایل هستید یا نیاز دارید مدل را در زمینه IoT استفاده کنید، می‌توانید از [TensorFlow Lite](https://www.tensorflow.org/lite/) استفاده کنید و مدل را در اپلیکیشن‌های اندروید یا iOS به کار ببرید. +- **آیا اپلیکیشن وب است یا موبایل؟** اگر در حال ساخت یک اپلیکیشن موبایل هستید یا نیاز دارید مدل را در یک زمینه IoT استفاده کنید، می‌توانید از [TensorFlow Lite](https://www.tensorflow.org/lite/) استفاده کنید و مدل را در اپلیکیشن اندروید یا 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 یادگیری ماشین مانند [Lobe.ai](https://lobe.ai/) یا [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott) برای آموزش مدل استفاده می‌کنید، این نوع نرم‌افزار راه‌هایی برای صادر کردن مدل برای بسیاری از پلتفرم‌ها فراهم می‌کند، از جمله ساخت یک API سفارشی که توسط اپلیکیشن آنلاین شما در فضای ابری قابل پرس‌وجو باشد. +- **از چه تکنولوژی برای آموزش مدل استفاده شده است؟** تکنولوژی انتخاب‌شده ممکن است بر ابزارهایی که باید استفاده کنید تأثیر بگذارد. + - **استفاده از TensorFlow.** اگر مدل را با استفاده از 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 یادگیری ماشین مانند [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 در زمینه جاوااسکریپت انجام شود. +شما همچنین می‌توانید یک اپلیکیشن وب کامل با Flask بسازید که بتواند مدل را در خود مرورگر وب آموزش دهد. این کار همچنین می‌تواند با استفاده از TensorFlow.js در زمینه جاوااسکریپت انجام شود. برای اهداف ما، از آنجا که با نوت‌بوک‌های مبتنی بر پایتون کار کرده‌ایم، بیایید مراحل لازم برای صادر کردن یک مدل آموزش‌دیده از چنین نوت‌بوکی به فرمتی که توسط یک اپلیکیشن وب ساخته‌شده با پایتون قابل خواندن باشد را بررسی کنیم. @@ -46,20 +46,20 @@ CO_OP_TRANSLATOR_METADATA: برای این کار، به دو ابزار نیاز دارید: Flask و Pickle، که هر دو بر روی پایتون اجرا می‌شوند. -✅ [Flask](https://palletsprojects.com/p/flask/) چیست؟ توسط سازندگانش به عنوان یک "میکرو-فریم‌ورک" تعریف شده است، Flask ویژگی‌های پایه‌ای فریم‌ورک‌های وب را با استفاده از پایتون و یک موتور قالب‌سازی برای ساخت صفحات وب فراهم می‌کند. به [این ماژول آموزشی](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) نگاهی بیندازید تا با Flask کار کنید. +✅ [Flask](https://palletsprojects.com/p/flask/) چیست؟ Flask که توسط سازندگانش به عنوان یک «میکرو-فریم‌ورک» تعریف شده است، ویژگی‌های پایه‌ای فریم‌ورک‌های وب را با استفاده از پایتون و یک موتور قالب‌سازی برای ساخت صفحات وب فراهم می‌کند. به [این ماژول آموزشی](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 🥒 یک ماژول پایتون است که ساختار یک شیء پایتون را سریال‌سازی و دی‌سریال‌سازی می‌کند. وقتی یک مدل را "pickle" می‌کنید، ساختار آن را برای استفاده در وب سریال‌سازی یا تخت می‌کنید. مراقب باشید: pickle ذاتاً امن نیست، بنابراین اگر از شما خواسته شد یک فایل "un-pickle" کنید، احتیاط کنید. فایل‌های pickled پسوند `.pkl` دارند. +✅ [Pickle](https://docs.python.org/3/library/pickle.html) چیست؟ Pickle 🥒 یک ماژول پایتون است که ساختار شیء پایتون را سریال‌سازی و دی‌سریال‌سازی می‌کند. وقتی یک مدل را «pickle» می‌کنید، ساختار آن را برای استفاده در وب سریال‌سازی یا تخت می‌کنید. مراقب باشید: pickle ذاتاً امن نیست، بنابراین اگر از شما خواسته شد یک فایل «un-pickle» کنید، احتیاط کنید. فایل‌های pickled پسوند `.pkl` دارند. ## تمرین - پاکسازی داده‌ها -در این درس شما از داده‌های ۸۰,۰۰۰ مشاهده بشقاب‌پرنده که توسط [NUFORC](https://nuforc.org) (مرکز ملی گزارش‌دهی بشقاب‌پرنده) جمع‌آوری شده است استفاده خواهید کرد. این داده‌ها شامل توضیحات جالبی از مشاهدات بشقاب‌پرنده هستند، برای مثال: +در این درس، شما از داده‌های ۸۰,۰۰۰ مشاهده بشقاب پرنده که توسط [NUFORC](https://nuforc.org) (مرکز ملی گزارش‌دهی بشقاب پرنده) جمع‌آوری شده است استفاده خواهید کرد. این داده‌ها شامل توضیحات جالبی از مشاهدات بشقاب پرنده هستند، برای مثال: -- **توضیح طولانی مثال.** "یک مرد از یک پرتو نور که در شب بر روی یک میدان چمن می‌تابد بیرون می‌آید و به سمت پارکینگ Texas Instruments می‌دود". -- **توضیح کوتاه مثال.** "چراغ‌ها ما را دنبال کردند". +- **توضیح طولانی نمونه.** "یک مرد از یک پرتو نور که در شب بر روی یک میدان چمن می‌تابد بیرون می‌آید و به سمت پارکینگ Texas Instruments می‌دود". +- **توضیح کوتاه نمونه.** "چراغ‌ها ما را دنبال کردند". صفحه‌گسترده [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) شامل ستون‌هایی درباره `شهر`، `ایالت` و `کشور` محل مشاهده، `شکل` شیء و `عرض جغرافیایی` و `طول جغرافیایی` آن است. -در [نوت‌بوک](notebook.ipynb) خالی که در این درس گنجانده شده است: +در [نوت‌بوک](../../../../3-Web-App/1-Web-App/notebook.ipynb) خالی که در این درس گنجانده شده است: 1. `pandas`، `matplotlib` و `numpy` را همانطور که در درس‌های قبلی انجام دادید وارد کنید و صفحه‌گسترده ufos را وارد کنید. می‌توانید به یک نمونه داده نگاه کنید: @@ -71,7 +71,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.head() ``` -1. داده‌های ufos را به یک دیتافریم کوچک با عناوین تازه تبدیل کنید. مقادیر منحصربه‌فرد در فیلد `کشور` را بررسی کنید. +1. داده‌های ufos را به یک dataframe کوچک با عناوین تازه تبدیل کنید. مقادیر منحصربه‌فرد در فیلد `Country` را بررسی کنید. ```python ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) @@ -101,7 +101,7 @@ CO_OP_TRANSLATOR_METADATA: ufos.head() ``` - داده‌های شما باید به این شکل باشد: + داده‌های شما باید به این شکل باشند: ```output Seconds Country Latitude Longitude @@ -116,7 +116,7 @@ CO_OP_TRANSLATOR_METADATA: اکنون می‌توانید آماده شوید تا مدل را با تقسیم داده‌ها به گروه‌های آموزشی و آزمایشی آموزش دهید. -1. سه ویژگی‌ای که می‌خواهید بر اساس آن‌ها آموزش دهید را به عنوان بردار X انتخاب کنید، و بردار y همان `کشور` خواهد بود. شما می‌خواهید بتوانید `ثانیه‌ها`، `عرض جغرافیایی` و `طول جغرافیایی` را وارد کنید و یک شناسه کشور دریافت کنید. +1. سه ویژگی‌ای که می‌خواهید بر اساس آن‌ها آموزش دهید را به عنوان بردار X انتخاب کنید، و بردار y فیلد `Country` خواهد بود. شما می‌خواهید بتوانید `ثانیه‌ها`، `عرض جغرافیایی` و `طول جغرافیایی` را وارد کنید و یک شناسه کشور دریافت کنید. ```python from sklearn.model_selection import train_test_split @@ -143,13 +143,13 @@ CO_OP_TRANSLATOR_METADATA: print('Accuracy: ', accuracy_score(y_test, predictions)) ``` -دقت بد نیست **(حدود ۹۵٪)**، که تعجب‌آور نیست، زیرا `کشور` و `عرض/طول جغرافیایی` با هم مرتبط هستند. +دقت بد نیست **(حدود ۹۵٪)**، که تعجب‌آور نیست، زیرا `Country` و `عرض/طول جغرافیایی` با هم مرتبط هستند. -مدلی که ایجاد کردید خیلی انقلابی نیست، زیرا باید بتوانید یک `کشور` را از `عرض جغرافیایی` و `طول جغرافیایی` استنباط کنید، اما این یک تمرین خوب است که سعی کنید از داده‌های خامی که پاکسازی کرده‌اید، مدل را آموزش دهید، صادر کنید و سپس از این مدل در یک اپلیکیشن وب استفاده کنید. +مدلی که ایجاد کردید خیلی انقلابی نیست، زیرا باید بتوانید یک `Country` را از `عرض جغرافیایی` و `طول جغرافیایی` استنباط کنید، اما این یک تمرین خوب است که سعی کنید از داده‌های خامی که پاکسازی کرده‌اید، مدل را آموزش دهید، صادر کنید و سپس از این مدل در یک اپلیکیشن وب استفاده کنید. -## تمرین - "pickle" کردن مدل +## تمرین - «pickle» کردن مدل -اکنون زمان آن رسیده است که مدل خود را _pickle_ کنید! می‌توانید این کار را در چند خط کد انجام دهید. پس از اینکه مدل _pickled_ شد، آن را بارگذاری کنید و آن را با یک آرایه داده نمونه که شامل مقادیر ثانیه‌ها، عرض جغرافیایی و طول جغرافیایی است آزمایش کنید. +اکنون زمان آن است که مدل خود را _pickle_ کنید! می‌توانید این کار را در چند خط کد انجام دهید. پس از _pickle_ کردن، مدل خود را بارگذاری کنید و آن را با یک آرایه داده نمونه که شامل مقادیر ثانیه‌ها، عرض جغرافیایی و طول جغرافیایی است آزمایش کنید. ```python import pickle @@ -160,7 +160,7 @@ model = pickle.load(open('ufo-model.pkl','rb')) print(model.predict([[50,44,-12]])) ``` -مدل **'3'** را برمی‌گرداند، که کد کشور برای بریتانیا است. شگفت‌انگیز! 👽 +مدل **'3'** را بازمی‌گرداند، که کد کشور برای بریتانیا است. شگفت‌انگیز! 👽 ## تمرین - ساخت اپلیکیشن Flask @@ -179,7 +179,7 @@ print(model.predict([[50,44,-12]])) ufo-model.pkl ``` - ✅ به پوشه solution برای مشاهده اپلیکیشن کامل مراجعه کنید + ✅ به پوشه solution برای مشاهده اپلیکیشن نهایی مراجعه کنید 1. اولین فایلی که باید در پوشه _web-app_ ایجاد کنید فایل **requirements.txt** است. مانند _package.json_ در یک اپلیکیشن جاوااسکریپت، این فایل وابستگی‌های مورد نیاز اپلیکیشن را لیست می‌کند. در **requirements.txt** خطوط زیر را اضافه کنید: @@ -190,19 +190,19 @@ print(model.predict([[50,44,-12]])) flask ``` -1. اکنون این فایل را با رفتن به _web-app_ اجرا کنید: +1. اکنون این فایل را با حرکت به _web-app_ اجرا کنید: ```bash cd web-app ``` -1. در ترمینال خود `pip install` را تایپ کنید تا کتابخانه‌های لیست‌شده در _requirements.txt_ نصب شوند: +1. در ترمینال خود تایپ کنید `pip install`، تا کتابخانه‌های لیست‌شده در _requirements.txt_ نصب شوند: ```bash pip install -r requirements.txt ``` -1. اکنون آماده‌اید تا سه فایل دیگر برای تکمیل اپلیکیشن ایجاد کنید: +1. اکنون آماده هستید تا سه فایل دیگر برای تکمیل اپلیکیشن ایجاد کنید: 1. فایل **app.py** را در ریشه ایجاد کنید. 2. فایل **index.html** را در دایرکتوری _templates_ ایجاد کنید. @@ -279,7 +279,7 @@ print(model.predict([[50,44,-12]])) به قالب‌بندی در این فایل نگاه کنید. به سینتکس 'mustache' اطراف متغیرهایی که توسط اپلیکیشن ارائه خواهند شد، مانند متن پیش‌بینی: `{{}}` توجه کنید. همچنین یک فرم وجود دارد که یک پیش‌بینی را به مسیر `/predict` ارسال می‌کند. - در نهایت، آماده‌اید تا فایل پایتون که مصرف مدل و نمایش پیش‌بینی‌ها را هدایت می‌کند بسازید: + در نهایت، آماده هستید تا فایل پایتون که مصرف مدل و نمایش پیش‌بینی‌ها را هدایت می‌کند بسازید: 1. در `app.py` اضافه کنید: @@ -320,7 +320,7 @@ print(model.predict([[50,44,-12]])) > 💡 نکته: وقتی [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) را هنگام اجرای اپلیکیشن وب با Flask اضافه می‌کنید، هر تغییری که در اپلیکیشن خود ایجاد کنید بلافاصله بدون نیاز به راه‌اندازی مجدد سرور منعکس می‌شود. مراقب باشید! این حالت را در اپلیکیشن تولیدی فعال نکنید. -اگر `python app.py` یا `python3 app.py` را اجرا کنید - سرور وب شما به صورت محلی راه‌اندازی می‌شود و می‌توانید یک فرم کوتاه را پر کنید تا پاسخ سوال خود درباره محل مشاهده بشقاب‌پرنده‌ها را دریافت کنید! +اگر `python app.py` یا `python3 app.py` را اجرا کنید - سرور وب شما به صورت محلی راه‌اندازی می‌شود و می‌توانید یک فرم کوتاه را پر کنید تا پاسخ سوال خود درباره محل مشاهده بشقاب پرنده‌ها را دریافت کنید! قبل از انجام این کار، به بخش‌های `app.py` نگاه کنید: @@ -330,10 +330,10 @@ print(model.predict([[50,44,-12]])) در مسیر `/predict`، چندین اتفاق رخ می‌دهد وقتی فرم ارسال می‌شود: -1. متغیرهای فرم جمع‌آوری شده و به یک آرایه numpy تبدیل می‌شوند. سپس به مدل ارسال می‌شوند و یک پیش‌بینی برگردانده می‌شود. -2. کشورهایی که می‌خواهیم نمایش داده شوند به متن خوانا از کد کشور پیش‌بینی‌شده تبدیل می‌شوند و آن مقدار به index.html ارسال می‌شود تا در قالب رندر شود. +1. متغیرهای فرم جمع‌آوری شده و به یک آرایه numpy تبدیل می‌شوند. سپس به مدل ارسال می‌شوند و یک پیش‌بینی بازگردانده می‌شود. +2. کشورهایی که می‌خواهیم نمایش داده شوند به متن قابل خواندن از کد کشور پیش‌بینی‌شده تبدیل می‌شوند و آن مقدار به index.html ارسال می‌شود تا در قالب رندر شود. -استفاده از مدل به این روش، با Flask و یک مدل pickled، نسبتاً ساده است. سخت‌ترین بخش این است که بفهمید داده‌هایی که باید به مدل ارسال شوند تا یک پیش‌بینی دریافت کنید چه شکلی هستند. این کاملاً به نحوه آموزش مدل بستگی دارد. این مدل سه نقطه داده برای ورودی نیاز دارد تا یک پیش‌بینی ارائه دهد. +استفاده از مدل به این روش، با Flask و یک مدل pickled، نسبتاً ساده است. سخت‌ترین چیز این است که بفهمید داده‌هایی که باید به مدل ارسال شوند تا یک پیش‌بینی دریافت شود چه شکلی دارند. این کاملاً به نحوه آموزش مدل بستگی دارد. این مدل سه نقطه داده برای ورودی نیاز دارد تا یک پیش‌بینی ارائه دهد. در یک محیط حرفه‌ای، می‌توانید ببینید که ارتباط خوب بین افرادی که مدل را آموزش می‌دهند و کسانی که آن را در اپلیکیشن وب یا موبایل مصرف می‌کنند چقدر ضروری است. در مورد ما، فقط یک نفر هستید، شما! @@ -341,13 +341,13 @@ print(model.predict([[50,44,-12]])) ## 🚀 چالش -به جای کار در یک نوت‌بوک و وارد کردن مدل به اپلیکیشن Flask، می‌توانید مدل را مستقیماً در اپلیکیشن Flask آموزش دهید! سعی کنید کد پایتون خود را در نوت‌بوک تبدیل کنید، شاید پس از پاکسازی داده‌ها، تا مدل را از داخل اپلیکیشن در مسیری به نام `train` آموزش دهید. مزایا و معایب دنبال کردن این روش چیست؟ +به جای کار در یک نوت‌بوک و وارد کردن مدل به اپلیکیشن Flask، می‌توانید مدل را مستقیماً در اپلیکیشن Flask آموزش دهید! سعی کنید کد پایتون خود را در نوت‌بوک تبدیل کنید، شاید پس از پاکسازی داده‌ها، تا مدل را از داخل اپلیکیشن در یک مسیر به نام `train` آموزش دهید. مزایا و معایب دنبال کردن این روش چیست؟ -## [پس‌ آزمون](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [پس‌ آزمون](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -راه‌های زیادی برای ساخت اپلیکیشن وب برای مصرف مدل‌های یادگیری ماشین وجود دارد. لیستی از راه‌هایی که می‌توانید با استفاده از جاوااسکریپت یا پایتون اپلیکیشن وب بسازید تا از یادگیری ماشین بهره ببرید تهیه کنید. معماری را در نظر بگیرید: آیا مدل باید در اپلیکیشن باقی بماند یا در فضای ابری قرار گیرد؟ اگر گزینه دوم، چگونه به آن دسترسی پیدا می‌کنید؟ یک مدل معماری برای یک راه‌حل وب یادگیری ماشین طراحی کنید. +راه‌های زیادی برای ساخت اپلیکیشن وب برای مصرف مدل‌های یادگیری ماشین وجود دارد. لیستی از روش‌هایی که می‌توانید با استفاده از جاوااسکریپت یا پایتون اپلیکیشن وب بسازید تا یادگیری ماشین را به کار ببرید تهیه کنید. معماری را در نظر بگیرید: آیا مدل باید در اپلیکیشن باقی بماند یا در فضای ابری قرار گیرد؟ اگر گزینه دوم، چگونه به آن دسترسی پیدا می‌کنید؟ یک مدل معماری برای یک راه‌حل وب یادگیری ماشین طراحی کنید. ## تکلیف @@ -356,4 +356,4 @@ print(model.predict([[50,44,-12]])) --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/4-Classification/1-Introduction/README.md b/translations/fa/4-Classification/1-Introduction/README.md index 662391c09..58ce68399 100644 --- a/translations/fa/4-Classification/1-Introduction/README.md +++ b/translations/fa/4-Classification/1-Introduction/README.md @@ -1,21 +1,21 @@ # مقدمه‌ای بر طبقه‌بندی -در این چهار درس، شما به یکی از موضوعات اساسی یادگیری ماشین کلاسیک - _طبقه‌بندی_ - خواهید پرداخت. ما با استفاده از الگوریتم‌های مختلف طبقه‌بندی و یک مجموعه داده درباره غذاهای فوق‌العاده آسیا و هند پیش خواهیم رفت. امیدوارم گرسنه باشید! +در این چهار درس، شما به یکی از موضوعات اساسی یادگیری ماشین کلاسیک - _طبقه‌بندی_ - خواهید پرداخت. ما با استفاده از الگوریتم‌های مختلف طبقه‌بندی و یک مجموعه داده درباره غذاهای فوق‌العاده آسیایی و هندی کار خواهیم کرد. امیدوارم گرسنه باشید! -![فقط یک ذره!](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.fa.png) +![فقط یک ذره!](../../../../4-Classification/1-Introduction/images/pinch.png) -> در این درس‌ها غذاهای آسیایی را جشن بگیرید! تصویر توسط [Jen Looper](https://twitter.com/jenlooper) +> در این درس‌ها غذاهای آسیایی را جشن بگیرید! تصویر از [Jen Looper](https://twitter.com/jenlooper) -طبقه‌بندی نوعی از [یادگیری نظارت‌شده](https://wikipedia.org/wiki/Supervised_learning) است که شباهت زیادی به تکنیک‌های رگرسیون دارد. اگر یادگیری ماشین به پیش‌بینی مقادیر یا نام‌ها با استفاده از مجموعه داده‌ها مربوط باشد، طبقه‌بندی معمولاً به دو گروه تقسیم می‌شود: _طبقه‌بندی دودویی_ و _طبقه‌بندی چندکلاسه_. +طبقه‌بندی نوعی [یادگیری نظارت‌شده](https://wikipedia.org/wiki/Supervised_learning) است که شباهت زیادی به تکنیک‌های رگرسیون دارد. اگر یادگیری ماشین به پیش‌بینی مقادیر یا نام‌ها با استفاده از مجموعه داده‌ها مربوط باشد، طبقه‌بندی معمولاً به دو گروه تقسیم می‌شود: _طبقه‌بندی دودویی_ و _طبقه‌بندی چندکلاسه_. [![مقدمه‌ای بر طبقه‌بندی](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "مقدمه‌ای بر طبقه‌بندی") @@ -23,12 +23,12 @@ CO_OP_TRANSLATOR_METADATA: به یاد داشته باشید: -- **رگرسیون خطی** به شما کمک کرد تا روابط بین متغیرها را پیش‌بینی کنید و پیش‌بینی‌های دقیقی درباره اینکه یک نقطه داده جدید در کجای خط قرار می‌گیرد انجام دهید. به عنوان مثال، شما می‌توانستید پیش‌بینی کنید _قیمت یک کدو تنبل در سپتامبر در مقابل دسامبر چقدر خواهد بود_. +- **رگرسیون خطی** به شما کمک کرد تا روابط بین متغیرها را پیش‌بینی کنید و پیش‌بینی‌های دقیقی درباره اینکه یک نقطه داده جدید در رابطه با آن خط کجا قرار می‌گیرد انجام دهید. به عنوان مثال، شما می‌توانستید پیش‌بینی کنید _قیمت یک کدو تنبل در سپتامبر در مقابل دسامبر چقدر خواهد بود_. - **رگرسیون لجستیک** به شما کمک کرد تا "دسته‌های دودویی" را کشف کنید: در این نقطه قیمت، _آیا این کدو تنبل نارنجی است یا غیر نارنجی_؟ طبقه‌بندی از الگوریتم‌های مختلفی برای تعیین برچسب یا کلاس یک نقطه داده استفاده می‌کند. بیایید با این داده‌های مربوط به غذاها کار کنیم تا ببینیم آیا می‌توانیم با مشاهده گروهی از مواد اولیه، منشأ غذایی آن را تعیین کنیم. -## [پیش‌آزمون درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) +## [پیش‌آزمون درس](https://ff-quizzes.netlify.app/en/ml/) > ### [این درس به زبان R نیز موجود است!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) @@ -38,31 +38,31 @@ CO_OP_TRANSLATOR_METADATA: برای بیان این فرآیند به صورت علمی‌تر، روش طبقه‌بندی شما یک مدل پیش‌بینی ایجاد می‌کند که به شما امکان می‌دهد رابطه بین متغیرهای ورودی و متغیرهای خروجی را ترسیم کنید. -![طبقه‌بندی دودویی در مقابل چندکلاسه](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.fa.png) +![طبقه‌بندی دودویی در مقابل چندکلاسه](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) > مشکلات دودویی در مقابل چندکلاسه برای الگوریتم‌های طبقه‌بندی. اینفوگرافیک توسط [Jen Looper](https://twitter.com/jenlooper) -قبل از شروع فرآیند پاک‌سازی داده‌ها، تجسم آن‌ها و آماده‌سازی آن‌ها برای وظایف یادگیری ماشین، بیایید کمی درباره روش‌های مختلفی که یادگیری ماشین می‌تواند برای طبقه‌بندی داده‌ها استفاده شود، یاد بگیریم. +قبل از شروع فرآیند پاکسازی داده‌ها، تجسم آن‌ها و آماده‌سازی آن‌ها برای وظایف یادگیری ماشین، بیایید کمی درباره روش‌های مختلفی که یادگیری ماشین می‌تواند برای طبقه‌بندی داده‌ها استفاده شود، یاد بگیریم. -طبقه‌بندی که از [آمار](https://wikipedia.org/wiki/Statistical_classification) مشتق شده است، با استفاده از ویژگی‌هایی مانند `smoker`، `weight` و `age` احتمال ابتلا به بیماری X را تعیین می‌کند. به عنوان یک تکنیک یادگیری نظارت‌شده مشابه تمرین‌های رگرسیون که قبلاً انجام داده‌اید، داده‌های شما برچسب‌گذاری شده‌اند و الگوریتم‌های یادگیری ماشین از این برچسب‌ها برای طبقه‌بندی و پیش‌بینی کلاس‌ها (یا 'ویژگی‌ها') یک مجموعه داده و اختصاص آن‌ها به یک گروه یا نتیجه استفاده می‌کنند. +طبقه‌بندی که از [آمار](https://wikipedia.org/wiki/Statistical_classification) مشتق شده است، با استفاده از یادگیری ماشین کلاسیک از ویژگی‌هایی مانند `smoker`، `weight` و `age` برای تعیین _احتمال ابتلا به بیماری X_ استفاده می‌کند. به عنوان یک تکنیک یادگیری نظارت‌شده مشابه تمرین‌های رگرسیون که قبلاً انجام داده‌اید، داده‌های شما برچسب‌گذاری شده‌اند و الگوریتم‌های یادگیری ماشین از این برچسب‌ها برای طبقه‌بندی و پیش‌بینی کلاس‌ها (یا 'ویژگی‌ها') یک مجموعه داده و اختصاص دادن آن‌ها به یک گروه یا نتیجه استفاده می‌کنند. -✅ لحظه‌ای وقت بگذارید و یک مجموعه داده درباره غذاها را تصور کنید. یک مدل چندکلاسه چه سوالاتی می‌تواند پاسخ دهد؟ یک مدل دودویی چه سوالاتی می‌تواند پاسخ دهد؟ اگر بخواهید تعیین کنید که آیا یک غذای خاص احتمالاً از شنبلیله استفاده می‌کند یا نه، چه؟ اگر بخواهید ببینید که آیا با داشتن یک کیسه خرید پر از بادیان ستاره‌ای، کنگر فرنگی، گل‌کلم و ترب کوهی می‌توانید یک غذای معمولی هندی درست کنید، چه؟ +✅ لحظه‌ای وقت بگذارید و یک مجموعه داده درباره غذاها را تصور کنید. یک مدل چندکلاسه چه سوالاتی می‌تواند پاسخ دهد؟ یک مدل دودویی چه سوالاتی می‌تواند پاسخ دهد؟ اگر بخواهید تعیین کنید که آیا یک غذای خاص احتمالاً از شنبلیله استفاده می‌کند یا نه، چه؟ اگر بخواهید ببینید که آیا با داشتن یک کیسه خرید پر از بادیان ستاره‌ای، کنگر فرنگی، گل‌کلم و ترب کوهی می‌توانید یک غذای هندی معمولی درست کنید؟ [![سبدهای مرموز دیوانه‌وار](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "سبدهای مرموز دیوانه‌وار") -> 🎥 روی تصویر بالا کلیک کنید تا ویدئویی ببینید. کل فرضیه برنامه 'Chopped' این است که سرآشپزها باید با انتخاب تصادفی مواد اولیه یک غذا درست کنند. مطمئناً یک مدل یادگیری ماشین می‌توانست کمک کند! +> 🎥 روی تصویر بالا کلیک کنید تا ویدئویی ببینید. کل ایده برنامه 'Chopped' این است که سرآشپزها باید با انتخاب تصادفی مواد اولیه یک غذا درست کنند. مطمئناً یک مدل یادگیری ماشین می‌توانست کمک کند! ## سلام به 'طبقه‌بند' -سوالی که می‌خواهیم از این مجموعه داده غذایی بپرسیم در واقع یک سوال **چندکلاسه** است، زیرا چندین غذای ملی بالقوه برای کار داریم. با توجه به یک دسته مواد اولیه، این داده‌ها به کدام یک از این کلاس‌ها تعلق خواهند داشت؟ +سوالی که می‌خواهیم از این مجموعه داده غذایی بپرسیم در واقع یک سوال **چندکلاسه** است، زیرا چندین غذای ملی بالقوه برای کار داریم. با توجه به یک دسته مواد اولیه، کدام یک از این کلاس‌های متعدد با داده‌ها مطابقت خواهد داشت؟ -Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی داده‌ها ارائه می‌دهد، بسته به نوع مشکلی که می‌خواهید حل کنید. در دو درس بعدی، درباره چندین الگوریتم از این دست خواهید آموخت. +Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی داده‌ها ارائه می‌دهد، بسته به نوع مشکلی که می‌خواهید حل کنید. در دو درس بعدی، درباره چندین الگوریتم از این نوع یاد خواهید گرفت. -## تمرین - پاک‌سازی و متعادل‌سازی داده‌ها +## تمرین - پاکسازی و متعادل‌سازی داده‌ها -اولین وظیفه‌ای که باید انجام دهید، قبل از شروع این پروژه، پاک‌سازی و **متعادل‌سازی** داده‌ها برای دستیابی به نتایج بهتر است. با فایل خالی _notebook.ipynb_ در ریشه این پوشه شروع کنید. +اولین وظیفه‌ای که باید انجام دهید، قبل از شروع این پروژه، پاکسازی و **متعادل‌سازی** داده‌ها برای دستیابی به نتایج بهتر است. با فایل خالی _notebook.ipynb_ در ریشه این پوشه شروع کنید. -اولین چیزی که باید نصب کنید [imblearn](https://imbalanced-learn.org/stable/) است. این یک بسته Scikit-learn است که به شما امکان می‌دهد داده‌ها را بهتر متعادل کنید (در ادامه بیشتر درباره این وظیفه خواهید آموخت). +اولین چیزی که باید نصب کنید [imblearn](https://imbalanced-learn.org/stable/) است. این یک بسته Scikit-learn است که به شما امکان می‌دهد داده‌ها را بهتر متعادل کنید (در مورد این وظیفه در یک دقیقه بیشتر یاد خواهید گرفت). 1. برای نصب `imblearn`، دستور `pip install` را اجرا کنید، به این صورت: @@ -70,7 +70,7 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی pip install imblearn ``` -1. بسته‌هایی را که برای وارد کردن داده‌ها و تجسم آن‌ها نیاز دارید، همچنین `SMOTE` از `imblearn` را وارد کنید. +1. بسته‌هایی را که برای وارد کردن داده‌ها و تجسم آن‌ها نیاز دارید وارد کنید، همچنین `SMOTE` را از `imblearn` وارد کنید. ```python import pandas as pd @@ -128,15 +128,15 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی اکنون کار شروع به جالب‌تر شدن می‌کند. بیایید توزیع داده‌ها را بر اساس غذا کشف کنیم. -1. داده‌ها را به صورت نمودار میله‌ای با فراخوانی `barh()` رسم کنید: +1. داده‌ها را به صورت نمودار میله‌ای با فراخوانی `barh()` ترسیم کنید: ```python df.cuisine.value_counts().plot.barh() ``` - ![توزیع داده‌های غذایی](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.fa.png) + ![توزیع داده‌های غذایی](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) - تعداد غذاها محدود است، اما توزیع داده‌ها نابرابر است. شما می‌توانید این مشکل را حل کنید! قبل از انجام این کار، کمی بیشتر کاوش کنید. + تعداد محدودی غذا وجود دارد، اما توزیع داده‌ها نابرابر است. شما می‌توانید این مشکل را حل کنید! قبل از انجام این کار، کمی بیشتر کاوش کنید. 1. ببینید چقدر داده برای هر غذا موجود است و آن را چاپ کنید: @@ -166,7 +166,7 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی ## کشف مواد اولیه -اکنون می‌توانید عمیق‌تر به داده‌ها بپردازید و یاد بگیرید که مواد اولیه معمولی هر غذا چیست. شما باید داده‌های تکراری که باعث ایجاد سردرگمی بین غذاها می‌شود را پاک کنید، پس بیایید درباره این مشکل یاد بگیریم. +اکنون می‌توانید عمیق‌تر به داده‌ها بپردازید و یاد بگیرید که مواد اولیه معمولی برای هر غذا چیست. شما باید داده‌های تکراری را که باعث ایجاد سردرگمی بین غذاها می‌شود پاک کنید، بنابراین بیایید درباره این مشکل یاد بگیریم. 1. یک تابع `create_ingredient()` در پایتون ایجاد کنید تا یک دیتافریم مواد اولیه بسازد. این تابع با حذف یک ستون غیرمفید شروع می‌شود و مواد اولیه را بر اساس تعداد مرتب می‌کند: @@ -179,16 +179,16 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی return ingredient_df ``` - اکنون می‌توانید از این تابع برای دریافت ایده‌ای از ده ماده اولیه محبوب‌ترین غذاها استفاده کنید. + اکنون می‌توانید از این تابع برای به دست آوردن ایده‌ای از ده ماده اولیه محبوب‌ترین برای هر غذا استفاده کنید. -1. `create_ingredient()` را فراخوانی کنید و آن را با فراخوانی `barh()` رسم کنید: +1. `create_ingredient()` را فراخوانی کنید و آن را با فراخوانی `barh()` ترسیم کنید: ```python thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh() ``` - ![تایلندی](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.fa.png) + ![تایلندی](../../../../4-Classification/1-Introduction/images/thai.png) 1. همین کار را برای داده‌های ژاپنی انجام دهید: @@ -197,7 +197,7 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی japanese_ingredient_df.head(10).plot.barh() ``` - ![ژاپنی](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.fa.png) + ![ژاپنی](../../../../4-Classification/1-Introduction/images/japanese.png) 1. اکنون برای مواد اولیه چینی: @@ -206,27 +206,27 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی chinese_ingredient_df.head(10).plot.barh() ``` - ![چینی](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.fa.png) + ![چینی](../../../../4-Classification/1-Introduction/images/chinese.png) -1. مواد اولیه هندی را رسم کنید: +1. مواد اولیه هندی را ترسیم کنید: ```python indian_ingredient_df = create_ingredient_df(indian_df) indian_ingredient_df.head(10).plot.barh() ``` - ![هندی](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.fa.png) + ![هندی](../../../../4-Classification/1-Introduction/images/indian.png) -1. در نهایت، مواد اولیه کره‌ای را رسم کنید: +1. در نهایت، مواد اولیه کره‌ای را ترسیم کنید: ```python korean_ingredient_df = create_ingredient_df(korean_df) korean_ingredient_df.head(10).plot.barh() ``` - ![کره‌ای](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.fa.png) + ![کره‌ای](../../../../4-Classification/1-Introduction/images/korean.png) -1. اکنون، مواد اولیه مشترک که باعث ایجاد سردرگمی بین غذاهای مختلف می‌شوند را با فراخوانی `drop()` حذف کنید: +1. اکنون، مواد اولیه رایج که باعث ایجاد سردرگمی بین غذاهای مختلف می‌شوند را با فراخوانی `drop()` حذف کنید: همه عاشق برنج، سیر و زنجبیل هستند! @@ -238,9 +238,9 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی ## متعادل‌سازی مجموعه داده -اکنون که داده‌ها را پاک کرده‌اید، از [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "تکنیک نمونه‌برداری بیش از حد اقلیت مصنوعی" - برای متعادل‌سازی آن استفاده کنید. +اکنون که داده‌ها را پاک کرده‌اید، از [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "تکنیک نمونه‌برداری بیش از حد مصنوعی اقلیت" - برای متعادل‌سازی آن استفاده کنید. -1. `fit_resample()` را فراخوانی کنید، این استراتژی نمونه‌های جدیدی با استفاده از درون‌یابی ایجاد می‌کند. +1. `fit_resample()` را فراخوانی کنید، این استراتژی نمونه‌های جدیدی را با استفاده از درون‌یابی تولید می‌کند. ```python oversample = SMOTE() @@ -256,7 +256,7 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی print(f'old label count: {df.cuisine.value_counts()}') ``` - خروجی شما به این صورت است: + خروجی شما شبیه به این است: ```output new label count: korean 799 @@ -275,7 +275,7 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی داده‌ها تمیز، متعادل و بسیار خوشمزه هستند! -1. آخرین مرحله ذخیره داده‌های متعادل‌شده، شامل برچسب‌ها و ویژگی‌ها، در یک دیتافریم جدید است که می‌تواند به یک فایل صادر شود: +1. آخرین مرحله ذخیره داده‌های متعادل‌شده، شامل برچسب‌ها و ویژگی‌ها، در یک دیتافریم جدید است که می‌توان آن را به یک فایل صادر کرد: ```python transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') @@ -295,9 +295,9 @@ Scikit-learn چندین الگوریتم مختلف برای طبقه‌بندی ## 🚀چالش -این برنامه درسی شامل چندین مجموعه داده جالب است. پوشه‌های `data` را بررسی کنید و ببینید آیا مجموعه داده‌هایی وجود دارند که برای طبقه‌بندی دودویی یا چندکلاسه مناسب باشند؟ چه سوالاتی می‌توانید از این مجموعه داده‌ها بپرسید؟ +این برنامه درسی شامل چندین مجموعه داده جالب است. پوشه‌های `data` را بررسی کنید و ببینید آیا مجموعه داده‌هایی وجود دارند که برای طبقه‌بندی دودویی یا چندکلاسه مناسب باشند؟ چه سوالاتی می‌توانید از این مجموعه داده بپرسید؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی @@ -310,4 +310,4 @@ API مربوط به SMOTE را بررسی کنید. این ابزار برای --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادقتی‌هایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/4-Classification/2-Classifiers-1/README.md b/translations/fa/4-Classification/2-Classifiers-1/README.md index 6e7851b5e..cf779f153 100644 --- a/translations/fa/4-Classification/2-Classifiers-1/README.md +++ b/translations/fa/4-Classification/2-Classifiers-1/README.md @@ -1,26 +1,26 @@ -# دسته‌بندی‌کننده‌های آشپزی 1 +# طبقه‌بندی‌کننده‌های آشپزی 1 -در این درس، شما از مجموعه داده‌ای که در درس قبلی ذخیره کرده‌اید استفاده خواهید کرد؛ مجموعه‌ای پر از داده‌های متوازن و پاک درباره آشپزی. +در این درس، از مجموعه داده‌ای که در درس قبلی ذخیره کرده‌اید و شامل داده‌های متوازن و پاک درباره آشپزی است، استفاده خواهید کرد. -شما از این مجموعه داده با انواع دسته‌بندی‌کننده‌ها برای _پیش‌بینی یک آشپزی ملی بر اساس گروهی از مواد اولیه_ استفاده خواهید کرد. در این فرآیند، بیشتر با روش‌هایی که الگوریتم‌ها برای وظایف دسته‌بندی به کار گرفته می‌شوند آشنا خواهید شد. +شما از این مجموعه داده با انواع طبقه‌بندی‌کننده‌ها برای _پیش‌بینی یک آشپزی ملی بر اساس گروهی از مواد اولیه_ استفاده خواهید کرد. در این فرآیند، بیشتر با روش‌هایی که الگوریتم‌ها برای وظایف طبقه‌بندی به کار گرفته می‌شوند، آشنا خواهید شد. -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) # آماده‌سازی -فرض کنید درس [درس 1](../1-Introduction/README.md) را کامل کرده‌اید، مطمئن شوید که فایل _cleaned_cuisines.csv_ در پوشه اصلی `/data` برای این چهار درس وجود دارد. +فرض بر این است که شما [درس 1](../1-Introduction/README.md) را کامل کرده‌اید، مطمئن شوید که فایل _cleaned_cuisines.csv_ در پوشه اصلی `/data` برای این چهار درس وجود دارد. ## تمرین - پیش‌بینی یک آشپزی ملی -1. در پوشه _notebook.ipynb_ این درس، فایل را همراه با کتابخانه Pandas وارد کنید: +1. در پوشه _notebook.ipynb_ این درس، آن فایل را به همراه کتابخانه Pandas وارد کنید: ```python import pandas as pd @@ -39,7 +39,7 @@ CO_OP_TRANSLATOR_METADATA: | 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | -1. حالا چند کتابخانه دیگر وارد کنید: +1. حالا چند کتابخانه دیگر را وارد کنید: ```python from sklearn.linear_model import LogisticRegression @@ -49,7 +49,7 @@ CO_OP_TRANSLATOR_METADATA: import numpy as np ``` -1. مختصات X و y را به دو دیتافریم برای آموزش تقسیم کنید. `cuisine` می‌تواند دیتافریم برچسب‌ها باشد: +1. مختصات X و y را به دو دیتافریم برای آموزش تقسیم کنید. دیتافریم `cuisine` می‌تواند به عنوان برچسب‌ها باشد: ```python cuisines_label_df = cuisines_df['cuisine'] @@ -86,11 +86,11 @@ CO_OP_TRANSLATOR_METADATA: حالا آماده آموزش مدل خود هستید! -## انتخاب دسته‌بندی‌کننده +## انتخاب طبقه‌بندی‌کننده حالا که داده‌های شما پاک و آماده آموزش هستند، باید تصمیم بگیرید که از کدام الگوریتم برای این کار استفاده کنید. -Scikit-learn دسته‌بندی را تحت یادگیری نظارت‌شده گروه‌بندی می‌کند و در این دسته‌بندی روش‌های زیادی برای دسته‌بندی وجود دارد. [تنوع](https://scikit-learn.org/stable/supervised_learning.html) در ابتدا ممکن است گیج‌کننده به نظر برسد. روش‌های زیر همگی شامل تکنیک‌های دسته‌بندی هستند: +Scikit-learn طبقه‌بندی را تحت یادگیری نظارت‌شده گروه‌بندی می‌کند و در این دسته‌بندی روش‌های زیادی برای طبقه‌بندی وجود دارد. [تنوع](https://scikit-learn.org/stable/supervised_learning.html) در ابتدا ممکن است گیج‌کننده به نظر برسد. روش‌های زیر شامل تکنیک‌های طبقه‌بندی هستند: - مدل‌های خطی - ماشین‌های بردار پشتیبان @@ -98,16 +98,16 @@ Scikit-learn دسته‌بندی را تحت یادگیری نظارت‌شده - نزدیک‌ترین همسایه‌ها - فرآیندهای گوسی - درخت‌های تصمیم‌گیری -- روش‌های ترکیبی (دسته‌بندی‌کننده رأی‌گیری) -- الگوریتم‌های چندکلاسه و چندخروجی (دسته‌بندی چندکلاسه و چندبرچسبی، دسته‌بندی چندکلاسه-چندخروجی) +- روش‌های ترکیبی (طبقه‌بندی‌کننده رأی‌گیری) +- الگوریتم‌های چندکلاسه و چندخروجی (طبقه‌بندی چندکلاسه و چندبرچسبی، طبقه‌بندی چندکلاسه-چندخروجی) -> شما همچنین می‌توانید از [شبکه‌های عصبی برای دسته‌بندی داده‌ها](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification) استفاده کنید، اما این موضوع خارج از محدوده این درس است. +> شما همچنین می‌توانید از [شبکه‌های عصبی برای طبقه‌بندی داده‌ها](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification) استفاده کنید، اما این موضوع خارج از محدوده این درس است. -### کدام دسته‌بندی‌کننده را انتخاب کنیم؟ +### کدام طبقه‌بندی‌کننده را انتخاب کنیم؟ -پس، کدام دسته‌بندی‌کننده را باید انتخاب کنید؟ اغلب، اجرای چندین دسته‌بندی‌کننده و جستجوی نتیجه خوب راهی برای آزمایش است. Scikit-learn یک [مقایسه کنار هم](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) روی یک مجموعه داده ایجاد شده ارائه می‌دهد که KNeighbors، SVC به دو روش، GaussianProcessClassifier، DecisionTreeClassifier، RandomForestClassifier، MLPClassifier، AdaBoostClassifier، GaussianNB و QuadraticDiscrinationAnalysis را مقایسه می‌کند و نتایج را به صورت تصویری نشان می‌دهد: +پس، کدام طبقه‌بندی‌کننده را باید انتخاب کنید؟ اغلب، اجرای چندین طبقه‌بندی‌کننده و جستجوی نتیجه خوب راهی برای آزمایش است. Scikit-learn یک [مقایسه کنار هم](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) روی یک مجموعه داده ایجاد شده ارائه می‌دهد که KNeighbors، SVC به دو روش، GaussianProcessClassifier، DecisionTreeClassifier، RandomForestClassifier، MLPClassifier، AdaBoostClassifier، GaussianNB و QuadraticDiscrinationAnalysis را مقایسه می‌کند و نتایج را به صورت تصویری نشان می‌دهد: -![مقایسه دسته‌بندی‌کننده‌ها](../../../../translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.fa.png) +![مقایسه طبقه‌بندی‌کننده‌ها](../../../../4-Classification/2-Classifiers-1/images/comparison.png) > نمودارها از مستندات Scikit-learn تولید شده‌اند > AutoML این مشکل را به خوبی حل می‌کند و این مقایسه‌ها را در فضای ابری اجرا می‌کند و به شما اجازه می‌دهد بهترین الگوریتم را برای داده‌های خود انتخاب کنید. آن را [اینجا امتحان کنید](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) @@ -116,8 +116,8 @@ Scikit-learn دسته‌بندی را تحت یادگیری نظارت‌شده یک روش بهتر از حدس زدن بی‌هدف، دنبال کردن ایده‌های موجود در این [برگه تقلب یادگیری ماشین](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott) قابل دانلود است. در اینجا، متوجه می‌شویم که برای مشکل چندکلاسه ما، چند گزینه داریم: -![برگه تقلب برای مشکلات چندکلاسه](../../../../translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.fa.png) -> بخشی از برگه تقلب الگوریتم‌های مایکروسافت، گزینه‌های دسته‌بندی چندکلاسه را نشان می‌دهد +![برگه تقلب برای مشکلات چندکلاسه](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> بخشی از برگه تقلب الگوریتم مایکروسافت، گزینه‌های طبقه‌بندی چندکلاسه را نشان می‌دهد ✅ این برگه تقلب را دانلود کنید، چاپ کنید و روی دیوار خود آویزان کنید! @@ -126,9 +126,9 @@ Scikit-learn دسته‌بندی را تحت یادگیری نظارت‌شده بیایید ببینیم آیا می‌توانیم با توجه به محدودیت‌هایی که داریم، راه‌حل‌های مختلف را بررسی کنیم: - **شبکه‌های عصبی سنگین هستند**. با توجه به مجموعه داده پاک اما حداقلی ما و این واقعیت که آموزش را به صورت محلی از طریق نوت‌بوک‌ها اجرا می‌کنیم، شبکه‌های عصبی برای این وظیفه سنگین هستند. -- **دسته‌بندی‌کننده دوکلاسه مناسب نیست**. ما از دسته‌بندی‌کننده دوکلاسه استفاده نمی‌کنیم، بنابراین این گزینه حذف می‌شود. -- **درخت تصمیم یا رگرسیون لجستیک ممکن است کار کند**. یک درخت تصمیم ممکن است کار کند، یا رگرسیون لجستیک برای داده‌های چندکلاسه. -- **درخت‌های تصمیم تقویت‌شده چندکلاسه مشکل دیگری را حل می‌کنند**. درخت تصمیم تقویت‌شده چندکلاسه بیشتر برای وظایف غیرپارامتری مناسب است، مانند وظایفی که برای ایجاد رتبه‌بندی طراحی شده‌اند، بنابراین برای ما مفید نیست. +- **طبقه‌بندی‌کننده دوکلاسه مناسب نیست**. ما از طبقه‌بندی‌کننده دوکلاسه استفاده نمی‌کنیم، بنابراین گزینه one-vs-all حذف می‌شود. +- **درخت تصمیم‌گیری یا رگرسیون لجستیک ممکن است کار کند**. یک درخت تصمیم‌گیری ممکن است کار کند، یا رگرسیون لجستیک برای داده‌های چندکلاسه. +- **درخت‌های تصمیم‌گیری تقویت‌شده چندکلاسه مشکل دیگری را حل می‌کنند**. درخت تصمیم‌گیری تقویت‌شده چندکلاسه بیشتر برای وظایف غیرپارامتری مناسب است، مانند وظایفی که برای ایجاد رتبه‌بندی طراحی شده‌اند، بنابراین برای ما مفید نیست. ### استفاده از Scikit-learn @@ -141,18 +141,18 @@ Scikit-learn دسته‌بندی را تحت یادگیری نظارت‌شده - **از طرح one-vs-rest (OvR) استفاده می‌کند**، اگر گزینه `multi_class` روی `ovr` تنظیم شده باشد. - **از ضرر آنتروپی متقاطع استفاده می‌کند**، اگر گزینه `multi_class` روی `multinomial` تنظیم شده باشد. (در حال حاضر گزینه `multinomial` فقط توسط solverهای ‘lbfgs’, ‘sag’, ‘saga’ و ‘newton-cg’ پشتیبانی می‌شود.) -> 🎓 'طرح' در اینجا می‌تواند 'ovr' (one-vs-rest) یا 'multinomial' باشد. از آنجا که رگرسیون لجستیک واقعاً برای پشتیبانی از دسته‌بندی دودویی طراحی شده است، این طرح‌ها به آن کمک می‌کنند تا بهتر وظایف دسته‌بندی چندکلاسه را مدیریت کند. [منبع](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) +> 🎓 'طرح' در اینجا می‌تواند 'ovr' (one-vs-rest) یا 'multinomial' باشد. از آنجا که رگرسیون لجستیک واقعاً برای پشتیبانی از طبقه‌بندی دودویی طراحی شده است، این طرح‌ها به آن اجازه می‌دهند وظایف طبقه‌بندی چندکلاسه را بهتر مدیریت کند. [منبع](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ها چالش‌های مختلفی که توسط ساختارهای مختلف داده ارائه می‌شوند را مدیریت می‌کنند: +Scikit-learn این جدول را ارائه می‌دهد تا توضیح دهد چگونه solverها چالش‌های مختلفی که توسط ساختارهای مختلف داده ارائه می‌شوند را مدیریت می‌کنند: -![solverها](../../../../translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.fa.png) +![solverها](../../../../4-Classification/2-Classifiers-1/images/solvers.png) ## تمرین - تقسیم داده‌ها ما می‌توانیم برای اولین آزمایش آموزشی خود روی رگرسیون لجستیک تمرکز کنیم، زیرا شما اخیراً درباره آن در درس قبلی یاد گرفته‌اید. -داده‌های خود را به گروه‌های آموزشی و آزمایشی تقسیم کنید با فراخوانی `train_test_split()`: +داده‌های خود را با فراخوانی `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) @@ -160,7 +160,7 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine ## تمرین - اعمال رگرسیون لجستیک -از آنجا که شما از حالت چندکلاسه استفاده می‌کنید، باید انتخاب کنید که از چه _طرحی_ استفاده کنید و چه _solverی_ تنظیم کنید. از LogisticRegression با تنظیم چندکلاسه و solver **liblinear** برای آموزش استفاده کنید. +از آنجا که شما از حالت چندکلاسه استفاده می‌کنید، باید انتخاب کنید که از کدام _طرح_ استفاده کنید و کدام _solver_ را تنظیم کنید. از LogisticRegression با تنظیم multi_class روی `ovr` و solver روی `liblinear` برای آموزش استفاده کنید. 1. یک رگرسیون لجستیک با تنظیم multi_class روی `ovr` و solver روی `liblinear` ایجاد کنید: @@ -172,11 +172,11 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine print ("Accuracy is {}".format(accuracy)) ``` - ✅ یک solver دیگر مانند `lbfgs` را امتحان کنید که اغلب به صورت پیش‌فرض تنظیم می‌شود. -> توجه داشته باشید که از تابع [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) در Pandas برای مسطح کردن داده‌های خود در صورت نیاز استفاده کنید. + ✅ یک solver متفاوت مانند `lbfgs` را امتحان کنید که اغلب به صورت پیش‌فرض تنظیم می‌شود. +توجه داشته باشید، از تابع [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) در Pandas برای مسطح کردن داده‌های خود در صورت نیاز استفاده کنید. دقت این مدل بیش از **۸۰٪** است! -۱. می‌توانید عملکرد این مدل را با آزمایش یک ردیف داده (#۵۰) مشاهده کنید: +۱. می‌توانید عملکرد این مدل را با آزمایش یک سطر داده (#۵۰) مشاهده کنید: ```python print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') @@ -190,9 +190,9 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine cuisine: indian ``` - ✅ یک شماره ردیف دیگر را امتحان کنید و نتایج را بررسی کنید. + ✅ یک شماره سطر متفاوت را امتحان کنید و نتایج را بررسی کنید. -۱. با بررسی دقیق‌تر، می‌توانید دقت این پیش‌بینی را بررسی کنید: +۱. با بررسی بیشتر، می‌توانید دقت این پیش‌بینی را بررسی کنید: ```python test= X_test.iloc[50].values.reshape(-1, 1).T @@ -214,9 +214,9 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine | korean | 0.017277 | | thai | 0.007634 | - ✅ آیا می‌توانید توضیح دهید چرا مدل تقریباً مطمئن است که این یک غذای هندی است؟ + ✅ آیا می‌توانید توضیح دهید چرا مدل مطمئن است که این یک غذای هندی است؟ -۱. با چاپ یک گزارش طبقه‌بندی، جزئیات بیشتری به دست آورید، همان‌طور که در درس‌های رگرسیون انجام دادید: +۱. جزئیات بیشتری را با چاپ گزارش طبقه‌بندی، همانطور که در درس‌های رگرسیون انجام دادید، دریافت کنید: ```python y_pred = model.predict(X_test) @@ -236,19 +236,19 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine ## 🚀چالش -در این درس، از داده‌های پاک‌سازی‌شده خود برای ساخت یک مدل یادگیری ماشین استفاده کردید که می‌تواند یک غذای ملی را بر اساس مجموعه‌ای از مواد اولیه پیش‌بینی کند. زمانی را صرف کنید تا گزینه‌های مختلفی که Scikit-learn برای طبقه‌بندی داده‌ها ارائه می‌دهد بررسی کنید. عمیق‌تر به مفهوم 'solver' بپردازید تا بفهمید در پشت صحنه چه می‌گذرد. +در این درس، از داده‌های پاک‌سازی‌شده خود برای ساخت یک مدل یادگیری ماشین استفاده کردید که می‌تواند یک غذای ملی را بر اساس مجموعه‌ای از مواد اولیه پیش‌بینی کند. زمانی را صرف کنید تا گزینه‌های مختلفی که Scikit-learn برای طبقه‌بندی داده‌ها ارائه می‌دهد بررسی کنید. مفهوم 'solver' را عمیق‌تر بررسی کنید تا بفهمید پشت صحنه چه اتفاقی می‌افتد. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -کمی بیشتر در مورد ریاضیات پشت رگرسیون لجستیک در [این درس](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) مطالعه کنید. +ریاضیات پشت رگرسیون لجستیک را در [این درس](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) بیشتر بررسی کنید. -## تکلیف +## تکلیف -[مطالعه در مورد solvers](assignment.md) +[مطالعه حل‌کننده‌ها](assignment.md) --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادقتی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/4-Classification/3-Classifiers-2/README.md b/translations/fa/4-Classification/3-Classifiers-2/README.md index 6eebfc0ff..5a1e617e5 100644 --- a/translations/fa/4-Classification/3-Classifiers-2/README.md +++ b/translations/fa/4-Classification/3-Classifiers-2/README.md @@ -1,39 +1,39 @@ -# دسته‌بندی غذاها ۲ +# طبقه‌بندی غذاها ۲ -در این درس دوم از دسته‌بندی، شما روش‌های بیشتری برای دسته‌بندی داده‌های عددی بررسی خواهید کرد. همچنین درباره پیامدهای انتخاب یک دسته‌بند نسبت به دیگری یاد خواهید گرفت. +در این درس دوم از طبقه‌بندی، شما روش‌های بیشتری برای طبقه‌بندی داده‌های عددی بررسی خواهید کرد. همچنین درباره پیامدهای انتخاب یک طبقه‌بند نسبت به دیگری یاد خواهید گرفت. -## [پیش‌آزمون](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) +## [پیش‌زمینه آزمون](https://ff-quizzes.netlify.app/en/ml/) ### پیش‌نیاز -فرض می‌کنیم که درس‌های قبلی را تکمیل کرده‌اید و یک مجموعه داده تمیز در پوشه `data` به نام _cleaned_cuisines.csv_ در ریشه این پوشه ۴ درسی دارید. +فرض می‌کنیم که درس‌های قبلی را کامل کرده‌اید و یک مجموعه داده تمیز شده در پوشه `data` دارید که به نام _cleaned_cuisines.csv_ در ریشه این پوشه چهار درسی ذخیره شده است. ### آماده‌سازی -ما فایل _notebook.ipynb_ شما را با مجموعه داده تمیز بارگذاری کرده‌ایم و آن را به دو دیتافریم X و y تقسیم کرده‌ایم، آماده برای فرآیند ساخت مدل. +ما فایل _notebook.ipynb_ شما را با مجموعه داده تمیز شده بارگذاری کرده‌ایم و آن را به دو دیتافریم X و y تقسیم کرده‌ایم، آماده برای فرآیند ساخت مدل. -## نقشه دسته‌بندی +## نقشه طبقه‌بندی -قبلاً درباره گزینه‌های مختلفی که هنگام دسته‌بندی داده‌ها دارید با استفاده از برگه تقلب مایکروسافت یاد گرفتید. Scikit-learn یک برگه تقلب مشابه اما دقیق‌تر ارائه می‌دهد که می‌تواند به محدود کردن انتخاب دسته‌بندها (اصطلاح دیگری برای دسته‌بندها) کمک کند: +قبلاً درباره گزینه‌های مختلفی که هنگام طبقه‌بندی داده‌ها با استفاده از برگه تقلب مایکروسافت دارید، یاد گرفتید. Scikit-learn یک برگه تقلب مشابه اما دقیق‌تر ارائه می‌دهد که می‌تواند به محدود کردن انتخاب طبقه‌بندها (که به آن‌ها تخمین‌گر نیز گفته می‌شود) کمک کند: -![نقشه یادگیری ماشین از Scikit-learn](../../../../translated_images/map.e963a6a51349425ab107b38f6c7307eb4c0d0c7ccdd2e81a5e1919292bab9ac7.fa.png) +![نقشه یادگیری ماشین از Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) > نکته: [این نقشه را آنلاین ببینید](https://scikit-learn.org/stable/tutorial/machine_learning_map/) و مسیرها را کلیک کنید تا مستندات را بخوانید. ### برنامه -این نقشه زمانی بسیار مفید است که درک واضحی از داده‌های خود داشته باشید، زیرا می‌توانید در مسیرهای آن قدم بزنید تا به تصمیم برسید: +این نقشه زمانی بسیار مفید است که درک واضحی از داده‌های خود داشته باشید، زیرا می‌توانید در مسیرهای آن قدم بزنید تا به یک تصمیم برسید: - ما بیش از ۵۰ نمونه داریم -- می‌خواهیم یک دسته را پیش‌بینی کنیم +- می‌خواهیم یک دسته‌بندی را پیش‌بینی کنیم - داده‌های برچسب‌دار داریم - کمتر از ۱۰۰ هزار نمونه داریم - ✨ می‌توانیم یک Linear SVC انتخاب کنیم @@ -65,13 +65,13 @@ CO_OP_TRANSLATOR_METADATA: X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) ``` -## دسته‌بند Linear SVC +## طبقه‌بند Linear SVC -خوشه‌بندی پشتیبان-برداری (SVC) یکی از اعضای خانواده تکنیک‌های یادگیری ماشین پشتیبان-برداری است (در مورد این‌ها بیشتر در زیر بیاموزید). در این روش، می‌توانید یک 'kernel' انتخاب کنید تا تصمیم بگیرید چگونه برچسب‌ها را خوشه‌بندی کنید. پارامتر 'C' به 'تنظیم‌سازی' اشاره دارد که تأثیر پارامترها را تنظیم می‌کند. کرنل می‌تواند یکی از [چندین](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) باشد؛ در اینجا آن را به 'linear' تنظیم می‌کنیم تا از Linear SVC استفاده کنیم. مقدار پیش‌فرض احتمال 'false' است؛ در اینجا آن را به 'true' تنظیم می‌کنیم تا تخمین‌های احتمالی جمع‌آوری کنیم. حالت تصادفی را به '0' تنظیم می‌کنیم تا داده‌ها را برای دریافت احتمالات مخلوط کنیم. +خوشه‌بندی پشتیبان-برداری (SVC) یکی از اعضای خانواده تکنیک‌های یادگیری ماشین پشتیبان-برداری است (در مورد این‌ها بیشتر در زیر یاد بگیرید). در این روش، می‌توانید یک 'kernel' انتخاب کنید تا نحوه خوشه‌بندی برچسب‌ها را تعیین کنید. پارامتر 'C' به 'تنظیم‌سازی' اشاره دارد که تأثیر پارامترها را تنظیم می‌کند. کرنل می‌تواند یکی از [چندین](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC) باشد؛ در اینجا آن را به 'linear' تنظیم می‌کنیم تا از Linear SVC استفاده کنیم. مقدار پیش‌فرض احتمال 'false' است؛ در اینجا آن را به 'true' تنظیم می‌کنیم تا تخمین‌های احتمالی جمع‌آوری شود. حالت تصادفی را به '0' تنظیم می‌کنیم تا داده‌ها برای دریافت احتمالات مخلوط شوند. -### تمرین - اعمال یک Linear SVC +### تمرین - اعمال Linear SVC -با ایجاد یک آرایه از دسته‌بندها شروع کنید. شما به تدریج به این آرایه اضافه خواهید کرد. +با ایجاد یک آرایه از طبقه‌بندها شروع کنید. شما به تدریج به این آرایه اضافه خواهید کرد. 1. با یک Linear SVC شروع کنید: @@ -83,7 +83,7 @@ CO_OP_TRANSLATOR_METADATA: } ``` -2. مدل خود را با استفاده از Linear SVC آموزش دهید و یک گزارش چاپ کنید: +2. مدل خود را با استفاده از Linear SVC آموزش دهید و گزارش را چاپ کنید: ```python n_classifiers = len(classifiers) @@ -114,15 +114,15 @@ CO_OP_TRANSLATOR_METADATA: weighted avg 0.79 0.79 0.79 1199 ``` -## دسته‌بند K-Neighbors +## طبقه‌بند K-Neighbors -K-Neighbors بخشی از خانواده روش‌های یادگیری ماشین "همسایه‌ها" است که می‌توانند برای یادگیری نظارت‌شده و نظارت‌نشده استفاده شوند. در این روش، تعداد نقاط از پیش تعریف‌شده ایجاد می‌شود و داده‌ها در اطراف این نقاط جمع‌آوری می‌شوند تا برچسب‌های عمومی برای داده‌ها پیش‌بینی شوند. +K-Neighbors بخشی از خانواده "همسایه‌ها" در روش‌های یادگیری ماشین است که می‌تواند برای یادگیری نظارت‌شده و بدون نظارت استفاده شود. در این روش، تعداد نقاط از پیش تعریف شده ایجاد می‌شود و داده‌ها در اطراف این نقاط جمع‌آوری می‌شوند تا برچسب‌های عمومی برای داده‌ها پیش‌بینی شود. -### تمرین - اعمال دسته‌بند K-Neighbors +### تمرین - اعمال طبقه‌بند K-Neighbors -دسته‌بند قبلی خوب بود و با داده‌ها خوب کار کرد، اما شاید بتوانیم دقت بهتری داشته باشیم. دسته‌بند K-Neighbors را امتحان کنید. +طبقه‌بند قبلی خوب بود و با داده‌ها خوب کار کرد، اما شاید بتوانیم دقت بهتری داشته باشیم. طبقه‌بند K-Neighbors را امتحان کنید. -1. یک خط به آرایه دسته‌بند خود اضافه کنید (بعد از آیتم Linear SVC یک کاما اضافه کنید): +1. یک خط به آرایه طبقه‌بند خود اضافه کنید (بعد از آیتم Linear SVC یک کاما اضافه کنید): ```python 'KNN classifier': KNeighborsClassifier(C), @@ -145,15 +145,15 @@ K-Neighbors بخشی از خانواده روش‌های یادگیری ماشی weighted avg 0.76 0.74 0.74 1199 ``` - ✅ درباره [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) بیاموزید + ✅ درباره [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) یاد بگیرید -## دسته‌بند Support Vector +## طبقه‌بند پشتیبان-برداری -دسته‌بندهای پشتیبان-برداری بخشی از خانواده [ماشین‌های پشتیبان-برداری](https://wikipedia.org/wiki/Support-vector_machine) هستند که برای وظایف دسته‌بندی و رگرسیون استفاده می‌شوند. SVM‌ها "نمونه‌های آموزشی را به نقاطی در فضا نگاشت می‌کنند" تا فاصله بین دو دسته را به حداکثر برسانند. داده‌های بعدی به این فضا نگاشت می‌شوند تا دسته آن‌ها پیش‌بینی شود. +طبقه‌بندهای پشتیبان-برداری بخشی از خانواده [ماشین‌های پشتیبان-برداری](https://wikipedia.org/wiki/Support-vector_machine) در روش‌های یادگیری ماشین هستند که برای وظایف طبقه‌بندی و رگرسیون استفاده می‌شوند. SVM‌ها "نمونه‌های آموزشی را به نقاطی در فضا نگاشت می‌کنند" تا فاصله بین دو دسته را به حداکثر برسانند. داده‌های بعدی به این فضا نگاشت می‌شوند تا دسته آن‌ها پیش‌بینی شود. -### تمرین - اعمال دسته‌بند Support Vector +### تمرین - اعمال طبقه‌بند پشتیبان-برداری -بیایید با دسته‌بند Support Vector دقت کمی بهتر داشته باشیم. +بیایید برای دقت بهتر، طبقه‌بند پشتیبان-برداری را امتحان کنیم. 1. بعد از آیتم K-Neighbors یک کاما اضافه کنید و سپس این خط را اضافه کنید: @@ -178,11 +178,11 @@ K-Neighbors بخشی از خانواده روش‌های یادگیری ماشی weighted avg 0.84 0.83 0.83 1199 ``` - ✅ درباره [پشتیبان-برداری‌ها](https://scikit-learn.org/stable/modules/svm.html#svm) بیاموزید + ✅ درباره [پشتیبان-برداری](https://scikit-learn.org/stable/modules/svm.html#svm) یاد بگیرید -## دسته‌بندهای Ensemble +## طبقه‌بندهای Ensemble -بیایید مسیر را تا انتها دنبال کنیم، حتی اگر آزمایش قبلی بسیار خوب بود. بیایید برخی از دسته‌بندهای Ensemble، به‌ویژه Random Forest و AdaBoost را امتحان کنیم: +بیایید مسیر را تا انتها دنبال کنیم، حتی اگر آزمایش قبلی بسیار خوب بود. بیایید برخی از طبقه‌بندهای Ensemble، به‌ویژه Random Forest و AdaBoost را امتحان کنیم: ```python 'RFST': RandomForestClassifier(n_estimators=100), @@ -219,21 +219,21 @@ Accuracy (train) for ADA: 72.4% weighted avg 0.73 0.72 0.72 1199 ``` -✅ درباره [دسته‌بندهای Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) بیاموزید +✅ درباره [طبقه‌بندهای Ensemble](https://scikit-learn.org/stable/modules/ensemble.html) یاد بگیرید -این روش یادگیری ماشین "پیش‌بینی‌های چندین تخمین‌گر پایه را ترکیب می‌کند" تا کیفیت مدل را بهبود بخشد. در مثال ما، از درخت‌های تصادفی و AdaBoost استفاده کردیم. +این روش یادگیری ماشین "پیش‌بینی‌های چندین تخمین‌گر پایه را ترکیب می‌کند" تا کیفیت مدل را بهبود بخشد. در مثال ما، از Random Trees و AdaBoost استفاده کردیم. -- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، یک روش میانگین‌گیری، یک 'جنگل' از 'درخت‌های تصمیم‌گیری' ایجاد می‌کند که با تصادفی‌سازی تزریق شده‌اند تا از بیش‌برازش جلوگیری شود. پارامتر n_estimators به تعداد درخت‌ها تنظیم شده است. +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest)، یک روش میانگین‌گیری، یک 'جنگل' از 'درختان تصمیم‌گیری' ایجاد می‌کند که با تصادفی‌سازی تزریق شده‌اند تا از بیش‌برازش جلوگیری شود. پارامتر n_estimators به تعداد درختان تنظیم شده است. -- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) یک دسته‌بند را به مجموعه داده تطبیق می‌دهد و سپس نسخه‌هایی از آن دسته‌بند را به همان مجموعه داده تطبیق می‌دهد. این روش بر وزن آیتم‌های اشتباه دسته‌بندی‌شده تمرکز می‌کند و تناسب دسته‌بند بعدی را تنظیم می‌کند تا اصلاح شود. +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) یک طبقه‌بند را به مجموعه داده تطبیق می‌دهد و سپس نسخه‌هایی از آن طبقه‌بند را به همان مجموعه داده تطبیق می‌دهد. این روش بر وزن آیتم‌های اشتباه طبقه‌بندی شده تمرکز می‌کند و تطبیق را برای طبقه‌بند بعدی تنظیم می‌کند تا اصلاح شود. --- ## 🚀چالش -هر یک از این تکنیک‌ها تعداد زیادی پارامتر دارند که می‌توانید تنظیم کنید. درباره پارامترهای پیش‌فرض هر کدام تحقیق کنید و فکر کنید که تنظیم این پارامترها چه معنایی برای کیفیت مدل خواهد داشت. +هر یک از این تکنیک‌ها تعداد زیادی پارامتر دارند که می‌توانید تنظیم کنید. درباره پارامترهای پیش‌فرض هر کدام تحقیق کنید و فکر کنید که تنظیم این پارامترها چه تأثیری بر کیفیت مدل خواهد داشت. -## [پس‌آزمون](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی @@ -246,4 +246,4 @@ weighted avg 0.73 0.72 0.72 1199 --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادقتی‌هایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/4-Classification/4-Applied/README.md b/translations/fa/4-Classification/4-Applied/README.md index d916a336d..5ec14e01f 100644 --- a/translations/fa/4-Classification/4-Applied/README.md +++ b/translations/fa/4-Classification/4-Applied/README.md @@ -1,8 +1,8 @@ # مقدمه‌ای بر خوشه‌بندی -خوشه‌بندی نوعی [یادگیری بدون نظارت](https://wikipedia.org/wiki/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") > 🎥 روی تصویر بالا کلیک کنید تا ویدیو را ببینید. در حالی که در حال مطالعه یادگیری ماشین با خوشه‌بندی هستید، از آهنگ‌های رقص نیجریه‌ای لذت ببرید - این آهنگ از PSquare در سال ۲۰۱۴ بسیار مورد توجه قرار گرفته است. -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/27/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) ### مقدمه [خوشه‌بندی](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) برای کشف داده‌ها بسیار مفید است. بیایید ببینیم آیا می‌تواند به کشف روندها و الگوها در نحوه مصرف موسیقی توسط مخاطبان نیجریه‌ای کمک کند. -✅ یک دقیقه وقت بگذارید و به کاربردهای خوشه‌بندی فکر کنید. در زندگی واقعی، خوشه‌بندی زمانی اتفاق می‌افتد که شما یک دسته لباس دارید و باید لباس‌های اعضای خانواده‌تان را مرتب کنید 🧦👕👖🩲. در علم داده، خوشه‌بندی زمانی اتفاق می‌افتد که سعی دارید ترجیحات کاربر را تحلیل کنید یا ویژگی‌های هر مجموعه داده بدون برچسب را تعیین کنید. خوشه‌بندی، به نوعی، به ایجاد نظم در آشفتگی کمک می‌کند، مانند مرتب کردن کشوی جوراب‌ها. +✅ یک دقیقه وقت بگذارید و به کاربردهای خوشه‌بندی فکر کنید. در زندگی واقعی، خوشه‌بندی زمانی اتفاق می‌افتد که شما یک دسته لباس دارید و باید لباس‌های اعضای خانواده‌تان را مرتب کنید 🧦👕👖🩲. در علم داده، خوشه‌بندی زمانی اتفاق می‌افتد که سعی دارید ترجیحات کاربران را تحلیل کنید یا ویژگی‌های هر مجموعه داده بدون برچسب را تعیین کنید. خوشه‌بندی، به نوعی، به ایجاد نظم در آشفتگی کمک می‌کند، مثل مرتب کردن کشوی جوراب‌ها. [![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") > 🎥 روی تصویر بالا کلیک کنید تا ویدیو را ببینید: جان گوتاگ از MIT خوشه‌بندی را معرفی می‌کند. -در محیط حرفه‌ای، خوشه‌بندی می‌تواند برای تعیین مواردی مانند تقسیم‌بندی بازار، مشخص کردن گروه‌های سنی که چه اقلامی را خریداری می‌کنند، استفاده شود. کاربرد دیگر می‌تواند تشخیص ناهنجاری باشد، شاید برای کشف تقلب از یک مجموعه داده تراکنش‌های کارت اعتباری. یا ممکن است از خوشه‌بندی برای تعیین تومورها در مجموعه‌ای از اسکن‌های پزشکی استفاده کنید. +در محیط حرفه‌ای، خوشه‌بندی می‌تواند برای تعیین مواردی مانند تقسیم‌بندی بازار، مشخص کردن اینکه چه گروه‌های سنی چه اقلامی را خریداری می‌کنند، استفاده شود. کاربرد دیگر می‌تواند تشخیص ناهنجاری باشد، شاید برای کشف تقلب از یک مجموعه داده تراکنش‌های کارت اعتباری. یا ممکن است از خوشه‌بندی برای تعیین تومورها در دسته‌ای از اسکن‌های پزشکی استفاده کنید. -✅ یک دقیقه فکر کنید که چگونه ممکن است در محیط‌های بانکی، تجارت الکترونیک یا کسب‌وکار با خوشه‌بندی مواجه شده باشید. +✅ یک دقیقه وقت بگذارید و فکر کنید که چگونه ممکن است در محیط‌های بانکی، تجارت الکترونیک یا کسب‌وکار با خوشه‌بندی مواجه شده باشید. > 🎓 جالب است بدانید که تحلیل خوشه‌ای در دهه ۱۹۳۰ در زمینه‌های انسان‌شناسی و روان‌شناسی آغاز شد. آیا می‌توانید تصور کنید که چگونه ممکن است استفاده شده باشد؟ -به طور جایگزین، می‌توانید از آن برای گروه‌بندی نتایج جستجو - مانند لینک‌های خرید، تصاویر یا نظرات - استفاده کنید. خوشه‌بندی زمانی مفید است که یک مجموعه داده بزرگ دارید که می‌خواهید آن را کاهش دهید و تحلیل دقیق‌تری روی آن انجام دهید، بنابراین این تکنیک می‌تواند برای یادگیری درباره داده‌ها قبل از ساخت مدل‌های دیگر استفاده شود. +به‌طور جایگزین، می‌توانید از آن برای گروه‌بندی نتایج جستجو - مانند لینک‌های خرید، تصاویر یا نظرات - استفاده کنید. خوشه‌بندی زمانی مفید است که یک مجموعه داده بزرگ دارید که می‌خواهید آن را کاهش دهید و تحلیل دقیق‌تری روی آن انجام دهید، بنابراین این تکنیک می‌تواند برای یادگیری درباره داده‌ها قبل از ساخت مدل‌های دیگر استفاده شود. -✅ هنگامی که داده‌های شما در خوشه‌ها سازماندهی شد، به آن‌ها یک شناسه خوشه اختصاص می‌دهید، و این تکنیک می‌تواند زمانی مفید باشد که بخواهید حریم خصوصی مجموعه داده را حفظ کنید؛ به جای استفاده از داده‌های قابل شناسایی، می‌توانید به یک نقطه داده با شناسه خوشه آن اشاره کنید. آیا می‌توانید دلایل دیگری را تصور کنید که چرا ممکن است ترجیح دهید از شناسه خوشه به جای عناصر دیگر خوشه برای شناسایی استفاده کنید؟ +✅ هنگامی که داده‌های شما در خوشه‌ها سازماندهی شد، می‌توانید به آن یک شناسه خوشه اختصاص دهید، و این تکنیک می‌تواند زمانی مفید باشد که بخواهید حریم خصوصی مجموعه داده را حفظ کنید؛ به جای استفاده از داده‌های قابل شناسایی، می‌توانید به یک نقطه داده با شناسه خوشه اشاره کنید. آیا می‌توانید دلایل دیگری را تصور کنید که چرا ممکن است ترجیح دهید از شناسه خوشه به جای عناصر دیگر خوشه برای شناسایی استفاده کنید؟ درک خود را از تکنیک‌های خوشه‌بندی در این [ماژول آموزشی](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott) عمیق‌تر کنید. @@ -45,65 +45,65 @@ CO_OP_TRANSLATOR_METADATA: | نام روش | مورد استفاده | | :-------------------------- | :------------------------------------------------------------------- | -| K-Means | استفاده عمومی، استنتاجی | -| Affinity propagation | خوشه‌های زیاد و نامساوی، استنتاجی | -| Mean-shift | خوشه‌های زیاد و نامساوی، استنتاجی | -| Spectral clustering | خوشه‌های کم و مساوی، انتقالی | -| Ward hierarchical clustering| خوشه‌های زیاد و محدود، انتقالی | +| K-Means | استفاده عمومی، استقرایی | +| Affinity propagation | خوشه‌های زیاد و نامساوی، استقرایی | +| Mean-shift | خوشه‌های زیاد و نامساوی، استقرایی | +| Spectral clustering | خوشه‌های کم و مساوی، انتقالی | +| Ward hierarchical clustering| خوشه‌های زیاد و محدود، انتقالی | | Agglomerative clustering | خوشه‌های زیاد و محدود، فاصله‌های غیر اقلیدسی، انتقالی | -| DBSCAN | هندسه غیر مسطح، خوشه‌های نامساوی، انتقالی | -| OPTICS | هندسه غیر مسطح، خوشه‌های نامساوی با چگالی متغیر، انتقالی | -| Gaussian mixtures | هندسه مسطح، استنتاجی | -| BIRCH | مجموعه داده بزرگ با نقاط پرت، استنتاجی | +| DBSCAN | هندسه غیر مسطح، خوشه‌های نامساوی، انتقالی | +| OPTICS | هندسه غیر مسطح، خوشه‌های نامساوی با تراکم متغیر، انتقالی | +| Gaussian mixtures | هندسه مسطح، استقرایی | +| BIRCH | مجموعه داده بزرگ با نقاط پرت، استقرایی | > 🎓 نحوه ایجاد خوشه‌ها ارتباط زیادی با نحوه جمع‌آوری نقاط داده در گروه‌ها دارد. بیایید برخی از واژگان را بررسی کنیم: > -> 🎓 ['انتقالی' در مقابل 'استنتاجی'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> 🎓 ['انتقالی' در مقابل 'استقرایی'](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_geometry)) یا 'غیر مسطح' (غیر اقلیدسی) اشاره دارد. > ->'مسطح' در این زمینه به هندسه اقلیدسی (بخش‌هایی از آن به عنوان هندسه 'صفحه' آموزش داده می‌شود) اشاره دارد، و غیر مسطح به هندسه غیر اقلیدسی اشاره دارد. هندسه چه ارتباطی با یادگیری ماشین دارد؟ خوب، به عنوان دو زمینه که ریشه در ریاضیات دارند، باید یک روش مشترک برای اندازه‌گیری فاصله بین نقاط در خوشه‌ها وجود داشته باشد، و این می‌تواند به صورت 'مسطح' یا 'غیر مسطح' انجام شود، بسته به ماهیت داده‌ها. [فاصله‌های اقلیدسی](https://wikipedia.org/wiki/Euclidean_distance) به عنوان طول یک خط مستقیم بین دو نقطه اندازه‌گیری می‌شوند. [فاصله‌های غیر اقلیدسی](https://wikipedia.org/wiki/Non-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.fa.png) +![Flat vs Nonflat Geometry Infographic](../../../../5-Clustering/1-Visualize/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://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) یادگیری 'نیمه نظارت‌شده' را به این روش بدون نظارت معرفی می‌کند. روابط بین نقاط به عنوان 'نمی‌توانند لینک شوند' یا 'باید لینک شوند' علامت‌گذاری می‌شوند، بنابراین برخی قوانین به مجموعه داده تحمیل می‌شوند. > ->مثال: اگر یک الگوریتم به صورت آزاد روی یک دسته داده‌های بدون برچسب یا نیمه‌برچسب‌گذاری شده اجرا شود، خوشه‌هایی که تولید می‌کند ممکن است کیفیت پایینی داشته باشند. در مثال بالا، خوشه‌ها ممکن است 'چیزهای موسیقی گرد' و 'چیزهای موسیقی مربعی' و 'چیزهای مثلثی' و 'کوکی‌ها' را گروه‌بندی کنند. اگر برخی محدودیت‌ها یا قوانین برای دنبال کردن داده شود ("آیتم باید پلاستیکی باشد"، "آیتم باید بتواند موسیقی تولید کند") این می‌تواند به الگوریتم کمک کند تا انتخاب‌های بهتری انجام دهد. +>یک مثال: اگر یک الگوریتم به صورت آزاد روی دسته‌ای از داده‌های بدون برچسب یا نیمه برچسب‌گذاری شده اجرا شود، خوشه‌هایی که تولید می‌کند ممکن است کیفیت پایینی داشته باشند. در مثال بالا، خوشه‌ها ممکن است 'چیزهای موسیقی گرد' و 'چیزهای موسیقی مربعی' و 'چیزهای مثلثی' و 'کوکی‌ها' را گروه‌بندی کنند. اگر برخی محدودیت‌ها یا قوانین برای دنبال کردن داده شود ("آیتم باید از پلاستیک ساخته شده باشد"، "آیتم باید بتواند موسیقی تولید کند") این می‌تواند به الگوریتم کمک کند تا انتخاب‌های بهتری انجام دهد. > -> 🎓 'چگالی' +> 🎓 'تراکم' > -> داده‌هایی که 'پر سر و صدا' هستند به عنوان 'متراکم' در نظر گرفته می‌شوند. فاصله بین نقاط در هر یک از خوشه‌های آن ممکن است، در بررسی، بیشتر یا کمتر متراکم یا 'شلوغ' باشد و بنابراین این داده‌ها نیاز به تحلیل با روش خوشه‌بندی مناسب دارند. [این مقاله](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) تفاوت بین استفاده از خوشه‌بندی K-Means در مقابل الگوریتم‌های HDBSCAN برای کشف یک مجموعه داده پر سر و صدا با چگالی خوشه‌های نامساوی را نشان می‌دهد. +> داده‌هایی که 'پر سر و صدا' هستند به عنوان 'متراکم' در نظر گرفته می‌شوند. فاصله بین نقاط در هر یک از خوشه‌های آن ممکن است، در بررسی، بیشتر یا کمتر متراکم یا 'شلوغ' باشد و بنابراین این داده‌ها نیاز به تحلیل با روش خوشه‌بندی مناسب دارند. [این مقاله](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) تفاوت بین استفاده از خوشه‌بندی K-Means و الگوریتم‌های HDBSCAN برای بررسی یک مجموعه داده پر سر و صدا با تراکم خوشه‌های نامساوی را نشان می‌دهد. ## الگوریتم‌های خوشه‌بندی بیش از ۱۰۰ الگوریتم خوشه‌بندی وجود دارد و استفاده از آن‌ها به ماهیت داده‌های موجود بستگی دارد. بیایید برخی از مهم‌ترین آن‌ها را بررسی کنیم: -- **خوشه‌بندی سلسله‌مراتبی**. اگر یک شیء بر اساس نزدیکی به یک شیء نزدیک‌تر، به جای یک شیء دورتر، طبقه‌بندی شود، خوشه‌ها بر اساس فاصله اعضای آن‌ها به و از سایر اشیاء تشکیل می‌شوند. خوشه‌بندی تجمعی Scikit-learn سلسله‌مراتبی است. +- **خوشه‌بندی سلسله‌مراتبی**. اگر یک شیء بر اساس نزدیکی به یک شیء نزدیک‌تر، به جای یک شیء دورتر، طبقه‌بندی شود، خوشه‌ها بر اساس فاصله اعضای آن‌ها از سایر اشیاء تشکیل می‌شوند. خوشه‌بندی تجمعی Scikit-learn سلسله‌مراتبی است. - ![Hierarchical clustering Infographic](../../../../translated_images/hierarchical.bf59403aa43c8c47493bfdf1cc25230f26e45f4e38a3d62e8769cd324129ac15.fa.png) + ![Hierarchical clustering Infographic](../../../../5-Clustering/1-Visualize/images/hierarchical.png) > اینفوگرافیک توسط [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **خوشه‌بندی مرکزی**. این الگوریتم محبوب نیاز به انتخاب 'k' یا تعداد خوشه‌هایی که باید تشکیل شوند دارد، پس از آن الگوریتم نقطه مرکزی یک خوشه را تعیین می‌کند و داده‌ها را در اطراف آن نقطه جمع‌آوری می‌کند. [خوشه‌بندی K-means](https://wikipedia.org/wiki/K-means_clustering) نسخه محبوبی از خوشه‌بندی مرکزی است. مرکز بر اساس میانگین نزدیک‌ترین نقاط تعیین می‌شود، بنابراین نام آن به همین دلیل است. فاصله مربع از خوشه به حداقل می‌رسد. +- **خوشه‌بندی مرکزی**. این الگوریتم محبوب نیاز به انتخاب 'k' یا تعداد خوشه‌هایی که باید تشکیل شوند دارد، پس از آن الگوریتم نقطه مرکزی خوشه را تعیین می‌کند و داده‌ها را در اطراف آن نقطه جمع‌آوری می‌کند. [خوشه‌بندی K-means](https://wikipedia.org/wiki/K-means_clustering) نسخه محبوبی از خوشه‌بندی مرکزی است. مرکز بر اساس میانگین نزدیک‌ترین نقاط تعیین می‌شود، بنابراین نام آن به همین دلیل است. فاصله مربع از خوشه به حداقل می‌رسد. - ![Centroid clustering Infographic](../../../../translated_images/centroid.097fde836cf6c9187d0b2033e9f94441829f9d86f4f0b1604dd4b3d1931aee34.fa.png) + ![Centroid clustering Infographic](../../../../5-Clustering/1-Visualize/images/centroid.png) > اینفوگرافیک توسط [Dasani Madipalli](https://twitter.com/dasani_decoded) -- **خوشه‌بندی مبتنی بر توزیع**. بر اساس مدل‌سازی آماری، خوشه‌بندی مبتنی بر توزیع بر تعیین احتمال تعلق یک نقطه داده به یک خوشه تمرکز دارد و آن را به طور مناسب اختصاص می‌دهد. روش‌های مخلوط گوسی به این نوع تعلق دارند. +- **خوشه‌بندی مبتنی بر توزیع**. بر اساس مدل‌سازی آماری، خوشه‌بندی مبتنی بر توزیع بر تعیین احتمال تعلق یک نقطه داده به یک خوشه تمرکز دارد و آن را به طور مناسب اختصاص می‌دهد. روش‌های ترکیب گوسی به این نوع تعلق دارند. -- **خوشه‌بندی مبتنی بر چگالی**. نقاط داده بر اساس چگالی آن‌ها یا گروه‌بندی آن‌ها در اطراف یکدیگر به خوشه‌ها اختصاص داده می‌شوند. نقاط داده دور از گروه به عنوان نقاط پرت یا نویز در نظر گرفته می‌شوند. DBSCAN، Mean-shift و OPTICS به این نوع خوشه‌بندی تعلق دارند. +- **خوشه‌بندی مبتنی بر تراکم**. نقاط داده بر اساس تراکم آن‌ها یا گروه‌بندی آن‌ها در اطراف یکدیگر به خوشه‌ها اختصاص داده می‌شوند. نقاط داده دور از گروه به عنوان نقاط پرت یا نویز در نظر گرفته می‌شوند. DBSCAN، Mean-shift و OPTICS به این نوع خوشه‌بندی تعلق دارند. - **خوشه‌بندی مبتنی بر شبکه**. برای مجموعه داده‌های چندبعدی، یک شبکه ایجاد می‌شود و داده‌ها بین سلول‌های شبکه تقسیم می‌شوند، بنابراین خوشه‌ها ایجاد می‌شوند. @@ -119,7 +119,7 @@ CO_OP_TRANSLATOR_METADATA: !pip install seaborn ``` -1. داده‌های آهنگ را از [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) اضافه کنید. یک dataframe با برخی داده‌ها درباره آهنگ‌ها بارگذاری کنید. آماده شوید تا این داده‌ها را با وارد کردن کتابخانه‌ها و نمایش داده‌ها بررسی کنید: +1. داده‌های آهنگ را از [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv) اضافه کنید. یک dataframe با برخی داده‌ها درباره آهنگ‌ها بارگذاری کنید. آماده باشید تا این داده‌ها را با وارد کردن کتابخانه‌ها و نمایش داده‌ها بررسی کنید: ```python import matplotlib.pyplot as plt @@ -129,7 +129,7 @@ CO_OP_TRANSLATOR_METADATA: df.head() ``` - خطوط اول داده را بررسی کنید: + چند خط اول داده‌ها را بررسی کنید: | | نام | آلبوم | هنرمند | ژانر اصلی هنرمند | تاریخ انتشار | طول | محبوبیت | قابلیت رقص | آکوستیک بودن | انرژی | ابزار بودن | زنده بودن | بلندی صدا | گفتاری بودن | تمپو | امضای زمانی | | --- | ------------------------ | ---------------------------- | ------------------- | ---------------- | ------------ | ------ | ---------- | ------------ | ------------ | ------ | ---------------- | -------- | -------- | ----------- | ------- | -------------- | @@ -234,9 +234,9 @@ CO_OP_TRANSLATOR_METADATA: plt.title('Top genres',color = 'blue') ``` - ![most popular](../../../../translated_images/popular.9c48d84b3386705f98bf44e26e9655bee9eb7c849d73be65195e37895bfedb5d.fa.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/popular.png) -✅ اگر می‌خواهید مقادیر بیشتری ببینید، مقدار `[:5]` را به عدد بزرگتری تغییر دهید یا آن را حذف کنید تا همه مقادیر را ببینید. +✅ اگر می‌خواهید مقادیر بیشتری ببینید، مقدار `[:5]` را به یک مقدار بزرگ‌تر تغییر دهید یا آن را حذف کنید تا همه را ببینید. توجه کنید، زمانی که ژانر برتر به عنوان 'Missing' توصیف می‌شود، به این معناست که اسپاتیفای آن را دسته‌بندی نکرده است، بنابراین بیایید آن را حذف کنیم. @@ -253,9 +253,9 @@ CO_OP_TRANSLATOR_METADATA: اکنون ژانرها را دوباره بررسی کنید: - ![most popular](../../../../translated_images/all-genres.1d56ef06cefbfcd61183023834ed3cb891a5ee638a3ba5c924b3151bf80208d7.fa.png) + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) -1. سه ژانر برتر به طور قابل توجهی بر این مجموعه داده تسلط دارند. بیایید بر روی `afro dancehall`، `afropop` و `nigerian pop` تمرکز کنیم، همچنین مجموعه داده را فیلتر کنیم تا هر چیزی با مقدار محبوبیت 0 را حذف کنیم (به این معنا که در مجموعه داده با محبوبیت دسته‌بندی نشده و می‌توان آن را برای اهداف ما به عنوان نویز در نظر گرفت): +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')] @@ -275,19 +275,19 @@ CO_OP_TRANSLATOR_METADATA: sns.heatmap(corrmat, vmax=.8, square=True) ``` - ![correlations](../../../../translated_images/correlation.a9356bb798f5eea51f47185968e1ebac5c078c92fce9931e28ccf0d7fab71c2b.fa.png) + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) تنها همبستگی قوی بین `energy` و `loudness` است، که خیلی تعجب‌آور نیست، زیرا موسیقی بلند معمولاً بسیار پرانرژی است. در غیر این صورت، همبستگی‌ها نسبتاً ضعیف هستند. جالب خواهد بود که ببینیم یک الگوریتم خوشه‌بندی چه چیزی می‌تواند از این داده‌ها استخراج کند. > 🎓 توجه داشته باشید که همبستگی به معنای علت و معلول نیست! ما اثبات همبستگی داریم اما اثبات علت و معلول نداریم. یک [وب‌سایت جالب](https://tylervigen.com/spurious-correlations) برخی تصاویر را نشان می‌دهد که این نکته را برجسته می‌کند. -آیا در این مجموعه داده همگرایی‌ای در مورد محبوبیت و قابلیت رقص آهنگ‌ها وجود دارد؟ یک FacetGrid نشان می‌دهد که دایره‌های متحدالمرکز وجود دارند که صرف نظر از ژانر، هم‌راستا هستند. آیا ممکن است سلیقه‌های نیجریه‌ای در سطح خاصی از قابلیت رقص برای این ژانر همگرا شوند؟ +آیا در این دیتاست همگرایی‌ای در اطراف محبوبیت و قابلیت رقص آهنگ‌ها وجود دارد؟ یک FacetGrid نشان می‌دهد که دایره‌های متحدالمرکز وجود دارند که صرف‌نظر از ژانر، هم‌راستا هستند. آیا ممکن است که سلیقه‌های نیجریه‌ای در سطح خاصی از قابلیت رقص برای این ژانر همگرا شوند؟ -✅ نقاط داده مختلف (انرژی، بلندی صدا، گفتار) و ژانرهای موسیقی بیشتر یا متفاوت را امتحان کنید. چه چیزی می‌توانید کشف کنید؟ به جدول `df.describe()` نگاه کنید تا پراکندگی کلی نقاط داده را ببینید. +✅ نقاط داده مختلف (انرژی، بلندی صدا، گفتاری بودن) و ژانرهای موسیقی بیشتر یا متفاوت را امتحان کنید. چه چیزی می‌توانید کشف کنید؟ به جدول `df.describe()` نگاه کنید تا پراکندگی کلی نقاط داده را ببینید. ### تمرین - توزیع داده‌ها -آیا این سه ژانر به طور قابل توجهی در درک قابلیت رقص بر اساس محبوبیت متفاوت هستند؟ +آیا این سه ژانر به طور قابل توجهی در درک قابلیت رقص، بر اساس محبوبیت متفاوت هستند؟ 1. توزیع داده‌های سه ژانر برتر ما را برای محبوبیت و قابلیت رقص در امتداد محور x و y بررسی کنید. @@ -305,9 +305,9 @@ CO_OP_TRANSLATOR_METADATA: > 🎓 توجه داشته باشید که این مثال از یک نمودار KDE (Kernel Density Estimate) استفاده می‌کند که داده‌ها را با استفاده از یک منحنی چگالی احتمال پیوسته نشان می‌دهد. این به ما امکان می‌دهد داده‌ها را هنگام کار با توزیع‌های متعدد تفسیر کنیم. - به طور کلی، سه ژانر در مورد محبوبیت و قابلیت رقص به طور کلی هم‌راستا هستند. تعیین خوشه‌ها در این داده‌های به طور کلی هم‌راستا چالش‌برانگیز خواهد بود: + به طور کلی، سه ژانر از نظر محبوبیت و قابلیت رقص به طور کلی هم‌راستا هستند. تعیین خوشه‌ها در این داده‌های به طور کلی هم‌راستا چالش‌برانگیز خواهد بود: - ![distribution](../../../../translated_images/distribution.9be11df42356ca958dc8e06e87865e09d77cab78f94fe4fea8a1e6796c64dc4b.fa.png) + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) 1. یک نمودار پراکندگی ایجاد کنید: @@ -319,7 +319,7 @@ CO_OP_TRANSLATOR_METADATA: نمودار پراکندگی با همان محورها الگوی مشابهی از همگرایی را نشان می‌دهد - ![Facetgrid](../../../../translated_images/facetgrid.9b2e65ce707eba1f983b7cdfed5d952e60f385947afa3011df6e3cc7d200eb5b.fa.png) + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) به طور کلی، برای خوشه‌بندی، می‌توانید از نمودارهای پراکندگی برای نشان دادن خوشه‌های داده استفاده کنید، بنابراین تسلط بر این نوع تجسم بسیار مفید است. در درس بعدی، ما این داده‌های فیلتر شده را می‌گیریم و از خوشه‌بندی k-means برای کشف گروه‌هایی در این داده‌ها استفاده می‌کنیم که به نظر می‌رسد به روش‌های جالبی هم‌پوشانی دارند. @@ -329,11 +329,11 @@ CO_OP_TRANSLATOR_METADATA: در آماده‌سازی برای درس بعدی، نموداری درباره الگوریتم‌های مختلف خوشه‌بندی که ممکن است کشف کنید و در محیط تولید استفاده کنید، ایجاد کنید. خوشه‌بندی چه نوع مشکلاتی را سعی در حل دارد؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/28/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -قبل از اعمال الگوریتم‌های خوشه‌بندی، همانطور که یاد گرفتیم، ایده خوبی است که ماهیت مجموعه داده خود را درک کنید. درباره این موضوع بیشتر بخوانید [اینجا](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/) شما را با روش‌های مختلفی که الگوریتم‌های خوشه‌بندی مختلف با اشکال داده‌های مختلف رفتار می‌کنند، آشنا می‌کند. diff --git a/translations/fa/5-Clustering/2-K-Means/README.md b/translations/fa/5-Clustering/2-K-Means/README.md index e619c111d..2a838b6bd 100644 --- a/translations/fa/5-Clustering/2-K-Means/README.md +++ b/translations/fa/5-Clustering/2-K-Means/README.md @@ -1,17 +1,17 @@ # خوشه‌بندی K-Means -## [پیش‌آزمون درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/29/) +## [پیش‌آزمون درس](https://ff-quizzes.netlify.app/en/ml/) -در این درس، یاد می‌گیرید چگونه با استفاده از Scikit-learn و مجموعه داده موسیقی نیجریه‌ای که قبلاً وارد کرده‌اید، خوشه‌ها ایجاد کنید. ما اصول اولیه K-Means برای خوشه‌بندی را پوشش خواهیم داد. به یاد داشته باشید، همانطور که در درس قبلی یاد گرفتید، روش‌های مختلفی برای کار با خوشه‌ها وجود دارد و روشی که استفاده می‌کنید به داده‌های شما بستگی دارد. ما K-Means را امتحان می‌کنیم زیرا این رایج‌ترین تکنیک خوشه‌بندی است. بیایید شروع کنیم! +در این درس، یاد می‌گیرید چگونه با استفاده از Scikit-learn و مجموعه داده موسیقی نیجریه‌ای که قبلاً وارد کرده‌اید، خوشه‌ها ایجاد کنید. ما اصول اولیه K-Means برای خوشه‌بندی را پوشش خواهیم داد. به یاد داشته باشید که همان‌طور که در درس قبلی یاد گرفتید، روش‌های مختلفی برای کار با خوشه‌ها وجود دارد و روشی که استفاده می‌کنید به داده‌های شما بستگی دارد. ما K-Means را امتحان می‌کنیم زیرا رایج‌ترین تکنیک خوشه‌بندی است. بیایید شروع کنیم! اصطلاحاتی که با آن‌ها آشنا خواهید شد: @@ -22,32 +22,32 @@ CO_OP_TRANSLATOR_METADATA: ## مقدمه -[خوشه‌بندی K-Means](https://wikipedia.org/wiki/K-means_clustering) روشی است که از حوزه پردازش سیگنال مشتق شده است. این روش برای تقسیم و دسته‌بندی گروه‌های داده به 'k' خوشه با استفاده از یک سری مشاهدات استفاده می‌شود. هر مشاهده تلاش می‌کند یک نقطه داده را به نزدیک‌ترین 'میانگین' یا نقطه مرکزی یک خوشه گروه‌بندی کند. +[خوشه‌بندی K-Means](https://wikipedia.org/wiki/K-means_clustering) روشی است که از حوزه پردازش سیگنال مشتق شده است. این روش برای تقسیم و گروه‌بندی داده‌ها به 'k' خوشه با استفاده از مجموعه‌ای از مشاهدات استفاده می‌شود. هر مشاهده تلاش می‌کند یک نقطه داده را به نزدیک‌ترین 'میانگین' یا نقطه مرکزی یک خوشه اختصاص دهد. -خوشه‌ها را می‌توان به صورت [نمودارهای ورونوی](https://wikipedia.org/wiki/Voronoi_diagram) که شامل یک نقطه (یا 'بذر') و منطقه مربوط به آن است، تجسم کرد. +خوشه‌ها را می‌توان به صورت [نمودارهای ورونوی](https://wikipedia.org/wiki/Voronoi_diagram) تجسم کرد که شامل یک نقطه (یا 'بذر') و منطقه مربوط به آن است. -![نمودار ورونوی](../../../../translated_images/voronoi.1dc1613fb0439b9564615eca8df47a4bcd1ce06217e7e72325d2406ef2180795.fa.png) +![نمودار ورونوی](../../../../5-Clustering/2-K-Means/images/voronoi.png) > اینفوگرافیک توسط [Jen Looper](https://twitter.com/jenlooper) فرآیند خوشه‌بندی K-Means [در سه مرحله اجرا می‌شود](https://scikit-learn.org/stable/modules/clustering.html#k-means): -1. الگوریتم تعداد k نقطه مرکزی را با نمونه‌گیری از مجموعه داده انتخاب می‌کند. سپس وارد حلقه می‌شود: +1. الگوریتم تعداد k نقطه مرکزی را با نمونه‌گیری از مجموعه داده انتخاب می‌کند. سپس به صورت حلقه‌ای ادامه می‌دهد: 1. هر نمونه را به نزدیک‌ترین مرکز اختصاص می‌دهد. - 2. مراکز جدیدی ایجاد می‌کند با گرفتن میانگین مقادیر تمام نمونه‌هایی که به مراکز قبلی اختصاص داده شده‌اند. + 2. مراکز جدید را با گرفتن میانگین مقادیر تمام نمونه‌هایی که به مراکز قبلی اختصاص داده شده‌اند، ایجاد می‌کند. 3. سپس تفاوت بین مراکز جدید و قدیمی را محاسبه کرده و تا زمانی که مراکز تثبیت شوند، تکرار می‌کند. -یکی از معایب استفاده از K-Means این است که باید مقدار 'k'، یعنی تعداد مراکز را تعیین کنید. خوشبختانه روش 'آرنج' به تخمین یک مقدار اولیه مناسب برای 'k' کمک می‌کند. به زودی آن را امتحان خواهید کرد. +یکی از معایب استفاده از K-Means این است که باید 'k'، یعنی تعداد مراکز را تعیین کنید. خوشبختانه روش 'آرنج' به تخمین یک مقدار اولیه مناسب برای 'k' کمک می‌کند. به زودی آن را امتحان خواهید کرد. ## پیش‌نیاز -در فایل [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) این درس کار خواهید کرد که شامل وارد کردن داده‌ها و پاکسازی اولیه‌ای است که در درس قبلی انجام دادید. +در فایل [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb) این درس کار خواهید کرد که شامل وارد کردن داده‌ها و پاک‌سازی اولیه‌ای است که در درس قبلی انجام دادید. ## تمرین - آماده‌سازی ابتدا دوباره به داده‌های آهنگ‌ها نگاه کنید. -1. یک نمودار جعبه‌ای ایجاد کنید، با فراخوانی `boxplot()` برای هر ستون: +1. یک نمودار جعبه‌ای ایجاد کنید و برای هر ستون `boxplot()` را فراخوانی کنید: ```python plt.figure(figsize=(20,20), dpi=200) @@ -91,11 +91,11 @@ CO_OP_TRANSLATOR_METADATA: این داده‌ها کمی پر سر و صدا هستند: با مشاهده هر ستون به صورت نمودار جعبه‌ای، می‌توانید نقاط پرت را ببینید. - ![نقاط پرت](../../../../translated_images/boxplots.8228c29dabd0f29227dd38624231a175f411f1d8d4d7c012cb770e00e4fdf8b6.fa.png) + ![نقاط پرت](../../../../5-Clustering/2-K-Means/images/boxplots.png) - می‌توانید مجموعه داده را مرور کرده و این نقاط پرت را حذف کنید، اما این کار داده‌ها را بسیار محدود می‌کند. +می‌توانید مجموعه داده را مرور کرده و این نقاط پرت را حذف کنید، اما این کار داده‌ها را بسیار محدود می‌کند. -1. فعلاً ستون‌هایی را انتخاب کنید که برای تمرین خوشه‌بندی مناسب هستند. ستون‌هایی با محدوده‌های مشابه انتخاب کنید و ستون `artist_top_genre` را به داده‌های عددی تبدیل کنید: +1. فعلاً ستون‌هایی را انتخاب کنید که برای تمرین خوشه‌بندی استفاده خواهید کرد. ستون‌هایی با محدوده‌های مشابه انتخاب کنید و ستون `artist_top_genre` را به داده‌های عددی کدگذاری کنید: ```python from sklearn.preprocessing import LabelEncoder @@ -127,7 +127,7 @@ CO_OP_TRANSLATOR_METADATA: y_cluster_kmeans ``` - یک آرایه چاپ شده با خوشه‌های پیش‌بینی شده (0، 1، یا 2) برای هر سطر از دیتافریم مشاهده می‌کنید. +یک آرایه چاپ شده را می‌بینید که خوشه‌های پیش‌بینی‌شده (0، 1 یا 2) را برای هر سطر از دیتافریم نشان می‌دهد. 1. از این آرایه برای محاسبه 'امتیاز سیلوئت' استفاده کنید: @@ -141,7 +141,7 @@ CO_OP_TRANSLATOR_METADATA: به دنبال امتیاز سیلوئت نزدیک به 1 باشید. این امتیاز از -1 تا 1 متغیر است و اگر امتیاز 1 باشد، خوشه متراکم و به خوبی از سایر خوشه‌ها جدا شده است. مقدار نزدیک به 0 نشان‌دهنده خوشه‌های همپوشانی با نمونه‌هایی است که بسیار نزدیک به مرز تصمیم‌گیری خوشه‌های همسایه هستند. [(منبع)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) -امتیاز ما **0.53** است، بنابراین در وسط قرار دارد. این نشان می‌دهد که داده‌های ما به‌طور خاص برای این نوع خوشه‌بندی مناسب نیست، اما بیایید ادامه دهیم. +امتیاز ما **.53** است، بنابراین در وسط قرار دارد. این نشان می‌دهد که داده‌های ما به‌طور خاص برای این نوع خوشه‌بندی مناسب نیست، اما بیایید ادامه دهیم. ### تمرین - ساخت مدل @@ -158,7 +158,7 @@ CO_OP_TRANSLATOR_METADATA: ``` - چند بخش وجود دارد که نیاز به توضیح دارند. + چند بخش وجود دارد که توضیح آن‌ها ضروری است. > 🎓 range: این تعداد تکرارهای فرآیند خوشه‌بندی است. @@ -166,7 +166,7 @@ CO_OP_TRANSLATOR_METADATA: > 🎓 WCSS: "مجموع مربعات درون خوشه‌ها" فاصله متوسط مربعی تمام نقاط درون یک خوشه تا مرکز خوشه را اندازه‌گیری می‌کند. [منبع](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce) - > 🎓 Inertia: الگوریتم‌های K-Means تلاش می‌کنند مراکز را به گونه‌ای انتخاب کنند که 'اینرسی'، "معیاری از انسجام داخلی خوشه‌ها"، به حداقل برسد. مقدار در هر تکرار به متغیر wcss اضافه می‌شود. [منبع](https://scikit-learn.org/stable/modules/clustering.html) + > 🎓 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++' استفاده کنید که "مراکز را به گونه‌ای مقداردهی اولیه می‌کند که (به‌طور کلی) از یکدیگر دور باشند، که احتمالاً نتایج بهتری نسبت به مقداردهی اولیه تصادفی دارد." @@ -185,9 +185,9 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - از متغیر `wcss` که در مرحله قبل ساختید استفاده کنید تا نموداری ایجاد کنید که نشان دهد 'خمیدگی' در آرنج کجاست، که تعداد بهینه خوشه‌ها را نشان می‌دهد. شاید واقعاً **3** باشد! + از متغیر `wcss` که در مرحله قبلی ساختید استفاده کنید تا نموداری ایجاد کنید که نشان دهد 'خمیدگی' در آرنج کجاست، که تعداد بهینه خوشه‌ها را نشان می‌دهد. شاید واقعاً **3** باشد! - ![روش آرنج](../../../../translated_images/elbow.72676169eed744ff03677e71334a16c6b8f751e9e716e3d7f40dd7cdef674cca.fa.png) + ![روش آرنج](../../../../5-Clustering/2-K-Means/images/elbow.png) ## تمرین - نمایش خوشه‌ها @@ -216,20 +216,20 @@ CO_OP_TRANSLATOR_METADATA: print('Accuracy score: {0:0.2f}'. format(correct_labels/float(y.size))) ``` - دقت این مدل خیلی خوب نیست و شکل خوشه‌ها به شما نشان می‌دهد چرا. + دقت این مدل خیلی خوب نیست و شکل خوشه‌ها به شما سرنخی می‌دهد که چرا. - ![خوشه‌ها](../../../../translated_images/clusters.b635354640d8e4fd4a49ef545495518e7be76172c97c13bd748f5b79f171f69a.fa.png) + ![خوشه‌ها](../../../../5-Clustering/2-K-Means/images/clusters.png) - این داده‌ها بیش از حد نامتعادل هستند، ارتباط کمی دارند و بین مقادیر ستون‌ها تنوع زیادی وجود دارد که باعث می‌شود خوشه‌بندی به خوبی انجام نشود. در واقع، خوشه‌هایی که تشکیل می‌شوند احتمالاً به شدت تحت تأثیر یا توسط سه دسته ژانر که در بالا تعریف کردیم، منحرف شده‌اند. این یک فرآیند یادگیری بود! + این داده‌ها بیش از حد نامتعادل، کم‌همبسته و دارای واریانس زیادی بین مقادیر ستون‌ها هستند تا به خوبی خوشه‌بندی شوند. در واقع، خوشه‌هایی که تشکیل می‌شوند احتمالاً به شدت تحت تأثیر یا منحرف شده توسط سه دسته ژانر تعریف‌شده در بالا هستند. این یک فرآیند یادگیری بود! - در مستندات Scikit-learn، می‌توانید ببینید که مدلی مانند این، با خوشه‌هایی که به خوبی مشخص نشده‌اند، مشکل 'واریانس' دارد: + در مستندات Scikit-learn، می‌توانید ببینید که مدلی مانند این، با خوشه‌هایی که به خوبی مشخص نشده‌اند، دارای مشکل 'واریانس' است: - ![مدل‌های مشکل‌دار](../../../../translated_images/problems.f7fb539ccd80608e1f35c319cf5e3ad1809faa3c08537aead8018c6b5ba2e33a.fa.png) + ![مدل‌های مشکل‌دار](../../../../5-Clustering/2-K-Means/images/problems.png) > اینفوگرافیک از Scikit-learn ## واریانس -واریانس به عنوان "میانگین اختلافات مربعی از میانگین" تعریف می‌شود [(منبع)](https://www.mathsisfun.com/data/standard-deviation.html). در زمینه این مسئله خوشه‌بندی، به داده‌هایی اشاره دارد که اعداد مجموعه داده ما تمایل دارند کمی بیش از حد از میانگین فاصله بگیرند. +واریانس به عنوان "میانگین مربع تفاوت‌ها از میانگین" تعریف می‌شود [(منبع)](https://www.mathsisfun.com/data/standard-deviation.html). در زمینه این مسئله خوشه‌بندی، به داده‌هایی اشاره دارد که اعداد مجموعه داده ما تمایل دارند کمی بیش از حد از میانگین فاصله بگیرند. ✅ این لحظه خوبی است برای فکر کردن به تمام راه‌هایی که می‌توانید این مشکل را اصلاح کنید. داده‌ها را کمی بیشتر تغییر دهید؟ از ستون‌های مختلف استفاده کنید؟ از الگوریتم دیگری استفاده کنید؟ نکته: سعی کنید داده‌های خود را [مقیاس‌بندی کنید](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) تا آن‌ها را نرمال کنید و ستون‌های دیگر را آزمایش کنید. @@ -239,11 +239,11 @@ CO_OP_TRANSLATOR_METADATA: ## 🚀چالش -زمانی را با این نوت‌بوک صرف کنید و پارامترها را تغییر دهید. آیا می‌توانید با پاکسازی بیشتر داده‌ها (مثلاً حذف نقاط پرت) دقت مدل را بهبود دهید؟ می‌توانید از وزن‌ها برای دادن وزن بیشتر به نمونه‌های داده خاص استفاده کنید. چه کار دیگری می‌توانید انجام دهید تا خوشه‌های بهتری ایجاد کنید؟ +مدتی را با این نوت‌بوک سپری کنید و پارامترها را تغییر دهید. آیا می‌توانید با پاک‌سازی بیشتر داده‌ها (مثلاً حذف نقاط پرت) دقت مدل را بهبود دهید؟ می‌توانید از وزن‌ها برای دادن وزن بیشتر به نمونه‌های داده خاص استفاده کنید. چه کار دیگری می‌توانید انجام دهید تا خوشه‌های بهتری ایجاد کنید؟ -نکته: سعی کنید داده‌های خود را مقیاس‌بندی کنید. در نوت‌بوک کدی کامنت‌گذاری شده وجود دارد که مقیاس‌بندی استاندارد را اضافه می‌کند تا ستون‌های داده از نظر محدوده بیشتر شبیه به یکدیگر شوند. خواهید دید که در حالی که امتیاز سیلوئت کاهش می‌یابد، 'خمیدگی' در نمودار آرنج صاف‌تر می‌شود. این به این دلیل است که باقی گذاشتن داده‌ها بدون مقیاس‌بندی اجازه می‌دهد داده‌هایی با واریانس کمتر وزن بیشتری داشته باشند. در مورد این مشکل کمی بیشتر بخوانید [اینجا](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://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی @@ -258,4 +258,4 @@ CO_OP_TRANSLATOR_METADATA: --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادقتی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/6-NLP/1-Introduction-to-NLP/README.md b/translations/fa/6-NLP/1-Introduction-to-NLP/README.md index 86d492d77..ce9c5adf7 100644 --- a/translations/fa/6-NLP/1-Introduction-to-NLP/README.md +++ b/translations/fa/6-NLP/1-Introduction-to-NLP/README.md @@ -1,8 +1,8 @@ # ترجمه و تحلیل احساسات با یادگیری ماشین -در درس‌های قبلی یاد گرفتید که چگونه یک ربات ساده با استفاده از `TextBlob` بسازید، کتابخانه‌ای که یادگیری ماشین را در پشت صحنه برای انجام وظایف پایه‌ای پردازش زبان طبیعی مانند استخراج عبارات اسمی به کار می‌گیرد. یکی دیگر از چالش‌های مهم در زبان‌شناسی محاسباتی، ترجمه دقیق یک جمله از یک زبان گفتاری یا نوشتاری به زبان دیگر است. +در درس‌های قبلی یاد گرفتید که چگونه یک ربات ساده با استفاده از `TextBlob` بسازید، کتابخانه‌ای که یادگیری ماشین را پشت صحنه برای انجام وظایف پایه‌ای پردازش زبان طبیعی مانند استخراج عبارت‌های اسمی به کار می‌گیرد. یکی از چالش‌های مهم در زبان‌شناسی محاسباتی، ترجمه دقیق یک جمله از یک زبان گفتاری یا نوشتاری به زبان دیگر است. -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/35/) +## [پیش‌آزمون](https://ff-quizzes.netlify.app/en/ml/) -ترجمه یکی از مشکلات بسیار دشوار است که با وجود هزاران زبان و قوانین گرامری بسیار متفاوت هر زبان پیچیده‌تر می‌شود. یک رویکرد این است که قوانین گرامری رسمی یک زبان، مانند انگلیسی، به یک ساختار مستقل از زبان تبدیل شود و سپس با تبدیل آن به زبان دیگر ترجمه شود. این رویکرد شامل مراحل زیر است: +ترجمه یکی از مشکلات بسیار دشوار است که با وجود هزاران زبان و قواعد گرامری متفاوت هر زبان پیچیده‌تر می‌شود. یک رویکرد این است که قواعد گرامری رسمی یک زبان، مانند انگلیسی، را به یک ساختار مستقل از زبان تبدیل کنید و سپس آن را با تبدیل به زبان دیگر ترجمه کنید. این رویکرد شامل مراحل زیر است: -1. **شناسایی**. شناسایی یا برچسب‌گذاری کلمات در زبان ورودی به عنوان اسم، فعل و غیره. -2. **ایجاد ترجمه**. تولید ترجمه مستقیم هر کلمه در قالب زبان مقصد. +1. **شناسایی**. کلمات زبان ورودی را به اسم، فعل و غیره شناسایی یا برچسب‌گذاری کنید. +2. **ایجاد ترجمه**. ترجمه مستقیم هر کلمه را در قالب زبان مقصد تولید کنید. -### مثال جمله، از انگلیسی به ایرلندی +### مثال جمله، انگلیسی به ایرلندی -در زبان 'انگلیسی'، جمله _I feel happy_ شامل سه کلمه به ترتیب زیر است: +در زبان 'انگلیسی' جمله _I feel happy_ شامل سه کلمه به ترتیب زیر است: - **فاعل** (I) - **فعل** (feel) - **صفت** (happy) -اما در زبان 'ایرلندی'، همین جمله ساختار گرامری بسیار متفاوتی دارد - احساساتی مانند "*خوشحال*" یا "*ناراحت*" به صورت *بر روی شما* بیان می‌شوند. +اما در زبان 'ایرلندی' همین جمله ساختار گرامری کاملاً متفاوتی دارد - احساساتی مانند "*خوشحال*" یا "*ناراحت*" به صورت *بر شما بودن* بیان می‌شوند. -عبارت انگلیسی `I feel happy` در ایرلندی به صورت `Tá athas orm` ترجمه می‌شود. یک ترجمه *لفظی* آن می‌شود `Happy is upon me`. +عبارت انگلیسی `I feel happy` در ایرلندی به صورت `Tá athas orm` ترجمه می‌شود. ترجمه *لفظی* آن می‌شود `خوشحالی بر من است`. -یک گوینده ایرلندی که به انگلیسی ترجمه می‌کند، می‌گوید `I feel happy`، نه `Happy is upon me`، زیرا او معنای جمله را درک می‌کند، حتی اگر کلمات و ساختار جمله متفاوت باشند. +یک گوینده ایرلندی که به انگلیسی ترجمه می‌کند، می‌گوید `I feel happy` نه `Happy is upon me`، زیرا او معنای جمله را درک می‌کند، حتی اگر کلمات و ساختار جمله متفاوت باشند. -ترتیب رسمی جمله در ایرلندی به این صورت است: +ترتیب رسمی جمله در ایرلندی به صورت زیر است: - **فعل** (Tá یا is) -- **صفت** (athas، یا happy) -- **فاعل** (orm، یا upon me) +- **صفت** (athas یا happy) +- **فاعل** (orm یا upon me) ## ترجمه یک برنامه ترجمه ساده ممکن است فقط کلمات را ترجمه کند و ساختار جمله را نادیده بگیرد. -✅ اگر به عنوان یک بزرگسال زبان دوم (یا سوم یا بیشتر) یاد گرفته باشید، ممکن است ابتدا با فکر کردن به زبان مادری خود شروع کرده باشید، یک مفهوم را کلمه به کلمه در ذهن خود به زبان دوم ترجمه کرده و سپس ترجمه خود را بیان کرده باشید. این شبیه به کاری است که برنامه‌های ساده ترجمه کامپیوتری انجام می‌دهند. برای رسیدن به تسلط، عبور از این مرحله بسیار مهم است! +✅ اگر به عنوان یک بزرگسال زبان دوم (یا سوم یا بیشتر) یاد گرفته باشید، ممکن است ابتدا با فکر کردن به زبان مادری خود شروع کرده باشید، یک مفهوم را کلمه به کلمه در ذهن خود به زبان دوم ترجمه کرده و سپس ترجمه خود را بیان کنید. این مشابه کاری است که برنامه‌های ترجمه ساده کامپیوتری انجام می‌دهند. مهم است که از این مرحله عبور کنید تا به تسلط برسید! -ترجمه ساده منجر به ترجمه‌های بد (و گاهی خنده‌دار) می‌شود: `I feel happy` به صورت لفظی به `Mise bhraitheann athas` در ایرلندی ترجمه می‌شود. این به معنای (لفظی) `me feel happy` است و یک جمله معتبر در ایرلندی نیست. حتی با وجود اینکه انگلیسی و ایرلندی زبان‌هایی هستند که در دو جزیره نزدیک به هم صحبت می‌شوند، آن‌ها زبان‌هایی بسیار متفاوت با ساختارهای گرامری مختلف هستند. +ترجمه ساده منجر به ترجمه‌های بد (و گاهی خنده‌دار) می‌شود: `I feel happy` به صورت لفظی به `Mise bhraitheann athas` در ایرلندی ترجمه می‌شود. این به معنای (لفظی) `من احساس خوشحالی می‌کنم` است و یک جمله معتبر ایرلندی نیست. حتی با وجود اینکه انگلیسی و ایرلندی زبان‌هایی هستند که در دو جزیره نزدیک به هم صحبت می‌شوند، آن‌ها زبان‌های بسیار متفاوتی با ساختارهای گرامری مختلف هستند. -> می‌توانید برخی ویدیوها درباره سنت‌های زبانی ایرلندی مانند [این ویدیو](https://www.youtube.com/watch?v=mRIaLSdRMMs) را تماشا کنید. +> می‌توانید برخی ویدیوها درباره سنت‌های زبان‌شناسی ایرلندی مانند [این ویدیو](https://www.youtube.com/watch?v=mRIaLSdRMMs) را مشاهده کنید. ### رویکردهای یادگیری ماشین -تا اینجا، درباره رویکرد قوانین رسمی در پردازش زبان طبیعی یاد گرفتید. یک رویکرد دیگر این است که معنای کلمات را نادیده بگیرید و _به جای آن از یادگیری ماشین برای شناسایی الگوها استفاده کنید_. این روش در ترجمه زمانی کار می‌کند که متن‌های زیادی (یک *corpus*) یا متن‌هایی (*corpora*) در هر دو زبان مبدا و مقصد داشته باشید. +تا اینجا درباره رویکرد قواعد رسمی در پردازش زبان طبیعی یاد گرفته‌اید. یک رویکرد دیگر این است که معنای کلمات را نادیده بگیرید و _به جای آن از یادگیری ماشین برای شناسایی الگوها استفاده کنید_. این روش می‌تواند در ترجمه مؤثر باشد اگر متن‌های زیادی (یک *corpus*) یا متن‌هایی (*corpora*) در هر دو زبان مبدا و مقصد داشته باشید. -برای مثال، رمان *غرور و تعصب*، یک رمان معروف انگلیسی نوشته جین آستن در سال 1813 را در نظر بگیرید. اگر کتاب را به زبان انگلیسی و ترجمه انسانی آن به زبان *فرانسوی* بررسی کنید، می‌توانید عباراتی را شناسایی کنید که به صورت *اصطلاحی* به زبان دیگر ترجمه شده‌اند. شما این کار را به زودی انجام خواهید داد. +برای مثال، به مورد *غرور و تعصب*، یک رمان معروف انگلیسی نوشته شده توسط جین آستن در سال 1813، توجه کنید. اگر کتاب را به زبان انگلیسی و ترجمه انسانی آن به زبان *فرانسوی* بررسی کنید، می‌توانید عباراتی را شناسایی کنید که به صورت _اصطلاحی_ به زبان دیگر ترجمه شده‌اند. شما این کار را به زودی انجام خواهید داد. -برای مثال، وقتی عبارتی انگلیسی مانند `I have no money` به صورت لفظی به فرانسوی ترجمه می‌شود، ممکن است به `Je n'ai pas de monnaie` تبدیل شود. "Monnaie" یک 'هم‌آوای کاذب' فرانسوی است، زیرا 'money' و 'monnaie' مترادف نیستند. یک ترجمه بهتر که یک انسان ممکن است انجام دهد، `Je n'ai pas d'argent` است، زیرا بهتر بیان می‌کند که شما پول ندارید (نه 'خرده پول' که معنای 'monnaie' است). +برای مثال، وقتی یک عبارت انگلیسی مانند `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.fa.png) +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) -> تصویر از [Jen Looper](https://twitter.com/jenlooper) +> تصویر توسط [Jen Looper](https://twitter.com/jenlooper) -اگر یک مدل یادگیری ماشین ترجمه‌های انسانی کافی برای ساخت یک مدل داشته باشد، می‌تواند دقت ترجمه‌ها را با شناسایی الگوهای رایج در متن‌هایی که قبلاً توسط گویندگان انسانی متخصص هر دو زبان ترجمه شده‌اند، بهبود بخشد. +اگر یک مدل یادگیری ماشین ترجمه‌های انسانی کافی برای ساخت یک مدل داشته باشد، می‌تواند دقت ترجمه‌ها را با شناسایی الگوهای رایج در متن‌هایی که قبلاً توسط سخنوران انسانی متخصص هر دو زبان ترجمه شده‌اند، بهبود بخشد. ### تمرین - ترجمه -می‌توانید از `TextBlob` برای ترجمه جملات استفاده کنید. جمله معروف آغازین **غرور و تعصب** را امتحان کنید: +می‌توانید از `TextBlob` برای ترجمه جملات استفاده کنید. جمله معروف اول **غرور و تعصب** را امتحان کنید: ```python from textblob import TextBlob @@ -76,41 +76,41 @@ 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` ترجمه خوبی ارائه می‌دهد: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". می‌توان گفت که ترجمه TextBlob در واقع بسیار دقیق‌تر از ترجمه فرانسوی کتاب در سال 1932 توسط V. Leconte و Ch. Pressoir است: "C'est une vérité universelle qu'un célibataire pourvu d'une belle fortune doit avoir envie de se marier, et, si peu que l'on sache de son sentiment à cet egard, lorsqu'il arrive dans une nouvelle résidence, cette idée est si bien fixée dans l'esprit de ses voisins qu'ils le considèrent sur-le-champ comme la propriété légitime de l'une ou l'autre de leurs filles." -در این مورد، ترجمه‌ای که با یادگیری ماشین انجام شده است، بهتر از مترجم انسانی عمل کرده است که به طور غیرضروری کلماتی را برای 'وضوح' به متن اصلی اضافه کرده است. +در این مورد، ترجمه‌ای که توسط یادگیری ماشین انجام شده است، بهتر از مترجم انسانی عمل کرده که به طور غیرضروری کلمات اضافی برای 'وضوح' به متن اصلی اضافه کرده است. -> اینجا چه اتفاقی می‌افتد؟ و چرا TextBlob در ترجمه اینقدر خوب است؟ خب، در پشت صحنه، از Google Translate استفاده می‌کند، یک هوش مصنوعی پیشرفته که قادر است میلیون‌ها عبارت را تحلیل کند تا بهترین رشته‌ها را برای کار مورد نظر پیش‌بینی کند. هیچ چیز دستی در اینجا انجام نمی‌شود و برای استفاده از `blob.translate` به اتصال اینترنت نیاز دارید. +> چه اتفاقی در اینجا رخ داده است؟ و چرا TextBlob در ترجمه اینقدر خوب عمل می‌کند؟ خب، پشت صحنه، از Google Translate استفاده می‌کند، یک هوش مصنوعی پیچیده که قادر است میلیون‌ها عبارت را تحلیل کند تا بهترین رشته‌ها را برای وظیفه مورد نظر پیش‌بینی کند. هیچ چیز دستی در اینجا انجام نمی‌شود و برای استفاده از `blob.translate` به اتصال اینترنت نیاز دارید. -✅ جملات بیشتری را امتحان کنید. کدام بهتر است، ترجمه با یادگیری ماشین یا ترجمه انسانی؟ در چه مواردی؟ +✅ جملات بیشتری را امتحان کنید. کدام بهتر است، ترجمه توسط یادگیری ماشین یا ترجمه انسانی؟ در چه مواردی؟ ## تحلیل احساسات -یکی دیگر از حوزه‌هایی که یادگیری ماشین می‌تواند بسیار خوب عمل کند، تحلیل احساسات است. یک رویکرد غیر یادگیری ماشینی برای تحلیل احساسات این است که کلمات و عبارات 'مثبت' و 'منفی' را شناسایی کنید. سپس، با توجه به یک متن جدید، ارزش کلی کلمات مثبت، منفی و خنثی را محاسبه کنید تا احساس کلی را شناسایی کنید. +یکی دیگر از حوزه‌هایی که یادگیری ماشین می‌تواند بسیار خوب عمل کند، تحلیل احساسات است. یک رویکرد غیر یادگیری ماشین برای تحلیل احساسات این است که کلمات و عباراتی را که 'مثبت' و 'منفی' هستند شناسایی کنید. سپس، با توجه به یک متن جدید، ارزش کل کلمات مثبت، منفی و خنثی را محاسبه کنید تا احساس کلی را شناسایی کنید. -این رویکرد به راحتی فریب می‌خورد، همانطور که ممکن است در وظیفه ماروین دیده باشید - جمله `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` یک جمله با احساس منفی و طنزآمیز است، اما الگوریتم ساده کلماتی مانند 'great'، 'wonderful'، 'glad' را به عنوان مثبت و 'waste'، 'lost' و 'dark' را به عنوان منفی شناسایی می‌کند. احساس کلی تحت تأثیر این کلمات متناقض قرار می‌گیرد. +این رویکرد به راحتی فریب می‌خورد، همانطور که ممکن است در وظیفه ماروین دیده باشید - جمله `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" را به روش‌های مختلف بیان کنید تا کشف کنید که چگونه صدای شما معنا را منتقل می‌کند. +✅ یک لحظه توقف کنید و به این فکر کنید که چگونه به عنوان سخنوران انسانی طنز را منتقل می‌کنیم. لحن صدا نقش بزرگی ایفا می‌کند. سعی کنید عبارت "Well, that film was awesome" را به روش‌های مختلف بیان کنید تا کشف کنید که چگونه صدای شما معنا را منتقل می‌کند. ### رویکردهای یادگیری ماشین -رویکرد یادگیری ماشین این است که به صورت دستی متن‌های مثبت و منفی - توییت‌ها، نقدهای فیلم یا هر چیزی که در آن انسان امتیاز و نظر نوشته شده‌ای داده است - جمع‌آوری کنید. سپس تکنیک‌های پردازش زبان طبیعی می‌توانند بر روی نظرات و امتیازات اعمال شوند، به طوری که الگوهایی ظاهر شوند (مثلاً نقدهای مثبت فیلم بیشتر از عبارت 'Oscar worthy' استفاده می‌کنند تا نقدهای منفی، یا نقدهای مثبت رستوران بیشتر از 'gourmet' استفاده می‌کنند تا 'disgusting'). +رویکرد یادگیری ماشین این است که به صورت دستی متن‌های منفی و مثبت - توییت‌ها، یا نقدهای فیلم، یا هر چیزی که انسان به آن امتیاز داده و نظر نوشته است - جمع‌آوری کنید. سپس تکنیک‌های پردازش زبان طبیعی را بر نظرات و امتیازات اعمال کنید، به طوری که الگوها ظاهر شوند (مثلاً نقدهای مثبت فیلم بیشتر عبارت 'Oscar worthy' را نسبت به نقدهای منفی فیلم دارند، یا نقدهای مثبت رستوران بیشتر 'gourmet' را نسبت به 'disgusting' بیان می‌کنند). -> ⚖️ **مثال**: اگر در دفتر یک سیاستمدار کار می‌کردید و قانونی جدید در حال بحث بود، ممکن است مردم ایمیل‌هایی در حمایت یا مخالفت با قانون جدید به دفتر ارسال کنند. فرض کنید وظیفه شما خواندن ایمیل‌ها و دسته‌بندی آن‌ها به دو گروه *موافق* و *مخالف* باشد. اگر تعداد ایمیل‌ها زیاد باشد، ممکن است از خواندن همه آن‌ها خسته شوید. آیا خوب نبود اگر یک ربات می‌توانست همه آن‌ها را برای شما بخواند، آن‌ها را درک کند و بگوید هر ایمیل به کدام دسته تعلق دارد؟ +> ⚖️ **مثال**: اگر در دفتر یک سیاستمدار کار می‌کردید و قانونی جدید در حال بحث بود، ممکن است شهروندان با ایمیل‌هایی که از قانون جدید حمایت می‌کنند یا مخالف آن هستند به دفتر نامه بنویسند. فرض کنید وظیفه شما خواندن ایمیل‌ها و دسته‌بندی آن‌ها به دو دسته *حمایت* و *مخالفت* است. اگر تعداد زیادی ایمیل وجود داشت، ممکن است از تلاش برای خواندن همه آن‌ها خسته شوید. آیا خوب نبود اگر یک ربات می‌توانست همه آن‌ها را برای شما بخواند، آن‌ها را درک کند و به شما بگوید هر ایمیل در کدام دسته قرار می‌گیرد؟ > -> یک راه برای دستیابی به این هدف استفاده از یادگیری ماشین است. شما مدل را با بخشی از ایمیل‌های *مخالف* و بخشی از ایمیل‌های *موافق* آموزش می‌دهید. مدل تمایل دارد عبارات و کلمات را با طرف مخالف یا موافق مرتبط کند، *اما هیچ‌کدام از محتوا را درک نمی‌کند*، فقط اینکه کلمات و الگوهای خاصی بیشتر در ایمیل‌های مخالف یا موافق ظاهر می‌شوند. شما می‌توانید آن را با برخی ایمیل‌هایی که برای آموزش مدل استفاده نکرده‌اید آزمایش کنید و ببینید آیا به همان نتیجه‌ای که شما می‌رسید، می‌رسد یا خیر. سپس، وقتی از دقت مدل راضی بودید، می‌توانید ایمیل‌های آینده را بدون نیاز به خواندن هر یک پردازش کنید. +> یک راه برای دستیابی به این هدف استفاده از یادگیری ماشین است. شما مدل را با بخشی از ایمیل‌های *مخالفت* و بخشی از ایمیل‌های *حمایت* آموزش می‌دهید. مدل تمایل دارد عبارات و کلمات را با طرف مخالفت و طرف حمایت مرتبط کند، *اما هیچ یک از محتوا را درک نمی‌کند*، فقط اینکه کلمات و الگوهای خاصی بیشتر احتمال دارد در ایمیل‌های *مخالفت* یا *حمایت* ظاهر شوند. شما می‌توانید آن را با برخی ایمیل‌هایی که برای آموزش مدل استفاده نکرده‌اید آزمایش کنید و ببینید آیا به همان نتیجه‌ای که شما رسیدید می‌رسد یا خیر. سپس، وقتی از دقت مدل راضی بودید، می‌توانید ایمیل‌های آینده را بدون نیاز به خواندن هر یک پردازش کنید. ✅ آیا این فرآیند شبیه فرآیندهایی است که در درس‌های قبلی استفاده کرده‌اید؟ ## تمرین - جملات احساسی -احساسات با *قطبیت* از -1 تا 1 اندازه‌گیری می‌شود، به این معنی که -1 منفی‌ترین احساس و 1 مثبت‌ترین احساس است. احساسات همچنین با امتیاز 0 تا 1 برای عینیت (0) و ذهنیت (1) اندازه‌گیری می‌شود. +احساسات با *قطبیت* از -1 تا 1 اندازه‌گیری می‌شود، به این معنا که -1 منفی‌ترین احساس و 1 مثبت‌ترین احساس است. احساسات همچنین با امتیاز 0 - 1 برای عینیت (0) و ذهنیت (1) اندازه‌گیری می‌شود. -یک بار دیگر به *غرور و تعصب* جین آستن نگاه کنید. متن این کتاب در اینجا در [پروژه گوتنبرگ](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) موجود است. نمونه زیر یک برنامه کوتاه را نشان می‌دهد که احساسات اولین و آخرین جملات کتاب را تحلیل کرده و قطبیت احساسات و امتیاز عینیت/ذهنیت آن را نمایش می‌دهد. +نگاهی دوباره به *غرور و تعصب* جین آستن بیندازید. متن این کتاب در اینجا در دسترس است: [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). نمونه زیر یک برنامه کوتاه را نشان می‌دهد که احساسات اولین و آخرین جملات کتاب را تحلیل می‌کند و قطبیت احساسات و امتیاز عینیت/ذهنیت آن را نمایش می‌دهد. شما باید از کتابخانه `TextBlob` (که در بالا توضیح داده شد) برای تعیین `sentiment` استفاده کنید (لازم نیست ماشین حساب احساسات خود را بنویسید) در وظیفه زیر. @@ -128,7 +128,7 @@ 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) @@ -141,43 +141,43 @@ Darcy, as well as Elizabeth, really loved them; and they were ## چالش - بررسی قطبیت احساسات -وظیفه شما این است که با استفاده از قطبیت احساسات، تعیین کنید که آیا *غرور و تعصب* جملات کاملاً مثبت بیشتری نسبت به جملات کاملاً منفی دارد یا خیر. برای این وظیفه، می‌توانید فرض کنید که امتیاز قطبیت 1 یا -1 به ترتیب کاملاً مثبت یا منفی است. +وظیفه شما این است که با استفاده از قطبیت احساسات تعیین کنید که آیا *غرور و تعصب* جملات کاملاً مثبت بیشتری نسبت به جملات کاملاً منفی دارد یا خیر. برای این وظیفه، می‌توانید فرض کنید که امتیاز قطبیت 1 یا -1 به ترتیب کاملاً مثبت یا منفی است. **مراحل:** -1. یک [نسخه‌ای از غرور و تعصب](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) را از پروژه گوتنبرگ به صورت فایل .txt دانلود کنید. متادیتا را از ابتدای و انتهای فایل حذف کنید و فقط متن اصلی را باقی بگذارید. -2. فایل را در پایتون باز کنید و محتویات آن را به صورت رشته استخراج کنید. +1. یک [نسخه از غرور و تعصب](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) را از Project Gutenberg به عنوان فایل .txt دانلود کنید. متاداده‌های ابتدای و انتهای فایل را حذف کنید و فقط متن اصلی را باقی بگذارید. +2. فایل را در پایتون باز کنید و محتویات آن را به عنوان یک رشته استخراج کنید. 3. یک TextBlob با استفاده از رشته کتاب ایجاد کنید. 4. هر جمله در کتاب را در یک حلقه تحلیل کنید. - 1. اگر قطبیت 1 یا -1 بود، جمله را در یک آرایه یا لیست از پیام‌های مثبت یا منفی ذخیره کنید. + 1. اگر قطبیت 1 یا -1 باشد، جمله را در یک آرایه یا لیست از پیام‌های مثبت یا منفی ذخیره کنید. 5. در پایان، تمام جملات مثبت و منفی (به صورت جداگانه) و تعداد هر کدام را چاپ کنید. در اینجا یک [راه‌حل نمونه](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb) آورده شده است. ✅ بررسی دانش -1. احساسات بر اساس کلماتی که در جمله استفاده شده‌اند است، اما آیا کد *کلمات را درک می‌کند*؟ -2. آیا فکر می‌کنید قطبیت احساسات دقیق است، یا به عبارت دیگر، آیا با امتیازات موافق هستید؟ +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. سه جمله بعدی با قطبیت کاملاً مثبت امتیازدهی شده‌اند، اما با خواندن دقیق، آن‌ها جملات مثبتی نیستند. چرا تحلیل احساسات فکر کرده که این جملات مثبت هستند؟ - * 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. + * “چه پدر فوق‌العاده‌ای دارید، دختران!” او گفت، وقتی در بسته شد. + * “بررسی شما از آقای دارسی تمام شده است، فرض می‌کنم،” خانم بینگلی گفت؛ “و دعا کنید نتیجه چیست؟” “من کاملاً متقاعد شده‌ام که آقای دارسی هیچ نقصی ندارد. + * چقدر این نوع چیزها به طرز شگفت‌انگیزی رخ می‌دهند! + * من بیشترین نفرت در دنیا را از این نوع چیزها دارم. + * شارلوت یک مدیر عالی است، من می‌گویم. + * “این واقعاً لذت‌بخش است! + * من خیلی خوشحالم! + * ایده شما درباره اسب‌ها لذت‌بخش است. + 2. سه جمله بعدی با قطبیت کاملاً مثبت امتیاز داده شده‌اند، اما با خواندن دقیق، آن‌ها جملات مثبت نیستند. چرا تحلیل احساسات فکر می‌کرد آن‌ها جملات مثبت هستند؟ + * خوشحال خواهم بود، وقتی اقامت او در نترفیلد تمام شود!” “ای کاش می‌توانستم چیزی بگویم که شما را تسلی دهد،” الیزابت پاسخ داد؛ “اما کاملاً خارج از قدرت من است. + * اگر فقط می‌توانستم شما را خوشحال ببینم! + * ناراحتی ما، عزیزم لیزی، بسیار زیاد است. 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! + - همه از غرور او متنفر هستند. + - “دوست دارم بدانم او در میان غریبه‌ها چگونه رفتار می‌کند.” “پس خواهید شنید—اما خود را برای چیزی بسیار وحشتناک آماده کنید. + - مکث برای احساسات الیزابت وحشتناک بود. + - این وحشتناک خواهد بود! -✅ هر علاقه‌مند به جین آستن می‌داند که او اغلب از کتاب‌هایش برای نقد جنبه‌های مضحک جامعه انگلستان در دوران ریجنسی استفاده می‌کند. الیزابت بنت، شخصیت اصلی در *غرور و تعصب*، یک ناظر اجتماعی تیزبین است (مانند نویسنده) و زبان او اغلب به شدت دارای ظرافت است. حتی آقای دارسی (علاقه‌مند عاشقانه داستان) به استفاده بازیگوشانه و طعنه‌آمیز الیزابت از زبان اشاره می‌کند: "من به اندازه کافی از آشنایی با شما لذت برده‌ام تا بدانم که شما از ابراز نظراتی که در واقع نظرات خودتان نیستند، لذت زیادی می‌برید." +✅ هر علاقه‌مند به جین آستن درک می‌کند که او اغلب از کتاب‌هایش برای نقد جنبه‌های مضحک جامعه انگلستان در دوران رجنتی استفاده می‌کند. الیزابت بنت، شخصیت اصلی در *غرور و تعصب*، یک ناظر اجتماعی تیزبین (مانند نویسنده) است و زبان او اغلب بسیار ظریف است. حتی آقای دارسی (علاقه عاشقانه در داستان) به استفاده بازیگوشانه و طعنه‌آمیز الیزابت از زبان اشاره می‌کند: "من به اندازه کافی از آشنایی شما لذت برده‌ام تا بدانم که شما از اظهار نظرهایی که در واقع نظر شما نیستند، لذت زیادی می‌برید." --- @@ -185,10 +185,10 @@ Darcy, as well as Elizabeth, really loved them; and they were آیا می‌توانید ماروین را با استخراج ویژگی‌های دیگر از ورودی کاربر بهتر کنید؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/36/) +## [پس‌آزمون](https://ff-quizzes.netlify.app/en/ml/) -## مرور و مطالعه شخصی -راه‌های زیادی برای استخراج احساسات از متن وجود دارد. به کاربردهای تجاری فکر کنید که ممکن است از این تکنیک استفاده کنند. به این فکر کنید که چگونه ممکن است این روش به اشتباه بیفتد. درباره سیستم‌های پیشرفته و آماده برای سازمان‌ها که احساسات را تحلیل می‌کنند، مانند [Azure Text Analysis](https://docs.microsoft.com/azure/cognitive-services/Text-Analytics/how-tos/text-analytics-how-to-sentiment-analysis?tabs=version-3-1?WT.mc_id=academic-77952-leestott) بیشتر بخوانید. برخی از جملات کتاب «غرور و تعصب» را که در بالا آمده‌اند آزمایش کنید و ببینید آیا می‌تواند ظرافت‌های موجود در آنها را تشخیص دهد. +## مرور و مطالعه خود +راه‌های زیادی برای استخراج احساسات از متن وجود دارد. به کاربردهای تجاری فکر کنید که ممکن است از این تکنیک استفاده کنند. به این فکر کنید که چگونه ممکن است اشتباه پیش برود. درباره سیستم‌های پیشرفته و آماده برای استفاده در سازمان‌ها که احساسات را تحلیل می‌کنند، مانند [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) بیشتر بخوانید. برخی از جملات کتاب غرور و تعصب را که در بالا آمده‌اند آزمایش کنید و ببینید آیا می‌تواند ظرافت‌ها را تشخیص دهد. ## تکلیف @@ -197,4 +197,4 @@ Darcy, as well as Elizabeth, really loved them; and they were --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادقتی‌هایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/6-NLP/4-Hotel-Reviews-1/README.md b/translations/fa/6-NLP/4-Hotel-Reviews-1/README.md index f6e8e928c..ab79254f4 100644 --- a/translations/fa/6-NLP/4-Hotel-Reviews-1/README.md +++ b/translations/fa/6-NLP/4-Hotel-Reviews-1/README.md @@ -1,8 +1,8 @@ # مقدمه‌ای بر پیش‌بینی سری‌های زمانی -![خلاصه‌ای از سری‌های زمانی در یک اسکچ‌نوت](../../../../translated_images/ml-timeseries.fb98d25f1013fc0c59090030080b5d1911ff336427bec31dbaf1ad08193812e9.fa.png) +![خلاصه‌ای از سری‌های زمانی در یک اسکچ‌نوت](../../../../sketchnotes/ml-timeseries.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://ff-quizzes.netlify.app/en/ml/) -این حوزه‌ای مفید و جالب است که ارزش واقعی برای کسب‌وکار دارد، با توجه به کاربرد مستقیم آن در مسائل قیمت‌گذاری، موجودی و زنجیره تأمین. در حالی که تکنیک‌های یادگیری عمیق شروع به استفاده برای کسب بینش‌های بیشتر جهت پیش‌بینی بهتر عملکرد آینده کرده‌اند، پیش‌بینی سری‌های زمانی همچنان حوزه‌ای است که به شدت تحت تأثیر تکنیک‌های کلاسیک یادگیری ماشین قرار دارد. +این حوزه‌ای مفید و جالب با ارزش واقعی برای کسب‌وکار است، زیرا کاربرد مستقیم آن در مسائل قیمت‌گذاری، موجودی و زنجیره تأمین است. در حالی که تکنیک‌های یادگیری عمیق شروع به استفاده برای کسب بینش‌های بیشتر و پیش‌بینی بهتر عملکرد آینده کرده‌اند، پیش‌بینی سری‌های زمانی همچنان حوزه‌ای است که به شدت تحت تأثیر تکنیک‌های کلاسیک یادگیری ماشین قرار دارد. -> برنامه درسی مفید سری‌های زمانی دانشگاه Penn State را می‌توانید [اینجا](https://online.stat.psu.edu/stat510/lesson/1) پیدا کنید +> برنامه درسی مفید سری‌های زمانی دانشگاه Penn State را می‌توانید [اینجا](https://online.stat.psu.edu/stat510/lesson/1) پیدا کنید. ## مقدمه @@ -31,11 +31,11 @@ CO_OP_TRANSLATOR_METADATA: > اگر بتوانید بر اساس عملکرد گذشته پارکومتر، ارزش آینده آن را طبق قوانین عرضه و تقاضا پیش‌بینی کنید، چه می‌شود؟ -پیش‌بینی دقیق زمان اقدام برای دستیابی به هدف شما چالشی است که می‌توان با پیش‌بینی سری‌های زمانی به آن پرداخت. ممکن است مردم خوشحال نشوند که در زمان‌های شلوغ هزینه بیشتری برای پیدا کردن جای پارک پرداخت کنند، اما این راهی مطمئن برای کسب درآمد جهت تمیز کردن خیابان‌ها خواهد بود! +پیش‌بینی دقیق زمان اقدام برای دستیابی به هدف شما چالشی است که می‌توان با پیش‌بینی سری‌های زمانی به آن پرداخت. ممکن است مردم خوشحال نباشند که در زمان‌های شلوغ هزینه بیشتری برای پیدا کردن جای پارک پرداخت کنند، اما این راهی مطمئن برای کسب درآمد برای تمیز کردن خیابان‌ها خواهد بود! بیایید برخی از انواع الگوریتم‌های سری‌های زمانی را بررسی کنیم و یک دفترچه یادداشت برای پاک‌سازی و آماده‌سازی داده‌ها شروع کنیم. داده‌هایی که تحلیل خواهید کرد از مسابقه پیش‌بینی GEFCom2014 گرفته شده است. این داده‌ها شامل ۳ سال بار الکتریکی ساعتی و مقادیر دمایی بین سال‌های ۲۰۱۲ تا ۲۰۱۴ است. با توجه به الگوهای تاریخی بار الکتریکی و دما، می‌توانید مقادیر آینده بار الکتریکی را پیش‌بینی کنید. -در این مثال، شما یاد خواهید گرفت که چگونه یک گام زمانی را پیش‌بینی کنید، فقط با استفاده از داده‌های بار تاریخی. با این حال، قبل از شروع، مفید است که بفهمید پشت صحنه چه اتفاقی می‌افتد. +در این مثال، شما یاد خواهید گرفت که چگونه یک گام زمانی را با استفاده از داده‌های تاریخی بار پیش‌بینی کنید. با این حال، قبل از شروع، مفید است که بفهمید پشت صحنه چه اتفاقی می‌افتد. ## برخی تعاریف @@ -43,21 +43,21 @@ CO_OP_TRANSLATOR_METADATA: 🎓 **سری‌های زمانی** -در ریاضیات، "سری‌های زمانی مجموعه‌ای از نقاط داده است که به ترتیب زمانی فهرست شده یا رسم شده‌اند. معمولاً، سری‌های زمانی دنباله‌ای است که در نقاط متوالی و با فاصله‌های مساوی در زمان گرفته شده است." نمونه‌ای از سری‌های زمانی، مقدار بسته شدن روزانه [شاخص صنعتی داو جونز](https://wikipedia.org/wiki/Time_series) است. استفاده از نمودارهای سری‌های زمانی و مدل‌سازی آماری اغلب در پردازش سیگنال، پیش‌بینی آب‌وهوا، پیش‌بینی زلزله و سایر زمینه‌هایی که رویدادها رخ می‌دهند و نقاط داده می‌توانند در طول زمان رسم شوند، مشاهده می‌شود. +در ریاضیات، "سری‌های زمانی مجموعه‌ای از نقاط داده است که به ترتیب زمانی فهرست شده یا رسم شده‌اند. معمولاً، سری‌های زمانی دنباله‌ای است که در نقاط متوالی و با فاصله‌های زمانی برابر گرفته شده است." نمونه‌ای از سری‌های زمانی، مقدار بسته شدن روزانه [شاخص صنعتی داو جونز](https://wikipedia.org/wiki/Time_series) است. استفاده از نمودارهای سری‌های زمانی و مدل‌سازی آماری اغلب در پردازش سیگنال، پیش‌بینی آب‌وهوا، پیش‌بینی زلزله و سایر زمینه‌هایی که رویدادها رخ می‌دهند و نقاط داده می‌توانند در طول زمان رسم شوند، مشاهده می‌شود. 🎓 **تحلیل سری‌های زمانی** -تحلیل سری‌های زمانی، تحلیل داده‌های سری‌های زمانی ذکر شده در بالا است. داده‌های سری‌های زمانی می‌توانند اشکال مختلفی داشته باشند، از جمله "سری‌های زمانی متوقف شده" که الگوها را در تکامل سری‌های زمانی قبل و بعد از یک رویداد متوقف‌کننده تشخیص می‌دهد. نوع تحلیل مورد نیاز برای سری‌های زمانی، به ماهیت داده‌ها بستگی دارد. خود داده‌های سری‌های زمانی می‌توانند به صورت مجموعه‌ای از اعداد یا کاراکترها باشند. +تحلیل سری‌های زمانی، تحلیل داده‌های سری‌های زمانی ذکر شده در بالا است. داده‌های سری‌های زمانی می‌توانند اشکال مختلفی داشته باشند، از جمله "سری‌های زمانی متوقف شده" که الگوها را در تکامل سری‌های زمانی قبل و بعد از یک رویداد متوقف‌کننده تشخیص می‌دهد. نوع تحلیل مورد نیاز برای سری‌های زمانی به ماهیت داده‌ها بستگی دارد. داده‌های سری‌های زمانی خود می‌توانند به صورت مجموعه‌ای از اعداد یا کاراکترها باشند. تحلیلی که باید انجام شود، از روش‌های مختلفی استفاده می‌کند، از جمله حوزه فرکانس و حوزه زمان، خطی و غیرخطی، و موارد دیگر. [بیشتر بیاموزید](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) درباره روش‌های مختلف تحلیل این نوع داده‌ها. 🎓 **پیش‌بینی سری‌های زمانی** -پیش‌بینی سری‌های زمانی استفاده از یک مدل برای پیش‌بینی مقادیر آینده بر اساس الگوهایی است که توسط داده‌های جمع‌آوری شده قبلی به عنوان گذشته رخ داده است. در حالی که امکان استفاده از مدل‌های رگرسیون برای بررسی داده‌های سری‌های زمانی وجود دارد، با شاخص‌های زمانی به عنوان متغیرهای x در یک نمودار، چنین داده‌هایی بهتر است با استفاده از انواع خاصی از مدل‌ها تحلیل شوند. +پیش‌بینی سری‌های زمانی استفاده از یک مدل برای پیش‌بینی مقادیر آینده بر اساس الگوهایی است که توسط داده‌های جمع‌آوری شده قبلی نمایش داده شده‌اند. در حالی که امکان استفاده از مدل‌های رگرسیون برای بررسی داده‌های سری‌های زمانی وجود دارد، با شاخص‌های زمانی به عنوان متغیرهای x در یک نمودار، چنین داده‌هایی بهتر است با استفاده از انواع خاصی از مدل‌ها تحلیل شوند. -داده‌های سری‌های زمانی لیستی از مشاهدات مرتب شده است، برخلاف داده‌هایی که می‌توانند با رگرسیون خطی تحلیل شوند. رایج‌ترین مدل ARIMA است، که مخفف "میانگین متحرک یکپارچه خودبازگشتی" است. +داده‌های سری‌های زمانی لیستی از مشاهدات مرتب شده است، برخلاف داده‌هایی که می‌توان با رگرسیون خطی تحلیل کرد. رایج‌ترین مدل ARIMA است، که مخفف "میانگین متحرک یکپارچه خودبازگشتی" است. -[مدل‌های ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "ارزش فعلی یک سری را به مقادیر گذشته و خطاهای پیش‌بینی گذشته مرتبط می‌کنند." این مدل‌ها برای تحلیل داده‌های حوزه زمان، که داده‌ها به ترتیب زمانی مرتب شده‌اند، مناسب‌ترین هستند. +[مدل‌های ARIMA](https://online.stat.psu.edu/stat510/lesson/1/1.1) "ارزش فعلی یک سری را به مقادیر گذشته و خطاهای پیش‌بینی گذشته مرتبط می‌کنند." این مدل‌ها برای تحلیل داده‌های حوزه زمان، جایی که داده‌ها به ترتیب زمانی مرتب شده‌اند، مناسب‌تر هستند. > انواع مختلفی از مدل‌های ARIMA وجود دارد که می‌توانید درباره آن‌ها [اینجا](https://people.duke.edu/~rnau/411arim.htm) یاد بگیرید و در درس بعدی به آن‌ها پرداخته خواهد شد. @@ -78,7 +78,7 @@ CO_OP_TRANSLATOR_METADATA: | 329.25 | 1975.88 | 1975 | 11 | | 330.97 | 1975.96 | 1975 | 12 | -✅ متغیری که در این مجموعه داده در طول زمان تغییر می‌کند را شناسایی کنید +✅ متغیری که در طول زمان تغییر می‌کند را در این مجموعه داده شناسایی کنید. ## ویژگی‌های داده‌های سری‌های زمانی که باید در نظر گرفت @@ -92,7 +92,7 @@ CO_OP_TRANSLATOR_METADATA: 🎓 **[فصلی بودن](https://machinelearningmastery.com/time-series-seasonality-with-python/)** -فصلی بودن به عنوان نوسانات دوره‌ای تعریف می‌شود، مانند شلوغی‌های تعطیلات که ممکن است بر فروش تأثیر بگذارد، به عنوان مثال. [نگاهی بیندازید](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) به نحوه نمایش فصلی بودن در داده‌ها با انواع مختلف نمودارها. +فصلی بودن به عنوان نوسانات دوره‌ای تعریف می‌شود، مانند افزایش فروش در تعطیلات. [نگاهی بیندازید](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) به نحوه نمایش فصلی بودن در داده‌ها با انواع مختلف نمودارها. 🎓 **نقاط پرت** @@ -112,7 +112,7 @@ CO_OP_TRANSLATOR_METADATA: ✅ اینجا یک [نمودار نمونه سری‌های زمانی](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python) وجود دارد که هزینه روزانه ارز درون بازی را در طول چند سال نشان می‌دهد. آیا می‌توانید هر یک از ویژگی‌های ذکر شده در بالا را در این داده‌ها شناسایی کنید؟ -![هزینه ارز درون بازی](../../../../translated_images/currency.e7429812bfc8c6087b2d4c410faaa4aaa11b2fcaabf6f09549b8249c9fbdb641.fa.png) +![هزینه ارز درون بازی](../../../../7-TimeSeries/1-Introduction/images/currency.png) ## تمرین - شروع با داده‌های مصرف برق @@ -120,9 +120,9 @@ CO_OP_TRANSLATOR_METADATA: > داده‌های این مثال از مسابقه پیش‌بینی GEFCom2014 گرفته شده است. این داده‌ها شامل ۳ سال بار الکتریکی ساعتی و مقادیر دمایی بین سال‌های ۲۰۱۲ تا ۲۰۱۴ است. > -> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli و Rob J. Hyndman، "پیش‌بینی انرژی احتمالی: مسابقه جهانی پیش‌بینی انرژی ۲۰۱۴ و فراتر از آن"، مجله بین‌المللی پیش‌بینی، جلد ۳۲، شماره ۳، صفحات ۸۹۶-۹۱۳، جولای-سپتامبر، ۲۰۱۶. +> 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_ را باز کنید. ابتدا کتابخانه‌هایی را اضافه کنید که به شما کمک می‌کنند داده‌ها را بارگذاری و بصری‌سازی کنید +1. در پوشه `working` این درس، فایل _notebook.ipynb_ را باز کنید. با افزودن کتابخانه‌هایی که به شما کمک می‌کنند داده‌ها را بارگذاری و بصری‌سازی کنید شروع کنید. ```python import os @@ -133,7 +133,7 @@ CO_OP_TRANSLATOR_METADATA: توجه داشته باشید که شما از فایل‌های موجود در پوشه `common` استفاده می‌کنید که محیط شما را تنظیم کرده و داده‌ها را دانلود می‌کنند. -2. سپس، داده‌ها را به عنوان یک دیتافریم بررسی کنید با فراخوانی `load_data()` و `head()`: +2. سپس، داده‌ها را به عنوان یک dataframe بررسی کنید با فراخوانی `load_data()` و `head()`: ```python data_dir = './data' @@ -160,9 +160,9 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![نمودار انرژی](../../../../translated_images/energy-plot.5fdac3f397a910bc6070602e9e45bea8860d4c239354813fa8fc3c9d556f5bad.fa.png) + ![نمودار انرژی](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) -4. اکنون، هفته اول جولای ۲۰۱۴ را رسم کنید، با ارائه آن به عنوان ورودی به `energy` در الگوی `[از تاریخ]: [تا تاریخ]`: +4. اکنون، هفته اول جولای ۲۰۱۴ را با ارائه آن به عنوان ورودی به `energy` در الگوی `[از تاریخ]: [تا تاریخ]` رسم کنید: ```python energy['2014-07-01':'2014-07-07'].plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) @@ -171,9 +171,9 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![جولای](../../../../translated_images/july-2014.9e1f7c318ec6d5b30b0d7e1e20be3643501f64a53f3d426d7c7d7b62addb335e.fa.png) + ![جولای](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) - نموداری زیبا! به این نمودارها نگاه کنید و ببینید آیا می‌توانید هر یک از ویژگی‌های ذکر شده در بالا را تعیین کنید. با بصری‌سازی داده‌ها چه چیزی می‌توانیم نتیجه‌گیری کنیم؟ + یک نمودار زیبا! به این نمودارها نگاه کنید و ببینید آیا می‌توانید هر یک از ویژگی‌های ذکر شده در بالا را تعیین کنید. با بصری‌سازی داده‌ها چه چیزی می‌توانیم نتیجه‌گیری کنیم؟ در درس بعدی، شما یک مدل ARIMA ایجاد خواهید کرد تا برخی پیش‌بینی‌ها انجام دهید. @@ -181,9 +181,9 @@ CO_OP_TRANSLATOR_METADATA: ## 🚀چالش -فهرستی از تمام صنایع و زمینه‌های تحقیقاتی که فکر می‌کنید از پیش‌بینی سری‌های زمانی بهره‌مند شوند تهیه کنید. آیا می‌توانید کاربردی از این تکنیک‌ها در هنرها، اقتصادسنجی، اکولوژی، خرده‌فروشی، صنعت، مالی یا جای دیگری پیدا کنید؟ +فهرستی از تمام صنایع و زمینه‌های تحقیقاتی که فکر می‌کنید از پیش‌بینی سری‌های زمانی بهره‌مند شوند تهیه کنید. آیا می‌توانید کاربردی از این تکنیک‌ها در هنرها، اقتصادسنجی، اکولوژی، خرده‌فروشی، صنعت، امور مالی یا جاهای دیگر پیدا کنید؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/42/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی @@ -191,9 +191,9 @@ CO_OP_TRANSLATOR_METADATA: ## تکلیف -[برخی سری‌های زمانی دیگر را بصری‌سازی کنید](assignment.md) +[بصری‌سازی سری‌های زمانی بیشتر](assignment.md) --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/7-TimeSeries/2-ARIMA/README.md b/translations/fa/7-TimeSeries/2-ARIMA/README.md index d6c2bdac9..db8402ba8 100644 --- a/translations/fa/7-TimeSeries/2-ARIMA/README.md +++ b/translations/fa/7-TimeSeries/2-ARIMA/README.md @@ -1,55 +1,55 @@ # پیش‌بینی سری‌های زمانی با ARIMA -در درس قبلی، کمی درباره پیش‌بینی سری‌های زمانی یاد گرفتید و یک مجموعه داده را که نوسانات بار الکتریکی را در طول یک بازه زمانی نشان می‌داد، بارگذاری کردید. +در درس قبلی، کمی درباره پیش‌بینی سری‌های زمانی یاد گرفتید و یک مجموعه داده را که نشان‌دهنده نوسانات بار الکتریکی در طول یک دوره زمانی بود، بارگذاری کردید. [![معرفی ARIMA](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "معرفی ARIMA") -> 🎥 روی تصویر بالا کلیک کنید تا ویدیو را ببینید: معرفی کوتاهی از مدل‌های ARIMA. مثال در زبان R انجام شده است، اما مفاهیم آن جهانی هستند. +> 🎥 روی تصویر بالا کلیک کنید تا ویدئویی درباره معرفی کوتاه مدل‌های ARIMA مشاهده کنید. مثال در زبان R انجام شده است، اما مفاهیم آن جهانی هستند. -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/43/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) ## مقدمه -در این درس، شما با یک روش خاص برای ساخت مدل‌ها با استفاده از [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) آشنا خواهید شد. مدل‌های ARIMA به‌ویژه برای داده‌هایی که [غیرایستا](https://wikipedia.org/wiki/Stationary_process) هستند، مناسب هستند. +در این درس، شما با یک روش خاص برای ساخت مدل‌ها با [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) آشنا خواهید شد. مدل‌های ARIMA به‌ویژه برای داده‌هایی که [غیر ایستا](https://wikipedia.org/wiki/Stationary_process) هستند، مناسب هستند. ## مفاهیم کلی -برای کار با ARIMA، باید با چند مفهوم آشنا شوید: +برای کار با ARIMA، باید با برخی مفاهیم آشنا شوید: -- 🎓 **ایستایی**. از دیدگاه آماری، ایستایی به داده‌هایی اشاره دارد که توزیع آن‌ها با تغییر زمان ثابت می‌ماند. داده‌های غیرایستا نوساناتی را به دلیل روندها نشان می‌دهند که باید برای تحلیل تبدیل شوند. به عنوان مثال، فصلی بودن می‌تواند نوساناتی در داده‌ها ایجاد کند که می‌توان آن را با فرآیند «تفاضل‌گیری فصلی» حذف کرد. +- 🎓 **ایستایی**. از دیدگاه آماری، ایستایی به داده‌هایی اشاره دارد که توزیع آن‌ها با تغییر زمان ثابت می‌ماند. داده‌های غیر ایستا، نوساناتی به دلیل روندها نشان می‌دهند که باید برای تحلیل تغییر داده شوند. به عنوان مثال، فصلی بودن می‌تواند نوساناتی در داده‌ها ایجاد کند که با فرآیند "تفاضل‌گیری فصلی" حذف می‌شود. -- 🎓 **[تفاضل‌گیری](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. تفاضل‌گیری داده‌ها، از دیدگاه آماری، به فرآیند تبدیل داده‌های غیرایستا به ایستا از طریق حذف روندهای غیرثابت اشاره دارد. "تفاضل‌گیری تغییرات سطح یک سری زمانی را حذف می‌کند، روند و فصلی بودن را از بین می‌برد و در نتیجه میانگین سری زمانی را تثبیت می‌کند." [مقاله‌ای از Shixiong و همکاران](https://arxiv.org/abs/1904.07632) +- 🎓 **[تفاضل‌گیری](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. تفاضل‌گیری داده‌ها، از دیدگاه آماری، به فرآیند تبدیل داده‌های غیر ایستا به ایستا با حذف روند غیر ثابت آن اشاره دارد. "تفاضل‌گیری تغییرات سطح یک سری زمانی را حذف می‌کند، روند و فصلی بودن را از بین می‌برد و در نتیجه میانگین سری زمانی را تثبیت می‌کند." [مقاله شیکسیونگ و همکاران](https://arxiv.org/abs/1904.07632) ## ARIMA در زمینه سری‌های زمانی -بیایید اجزای ARIMA را بررسی کنیم تا بهتر بفهمیم چگونه به ما در مدل‌سازی سری‌های زمانی و پیش‌بینی کمک می‌کند. +اجزای ARIMA را بررسی کنیم تا بهتر بفهمیم چگونه به ما کمک می‌کند سری‌های زمانی را مدل‌سازی کنیم و پیش‌بینی‌هایی بر اساس آن انجام دهیم. -- **AR - برای خودرگرسیو (AutoRegressive)**. مدل‌های خودرگرسیو، همان‌طور که از نامشان پیداست، به گذشته نگاه می‌کنند تا مقادیر قبلی داده‌ها را تحلیل کرده و فرضیاتی درباره آن‌ها بسازند. این مقادیر قبلی به عنوان «وقفه‌ها» شناخته می‌شوند. به عنوان مثال، داده‌هایی که فروش ماهانه مدادها را نشان می‌دهند. مجموع فروش هر ماه به عنوان یک «متغیر در حال تکامل» در مجموعه داده در نظر گرفته می‌شود. این مدل به این صورت ساخته می‌شود که "متغیر در حال تکامل مورد نظر بر اساس مقادیر وقفه‌ای (یعنی قبلی) خودش رگرس می‌شود." [ویکی‌پدیا](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) +- **AR - برای خودرگرسیو**. مدل‌های خودرگرسیو، همان‌طور که از نامشان پیداست، به گذشته نگاه می‌کنند تا مقادیر قبلی داده‌ها را تحلیل کنند و فرضیاتی درباره آن‌ها بسازند. این مقادیر قبلی به عنوان "لگ‌ها" شناخته می‌شوند. به عنوان مثال، داده‌هایی که فروش ماهانه مدادها را نشان می‌دهند. مجموع فروش هر ماه به عنوان یک "متغیر تکاملی" در مجموعه داده در نظر گرفته می‌شود. این مدل به این صورت ساخته می‌شود که "متغیر تکاملی مورد نظر بر اساس مقادیر لگ شده (یعنی قبلی) خودش رگرس می‌شود." [ویکی‌پدیا](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) -- **I - برای یکپارچه‌سازی (Integrated)**. برخلاف مدل‌های مشابه ARMA، حرف 'I' در ARIMA به جنبه *[یکپارچه‌سازی](https://wikipedia.org/wiki/Order_of_integration)* اشاره دارد. داده‌ها زمانی یکپارچه می‌شوند که مراحل تفاضل‌گیری اعمال شوند تا غیرایستایی حذف شود. +- **I - برای یکپارچه‌شده**. برخلاف مدل‌های مشابه 'ARMA'، 'I' در ARIMA به جنبه *[یکپارچه‌شده](https://wikipedia.org/wiki/Order_of_integration)* آن اشاره دارد. داده‌ها زمانی "یکپارچه" می‌شوند که مراحل تفاضل‌گیری اعمال شوند تا غیر ایستایی حذف شود. -- **MA - برای میانگین متحرک (Moving Average)**. جنبه [میانگین متحرک](https://wikipedia.org/wiki/Moving-average_model) این مدل به متغیر خروجی اشاره دارد که با مشاهده مقادیر فعلی و گذشته وقفه‌ها تعیین می‌شود. +- **MA - برای میانگین متحرک**. جنبه [میانگین متحرک](https://wikipedia.org/wiki/Moving-average_model) این مدل به متغیر خروجی اشاره دارد که با مشاهده مقادیر فعلی و گذشته لگ‌ها تعیین می‌شود. -نتیجه نهایی: ARIMA برای ساخت مدلی استفاده می‌شود که تا حد ممکن با شکل خاص داده‌های سری زمانی مطابقت داشته باشد. +نتیجه نهایی: ARIMA برای ساخت مدلی استفاده می‌شود که به شکل خاص داده‌های سری زمانی تا حد ممکن نزدیک باشد. -## تمرین - ساخت یک مدل ARIMA +## تمرین - ساخت مدل ARIMA پوشه [_/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` پایتون بارگذاری شود؛ شما به این کتابخانه برای مدل‌های ARIMA نیاز دارید. +1. نوت‌بوک را اجرا کنید تا کتابخانه پایتون `statsmodels` بارگذاری شود؛ شما برای مدل‌های ARIMA به این کتابخانه نیاز دارید. 1. کتابخانه‌های لازم را بارگذاری کنید. -1. حالا چند کتابخانه دیگر که برای ترسیم داده‌ها مفید هستند را بارگذاری کنید: +1. حالا چند کتابخانه دیگر که برای رسم داده‌ها مفید هستند را بارگذاری کنید: ```python import os @@ -79,7 +79,7 @@ CO_OP_TRANSLATOR_METADATA: energy.head(10) ``` -1. تمام داده‌های انرژی موجود از ژانویه 2012 تا دسامبر 2014 را ترسیم کنید. نباید شگفت‌زده شوید زیرا این داده‌ها را در درس قبلی دیدیم: +1. تمام داده‌های انرژی موجود از ژانویه 2012 تا دسامبر 2014 را رسم کنید. نباید شگفت‌زده شوید زیرا این داده‌ها را در درس قبلی دیده‌ایم: ```python energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) @@ -92,18 +92,18 @@ CO_OP_TRANSLATOR_METADATA: ### ایجاد مجموعه داده‌های آموزشی و آزمایشی -حالا که داده‌های شما بارگذاری شده‌اند، می‌توانید آن‌ها را به مجموعه‌های آموزشی و آزمایشی تقسیم کنید. شما مدل خود را روی مجموعه آموزشی آموزش خواهید داد. همان‌طور که معمول است، پس از اتمام آموزش مدل، دقت آن را با استفاده از مجموعه آزمایشی ارزیابی خواهید کرد. باید اطمینان حاصل کنید که مجموعه آزمایشی یک بازه زمانی بعدی را نسبت به مجموعه آموزشی پوشش می‌دهد تا مدل اطلاعاتی از دوره‌های زمانی آینده به دست نیاورد. +حالا که داده‌های شما بارگذاری شده‌اند، می‌توانید آن‌ها را به مجموعه‌های آموزشی و آزمایشی تقسیم کنید. شما مدل خود را بر روی مجموعه آموزشی آموزش خواهید داد. همان‌طور که معمول است، پس از پایان آموزش مدل، دقت آن را با استفاده از مجموعه آزمایشی ارزیابی خواهید کرد. باید اطمینان حاصل کنید که مجموعه آزمایشی دوره زمانی بعدی را نسبت به مجموعه آموزشی پوشش می‌دهد تا مدل اطلاعاتی از دوره‌های زمانی آینده کسب نکند. -1. یک بازه زمانی دو ماهه از 1 سپتامبر تا 31 اکتبر 2014 را به مجموعه آموزشی اختصاص دهید. مجموعه آزمایشی شامل بازه زمانی دو ماهه از 1 نوامبر تا 31 دسامبر 2014 خواهد بود: +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. تفاوت‌ها را تجسم کنید: +1. تفاوت‌ها را بصری‌سازی کنید: ```python energy[(energy.index < test_start_dt) & (energy.index >= train_start_dt)][['load']].rename(columns={'load':'train'}) \ @@ -114,7 +114,7 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![داده‌های آموزشی و آزمایشی](../../../../translated_images/train-test.8928d14e5b91fc942f0ca9201b2d36c890ea7e98f7619fd94f75de3a4c2bacb9.fa.png) + ![داده‌های آموزشی و آزمایشی](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) بنابراین، استفاده از یک بازه زمانی نسبتاً کوچک برای آموزش داده‌ها باید کافی باشد. @@ -122,9 +122,9 @@ CO_OP_TRANSLATOR_METADATA: ### آماده‌سازی داده‌ها برای آموزش -حالا باید داده‌ها را برای آموزش آماده کنید. این کار با فیلتر کردن و مقیاس‌بندی داده‌ها انجام می‌شود. داده‌های خود را فیلتر کنید تا فقط بازه‌های زمانی و ستون‌های مورد نیاز را شامل شود و مقیاس‌بندی کنید تا داده‌ها در بازه 0 و 1 قرار گیرند. +حالا باید داده‌ها را برای آموزش آماده کنید. این کار با فیلتر کردن و مقیاس‌بندی داده‌ها انجام می‌شود. داده‌های خود را فیلتر کنید تا فقط دوره‌های زمانی و ستون‌های مورد نیاز را شامل شود و مقیاس‌بندی کنید تا داده‌ها در بازه 0 و 1 قرار گیرند. -1. مجموعه داده اصلی را فیلتر کنید تا فقط بازه‌های زمانی ذکر شده در هر مجموعه و فقط ستون مورد نیاز 'load' به علاوه تاریخ را شامل شود: +1. مجموعه داده اصلی را فیلتر کنید تا فقط دوره‌های زمانی ذکر شده برای هر مجموعه و فقط ستون مورد نیاز 'load' به علاوه تاریخ را شامل شود: ```python train = energy.copy()[(energy.index >= train_start_dt) & (energy.index < test_start_dt)][['load']] @@ -134,14 +134,14 @@ CO_OP_TRANSLATOR_METADATA: print('Test data shape: ', test.shape) ``` - می‌توانید شکل داده‌ها را ببینید: + می‌توانید شکل داده‌ها را مشاهده کنید: ```output Training data shape: (1416, 1) Test data shape: (48, 1) ``` -1. داده‌ها را به بازه (0, 1) مقیاس‌بندی کنید. +1. داده‌ها را مقیاس‌بندی کنید تا در بازه (0، 1) قرار گیرند. ```python scaler = MinMaxScaler() @@ -149,7 +149,7 @@ CO_OP_TRANSLATOR_METADATA: train.head(10) ``` -1. داده‌های اصلی در مقابل داده‌های مقیاس‌بندی شده را تجسم کنید: +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) @@ -157,15 +157,15 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![اصلی](../../../../translated_images/original.b2b15efe0ce92b8745918f071dceec2231661bf49c8db6918e3ff4b3b0b183c2.fa.png) + ![اصلی](../../../../7-TimeSeries/2-ARIMA/images/original.png) > داده‌های اصلی - ![مقیاس‌بندی شده](../../../../translated_images/scaled.e35258ca5cd3d43f86d5175e584ba96b38d51501f234abf52e11f4fe2631e45f.fa.png) + ![مقیاس‌بندی شده](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) > داده‌های مقیاس‌بندی شده -1. حالا که داده‌های مقیاس‌بندی شده را کالیبره کرده‌اید، می‌توانید داده‌های آزمایشی را نیز مقیاس‌بندی کنید: +1. حالا که داده‌های مقیاس‌بندی شده را کالیبره کرده‌اید، می‌توانید داده‌های آزمایشی را مقیاس‌بندی کنید: ```python test['load'] = scaler.transform(test) @@ -174,21 +174,21 @@ CO_OP_TRANSLATOR_METADATA: ### پیاده‌سازی ARIMA -زمان پیاده‌سازی ARIMA فرا رسیده است! اکنون از کتابخانه `statsmodels` که قبلاً نصب کرده‌اید استفاده خواهید کرد. +وقت آن است که ARIMA را پیاده‌سازی کنید! حالا از کتابخانه `statsmodels` که قبلاً نصب کرده‌اید استفاده خواهید کرد. حالا باید چند مرحله را دنبال کنید: - 1. مدل را با فراخوانی `SARIMAX()` و وارد کردن پارامترهای مدل: پارامترهای p، d و q، و پارامترهای P، D و Q تعریف کنید. + 1. مدل را با فراخوانی `SARIMAX()` تعریف کنید و پارامترهای مدل: پارامترهای p، d، و q، و پارامترهای P، D، و Q را وارد کنید. 2. مدل را برای داده‌های آموزشی با فراخوانی تابع fit() آماده کنید. - 3. با فراخوانی تابع `forecast()` و مشخص کردن تعداد گام‌ها (افق پیش‌بینی)، پیش‌بینی کنید. + 3. پیش‌بینی‌ها را با فراخوانی تابع `forecast()` و مشخص کردن تعداد مراحل (افق پیش‌بینی) انجام دهید. -> 🎓 این پارامترها برای چیست؟ در یک مدل ARIMA سه پارامتر وجود دارد که برای کمک به مدل‌سازی جنبه‌های اصلی یک سری زمانی استفاده می‌شوند: فصلی بودن، روند و نویز. این پارامترها عبارتند از: +> 🎓 این پارامترها برای چه هستند؟ در یک مدل ARIMA سه پارامتر وجود دارد که برای کمک به مدل‌سازی جنبه‌های اصلی یک سری زمانی استفاده می‌شوند: فصلی بودن، روند، و نویز. این پارامترها عبارتند از: -`p`: پارامتری که با جنبه خودرگرسیو مدل مرتبط است و مقادیر *گذشته* را در بر می‌گیرد. -`d`: پارامتری که با بخش یکپارچه مدل مرتبط است و میزان *تفاضل‌گیری* (🎓 تفاضل‌گیری را به یاد دارید؟ 👆) را برای اعمال بر سری زمانی تعیین می‌کند. +`p`: پارامتری که با جنبه خودرگرسیو مدل مرتبط است و مقادیر *گذشته* را در بر می‌گیرد. +`d`: پارامتری که با بخش یکپارچه مدل مرتبط است و مقدار *تفاضل‌گیری* (🎓 تفاضل‌گیری را به یاد دارید 👆؟) را برای اعمال به یک سری زمانی تحت تأثیر قرار می‌دهد. `q`: پارامتری که با بخش میانگین متحرک مدل مرتبط است. -> توجه: اگر داده‌های شما جنبه فصلی داشته باشد - که این داده‌ها دارند - از یک مدل ARIMA فصلی (SARIMA) استفاده می‌کنیم. در این صورت باید از مجموعه دیگری از پارامترها استفاده کنید: `P`، `D` و `Q` که همان ارتباطات `p`، `d` و `q` را توصیف می‌کنند، اما به اجزای فصلی مدل مربوط می‌شوند. +> توجه: اگر داده‌های شما جنبه فصلی داشته باشد - که این داده‌ها دارند -، از یک مدل ARIMA فصلی (SARIMA) استفاده می‌کنیم. در این صورت باید مجموعه دیگری از پارامترها: `P`، `D`، و `Q` را استفاده کنید که همان ارتباطات `p`، `d`، و `q` را توصیف می‌کنند، اما به اجزای فصلی مدل مربوط می‌شوند. 1. ابتدا مقدار افق پیش‌بینی مورد نظر خود را تنظیم کنید. بیایید 3 ساعت را امتحان کنیم: @@ -200,7 +200,7 @@ CO_OP_TRANSLATOR_METADATA: انتخاب بهترین مقادیر برای پارامترهای مدل ARIMA می‌تواند چالش‌برانگیز باشد زیرا تا حدی ذهنی و زمان‌بر است. ممکن است بخواهید از تابع `auto_arima()` از کتابخانه [`pyramid`](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html) استفاده کنید. -1. فعلاً چند انتخاب دستی را امتحان کنید تا یک مدل خوب پیدا کنید. +1. فعلاً برخی انتخاب‌های دستی را امتحان کنید تا یک مدل خوب پیدا کنید. ```python order = (4, 1, 0) @@ -212,23 +212,23 @@ CO_OP_TRANSLATOR_METADATA: print(results.summary()) ``` - یک جدول از نتایج چاپ می‌شود. + یک جدول نتایج چاپ می‌شود. -شما اولین مدل خود را ساختید! حالا باید راهی برای ارزیابی آن پیدا کنیم. +شما اولین مدل خود را ساخته‌اید! حالا باید راهی برای ارزیابی آن پیدا کنیم. ### ارزیابی مدل شما -برای ارزیابی مدل خود، می‌توانید از اعتبارسنجی به روش `walk forward` استفاده کنید. در عمل، مدل‌های سری زمانی هر بار که داده جدیدی در دسترس قرار می‌گیرد، دوباره آموزش داده می‌شوند. این کار به مدل اجازه می‌دهد تا بهترین پیش‌بینی را در هر گام زمانی انجام دهد. +برای ارزیابی مدل خود، می‌توانید اعتبارسنجی به اصطلاح `قدم به قدم` را انجام دهید. در عمل، مدل‌های سری زمانی هر بار که داده جدیدی در دسترس قرار می‌گیرد، دوباره آموزش داده می‌شوند. این کار به مدل اجازه می‌دهد بهترین پیش‌بینی را در هر مرحله زمانی انجام دهد. -با شروع از ابتدای سری زمانی و استفاده از این تکنیک، مدل را روی مجموعه داده آموزشی آموزش دهید. سپس یک پیش‌بینی برای گام زمانی بعدی انجام دهید. پیش‌بینی با مقدار شناخته‌شده ارزیابی می‌شود. سپس مجموعه آموزشی گسترش می‌یابد تا مقدار شناخته‌شده را شامل شود و این فرآیند تکرار می‌شود. +با شروع از ابتدای سری زمانی با استفاده از این تکنیک، مدل را بر روی مجموعه داده آموزشی آموزش دهید. سپس یک پیش‌بینی برای مرحله زمانی بعدی انجام دهید. پیش‌بینی با مقدار شناخته‌شده ارزیابی می‌شود. مجموعه آموزشی سپس گسترش می‌یابد تا مقدار شناخته‌شده را شامل شود و این فرآیند تکرار می‌شود. -> توجه: برای آموزش کارآمدتر، باید پنجره مجموعه آموزشی را ثابت نگه دارید تا هر بار که یک مشاهده جدید به مجموعه آموزشی اضافه می‌کنید، مشاهده‌ای را از ابتدای مجموعه حذف کنید. +> توجه: باید پنجره مجموعه آموزشی را ثابت نگه دارید تا آموزش کارآمدتر باشد، به‌طوری‌که هر بار که یک مشاهده جدید به مجموعه آموزشی اضافه می‌کنید، مشاهده‌ای را از ابتدای مجموعه حذف کنید. -این فرآیند تخمین قوی‌تری از عملکرد مدل در عمل ارائه می‌دهد. با این حال، هزینه محاسباتی ایجاد مدل‌های متعدد را به همراه دارد. این موضوع در صورتی که داده‌ها کوچک باشند یا مدل ساده باشد قابل قبول است، اما در مقیاس می‌تواند مشکل‌ساز باشد. +این فرآیند تخمین قوی‌تری از عملکرد مدل در عمل ارائه می‌دهد. با این حال، هزینه محاسباتی ایجاد تعداد زیادی مدل را به همراه دارد. این موضوع در صورتی که داده‌ها کوچک باشند یا مدل ساده باشد قابل قبول است، اما در مقیاس ممکن است مشکل‌ساز شود. -اعتبارسنجی به روش walk-forward استاندارد طلایی ارزیابی مدل‌های سری زمانی است و برای پروژه‌های خودتان توصیه می‌شود. +اعتبارسنجی قدم به قدم استاندارد طلایی ارزیابی مدل‌های سری زمانی است و برای پروژه‌های خودتان توصیه می‌شود. -1. ابتدا یک نقطه داده آزمایشی برای هر گام HORIZON ایجاد کنید. +1. ابتدا یک نقطه داده آزمایشی برای هر مرحله افق پیش‌بینی ایجاد کنید. ```python test_shifted = test.copy() @@ -248,9 +248,9 @@ CO_OP_TRANSLATOR_METADATA: | 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. با استفاده از این رویکرد پنجره لغزان در یک حلقه به اندازه طول داده‌های آزمایشی، پیش‌بینی کنید: +1. با استفاده از این روش پنجره لغزنده، پیش‌بینی‌هایی را برای داده‌های آزمایشی خود در یک حلقه به اندازه طول داده‌های آزمایشی انجام دهید: ```python %%time @@ -280,7 +280,7 @@ CO_OP_TRANSLATOR_METADATA: print(t+1, ': predicted =', yhat, 'expected =', obs) ``` - می‌توانید فرآیند آموزش را مشاهده کنید: + می‌توانید آموزش را مشاهده کنید: ```output 2014-12-30 00:00:00 @@ -313,18 +313,17 @@ CO_OP_TRANSLATOR_METADATA: | 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) آن در تمام پیش‌بینی‌ها بررسی کنید. > **🧮 فرمول ریاضی را ببینید** > -> ![MAPE](../../../../translated_images/mape.fd87bbaf4d346846df6af88b26bf6f0926bf9a5027816d5e23e1200866e3e8a4.fa.png) +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) > -> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) برای نشان دادن دقت پیش‌بینی به عنوان یک نسبت تعریف شده توسط فرمول بالا استفاده می‌شود. تفاوت بین مقدار واقعی و پیش‌بینی‌شده بر مقدار واقعی تقسیم می‌شود. -> "مقدار مطلق در این محاسبه برای هر نقطه پیش‌بینی‌شده در زمان جمع شده و بر تعداد نقاط برازش‌شده n تقسیم می‌شود." [ویکی‌پدیا](https://wikipedia.org/wiki/Mean_absolute_percentage_error) -1. معادله را در کد بیان کنید: +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) برای نمایش دقت پیش‌بینی به عنوان یک نسبت که توسط فرمول بالا تعریف شده است، استفاده می‌شود. تفاوت بین مقدار واقعی و پیش‌بینی‌شده بر مقدار واقعی تقسیم می‌شود. "مقدار مطلق در این محاسبه برای هر نقطه پیش‌بینی‌شده در زمان جمع شده و بر تعداد نقاط برازش‌شده n تقسیم می‌شود." [ویکی‌پدیا](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. بیان معادله در کد: ```python if(HORIZON > 1): @@ -332,15 +331,15 @@ CO_OP_TRANSLATOR_METADATA: print(eval_df.groupby('h')['APE'].mean()) ``` -1. MAPE یک مرحله‌ای را محاسبه کنید: +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 % + MAPE پیش‌بینی یک مرحله‌ای: 0.5570581332313952 % -1. MAPE پیش‌بینی چند مرحله‌ای را چاپ کنید: +1. چاپ MAPE پیش‌بینی چند مرحله‌ای: ```python print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') @@ -350,9 +349,9 @@ CO_OP_TRANSLATOR_METADATA: Multi-step forecast MAPE: 1.1460048657704118 % ``` - یک عدد پایین و مناسب بهترین است: در نظر داشته باشید که پیش‌بینی با MAPE برابر با 10 به معنای خطای 10 درصدی است. + یک عدد پایین و خوب بهترین است: در نظر داشته باشید که پیش‌بینی با MAPE برابر با 10، به اندازه 10% خطا دارد. -1. اما همان‌طور که همیشه گفته می‌شود، دیدن این نوع اندازه‌گیری دقت به صورت بصری آسان‌تر است، پس بیایید آن را رسم کنیم: +1. اما همانطور که همیشه گفته می‌شود، دیدن این نوع اندازه‌گیری دقت به صورت بصری آسان‌تر است، پس بیایید آن را رسم کنیم: ```python if(HORIZON == 1): @@ -380,21 +379,21 @@ CO_OP_TRANSLATOR_METADATA: plt.show() ``` - ![یک مدل سری زمانی](../../../../translated_images/accuracy.2c47fe1bf15f44b3656651c84d5e2ba9b37cd929cd2aa8ab6cc3073f50570f4e.fa.png) + ![مدل سری زمانی](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) -🏆 یک نمودار بسیار زیبا که مدلی با دقت خوب را نشان می‌دهد. عالی کار کردید! +🏆 یک نمودار بسیار خوب که مدلی با دقت بالا را نشان می‌دهد. عالی کار کردید! --- ## 🚀چالش -روش‌های مختلف برای آزمودن دقت یک مدل سری زمانی را بررسی کنید. در این درس به MAPE اشاره شد، اما آیا روش‌های دیگری وجود دارد که بتوانید استفاده کنید؟ درباره آن‌ها تحقیق کنید و توضیح دهید. یک سند مفید را می‌توانید [اینجا](https://otexts.com/fpp2/accuracy.html) پیدا کنید. +روش‌های مختلف برای آزمایش دقت یک مدل سری زمانی را بررسی کنید. در این درس به MAPE اشاره کردیم، اما آیا روش‌های دیگری وجود دارد که بتوانید استفاده کنید؟ آن‌ها را تحقیق کنید و توضیح دهید. یک سند مفید را می‌توانید [اینجا](https://otexts.com/fpp2/accuracy.html) پیدا کنید. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/44/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -این درس تنها به اصول اولیه پیش‌بینی سری زمانی با ARIMA پرداخته است. زمانی را برای عمیق‌تر کردن دانش خود اختصاص دهید و به [این مخزن](https://microsoft.github.io/forecasting/) و انواع مدل‌های مختلف آن نگاهی بیندازید تا روش‌های دیگری برای ساخت مدل‌های سری زمانی یاد بگیرید. +این درس تنها به اصول اولیه پیش‌بینی سری زمانی با ARIMA پرداخته است. زمانی را صرف کنید تا دانش خود را با بررسی [این مخزن](https://microsoft.github.io/forecasting/) و انواع مدل‌های مختلف آن عمیق‌تر کنید و روش‌های دیگر برای ساخت مدل‌های سری زمانی را یاد بگیرید. ## تکلیف @@ -403,4 +402,4 @@ CO_OP_TRANSLATOR_METADATA: --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/7-TimeSeries/3-SVR/README.md b/translations/fa/7-TimeSeries/3-SVR/README.md index e07b37458..b9026b90b 100644 --- a/translations/fa/7-TimeSeries/3-SVR/README.md +++ b/translations/fa/7-TimeSeries/3-SVR/README.md @@ -1,8 +1,8 @@ # مقدمه‌ای بر یادگیری تقویتی و Q-Learning -![خلاصه‌ای از یادگیری تقویتی در یادگیری ماشین در یک اسکچ‌نوت](../../../../translated_images/ml-reinforcement.94024374d63348dbb3571c343ca7ddabef72adac0b8086d47164b769ba3a8a1d.fa.png) +![خلاصه‌ای از یادگیری تقویتی در یادگیری ماشین در یک اسکچ‌نوت](../../../../sketchnotes/ml-reinforcement.png) > اسکچ‌نوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac) -یادگیری تقویتی شامل سه مفهوم مهم است: عامل، حالت‌ها، و مجموعه‌ای از اقدامات برای هر حالت. با انجام یک اقدام در یک حالت مشخص، عامل یک پاداش دریافت می‌کند. دوباره بازی کامپیوتری سوپر ماریو را تصور کنید. شما ماریو هستید، در یک مرحله بازی، کنار لبه یک پرتگاه ایستاده‌اید. بالای شما یک سکه قرار دارد. شما که ماریو هستید، در یک مرحله بازی، در یک موقعیت خاص ... این حالت شماست. حرکت یک قدم به سمت راست (یک اقدام) شما را به پایین پرتگاه می‌برد و این به شما امتیاز عددی پایینی می‌دهد. اما فشار دادن دکمه پرش به شما اجازه می‌دهد امتیاز کسب کنید و زنده بمانید. این یک نتیجه مثبت است و باید به شما امتیاز عددی مثبت بدهد. +یادگیری تقویتی شامل سه مفهوم مهم است: عامل، حالت‌ها، و مجموعه‌ای از اقدامات برای هر حالت. با انجام یک اقدام در یک حالت مشخص، عامل یک پاداش دریافت می‌کند. دوباره بازی کامپیوتری سوپر ماریو را تصور کنید. شما ماریو هستید، در یک مرحله بازی، کنار لبه یک پرتگاه ایستاده‌اید. بالای شما یک سکه قرار دارد. شما که ماریو هستید، در یک مرحله بازی، در یک موقعیت خاص... این حالت شماست. حرکت یک قدم به سمت راست (یک اقدام) شما را به پایین پرتگاه می‌برد و این به شما امتیاز عددی پایینی می‌دهد. اما فشار دادن دکمه پرش به شما اجازه می‌دهد امتیاز کسب کنید و زنده بمانید. این یک نتیجه مثبت است و باید به شما امتیاز عددی مثبت بدهد. با استفاده از یادگیری تقویتی و یک شبیه‌ساز (بازی)، می‌توانید یاد بگیرید چگونه بازی کنید تا پاداش را به حداکثر برسانید، که شامل زنده ماندن و کسب بیشترین امتیاز ممکن است. @@ -20,27 +20,27 @@ CO_OP_TRANSLATOR_METADATA: > 🎥 روی تصویر بالا کلیک کنید تا صحبت‌های دیمیتری درباره یادگیری تقویتی را بشنوید -## [پیش‌آزمون درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/45/) +## [پیش‌آزمون درس](https://ff-quizzes.netlify.app/en/ml/) ## پیش‌نیازها و تنظیمات در این درس، ما با کدی در پایتون آزمایش خواهیم کرد. شما باید بتوانید کد Jupyter Notebook این درس را روی کامپیوتر خود یا در فضای ابری اجرا کنید. -می‌توانید [دفترچه درس](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) را باز کنید و این درس را مرور کنید تا آن را بسازید. +می‌توانید [دفترچه درس](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) را باز کنید و این درس را دنبال کنید تا آن را بسازید. -> **توجه:** اگر این کد را از فضای ابری باز می‌کنید، همچنین باید فایل [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) را دریافت کنید، که در کد دفترچه استفاده می‌شود. آن را به همان دایرکتوری که دفترچه در آن قرار دارد اضافه کنید. +> **توجه:** اگر این کد را از فضای ابری باز می‌کنید، باید فایل [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) را نیز دریافت کنید، که در کد دفترچه استفاده می‌شود. آن را در همان دایرکتوری دفترچه قرار دهید. ## مقدمه در این درس، ما دنیای **[پیتر و گرگ](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** را بررسی خواهیم کرد، که از یک داستان موسیقیایی افسانه‌ای توسط آهنگساز روسی، [سرگئی پروکفیف](https://en.wikipedia.org/wiki/Sergei_Prokofiev) الهام گرفته شده است. ما از **یادگیری تقویتی** استفاده خواهیم کرد تا به پیتر اجازه دهیم محیط خود را کشف کند، سیب‌های خوشمزه جمع‌آوری کند و از ملاقات با گرگ اجتناب کند. -**یادگیری تقویتی** (RL) یک تکنیک یادگیری است که به ما اجازه می‌دهد رفتار بهینه یک **عامل** را در یک **محیط** با اجرای آزمایش‌های متعدد یاد بگیریم. یک عامل در این محیط باید یک **هدف** داشته باشد، که توسط یک **تابع پاداش** تعریف می‌شود. +**یادگیری تقویتی** (RL) یک تکنیک یادگیری است که به ما اجازه می‌دهد رفتار بهینه یک **عامل** را در یک **محیط** با اجرای آزمایش‌های متعدد یاد بگیریم. یک عامل در این محیط باید یک **هدف** داشته باشد که توسط یک **تابع پاداش** تعریف شده است. ## محیط -برای سادگی، بیایید دنیای پیتر را به یک تخته مربعی با اندازه `عرض` x `ارتفاع` در نظر بگیریم، مانند این: +برای سادگی، دنیای پیتر را به صورت یک تخته مربعی با اندازه `عرض` x `ارتفاع` در نظر بگیریم، مانند این: -![محیط پیتر](../../../../translated_images/environment.40ba3cb66256c93fa7e92f6f7214e1d1f588aafa97d266c11d108c5c5d101b6c.fa.png) +![محیط پیتر](../../../../8-Reinforcement/1-QLearning/images/environment.png) هر سلول در این تخته می‌تواند یکی از موارد زیر باشد: @@ -65,7 +65,7 @@ m.plot() ## اقدامات و سیاست -در مثال ما، هدف پیتر این است که بتواند یک سیب پیدا کند، در حالی که از گرگ و موانع دیگر اجتناب می‌کند. برای انجام این کار، او اساساً می‌تواند در اطراف قدم بزند تا یک سیب پیدا کند. +در مثال ما، هدف پیتر این است که بتواند یک سیب پیدا کند، در حالی که از گرگ و موانع دیگر اجتناب می‌کند. برای این کار، او اساساً می‌تواند در اطراف قدم بزند تا یک سیب پیدا کند. بنابراین، در هر موقعیت، او می‌تواند یکی از اقدامات زیر را انتخاب کند: بالا، پایین، چپ و راست. @@ -76,7 +76,7 @@ actions = { "U" : (0,-1), "D" : (0,1), "L" : (-1,0), "R" : (1,0) } action_idx = { a : i for i,a in enumerate(actions.keys()) } ``` -به طور خلاصه، استراتژی و هدف این سناریو به شرح زیر است: +برای خلاصه کردن، استراتژی و هدف این سناریو به شرح زیر است: - **استراتژی** عامل ما (پیتر) توسط چیزی به نام **سیاست** تعریف می‌شود. سیاست یک تابع است که اقدام را در هر حالت مشخص بازمی‌گرداند. در مورد ما، حالت مسئله توسط تخته، شامل موقعیت فعلی بازیکن، نشان داده می‌شود. @@ -117,7 +117,7 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) } فراخوانی `walk` باید طول مسیر مربوطه را بازگرداند، که می‌تواند از یک اجرا به اجرای دیگر متفاوت باشد. -1. آزمایش قدم زدن را چندین بار اجرا کنید (مثلاً 100 بار)، و آمار حاصل را چاپ کنید (بلوک کد 4): +1. آزمایش قدم زدن را چندین بار اجرا کنید (مثلاً 100 بار) و آمار حاصل را چاپ کنید (بلوک کد 4): ```python def print_statistics(policy): @@ -142,7 +142,7 @@ action_idx = { a : i for i,a in enumerate(actions.keys()) } ## تابع پاداش -برای هوشمندتر کردن سیاست خود، باید بفهمیم کدام حرکت‌ها "بهتر" از دیگران هستند. برای انجام این کار، باید هدف خود را تعریف کنیم. +برای هوشمندتر کردن سیاست خود، باید بفهمیم کدام حرکت‌ها "بهتر" از دیگران هستند. برای این کار، باید هدف خود را تعریف کنیم. هدف می‌تواند به صورت یک **تابع پاداش** تعریف شود، که برای هر حالت یک مقدار امتیاز بازمی‌گرداند. هرچه عدد بالاتر باشد، تابع پاداش بهتر است. (بلوک کد 5) @@ -163,7 +163,7 @@ def reward(m,pos=None): return move_reward ``` -یک نکته جالب درباره توابع پاداش این است که در بیشتر موارد، *ما فقط در پایان بازی یک پاداش قابل توجه دریافت می‌کنیم*. این بدان معناست که الگوریتم ما باید به نوعی "قدم‌های خوب" را که منجر به یک پاداش مثبت در پایان می‌شوند به خاطر بسپارد و اهمیت آنها را افزایش دهد. به همین ترتیب، تمام حرکت‌هایی که منجر به نتایج بد می‌شوند باید دلسرد شوند. +یک نکته جالب درباره توابع پاداش این است که در بیشتر موارد، *ما فقط در پایان بازی یک پاداش قابل توجه دریافت می‌کنیم*. این بدان معناست که الگوریتم ما باید به نوعی "قدم‌های خوب" را که منجر به یک پاداش مثبت در پایان می‌شوند به خاطر بسپارد و اهمیت آنها را افزایش دهد. به همین ترتیب، همه حرکت‌هایی که منجر به نتایج بد می‌شوند باید دلسرد شوند. ## Q-Learning @@ -175,27 +175,27 @@ def reward(m,pos=None): Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) ``` -توجه داشته باشید که ما تمام مقادیر جدول Q را با یک مقدار برابر مقداردهی اولیه می‌کنیم، در مورد ما - 0.25. این مربوط به سیاست "قدم زدن تصادفی" است، زیرا تمام حرکت‌ها در هر حالت به طور مساوی خوب هستند. ما می‌توانیم جدول Q را به تابع `plot` منتقل کنیم تا جدول را روی تخته تجسم کنیم: `m.plot(Q)`. +توجه داشته باشید که ما تمام مقادیر جدول Q را با یک مقدار برابر مقداردهی اولیه می‌کنیم، در مورد ما - 0.25. این مربوط به سیاست "قدم زدن تصادفی" است، زیرا همه حرکت‌ها در هر حالت به طور مساوی خوب هستند. ما می‌توانیم جدول Q را به تابع `plot` منتقل کنیم تا جدول را روی تخته تجسم کنیم: `m.plot(Q)`. -![محیط پیتر](../../../../translated_images/env_init.04e8f26d2d60089e128f21d22e5fef57d580e559f0d5937b06c689e5e7cdd438.fa.png) +![محیط پیتر](../../../../8-Reinforcement/1-QLearning/images/env_init.png) در مرکز هر سلول یک "فلش" وجود دارد که جهت ترجیحی حرکت را نشان می‌دهد. از آنجا که همه جهت‌ها برابر هستند، یک نقطه نمایش داده می‌شود. -اکنون باید شبیه‌سازی را اجرا کنیم، محیط خود را کشف کنیم، و توزیع بهتری از مقادیر جدول Q را یاد بگیریم، که به ما اجازه می‌دهد مسیر رسیدن به سیب را بسیار سریع‌تر پیدا کنیم. +اکنون باید شبیه‌سازی را اجرا کنیم، محیط خود را کشف کنیم، و یک توزیع بهتر از مقادیر جدول Q یاد بگیریم، که به ما اجازه می‌دهد مسیر رسیدن به سیب را بسیار سریع‌تر پیدا کنیم. ## جوهره Q-Learning: معادله بلمن -هنگامی که شروع به حرکت می‌کنیم، هر اقدام یک پاداش مربوطه خواهد داشت، یعنی ما می‌توانیم به طور نظری اقدام بعدی را بر اساس بالاترین پاداش فوری انتخاب کنیم. با این حال، در بیشتر حالت‌ها، حرکت به هدف ما برای رسیدن به سیب نمی‌رسد، و بنابراین نمی‌توانیم فوراً تصمیم بگیریم کدام جهت بهتر است. +هنگامی که شروع به حرکت می‌کنیم، هر اقدام یک پاداش مربوطه خواهد داشت، یعنی ما از نظر تئوری می‌توانیم اقدام بعدی را بر اساس بالاترین پاداش فوری انتخاب کنیم. با این حال، در بیشتر حالت‌ها، حرکت به هدف ما برای رسیدن به سیب نمی‌رسد، و بنابراین نمی‌توانیم بلافاصله تصمیم بگیریم کدام جهت بهتر است. > به یاد داشته باشید که نتیجه فوری مهم نیست، بلکه نتیجه نهایی که در پایان شبیه‌سازی به دست خواهیم آورد اهمیت دارد. برای در نظر گرفتن این پاداش تأخیری، باید از اصول **[برنامه‌ریزی پویا](https://en.wikipedia.org/wiki/Dynamic_programming)** استفاده کنیم، که به ما اجازه می‌دهد به صورت بازگشتی درباره مسئله خود فکر کنیم. -فرض کنید اکنون در حالت *s* هستیم، و می‌خواهیم به حالت بعدی *s'* حرکت کنیم. با انجام این کار، پاداش فوری *r(s,a)* را دریافت خواهیم کرد، که توسط تابع پاداش تعریف شده است، به علاوه مقداری پاداش آینده. اگر فرض کنیم که جدول Q ما به درستی "جذابیت" هر اقدام را منعکس می‌کند، در حالت *s'* اقدام *a* را انتخاب خواهیم کرد که به مقدار حداکثر *Q(s',a')* مربوط می‌شود. بنابراین، بهترین پاداش آینده ممکن که می‌توانیم در حالت *s* دریافت کنیم به صورت `max` +فرض کنید اکنون در حالت *s* هستیم و می‌خواهیم به حالت بعدی *s'* حرکت کنیم. با انجام این کار، پاداش فوری *r(s,a)* را دریافت خواهیم کرد، که توسط تابع پاداش تعریف شده است، به علاوه مقداری پاداش آینده. اگر فرض کنیم که جدول Q ما به درستی "جذابیت" هر اقدام را منعکس می‌کند، در حالت *s'* ما اقدامی *a* را انتخاب خواهیم کرد که به مقدار حداکثر *Q(s',a')* مربوط باشد. بنابراین، بهترین پاداش آینده ممکن که می‌توانیم در حالت *s* دریافت کنیم به صورت `max` ## بررسی سیاست -از آنجا که جدول Q "جذابیت" هر عمل را در هر حالت فهرست می‌کند، استفاده از آن برای تعریف ناوبری کارآمد در دنیای ما بسیار آسان است. در ساده‌ترین حالت، می‌توانیم عملی را انتخاب کنیم که با بالاترین مقدار جدول Q مطابقت دارد: (کد بلاک 9) +از آنجا که جدول Q "جذابیت" هر اقدام را در هر حالت فهرست می‌کند، استفاده از آن برای تعریف ناوبری کارآمد در دنیای ما بسیار آسان است. در ساده‌ترین حالت، می‌توانیم اقدامی را انتخاب کنیم که با بالاترین مقدار جدول Q مطابقت دارد: (کد بلاک 9) ```python def qpolicy_strict(m): @@ -207,17 +207,17 @@ def qpolicy_strict(m): walk(m,qpolicy_strict) ``` -> اگر کد بالا را چندین بار امتحان کنید، ممکن است متوجه شوید که گاهی اوقات "گیر می‌کند" و باید دکمه STOP را در نوت‌بوک فشار دهید تا آن را متوقف کنید. این اتفاق به این دلیل رخ می‌دهد که ممکن است شرایطی وجود داشته باشد که دو حالت از نظر مقدار Q بهینه به یکدیگر "اشاره" کنند، که در این صورت عامل بین این حالت‌ها به طور نامحدود حرکت می‌کند. +> اگر کد بالا را چندین بار امتحان کنید، ممکن است متوجه شوید که گاهی اوقات "گیر" می‌کند و باید دکمه STOP را در نوت‌بوک فشار دهید تا آن را متوقف کنید. این اتفاق به این دلیل رخ می‌دهد که ممکن است شرایطی وجود داشته باشد که دو حالت از نظر مقدار Q-Value بهینه به یکدیگر "اشاره" کنند، که در این صورت عامل بین این حالت‌ها به طور نامحدود حرکت می‌کند. ## 🚀چالش > **وظیفه 1:** تابع `walk` را تغییر دهید تا طول مسیر را به تعداد مشخصی از مراحل (مثلاً 100) محدود کند و مشاهده کنید که کد بالا گاهی اوقات این مقدار را برمی‌گرداند. -> **وظیفه 2:** تابع `walk` را تغییر دهید تا به مکان‌هایی که قبلاً در آن‌ها بوده است بازنگردد. این کار از حلقه زدن `walk` جلوگیری می‌کند، اما عامل همچنان ممکن است در مکانی "گیر" کند که نتواند از آن فرار کند. +> **وظیفه 2:** تابع `walk` را تغییر دهید تا به مکان‌هایی که قبلاً در آن‌ها بوده است بازنگردد. این کار از حلقه زدن `walk` جلوگیری می‌کند، اما عامل همچنان ممکن است در مکانی "گیر" کند که قادر به فرار از آن نیست. ## ناوبری -سیاست ناوبری بهتر، همان سیاستی است که در طول آموزش استفاده کردیم، که ترکیبی از بهره‌برداری و اکتشاف است. در این سیاست، هر عمل را با احتمال مشخصی انتخاب می‌کنیم که متناسب با مقادیر موجود در جدول Q باشد. این استراتژی ممکن است همچنان باعث شود عامل به موقعیتی که قبلاً بررسی کرده بازگردد، اما همان‌طور که از کد زیر می‌بینید، منجر به مسیر متوسط بسیار کوتاه‌تری به مکان مورد نظر می‌شود (به یاد داشته باشید که `print_statistics` شبیه‌سازی را 100 بار اجرا می‌کند): (کد بلاک 10) +سیاست ناوبری بهتر، همان سیاستی است که در طول آموزش استفاده کردیم، که ترکیبی از بهره‌برداری و اکتشاف است. در این سیاست، هر اقدام را با احتمال مشخصی انتخاب می‌کنیم که متناسب با مقادیر موجود در جدول Q است. این استراتژی ممکن است همچنان باعث شود عامل به موقعیتی که قبلاً بررسی کرده بازگردد، اما همان‌طور که از کد زیر می‌بینید، منجر به مسیر متوسط بسیار کوتاه‌تری به مکان مورد نظر می‌شود (به یاد داشته باشید که `print_statistics` شبیه‌سازی را 100 بار اجرا می‌کند): (کد بلاک 10) ```python def qpolicy(m): @@ -237,15 +237,15 @@ print_statistics(qpolicy) ## خلاصه یادگیری‌ها: -- **افزایش طول مسیر متوسط**. آنچه در اینجا مشاهده می‌کنیم این است که در ابتدا طول مسیر متوسط افزایش می‌یابد. این احتمالاً به این دلیل است که وقتی هیچ اطلاعاتی درباره محیط نداریم، احتمالاً در حالت‌های بد، آب یا گرگ گیر می‌کنیم. با یادگیری بیشتر و استفاده از این دانش، می‌توانیم محیط را بیشتر بررسی کنیم، اما هنوز نمی‌دانیم سیب‌ها کجا هستند. +- **طول مسیر متوسط افزایش می‌یابد**. آنچه در اینجا مشاهده می‌کنیم این است که در ابتدا طول مسیر متوسط افزایش می‌یابد. این احتمالاً به این دلیل است که وقتی هیچ اطلاعاتی درباره محیط نداریم، احتمالاً در حالت‌های بد، آب یا گرگ گیر می‌کنیم. با یادگیری بیشتر و استفاده از این دانش، می‌توانیم محیط را بیشتر بررسی کنیم، اما هنوز نمی‌دانیم سیب‌ها دقیقاً کجا هستند. -- **کاهش طول مسیر با یادگیری بیشتر**. وقتی به اندازه کافی یاد می‌گیریم، رسیدن به هدف برای عامل آسان‌تر می‌شود و طول مسیر شروع به کاهش می‌کند. با این حال، همچنان به اکتشاف باز هستیم، بنابراین اغلب از مسیر بهینه منحرف می‌شویم و گزینه‌های جدیدی را بررسی می‌کنیم که باعث طولانی‌تر شدن مسیر از حد مطلوب می‌شود. +- **طول مسیر کاهش می‌یابد، با یادگیری بیشتر**. وقتی به اندازه کافی یاد می‌گیریم، رسیدن به هدف برای عامل آسان‌تر می‌شود و طول مسیر شروع به کاهش می‌کند. با این حال، همچنان به اکتشاف باز هستیم، بنابراین اغلب از مسیر بهینه منحرف می‌شویم و گزینه‌های جدیدی را بررسی می‌کنیم که باعث طولانی‌تر شدن مسیر از حد مطلوب می‌شود. -- **افزایش ناگهانی طول مسیر**. آنچه در این نمودار نیز مشاهده می‌کنیم این است که در برخی مواقع طول مسیر به طور ناگهانی افزایش یافته است. این نشان‌دهنده ماهیت تصادفی فرآیند است و اینکه ممکن است در برخی مواقع ضرایب جدول Q را با مقادیر جدید خراب کنیم. این باید به طور ایده‌آل با کاهش نرخ یادگیری به حداقل برسد (برای مثال، در پایان آموزش، فقط مقادیر جدول Q را با مقدار کمی تنظیم کنیم). +- **طول مسیر به طور ناگهانی افزایش می‌یابد**. آنچه در این نمودار نیز مشاهده می‌کنیم این است که در برخی مواقع طول مسیر به طور ناگهانی افزایش می‌یابد. این نشان‌دهنده ماهیت تصادفی فرآیند است و اینکه ممکن است در برخی مواقع ضرایب جدول Q را با مقادیر جدید خراب کنیم. این موضوع باید به طور ایده‌آل با کاهش نرخ یادگیری به حداقل برسد (برای مثال، در پایان آموزش، فقط مقادیر جدول Q را با مقدار کمی تنظیم کنیم). -به طور کلی، مهم است که به یاد داشته باشیم موفقیت و کیفیت فرآیند یادگیری به طور قابل توجهی به پارامترهایی مانند نرخ یادگیری، کاهش نرخ یادگیری و عامل تخفیف بستگی دارد. این‌ها اغلب **ابرپارامترها** نامیده می‌شوند تا از **پارامترها** که در طول آموزش بهینه‌سازی می‌شوند (برای مثال، ضرایب جدول Q) متمایز شوند. فرآیند یافتن بهترین مقادیر ابرپارامترها **بهینه‌سازی ابرپارامترها** نامیده می‌شود و شایسته یک موضوع جداگانه است. +به طور کلی، مهم است که به یاد داشته باشیم موفقیت و کیفیت فرآیند یادگیری به طور قابل توجهی به پارامترهایی مانند نرخ یادگیری، کاهش نرخ یادگیری و عامل تخفیف بستگی دارد. این پارامترها اغلب **ابرپارامتر** نامیده می‌شوند تا از **پارامترها** که در طول آموزش بهینه‌سازی می‌شوند (برای مثال، ضرایب جدول Q) متمایز شوند. فرآیند یافتن بهترین مقادیر ابرپارامترها **بهینه‌سازی ابرپارامتر** نامیده می‌شود و شایسته یک موضوع جداگانه است. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/46/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## تکلیف [دنیای واقعی‌تر](assignment.md) @@ -253,4 +253,4 @@ print_statistics(qpolicy) --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/8-Reinforcement/2-Gym/README.md b/translations/fa/8-Reinforcement/2-Gym/README.md index 271d271ff..9d6f7fdbd 100644 --- a/translations/fa/8-Reinforcement/2-Gym/README.md +++ b/translations/fa/8-Reinforcement/2-Gym/README.md @@ -1,41 +1,23 @@ -# اسکیت با CartPole - -مسئله‌ای که در درس قبلی حل کردیم ممکن است شبیه به یک مسئله ساده و غیرکاربردی به نظر برسد. اما اینطور نیست، زیرا بسیاری از مسائل دنیای واقعی نیز چنین سناریویی دارند - از جمله بازی شطرنج یا Go. این مسائل مشابه هستند، زیرا ما نیز یک صفحه با قوانین مشخص و یک **وضعیت گسسته** داریم. - -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/47/) - -## مقدمه - -در این درس، ما همان اصول یادگیری Q را به مسئله‌ای با **وضعیت پیوسته** اعمال خواهیم کرد، یعنی وضعیتی که با یک یا چند عدد حقیقی مشخص می‌شود. ما با مسئله زیر سروکار خواهیم داشت: - -> **مسئله**: اگر پیتر بخواهد از دست گرگ فرار کند، باید بتواند سریع‌تر حرکت کند. ما خواهیم دید که چگونه پیتر می‌تواند اسکیت کردن را یاد بگیرد، به خصوص حفظ تعادل، با استفاده از یادگیری Q. - -![فرار بزرگ!](../../../../translated_images/escape.18862db9930337e3fce23a9b6a76a06445f229dadea2268e12a6f0a1fde12115.fa.png) - -> پیتر و دوستانش خلاقیت به خرج می‌دهند تا از دست گرگ فرار کنند! تصویر از [جن لوپر](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** برای شبیه‌سازی محیط‌های مختلف استفاده خواهیم کرد. شما می‌توانید کد این درس را به صورت محلی اجرا کنید (مثلاً از طریق 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/) نگهداری می‌شود. با استفاده از این Gym می‌توانیم **محیط‌های مختلفی** از شبیه‌سازی CartPole تا بازی‌های آتاری ایجاد کنیم. +در درس قبلی، قوانین بازی و وضعیت توسط کلاس `Board` که خودمان تعریف کرده بودیم مشخص می‌شد. در اینجا از یک **محیط شبیه‌سازی خاص** استفاده خواهیم کرد که فیزیک پشت میله تعادل را شبیه‌سازی می‌کند. یکی از محبوب‌ترین محیط‌های شبیه‌سازی برای آموزش الگوریتم‌های یادگیری تقویتی، [Gym](https://gym.openai.com/) است که توسط [OpenAI](https://openai.com/) نگهداری می‌شود. با استفاده از این Gym می‌توانیم محیط‌های مختلفی از شبیه‌سازی CartPole تا بازی‌های Atari ایجاد کنیم. > **توجه**: می‌توانید سایر محیط‌های موجود در OpenAI Gym را [اینجا](https://gym.openai.com/envs/#classic_control) مشاهده کنید. -ابتدا، Gym را نصب کرده و کتابخانه‌های مورد نیاز را وارد می‌کنیم (کد بلاک 1): +ابتدا Gym را نصب کرده و کتابخانه‌های مورد نیاز را وارد کنید (کد بلاک 1): ```python import sys @@ -49,9 +31,9 @@ import random ## تمرین - مقداردهی اولیه به محیط CartPole -برای کار با مسئله تعادل CartPole، باید محیط مربوطه را مقداردهی اولیه کنیم. هر محیط با موارد زیر مرتبط است: +برای کار با مسئله تعادل CartPole، باید محیط مربوطه را مقداردهی اولیه کنیم. هر محیط دارای موارد زیر است: -- **فضای مشاهده** که ساختار اطلاعاتی را که از محیط دریافت می‌کنیم تعریف می‌کند. برای مسئله CartPole، ما موقعیت میله، سرعت و برخی مقادیر دیگر را دریافت می‌کنیم. +- **فضای مشاهده** که ساختار اطلاعاتی را که از محیط دریافت می‌کنیم تعریف می‌کند. برای مسئله CartPole، موقعیت میله، سرعت و برخی مقادیر دیگر را دریافت می‌کنیم. - **فضای عمل** که اقدامات ممکن را تعریف می‌کند. در مورد ما، فضای عمل گسسته است و شامل دو عمل - **چپ** و **راست** می‌شود. (کد بلاک 2) @@ -64,11 +46,11 @@ import random print(env.action_space.sample()) ``` -برای مشاهده نحوه کار محیط، بیایید یک شبیه‌سازی کوتاه برای 100 مرحله اجرا کنیم. در هر مرحله، یکی از اقدامات را برای انجام دادن ارائه می‌دهیم - در این شبیه‌سازی، ما فقط به صورت تصادفی یک اقدام از `action_space` انتخاب می‌کنیم. +برای مشاهده نحوه عملکرد محیط، یک شبیه‌سازی کوتاه برای 100 مرحله اجرا کنید. در هر مرحله، یکی از اقدامات را ارائه می‌دهیم - در این شبیه‌سازی، به صورت تصادفی یک اقدام از `action_space` انتخاب می‌شود. -1. کد زیر را اجرا کنید و ببینید چه نتیجه‌ای می‌دهد. +1. کد زیر را اجرا کنید و ببینید چه نتیجه‌ای حاصل می‌شود. - ✅ به یاد داشته باشید که ترجیحاً این کد را روی نصب محلی پایتون اجرا کنید! (کد بلاک 3) + ✅ به یاد داشته باشید که ترجیحاً این کد را روی نصب محلی Python اجرا کنید! (کد بلاک 3) ```python env.reset() @@ -79,11 +61,11 @@ import random env.close() ``` - شما باید چیزی مشابه این تصویر ببینید: + باید چیزی مشابه این تصویر مشاهده کنید: ![CartPole بدون تعادل](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) -1. در طول شبیه‌سازی، ما نیاز داریم که مشاهداتی دریافت کنیم تا تصمیم بگیریم چگونه عمل کنیم. در واقع، تابع `step` مشاهدات فعلی، یک تابع پاداش و یک پرچم `done` را برمی‌گرداند که نشان می‌دهد آیا ادامه شبیه‌سازی منطقی است یا خیر: (کد بلاک 4) +1. در طول شبیه‌سازی، باید مشاهداتی دریافت کنیم تا تصمیم بگیریم چگونه عمل کنیم. در واقع، تابع step مشاهدات فعلی، یک تابع پاداش و یک پرچم done را که نشان می‌دهد آیا ادامه شبیه‌سازی منطقی است یا خیر، بازمی‌گرداند: (کد بلاک 4) ```python env.reset() @@ -96,7 +78,7 @@ import random env.close() ``` - شما باید چیزی شبیه به این را در خروجی نوت‌بوک ببینید: + در خروجی نوت‌بوک باید چیزی شبیه به این مشاهده کنید: ```text [ 0.03403272 -0.24301182 0.02669811 0.2895829 ] -> 1.0 @@ -122,30 +104,30 @@ import random print(env.observation_space.high) ``` - همچنین ممکن است متوجه شوید که مقدار پاداش در هر مرحله شبیه‌سازی همیشه 1 است. این به این دلیل است که هدف ما زنده ماندن برای مدت زمان طولانی‌تر است، یعنی نگه داشتن میله در موقعیت عمودی معقول برای طولانی‌ترین مدت ممکن. + همچنین ممکن است متوجه شوید که مقدار پاداش در هر مرحله شبیه‌سازی همیشه 1 است. این به این دلیل است که هدف ما زنده ماندن تا حد ممکن است، یعنی نگه داشتن میله در موقعیت عمودی معقول برای طولانی‌ترین مدت زمان ممکن. - ✅ در واقع، شبیه‌سازی CartPole حل‌شده در نظر گرفته می‌شود اگر بتوانیم میانگین پاداش 195 را در 100 آزمایش متوالی به دست آوریم. + ✅ در واقع، شبیه‌سازی CartPole زمانی حل شده در نظر گرفته می‌شود که بتوانیم میانگین پاداش 195 را در 100 آزمایش متوالی کسب کنیم. ## گسسته‌سازی وضعیت -در یادگیری Q، ما نیاز داریم که یک جدول Q بسازیم که مشخص کند در هر وضعیت چه کاری انجام دهیم. برای انجام این کار، وضعیت باید **گسسته** باشد، به عبارت دقیق‌تر، باید شامل تعداد محدودی از مقادیر گسسته باشد. بنابراین، ما باید به نوعی مشاهدات خود را **گسسته‌سازی** کنیم و آنها را به مجموعه‌ای محدود از وضعیت‌ها نگاشت کنیم. +در Q-Learning، باید یک Q-Table بسازیم که مشخص کند در هر وضعیت چه کاری انجام دهیم. برای انجام این کار، وضعیت باید **گسسته** باشد، به طور دقیق‌تر، باید شامل تعداد محدودی از مقادیر گسسته باشد. بنابراین، باید به نوعی مشاهدات خود را **گسسته‌سازی** کنیم و آنها را به مجموعه‌ای محدود از وضعیت‌ها نگاشت کنیم. -روش‌های مختلفی برای انجام این کار وجود دارد: +چند روش برای انجام این کار وجود دارد: -- **تقسیم به بازه‌ها**. اگر بازه یک مقدار خاص را بدانیم، می‌توانیم این بازه را به تعدادی **بازه کوچک‌تر** تقسیم کنیم و سپس مقدار را با شماره بازه‌ای که به آن تعلق دارد جایگزین کنیم. این کار را می‌توان با استفاده از متد [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) در numpy انجام داد. در این حالت، ما دقیقاً اندازه وضعیت را می‌دانیم، زیرا به تعداد بازه‌هایی که برای گسسته‌سازی انتخاب می‌کنیم بستگی دارد. +- **تقسیم به بازه‌ها**. اگر بازه یک مقدار خاص را بدانیم، می‌توانیم این بازه را به تعدادی **بازه** تقسیم کنیم و سپس مقدار را با شماره بازه‌ای که به آن تعلق دارد جایگزین کنیم. این کار را می‌توان با استفاده از روش [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html) در numpy انجام داد. در این حالت، اندازه وضعیت را دقیقاً می‌دانیم، زیرا به تعداد بازه‌هایی که برای دیجیتالی‌سازی انتخاب می‌کنیم بستگی دارد. -✅ ما می‌توانیم از درون‌یابی خطی برای آوردن مقادیر به یک بازه محدود (مثلاً از -20 تا 20) استفاده کنیم و سپس اعداد را با گرد کردن به اعداد صحیح تبدیل کنیم. این روش کنترل کمتری بر اندازه وضعیت به ما می‌دهد، به خصوص اگر بازه‌های دقیق مقادیر ورودی را ندانیم. برای مثال، در مورد ما، 2 مورد از 4 مقدار ورودی هیچ حد بالا/پایینی ندارند که ممکن است منجر به تعداد نامحدودی از وضعیت‌ها شود. +✅ می‌توانیم از درون‌یابی خطی برای آوردن مقادیر به یک بازه محدود (مثلاً از -20 تا 20) استفاده کنیم و سپس اعداد را با گرد کردن به اعداد صحیح تبدیل کنیم. این روش کنترل کمتری بر اندازه وضعیت به ما می‌دهد، به خصوص اگر بازه‌های دقیق مقادیر ورودی را ندانیم. به عنوان مثال، در مورد ما 2 مورد از 4 مقدار هیچ حد بالا/پایینی ندارند، که ممکن است منجر به تعداد بی‌نهایت وضعیت شود. -در مثال ما، از روش دوم استفاده خواهیم کرد. همانطور که بعداً متوجه خواهید شد، با وجود عدم تعریف حد بالا/پایین، این مقادیر به ندرت مقادیر خارج از بازه‌های محدود خاصی می‌گیرند، بنابراین آن وضعیت‌هایی با مقادیر افراطی بسیار نادر خواهند بود. +در مثال ما، از روش دوم استفاده خواهیم کرد. همانطور که بعداً متوجه خواهید شد، با وجود عدم تعریف حد بالا/پایین، این مقادیر به ندرت مقادیر خارج از بازه‌های محدود خاصی می‌گیرند، بنابراین وضعیت‌هایی با مقادیر شدید بسیار نادر خواهند بود. -1. در اینجا تابعی است که مشاهدات مدل ما را می‌گیرد و یک تاپل از 4 مقدار صحیح تولید می‌کند: (کد بلاک 6) +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) +1. بیایید روش دیگری برای گسسته‌سازی با استفاده از بازه‌ها بررسی کنیم: (کد بلاک 7) ```python def create_bins(i,num): @@ -161,9 +143,9 @@ import random return tuple(np.digitize(x[i],bins[i]) for i in range(4)) ``` -1. حالا یک شبیه‌سازی کوتاه اجرا کنیم و این مقادیر گسسته محیط را مشاهده کنیم. می‌توانید هر دو `discretize` و `discretize_bins` را امتحان کنید و ببینید آیا تفاوتی وجود دارد. +1. حالا یک شبیه‌سازی کوتاه اجرا کنید و این مقادیر گسسته محیط را مشاهده کنید. می‌توانید هر دو `discretize` و `discretize_bins` را امتحان کنید و ببینید آیا تفاوتی وجود دارد. - ✅ `discretize_bins` شماره بازه را که از 0 شروع می‌شود بازمی‌گرداند. بنابراین برای مقادیر متغیر ورودی در اطراف 0، عددی از وسط بازه (10) بازمی‌گرداند. در `discretize`، ما به بازه مقادیر خروجی اهمیت ندادیم و اجازه دادیم که منفی باشند، بنابراین مقادیر وضعیت جابجا نشده‌اند و 0 معادل 0 است. (کد بلاک 8) + ✅ `discretize_bins` شماره بازه را بازمی‌گرداند که از 0 شروع می‌شود. بنابراین برای مقادیر متغیر ورودی در حدود 0، عددی از وسط بازه (10) بازمی‌گرداند. در `discretize`، به بازه مقادیر خروجی توجه نکردیم و اجازه دادیم مقادیر منفی باشند، بنابراین مقادیر وضعیت جابجا نشده‌اند و 0 متناظر با 0 است. (کد بلاک 8) ```python env.reset() @@ -177,15 +159,15 @@ import random env.close() ``` - ✅ خطی که با `env.render` شروع می‌شود را لغو کامنت کنید اگر می‌خواهید ببینید محیط چگونه اجرا می‌شود. در غیر این صورت می‌توانید آن را در پس‌زمینه اجرا کنید که سریع‌تر است. ما از این اجرای "نامرئی" در طول فرآیند یادگیری Q استفاده خواهیم کرد. + ✅ خطی که با `env.render` شروع می‌شود را اگر می‌خواهید ببینید محیط چگونه اجرا می‌شود، از حالت کامنت خارج کنید. در غیر این صورت می‌توانید آن را در پس‌زمینه اجرا کنید که سریع‌تر است. ما از این اجرای "نامرئی" در طول فرآیند Q-Learning استفاده خواهیم کرد. -## ساختار جدول Q +## ساختار Q-Table -در درس قبلی، وضعیت یک جفت عدد ساده از 0 تا 8 بود و بنابراین نمایش جدول Q با یک آرایه numpy با شکل 8x8x2 راحت بود. اگر از گسسته‌سازی با بازه‌ها استفاده کنیم، اندازه بردار وضعیت ما نیز مشخص است، بنابراین می‌توانیم از همان روش استفاده کنیم و وضعیت را با یک آرایه با شکل 20x20x10x10x2 نمایش دهیم (در اینجا 2 بعد فضای عمل است و ابعاد اول مربوط به تعداد بازه‌هایی است که برای هر یک از پارامترهای فضای مشاهده انتخاب کرده‌ایم). +در درس قبلی، وضعیت یک جفت ساده از اعداد از 0 تا 8 بود و بنابراین راحت بود که Q-Table را با یک آرایه numpy با شکل 8x8x2 نمایش دهیم. اگر از گسسته‌سازی بازه‌ها استفاده کنیم، اندازه بردار وضعیت ما نیز مشخص است، بنابراین می‌توانیم از همان روش استفاده کنیم و وضعیت را با یک آرایه با شکل 20x20x10x10x2 نمایش دهیم (اینجا 2 بعد فضای عمل است و ابعاد اول متناظر با تعداد بازه‌هایی است که برای هر یک از پارامترهای فضای مشاهده انتخاب کرده‌ایم). -با این حال، گاهی اوقات ابعاد دقیق فضای مشاهده مشخص نیست. در مورد تابع `discretize`، ما ممکن است هرگز مطمئن نباشیم که وضعیت ما در محدوده‌های خاصی باقی می‌ماند، زیرا برخی از مقادیر اصلی محدود نیستند. بنابراین، ما از رویکرد کمی متفاوت استفاده خواهیم کرد و جدول Q را با یک دیکشنری نمایش می‌دهیم. +با این حال، گاهی اوقات ابعاد دقیق فضای مشاهده مشخص نیست. در مورد تابع `discretize`، ممکن است هرگز مطمئن نباشیم که وضعیت ما در محدوده خاصی باقی می‌ماند، زیرا برخی از مقادیر اصلی محدود نیستند. بنابراین، از رویکرد کمی متفاوت استفاده خواهیم کرد و Q-Table را با یک دیکشنری نمایش می‌دهیم. -1. از جفت *(state, action)* به عنوان کلید دیکشنری استفاده کنید و مقدار مربوط به مقدار ورودی جدول Q باشد. (کد بلاک 9) +1. از زوج *(state,action)* به عنوان کلید دیکشنری استفاده کنید و مقدار متناظر با مقدار ورودی Q-Table باشد. (کد بلاک 9) ```python Q = {} @@ -195,13 +177,13 @@ import random return [Q.get((state,a),0) for a in actions] ``` - در اینجا ما همچنین تابع `qvalues()` را تعریف می‌کنیم که لیستی از مقادیر جدول Q را برای یک وضعیت مشخص که مربوط به تمام اقدامات ممکن است بازمی‌گرداند. اگر ورودی در جدول Q موجود نباشد، مقدار پیش‌فرض 0 را بازمی‌گردانیم. + در اینجا همچنین تابعی به نام `qvalues()` تعریف می‌کنیم که لیستی از مقادیر Q-Table را برای یک وضعیت مشخص که متناظر با تمام اقدامات ممکن است بازمی‌گرداند. اگر ورودی در Q-Table وجود نداشته باشد، مقدار پیش‌فرض 0 را بازمی‌گردانیم. -## بیایید یادگیری Q را شروع کنیم +## شروع Q-Learning -حالا آماده‌ایم که به پیتر یاد بدهیم چگونه تعادل را حفظ کند! +حالا آماده‌ایم که به پیتر آموزش دهیم چگونه تعادل را حفظ کند! -1. ابتدا، برخی از ابرپارامترها را تنظیم کنیم: (کد بلاک 10) +1. ابتدا برخی از هایپرپارامترها را تنظیم کنیم: (کد بلاک 10) ```python # hyperparameters @@ -210,21 +192,21 @@ import random epsilon = 0.90 ``` - در اینجا، `alpha` **نرخ یادگیری** است که مشخص می‌کند تا چه حد باید مقادیر فعلی جدول Q را در هر مرحله تنظیم کنیم. در درس قبلی با مقدار 1 شروع کردیم و سپس `alpha` را در طول آموزش به مقادیر پایین‌تر کاهش دادیم. در این مثال، برای سادگی آن را ثابت نگه می‌داریم و شما می‌توانید بعداً با تنظیم مقادیر `alpha` آزمایش کنید. + در اینجا، `alpha` **نرخ یادگیری** است که مشخص می‌کند تا چه حد باید مقادیر فعلی Q-Table را در هر مرحله تنظیم کنیم. در درس قبلی با مقدار 1 شروع کردیم و سپس `alpha` را در طول آموزش به مقادیر پایین‌تر کاهش دادیم. در این مثال برای سادگی مقدار آن را ثابت نگه می‌داریم و شما می‌توانید بعداً با تنظیم مقادیر `alpha` آزمایش کنید. - `gamma` **ضریب تخفیف** است که نشان می‌دهد تا چه حد باید پاداش آینده را نسبت به پاداش فعلی اولویت دهیم. + `gamma` **عامل تخفیف** است که نشان می‌دهد تا چه حد باید پاداش آینده را نسبت به پاداش فعلی اولویت دهیم. - `epsilon` **عامل اکتشاف/بهره‌برداری** است که تعیین می‌کند آیا باید اکتشاف را به بهره‌برداری ترجیح دهیم یا برعکس. در الگوریتم ما، در درصد `epsilon` موارد، اقدام بعدی را بر اساس مقادیر جدول Q انتخاب می‌کنیم و در تعداد باقی‌مانده موارد، یک اقدام تصادفی اجرا می‌کنیم. این به ما امکان می‌دهد مناطقی از فضای جستجو را که قبلاً ندیده‌ایم کشف کنیم. + `epsilon` **عامل اکتشاف/بهره‌برداری** است که تعیین می‌کند آیا باید اکتشاف را به بهره‌برداری ترجیح دهیم یا بالعکس. در الگوریتم ما، در درصد `epsilon` موارد، اقدام بعدی را بر اساس مقادیر Q-Table انتخاب می‌کنیم و در باقی موارد یک اقدام تصادفی اجرا می‌کنیم. این به ما امکان می‌دهد مناطقی از فضای جستجو را که قبلاً ندیده‌ایم کشف کنیم. - ✅ از نظر تعادل - انتخاب اقدام تصادفی (اکتشاف) مانند یک ضربه تصادفی در جهت اشتباه عمل می‌کند و میله باید یاد بگیرد که چگونه تعادل را از این "اشتباهات" بازیابی کند. + ✅ در مورد تعادل - انتخاب اقدام تصادفی (اکتشاف) مانند یک ضربه تصادفی در جهت اشتباه عمل می‌کند و میله باید یاد بگیرد چگونه از این "اشتباهات" تعادل خود را بازیابی کند. ### بهبود الگوریتم -ما همچنین می‌توانیم دو بهبود در الگوریتم خود از درس قبلی ایجاد کنیم: +می‌توانیم دو بهبود در الگوریتم خود نسبت به درس قبلی ایجاد کنیم: -- **محاسبه میانگین پاداش تجمعی**، در طول تعدادی شبیه‌سازی. ما پیشرفت را هر 5000 تکرار چاپ خواهیم کرد و پاداش تجمعی خود را در آن بازه زمانی میانگین می‌گیریم. این بدان معناست که اگر بیش از 195 امتیاز کسب کنیم - می‌توانیم مسئله را حل‌شده در نظر بگیریم، حتی با کیفیتی بالاتر از حد مورد نیاز. +- **محاسبه میانگین پاداش تجمعی**، در طول تعدادی شبیه‌سازی. پیشرفت را هر 5000 تکرار چاپ می‌کنیم و میانگین پاداش تجمعی را در آن دوره زمانی محاسبه می‌کنیم. این بدان معناست که اگر بیش از 195 امتیاز کسب کنیم - می‌توانیم مسئله را حل شده در نظر بگیریم، حتی با کیفیتی بالاتر از حد مورد نیاز. -- **محاسبه حداکثر نتیجه تجمعی میانگین**، `Qmax`، و جدول Q مربوط به آن نتیجه را ذخیره خواهیم کرد. وقتی آموزش را اجرا می‌کنید، متوجه خواهید شد که گاهی اوقات نتیجه تجمعی میانگین شروع به کاهش می‌کند و ما می‌خواهیم مقادیر جدول Q را که مربوط به بهترین مدل مشاهده‌شده در طول آموزش است حفظ کنیم. +- **محاسبه حداکثر نتیجه تجمعی میانگین**، `Qmax`، و Q-Table متناظر با آن نتیجه را ذخیره می‌کنیم. وقتی آموزش را اجرا می‌کنید، متوجه می‌شوید که گاهی میانگین نتیجه تجمعی شروع به کاهش می‌کند و می‌خواهیم مقادیر Q-Table را که متناظر با بهترین مدل مشاهده شده در طول آموزش است حفظ کنیم. 1. تمام پاداش‌های تجمعی را در هر شبیه‌سازی در بردار `rewards` برای رسم نمودار بعدی جمع‌آوری کنید. (کد بلاک 11) @@ -269,23 +251,23 @@ import random آنچه ممکن است از این نتایج متوجه شوید: -- **نزدیک به هدف ما**. ما بسیار نزدیک به دستیابی به هدف کسب 195 پاداش تجمعی در بیش از 100 اجرای متوالی شبیه‌سازی هستیم، یا ممکن است واقعاً به آن دست یافته باشیم! حتی اگر اعداد کمتری کسب کنیم، هنوز نمی‌دانیم، زیرا ما میانگین را در طول 5000 اجرا می‌گیریم و فقط 100 اجرا در معیار رسمی مورد نیاز است. +- **نزدیک به هدف ما**. ما بسیار نزدیک به دستیابی به هدف کسب 195 پاداش تجمعی در بیش از 100 اجرای متوالی شبیه‌سازی هستیم، یا ممکن است واقعاً به آن دست یافته باشیم! حتی اگر اعداد کوچکتری کسب کنیم، هنوز نمی‌دانیم، زیرا میانگین را در طول 5000 اجرا محاسبه می‌کنیم و فقط 100 اجرا در معیار رسمی مورد نیاز است. -- **پاداش شروع به کاهش می‌کند**. گاهی اوقات پاداش شروع به کاهش می‌کند، که به این معنی است که ممکن است مقادیر یادگرفته‌شده در جدول Q را با مقادیری که وضعیت را بدتر می‌کنند "خراب" کنیم. +- **پاداش شروع به کاهش می‌کند**. گاهی پاداش شروع به کاهش می‌کند، که به این معناست که ممکن است مقادیر یاد گرفته شده در Q-Table را با مقادیری که وضعیت را بدتر می‌کنند "خراب" کنیم. -این مشاهده با رسم پیشرفت آموزش واضح‌تر می‌شود. +این مشاهده در صورتی که پیشرفت آموزش را رسم کنیم واضح‌تر است. ## رسم پیشرفت آموزش -در طول آموزش، ما مقدار پاداش تجمعی را در هر یک از تکرارها در بردار `rewards` جمع‌آوری کرده‌ایم. اینجا نحوه نمایش آن در برابر شماره تکرار آمده است: +در طول آموزش، مقدار پاداش تجمعی را در هر یک از تکرارها در بردار `rewards` جمع‌آوری کرده‌ایم. اینجا نحوه نمایش آن در برابر شماره تکرار آمده است: ```python plt.plot(rewards) ``` -![پیشرفت خام](../../../../translated_images/train_progress_raw.2adfdf2daea09c596fc786fa347a23e9aceffe1b463e2257d20a9505794823ec.fa.png) +![پیشرفت خام](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) -از این نمودار، نمی‌توان چیزی گفت، زیرا به دلیل ماهیت فرآیند آموزش تصادفی، طول جلسات آموزش بسیار متفاوت است. برای درک بهتر این نمودار، می‌توانیم **میانگین متحرک** را در طول یک سری آزمایش‌ها، مثلاً 100، محاسبه کنیم. این کار را می‌توان به راحتی با استفاده از `np.convolve` انجام داد: (کد بلاک 12) +از این نمودار نمی‌توان چیزی گفت، زیرا به دلیل ماهیت فرآیند آموزش تصادفی، طول جلسات آموزشی بسیار متفاوت است. برای درک بهتر این نمودار، می‌توان میانگین متحرک را در طول یک سری آزمایش‌ها، مثلاً 100، محاسبه کرد. این کار را می‌توان به راحتی با استفاده از `np.convolve` انجام داد: (کد بلاک 12) ```python def running_average(x,window): @@ -294,21 +276,21 @@ def running_average(x,window): plt.plot(running_average(rewards,100)) ``` -![پیشرفت آموزش](../../../../translated_images/train_progress_runav.c71694a8fa9ab35935aff6f109e5ecdfdbdf1b0ae265da49479a81b5fae8f0aa.fa.png) +![پیشرفت آموزش](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) -## تغییر ابرپارامترها +## تغییر هایپرپارامترها -برای پایدارتر کردن یادگیری، منطقی است که برخی از ابرپارامترهای خود را در طول آموزش تنظیم کنیم. به طور خاص: +برای پایدارتر کردن یادگیری، منطقی است که برخی از هایپرپارامترهای خود را در طول آموزش تنظیم کنیم. به طور خاص: -- **برای نرخ یادگیری**، `alpha`، می‌توانیم با مقادیر نزدیک به 1 شروع کنیم و سپس این پارامتر را کاهش دهیم. با گذشت زمان، ما مقادیر احتمالی خوبی در جدول Q خواهیم داشت و بنابراین باید آنها را به آرامی تنظیم کنیم و نه اینکه کاملاً با مقادیر جدید بازنویسی کنیم. +- **برای نرخ یادگیری**، `alpha`، می‌توانیم با مقادیر نزدیک به 1 شروع کنیم و سپس این پارامتر را کاهش دهیم. با گذشت زمان، احتمال‌های خوبی در Q-Table خواهیم داشت و بنابراین باید آنها را کمی تنظیم کنیم و نه اینکه کاملاً با مقادیر جدید بازنویسی کنیم. -- **افزایش epsilon**. ممکن است بخواهیم `epsilon` را به آرامی افزایش دهیم تا کمتر اکتشاف کنیم و بیشتر بهره‌برداری کنیم. احتمالاً منطقی است که با مقدار پایین‌تر `epsilon` شروع کنیم و به تدریج به نزدیک 1 برسیم. +- **افزایش epsilon**. ممکن است بخواهیم `epsilon` را به آرامی افزایش دهیم تا کمتر اکتشاف کنیم و بیشتر بهره‌برداری کنیم. احتمالاً منطقی است که با مقدار پایین‌تر `epsilon` شروع کنیم و به تدریج به تقریباً 1 برسیم. > **وظیفه ۱**: با مقادیر هایپرپارامترها بازی کنید و ببینید آیا می‌توانید پاداش تجمعی بیشتری کسب کنید. آیا به بالای ۱۹۵ می‌رسید؟ > **وظیفه ۲**: برای حل رسمی مسئله، باید میانگین پاداش ۱۹۵ را در طول ۱۰۰ اجرای متوالی به دست آورید. این مقدار را در طول آموزش اندازه‌گیری کنید و مطمئن شوید که مسئله را به طور رسمی حل کرده‌اید! ## مشاهده نتیجه در عمل -جالب است که ببینیم مدل آموزش‌دیده چگونه رفتار می‌کند. بیایید شبیه‌سازی را اجرا کنیم و همان استراتژی انتخاب عمل را که در طول آموزش استفاده کردیم دنبال کنیم، یعنی نمونه‌گیری بر اساس توزیع احتمالی در Q-Table: (بلاک کد ۱۳) +جالب است که ببینیم مدل آموزش‌دیده چگونه رفتار می‌کند. بیایید شبیه‌سازی را اجرا کنیم و همان استراتژی انتخاب عمل را که در طول آموزش استفاده کردیم دنبال کنیم، یعنی نمونه‌گیری بر اساس توزیع احتمالی در Q-Table: (بلوک کد ۱۳) ```python obs = env.reset() @@ -334,18 +316,18 @@ env.close() > **وظیفه ۴**: در اینجا ما بهترین عمل را در هر مرحله انتخاب نمی‌کردیم، بلکه بر اساس توزیع احتمالی مربوطه نمونه‌گیری می‌کردیم. آیا منطقی‌تر است که همیشه بهترین عمل را با بالاترین مقدار Q-Table انتخاب کنیم؟ این کار را می‌توان با استفاده از تابع `np.argmax` انجام داد تا شماره عمل مربوط به بالاترین مقدار Q-Table را پیدا کنید. این استراتژی را پیاده‌سازی کنید و ببینید آیا تعادل بهبود می‌یابد. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/48/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## تکلیف [آموزش یک ماشین کوهستانی](assignment.md) ## نتیجه‌گیری -ما اکنون یاد گرفته‌ایم که چگونه عوامل را آموزش دهیم تا فقط با ارائه یک تابع پاداش که حالت مطلوب بازی را تعریف می‌کند و با دادن فرصت به آن‌ها برای جستجوی هوشمندانه فضای جستجو، به نتایج خوبی دست یابند. ما الگوریتم Q-Learning را با موفقیت در موارد محیط‌های گسسته و پیوسته، اما با اعمال گسسته، به کار برده‌ایم. +ما اکنون یاد گرفته‌ایم که چگونه عوامل را آموزش دهیم تا فقط با ارائه یک تابع پاداش که حالت مطلوب بازی را تعریف می‌کند و با دادن فرصت به آن‌ها برای جستجوی هوشمندانه فضای جستجو، به نتایج خوبی دست یابند. ما الگوریتم Q-Learning را در موارد محیط‌های گسسته و پیوسته، اما با اعمال گسسته، با موفقیت اعمال کرده‌ایم. -مهم است که همچنین شرایطی را مطالعه کنیم که در آن حالت عمل نیز پیوسته باشد و فضای مشاهده بسیار پیچیده‌تر باشد، مانند تصویر صفحه بازی آتاری. در این مسائل، اغلب نیاز داریم از تکنیک‌های قدرتمندتر یادگیری ماشین، مانند شبکه‌های عصبی، استفاده کنیم تا به نتایج خوبی برسیم. این موضوعات پیشرفته‌تر، موضوع دوره پیشرفته‌تر هوش مصنوعی ما خواهد بود. +مهم است که همچنین شرایطی را مطالعه کنیم که در آن حالت عمل نیز پیوسته باشد و فضای مشاهده بسیار پیچیده‌تر باشد، مانند تصویر صفحه بازی آتاری. در این مسائل، اغلب نیاز داریم از تکنیک‌های قدرتمندتر یادگیری ماشین، مانند شبکه‌های عصبی، برای دستیابی به نتایج خوب استفاده کنیم. این موضوعات پیشرفته‌تر، موضوع دوره پیشرفته‌تر هوش مصنوعی ما خواهد بود. --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/9-Real-World/1-Applications/README.md b/translations/fa/9-Real-World/1-Applications/README.md index 54e907a7f..b5ab74158 100644 --- a/translations/fa/9-Real-World/1-Applications/README.md +++ b/translations/fa/9-Real-World/1-Applications/README.md @@ -1,109 +1,109 @@ # پس‌نوشت: یادگیری ماشین در دنیای واقعی -![خلاصه‌ای از یادگیری ماشین در دنیای واقعی در قالب یک اسکیچ‌نوت](../../../../translated_images/ml-realworld.26ee2746716155771f8076598b6145e6533fe4a9e2e465ea745f46648cbf1b84.fa.png) -> اسکیچ‌نوت از [تومومی ایمورا](https://www.twitter.com/girlie_mac) +![خلاصه‌ای از یادگیری ماشین در دنیای واقعی در یک اسکچ‌نوت](../../../../sketchnotes/ml-realworld.png) +> اسکچ‌نوت توسط [Tomomi Imura](https://www.twitter.com/girlie_mac) -در این دوره آموزشی، شما روش‌های مختلفی برای آماده‌سازی داده‌ها برای آموزش و ایجاد مدل‌های یادگیری ماشین یاد گرفتید. شما مجموعه‌ای از مدل‌های کلاسیک رگرسیون، خوشه‌بندی، طبقه‌بندی، پردازش زبان طبیعی و سری‌های زمانی را ساختید. تبریک می‌گویم! حالا ممکن است از خود بپرسید که هدف از این همه چیست... این مدل‌ها در دنیای واقعی چه کاربردهایی دارند؟ +در این دوره آموزشی، شما روش‌های مختلفی برای آماده‌سازی داده‌ها جهت آموزش و ایجاد مدل‌های یادگیری ماشین آموختید. شما مجموعه‌ای از مدل‌های کلاسیک رگرسیون، خوشه‌بندی، طبقه‌بندی، پردازش زبان طبیعی و سری‌های زمانی را ساختید. تبریک! حالا ممکن است از خود بپرسید که هدف از این همه چیست... کاربردهای واقعی این مدل‌ها چیست؟ -در حالی که توجه زیادی در صنعت به هوش مصنوعی (AI) معطوف شده است که معمولاً از یادگیری عمیق استفاده می‌کند، مدل‌های کلاسیک یادگیری ماشین همچنان کاربردهای ارزشمندی دارند. حتی ممکن است شما همین حالا از برخی از این کاربردها استفاده کنید! در این درس، بررسی خواهید کرد که چگونه هشت صنعت و حوزه موضوعی مختلف از این نوع مدل‌ها برای بهبود عملکرد، قابلیت اطمینان، هوشمندی و ارزشمندی برنامه‌های خود برای کاربران استفاده می‌کنند. +در حالی که علاقه زیادی در صنعت به هوش مصنوعی، که معمولاً از یادگیری عمیق استفاده می‌کند، وجود دارد، هنوز هم کاربردهای ارزشمندی برای مدل‌های کلاسیک یادگیری ماشین وجود دارد. ممکن است حتی برخی از این کاربردها را امروز استفاده کنید! در این درس، بررسی خواهید کرد که چگونه هشت صنعت و حوزه مختلف از این نوع مدل‌ها برای بهبود عملکرد، قابلیت اطمینان، هوشمندی و ارزشمندی برنامه‌هایشان برای کاربران استفاده می‌کنند. -## [آزمون پیش از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/49/) +## [پیش‌آزمون درس](https://ff-quizzes.netlify.app/en/ml/) ## 💰 امور مالی -بخش مالی فرصت‌های زیادی برای یادگیری ماشین ارائه می‌دهد. بسیاری از مسائل در این حوزه به خوبی با استفاده از یادگیری ماشین مدل‌سازی و حل می‌شوند. +بخش مالی فرصت‌های زیادی برای یادگیری ماشین ارائه می‌دهد. بسیاری از مشکلات در این حوزه به خوبی با استفاده از یادگیری ماشین مدل‌سازی و حل می‌شوند. -### تشخیص تقلب در کارت اعتباری +### تشخیص تقلب در کارت‌های اعتباری -ما قبلاً در دوره درباره [خوشه‌بندی k-means](../../5-Clustering/2-K-Means/README.md) یاد گرفتیم، اما چگونه می‌توان از آن برای حل مسائل مربوط به تقلب در کارت اعتباری استفاده کرد؟ +ما قبلاً در این دوره درباره [خوشه‌بندی k-means](../../5-Clustering/2-K-Means/README.md) یاد گرفتیم، اما چگونه می‌توان از آن برای حل مشکلات مربوط به تقلب در کارت‌های اعتباری استفاده کرد؟ -خوشه‌بندی k-means در تکنیکی به نام **تشخیص نقاط پرت** برای شناسایی تقلب در کارت اعتباری مفید است. نقاط پرت یا انحرافات در مشاهدات یک مجموعه داده می‌توانند به ما بگویند که آیا یک کارت اعتباری به صورت عادی استفاده می‌شود یا اتفاق غیرمعمولی در حال رخ دادن است. همان‌طور که در مقاله زیر نشان داده شده است، می‌توانید داده‌های کارت اعتباری را با استفاده از الگوریتم خوشه‌بندی k-means مرتب کنید و هر تراکنش را بر اساس میزان پرت بودن آن به یک خوشه اختصاص دهید. سپس می‌توانید خوشه‌های پرریسک‌تر را برای شناسایی تراکنش‌های تقلبی یا قانونی ارزیابی کنید. +خوشه‌بندی 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) ابزاری ارزشمند برای درک عملکرد یک صندوق نسبت به یک معیار است. همچنین می‌توانیم استنباط کنیم که آیا نتایج رگرسیون از نظر آماری معنادار هستند یا خیر و این نتایج چقدر بر سرمایه‌گذاری‌های مشتری تأثیر می‌گذارند. حتی می‌توانید تحلیل خود را با استفاده از رگرسیون چندگانه گسترش دهید، جایی که عوامل ریسک اضافی نیز در نظر گرفته می‌شوند. برای مثالی از نحوه عملکرد این روش برای یک صندوق خاص، مقاله زیر را درباره ارزیابی عملکرد صندوق با استفاده از رگرسیون بررسی کنید. +یکی از روش‌های ارزیابی عملکرد یک سرمایه‌گذاری خاص استفاده از رگرسیون آماری است. [رگرسیون خطی](../../2-Regression/1-Tools/README.md) ابزاری ارزشمند برای درک نحوه عملکرد یک صندوق نسبت به یک معیار است. همچنین می‌توانیم نتیجه‌گیری کنیم که آیا نتایج رگرسیون از نظر آماری معنادار هستند یا اینکه چقدر بر سرمایه‌گذاری‌های مشتری تأثیر می‌گذارند. حتی می‌توانید تحلیل خود را با استفاده از رگرسیون چندگانه گسترش دهید، جایی که عوامل خطر اضافی می‌توانند در نظر گرفته شوند. برای مثال نحوه عملکرد این روش برای یک صندوق خاص، مقاله زیر را درباره ارزیابی عملکرد صندوق با استفاده از رگرسیون بررسی کنید. [منبع](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) ## 🎓 آموزش -بخش آموزش نیز حوزه‌ای بسیار جالب است که می‌توان یادگیری ماشین را در آن به کار برد. مسائل جالبی برای حل وجود دارند، مانند شناسایی تقلب در آزمون‌ها یا مقالات و مدیریت سوگیری، چه عمدی و چه غیرعمدی، در فرآیند تصحیح. +بخش آموزش نیز حوزه‌ای بسیار جالب است که می‌توان یادگیری ماشین را در آن به کار برد. مشکلات جالبی برای حل وجود دارند، مانند تشخیص تقلب در آزمون‌ها یا مقالات و مدیریت تعصب، چه عمدی و چه غیرعمدی، در فرآیند تصحیح. ### پیش‌بینی رفتار دانش‌آموزان -[Coursera](https://coursera.com)، یک ارائه‌دهنده دوره‌های آنلاین باز، یک وبلاگ فنی عالی دارد که در آن درباره بسیاری از تصمیمات مهندسی بحث می‌کنند. در این مطالعه موردی، آن‌ها یک خط رگرسیون را ترسیم کردند تا هرگونه همبستگی بین امتیاز پایین NPS (شاخص ترویج‌کننده خالص) و حفظ یا ترک دوره را بررسی کنند. +[Coursera](https://coursera.com)، یک ارائه‌دهنده دوره‌های آنلاین باز، یک وبلاگ فنی عالی دارد که در آن بسیاری از تصمیمات مهندسی را مورد بحث قرار می‌دهد. در این مطالعه موردی، آن‌ها یک خط رگرسیون را ترسیم کردند تا هرگونه ارتباط بین امتیاز پایین NPS (Net Promoter Score) و حفظ یا ترک دوره را بررسی کنند. [منبع](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) ما یاد گرفتید. +[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، شرکتی که کالاهای خانگی مانند مبلمان می‌فروشد، کمک به مشتریان برای یافتن محصولات مناسب برای سلیقه و نیازهایشان بسیار مهم است. در این مقاله، مهندسان شرکت توضیح می‌دهند که چگونه از یادگیری ماشین و پردازش زبان طبیعی برای "نمایش نتایج مناسب برای مشتریان" استفاده می‌کنند. به طور خاص، موتور هدف‌گذاری پرسش آن‌ها برای استفاده از استخراج موجودیت، آموزش طبقه‌بندی‌کننده، استخراج دارایی و نظر، و برچسب‌گذاری احساسات در بررسی‌های مشتری ساخته شده است. این یک مورد استفاده کلاسیک از نحوه عملکرد پردازش زبان طبیعی در خرده‌فروشی آنلاین است. +در Wayfair، شرکتی که کالاهای خانگی مانند مبلمان می‌فروشد، کمک به مشتریان برای یافتن محصولات مناسب برای سلیقه و نیازهایشان بسیار مهم است. در این مقاله، مهندسان شرکت توضیح می‌دهند که چگونه از یادگیری ماشین و پردازش زبان طبیعی برای "نمایش نتایج مناسب برای مشتریان" استفاده می‌کنند. به طور خاص، موتور هدف‌گذاری پرس‌وجو آن‌ها برای استخراج موجودیت‌ها، آموزش طبقه‌بندی‌کننده‌ها، استخراج دارایی‌ها و نظرات، و برچسب‌گذاری احساسات در بررسی‌های مشتری ساخته شده است. این یک مورد استفاده کلاسیک از نحوه عملکرد NLP در خرده‌فروشی آنلاین است. [منبع](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) ### مدیریت موجودی -شرکت‌های نوآور و چابکی مانند [StitchFix](https://stitchfix.com)، یک سرویس جعبه‌ای که لباس به مصرف‌کنندگان ارسال می‌کند، به شدت به یادگیری ماشین برای توصیه‌ها و مدیریت موجودی متکی هستند. تیم‌های استایلینگ آن‌ها با تیم‌های بازرگانی همکاری می‌کنند. در واقع: "یکی از دانشمندان داده ما با یک الگوریتم ژنتیکی کار کرد و آن را برای پیش‌بینی موفقیت یک لباس که هنوز وجود ندارد، به کار برد. ما این ابزار را به تیم بازرگانی ارائه دادیم و اکنون آن‌ها می‌توانند از آن به عنوان یک ابزار استفاده کنند." +شرکت‌های نوآور و چابک مانند [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) استفاده کنند که قادر به تمایز بین گروه‌های دارویی است. +سمیت در آزمایش‌های بالینی یک نگرانی عمده برای سازندگان دارو است. چه مقدار سمیت قابل تحمل است؟ در این مطالعه، تجزیه و تحلیل روش‌های مختلف آزمایش بالینی منجر به توسعه یک رویکرد جدید برای پیش‌بینی احتمال نتایج آزمایش‌های بالینی شد. به طور خاص، آن‌ها توانستند از جنگل تصادفی برای تولید یک [طبقه‌بندی‌کننده](../../4-Classification/README.md) استفاده کنند که قادر به تمایز بین گروه‌های دارویی است. [منبع](https://www.sciencedirect.com/science/article/pii/S2451945616302914) -### مدیریت بازپذیری بیمارستان +### مدیریت پذیرش مجدد بیمارستان -مراقبت بیمارستانی هزینه‌بر است، به ویژه زمانی که بیماران باید دوباره بستری شوند. این مقاله درباره شرکتی بحث می‌کند که از یادگیری ماشین برای پیش‌بینی احتمال بازپذیری با استفاده از الگوریتم‌های [خوشه‌بندی](../../5-Clustering/README.md) استفاده می‌کند. این خوشه‌ها به تحلیل‌گران کمک می‌کنند تا "گروه‌هایی از بازپذیری‌ها را کشف کنند که ممکن است علت مشترکی داشته باشند." +مراقبت بیمارستانی هزینه‌بر است، به ویژه زمانی که بیماران مجبور به پذیرش مجدد شوند. این مقاله شرکتی را مورد بحث قرار می‌دهد که از یادگیری ماشین برای پیش‌بینی احتمال پذیرش مجدد با استفاده از الگوریتم‌های [خوشه‌بندی](../../5-Clustering/README.md) استفاده می‌کند. این خوشه‌ها به تحلیل‌گران کمک می‌کنند تا "گروه‌هایی از پذیرش‌های مجدد را کشف کنند که ممکن است علت مشترکی داشته باشند." [منبع](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) -### مدیریت بیماری +### مدیریت بیماری‌ها -همه‌گیری اخیر توجه زیادی را به روش‌هایی که یادگیری ماشین می‌تواند در جلوگیری از گسترش بیماری کمک کند، جلب کرده است. در این مقاله، استفاده از ARIMA، منحنی‌های لجستیک، رگرسیون خطی و SARIMA را خواهید شناخت. "این کار تلاشی است برای محاسبه نرخ گسترش این ویروس و پیش‌بینی مرگ‌ها، بهبودی‌ها و موارد تأیید شده، به طوری که بتوانیم بهتر آماده شویم و زنده بمانیم." +همه‌گیری اخیر توجه زیادی به روش‌هایی که یادگیری ماشین می‌تواند در جلوگیری از گسترش بیماری کمک کند، جلب کرده است. در این مقاله، شما استفاده از ARIMA، منحنی‌های لجستیک، رگرسیون خطی و SARIMA را خواهید شناخت. "این کار تلاشی است برای محاسبه نرخ گسترش این ویروس و در نتیجه پیش‌بینی مرگ‌ها، بهبودی‌ها و موارد تأیید شده، تا بتوانیم بهتر آماده شویم و زنده بمانیم." [منبع](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) -## 🌲 بوم‌شناسی و فناوری سبز +## 🌲 اکولوژی و فناوری سبز -طبیعت و بوم‌شناسی شامل بسیاری از سیستم‌های حساس است که تعامل بین حیوانات و طبیعت را در کانون توجه قرار می‌دهد. مهم است که بتوان این سیستم‌ها را به دقت اندازه‌گیری کرد و در صورت وقوع اتفاقی مانند آتش‌سوزی جنگل یا کاهش جمعیت حیوانات، به درستی عمل کرد. +طبیعت و اکولوژی شامل بسیاری از سیستم‌های حساس است که تعامل بین حیوانات و طبیعت را در کانون توجه قرار می‌دهد. مهم است که بتوان این سیستم‌ها را به دقت اندازه‌گیری کرد و در صورت وقوع اتفاقی، مانند آتش‌سوزی جنگل یا کاهش جمعیت حیوانات، به درستی عمل کرد. ### مدیریت جنگل -شما در درس‌های قبلی درباره [یادگیری تقویتی](../../8-Reinforcement/README.md) یاد گرفتید. این روش می‌تواند هنگام تلاش برای پیش‌بینی الگوها در طبیعت بسیار مفید باشد. به طور خاص، می‌توان از آن برای ردیابی مشکلات بوم‌شناختی مانند آتش‌سوزی جنگل‌ها و گسترش گونه‌های مهاجم استفاده کرد. در کانادا، گروهی از محققان از یادگیری تقویتی برای ساخت مدل‌های پویایی آتش‌سوزی جنگل از تصاویر ماهواره‌ای استفاده کردند. با استفاده از یک "فرآیند گسترش فضایی (SSP)" نوآورانه، آن‌ها آتش‌سوزی جنگل را به عنوان "عامل در هر سلول در چشم‌انداز" تصور کردند. "مجموعه اقداماتی که آتش می‌تواند از یک مکان در هر لحظه انجام دهد شامل گسترش به شمال، جنوب، شرق، غرب یا عدم گسترش است." +شما در درس‌های قبلی درباره [یادگیری تقویتی](../../8-Reinforcement/README.md) یاد گرفتید. این روش می‌تواند هنگام تلاش برای پیش‌بینی الگوها در طبیعت بسیار مفید باشد. به طور خاص، می‌توان از آن برای ردیابی مشکلات اکولوژیکی مانند آتش‌سوزی جنگل‌ها و گسترش گونه‌های مهاجم استفاده کرد. در کانادا، گروهی از محققان از یادگیری تقویتی برای ساخت مدل‌های دینامیک آتش‌سوزی جنگل از تصاویر ماهواره‌ای استفاده کردند. با استفاده از یک "فرآیند گسترش فضایی (SSP)" نوآورانه، آن‌ها آتش‌سوزی جنگل را به عنوان "عامل در هر سلول در چشم‌انداز" تصور کردند. "مجموعه اقدامات آتش در هر مکان در هر لحظه شامل گسترش به شمال، جنوب، شرق یا غرب یا عدم گسترش است." -این رویکرد تنظیمات معمول RL را معکوس می‌کند زیرا پویایی فرآیند تصمیم‌گیری مارکوف (MDP) مربوطه یک تابع شناخته‌شده برای گسترش فوری آتش‌سوزی است. درباره الگوریتم‌های کلاسیکی که این گروه استفاده کرده‌اند در لینک زیر بیشتر بخوانید. +این رویکرد تنظیم معمول 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) اینجا)، یادگیری ماشین کلاسیک همچنان در این کار جایگاه خود را دارد. +در حالی که یادگیری عمیق انقلابی در ردیابی بصری حرکات حیوانات ایجاد کرده است (می‌توانید [ردیاب خرس قطبی خود را بسازید](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) اینجا)، یادگیری ماشین کلاسیک هنوز جایگاهی در این وظیفه دارد. -حسگرها برای ردیابی حرکات حیوانات مزرعه و اینترنت اشیا از این نوع پردازش بصری استفاده می‌کنند، اما تکنیک‌های یادگیری ماشین پایه برای پیش‌پردازش داده‌ها مفید هستند. برای مثال، در این مقاله، وضعیت‌های گوسفندان با استفاده از الگوریتم‌های مختلف طبقه‌بندی‌کننده نظارت و تحلیل شدند. ممکن است منحنی ROC را در صفحه ۳۳۵ بشناسید. +حسگرها برای ردیابی حرکات حیوانات مزرعه و اینترنت اشیا از این نوع پردازش بصری استفاده می‌کنند، اما تکنیک‌های یادگیری ماشین پایه‌تر برای پیش‌پردازش داده‌ها مفید هستند. به عنوان مثال، در این مقاله، وضعیت‌های گوسفندان با استفاده از الگوریتم‌های مختلف طبقه‌بندی‌کننده نظارت و تحلیل شدند. ممکن است منحنی ROC در صفحه 335 را بشناسید. [منبع](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) ### ⚡️ مدیریت انرژی -در درس‌های ما درباره [پیش‌بینی سری‌های زمانی](../../7-TimeSeries/README.md)، مفهوم پارکومترهای هوشمند برای تولید درآمد برای یک شهر بر اساس درک عرضه و تقاضا مطرح شد. این مقاله به طور مفصل توضیح می‌دهد که چگونه خوشه‌بندی، رگرسیون و پیش‌بینی سری‌های زمانی با هم ترکیب شدند تا مصرف انرژی آینده در ایرلند را بر اساس اندازه‌گیری‌های هوشمند پیش‌بینی کنند. +در درس‌های ما درباره [پیش‌بینی سری‌های زمانی](../../7-TimeSeries/README.md)، مفهوم پارکینگ‌های هوشمند برای تولید درآمد برای یک شهر بر اساس درک عرضه و تقاضا مطرح شد. این مقاله به تفصیل بحث می‌کند که چگونه خوشه‌بندی، رگرسیون و پیش‌بینی سری‌های زمانی ترکیب شدند تا به پیش‌بینی استفاده آینده از انرژی در ایرلند، بر اساس اندازه‌گیری‌های هوشمند، کمک کنند. [منبع](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) ## 💼 بیمه @@ -112,42 +112,42 @@ CO_OP_TRANSLATOR_METADATA: ### مدیریت نوسانات -MetLife، یک ارائه‌دهنده بیمه عمر، به طور شفاف درباره نحوه تحلیل و کاهش نوسانات در مدل‌های مالی خود صحبت می‌کند. در این مقاله، تجسم‌های طبقه‌بندی باینری و ترتیبی را مشاهده خواهید کرد. همچنین تجسم‌های پیش‌بینی را کشف خواهید کرد. +MetLife، یک ارائه‌دهنده بیمه عمر، در مورد نحوه تحلیل و کاهش نوسانات در مدل‌های مالی خود شفاف است. در این مقاله، شما تجسم‌های طبقه‌بندی باینری و ترتیبی را مشاهده خواهید کرد. همچنین تجسم‌های پیش‌بینی را کشف خواهید کرد. [منبع](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) ## 🎨 هنر، فرهنگ و ادبیات -در هنر، به عنوان مثال در روزنامه‌نگاری، مسائل جالب زیادی وجود دارند. شناسایی اخبار جعلی یک مشکل بزرگ است زیرا ثابت شده است که می‌تواند بر نظر مردم تأثیر بگذارد و حتی دموکراسی‌ها را سرنگون کند. موزه‌ها نیز می‌توانند از یادگیری ماشین در همه چیز از یافتن ارتباط بین آثار تا برنامه‌ریزی منابع بهره‌مند شوند. +در هنر، به عنوان مثال در روزنامه‌نگاری، مشکلات جالب زیادی وجود دارند. تشخیص اخبار جعلی یک مشکل بزرگ است زیرا ثابت شده است که می‌تواند بر نظر مردم تأثیر بگذارد و حتی دموکراسی‌ها را سرنگون کند. موزه‌ها نیز می‌توانند از یادگیری ماشین در همه چیز از یافتن ارتباط بین آثار تا برنامه‌ریزی منابع بهره‌مند شوند. -### شناسایی اخبار جعلی +### تشخیص اخبار جعلی -شناسایی اخبار جعلی در رسانه‌های امروزی به یک بازی موش و گربه تبدیل شده است. در این مقاله، محققان پیشنهاد می‌کنند سیستمی که ترکیبی از چندین تکنیک یادگیری ماشین است آزمایش شود و بهترین مدل به کار گرفته شود: "این سیستم بر اساس پردازش زبان طبیعی برای استخراج ویژگی‌ها از داده‌ها ساخته شده و سپس این ویژگی‌ها برای آموزش طبقه‌بندی‌کننده‌های یادگیری ماشین مانند Naive Bayes، ماشین بردار پشتیبان (SVM)، جنگل تصادفی (RF)، گرادیان نزولی تصادفی (SGD) و رگرسیون لجستیک (LR) استفاده می‌شوند." +تشخیص اخبار جعلی به یک بازی موش و گربه در رسانه‌های امروز تبدیل شده است. در این مقاله، محققان پیشنهاد می‌کنند که یک سیستم ترکیبی از چندین تکنیک یادگیری ماشین که ما مطالعه کرده‌ایم آزمایش شود و بهترین مدل به کار گرفته شود: "این سیستم بر اساس پردازش زبان طبیعی برای استخراج ویژگی‌ها از داده‌ها است و سپس این ویژگی‌ها برای آموزش طبقه‌بندی‌کننده‌های یادگیری ماشین مانند 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 بود که خشونت جمعی را برانگیخت. +این مقاله نشان می‌دهد که چگونه ترکیب حوزه‌های مختلف یادگیری ماشین می‌تواند نتایج جالبی تولید کند که به جلوگیری از گسترش اخبار جعلی و ایجاد آسیب واقعی کمک کند؛ در این مورد، انگیزه گسترش شایعات درباره درمان‌های COVID بود که خشونت جمعی را تحریک کرد. ### یادگیری ماشین در موزه‌ها -موزه‌ها در آستانه یک انقلاب هوش مصنوعی قرار دارند که در آن فهرست‌بندی و دیجیتالی کردن مجموعه‌ها و یافتن ارتباط بین آثار با پیشرفت فناوری آسان‌تر می‌شود. پروژه‌هایی مانند [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) به باز کردن رمز و راز مجموعه‌های غیرقابل دسترس مانند آرشیو واتیکان کمک می‌کنند. اما، جنبه تجاری موزه‌ها نیز از مدل‌های یادگیری ماشین بهره می‌برد. +موزه‌ها در آستانه یک انقلاب هوش مصنوعی هستند که در آن فهرست‌بندی و دیجیتالی کردن مجموعه‌ها و یافتن ارتباط بین آثار آسان‌تر می‌شود زیرا فناوری پیشرفت می‌کند. پروژه‌هایی مانند [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) به باز کردن رمز و راز مجموعه‌های غیرقابل دسترس مانند آرشیو واتیکان کمک می‌کنند. اما، جنبه تجاری موزه‌ها نیز از مدل‌های یادگیری ماشین بهره‌مند می‌شود. -برای مثال، مؤسسه هنر شیکاگو مدل‌هایی برای پیش‌بینی علاقه‌مندی مخاطبان و زمان بازدید آن‌ها از نمایشگاه‌ها ساخت. هدف ایجاد تجربیات بازدیدکننده شخصی‌سازی‌شده و بهینه در هر بار بازدید کاربر از موزه است. "در سال مالی ۲۰۱۷، مدل پیش‌بینی حضور و پذیرش را با دقت ۱ درصد پیش‌بینی کرد، می‌گوید اندرو سیم‌نیک، معاون ارشد مؤسسه هنر." +به عنوان مثال، مؤسسه هنر شیکاگو مدل‌هایی برای پیش‌بینی اینکه مخاطبان به چه چیزی علاقه دارند و چه زمانی به نمایشگاه‌ها خواهند رفت، ساخته است. هدف ایجاد تجربیات بازدیدکننده فردی و بهینه‌شده در هر بار بازدید کاربر از موزه است. "در سال مالی 2017، مدل حضور و پذیرش را با دقت 1 درصد پیش‌بینی کرد، می‌گوید Andrew Simnick، معاون ارشد مؤسسه هنر." [منبع](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) ## 🏷 بازاریابی -### بخش‌بندی مشتریان +### تقسیم‌بندی مشتریان -موثرترین استراتژی‌های بازاریابی مشتریان را بر اساس گروه‌بندی‌های مختلف به روش‌های متفاوت هدف قرار می‌دهند. در این مقاله، استفاده از الگوریتم‌های خوشه‌بندی برای پشتیبانی از بازاریابی متمایز مورد بحث قرار گرفته است. بازاریابی متمایز به شرکت‌ها کمک می‌کند تا شناخت برند را بهبود بخشند، مشتریان بیشتری را جذب کنند و درآمد بیشتری کسب کنند. +موثرترین استراتژی‌های بازاریابی مشتریان را به روش‌های مختلف بر اساس گروه‌بندی‌های مختلف هدف قرار می‌دهند. در این مقاله، استفاده از الگوریتم‌های خوشه‌بندی برای حمایت از بازاریابی متمایز مورد بحث قرار گرفته است. بازاریابی متمایز به شرکت‌ها کمک می‌کند تا شناخت برند را بهبود بخشند، به مشتریان بیشتری دست یابند و درآمد بیشتری کسب کنند. [منبع](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) ## 🚀 چالش -بخش دیگری را شناسایی کنید که از برخی تکنیک‌هایی که در این دوره آموزشی یاد گرفتید بهره‌مند می‌شود و بررسی کنید که چگونه از یادگیری ماشین استفاده می‌کند. -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/50/) +یک بخش دیگر را شناسایی کنید که از برخی تکنیک‌هایی که در این دوره آموزشی آموختید بهره‌مند می‌شود و کشف کنید که چگونه از یادگیری ماشین استفاده می‌کند. +## آزمون پس از سخنرانی ## مرور و مطالعه شخصی -تیم علم داده Wayfair چندین ویدئوی جالب درباره نحوه استفاده از یادگیری ماشین در شرکت خود دارد. ارزش دارد که [نگاهی بیندازید](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! +تیم علوم داده Wayfair چندین ویدئوی جالب درباره نحوه استفاده از یادگیری ماشین در شرکت خود دارد. ارزش دارد که [نگاهی بیندازید](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! ## تکلیف @@ -156,4 +156,4 @@ MetLife، یک ارائه‌دهنده بیمه عمر، به طور شفاف د --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما برای دقت تلاش می‌کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌هایی باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، ترجمه حرفه‌ای انسانی توصیه می‌شود. ما هیچ مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/9-Real-World/2-Debugging-ML-Models/README.md b/translations/fa/9-Real-World/2-Debugging-ML-Models/README.md index 30c34b816..26b89d62f 100644 --- a/translations/fa/9-Real-World/2-Debugging-ML-Models/README.md +++ b/translations/fa/9-Real-World/2-Debugging-ML-Models/README.md @@ -1,67 +1,67 @@ # پس‌نوشت: اشکال‌زدایی مدل در یادگیری ماشین با استفاده از اجزای داشبورد هوش مصنوعی مسئولانه -## [پیش‌زمینه آزمون](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [آزمون پیش از درس](https://ff-quizzes.netlify.app/en/ml/) ## مقدمه -یادگیری ماشین بر زندگی روزمره ما تأثیر می‌گذارد. هوش مصنوعی در حال ورود به برخی از مهم‌ترین سیستم‌هایی است که بر ما به عنوان افراد و جامعه تأثیر می‌گذارند، از جمله مراقبت‌های بهداشتی، امور مالی، آموزش و اشتغال. به عنوان مثال، سیستم‌ها و مدل‌ها در وظایف تصمیم‌گیری روزانه مانند تشخیص‌های پزشکی یا شناسایی تقلب دخیل هستند. در نتیجه، پیشرفت‌های هوش مصنوعی همراه با پذیرش سریع آن با انتظارات اجتماعی در حال تحول و مقررات رو به رشد مواجه شده‌اند. ما دائماً شاهد مناطقی هستیم که سیستم‌های هوش مصنوعی همچنان از انتظارات فاصله دارند؛ چالش‌های جدیدی را آشکار می‌کنند؛ و دولت‌ها شروع به تنظیم راه‌حل‌های هوش مصنوعی کرده‌اند. بنابراین، مهم است که این مدل‌ها تحلیل شوند تا نتایج منصفانه، قابل اعتماد، فراگیر، شفاف و پاسخگو برای همه ارائه دهند. +یادگیری ماشین بر زندگی روزمره ما تأثیر می‌گذارد. هوش مصنوعی در حال ورود به برخی از مهم‌ترین سیستم‌هایی است که بر ما به عنوان افراد و جامعه تأثیر می‌گذارند، از جمله مراقبت‌های بهداشتی، امور مالی، آموزش و اشتغال. به عنوان مثال، سیستم‌ها و مدل‌ها در وظایف تصمیم‌گیری روزانه مانند تشخیص‌های پزشکی یا شناسایی تقلب دخیل هستند. در نتیجه، پیشرفت‌های هوش مصنوعی همراه با پذیرش سریع آن با انتظارات اجتماعی در حال تحول و مقررات رو به رشد مواجه شده‌اند. ما دائماً شاهد مناطقی هستیم که سیستم‌های هوش مصنوعی همچنان از انتظارات فاصله دارند؛ چالش‌های جدیدی را آشکار می‌کنند؛ و دولت‌ها شروع به تنظیم راه‌حل‌های هوش مصنوعی کرده‌اند. بنابراین، مهم است که این مدل‌ها تحلیل شوند تا نتایج منصفانه، قابل اعتماد، فراگیر، شفاف و مسئولانه برای همه ارائه دهند. -در این برنامه آموزشی، ما ابزارهای عملی را بررسی خواهیم کرد که می‌توانند برای ارزیابی اینکه آیا یک مدل دارای مسائل هوش مصنوعی مسئولانه است یا خیر، استفاده شوند. تکنیک‌های سنتی اشکال‌زدایی یادگیری ماشین معمولاً بر اساس محاسبات کمی مانند دقت تجمعی یا میانگین خطای از دست رفته هستند. تصور کنید چه اتفاقی می‌افتد وقتی داده‌هایی که برای ساخت این مدل‌ها استفاده می‌کنید فاقد برخی جمعیت‌شناسی‌ها مانند نژاد، جنسیت، دیدگاه سیاسی، مذهب یا نمایندگی نامتناسب این جمعیت‌شناسی‌ها باشد. یا زمانی که خروجی مدل به گونه‌ای تفسیر شود که به نفع برخی جمعیت‌ها باشد؟ این می‌تواند منجر به نمایندگی بیش از حد یا کم از این گروه‌های ویژگی حساس شود و در نتیجه مسائل مربوط به انصاف، فراگیری یا قابلیت اطمینان از مدل ایجاد شود. عامل دیگر این است که مدل‌های یادگیری ماشین به عنوان جعبه‌های سیاه در نظر گرفته می‌شوند، که درک و توضیح اینکه چه چیزی باعث پیش‌بینی مدل می‌شود را دشوار می‌کند. همه این‌ها چالش‌هایی هستند که دانشمندان داده و توسعه‌دهندگان هوش مصنوعی با آن‌ها مواجه می‌شوند وقتی ابزارهای کافی برای اشکال‌زدایی و ارزیابی انصاف یا قابلیت اعتماد مدل ندارند. +در این برنامه آموزشی، ما به ابزارهای عملی خواهیم پرداخت که می‌توانند برای ارزیابی اینکه آیا یک مدل دارای مسائل مربوط به هوش مصنوعی مسئولانه است یا خیر، استفاده شوند. تکنیک‌های سنتی اشکال‌زدایی یادگیری ماشین معمولاً بر اساس محاسبات کمی مانند دقت تجمعی یا میانگین خطای از دست رفته هستند. تصور کنید چه اتفاقی می‌افتد وقتی داده‌هایی که برای ساخت این مدل‌ها استفاده می‌کنید فاقد برخی جمعیت‌ها مانند نژاد، جنسیت، دیدگاه سیاسی، مذهب یا نمایندگی نامتناسب این جمعیت‌ها باشد. یا زمانی که خروجی مدل به گونه‌ای تفسیر شود که به نفع برخی جمعیت‌ها باشد؟ این می‌تواند منجر به نمایندگی بیش از حد یا کمتر از حد این گروه‌های حساس شود و در نتیجه مسائل مربوط به انصاف، فراگیری یا قابلیت اطمینان از مدل ایجاد شود. عامل دیگر این است که مدل‌های یادگیری ماشین به عنوان جعبه‌های سیاه در نظر گرفته می‌شوند، که درک و توضیح اینکه چه چیزی باعث پیش‌بینی مدل می‌شود را دشوار می‌کند. همه این‌ها چالش‌هایی هستند که دانشمندان داده و توسعه‌دهندگان هوش مصنوعی با آن مواجه می‌شوند وقتی ابزارهای کافی برای اشکال‌زدایی و ارزیابی انصاف یا قابلیت اعتماد مدل ندارند. -در این درس، شما یاد خواهید گرفت که چگونه مدل‌های خود را با استفاده از موارد زیر اشکال‌زدایی کنید: +در این درس، شما یاد خواهید گرفت که چگونه مدل‌های خود را با استفاده از: - **تحلیل خطا**: شناسایی مناطقی در توزیع داده‌های شما که مدل نرخ خطای بالایی دارد. - **نمای کلی مدل**: انجام تحلیل مقایسه‌ای در میان گروه‌های مختلف داده برای کشف تفاوت‌ها در معیارهای عملکرد مدل شما. -- **تحلیل داده‌ها**: بررسی مناطقی که ممکن است نمایندگی بیش از حد یا کم داده‌های شما وجود داشته باشد که می‌تواند مدل شما را به نفع یک جمعیت داده نسبت به دیگری منحرف کند. +- **تحلیل داده‌ها**: بررسی مناطقی که ممکن است نمایندگی بیش از حد یا کمتر از حد داده‌های شما وجود داشته باشد که می‌تواند مدل شما را به سمت ترجیح دادن یک جمعیت داده نسبت به دیگری سوق دهد. - **اهمیت ویژگی‌ها**: درک اینکه کدام ویژگی‌ها پیش‌بینی‌های مدل شما را در سطح جهانی یا محلی هدایت می‌کنند. ## پیش‌نیاز به عنوان پیش‌نیاز، لطفاً بررسی کنید [ابزارهای هوش مصنوعی مسئولانه برای توسعه‌دهندگان](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) -> ![تصویر متحرک ابزارهای هوش مصنوعی مسئولانه](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) +> ![Gif on Responsible AI Tools](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) ## تحلیل خطا -معیارهای عملکرد سنتی مدل که برای اندازه‌گیری دقت استفاده می‌شوند، عمدتاً محاسباتی بر اساس پیش‌بینی‌های درست و نادرست هستند. به عنوان مثال، تعیین اینکه یک مدل ۸۹٪ از زمان دقیق است با خطای از دست رفته ۰.۰۰۱ می‌تواند عملکرد خوبی در نظر گرفته شود. خطاها اغلب به طور یکنواخت در مجموعه داده‌های زیرین شما توزیع نمی‌شوند. ممکن است امتیاز دقت مدل ۸۹٪ دریافت کنید اما کشف کنید که مناطق مختلفی از داده‌های شما وجود دارد که مدل در ۴۲٪ از زمان شکست می‌خورد. پیامد این الگوهای شکست با گروه‌های خاص داده می‌تواند منجر به مسائل مربوط به انصاف یا قابلیت اعتماد شود. ضروری است مناطقی را که مدل عملکرد خوبی دارد یا ندارد، درک کنید. مناطقی از داده‌ها که تعداد زیادی نادرستی در مدل شما وجود دارد ممکن است به یک جمعیت داده مهم تبدیل شوند. +معیارهای عملکرد سنتی مدل که برای اندازه‌گیری دقت استفاده می‌شوند عمدتاً محاسباتی بر اساس پیش‌بینی‌های درست و نادرست هستند. به عنوان مثال، تعیین اینکه یک مدل ۸۹٪ از زمان دقیق است با خطای از دست رفته ۰.۰۰۱ می‌تواند عملکرد خوبی در نظر گرفته شود. خطاها اغلب به طور یکنواخت در مجموعه داده‌های زیرین شما توزیع نمی‌شوند. ممکن است امتیاز دقت مدل ۸۹٪ دریافت کنید اما متوجه شوید که در مناطق مختلف داده‌های شما مدل ۴۲٪ از زمان شکست می‌خورد. پیامد این الگوهای شکست با گروه‌های خاص داده می‌تواند منجر به مسائل مربوط به انصاف یا قابلیت اعتماد شود. ضروری است مناطقی را که مدل عملکرد خوبی دارد یا ندارد، درک کنید. مناطقی از داده‌ها که در آن‌ها تعداد زیادی نادرستی در مدل شما وجود دارد ممکن است به یک جمعیت داده مهم تبدیل شوند. -![تحلیل و اشکال‌زدایی خطاهای مدل](../../../../translated_images/ea-error-distribution.117452e1177c1dd84fab2369967a68bcde787c76c6ea7fdb92fcf15d1fce8206.fa.png) +![تحلیل و اشکال‌زدایی خطاهای مدل](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) -مولفه تحلیل خطا در داشبورد RAI نشان می‌دهد که چگونه شکست مدل در میان گروه‌های مختلف با یک تصویر درختی توزیع شده است. این ابزار برای شناسایی ویژگی‌ها یا مناطقی که نرخ خطای بالایی در مجموعه داده شما دارند مفید است. با مشاهده اینکه بیشتر نادرستی‌های مدل از کجا می‌آیند، می‌توانید شروع به بررسی علت اصلی کنید. همچنین می‌توانید گروه‌های داده‌ای ایجاد کنید تا تحلیل انجام دهید. این گروه‌های داده‌ای در فرآیند اشکال‌زدایی کمک می‌کنند تا مشخص شود چرا عملکرد مدل در یک گروه خوب است اما در گروه دیگر اشتباه است. +مولفه تحلیل خطا در داشبورد هوش مصنوعی مسئولانه نشان می‌دهد که چگونه شکست مدل در میان گروه‌های مختلف با یک تصویر درختی توزیع شده است. این ابزار برای شناسایی ویژگی‌ها یا مناطقی که نرخ خطای بالایی در مجموعه داده شما دارند مفید است. با مشاهده اینکه بیشتر نادرستی‌های مدل از کجا می‌آیند، می‌توانید شروع به بررسی علت اصلی کنید. همچنین می‌توانید گروه‌های داده‌ای ایجاد کنید تا تحلیل انجام دهید. این گروه‌های داده‌ای در فرآیند اشکال‌زدایی کمک می‌کنند تا مشخص شود چرا عملکرد مدل در یک گروه خوب است اما در گروه دیگر اشتباه است. -![تحلیل خطا](../../../../translated_images/ea-error-cohort.6886209ea5d438c4daa8bfbf5ce3a7042586364dd3eccda4a4e3d05623ac702a.fa.png) +![تحلیل خطا](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) -شاخص‌های بصری در نقشه درختی به یافتن سریع‌تر مناطق مشکل کمک می‌کنند. به عنوان مثال، هرچه سایه قرمز تیره‌تر یک گره درختی باشد، نرخ خطا بالاتر است. +شاخص‌های بصری در نقشه درختی به یافتن سریع‌تر مناطق مشکل کمک می‌کنند. به عنوان مثال، هرچه سایه قرمز یک گره درختی تیره‌تر باشد، نرخ خطا بالاتر است. -نقشه حرارتی یکی دیگر از قابلیت‌های تصویری است که کاربران می‌توانند از آن برای بررسی نرخ خطا با استفاده از یک یا دو ویژگی برای یافتن عوامل مؤثر بر خطاهای مدل در کل مجموعه داده یا گروه‌ها استفاده کنند. +نقشه حرارتی یکی دیگر از قابلیت‌های تصویری است که کاربران می‌توانند برای بررسی نرخ خطا با استفاده از یک یا دو ویژگی برای یافتن عوامل مؤثر بر خطاهای مدل در سراسر مجموعه داده یا گروه‌ها استفاده کنند. -![نقشه حرارتی تحلیل خطا](../../../../translated_images/ea-heatmap.8d27185e28cee3830c85e1b2e9df9d2d5e5c8c940f41678efdb68753f2f7e56c.fa.png) +![نقشه حرارتی تحلیل خطا](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) از تحلیل خطا استفاده کنید وقتی که نیاز دارید: -* درک عمیقی از نحوه توزیع شکست‌های مدل در یک مجموعه داده و در میان چندین ابعاد ورودی و ویژگی کسب کنید. -* معیارهای عملکرد تجمعی را تجزیه کنید تا گروه‌های اشتباه را به طور خودکار کشف کنید و مراحل کاهش هدفمند خود را اطلاع دهید. +* درک عمیقی از نحوه توزیع شکست‌های مدل در یک مجموعه داده و در میان چندین ابعاد ورودی و ویژگی داشته باشید. +* معیارهای عملکرد تجمعی را تجزیه کنید تا گروه‌های خطا را به طور خودکار کشف کنید و مراحل کاهش هدفمند خود را اطلاع دهید. ## نمای کلی مدل -ارزیابی عملکرد یک مدل یادگیری ماشین نیازمند درک جامع از رفتار آن است. این امر با بررسی بیش از یک معیار مانند نرخ خطا، دقت، یادآوری، دقت یا MAE (میانگین خطای مطلق) برای یافتن تفاوت‌ها در میان معیارهای عملکرد قابل دستیابی است. یک معیار عملکرد ممکن است عالی به نظر برسد، اما نادرستی‌ها می‌توانند در معیار دیگری آشکار شوند. علاوه بر این، مقایسه معیارها برای تفاوت‌ها در کل مجموعه داده یا گروه‌ها به روشن شدن مناطقی که مدل عملکرد خوبی دارد یا ندارد کمک می‌کند. این امر به ویژه در مشاهده عملکرد مدل در میان ویژگی‌های حساس در مقابل ویژگی‌های غیرحساس (مانند نژاد بیمار، جنسیت یا سن) برای کشف احتمالی نابرابری مدل مهم است. به عنوان مثال، کشف اینکه مدل در گروهی که ویژگی‌های حساس دارد بیشتر اشتباه می‌کند می‌تواند نابرابری احتمالی مدل را آشکار کند. +ارزیابی عملکرد یک مدل یادگیری ماشین نیازمند درک جامع از رفتار آن است. این امر با بررسی بیش از یک معیار مانند نرخ خطا، دقت، یادآوری، دقت یا MAE (میانگین خطای مطلق) برای یافتن تفاوت‌ها در میان معیارهای عملکرد قابل دستیابی است. یک معیار عملکرد ممکن است عالی به نظر برسد، اما نادرستی‌ها می‌توانند در معیار دیگری آشکار شوند. علاوه بر این، مقایسه معیارها برای یافتن تفاوت‌ها در سراسر مجموعه داده یا گروه‌ها به روشن شدن مناطقی که مدل عملکرد خوبی دارد یا ندارد کمک می‌کند. این امر به ویژه در مشاهده عملکرد مدل در میان ویژگی‌های حساس و غیرحساس (مانند نژاد بیمار، جنسیت یا سن) برای کشف احتمالی نابرابری مدل اهمیت دارد. به عنوان مثال، کشف اینکه مدل در گروهی که ویژگی‌های حساس دارد بیشتر اشتباه می‌کند می‌تواند نابرابری احتمالی مدل را آشکار کند. -مولفه نمای کلی مدل در داشبورد RAI نه تنها در تحلیل معیارهای عملکرد نمایندگی داده در یک گروه کمک می‌کند، بلکه به کاربران امکان مقایسه رفتار مدل در میان گروه‌های مختلف را می‌دهد. +مولفه نمای کلی مدل در داشبورد هوش مصنوعی مسئولانه نه تنها در تحلیل معیارهای عملکرد نمایندگی داده‌ها در یک گروه کمک می‌کند، بلکه به کاربران امکان مقایسه رفتار مدل در میان گروه‌های مختلف را می‌دهد. -![گروه‌های مجموعه داده - نمای کلی مدل در داشبورد RAI](../../../../translated_images/model-overview-dataset-cohorts.dfa463fb527a35a0afc01b7b012fc87bf2cad756763f3652bbd810cac5d6cf33.fa.png) +![گروه‌های داده - نمای کلی مدل در داشبورد هوش مصنوعی مسئولانه](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) -قابلیت تحلیل مبتنی بر ویژگی این مولفه به کاربران امکان می‌دهد گروه‌های داده‌ای را در یک ویژگی خاص محدود کنند تا ناهنجاری‌ها را در سطح جزئی شناسایی کنند. به عنوان مثال، داشبورد دارای هوش داخلی برای تولید خودکار گروه‌ها برای ویژگی انتخاب‌شده توسط کاربر (مانند *"زمان در بیمارستان < ۳"* یا *"زمان در بیمارستان >= ۷"*) است. این امر به کاربر امکان می‌دهد یک ویژگی خاص را از یک گروه داده بزرگ‌تر جدا کند تا ببیند آیا این ویژگی یک عامل کلیدی در نتایج اشتباه مدل است. +قابلیت تحلیل مبتنی بر ویژگی این مولفه به کاربران امکان می‌دهد زیرگروه‌های داده‌ای را در یک ویژگی خاص محدود کنند تا ناهنجاری‌ها را در سطح جزئی شناسایی کنند. به عنوان مثال، داشبورد دارای هوش داخلی است که به طور خودکار گروه‌هایی را برای ویژگی انتخاب‌شده توسط کاربر (مانند *"زمان در بیمارستان < ۳"* یا *"زمان در بیمارستان >= ۷"*) ایجاد می‌کند. این امر به کاربر امکان می‌دهد یک ویژگی خاص را از یک گروه داده بزرگ‌تر جدا کند تا ببیند آیا این ویژگی یک عامل کلیدی در نتایج نادرست مدل است. -![گروه‌های ویژگی - نمای کلی مدل در داشبورد RAI](../../../../translated_images/model-overview-feature-cohorts.c5104d575ffd0c80b7ad8ede7703fab6166bfc6f9125dd395dcc4ace2f522f70.fa.png) +![گروه‌های ویژگی - نمای کلی مدل در داشبورد هوش مصنوعی مسئولانه](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) مولفه نمای کلی مدل از دو کلاس معیارهای تفاوت پشتیبانی می‌کند: @@ -79,39 +79,39 @@ CO_OP_TRANSLATOR_METADATA: > "اگر داده‌ها را به اندازه کافی شکنجه کنید، به هر چیزی اعتراف خواهند کرد" - رونالد کوز -این جمله ممکن است افراطی به نظر برسد، اما واقعیت این است که داده‌ها می‌توانند دستکاری شوند تا هر نتیجه‌ای را پشتیبانی کنند. چنین دستکاری گاهی اوقات به طور غیرعمدی اتفاق می‌افتد. به عنوان انسان، همه ما تعصب داریم و اغلب دشوار است که آگاهانه بدانیم چه زمانی در داده‌ها تعصب وارد می‌کنیم. تضمین انصاف در هوش مصنوعی و یادگیری ماشین همچنان یک چالش پیچیده است. +این جمله ممکن است افراطی به نظر برسد، اما واقعیت این است که داده‌ها می‌توانند دستکاری شوند تا هر نتیجه‌ای را حمایت کنند. چنین دستکاری گاهی اوقات به طور غیرعمدی اتفاق می‌افتد. به عنوان انسان، همه ما تعصب داریم و اغلب دشوار است که آگاهانه بدانیم چه زمانی در داده‌ها تعصب وارد می‌کنیم. تضمین انصاف در هوش مصنوعی و یادگیری ماشین همچنان یک چالش پیچیده است. -داده‌ها یک نقطه کور بزرگ برای معیارهای عملکرد سنتی مدل هستند. ممکن است امتیازات دقت بالایی داشته باشید، اما این همیشه تعصب داده‌های زیرین که ممکن است در مجموعه داده شما باشد را منعکس نمی‌کند. به عنوان مثال، اگر مجموعه داده‌ای از کارکنان دارای ۲۷٪ زنان در موقعیت‌های اجرایی در یک شرکت و ۷۳٪ مردان در همان سطح باشد، یک مدل تبلیغاتی شغلی هوش مصنوعی که بر اساس این داده‌ها آموزش دیده است ممکن است عمدتاً مخاطبان مرد را برای موقعیت‌های شغلی سطح بالا هدف قرار دهد. داشتن این عدم تعادل در داده‌ها پیش‌بینی مدل را به نفع یک جنسیت منحرف کرد. این نشان‌دهنده یک مسئله انصاف است که در آن تعصب جنسیتی در مدل هوش مصنوعی وجود دارد. +داده‌ها یک نقطه کور بزرگ برای معیارهای عملکرد سنتی مدل هستند. ممکن است امتیازات دقت بالایی داشته باشید، اما این همیشه تعصب داده‌های زیرین که ممکن است در مجموعه داده شما باشد را منعکس نمی‌کند. به عنوان مثال، اگر مجموعه داده‌ای از کارکنان دارای ۲۷٪ زنان در موقعیت‌های اجرایی در یک شرکت و ۷۳٪ مردان در همان سطح باشد، یک مدل تبلیغاتی شغلی هوش مصنوعی که بر اساس این داده‌ها آموزش دیده است ممکن است عمدتاً مخاطبان مرد را برای موقعیت‌های شغلی سطح بالا هدف قرار دهد. داشتن این عدم تعادل در داده‌ها پیش‌بینی مدل را به سمت ترجیح دادن یک جنسیت سوق داده است. این مسئله انصاف را آشکار می‌کند که در آن تعصب جنسیتی در مدل هوش مصنوعی وجود دارد. -مولفه تحلیل داده‌ها در داشبورد RAI به شناسایی مناطقی که در آن‌ها نمایندگی بیش از حد و کم در مجموعه داده وجود دارد کمک می‌کند. این ابزار به کاربران کمک می‌کند علت اصلی خطاها و مسائل انصاف ناشی از عدم تعادل داده‌ها یا عدم نمایندگی یک گروه داده خاص را تشخیص دهند. این ابزار به کاربران امکان می‌دهد مجموعه داده‌ها را بر اساس نتایج پیش‌بینی‌شده و واقعی، گروه‌های خطا و ویژگی‌های خاص تجسم کنند. گاهی اوقات کشف یک گروه داده کم‌نمایندگی می‌تواند نشان دهد که مدل به خوبی یاد نمی‌گیرد، بنابراین نادرستی‌های بالا وجود دارد. داشتن مدلی که تعصب داده دارد نه تنها یک مسئله انصاف است بلکه نشان می‌دهد که مدل فراگیر یا قابل اعتماد نیست. +مولفه تحلیل داده‌ها در داشبورد هوش مصنوعی مسئولانه به شناسایی مناطقی که در آن‌ها نمایندگی بیش از حد و کمتر از حد در مجموعه داده وجود دارد کمک می‌کند. این ابزار به کاربران کمک می‌کند علت اصلی خطاها و مسائل انصاف ناشی از عدم تعادل داده‌ها یا عدم نمایندگی یک گروه داده خاص را تشخیص دهند. این ابزار به کاربران امکان می‌دهد مجموعه داده‌ها را بر اساس نتایج پیش‌بینی‌شده و واقعی، گروه‌های خطا و ویژگی‌های خاص تجسم کنند. گاهی اوقات کشف یک گروه داده کمتر نمایندگی‌شده می‌تواند نشان دهد که مدل به خوبی یاد نمی‌گیرد، بنابراین نادرستی‌های بالا وجود دارد. داشتن مدلی که تعصب داده دارد نه تنها یک مسئله انصاف است بلکه نشان می‌دهد که مدل فراگیر یا قابل اعتماد نیست. -![مولفه تحلیل داده‌ها در داشبورد RAI](../../../../translated_images/dataanalysis-cover.8d6d0683a70a5c1e274e5a94b27a71137e3d0a3b707761d7170eb340dd07f11d.fa.png) +![مولفه تحلیل داده‌ها در داشبورد هوش مصنوعی مسئولانه](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) از تحلیل داده‌ها استفاده کنید وقتی که نیاز دارید: * آمار مجموعه داده خود را با انتخاب فیلترهای مختلف برای تقسیم داده‌های خود به ابعاد مختلف (که به عنوان گروه‌ها نیز شناخته می‌شوند) بررسی کنید. * توزیع مجموعه داده خود را در میان گروه‌ها و ویژگی‌های مختلف درک کنید. -* تعیین کنید که آیا یافته‌های شما مربوط به انصاف، تحلیل خطا و علیت (مشتق‌شده از سایر مولفه‌های داشبورد) نتیجه توزیع مجموعه داده شما است یا خیر. +* تعیین کنید که آیا یافته‌های شما مربوط به انصاف، تحلیل خطا و علیت (مشتق شده از سایر مولفه‌های داشبورد) نتیجه توزیع مجموعه داده شما هستند یا خیر. * تصمیم بگیرید که در کدام مناطق داده بیشتری جمع‌آوری کنید تا خطاهایی که از مسائل نمایندگی، نویز برچسب، نویز ویژگی، تعصب برچسب و عوامل مشابه ناشی می‌شوند را کاهش دهید. ## تفسیر مدل -مدل‌های یادگیری ماشین تمایل دارند جعبه‌های سیاه باشند. درک اینکه کدام ویژگی‌های کلیدی داده‌ها پیش‌بینی مدل را هدایت می‌کنند می‌تواند چالش‌برانگیز باشد. مهم است که شفافیت ارائه شود که چرا یک مدل یک پیش‌بینی خاص انجام می‌دهد. به عنوان مثال، اگر یک سیستم هوش مصنوعی پیش‌بینی کند که یک بیمار دیابتی در معرض خطر بازگشت به بیمارستان در کمتر از ۳۰ روز است، باید بتواند داده‌های پشتیبانی‌کننده‌ای که منجر به پیش‌بینی آن شده است را ارائه دهد. داشتن شاخص‌های داده پشتیبانی‌کننده شفافیت را به ارمغان می‌آورد تا به پزشکان یا بیمارستان‌ها کمک کند تصمیمات آگاهانه بگیرند. علاوه بر این، توانایی توضیح اینکه چرا یک مدل برای یک بیمار خاص پیش‌بینی کرده است، مسئولیت‌پذیری با مقررات بهداشتی را امکان‌پذیر می‌کند. وقتی از مدل‌های یادگیری ماشین به روش‌هایی استفاده می‌کنید که بر زندگی افراد تأثیر می‌گذارد، ضروری است که درک کنید و توضیح دهید چه چیزی رفتار مدل را تحت تأثیر قرار می‌دهد. قابلیت توضیح و تفسیر مدل به پاسخ دادن به سوالات در سناریوهایی مانند موارد زیر کمک می‌کند: +مدل‌های یادگیری ماشین تمایل دارند جعبه‌های سیاه باشند. درک اینکه کدام ویژگی‌های کلیدی داده‌ها پیش‌بینی مدل را هدایت می‌کنند می‌تواند چالش‌برانگیز باشد. مهم است که شفافیت ارائه شود که چرا یک مدل یک پیش‌بینی خاص انجام می‌دهد. به عنوان مثال، اگر یک سیستم هوش مصنوعی پیش‌بینی کند که یک بیمار دیابتی در معرض خطر بازگشت به بیمارستان در کمتر از ۳۰ روز است، باید بتواند داده‌های پشتیبانی‌کننده‌ای که منجر به پیش‌بینی آن شده است را ارائه دهد. داشتن شاخص‌های داده پشتیبانی‌کننده شفافیت را به ارمغان می‌آورد تا به پزشکان یا بیمارستان‌ها کمک کند تصمیمات آگاهانه‌ای بگیرند. علاوه بر این، توانایی توضیح اینکه چرا یک مدل برای یک بیمار خاص پیش‌بینی کرده است، مسئولیت‌پذیری با مقررات بهداشتی را امکان‌پذیر می‌کند. وقتی از مدل‌های یادگیری ماشین به روش‌هایی استفاده می‌کنید که بر زندگی افراد تأثیر می‌گذارد، ضروری است که درک کنید و توضیح دهید چه چیزی رفتار مدل را تحت تأثیر قرار می‌دهد. قابلیت توضیح و تفسیر مدل به پاسخ دادن به سوالات در سناریوهایی مانند: * اشکال‌زدایی مدل: چرا مدل من این اشتباه را انجام داد؟ چگونه می‌توانم مدل خود را بهبود دهم؟ -* همکاری انسان-هوش مصنوعی: چگونه می‌توانم تصمیمات مدل را درک کنم و به آن‌ها اعتماد کنم؟ +* همکاری انسان-هوش مصنوعی: چگونه می‌توانم تصمیمات مدل را درک کنم و به آن اعتماد کنم؟ * رعایت مقررات: آیا مدل من الزامات قانونی را برآورده می‌کند؟ -مولفه اهمیت ویژگی‌ها در داشبورد RAI به شما کمک می‌کند تا اشکال‌زدایی کنید و درک جامعی از نحوه پیش‌بینی مدل داشته باشید. این ابزار همچنین برای حرفه‌ای‌های یادگیری ماشین و تصمیم‌گیرندگان مفید است تا توضیح دهند و شواهدی از ویژگی‌هایی که رفتار مدل را تحت تأثیر قرار می‌دهند برای رعایت مقررات ارائه دهند. سپس کاربران می‌توانند توضیحات جهانی و محلی را بررسی کنند تا تأیید کنند کدام ویژگی‌ها پیش‌بینی مدل را هدایت می‌کنند. توضیحات جهانی لیست ویژگی‌های برتر را که بر پیش‌بینی کلی مدل تأثیر گذاشته‌اند، نمایش می‌دهند. توضیحات محلی نشان می‌دهند که کدام ویژگی‌ها منجر به پیش‌بینی مدل برای یک مورد خاص شده‌اند. توانایی ارزیابی توضیحات محلی نیز در اشکال‌زدایی یا ممیزی یک مورد خاص برای درک بهتر و تفسیر اینکه چرا مدل یک پیش‌بینی دقیق یا نادرست انجام داده است، مفید است. +مولفه اهمیت ویژگی‌ها در داشبورد هوش مصنوعی مسئولانه به شما کمک می‌کند تا اشکال‌زدایی کنید و درک جامعی از نحوه پیش‌بینی مدل داشته باشید. این ابزار همچنین برای متخصصان یادگیری ماشین و تصمیم‌گیرندگان مفید است تا توضیح دهند و شواهدی از ویژگی‌هایی که رفتار مدل را تحت تأثیر قرار می‌دهند برای رعایت مقررات ارائه دهند. سپس کاربران می‌توانند توضیحات جهانی و محلی را بررسی کنند تا تأیید کنند کدام ویژگی‌ها پیش‌بینی مدل را هدایت می‌کنند. توضیحات جهانی لیست ویژگی‌های برتر را که بر پیش‌بینی کلی مدل تأثیر گذاشته‌اند، نمایش می‌دهند. توضیحات محلی نشان می‌دهند که کدام ویژگی‌ها منجر به پیش‌بینی مدل برای یک مورد خاص شده‌اند. توانایی ارزیابی توضیحات محلی نیز در اشکال‌زدایی یا ممیزی یک مورد خاص برای درک بهتر و تفسیر اینکه چرا مدل یک پیش‌بینی دقیق یا نادرست انجام داده است، مفید است. -![مولفه اهمیت ویژگی‌ها در داشبورد RAI](../../../../translated_images/9-feature-importance.cd3193b4bba3fd4bccd415f566c2437fb3298c4824a3dabbcab15270d783606e.fa.png) +![مولفه اهمیت ویژگی‌ها در داشبورد هوش مصنوعی مسئولانه](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) * توضیحات جهانی: به عنوان مثال، چه ویژگی‌هایی بر رفتار کلی مدل بازگشت بیمار دیابتی به بیمارستان تأثیر می‌گذارند؟ * توضیحات محلی: به عنوان مثال، چرا یک بیمار دیابتی بالای ۶۰ سال با بستری‌های قبلی پیش‌بینی شده است که در کمتر از ۳۰ روز به بیمارستان بازگردد یا بازنگردد؟ -در فرآیند اشکال‌زدایی عملکرد مدل در میان گروه‌های مختلف، اهمیت ویژگی‌ها نشان می‌دهد که یک ویژگی در میان گروه‌ها چه سطحی از تأثیر دارد. این ابزار به آشکار کردن ناهنجاری‌ها هنگام مقایسه سطح تأثیر ویژگی در هدایت پیش‌بینی‌های اشتباه مدل کمک می‌کند. مولفه اهمیت ویژگی‌ها می‌تواند نشان دهد که کدام مقادیر در یک ویژگی به طور مثبت یا منفی بر نتیجه مدل تأثیر گذاشته‌اند. به عنوان مثال، اگر یک مدل یک پیش‌بینی نادرست انجام داده باشد، این مولفه به شما امکان می‌دهد تا جزئیات را بررسی کنید و مشخص کنید کدام ویژگی‌ها یا مقادیر ویژگی‌ها پیش‌بینی را هدایت کرده‌اند. این سطح از جزئیات نه تنها در اشکال‌زدایی کمک می‌کند بلکه شفافیت و مسئولیت‌پذیری را در موقعیت‌های ممیزی فراهم می‌کند. در نهایت، این مولفه می‌تواند به شناسایی مسائل انصاف کمک کند. برای مثال، اگر یک ویژگی حساس مانند قومیت یا جنسیت به شدت در هدایت پیش‌بینی مدل تأثیرگذار باشد، این می‌تواند نشانه‌ای از تعصب نژادی یا جنسیتی در مدل باشد. +در فرآیند اشکال‌زدایی عملکرد مدل در میان گروه‌های مختلف، اهمیت ویژگی‌ها نشان می‌دهد که یک ویژگی در میان گروه‌ها چه سطحی از تأثیر دارد. این ابزار به آشکار کردن ناهنجاری‌ها هنگام مقایسه سطح تأثیر ویژگی در هدایت پیش‌بینی‌های نادرست مدل کمک می‌کند. مولفه اهمیت ویژگی‌ها می‌تواند نشان دهد که کدام مقادیر در یک ویژگی به طور مثبت یا منفی بر نتیجه مدل تأثیر گذاشته‌اند. به عنوان مثال، اگر یک مدل پیش‌بینی نادرستی انجام داده باشد، این مولفه به شما امکان می‌دهد تا به جزئیات بپردازید و مشخص کنید کدام ویژگی‌ها یا مقادیر ویژگی‌ها پیش‌بینی را هدایت کرده‌اند. این سطح از جزئیات نه تنها در اشکال‌زدایی کمک می‌کند بلکه شفافیت و مسئولیت‌پذیری را در موقعیت‌های ممیزی فراهم می‌کند. در نهایت، این مولفه می‌تواند به شناسایی مسائل انصاف کمک کند. برای مثال، اگر یک ویژگی حساس مانند قومیت یا جنسیت تأثیر زیادی در هدایت پیش‌بینی مدل داشته باشد، این می‌تواند نشانه‌ای از تعصب نژادی یا جنسیتی در مدل باشد. -![اهمیت ویژگی‌ها](../../../../translated_images/9-features-influence.3ead3d3f68a84029f1e40d3eba82107445d3d3b6975d4682b23d8acc905da6d0.fa.png) +![اهمیت ویژگی‌ها](../../../../9-Real-World/2-Debugging-ML-Models/images/9-features-influence.png) از تفسیر مدل استفاده کنید وقتی که نیاز دارید: @@ -119,36 +119,36 @@ CO_OP_TRANSLATOR_METADATA: * به اشکال‌زدایی مدل خود نزدیک شوید با درک آن ابتدا و شناسایی اینکه آیا مدل از ویژگی‌های سالم استفاده می‌کند یا صرفاً همبستگی‌های نادرست. * منابع احتمالی نابرابری را کشف کنید با درک اینکه آیا مدل پیش‌بینی‌ها را بر اساس ویژگی‌های حساس یا ویژگی‌هایی که به شدت با آن‌ها مرتبط هستند، انجام می‌دهد. * اعتماد کاربران به تصمیمات مدل خود را با تولید توضیحات محلی برای نشان دادن نتایج آن‌ها ایجاد کنید. -* یک ممیزی مقرراتی از یک سیستم هوش مصنوعی را تکمیل کنید تا مدل‌ها را تأیید کنید و تأثیر تصمیمات مدل بر انسان‌ها را نظارت کنید. +* ممیزی مقرراتی یک سیستم هوش مصنوعی را کامل کنید تا مدل‌ها را اعتبارسنجی کنید و تأثیر تصمیمات مدل بر انسان‌ها را نظارت کنید. ## نتیجه‌گیری -تمام مولفه‌های داشبورد RAI ابزارهای عملی هستند که به شما کمک می‌کنند مدل‌های یادگیری ماشین بسازید که کمتر مضر و قابل اعتمادتر برای جامعه باشند. این ابزارها به پیشگیری از تهدیدات به حقوق بشر، تبعیض یا حذف گروه‌های خاص از فرصت‌های زندگی، و خطر آسیب جسمی یا روانی کمک می‌کنند. همچنین به ایجاد اعتماد در تصمیمات مدل شما کمک می‌کنند با تولید توضیحات محلی برای نشان دادن نتایج آن‌ها. برخی از آسیب‌های احتمالی را -- **نمایش بیش از حد یا کمتر از حد**. ایده این است که یک گروه خاص در یک حرفه خاص دیده نمی‌شود و هر خدمت یا عملکردی که به ترویج این وضعیت ادامه دهد، به آسیب رساندن کمک می‌کند. +همه مولفه‌های داشبورد هوش مصنوعی مسئولانه ابزارهای عملی هستند که به شما کمک می‌کنند مدل‌های یادگیری ماشین بسازید که کمتر مضر و قابل اعتمادتر برای جامعه باشند. این ابزارها به پیشگیری از تهدیدات به حقوق بشر، تبعیض یا حذف گروه‌های خاص از فرصت‌های زندگی، و خطر آسیب جسمی یا روانی کمک می‌کنند. همچنین به ایجاد اعتماد در تصمیمات مدل شما کمک می‌کنند با تولید توضیحات محلی برای نشان دادن نتایج آن‌ها. برخی از +- **نمایش بیش از حد یا کمتر از حد**. ایده این است که یک گروه خاص در یک حرفه خاص دیده نمی‌شود و هر خدمات یا عملکردی که به ترویج این وضعیت ادامه دهد، به آسیب رساندن کمک می‌کند. ### داشبورد RAI در Azure -[داشبورد RAI در Azure](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) بر اساس ابزارهای متن‌باز توسعه‌یافته توسط مؤسسات و سازمان‌های برجسته علمی، از جمله مایکروسافت، ساخته شده است. این ابزارها برای دانشمندان داده و توسعه‌دهندگان هوش مصنوعی بسیار مفید هستند تا رفتار مدل را بهتر درک کنند، مشکلات نامطلوب را شناسایی کرده و کاهش دهند. +[داشبورد RAI در Azure](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) بر اساس ابزارهای متن‌باز توسعه‌یافته توسط مؤسسات و سازمان‌های برجسته علمی، از جمله مایکروسافت، ساخته شده است. این ابزارها برای دانشمندان داده و توسعه‌دهندگان هوش مصنوعی بسیار مفید هستند تا رفتار مدل را بهتر درک کنند، مشکلات نامطلوب را کشف کنند و آن‌ها را کاهش دهند. - برای یادگیری نحوه استفاده از اجزای مختلف، به [مستندات داشبورد RAI](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) مراجعه کنید. -- برخی از [دفترچه‌های نمونه داشبورد RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) را بررسی کنید تا سناریوهای مسئولانه‌تر هوش مصنوعی را در Azure Machine Learning دیباگ کنید. +- برخی از [دفترچه‌های نمونه داشبورد RAI](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) را بررسی کنید تا سناریوهای مسئولانه‌تر هوش مصنوعی را در Azure Machine Learning اشکال‌زدایی کنید. --- ## 🚀 چالش برای جلوگیری از ورود تعصبات آماری یا داده‌ای از ابتدا، باید: -- تنوع در پیشینه‌ها و دیدگاه‌ها در میان افرادی که روی سیستم‌ها کار می‌کنند داشته باشیم -- در مجموعه داده‌هایی سرمایه‌گذاری کنیم که تنوع جامعه ما را منعکس کنند -- روش‌های بهتری برای شناسایی و اصلاح تعصب زمانی که رخ می‌دهد توسعه دهیم +- تنوع در پیشینه‌ها و دیدگاه‌ها در میان افرادی که روی سیستم‌ها کار می‌کنند داشته باشیم +- در مجموعه داده‌هایی که تنوع جامعه ما را منعکس می‌کنند سرمایه‌گذاری کنیم +- روش‌های بهتری برای شناسایی و اصلاح تعصب زمانی که رخ می‌دهد توسعه دهیم به سناریوهای واقعی فکر کنید که در آن‌ها ناعادلانه بودن در ساخت و استفاده از مدل‌ها مشهود است. چه موارد دیگری باید در نظر گرفته شود؟ -## [آزمون پس از درس](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) +## [آزمون پس از درس](https://ff-quizzes.netlify.app/en/ml/) ## مرور و مطالعه شخصی -در این درس، برخی از ابزارهای عملی برای ادغام هوش مصنوعی مسئولانه در یادگیری ماشین را آموختید. +در این درس، برخی از ابزارهای عملی برای ادغام هوش مصنوعی مسئولانه در یادگیری ماشین را یاد گرفتید. این کارگاه را تماشا کنید تا عمیق‌تر به موضوعات بپردازید: @@ -160,9 +160,9 @@ CO_OP_TRANSLATOR_METADATA: برای یادگیری بیشتر درباره هوش مصنوعی مسئولانه و نحوه ساخت مدل‌های قابل اعتمادتر، به منابع زیر مراجعه کنید: -- ابزارهای داشبورد RAI مایکروسافت برای دیباگ مدل‌های یادگیری ماشین: [منابع ابزارهای هوش مصنوعی مسئولانه](https://aka.ms/rai-dashboard) +- ابزارهای داشبورد RAI مایکروسافت برای اشکال‌زدایی مدل‌های یادگیری ماشین: [منابع ابزارهای هوش مصنوعی مسئولانه](https://aka.ms/rai-dashboard) -- ابزارهای هوش مصنوعی مسئولانه را بررسی کنید: [گیت‌هاب](https://github.com/microsoft/responsible-ai-toolbox) +- ابزارک هوش مصنوعی مسئولانه را بررسی کنید: [گیت‌هاب](https://github.com/microsoft/responsible-ai-toolbox) - مرکز منابع RAI مایکروسافت: [منابع هوش مصنوعی مسئولانه – مایکروسافت AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) @@ -175,4 +175,4 @@ CO_OP_TRANSLATOR_METADATA: --- **سلب مسئولیت**: -این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوءتفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file +این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم. \ No newline at end of file diff --git a/translations/fa/README.md b/translations/fa/README.md index e8d9242a7..1ff26afd0 100644 --- a/translations/fa/README.md +++ b/translations/fa/README.md @@ -1,8 +1,8 @@ +# Johdatus koneoppimiseen + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML aloittelijoille - Johdatus koneoppimiseen aloittelijoille](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML aloittelijoille - Johdatus koneoppimiseen aloittelijoille") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi, jossa käydään läpi tämän oppitunnin sisältöä. + +Tervetuloa tähän klassisen koneoppimisen kurssiin aloittelijoille! Olitpa täysin uusi tämän aiheen parissa tai kokenut koneoppimisen ammattilainen, joka haluaa kerrata tiettyjä osa-alueita, olemme iloisia, että liityit mukaan! Haluamme luoda ystävällisen lähtökohdan koneoppimisen opiskelullesi ja otamme mielellämme vastaan [palautettasi](https://github.com/microsoft/ML-For-Beginners/discussions). + +[![Johdatus koneoppimiseen](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Johdatus koneoppimiseen") + +> 🎥 Klikkaa yllä olevaa kuvaa videon katsomiseksi: MIT:n John Guttag esittelee koneoppimista + +--- +## Koneoppimisen aloittaminen + +Ennen kuin aloitat tämän kurssin, sinun tulee varmistaa, että tietokoneesi on valmis ajamaan muistikirjoja paikallisesti. + +- **Konfiguroi koneesi näiden videoiden avulla**. Käytä seuraavia linkkejä oppiaksesi [Pythonin asentamisen](https://youtu.be/CXZYvNRIAKM) järjestelmääsi ja [tekstieditorin asettamisen](https://youtu.be/EU8eayHWoZg) kehitystä varten. +- **Opiskele Pythonia**. On myös suositeltavaa, että sinulla on perustiedot [Pythonista](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott), ohjelmointikielestä, joka on hyödyllinen datatieteilijöille ja jota käytämme tässä kurssissa. +- **Opiskele Node.js ja JavaScript**. Käytämme JavaScriptiä muutaman kerran tässä kurssissa web-sovellusten rakentamiseen, joten sinun tulee asentaa [node](https://nodejs.org) ja [npm](https://www.npmjs.com/), sekä [Visual Studio Code](https://code.visualstudio.com/) Python- ja JavaScript-kehitystä varten. +- **Luo GitHub-tili**. Koska löysit meidät [GitHubista](https://github.com), sinulla saattaa jo olla tili, mutta jos ei, luo sellainen ja haarauta tämä kurssi omaan käyttöösi. (Voit myös antaa meille tähden 😊) +- **Tutustu Scikit-learniin**. Perehdy [Scikit-learniin](https://scikit-learn.org/stable/user_guide.html), koneoppimiskirjastoon, jota käytämme näissä oppitunneissa. + +--- +## Mitä koneoppiminen on? + +Termi 'koneoppiminen' on yksi nykyajan suosituimmista ja eniten käytetyistä termeistä. On melko todennäköistä, että olet kuullut tämän termin ainakin kerran, jos sinulla on jonkinlaista teknologiaan liittyvää taustaa, riippumatta siitä, millä alalla työskentelet. Koneoppimisen mekanismit ovat kuitenkin mysteeri monille. Koneoppimisen aloittelijalle aihe voi joskus tuntua ylivoimaiselta. Siksi on tärkeää ymmärtää, mitä koneoppiminen oikeasti on, ja oppia siitä askel kerrallaan käytännön esimerkkien avulla. + +--- +## Hype-käyrä + +![ml hype curve](../../../../1-Introduction/1-intro-to-ML/images/hype.png) + +> Google Trends näyttää termin 'koneoppiminen' viimeaikaisen hype-käyrän + +--- +## Mysteerien täyttämä universumi + +Elämme universumissa, joka on täynnä kiehtovia mysteerejä. Suuret tiedemiehet, kuten Stephen Hawking, Albert Einstein ja monet muut, ovat omistaneet elämänsä merkityksellisen tiedon etsimiseen, joka paljastaa ympäröivän maailman mysteerejä. Tämä on ihmisen oppimisen perusta: ihmislapsi oppii uusia asioita ja paljastaa maailmansa rakenteen vuosi vuodelta kasvaessaan aikuiseksi. + +--- +## Lapsen aivot + +Lapsen aivot ja aistit havaitsevat ympäristönsä tosiasiat ja oppivat vähitellen elämän piilotettuja kaavoja, jotka auttavat lasta luomaan loogisia sääntöjä tunnistamaan opittuja kaavoja. Ihmisaivojen oppimisprosessi tekee ihmisistä tämän maailman kehittyneimmän elävän olennon. Jatkuva oppiminen piilotettujen kaavojen löytämisen kautta ja niiden innovointi mahdollistaa meille itsensä kehittämisen läpi elämän. Tämä oppimiskyky ja kehittymiskyky liittyvät käsitteeseen nimeltä [aivojen plastisuus](https://www.simplypsychology.org/brain-plasticity.html). Pintapuolisesti voimme nähdä joitakin motivoivia yhtäläisyyksiä ihmisaivojen oppimisprosessin ja koneoppimisen käsitteiden välillä. + +--- +## Ihmisaivot + +[Ihmisaivot](https://www.livescience.com/29365-human-brain.html) havaitsevat asioita todellisesta maailmasta, käsittelevät havaittua tietoa, tekevät järkeviä päätöksiä ja suorittavat tiettyjä toimia olosuhteiden perusteella. Tätä kutsutaan älykkääksi käyttäytymiseksi. Kun ohjelmoimme älykkään käyttäytymisprosessin jäljitelmän koneelle, sitä kutsutaan tekoälyksi (AI). + +--- +## Termistöä + +Vaikka termit voivat olla hämmentäviä, koneoppiminen (ML) on tärkeä tekoälyn osa-alue. **ML keskittyy erikoistuneiden algoritmien käyttöön merkityksellisen tiedon löytämiseksi ja piilotettujen kaavojen tunnistamiseksi havaituista tiedoista järkevän päätöksenteon tukemiseksi**. + +--- +## AI, ML, syväoppiminen + +![AI, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) + +> Kaavio, joka näyttää tekoälyn, koneoppimisen, syväoppimisen ja datatieteen väliset suhteet. Infografiikka: [Jen Looper](https://twitter.com/jenlooper), inspiroitunut [tästä grafiikasta](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) + +--- +## Käsitteet, joita käsitellään + +Tässä kurssissa käsittelemme vain koneoppimisen ydinkäsitteitä, jotka aloittelijan tulee tietää. Keskitymme siihen, mitä kutsumme 'klassiseksi koneoppimiseksi', pääasiassa käyttäen Scikit-learnia, erinomaista kirjastoa, jota monet opiskelijat käyttävät perusasioiden oppimiseen. Laajempien tekoälyn tai syväoppimisen käsitteiden ymmärtämiseksi vahva koneoppimisen perustietämys on välttämätön, ja haluamme tarjota sen tässä. + +--- +## Tässä kurssissa opit: + +- koneoppimisen ydinkäsitteet +- koneoppimisen historiaa +- koneoppiminen ja oikeudenmukaisuus +- regressio-koneoppimistekniikat +- luokittelu-koneoppimistekniikat +- klusterointi-koneoppimistekniikat +- luonnollisen kielen käsittelyyn liittyvät koneoppimistekniikat +- aikasarjojen ennustaminen koneoppimistekniikoilla +- vahvistusoppiminen +- koneoppimisen käytännön sovellukset + +--- +## Mitä emme käsittele + +- syväoppiminen +- neuroverkot +- tekoäly + +Oppimiskokemuksen parantamiseksi vältämme neuroverkkojen monimutkaisuutta, 'syväoppimista' - monikerroksista mallinrakennusta neuroverkkojen avulla - ja tekoälyä, joita käsittelemme eri kurssilla. Tarjoamme myös tulevan datatieteen kurssin, joka keskittyy tämän laajemman alan siihen osa-alueeseen. + +--- +## Miksi opiskella koneoppimista? + +Koneoppiminen järjestelmän näkökulmasta määritellään automatisoitujen järjestelmien luomiseksi, jotka voivat oppia piilotettuja kaavoja datasta älykkään päätöksenteon tukemiseksi. + +Tämä motivaatio on löyhästi inspiroitunut siitä, miten ihmisaivot oppivat tiettyjä asioita ulkomaailmasta havaitsemansa datan perusteella. + +✅ Mieti hetki, miksi yritys haluaisi käyttää koneoppimisstrategioita sen sijaan, että loisi kovakoodatun sääntöpohjaisen moottorin. + +--- +## Koneoppimisen sovellukset + +Koneoppimisen sovellukset ovat nykyään lähes kaikkialla ja yhtä yleisiä kuin data, joka virtaa yhteiskunnissamme, älypuhelimiemme, yhdistettyjen laitteiden ja muiden järjestelmien tuottamana. Ottaen huomioon huippuluokan koneoppimisalgoritmien valtavan potentiaalin, tutkijat ovat tutkineet niiden kykyä ratkaista monimutkaisia ja monialaisia tosielämän ongelmia erinomaisin tuloksin. + +--- +## Esimerkkejä sovelletusta koneoppimisesta + +**Koneoppimista voi käyttää monin tavoin**: + +- Ennustamaan sairauden todennäköisyyttä potilaan sairaushistorian tai raporttien perusteella. +- Hyödyntämään säätietoja sääilmiöiden ennustamiseen. +- Ymmärtämään tekstin sentimenttiä. +- Tunnistamaan valeuutisia propagandan leviämisen estämiseksi. + +Rahoitus, taloustiede, maantiede, avaruustutkimus, biolääketieteen tekniikka, kognitiotiede ja jopa humanistiset alat ovat ottaneet koneoppimisen käyttöön ratkaistakseen alansa vaativia, datankäsittelyyn liittyviä ongelmia. + +--- +## Yhteenveto + +Koneoppiminen automatisoi kaavojen löytämisen prosessin löytämällä merkityksellisiä oivalluksia todellisesta tai tuotetusta datasta. Se on osoittautunut erittäin arvokkaaksi liiketoiminnassa, terveydenhuollossa ja rahoituksessa, muiden alojen ohella. + +Lähitulevaisuudessa koneoppimisen perusteiden ymmärtäminen tulee olemaan välttämätöntä kaikille aloille sen laajan käyttöönoton vuoksi. + +--- +# 🚀 Haaste + +Piirrä paperille tai käytä online-sovellusta, kuten [Excalidraw](https://excalidraw.com/), hahmottaaksesi tekoälyn, koneoppimisen, syväoppimisen ja datatieteen väliset erot. Lisää ideoita ongelmista, joita kukin näistä tekniikoista on hyvä ratkaisemaan. + +# [Jälkioppituntikysely](https://ff-quizzes.netlify.app/en/ml/) + +--- +# Kertaus ja itseopiskelu + +Lisätietoja siitä, miten voit työskennellä koneoppimisalgoritmien kanssa pilvessä, seuraa tätä [oppimispolkua](https://docs.microsoft.com/learn/paths/create-no-code-predictive-models-azure-machine-learning/?WT.mc_id=academic-77952-leestott). + +Osallistu [oppimispolkuun](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) koneoppimisen perusteista. + +--- +# Tehtävä + +[Ota käyttöön](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/1-intro-to-ML/assignment.md b/translations/fi/1-Introduction/1-intro-to-ML/assignment.md new file mode 100644 index 000000000..25c6cef50 --- /dev/null +++ b/translations/fi/1-Introduction/1-intro-to-ML/assignment.md @@ -0,0 +1,23 @@ + +# Aloita ja pääse vauhtiin + +## Ohjeet + +Tässä ei-arvosteltavassa tehtävässä sinun tulisi kerrata Pythonia ja saada ympäristösi valmiiksi ajamaan muistikirjoja. + +Käy läpi tämä [Python-oppimispolku](https://docs.microsoft.com/learn/paths/python-language/?WT.mc_id=academic-77952-leestott) ja asenna järjestelmäsi katsomalla nämä johdantovideot: + +https://www.youtube.com/playlist?list=PLlrxD0HtieHhS8VzuMCfQD4uJ9yne1mE6 + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/2-history-of-ML/README.md b/translations/fi/1-Introduction/2-history-of-ML/README.md new file mode 100644 index 000000000..f0e12b760 --- /dev/null +++ b/translations/fi/1-Introduction/2-history-of-ML/README.md @@ -0,0 +1,164 @@ + +# Koneoppimisen historia + +![Yhteenveto koneoppimisen historiasta sketchnotena](../../../../sketchnotes/ml-history.png) +> Sketchnote: [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +--- + +[![ML for beginners - Koneoppimisen historia](https://img.youtube.com/vi/N6wxM4wZ7V0/0.jpg)](https://youtu.be/N6wxM4wZ7V0 "ML for beginners - Koneoppimisen historia") + +> 🎥 Klikkaa yllä olevaa kuvaa katsellaksesi lyhyen videon tästä oppitunnista. + +Tässä oppitunnissa käymme läpi koneoppimisen ja tekoälyn historian merkittäviä virstanpylväitä. + +Tekoälyn (AI) historia tieteenalana on kietoutunut koneoppimisen historiaan, sillä koneoppimisen algoritmit ja laskennalliset edistysaskeleet ovat olleet keskeisiä tekoälyn kehityksessä. On hyvä muistaa, että vaikka nämä alat alkoivat muotoutua erillisiksi tutkimusalueiksi 1950-luvulla, tärkeät [algoritmiset, tilastolliset, matemaattiset, laskennalliset ja tekniset löydöt](https://wikipedia.org/wiki/Timeline_of_machine_learning) edelsivät ja limittyivät tähän aikakauteen. Ihmiset ovat itse asiassa pohtineet näitä kysymyksiä jo [satojen vuosien ajan](https://wikipedia.org/wiki/History_of_artificial_intelligence): tämä artikkeli käsittelee ajatusta "ajattelevasta koneesta" ja sen historiallisia älyllisiä perusteita. + +--- +## Merkittäviä löytöjä + +- 1763, 1812 [Bayesin kaava](https://wikipedia.org/wiki/Bayes%27_theorem) ja sen edeltäjät. Tämä kaava ja sen sovellukset ovat keskeisiä päättelyssä, sillä ne kuvaavat tapahtuman todennäköisyyttä aiemman tiedon perusteella. +- 1805 [Pienimmän neliösumman menetelmä](https://wikipedia.org/wiki/Least_squares) ranskalaisen matemaatikon Adrien-Marie Legendren kehittämänä. Tämä teoria, josta opit lisää regressio-osiossa, auttaa datan sovittamisessa. +- 1913 [Markovin ketjut](https://wikipedia.org/wiki/Markov_chain), venäläisen matemaatikon Andrey Markovin mukaan nimettynä, kuvaavat tapahtumien sarjaa aiemman tilan perusteella. +- 1957 [Perceptron](https://wikipedia.org/wiki/Perceptron) on amerikkalaisen psykologin Frank Rosenblattin kehittämä lineaarinen luokittelija, joka on ollut keskeinen syväoppimisen edistysaskelissa. + +--- + +- 1967 [Lähimmän naapurin algoritmi](https://wikipedia.org/wiki/Nearest_neighbor) suunniteltiin alun perin reittien kartoittamiseen. Koneoppimisen kontekstissa sitä käytetään kuvioiden tunnistamiseen. +- 1970 [Takaisinkytkentä](https://wikipedia.org/wiki/Backpropagation) käytetään [syöttöverkkojen](https://wikipedia.org/wiki/Feedforward_neural_network) kouluttamiseen. +- 1982 [Toistuvat neuroverkot](https://wikipedia.org/wiki/Recurrent_neural_network) ovat syöttöverkkojen johdannaisia, jotka luovat ajallisia graafeja. + +✅ Tee hieman tutkimusta. Mitkä muut päivämäärät ovat merkittäviä koneoppimisen ja tekoälyn historiassa? + +--- +## 1950: Ajattelevat koneet + +Alan Turing, poikkeuksellinen henkilö, joka valittiin [yleisön toimesta vuonna 2019](https://wikipedia.org/wiki/Icons:_The_Greatest_Person_of_the_20th_Century) 1900-luvun suurimmaksi tiedemieheksi, on tunnettu siitä, että hän auttoi luomaan perustan ajatukselle "ajattelevasta koneesta". Hän kohtasi skeptikkoja ja pyrki todistamaan konseptin empiirisesti luomalla [Turingin testin](https://www.bbc.com/news/technology-18475646), jota käsittelet NLP-osiossa. + +--- +## 1956: Dartmouthin kesätutkimusprojekti + +"Dartmouthin kesätutkimusprojekti tekoälystä oli merkittävä tapahtuma tekoälyn tieteenalalle," ja siellä keksittiin termi 'tekoäly' ([lähde](https://250.dartmouth.edu/highlights/artificial-intelligence-ai-coined-dartmouth)). + +> Jokainen oppimisen tai minkä tahansa älykkyyden piirre voidaan periaatteessa kuvata niin tarkasti, että kone voidaan ohjelmoida simuloimaan sitä. + +--- + +Johtava tutkija, matematiikan professori John McCarthy, toivoi "voivansa edetä hypoteesin pohjalta, että jokainen oppimisen tai minkä tahansa älykkyyden piirre voidaan periaatteessa kuvata niin tarkasti, että kone voidaan ohjelmoida simuloimaan sitä." Osallistujina oli myös toinen alan merkittävä hahmo, Marvin Minsky. + +Työpajaa pidetään keskustelujen käynnistäjänä ja edistäjänä, mukaan lukien "symbolisten menetelmien nousu, järjestelmät, jotka keskittyivät rajattuihin alueisiin (varhaiset asiantuntijajärjestelmät), ja deduktiiviset järjestelmät vastaan induktiiviset järjestelmät." ([lähde](https://wikipedia.org/wiki/Dartmouth_workshop)). + +--- +## 1956 - 1974: "Kultaiset vuodet" + +1950-luvulta 1970-luvun puoliväliin vallitsi suuri optimismi tekoälyn kyvystä ratkaista monia ongelmia. Vuonna 1967 Marvin Minsky totesi luottavaisesti, että "Sukupolven kuluessa ... tekoälyn luomisen ongelma tulee olemaan olennaisesti ratkaistu." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) + +Luonnollisen kielen käsittelyn tutkimus kukoisti, hakua kehitettiin ja tehtiin tehokkaammaksi, ja luotiin "mikromaailmojen" käsite, jossa yksinkertaisia tehtäviä suoritettiin tavallisen kielen ohjeilla. + +--- + +Tutkimusta rahoitettiin hyvin valtion virastojen toimesta, laskentateho ja algoritmit kehittyivät, ja älykkäiden koneiden prototyyppejä rakennettiin. Joitakin näistä koneista ovat: + +* [Shakey-robotti](https://wikipedia.org/wiki/Shakey_the_robot), joka pystyi liikkumaan ja päättämään, miten suorittaa tehtäviä "älykkäästi". + + ![Shakey, älykäs robotti](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) + > Shakey vuonna 1972 + +--- + +* Eliza, varhainen "chatterbot", pystyi keskustelemaan ihmisten kanssa ja toimimaan alkeellisena "terapeuttina". Opit lisää Elizasta NLP-osiossa. + + ![Eliza, botti](../../../../1-Introduction/2-history-of-ML/images/eliza.png) + > Versio Elizasta, chatbotista + +--- + +* "Blocks world" oli esimerkki mikromaailmasta, jossa palikoita voitiin pinota ja lajitella, ja koneiden päätöksentekokokeita voitiin testata. Kirjastojen, kuten [SHRDLU](https://wikipedia.org/wiki/SHRDLU), avulla tehdyt edistysaskeleet auttoivat kielen käsittelyä eteenpäin. + + [![blocks world SHRDLU:n kanssa](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world SHRDLU:n kanssa") + + > 🎥 Klikkaa yllä olevaa kuvaa katsellaksesi videon: Blocks world SHRDLU:n kanssa + +--- +## 1974 - 1980: "AI-talvi" + +1970-luvun puoliväliin mennessä kävi ilmi, että "älykkäiden koneiden" luomisen monimutkaisuutta oli aliarvioitu ja sen lupauksia, ottaen huomioon käytettävissä oleva laskentateho, oli liioiteltu. Rahoitus kuivui ja luottamus alaan hiipui. Joitakin tekijöitä, jotka vaikuttivat luottamuksen laskuun, olivat: +--- +- **Rajoitukset**. Laskentateho oli liian rajallinen. +- **Kombinatorinen räjähdys**. Parametrien määrä, joita piti kouluttaa, kasvoi eksponentiaalisesti, kun tietokoneilta vaadittiin enemmän, ilman laskentatehon ja kyvykkyyden rinnakkaista kehitystä. +- **Datan puute**. Datan puute haittasi algoritmien testaamista, kehittämistä ja hienosäätöä. +- **Kysymmekö oikeita kysymyksiä?**. Itse kysymykset, joita esitettiin, alkoivat herättää kysymyksiä. Tutkijat kohtasivat kritiikkiä lähestymistavoistaan: + - Turingin testit kyseenalaistettiin muun muassa "kiinalaisen huoneen teorian" kautta, joka esitti, että "digitaalisen tietokoneen ohjelmointi voi saada sen näyttämään ymmärtävän kieltä, mutta ei voi tuottaa todellista ymmärrystä." ([lähde](https://plato.stanford.edu/entries/chinese-room/)) + - Tekoälyn, kuten "terapeutti" ELIZAn, eettisyys yhteiskunnassa herätti huolta. + +--- + +Samalla tekoälyn eri koulukunnat alkoivat muodostua. Syntyi kahtiajako ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies) -käytäntöjen välillä. _Scruffy_-laboratoriot muokkasivat ohjelmia tuntikausia haluttujen tulosten saavuttamiseksi. _Neat_-laboratoriot "keskittyivät logiikkaan ja muodolliseen ongelmanratkaisuun". ELIZA ja SHRDLU olivat tunnettuja _scruffy_-järjestelmiä. 1980-luvulla, kun syntyi tarve tehdä koneoppimisjärjestelmistä toistettavia, _neat_-lähestymistapa nousi vähitellen etualalle, koska sen tulokset ovat selitettävämpiä. + +--- +## 1980-luvun asiantuntijajärjestelmät + +Kun ala kasvoi, sen hyöty liiketoiminnalle tuli selkeämmäksi, ja 1980-luvulla asiantuntijajärjestelmät yleistyivät. "Asiantuntijajärjestelmät olivat ensimmäisiä todella menestyksekkäitä tekoälyn (AI) ohjelmistomuotoja." ([lähde](https://wikipedia.org/wiki/Expert_system)). + +Tämäntyyppinen järjestelmä on itse asiassa _hybridi_, joka koostuu osittain sääntömoottorista, joka määrittelee liiketoimintavaatimukset, ja päättelymoottorista, joka hyödyntää sääntöjärjestelmää uusien faktojen päättelemiseksi. + +Tämä aikakausi toi myös lisää huomiota neuroverkoille. + +--- +## 1987 - 1993: AI:n "jäähtyminen" + +Erikoistuneiden asiantuntijajärjestelmien laitteistojen yleistyminen johti valitettavasti niiden liialliseen erikoistumiseen. Henkilökohtaisten tietokoneiden nousu kilpaili näiden suurten, erikoistuneiden, keskitettyjen järjestelmien kanssa. Laskennan demokratisointi oli alkanut, ja se lopulta tasoitti tietä modernille suurten datamäärien räjähdykselle. + +--- +## 1993 - 2011 + +Tämä aikakausi toi uuden vaiheen koneoppimiselle ja tekoälylle, jotka pystyivät ratkaisemaan aiemmin datan ja laskentatehon puutteesta johtuneita ongelmia. Datan määrä alkoi kasvaa nopeasti ja tulla laajemmin saataville, hyvässä ja pahassa, erityisesti älypuhelimen tulon myötä vuonna 2007. Laskentateho kasvoi eksponentiaalisesti, ja algoritmit kehittyivät rinnalla. Ala alkoi saavuttaa kypsyyttä, kun aiempien vuosien vapaamuotoisuus alkoi kiteytyä todelliseksi tieteenalaksi. + +--- +## Nykyhetki + +Nykyään koneoppiminen ja tekoäly koskettavat lähes jokaista elämämme osa-aluetta. Tämä aikakausi vaatii huolellista ymmärrystä näiden algoritmien riskeistä ja mahdollisista vaikutuksista ihmisten elämään. Kuten Microsoftin Brad Smith on todennut: "Tietotekniikka nostaa esiin kysymyksiä, jotka liittyvät keskeisiin ihmisoikeuksien suojeluihin, kuten yksityisyyteen ja ilmaisunvapauteen. Nämä kysymykset lisäävät vastuuta teknologiayrityksille, jotka luovat näitä tuotteita. Meidän näkemyksemme mukaan ne myös vaativat harkittua hallituksen sääntelyä ja normien kehittämistä hyväksyttävistä käyttötavoista" ([lähde](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). + +--- + +On vielä nähtävissä, mitä tulevaisuus tuo tullessaan, mutta on tärkeää ymmärtää nämä tietokonejärjestelmät sekä ohjelmistot ja algoritmit, joita ne käyttävät. Toivomme, että tämä opetusohjelma auttaa sinua saamaan paremman ymmärryksen, jotta voit tehdä omat johtopäätöksesi. + +[![Syväoppimisen historia](https://img.youtube.com/vi/mTtDfKgLm54/0.jpg)](https://www.youtube.com/watch?v=mTtDfKgLm54 "Syväoppimisen historia") +> 🎥 Klikkaa yllä olevaa kuvaa katsellaksesi videon: Yann LeCun käsittelee syväoppimisen historiaa tässä luennossa + +--- +## 🚀Haaste + +Tutki yhtä näistä historiallisista hetkistä ja opi lisää niiden takana olevista ihmisistä. Tiedemaailma on täynnä kiehtovia hahmoja, eikä mikään tieteellinen löytö ole syntynyt kulttuurisessa tyhjiössä. Mitä löydät? + +## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +--- +## Kertaus ja itseopiskelu + +Tässä katsottavaa ja kuunneltavaa: + +[Podcast, jossa Amy Boyd keskustelee tekoälyn kehityksestä](http://runasradio.com/Shows/Show/739) + +[![Amy Boyd: Tekoälyn historia](https://img.youtube.com/vi/EJt3_bFYKss/0.jpg)](https://www.youtube.com/watch?v=EJt3_bFYKss "Amy Boyd: Tekoälyn historia") + +--- + +## Tehtävä + +[Luo aikajana](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/2-history-of-ML/assignment.md b/translations/fi/1-Introduction/2-history-of-ML/assignment.md new file mode 100644 index 000000000..fe17f6d14 --- /dev/null +++ b/translations/fi/1-Introduction/2-history-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Luo aikajana + +## Ohjeet + +Käyttämällä [tätä repositoriota](https://github.com/Digital-Humanities-Toolkit/timeline-builder), luo aikajana, joka käsittelee jotakin algoritmien, matematiikan, tilastotieteen, tekoälyn tai koneoppimisen historian osa-aluetta tai näiden yhdistelmää. Voit keskittyä yhteen henkilöön, yhteen ideaan tai pitkään ajanjaksoon. Muista lisätä multimediaelementtejä. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ------------------------------------------------ | -------------------------------------- | ------------------------------------------------------------- | +| | Julkaistu aikajana esitetään GitHub-sivuna | Koodi on keskeneräinen eikä julkaistu | Aikajana on keskeneräinen, huonosti tutkittu eikä julkaistu | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/3-fairness/README.md b/translations/fi/1-Introduction/3-fairness/README.md new file mode 100644 index 000000000..993e881bb --- /dev/null +++ b/translations/fi/1-Introduction/3-fairness/README.md @@ -0,0 +1,152 @@ + +# Rakentamassa koneoppimisratkaisuja vastuullisen tekoälyn avulla + +![Yhteenveto vastuullisesta tekoälystä koneoppimisessa sketchnotessa](../../../../sketchnotes/ml-fairness.png) +> Sketchnote: [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Ennakkotesti](https://ff-quizzes.netlify.app/en/ml/) + +## Johdanto + +Tässä oppimateriaalissa alat tutkia, miten koneoppiminen vaikuttaa ja voi vaikuttaa jokapäiväiseen elämäämme. Jo nyt järjestelmät ja mallit osallistuvat päivittäisiin päätöksentekotehtäviin, kuten terveydenhuollon diagnooseihin, lainapäätöksiin tai petosten havaitsemiseen. On siis tärkeää, että nämä mallit toimivat luotettavasti ja tuottavat luottamusta herättäviä tuloksia. Kuten mikä tahansa ohjelmistosovellus, myös tekoälyjärjestelmät voivat epäonnistua tai tuottaa ei-toivottuja tuloksia. Siksi on olennaista ymmärtää ja selittää tekoälymallin käyttäytymistä. + +Kuvittele, mitä voi tapahtua, jos käyttämäsi data mallien rakentamiseen ei sisällä tiettyjä väestöryhmiä, kuten rotua, sukupuolta, poliittisia näkemyksiä tai uskontoa, tai jos se edustaa näitä ryhmiä epätasapainoisesti. Entä jos mallin tuloksia tulkitaan suosivan tiettyä väestöryhmää? Mitä seurauksia sillä on sovellukselle? Lisäksi, mitä tapahtuu, jos malli tuottaa haitallisia tuloksia ja vahingoittaa ihmisiä? Kuka on vastuussa tekoälyjärjestelmän käyttäytymisestä? Näitä kysymyksiä tutkimme tässä oppimateriaalissa. + +Tässä oppitunnissa: + +- Opit ymmärtämään oikeudenmukaisuuden merkityksen koneoppimisessa ja siihen liittyvät haitat. +- Tutustut poikkeamien ja epätavallisten tilanteiden tutkimiseen luotettavuuden ja turvallisuuden varmistamiseksi. +- Ymmärrät, miksi on tärkeää suunnitella kaikille osallistavia järjestelmiä. +- Tutkit, miksi on olennaista suojella ihmisten ja datan yksityisyyttä ja turvallisuutta. +- Näet, miksi on tärkeää käyttää "lasilaatikko"-lähestymistapaa tekoälymallien käyttäytymisen selittämiseksi. +- Opit, miksi vastuu on keskeistä tekoälyjärjestelmien luottamuksen rakentamisessa. + +## Esitiedot + +Esitietona suositellaan "Vastuullisen tekoälyn periaatteet" -oppimispolun suorittamista ja alla olevan videon katsomista aiheesta: + +Lisätietoja vastuullisesta tekoälystä löydät tästä [oppimispolusta](https://docs.microsoft.com/learn/modules/responsible-ai-principles/?WT.mc_id=academic-77952-leestott) + +[![Microsoftin lähestymistapa vastuulliseen tekoälyyn](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Microsoftin lähestymistapa vastuulliseen tekoälyyn") + +> 🎥 Klikkaa yllä olevaa kuvaa: Microsoftin lähestymistapa vastuulliseen tekoälyyn + +## Oikeudenmukaisuus + +Tekoälyjärjestelmien tulisi kohdella kaikkia oikeudenmukaisesti ja välttää vaikuttamasta eri ryhmiin eri tavoin. Esimerkiksi, kun tekoälyjärjestelmät antavat suosituksia lääketieteellisestä hoidosta, lainahakemuksista tai työllistymisestä, niiden tulisi antaa samat suositukset kaikille, joilla on samanlaiset oireet, taloudelliset olosuhteet tai ammatilliset pätevyydet. Meillä kaikilla ihmisillä on perittyjä ennakkoluuloja, jotka vaikuttavat päätöksiimme ja toimintaamme. Nämä ennakkoluulot voivat näkyä datassa, jota käytämme tekoälyjärjestelmien kouluttamiseen. Tällainen manipulointi voi joskus tapahtua tahattomasti. On usein vaikeaa tietoisesti tietää, milloin tuot datassa esiin ennakkoluuloja. + +**"Epäoikeudenmukaisuus"** kattaa negatiiviset vaikutukset tai "haitat" tietylle ihmisryhmälle, kuten rodun, sukupuolen, iän tai vammaisuuden perusteella. Oikeudenmukaisuuteen liittyvät haitat voidaan luokitella seuraavasti: + +- **Allokaatio**, jos esimerkiksi sukupuolta tai etnisyyttä suositaan toisen kustannuksella. +- **Palvelun laatu**. Jos data koulutetaan tiettyyn skenaarioon, mutta todellisuus on paljon monimutkaisempi, se johtaa huonosti toimivaan palveluun. Esimerkiksi käsisaippua-annostelija, joka ei tunnista tumman ihon sävyjä. [Viite](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Halventaminen**. Epäreilu kritiikki tai leimaaminen. Esimerkiksi kuvantunnistusteknologia, joka virheellisesti luokitteli tumman ihon sävyisiä ihmisiä gorilloiksi. +- **Yli- tai aliedustus**. Tietyn ryhmän näkymättömyys tietyssä ammatissa, ja palvelut tai toiminnot, jotka ylläpitävät tätä, aiheuttavat haittaa. +- **Stereotypiointi**. Tietyn ryhmän yhdistäminen ennalta määrättyihin ominaisuuksiin. Esimerkiksi kielikäännösjärjestelmä englannin ja turkin välillä voi sisältää epätarkkuuksia sukupuoleen liittyvien stereotypioiden vuoksi. + +![käännös turkiksi](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) +> käännös turkiksi + +![käännös takaisin englanniksi](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.png) +> käännös takaisin englanniksi + +Kun suunnittelemme ja testaamme tekoälyjärjestelmiä, meidän on varmistettava, että tekoäly on oikeudenmukainen eikä ohjelmoitu tekemään puolueellisia tai syrjiviä päätöksiä, joita ihmisetkään eivät saa tehdä. Oikeudenmukaisuuden takaaminen tekoälyssä ja koneoppimisessa on edelleen monimutkainen sosio-tekninen haaste. + +### Luotettavuus ja turvallisuus + +Luottamuksen rakentamiseksi tekoälyjärjestelmien on oltava luotettavia, turvallisia ja johdonmukaisia sekä normaaleissa että odottamattomissa olosuhteissa. On tärkeää tietää, miten tekoälyjärjestelmät käyttäytyvät erilaisissa tilanteissa, erityisesti poikkeustilanteissa. Tekoälyratkaisuja rakennettaessa on keskityttävä huomattavasti siihen, miten käsitellä monenlaisia olosuhteita, joita tekoälyratkaisut voivat kohdata. Esimerkiksi itseohjautuvan auton on asetettava ihmisten turvallisuus etusijalle. Tämän vuoksi auton tekoälyn on otettava huomioon kaikki mahdolliset skenaariot, kuten yö, ukkosmyrskyt tai lumimyrskyt, kadulle juoksevat lapset, lemmikit, tietyömaat jne. Se, kuinka hyvin tekoälyjärjestelmä pystyy käsittelemään laajan valikoiman olosuhteita luotettavasti ja turvallisesti, heijastaa sitä, kuinka hyvin datatieteilijä tai tekoälykehittäjä on ennakoinut tilanteita suunnittelussa tai testauksessa. + +> [🎥 Klikkaa tästä videoon: ](https://www.microsoft.com/videoplayer/embed/RE4vvIl) + +### Osallistavuus + +Tekoälyjärjestelmät tulisi suunnitella siten, että ne osallistavat ja voimaannuttavat kaikkia. Tekoälyjärjestelmiä suunnitellessaan ja toteuttaessaan datatieteilijät ja tekoälykehittäjät tunnistavat ja ratkaisevat järjestelmän mahdolliset esteet, jotka voisivat tahattomasti sulkea ihmisiä ulkopuolelle. Esimerkiksi maailmassa on miljardi vammaista ihmistä. Tekoälyn kehityksen myötä he voivat helpommin saada pääsyn laajaan valikoimaan tietoa ja mahdollisuuksia jokapäiväisessä elämässään. Esteiden poistaminen luo mahdollisuuksia innovoida ja kehittää tekoälytuotteita, jotka tarjoavat parempia kokemuksia kaikille. + +> [🎥 Klikkaa tästä videoon: osallistavuus tekoälyssä](https://www.microsoft.com/videoplayer/embed/RE4vl9v) + +### Turvallisuus ja yksityisyys + +Tekoälyjärjestelmien tulisi olla turvallisia ja kunnioittaa ihmisten yksityisyyttä. Ihmiset luottavat vähemmän järjestelmiin, jotka vaarantavat heidän yksityisyytensä, tietonsa tai elämänsä. Koneoppimismalleja koulutettaessa luotamme dataan parhaiden tulosten saavuttamiseksi. Tällöin datan alkuperä ja eheys on otettava huomioon. Esimerkiksi, onko data käyttäjän toimittamaa vai julkisesti saatavilla? Lisäksi datan kanssa työskenneltäessä on tärkeää kehittää tekoälyjärjestelmiä, jotka voivat suojata luottamuksellisia tietoja ja vastustaa hyökkäyksiä. Tekoälyn yleistyessä yksityisyyden suojaaminen ja tärkeiden henkilö- ja yritystietojen turvaaminen on yhä kriittisempää ja monimutkaisempaa. Yksityisyyteen ja tietoturvaan liittyvät kysymykset vaativat erityistä huomiota tekoälyssä, koska datan saatavuus on olennaista tekoälyjärjestelmien tarkkojen ja perusteltujen ennusteiden ja päätösten tekemiseksi. + +> [🎥 Klikkaa tästä videoon: turvallisuus tekoälyssä](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Teollisuutena olemme saavuttaneet merkittäviä edistysaskeleita yksityisyydessä ja turvallisuudessa, erityisesti GDPR:n (General Data Protection Regulation) kaltaisten säädösten ansiosta. +- Tekoälyjärjestelmien kohdalla meidän on kuitenkin tunnustettava jännite henkilökohtaisemman datan tarpeen ja yksityisyyden välillä. +- Kuten internetin myötä yhdistettyjen tietokoneiden syntyessä, myös tekoälyyn liittyvien turvallisuusongelmien määrä on kasvanut merkittävästi. +- Samalla olemme nähneet tekoälyn käytön turvallisuuden parantamisessa. Esimerkiksi useimmat modernit virustorjuntaohjelmat perustuvat tekoälyyn. +- Meidän on varmistettava, että datatieteen prosessimme sulautuvat harmonisesti uusimpiin yksityisyyden ja turvallisuuden käytäntöihin. + +### Läpinäkyvyys + +Tekoälyjärjestelmien tulisi olla ymmärrettäviä. Läpinäkyvyyden keskeinen osa on tekoälyjärjestelmien ja niiden komponenttien käyttäytymisen selittäminen. Tekoälyjärjestelmien ymmärtämisen parantaminen edellyttää, että sidosryhmät ymmärtävät, miten ja miksi ne toimivat, jotta he voivat tunnistaa mahdolliset suorituskykyongelmat, turvallisuus- ja yksityisyyshuolenaiheet, puolueellisuudet, poissulkevat käytännöt tai ei-toivotut tulokset. Lisäksi uskomme, että niiden, jotka käyttävät tekoälyjärjestelmiä, tulisi olla rehellisiä ja avoimia siitä, milloin, miksi ja miten he päättävät ottaa ne käyttöön. Samoin heidän tulisi kertoa järjestelmien rajoituksista. Esimerkiksi, jos pankki käyttää tekoälyjärjestelmää tukemaan kuluttajalainapäätöksiä, on tärkeää tarkastella tuloksia ja ymmärtää, mitkä tiedot vaikuttavat järjestelmän suosituksiin. Hallitukset ovat alkaneet säännellä tekoälyä eri toimialoilla, joten datatieteilijöiden ja organisaatioiden on selitettävä, täyttääkö tekoälyjärjestelmä sääntelyvaatimukset, erityisesti silloin, kun tulos on ei-toivottu. + +> [🎥 Klikkaa tästä videoon: läpinäkyvyys tekoälyssä](https://www.microsoft.com/videoplayer/embed/RE4voJF) + +- Koska tekoälyjärjestelmät ovat niin monimutkaisia, niiden toiminnan ymmärtäminen ja tulosten tulkitseminen on vaikeaa. +- Tämä ymmärryksen puute vaikuttaa siihen, miten näitä järjestelmiä hallitaan, otetaan käyttöön ja dokumentoidaan. +- Tämä ymmärryksen puute vaikuttaa vielä enemmän päätöksiin, joita tehdään näiden järjestelmien tuottamien tulosten perusteella. + +### Vastuu + +Tekoälyjärjestelmiä suunnittelevien ja käyttävien ihmisten on oltava vastuussa siitä, miten heidän järjestelmänsä toimivat. Vastuun tarve on erityisen tärkeä arkaluonteisten teknologioiden, kuten kasvojentunnistuksen, kohdalla. Viime aikoina kasvojentunnistusteknologian kysyntä on kasvanut, erityisesti lainvalvontaviranomaisten keskuudessa, jotka näkevät teknologian potentiaalin esimerkiksi kadonneiden lasten löytämisessä. Näitä teknologioita voitaisiin kuitenkin käyttää hallitusten toimesta vaarantamaan kansalaisten perusoikeuksia, esimerkiksi mahdollistamalla jatkuva tiettyjen henkilöiden valvonta. Siksi datatieteilijöiden ja organisaatioiden on oltava vastuussa siitä, miten heidän tekoälyjärjestelmänsä vaikuttavat yksilöihin tai yhteiskuntaan. + +[![Johtava tekoälytutkija varoittaa kasvojentunnistuksen massavalvonnasta](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Microsoftin lähestymistapa vastuulliseen tekoälyyn") + +> 🎥 Klikkaa yllä olevaa kuvaa: Varoituksia kasvojentunnistuksen massavalvonnasta + +Lopulta yksi sukupolvemme suurimmista kysymyksistä, ensimmäisenä sukupolvena, joka tuo tekoälyn yhteiskuntaan, on se, miten varmistamme, että tietokoneet pysyvät vastuussa ihmisille ja miten varmistamme, että tietokoneita suunnittelevat ihmiset pysyvät vastuussa kaikille muille. + +## Vaikutusten arviointi + +Ennen koneoppimismallin kouluttamista on tärkeää suorittaa vaikutusten arviointi ymmärtääkseen tekoälyjärjestelmän tarkoitus, sen aiottu käyttö, missä se otetaan käyttöön ja ketkä ovat vuorovaikutuksessa järjestelmän kanssa. Nämä ovat hyödyllisiä arvioijille tai testaajille, jotta he tietävät, mitkä tekijät on otettava huomioon mahdollisia riskejä ja odotettuja seurauksia tunnistettaessa. + +Seuraavat ovat keskeisiä alueita vaikutusten arvioinnissa: + +- **Haitalliset vaikutukset yksilöihin**. On tärkeää olla tietoinen kaikista rajoituksista tai vaatimuksista, tukemattomasta käytöstä tai tunnetuista rajoituksista, jotka voivat haitata järjestelmän suorituskykyä, jotta varmistetaan, ettei järjestelmää käytetä tavalla, joka voisi aiheuttaa haittaa yksilöille. +- **Datan vaatimukset**. Ymmärtämällä, miten ja missä järjestelmä käyttää dataa, arvioijat voivat tutkia mahdollisia datavaatimuksia, jotka on otettava huomioon (esim. GDPR- tai HIPPA-säädökset). Lisäksi on tarkasteltava, onko datan lähde tai määrä riittävä koulutukseen. +- **Vaikutusten yhteenveto**. Kerää lista mahdollisista haitoista, joita järjestelmän käytöstä voi aiheutua. Koko koneoppimisen elinkaaren ajan tarkista, onko tunnistettuja ongelmia lievennetty tai ratkaistu. +- **Sovellettavat tavoitteet** kuudelle ydinperiaatteelle. Arvioi, täyttyvätkö kunkin periaatteen tavoitteet ja onko niissä puutteita. + +## Vastuullisen tekoälyn debuggaus + +Kuten ohjelmistosovelluksen debuggaus, myös tekoälyjärjestelmän debuggaus on välttämätön prosessi järjestelmän ongelmien tunnistamiseksi ja ratkaisemiseksi. On monia tekijöitä, jotka voivat vaikuttaa siihen, että malli ei toimi odotetusti tai vastuullisesti. Useimmat perinteiset mallin suorituskykymittarit ovat määrällisiä yhteenvetoja mallin suorituskyvystä, eivätkä ne riitä analysoimaan, miten malli rikkoo vastuullisen tekoälyn periaatteita. Lisäksi koneoppimismalli on "musta laatikko", mikä vaikeuttaa sen tulosten ymmärtämistä tai selittämistä, kun se tekee virheen. Myöhemmin tässä kurssissa opimme käyttämään vastuullisen tekoälyn hallintapaneelia tekoälyjärjestelmien debuggaamiseen. Hallintapaneeli tarjoaa kokonaisvaltaisen työkalun datatieteilijöille ja tekoälykehittäjille seuraaviin tarkoituksiin: + +- **Virheanalyysi**. Mallin virhejakautuman tunnistaminen, joka voi vaikuttaa järjestelmän oikeudenmukaisuuteen tai luotett +Katso tämä työpaja, joka syventyy aiheisiin: + +- Vastuullisen tekoälyn tavoittelu: Periaatteiden tuominen käytäntöön, esittäjät Besmira Nushi, Mehrnoosh Sameki ja Amit Sharma + +[![Responsible AI Toolbox: Avoimen lähdekoodin kehys vastuullisen tekoälyn rakentamiseen](https://img.youtube.com/vi/tGgJCrA-MZU/0.jpg)](https://www.youtube.com/watch?v=tGgJCrA-MZU "RAI Toolbox: Avoimen lähdekoodin kehys vastuullisen tekoälyn rakentamiseen") + + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon: RAI Toolbox: Avoimen lähdekoodin kehys vastuullisen tekoälyn rakentamiseen, esittäjät Besmira Nushi, Mehrnoosh Sameki ja Amit Sharma + +Lue myös: + +- Microsoftin RAI-resurssikeskus: [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoftin FATE-tutkimusryhmä: [FATE: Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +RAI Toolbox: + +- [Responsible AI Toolbox GitHub -repository](https://github.com/microsoft/responsible-ai-toolbox) + +Lue Azure Machine Learningin työkaluista, jotka varmistavat oikeudenmukaisuuden: + +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) + +## Tehtävä + +[Tutustu RAI Toolboxiin](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/3-fairness/assignment.md b/translations/fi/1-Introduction/3-fairness/assignment.md new file mode 100644 index 000000000..fd30237d2 --- /dev/null +++ b/translations/fi/1-Introduction/3-fairness/assignment.md @@ -0,0 +1,25 @@ + +# Tutustu Responsible AI Toolboxiin + +## Ohjeet + +Tässä oppitunnissa opit Responsible AI Toolboxista, joka on "avoimen lähdekoodin, yhteisön ohjaama projekti, joka auttaa data-analyytikkoja analysoimaan ja parantamaan tekoälyjärjestelmiä." Tämän tehtävän osalta tutustu yhteen RAI Toolboxin [notebookeista](https://github.com/microsoft/responsible-ai-toolbox/blob/main/notebooks/responsibleaidashboard/getting-started.ipynb) ja raportoi havaintosi paperissa tai esityksessä. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ----------- | -------- | -------------------- | +| | Esitetään paperi tai PowerPoint-esitys, jossa käsitellään Fairlearnin järjestelmiä, suoritettua notebookia ja siitä tehtyjä johtopäätöksiä | Esitetään paperi ilman johtopäätöksiä | Paperia ei esitetä | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/4-techniques-of-ML/README.md b/translations/fi/1-Introduction/4-techniques-of-ML/README.md new file mode 100644 index 000000000..f3b867acd --- /dev/null +++ b/translations/fi/1-Introduction/4-techniques-of-ML/README.md @@ -0,0 +1,132 @@ + +# Koneoppimisen tekniikat + +Koneoppimismallien ja niiden käyttämän datan rakentaminen, käyttäminen ja ylläpito eroaa merkittävästi monista muista kehitysprosesseista. Tässä oppitunnissa selvitämme prosessin ja hahmotamme tärkeimmät tekniikat, jotka sinun tulee hallita. Opit: + +- Ymmärtämään koneoppimisen taustalla olevat prosessit yleisellä tasolla. +- Tutustumaan peruskäsitteisiin, kuten "mallit", "ennusteet" ja "opetusdata". + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +[![ML for beginners - Techniques of Machine Learning](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML for beginners - Techniques of Machine Learning") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi, jossa käydään läpi tämän oppitunnin sisältöä. + +## Johdanto + +Koneoppimisen (ML) prosessien luominen koostuu useista vaiheista: + +1. **Määrittele kysymys**. Useimmat ML-prosessit alkavat kysymyksestä, johon ei voida vastata yksinkertaisella ehdollisella ohjelmalla tai sääntöpohjaisella moottorilla. Nämä kysymykset liittyvät usein ennusteisiin, jotka perustuvat datakokoelmaan. +2. **Kerää ja valmistele data**. Kysymykseen vastaaminen vaatii dataa. Datan laatu ja joskus myös määrä määrittävät, kuinka hyvin voit vastata alkuperäiseen kysymykseesi. Datan visualisointi on tärkeä osa tätä vaihetta. Tämä vaihe sisältää myös datan jakamisen opetus- ja testiryhmiin mallin rakentamista varten. +3. **Valitse opetusmenetelmä**. Kysymyksesi ja datasi luonteen perusteella sinun tulee valita, miten haluat opettaa mallia, jotta se parhaiten heijastaisi dataasi ja tekisi tarkkoja ennusteita. Tämä ML-prosessin osa vaatii erityistä asiantuntemusta ja usein huomattavan määrän kokeilua. +4. **Opeta malli**. Käyttämällä opetusdataa käytät erilaisia algoritmeja opettaaksesi mallin tunnistamaan datan kuvioita. Malli voi hyödyntää sisäisiä painotuksia, joita voidaan säätää korostamaan tiettyjä datan osia paremman mallin rakentamiseksi. +5. **Arvioi malli**. Käytä aiemmin näkemätöntä dataa (testidatasi) arvioidaksesi, kuinka hyvin malli toimii. +6. **Parametrien säätö**. Mallin suorituskyvyn perusteella voit tehdä prosessin uudelleen käyttämällä erilaisia parametreja tai muuttujia, jotka ohjaavat mallin opetusalgoritmien toimintaa. +7. **Ennusta**. Käytä uusia syötteitä testataksesi mallisi tarkkuutta. + +## Mitä kysymystä kysyä + +Tietokoneet ovat erityisen taitavia löytämään piilotettuja kuvioita datasta. Tämä ominaisuus on erittäin hyödyllinen tutkijoille, joilla on kysymyksiä tietystä aihealueesta, joihin ei voida helposti vastata luomalla ehdollisuuspohjainen sääntömoottori. Esimerkiksi vakuutusmatemaattisessa tehtävässä data-analyytikko voisi rakentaa käsintehtyjä sääntöjä tupakoitsijoiden ja ei-tupakoitsijoiden kuolleisuudesta. + +Kun mukaan tuodaan monia muita muuttujia, ML-malli voi kuitenkin osoittautua tehokkaammaksi ennustamaan tulevia kuolleisuuslukuja aiemman terveystiedon perusteella. Iloisempi esimerkki voisi olla sääennusteiden tekeminen huhtikuulle tietyssä paikassa datan perusteella, joka sisältää leveys- ja pituusasteet, ilmastonmuutoksen, etäisyyden merestä, suihkuvirtauksen kuviot ja paljon muuta. + +✅ Tämä [esitysmateriaali](https://www2.cisl.ucar.edu/sites/default/files/2021-10/0900%20June%2024%20Haupt_0.pdf) säämalleista tarjoaa historiallisen näkökulman ML:n käytöstä sääanalyysissä. + +## Ennen mallin rakentamista + +Ennen kuin aloitat mallin rakentamisen, sinun tulee suorittaa useita tehtäviä. Testataksesi kysymystäsi ja muodostaaksesi hypoteesin mallin ennusteiden perusteella, sinun tulee tunnistaa ja määrittää useita elementtejä. + +### Data + +Jotta voit vastata kysymykseesi minkäänlaisella varmuudella, tarvitset riittävän määrän oikeanlaista dataa. Tässä vaiheessa sinun tulee tehdä kaksi asiaa: + +- **Kerää data**. Muista aiemman oppitunnin oikeudenmukaisuudesta data-analyysissä, kerää datasi huolellisesti. Ole tietoinen datan lähteistä, mahdollisista sisäisistä ennakkoluuloista ja dokumentoi sen alkuperä. +- **Valmistele data**. Datavalmisteluprosessissa on useita vaiheita. Saatat joutua yhdistämään dataa ja normalisoimaan sen, jos se tulee eri lähteistä. Voit parantaa datan laatua ja määrää eri menetelmillä, kuten muuntamalla merkkijonoja numeroiksi (kuten teemme [Klusteroinnissa](../../5-Clustering/1-Visualize/README.md)). Voit myös luoda uutta dataa alkuperäisen datan perusteella (kuten teemme [Luokittelussa](../../4-Classification/1-Introduction/README.md)). Voit puhdistaa ja muokata dataa (kuten teemme ennen [Web-sovellus](../../3-Web-App/README.md) -oppituntia). Lopuksi saatat joutua myös satunnaistamaan ja sekoittamaan dataa riippuen opetusmenetelmistäsi. + +✅ Kun olet kerännyt ja käsitellyt datasi, ota hetki aikaa tarkistaaksesi, voiko sen muoto auttaa sinua vastaamaan aiottuun kysymykseesi. Saattaa olla, että data ei suoriudu hyvin annetussa tehtävässä, kuten huomaamme [Klusterointi](../../5-Clustering/1-Visualize/README.md) -oppitunneilla! + +### Ominaisuudet ja kohde + +[Ominaisuus](https://www.datasciencecentral.com/profiles/blogs/an-introduction-to-variable-and-feature-selection) on mitattavissa oleva datan ominaisuus. Monissa datasetissä se ilmaistaan sarakeotsikkona, kuten "päivämäärä", "koko" tai "väri". Ominaisuusmuuttuja, jota yleensä edustaa `X` koodissa, edustaa syötemuuttujaa, jota käytetään mallin opettamiseen. + +Kohde on asia, jota yrität ennustaa. Kohde, jota yleensä edustaa `y` koodissa, edustaa vastausta kysymykseen, jonka yrität esittää datallesi: joulukuussa, minkä **väriset** kurpitsat ovat halvimpia? San Franciscossa, mitkä naapurustot tarjoavat parhaat kiinteistöjen **hinnat**? Joskus kohdetta kutsutaan myös nimikeattribuutiksi. + +### Ominaisuusmuuttujan valinta + +🎓 **Ominaisuusvalinta ja ominaisuuksien uuttaminen** Miten tiedät, minkä muuttujan valitset mallia rakentaessasi? Käyt läpi todennäköisesti prosessin, jossa valitset oikeat muuttujat parhaiten toimivaan malliin joko ominaisuusvalinnan tai ominaisuuksien uuttamisen avulla. Ne eivät kuitenkaan ole sama asia: "Ominaisuuksien uuttaminen luo uusia ominaisuuksia alkuperäisten ominaisuuksien funktioista, kun taas ominaisuusvalinta palauttaa alkuperäisten ominaisuuksien alijoukon." ([lähde](https://wikipedia.org/wiki/Feature_selection)) + +### Visualisoi datasi + +Data-analyytikon työkalupakin tärkeä osa on kyky visualisoida dataa useiden erinomaisen kirjastojen, kuten Seabornin tai MatPlotLibin, avulla. Datan visuaalinen esittäminen voi auttaa sinua paljastamaan piilotettuja korrelaatioita, joita voit hyödyntää. Visualisoinnit voivat myös auttaa sinua havaitsemaan ennakkoluuloja tai epätasapainoista dataa (kuten huomaamme [Luokittelu](../../4-Classification/2-Classifiers-1/README.md) -oppitunneilla). + +### Jaa datasetti + +Ennen opettamista sinun tulee jakaa datasetti kahteen tai useampaan erikokoiseen osaan, jotka edustavat dataa hyvin. + +- **Opetus**. Tämä osa datasetistä sovitetaan malliin sen opettamiseksi. Tämä osuus muodostaa suurimman osan alkuperäisestä datasetistä. +- **Testaus**. Testidatasetti on itsenäinen dataryhmä, joka usein kerätään alkuperäisestä datasta ja jota käytetään rakennetun mallin suorituskyvyn vahvistamiseen. +- **Validointi**. Validointijoukko on pienempi itsenäinen esimerkkiryhmä, jota käytetään mallin hyperparametrien tai rakenteen säätämiseen mallin parantamiseksi. Datasi koosta ja kysymyksestäsi riippuen et välttämättä tarvitse tätä kolmatta joukkoa (kuten huomaamme [Aikasarjojen ennustaminen](../../7-TimeSeries/1-Introduction/README.md) -oppitunneilla). + +## Mallin rakentaminen + +Käyttämällä opetusdataasi tavoitteesi on rakentaa malli, eli tilastollinen esitys datastasi, käyttämällä erilaisia algoritmeja sen **opettamiseksi**. Mallin opettaminen altistaa sen datalle ja antaa sen tehdä oletuksia havaitsemistaan kuvioista, validoida ja hyväksyä tai hylätä ne. + +### Valitse opetusmenetelmä + +Kysymyksesi ja datasi luonteen perusteella valitset menetelmän sen opettamiseksi. Käymällä läpi [Scikit-learnin dokumentaatiota](https://scikit-learn.org/stable/user_guide.html) - jota käytämme tässä kurssissa - voit tutkia monia tapoja opettaa mallia. Kokemuksesi perusteella saatat joutua kokeilemaan useita eri menetelmiä parhaan mallin rakentamiseksi. Todennäköisesti käyt läpi prosessin, jossa data-analyytikot arvioivat mallin suorituskykyä syöttämällä sille aiemmin näkemätöntä dataa, tarkistamalla tarkkuutta, ennakkoluuloja ja muita laatua heikentäviä ongelmia ja valitsemalla tehtävään sopivimman opetusmenetelmän. + +### Opeta malli + +Kun sinulla on opetusdata, olet valmis "sovittamaan" sen mallin luomiseksi. Huomaat, että monissa ML-kirjastoissa löytyy koodi "model.fit" - tässä vaiheessa syötät ominaisuusmuuttujasi taulukkomuodossa (yleensä "X") ja kohdemuuttujasi (yleensä "y"). + +### Arvioi malli + +Kun opetusprosessi on valmis (suuren mallin opettaminen voi vaatia useita iteraatioita tai "epookkeja"), voit arvioida mallin laatua käyttämällä testidataa sen suorituskyvyn mittaamiseen. Tämä data on osa alkuperäisestä datasta, jota malli ei ole aiemmin analysoinut. Voit tulostaa taulukon mallin laadun mittareista. + +🎓 **Mallin sovittaminen** + +Koneoppimisen kontekstissa mallin sovittaminen viittaa mallin taustalla olevan funktion tarkkuuteen, kun se yrittää analysoida dataa, jota se ei tunne. + +🎓 **Alioppiminen** ja **ylioppiminen** ovat yleisiä ongelmia, jotka heikentävät mallin laatua, kun malli sovittuu joko liian huonosti tai liian hyvin. Tämä aiheuttaa sen, että malli tekee ennusteita joko liian tiukasti tai liian löyhästi suhteessa opetusdataansa. Ylioppinut malli ennustaa opetusdataa liian hyvin, koska se on oppinut datan yksityiskohdat ja kohinan liian hyvin. Alioppinut malli ei ole tarkka, koska se ei pysty analysoimaan tarkasti opetusdataansa eikä dataa, jota se ei ole vielä "nähnyt". + +![ylioppiminen malli](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) +> Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +## Parametrien säätö + +Kun alkuperäinen opetus on valmis, tarkkaile mallin laatua ja harkitse sen parantamista säätämällä sen "hyperparametreja". Lue lisää prosessista [dokumentaatiosta](https://docs.microsoft.com/en-us/azure/machine-learning/how-to-tune-hyperparameters?WT.mc_id=academic-77952-leestott). + +## Ennustaminen + +Tämä on hetki, jolloin voit käyttää täysin uutta dataa testataksesi mallisi tarkkuutta. Sovelletussa ML-ympäristössä, jossa rakennat verkkosovelluksia mallin käyttöön tuotannossa, tämä prosessi voi sisältää käyttäjän syötteen keräämisen (esimerkiksi painikkeen painallus) muuttujan asettamiseksi ja sen lähettämiseksi mallille inferenssiä tai arviointia varten. + +Näissä oppitunneissa opit käyttämään näitä vaiheita datan valmisteluun, mallin rakentamiseen, testaamiseen, arviointiin ja ennustamiseen - kaikki data-analyytikon eleet ja enemmän, kun etenet matkallasi kohti "full stack" ML-insinööriksi. + +--- + +## 🚀Haaste + +Piirrä vuokaavio, joka kuvaa ML-asiantuntijan työvaiheet. Missä näet itsesi tällä hetkellä prosessissa? Missä ennustat kohtaavasi vaikeuksia? Mikä vaikuttaa sinulle helpolta? + +## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Etsi verkosta haastatteluja data-analyytikoista, jotka keskustelevat päivittäisestä työstään. Tässä on [yksi](https://www.youtube.com/watch?v=Z3IjgbbCEfs). + +## Tehtävä + +[Haastattele data-analyytikkoa](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/4-techniques-of-ML/assignment.md b/translations/fi/1-Introduction/4-techniques-of-ML/assignment.md new file mode 100644 index 000000000..fd4ab1dc4 --- /dev/null +++ b/translations/fi/1-Introduction/4-techniques-of-ML/assignment.md @@ -0,0 +1,25 @@ + +# Haastattele data-analyytikkoa + +## Ohjeet + +Yrityksessäsi, käyttäjäryhmässä, ystäviesi tai opiskelutoveriesi keskuudessa, keskustele jonkun kanssa, joka työskentelee ammattilaisena data-analyytikkona. Kirjoita lyhyt essee (500 sanaa) heidän päivittäisistä tehtävistään. Ovatko he erikoistuneita vai työskentelevätkö he "full stack" -tyylillä? + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ---------------------------------------------------------------------------------- | ---------------------------------------------------------------- | --------------------- | +| | Oikean pituinen essee, jossa lähteet on merkitty, toimitetaan .doc-tiedostona | Essee on huonosti lähteistetty tai lyhyempi kuin vaadittu pituus | Esseetä ei toimiteta | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/1-Introduction/README.md b/translations/fi/1-Introduction/README.md new file mode 100644 index 000000000..24369c34f --- /dev/null +++ b/translations/fi/1-Introduction/README.md @@ -0,0 +1,37 @@ + +# Johdatus koneoppimiseen + +Tässä opintokokonaisuuden osassa tutustut koneoppimisen peruskäsitteisiin, siihen mitä se on, sen historiaan sekä tekniikoihin, joita tutkijat käyttävät sen parissa työskennellessään. Tutkitaan yhdessä tätä uutta koneoppimisen maailmaa! + +![globe](../../../1-Introduction/images/globe.jpg) +> Kuva: Bill Oxford palvelussa Unsplash + +### Oppitunnit + +1. [Johdatus koneoppimiseen](1-intro-to-ML/README.md) +1. [Koneoppimisen ja tekoälyn historia](2-history-of-ML/README.md) +1. [Oikeudenmukaisuus ja koneoppiminen](3-fairness/README.md) +1. [Koneoppimisen tekniikat](4-techniques-of-ML/README.md) + +### Tekijät + +"Johdatus koneoppimiseen" on kirjoitettu ♥️ tiimin toimesta, johon kuuluvat [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan), [Ornella Altunyan](https://twitter.com/ornelladotcom) ja [Jen Looper](https://twitter.com/jenlooper) + +"Koneoppimisen historia" on kirjoitettu ♥️ [Jen Looper](https://twitter.com/jenlooper) ja [Amy Boyd](https://twitter.com/AmyKateNicho) + +"Oikeudenmukaisuus ja koneoppiminen" on kirjoitettu ♥️ [Tomomi Imura](https://twitter.com/girliemac) + +"Koneoppimisen tekniikat" on kirjoitettu ♥️ [Jen Looper](https://twitter.com/jenlooper) ja [Chris Noring](https://twitter.com/softchris) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/1-Tools/README.md b/translations/fi/2-Regression/1-Tools/README.md new file mode 100644 index 000000000..fbf1ca467 --- /dev/null +++ b/translations/fi/2-Regression/1-Tools/README.md @@ -0,0 +1,239 @@ + +# Aloita Pythonin ja Scikit-learnin käyttö regressiomallien kanssa + +![Yhteenveto regressioista luonnosmuistiinpanossa](../../../../sketchnotes/ml-regression.png) + +> Luonnosmuistiinpanon tekijä [Tomomi Imura](https://www.twitter.com/girlie_mac) + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Tämä oppitunti on saatavilla myös R-kielellä!](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) + +## Johdanto + +Näissä neljässä oppitunnissa opit rakentamaan regressiomalleja. Keskustelemme pian siitä, mihin niitä käytetään. Mutta ennen kuin aloitat, varmista, että sinulla on oikeat työkalut valmiina prosessin aloittamiseen! + +Tässä oppitunnissa opit: + +- Konfiguroimaan tietokoneesi paikallisia koneoppimistehtäviä varten. +- Työskentelemään Jupyter-notebookien kanssa. +- Käyttämään Scikit-learnia, mukaan lukien asennus. +- Tutustumaan lineaariseen regressioon käytännön harjoituksen avulla. + +## Asennukset ja konfiguroinnit + +[![ML aloittelijoille - Valmista työkalusi koneoppimismallien rakentamiseen](https://img.youtube.com/vi/-DfeD2k2Kj0/0.jpg)](https://youtu.be/-DfeD2k2Kj0 "ML aloittelijoille - Valmista työkalusi koneoppimismallien rakentamiseen") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi, jossa käydään läpi tietokoneen konfigurointi ML:ää varten. + +1. **Asenna Python**. Varmista, että [Python](https://www.python.org/downloads/) on asennettu tietokoneellesi. Pythonia käytetään monissa data-analytiikan ja koneoppimisen tehtävissä. Useimmissa tietokonejärjestelmissä Python on jo valmiiksi asennettuna. Käytettävissä on myös hyödyllisiä [Python Coding Packeja](https://code.visualstudio.com/learn/educators/installers?WT.mc_id=academic-77952-leestott), jotka helpottavat asennusta joillekin käyttäjille. + + Joissakin Pythonin käyttötapauksissa tarvitaan yksi versio ohjelmistosta, kun taas toisissa tarvitaan eri versio. Tämän vuoksi on hyödyllistä työskennellä [virtuaaliympäristössä](https://docs.python.org/3/library/venv.html). + +2. **Asenna Visual Studio Code**. Varmista, että Visual Studio Code on asennettu tietokoneellesi. Seuraa näitä ohjeita [Visual Studio Coden asentamiseksi](https://code.visualstudio.com/) perusasennusta varten. Tässä kurssissa käytät Pythonia Visual Studio Codessa, joten kannattaa tutustua siihen, miten [Visual Studio Code konfiguroidaan](https://docs.microsoft.com/learn/modules/python-install-vscode?WT.mc_id=academic-77952-leestott) Python-kehitystä varten. + + > Tutustu Pythonin käyttöön käymällä läpi tämä kokoelma [Learn-moduuleja](https://docs.microsoft.com/users/jenlooper-2911/collections/mp1pagggd5qrq7?WT.mc_id=academic-77952-leestott) + > + > [![Pythonin konfigurointi Visual Studio Codessa](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Pythonin konfigurointi Visual Studio Codessa") + > + > 🎥 Klikkaa yllä olevaa kuvaa videon katsomiseksi: Pythonin käyttö VS Codessa. + +3. **Asenna Scikit-learn** seuraamalla [näitä ohjeita](https://scikit-learn.org/stable/install.html). Koska sinun täytyy varmistaa, että käytät Python 3:a, on suositeltavaa käyttää virtuaaliympäristöä. Huomaa, että jos asennat tämän kirjaston M1 Macille, sivulla on erityisohjeita. + +4. **Asenna Jupyter Notebook**. Sinun täytyy [asentaa Jupyter-paketti](https://pypi.org/project/jupyter/). + +## ML-kehitysympäristösi + +Käytät **notebookeja** Python-koodin kehittämiseen ja koneoppimismallien luomiseen. Tällainen tiedostotyyppi on yleinen työkalu data-analyytikoille, ja ne tunnistaa niiden päätteestä `.ipynb`. + +Notebookit ovat interaktiivinen ympäristö, joka mahdollistaa sekä koodauksen että dokumentaation lisäämisen koodin ympärille, mikä on erittäin hyödyllistä kokeellisiin tai tutkimusprojekteihin. + +[![ML aloittelijoille - Jupyter Notebookien asennus regressiomallien rakentamisen aloittamiseksi](https://img.youtube.com/vi/7E-jC8FLA2E/0.jpg)](https://youtu.be/7E-jC8FLA2E "ML aloittelijoille - Jupyter Notebookien asennus regressiomallien rakentamisen aloittamiseksi") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi, jossa käydään läpi tämä harjoitus. + +### Harjoitus - työskentele notebookin kanssa + +Tässä kansiossa löydät tiedoston _notebook.ipynb_. + +1. Avaa _notebook.ipynb_ Visual Studio Codessa. + + Jupyter-palvelin käynnistyy Python 3+:lla. Löydät notebookista alueita, jotka voidaan `ajaa`, eli koodinpätkiä. Voit ajaa koodilohkon valitsemalla kuvakkeen, joka näyttää toistopainikkeelta. + +2. Valitse `md`-kuvake ja lisää hieman markdownia sekä seuraava teksti **# Tervetuloa notebookiisi**. + + Lisää seuraavaksi Python-koodia. + +3. Kirjoita **print('hello notebook')** koodilohkoon. +4. Valitse nuoli ajaaksesi koodin. + + Näet tulostetun lauseen: + + ```output + hello notebook + ``` + +![VS Code avoinna notebookin kanssa](../../../../2-Regression/1-Tools/images/notebook.jpg) + +Voit yhdistää koodisi kommentteihin dokumentoidaksesi notebookin itse. + +✅ Mieti hetki, kuinka erilainen web-kehittäjän työympäristö on verrattuna data-analyytikon työympäristöön. + +## Scikit-learnin käyttöönotto + +Nyt kun Python on asennettu paikalliseen ympäristöösi ja olet mukautunut Jupyter-notebookeihin, tutustutaan yhtä mukavasti Scikit-learniin (lausutaan `sci` kuten `science`). Scikit-learn tarjoaa [laajan API:n](https://scikit-learn.org/stable/modules/classes.html#api-ref), joka auttaa sinua suorittamaan ML-tehtäviä. + +Heidän [verkkosivustonsa](https://scikit-learn.org/stable/getting_started.html) mukaan "Scikit-learn on avoimen lähdekoodin koneoppimiskirjasto, joka tukee ohjattua ja ohjaamatonta oppimista. Se tarjoaa myös erilaisia työkaluja mallien sovittamiseen, datan esikäsittelyyn, mallien valintaan ja arviointiin sekä moniin muihin hyödyllisiin toimintoihin." + +Tässä kurssissa käytät Scikit-learnia ja muita työkaluja koneoppimismallien rakentamiseen suorittaaksesi niin sanottuja 'perinteisiä koneoppimistehtäviä'. Olemme tarkoituksella välttäneet neuroverkkoja ja syväoppimista, sillä ne käsitellään paremmin tulevassa 'AI aloittelijoille' -opetussuunnitelmassamme. + +Scikit-learn tekee mallien rakentamisesta ja niiden arvioinnista helppoa. Se keskittyy pääasiassa numeerisen datan käyttöön ja sisältää useita valmiita datasettiä oppimistyökaluiksi. Se sisältää myös valmiiksi rakennettuja malleja, joita opiskelijat voivat kokeilla. Tutustutaan prosessiin, jossa ladataan valmiiksi pakattua dataa ja käytetään sisäänrakennettua estimaattoria ensimmäisen ML-mallin luomiseen Scikit-learnilla perusdatan avulla. + +## Harjoitus - ensimmäinen Scikit-learn notebookisi + +> Tämä opetus on saanut inspiraationsa [lineaarisen regression esimerkistä](https://scikit-learn.org/stable/auto_examples/linear_model/plot_ols.html#sphx-glr-auto-examples-linear-model-plot-ols-py) Scikit-learnin verkkosivustolla. + +[![ML aloittelijoille - Ensimmäinen lineaarisen regression projekti Pythonilla](https://img.youtube.com/vi/2xkXL5EUpS0/0.jpg)](https://youtu.be/2xkXL5EUpS0 "ML aloittelijoille - Ensimmäinen lineaarisen regression projekti Pythonilla") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyen videon katsomiseksi, jossa käydään läpi tämä harjoitus. + +Poista _notebook.ipynb_-tiedostosta kaikki solut painamalla 'roskakori'-kuvaketta. + +Tässä osiossa työskentelet pienen datasetin kanssa, joka liittyy diabetekseen ja joka on sisäänrakennettu Scikit-learniin oppimistarkoituksia varten. Kuvittele, että haluaisit testata hoitoa diabeetikoille. Koneoppimismallit voivat auttaa sinua määrittämään, mitkä potilaat reagoisivat hoitoon paremmin, perustuen muuttujien yhdistelmiin. Jopa hyvin yksinkertainen regressiomalli, kun se visualisoidaan, voi paljastaa tietoa muuttujista, jotka auttaisivat sinua järjestämään teoreettisia kliinisiä kokeita. + +✅ Regressiomenetelmiä on monenlaisia, ja valinta riippuu siitä, mitä haluat selvittää. Jos haluat ennustaa todennäköistä pituutta tietyn ikäiselle henkilölle, käyttäisit lineaarista regressiota, koska etsit **numeerista arvoa**. Jos haluat selvittää, pitäisikö tiettyä ruokakulttuuria pitää vegaanisena vai ei, etsit **kategoriaa**, joten käyttäisit logistista regressiota. Opit lisää logistisesta regressiosta myöhemmin. Mieti hetki, mitä kysymyksiä voisit esittää datasta ja mikä näistä menetelmistä olisi sopivampi. + +Aloitetaan tehtävä. + +### Kirjastojen tuonti + +Tätä tehtävää varten tuomme joitakin kirjastoja: + +- **matplotlib**. Se on hyödyllinen [graafinen työkalu](https://matplotlib.org/), ja käytämme sitä viivakaavion luomiseen. +- **numpy**. [numpy](https://numpy.org/doc/stable/user/whatisnumpy.html) on hyödyllinen kirjasto numeerisen datan käsittelyyn Pythonissa. +- **sklearn**. Tämä on [Scikit-learn](https://scikit-learn.org/stable/user_guide.html) -kirjasto. + +Tuo joitakin kirjastoja auttamaan tehtävissäsi. + +1. Lisää tuonnit kirjoittamalla seuraava koodi: + + ```python + import matplotlib.pyplot as plt + import numpy as np + from sklearn import datasets, linear_model, model_selection + ``` + + Yllä tuodaan `matplotlib`, `numpy` sekä `datasets`, `linear_model` ja `model_selection` `sklearn`-kirjastosta. `model_selection` käytetään datan jakamiseen harjoitus- ja testijoukkoihin. + +### Diabetes-datasetti + +Sisäänrakennettu [diabetes-datasetti](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) sisältää 442 näytettä diabetekseen liittyvästä datasta, jossa on 10 ominaisuusmuuttujaa, joista osa sisältää: + +- age: ikä vuosina +- bmi: kehon massan indeksi +- bp: keskimääräinen verenpaine +- s1 tc: T-solut (eräänlainen valkosolu) + +✅ Tämä datasetti sisältää 'sukupuolen' käsitteen tärkeänä ominaisuusmuuttujana diabetekseen liittyvässä tutkimuksessa. Monet lääketieteelliset datasetit sisältävät tällaisen binääriluokituksen. Mieti hetki, miten tällaiset luokitukset saattavat sulkea pois tiettyjä väestönosia hoidoista. + +Lataa nyt X- ja y-data. + +> 🎓 Muista, että tämä on ohjattua oppimista, ja tarvitsemme nimetyn 'y'-kohteen. + +Uudessa koodisolussa lataa diabetes-datasetti kutsumalla `load_diabetes()`. Syöte `return_X_y=True` ilmoittaa, että `X` on datamatriisi ja `y` on regressiotavoite. + +1. Lisää joitakin tulostuskäskyjä näyttämään datamatriisin muoto ja sen ensimmäinen elementti: + + ```python + X, y = datasets.load_diabetes(return_X_y=True) + print(X.shape) + print(X[0]) + ``` + + Saat vastauksena tuplen. Teet niin, että määrität tuplen kaksi ensimmäistä arvoa `X`:lle ja `y`:lle. Lue lisää [tuplista](https://wikipedia.org/wiki/Tuple). + + Näet, että tämä data sisältää 442 kohdetta, jotka on muotoiltu 10 elementin taulukoiksi: + + ```text + (442, 10) + [ 0.03807591 0.05068012 0.06169621 0.02187235 -0.0442235 -0.03482076 + -0.04340085 -0.00259226 0.01990842 -0.01764613] + ``` + + ✅ Mieti hetki datan ja regressiotavoitteen välistä suhdetta. Lineaarinen regressio ennustaa suhteita ominaisuuden X ja tavoitemuuttujan y välillä. Voitko löytää [tavoitteen](https://scikit-learn.org/stable/datasets/toy_dataset.html#diabetes-dataset) diabetes-datasetille dokumentaatiosta? Mitä tämä datasetti havainnollistaa, kun otetaan huomioon tavoite? + +2. Valitse seuraavaksi osa tästä datasetistä piirtämistä varten valitsemalla datasetin 3. sarake. Voit tehdä tämän käyttämällä `:`-operaattoria valitaksesi kaikki rivit ja sitten valitsemalla 3. sarakkeen indeksillä (2). Voit myös muotoilla datan 2D-taulukoksi - kuten vaaditaan piirtämistä varten - käyttämällä `reshape(n_rows, n_columns)`. Jos yksi parametreista on -1, vastaava ulottuvuus lasketaan automaattisesti. + + ```python + X = X[:, 2] + X = X.reshape((-1,1)) + ``` + + ✅ Tulosta data milloin tahansa tarkistaaksesi sen muodon. + +3. Nyt kun sinulla on data valmiina piirtämistä varten, voit nähdä, voiko kone auttaa määrittämään loogisen jaon numeroiden välillä tässä datasetissä. Tätä varten sinun täytyy jakaa sekä data (X) että tavoite (y) testaus- ja harjoitusjoukkoihin. Scikit-learn tarjoaa yksinkertaisen tavan tehdä tämä; voit jakaa testidatasi tietyssä pisteessä. + + ```python + X_train, X_test, y_train, y_test = model_selection.train_test_split(X, y, test_size=0.33) + ``` + +4. Nyt olet valmis kouluttamaan mallisi! Lataa lineaarinen regressiomalli ja kouluta sitä X- ja y-harjoitusjoukoilla käyttämällä `model.fit()`: + + ```python + model = linear_model.LinearRegression() + model.fit(X_train, y_train) + ``` + + ✅ `model.fit()` on funktio, jonka näet monissa ML-kirjastoissa, kuten TensorFlowssa. + +5. Luo sitten ennuste testidatan avulla käyttämällä funktiota `predict()`. Tätä käytetään piirtämään viiva dataryhmien välille. + + ```python + y_pred = model.predict(X_test) + ``` + +6. Nyt on aika näyttää data kaaviossa. Matplotlib on erittäin hyödyllinen työkalu tähän tehtävään. Luo scatterplot kaikesta X- ja y-testidatasta ja käytä ennustetta piirtääksesi viiva sopivimpaan kohtaan dataryhmien välillä. + + ```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, joka näyttää datapisteet diabetekseen liittyen](../../../../2-Regression/1-Tools/images/scatterplot.png) +✅ Mieti hetki, mitä tässä tapahtuu. Suora viiva kulkee monien pienten datapisteiden läpi, mutta mitä se oikeastaan tekee? Voitko nähdä, miten tämän viivan avulla pitäisi pystyä ennustamaan, mihin uusi, ennennäkemätön datapiste sijoittuu suhteessa kuvaajan y-akseliin? Yritä pukea sanoiksi tämän mallin käytännön hyöty. + +Onnittelut, loit ensimmäisen lineaarisen regressiomallisi, teit ennusteen sen avulla ja esittelit sen kuvaajassa! + +--- +## 🚀Haaste + +Piirrä kuvaaja, jossa käytetään eri muuttujaa tästä datasetistä. Vinkki: muokkaa tätä riviä: `X = X[:,2]`. Tämän datasetin tavoitteen perusteella, mitä pystyt päättelemään diabeteksen etenemisestä sairautena? + +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus & Itseopiskelu + +Tässä opetusmateriaalissa työskentelit yksinkertaisen lineaarisen regression parissa, etkä univariaatin tai monimuuttujaisen regression kanssa. Lue hieman näiden menetelmien eroista tai katso [tämä video](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). + +Lue lisää regressiokonseptista ja pohdi, millaisiin kysymyksiin tällä tekniikalla voidaan vastata. Syvennä ymmärrystäsi ottamalla [tämä opetusohjelma](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott). + +## Tehtävä + +[Eri datasetti](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/1-Tools/assignment.md b/translations/fi/2-Regression/1-Tools/assignment.md new file mode 100644 index 000000000..42e197203 --- /dev/null +++ b/translations/fi/2-Regression/1-Tools/assignment.md @@ -0,0 +1,27 @@ + +# Regressio Scikit-learnilla + +## Ohjeet + +Tutustu [Linnerud-datasettiin](https://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_linnerud.html#sklearn.datasets.load_linnerud) Scikit-learnissa. Tämä datasetti sisältää useita [kohteita](https://scikit-learn.org/stable/datasets/toy_dataset.html#linnerrud-dataset): 'Se koostuu kolmesta harjoitusmuuttujasta (data) ja kolmesta fysiologisesta muuttujasta (kohde), jotka on kerätty kahdeltakymmeneltä keski-ikäiseltä mieheltä kuntoklubilla.' + +Omilla sanoillasi, kuvaile, kuinka luot regressiomallin, joka kuvaa vyötärönympäryksen ja tehtyjen istumaannousujen määrän välistä suhdetta. Tee sama datasetin muille datapisteille. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| ------------------------------ | ----------------------------------- | ---------------------------- | -------------------------- | +| Kuvaileva kappale toimitettu | Hyvin kirjoitettu kappale toimitettu | Muutama lause toimitettu | Ei kuvausta toimitettu | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/1-Tools/solution/Julia/README.md b/translations/fi/2-Regression/1-Tools/solution/Julia/README.md new file mode 100644 index 000000000..14ecbdfd3 --- /dev/null +++ b/translations/fi/2-Regression/1-Tools/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/2-Data/README.md b/translations/fi/2-Regression/2-Data/README.md new file mode 100644 index 000000000..75f9617a0 --- /dev/null +++ b/translations/fi/2-Regression/2-Data/README.md @@ -0,0 +1,226 @@ + +# Rakenna regressiomalli Scikit-learnilla: valmistele ja visualisoi data + +![Datavisualisoinnin infografiikka](../../../../2-Regression/2-Data/images/data-visualization.png) + +Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Tämä oppitunti on saatavilla myös R-kielellä!](../../../../2-Regression/2-Data/solution/R/lesson_2.html) + +## Johdanto + +Nyt kun sinulla on tarvittavat työkalut koneoppimismallien rakentamiseen Scikit-learnilla, olet valmis aloittamaan datan analysoinnin ja kysymysten esittämisen. Kun työskentelet datan parissa ja sovellat koneoppimisratkaisuja, on erittäin tärkeää osata esittää oikeat kysymykset, jotta datan potentiaali saadaan kunnolla hyödynnettyä. + +Tässä oppitunnissa opit: + +- Kuinka valmistella data mallin rakentamista varten. +- Kuinka käyttää Matplotlibia datan visualisointiin. + +## Oikean kysymyksen esittäminen datalle + +Kysymys, johon haluat vastauksen, määrittää sen, millaisia koneoppimisalgoritmeja käytät. Ja vastausten laatu riippuu suuresti datan luonteesta. + +Tutustu tämän oppitunnin [dataan](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv). Voit avata tämän .csv-tiedoston VS Codessa. Nopealla silmäyksellä huomaat, että datassa on tyhjiä kohtia sekä sekoitus merkkijonoja ja numeerista dataa. Lisäksi on outo sarake nimeltä 'Package', jossa data vaihtelee 'sacks', 'bins' ja muiden arvojen välillä. Data on itse asiassa melko sekavaa. + +[![ML aloittelijoille - Kuinka analysoida ja siivota datasetti](https://img.youtube.com/vi/5qGjczWTrDQ/0.jpg)](https://youtu.be/5qGjczWTrDQ "ML aloittelijoille - Kuinka analysoida ja siivota datasetti") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen videon datan valmistelusta tätä oppituntia varten. + +On hyvin harvinaista saada datasetti, joka on täysin valmis koneoppimismallin luomiseen sellaisenaan. Tässä oppitunnissa opit, kuinka valmistella raakadataa käyttämällä Pythonin standardikirjastoja. Opit myös erilaisia tekniikoita datan visualisointiin. + +## Tapaustutkimus: 'kurpitsamarkkinat' + +Tässä kansiossa löydät .csv-tiedoston juurihakemistosta `data`-kansiosta nimeltä [US-pumpkins.csv](https://github.com/microsoft/ML-For-Beginners/blob/main/2-Regression/data/US-pumpkins.csv), joka sisältää 1757 riviä dataa kurpitsamarkkinoista, ryhmiteltynä kaupungeittain. Tämä on raakadataa, joka on peräisin Yhdysvaltain maatalousministeriön [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) -raporteista. + +### Datan valmistelu + +Tämä data on julkista. Se voidaan ladata useina erillisinä tiedostoina, kaupungeittain, USDA:n verkkosivustolta. Välttääksemme liian monta erillistä tiedostoa, olemme yhdistäneet kaikki kaupunkien datat yhteen taulukkoon, joten dataa on jo _valmisteltu_ hieman. Seuraavaksi tarkastellaan dataa tarkemmin. + +### Kurpitsadata - ensimmäiset havainnot + +Mitä huomaat tästä datasta? Näet jo, että siinä on sekoitus merkkijonoja, numeroita, tyhjiä kohtia ja outoja arvoja, jotka täytyy ymmärtää. + +Mitä kysymystä voisit esittää tästä datasta käyttäen regressiotekniikkaa? Entä "Ennusta kurpitsan hinta myyntikuukauden perusteella". Kun tarkastelet dataa uudelleen, huomaat, että sinun täytyy tehdä joitakin muutoksia luodaksesi tarvittavan datastruktuurin tätä tehtävää varten. + +## Harjoitus - analysoi kurpitsadata + +Käytetään [Pandas](https://pandas.pydata.org/) -kirjastoa (nimi tulee sanoista `Python Data Analysis`), joka on erittäin hyödyllinen datan muokkaamiseen, kurpitsadatan analysointiin ja valmisteluun. + +### Ensiksi, tarkista puuttuvat päivämäärät + +Ensimmäinen askel on tarkistaa puuttuvat päivämäärät: + +1. Muunna päivämäärät kuukausimuotoon (nämä ovat Yhdysvaltain päivämääriä, joten muoto on `MM/DD/YYYY`). +2. Tallenna kuukausi uuteen sarakkeeseen. + +Avaa _notebook.ipynb_-tiedosto Visual Studio Codessa ja tuo taulukko uuteen Pandas-dataframeen. + +1. Käytä `head()`-funktiota nähdäksesi ensimmäiset viisi riviä. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ Mitä funktiota käyttäisit nähdäksesi viimeiset viisi riviä? + +1. Tarkista, onko nykyisessä dataframessa puuttuvaa dataa: + + ```python + pumpkins.isnull().sum() + ``` + + Dataa puuttuu, mutta ehkä se ei ole merkityksellistä tämän tehtävän kannalta. + +1. Jotta dataframe olisi helpompi käsitellä, valitse vain tarvittavat sarakkeet käyttämällä `loc`-funktiota, joka poimii alkuperäisestä dataframesta rivien (ensimmäinen parametri) ja sarakkeiden (toinen parametri) ryhmän. Ilmaisu `:` alla olevassa esimerkissä tarkoittaa "kaikki rivit". + + ```python + columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.loc[:, columns_to_select] + ``` + +### Toiseksi, määritä kurpitsan keskihinta + +Mieti, kuinka määrittäisit kurpitsan keskihinnan tiettynä kuukautena. Mitä sarakkeita valitsisit tähän tehtävään? Vinkki: tarvitset kolme saraketta. + +Ratkaisu: laske keskiarvo `Low Price`- ja `High Price`-sarakkeista täyttääksesi uuden Price-sarakkeen, ja muunna Date-sarake näyttämään vain kuukauden. Onneksi yllä olevan tarkistuksen mukaan päivämääristä tai hinnoista ei puutu dataa. + +1. Laske keskiarvo lisäämällä seuraava koodi: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Voit halutessasi tulostaa mitä tahansa dataa tarkistaaksesi sen käyttämällä `print(month)`. + +2. Kopioi nyt muunnettu data uuteen Pandas-dataframeen: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Kun tulostat dataframen, näet siistin ja järjestetyn datasetin, jonka pohjalta voit rakentaa uuden regressiomallin. + +### Mutta hetkinen! Tässä on jotain outoa + +Jos tarkastelet `Package`-saraketta, kurpitsat myydään monissa eri kokoonpanoissa. Jotkut myydään '1 1/9 bushel' -mittauksina, jotkut '1/2 bushel' -mittauksina, jotkut per kurpitsa, jotkut per pauna, ja jotkut suurissa laatikoissa, joiden leveydet vaihtelevat. + +> Kurpitsojen punnitseminen näyttää olevan erittäin haastavaa + +Kun tarkastellaan alkuperäistä dataa, on mielenkiintoista, että kaikki, joiden `Unit of Sale` on 'EACH' tai 'PER BIN', sisältävät myös `Package`-tyypin per tuuma, per bin tai 'each'. Kurpitsat näyttävät olevan erittäin vaikeita punnita johdonmukaisesti, joten suodatetaan ne valitsemalla vain kurpitsat, joiden `Package`-sarake sisältää merkkijonon 'bushel'. + +1. Lisää suodatin tiedoston alkuun, alkuperäisen .csv-tuonnin alle: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Jos tulostat datan nyt, näet, että saat vain noin 415 riviä dataa, jotka sisältävät kurpitsat bushel-mittauksina. + +### Mutta hetkinen! Vielä yksi asia täytyy tehdä + +Huomasitko, että bushel-määrä vaihtelee rivikohtaisesti? Sinun täytyy normalisoida hinnoittelu niin, että näytät hinnan per bushel, joten tee hieman laskutoimituksia standardoidaksesi sen. + +1. Lisää nämä rivit uuden_pumpkins-dataframen luovan lohkon jälkeen: + + ```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) -sivuston mukaan bushelin paino riippuu tuotteen tyypistä, koska se on tilavuusmittaus. "Esimerkiksi tomaattien bushelin painon pitäisi olla 56 paunaa... Lehdet ja vihreät vievät enemmän tilaa vähemmällä painolla, joten pinaatin bushel painaa vain 20 paunaa." Tämä on melko monimutkaista! Emme vaivaudu tekemään bushelin ja paunan välistä muunnosta, vaan hinnoittelemme bushelin mukaan. Kaikki tämä kurpitsabushelien tutkiminen kuitenkin osoittaa, kuinka tärkeää on ymmärtää datan luonne! + +Nyt voit analysoida hinnoittelua yksikköä kohden bushel-mittauksen perusteella. Jos tulostat datan vielä kerran, näet, kuinka se on standardoitu. + +✅ Huomasitko, että kurpitsat, jotka myydään puolibushelina, ovat erittäin kalliita? Voitko selvittää miksi? Vinkki: pienet kurpitsat ovat paljon kalliimpia kuin isot, luultavasti siksi, että niitä on paljon enemmän per bushel, kun otetaan huomioon yhden suuren ontelon piirakkakurpitsan käyttämätön tila. + +## Visualisointistrategiat + +Osa datatieteilijän roolia on osoittaa datan laatu ja luonne, jonka parissa hän työskentelee. Tätä varten he usein luovat mielenkiintoisia visualisointeja, kuten kaavioita, graafeja ja diagrammeja, jotka näyttävät datan eri näkökulmia. Näin he voivat visuaalisesti osoittaa suhteita ja aukkoja, jotka muuten olisivat vaikeasti havaittavissa. + +[![ML aloittelijoille - Kuinka visualisoida dataa Matplotlibilla](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML aloittelijoille - Kuinka visualisoida dataa Matplotlibilla") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen videon datan visualisoinnista tätä oppituntia varten. + +Visualisoinnit voivat myös auttaa määrittämään koneoppimistekniikan, joka sopii parhaiten datalle. Esimerkiksi hajontakaavio, joka näyttää seuraavan linjaa, viittaa siihen, että data sopii hyvin lineaariseen regressioharjoitukseen. + +Yksi datavisualisointikirjasto, joka toimii hyvin Jupyter-notebookeissa, on [Matplotlib](https://matplotlib.org/) (jota näit myös edellisessä oppitunnissa). + +> Saat lisää kokemusta datan visualisoinnista [näissä tutoriaaleissa](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-77952-leestott). + +## Harjoitus - kokeile Matplotlibia + +Yritä luoda joitakin peruskaavioita näyttämään juuri luomasi uusi dataframe. Mitä perusviivakaavio näyttäisi? + +1. Tuo Matplotlib tiedoston alkuun Pandas-tuonnin alle: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Suorita koko notebook uudelleen päivittääksesi. +1. Lisää notebookin loppuun solu, joka piirtää datan laatikkona: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Hajontakaavio, joka näyttää hinnan ja kuukauden välisen suhteen](../../../../2-Regression/2-Data/images/scatterplot.png) + + Onko tämä hyödyllinen kaavio? Yllättääkö siinä jokin sinua? + + Se ei ole erityisen hyödyllinen, sillä se vain näyttää datan pisteiden levityksen tiettynä kuukautena. + +### Tee siitä hyödyllinen + +Jotta kaaviot näyttäisivät hyödyllistä dataa, sinun täytyy yleensä ryhmitellä data jotenkin. Yritetään luoda kaavio, jossa y-akseli näyttää kuukaudet ja data osoittaa datan jakauman. + +1. Lisää solu luodaksesi ryhmitellyn pylväskaavion: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Pylväskaavio, joka näyttää hinnan ja kuukauden välisen suhteen](../../../../2-Regression/2-Data/images/barchart.png) + + Tämä on hyödyllisempi datavisualisointi! Se näyttää, että kurpitsojen korkein hinta esiintyy syys- ja lokakuussa. Vastaako tämä odotuksiasi? Miksi tai miksi ei? + +--- + +## 🚀Haaste + +Tutki Matplotlibin tarjoamia erilaisia visualisointityyppejä. Mitkä tyypit sopivat parhaiten regressio-ongelmiin? + +## [Jälkikysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus & Itseopiskelu + +Tutustu datan visualisoinnin eri tapoihin. Tee lista saatavilla olevista kirjastoista ja merkitse, mitkä sopivat parhaiten tiettyihin tehtäviin, esimerkiksi 2D-visualisointeihin vs. 3D-visualisointeihin. Mitä huomaat? + +## Tehtävä + +[Visualisoinnin tutkiminen](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/2-Data/assignment.md b/translations/fi/2-Regression/2-Data/assignment.md new file mode 100644 index 000000000..49e9357bc --- /dev/null +++ b/translations/fi/2-Regression/2-Data/assignment.md @@ -0,0 +1,23 @@ + +# Tutkitaan visualisointeja + +On olemassa useita eri kirjastoja, jotka ovat saatavilla datan visualisointiin. Luo joitakin visualisointeja tämän oppitunnin kurpitsadataa käyttäen matplotlibin ja seabornin avulla näytekirjassa. Mitkä kirjastot ovat helpompia käyttää? + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ----------- | -------- | -------------------- | +| | Kirja on toimitettu, ja siinä on kaksi tutkimusta/visualisointia | Kirja on toimitettu, ja siinä on yksi tutkimus/visualisointi | Kirjaa ei ole toimitettu | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/2-Data/solution/Julia/README.md b/translations/fi/2-Regression/2-Data/solution/Julia/README.md new file mode 100644 index 000000000..e360473e2 --- /dev/null +++ b/translations/fi/2-Regression/2-Data/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/3-Linear/README.md b/translations/fi/2-Regression/3-Linear/README.md new file mode 100644 index 000000000..8ca49ab79 --- /dev/null +++ b/translations/fi/2-Regression/3-Linear/README.md @@ -0,0 +1,380 @@ + +# Rakenna regressiomalli Scikit-learnilla: neljä tapaa regressioon + +![Lineaarinen vs polynominen regressio infografiikka](../../../../2-Regression/3-Linear/images/linear-polynomial.png) +> Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Tämä oppitunti on saatavilla myös R-kielellä!](../../../../2-Regression/3-Linear/solution/R/lesson_3.html) +### Johdanto + +Tähän mennessä olet tutustunut regressioon käyttäen esimerkkidataa kurpitsan hinnoitteludatasta, jota käytämme koko tämän oppitunnin ajan. Olet myös visualisoinut dataa Matplotlibin avulla. + +Nyt olet valmis sukeltamaan syvemmälle koneoppimisen regressioon. Vaikka visualisointi auttaa ymmärtämään dataa, koneoppimisen todellinen voima tulee _mallien kouluttamisesta_. Mallit koulutetaan historiallisella datalla, jotta ne voivat automaattisesti tunnistaa datan riippuvuuksia, ja niiden avulla voidaan ennustaa tuloksia uudelle datalle, jota malli ei ole aiemmin nähnyt. + +Tässä oppitunnissa opit lisää kahdesta regressiotyypistä: _perus lineaarisesta regressiosta_ ja _polynomisesta regressiosta_, sekä näiden tekniikoiden taustalla olevasta matematiikasta. Näiden mallien avulla voimme ennustaa kurpitsan hintoja eri syöttödatasta riippuen. + +[![Koneoppimisen perusteet - Lineaarisen regression ymmärtäminen](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "Koneoppimisen perusteet - Lineaarisen regression ymmärtäminen") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyttä videota varten lineaarisesta regressiosta. + +> Tässä oppimateriaalissa oletamme vain vähäistä matematiikan osaamista ja pyrimme tekemään sen helposti lähestyttäväksi opiskelijoille, jotka tulevat muilta aloilta. Huomioi muistiinpanot, 🧮 matemaattiset esimerkit, diagrammit ja muut oppimistyökalut, jotka auttavat ymmärtämisessä. + +### Esitiedot + +Sinun tulisi nyt olla perehtynyt kurpitsadatan rakenteeseen, jota tutkimme. Löydät sen esiladattuna ja esipuhdistettuna tämän oppitunnin _notebook.ipynb_-tiedostosta. Tiedostossa kurpitsan hinta on esitetty per bushel uudessa dataframessa. Varmista, että voit ajaa nämä notebookit Visual Studio Coden kernelleissä. + +### Valmistelu + +Muistutuksena, lataat tätä dataa voidaksesi esittää kysymyksiä siitä. + +- Milloin on paras aika ostaa kurpitsoja? +- Minkä hinnan voin odottaa miniatyyrikurpitsojen laatikolle? +- Pitäisikö minun ostaa ne puolibushelin koreissa vai 1 1/9 bushelin laatikoissa? +Jatketaan datan tutkimista. + +Edellisessä oppitunnissa loit Pandas-dataframen ja täytit sen osalla alkuperäistä datasettiä, standardisoiden hinnoittelun bushelin mukaan. Tällä tavalla pystyit kuitenkin keräämään vain noin 400 datapistettä ja vain syksyn kuukausilta. + +Tutustu dataan, joka on esiladattu tämän oppitunnin mukana tulevassa notebookissa. Data on esiladattu ja alkuperäinen hajontakaavio on piirretty näyttämään kuukausidataa. Ehkä voimme saada hieman enemmän yksityiskohtia datan luonteesta puhdistamalla sitä lisää. + +## Lineaarinen regressioviiva + +Kuten opit oppitunnilla 1, lineaarisen regressioharjoituksen tavoitteena on pystyä piirtämään viiva, joka: + +- **Näyttää muuttujien suhteet**. Näyttää muuttujien välisen suhteen +- **Tekee ennusteita**. Tekee tarkkoja ennusteita siitä, mihin uusi datapiste sijoittuisi suhteessa viivaan. + +On tyypillistä käyttää **Least-Squares Regression** -menetelmää tämän tyyppisen viivan piirtämiseen. Termi 'least-squares' tarkoittaa, että kaikki regressioviivan ympärillä olevat datapisteet neliöidään ja sitten summataan. Ihanteellisesti lopullinen summa on mahdollisimman pieni, koska haluamme vähän virheitä eli `least-squares`. + +Teemme näin, koska haluamme mallintaa viivan, jolla on pienin kumulatiivinen etäisyys kaikista datapisteistämme. Neliöimme termit ennen niiden yhteenlaskemista, koska olemme kiinnostuneita niiden suuruudesta, emmekä suunnasta. + +> **🧮 Näytä matematiikka** +> +> Tämä viiva, jota kutsutaan _parhaiten sopivaksi viivaksi_, voidaan ilmaista [yhtälöllä](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` on 'selittävä muuttuja'. `Y` on 'riippuva muuttuja'. Viivan kulmakerroin on `b` ja `a` on y-akselin leikkauspiste, joka viittaa `Y`:n arvoon, kun `X = 0`. +> +>![kulmakertoimen laskeminen](../../../../2-Regression/3-Linear/images/slope.png) +> +> Ensin lasketaan kulmakerroin `b`. Infografiikka: [Jen Looper](https://twitter.com/jenlooper) +> +> Toisin sanoen, viitaten alkuperäiseen kurpitsadataan liittyvään kysymykseen: "ennusta kurpitsan hinta per bushel kuukauden mukaan", `X` viittaa hintaan ja `Y` viittaa myyntikuukauteen. +> +>![yhtälön täydentäminen](../../../../2-Regression/3-Linear/images/calculation.png) +> +> Laske `Y`:n arvo. Jos maksat noin $4, sen täytyy olla huhtikuu! Infografiikka: [Jen Looper](https://twitter.com/jenlooper) +> +> Matematiikka, joka laskee viivan, täytyy osoittaa viivan kulmakerroin, joka riippuu myös leikkauspisteestä, eli siitä, missä `Y` sijaitsee, kun `X = 0`. +> +> Voit tarkastella näiden arvojen laskentamenetelmää [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) -sivustolla. Käy myös [Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) -sivustolla nähdäksesi, miten lukuarvot vaikuttavat viivaan. + +## Korrelaatio + +Yksi termi, joka on hyvä ymmärtää, on **korrelaatiokerroin** annettujen X- ja Y-muuttujien välillä. Hajontakaavion avulla voit nopeasti visualisoida tämän kertoimen. Kaavio, jossa datapisteet ovat siistissä linjassa, omaa korkean korrelaation, mutta kaavio, jossa datapisteet ovat hajallaan X:n ja Y:n välillä, omaa matalan korrelaation. + +Hyvä lineaarinen regressiomalli on sellainen, jolla on korkea (lähempänä 1 kuin 0) korrelaatiokerroin käyttäen Least-Squares Regression -menetelmää ja regressioviivaa. + +✅ Aja tämän oppitunnin mukana tuleva notebook ja katso Kuukausi-Hinta hajontakaaviota. Vaikuttaako data, joka yhdistää Kuukauden ja Hinnan kurpitsamyynnissä, olevan korkea vai matala korrelaatio visuaalisen tulkintasi mukaan hajontakaaviosta? Muuttuuko tämä, jos käytät tarkempaa mittaa kuin `Kuukausi`, esim. *vuoden päivä* (eli päivien lukumäärä vuoden alusta)? + +Alla olevassa koodissa oletamme, että olemme puhdistaneet datan ja saaneet dataframen nimeltä `new_pumpkins`, joka näyttää seuraavalta: + +ID | Kuukausi | VuodenPäivä | Lajike | Kaupunki | Pakkaus | Alin Hinta | Korkein Hinta | Hinta +---|----------|-------------|--------|----------|---------|------------|---------------|------ +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 + +> Koodi datan puhdistamiseen löytyy tiedostosta [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Olemme suorittaneet samat puhdistusvaiheet kuin edellisessä oppitunnissa ja laskeneet `VuodenPäivä`-sarakkeen seuraavalla lausekkeella: + +```python +day_of_year = pd.to_datetime(pumpkins['Date']).apply(lambda dt: (dt-datetime(dt.year,1,1)).days) +``` + +Nyt kun ymmärrät lineaarisen regression taustalla olevan matematiikan, luodaan regressiomalli nähdäksesi, voimmeko ennustaa, mikä kurpitsapaketti tarjoaa parhaat hinnat. Joku, joka ostaa kurpitsoja juhlapäivän kurpitsapellolle, saattaa haluta tätä tietoa voidakseen optimoida kurpitsapakettien ostot pellolle. + +## Korrelaation etsiminen + +[![Koneoppimisen perusteet - Korrelaation etsiminen: Lineaarisen regression avain](https://img.youtube.com/vi/uoRq-lW2eQo/0.jpg)](https://youtu.be/uoRq-lW2eQo "Koneoppimisen perusteet - Korrelaation etsiminen: Lineaarisen regression avain") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyttä videota varten korrelaatiosta. + +Edellisestä oppitunnista olet todennäköisesti nähnyt, että keskimääräinen hinta eri kuukausina näyttää tältä: + +Keskimääräinen hinta kuukauden mukaan + +Tämä viittaa siihen, että korrelaatiota saattaa olla, ja voimme yrittää kouluttaa lineaarisen regressiomallin ennustamaan suhdetta `Kuukausi` ja `Hinta` välillä tai `VuodenPäivä` ja `Hinta` välillä. Tässä on hajontakaavio, joka näyttää jälkimmäisen suhteen: + +Hajontakaavio Hinta vs. Vuoden Päivä + +Katsotaan, onko korrelaatiota käyttämällä `corr`-funktiota: + +```python +print(new_pumpkins['Month'].corr(new_pumpkins['Price'])) +print(new_pumpkins['DayOfYear'].corr(new_pumpkins['Price'])) +``` + +Näyttää siltä, että korrelaatio on melko pieni, -0.15 `Kuukauden` mukaan ja -0.17 `VuodenPäivän` mukaan, mutta saattaa olla toinen tärkeä suhde. Näyttää siltä, että eri kurpitsalajikkeiden hinnat muodostavat erilaisia klustereita. Vahvistaaksemme tämän hypoteesin, piirretään jokainen kurpitsakategoria eri värillä. Käyttämällä `ax`-parametria `scatter`-piirtofunktiossa voimme piirtää kaikki pisteet samaan kaavioon: + +```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) +``` + +Hajontakaavio Hinta vs. Vuoden Päivä + +Tutkimuksemme viittaa siihen, että lajikkeella on suurempi vaikutus kokonaishintaan kuin varsinaisella myyntipäivällä. Voimme nähdä tämän pylväsdiagrammilla: + +```python +new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') +``` + +Pylväsdiagrammi hinta vs lajike + +Keskitytään hetkeksi vain yhteen kurpitsalajikkeeseen, 'pie type', ja katsotaan, mitä vaikutusta päivämäärällä on hintaan: + +```python +pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] +pie_pumpkins.plot.scatter('DayOfYear','Price') +``` +Hajontakaavio Hinta vs. Vuoden Päivä + +Jos nyt laskemme korrelaation `Hinta` ja `VuodenPäivä` välillä käyttäen `corr`-funktiota, saamme jotain kuten `-0.27` - mikä tarkoittaa, että ennustavan mallin kouluttaminen on järkevää. + +> Ennen lineaarisen regressiomallin kouluttamista on tärkeää varmistaa, että datamme on puhdasta. Lineaarinen regressio ei toimi hyvin puuttuvien arvojen kanssa, joten on järkevää poistaa kaikki tyhjät solut: + +```python +pie_pumpkins.dropna(inplace=True) +pie_pumpkins.info() +``` + +Toinen lähestymistapa olisi täyttää tyhjät arvot vastaavan sarakkeen keskiarvoilla. + +## Yksinkertainen lineaarinen regressio + +[![Koneoppimisen perusteet - Lineaarinen ja polynominen regressio Scikit-learnilla](https://img.youtube.com/vi/e4c_UP2fSjg/0.jpg)](https://youtu.be/e4c_UP2fSjg "Koneoppimisen perusteet - Lineaarinen ja polynominen regressio Scikit-learnilla") + +> 🎥 Klikkaa yllä olevaa kuvaa lyhyttä videota varten lineaarisesta ja polynomisesta regressiosta. + +Lineaarisen regressiomallin kouluttamiseen käytämme **Scikit-learn**-kirjastoa. + +```python +from sklearn.linear_model import LinearRegression +from sklearn.metrics import mean_squared_error +from sklearn.model_selection import train_test_split +``` + +Aloitamme erottamalla syöttöarvot (ominaisuudet) ja odotetut tulokset (label) erillisiin numpy-taulukoihin: + +```python +X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) +y = pie_pumpkins['Price'] +``` + +> Huomaa, että meidän täytyi suorittaa `reshape` syöttödatalle, jotta lineaarisen regression paketti ymmärtäisi sen oikein. Lineaarinen regressio odottaa 2D-taulukkoa syötteenä, jossa taulukon jokainen rivi vastaa syöttöominaisuuksien vektoria. Meidän tapauksessamme, koska meillä on vain yksi syöte, tarvitsemme taulukon, jonka muoto on N×1, missä N on datasetin koko. + +Seuraavaksi meidän täytyy jakaa data koulutus- ja testidatasettiin, jotta voimme validoida mallimme koulutuksen jälkeen: + +```python +X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) +``` + +Lopuksi varsinaisen lineaarisen regressiomallin kouluttaminen vie vain kaksi koodiriviä. Määrittelemme `LinearRegression`-objektin ja sovitamme sen dataamme käyttämällä `fit`-metodia: + +```python +lin_reg = LinearRegression() +lin_reg.fit(X_train,y_train) +``` + +`LinearRegression`-objekti sisältää `fit`-vaiheen jälkeen kaikki regression kertoimet, jotka voidaan hakea `.coef_`-ominaisuuden avulla. Meidän tapauksessamme on vain yksi kerroin, jonka pitäisi olla noin `-0.017`. Tämä tarkoittaa, että hinnat näyttävät laskevan hieman ajan myötä, mutta eivät kovin paljon, noin 2 senttiä päivässä. Voimme myös hakea regressioviivan y-akselin leikkauspisteen `lin_reg.intercept_`-ominaisuuden avulla - se on noin `21` meidän tapauksessamme, mikä osoittaa hinnan vuoden alussa. + +Mallimme tarkkuuden näkemiseksi voimme ennustaa hinnat testidatasetilla ja mitata, kuinka lähellä ennusteemme ovat odotettuja arvoja. Tämä voidaan tehdä käyttämällä keskimääräisen neliövirheen (MSE) mittaria, joka on kaikkien odotettujen ja ennustettujen arvojen neliöityjen erojen keskiarvo. + +```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}%)') +``` +Virheemme näyttää olevan noin 2 pisteen kohdalla, mikä on ~17 %. Ei kovin hyvä. Toinen indikaattori mallin laadusta on **determinointikerroin**, joka voidaan laskea näin: + +```python +score = lin_reg.score(X_train,y_train) +print('Model determination: ', score) +``` +Jos arvo on 0, se tarkoittaa, että malli ei ota syöttötietoja huomioon ja toimii *huonoimpana lineaarisena ennustajana*, joka on yksinkertaisesti tuloksen keskiarvo. Arvo 1 tarkoittaa, että voimme täydellisesti ennustaa kaikki odotetut tulokset. Meidän tapauksessamme kerroin on noin 0.06, mikä on melko alhainen. + +Voimme myös piirtää testidatan yhdessä regressioviivan kanssa, jotta näemme paremmin, miten regressio toimii meidän tapauksessamme: + +```python +plt.scatter(X_test,y_test) +plt.plot(X_test,pred) +``` + +Lineaarinen regressio + +## Polynominen regressio + +Toinen lineaarisen regression tyyppi on polynominen regressio. Vaikka joskus muuttujien välillä on lineaarinen suhde – mitä suurempi kurpitsa tilavuudeltaan, sitä korkeampi hinta – joskus näitä suhteita ei voida kuvata tasolla tai suoralla viivalla. + +✅ Tässä on [joitakin esimerkkejä](https://online.stat.psu.edu/stat501/lesson/9/9.8) datasta, joka voisi hyödyntää polynomista regressiota. + +Katso uudelleen suhdetta Päivämäärän ja Hinnan välillä. Vaikuttaako tämä hajontakuvio siltä, että sitä pitäisi välttämättä analysoida suoralla viivalla? Eivätkö hinnat voi vaihdella? Tässä tapauksessa voit kokeilla polynomista regressiota. + +✅ Polynomit ovat matemaattisia lausekkeita, jotka voivat koostua yhdestä tai useammasta muuttujasta ja kertoimesta. + +Polynominen regressio luo kaarevan viivan, joka sopii paremmin epälineaariseen dataan. Meidän tapauksessamme, jos sisällytämme neliöidyn `DayOfYear`-muuttujan syöttötietoihin, meidän pitäisi pystyä sovittamaan datamme parabolisella käyrällä, jolla on minimi tiettynä ajankohtana vuoden aikana. + +Scikit-learn sisältää hyödyllisen [pipeline-rajapinnan](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline), joka yhdistää eri datankäsittelyvaiheet yhteen. **Pipeline** on ketju **estimaattoreita**. Meidän tapauksessamme luomme pipelinen, joka ensin lisää polynomisia ominaisuuksia malliin ja sitten kouluttaa regression: + +```python +from sklearn.preprocessing import PolynomialFeatures +from sklearn.pipeline import make_pipeline + +pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) + +pipeline.fit(X_train,y_train) +``` + +Käyttämällä `PolynomialFeatures(2)` tarkoittaa, että sisällytämme kaikki toisen asteen polynomit syöttötiedoista. Meidän tapauksessamme tämä tarkoittaa vain `DayOfYear`2, mutta kahden syöttömuuttujan X ja Y tapauksessa tämä lisää X2, XY ja Y2. Voimme myös käyttää korkeamman asteen polynomeja, jos haluamme. + +Pipelinea voidaan käyttää samalla tavalla kuin alkuperäistä `LinearRegression`-objektia, eli voimme `fit` pipelinea ja sitten käyttää `predict` saadaksemme ennustetulokset. Tässä on graafi, joka näyttää testidatan ja approksimaatiokäyrän: + +Polynominen regressio + +Polynomista regressiota käyttämällä voimme saada hieman pienemmän MSE:n ja korkeamman determinointikertoimen, mutta ei merkittävästi. Meidän täytyy ottaa huomioon muita ominaisuuksia! + +> Voit nähdä, että kurpitsan hinnat ovat alhaisimmillaan jossain Halloweenin tienoilla. Miten selittäisit tämän? + +🎃 Onnittelut, loit juuri mallin, joka voi auttaa ennustamaan piirakkakurpitsojen hinnan. Voit todennäköisesti toistaa saman prosessin kaikille kurpitsatyypeille, mutta se olisi työlästä. Opitaan nyt, miten ottaa kurpitsan lajike huomioon mallissamme! + +## Kategoriset ominaisuudet + +Ihanteellisessa maailmassa haluaisimme pystyä ennustamaan hinnat eri kurpitsalajikkeille käyttämällä samaa mallia. Kuitenkin `Variety`-sarake on hieman erilainen kuin sarakkeet kuten `Month`, koska se sisältää ei-numeerisia arvoja. Tällaisia sarakkeita kutsutaan **kategorisiksi**. + +[![ML aloittelijoille - Kategoristen ominaisuuksien ennustaminen lineaarisella regressiolla](https://img.youtube.com/vi/DYGliioIAE0/0.jpg)](https://youtu.be/DYGliioIAE0 "ML aloittelijoille - Kategoristen ominaisuuksien ennustaminen lineaarisella regressiolla") + +> 🎥 Klikkaa yllä olevaa kuvaa saadaksesi lyhyen videokatsauksen kategoristen ominaisuuksien käytöstä. + +Tässä näet, miten keskimääräinen hinta riippuu lajikkeesta: + +Keskimääräinen hinta lajikkeen mukaan + +Jotta voimme ottaa lajikkeen huomioon, meidän täytyy ensin muuntaa se numeeriseen muotoon eli **koodata** se. On olemassa useita tapoja tehdä tämä: + +* Yksinkertainen **numeerinen koodaus** rakentaa taulukon eri lajikkeista ja korvaa lajikenimen taulukon indeksillä. Tämä ei ole paras idea lineaariselle regressiolle, koska lineaarinen regressio käyttää indeksin todellista numeerista arvoa ja lisää sen tulokseen, kertomalla sen jollain kertoimella. Meidän tapauksessamme indeksin numeron ja hinnan välinen suhde on selvästi epälineaarinen, vaikka varmistaisimme, että indeksit ovat järjestetty jollain erityisellä tavalla. +* **One-hot-koodaus** korvaa `Variety`-sarakkeen neljällä eri sarakkeella, yksi kullekin lajikkeelle. Jokainen sarake sisältää `1`, jos vastaava rivi on tiettyä lajiketta, ja `0` muuten. Tämä tarkoittaa, että lineaarisessa regressiossa on neljä kerrointa, yksi kullekin kurpitsalajikkeelle, jotka vastaavat kyseisen lajikkeen "aloitushintaa" (tai pikemminkin "lisähintaa"). + +Alla oleva koodi näyttää, miten voimme tehdä one-hot-koodauksen lajikkeelle: + +```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 + +Jotta voimme kouluttaa lineaarisen regression käyttäen one-hot-koodattua lajiketta syötteenä, meidän täytyy vain alustaa `X` ja `y` data oikein: + +```python +X = pd.get_dummies(new_pumpkins['Variety']) +y = new_pumpkins['Price'] +``` + +Loppu koodi on sama kuin mitä käytimme aiemmin kouluttaaksemme lineaarisen regression. Jos kokeilet sitä, huomaat, että keskimääräinen neliövirhe (MSE) on suunnilleen sama, mutta saamme paljon korkeamman determinointikertoimen (~77 %). Jotta ennusteet olisivat vielä tarkempia, voimme ottaa huomioon enemmän kategorisia ominaisuuksia sekä numeerisia ominaisuuksia, kuten `Month` tai `DayOfYear`. Jotta saamme yhden suuren ominaisuusjoukon, voimme käyttää `join`-toimintoa: + +```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'] +``` + +Tässä otamme myös huomioon `City` ja `Package`-tyypin, mikä antaa meille MSE:n 2.84 (10 %) ja determinointikertoimen 0.94! + +## Yhdistäminen + +Parhaan mallin luomiseksi voimme käyttää yhdistettyä (one-hot-koodattua kategorista + numeerista) dataa yllä olevasta esimerkistä yhdessä polynomisen regression kanssa. Tässä on täydellinen koodi käteväksi viitteeksi: + +```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) +``` + +Tämän pitäisi antaa meille paras determinointikerroin, lähes 97 %, ja MSE=2.23 (~8 % ennustevirhe). + +| Malli | MSE | Determinointi | +|-------|-----|---------------| +| `DayOfYear` Lineaarinen | 2.77 (17.2 %) | 0.07 | +| `DayOfYear` Polynominen | 2.73 (17.0 %) | 0.08 | +| `Variety` Lineaarinen | 5.24 (19.7 %) | 0.77 | +| Kaikki ominaisuudet Lineaarinen | 2.84 (10.5 %) | 0.94 | +| Kaikki ominaisuudet Polynominen | 2.23 (8.25 %) | 0.97 | + +🏆 Hyvin tehty! Loit neljä regressiomallia yhdessä oppitunnissa ja paransit mallin laatua 97 %:iin. Regressiota käsittelevän osion viimeisessä osassa opit logistisesta regressiosta kategorioiden määrittämiseksi. + +--- +## 🚀Haaste + +Testaa useita eri muuttujia tässä muistikirjassa ja katso, miten korrelaatio vastaa mallin tarkkuutta. + +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Tässä oppitunnissa opimme lineaarisesta regressiosta. On olemassa muita tärkeitä regressiotyyppejä. Lue Stepwise-, Ridge-, Lasso- ja Elasticnet-tekniikoista. Hyvä kurssi lisäopiskeluun on [Stanfordin tilastollisen oppimisen kurssi](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). + +## Tehtävä + +[Rakenna malli](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/3-Linear/assignment.md b/translations/fi/2-Regression/3-Linear/assignment.md new file mode 100644 index 000000000..1756aa559 --- /dev/null +++ b/translations/fi/2-Regression/3-Linear/assignment.md @@ -0,0 +1,25 @@ + +# Luo regressiomalli + +## Ohjeet + +Tässä oppitunnissa opit rakentamaan mallin käyttämällä sekä lineaarista että polynomista regressiota. Käytä tätä tietoa löytääksesi datasetin tai käytä Scikit-learnin sisäänrakennettuja dataset-kokoelmia rakentaaksesi uuden mallin. Selitä muistikirjassasi, miksi valitsit käyttämäsi tekniikan, ja osoita mallisi tarkkuus. Jos malli ei ole tarkka, selitä miksi. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ----------------------------------------------------------- | -------------------------- | ------------------------------ | +| | esittää täydellisen muistikirjan hyvin dokumentoidulla ratkaisulla | ratkaisu on keskeneräinen | ratkaisu on virheellinen tai sisältää bugeja | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/3-Linear/solution/Julia/README.md b/translations/fi/2-Regression/3-Linear/solution/Julia/README.md new file mode 100644 index 000000000..4258d61a2 --- /dev/null +++ b/translations/fi/2-Regression/3-Linear/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/4-Logistic/README.md b/translations/fi/2-Regression/4-Logistic/README.md new file mode 100644 index 000000000..ab7273387 --- /dev/null +++ b/translations/fi/2-Regression/4-Logistic/README.md @@ -0,0 +1,412 @@ + +# Logistinen regressio kategorioiden ennustamiseen + +![Logistinen vs. lineaarinen regressio -infografiikka](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) + +## [Esiluentakysely](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Tämä oppitunti on saatavilla myös R-kielellä!](../../../../2-Regression/4-Logistic/solution/R/lesson_4.html) + +## Johdanto + +Tässä viimeisessä oppitunnissa regressiosta, joka on yksi perinteisistä _klassisen_ koneoppimisen tekniikoista, tarkastelemme logistista regressiota. Tätä tekniikkaa käytetään mallintamaan ja ennustamaan binäärisiä kategorioita. Onko tämä karkki suklaata vai ei? Onko tämä tauti tarttuva vai ei? Valitseeko asiakas tämän tuotteen vai ei? + +Tässä oppitunnissa opit: + +- Uuden kirjaston datan visualisointiin +- Logistisen regression tekniikoita + +✅ Syvennä ymmärrystäsi tämän tyyppisestä regressiosta tässä [Learn-moduulissa](https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-77952-leestott) + +## Esitiedot + +Työskenneltyämme kurpitsadataa käyttäen olemme nyt riittävän tuttuja sen kanssa huomataksemme, että siinä on yksi binäärinen kategoria, jonka kanssa voimme työskennellä: `Color`. + +Rakennetaan logistinen regressiomalli ennustamaan, _minkä värinen tietty kurpitsa todennäköisesti on_ (oranssi 🎃 vai valkoinen 👻). + +> Miksi puhumme binäärisestä luokittelusta regressiota käsittelevässä oppitunnissa? Ainoastaan kielellisen mukavuuden vuoksi, sillä logistinen regressio on [todellisuudessa luokittelumenetelmä](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), vaikkakin lineaarinen sellainen. Opit muista tavoista luokitella dataa seuraavassa oppituntiryhmässä. + +## Määrittele kysymys + +Tässä yhteydessä ilmaisemme tämän binäärisesti: 'Valkoinen' tai 'Ei valkoinen'. Datasetissämme on myös 'raidallinen' kategoria, mutta sen esiintymiä on vähän, joten emme käytä sitä. Se katoaa joka tapauksessa, kun poistamme datasetistä puuttuvat arvot. + +> 🎃 Hauska fakta: kutsumme joskus valkoisia kurpitsoja 'aavekurpitsoiksi'. Niitä ei ole kovin helppo kaivertaa, joten ne eivät ole yhtä suosittuja kuin oranssit, mutta ne näyttävät siisteiltä! Voisimme siis myös muotoilla kysymyksemme näin: 'Aave' vai 'Ei aave'. 👻 + +## Tietoa logistisesta regressiosta + +Logistinen regressio eroaa aiemmin oppimastasi lineaarisesta regressiosta muutamalla tärkeällä tavalla. + +[![ML aloittelijoille - Logistisen regression ymmärtäminen koneoppimisen luokittelussa](https://img.youtube.com/vi/KpeCT6nEpBY/0.jpg)](https://youtu.be/KpeCT6nEpBY "ML aloittelijoille - Logistisen regression ymmärtäminen koneoppimisen luokittelussa") + +> 🎥 Klikkaa yllä olevaa kuvaa saadaksesi lyhyen videoesittelyn logistisesta regressiosta. + +### Binäärinen luokittelu + +Logistinen regressio ei tarjoa samoja ominaisuuksia kuin lineaarinen regressio. Edellinen tarjoaa ennusteen binäärisestä kategoriasta ("valkoinen tai ei valkoinen"), kun taas jälkimmäinen pystyy ennustamaan jatkuvia arvoja, esimerkiksi kurpitsan alkuperän ja sadonkorjuuajan perusteella, _kuinka paljon sen hinta nousee_. + +![Kurpitsan luokittelumalli](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) +> Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Muut luokittelut + +Logistisessa regressiossa on myös muita tyyppejä, kuten multinomiaalinen ja ordinaalinen: + +- **Multinomiaalinen**, jossa on useampi kuin yksi kategoria - "Oranssi, Valkoinen ja Raidallinen". +- **Ordinaalinen**, jossa on järjestettyjä kategorioita, hyödyllinen, jos haluamme järjestää tulokset loogisesti, kuten kurpitsat, jotka on järjestetty kokojen mukaan (mini, sm, med, lg, xl, xxl). + +![Multinomiaalinen vs. ordinaalinen regressio](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) + +### Muuttujien EI tarvitse korreloida + +Muistatko, kuinka lineaarinen regressio toimi paremmin korreloivien muuttujien kanssa? Logistinen regressio on päinvastainen - muuttujien ei tarvitse olla linjassa. Tämä sopii tälle datalle, jossa korrelaatiot ovat melko heikkoja. + +### Tarvitset paljon puhdasta dataa + +Logistinen regressio antaa tarkempia tuloksia, jos käytät enemmän dataa; pieni datasetimme ei ole optimaalinen tähän tehtävään, joten pidä tämä mielessä. + +[![ML aloittelijoille - Datan analysointi ja valmistelu logistista regressiota varten](https://img.youtube.com/vi/B2X4H9vcXTs/0.jpg)](https://youtu.be/B2X4H9vcXTs "ML aloittelijoille - Datan analysointi ja valmistelu logistista regressiota varten") + +> 🎥 Klikkaa yllä olevaa kuvaa saadaksesi lyhyen videoesittelyn datan valmistelusta lineaarista regressiota varten. + +✅ Mieti, millaiset datatyypit sopisivat hyvin logistiseen regressioon. + +## Harjoitus - siivoa data + +Ensiksi siivoa dataa hieman, poista puuttuvat arvot ja valitse vain tietyt sarakkeet: + +1. Lisää seuraava koodi: + + ```python + + columns_to_select = ['City Name','Package','Variety', 'Origin','Item Size', 'Color'] + pumpkins = full_pumpkins.loc[:, columns_to_select] + + pumpkins.dropna(inplace=True) + ``` + + Voit aina vilkaista uutta dataframeasi: + + ```python + pumpkins.info + ``` + +### Visualisointi - kategorinen kaavio + +Olet nyt ladannut [aloitusmuistion](../../../../2-Regression/4-Logistic/notebook.ipynb) kurpitsadatalla ja siivonnut sen niin, että datasetissä on muutama muuttuja, mukaan lukien `Color`. Visualisoidaan dataframe muistiossa käyttäen eri kirjastoa: [Seaborn](https://seaborn.pydata.org/index.html), joka on rakennettu aiemmin käyttämämme Matplotlibin päälle. + +Seaborn tarjoaa käteviä tapoja visualisoida dataa. Esimerkiksi voit verrata datan jakaumia jokaiselle `Variety`- ja `Color`-arvolle kategorisessa kaaviossa. + +1. Luo tällainen kaavio käyttämällä `catplot`-funktiota, käyttäen kurpitsadataamme `pumpkins` ja määrittämällä värikartta jokaiselle kurpitsakategorialle (oranssi tai valkoinen): + + ```python + import seaborn as sns + + palette = { + 'ORANGE': 'orange', + 'WHITE': 'wheat', + } + + sns.catplot( + data=pumpkins, y="Variety", hue="Color", kind="count", + palette=palette, + ) + ``` + + ![Visualisoidun datan ruudukko](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) + + Tarkastelemalla dataa voit nähdä, miten `Color`-data liittyy `Variety`-arvoon. + + ✅ Mitä mielenkiintoisia tutkimusaiheita voit keksiä tämän kategorisen kaavion perusteella? + +### Datan esikäsittely: ominaisuuksien ja luokkien koodaus + +Datasetissämme kaikki sarakkeet sisältävät merkkijonoarvoja. Kategorisen datan käsittely on ihmisille intuitiivista, mutta ei koneille. Koneoppimisalgoritmit toimivat hyvin numeroiden kanssa. Siksi koodaus on erittäin tärkeä vaihe datan esikäsittelyssä, koska se mahdollistaa kategorisen datan muuttamisen numeeriseksi dataksi ilman tietojen menetystä. Hyvä koodaus johtaa hyvän mallin rakentamiseen. + +Ominaisuuksien koodaukseen on kaksi päätyyppiä: + +1. Ordinaalikoodaus: sopii hyvin ordinaalisille muuttujille, jotka ovat kategorisia muuttujia, joiden data noudattaa loogista järjestystä, kuten datasetimme `Item Size` -sarake. Tämä luo kartoituksen, jossa jokainen kategoria esitetään numerolla, joka on sarakkeen kategorian järjestysnumero. + + ```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. Kategorinen koodaus: sopii hyvin nominaalisille muuttujille, jotka ovat kategorisia muuttujia, joiden data ei noudata loogista järjestystä, kuten kaikki muut datasetin ominaisuudet paitsi `Item Size`. Tämä on yksi-hot-koodaus, mikä tarkoittaa, että jokainen kategoria esitetään binäärisellä sarakkeella: koodattu muuttuja on yhtä kuin 1, jos kurpitsa kuuluu kyseiseen `Variety`-arvoon, ja 0 muuten. + + ```python + from sklearn.preprocessing import OneHotEncoder + + categorical_features = ['City Name', 'Package', 'Variety', 'Origin'] + categorical_encoder = OneHotEncoder(sparse_output=False) + ``` + +Sitten `ColumnTransformer`-luokkaa käytetään yhdistämään useita koodauksia yhdeksi vaiheeksi ja soveltamaan niitä sopiviin sarakkeisiin. + +```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) +``` + +Toisaalta luokan koodaamiseen käytämme scikit-learnin `LabelEncoder`-luokkaa, joka on apuluokka normalisoimaan luokat siten, että ne sisältävät vain arvoja välillä 0 ja n_classes-1 (tässä 0 ja 1). + +```python + from sklearn.preprocessing import LabelEncoder + + label_encoder = LabelEncoder() + encoded_label = label_encoder.fit_transform(pumpkins['Color']) +``` + +Kun olemme koodanneet ominaisuudet ja luokan, voimme yhdistää ne uuteen dataframeen `encoded_pumpkins`. + +```python + encoded_pumpkins = encoded_features.assign(Color=encoded_label) +``` + +✅ Mitkä ovat ordinaalikoodauksen edut `Item Size` -sarakkeelle? + +### Analysoi muuttujien välisiä suhteita + +Nyt kun olemme esikäsitelleet datamme, voimme analysoida ominaisuuksien ja luokan välisiä suhteita saadaksemme käsityksen siitä, kuinka hyvin malli pystyy ennustamaan luokan annettujen ominaisuuksien perusteella. Paras tapa suorittaa tämäntyyppinen analyysi on datan visualisointi. Käytämme jälleen Seabornin `catplot`-funktiota visualisoidaksemme suhteet `Item Size`-, `Variety`- ja `Color`-arvojen välillä kategorisessa kaaviossa. Visualisointia varten käytämme koodattua `Item Size` -saraketta ja koodaamatonta `Variety`-saraketta. + +```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}") +``` + +![Visualisoidun datan kaavio](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) + +### Käytä swarm-kaaviota + +Koska `Color` on binäärinen kategoria (valkoinen tai ei), se tarvitsee '[erikoistuneen lähestymistavan](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar)' visualisointiin. On olemassa muita tapoja visualisoida tämän kategorian suhde muihin muuttujiin. + +Voit visualisoida muuttujia rinnakkain Seabornin kaavioilla. + +1. Kokeile 'swarm'-kaaviota arvojen jakauman näyttämiseksi: + + ```python + palette = { + 0: 'orange', + 1: 'wheat' + } + sns.swarmplot(x="Color", y="ord__Item Size", data=encoded_pumpkins, palette=palette) + ``` + + ![Visualisoidun datan swarm-kaavio](../../../../2-Regression/4-Logistic/images/swarm_2.png) + +**Huomio**: Yllä oleva koodi saattaa tuottaa varoituksen, koska Seaborn ei pysty esittämään näin suurta määrää datapisteitä swarm-kaaviossa. Mahdollinen ratkaisu on pienentää merkkien kokoa käyttämällä 'size'-parametria. Huomaa kuitenkin, että tämä voi vaikuttaa kaavion luettavuuteen. + +> **🧮 Näytä matematiikka** +> +> Logistinen regressio perustuu 'maksimimäärän todennäköisyyden' käsitteeseen käyttäen [sigmoidifunktioita](https://wikipedia.org/wiki/Sigmoid_function). 'Sigmoidifunktio' näyttää graafilla 'S'-muotoiselta. Se ottaa arvon ja muuntaa sen välillä 0 ja 1. Sen käyrää kutsutaan myös 'logistiseksi käyräksi'. Sen kaava näyttää tältä: +> +> ![logistinen funktio](../../../../2-Regression/4-Logistic/images/sigmoid.png) +> +> missä sigmoidin keskipiste on x:n 0-pisteessä, L on käyrän maksimiarvo ja k on käyrän jyrkkyys. Jos funktion tulos on yli 0,5, kyseinen luokka saa binäärisen valinnan arvon '1'. Muussa tapauksessa se luokitellaan arvoksi '0'. + +## Rakenna mallisi + +Binäärisen luokittelun mallin rakentaminen on yllättävän suoraviivaista Scikit-learnilla. + +[![ML aloittelijoille - Logistinen regressio datan luokitteluun](https://img.youtube.com/vi/MmZS2otPrQ8/0.jpg)](https://youtu.be/MmZS2otPrQ8 "ML aloittelijoille - Logistinen regressio datan luokitteluun") + +> 🎥 Klikkaa yllä olevaa kuvaa saadaksesi lyhyen videoesittelyn logistisen regressiomallin rakentamisesta. + +1. Valitse muuttujat, joita haluat käyttää luokittelumallissasi, ja jaa data koulutus- ja testijoukkoihin kutsumalla `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. Nyt voit kouluttaa mallisi kutsumalla `fit()` koulutusdatalla ja tulostaa sen tuloksen: + + ```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)) + ``` + + Tarkastele mallisi tulostaulukkoa. Se ei ole huono, kun otetaan huomioon, että sinulla on vain noin 1000 riviä dataa: + + ```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 + ``` + +## Parempi ymmärrys virhemaatriksin avulla + +Vaikka voit saada tulostaulukon raportin [termeistä](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) tulostamalla yllä olevat kohteet, saatat ymmärtää malliasi helpommin käyttämällä [virhemaatriksia](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) mallin suorituskyvyn arvioimiseen. + +> 🎓 '[Virhemaatriksi](https://wikipedia.org/wiki/Confusion_matrix)' (tai 'virhemaatriksi') on taulukko, joka ilmaisee mallisi todelliset vs. väärät positiiviset ja negatiiviset arvot, ja siten arvioi ennusteiden tarkkuutta. + +1. Käytä virhemaatriksia kutsumalla `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Tarkastele mallisi virhemaatriksia: + + ```output + array([[162, 4], + [ 11, 22]]) + ``` + +Scikit-learnissa virhemaatriksin rivit (akseli 0) ovat todellisia luokkia ja sarakkeet (akseli 1) ovat ennustettuja luokkia. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +Mitä tässä tapahtuu? Oletetaan, että malliamme pyydetään luokittelemaan kurpitsat kahteen binääriseen kategoriaan, kategoriaan 'valkoinen' ja kategoriaan 'ei-valkoinen'. + +- Jos mallisi ennustaa kurpitsan ei-valkoiseksi ja se kuuluu todellisuudessa kategoriaan 'ei-valkoinen', kutsumme sitä oikeaksi negatiiviseksi (TN), joka näkyy vasemmassa yläkulmassa. +- Jos mallisi ennustaa kurpitsan valkoiseksi ja se kuuluu todellisuudessa kategoriaan 'ei-valkoinen', kutsumme sitä vääräksi positiiviseksi (FP), joka näkyy oikeassa yläkulmassa. +- Jos mallisi ennustaa kurpitsan ei-valkoiseksi ja se kuuluu todellisuudessa kategoriaan 'valkoinen', kutsumme sitä vääräksi negatiiviseksi (FN), joka näkyy vasemmassa alakulmassa. +- Jos mallisi ennustaa kurpitsan valkoiseksi ja se kuuluu todellisuudessa kategoriaan 'valkoinen', kutsumme sitä oikeaksi positiiviseksi (TP), joka näkyy oikeassa alakulmassa. + +Kuten arvata saattaa, on toivottavaa, että oikeiden positiivisten ja oikeiden negatiivisten määrä on suuri ja väärien positiivisten ja väärien negatiivisten määrä pieni, mikä tarkoittaa, että malli toimii paremmin. +Miten sekaannusmatriisi liittyy tarkkuuteen ja kattavuuteen? Muista, että yllä tulostettu luokitteluraportti näytti tarkkuuden (0.85) ja kattavuuden (0.67). + +Tarkkuus = tp / (tp + fp) = 22 / (22 + 4) = 0.8461538461538461 + +Kattavuus = tp / (tp + fn) = 22 / (22 + 11) = 0.6666666666666666 + +✅ K: Miten malli suoriutui sekaannusmatriisin perusteella? V: Ei huono; on hyvä määrä oikeita negatiivisia, mutta myös joitakin vääriä negatiivisia. + +Palataan aiemmin nähtyihin termeihin sekaannusmatriisin TP/TN ja FP/FN -kartoituksen avulla: + +🎓 Tarkkuus: TP/(TP + FP) Relevanttien tapausten osuus haetuista tapauksista (esim. mitkä tunnisteet merkittiin oikein) + +🎓 Kattavuus: TP/(TP + FN) Relevanttien tapausten osuus, jotka haettiin, riippumatta siitä, merkittiinkö ne oikein vai ei + +🎓 f1-pisteet: (2 * tarkkuus * kattavuus)/(tarkkuus + kattavuus) Painotettu keskiarvo tarkkuudesta ja kattavuudesta, paras arvo on 1 ja huonoin 0 + +🎓 Tuki: Haettujen tunnisteiden esiintymien lukumäärä + +🎓 Tarkkuus: (TP + TN)/(TP + TN + FP + FN) Oikein ennustettujen tunnisteiden prosenttiosuus näytteestä. + +🎓 Makrokeskiarvo: Painottamattomien keskiarvojen laskeminen kullekin tunnisteelle, ottamatta huomioon tunnisteiden epätasapainoa. + +🎓 Painotettu keskiarvo: Keskiarvojen laskeminen kullekin tunnisteelle, ottaen huomioon tunnisteiden epätasapaino painottamalla niitä niiden tuen (kunkin tunnisteen oikeiden tapausten lukumäärän) mukaan. + +✅ Voitko miettiä, mitä metriikkaa sinun tulisi seurata, jos haluat vähentää väärien negatiivisten määrää? + +## Visualisoi tämän mallin ROC-käyrä + +[![ML aloittelijoille - Logistisen regressiomallin suorituskyvyn analysointi ROC-käyrillä](https://img.youtube.com/vi/GApO575jTA0/0.jpg)](https://youtu.be/GApO575jTA0 "ML aloittelijoille - Logistisen regressiomallin suorituskyvyn analysointi ROC-käyrillä") + +> 🎥 Klikkaa yllä olevaa kuvaa saadaksesi lyhyen videokatsauksen ROC-käyristä + +Tehdään vielä yksi visualisointi, jotta näemme niin sanotun 'ROC'-käyrän: + +```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() +``` + +Käyttämällä Matplotlibia, piirrä mallin [Receiving Operating Characteristic](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) eli ROC. ROC-käyriä käytetään usein luokittelijan tulosten tarkasteluun oikeiden ja väärien positiivisten osalta. "ROC-käyrillä Y-akselilla on yleensä oikeiden positiivisten osuus ja X-akselilla väärien positiivisten osuus." Käyrän jyrkkyys ja väli keskilinjan ja käyrän välillä ovat tärkeitä: haluat käyrän, joka nopeasti nousee ja menee linjan yli. Meidän tapauksessamme on aluksi vääriä positiivisia, ja sitten linja nousee ja menee kunnolla yli: + +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) + +Lopuksi, käytä Scikit-learnin [`roc_auc_score` APIa](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) laskeaksesi todellinen 'Area Under the Curve' (AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` +Tulos on `0.9749908725812341`. Koska AUC vaihtelee välillä 0–1, haluat korkean pistemäärän, sillä malli, joka on 100 % oikeassa ennusteissaan, saa AUC-arvon 1; tässä tapauksessa malli on _melko hyvä_. + +Tulevissa luokitteluun liittyvissä oppitunneissa opit, kuinka voit parantaa mallisi pisteitä iteratiivisesti. Mutta nyt, onneksi olkoon! Olet suorittanut nämä regressio-oppitunnit! + +--- +## 🚀Haaste + +Logistiseen regressioon liittyy paljon enemmän! Mutta paras tapa oppia on kokeilla. Etsi datasetti, joka sopii tämän tyyppiseen analyysiin, ja rakenna malli sen avulla. Mitä opit? vinkki: kokeile [Kagglea](https://www.kaggle.com/search?q=logistic+regression+datasets) löytääksesi mielenkiintoisia datasettejä. + +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus & Itseopiskelu + +Lue [tämän Stanfordin artikkelin](https://web.stanford.edu/~jurafsky/slp3/5.pdf) ensimmäiset sivut logistisen regression käytännön sovelluksista. Mieti tehtäviä, jotka sopivat paremmin jommallekummalle regressiotyypille, joita olemme tähän mennessä opiskelleet. Mikä toimisi parhaiten? + +## Tehtävä + +[Uudelleen yrittäminen tässä regressiossa](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/4-Logistic/assignment.md b/translations/fi/2-Regression/4-Logistic/assignment.md new file mode 100644 index 000000000..b03730778 --- /dev/null +++ b/translations/fi/2-Regression/4-Logistic/assignment.md @@ -0,0 +1,25 @@ + +# Uudelleen yrittäminen regressiolla + +## Ohjeet + +Tunnilla käytit kurpitsadataa, joka oli osittain rajattu. Nyt palaa alkuperäiseen dataan ja yritä käyttää sitä kokonaisuudessaan, puhdistettuna ja standardoituna, rakentaaksesi logistisen regressiomallin. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ---------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | Esitetään muistikirja, jossa on hyvin selitetty ja hyvin toimiva malli | Esitetään muistikirja, jossa malli toimii vähimmäistasolla | Esitetään muistikirja, jossa malli toimii heikosti tai puuttuu kokonaan | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/4-Logistic/solution/Julia/README.md b/translations/fi/2-Regression/4-Logistic/solution/Julia/README.md new file mode 100644 index 000000000..0d3c9945f --- /dev/null +++ b/translations/fi/2-Regression/4-Logistic/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/2-Regression/README.md b/translations/fi/2-Regression/README.md new file mode 100644 index 000000000..7076f2da6 --- /dev/null +++ b/translations/fi/2-Regression/README.md @@ -0,0 +1,54 @@ + +# Regressiomallit koneoppimisessa +## Alueellinen aihe: Regressiomallit kurpitsan hinnoille Pohjois-Amerikassa 🎃 + +Pohjois-Amerikassa kurpitsat kaiverretaan usein pelottaviksi kasvoiksi Halloweenia varten. Tutustutaanpa tarkemmin näihin kiehtoviin vihanneksiin! + +![jack-o-lanterns](../../../2-Regression/images/jack-o-lanterns.jpg) +> Kuva: Beth Teutschmann osoitteessa Unsplash + +## Mitä opit + +[![Johdanto regressioon](https://img.youtube.com/vi/5QnJtDad4iQ/0.jpg)](https://youtu.be/5QnJtDad4iQ "Johdantovideo regressioon - Klikkaa katsoaksesi!") +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen johdantovideon tähän oppituntiin + +Tämän osion oppitunnit käsittelevät regressiotyyppejä koneoppimisen kontekstissa. Regressiomallit voivat auttaa määrittämään _suhteen_ muuttujien välillä. Tämän tyyppinen malli voi ennustaa arvoja, kuten pituutta, lämpötilaa tai ikää, ja paljastaa muuttujien välisiä yhteyksiä analysoidessaan datapisteitä. + +Näissä oppitunneissa opit lineaarisen ja logistisen regression erot sekä sen, milloin kumpaakin kannattaa käyttää. + +[![ML aloittelijoille - Johdanto regressiomalleihin koneoppimisessa](https://img.youtube.com/vi/XA3OaoW86R8/0.jpg)](https://youtu.be/XA3OaoW86R8 "ML aloittelijoille - Johdanto regressiomalleihin koneoppimisessa") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi lyhyen videon regressiomalleista. + +Tässä oppituntisarjassa opit aloittamaan koneoppimistehtävät, mukaan lukien Visual Studio Coden konfiguroinnin muistikirjojen hallintaan, joka on yleinen ympäristö datatieteilijöille. Tutustut Scikit-learniin, koneoppimiskirjastoon, ja rakennat ensimmäiset mallisi, keskittyen tässä luvussa regressiomalleihin. + +> On olemassa hyödyllisiä vähäkoodisia työkaluja, jotka voivat auttaa sinua oppimaan regressiomallien kanssa työskentelyä. Kokeile [Azure ML:ää tähän tehtävään](https://docs.microsoft.com/learn/modules/create-regression-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +### Oppitunnit + +1. [Työkalut käyttöön](1-Tools/README.md) +2. [Datan hallinta](2-Data/README.md) +3. [Lineaarinen ja polynominen regressio](3-Linear/README.md) +4. [Logistinen regressio](4-Logistic/README.md) + +--- +### Tekijät + +"ML regressiolla" on kirjoitettu ♥️:lla [Jen Looperin](https://twitter.com/jenlooper) toimesta. + +♥️ Kysymysten laatijoihin kuuluvat: [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan) ja [Ornella Altunyan](https://twitter.com/ornelladotcom) + +Kurpitsadatan on ehdottanut [tämä Kaggle-projekti](https://www.kaggle.com/usda/a-year-of-pumpkin-prices), ja sen tiedot ovat peräisin [Specialty Crops Terminal Markets Standard Reports](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) -raporteista, joita jakaa Yhdysvaltain maatalousministeriö. Olemme lisänneet joitakin pisteitä värin mukaan lajikkeen perusteella normalisoidaksemme jakaumaa. Tämä data on julkista tietoa. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/3-Web-App/1-Web-App/README.md b/translations/fi/3-Web-App/1-Web-App/README.md new file mode 100644 index 000000000..bb09c0c70 --- /dev/null +++ b/translations/fi/3-Web-App/1-Web-App/README.md @@ -0,0 +1,359 @@ + +# Rakenna verkkosovellus ML-mallin käyttöön + +Tässä oppitunnissa koulutat ML-mallin datajoukolla, joka on kirjaimellisesti "maailman ulkopuolelta": _UFO-havainnot viimeisen vuosisadan ajalta_, jotka on kerätty NUFORC:n tietokannasta. + +Opit: + +- Kuinka 'pickle' koulutettu malli +- Kuinka käyttää mallia Flask-sovelluksessa + +Jatkamme muistikirjojen käyttöä datan puhdistamiseen ja mallin kouluttamiseen, mutta voit viedä prosessin askeleen pidemmälle tutkimalla mallin käyttöä "luonnossa", eli verkkosovelluksessa. + +Tätä varten sinun täytyy rakentaa verkkosovellus Flaskin avulla. + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +## Sovelluksen rakentaminen + +On olemassa useita tapoja rakentaa verkkosovelluksia, jotka hyödyntävät koneoppimismalleja. Verkkosovelluksen arkkitehtuuri voi vaikuttaa siihen, miten mallisi koulutetaan. Kuvittele, että työskentelet yrityksessä, jossa data-analytiikkatiimi on kouluttanut mallin, jota he haluavat sinun käyttävän sovelluksessa. + +### Huomioitavat asiat + +On monia kysymyksiä, joita sinun täytyy esittää: + +- **Onko kyseessä verkkosovellus vai mobiilisovellus?** Jos rakennat mobiilisovellusta tai tarvitset mallin IoT-kontekstissa, voit käyttää [TensorFlow Lite](https://www.tensorflow.org/lite/) ja hyödyntää mallia Android- tai iOS-sovelluksessa. +- **Missä malli sijaitsee?** Pilvessä vai paikallisesti? +- **Offline-tuki.** Pitääkö sovelluksen toimia offline-tilassa? +- **Mitä teknologiaa käytettiin mallin kouluttamiseen?** Valittu teknologia voi vaikuttaa tarvittaviin työkaluihin. + - **TensorFlowin käyttö.** Jos koulutat mallin TensorFlowilla, kyseinen ekosysteemi tarjoaa mahdollisuuden muuntaa TensorFlow-malli verkkosovelluksessa käytettäväksi [TensorFlow.js](https://www.tensorflow.org/js/) avulla. + - **PyTorchin käyttö.** Jos rakennat mallin kirjastolla, kuten [PyTorch](https://pytorch.org/), voit viedä sen [ONNX](https://onnx.ai/) (Open Neural Network Exchange) -muodossa JavaScript-verkkosovelluksiin, jotka voivat käyttää [Onnx Runtime](https://www.onnxruntime.ai/). Tätä vaihtoehtoa tutkitaan tulevassa oppitunnissa Scikit-learnilla koulutetulle mallille. + - **Lobe.ai:n tai Azure Custom Visionin käyttö.** Jos käytät ML SaaS (Software as a Service) -järjestelmää, kuten [Lobe.ai](https://lobe.ai/) tai [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-77952-leestott), tämäntyyppinen ohjelmisto tarjoaa tapoja viedä malli monille alustoille, mukaan lukien räätälöidyn API:n rakentaminen, jota verkkosovelluksesi voi kysyä pilvessä. + +Sinulla on myös mahdollisuus rakentaa kokonainen Flask-verkkosovellus, joka pystyy kouluttamaan mallin itse verkkoselaimessa. Tämä voidaan tehdä myös TensorFlow.js:n avulla JavaScript-kontekstissa. + +Meidän tarkoituksiimme, koska olemme työskennelleet Python-pohjaisten muistikirjojen kanssa, tutkitaan vaiheita, joita tarvitaan koulutetun mallin viemiseksi muistikirjasta Pythonilla rakennetun verkkosovelluksen luettavaksi muodoksi. + +## Työkalut + +Tätä tehtävää varten tarvitset kaksi työkalua: Flaskin ja Picklen, jotka molemmat toimivat Pythonilla. + +✅ Mikä on [Flask](https://palletsprojects.com/p/flask/)? Flaskin luojat määrittelevät sen "mikro-kehykseksi", joka tarjoaa verkkokehysten perusominaisuudet Pythonilla ja mallinnusmoottorin verkkosivujen rakentamiseen. Tutustu [tähän oppimismoduuliin](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) harjoitellaksesi Flaskin käyttöä. + +✅ Mikä on [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 on Python-moduuli, joka sarjoittaa ja desarjoittaa Python-objektirakenteita. Kun "picklaat" mallin, sarjoitat tai litistät sen rakenteen verkkokäyttöä varten. Ole varovainen: pickle ei ole luontaisesti turvallinen, joten ole varovainen, jos sinua pyydetään "un-picklaamaan" tiedosto. Picklattu tiedosto päättyy `.pkl`. + +## Harjoitus - puhdista datasi + +Tässä oppitunnissa käytät dataa 80 000 UFO-havainnosta, jotka on kerätty [NUFORC](https://nuforc.org) (The National UFO Reporting Center) -organisaation toimesta. Tämä data sisältää mielenkiintoisia kuvauksia UFO-havainnoista, esimerkiksi: + +- **Pitkä esimerkkikuvaus.** "Mies astuu valonsäteestä, joka loistaa ruohokentälle yöllä, ja juoksee kohti Texas Instrumentsin parkkipaikkaa." +- **Lyhyt esimerkkikuvaus.** "valot ajoivat meitä takaa." + +[ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) -taulukko sisältää sarakkeita, jotka kertovat `kaupungin`, `osavaltion` ja `maan`, jossa havainto tapahtui, objektin `muodon` sekä sen `leveysasteen` ja `pituusasteen`. + +Tyhjään [muistikirjaan](../../../../3-Web-App/1-Web-App/notebook.ipynb), joka sisältyy tähän oppituntiin: + +1. tuo `pandas`, `matplotlib` ja `numpy` kuten teit aiemmissa oppitunneissa ja tuo UFO-taulukko. Voit tarkastella näyte datajoukkoa: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Muunna UFO-data pieneksi datafreimiksi uusilla otsikoilla. Tarkista `Country`-kentän uniikit arvot. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Nyt voit vähentää käsiteltävän datan määrää pudottamalla pois kaikki tyhjät arvot ja tuomalla vain havainnot, jotka kestivät 1-60 sekuntia: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Tuo Scikit-learnin `LabelEncoder`-kirjasto muuntaaksesi maiden tekstiarvot numeroiksi: + + ✅ LabelEncoder koodaa datan aakkosjärjestyksessä + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Datasi pitäisi näyttää tältä: + + ```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 + ``` + +## Harjoitus - rakenna mallisi + +Nyt voit valmistautua kouluttamaan mallin jakamalla datan koulutus- ja testiryhmään. + +1. Valitse kolme ominaisuutta, joilla haluat kouluttaa mallisi X-vektoriksi, ja y-vektori on `Country`. Haluat pystyä syöttämään `Seconds`, `Latitude` ja `Longitude` ja saada maa-ID:n palautettavaksi. + + ```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. Kouluta mallisi logistisella regressiolla: + + ```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)) + ``` + +Tarkkuus ei ole huono **(noin 95%)**, mikä ei ole yllättävää, koska `Country` ja `Latitude/Longitude` korreloivat. + +Luomasi malli ei ole kovin vallankumouksellinen, koska `Country` voidaan päätellä sen `Latitude` ja `Longitude` perusteella, mutta tämä on hyvä harjoitus yrittää kouluttaa raakadataa, jonka puhdistit, viet ja sitten käytät tätä mallia verkkosovelluksessa. + +## Harjoitus - 'picklaa' mallisi + +Nyt on aika _picklata_ mallisi! Voit tehdä sen muutamalla koodirivillä. Kun malli on _picklattu_, lataa picklattu malli ja testaa sitä näyte datajoukolla, joka sisältää arvot sekunneille, leveysasteelle ja pituusasteelle. + +```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]])) +``` + +Malli palauttaa **'3'**, joka on Iso-Britannian maa-ID. Uskomatonta! 👽 + +## Harjoitus - rakenna Flask-sovellus + +Nyt voit rakentaa Flask-sovelluksen, joka kutsuu malliasi ja palauttaa samankaltaisia tuloksia, mutta visuaalisesti miellyttävämmällä tavalla. + +1. Aloita luomalla kansio nimeltä **web-app** _notebook.ipynb_-tiedoston viereen, jossa _ufo-model.pkl_-tiedosto sijaitsee. + +1. Luo kyseiseen kansioon kolme muuta kansiota: **static**, jonka sisällä on kansio **css**, ja **templates**. Sinulla pitäisi nyt olla seuraavat tiedostot ja hakemistot: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Katso ratkaisukansiota nähdäksesi valmiin sovelluksen näkymän + +1. Ensimmäinen tiedosto, joka luodaan _web-app_-kansioon, on **requirements.txt**-tiedosto. Kuten _package.json_ JavaScript-sovelluksessa, tämä tiedosto listaa sovelluksen tarvitsemat riippuvuudet. Lisää **requirements.txt**-tiedostoon rivit: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Nyt suorita tämä tiedosto siirtymällä _web-app_-kansioon: + + ```bash + cd web-app + ``` + +1. Kirjoita terminaaliin `pip install`, jotta asennat _requirements.txt_-tiedostossa listatut kirjastot: + + ```bash + pip install -r requirements.txt + ``` + +1. Nyt olet valmis luomaan kolme muuta tiedostoa sovelluksen viimeistelyä varten: + + 1. Luo **app.py** juureen. + 2. Luo **index.html** _templates_-hakemistoon. + 3. Luo **styles.css** _static/css_-hakemistoon. + +1. Täydennä _styles.css_-tiedosto muutamalla tyylillä: + + ```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. Seuraavaksi täydennä _index.html_-tiedosto: + + ```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 }}

                                                              + +
                                                              + +
                                                              + + + + ``` + + Tarkastele tämän tiedoston mallinnusta. Huomaa 'viiksisyntaksi' muuttujien ympärillä, jotka sovellus tarjoaa, kuten ennusteteksti: `{{}}`. Siellä on myös lomake, joka lähettää ennusteen `/predict`-reitille. + + Lopuksi olet valmis rakentamaan Python-tiedoston, joka ohjaa mallin käyttöä ja ennusteiden näyttämistä: + +1. Lisää `app.py`-tiedostoon: + + ```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) + ``` + + > 💡 Vinkki: kun lisäät [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) Flask-verkkosovellusta suorittaessasi, kaikki sovellukseen tekemäsi muutokset näkyvät välittömästi ilman, että palvelinta tarvitsee käynnistää uudelleen. Ole varovainen! Älä ota tätä tilaa käyttöön tuotantosovelluksessa. + +Jos suoritat `python app.py` tai `python3 app.py` - verkkopalvelimesi käynnistyy paikallisesti, ja voit täyttää lyhyen lomakkeen saadaksesi vastauksen polttavaan kysymykseesi siitä, missä UFO-havaintoja on tehty! + +Ennen kuin teet sen, tarkastele `app.py`-tiedoston osia: + +1. Ensin riippuvuudet ladataan ja sovellus käynnistyy. +1. Sitten malli tuodaan. +1. Sitten index.html renderöidään kotireitillä. + +`/predict`-reitillä tapahtuu useita asioita, kun lomake lähetetään: + +1. Lomakkeen muuttujat kerätään ja muunnetaan numpy-taulukoksi. Ne lähetetään mallille, ja ennuste palautetaan. +2. Maa, jonka haluamme näyttää, renderöidään uudelleen luettavana tekstinä ennustetusta maa-ID:stä, ja tämä arvo lähetetään takaisin index.html-tiedostoon, jotta se voidaan renderöidä mallissa. + +Mallin käyttö tällä tavalla, Flaskin ja picklatun mallin avulla, on suhteellisen suoraviivaista. Vaikeinta on ymmärtää, millaisessa muodossa datan täytyy olla, jotta se voidaan lähettää mallille ennusteen saamiseksi. Tämä riippuu täysin siitä, miten malli on koulutettu. Tässä mallissa tarvitaan kolme datakohtaa syötettäväksi ennusteen saamiseksi. + +Ammatillisessa ympäristössä näet, kuinka hyvä viestintä on välttämätöntä niiden ihmisten välillä, jotka kouluttavat mallin, ja niiden, jotka käyttävät sitä verkkosovelluksessa tai mobiilisovelluksessa. Meidän tapauksessamme kyseessä on vain yksi henkilö, sinä! + +--- + +## 🚀 Haaste + +Sen sijaan, että työskentelisit muistikirjassa ja toisit mallin Flask-sovellukseen, voisit kouluttaa mallin suoraan Flask-sovelluksessa! Kokeile muuntaa muistikirjan Python-koodi, ehkä datan puhdistamisen jälkeen, kouluttaaksesi mallin sovelluksen sisällä reitillä nimeltä `train`. Mitkä ovat tämän menetelmän hyvät ja huonot puolet? + +## [Jälkikysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +On monia tapoja rakentaa verkkosovellus, joka hyödyntää ML-malleja. Tee lista tavoista, joilla voisit käyttää JavaScriptiä tai Pythonia rakentaaksesi verkkosovelluksen koneoppimisen hyödyntämiseen. Mieti arkkitehtuuria: pitäisikö mallin pysyä sovelluksessa vai sijaita pilvessä? Jos jälkimmäinen, miten pääsisit siihen käsiksi? Piirrä arkkitehtuurimalli sovelletulle ML-verkkoratkaisulle. + +## Tehtävä + +[Kokeile erilaista mallia](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/3-Web-App/1-Web-App/assignment.md b/translations/fi/3-Web-App/1-Web-App/assignment.md new file mode 100644 index 000000000..92716c6b3 --- /dev/null +++ b/translations/fi/3-Web-App/1-Web-App/assignment.md @@ -0,0 +1,25 @@ + +# Kokeile eri mallia + +## Ohjeet + +Kun olet rakentanut yhden verkkosovelluksen käyttäen koulutettua Regression-mallia, käytä yhtä aiemmassa Regression-opetuksessa käsitellyistä malleista uudelleen tämän verkkosovelluksen tekemiseen. Voit säilyttää tyylin tai suunnitella sen eri tavalla, jotta se heijastaa kurpitsadataa. Muista muuttaa syötteet vastaamaan mallisi koulutusmenetelmää. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------------------------- | ------------------------------------------------------- | ------------------------------------------------------- | ------------------------------------- | +| | Verkkosovellus toimii odotetusti ja on julkaistu pilveen | Verkkosovelluksessa on puutteita tai odottamattomia tuloksia | Verkkosovellus ei toimi kunnolla | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/3-Web-App/README.md b/translations/fi/3-Web-App/README.md new file mode 100644 index 000000000..b63e5b237 --- /dev/null +++ b/translations/fi/3-Web-App/README.md @@ -0,0 +1,35 @@ + +# Rakenna verkkosovellus ML-mallisi käyttöön + +Tässä osiossa tutustut soveltavaan koneoppimisen aiheeseen: kuinka tallentaa Scikit-learn-malli tiedostoksi, jota voidaan käyttää ennusteiden tekemiseen verkkosovelluksessa. Kun malli on tallennettu, opit käyttämään sitä Flaskilla rakennetussa verkkosovelluksessa. Ensin luot mallin käyttäen dataa, joka liittyy UFO-havaintoihin! Sen jälkeen rakennat verkkosovelluksen, jonka avulla voit syöttää sekuntimäärän sekä leveys- ja pituusasteen arvot ennustaaksesi, mikä maa raportoi UFO-havainnon. + +![UFO-pysäköinti](../../../3-Web-App/images/ufo.jpg) + +Kuva: Michael Herren palvelussa Unsplash + +## Oppitunnit + +1. [Rakenna verkkosovellus](1-Web-App/README.md) + +## Tekijät + +"Rakenna verkkosovellus" on kirjoitettu ♥️:lla [Jen Looper](https://twitter.com/jenlooper). + +♥️ Visailut on kirjoittanut Rohan Raj. + +Datasetti on peräisin [Kagglesta](https://www.kaggle.com/NUFORC/ufo-sightings). + +Verkkosovelluksen arkkitehtuuria ehdotettiin osittain [tässä artikkelissa](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) ja [tässä repossa](https://github.com/abhinavsagar/machine-learning-deployment) Abhinav Sagarin toimesta. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/1-Introduction/README.md b/translations/fi/4-Classification/1-Introduction/README.md new file mode 100644 index 000000000..5f6d27a78 --- /dev/null +++ b/translations/fi/4-Classification/1-Introduction/README.md @@ -0,0 +1,313 @@ + +# Johdanto luokitteluun + +Näissä neljässä oppitunnissa tutustut klassisen koneoppimisen keskeiseen osa-alueeseen - _luokitteluun_. Käymme läpi erilaisia luokittelualgoritmeja käyttäen datasettiä, joka käsittelee Aasian ja Intian upeita keittiöitä. Toivottavasti olet nälkäinen! + +![vain ripaus!](../../../../4-Classification/1-Introduction/images/pinch.png) + +> Juhlista pan-aasialaisia keittiöitä näissä oppitunneissa! Kuva: [Jen Looper](https://twitter.com/jenlooper) + +Luokittelu on [ohjatun oppimisen](https://wikipedia.org/wiki/Supervised_learning) muoto, joka muistuttaa paljon regressiotekniikoita. Jos koneoppiminen keskittyy arvojen tai nimien ennustamiseen datasetin avulla, luokittelu jakautuu yleensä kahteen ryhmään: _binääriluokittelu_ ja _moniluokittelu_. + +[![Johdanto luokitteluun](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Johdanto luokitteluun") + +> 🎥 Klikkaa yllä olevaa kuvaa katsellaksesi videota: MIT:n John Guttag esittelee luokittelua + +Muista: + +- **Lineaarinen regressio** auttoi sinua ennustamaan muuttujien välisiä suhteita ja tekemään tarkkoja ennusteita siitä, mihin uusi datapiste sijoittuu suhteessa viivaan. Esimerkiksi, voit ennustaa _mikä kurpitsan hinta olisi syyskuussa verrattuna joulukuuhun_. +- **Logistinen regressio** auttoi sinua löytämään "binääriluokkia": tietyllä hintatasolla, _onko kurpitsa oranssi vai ei-oranssi_? + +Luokittelu käyttää erilaisia algoritmeja määrittääkseen datapisteen luokan tai tunnisteen. Työskentelemme tämän keittiödata-aineiston kanssa nähdäksemme, voimmeko ainesosaryhmän perusteella määrittää sen alkuperäisen keittiön. + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +> ### [Tämä oppitunti on saatavilla myös R-kielellä!](../../../../4-Classification/1-Introduction/solution/R/lesson_10.html) + +### Johdanto + +Luokittelu on yksi koneoppimisen tutkijan ja data-analyytikon keskeisistä tehtävistä. Perusluokittelusta binäärisen arvon ("onko tämä sähköposti roskapostia vai ei?") monimutkaiseen kuvien luokitteluun ja segmentointiin tietokonenäön avulla, on aina hyödyllistä pystyä järjestämään data luokkiin ja esittämään kysymyksiä siitä. + +Tieteellisemmin ilmaistuna luokittelumenetelmäsi luo ennustavan mallin, joka mahdollistaa syötemuuttujien ja tulosmuuttujien välisen suhteen kartoittamisen. + +![binäärinen vs. moniluokittelu](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) + +> Binääriset vs. moniluokitusongelmat, joita luokittelualgoritmit käsittelevät. Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +Ennen kuin aloitamme datan puhdistamisen, visualisoinnin ja valmistelun koneoppimistehtäviämme varten, opitaan hieman siitä, miten koneoppimista voidaan hyödyntää datan luokittelussa. + +Luokittelu, joka on johdettu [tilastotieteestä](https://wikipedia.org/wiki/Statistical_classification), käyttää ominaisuuksia, kuten `smoker`, `weight` ja `age`, määrittääkseen _todennäköisyyden sairastua X-tautiin_. Ohjatun oppimisen tekniikkana, joka muistuttaa aiemmin suorittamiasi regressioharjoituksia, datasi on merkitty, ja koneoppimisalgoritmit käyttävät näitä merkintöjä luokitellakseen ja ennustaakseen datasetin luokkia (tai 'ominaisuuksia') ja liittääkseen ne ryhmään tai lopputulokseen. + +✅ Mieti hetki datasettiä, joka käsittelee keittiöitä. Mitä moniluokittelumalli voisi vastata? Mitä binäärimalli voisi vastata? Entä jos haluaisit selvittää, käyttääkö tietty keittiö todennäköisesti sarviapilaa? Entä jos haluaisit nähdä, voisitko luoda tyypillisen intialaisen ruokalajin, kun sinulle annetaan lahjaksi ruokakassi, joka sisältää tähtianista, artisokkaa, kukkakaalia ja piparjuurta? + +[![Hullut mysteerikorit](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Hullut mysteerikorit") + +> 🎥 Klikkaa yllä olevaa kuvaa katsellaksesi videota. Ohjelman 'Chopped' koko idea perustuu 'mysteerikoriin', jossa kokkien täytyy valmistaa ruokalaji satunnaisista ainesosista. Koneoppimismalli olisi varmasti auttanut! + +## Hei 'luokittelija' + +Kysymys, jonka haluamme esittää tästä keittiödatasta, on itse asiassa **moniluokittelukysymys**, koska meillä on useita mahdollisia kansallisia keittiöitä, joiden kanssa työskennellä. Kun annetaan joukko ainesosia, mihin näistä monista luokista data sopii? + +Scikit-learn tarjoaa useita erilaisia algoritmeja datan luokitteluun riippuen siitä, millaisen ongelman haluat ratkaista. Seuraavissa kahdessa oppitunnissa opit useista näistä algoritmeista. + +## Harjoitus - puhdista ja tasapainota datasi + +Ensimmäinen tehtävä ennen projektin aloittamista on puhdistaa ja **tasapainottaa** datasi saadaksesi parempia tuloksia. Aloita tyhjällä _notebook.ipynb_-tiedostolla tämän kansion juurihakemistossa. + +Ensimmäinen asennettava asia on [imblearn](https://imbalanced-learn.org/stable/). Tämä on Scikit-learn-paketti, joka auttaa sinua tasapainottamaan dataa paremmin (opit tästä tehtävästä lisää hetken kuluttua). + +1. Asenna `imblearn` suorittamalla `pip install` seuraavasti: + + ```python + pip install imblearn + ``` + +1. Tuo tarvittavat paketit datan tuontia ja visualisointia varten, ja tuo myös `SMOTE` `imblearn`-kirjastosta. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Nyt olet valmis tuomaan datan seuraavaksi. + +1. Seuraava tehtävä on tuoda data: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + `read_csv()` lukee csv-tiedoston _cusines.csv_ sisällön ja sijoittaa sen muuttujaan `df`. + +1. Tarkista datan muoto: + + ```python + df.head() + ``` + + Ensimmäiset viisi riviä näyttävät tältä: + + ```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. Hanki tietoa tästä datasta kutsumalla `info()`: + + ```python + df.info() + ``` + + Tulosteesi näyttää tältä: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Harjoitus - keittiöiden tutkiminen + +Nyt työ alkaa muuttua mielenkiintoisemmaksi. Tutkitaan datan jakautumista keittiöittäin. + +1. Piirrä data palkkeina kutsumalla `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![keittiöiden datan jakautuminen](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) + + Keittiöitä on rajallinen määrä, mutta datan jakautuminen on epätasaista. Voit korjata sen! Ennen kuin teet niin, tutki hieman lisää. + +1. Selvitä, kuinka paljon dataa on saatavilla keittiöittäin ja tulosta se: + + ```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}') + ``` + + Tulosteesi näyttää tältä: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Ainesosien tutkiminen + +Nyt voit syventyä dataan ja oppia, mitkä ovat tyypilliset ainesosat keittiöittäin. Sinun tulisi poistaa toistuva data, joka aiheuttaa sekaannusta keittiöiden välillä, joten opitaan tästä ongelmasta. + +1. Luo Pythonissa funktio `create_ingredient()`, joka luo ainesosadataframen. Tämä funktio aloittaa poistamalla hyödyttömän sarakkeen ja lajittelee ainesosat niiden määrän mukaan: + + ```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 + ``` + + Nyt voit käyttää tätä funktiota saadaksesi käsityksen kymmenestä suosituimmasta ainesosasta keittiöittäin. + +1. Kutsu `create_ingredient()` ja piirrä se kutsumalla `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![thai](../../../../4-Classification/1-Introduction/images/thai.png) + +1. Tee sama japanilaiselle datalle: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![japanilainen](../../../../4-Classification/1-Introduction/images/japanese.png) + +1. Nyt kiinalaisille ainesosille: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![kiinalainen](../../../../4-Classification/1-Introduction/images/chinese.png) + +1. Piirrä intialaiset ainesosat: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![intialainen](../../../../4-Classification/1-Introduction/images/indian.png) + +1. Lopuksi piirrä korealaiset ainesosat: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![korealainen](../../../../4-Classification/1-Introduction/images/korean.png) + +1. Poista nyt yleisimmät ainesosat, jotka aiheuttavat sekaannusta eri keittiöiden välillä, kutsumalla `drop()`: + + Kaikki rakastavat riisiä, valkosipulia ja inkivääriä! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Tasapainota datasetti + +Nyt kun olet puhdistanut datan, käytä [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Synthetic Minority Over-sampling Technique" -menetelmää tasapainottamiseen. + +1. Kutsu `fit_resample()`, tämä strategia luo uusia näytteitä interpoloinnin avulla. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Tasapainottamalla datasi saat parempia tuloksia sen luokittelussa. Mieti binääriluokittelua. Jos suurin osa datastasi kuuluu yhteen luokkaan, koneoppimismalli ennustaa todennäköisemmin kyseistä luokkaa, koska sille on enemmän dataa. Datatasapainotus poistaa tämän epätasapainon. + +1. Nyt voit tarkistaa ainesosien tunnisteiden määrät: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Tulosteesi näyttää tältä: + + ```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 + ``` + + Data on nyt siisti, tasapainoinen ja erittäin herkullinen! + +1. Viimeinen vaihe on tallentaa tasapainotettu data, mukaan lukien tunnisteet ja ominaisuudet, uuteen dataframeen, joka voidaan viedä tiedostoon: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Voit tarkastella dataa vielä kerran käyttämällä `transformed_df.head()` ja `transformed_df.info()`. Tallenna kopio tästä datasta tulevia oppitunteja varten: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Tämä uusi CSV löytyy nyt juuridatan kansiosta. + +--- + +## 🚀Haaste + +Tämä opetusohjelma sisältää useita mielenkiintoisia datasettejä. Tutki `data`-kansioita ja katso, sisältävätkö ne datasettejä, jotka sopisivat binääriseen tai moniluokitteluun? Mitä kysymyksiä esittäisit tästä datasetistä? + +## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Tutki SMOTE:n APIa. Mihin käyttötarkoituksiin se sopii parhaiten? Mitä ongelmia se ratkaisee? + +## Tehtävä + +[Tutki luokittelumenetelmiä](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/1-Introduction/assignment.md b/translations/fi/4-Classification/1-Introduction/assignment.md new file mode 100644 index 000000000..6c9bb96be --- /dev/null +++ b/translations/fi/4-Classification/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Tutustu luokittelumenetelmiin + +## Ohjeet + +[Scikit-learn-dokumentaatiosta](https://scikit-learn.org/stable/supervised_learning.html) löydät laajan listan tapoja luokitella dataa. Tee pieni aarteenetsintä näissä dokumenteissa: tavoitteesi on etsiä luokittelumenetelmiä ja yhdistää ne tähän opetusohjelmaan kuuluvaan datasettiin, kysymykseen, jonka voit esittää siitä, sekä luokittelutekniikkaan. Luo laskentataulukko tai taulukko .doc-tiedostoon ja selitä, miten datasetti toimisi luokittelualgoritmin kanssa. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | esitetään dokumentti, jossa on yleiskatsaus viidestä algoritmista ja luokittelutekniikasta. Yleiskatsaus on hyvin selitetty ja yksityiskohtainen. | esitetään dokumentti, jossa on yleiskatsaus kolmesta algoritmista ja luokittelutekniikasta. Yleiskatsaus on hyvin selitetty ja yksityiskohtainen. | esitetään dokumentti, jossa on yleiskatsaus alle kolmesta algoritmista ja luokittelutekniikasta, eikä yleiskatsaus ole hyvin selitetty eikä yksityiskohtainen. | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/1-Introduction/solution/Julia/README.md b/translations/fi/4-Classification/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..d5e32a914 --- /dev/null +++ b/translations/fi/4-Classification/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/2-Classifiers-1/README.md b/translations/fi/4-Classification/2-Classifiers-1/README.md new file mode 100644 index 000000000..ddb8aeedf --- /dev/null +++ b/translations/fi/4-Classification/2-Classifiers-1/README.md @@ -0,0 +1,253 @@ + +# Ruokakulttuuriluokittelijat 1 + +Tässä oppitunnissa käytät edellisessä oppitunnissa tallentamaasi tasapainoista ja siistiä datasettiä, joka käsittelee ruokakulttuureja. + +Käytät tätä datasettiä eri luokittelijoiden kanssa _ennustaaksesi tietyn kansallisen ruokakulttuurin ainesosaryhmän perusteella_. Samalla opit lisää tavoista, joilla algoritmeja voidaan hyödyntää luokittelutehtävissä. + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) +# Valmistelu + +Jos olet suorittanut [Oppitunnin 1](../1-Introduction/README.md), varmista, että _cleaned_cuisines.csv_-tiedosto on olemassa juurihakemistossa `/data` näitä neljää oppituntia varten. + +## Harjoitus - ennusta kansallinen ruokakulttuuri + +1. Työskentele tämän oppitunnin _notebook.ipynb_-kansiossa ja tuo tiedosto sekä Pandas-kirjasto: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Data näyttää tältä: + +| | 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. Tuo nyt lisää kirjastoja: + + ```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. Jaa X- ja y-koordinaatit kahteen datafreimiin koulutusta varten. `cuisine` voi olla labelien datafreimi: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Se näyttää tältä: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Poista `Unnamed: 0`-sarake ja `cuisine`-sarake käyttämällä `drop()`. Tallenna loput tiedot koulutettaviksi ominaisuuksiksi: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Ominaisuudet näyttävät tältä: + +| | 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 | + +Nyt olet valmis kouluttamaan mallisi! + +## Luokittelijan valinta + +Kun datasi on puhdas ja valmis koulutukseen, sinun täytyy päättää, mitä algoritmia käytät tehtävään. + +Scikit-learn ryhmittelee luokittelun ohjatun oppimisen alle, ja tässä kategoriassa on monia tapoja luokitella. [Vaihtoehtojen määrä](https://scikit-learn.org/stable/supervised_learning.html) voi aluksi tuntua hämmentävältä. Seuraavat menetelmät sisältävät luokittelutekniikoita: + +- Lineaariset mallit +- Tukivektorikoneet +- Stokastinen gradienttilaskenta +- Lähimmät naapurit +- Gaussin prosessit +- Päätöspuut +- Yhdistelmämallit (äänestysluokittelija) +- Moniluokka- ja monitulostusalgoritmit (moniluokka- ja monilabel-luokittelu, moniluokka-monitulostusluokittelu) + +> Voit myös käyttää [neuroverkkoja datan luokitteluun](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), mutta se ei kuulu tämän oppitunnin aihepiiriin. + +### Minkä luokittelijan valita? + +Minkä luokittelijan siis valitset? Usein useiden kokeileminen ja hyvän tuloksen etsiminen on tapa testata. Scikit-learn tarjoaa [vertailun rinnakkain](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) luodulla datasetillä, jossa verrataan KNeighbors, SVC kahdella tavalla, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB ja QuadraticDiscriminationAnalysis, ja tulokset visualisoidaan: + +![luokittelijoiden vertailu](../../../../4-Classification/2-Classifiers-1/images/comparison.png) +> Kuva Scikit-learnin dokumentaatiosta + +> AutoML ratkaisee tämän ongelman kätevästi suorittamalla nämä vertailut pilvessä, jolloin voit valita parhaan algoritmin datallesi. Kokeile [täällä](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) + +### Parempi lähestymistapa + +Parempi tapa kuin arvaaminen on seurata ladattavaa [ML Cheat Sheet](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Tässä huomataan, että moniluokkaongelmaamme varten meillä on joitakin vaihtoehtoja: + +![moniluokkaongelmien huijauslista](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) +> Osa Microsoftin algoritmien huijauslistasta, joka käsittelee moniluokkaluokitteluvaihtoehtoja + +✅ Lataa tämä huijauslista, tulosta se ja ripusta seinällesi! + +### Perustelu + +Katsotaan, voimmeko perustella eri lähestymistapoja annettujen rajoitusten perusteella: + +- **Neuroverkot ovat liian raskaita**. Puhdas mutta minimaalinen datasetti ja se, että koulutus tapahtuu paikallisesti notebookien kautta, tekevät neuroverkoista liian raskaita tähän tehtävään. +- **Ei kaksiluokkaista luokittelijaa**. Emme käytä kaksiluokkaista luokittelijaa, joten se sulkee pois one-vs-all-menetelmän. +- **Päätöspuu tai logistinen regressio voisi toimia**. Päätöspuu voisi toimia, tai logistinen regressio moniluokkaiselle datalle. +- **Moniluokkaiset Boosted Decision Trees ratkaisevat eri ongelman**. Moniluokkainen Boosted Decision Tree sopii parhaiten ei-parametrisiin tehtäviin, kuten tehtäviin, jotka on suunniteltu luomaan sijoituksia, joten se ei ole hyödyllinen meille. + +### Scikit-learnin käyttö + +Käytämme Scikit-learnia datan analysointiin. On kuitenkin monia tapoja käyttää logistista regressiota Scikit-learnissa. Katso [parametrit, jotka voit asettaa](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Käytännössä on kaksi tärkeää parametria - `multi_class` ja `solver` - jotka meidän täytyy määrittää, kun pyydämme Scikit-learnia suorittamaan logistisen regression. `multi_class`-arvo soveltaa tiettyä käyttäytymistä. Solverin arvo määrittää, mitä algoritmia käytetään. Kaikkia solvereita ei voi yhdistää kaikkiin `multi_class`-arvoihin. + +Dokumentaation mukaan moniluokkaisessa tapauksessa koulutusalgoritmi: + +- **Käyttää one-vs-rest (OvR) -menetelmää**, jos `multi_class`-vaihtoehto on asetettu `ovr` +- **Käyttää ristientropiahäviötä**, jos `multi_class`-vaihtoehto on asetettu `multinomial`. (Tällä hetkellä `multinomial`-vaihtoehto on tuettu vain ‘lbfgs’, ‘sag’, ‘saga’ ja ‘newton-cg’ solvereilla.) + +> 🎓 'Menetelmä' voi olla joko 'ovr' (one-vs-rest) tai 'multinomial'. Koska logistinen regressio on suunniteltu tukemaan binääriluokittelua, nämä menetelmät auttavat sitä käsittelemään paremmin moniluokkaluokittelutehtäviä. [lähde](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) + +> 🎓 'Solver' määritellään "algoritmiksi, jota käytetään optimointiongelmassa". [lähde](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +Scikit-learn tarjoaa tämän taulukon selittämään, miten solverit käsittelevät eri haasteita, joita eri datarakenteet esittävät: + +![solverit](../../../../4-Classification/2-Classifiers-1/images/solvers.png) + +## Harjoitus - jaa data + +Voimme keskittyä logistiseen regressioon ensimmäisessä koulutuskokeilussamme, koska opit siitä äskettäin edellisessä oppitunnissa. +Jaa datasi koulutus- ja testiryhmiin kutsumalla `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) +``` + +## Harjoitus - sovella logistista regressiota + +Koska käytät moniluokkaista tapausta, sinun täytyy valita, mitä _menetelmää_ käytät ja mitä _solveria_ asetat. Käytä LogisticRegressionia moniluokka-asetuksella ja **liblinear**-solveria koulutukseen. + +1. Luo logistinen regressio, jossa multi_class on asetettu `ovr` ja solver asetettu `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)) + ``` + + ✅ Kokeile eri solveria, kuten `lbfgs`, joka on usein asetettu oletusarvoksi +> Huomaa, käytä Pandasin [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) -funktiota litistääksesi datasi tarvittaessa. +Tarkkuus on hyvä, yli **80%**! + +1. Voit nähdä tämän mallin toiminnassa testaamalla yhtä riviä (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + Tulos tulostetaan: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Kokeile eri rivinumeroa ja tarkista tulokset + +1. Syvemmälle mentäessä voit tarkistaa tämän ennusteen tarkkuuden: + + ```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() + ``` + + Tulos tulostetaan - Intialainen keittiö on paras arvaus, hyvällä todennäköisyydellä: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ Voitko selittää, miksi malli on melko varma, että kyseessä on intialainen keittiö? + +1. Saat lisää yksityiskohtia tulostamalla luokitteluraportin, kuten teit regressio-opetuksissa: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | tarkkuus | recall | f1-score | tuki | + | ------------ | -------- | ------ | -------- | ------- | + | 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 | + | tarkkuus | 0.80 | 1199 | | | + | keskiarvo | 0.80 | 0.80 | 0.80 | 1199 | + | painotettu | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Haaste + +Tässä oppitunnissa käytit siivottua dataasi rakentaaksesi koneoppimismallin, joka voi ennustaa kansallisen keittiön ainesosien perusteella. Käytä aikaa tutkiaksesi Scikit-learnin tarjoamia monia vaihtoehtoja datan luokitteluun. Syvenny tarkemmin 'solver'-käsitteeseen ymmärtääksesi, mitä kulissien takana tapahtuu. + +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus & Itseopiskelu + +Tutustu hieman tarkemmin logistisen regression matematiikkaan [tässä oppitunnissa](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +## Tehtävä + +[Tutki solvereita](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/2-Classifiers-1/assignment.md b/translations/fi/4-Classification/2-Classifiers-1/assignment.md new file mode 100644 index 000000000..9bdeab702 --- /dev/null +++ b/translations/fi/4-Classification/2-Classifiers-1/assignment.md @@ -0,0 +1,23 @@ + +# Tutustu ratkaisijoihin +## Ohjeet + +Tässä oppitunnissa opit erilaisista ratkaisijoista, jotka yhdistävät algoritmeja koneoppimisprosessiin luodakseen tarkan mallin. Käy läpi oppitunnissa mainitut ratkaisijat ja valitse niistä kaksi. Vertaa ja vertaile näitä kahta ratkaisijaa omin sanoin. Minkälaista ongelmaa ne ratkaisevat? Miten ne toimivat eri tietorakenteiden kanssa? Miksi valitsisit toisen toisen sijaan? +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | --------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | Esitetty .doc-tiedosto sisältää kaksi kappaletta, yhden kummastakin ratkaisijasta, ja vertailu on huolellinen. | Esitetty .doc-tiedosto sisältää vain yhden kappaleen | Tehtävä on keskeneräinen | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/2-Classifiers-1/solution/Julia/README.md b/translations/fi/4-Classification/2-Classifiers-1/solution/Julia/README.md new file mode 100644 index 000000000..cccd589ce --- /dev/null +++ b/translations/fi/4-Classification/2-Classifiers-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/3-Classifiers-2/README.md b/translations/fi/4-Classification/3-Classifiers-2/README.md new file mode 100644 index 000000000..976532873 --- /dev/null +++ b/translations/fi/4-Classification/3-Classifiers-2/README.md @@ -0,0 +1,249 @@ + +# Ruokakulttuuriluokittelijat 2 + +Tässä toisessa luokittelutunnissa tutustut tarkemmin tapoihin luokitella numeerista dataa. Opit myös, mitä seurauksia on sillä, että valitset yhden luokittelijan toisen sijaan. + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +### Esitiedot + +Oletamme, että olet suorittanut aiemmat oppitunnit ja sinulla on puhdistettu datasetti `data`-kansiossasi nimeltä _cleaned_cuisines.csv_, joka sijaitsee tämän neljän oppitunnin kansion juurihakemistossa. + +### Valmistelut + +Olemme ladanneet _notebook.ipynb_-tiedostosi puhdistetulla datasetillä ja jakaneet sen X- ja y-datafreimeihin, jotka ovat valmiita mallin rakennusprosessia varten. + +## Luokittelukartta + +Aiemmin opit eri vaihtoehdoista datan luokitteluun Microsoftin huijauslistan avulla. Scikit-learn tarjoaa vastaavan, mutta tarkemman huijauslistan, joka voi auttaa kaventamaan valintaa luokittelijoiden (toinen termi estimointimenetelmille) välillä: + +![ML-kartta Scikit-learnista](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Vinkki: [vieraile kartassa verkossa](https://scikit-learn.org/stable/tutorial/machine_learning_map/) ja klikkaa polkuja lukeaksesi dokumentaatiota. + +### Suunnitelma + +Tämä kartta on erittäin hyödyllinen, kun ymmärrät datasi hyvin, sillä voit "kulkea" sen polkuja pitkin päätökseen: + +- Meillä on >50 näytettä +- Haluamme ennustaa kategorian +- Meillä on merkitty data +- Meillä on alle 100K näytettä +- ✨ Voimme valita Linear SVC:n +- Jos se ei toimi, koska meillä on numeerista dataa + - Voimme kokeilla ✨ KNeighbors-luokittelijaa + - Jos se ei toimi, kokeile ✨ SVC:tä ja ✨ Ensemble-luokittelijoita + +Tämä on erittäin hyödyllinen polku seurattavaksi. + +## Harjoitus - jaa data + +Seuraamalla tätä polkua meidän tulisi aloittaa tarvittavien kirjastojen tuonnilla. + +1. Tuo tarvittavat kirjastot: + + ```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. Jaa koulutus- ja testidatasi: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Linear SVC -luokittelija + +Support-Vector Clustering (SVC) kuuluu Support-Vector Machines -perheeseen ML-tekniikoissa (lisätietoja alla). Tässä menetelmässä voit valita "kernelin" päättääksesi, miten etiketit ryhmitellään. 'C'-parametri viittaa 'regularisointiin', joka säätelee parametrien vaikutusta. Kernel voi olla yksi [useista](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); tässä asetamme sen 'lineaariseksi' varmistaaksemme, että hyödynnämme lineaarista SVC:tä. Todennäköisyys oletuksena on 'false'; tässä asetamme sen 'true' saadaksemme todennäköisyysarvioita. Asetamme satunnaistilan '0':ksi sekoittaaksemme datan todennäköisyyksien saamiseksi. + +### Harjoitus - käytä lineaarista SVC:tä + +Aloita luomalla luokittelijoiden taulukko. Lisäät tähän taulukkoon asteittain, kun testaamme. + +1. Aloita lineaarisella SVC:llä: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Kouluta mallisi käyttäen lineaarista SVC:tä ja tulosta raportti: + + ```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)) + ``` + + Tulokset ovat melko hyviä: + + ```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 -luokittelija + +K-Neighbors kuuluu ML-menetelmien "naapurit"-perheeseen, jota voidaan käyttää sekä valvottuun että valvomattomaan oppimiseen. Tässä menetelmässä määritellään ennalta määrätty määrä pisteitä, ja data kerätään näiden pisteiden ympärille siten, että yleistetyt etiketit voidaan ennustaa datalle. + +### Harjoitus - käytä K-Neighbors -luokittelijaa + +Edellinen luokittelija oli hyvä ja toimi hyvin datan kanssa, mutta ehkä voimme saada paremman tarkkuuden. Kokeile K-Neighbors -luokittelijaa. + +1. Lisää rivi luokittelijataulukkoon (lisää pilkku Linear SVC -kohdan jälkeen): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + Tulokset ovat hieman huonommat: + + ```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 + ``` + + ✅ Lue lisää [K-Neighborsista](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Support Vector -luokittelija + +Support-Vector -luokittelijat kuuluvat [Support-Vector Machine](https://wikipedia.org/wiki/Support-vector_machine) -perheeseen ML-menetelmissä, joita käytetään luokittelu- ja regressiotehtäviin. SVM:t "karttavat koulutusesimerkit pisteiksi avaruudessa" maksimoidakseen etäisyyden kahden kategorian välillä. Seuraava data kartataan tähän avaruuteen, jotta sen kategoria voidaan ennustaa. + +### Harjoitus - käytä Support Vector -luokittelijaa + +Kokeillaan hieman parempaa tarkkuutta Support Vector -luokittelijalla. + +1. Lisää pilkku K-Neighbors -kohdan jälkeen ja lisää tämä rivi: + + ```python + 'SVC': SVC(), + ``` + + Tulokset ovat erittäin hyviä! + + ```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 + ``` + + ✅ Lue lisää [Support-Vectorsista](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Ensemble-luokittelijat + +Seurataan polkua aivan loppuun asti, vaikka edellinen testi oli erittäin hyvä. Kokeillaan joitakin 'Ensemble-luokittelijoita', erityisesti Random Forestia ja AdaBoostia: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +Tulokset ovat erittäin hyviä, erityisesti Random Forestin osalta: + +```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 +``` + +✅ Lue lisää [Ensemble-luokittelijoista](https://scikit-learn.org/stable/modules/ensemble.html) + +Tämä koneoppimismenetelmä "yhdistää useiden perusestimointimenetelmien ennusteet" parantaakseen mallin laatua. Esimerkissämme käytimme Random Trees -menetelmää ja AdaBoostia. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), keskiarvomenetelmä, rakentaa "metsän" "päätöspuista", joihin lisätään satunnaisuutta ylisovituksen välttämiseksi. n_estimators-parametri asetetaan puiden määräksi. + +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) sovittaa luokittelijan datasettiin ja sovittaa kopioita tästä luokittelijasta samaan datasettiin. Se keskittyy väärin luokiteltujen kohteiden painoihin ja säätää seuraavan luokittelijan sovitusta korjatakseen. + +--- + +## 🚀Haaste + +Jokaisella näistä tekniikoista on suuri määrä parametreja, joita voit säätää. Tutki kunkin oletusparametreja ja mieti, mitä näiden parametrien säätäminen tarkoittaisi mallin laadulle. + +## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Näissä oppitunneissa on paljon ammattikieltä, joten ota hetki aikaa tarkastellaksesi [tätä listaa](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-77952-leestott) hyödyllisistä termeistä! + +## Tehtävä + +[Parametrien säätö](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/3-Classifiers-2/assignment.md b/translations/fi/4-Classification/3-Classifiers-2/assignment.md new file mode 100644 index 000000000..7bea2b021 --- /dev/null +++ b/translations/fi/4-Classification/3-Classifiers-2/assignment.md @@ -0,0 +1,25 @@ + +# Parametrien säätö + +## Ohjeet + +Kun työskentelet näiden luokittelijoiden kanssa, monet parametrit ovat oletusarvoisesti asetettu. VS Code -editorin Intellisense voi auttaa sinua tutkimaan niitä tarkemmin. Valitse yksi tämän oppitunnin koneoppimisen luokittelutekniikoista ja kouluta mallit uudelleen säätämällä eri parametrien arvoja. Luo muistikirja, jossa selität, miksi jotkut muutokset parantavat mallin laatua, kun taas toiset heikentävät sitä. Ole yksityiskohtainen vastauksessasi. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- | ----------------------------- | +| | Esitetään muistikirja, jossa luokittelija on täysin rakennettu, parametrit säädetty ja muutokset selitetty tekstilaatikoissa | Esitetään muistikirja osittain tai huonosti selitetty | Muistikirja on virheellinen tai puutteellinen | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/3-Classifiers-2/solution/Julia/README.md b/translations/fi/4-Classification/3-Classifiers-2/solution/Julia/README.md new file mode 100644 index 000000000..5455d0c0c --- /dev/null +++ b/translations/fi/4-Classification/3-Classifiers-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/4-Applied/README.md b/translations/fi/4-Classification/4-Applied/README.md new file mode 100644 index 000000000..3a6c235b2 --- /dev/null +++ b/translations/fi/4-Classification/4-Applied/README.md @@ -0,0 +1,329 @@ + +# Rakenna ruokasuositusverkkosovellus + +Tässä oppitunnissa rakennat luokittelumallin käyttäen joitakin aiemmissa oppitunneissa opittuja tekniikoita sekä herkullista ruokadatasettiä, jota on käytetty läpi tämän sarjan. Lisäksi rakennat pienen verkkosovelluksen, joka hyödyntää tallennettua mallia Onnxin verkkokäyttöliittymän avulla. + +Yksi koneoppimisen hyödyllisimmistä käytännön sovelluksista on suositusjärjestelmien rakentaminen, ja voit ottaa ensimmäisen askeleen siihen suuntaan jo tänään! + +[![Esittely tästä verkkosovelluksesta](https://img.youtube.com/vi/17wdM9AHMfg/0.jpg)](https://youtu.be/17wdM9AHMfg "Applied ML") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon: Jen Looper rakentaa verkkosovelluksen luokitellun ruokadatan avulla + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +Tässä oppitunnissa opit: + +- Kuinka rakentaa malli ja tallentaa se Onnx-muodossa +- Kuinka käyttää Netronia mallin tarkasteluun +- Kuinka käyttää malliasi verkkosovelluksessa ennustamiseen + +## Rakenna mallisi + +Soveltuvien koneoppimisjärjestelmien rakentaminen on tärkeä osa näiden teknologioiden hyödyntämistä liiketoimintajärjestelmissäsi. Voit käyttää malleja verkkosovelluksissasi (ja siten käyttää niitä myös offline-tilassa tarvittaessa) Onnxin avulla. + +[Edellisessä oppitunnissa](../../3-Web-App/1-Web-App/README.md) rakensit regressiomallin UFO-havainnoista, "picklasit" sen ja käytit sitä Flask-sovelluksessa. Vaikka tämä arkkitehtuuri on erittäin hyödyllinen, se on täysimittainen Python-sovellus, ja vaatimuksesi saattavat sisältää JavaScript-sovelluksen käytön. + +Tässä oppitunnissa voit rakentaa yksinkertaisen JavaScript-pohjaisen järjestelmän ennustamista varten. Ensin sinun täytyy kuitenkin kouluttaa malli ja muuntaa se Onnxin käyttöön. + +## Harjoitus - kouluta luokittelumalli + +Ensiksi kouluta luokittelumalli käyttäen puhdistettua ruokadatasettiä, jota olemme käyttäneet. + +1. Aloita tuomalla hyödylliset kirjastot: + + ```python + !pip install skl2onnx + import pandas as pd + ``` + + Tarvitset '[skl2onnx](https://onnx.ai/sklearn-onnx/)'-kirjaston, joka auttaa muuntamaan Scikit-learn-mallisi Onnx-muotoon. + +1. Työskentele datasi kanssa samalla tavalla kuin aiemmissa oppitunneissa, lukemalla CSV-tiedosto `read_csv()`-funktiolla: + + ```python + data = pd.read_csv('../data/cleaned_cuisines.csv') + data.head() + ``` + +1. Poista kaksi ensimmäistä tarpeetonta saraketta ja tallenna jäljelle jäävä data nimellä 'X': + + ```python + X = data.iloc[:,2:] + X.head() + ``` + +1. Tallenna etiketit nimellä 'y': + + ```python + y = data[['cuisine']] + y.head() + + ``` + +### Aloita koulutusrutiini + +Käytämme 'SVC'-kirjastoa, joka tarjoaa hyvän tarkkuuden. + +1. Tuo tarvittavat kirjastot Scikit-learnista: + + ```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. Jaa data koulutus- ja testijoukkoihin: + + ```python + X_train, X_test, y_train, y_test = train_test_split(X,y,test_size=0.3) + ``` + +1. Rakenna SVC-luokittelumalli kuten teit edellisessä oppitunnissa: + + ```python + model = SVC(kernel='linear', C=10, probability=True,random_state=0) + model.fit(X_train,y_train.values.ravel()) + ``` + +1. Testaa malliasi kutsumalla `predict()`: + + ```python + y_pred = model.predict(X_test) + ``` + +1. Tulosta luokitteluraportti tarkistaaksesi mallin laadun: + + ```python + print(classification_report(y_test,y_pred)) + ``` + + Kuten aiemmin näimme, tarkkuus on hyvä: + + ```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 + ``` + +### Muunna mallisi Onnx-muotoon + +Varmista, että muunnat mallin oikealla tensorimäärällä. Tässä datasetissä on 380 ainesosaa, joten sinun täytyy merkitä tämä määrä `FloatTensorType`-parametriin: + +1. Muunna käyttäen tensorimäärää 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. Luo onx-tiedosto ja tallenna se nimellä **model.onnx**: + + ```python + onx = convert_sklearn(model, initial_types=initial_type, options=options) + with open("./model.onnx", "wb") as f: + f.write(onx.SerializeToString()) + ``` + + > Huomaa, että voit välittää [asetuksia](https://onnx.ai/sklearn-onnx/parameterized.html) muunnosskriptiisi. Tässä tapauksessa välitimme 'nocl'-asetuksen arvoksi True ja 'zipmap'-asetuksen arvoksi False. Koska tämä on luokittelumalli, sinulla on mahdollisuus poistaa ZipMap, joka tuottaa listan sanakirjoja (ei tarpeellinen). `nocl` viittaa luokkainformaation sisällyttämiseen malliin. Pienennä mallisi kokoa asettamalla `nocl` arvoksi 'True'. + +Kun suoritat koko notebookin, se rakentaa Onnx-mallin ja tallentaa sen tähän kansioon. + +## Tarkastele malliasi + +Onnx-mallit eivät ole kovin näkyviä Visual Studio Codessa, mutta on olemassa erittäin hyvä ilmainen ohjelmisto, jota monet tutkijat käyttävät mallien visualisointiin varmistaakseen, että ne on rakennettu oikein. Lataa [Netron](https://github.com/lutzroeder/Netron) ja avaa model.onnx-tiedostosi. Voit nähdä yksinkertaisen mallisi visualisoituna, jossa on 380 syötettä ja luokittelija listattuna: + +![Netron visual](../../../../4-Classification/4-Applied/images/netron.png) + +Netron on hyödyllinen työkalu mallien tarkasteluun. + +Nyt olet valmis käyttämään tätä siistiä mallia verkkosovelluksessa. Rakennetaan sovellus, joka on kätevä, kun katsot jääkaappiasi ja yrität selvittää, mitä yhdistelmää jäljellä olevista ainesosista voit käyttää tietyn keittiön ruokalajin valmistamiseen mallisi perusteella. + +## Rakenna suositusverkkosovellus + +Voit käyttää malliasi suoraan verkkosovelluksessa. Tämä arkkitehtuuri mahdollistaa sen käytön paikallisesti ja jopa offline-tilassa tarvittaessa. Aloita luomalla `index.html`-tiedosto samaan kansioon, jossa tallensit `model.onnx`-tiedostosi. + +1. Lisää tähän tiedostoon _index.html_ seuraava merkintä: + + ```html + + +
                                                              + Cuisine Matcher +
                                                              + + ... + + + ``` + +1. Työskentele nyt `body`-tagien sisällä ja lisää hieman merkintää, joka näyttää listan valintaruuduista, jotka heijastavat joitakin ainesosia: + + ```html +

                                                              Check your refrigerator. What can you create?

                                                              +
                                                              +
                                                              + + +
                                                              + +
                                                              + + +
                                                              + +
                                                              + + +
                                                              + +
                                                              + + +
                                                              + +
                                                              + + +
                                                              + +
                                                              + + +
                                                              + +
                                                              + + +
                                                              +
                                                              +
                                                              + +
                                                              + ``` + + Huomaa, että jokaiselle valintaruudulle on annettu arvo. Tämä heijastaa indeksin, jossa ainesosa löytyy datasetistä. Esimerkiksi omena, tässä aakkosjärjestyksessä, sijaitsee viidennessä sarakkeessa, joten sen arvo on '4', koska laskenta alkaa nollasta. Voit tarkistaa [ainesosien taulukon](../../../../4-Classification/data/ingredient_indexes.csv) löytääksesi tietyn ainesosan indeksin. + + Jatka työtäsi index.html-tiedostossa ja lisää skriptilohko, jossa malli kutsutaan viimeisen sulkevan ``-tagin jälkeen. + +1. Tuo ensin [Onnx Runtime](https://www.onnxruntime.ai/): + + ```html + + ``` + + > Onnx Runtime mahdollistaa Onnx-mallien suorittamisen laajalla valikoimalla laitteistoalustoja, mukaan lukien optimoinnit ja API:n käyttö. + +1. Kun Runtime on paikallaan, voit kutsua sen: + + ```html + + ``` + +Tässä koodissa tapahtuu useita asioita: + +1. Loit 380 mahdollisen arvon (1 tai 0) taulukon, joka asetetaan ja lähetetään mallille ennustamista varten riippuen siitä, onko ainesosan valintaruutu valittu. +2. Loit valintaruutujen taulukon ja tavan määrittää, onko niitä valittu `init`-funktiossa, joka kutsutaan sovelluksen käynnistyessä. Kun valintaruutu valitaan, `ingredients`-taulukko muuttuu heijastamaan valittua ainesosaa. +3. Loit `testCheckboxes`-funktion, joka tarkistaa, onko mitään valintaruutua valittu. +4. Käytät `startInference`-funktiota, kun painiketta painetaan, ja jos jokin valintaruutu on valittu, aloitat ennustamisen. +5. Ennustusrutiini sisältää: + 1. Asynkronisen mallin latauksen asettamisen + 2. Tensor-rakenteen luomisen, joka lähetetään mallille + 3. 'Feeds'-rakenteen luomisen, joka heijastaa `float_input`-syötettä, jonka loit kouluttaessasi malliasi (voit käyttää Netronia varmistaaksesi nimen) + 4. Näiden 'feeds'-rakenteiden lähettämisen mallille ja odottamisen vastaukselle + +## Testaa sovellustasi + +Avaa terminaali Visual Studio Codessa kansiossa, jossa index.html-tiedostosi sijaitsee. Varmista, että sinulla on [http-server](https://www.npmjs.com/package/http-server) asennettuna globaalisti, ja kirjoita `http-server` kehotteeseen. Paikallinen palvelin pitäisi avautua, ja voit tarkastella verkkosovellustasi. Tarkista, mitä keittiötä suositellaan eri ainesosien perusteella: + +![ainesosien verkkosovellus](../../../../4-Classification/4-Applied/images/web-app.png) + +Onnittelut, olet luonut 'suositus' verkkosovelluksen muutamalla kentällä. Käytä aikaa tämän järjestelmän kehittämiseen! + +## 🚀Haaste + +Verkkosovelluksesi on hyvin yksinkertainen, joten jatka sen kehittämistä käyttämällä ainesosia ja niiden indeksejä [ainesosien indeksit](../../../../4-Classification/data/ingredient_indexes.csv) -datasta. Mitkä makuyhdistelmät toimivat tietyn kansallisen ruokalajin luomisessa? + +## [Jälkikysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus & Itseopiskelu + +Vaikka tämä oppitunti vain sivusi ruokasuositusjärjestelmän luomisen hyödyllisyyttä, tämä koneoppimisen sovellusalue on erittäin rikas esimerkeissä. Lue lisää siitä, kuinka näitä järjestelmiä rakennetaan: + +- 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/ + +## Tehtävä + +[Rakenna uusi suositusjärjestelmä](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulee pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskääntämistä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/4-Applied/assignment.md b/translations/fi/4-Classification/4-Applied/assignment.md new file mode 100644 index 000000000..436d58faa --- /dev/null +++ b/translations/fi/4-Classification/4-Applied/assignment.md @@ -0,0 +1,25 @@ + +# Rakenna suosittelija + +## Ohjeet + +Tämän oppitunnin harjoitusten perusteella osaat nyt rakentaa JavaScript-pohjaisen verkkosovelluksen käyttämällä Onnx Runtimea ja muunnettua Onnx-mallia. Kokeile rakentaa uusi suosittelija käyttäen näiden oppituntien dataa tai muualta hankittua dataa (muista antaa kunnia lähteelle). Voit esimerkiksi luoda lemmikkisuosittelijan, joka perustuu erilaisiin persoonallisuuspiirteisiin, tai musiikkigenresuosittelijan, joka perustuu henkilön mielialaan. Ole luova! + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | --------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Verkkosovellus ja muistikirja on esitetty, molemmat hyvin dokumentoitu ja toimivat | Jompikumpi puuttuu tai on puutteellinen | Molemmat puuttuvat tai ovat puutteellisia | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/4-Classification/README.md b/translations/fi/4-Classification/README.md new file mode 100644 index 000000000..8883c68fa --- /dev/null +++ b/translations/fi/4-Classification/README.md @@ -0,0 +1,41 @@ + +# Aloittaminen luokittelun parissa + +## Alueellinen aihe: Herkulliset aasialaiset ja intialaiset ruoat 🍜 + +Aasiassa ja Intiassa ruokaperinteet ovat erittäin monipuolisia ja todella herkullisia! Tarkastellaan alueellisten ruokien dataa, jotta voimme ymmärtää niiden raaka-aineita. + +![Thaimaalainen ruokamyyjä](../../../4-Classification/images/thai-food.jpg) +> Kuva: Lisheng Chang palvelussa Unsplash + +## Mitä opit + +Tässä osiossa syvennät aiempaa tietämystäsi regressiosta ja opit lisää luokittelijoista, joita voit käyttää datan parempaan ymmärtämiseen. + +> On olemassa hyödyllisiä vähäkoodisia työkaluja, jotka auttavat sinua oppimaan luokittelumallien kanssa työskentelyä. Kokeile [Azure ML:ää tähän tehtävään](https://docs.microsoft.com/learn/modules/create-classification-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Oppitunnit + +1. [Johdatus luokitteluun](1-Introduction/README.md) +2. [Lisää luokittelijoita](2-Classifiers-1/README.md) +3. [Vielä muita luokittelijoita](3-Classifiers-2/README.md) +4. [Sovellettu ML: rakenna verkkosovellus](4-Applied/README.md) + +## Tekijät + +"Aloittaminen luokittelun parissa" on kirjoitettu ♥️:lla [Cassie Breviu](https://www.twitter.com/cassiebreviu) ja [Jen Looper](https://www.twitter.com/jenlooper) toimesta. + +Herkullisten ruokien dataset on peräisin [Kaggle](https://www.kaggle.com/hoandan/asian-and-indian-cuisines). + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/1-Visualize/README.md b/translations/fi/5-Clustering/1-Visualize/README.md new file mode 100644 index 000000000..03458afc6 --- /dev/null +++ b/translations/fi/5-Clustering/1-Visualize/README.md @@ -0,0 +1,347 @@ + +# Johdanto klusterointiin + +Klusterointi on eräänlainen [valvomaton oppiminen](https://wikipedia.org/wiki/Unsupervised_learning), joka olettaa, että datasetti on merkitsemätön tai että sen syötteet eivät ole yhdistetty ennalta määriteltyihin tuloksiin. Se käyttää erilaisia algoritmeja käydäkseen läpi merkitsemätöntä dataa ja luodakseen ryhmiä datasta havaittujen kuvioiden perusteella. + +[![No One Like You by PSquare](https://img.youtube.com/vi/ty2advRiWJM/0.jpg)](https://youtu.be/ty2advRiWJM "No One Like You by PSquare") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon. Opiskellessasi koneoppimista klusteroinnin avulla, nauti samalla nigerialaisista Dance Hall -kappaleista – tämä on PSquaren erittäin arvostettu kappale vuodelta 2014. + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +### Johdanto + +[Klusterointi](https://link.springer.com/referenceworkentry/10.1007%2F978-0-387-30164-8_124) on erittäin hyödyllinen datan tutkimiseen. Katsotaan, voiko se auttaa löytämään trendejä ja kuvioita nigerialaisten yleisöjen musiikinkulutustavoista. + +✅ Mieti hetki klusteroinnin käyttötarkoituksia. Arkielämässä klusterointi tapahtuu aina, kun sinulla on kasa pyykkiä ja sinun täytyy lajitella perheenjäsenten vaatteet 🧦👕👖🩲. Data-analytiikassa klusterointi tapahtuu, kun yritetään analysoida käyttäjän mieltymyksiä tai määrittää minkä tahansa merkitsemättömän datasetin ominaisuuksia. Klusterointi auttaa tavallaan tuomaan järjestystä kaaokseen, kuten sukkalaatikkoon. + +[![Introduction to ML](https://img.youtube.com/vi/esmzYhuFnds/0.jpg)](https://youtu.be/esmzYhuFnds "Introduction to Clustering") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon: MIT:n John Guttag esittelee klusterointia. + +Ammatillisessa ympäristössä klusterointia voidaan käyttää esimerkiksi markkinasegmentoinnin määrittämiseen, kuten sen selvittämiseen, mitkä ikäryhmät ostavat mitäkin tuotteita. Toinen käyttötarkoitus voisi olla poikkeavuuksien havaitseminen, esimerkiksi luottokorttitapahtumien datasetistä petosten tunnistamiseen. Tai klusterointia voisi käyttää kasvainten tunnistamiseen lääketieteellisten skannauksien joukosta. + +✅ Mieti hetki, miten olet saattanut kohdata klusterointia "luonnossa", esimerkiksi pankkitoiminnassa, verkkokaupassa tai liiketoiminnassa. + +> 🎓 Mielenkiintoista on, että klusterianalyysi sai alkunsa antropologian ja psykologian aloilla 1930-luvulla. Voitko kuvitella, miten sitä saatettiin käyttää? + +Vaihtoehtoisesti sitä voisi käyttää hakutulosten ryhmittelyyn – esimerkiksi ostoslinkkien, kuvien tai arvostelujen mukaan. Klusterointi on hyödyllistä, kun sinulla on suuri datasetti, jonka haluat pienentää ja josta haluat tehdä tarkempaa analyysiä, joten tekniikkaa voidaan käyttää datan tutkimiseen ennen muiden mallien rakentamista. + +✅ Kun datasi on järjestetty klustereihin, sille annetaan klusteri-ID, ja tämä tekniikka voi olla hyödyllinen datasetin yksityisyyden säilyttämisessä; voit viitata datapisteeseen sen klusteri-ID:n avulla sen sijaan, että käyttäisit paljastavampia tunnistettavia tietoja. Voitko keksiä muita syitä, miksi käyttäisit klusteri-ID:tä klusterin muiden elementtien sijaan sen tunnistamiseen? + +Syvennä ymmärrystäsi klusterointitekniikoista tässä [Learn-moduulissa](https://docs.microsoft.com/learn/modules/train-evaluate-cluster-models?WT.mc_id=academic-77952-leestott). + +## Klusteroinnin aloittaminen + +[Scikit-learn tarjoaa laajan valikoiman](https://scikit-learn.org/stable/modules/clustering.html) menetelmiä klusteroinnin suorittamiseen. Valitsemasi tyyppi riippuu käyttötapauksestasi. Dokumentaation mukaan jokaisella menetelmällä on erilaisia etuja. Tässä on yksinkertaistettu taulukko Scikit-learnin tukemista menetelmistä ja niiden sopivista käyttötapauksista: + +| Menetelmän nimi | Käyttötapaus | +| :---------------------------- | :-------------------------------------------------------------------- | +| K-Means | yleiskäyttö, induktiivinen | +| Affinity propagation | monet, epätasaiset klusterit, induktiivinen | +| Mean-shift | monet, epätasaiset klusterit, induktiivinen | +| Spectral clustering | harvat, tasaiset klusterit, transduktiivinen | +| Ward hierarchical clustering | monet, rajoitetut klusterit, transduktiivinen | +| Agglomerative clustering | monet, rajoitetut, ei-euklidiset etäisyydet, transduktiivinen | +| DBSCAN | ei-tasainen geometria, epätasaiset klusterit, transduktiivinen | +| OPTICS | ei-tasainen geometria, epätasaiset klusterit, vaihteleva tiheys, transduktiivinen | +| Gaussian mixtures | tasainen geometria, induktiivinen | +| BIRCH | suuri datasetti, jossa poikkeavuuksia, induktiivinen | + +> 🎓 Klusterien luominen liittyy vahvasti siihen, miten datan pisteet ryhmitellään ryhmiin. Puretaanpa hieman sanastoa: +> +> 🎓 ['Transduktiivinen' vs. 'induktiivinen'](https://wikipedia.org/wiki/Transduction_(machine_learning)) +> +> Transduktiivinen päättely perustuu havaittuihin harjoitustapauksiin, jotka liittyvät tiettyihin testitapauksiin. Induktiivinen päättely perustuu harjoitustapauksiin, jotka johtavat yleisiin sääntöihin, joita sovelletaan vasta testitapauksiin. +> +> Esimerkki: Kuvittele, että sinulla on datasetti, joka on vain osittain merkitty. Jotkut asiat ovat 'levyjä', jotkut 'CD-levyjä', ja jotkut ovat tyhjiä. Tehtäväsi on antaa tyhjille merkinnät. Jos valitset induktiivisen lähestymistavan, kouluttaisit mallin etsimään 'levyjä' ja 'CD-levyjä' ja soveltaisit näitä merkintöjä merkitsemättömään dataan. Tämä lähestymistapa kohtaa vaikeuksia luokitellessaan asioita, jotka ovat itse asiassa 'kasetteja'. Transduktiivinen lähestymistapa sen sijaan käsittelee tätä tuntematonta dataa tehokkaammin, koska se pyrkii ryhmittelemään samanlaiset kohteet yhteen ja soveltamaan ryhmään merkintää. Tässä tapauksessa klusterit saattavat heijastaa 'pyöreitä musiikkiesineitä' ja 'neliömäisiä musiikkiesineitä'. +> +> 🎓 ['Ei-tasainen' vs. 'tasainen' geometria](https://datascience.stackexchange.com/questions/52260/terminology-flat-geometry-in-the-context-of-clustering) +> +> Matematiikan terminologiasta johdettuna ei-tasainen vs. tasainen geometria viittaa pisteiden välisten etäisyyksien mittaamiseen joko 'tasaisilla' ([euklidisilla](https://wikipedia.org/wiki/Euclidean_geometry)) tai 'ei-tasaisilla' (ei-euklidisilla) geometrisilla menetelmillä. +> +>'Tasainen' tässä yhteydessä viittaa euklidiseen geometriaan (josta osia opetetaan 'tasogeometriana'), ja ei-tasainen viittaa ei-euklidiseen geometriaan. Mitä geometrialla on tekemistä koneoppimisen kanssa? No, koska molemmat alat perustuvat matematiikkaan, pisteiden välisten etäisyyksien mittaamiseen klustereissa täytyy olla yhteinen tapa, ja se voidaan tehdä 'tasaisella' tai 'ei-tasaisella' tavalla datan luonteen mukaan. [Euklidiset etäisyydet](https://wikipedia.org/wiki/Euclidean_distance) mitataan viivan pituutena kahden pisteen välillä. [Ei-euklidiset etäisyydet](https://wikipedia.org/wiki/Non-Euclidean_geometry) mitataan käyrän pitkin. Jos datasi, visualisoituna, ei näytä olevan tasossa, saatat tarvita erikoistuneen algoritmin sen käsittelemiseen. +> +![Tasainen vs Ei-tasainen geometria Infografiikka](../../../../5-Clustering/1-Visualize/images/flat-nonflat.png) +> Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) +> +> 🎓 ['Etäisyydet'](https://web.stanford.edu/class/cs345a/slides/12-clustering.pdf) +> +> Klusterit määritellään niiden etäisyysmatriisin perusteella, eli pisteiden välisillä etäisyyksillä. Tämä etäisyys voidaan mitata muutamalla tavalla. Euklidiset klusterit määritellään pistearvojen keskiarvon perusteella, ja niillä on 'centroidi' eli keskipiste. Etäisyydet mitataan siis etäisyytenä centroidiin. Ei-euklidiset etäisyydet viittaavat 'clustroideihin', pisteeseen, joka on lähimpänä muita pisteitä. Clustroidit voidaan puolestaan määritellä eri tavoin. +> +> 🎓 ['Rajoitettu'](https://wikipedia.org/wiki/Constrained_clustering) +> +> [Rajoitettu klusterointi](https://web.cs.ucdavis.edu/~davidson/Publications/ICDMTutorial.pdf) tuo 'puolivalvotun' oppimisen tähän valvomattomaan menetelmään. Pisteiden väliset suhteet merkitään 'ei voi yhdistää' tai 'täytyy yhdistää', joten datasettiin pakotetaan joitakin sääntöjä. +> +>Esimerkki: Jos algoritmi päästetään vapaaksi joukkoon merkitsemätöntä tai osittain merkittyä dataa, sen tuottamat klusterit voivat olla huonolaatuisia. Esimerkissä yllä klusterit saattavat ryhmitellä 'pyöreät musiikkiesineet', 'neliömäiset musiikkiesineet', 'kolmiomaiset esineet' ja 'keksit'. Jos algoritmille annetaan joitakin rajoituksia tai sääntöjä ("esineen täytyy olla muovista tehty", "esineen täytyy pystyä tuottamaan musiikkia"), tämä voi auttaa 'rajoittamaan' algoritmia tekemään parempia valintoja. +> +> 🎓 'Tiheys' +> +> Data, joka on 'meluisaa', katsotaan olevan 'tiheää'. Etäisyydet pisteiden välillä kussakin klusterissa voivat osoittautua tarkastelussa tiheämmiksi tai harvemmiksi, ja näin ollen tämä data täytyy analysoida sopivalla klusterointimenetelmällä. [Tämä artikkeli](https://www.kdnuggets.com/2020/02/understanding-density-based-clustering.html) havainnollistaa eroa K-Means-klusteroinnin ja HDBSCAN-algoritmien käytössä meluisan datasetin tutkimiseen, jossa klusterien tiheys on epätasainen. + +## Klusterointialgoritmit + +Klusterointialgoritmeja on yli 100, ja niiden käyttö riippuu käsillä olevan datan luonteesta. Keskustellaan joistakin tärkeimmistä: + +- **Hierarkkinen klusterointi**. Jos objekti luokitellaan sen läheisyyden perusteella lähellä olevaan objektiin, eikä kauempana olevaan, klusterit muodostuvat jäsenten etäisyyden perusteella muihin objekteihin. Scikit-learnin agglomeratiivinen klusterointi on hierarkkista. + + ![Hierarkkinen klusterointi Infografiikka](../../../../5-Clustering/1-Visualize/images/hierarchical.png) + > Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Centroid-klusterointi**. Tämä suosittu algoritmi vaatii 'k':n eli muodostettavien klusterien määrän valinnan, minkä jälkeen algoritmi määrittää klusterin keskipisteen ja kerää dataa sen ympärille. [K-means-klusterointi](https://wikipedia.org/wiki/K-means_clustering) on suosittu versio centroid-klusteroinnista. Keskipiste määritetään lähimmän keskiarvon perusteella, mistä nimi johtuu. Klusterin neliöetäisyys minimoidaan. + + ![Centroid-klusterointi Infografiikka](../../../../5-Clustering/1-Visualize/images/centroid.png) + > Infografiikka: [Dasani Madipalli](https://twitter.com/dasani_decoded) + +- **Jakautumispohjainen klusterointi**. Tilastolliseen mallinnukseen perustuva jakautumispohjainen klusterointi keskittyy määrittämään todennäköisyyden, että datapiste kuuluu klusteriin, ja liittää sen sen mukaisesti. Gaussian-sekoitusmenetelmät kuuluvat tähän tyyppiin. + +- **Tiheysperusteinen klusterointi**. Datapisteet liitetään klustereihin niiden tiheyden perusteella, eli niiden ryhmittymisen perusteella toistensa ympärille. Datapisteet, jotka ovat kaukana ryhmästä, katsotaan poikkeavuuksiksi tai meluksi. DBSCAN, Mean-shift ja OPTICS kuuluvat tähän klusterointityyppiin. + +- **Ruudukkoon perustuva klusterointi**. Moniulotteisille dataseteille luodaan ruudukko, ja data jaetaan ruudukon soluihin, jolloin muodostuu klustereita. + +## Harjoitus – klusteroi datasi + +Klusterointitekniikkaa tukee suuresti asianmukainen visualisointi, joten aloitetaan visualisoimalla musiikkidatamme. Tämä harjoitus auttaa meitä päättämään, mitä klusterointimenetelmää tulisi käyttää tehokkaimmin tämän datan luonteen perusteella. + +1. Avaa [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/1-Visualize/notebook.ipynb) tiedosto tässä kansiossa. + +1. Tuo `Seaborn`-paketti hyvää datan visualisointia varten. + + ```python + !pip install seaborn + ``` + +1. Lisää kappaledata tiedostosta [_nigerian-songs.csv_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/data/nigerian-songs.csv). Lataa dataframe, jossa on tietoa kappaleista. Valmistaudu tutkimaan tätä dataa tuomalla kirjastot ja tulostamalla data: + + ```python + import matplotlib.pyplot as plt + import pandas as pd + + df = pd.read_csv("../data/nigerian-songs.csv") + df.head() + ``` + + Tarkista datan ensimmäiset rivit: + + | | nimi | albumi | artisti | artistin_genre | julkaisupäivä | pituus | suosio | tanssittavuus | akustisuus | energia | instrumentaalisuus | elävyyys | äänenvoimakkuus | puheisuus | tempo | aika-allekirjoitus | + | --- | ------------------------ | ---------------------------- | ------------------- | ------------------ | ------------- | ------ | ---------- | ------------- | ------------ | ------ | ------------------ | -------- | --------------- | --------- | ------- | ------------------ | + | 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. Hanki tietoa tietokehystä kutsumalla `info()`: + + ```python + df.info() + ``` + + Tuloste näyttää tältä: + + ```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. Tarkista null-arvot kutsumalla `isnull()` ja varmista, että summa on 0: + + ```python + df.isnull().sum() + ``` + + Näyttää hyvältä: + + ```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. Kuvaile data: + + ```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 | + +> 🤔 Jos työskentelemme klusteroinnin parissa, valvomatonta menetelmää, joka ei vaadi merkittyä dataa, miksi näytämme tämän datan etiketeillä? Tutkimusvaiheessa ne ovat hyödyllisiä, mutta klusterointialgoritmit eivät tarvitse niitä toimiakseen. Voisit yhtä hyvin poistaa sarakeotsikot ja viitata dataan sarakenumeron perusteella. + +Katso datan yleisiä arvoja. Huomaa, että suosio voi olla '0', mikä tarkoittaa kappaleita, joilla ei ole sijoitusta. Poistetaan ne pian. + +1. Käytä pylväsdiagrammia selvittääksesi suosituimmat genret: + + ```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](../../../../5-Clustering/1-Visualize/images/popular.png) + +✅ Jos haluat nähdä enemmän huippuarvoja, muuta top `[:5]` suuremmaksi arvoksi tai poista se nähdäksesi kaikki. + +Huomaa, kun huippugenre on kuvattu 'Missing', se tarkoittaa, että Spotify ei luokitellut sitä, joten poistetaan se. + +1. Poista puuttuvat tiedot suodattamalla ne pois + + ```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') + ``` + + Tarkista genret uudelleen: + + ![most popular](../../../../5-Clustering/1-Visualize/images/all-genres.png) + +1. Selvästi kolme suosituinta genreä hallitsevat tätä datasettiä. Keskitytään `afro dancehall`, `afropop` ja `nigerian pop`, ja lisäksi suodatetaan datasetti poistamalla kaikki, joiden suosioarvo on 0 (mikä tarkoittaa, että niitä ei luokiteltu datasetissä ja niitä voidaan pitää meluna tarkoituksiimme): + + ```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. Tee nopea testi nähdäksesi, korreloiko data erityisen vahvasti: + + ```python + corrmat = df.corr(numeric_only=True) + f, ax = plt.subplots(figsize=(12, 9)) + sns.heatmap(corrmat, vmax=.8, square=True) + ``` + + ![correlations](../../../../5-Clustering/1-Visualize/images/correlation.png) + + Ainoa vahva korrelaatio on `energy` ja `loudness` välillä, mikä ei ole kovin yllättävää, koska äänekäs musiikki on yleensä melko energistä. Muuten korrelaatiot ovat suhteellisen heikkoja. On mielenkiintoista nähdä, mitä klusterointialgoritmi voi tehdä tämän datan kanssa. + + > 🎓 Huomaa, että korrelaatio ei tarkoita kausaatiota! Meillä on todiste korrelaatiosta, mutta ei todiste kausaatiosta. [Hauska verkkosivusto](https://tylervigen.com/spurious-correlations) sisältää visuaaleja, jotka korostavat tätä asiaa. + +Onko tässä datasetissä yhteneväisyyttä kappaleen koetun suosion ja tanssittavuuden välillä? FacetGrid näyttää, että on keskittyneitä ympyröitä, jotka asettuvat linjaan genrestä riippumatta. Voisiko olla, että nigerialaiset mieltymykset keskittyvät tiettyyn tanssittavuuden tasoon tässä genressä? + +✅ Kokeile eri datapisteitä (energy, loudness, speechiness) ja lisää tai eri musiikkigenrejä. Mitä voit löytää? Katso `df.describe()`-taulukkoa nähdäksesi datan yleisen jakauman. + +### Harjoitus - datan jakauma + +Ovatko nämä kolme genreä merkittävästi erilaisia tanssittavuuden suhteen niiden suosion perusteella? + +1. Tutki kolmen suosituimman genren datan jakaumaa suosion ja tanssittavuuden osalta annetulla x- ja y-akselilla. + + ```python + sns.set_theme(style="ticks") + + g = sns.jointplot( + data=df, + x="popularity", y="danceability", hue="artist_top_genre", + kind="kde", + ) + ``` + + Voit löytää keskittyneitä ympyröitä yleisen yhtymäkohdan ympärillä, jotka näyttävät pisteiden jakauman. + + > 🎓 Huomaa, että tämä esimerkki käyttää KDE (Kernel Density Estimate) -kaaviota, joka esittää datan jatkuvan todennäköisyystiheyskäyrän avulla. Tämä mahdollistaa datan tulkinnan, kun työskennellään useiden jakaumien kanssa. + + Yleisesti ottaen kolme genreä asettuvat löyhästi linjaan suosion ja tanssittavuuden suhteen. Klusterien määrittäminen tässä löyhästi linjautuvassa datassa tulee olemaan haastavaa: + + ![distribution](../../../../5-Clustering/1-Visualize/images/distribution.png) + +1. Luo hajontakaavio: + + ```python + sns.FacetGrid(df, hue="artist_top_genre", height=5) \ + .map(plt.scatter, "popularity", "danceability") \ + .add_legend() + ``` + + Hajontakaavio samoilla akseleilla näyttää samanlaisen yhtymäkohdan kuvion + + ![Facetgrid](../../../../5-Clustering/1-Visualize/images/facetgrid.png) + +Yleisesti ottaen klusterointia varten voit käyttää hajontakaavioita datan klustereiden näyttämiseen, joten tämän tyyppisen visualisoinnin hallitseminen on erittäin hyödyllistä. Seuraavassa oppitunnissa otamme tämän suodatetun datan ja käytämme k-means-klusterointia löytääksemme ryhmiä tästä datasta, jotka näyttävät olevan päällekkäisiä mielenkiintoisilla tavoilla. + +--- + +## 🚀Haaste + +Valmistaudu seuraavaan oppituntiin tekemällä kaavio eri klusterointialgoritmeista, joita voit löytää ja käyttää tuotantoympäristössä. Minkälaisia ongelmia klusterointi yrittää ratkaista? + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Ennen kuin sovellat klusterointialgoritmeja, kuten olemme oppineet, on hyvä idea ymmärtää datasetin luonne. Lue lisää tästä aiheesta [täältä](https://www.kdnuggets.com/2019/10/right-clustering-algorithm.html) + +[Tämä hyödyllinen artikkeli](https://www.freecodecamp.org/news/8-clustering-algorithms-in-machine-learning-that-all-data-scientists-should-know/) opastaa sinut läpi eri tapoja, joilla klusterointialgoritmit käyttäytyvät eri datamuotojen kanssa. + +## Tehtävä + +[Tutki muita visualisointeja klusterointia varten](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/1-Visualize/assignment.md b/translations/fi/5-Clustering/1-Visualize/assignment.md new file mode 100644 index 000000000..fe71f0958 --- /dev/null +++ b/translations/fi/5-Clustering/1-Visualize/assignment.md @@ -0,0 +1,25 @@ + +# Tutki muita visualisointitapoja klusterointia varten + +## Ohjeet + +Tässä oppitunnissa olet käyttänyt joitakin visualisointitekniikoita saadaksesi käsityksen siitä, miten dataa voidaan piirtää klusterointia varten. Hajontakaaviot ovat erityisen hyödyllisiä ryhmien löytämisessä. Tutki erilaisia tapoja ja kirjastoja hajontakaavioiden luomiseen ja dokumentoi työsi muistikirjaan. Voit käyttää tämän oppitunnin dataa, muiden oppituntien dataa tai itse hankkimaasi dataa (muista kuitenkin mainita sen lähde muistikirjassasi). Piirrä joitakin hajontakaavioita ja selitä, mitä havaitsit. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------- | +| | Muistikirjassa on esitetty viisi hyvin dokumentoitua hajontakaaviota | Muistikirjassa on alle viisi hajontakaaviota ja dokumentointi on vähemmän kattavaa | Esitetty muistikirja on puutteellinen | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/1-Visualize/solution/Julia/README.md b/translations/fi/5-Clustering/1-Visualize/solution/Julia/README.md new file mode 100644 index 000000000..1e9c8d1bc --- /dev/null +++ b/translations/fi/5-Clustering/1-Visualize/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/2-K-Means/README.md b/translations/fi/5-Clustering/2-K-Means/README.md new file mode 100644 index 000000000..505890dab --- /dev/null +++ b/translations/fi/5-Clustering/2-K-Means/README.md @@ -0,0 +1,261 @@ + +# K-Means-klusterointi + +## [Pre-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +Tässä oppitunnissa opit luomaan klustereita Scikit-learnin avulla ja käyttämällä aiemmin tuomaasi Nigerian musiikkidataa. Käymme läpi K-Meansin perusteet klusterointia varten. Muista, että kuten opit aiemmassa oppitunnissa, klustereiden kanssa työskentelyyn on monia tapoja, ja käyttämäsi menetelmä riippuu datastasi. Kokeilemme K-Meansia, koska se on yleisin klusterointitekniikka. Aloitetaan! + +Termit, joista opit lisää: + +- Silhouette-pisteytys +- Kyynärpäämenetelmä +- Inertia +- Varianssi + +## Johdanto + +[K-Means-klusterointi](https://wikipedia.org/wiki/K-means_clustering) on menetelmä, joka on peräisin signaalinkäsittelyn alalta. Sitä käytetään jakamaan ja ryhmittelemään dataa 'k' klusteriin havaintojen avulla. Jokainen havainto pyrkii ryhmittelemään tietyn datapisteen lähimpään 'keskiarvoon' eli klusterin keskipisteeseen. + +Klusterit voidaan visualisoida [Voronoi-diagrammeina](https://wikipedia.org/wiki/Voronoi_diagram), jotka sisältävät pisteen (tai 'siemenen') ja sen vastaavan alueen. + +![voronoi diagram](../../../../5-Clustering/2-K-Means/images/voronoi.png) + +> Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +K-Means-klusterointiprosessi [etenee kolmivaiheisessa prosessissa](https://scikit-learn.org/stable/modules/clustering.html#k-means): + +1. Algoritmi valitsee k-määrän keskipisteitä ottamalla näytteitä datasta. Tämän jälkeen se toistaa: + 1. Se määrittää jokaisen näytteen lähimpään keskipisteeseen. + 2. Se luo uusia keskipisteitä laskemalla kaikkien edellisiin keskipisteisiin määritettyjen näytteiden keskiarvon. + 3. Sitten se laskee eron uusien ja vanhojen keskipisteiden välillä ja toistaa, kunnes keskipisteet vakiintuvat. + +Yksi K-Meansin käytön haittapuoli on se, että sinun täytyy määrittää 'k', eli keskipisteiden määrä. Onneksi 'kyynärpäämenetelmä' auttaa arvioimaan hyvän lähtöarvon 'k':lle. Kokeilet sitä pian. + +## Esitiedot + +Työskentelet tämän oppitunnin [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/5-Clustering/2-K-Means/notebook.ipynb)-tiedostossa, joka sisältää datan tuonnin ja alustavan puhdistuksen, jonka teit edellisessä oppitunnissa. + +## Harjoitus - valmistelu + +Aloita tarkastelemalla uudelleen kappaledataa. + +1. Luo laatikkokaavio kutsumalla `boxplot()` jokaiselle sarakkeelle: + + ```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) + ``` + + Tämä data on hieman meluisaa: tarkastelemalla kutakin saraketta laatikkokaaviona voit nähdä poikkeamia. + + ![outliers](../../../../5-Clustering/2-K-Means/images/boxplots.png) + +Voisit käydä datasetin läpi ja poistaa nämä poikkeamat, mutta se tekisi datasta melko vähäistä. + +1. Valitse toistaiseksi, mitkä sarakkeet käytät klusterointiharjoituksessa. Valitse sarakkeet, joilla on samanlaiset vaihteluvälit, ja koodaa `artist_top_genre`-sarake numeeriseksi dataksi: + + ```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. Nyt sinun täytyy päättää, kuinka monta klusteria kohdistat. Tiedät, että datasetistä on erotettu kolme kappaletyyliä, joten kokeillaan kolmea: + + ```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 + ``` + +Näet tulostettuna taulukon, jossa on ennustetut klusterit (0, 1 tai 2) jokaiselle dataframe-riville. + +1. Käytä tätä taulukkoa laskeaksesi 'silhouette-pisteen': + + ```python + from sklearn import metrics + score = metrics.silhouette_score(X, y_cluster_kmeans) + score + ``` + +## Silhouette-pisteytys + +Etsi silhouette-piste, joka on lähempänä 1:tä. Tämä piste vaihtelee -1:stä 1:een, ja jos piste on 1, klusteri on tiivis ja hyvin erotettu muista klustereista. Arvo lähellä 0:aa edustaa päällekkäisiä klustereita, joissa näytteet ovat hyvin lähellä naapuriklusterien päätösrajaa. [(Lähde)](https://dzone.com/articles/kmeans-silhouette-score-explained-with-python-exam) + +Meidän pisteemme on **.53**, eli keskivaiheilla. Tämä osoittaa, että datamme ei ole erityisen hyvin soveltuvaa tämän tyyppiseen klusterointiin, mutta jatketaan. + +### Harjoitus - mallin rakentaminen + +1. Tuo `KMeans` ja aloita klusterointiprosessi. + + ```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_) + + ``` + + Tässä on muutama osa, jotka vaativat selitystä. + + > 🎓 range: Nämä ovat klusterointiprosessin iteroinnit. + + > 🎓 random_state: "Määrittää satunnaislukugeneraation keskipisteiden alustamiseen." [Lähde](https://scikit-learn.org/stable/modules/generated/sklearn.cluster.KMeans.html#sklearn.cluster.KMeans) + + > 🎓 WCSS: "klusterin sisäiset neliösummat" mittaa kaikkien klusterin sisällä olevien pisteiden keskipisteeseen kohdistuvan keskimääräisen etäisyyden neliön. [Lähde](https://medium.com/@ODSC/unsupervised-learning-evaluating-clusters-bd47eed175ce). + + > 🎓 Inertia: K-Means-algoritmit pyrkivät valitsemaan keskipisteet minimoimaan 'inertiaa', "mitta, kuinka sisäisesti yhtenäisiä klusterit ovat." [Lähde](https://scikit-learn.org/stable/modules/clustering.html). Arvo lisätään wcss-muuttujaan jokaisella iteroinnilla. + + > 🎓 k-means++: [Scikit-learnissa](https://scikit-learn.org/stable/modules/clustering.html#k-means) voit käyttää 'k-means++'-optimointia, joka "alustaa keskipisteet olemaan (yleensä) kaukana toisistaan, mikä johtaa todennäköisesti parempiin tuloksiin kuin satunnainen alustus." + +### Kyynärpäämenetelmä + +Aiemmin oletit, että koska olet kohdistanut kolme kappaletyyliä, sinun pitäisi valita kolme klusteria. Mutta onko näin? + +1. Käytä 'kyynärpäämenetelmää' varmistaaksesi. + + ```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() + ``` + + Käytä `wcss`-muuttujaa, jonka rakensit edellisessä vaiheessa, luodaksesi kaavion, joka näyttää, missä kyynärpään "taite" on, mikä osoittaa optimaalisen klusterien määrän. Ehkä se **onkin** 3! + + ![elbow method](../../../../5-Clustering/2-K-Means/images/elbow.png) + +## Harjoitus - klustereiden näyttäminen + +1. Kokeile prosessia uudelleen, tällä kertaa asettamalla kolme klusteria, ja näytä klusterit hajontakaaviona: + + ```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. Tarkista mallin tarkkuus: + + ```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))) + ``` + + Tämän mallin tarkkuus ei ole kovin hyvä, ja klustereiden muoto antaa vihjeen miksi. + + ![clusters](../../../../5-Clustering/2-K-Means/images/clusters.png) + + Tämä data on liian epätasapainoista, liian vähän korreloitua ja sarakearvojen välillä on liikaa vaihtelua, jotta klusterointi onnistuisi hyvin. Itse asiassa muodostuvat klusterit ovat todennäköisesti vahvasti vaikuttuneita tai vinoutuneita yllä määrittelemiemme kolmen tyylilajin mukaan. Tämä oli oppimisprosessi! + + Scikit-learnin dokumentaatiosta voit nähdä, että tällaisella mallilla, jossa klusterit eivät ole kovin hyvin rajattuja, on 'varianssi'-ongelma: + + ![problem models](../../../../5-Clustering/2-K-Means/images/problems.png) + > Infografiikka: Scikit-learn + +## Varianssi + +Varianssi määritellään "keskiarvona neliöllisistä eroista keskiarvosta" [(Lähde)](https://www.mathsisfun.com/data/standard-deviation.html). Tässä klusterointiongelman kontekstissa se viittaa dataan, jossa datasetin numerot poikkeavat hieman liikaa keskiarvosta. + +✅ Tämä on hyvä hetki miettiä kaikkia tapoja, joilla voisit korjata tämän ongelman. Voisitko muokata dataa hieman enemmän? Käyttää eri sarakkeita? Käyttää eri algoritmia? Vinkki: Kokeile [skaalata dataasi](https://www.mygreatlearning.com/blog/learning-data-science-with-k-means-clustering/) normalisoidaksesi sen ja testataksesi muita sarakkeita. + +> Kokeile tätä '[varianssilaskuria](https://www.calculatorsoup.com/calculators/statistics/variance-calculator.php)' ymmärtääksesi konseptia hieman paremmin. + +--- + +## 🚀Haaste + +Käytä aikaa tämän notebookin parissa ja säädä parametreja. Voitko parantaa mallin tarkkuutta puhdistamalla dataa enemmän (esimerkiksi poistamalla poikkeamat)? Voit käyttää painotuksia antaaksesi enemmän painoarvoa tietyille datanäytteille. Mitä muuta voisit tehdä luodaksesi parempia klustereita? + +Vinkki: Kokeile skaalata dataasi. Notebookissa on kommentoitua koodia, joka lisää standardisoinnin, jotta datan sarakkeet muistuttaisivat toisiaan enemmän vaihteluvälin osalta. Huomaat, että vaikka silhouette-piste laskee, kyynärpääkaavion "taite" tasoittuu. Tämä johtuu siitä, että jättämällä datan skaalaamatta, data, jolla on vähemmän varianssia, saa enemmän painoarvoa. Lue lisää tästä ongelmasta [täältä](https://stats.stackexchange.com/questions/21222/are-mean-normalization-and-feature-scaling-needed-for-k-means-clustering/21226#21226). + +## [Post-lecture quiz](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Tutustu K-Means-simulaattoriin [kuten tähän](https://user.ceng.metu.edu.tr/~akifakkus/courses/ceng574/k-means/). Voit käyttää tätä työkalua visualisoidaksesi näytepisteitä ja määrittääksesi niiden keskipisteet. Voit muokata datan satunnaisuutta, klusterien määrää ja keskipisteiden määrää. Auttaako tämä sinua saamaan käsityksen siitä, miten data voidaan ryhmitellä? + +Tutustu myös [tähän K-Means-materiaaliin](https://stanford.edu/~cpiech/cs221/handouts/kmeans.html) Stanfordilta. + +## Tehtävä + +[Kokeile eri klusterointimenetelmiä](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/2-K-Means/assignment.md b/translations/fi/5-Clustering/2-K-Means/assignment.md new file mode 100644 index 000000000..61784c342 --- /dev/null +++ b/translations/fi/5-Clustering/2-K-Means/assignment.md @@ -0,0 +1,25 @@ + +# Kokeile eri klusterointimenetelmiä + +## Ohjeet + +Tässä oppitunnissa opit K-Means-klusteroinnista. Joskus K-Means ei ole sopiva menetelmä datallesi. Luo muistikirja käyttäen joko näiden oppituntien dataa tai muuta dataa (mainitse lähde) ja esitä eri klusterointimenetelmä, joka EI käytä K-Meansia. Mitä opit? + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | -------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Muistikirja sisältää hyvin dokumentoidun klusterointimallin | Muistikirja on esitetty ilman hyvää dokumentaatiota ja/tai keskeneräinen | Keskeneräinen työ on palautettu | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/2-K-Means/solution/Julia/README.md b/translations/fi/5-Clustering/2-K-Means/solution/Julia/README.md new file mode 100644 index 000000000..7ed530ee2 --- /dev/null +++ b/translations/fi/5-Clustering/2-K-Means/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/5-Clustering/README.md b/translations/fi/5-Clustering/README.md new file mode 100644 index 000000000..7ee454e4e --- /dev/null +++ b/translations/fi/5-Clustering/README.md @@ -0,0 +1,42 @@ + +# Klusterointimallit koneoppimiseen + +Klusterointi on koneoppimisen tehtävä, jossa pyritään löytämään toisiaan muistuttavia objekteja ja ryhmittelemään ne ryhmiin, joita kutsutaan klustereiksi. Se, mikä erottaa klusteroinnin muista koneoppimisen lähestymistavoista, on se, että prosessi tapahtuu automaattisesti. Itse asiassa voidaan sanoa, että se on päinvastainen valvotulle oppimiselle. + +## Alueellinen aihe: klusterointimallit Nigerian yleisön musiikkimakua varten 🎧 + +Nigerian monimuotoinen yleisö nauttii monenlaisesta musiikista. Käyttämällä Spotifysta kerättyä dataa (inspiroituna [tästä artikkelista](https://towardsdatascience.com/country-wise-visual-analysis-of-music-taste-using-spotify-api-seaborn-in-python-77f5b749b421)), tarkastellaan joitakin Nigeriassa suosittuja kappaleita. Tämä datasetti sisältää tietoa kappaleiden "tanssittavuudesta", "akustisuudesta", äänenvoimakkuudesta, "puheisuudesta", suosiosta ja energiasta. On mielenkiintoista löytää kuvioita tästä datasta! + +![Levysoitin](../../../5-Clustering/images/turntable.jpg) + +> Kuva: Marcela Laskoski palvelussa Unsplash + +Tässä oppituntisarjassa opit uusia tapoja analysoida dataa klusterointitekniikoiden avulla. Klusterointi on erityisen hyödyllistä silloin, kun datasetistä puuttuvat etiketit. Jos datasetissä on etiketit, luokittelutekniikat, kuten aiemmissa oppitunneissa opitut, voivat olla hyödyllisempiä. Mutta tilanteissa, joissa haluat ryhmitellä etiketöimätöntä dataa, klusterointi on erinomainen tapa löytää kuvioita. + +> On olemassa hyödyllisiä vähäkoodisia työkaluja, jotka voivat auttaa sinua oppimaan klusterointimallien kanssa työskentelyä. Kokeile [Azure ML:ää tähän tehtävään](https://docs.microsoft.com/learn/modules/create-clustering-model-azure-machine-learning-designer/?WT.mc_id=academic-77952-leestott) + +## Oppitunnit + +1. [Johdatus klusterointiin](1-Visualize/README.md) +2. [K-Means-klusterointi](2-K-Means/README.md) + +## Tekijät + +Nämä oppitunnit kirjoitettiin 🎶 [Jen Looperin](https://www.twitter.com/jenlooper) toimesta, ja niitä tarkistivat hyödyllisesti [Rishit Dagli](https://rishit_dagli) ja [Muhammad Sakib Khan Inan](https://twitter.com/Sakibinan). + +[Nigerian Songs](https://www.kaggle.com/sootersaalu/nigerian-songs-spotify) datasetti on peräisin Kagglesta ja kerätty Spotifysta. + +Hyödyllisiä K-Means-esimerkkejä, jotka auttoivat tämän oppitunnin luomisessa, ovat tämä [iris-tutkimus](https://www.kaggle.com/bburns/iris-exploration-pca-k-means-and-gmm-clustering), tämä [aloitusnotebook](https://www.kaggle.com/prashant111/k-means-clustering-with-python) ja tämä [hypoteettinen NGO-esimerkki](https://www.kaggle.com/ankandash/pca-k-means-clustering-hierarchical-clustering). + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/1-Introduction-to-NLP/README.md b/translations/fi/6-NLP/1-Introduction-to-NLP/README.md new file mode 100644 index 000000000..9ea31ebcf --- /dev/null +++ b/translations/fi/6-NLP/1-Introduction-to-NLP/README.md @@ -0,0 +1,179 @@ + +# Johdatus luonnollisen kielen käsittelyyn + +Tässä oppitunnissa käsitellään lyhyesti *luonnollisen kielen käsittelyn* historiaa ja keskeisiä käsitteitä, joka on osa-alue *laskennallisesta kielitieteestä*. + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +## Johdanto + +NLP, kuten sitä yleisesti kutsutaan, on yksi tunnetuimmista alueista, joilla koneoppimista on sovellettu ja käytetty tuotanto-ohjelmistoissa. + +✅ Voitko keksiä ohjelmistoja, joita käytät päivittäin ja joissa todennäköisesti on mukana NLP:tä? Entä tekstinkäsittelyohjelmat tai mobiilisovellukset, joita käytät säännöllisesti? + +Opit seuraavista aiheista: + +- **Kielten idea**. Miten kielet kehittyivät ja mitkä ovat olleet keskeiset tutkimusalueet. +- **Määritelmät ja käsitteet**. Opit myös määritelmiä ja käsitteitä siitä, miten tietokoneet käsittelevät tekstiä, mukaan lukien jäsennys, kielioppi sekä substantiivien ja verbien tunnistaminen. Oppitunnilla on joitakin koodausharjoituksia, ja useita tärkeitä käsitteitä esitellään, joita opit koodaamaan myöhemmin seuraavissa oppitunneissa. + +## Laskennallinen kielitiede + +Laskennallinen kielitiede on tutkimus- ja kehitysalue, joka on ollut olemassa vuosikymmeniä ja tutkii, miten tietokoneet voivat työskennellä kielten kanssa, jopa ymmärtää, kääntää ja kommunikoida niiden avulla. Luonnollisen kielen käsittely (NLP) on siihen liittyvä ala, joka keskittyy siihen, miten tietokoneet voivat käsitellä "luonnollisia" eli ihmisten käyttämiä kieliä. + +### Esimerkki - puheentunnistus puhelimessa + +Jos olet koskaan sanellut puhelimellesi sen sijaan, että kirjoittaisit, tai kysynyt virtuaaliassistentilta kysymyksen, puheesi on muutettu tekstimuotoon ja sitten käsitelty tai *jäsennetty* puhumallasi kielellä. Tunnistetut avainsanat on sitten käsitelty muotoon, jonka puhelin tai assistentti voi ymmärtää ja käyttää. + +![ymmärrys](../../../../6-NLP/1-Introduction-to-NLP/images/comprehension.png) +> Todellinen kielellinen ymmärrys on vaikeaa! Kuva: [Jen Looper](https://twitter.com/jenlooper) + +### Miten tämä teknologia on mahdollista? + +Tämä on mahdollista, koska joku kirjoitti tietokoneohjelman tekemään sen. Muutama vuosikymmen sitten jotkut tieteiskirjailijat ennustivat, että ihmiset puhuisivat enimmäkseen tietokoneilleen ja tietokoneet ymmärtäisivät aina tarkalleen, mitä he tarkoittavat. Valitettavasti ongelma osoittautui vaikeammaksi kuin monet kuvittelivat, ja vaikka se on nykyään paljon paremmin ymmärretty ongelma, täydellisen luonnollisen kielen käsittelyn saavuttamisessa on merkittäviä haasteita, erityisesti lauseen merkityksen ymmärtämisessä. Tämä on erityisen vaikea ongelma, kun kyseessä on huumorin ymmärtäminen tai tunteiden, kuten sarkasmin, havaitseminen lauseessa. + +Tässä vaiheessa saatat muistaa koulutunnit, joissa opettaja käsitteli lauseen kieliopillisia osia. Joissakin maissa oppilaille opetetaan kielioppia ja kielitiedettä omana oppiaineenaan, mutta monissa maissa nämä aiheet sisältyvät kielen oppimiseen: joko ensimmäisen kielen oppimiseen alakoulussa (lukemisen ja kirjoittamisen oppiminen) ja mahdollisesti toisen kielen oppimiseen yläkoulussa tai lukiossa. Älä huoli, jos et ole asiantuntija erottamaan substantiiveja verbeistä tai adverbejä adjektiiveista! + +Jos sinulla on vaikeuksia erottaa *yksinkertainen preesens* ja *preesensin kestomuoto*, et ole yksin. Tämä on haastavaa monille ihmisille, jopa kielen äidinkielisille puhujille. Hyvä uutinen on, että tietokoneet ovat todella hyviä soveltamaan muodollisia sääntöjä, ja opit kirjoittamaan koodia, joka voi *jäsentää* lauseen yhtä hyvin kuin ihminen. Suurempi haaste, jota tarkastelet myöhemmin, on lauseen *merkityksen* ja *tunteen* ymmärtäminen. + +## Esitiedot + +Tämän oppitunnin pääasiallinen esitieto on kyky lukea ja ymmärtää oppitunnin kieltä. Oppitunnilla ei ole matemaattisia ongelmia tai yhtälöitä ratkaistavaksi. Vaikka alkuperäinen kirjoittaja kirjoitti tämän oppitunnin englanniksi, se on myös käännetty muille kielille, joten saatat lukea käännöstä. Esimerkeissä käytetään useita eri kieliä (vertaillaan eri kielten kielioppisääntöjä). Näitä ei *käännetä*, mutta selittävä teksti on, joten merkitys pitäisi olla selvä. + +Koodausharjoituksissa käytät Pythonia, ja esimerkit käyttävät Python 3.8:aa. + +Tässä osiossa tarvitset ja käytät: + +- **Python 3 -osaaminen**. Python 3 -ohjelmointikielen ymmärtäminen, tämä oppitunti käyttää syötettä, silmukoita, tiedostojen lukemista ja taulukoita. +- **Visual Studio Code + laajennus**. Käytämme Visual Studio Codea ja sen Python-laajennusta. Voit myös käyttää haluamaasi Python-IDE:tä. +- **TextBlob**. [TextBlob](https://github.com/sloria/TextBlob) on yksinkertaistettu tekstinkäsittelykirjasto Pythonille. Seuraa TextBlob-sivuston ohjeita asentaaksesi sen järjestelmääsi (asenna myös korpukset, kuten alla näytetään): + + ```bash + pip install -U textblob + python -m textblob.download_corpora + ``` + +> 💡 Vinkki: Voit ajaa Pythonia suoraan VS Code -ympäristöissä. Katso [dokumentaatio](https://code.visualstudio.com/docs/languages/python?WT.mc_id=academic-77952-leestott) saadaksesi lisätietoja. + +## Keskustelu koneiden kanssa + +Historia siitä, miten tietokoneet saadaan ymmärtämään ihmisten kieltä, ulottuu vuosikymmenten taakse, ja yksi varhaisimmista tutkijoista, joka pohti luonnollisen kielen käsittelyä, oli *Alan Turing*. + +### 'Turingin testi' + +Kun Turing tutki *tekoälyä* 1950-luvulla, hän pohti, voisiko ihmisen ja tietokoneen välille (kirjoitetun viestinnän kautta) järjestää keskustelutestin, jossa ihminen ei olisi varma, keskusteleeko hän toisen ihmisen vai tietokoneen kanssa. + +Jos tietyn keskustelun jälkeen ihminen ei pystyisi määrittämään, olivatko vastaukset peräisin tietokoneelta vai ei, voitaisiinko tietokoneen sanoa *ajattelevan*? + +### Inspiraatio - 'imitaatiopeli' + +Idea tähän tuli juhlapelistä nimeltä *Imitaatiopeli*, jossa kuulustelija on yksin huoneessa ja hänen tehtävänään on määrittää, kumpi kahdesta henkilöstä (toisessa huoneessa) on mies ja kumpi nainen. Kuulustelija voi lähettää muistiinpanoja ja hänen täytyy yrittää keksiä kysymyksiä, joissa kirjalliset vastaukset paljastavat mysteerihenkilön sukupuolen. Tietenkin toisen huoneen pelaajat yrittävät hämätä kuulustelijaa vastaamalla kysymyksiin tavalla, joka johtaa harhaan tai hämmentää kuulustelijaa, samalla kun he antavat vaikutelman rehellisestä vastauksesta. + +### Elizan kehittäminen + +1960-luvulla MIT:n tutkija *Joseph Weizenbaum* kehitti [*Elizan*](https://wikipedia.org/wiki/ELIZA), tietokoneen "terapeutin", joka kysyi ihmiseltä kysymyksiä ja antoi vaikutelman ymmärtävänsä heidän vastauksensa. Kuitenkin, vaikka Eliza pystyi jäsentämään lauseen ja tunnistamaan tiettyjä kieliopillisia rakenteita ja avainsanoja antaakseen järkevän vastauksen, sitä ei voitu sanoa *ymmärtävän* lausetta. Jos Elizalle esitettiin lause, joka noudatti muotoa "**Olen** surullinen", se saattoi järjestää ja korvata sanoja lauseessa muodostaakseen vastauksen "Kuinka kauan olet ollut surullinen". + +Tämä antoi vaikutelman, että Eliza ymmärsi väitteen ja esitti jatkokysymyksen, kun todellisuudessa se vain muutti aikamuotoa ja lisäsi joitakin sanoja. Jos Eliza ei pystynyt tunnistamaan avainsanaa, johon sillä oli vastaus, se antoi sen sijaan satunnaisen vastauksen, joka saattoi sopia moniin eri väitteisiin. Elizaa oli helppo huijata, esimerkiksi jos käyttäjä kirjoitti "**Sinä olet** polkupyörä", se saattoi vastata "Kuinka kauan olen ollut polkupyörä?", sen sijaan että antaisi järkevämmän vastauksen. + +[![Keskustelu Elizan kanssa](https://img.youtube.com/vi/RMK9AphfLco/0.jpg)](https://youtu.be/RMK9AphfLco "Keskustelu Elizan kanssa") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon alkuperäisestä ELIZA-ohjelmasta + +> Huom: Voit lukea alkuperäisen kuvauksen [Elizasta](https://cacm.acm.org/magazines/1966/1/13317-elizaa-computer-program-for-the-study-of-natural-language-communication-between-man-and-machine/abstract), joka julkaistiin vuonna 1966, jos sinulla on ACM-tili. Vaihtoehtoisesti voit lukea Elizasta [wikipediassa](https://wikipedia.org/wiki/ELIZA). + +## Harjoitus - yksinkertaisen keskustelubotin koodaaminen + +Keskustelubotti, kuten Eliza, on ohjelma, joka pyytää käyttäjän syötettä ja vaikuttaa ymmärtävän ja vastaavan älykkäästi. Toisin kuin Eliza, meidän bottimme ei sisällä useita sääntöjä, jotka antavat sille vaikutelman älykkäästä keskustelusta. Sen sijaan botillamme on vain yksi kyky: pitää keskustelu käynnissä satunnaisilla vastauksilla, jotka saattavat toimia melkein missä tahansa triviaalissa keskustelussa. + +### Suunnitelma + +Vaiheet keskustelubotin rakentamisessa: + +1. Tulosta ohjeet, joissa neuvotaan käyttäjää, miten olla vuorovaikutuksessa botin kanssa +2. Käynnistä silmukka + 1. Hyväksy käyttäjän syöte + 2. Jos käyttäjä pyytää lopettamaan, lopeta + 3. Käsittele käyttäjän syöte ja määritä vastaus (tässä tapauksessa vastaus on satunnainen valinta mahdollisten yleisten vastausten listasta) + 4. Tulosta vastaus +3. Palaa kohtaan 2 + +### Botin rakentaminen + +Luodaan botti seuraavaksi. Aloitetaan määrittelemällä joitakin lauseita. + +1. Luo tämä botti itse Pythonilla seuraavilla satunnaisilla vastauksilla: + + ```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?"] + ``` + + Tässä on esimerkkituloste ohjeeksi (käyttäjän syöte alkaa `>`-merkillä): + + ```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! + ``` + + Yksi mahdollinen ratkaisu tehtävään löytyy [täältä](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/1-Introduction-to-NLP/solution/bot.py) + + ✅ Pysähdy ja pohdi + + 1. Uskotko, että satunnaiset vastaukset voisivat "huijata" jonkun ajattelemaan, että botti todella ymmärtää häntä? + 2. Mitä ominaisuuksia botilla pitäisi olla, jotta se olisi tehokkaampi? + 3. Jos botti todella ymmärtäisi lauseen merkityksen, pitäisikö sen myös "muistaa" aiempien lauseiden merkitys keskustelussa? + +--- + +## 🚀Haaste + +Valitse yksi yllä olevista "pysähdy ja pohdi" -elementeistä ja yritä joko toteuttaa se koodissa tai kirjoittaa ratkaisu paperille pseudokoodina. + +Seuraavassa oppitunnissa opit useista muista lähestymistavoista luonnollisen kielen jäsentämiseen ja koneoppimiseen. + +## [Jälkikysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Tutustu alla oleviin viitteisiin lisälukumahdollisuuksina. + +### Viitteet + +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. + +## Tehtävä + +[Etsi botti](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/1-Introduction-to-NLP/assignment.md b/translations/fi/6-NLP/1-Introduction-to-NLP/assignment.md new file mode 100644 index 000000000..3e4b20b96 --- /dev/null +++ b/translations/fi/6-NLP/1-Introduction-to-NLP/assignment.md @@ -0,0 +1,25 @@ + +# Etsi botti + +## Ohjeet + +Botit ovat kaikkialla. Tehtäväsi: löydä yksi ja adoptoi se! Voit löytää botteja verkkosivuilta, pankkisovelluksista ja puhelimesta, esimerkiksi kun soitat rahoituspalveluyrityksille saadaksesi neuvoja tai tilitietoja. Analysoi botti ja katso, voitko hämmentää sitä. Jos onnistut hämmentämään bottia, miksi luulet sen tapahtuneen? Kirjoita lyhyt raportti kokemuksestasi. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ------------------------------------------------------------------------------------------------------------- | ------------------------------------------- | --------------------- | +| | Kokonainen sivu on kirjoitettu, selittäen oletetun botin arkkitehtuurin ja kuvaten kokemuksesi sen kanssa | Raportti on keskeneräinen tai huonosti tutkittu | Raporttia ei ole toimitettu | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/2-Tasks/README.md b/translations/fi/6-NLP/2-Tasks/README.md new file mode 100644 index 000000000..2864e0705 --- /dev/null +++ b/translations/fi/6-NLP/2-Tasks/README.md @@ -0,0 +1,228 @@ + +# Yleisiä luonnollisen kielen käsittelyn tehtäviä ja tekniikoita + +Useimmissa *luonnollisen kielen käsittelyn* tehtävissä käsiteltävä teksti täytyy pilkkoa, tutkia ja tallentaa tulokset tai verrata niitä sääntöihin ja tietokantoihin. Näiden tehtävien avulla ohjelmoija voi selvittää tekstin _merkityksen_, _tarkoituksen_ tai pelkästään _sanojen ja termien esiintymistiheyden_. + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +Tutustutaan yleisiin tekniikoihin, joita käytetään tekstin käsittelyssä. Yhdistettynä koneoppimiseen nämä tekniikat auttavat analysoimaan suuria tekstimääriä tehokkaasti. Ennen kuin sovellamme koneoppimista näihin tehtäviin, on tärkeää ymmärtää ongelmat, joita NLP-asiantuntija kohtaa. + +## NLP:n yleiset tehtävät + +Tekstin analysointiin on monia eri tapoja. On olemassa tehtäviä, joita voit suorittaa, ja näiden tehtävien avulla voit ymmärtää tekstiä ja tehdä johtopäätöksiä. Yleensä nämä tehtävät suoritetaan tietyssä järjestyksessä. + +### Tokenisointi + +Todennäköisesti ensimmäinen asia, jonka useimmat NLP-algoritmit tekevät, on tekstin jakaminen tokeneiksi eli sanoiksi. Vaikka tämä kuulostaa yksinkertaiselta, välimerkkien ja eri kielten sanan- ja lauseenrajoittimien huomioiminen voi tehdä siitä haastavaa. Saatat joutua käyttämään erilaisia menetelmiä rajojen määrittämiseksi. + +![tokenisointi](../../../../6-NLP/2-Tasks/images/tokenization.png) +> Tokenisointi lauseesta **Ylpeys ja ennakkoluulo**. Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +### Upotukset + +[Sana-upotukset](https://wikipedia.org/wiki/Word_embedding) ovat tapa muuttaa tekstidata numeeriseen muotoon. Upotukset tehdään siten, että samankaltaista merkitystä omaavat tai yhdessä käytetyt sanat ryhmittyvät yhteen. + +![sana-upotukset](../../../../6-NLP/2-Tasks/images/embedding.png) +> "Kunnioitan suuresti hermojasi, ne ovat vanhoja ystäviäni." - Sana-upotukset lauseesta **Ylpeys ja ennakkoluulo**. Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +✅ Kokeile [tätä mielenkiintoista työkalua](https://projector.tensorflow.org/) tutkiaksesi sana-upotuksia. Klikkaamalla yhtä sanaa näet samankaltaisten sanojen ryhmiä: 'toy' ryhmittyy sanojen 'disney', 'lego', 'playstation' ja 'console' kanssa. + +### Jäsennys ja sanaluokkien tunnistus + +Jokainen tokenisoitu sana voidaan merkitä sanaluokaksi, kuten substantiiviksi, verbiksi tai adjektiiviksi. Lause `the quick red fox jumped over the lazy brown dog` voidaan merkitä sanaluokittain esimerkiksi fox = substantiivi, jumped = verbi. + +![jäsennys](../../../../6-NLP/2-Tasks/images/parse.png) + +> Lauseen jäsennys **Ylpeys ja ennakkoluulo**. Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +Jäsennys tarkoittaa sanojen välisten suhteiden tunnistamista lauseessa – esimerkiksi `the quick red fox jumped` on adjektiivi-substantiivi-verbi-sekvenssi, joka on erillinen `lazy brown dog` -sekvenssistä. + +### Sanojen ja fraasien esiintymistiheys + +Kun analysoidaan suurta tekstimassaa, on hyödyllistä rakentaa sanakirja, joka sisältää kaikki kiinnostavat sanat tai fraasit ja niiden esiintymistiheyden. Lauseessa `the quick red fox jumped over the lazy brown dog` sanan the esiintymistiheys on 2. + +Tarkastellaan esimerkkitekstiä, jossa lasketaan sanojen esiintymistiheys. Rudyard Kiplingin runo The Winners sisältää seuraavan säkeen: + +```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. +``` + +Koska fraasien esiintymistiheys voi olla kirjainkoolle herkkä tai herkkä, fraasin `a friend` esiintymistiheys on 2, `the` esiintymistiheys on 6 ja `travels` esiintymistiheys on 2. + +### N-grammit + +Teksti voidaan jakaa tietyn pituisiksi sanasekvensseiksi: yksi sana (unigrammi), kaksi sanaa (bigrammi), kolme sanaa (trigrammi) tai mikä tahansa määrä sanoja (n-grammi). + +Esimerkiksi lause `the quick red fox jumped over the lazy brown dog` n-grammiarvolla 2 tuottaa seuraavat n-grammit: + +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 + +Tätä voi olla helpompi visualisoida liukuvana laatikkona lauseen päällä. Tässä esimerkki 3 sanan n-grammeista, n-grammi on lihavoitu jokaisessa lauseessa: + +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-grammit liukuva ikkuna](../../../../6-NLP/2-Tasks/images/n-grams.gif) + +> N-grammiarvo 3: Infografiikka: [Jen Looper](https://twitter.com/jenlooper) + +### Substantiivifraasien tunnistus + +Useimmissa lauseissa on substantiivi, joka toimii subjektina tai objektina. Englannissa sen voi usein tunnistaa sanoista 'a', 'an' tai 'the', jotka edeltävät sitä. Subjektin tai objektin tunnistaminen lauseesta 'substantiivifraasin tunnistamisella' on yleinen tehtävä NLP:ssä, kun pyritään ymmärtämään lauseen merkitystä. + +✅ Lauseessa "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." voitko tunnistaa substantiivifraasit? + +Lauseessa `the quick red fox jumped over the lazy brown dog` on 2 substantiivifraasia: **quick red fox** ja **lazy brown dog**. + +### Tunteiden analysointi + +Lause tai teksti voidaan analysoida sen tunnesävyn perusteella, eli kuinka *positiivinen* tai *negatiivinen* se on. Tunnesävyä mitataan *polariteetilla* ja *objektiivisuudella/subjektiivisuudella*. Polariteetti mitataan välillä -1.0–1.0 (negatiivisesta positiiviseen) ja 0.0–1.0 (objektiivisimmasta subjektiivisimpaan). + +✅ Myöhemmin opit, että tunnesävyn määrittämiseen on erilaisia tapoja koneoppimisen avulla, mutta yksi tapa on käyttää listaa sanoista ja fraaseista, jotka ihmisen asiantuntija on luokitellut positiivisiksi tai negatiivisiksi, ja soveltaa tätä mallia tekstiin polariteettipisteen laskemiseksi. Näetkö, miten tämä toimisi joissakin tilanteissa ja vähemmän hyvin toisissa? + +### Taivutus + +Taivutus mahdollistaa sanan muuttamisen yksikkö- tai monikkomuotoon. + +### Lemmatisaatio + +*Lemma* on sanan perusmuoto tai kantasana, esimerkiksi *flew*, *flies*, *flying* ovat verbin *fly* lemma. + +NLP-tutkijalle on myös saatavilla hyödyllisiä tietokantoja, kuten: + +### WordNet + +[WordNet](https://wordnet.princeton.edu/) on tietokanta, joka sisältää sanoja, synonyymejä, antonyymejä ja monia muita yksityiskohtia eri kielten sanoista. Se on erittäin hyödyllinen, kun pyritään rakentamaan käännöksiä, oikeinkirjoituksen tarkistimia tai minkä tahansa tyyppisiä kielityökaluja. + +## NLP-kirjastot + +Onneksi sinun ei tarvitse rakentaa kaikkia näitä tekniikoita itse, sillä saatavilla on erinomaisia Python-kirjastoja, jotka tekevät NLP:stä paljon helpommin lähestyttävää kehittäjille, jotka eivät ole erikoistuneet luonnollisen kielen käsittelyyn tai koneoppimiseen. Seuraavissa oppitunneissa on lisää esimerkkejä näistä, mutta tässä opit joitakin hyödyllisiä esimerkkejä seuraavaa tehtävää varten. + +### Harjoitus - `TextBlob`-kirjaston käyttö + +Käytetään kirjastoa nimeltä TextBlob, sillä se sisältää hyödyllisiä API-rajapintoja näiden tehtävien käsittelyyn. TextBlob "perustuu [NLTK](https://nltk.org)- ja [pattern](https://github.com/clips/pattern)-kirjastojen vahvuuksiin ja toimii hyvin molempien kanssa." Sen API sisältää huomattavan määrän koneoppimista. + +> Huom: Hyödyllinen [Quick Start](https://textblob.readthedocs.io/en/dev/quickstart.html#quickstart) -opas on saatavilla TextBlobille, ja sitä suositellaan kokeneille Python-kehittäjille. + +Kun yritetään tunnistaa *substantiivifraaseja*, TextBlob tarjoaa useita vaihtoehtoja fraasien tunnistamiseen. + +1. Tutustu `ConllExtractor`-luokkaan. + + ```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 + ``` + + > Mitä tässä tapahtuu? [ConllExtractor](https://textblob.readthedocs.io/en/dev/api_reference.html?highlight=Conll#textblob.en.np_extractors.ConllExtractor) on "substantiivifraasien tunnistaja, joka käyttää chunk-jäsennystä, joka on koulutettu ConLL-2000-koulutusdatalla." ConLL-2000 viittaa vuoden 2000 Computational Natural Language Learning -konferenssiin. Jokaisena vuonna konferenssi järjesti työpajan, jossa käsiteltiin haastavaa NLP-ongelmaa, ja vuonna 2000 se oli substantiivifraasien tunnistus. Malli koulutettiin Wall Street Journalin datalla, jossa "osat 15-18 toimivat koulutusdatana (211727 tokenia) ja osa 20 testidatana (47377 tokenia)". Voit tutustua käytettyihin menetelmiin [täällä](https://www.clips.uantwerpen.be/conll2000/chunking/) ja [tuloksiin](https://ifarm.nl/erikt/research/np-chunking.html). + +### Haaste - paranna bottiasi NLP:n avulla + +Edellisessä oppitunnissa rakensit hyvin yksinkertaisen kysymys-vastausbotin. Nyt teet Marvinista hieman empaattisemman analysoimalla syötteesi tunnesävyn ja tulostamalla vastauksen, joka vastaa tunnesävyä. Sinun täytyy myös tunnistaa `substantiivifraasi` ja kysyä siitä lisää. + +Askeleet paremman keskustelubotin rakentamiseksi: + +1. Tulosta ohjeet, jotka neuvovat käyttäjää, miten botin kanssa voi keskustella +2. Aloita silmukka + 1. Hyväksy käyttäjän syöte + 2. Jos käyttäjä haluaa lopettaa, lopeta + 3. Käsittele käyttäjän syöte ja määritä sopiva tunnesävyn vastaus + 4. Jos tunnesävyssä havaitaan substantiivifraasi, monikkomuotoile se ja kysy lisää aiheesta + 5. Tulosta vastaus +3. Palaa kohtaan 2 + +Tässä on koodinpätkä tunnesävyn määrittämiseksi TextBlobin avulla. Huomaa, että tunnesävyn vastauksia on vain neljä *sävyä* (voit lisätä enemmän, jos haluat): + +```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. " +``` + +Tässä on esimerkkitulostus ohjeeksi (käyttäjän syöte alkaa rivillä, jossa on >): + +```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! +``` + +Yksi mahdollinen ratkaisu tehtävään löytyy [täältä](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/2-Tasks/solution/bot.py) + +✅ Tietotesti + +1. Uskotko, että empaattiset vastaukset voisivat 'huijata' jonkun ajattelemaan, että botti todella ymmärtää heitä? +2. Tekevätkö substantiivifraasin tunnistaminen botista 'uskottavamman'? +3. Miksi substantiivifraasin tunnistaminen lauseesta olisi hyödyllistä? + +--- + +Toteuta botti edellisessä tietotestissä ja testaa sitä ystävälläsi. Voiko se huijata heitä? Voitko tehdä botista 'uskottavamman'? + +## 🚀Haaste + +Valitse tehtävä edellisestä tietotestistä ja yritä toteuttaa se. Testaa bottia ystävälläsi. Voiko se huijata heitä? Voitko tehdä botista 'uskottavamman'? + +## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Seuraavissa oppitunneissa opit lisää tunnesävyn analysoinnista. Tutki tätä mielenkiintoista tekniikkaa esimerkiksi [KDNuggets](https://www.kdnuggets.com/tag/nlp)-artikkeleista. + +## Tehtävä + +[Saata botti keskustelemaan](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/2-Tasks/assignment.md b/translations/fi/6-NLP/2-Tasks/assignment.md new file mode 100644 index 000000000..2e7d1eaab --- /dev/null +++ b/translations/fi/6-NLP/2-Tasks/assignment.md @@ -0,0 +1,25 @@ + +# Tee botista vastaava + +## Ohjeet + +Aiemmissa oppitunneissa ohjelmoit perusbotin, jonka kanssa voi jutella. Tämä botti antaa satunnaisia vastauksia, kunnes sanot 'bye'. Voitko tehdä vastauksista hieman vähemmän satunnaisia ja laukaista vastauksia, jos sanot tiettyjä asioita, kuten 'miksi' tai 'miten'? Mieti, miten koneoppiminen voisi tehdä tämän tyyppisestä työstä vähemmän manuaalista, kun laajennat bottiasi. Voit käyttää NLTK- tai TextBlob-kirjastoja helpottaaksesi tehtäviäsi. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | -------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Uusi bot.py-tiedosto on esitetty ja dokumentoitu | Uusi bot-tiedosto on esitetty, mutta siinä on virheitä | Tiedostoa ei ole esitetty | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/3-Translation-Sentiment/README.md b/translations/fi/6-NLP/3-Translation-Sentiment/README.md new file mode 100644 index 000000000..a35e1e5c2 --- /dev/null +++ b/translations/fi/6-NLP/3-Translation-Sentiment/README.md @@ -0,0 +1,200 @@ + +# Käännös ja sentimenttianalyysi koneoppimisen avulla + +Aiemmissa oppitunneissa opit rakentamaan yksinkertaisen botin käyttämällä `TextBlob`-kirjastoa, joka hyödyntää koneoppimista taustalla suorittaakseen perusluonteisia luonnollisen kielen käsittelytehtäviä, kuten substantiivilauseiden tunnistamista. Toinen tärkeä haaste laskennallisessa kielitieteessä on lauseen tarkka _kääntäminen_ yhdestä puhutuista tai kirjoitetuista kielistä toiseen. + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +Kääntäminen on erittäin vaikea ongelma, jota monimutkaistaa tuhansien kielten olemassaolo ja niiden hyvin erilaiset kielioppisäännöt. Yksi lähestymistapa on muuntaa yhden kielen, kuten englannin, muodolliset kielioppisäännöt kieleen riippumattomaan rakenteeseen ja sitten kääntää se muuntamalla takaisin toiseen kieleen. Tämä lähestymistapa tarkoittaa seuraavia vaiheita: + +1. **Tunnistaminen**. Tunnista tai merkitse syöttökielen sanat substantiiveiksi, verbeiksi jne. +2. **Käännöksen luominen**. Tuota suora käännös jokaisesta sanasta kohdekielen muodossa. + +### Esimerkkilause, englannista iiriin + +Englanniksi lause _I feel happy_ koostuu kolmesta sanasta seuraavassa järjestyksessä: + +- **subjekti** (I) +- **verbi** (feel) +- **adjektiivi** (happy) + +Kuitenkin iirin kielessä sama lause noudattaa hyvin erilaista kielioppirakennetta – tunteet kuten "*happy*" tai "*sad*" ilmaistaan olevan *jonkun päällä*. + +Englanninkielinen lause `I feel happy` olisi iiriksi `Tá athas orm`. *Kirjaimellinen* käännös olisi `Happy is upon me`. + +Iiriä puhuva henkilö, joka kääntää englanniksi, sanoisi `I feel happy`, ei `Happy is upon me`, koska hän ymmärtää lauseen merkityksen, vaikka sanat ja lauserakenne olisivat erilaisia. + +Iirin kielen muodollinen järjestys lauseelle on: + +- **verbi** (Tá eli is) +- **adjektiivi** (athas eli happy) +- **subjekti** (orm eli upon me) + +## Kääntäminen + +Naivi käännösohjelma saattaisi kääntää vain sanat, jättäen huomiotta lauserakenteen. + +✅ Jos olet oppinut toisen (tai kolmannen tai useamman) kielen aikuisena, olet saattanut aloittaa ajattelemalla omalla äidinkielelläsi, kääntämällä käsitteen sana sanalta päässäsi toiselle kielelle ja sitten puhumalla käännöksesi. Tämä on samanlaista kuin mitä naivit käännösohjelmat tekevät. On tärkeää päästä tämän vaiheen yli, jotta saavutetaan sujuvuus! + +Naivi kääntäminen johtaa huonoihin (ja joskus huvittaviin) virhekäännöksiin: `I feel happy` kääntyy kirjaimellisesti `Mise bhraitheann athas` iiriksi. Tämä tarkoittaa (kirjaimellisesti) `me feel happy` eikä ole kelvollinen iirinkielinen lause. Vaikka englanti ja iiri ovat kieliä, joita puhutaan kahdella lähekkäin sijaitsevalla saarella, ne ovat hyvin erilaisia kieliä, joilla on erilaiset kielioppirakenteet. + +> Voit katsoa joitakin videoita iirin kielellisistä perinteistä, kuten [tämän](https://www.youtube.com/watch?v=mRIaLSdRMMs) + +### Koneoppimisen lähestymistavat + +Tähän mennessä olet oppinut muodollisten sääntöjen lähestymistavasta luonnollisen kielen käsittelyyn. Toinen lähestymistapa on jättää sanojen merkitys huomiotta ja _sen sijaan käyttää koneoppimista havaitsemaan kaavoja_. Tämä voi toimia kääntämisessä, jos sinulla on paljon tekstiä (*korpus*) tai tekstejä (*korpukset*) sekä alkuperäisellä että kohdekielellä. + +Esimerkiksi, ajatellaan *Ylpeys ja ennakkoluulo* -teosta, tunnettua englantilaista romaania, jonka Jane Austen kirjoitti vuonna 1813. Jos tarkastelet kirjaa englanniksi ja sen ihmisen tekemää käännöstä *ranskaksi*, voisit havaita lauseita, jotka ovat _idiomaattisesti_ käännettyjä toiselle kielelle. Teet tämän kohta. + +Esimerkiksi, kun englanninkielinen lause `I have no money` käännetään kirjaimellisesti ranskaksi, siitä saattaa tulla `Je n'ai pas de monnaie`. "Monnaie" on hankala ranskalainen 'väärä ystävä', sillä 'money' ja 'monnaie' eivät ole synonyymejä. Parempi käännös, jonka ihminen voisi tehdä, olisi `Je n'ai pas d'argent`, koska se välittää paremmin merkityksen, että sinulla ei ole rahaa (eikä 'pikkurahaa', joka on 'monnaie'-sanan merkitys). + +![monnaie](../../../../6-NLP/3-Translation-Sentiment/images/monnaie.png) + +> Kuva: [Jen Looper](https://twitter.com/jenlooper) + +Jos koneoppimismalli saa tarpeeksi ihmisen tekemiä käännöksiä, joiden perusteella rakentaa mallin, se voi parantaa käännösten tarkkuutta tunnistamalla yleisiä kaavoja teksteissä, jotka asiantuntijakielten puhujat ovat aiemmin kääntäneet. + +### Harjoitus - kääntäminen + +Voit käyttää `TextBlob`-kirjastoa lauseiden kääntämiseen. Kokeile kuuluisan ensimmäisen lauseen kääntämistä **Ylpeys ja ennakkoluulo** -teoksesta: + +```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` tekee melko hyvän käännöksen: "C'est une vérité universellement reconnue, qu'un homme célibataire en possession d'une bonne fortune doit avoir besoin d'une femme!". + +Voidaan väittää, että TextBlobin käännös on itse asiassa paljon tarkempi kuin kirjan vuoden 1932 ranskankielinen käännös, jonka tekivät V. Leconte ja 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." + +Tässä tapauksessa koneoppimisen avulla tehty käännös tekee parempaa työtä kuin ihmiskääntäjä, joka tarpeettomasti lisää sanoja alkuperäisen kirjoittajan suuhun selkeyden vuoksi. + +> Mikä tässä tapahtuu? Ja miksi TextBlob on niin hyvä kääntämisessä? No, taustalla se käyttää Google Translatea, kehittynyttä tekoälyä, joka pystyy käsittelemään miljoonia lauseita ennustaakseen parhaita merkkijonoja tehtävään. Tässä ei tapahdu mitään manuaalista, ja tarvitset internetyhteyden käyttääksesi `blob.translate`. + +✅ Kokeile lisää lauseita. Kumpi on parempi, koneoppiminen vai ihmiskäännös? Missä tapauksissa? + +## Sentimenttianalyysi + +Toinen alue, jossa koneoppiminen voi toimia erittäin hyvin, on sentimenttianalyysi. Ei-koneoppimiseen perustuva lähestymistapa sentimenttiin on tunnistaa sanat ja lauseet, jotka ovat 'positiivisia' ja 'negatiivisia'. Sitten, kun annetaan uusi tekstikappale, lasketaan positiivisten, negatiivisten ja neutraalien sanojen kokonaisarvo sentimentin määrittämiseksi. + +Tämä lähestymistapa on helposti huijattavissa, kuten olet saattanut huomata Marvin-tehtävässä – lause `Great, that was a wonderful waste of time, I'm glad we are lost on this dark road` on sarkastinen, negatiivinen sentimenttilause, mutta yksinkertainen algoritmi tunnistaa 'great', 'wonderful', 'glad' positiivisiksi ja 'waste', 'lost' ja 'dark' negatiivisiksi. Kokonaisvaltainen sentimentti kallistuu näiden ristiriitaisten sanojen vuoksi. + +✅ Pysähdy hetkeksi ja mieti, miten me ihmiset välitämme sarkasmia puhuessamme. Äänenpainolla on suuri merkitys. Kokeile sanoa lause "Well, that film was awesome" eri tavoilla ja huomaa, miten äänesi välittää merkityksen. + +### Koneoppimisen lähestymistavat + +Koneoppimisen lähestymistapa olisi kerätä manuaalisesti negatiivisia ja positiivisia tekstikappaleita – twiittejä, elokuva-arvosteluja tai mitä tahansa, missä ihminen on antanut pisteet *ja* kirjallisen mielipiteen. Sitten NLP-tekniikoita voidaan soveltaa mielipiteisiin ja pisteisiin, jotta kaavat tulevat esiin (esim. positiivisissa elokuva-arvosteluissa esiintyy usein lause 'Oscar worthy' enemmän kuin negatiivisissa arvosteluissa, tai positiivisissa ravintola-arvosteluissa sanotaan 'gourmet' paljon useammin kuin 'disgusting'). + +> ⚖️ **Esimerkki**: Jos työskentelisit poliitikon toimistossa ja jokin uusi laki olisi keskustelun alla, äänestäjät saattaisivat kirjoittaa toimistoon sähköposteja, jotka tukevat tai vastustavat kyseistä uutta lakia. Oletetaan, että sinut on määrätty lukemaan sähköpostit ja lajittelemaan ne kahteen pinoon, *puolesta* ja *vastaan*. Jos sähköposteja olisi paljon, voisit tuntea olosi ylivoimaiseksi yrittäessäsi lukea ne kaikki. Eikö olisi mukavaa, jos botti voisi lukea ne kaikki puolestasi, ymmärtää ne ja kertoa, mihin pinoon kukin sähköposti kuuluu? +> +> Yksi tapa saavuttaa tämä on käyttää koneoppimista. Voisit kouluttaa mallin osalla *vastaan* olevista sähköposteista ja osalla *puolesta* olevista sähköposteista. Malli yhdistäisi tietyt lauseet ja sanat todennäköisemmin vastaan- tai puolesta-sähköposteihin, *mutta se ei ymmärtäisi mitään sisällöstä*, vain että tietyt sanat ja kaavat esiintyvät todennäköisemmin vastaan- tai puolesta-sähköposteissa. Voisit testata sitä joillakin sähköposteilla, joita et ollut käyttänyt mallin kouluttamiseen, ja nähdä, päätyisikö se samaan johtopäätökseen kuin sinä. Kun olisit tyytyväinen mallin tarkkuuteen, voisit käsitellä tulevia sähköposteja lukematta jokaista erikseen. + +✅ Kuulostaako tämä prosessi samalta kuin prosessit, joita olet käyttänyt aiemmissa oppitunneissa? + +## Harjoitus - sentimenttiset lauseet + +Sentimentti mitataan *polariteetilla* välillä -1–1, mikä tarkoittaa, että -1 on kaikkein negatiivisin sentimentti ja 1 kaikkein positiivisin. Sentimentti mitataan myös 0–1 asteikolla objektiivisuudelle (0) ja subjektiivisuudelle (1). + +Tarkastellaan uudelleen Jane Austenin *Ylpeys ja ennakkoluulo* -teosta. Teksti on saatavilla täällä: [Project Gutenberg](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm). Alla oleva esimerkki näyttää lyhyen ohjelman, joka analysoi kirjan ensimmäisen ja viimeisen lauseen sentimentin ja näyttää sen polariteetin sekä subjektiivisuus/objektiivisuus-pisteet. + +Sinun tulisi käyttää `TextBlob`-kirjastoa (kuvattu yllä) sentimentin määrittämiseen (sinun ei tarvitse kirjoittaa omaa sentimenttilaskuria) seuraavassa tehtävässä. + +```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)) +``` + +Näet seuraavan tulosteen: + +```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) +``` + +## Haaste - tarkista sentimentin polariteetti + +Tehtäväsi on selvittää sentimentin polariteetin avulla, onko *Ylpeys ja ennakkoluulo* -teoksessa enemmän ehdottoman positiivisia lauseita kuin ehdottoman negatiivisia. Tässä tehtävässä voit olettaa, että polariteettipisteet 1 tai -1 ovat ehdottoman positiivisia tai negatiivisia. + +**Vaiheet:** + +1. Lataa [kopio Ylpeys ja ennakkoluulo -teoksesta](https://www.gutenberg.org/files/1342/1342-h/1342-h.htm) Project Gutenbergista .txt-tiedostona. Poista metatiedot tiedoston alusta ja lopusta, jättäen vain alkuperäisen tekstin +2. Avaa tiedosto Pythonissa ja pura sisältö merkkijonona +3. Luo TextBlob kirjan merkkijonosta +4. Analysoi kirjan jokainen lause silmukassa + 1. Jos polariteetti on 1 tai -1, tallenna lause positiivisten tai negatiivisten viestien taulukkoon tai listaan +5. Lopuksi tulosta kaikki positiiviset ja negatiiviset lauseet (erikseen) ja niiden lukumäärä. + +Tässä on esimerkkiratkaisu: [ratkaisu](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/3-Translation-Sentiment/solution/notebook.ipynb). + +✅ Tietotarkistus + +1. Sentimentti perustuu lauseessa käytettyihin sanoihin, mutta ymmärtääkö koodi *sanat*? +2. Onko mielestäsi sentimentin polariteetti tarkka, eli toisin sanoen, oletko *samaa mieltä* pisteiden kanssa? + 1. Erityisesti, oletko samaa mieltä tai eri mieltä seuraavien lauseiden ehdottoman **positiivisesta** polariteetista? + * “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. Seuraavat 3 lausetta saivat ehdottoman positiivisen sentimentin, mutta tarkemmin luettuna ne eivät ole positiivisia lauseita. Miksi sentimenttianalyysi ajatteli niiden olevan positiivisia lauseita? + * 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. Oletko samaa mieltä tai eri mieltä seuraavien lauseiden ehdottoman **negatiivisesta** polariteetista? + - 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 Austenin teosten tuntija ymmärtää, että hän käyttää usein kirjojaan kritisoidakseen Englannin regency-kauden yhteiskunnan naurettavimpia puolia. Elizabeth Bennett, *Ylpeys ja ennakkoluulo* -teoksen päähenkilö, on tarkka sosiaalinen havainnoija (kuten kirjailija itse), ja hänen kielensä on usein voimakkaasti vivahteikasta. Jopa Mr. Darcy (tarinan rakkauden kohde) huomauttaa Elizabethin leikkisästä ja kiusoittelevasta kielenkäytöstä: "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." + +--- + +## 🚀Haaste + +Voitko tehdä Marvinista vielä paremman ottamalla käyttäjän syötteestä muita ominaisuuksia? + +## [Jälkikysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu +Tekstin sentimentin analysointiin on monia tapoja. Mieti liiketoimintasovelluksia, jotka voisivat hyödyntää tätä tekniikkaa. Pohdi myös, miten se voi mennä pieleen. Lue lisää kehittyneistä yrityskäyttöön tarkoitetuista järjestelmistä, jotka analysoivat sentimenttiä, kuten [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). Testaa joitakin yllä olevia Ylpeys ja ennakkoluulo -lauseita ja katso, pystyykö järjestelmä havaitsemaan vivahteita. + +## Tehtävä + +[Runoilijan vapaus](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/3-Translation-Sentiment/assignment.md b/translations/fi/6-NLP/3-Translation-Sentiment/assignment.md new file mode 100644 index 000000000..e1a87076b --- /dev/null +++ b/translations/fi/6-NLP/3-Translation-Sentiment/assignment.md @@ -0,0 +1,25 @@ + +# Runollinen vapaus + +## Ohjeet + +Tässä [notebookissa](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) on yli 500 Emily Dickinsonin runoa, jotka on aiemmin analysoitu sentimentin osalta Azure-tekstianalytiikan avulla. Käytä tätä datasettiä ja analysoi se oppitunnilla kuvattujen tekniikoiden avulla. Vastaako runon ehdotettu sentimentti kehittyneemmän Azure-palvelun päätöstä? Miksi tai miksi ei, mielestäsi? Yllättääkö jokin sinut? + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Notebook esitetään, ja siinä on perusteellinen analyysi kirjailijan näyteaineistosta | Notebook on keskeneräinen tai ei suorita analyysiä | Notebookia ei ole esitetty | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md b/translations/fi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md new file mode 100644 index 000000000..b80a3bec7 --- /dev/null +++ b/translations/fi/6-NLP/3-Translation-Sentiment/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/3-Translation-Sentiment/solution/R/README.md b/translations/fi/6-NLP/3-Translation-Sentiment/solution/R/README.md new file mode 100644 index 000000000..7ef8db698 --- /dev/null +++ b/translations/fi/6-NLP/3-Translation-Sentiment/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/4-Hotel-Reviews-1/README.md b/translations/fi/6-NLP/4-Hotel-Reviews-1/README.md new file mode 100644 index 000000000..9332aeaa4 --- /dev/null +++ b/translations/fi/6-NLP/4-Hotel-Reviews-1/README.md @@ -0,0 +1,380 @@ + +# Sentimenttianalyysi hotelliarvosteluilla - datan käsittely + +Tässä osiossa käytät aiemmissa oppitunneissa opittuja tekniikoita suuren datasetin tutkimiseen. Kun ymmärrät eri sarakkeiden hyödyllisyyden, opit: + +- kuinka poistaa tarpeettomat sarakkeet +- kuinka laskea uutta dataa olemassa olevien sarakkeiden perusteella +- kuinka tallentaa tuloksena syntynyt datasetti lopullista haastetta varten + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +### Johdanto + +Tähän mennessä olet oppinut, kuinka tekstidata eroaa numeerisesta datasta. Jos teksti on ihmisen kirjoittamaa tai puhumaa, sitä voidaan analysoida löytääkseen kaavoja ja frekvenssejä, tunteita ja merkityksiä. Tämä oppitunti vie sinut todellisen datasetin ja todellisen haasteen pariin: **[515K hotelliarvostelut Euroopassa](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe)**, joka sisältää [CC0: Public Domain -lisenssin](https://creativecommons.org/publicdomain/zero/1.0/). Datasetti on kerätty Booking.comista julkisista lähteistä. Datasetin luoja on Jiashen Liu. + +### Valmistelu + +Tarvitset: + +* Mahdollisuuden ajaa .ipynb-tiedostoja Python 3:lla +* pandas +* NLTK, [joka sinun tulisi asentaa paikallisesti](https://www.nltk.org/install.html) +* Datasetti, joka on saatavilla Kagglesta [515K hotelliarvostelut Euroopassa](https://www.kaggle.com/jiashenliu/515k-hotel-reviews-data-in-europe). Se on noin 230 MB purettuna. Lataa se NLP-oppituntien `/data`-kansioon. + +## Tutkiva data-analyysi + +Tässä haasteessa oletetaan, että rakennat hotellisuositusbotin käyttäen sentimenttianalyysiä ja vieraiden arvostelupisteitä. Datasetti, jota käytät, sisältää arvosteluja 1493 eri hotellista kuudessa kaupungissa. + +Pythonin, hotelliarvosteludatan ja NLTK:n sentimenttianalyysin avulla voit selvittää: + +* Mitkä ovat yleisimmin käytetyt sanat ja fraasit arvosteluissa? +* Korreloivatko hotellia kuvaavat *tagit* arvostelupisteiden kanssa (esim. ovatko negatiivisemmat arvostelut tietylle hotellille *Perhe nuorten lasten kanssa* -tagilla kuin *Yksin matkustava*, mikä voisi viitata siihen, että hotelli sopii paremmin *Yksin matkustaville*?) +* Ovatko NLTK:n sentimenttipisteet "samaa mieltä" hotelliarvostelijan numeerisen pisteen kanssa? + +#### Datasetti + +Tutkitaan datasetti, jonka olet ladannut ja tallentanut paikallisesti. Avaa tiedosto editorissa, kuten VS Code tai jopa Excel. + +Datasetin otsikot ovat seuraavat: + +*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* + +Tässä ne on ryhmitelty helpommin tarkasteltavaksi: +##### Hotellin sarakkeet + +* `Hotel_Name`, `Hotel_Address`, `lat` (leveysaste), `lng` (pituusaste) + * Käyttäen *lat* ja *lng* voit piirtää kartan Pythonilla, joka näyttää hotellien sijainnit (ehkä värikoodattuna negatiivisten ja positiivisten arvostelujen mukaan) + * Hotel_Address ei vaikuta ilmeisen hyödylliseltä, ja todennäköisesti korvaamme sen maalla helpompaa lajittelua ja hakua varten + +**Hotellin meta-arvostelusarakkeet** + +* `Average_Score` + * Datasetin luojan mukaan tämä sarake on *Hotellin keskiarvo, laskettu viimeisen vuoden aikana annettujen kommenttien perusteella*. Tämä vaikuttaa epätavalliselta tavalta laskea pisteet, mutta koska data on kerätty, otamme sen toistaiseksi sellaisenaan. + + ✅ Voitko keksiä toisen tavan laskea keskiarvo datasetin muiden sarakkeiden perusteella? + +* `Total_Number_of_Reviews` + * Hotellin saamien arvostelujen kokonaismäärä - ei ole selvää (ilman koodin kirjoittamista), viittaako tämä datasetin arvosteluihin. +* `Additional_Number_of_Scoring` + * Tämä tarkoittaa, että arvostelupiste annettiin, mutta arvostelija ei kirjoittanut positiivista tai negatiivista arvostelua + +**Arvostelusarakkeet** + +- `Reviewer_Score` + - Tämä on numeerinen arvo, jossa on korkeintaan yksi desimaali, välillä 2.5 ja 10 + - Ei ole selitetty, miksi alin mahdollinen piste on 2.5 +- `Negative_Review` + - Jos arvostelija ei kirjoittanut mitään, tämä kenttä sisältää "**No Negative**" + - Huomaa, että arvostelija voi kirjoittaa positiivisen arvostelun negatiiviseen arvostelukenttään (esim. "ei ole mitään huonoa tässä hotellissa") +- `Review_Total_Negative_Word_Counts` + - Korkeampi negatiivisten sanojen määrä viittaa matalampaan pisteeseen (ilman sentimenttianalyysiä) +- `Positive_Review` + - Jos arvostelija ei kirjoittanut mitään, tämä kenttä sisältää "**No Positive**" + - Huomaa, että arvostelija voi kirjoittaa negatiivisen arvostelun positiiviseen arvostelukenttään (esim. "tässä hotellissa ei ole mitään hyvää") +- `Review_Total_Positive_Word_Counts` + - Korkeampi positiivisten sanojen määrä viittaa korkeampaan pisteeseen (ilman sentimenttianalyysiä) +- `Review_Date` ja `days_since_review` + - Tuoreuden tai vanhentuneisuuden mittari voidaan soveltaa arvosteluun (vanhemmat arvostelut eivät välttämättä ole yhtä tarkkoja kuin uudemmat, koska hotellin johto on voinut muuttua, remontteja on voitu tehdä, tai uima-allas on lisätty jne.) +- `Tags` + - Nämä ovat lyhyitä kuvauksia, joita arvostelija voi valita kuvaamaan vierailunsa tyyppiä (esim. yksin tai perhe), huoneen tyyppiä, oleskelun pituutta ja tapaa, jolla arvostelu lähetettiin. + - Valitettavasti näiden tagien käyttö on ongelmallista, katso alla oleva osio, joka käsittelee niiden hyödyllisyyttä + +**Arvostelijan sarakkeet** + +- `Total_Number_of_Reviews_Reviewer_Has_Given` + - Tämä saattaa olla tekijä suositusmallissa, esimerkiksi jos voisit määrittää, että tuotteliaammat arvostelijat, joilla on satoja arvosteluja, ovat todennäköisemmin negatiivisia kuin positiivisia. Kuitenkin minkään tietyn arvostelun arvostelijaa ei ole tunnistettu yksilöllisellä koodilla, eikä häntä siksi voida yhdistää arvostelujen joukkoon. Datasetissä on 30 arvostelijaa, joilla on 100 tai enemmän arvosteluja, mutta on vaikea nähdä, kuinka tämä voisi auttaa suositusmallia. +- `Reviewer_Nationality` + - Jotkut saattavat ajatella, että tietyt kansallisuudet ovat todennäköisemmin antamassa positiivisia tai negatiivisia arvosteluja kansallisen taipumuksen vuoksi. Ole varovainen rakentaessasi tällaisia anekdoottisia näkemyksiä malleihisi. Nämä ovat kansallisia (ja joskus rodullisia) stereotypioita, ja jokainen arvostelija oli yksilö, joka kirjoitti arvostelun kokemuksensa perusteella. Se saattoi olla suodatettu monien linssien läpi, kuten heidän aiemmat hotellivierailunsa, matkustettu etäisyys ja heidän henkilökohtainen temperamenttinsa. Ajatus siitä, että heidän kansallisuutensa oli syy arvostelupisteeseen, on vaikea perustella. + +##### Esimerkit + +| Keskiarvo Piste | Arvostelujen Kokonaismäärä | Arvostelijan Piste | Negatiivinen
                                                              Arvostelu | Positiivinen Arvostelu | Tagit | +| ----------------- | -------------------------- | -------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- +> 🚨 Huomio varovaisuudesta +> +> Työskennellessäsi tämän datasetin parissa kirjoitat koodia, joka laskee jotain tekstistä ilman, että sinun tarvitsee itse lukea tai analysoida tekstiä. Tämä on NLP:n ydin: tulkita merkitystä tai tunnetta ilman, että ihminen tekee sen. On kuitenkin mahdollista, että luet joitakin negatiivisia arvosteluja. Kehottaisin sinua välttämään sitä, koska se ei ole tarpeen. Jotkut niistä ovat typeriä tai epäolennaisia negatiivisia hotelliarvosteluja, kuten "Sää ei ollut hyvä", asia, joka on hotellin tai kenenkään muun hallinnan ulkopuolella. Mutta joissakin arvosteluissa on myös synkempi puoli. Joskus negatiiviset arvostelut ovat rasistisia, seksistisiä tai ikäsyrjiviä. Tämä on valitettavaa, mutta odotettavissa datasetissä, joka on kerätty julkiselta verkkosivustolta. Jotkut arvostelijat jättävät arvosteluja, jotka saattavat olla vastenmielisiä, epämukavia tai järkyttäviä. On parempi antaa koodin mitata tunne kuin lukea ne itse ja järkyttyä. Tästä huolimatta vain vähemmistö kirjoittaa tällaisia asioita, mutta heitä on silti olemassa. +## Harjoitus - Datan tutkiminen +### Lataa data + +Visuaalinen tarkastelu riittää, nyt on aika kirjoittaa koodia ja saada vastauksia! Tässä osiossa käytetään pandas-kirjastoa. Ensimmäinen tehtäväsi on varmistaa, että pystyt lataamaan ja lukemaan CSV-datan. Pandas-kirjastossa on nopea CSV-lataustyökalu, ja tulos sijoitetaan dataframeen, kuten aiemmissa oppitunneissa. Lataamassamme CSV-tiedostossa on yli puoli miljoonaa riviä, mutta vain 17 saraketta. Pandas tarjoaa monia tehokkaita tapoja käsitellä dataframea, mukaan lukien mahdollisuuden suorittaa operaatioita jokaiselle riville. + +Tästä eteenpäin tässä oppitunnissa on koodiesimerkkejä, selityksiä koodista ja keskustelua tulosten merkityksestä. Käytä mukana olevaa _notebook.ipynb_-tiedostoa koodiasi varten. + +Aloitetaan lataamalla datatiedosto, jota käytät: + +```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") +``` + +Kun data on ladattu, voimme suorittaa siihen operaatioita. Pidä tämä koodi ohjelmasi yläosassa seuraavaa osaa varten. + +## Tutki dataa + +Tässä tapauksessa data on jo *puhdasta*, mikä tarkoittaa, että se on valmis käsiteltäväksi eikä sisällä muiden kielten merkkejä, jotka saattaisivat häiritä algoritmeja, jotka odottavat vain englanninkielisiä merkkejä. + +✅ Saatat joutua työskentelemään datan kanssa, joka vaatii alkuvaiheen käsittelyä ennen NLP-tekniikoiden soveltamista, mutta tällä kertaa ei tarvitse. Jos joutuisit, miten käsittelisit ei-englanninkielisiä merkkejä? + +Varmista, että kun data on ladattu, voit tutkia sitä koodilla. On helppoa keskittyä `Negative_Review`- ja `Positive_Review`-sarakkeisiin. Ne sisältävät luonnollista tekstiä NLP-algoritmejasi varten. Mutta odota! Ennen kuin siirryt NLP:hen ja sentimenttianalyysiin, seuraa alla olevaa koodia varmistaaksesi, että datasetissä annetut arvot vastaavat pandasilla laskettuja arvoja. + +## Dataframen operaatioita + +Ensimmäinen tehtävä tässä oppitunnissa on tarkistaa, ovatko seuraavat väittämät oikein kirjoittamalla koodia, joka tutkii dataframea (ilman sen muuttamista). + +> Kuten monissa ohjelmointitehtävissä, on useita tapoja suorittaa tämä, mutta hyvä neuvo on tehdä se yksinkertaisimmalla ja helpoimmalla tavalla, erityisesti jos se on helpompi ymmärtää, kun palaat tähän koodiin tulevaisuudessa. Dataframeissa on kattava API, joka usein tarjoaa tehokkaan tavan tehdä haluamasi. + +Käsittele seuraavia kysymyksiä kooditehtävinä ja yritä vastata niihin katsomatta ratkaisua. + +1. Tulosta juuri lataamasi dataframen *shape* (muoto eli rivien ja sarakkeiden määrä). +2. Laske arvot `Reviewer_Nationality`-sarakkeelle: + 1. Kuinka monta erillistä arvoa `Reviewer_Nationality`-sarakkeessa on ja mitkä ne ovat? + 2. Mikä arvostelijan kansallisuus on datasetissä yleisin (tulosta maa ja arvostelujen määrä)? + 3. Mitkä ovat seuraavat 10 yleisintä kansallisuutta ja niiden lukumäärät? +3. Mikä hotelli sai eniten arvosteluja kunkin 10 yleisimmän arvostelijan kansallisuuden osalta? +4. Kuinka monta arvostelua datasetissä on per hotelli (hotellin arvostelujen lukumäärä)? +5. Vaikka datasetissä on `Average_Score`-sarake jokaiselle hotellille, voit myös laskea keskiarvon (laskemalla kaikkien arvostelijoiden pisteiden keskiarvon datasetissä jokaiselle hotellille). Lisää dataframeen uusi sarake otsikolla `Calc_Average_Score`, joka sisältää lasketun keskiarvon. +6. Onko hotelleja, joilla on sama (pyöristetty yhteen desimaaliin) `Average_Score` ja `Calc_Average_Score`? + 1. Kokeile kirjoittaa Python-funktio, joka ottaa argumenttina Seriesin (rivin) ja vertaa arvoja, tulostaen viestin, kun arvot eivät ole yhtäläiset. Käytä sitten `.apply()`-metodia käsitelläksesi jokaisen rivin funktiolla. +7. Laske ja tulosta, kuinka monella rivillä `Negative_Review`-sarake sisältää arvon "No Negative". +8. Laske ja tulosta, kuinka monella rivillä `Positive_Review`-sarake sisältää arvon "No Positive". +9. Laske ja tulosta, kuinka monella rivillä `Positive_Review`-sarake sisältää arvon "No Positive" **ja** `Negative_Review`-sarake arvon "No Negative". + +### Koodivastaukset + +1. Tulosta juuri lataamasi dataframen *shape* (muoto eli rivien ja sarakkeiden määrä). + + ```python + print("The shape of the data (rows, cols) is " + str(df.shape)) + > The shape of the data (rows, cols) is (515738, 17) + ``` + +2. Laske arvot `Reviewer_Nationality`-sarakkeelle: + + 1. Kuinka monta erillistä arvoa `Reviewer_Nationality`-sarakkeessa on ja mitkä ne ovat? + 2. Mikä arvostelijan kansallisuus on datasetissä yleisin (tulosta maa ja arvostelujen määrä)? + + ```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. Mitkä ovat seuraavat 10 yleisintä kansallisuutta ja niiden lukumäärät? + + ```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. Mikä hotelli sai eniten arvosteluja kunkin 10 yleisimmän arvostelijan kansallisuuden osalta? + + ```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. Kuinka monta arvostelua datasetissä on per hotelli (hotellin arvostelujen lukumäärä)? + + ```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 | + + Saatat huomata, että datasetistä laskettu tulos ei vastaa `Total_Number_of_Reviews`-arvoa. On epäselvää, edustiko datasetin arvo hotellin kokonaisarvostelujen määrää, mutta kaikkia ei ehkä ole kerätty, tai kyseessä on jokin muu laskelma. `Total_Number_of_Reviews`-arvoa ei käytetä mallissa tämän epäselvyyden vuoksi. + +5. Vaikka datasetissä on `Average_Score`-sarake jokaiselle hotellille, voit myös laskea keskiarvon (laskemalla kaikkien arvostelijoiden pisteiden keskiarvon datasetissä jokaiselle hotellille). Lisää dataframeen uusi sarake otsikolla `Calc_Average_Score`, joka sisältää lasketun keskiarvon. Tulosta sarakkeet `Hotel_Name`, `Average_Score` ja `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"]]) + ``` + + Saatat myös ihmetellä `Average_Score`-arvoa ja miksi se joskus eroaa lasketusta keskiarvosta. Koska emme voi tietää, miksi jotkut arvot täsmäävät, mutta toiset eroavat, on turvallisinta tässä tapauksessa käyttää arvostelupisteitä, jotka meillä on, ja laskea keskiarvo itse. Ero on yleensä hyvin pieni, tässä ovat hotellit, joilla on suurin poikkeama datasetin keskiarvon ja lasketun keskiarvon välillä: + + | 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 | + + Koska vain yhdellä hotellilla on ero, joka on suurempi kuin 1, voimme todennäköisesti jättää eron huomiotta ja käyttää laskettua keskiarvoa. + +6. Laske ja tulosta, kuinka monella rivillä `Negative_Review`-sarake sisältää arvon "No Negative". + +7. Laske ja tulosta, kuinka monella rivillä `Positive_Review`-sarake sisältää arvon "No Positive". + +8. Laske ja tulosta, kuinka monella rivillä `Positive_Review`-sarake sisältää arvon "No Positive" **ja** `Negative_Review`-sarake arvon "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 + ``` + +## Toinen tapa + +Toinen tapa laskea rivejä ilman Lambdaa ja käyttää summaa rivien laskemiseen: + + ```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 + ``` + + Saatat huomata, että 127 rivillä on sekä "No Negative" että "No Positive" arvot sarakkeissa `Negative_Review` ja `Positive_Review`. Tämä tarkoittaa, että arvostelija antoi hotellille numeerisen pisteen, mutta jätti kirjoittamatta sekä positiivisen että negatiivisen arvostelun. Onneksi tämä on pieni määrä rivejä (127/515738, eli 0,02 %), joten se ei todennäköisesti vääristä malliamme tai tuloksia mihinkään suuntaan. Saatat kuitenkin yllättyä, että arvosteludatasetissä on rivejä ilman arvosteluja, joten datan tutkiminen on tärkeää tällaisten rivien löytämiseksi. + +Nyt kun olet tutkinut datasetin, seuraavassa oppitunnissa suodatat dataa ja lisäät sentimenttianalyysin. + +--- +## 🚀Haaste + +Tämä oppitunti osoittaa, kuten aiemmissa oppitunneissa nähtiin, kuinka tärkeää on ymmärtää data ja sen erityispiirteet ennen operaatioiden suorittamista. Tekstipohjainen data vaatii erityistä tarkastelua. Tutki erilaisia tekstipainotteisia datasettejä ja katso, voitko löytää alueita, jotka voisivat tuoda malliin vinoumaa tai vääristynyttä sentimenttiä. + +## [Oppitunnin jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Ota [tämä NLP-oppimispolku](https://docs.microsoft.com/learn/paths/explore-natural-language-processing/?WT.mc_id=academic-77952-leestott) ja tutustu työkaluihin, joita voit kokeilla puhe- ja tekstipainotteisten mallien rakentamisessa. + +## Tehtävä + +[NLTK](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/4-Hotel-Reviews-1/assignment.md b/translations/fi/6-NLP/4-Hotel-Reviews-1/assignment.md new file mode 100644 index 000000000..c2c3c53f7 --- /dev/null +++ b/translations/fi/6-NLP/4-Hotel-Reviews-1/assignment.md @@ -0,0 +1,19 @@ + +# NLTK + +## Ohjeet + +NLTK on tunnettu kirjasto laskennallisen kielitieteen ja NLP:n käyttöön. Käytä tämä tilaisuus hyväksesi lukemalla '[NLTK-kirja](https://www.nltk.org/book/)' ja kokeilemalla sen harjoituksia. Tässä ei-arvosteltavassa tehtävässä tutustut tähän kirjastoon syvällisemmin. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md b/translations/fi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md new file mode 100644 index 000000000..5bfc0026c --- /dev/null +++ b/translations/fi/6-NLP/4-Hotel-Reviews-1/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md b/translations/fi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md new file mode 100644 index 000000000..8d2de9650 --- /dev/null +++ b/translations/fi/6-NLP/4-Hotel-Reviews-1/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/5-Hotel-Reviews-2/README.md b/translations/fi/6-NLP/5-Hotel-Reviews-2/README.md new file mode 100644 index 000000000..f6f85563e --- /dev/null +++ b/translations/fi/6-NLP/5-Hotel-Reviews-2/README.md @@ -0,0 +1,389 @@ + +# Mielipiteiden analysointi hotelliarvosteluista + +Nyt kun olet tutkinut datasettiä yksityiskohtaisesti, on aika suodattaa sarakkeita ja käyttää NLP-tekniikoita datasetissä saadaksesi uusia näkemyksiä hotelleista. + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +### Suodatus- ja mielipiteiden analysointitoiminnot + +Kuten olet ehkä huomannut, datasetissä on joitakin ongelmia. Jotkut sarakkeet sisältävät turhaa tietoa, toiset vaikuttavat virheellisiltä. Vaikka ne olisivat oikein, on epäselvää, miten ne on laskettu, eikä vastauksia voi itsenäisesti varmistaa omilla laskelmilla. + +## Harjoitus: hieman lisää datan käsittelyä + +Puhdista dataa hieman lisää. Lisää sarakkeita, jotka ovat hyödyllisiä myöhemmin, muuta arvoja muissa sarakkeissa ja poista joitakin sarakkeita kokonaan. + +1. Alkuperäinen sarakkeiden käsittely + + 1. Poista `lat` ja `lng` + + 2. Korvaa `Hotel_Address`-arvot seuraavilla arvoilla (jos osoite sisältää kaupungin ja maan nimen, muuta se pelkästään kaupungiksi ja maaksi). + + Nämä ovat datasetin ainoat kaupungit ja maat: + + Amsterdam, Alankomaat + + Barcelona, Espanja + + Lontoo, Yhdistynyt kuningaskunta + + Milano, Italia + + Pariisi, Ranska + + Wien, Itävalta + + ```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()) + ``` + + Nyt voit tehdä kyselyitä maan tasolla: + + ```python + display(df.groupby("Hotel_Address").agg({"Hotel_Name": "nunique"})) + ``` + + | Hotel_Address | Hotel_Name | + | :--------------------- | :--------: | + | Amsterdam, Alankomaat | 105 | + | Barcelona, Espanja | 211 | + | Lontoo, Yhdistynyt kuningaskunta | 400 | + | Milano, Italia | 162 | + | Pariisi, Ranska | 458 | + | Wien, Itävalta | 158 | + +2. Hotellin meta-arvostelusarakkeiden käsittely + + 1. Poista `Additional_Number_of_Scoring` + + 1. Korvaa `Total_Number_of_Reviews` hotellin todellisella datasetissä olevien arvostelujen määrällä + + 1. Korvaa `Average_Score` omalla lasketulla keskiarvolla + + ```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. Arvostelusarakkeiden käsittely + + 1. Poista `Review_Total_Negative_Word_Counts`, `Review_Total_Positive_Word_Counts`, `Review_Date` ja `days_since_review` + + 2. Säilytä `Reviewer_Score`, `Negative_Review` ja `Positive_Review` sellaisenaan + + 3. Säilytä `Tags` toistaiseksi + + - Teemme lisäsuodatuksia tageille seuraavassa osiossa, ja sen jälkeen tagit poistetaan + +4. Arvostelijan sarakkeiden käsittely + + 1. Poista `Total_Number_of_Reviews_Reviewer_Has_Given` + + 2. Säilytä `Reviewer_Nationality` + +### Tag-sarakkeet + +`Tag`-sarake on ongelmallinen, koska se sisältää listan (tekstimuodossa), joka on tallennettu sarakkeeseen. Valitettavasti tämän sarakkeen osioiden järjestys ja määrä eivät ole aina samat. Ihmisen on vaikea tunnistaa oikeita kiinnostavia fraaseja, koska datasetissä on 515 000 riviä ja 1427 hotellia, ja jokaisella on hieman erilaisia vaihtoehtoja, joita arvostelija voi valita. Tässä NLP on hyödyllinen. Voit skannata tekstiä ja löytää yleisimmät fraasit sekä laskea niiden esiintymät. + +Valitettavasti emme ole kiinnostuneita yksittäisistä sanoista, vaan monisanaisista fraaseista (esim. *Liikematka*). Monisanaisen frekvenssijakauma-algoritmin suorittaminen näin suurelle datalle (6762646 sanaa) voisi viedä huomattavan paljon aikaa, mutta ilman datan tarkastelua vaikuttaa siltä, että se on välttämätön kustannus. Tässä tutkimuksellinen datan analyysi on hyödyllinen, koska olet nähnyt otoksen tageista, kuten `[' Liikematka ', ' Yksin matkustava ', ' Yhden hengen huone ', ' Viipyi 5 yötä ', ' Lähetetty mobiililaitteesta ']`, voit alkaa kysyä, onko mahdollista vähentää merkittävästi käsittelyä, jota sinun täytyy tehdä. Onneksi se on mahdollista - mutta ensin sinun täytyy seurata muutamia vaiheita kiinnostavien tagien selvittämiseksi. + +### Tagien suodatus + +Muista, että datasetin tavoitteena on lisätä mielipiteitä ja sarakkeita, jotka auttavat sinua valitsemaan parhaan hotellin (itsellesi tai ehkä asiakkaalle, joka pyytää sinua tekemään hotellisuositusbotin). Sinun täytyy kysyä itseltäsi, ovatko tagit hyödyllisiä lopullisessa datasetissä. Tässä yksi tulkinta (jos tarvitsisit datasettiä muihin tarkoituksiin, eri tagit saattaisivat jäädä mukaan/pois valinnasta): + +1. Matkan tyyppi on olennainen, ja sen pitäisi jäädä +2. Vierasryhmän tyyppi on tärkeä, ja sen pitäisi jäädä +3. Huoneen, sviitin tai studion tyyppi, jossa vieras yöpyi, on merkityksetön (kaikilla hotelleilla on käytännössä samat huoneet) +4. Laite, jolla arvostelu lähetettiin, on merkityksetön +5. Yöpyneiden öiden määrä *voisi* olla merkityksellinen, jos pidempiä oleskeluja yhdistettäisiin hotellin pitämiseen enemmän, mutta se on kaukaa haettua ja todennäköisesti merkityksetön + +Yhteenvetona, **säilytä 2 tagityyppiä ja poista muut**. + +Ensiksi, et halua laskea tageja ennen kuin ne ovat paremmassa muodossa, joten se tarkoittaa hakasulkeiden ja lainausmerkkien poistamista. Voit tehdä tämän useilla tavoilla, mutta haluat nopeimman, koska suuren datan käsittely voi kestää kauan. Onneksi pandas tarjoaa helpon tavan tehdä jokainen näistä vaiheista. + +```Python +# Remove opening and closing brackets +df.Tags = df.Tags.str.strip("[']") +# remove all quotes too +df.Tags = df.Tags.str.replace(" ', '", ",", regex = False) +``` + +Jokainen tagi muuttuu muotoon: `Liikematka, Yksin matkustava, Yhden hengen huone, Viipyi 5 yötä, Lähetetty mobiililaitteesta`. + +Seuraavaksi kohtaamme ongelman. Joissakin arvosteluissa tai riveissä on 5 saraketta, joissakin 3, joissakin 6. Tämä johtuu siitä, miten datasetti on luotu, ja sitä on vaikea korjata. Haluat saada frekvenssilaskennan jokaisesta fraasista, mutta ne ovat eri järjestyksessä jokaisessa arvostelussa, joten laskenta voi olla väärä, eikä hotelli saa sille kuuluvaa tagia. + +Sen sijaan käytät eri järjestystä hyödyksi, koska jokainen tagi on monisanainen mutta myös erotettu pilkulla! Yksinkertaisin tapa tehdä tämä on luoda 6 väliaikaista saraketta, joihin jokainen tagi lisätään sarakkeeseen, joka vastaa sen järjestystä tagissa. Voit sitten yhdistää 6 saraketta yhdeksi suureksi sarakkeeksi ja suorittaa `value_counts()`-menetelmän tuloksena olevassa sarakkeessa. Tulostamalla sen näet, että oli 2428 uniikkia tagia. Tässä pieni otos: + +| Tag | Count | +| ------------------------------ | ------ | +| Lomamatka | 417778 | +| Lähetetty mobiililaitteesta | 307640 | +| Pariskunta | 252294 | +| Viipyi 1 yön | 193645 | +| Viipyi 2 yötä | 133937 | +| Yksin matkustava | 108545 | +| Viipyi 3 yötä | 95821 | +| Liikematka | 82939 | +| Ryhmä | 65392 | +| Perhe pienten lasten kanssa | 61015 | +| Viipyi 4 yötä | 47817 | +| Kahden hengen huone | 35207 | +| Standard kahden hengen huone | 32248 | +| Superior kahden hengen huone | 31393 | +| Perhe vanhempien lasten kanssa| 26349 | +| Deluxe kahden hengen huone | 24823 | +| Kahden hengen tai kahden erillisen sängyn huone | 22393 | +| Viipyi 5 yötä | 20845 | +| Standard kahden hengen tai kahden erillisen sängyn huone | 17483 | +| Klassinen kahden hengen huone | 16989 | +| Superior kahden hengen tai kahden erillisen sängyn huone | 13570 | +| 2 huonetta | 12393 | + +Jotkut yleisistä tageista, kuten `Lähetetty mobiililaitteesta`, eivät ole hyödyllisiä meille, joten voi olla järkevää poistaa ne ennen fraasien esiintymien laskemista, mutta se on niin nopea operaatio, että voit jättää ne mukaan ja vain ohittaa ne. + +### Yöpymisen keston tagien poistaminen + +Näiden tagien poistaminen on ensimmäinen askel, se vähentää hieman tarkasteltavien tagien kokonaismäärää. Huomaa, että et poista niitä datasetistä, vaan valitset poistaa ne tarkastelusta arvostelujen datasetissä. + +| Yöpymisen kesto | Count | +| ---------------- | ------ | +| Viipyi 1 yön | 193645 | +| Viipyi 2 yötä | 133937 | +| Viipyi 3 yötä | 95821 | +| Viipyi 4 yötä | 47817 | +| Viipyi 5 yötä | 20845 | +| Viipyi 6 yötä | 9776 | +| Viipyi 7 yötä | 7399 | +| Viipyi 8 yötä | 2502 | +| Viipyi 9 yötä | 1293 | +| ... | ... | + +Huoneita, sviittejä, studioita, huoneistoja ja niin edelleen on valtava määrä. Ne kaikki tarkoittavat suunnilleen samaa asiaa eivätkä ole merkityksellisiä sinulle, joten poista ne tarkastelusta. + +| Huonetyyppi | Count | +| ----------------------------- | ----- | +| Kahden hengen huone | 35207 | +| Standard kahden hengen huone | 32248 | +| Superior kahden hengen huone | 31393 | +| Deluxe kahden hengen huone | 24823 | +| Kahden hengen tai kahden erillisen sängyn huone | 22393 | +| Standard kahden hengen tai kahden erillisen sängyn huone | 17483 | +| Klassinen kahden hengen huone | 16989 | +| Superior kahden hengen tai kahden erillisen sängyn huone | 13570 | + +Lopuksi, ja tämä on ilahduttavaa (koska se ei vaatinut paljon käsittelyä), sinulle jää seuraavat *hyödylliset* tagit: + +| Tag | Count | +| --------------------------------------------- | ------ | +| Lomamatka | 417778 | +| Pariskunta | 252294 | +| Yksin matkustava | 108545 | +| Liikematka | 82939 | +| Ryhmä (yhdistetty Matkustajat ystävien kanssa)| 67535 | +| Perhe pienten lasten kanssa | 61015 | +| Perhe vanhempien lasten kanssa | 26349 | +| Lemmikin kanssa | 1405 | + +Voit väittää, että `Matkustajat ystävien kanssa` on suunnilleen sama kuin `Ryhmä`, ja olisi perusteltua yhdistää nämä kaksi kuten yllä. Koodi oikeiden tagien tunnistamiseksi löytyy [Tags notebookista](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb). + +Viimeinen vaihe on luoda uudet sarakkeet jokaiselle näistä tageista. Sitten, jokaiselle arvosteluriville, jos `Tag`-sarake vastaa yhtä uusista sarakkeista, lisää 1, jos ei, lisää 0. Lopputuloksena on laskenta siitä, kuinka moni arvostelija valitsi tämän hotellin (yhteensä) esimerkiksi liikematkalle vs lomamatkalle tai lemmikin kanssa, ja tämä on hyödyllistä tietoa hotellia suositellessa. + +```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) + +``` + +### Tallenna tiedostosi + +Lopuksi, tallenna dataset nykyisessä muodossaan uudella nimellä. + +```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) +``` + +## Mielipiteiden analysointitoiminnot + +Tässä viimeisessä osiossa sovellat mielipiteiden analysointia arvostelusarakkeisiin ja tallennat tulokset datasettiin. + +## Harjoitus: lataa ja tallenna suodatettu data + +Huomaa, että nyt lataat suodatetun datasetin, joka tallennettiin edellisessä osiossa, **ei** alkuperäistä datasettiä. + +```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-sanojen poistaminen + +Jos suorittaisit mielipiteiden analysoinnin negatiivisille ja positiivisille arvostelusarakkeille, se voisi kestää kauan. Testattu tehokkaalla testiläppärillä, jossa on nopea prosessori, se kesti 12–14 minuuttia riippuen siitä, mitä mielipiteiden analysointikirjastoa käytettiin. Se on (suhteellisen) pitkä aika, joten kannattaa tutkia, voiko sitä nopeuttaa. + +Stop-sanojen, eli yleisten englanninkielisten sanojen, jotka eivät muuta lauseen mielipidettä, poistaminen on ensimmäinen askel. Poistamalla ne mielipiteiden analysoinnin pitäisi toimia nopeammin, mutta ei olla vähemmän tarkka (koska stop-sanat eivät vaikuta mielipiteeseen, mutta ne hidastavat analyysiä). + +Pisimmän negatiivisen arvostelun pituus oli 395 sanaa, mutta stop-sanojen poistamisen jälkeen se on 195 sanaa. + +Stop-sanojen poistaminen on myös nopea operaatio, stop-sanojen poistaminen kahdesta arvostelusarakkeesta yli 515 000 riviltä kesti 3,3 sekuntia testilaitteella. Se voi kestää hieman enemmän tai vähemmän aikaa riippuen laitteen prosessorin nopeudesta, RAM-muistista, SSD:n olemassaolosta ja joistakin muista tekijöistä. Operaation suhteellinen lyhyys tarkoittaa, että jos se parantaa mielipiteiden analysoinnin aikaa, se on sen arvoista. + +```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) +``` + +### Mielipiteiden analysoinnin suorittaminen + +Nyt sinun pitäisi laskea mielipiteiden analysointi sekä negatiivisille että positiivisille arvostelusarakkeille ja tallentaa tulos kahteen uuteen sarakkeeseen. Mielipiteiden testaus tapahtuu vertaamalla sitä arvostelijan antamaan pisteytykseen samasta arvostelusta. Esimerkiksi, jos mielipiteiden analyysi arvioi negatiivisen arvostelun mielipiteeksi 1 (äärimmäisen positiivinen mielipide) ja positiivisen arvostelun mielipiteeksi 1, mutta arvostelija antoi hotellille alhaisimman mahdollisen pisteen, silloin joko arvosteluteksti ei vastaa pisteytystä tai mielipiteiden analysoija ei pystynyt tunnistamaan mielipidettä oikein. Sinun pitäisi odottaa, että jotkut mielipiteiden pisteet ovat täysin vääriä, ja usein se on selitettävissä, esim. arvostelu voi olla erittäin sarkastinen "Tietenkin RAKASTIN nukkumista huoneessa ilman lämmitystä" ja mielipiteiden analysoija ajattelee, että se on positiivinen mielipide, vaikka ihminen lukisi sen tietäen, että se oli sarkasmia. +NLTK tarjoaa erilaisia sentimenttianalysaattoreita, joita voit käyttää, ja voit vaihtaa niitä nähdäksesi, onko sentimentti tarkempi vai ei. Tässä käytetään VADER-sentimenttianalyysiä. + +> 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, kesäkuu 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"] +``` + +Myöhemmin ohjelmassasi, kun olet valmis laskemaan sentimentin, voit soveltaa sitä jokaiseen arvosteluun seuraavasti: + +```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") +``` + +Tämä vie noin 120 sekuntia tietokoneellani, mutta aika vaihtelee tietokoneittain. Jos haluat tulostaa tulokset ja nähdä, vastaako sentimentti arvostelua: + +```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"]]) +``` + +Viimeinen asia, joka tiedostolle täytyy tehdä ennen kuin käytät sitä haasteessa, on tallentaa se! Kannattaa myös harkita kaikkien uusien sarakkeiden uudelleenjärjestämistä, jotta niiden kanssa olisi helpompi työskennellä (ihmisen näkökulmasta tämä on kosmeettinen muutos). + +```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) +``` + +Sinun tulisi ajaa koko koodi [analyysivihkosta](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb) (sen jälkeen kun olet ajanut [suodatusvihkon](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb) luodaksesi Hotel_Reviews_Filtered.csv-tiedoston). + +Kertauksena, vaiheet ovat: + +1. Alkuperäinen dataset-tiedosto **Hotel_Reviews.csv** tutkitaan edellisessä oppitunnissa [tutkimusvihkon](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/4-Hotel-Reviews-1/solution/notebook.ipynb) avulla +2. Hotel_Reviews.csv suodatetaan [suodatusvihkolla](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/1-notebook.ipynb), jolloin syntyy **Hotel_Reviews_Filtered.csv** +3. Hotel_Reviews_Filtered.csv käsitellään [sentimenttianalyysivihkolla](https://github.com/microsoft/ML-For-Beginners/blob/main/6-NLP/5-Hotel-Reviews-2/solution/3-notebook.ipynb), jolloin syntyy **Hotel_Reviews_NLP.csv** +4. Käytä Hotel_Reviews_NLP.csv-tiedostoa alla olevassa NLP-haasteessa + +### Yhteenveto + +Kun aloitit, sinulla oli datasetti, jossa oli sarakkeita ja dataa, mutta kaikkea ei voitu vahvistaa tai käyttää. Olet tutkinut dataa, suodattanut tarpeettoman pois, muuntanut tageja hyödyllisiksi, laskenut omia keskiarvoja, lisännyt sentimenttisarakkeita ja toivottavasti oppinut mielenkiintoisia asioita luonnollisen tekstin käsittelystä. + +## [Oppitunnin jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Haaste + +Nyt kun datasetti on analysoitu sentimentin osalta, kokeile käyttää oppimiasi strategioita (ehkä klusterointia?) tunnistaaksesi sentimenttiin liittyviä kuvioita. + +## Kertaus & Itseopiskelu + +Käy läpi [tämä Learn-moduuli](https://docs.microsoft.com/en-us/learn/modules/classify-user-feedback-with-the-text-analytics-api/?WT.mc_id=academic-77952-leestott) oppiaksesi lisää ja käyttämään erilaisia työkaluja sentimentin tutkimiseen tekstissä. + +## Tehtävä + +[Kokeile eri datasettiä](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/5-Hotel-Reviews-2/assignment.md b/translations/fi/6-NLP/5-Hotel-Reviews-2/assignment.md new file mode 100644 index 000000000..3d3157fcd --- /dev/null +++ b/translations/fi/6-NLP/5-Hotel-Reviews-2/assignment.md @@ -0,0 +1,25 @@ + +# Kokeile eri datasettiä + +## Ohjeet + +Nyt kun olet oppinut käyttämään NLTK:ta tekstin sentimentin määrittämiseen, kokeile eri datasettiä. Sinun täytyy todennäköisesti tehdä jonkin verran datan käsittelyä, joten luo muistikirja ja dokumentoi ajatusprosessisi. Mitä huomaat? + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | +| | Täydellinen muistikirja ja datasetti esitetään hyvin dokumentoiduilla soluilla, jotka selittävät sentimentin määrittämisen | Muistikirjasta puuttuu hyvät selitykset | Muistikirja on puutteellinen | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md b/translations/fi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md new file mode 100644 index 000000000..a777264be --- /dev/null +++ b/translations/fi/6-NLP/5-Hotel-Reviews-2/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md b/translations/fi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md new file mode 100644 index 000000000..8477ade14 --- /dev/null +++ b/translations/fi/6-NLP/5-Hotel-Reviews-2/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/README.md b/translations/fi/6-NLP/README.md new file mode 100644 index 000000000..dd00d3182 --- /dev/null +++ b/translations/fi/6-NLP/README.md @@ -0,0 +1,38 @@ + +# Aloittaminen luonnollisen kielen käsittelyssä + +Luonnollisen kielen käsittely (NLP) tarkoittaa tietokoneohjelman kykyä ymmärtää ihmisen kieltä sellaisena kuin sitä puhutaan ja kirjoitetaan – eli luonnollisena kielenä. Se on osa tekoälyä (AI). NLP on ollut olemassa yli 50 vuotta ja sillä on juuret kielitieteen alalla. Koko ala keskittyy auttamaan koneita ymmärtämään ja käsittelemään ihmisen kieltä. Tätä voidaan käyttää tehtäviin, kuten oikeinkirjoituksen tarkistukseen tai konekäännökseen. NLP:llä on monia käytännön sovelluksia eri aloilla, kuten lääketieteellisessä tutkimuksessa, hakukoneissa ja liiketoimintatiedon analysoinnissa. + +## Alueellinen aihe: Eurooppalaiset kielet ja kirjallisuus sekä romanttiset hotellit Euroopassa ❤️ + +Tässä opintokokonaisuuden osassa tutustut yhteen koneoppimisen yleisimmistä käyttötavoista: luonnollisen kielen käsittelyyn (NLP). Tekoälyn osa-alue, joka pohjautuu laskennalliseen kielitieteeseen, toimii sillan rakentajana ihmisten ja koneiden välillä ääni- tai tekstipohjaisen viestinnän kautta. + +Näissä oppitunneissa opimme NLP:n perusteet rakentamalla pieniä keskustelubotteja, jotta ymmärrämme, miten koneoppiminen auttaa tekemään näistä keskusteluista yhä "älykkäämpiä". Matkaamme ajassa taaksepäin keskustelemaan Elizabeth Bennettin ja Mr. Darcyn kanssa Jane Austenin klassisesta romaanista **Ylpeys ja ennakkoluulo**, joka julkaistiin vuonna 1813. Sen jälkeen syvennämme osaamistamme oppimalla sentimenttianalyysistä eurooppalaisten hotelliarvostelujen avulla. + +![Ylpeys ja ennakkoluulo -kirja ja teekuppi](../../../6-NLP/images/p&p.jpg) +> Kuva: Elaine Howlin palvelussa Unsplash + +## Oppitunnit + +1. [Johdatus luonnollisen kielen käsittelyyn](1-Introduction-to-NLP/README.md) +2. [Yleiset NLP-tehtävät ja -tekniikat](2-Tasks/README.md) +3. [Konekäännös ja sentimenttianalyysi koneoppimisen avulla](3-Translation-Sentiment/README.md) +4. [Datan valmistelu](4-Hotel-Reviews-1/README.md) +5. [NLTK sentimenttianalyysiin](5-Hotel-Reviews-2/README.md) + +## Tekijät + +Nämä luonnollisen kielen käsittelyn oppitunnit on kirjoitettu ☕:n kera [Stephen Howell](https://twitter.com/Howell_MSFT) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/6-NLP/data/README.md b/translations/fi/6-NLP/data/README.md new file mode 100644 index 000000000..807be0d97 --- /dev/null +++ b/translations/fi/6-NLP/data/README.md @@ -0,0 +1,15 @@ + +Lataa hotelliarvosteludata tähän kansioon. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/1-Introduction/README.md b/translations/fi/7-TimeSeries/1-Introduction/README.md new file mode 100644 index 000000000..43a0b3400 --- /dev/null +++ b/translations/fi/7-TimeSeries/1-Introduction/README.md @@ -0,0 +1,199 @@ + +# Johdanto aikasarjojen ennustamiseen + +![Yhteenveto aikasarjoista sketchnotessa](../../../../sketchnotes/ml-timeseries.png) + +> Sketchnote: [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Tässä ja seuraavassa oppitunnissa opit hieman aikasarjojen ennustamisesta, joka on mielenkiintoinen ja arvokas osa koneoppimistutkijan työkalupakkia, mutta vähemmän tunnettu kuin monet muut aiheet. Aikasarjojen ennustaminen on eräänlainen "kristallipallo": aiempien suorituskykytietojen, kuten hinnan, perusteella voit ennustaa sen tulevaa potentiaalista arvoa. + +[![Johdanto aikasarjojen ennustamiseen](https://img.youtube.com/vi/cBojo1hsHiI/0.jpg)](https://youtu.be/cBojo1hsHiI "Johdanto aikasarjojen ennustamiseen") + +> 🎥 Klikkaa yllä olevaa kuvaa katsoaksesi videon aikasarjojen ennustamisesta + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +Tämä on hyödyllinen ja mielenkiintoinen ala, jolla on todellista arvoa liiketoiminnalle, koska sillä on suora sovellus hinnoitteluun, varastonhallintaan ja toimitusketjun ongelmiin. Vaikka syväoppimistekniikoita on alettu käyttää tulevan suorituskyvyn ennustamisessa, aikasarjojen ennustaminen on edelleen ala, jossa klassiset koneoppimismenetelmät ovat keskeisessä roolissa. + +> Penn Staten hyödyllinen aikasarjojen opetusmateriaali löytyy [täältä](https://online.stat.psu.edu/stat510/lesson/1) + +## Johdanto + +Oletetaan, että ylläpidät älykkäiden parkkimittareiden verkostoa, joka tuottaa dataa siitä, kuinka usein niitä käytetään ja kuinka pitkään ajan kuluessa. + +> Mitä jos voisit ennustaa mittarin tulevan arvon sen aiemman suorituskyvyn perusteella kysynnän ja tarjonnan lakien mukaisesti? + +Tarkka ennustaminen siitä, milloin toimia tavoitteen saavuttamiseksi, on haaste, jota voidaan käsitellä aikasarjojen ennustamisen avulla. Vaikka korkeammat hinnat ruuhka-aikoina eivät ilahduttaisi parkkipaikkaa etsiviä ihmisiä, se olisi varma tapa kerätä tuloja katujen siivoamiseen! + +Tutustutaan joihinkin aikasarjojen algoritmeihin ja aloitetaan muistikirja datan puhdistamiseksi ja valmistamiseksi. Analysoitava data on peräisin GEFCom2014-ennustuskilpailusta. Se sisältää kolmen vuoden tuntikohtaiset sähkönkulutus- ja lämpötilatiedot vuosilta 2012–2014. Historiallisten sähkönkulutuksen ja lämpötilan mallien perusteella voit ennustaa sähkönkulutuksen tulevia arvoja. + +Tässä esimerkissä opit ennustamaan yhden aikavälin eteenpäin käyttäen vain historiallista kulutusdataa. Ennen aloittamista on kuitenkin hyödyllistä ymmärtää, mitä kulissien takana tapahtuu. + +## Joitakin määritelmiä + +Kun kohtaat termin "aikasarja", sinun täytyy ymmärtää sen käyttö useissa eri yhteyksissä. + +🎓 **Aikasarja** + +Matematiikassa "aikasarja on datapisteiden sarja, joka on indeksoitu (tai listattu tai piirretty) aikajärjestyksessä. Yleisimmin aikasarja on sekvenssi, joka on otettu peräkkäisinä yhtä välein olevina ajankohtina." Esimerkki aikasarjasta on [Dow Jones Industrial Average](https://wikipedia.org/wiki/Time_series) -indeksin päivittäinen päätösarvo. Aikasarjojen kuvaajien ja tilastollisen mallinnuksen käyttö on yleistä signaalinkäsittelyssä, säätiedotuksessa, maanjäristysten ennustamisessa ja muilla aloilla, joissa tapahtumat tapahtuvat ja datapisteet voidaan piirtää ajan yli. + +🎓 **Aikasarjojen analyysi** + +Aikasarjojen analyysi tarkoittaa edellä mainitun aikasarjadatan analysointia. Aikasarjadata voi olla eri muodoissa, mukaan lukien "keskeytetyt aikasarjat", jotka havaitsevat kuvioita aikasarjan kehityksessä ennen ja jälkeen keskeyttävän tapahtuman. Tarvittava analyysityyppi riippuu datan luonteesta. Aikasarjadata voi olla numeromuotoista tai merkkimuotoista. + +Analyysi käyttää monenlaisia menetelmiä, mukaan lukien taajuusalueen ja aika-alueen menetelmät, lineaariset ja epälineaariset menetelmät ja paljon muuta. [Lue lisää](https://www.itl.nist.gov/div898/handbook/pmc/section4/pmc4.htm) tavoista analysoida tämän tyyppistä dataa. + +🎓 **Aikasarjojen ennustaminen** + +Aikasarjojen ennustaminen tarkoittaa mallin käyttöä tulevien arvojen ennustamiseen aiemmin kerätyn datan mallien perusteella. Vaikka regressiomalleja voidaan käyttää aikasarjadatan tutkimiseen, jossa ajan indeksit ovat x-muuttujia kuvaajassa, tällaista dataa on parasta analysoida erityyppisillä malleilla. + +Aikasarjadata on järjestettyjen havaintojen lista, toisin kuin data, jota voidaan analysoida lineaarisella regressiolla. Yleisin malli on ARIMA, joka on lyhenne sanoista "Autoregressive Integrated Moving Average". + +[ARIMA-mallit](https://online.stat.psu.edu/stat510/lesson/1/1.1) "liittävät sarjan nykyisen arvon aiempiin arvoihin ja aiempiin ennustusvirheisiin." Ne sopivat parhaiten aika-alueen datan analysointiin, jossa data on järjestetty ajan mukaan. + +> ARIMA-malleja on useita tyyppejä, joista voit oppia lisää [täältä](https://people.duke.edu/~rnau/411arim.htm), ja joita käsitellään seuraavassa oppitunnissa. + +Seuraavassa oppitunnissa rakennat ARIMA-mallin käyttäen [Univariate Time Series](https://itl.nist.gov/div898/handbook/pmc/section4/pmc44.htm) -dataa, joka keskittyy yhteen muuttujaan, joka muuttaa arvoaan ajan kuluessa. Esimerkki tällaisesta datasta on [tämä datasetti](https://itl.nist.gov/div898/handbook/pmc/section4/pmc4411.htm), joka tallentaa kuukausittaisen CO2-pitoisuuden Mauna Loa -observatoriossa: + +| 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 | + +✅ Tunnista muuttuja, joka muuttuu ajan kuluessa tässä datasetissä. + +## Aikasarjadatan ominaisuudet, jotka kannattaa huomioida + +Kun tarkastelet aikasarjadataa, saatat huomata, että sillä on [tiettyjä ominaisuuksia](https://online.stat.psu.edu/stat510/lesson/1/1.1), jotka sinun täytyy ottaa huomioon ja lieventää, jotta ymmärrät sen kuvioita paremmin. Jos pidät aikasarjadataa potentiaalisena "signaalina", jota haluat analysoida, nämä ominaisuudet voidaan ajatella "kohinana". Usein sinun täytyy vähentää tätä "kohinaa" käyttämällä tilastollisia tekniikoita. + +Tässä on joitakin käsitteitä, jotka sinun tulisi tuntea voidaksesi työskennellä aikasarjojen kanssa: + +🎓 **Trendit** + +Trendit määritellään mitattaviksi nousuiksi ja laskuiksi ajan kuluessa. [Lue lisää](https://machinelearningmastery.com/time-series-trends-in-python). Aikasarjojen yhteydessä kyse on siitä, miten trendejä käytetään ja tarvittaessa poistetaan aikasarjoista. + +🎓 **[Kausivaihtelu](https://machinelearningmastery.com/time-series-seasonality-with-python/)** + +Kausivaihtelu määritellään säännöllisiksi vaihteluiksi, kuten esimerkiksi lomasesonkien vaikutuksiksi myyntiin. [Tutustu](https://itl.nist.gov/div898/handbook/pmc/section4/pmc443.htm) siihen, miten erilaiset kuvaajat esittävät kausivaihtelua datassa. + +🎓 **Poikkeamat** + +Poikkeamat ovat kaukana normaalista datan vaihtelusta. + +🎓 **Pitkän aikavälin syklit** + +Kausivaihtelusta riippumatta data voi osoittaa pitkän aikavälin syklejä, kuten talouden laskusuhdanteita, jotka kestävät yli vuoden. + +🎓 **Vakio vaihtelu** + +Ajan kuluessa jotkut datat osoittavat vakioita vaihteluita, kuten energiankulutus päivällä ja yöllä. + +🎓 **Äkilliset muutokset** + +Data voi osoittaa äkillisiä muutoksia, jotka vaativat lisäanalyysiä. Esimerkiksi COVID-pandemian aiheuttama yritysten sulkeminen aiheutti muutoksia datassa. + +✅ Tässä on [esimerkkikuvaaja aikasarjasta](https://www.kaggle.com/kashnitsky/topic-9-part-1-time-series-analysis-in-python), joka näyttää päivittäisen pelin sisäisen valuutan käytön muutaman vuoden ajalta. Voitko tunnistaa mitään yllä mainituista ominaisuuksista tässä datassa? + +![Pelivaluutan käyttö](../../../../7-TimeSeries/1-Introduction/images/currency.png) + +## Harjoitus - sähkönkulutusdatan käsittely + +Aloitetaan aikasarjamallin luominen, joka ennustaa tulevaa sähkönkulutusta aiemman kulutuksen perusteella. + +> Tämän esimerkin data on peräisin GEFCom2014-ennustuskilpailusta. Se sisältää kolmen vuoden tuntikohtaiset sähkönkulutus- ja lämpötilatiedot vuosilta 2012–2014. +> +> Tao Hong, Pierre Pinson, Shu Fan, Hamidreza Zareipour, Alberto Troccoli ja Rob J. Hyndman, "Probabilistic energy forecasting: Global Energy Forecasting Competition 2014 and beyond", International Journal of Forecasting, vol.32, no.3, pp 896-913, heinä-syyskuu, 2016. + +1. Avaa tämän oppitunnin `working`-kansiossa _notebook.ipynb_-tiedosto. Aloita lisäämällä kirjastot, jotka auttavat sinua lataamaan ja visualisoimaan dataa: + + ```python + import os + import matplotlib.pyplot as plt + from common.utils import load_data + %matplotlib inline + ``` + + Huomaa, että käytät mukana tulevan `common`-kansion tiedostoja, jotka asettavat ympäristön ja käsittelevät datan lataamisen. + +2. Tarkastele seuraavaksi dataa dataframe-muodossa kutsumalla `load_data()` ja `head()`: + + ```python + data_dir = './data' + energy = load_data(data_dir)[['load']] + energy.head() + ``` + + Näet, että datassa on kaksi saraketta, jotka edustavat päivämäärää ja kulutusta: + + | | 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. Piirrä nyt data kutsumalla `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() + ``` + + ![energiakuvaaja](../../../../7-TimeSeries/1-Introduction/images/energy-plot.png) + +4. Piirrä nyt vuoden 2014 heinäkuun ensimmäinen viikko antamalla se syötteenä `energy`-muuttujalle `[alkupäivä]:[loppupäivä]`-muodossa: + + ```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() + ``` + + ![heinäkuu](../../../../7-TimeSeries/1-Introduction/images/july-2014.png) + + Upea kuvaaja! Tarkastele näitä kuvaajia ja katso, voitko tunnistaa mitään yllä mainituista ominaisuuksista. Mitä voimme päätellä datan visualisoinnista? + +Seuraavassa oppitunnissa luot ARIMA-mallin ennusteiden tekemiseksi. + +--- + +## 🚀Haaste + +Tee lista kaikista teollisuudenaloista ja tutkimusalueista, jotka hyötyisivät aikasarjojen ennustamisesta. Voitko keksiä sovelluksen näille tekniikoille taiteessa? Taloustieteessä? Ekologiassa? Vähittäiskaupassa? Teollisuudessa? Rahoituksessa? Missä muualla? + +## [Jälkiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Vaikka emme käsittele niitä tässä, neuroverkkoja käytetään joskus parantamaan klassisia aikasarjojen ennustusmenetelmiä. Lue lisää niistä [tässä artikkelissa](https://medium.com/microsoftazure/neural-networks-for-forecasting-financial-and-economic-time-series-6aca370ff412) + +## Tehtävä + +[Visualisoi lisää aikasarjoja](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/1-Introduction/assignment.md b/translations/fi/7-TimeSeries/1-Introduction/assignment.md new file mode 100644 index 000000000..dc508e712 --- /dev/null +++ b/translations/fi/7-TimeSeries/1-Introduction/assignment.md @@ -0,0 +1,25 @@ + +# Visualisoi lisää aikasarjoja + +## Ohjeet + +Olet alkanut oppia aikasarjojen ennustamista tarkastelemalla, millaista dataa tämä erityinen mallinnus vaatii. Olet visualisoinut energiaan liittyvää dataa. Nyt etsi muita datatyyppejä, jotka hyötyisivät aikasarjojen ennustamisesta. Löydä kolme esimerkkiä (kokeile [Kaggle](https://kaggle.com) ja [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-77952-leestott)) ja luo muistikirja niiden visualisoimiseksi. Merkitse muistikirjaan kaikki erityiset ominaisuudet, kuten kausivaihtelut, äkilliset muutokset tai muut trendit. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ----------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------------------------------- | +| | Kolme datasettiä on visualisoitu ja selitetty muistikirjassa | Kaksi datasettiä on visualisoitu ja selitetty muistikirjassa | Vain vähän datasettiä on visualisoitu tai selitetty muistikirjassa, tai esitetty data on riittämätöntä | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/1-Introduction/solution/Julia/README.md b/translations/fi/7-TimeSeries/1-Introduction/solution/Julia/README.md new file mode 100644 index 000000000..186ce79d7 --- /dev/null +++ b/translations/fi/7-TimeSeries/1-Introduction/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/1-Introduction/solution/R/README.md b/translations/fi/7-TimeSeries/1-Introduction/solution/R/README.md new file mode 100644 index 000000000..b0b8094fa --- /dev/null +++ b/translations/fi/7-TimeSeries/1-Introduction/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/2-ARIMA/README.md b/translations/fi/7-TimeSeries/2-ARIMA/README.md new file mode 100644 index 000000000..7df47533d --- /dev/null +++ b/translations/fi/7-TimeSeries/2-ARIMA/README.md @@ -0,0 +1,407 @@ + +# Aikasarjojen ennustaminen ARIMA-mallilla + +Edellisessä oppitunnissa opit hieman aikasarjojen ennustamisesta ja latasit tietoaineiston, joka näyttää sähkönkulutuksen vaihtelut tietyn ajanjakson aikana. + +[![Johdatus ARIMA-malliin](https://img.youtube.com/vi/IUSk-YDau10/0.jpg)](https://youtu.be/IUSk-YDau10 "Johdatus ARIMA-malliin") + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon: Lyhyt johdatus ARIMA-malleihin. Esimerkki on tehty R-kielellä, mutta käsitteet ovat yleispäteviä. + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Johdanto + +Tässä oppitunnissa tutustut erityiseen tapaan rakentaa malleja [ARIMA: *A*uto*R*egressive *I*ntegrated *M*oving *A*verage](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) avulla. ARIMA-mallit soveltuvat erityisesti datan analysointiin, joka osoittaa [ei-stationaarisuutta](https://wikipedia.org/wiki/Stationary_process). + +## Yleiset käsitteet + +Jotta voit työskennellä ARIMA-mallien kanssa, sinun täytyy tuntea muutamia käsitteitä: + +- 🎓 **Stationaarisuus**. Tilastollisessa kontekstissa stationaarisuus viittaa dataan, jonka jakauma ei muutu ajan siirtyessä. Ei-stationaarinen data puolestaan osoittaa vaihteluita trendien vuoksi, jotka täytyy muuntaa analysoitavaksi. Esimerkiksi kausiluonteisuus voi aiheuttaa vaihteluita datassa, ja se voidaan poistaa 'kausittaisen differoinnin' avulla. + +- 🎓 **[Differointi](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average#Differencing)**. Differointi tarkoittaa ei-stationaarisen datan muuntamista stationaariseksi poistamalla sen ei-vakioinen trendi. "Differointi poistaa aikasarjan tason muutokset, eliminoi trendin ja kausiluonteisuuden ja vakauttaa siten aikasarjan keskiarvon." [Shixiong et al -tutkimus](https://arxiv.org/abs/1904.07632) + +## ARIMA aikasarjojen kontekstissa + +Puretaan ARIMA:n osat, jotta ymmärrämme paremmin, miten se auttaa mallintamaan aikasarjoja ja tekemään ennusteita niiden perusteella. + +- **AR - AutoRegressiivinen**. Autoregressiiviset mallit, kuten nimi viittaa, katsovat 'taaksepäin' ajassa analysoidakseen datan aiempia arvoja ja tehdäkseen oletuksia niiden perusteella. Näitä aiempia arvoja kutsutaan 'viiveiksi'. Esimerkkinä voisi olla data, joka näyttää kuukausittaiset lyijykynien myyntiluvut. Jokaisen kuukauden myyntilukuja pidettäisiin datasetin 'muuttuvana muuttujana'. Tämä malli rakennetaan siten, että "kiinnostava muuttuva muuttuja regressoidaan omiin viivästettyihin (eli aiempiin) arvoihinsa." [wikipedia](https://wikipedia.org/wiki/Autoregressive_integrated_moving_average) + +- **I - Integroitu**. Toisin kuin samankaltaiset 'ARMA'-mallit, ARIMA:n 'I' viittaa sen *[integroituun](https://wikipedia.org/wiki/Order_of_integration)* osaan. Data integroidaan, kun differointivaiheita sovelletaan ei-stationaarisuuden poistamiseksi. + +- **MA - Liukuva keskiarvo**. Mallin [liukuva keskiarvo](https://wikipedia.org/wiki/Moving-average_model) viittaa ulostulomuuttujaan, joka määritetään tarkkailemalla nykyisiä ja aiempia viiveiden arvoja. + +Yhteenveto: ARIMA:a käytetään mallin sovittamiseen erityiseen aikasarjadatan muotoon mahdollisimman tarkasti. + +## Harjoitus - rakenna ARIMA-malli + +Avaa tämän oppitunnin [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/working) -kansio ja etsi [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/2-ARIMA/working/notebook.ipynb) -tiedosto. + +1. Suorita notebook ladataksesi `statsmodels`-kirjaston Pythonissa; tarvitset tätä ARIMA-malleja varten. + +1. Lataa tarvittavat kirjastot. + +1. Lataa nyt lisää kirjastoja, jotka ovat hyödyllisiä datan visualisointiin: + + ```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. Lataa data `/data/energy.csv` -tiedostosta Pandas-dataframeen ja tarkastele sitä: + + ```python + energy = load_data('./data')[['load']] + energy.head(10) + ``` + +1. Piirrä kaikki saatavilla oleva energiadata tammikuusta 2012 joulukuuhun 2014. Ei pitäisi olla yllätyksiä, sillä näimme tämän datan viime oppitunnissa: + + ```python + energy.plot(y='load', subplots=True, figsize=(15, 8), fontsize=12) + plt.xlabel('timestamp', fontsize=12) + plt.ylabel('load', fontsize=12) + plt.show() + ``` + + Nyt rakennetaan malli! + +### Luo harjoitus- ja testidatasetit + +Kun datasi on ladattu, voit jakaa sen harjoitus- ja testidatasetiksi. Harjoitat mallisi harjoitusdatalla. Kuten tavallista, kun malli on valmis, arvioit sen tarkkuutta testidatan avulla. Sinun täytyy varmistaa, että testidata kattaa myöhemmän ajanjakson kuin harjoitusdata, jotta malli ei saa tietoa tulevista ajanjaksoista. + +1. Määritä kahden kuukauden ajanjakso syyskuun 1. päivästä lokakuun 31. päivään 2014 harjoitusdataksi. Testidata sisältää kahden kuukauden ajanjakson marraskuun 1. päivästä joulukuun 31. päivään 2014: + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + + Koska tämä data heijastaa päivittäistä energiankulutusta, siinä on vahva kausiluonteinen kuvio, mutta kulutus on eniten samankaltaista lähimpien päivien kulutuksen kanssa. + +1. Visualisoi erot: + + ```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() + ``` + + ![harjoitus- ja testidata](../../../../7-TimeSeries/2-ARIMA/images/train-test.png) + + Siksi suhteellisen pienen ajanjakson käyttäminen datan harjoittamiseen pitäisi olla riittävä. + + > Huom: Koska käyttämämme funktio ARIMA-mallin sovittamiseen käyttää sisäistä validointia sovituksen aikana, jätämme validointidatan pois. + +### Valmistele data harjoitusta varten + +Nyt sinun täytyy valmistella data harjoitusta varten suodattamalla ja skaalaamalla dataasi. Suodata datasetti sisältämään vain tarvittavat ajanjaksot ja sarakkeet, ja skaalaa data varmistaaksesi, että se on välillä 0,1. + +1. Suodata alkuperäinen datasetti sisältämään vain edellä mainitut ajanjaksot per setti ja vain tarvittava sarake 'load' sekä päivämäärä: + + ```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) + ``` + + Voit tarkastella datan muotoa: + + ```output + Training data shape: (1416, 1) + Test data shape: (48, 1) + ``` + +1. Skaalaa data välille (0, 1). + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + train.head(10) + ``` + +1. Visualisoi alkuperäinen vs. skaalattu data: + + ```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() + ``` + + ![alkuperäinen](../../../../7-TimeSeries/2-ARIMA/images/original.png) + + > Alkuperäinen data + + ![skaalattu](../../../../7-TimeSeries/2-ARIMA/images/scaled.png) + + > Skaalattu data + +1. Nyt kun olet kalibroinut skaalatun datan, voit skaalata testidatan: + + ```python + test['load'] = scaler.transform(test) + test.head() + ``` + +### Toteuta ARIMA + +On aika toteuttaa ARIMA! Käytät nyt aiemmin asennettua `statsmodels`-kirjastoa. + +Seuraa nyt useita vaiheita: + + 1. Määritä malli kutsumalla `SARIMAX()` ja välittämällä mallin parametrit: p-, d- ja q-parametrit sekä P-, D- ja Q-parametrit. + 2. Valmistele malli harjoitusdataa varten kutsumalla fit()-funktio. + 3. Tee ennusteita kutsumalla `forecast()`-funktio ja määrittämällä ennustettavien askelten määrä (ennustehorisontti). + +> 🎓 Mitä nämä parametrit tarkoittavat? ARIMA-mallissa on kolme parametria, joita käytetään mallintamaan aikasarjan keskeisiä piirteitä: kausiluonteisuus, trendi ja kohina. Nämä parametrit ovat: + +`p`: parametri, joka liittyy mallin autoregressiiviseen osaan ja sisältää *menneet* arvot. +`d`: parametri, joka liittyy mallin integroituun osaan ja vaikuttaa siihen, kuinka paljon *differointia* (🎓 muista differointi 👆?) sovelletaan aikasarjaan. +`q`: parametri, joka liittyy mallin liukuvaan keskiarvoon. + +> Huom: Jos datassasi on kausiluonteinen piirre - kuten tässä datassa on -, käytämme kausiluonteista ARIMA-mallia (SARIMA). Tässä tapauksessa sinun täytyy käyttää toista joukkoa parametreja: `P`, `D` ja `Q`, jotka kuvaavat samoja yhteyksiä kuin `p`, `d` ja `q`, mutta vastaavat mallin kausiluonteisia komponentteja. + +1. Aloita asettamalla haluamasi horisonttiarvo. Kokeillaan 3 tuntia: + + ```python + # Specify the number of steps to forecast ahead + HORIZON = 3 + print('Forecasting horizon:', HORIZON, 'hours') + ``` + + ARIMA-mallin parametrien parhaiden arvojen valitseminen voi olla haastavaa, sillä se on osittain subjektiivista ja aikaa vievää. Voit harkita `auto_arima()`-funktion käyttöä [`pyramid`-kirjastosta](https://alkaline-ml.com/pmdarima/0.9.0/modules/generated/pyramid.arima.auto_arima.html). + +1. Kokeile nyt joitakin manuaalisia valintoja löytääksesi hyvän mallin. + + ```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()) + ``` + + Tulostetaan tulostaulukko. + +Olet rakentanut ensimmäisen mallisi! Nyt meidän täytyy löytää tapa arvioida sitä. + +### Arvioi mallisi + +Mallin arvioimiseksi voit käyttää niin sanottua `walk forward` -validointia. Käytännössä aikasarjamallit koulutetaan uudelleen aina, kun uutta dataa tulee saataville. Tämä mahdollistaa parhaan ennusteen tekemisen jokaisessa ajankohdassa. + +Aloittaen aikasarjan alusta tällä tekniikalla, kouluta malli harjoitusdatalla. Tee sitten ennuste seuraavasta ajankohdasta. Ennustetta verrataan tunnettuun arvoon. Harjoitusdataa laajennetaan sisältämään tunnettu arvo, ja prosessi toistetaan. + +> Huom: Pidä harjoitusdatan ikkuna kiinteänä tehokkaamman koulutuksen vuoksi, jotta joka kerta kun lisäät uuden havainnon harjoitusdataan, poistat havainnon datan alusta. + +Tämä prosessi tarjoaa vankemman arvion siitä, miten malli toimii käytännössä. Se kuitenkin lisää laskentakustannuksia, koska niin monta mallia täytyy luoda. Tämä on hyväksyttävää, jos data on pieni tai malli on yksinkertainen, mutta voi olla ongelmallista suuremmassa mittakaavassa. + +Walk-forward-validointi on aikasarjamallien arvioinnin kultainen standardi ja suositeltavaa omissa projekteissasi. + +1. Luo ensin testidatapiste jokaiselle HORIZON-askeleelle. + + ```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 | + + Data siirtyy horisontaalisesti horisonttipisteensä mukaan. + +1. Tee ennusteita testidatallasi käyttämällä tätä liukuvaa ikkunamenetelmää silmukassa, joka on testidatan pituuden kokoinen: + + ```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) + ``` + + Voit seurata koulutuksen etenemistä: + + ```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. Vertaa ennusteita todelliseen kuormitukseen: + + ```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() + ``` + + Tuloste + | | | 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 | + + Tarkastele tuntikohtaisen datan ennustetta verrattuna todelliseen kuormitukseen. Kuinka tarkka tämä on? + +### Tarkista mallin tarkkuus + +Tarkista mallisi tarkkuus testaamalla sen keskimääräinen absoluuttinen prosenttivirhe (MAPE) kaikissa ennusteissa. +> **🧮 Näytä matematiikka** +> +> ![MAPE](../../../../7-TimeSeries/2-ARIMA/images/mape.png) +> +> [MAPE](https://www.linkedin.com/pulse/what-mape-mad-msd-time-series-allameh-statistics/) käytetään ennustetarkkuuden osoittamiseen suhteena, joka määritellään yllä olevan kaavan mukaan. Todellisen ja ennustetun ero jaetaan todellisella. +> +> "Tämän laskelman absoluuttinen arvo summataan jokaiselle ennustetulle ajankohdalle ja jaetaan sovitettujen pisteiden lukumäärällä n." [wikipedia](https://wikipedia.org/wiki/Mean_absolute_percentage_error) +1. Ilmaise yhtälö koodissa: + + ```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. Laske yhden askeleen 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, '%') + ``` + + Yhden askeleen ennusteen MAPE: 0.5570581332313952 % + +1. Tulosta moniaskeleen ennusteen MAPE: + + ```python + print('Multi-step forecast MAPE: ', mape(eval_df['prediction'], eval_df['actual'])*100, '%') + ``` + + ```output + Multi-step forecast MAPE: 1.1460048657704118 % + ``` + + Pieni luku on paras: huomaa, että ennuste, jonka MAPE on 10, poikkeaa 10 %. + +1. Mutta kuten aina, tämänkaltaisen tarkkuuden mittaaminen on helpompaa visuaalisesti, joten piirretään se: + + ```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() + ``` + + ![aikajaksomalli](../../../../7-TimeSeries/2-ARIMA/images/accuracy.png) + +🏆 Erittäin hieno kuvaaja, joka näyttää mallin hyvällä tarkkuudella. Hyvää työtä! + +--- + +## 🚀Haaste + +Tutki tapoja testata aikajaksomallin tarkkuutta. Tässä oppitunnissa käsitellään MAPE:a, mutta onko olemassa muita menetelmiä, joita voisit käyttää? Tutki niitä ja tee muistiinpanoja. Hyödyllinen dokumentti löytyy [täältä](https://otexts.com/fpp2/accuracy.html). + +## [Oppitunnin jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus & Itseopiskelu + +Tämä oppitunti käsittelee vain aikajaksomallinnuksen perusteita ARIMA:lla. Käytä aikaa syventääksesi tietämystäsi tutkimalla [tätä arkistoa](https://microsoft.github.io/forecasting/) ja sen erilaisia mallityyppejä oppiaksesi muita tapoja rakentaa aikajaksomalleja. + +## Tehtävä + +[Uusi ARIMA-malli](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/2-ARIMA/assignment.md b/translations/fi/7-TimeSeries/2-ARIMA/assignment.md new file mode 100644 index 000000000..f5dabc4ef --- /dev/null +++ b/translations/fi/7-TimeSeries/2-ARIMA/assignment.md @@ -0,0 +1,25 @@ + +# Uusi ARIMA-malli + +## Ohjeet + +Kun olet rakentanut ARIMA-mallin, rakenna uusi malli käyttäen tuoreita tietoja (kokeile yhtä [näistä Duke-yliopiston tietoaineistoista](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Merkitse työsi muistiinpanovihkoon, visualisoi tiedot ja mallisi, ja testaa sen tarkkuus käyttäen MAPE-mittaria. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | +| | Muistiinpanovihko esitetään, jossa uusi ARIMA-malli on rakennettu, testattu ja selitetty visualisointien kera, ja tarkkuus on ilmoitettu. | Esitetty muistiinpanovihko ei ole merkitty tai sisältää virheitä | Esitetty muistiinpanovihko on puutteellinen | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/2-ARIMA/solution/Julia/README.md b/translations/fi/7-TimeSeries/2-ARIMA/solution/Julia/README.md new file mode 100644 index 000000000..bd4337350 --- /dev/null +++ b/translations/fi/7-TimeSeries/2-ARIMA/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/2-ARIMA/solution/R/README.md b/translations/fi/7-TimeSeries/2-ARIMA/solution/R/README.md new file mode 100644 index 000000000..b2287da99 --- /dev/null +++ b/translations/fi/7-TimeSeries/2-ARIMA/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/3-SVR/README.md b/translations/fi/7-TimeSeries/3-SVR/README.md new file mode 100644 index 000000000..3ba1bcda4 --- /dev/null +++ b/translations/fi/7-TimeSeries/3-SVR/README.md @@ -0,0 +1,393 @@ + +# Aikasarjojen ennustaminen Support Vector Regressor -mallilla + +Edellisessä osiossa opit käyttämään ARIMA-mallia aikasarjojen ennustamiseen. Nyt tutustut Support Vector Regressor -malliin, joka on regressiomalli jatkuvien arvojen ennustamiseen. + +## [Ennakkovisa](https://ff-quizzes.netlify.app/en/ml/) + +## Johdanto + +Tässä osiossa opit rakentamaan malleja käyttäen [**SVM**: **S**upport **V**ector **M**achine](https://en.wikipedia.org/wiki/Support-vector_machine) -menetelmää regressiotehtäviin, eli **SVR: Support Vector Regressor**. + +### SVR aikasarjojen yhteydessä [^1] + +Ennen kuin ymmärrät SVR:n merkityksen aikasarjojen ennustamisessa, on tärkeää tuntea seuraavat käsitteet: + +- **Regressio:** Ohjattu oppimismenetelmä, jolla ennustetaan jatkuvia arvoja annetusta syötedatasta. Tavoitteena on sovittaa käyrä (tai viiva) piirreavaruuteen siten, että se sisältää mahdollisimman monta datapistettä. [Lisätietoa](https://en.wikipedia.org/wiki/Regression_analysis). +- **Support Vector Machine (SVM):** Ohjattu koneoppimismalli, jota käytetään luokitteluun, regressioon ja poikkeamien tunnistamiseen. Malli muodostaa hypertason piirreavaruuteen, joka toimii luokittelussa rajana ja regressiossa parhaana sovitusviivana. SVM:ssä käytetään yleensä ydinfunktiota (Kernel), joka muuntaa datan korkeampaan ulottuvuuteen, jotta se olisi helpommin eroteltavissa. [Lisätietoa](https://en.wikipedia.org/wiki/Support-vector_machine). +- **Support Vector Regressor (SVR):** SVM:n tyyppi, joka etsii parhaan sovitusviivan (SVM:n tapauksessa hypertason), joka sisältää mahdollisimman monta datapistettä. + +### Miksi SVR? [^1] + +Edellisessä osiossa opit ARIMA-mallista, joka on erittäin menestyksekäs tilastollinen lineaarinen menetelmä aikasarjojen ennustamiseen. Kuitenkin monissa tapauksissa aikasarjadatassa on *epälineaarisuutta*, jota lineaariset mallit eivät pysty mallintamaan. Tällaisissa tilanteissa SVM:n kyky huomioida epälineaarisuus tekee SVR:stä menestyksekkään aikasarjojen ennustamisessa. + +## Harjoitus - rakenna SVR-malli + +Ensimmäiset vaiheet datan valmistelussa ovat samat kuin edellisessä [ARIMA-osiossa](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA). + +Avaa tämän osion [_/working_](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/3-SVR/working) -kansio ja etsi [_notebook.ipynb_](https://github.com/microsoft/ML-For-Beginners/blob/main/7-TimeSeries/3-SVR/working/notebook.ipynb) -tiedosto.[^2] + +1. Suorita notebook ja tuo tarvittavat kirjastot: [^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. Lataa data `/data/energy.csv` -tiedostosta Pandas-dataframeen ja tarkastele sitä: [^2] + + ```python + energy = load_data('../../data')[['load']] + ``` + +3. Piirrä kaikki saatavilla oleva energiadata tammikuusta 2012 joulukuuhun 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() + ``` + + ![koko data](../../../../7-TimeSeries/3-SVR/images/full-data.png) + + Nyt rakennetaan SVR-malli. + +### Luo harjoitus- ja testidatasetit + +Kun data on ladattu, jaa se harjoitus- ja testidatasetteihin. Muotoile data aikaväleihin perustuvaksi datasetiksi, jota tarvitaan SVR:ää varten. Koulutat mallin harjoitusdatalla. Kun malli on koulutettu, arvioit sen tarkkuutta harjoitusdatalla, testidatalla ja koko datasetillä nähdäksesi kokonaisvaltaisen suorituskyvyn. Varmista, että testidata kattaa ajanjakson, joka on harjoitusdatan jälkeinen, jotta malli ei saa tietoa tulevista ajanjaksoista [^2] (tilanne, jota kutsutaan *ylisovittamiseksi*). + +1. Allokoi kahden kuukauden ajanjakso 1. syyskuuta - 31. lokakuuta 2014 harjoitusdataksi. Testidata sisältää kahden kuukauden ajanjakson 1. marraskuuta - 31. joulukuuta 2014: [^2] + + ```python + train_start_dt = '2014-11-01 00:00:00' + test_start_dt = '2014-12-30 00:00:00' + ``` + +2. Visualisoi erot: [^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() + ``` + + ![harjoitus- ja testidata](../../../../7-TimeSeries/3-SVR/images/train-test.png) + +### Valmistele data koulutusta varten + +Nyt sinun täytyy valmistella data koulutusta varten suodattamalla ja skaalaamalla se. Suodata datasetti sisältämään vain tarvittavat ajanjaksot ja sarakkeet, ja skaalaa data välille 0,1. + +1. Suodata alkuperäinen datasetti sisältämään vain edellä mainitut ajanjaksot ja tarvittava sarake 'load' sekä päivämäärä: [^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. Skaalaa harjoitusdata välille (0, 1): [^2] + + ```python + scaler = MinMaxScaler() + train['load'] = scaler.fit_transform(train) + ``` + +4. Skaalaa nyt testidata: [^2] + + ```python + test['load'] = scaler.transform(test) + ``` + +### Luo data aikaväleillä [^1] + +SVR:ää varten muunnat syötteen muotoon `[batch, timesteps]`. Muotoile olemassa oleva `train_data` ja `test_data` siten, että niihin lisätään uusi ulottuvuus, joka viittaa aikaväleihin. + +```python +# Converting to numpy arrays +train_data = train.values +test_data = test.values +``` + +Tässä esimerkissä otetaan `timesteps = 5`. Mallin syötteet ovat ensimmäisten neljän aikavälin data, ja ulostulo on viidennen aikavälin data. + +```python +timesteps=5 +``` + +Muunna harjoitusdata 2D-tensoriksi käyttäen sisäkkäistä listan ymmärrystä: + +```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) +``` + +Muunna testidata 2D-tensoriksi: + +```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) +``` + +Valitse syötteet ja ulostulot harjoitus- ja testidatasta: + +```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) +``` + +### Toteuta SVR [^1] + +Nyt on aika toteuttaa SVR. Lisätietoa toteutuksesta löydät [tästä dokumentaatiosta](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVR.html). Toteutuksessa noudatetaan seuraavia vaiheita: + +1. Määrittele malli kutsumalla `SVR()` ja syöttämällä mallin hyperparametrit: kernel, gamma, c ja epsilon +2. Valmistele malli harjoitusdataa varten kutsumalla `fit()`-funktiota +3. Tee ennusteita kutsumalla `predict()`-funktiota + +Nyt luodaan SVR-malli. Tässä käytetään [RBF-ydintä](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel), ja asetetaan hyperparametrit gamma, C ja epsilon arvoihin 0.5, 10 ja 0.05. + +```python +model = SVR(kernel='rbf',gamma=0.5, C=10, epsilon = 0.05) +``` + +#### Sovita malli harjoitusdataan [^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) +``` + +#### Tee malliennusteita [^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) +``` + +Olet rakentanut SVR-mallin! Nyt arvioidaan sen suorituskykyä. + +### Arvioi mallisi [^1] + +Arviointia varten skaalaamme datan takaisin alkuperäiseen mittakaavaan. Suorituskyvyn tarkistamiseksi piirrämme alkuperäisen ja ennustetun aikasarjan sekä tulostamme MAPE-tuloksen. + +Skaalaa ennustettu ja alkuperäinen ulostulo: + +```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)) +``` + +#### Tarkista mallin suorituskyky harjoitus- ja testidatalla [^1] + +Poimimme aikaleimat datasetistä, jotta ne voidaan näyttää x-akselilla. Huomaa, että käytämme ensimmäisiä ```timesteps-1``` arvoja ensimmäisen ulostulon syötteenä, joten ulostulon aikaleimat alkavat vasta sen jälkeen. + +```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 +``` + +Piirrä ennusteet harjoitusdatasta: + +```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() +``` + +![harjoitusdatan ennuste](../../../../7-TimeSeries/3-SVR/images/train-data-predict.png) + +Tulosta MAPE harjoitusdatasta + +```python +print('MAPE for training data: ', mape(y_train_pred, y_train)*100, '%') +``` + +```output +MAPE for training data: 1.7195710200875551 % +``` + +Piirrä ennusteet testidatasta + +```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() +``` + +![testidatan ennuste](../../../../7-TimeSeries/3-SVR/images/test-data-predict.png) + +Tulosta MAPE testidatasta + +```python +print('MAPE for testing data: ', mape(y_test_pred, y_test)*100, '%') +``` + +```output +MAPE for testing data: 1.2623790187854018 % +``` + +🏆 Sait erittäin hyvän tuloksen testidatalla! + +### Tarkista mallin suorituskyky koko datasetillä [^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() +``` + +![koko datan ennuste](../../../../7-TimeSeries/3-SVR/images/full-data-predict.png) + +```python +print('MAPE: ', mape(Y_pred, Y)*100, '%') +``` + +```output +MAPE: 2.0572089029888656 % +``` + +🏆 Erittäin hienot kaaviot, jotka osoittavat mallin hyvän tarkkuuden. Hyvin tehty! + +--- + +## 🚀Haaste + +- Kokeile säätää hyperparametreja (gamma, C, epsilon) mallia luodessasi ja arvioi niiden vaikutusta testidatan tuloksiin. Lisätietoa hyperparametreista löydät [täältä](https://scikit-learn.org/stable/modules/svm.html#parameters-of-the-rbf-kernel). +- Kokeile käyttää erilaisia ydinfunktioita mallissa ja analysoi niiden suorituskykyä datasetillä. Hyödyllinen dokumentti löytyy [täältä](https://scikit-learn.org/stable/modules/svm.html#kernel-functions). +- Kokeile käyttää erilaisia `timesteps`-arvoja, jotta malli voi katsoa taaksepäin ennustetta tehdessään. + +## [Jälkivisa](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Tässä osiossa esiteltiin SVR:n käyttö aikasarjojen ennustamiseen. Lisätietoa SVR:stä löydät [tästä blogista](https://www.analyticsvidhya.com/blog/2020/03/support-vector-regression-tutorial-for-machine-learning/). Tämä [scikit-learn-dokumentaatio](https://scikit-learn.org/stable/modules/svm.html) tarjoaa kattavamman selityksen SVM:stä yleisesti, [SVR:stä](https://scikit-learn.org/stable/modules/svm.html#regression) ja muista toteutuksen yksityiskohdista, kuten eri [ydinfunktioista](https://scikit-learn.org/stable/modules/svm.html#kernel-functions) ja niiden parametreista. + +## Tehtävä + +[Uusi SVR-malli](assignment.md) + +## Kiitokset + +[^1]: Tämän osion teksti, koodi ja tulokset on kirjoittanut [@AnirbanMukherjeeXD](https://github.com/AnirbanMukherjeeXD) +[^2]: Tämän osion teksti, koodi ja tulokset on otettu [ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA) -osiosta + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/3-SVR/assignment.md b/translations/fi/7-TimeSeries/3-SVR/assignment.md new file mode 100644 index 000000000..487b3444a --- /dev/null +++ b/translations/fi/7-TimeSeries/3-SVR/assignment.md @@ -0,0 +1,29 @@ + +# Uusi SVR-malli + +## Ohjeet [^1] + +Kun olet rakentanut SVR-mallin, rakenna uusi malli käyttäen tuoretta dataa (kokeile yhtä [näistä Duke-yliopiston dataseteistä](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Merkitse työsi muistiinpanovihkoon, visualisoi data ja mallisi, ja testaa sen tarkkuus sopivilla kuvaajilla ja MAPE-mittarilla. Kokeile myös säätää eri hyperparametreja ja käyttää erilaisia arvoja aikaväleille. + +## Arviointikriteerit [^1] + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ----------------------------------------------------------- | --------------------------------------------------------- | ----------------------------------- | +| | Muistiinpanovihko esitetään, jossa SVR-malli on rakennettu, testattu ja selitetty visualisointien avulla, ja tarkkuus on ilmoitettu. | Esitetty muistiinpanovihko ei ole merkitty tai sisältää virheitä. | Esitetty muistiinpanovihko on keskeneräinen. | + + + +[^1]:Tämän osion teksti perustuu [ARIMA-tehtävään](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/7-TimeSeries/README.md b/translations/fi/7-TimeSeries/README.md new file mode 100644 index 000000000..bb37ed7d3 --- /dev/null +++ b/translations/fi/7-TimeSeries/README.md @@ -0,0 +1,37 @@ + +# Johdatus aikasarjojen ennustamiseen + +Mitä aikasarjojen ennustaminen on? Kyse on tulevien tapahtumien ennustamisesta analysoimalla menneitä trendejä. + +## Alueellinen aihe: maailmanlaajuinen sähkönkulutus ✨ + +Näissä kahdessa oppitunnissa tutustut aikasarjojen ennustamiseen, joka on hieman vähemmän tunnettu koneoppimisen alue, mutta silti erittäin arvokas teollisuuden ja liiketoiminnan sovelluksissa sekä muilla aloilla. Vaikka neuroverkkoja voidaan käyttää näiden mallien hyödyllisyyden parantamiseen, tarkastelemme niitä klassisen koneoppimisen kontekstissa, kun mallit auttavat ennustamaan tulevaa suorituskykyä menneisyyden perusteella. + +Alueellinen painopisteemme on sähkönkulutus maailmassa, mielenkiintoinen tietoaineisto, jonka avulla opit ennustamaan tulevaa energiankulutusta menneiden kuormitusmallien perusteella. Voit nähdä, kuinka tällainen ennustaminen voi olla erittäin hyödyllistä liiketoimintaympäristössä. + +![sähköverkko](../../../7-TimeSeries/images/electric-grid.jpg) + +Kuva: [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) sähköpylväistä tiellä Rajasthanissa [Unsplashissa](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Oppitunnit + +1. [Johdatus aikasarjojen ennustamiseen](1-Introduction/README.md) +2. [ARIMA-aikasarjamallien rakentaminen](2-ARIMA/README.md) +3. [Support Vector Regressor -mallin rakentaminen aikasarjojen ennustamiseen](3-SVR/README.md) + +## Tekijät + +"Johdatus aikasarjojen ennustamiseen" on kirjoitettu ⚡️ [Francesca Lazzerin](https://twitter.com/frlazzeri) ja [Jen Looperin](https://twitter.com/jenlooper) toimesta. Muistiinpanot julkaistiin ensimmäisen kerran verkossa [Azure "Deep Learning For Time Series" -repo](https://github.com/Azure/DeepLearningForTimeSeriesForecasting), jonka Francesca Lazzeri alun perin kirjoitti. SVR-oppitunnin kirjoitti [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD). + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/1-QLearning/README.md b/translations/fi/8-Reinforcement/1-QLearning/README.md new file mode 100644 index 000000000..fdbf56643 --- /dev/null +++ b/translations/fi/8-Reinforcement/1-QLearning/README.md @@ -0,0 +1,256 @@ + +# Johdanto vahvistusoppimiseen ja Q-oppimiseen + +![Yhteenveto vahvistusoppimisesta koneoppimisessa sketchnotena](../../../../sketchnotes/ml-reinforcement.png) +> Sketchnote by [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Vahvistusoppiminen sisältää kolme tärkeää käsitettä: agentti, tilat ja joukko toimintoja per tila. Kun agentti suorittaa toiminnon tietyssä tilassa, se saa palkkion. Kuvittele tietokonepeli Super Mario. Sinä olet Mario, olet pelitasolla, seisot kallion reunalla. Yläpuolellasi on kolikko. Sinä, Mario, pelitasolla, tietyssä sijainnissa... se on tilasi. Yksi askel oikealle (toiminto) vie sinut reunalta alas, ja se antaisi sinulle matalan numeerisen pisteen. Kuitenkin hyppynapin painaminen antaisi sinulle pisteen ja pysyisit hengissä. Se on positiivinen lopputulos, ja sen pitäisi palkita sinut positiivisella numeerisella pisteellä. + +Käyttämällä vahvistusoppimista ja simulaattoria (peliä) voit oppia pelaamaan peliä maksimoidaksesi palkkion, joka on pysyä hengissä ja kerätä mahdollisimman paljon pisteitä. + +[![Johdanto vahvistusoppimiseen](https://img.youtube.com/vi/lDq_en8RNOo/0.jpg)](https://www.youtube.com/watch?v=lDq_en8RNOo) + +> 🎥 Klikkaa yllä olevaa kuvaa kuullaksesi Dmitryn keskustelua vahvistusoppimisesta + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +## Esivaatimukset ja asennus + +Tässä oppitunnissa kokeilemme Python-koodia. Sinun pitäisi pystyä suorittamaan tämän oppitunnin Jupyter Notebook -koodi joko omalla tietokoneellasi tai pilvessä. + +Voit avata [oppitunnin notebookin](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/notebook.ipynb) ja käydä läpi tämän oppitunnin rakentaaksesi. + +> **Huom:** Jos avaat tämän koodin pilvestä, sinun täytyy myös hakea [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py) -tiedosto, jota käytetään notebook-koodissa. Lisää se samaan hakemistoon kuin notebook. + +## Johdanto + +Tässä oppitunnissa tutkimme **[Pekka ja susi](https://en.wikipedia.org/wiki/Peter_and_the_Wolf)** -maailmaa, joka on saanut inspiraationsa venäläisen säveltäjän [Sergei Prokofjevin](https://en.wikipedia.org/wiki/Sergei_Prokofiev) musiikillisesta sadusta. Käytämme **vahvistusoppimista** antaaksemme Pekalle mahdollisuuden tutkia ympäristöään, kerätä herkullisia omenoita ja välttää kohtaamista suden kanssa. + +**Vahvistusoppiminen** (RL) on oppimistekniikka, joka mahdollistaa optimaalisen käyttäytymisen oppimisen **agentille** jossain **ympäristössä** suorittamalla lukuisia kokeita. Agentilla tässä ympäristössä tulisi olla jokin **tavoite**, joka määritellään **palkkiofunktiolla**. + +## Ympäristö + +Yksinkertaisuuden vuoksi kuvitelkaamme Pekan maailma neliötaulukoksi, jonka koko on `leveys` x `korkeus`, kuten tässä: + +![Pekan ympäristö](../../../../8-Reinforcement/1-QLearning/images/environment.png) + +Jokainen solu tässä taulukossa voi olla: + +* **maa**, jolla Pekka ja muut olennot voivat kävellä. +* **vesi**, jolla ei tietenkään voi kävellä. +* **puu** tai **ruoho**, paikka, jossa voi levätä. +* **omena**, joka edustaa jotain, mitä Pekka mielellään löytäisi ravinnokseen. +* **susi**, joka on vaarallinen ja tulisi välttää. + +On olemassa erillinen Python-moduuli, [`rlboard.py`](https://github.com/microsoft/ML-For-Beginners/blob/main/8-Reinforcement/1-QLearning/rlboard.py), joka sisältää koodin tämän ympäristön kanssa työskentelyyn. Koska tämä koodi ei ole tärkeä käsitteidemme ymmärtämisen kannalta, tuomme moduulin ja käytämme sitä luodaksemme esimerkkitaulukon (koodilohko 1): + +```python +from rlboard import * + +width, height = 8,8 +m = Board(width,height) +m.randomize(seed=13) +m.plot() +``` + +Tämän koodin pitäisi tulostaa ympäristön kuva, joka on samanlainen kuin yllä. + +## Toiminnot ja politiikka + +Esimerkissämme Pekan tavoitteena olisi löytää omena samalla välttäen suden ja muut esteet. Tätä varten hän voi käytännössä kävellä ympäriinsä, kunnes löytää omenan. + +Siksi missä tahansa sijainnissa hän voi valita yhden seuraavista toiminnoista: ylös, alas, vasemmalle ja oikealle. + +Määrittelemme nämä toiminnot sanakirjana ja yhdistämme ne vastaaviin koordinaattimuutoksiin. Esimerkiksi oikealle siirtyminen (`R`) vastaisi paria `(1,0)`. (koodilohko 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()) } +``` + +Yhteenvetona tämän skenaarion strategia ja tavoite ovat seuraavat: + +- **Strategia**, agenttimme (Pekan) strategia määritellään niin sanotulla **politiikalla**. Politiikka on funktio, joka palauttaa toiminnon missä tahansa tilassa. Meidän tapauksessamme ongelman tila esitetään taulukolla, mukaan lukien pelaajan nykyinen sijainti. + +- **Tavoite**, vahvistusoppimisen tavoite on lopulta oppia hyvä politiikka, joka mahdollistaa ongelman tehokkaan ratkaisemisen. Perustana tarkastelemme kuitenkin yksinkertaisinta politiikkaa, jota kutsutaan **satunnaiseksi kävelyksi**. + +## Satunnainen kävely + +Ratkaistaan ensin ongelmamme toteuttamalla satunnaisen kävelyn strategia. Satunnaisessa kävelyssä valitsemme seuraavan toiminnon satunnaisesti sallituista toiminnoista, kunnes saavumme omenalle (koodilohko 3). + +1. Toteuta satunnainen kävely alla olevalla koodilla: + + ```python + def random_policy(m): + return random.choice(list(actions)) + + def walk(m,policy,start_position=None): + n = 0 # number of steps + # set initial position + if start_position: + m.human = start_position + else: + m.random_start() + while True: + if m.at() == Board.Cell.apple: + return n # success! + if m.at() in [Board.Cell.wolf, Board.Cell.water]: + return -1 # eaten by wolf or drowned + while True: + a = actions[policy(m)] + new_pos = m.move_pos(m.human,a) + if m.is_valid(new_pos) and m.at(new_pos)!=Board.Cell.water: + m.move(a) # do the actual move + break + n+=1 + + walk(m,random_policy) + ``` + + `walk`-kutsun pitäisi palauttaa vastaavan polun pituus, joka voi vaihdella eri suorituskerroilla. + +1. Suorita kävelykokeilu useita kertoja (esimerkiksi 100) ja tulosta tuloksena saadut tilastot (koodilohko 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) + ``` + + Huomaa, että polun keskimääräinen pituus on noin 30–40 askelta, mikä on melko paljon, kun otetaan huomioon, että keskimääräinen etäisyys lähimpään omenaan on noin 5–6 askelta. + + Voit myös nähdä, miltä Pekan liikkuminen näyttää satunnaisen kävelyn aikana: + + ![Pekan satunnainen kävely](../../../../8-Reinforcement/1-QLearning/images/random_walk.gif) + +## Palkkiofunktio + +Jotta politiikkamme olisi älykkäämpi, meidän täytyy ymmärtää, mitkä siirrot ovat "parempia" kuin toiset. Tätä varten meidän täytyy määritellä tavoitteemme. + +Tavoite voidaan määritellä **palkkiofunktion** avulla, joka palauttaa jonkin pistemäärän jokaiselle tilalle. Mitä korkeampi numero, sitä parempi palkkiofunktio. (koodilohko 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 +``` + +Mielenkiintoinen asia palkkiofunktioissa on, että useimmissa tapauksissa *merkittävä palkkio annetaan vasta pelin lopussa*. Tämä tarkoittaa, että algoritmimme pitäisi jotenkin muistaa "hyvät" askeleet, jotka johtavat positiiviseen palkkioon lopussa, ja lisätä niiden merkitystä. Samoin kaikki siirrot, jotka johtavat huonoihin tuloksiin, tulisi estää. + +## Q-oppiminen + +Algoritmi, jota käsittelemme tässä, on nimeltään **Q-oppiminen**. Tässä algoritmissa politiikka määritellään funktiolla (tai tietorakenteella), jota kutsutaan **Q-taulukoksi**. Se tallentaa kunkin toiminnon "hyvyyden" tietyssä tilassa. + +Sitä kutsutaan Q-taulukoksi, koska se on usein kätevää esittää taulukkona tai monidimensionaalisena matriisina. Koska taulukkomme mitat ovat `leveys` x `korkeus`, voimme esittää Q-taulukon numpy-matriisina, jonka muoto on `leveys` x `korkeus` x `len(toiminnot)`: (koodilohko 6) + +```python +Q = np.ones((width,height,len(actions)),dtype=np.float)*1.0/len(actions) +``` + +Huomaa, että alustamme kaikki Q-taulukon arvot samalla arvolla, tässä tapauksessa - 0.25. Tämä vastaa "satunnaisen kävelyn" politiikkaa, koska kaikki siirrot jokaisessa tilassa ovat yhtä hyviä. Voimme välittää Q-taulukon `plot`-funktiolle visualisoidaksemme taulukon taulukossa: `m.plot(Q)`. + +![Pekan ympäristö](../../../../8-Reinforcement/1-QLearning/images/env_init.png) + +Jokaisen solun keskellä on "nuoli", joka osoittaa suositellun liikkumissuunnan. Koska kaikki suunnat ovat yhtä hyviä, näytetään piste. + +Nyt meidän täytyy suorittaa simulaatio, tutkia ympäristöämme ja oppia parempi Q-taulukon arvojen jakauma, joka mahdollistaa omenan löytämisen paljon nopeammin. + +## Q-oppimisen ydin: Bellmanin yhtälö + +Kun alamme liikkua, jokaisella toiminnolla on vastaava palkkio, eli voimme teoriassa valita seuraavan toiminnon korkeimman välittömän palkkion perusteella. Useimmissa tiloissa siirto ei kuitenkaan saavuta tavoitettamme, eli omenan löytämistä, joten emme voi heti päättää, mikä suunta on parempi. + +> Muista, että välitön tulos ei ole tärkein, vaan lopullinen tulos, jonka saamme simulaation lopussa. + +Jotta voimme ottaa huomioon viivästyneen palkkion, meidän täytyy käyttää **[dynaamisen ohjelmoinnin](https://en.wikipedia.org/wiki/Dynamic_programming)** periaatteita, jotka mahdollistavat ongelman tarkastelun rekursiivisesti. + +Oletetaan, että olemme nyt tilassa *s*, ja haluamme siirtyä seuraavaan tilaan *s'*. Tekemällä niin saamme välittömän palkkion *r(s,a)*, joka määritellään palkkiofunktiolla, plus jonkin tulevan palkkion. Jos oletamme, että Q-taulukkomme heijastaa oikein kunkin toiminnon "houkuttelevuuden", niin tilassa *s'* valitsemme toiminnon *a*, joka vastaa maksimiarvoa *Q(s',a')*. Näin ollen paras mahdollinen tuleva palkkio, jonka voimme saada tilassa *s*, määritellään `max` + +## Politiikan tarkistaminen + +Koska Q-taulukko listaa kunkin toiminnon "houkuttelevuuden" kussakin tilassa, sen avulla on melko helppoa määritellä tehokas navigointi maailmassamme. Yksinkertaisimmassa tapauksessa voimme valita toiminnon, joka vastaa korkeinta Q-taulukon arvoa: (koodilohko 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) +``` + +> Jos kokeilet yllä olevaa koodia useita kertoja, saatat huomata, että se joskus "jumittuu", ja sinun täytyy painaa STOP-painiketta keskeyttääksesi sen. Tämä johtuu siitä, että voi olla tilanteita, joissa kaksi tilaa "osoittavat" toisiaan optimaalisen Q-arvon suhteen, jolloin agentti päätyy liikkumaan näiden tilojen välillä loputtomasti. + +## 🚀Haaste + +> **Tehtävä 1:** Muokkaa `walk`-funktiota rajoittamaan polun maksimipituus tiettyyn askelmäärään (esimerkiksi 100), ja katso, kuinka yllä oleva koodi palauttaa tämän arvon ajoittain. + +> **Tehtävä 2:** Muokkaa `walk`-funktiota niin, ettei se palaa paikkoihin, joissa se on jo aiemmin käynyt. Tämä estää `walk`-toiminnon silmukoinnin, mutta agentti voi silti päätyä "jumiin" paikkaan, josta se ei pääse pois. + +## Navigointi + +Parempi navigointipolitiikka olisi se, jota käytimme harjoittelun aikana, ja joka yhdistää hyödyntämisen ja tutkimisen. Tässä politiikassa valitsemme kunkin toiminnon tietyllä todennäköisyydellä, suhteessa Q-taulukon arvoihin. Tämä strategia voi silti johtaa siihen, että agentti palaa jo tutkittuun paikkaan, mutta kuten alla olevasta koodista näet, se johtaa hyvin lyhyeen keskimääräiseen polkuun haluttuun sijaintiin (muista, että `print_statistics` suorittaa simulaation 100 kertaa): (koodilohko 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) +``` + +Kun suoritat tämän koodin, saat paljon lyhyemmän keskimääräisen polun pituuden kuin aiemmin, noin 3-6 välillä. + +## Oppimisprosessin tutkiminen + +Kuten mainitsimme, oppimisprosessi on tasapaino tutkimisen ja ongelmatilan rakenteesta saadun tiedon hyödyntämisen välillä. Olemme nähneet, että oppimisen tulokset (kyky auttaa agenttia löytämään lyhyt polku tavoitteeseen) ovat parantuneet, mutta on myös mielenkiintoista tarkastella, miten keskimääräinen polun pituus käyttäytyy oppimisprosessin aikana: + +## Oppimisen yhteenveto: + +- **Keskimääräinen polun pituus kasvaa**. Aluksi keskimääräinen polun pituus kasvaa. Tämä johtuu todennäköisesti siitä, että kun emme tiedä ympäristöstä mitään, olemme todennäköisesti jumissa huonoissa tiloissa, kuten vedessä tai suden luona. Kun opimme lisää ja alamme käyttää tätä tietoa, voimme tutkia ympäristöä pidempään, mutta emme silti tiedä kovin hyvin, missä omenat ovat. + +- **Polun pituus lyhenee oppimisen edetessä**. Kun opimme tarpeeksi, agentin on helpompi saavuttaa tavoite, ja polun pituus alkaa lyhentyä. Olemme kuitenkin edelleen avoimia tutkimiselle, joten poikkeamme usein parhaasta polusta ja tutkimme uusia vaihtoehtoja, mikä tekee polusta pidemmän kuin optimaalinen. + +- **Pituus kasvaa äkillisesti**. Graafista näemme myös, että jossain vaiheessa pituus kasvaa äkillisesti. Tämä osoittaa prosessin satunnaisen luonteen, ja että voimme jossain vaiheessa "pilata" Q-taulukon kertoimet korvaamalla ne uusilla arvoilla. Tämä tulisi ihanteellisesti minimoida pienentämällä oppimisnopeutta (esimerkiksi harjoittelun loppuvaiheessa säädämme Q-taulukon arvoja vain pienellä arvolla). + +Kaiken kaikkiaan on tärkeää muistaa, että oppimisprosessin onnistuminen ja laatu riippuvat merkittävästi parametreista, kuten oppimisnopeudesta, oppimisnopeuden vähenemisestä ja diskonttauskerroimesta. Näitä kutsutaan usein **hyperparametreiksi**, jotta ne erotetaan **parametreista**, joita optimoimme harjoittelun aikana (esimerkiksi Q-taulukon kertoimet). Parhaiden hyperparametriarvojen löytämistä kutsutaan **hyperparametrien optimoinniksi**, ja se ansaitsee oman aiheensa. + +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Tehtävä +[Realistisempi maailma](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/1-QLearning/assignment.md b/translations/fi/8-Reinforcement/1-QLearning/assignment.md new file mode 100644 index 000000000..a391a1e9a --- /dev/null +++ b/translations/fi/8-Reinforcement/1-QLearning/assignment.md @@ -0,0 +1,41 @@ + +# Realistisempi maailma + +Meidän tilanteessamme Peter pystyi liikkumaan lähes väsymättä tai tuntematta nälkää. Realistisemmassa maailmassa hänen täytyy välillä istua alas ja levätä, sekä syödä jotain. Tehdään maailmastamme realistisempi toteuttamalla seuraavat säännöt: + +1. Liikkuessaan paikasta toiseen Peter menettää **energiaa** ja kerää **väsymystä**. +2. Peter voi saada lisää energiaa syömällä omenoita. +3. Peter voi päästä eroon väsymyksestä lepäämällä puun alla tai ruohikolla (eli siirtymällä pelilaudan ruutuun, jossa on puu tai ruoho - vihreä kenttä). +4. Peterin täytyy löytää ja tappaa susi. +5. Jotta Peter voi tappaa suden, hänen täytyy olla tietyllä energian ja väsymyksen tasolla, muuten hän häviää taistelun. + +## Ohjeet + +Käytä alkuperäistä [notebook.ipynb](../../../../8-Reinforcement/1-QLearning/notebook.ipynb) -tiedostoa ratkaisusi lähtökohtana. + +Muokkaa yllä olevaa palkkiofunktiota pelin sääntöjen mukaisesti, suorita vahvistusoppimisalgoritmi löytääksesi parhaan strategian pelin voittamiseen, ja vertaa satunnaiskävelyn tuloksia algoritmisi tuloksiin pelien voittamisen ja häviämisen osalta. + +> **Note**: Uudessa maailmassasi tila on monimutkaisempi, ja ihmisen sijainnin lisäksi siihen sisältyy myös väsymyksen ja energian tasot. Voit valita, että esität tilan tuple-muodossa (Board,energy,fatigue), tai määritellä tilalle luokan (voit myös halutessasi johdattaa sen `Board`-luokasta), tai jopa muokata alkuperäistä `Board`-luokkaa tiedostossa [rlboard.py](../../../../8-Reinforcement/1-QLearning/rlboard.py). + +Ratkaisussasi säilytä satunnaiskävelystrategiasta vastaava koodi ja vertaa algoritmisi tuloksia satunnaiskävelyyn lopuksi. + +> **Note**: Saatat joutua säätämään hyperparametreja, jotta algoritmi toimii, erityisesti epochien määrää. Koska pelin onnistuminen (suden voittaminen) on harvinainen tapahtuma, voit odottaa paljon pidempää koulutusaikaa. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Notebook sisältää uuden maailman sääntöjen määrittelyn, Q-Learning-algoritmin ja tekstuaalisia selityksiä. Q-Learning pystyy merkittävästi parantamaan tuloksia verrattuna satunnaiskävelyyn. | Notebook on esitetty, Q-Learning on toteutettu ja parantaa tuloksia verrattuna satunnaiskävelyyn, mutta ei merkittävästi; tai notebook on huonosti dokumentoitu ja koodi ei ole hyvin jäsennelty | Yrityksiä maailman sääntöjen uudelleenmäärittelyyn on tehty, mutta Q-Learning-algoritmi ei toimi, tai palkkiofunktiota ei ole täysin määritelty | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/1-QLearning/solution/Julia/README.md b/translations/fi/8-Reinforcement/1-QLearning/solution/Julia/README.md new file mode 100644 index 000000000..df4637a54 --- /dev/null +++ b/translations/fi/8-Reinforcement/1-QLearning/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/1-QLearning/solution/R/README.md b/translations/fi/8-Reinforcement/1-QLearning/solution/R/README.md new file mode 100644 index 000000000..6b392cc7a --- /dev/null +++ b/translations/fi/8-Reinforcement/1-QLearning/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/2-Gym/README.md b/translations/fi/8-Reinforcement/2-Gym/README.md new file mode 100644 index 000000000..d6ea0080d --- /dev/null +++ b/translations/fi/8-Reinforcement/2-Gym/README.md @@ -0,0 +1,333 @@ + +## Esivaatimukset + +Tässä oppitunnissa käytämme kirjastoa nimeltä **OpenAI Gym** simuloimaan erilaisia **ympäristöjä**. Voit ajaa oppitunnin koodin paikallisesti (esim. Visual Studio Codessa), jolloin simulaatio avautuu uuteen ikkunaan. Jos suoritat koodin verkossa, sinun täytyy ehkä tehdä joitakin muutoksia koodiin, kuten kuvataan [tässä](https://towardsdatascience.com/rendering-openai-gym-envs-on-binder-and-google-colab-536f99391cc7). + +## OpenAI Gym + +Edellisessä oppitunnissa pelin säännöt ja tila määriteltiin itse luomassamme `Board`-luokassa. Tässä käytämme erityistä **simulaatioympäristöä**, joka simuloi tasapainottavan tangon fysiikkaa. Yksi suosituimmista simulaatioympäristöistä vahvistusoppimisalgoritmien kouluttamiseen on nimeltään [Gym](https://gym.openai.com/), jota ylläpitää [OpenAI](https://openai.com/). Tämän Gymin avulla voimme luoda erilaisia **ympäristöjä**, kuten cartpole-simulaation tai Atari-pelejä. + +> **Huomio**: Voit nähdä muita OpenAI Gymin tarjoamia ympäristöjä [täältä](https://gym.openai.com/envs/#classic_control). + +Aloitetaan asentamalla Gym ja tuomalla tarvittavat kirjastot (koodilohko 1): + +```python +import sys +!{sys.executable} -m pip install gym + +import gym +import matplotlib.pyplot as plt +import numpy as np +import random +``` + +## Harjoitus - alustetaan cartpole-ympäristö + +Cartpole-tasapainotusongelman kanssa työskentelyä varten meidän täytyy alustaa vastaava ympäristö. Jokainen ympäristö liittyy: + +- **Havaintotilaan**, joka määrittää rakenteen tiedoille, joita saamme ympäristöstä. Cartpole-ongelmassa saamme tangon sijainnin, nopeuden ja joitakin muita arvoja. + +- **Toimintatilaan**, joka määrittää mahdolliset toiminnot. Meidän tapauksessamme toimintatila on diskreetti ja sisältää kaksi toimintoa - **vasemmalle** ja **oikealle**. (koodilohko 2) + +1. Alustamiseen kirjoita seuraava koodi: + + ```python + env = gym.make("CartPole-v1") + print(env.action_space) + print(env.observation_space) + print(env.action_space.sample()) + ``` + +Näemme, miten ympäristö toimii, suorittamalla lyhyen simulaation 100 askeleen ajan. Jokaisella askeleella annamme yhden toiminnon suoritettavaksi - tässä simulaatiossa valitsemme toiminnon satunnaisesti `action_space`-tilasta. + +1. Suorita alla oleva koodi ja katso, mihin se johtaa. + + ✅ Muista, että on suositeltavaa ajaa tämä koodi paikallisessa Python-asennuksessa! (koodilohko 3) + + ```python + env.reset() + + for i in range(100): + env.render() + env.step(env.action_space.sample()) + env.close() + ``` + + Sinun pitäisi nähdä jotain tämän kuvan kaltaista: + + ![ei tasapainottava cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-nobalance.gif) + +1. Simulaation aikana meidän täytyy saada havaintoja päättääksemme, miten toimia. Itse asiassa `step`-funktio palauttaa nykyiset havainnot, palkintofunktion ja `done`-lipun, joka osoittaa, onko järkevää jatkaa simulaatiota vai ei: (koodilohko 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() + ``` + + Näet jotain tällaista notebookin tulosteessa: + + ```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 + ``` + + Simulaation jokaisella askeleella palautettu havaintovektori sisältää seuraavat arvot: + - Kärryn sijainti + - Kärryn nopeus + - Tangon kulma + - Tangon pyörimisnopeus + +1. Hanki näiden lukujen minimi- ja maksimiarvot: (koodilohko 5) + + ```python + print(env.observation_space.low) + print(env.observation_space.high) + ``` + + Saatat myös huomata, että palkintoarvo jokaisella simulaatioaskeleella on aina 1. Tämä johtuu siitä, että tavoitteemme on selviytyä mahdollisimman pitkään, eli pitää tanko kohtuullisen pystysuorassa mahdollisimman pitkään. + + ✅ Itse asiassa CartPole-simulaatio katsotaan ratkaistuksi, jos onnistumme saamaan keskimääräisen palkinnon 195 yli 100 peräkkäisen kokeilun aikana. + +## Tilojen diskretisointi + +Q-Learningissa meidän täytyy rakentaa Q-taulukko, joka määrittää, mitä tehdä kussakin tilassa. Jotta voimme tehdä tämän, tilan täytyy olla **diskreetti**, tarkemmin sanottuna sen täytyy sisältää rajallinen määrä diskreettejä arvoja. Siksi meidän täytyy jollain tavalla **diskretisoida** havaintomme, kartoittaen ne rajalliseen joukkoon tiloja. + +Tähän on muutamia tapoja: + +- **Jakaminen osiin**. Jos tiedämme tietyn arvon välin, voimme jakaa tämän välin useisiin **osiin** ja korvata arvon sen osan numerolla, johon se kuuluu. Tämä voidaan tehdä numpy-kirjaston [`digitize`](https://numpy.org/doc/stable/reference/generated/numpy.digitize.html)-menetelmällä. Tässä tapauksessa tiedämme tarkasti tilan koon, koska se riippuu valitsemastamme osien määrästä digitalisointia varten. + +✅ Voimme käyttää lineaarista interpolointia tuodaksemme arvot rajalliseen väliin (esim. -20:stä 20:een) ja sitten muuntaa numerot kokonaisluvuiksi pyöristämällä. Tämä antaa meille hieman vähemmän kontrollia tilan koosta, erityisesti jos emme tiedä tarkkoja syötearvojen rajoja. Esimerkiksi meidän tapauksessamme 2 neljästä arvosta ei ole ylä-/alarajoja, mikä voi johtaa äärettömään määrään tiloja. + +Esimerkissämme käytämme toista lähestymistapaa. Kuten saatat myöhemmin huomata, huolimatta määrittelemättömistä ylä-/alarajoista, nämä arvot harvoin saavuttavat tiettyjen rajallisten väliarvojen ulkopuolisia arvoja, joten tilat, joilla on äärimmäisiä arvoja, ovat hyvin harvinaisia. + +1. Tässä on funktio, joka ottaa mallimme havainnon ja tuottaa 4 kokonaislukuarvon tuplen: (koodilohko 6) + + ```python + def discretize(x): + return tuple((x/np.array([0.25, 0.25, 0.01, 0.1])).astype(np.int)) + ``` + +1. Tutkitaan myös toinen diskretisointimenetelmä käyttäen osia: (koodilohko 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. Suoritetaan lyhyt simulaatio ja tarkkaillaan näitä diskreettejä ympäristöarvoja. Voit kokeilla sekä `discretize`- että `discretize_bins`-funktioita ja nähdä, onko niissä eroa. + + ✅ `discretize_bins` palauttaa osan numeron, joka alkaa nollasta. Näin ollen syötearvojen ollessa lähellä 0 se palauttaa numeron välin keskeltä (10). `discretize`-funktiossa emme välittäneet lähtöarvojen välistä, jolloin arvot voivat olla negatiivisia, ja 0 vastaa 0:aa. (koodilohko 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() + ``` + + ✅ Poista kommentti riviltä, joka alkaa `env.render`, jos haluat nähdä, miten ympäristö suoritetaan. Muutoin voit suorittaa sen taustalla, mikä on nopeampaa. Käytämme tätä "näkymätöntä" suoritusta Q-Learning-prosessimme aikana. + +## Q-taulukon rakenne + +Edellisessä oppitunnissa tila oli yksinkertainen pariluku välillä 0–8, ja siksi oli kätevää esittää Q-taulukko numpy-tensorina, jonka muoto oli 8x8x2. Jos käytämme osien diskretisointia, tilavektorimme koko on myös tiedossa, joten voimme käyttää samaa lähestymistapaa ja esittää tilan taulukolla, jonka muoto on 20x20x10x10x2 (tässä 2 on toimintatilan ulottuvuus, ja ensimmäiset ulottuvuudet vastaavat osien määrää, joita olemme valinneet kullekin havaintotilan parametrille). + +Joskus havaintotilan tarkat ulottuvuudet eivät kuitenkaan ole tiedossa. `discretize`-funktion tapauksessa emme voi koskaan olla varmoja, että tilamme pysyy tiettyjen rajojen sisällä, koska jotkut alkuperäisistä arvoista eivät ole rajattuja. Siksi käytämme hieman erilaista lähestymistapaa ja esittelemme Q-taulukon sanakirjana. + +1. Käytä paria *(tila, toiminto)* sanakirjan avaimena, ja arvo vastaisi Q-taulukon arvoa. (koodilohko 9) + + ```python + Q = {} + actions = (0,1) + + def qvalues(state): + return [Q.get((state,a),0) for a in actions] + ``` + + Tässä määrittelemme myös funktion `qvalues()`, joka palauttaa listan Q-taulukon arvoista tietylle tilalle, joka vastaa kaikkia mahdollisia toimintoja. Jos merkintää ei ole Q-taulukossa, palautamme oletusarvona 0. + +## Aloitetaan Q-Learning + +Nyt olemme valmiita opettamaan Peteriä tasapainottamaan! + +1. Asetetaan ensin joitakin hyperparametreja: (koodilohko 10) + + ```python + # hyperparameters + alpha = 0.3 + gamma = 0.9 + epsilon = 0.90 + ``` + + Tässä `alpha` on **oppimisnopeus**, joka määrittää, missä määrin meidän pitäisi säätää Q-taulukon nykyisiä arvoja jokaisella askeleella. Edellisessä oppitunnissa aloitimme arvolla 1 ja sitten vähensimme `alpha`-arvoa koulutuksen aikana. Tässä esimerkissä pidämme sen vakiona yksinkertaisuuden vuoksi, ja voit kokeilla `alpha`-arvojen säätämistä myöhemmin. + + `gamma` on **diskonttaustekijä**, joka osoittaa, missä määrin meidän pitäisi priorisoida tulevaa palkintoa nykyisen palkinnon yli. + + `epsilon` on **tutkimus/hyödyntämistekijä**, joka määrittää, pitäisikö meidän suosia tutkimista vai hyödyntämistä. Algoritmissamme valitsemme `epsilon`-prosentissa tapauksista seuraavan toiminnon Q-taulukon arvojen mukaan, ja jäljellä olevissa tapauksissa suoritamme satunnaisen toiminnon. Tämä antaa meille mahdollisuuden tutkia hakutilan alueita, joita emme ole koskaan nähneet. + + ✅ Tasapainottamisen kannalta satunnaisen toiminnon valitseminen (tutkiminen) toimisi kuin satunnainen isku väärään suuntaan, ja tangon täytyisi oppia, miten palauttaa tasapaino näistä "virheistä". + +### Paranna algoritmia + +Voimme myös tehdä kaksi parannusta algoritmiimme edellisestä oppitunnista: + +- **Laske keskimääräinen kumulatiivinen palkinto** useiden simulaatioiden aikana. Tulostamme edistymisen joka 5000 iteraation jälkeen ja keskiarvoistamme kumulatiivisen palkinnon tuolta ajalta. Tämä tarkoittaa, että jos saamme yli 195 pistettä, voimme pitää ongelman ratkaistuna, jopa vaadittua korkeammalla laadulla. + +- **Laske maksimaalinen keskimääräinen kumulatiivinen tulos**, `Qmax`, ja tallennamme Q-taulukon, joka vastaa kyseistä tulosta. Kun suoritat koulutuksen, huomaat, että joskus keskimääräinen kumulatiivinen tulos alkaa laskea, ja haluamme säilyttää Q-taulukon arvot, jotka vastaavat parasta mallia, joka havaittiin koulutuksen aikana. + +1. Kerää kaikki kumulatiiviset palkinnot jokaisessa simulaatiossa `rewards`-vektoriin myöhempää visualisointia varten. (koodilohko 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=[] + ``` + +Mitä voit huomata näistä tuloksista: + +- **Lähellä tavoitettamme**. Olemme hyvin lähellä tavoitteen saavuttamista, eli 195 kumulatiivista palkintoa yli 100+ peräkkäisen simulaation aikana, tai olemme ehkä jo saavuttaneet sen! Vaikka saisimme pienempiä lukuja, emme silti tiedä, koska keskiarvoistamme 5000 suorituksen aikana, ja virallinen kriteeri vaatii vain 100 suoritusta. + +- **Palkinto alkaa laskea**. Joskus palkinto alkaa laskea, mikä tarkoittaa, että voimme "tuhota" jo opitut arvot Q-taulukossa arvoilla, jotka pahentavat tilannetta. + +Tämä havainto näkyy selkeämmin, jos piirrämme koulutuksen edistymisen. + +## Koulutuksen edistymisen visualisointi + +Koulutuksen aikana olemme keränneet kumulatiivisen palkintoarvon jokaisessa iteraatiossa `rewards`-vektoriin. Tässä on, miltä se näyttää, kun piirrämme sen iteraation numeroa vastaan: + +```python +plt.plot(rewards) +``` + +![raaka edistyminen](../../../../8-Reinforcement/2-Gym/images/train_progress_raw.png) + +Tästä graafista ei ole mahdollista päätellä mitään, koska stokastisen koulutusprosessin luonteen vuoksi koulutussessioiden pituus vaihtelee suuresti. Jotta graafi olisi ymmärrettävämpi, voimme laskea **juoksevan keskiarvon** sarjasta kokeita, esimerkiksi 100. Tämä voidaan tehdä kätevästi `np.convolve`-menetelmällä: (koodilohko 12) + +```python +def running_average(x,window): + return np.convolve(x,np.ones(window)/window,mode='valid') + +plt.plot(running_average(rewards,100)) +``` + +![koulutuksen edistyminen](../../../../8-Reinforcement/2-Gym/images/train_progress_runav.png) + +## Hyperparametrien säätäminen + +Jotta oppiminen olisi vakaampaa, kannattaa säätää joitakin hyperparametreja koulutuksen aikana. Erityisesti: + +- **Oppimisnopeuden**, `alpha`, osalta voimme aloittaa arvoilla lähellä 1 ja sitten vähentää parametria. Ajan myötä saamme hyviä todennäköisyysarvoja Q-taulukkoon, ja siksi meidän pitäisi säätää niitä hieman, eikä korvata kokonaan uusilla arvoilla. + +- **Lisää epsilonia**. Voimme haluta lisätä `epsilon`-arvoa hitaasti, jotta tutkimme vähemmän ja hyödynnämme enemmän. Todennäköisesti kannattaa aloittaa pienemmällä `epsilon`-arvolla ja nostaa se lähes 1:een. +> **Tehtävä 1**: Kokeile hyperparametrien arvoja ja katso, voitko saavuttaa suuremman kumulatiivisen palkkion. Pääsetkö yli 195? +> **Tehtävä 2**: Jotta ongelma ratkaistaan virallisesti, sinun täytyy saavuttaa 195 keskimääräinen palkinto 100 peräkkäisen ajon aikana. Mittaa tämä koulutuksen aikana ja varmista, että olet ratkaissut ongelman virallisesti! + +## Tulosten tarkastelu käytännössä + +Olisi mielenkiintoista nähdä, miten koulutettu malli käyttäytyy. Suoritetaan simulaatio ja käytetään samaa toimintojen valintastrategiaa kuin koulutuksen aikana, näytteistämällä Q-taulukon todennäköisyysjakauman mukaan: (koodilohko 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() +``` + +Näet jotain tällaista: + +![tasapainottava cartpole](../../../../8-Reinforcement/2-Gym/images/cartpole-balance.gif) + +--- + +## 🚀Haaste + +> **Tehtävä 3**: Tässä käytimme Q-taulukon lopullista versiota, joka ei välttämättä ole paras. Muista, että olemme tallentaneet parhaiten toimivan Q-taulukon `Qbest`-muuttujaan! Kokeile samaa esimerkkiä parhaiten toimivalla Q-taulukolla kopioimalla `Qbest` `Q`:n tilalle ja katso, huomaatko eroa. + +> **Tehtävä 4**: Tässä emme valinneet parasta toimintoa jokaisella askeleella, vaan näytteistimme vastaavan todennäköisyysjakauman mukaan. Olisiko järkevämpää aina valita paras toiminto, jolla on korkein Q-taulukon arvo? Tämä voidaan tehdä käyttämällä `np.argmax`-funktiota löytääkseen toimintojen numeron, joka vastaa korkeinta Q-taulukon arvoa. Toteuta tämä strategia ja katso, parantaako se tasapainottamista. + +## [Luentojälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Tehtävä +[Harjoittele Mountain Car](assignment.md) + +## Yhteenveto + +Olemme nyt oppineet, kuinka kouluttaa agentteja saavuttamaan hyviä tuloksia pelkästään tarjoamalla heille palkintofunktion, joka määrittelee pelin halutun tilan, ja antamalla heille mahdollisuuden älykkäästi tutkia hakutilaa. Olemme onnistuneesti soveltaneet Q-Learning-algoritmia sekä diskreeteissä että jatkuvissa ympäristöissä, mutta diskreeteillä toiminnoilla. + +On myös tärkeää tutkia tilanteita, joissa toimintotila on jatkuva ja havaintotila paljon monimutkaisempi, kuten kuva Atari-pelin näytöstä. Näissä ongelmissa tarvitsemme usein tehokkaampia koneoppimistekniikoita, kuten neuroverkkoja, saavuttaaksemme hyviä tuloksia. Nämä edistyneemmät aiheet ovat tulevan kehittyneemmän tekoälykurssimme aiheena. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/2-Gym/assignment.md b/translations/fi/8-Reinforcement/2-Gym/assignment.md new file mode 100644 index 000000000..7dec023e6 --- /dev/null +++ b/translations/fi/8-Reinforcement/2-Gym/assignment.md @@ -0,0 +1,57 @@ + +# Kouluta Mountain Car + +[OpenAI Gym](http://gym.openai.com) on suunniteltu siten, että kaikki ympäristöt tarjoavat saman API:n - eli samat metodit `reset`, `step` ja `render`, sekä samat abstraktiot **toimintatilasta** ja **havaintotilasta**. Näin ollen pitäisi olla mahdollista soveltaa samoja vahvistusoppimisalgoritmeja eri ympäristöihin vähäisin koodimuutoksin. + +## Mountain Car -ympäristö + +[Mountain Car -ympäristö](https://gym.openai.com/envs/MountainCar-v0/) sisältää auton, joka on jumissa laaksossa: + +Tavoitteena on päästä ulos laaksosta ja napata lippu tekemällä jokaisella askeleella yksi seuraavista toimista: + +| Arvo | Merkitys | +|---|---| +| 0 | Kiihdytä vasemmalle | +| 1 | Älä kiihdytä | +| 2 | Kiihdytä oikealle | + +Tämän ongelman päätemppu on kuitenkin se, että auton moottori ei ole tarpeeksi voimakas kiivetäkseen vuoren huipulle yhdellä kerralla. Siksi ainoa tapa onnistua on ajaa edestakaisin keräten vauhtia. + +Havaintotila koostuu vain kahdesta arvosta: + +| Num | Havainto | Min | Max | +|-----|---------------|-------|-------| +| 0 | Auton sijainti | -1.2 | 0.6 | +| 1 | Auton nopeus | -0.07 | 0.07 | + +Mountain Car -ympäristön palkkiojärjestelmä on melko haastava: + + * Palkkio 0 annetaan, jos agentti saavuttaa lipun (sijainti = 0.5) vuoren huipulla. + * Palkkio -1 annetaan, jos agentin sijainti on alle 0.5. + +Episodi päättyy, jos auton sijainti on yli 0.5 tai episodin pituus ylittää 200. + +## Ohjeet + +Sovella vahvistusoppimisalgoritmiamme ratkaistaksesi Mountain Car -ongelman. Aloita olemassa olevasta [notebook.ipynb](../../../../8-Reinforcement/2-Gym/notebook.ipynb) -koodista, korvaa uusi ympäristö, muuta tilan diskretisointifunktioita ja yritä saada olemassa oleva algoritmi toimimaan vähäisin koodimuutoksin. Optimoi tulos säätämällä hyperparametreja. + +> **Huom**: Hyperparametrien säätöä tarvitaan todennäköisesti, jotta algoritmi konvergoituu. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ----------- | -------- | ------------- | +| | Q-Learning -algoritmi on onnistuneesti sovitettu CartPole-esimerkistä vähäisin koodimuutoksin, ja se pystyy ratkaisemaan lipun nappaamisen alle 200 askeleessa. | Uusi Q-Learning -algoritmi on otettu käyttöön Internetistä, mutta se on hyvin dokumentoitu; tai olemassa oleva algoritmi on sovitettu, mutta ei saavuta toivottuja tuloksia. | Opiskelija ei ole onnistunut soveltamaan mitään algoritmia, mutta on tehnyt merkittäviä edistysaskeleita ratkaisun suuntaan (toteuttanut tilan diskretisoinnin, Q-Table -tietorakenteen jne.). | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/2-Gym/solution/Julia/README.md b/translations/fi/8-Reinforcement/2-Gym/solution/Julia/README.md new file mode 100644 index 000000000..9b55a5500 --- /dev/null +++ b/translations/fi/8-Reinforcement/2-Gym/solution/Julia/README.md @@ -0,0 +1,15 @@ + + + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/2-Gym/solution/R/README.md b/translations/fi/8-Reinforcement/2-Gym/solution/R/README.md new file mode 100644 index 000000000..652affa7b --- /dev/null +++ b/translations/fi/8-Reinforcement/2-Gym/solution/R/README.md @@ -0,0 +1,15 @@ + +tämä on väliaikainen paikkamerkki + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/8-Reinforcement/README.md b/translations/fi/8-Reinforcement/README.md new file mode 100644 index 000000000..d78e967fc --- /dev/null +++ b/translations/fi/8-Reinforcement/README.md @@ -0,0 +1,67 @@ + +# Johdatus vahvistusoppimiseen + +Vahvistusoppiminen, RL, nähdään yhtenä koneoppimisen perusparadigmoista, yhdessä ohjatun oppimisen ja ohjaamattoman oppimisen kanssa. RL keskittyy päätöksentekoon: oikeiden päätösten tekemiseen tai ainakin oppimiseen niistä. + +Kuvittele, että sinulla on simuloitu ympäristö, kuten osakemarkkinat. Mitä tapahtuu, jos asetat tietyn sääntelyn? Onko sillä positiivinen vai negatiivinen vaikutus? Jos jotain negatiivista tapahtuu, sinun täytyy ottaa tämä _negatiivinen vahvistus_, oppia siitä ja muuttaa suuntaa. Jos tulos on positiivinen, sinun täytyy rakentaa sen _positiivisen vahvistuksen_ varaan. + +![peter ja susi](../../../8-Reinforcement/images/peter.png) + +> Peter ja hänen ystävänsä yrittävät paeta nälkäistä sutta! Kuva: [Jen Looper](https://twitter.com/jenlooper) + +## Alueellinen aihe: Peter ja susi (Venäjä) + +[Peter ja susi](https://en.wikipedia.org/wiki/Peter_and_the_Wolf) on venäläisen säveltäjän [Sergei Prokofjevin](https://en.wikipedia.org/wiki/Sergei_Prokofiev) kirjoittama musiikillinen satu. Se kertoo nuoresta pioneeri Peteristä, joka rohkeasti lähtee talostaan metsän aukealle jahtamaan sutta. Tässä osiossa koulutamme koneoppimisalgoritmeja, jotka auttavat Peteriä: + +- **Tutkimaan** ympäröivää aluetta ja rakentamaan optimaalisen navigointikartan +- **Oppimaan** käyttämään skeittilautaa ja tasapainottamaan sillä, jotta hän voi liikkua nopeammin. + +[![Peter ja susi](https://img.youtube.com/vi/Fmi5zHg4QSM/0.jpg)](https://www.youtube.com/watch?v=Fmi5zHg4QSM) + +> 🎥 Klikkaa yllä olevaa kuvaa kuunnellaksesi Prokofjevin Peter ja susi + +## Vahvistusoppiminen + +Aiemmissa osioissa olet nähnyt kaksi esimerkkiä koneoppimisongelmista: + +- **Ohjattu oppiminen**, jossa meillä on datakokonaisuuksia, jotka ehdottavat esimerkkiratkaisuja ongelmaan, jonka haluamme ratkaista. [Luokittelu](../4-Classification/README.md) ja [regressio](../2-Regression/README.md) ovat ohjatun oppimisen tehtäviä. +- **Ohjaamaton oppiminen**, jossa meillä ei ole merkittyä harjoitusdataa. Tärkein esimerkki ohjaamattomasta oppimisesta on [Klusterointi](../5-Clustering/README.md). + +Tässä osiossa esittelemme uuden tyyppisen oppimisongelman, joka ei vaadi merkittyä harjoitusdataa. Tällaisia ongelmia on useita: + +- **[Puoliohjattu oppiminen](https://wikipedia.org/wiki/Semi-supervised_learning)**, jossa meillä on paljon merkitsemätöntä dataa, jota voidaan käyttää mallin esikoulutukseen. +- **[Vahvistusoppiminen](https://wikipedia.org/wiki/Reinforcement_learning)**, jossa agentti oppii käyttäytymään tekemällä kokeita jossain simuloidussa ympäristössä. + +### Esimerkki - tietokonepeli + +Oletetaan, että haluat opettaa tietokoneen pelaamaan peliä, kuten shakkia tai [Super Mario](https://wikipedia.org/wiki/Super_Mario). Jotta tietokone voisi pelata peliä, sen täytyy ennustaa, mikä siirto tehdään kussakin pelitilanteessa. Vaikka tämä saattaa vaikuttaa luokitteluongelmalta, se ei ole sitä - koska meillä ei ole datakokonaisuutta, jossa olisi tilat ja vastaavat toiminnot. Vaikka meillä saattaisi olla dataa, kuten olemassa olevia shakkimatseja tai pelaajien Super Mario -pelitallenteita, on todennäköistä, että tämä data ei riittävästi kata suurta määrää mahdollisia tiloja. + +Sen sijaan, että etsisimme olemassa olevaa pelidataa, **Vahvistusoppiminen** (RL) perustuu ideaan, että *tietokone pelaa* monta kertaa ja tarkkailee tulosta. Näin ollen vahvistusoppimisen soveltamiseen tarvitaan kaksi asiaa: + +- **Ympäristö** ja **simulaattori**, jotka mahdollistavat pelin pelaamisen monta kertaa. Tämä simulaattori määrittelisi kaikki pelisäännöt sekä mahdolliset tilat ja toiminnot. + +- **Palkintofunktio**, joka kertoo, kuinka hyvin suoriuduimme kunkin siirron tai pelin aikana. + +Suurin ero muiden koneoppimisen tyyppien ja RL:n välillä on se, että RL:ssä emme yleensä tiedä, voitammeko vai häviämme, ennen kuin peli on ohi. Näin ollen emme voi sanoa, onko tietty siirto yksinään hyvä vai ei - saamme palkinnon vasta pelin lopussa. Tavoitteemme on suunnitella algoritmeja, jotka mahdollistavat mallin kouluttamisen epävarmoissa olosuhteissa. Opimme yhdestä RL-algoritmista nimeltä **Q-oppiminen**. + +## Oppitunnit + +1. [Johdatus vahvistusoppimiseen ja Q-oppimiseen](1-QLearning/README.md) +2. [Simulaatioympäristön käyttö Gymissä](2-Gym/README.md) + +## Tekijät + +"Johdatus vahvistusoppimiseen" on kirjoitettu ♥️:lla [Dmitry Soshnikov](http://soshnikov.com) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/9-Real-World/1-Applications/README.md b/translations/fi/9-Real-World/1-Applications/README.md new file mode 100644 index 000000000..8a72d4a22 --- /dev/null +++ b/translations/fi/9-Real-World/1-Applications/README.md @@ -0,0 +1,159 @@ + +# Jälkikirjoitus: Koneoppiminen tosielämässä + +![Yhteenveto koneoppimisesta tosielämässä sketchnotessa](../../../../sketchnotes/ml-realworld.png) +> Sketchnote: [Tomomi Imura](https://www.twitter.com/girlie_mac) + +Tässä oppimateriaalissa olet oppinut monia tapoja valmistella dataa koulutusta varten ja luoda koneoppimismalleja. Olet rakentanut sarjan klassisia regressio-, klusterointi-, luokittelu-, luonnollisen kielen käsittely- ja aikasarjamalleja. Onnittelut! Nyt saatat miettiä, mihin tämä kaikki johtaa... mitkä ovat näiden mallien tosielämän sovellukset? + +Vaikka teollisuudessa on paljon kiinnostusta tekoälyyn, joka yleensä hyödyntää syväoppimista, klassisilla koneoppimismalleilla on edelleen arvokkaita sovelluksia. Saatat jopa käyttää joitakin näistä sovelluksista tänään! Tässä oppitunnissa tutustut siihen, miten kahdeksan eri toimialaa ja asiantuntija-alueet käyttävät näitä malleja tehdäkseen sovelluksistaan suorituskykyisempiä, luotettavampia, älykkäämpiä ja käyttäjille arvokkaampia. + +## [Ennakkokysely](https://ff-quizzes.netlify.app/en/ml/) + +## 💰 Rahoitus + +Rahoitussektori tarjoaa monia mahdollisuuksia koneoppimiselle. Monet tämän alueen ongelmat soveltuvat mallinnettaviksi ja ratkaistaviksi koneoppimisen avulla. + +### Luottokorttipetosten tunnistaminen + +Olemme oppineet [k-means-klusteroinnista](../../5-Clustering/2-K-Means/README.md) aiemmin kurssilla, mutta miten sitä voidaan käyttää luottokorttipetoksiin liittyvien ongelmien ratkaisemiseen? + +K-means-klusterointi on hyödyllinen luottokorttipetosten tunnistustekniikassa, jota kutsutaan **poikkeavuuksien tunnistamiseksi**. Poikkeavuudet tai havainnot, jotka poikkeavat datan joukosta, voivat kertoa meille, käytetäänkö luottokorttia normaalisti vai tapahtuuko jotain epätavallista. Alla olevassa artikkelissa kuvataan, kuinka luottokorttidata voidaan järjestää k-means-klusterointialgoritmin avulla ja jokainen tapahtuma voidaan liittää klusteriin sen perusteella, kuinka poikkeava se vaikuttaa olevan. Tämän jälkeen voidaan arvioida riskialttiimmat klusterit petollisten ja laillisten tapahtumien osalta. +[Viite](https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.680.1195&rep=rep1&type=pdf) + +### Varainhoito + +Varainhoidossa yksilö tai yritys hallinnoi sijoituksia asiakkaidensa puolesta. Heidän tehtävänsä on ylläpitää ja kasvattaa varallisuutta pitkällä aikavälillä, joten on tärkeää valita sijoituksia, jotka tuottavat hyvin. + +Yksi tapa arvioida, miten tietty sijoitus tuottaa, on tilastollinen regressio. [Lineaarinen regressio](../../2-Regression/1-Tools/README.md) on arvokas työkalu rahaston suorituskyvyn ymmärtämiseen suhteessa vertailuarvoon. Voimme myös päätellä, ovatko regressiotulokset tilastollisesti merkittäviä eli kuinka paljon ne vaikuttaisivat asiakkaan sijoituksiin. Analyysiä voidaan laajentaa käyttämällä monimuuttujaregressiota, jossa otetaan huomioon lisäriskitekijöitä. Esimerkki siitä, miten tämä toimisi tietyn rahaston kohdalla, löytyy alla olevasta artikkelista. +[Viite](http://www.brightwoodventures.com/evaluating-fund-performance-using-regression/) + +## 🎓 Koulutus + +Koulutussektori on myös erittäin mielenkiintoinen alue, jossa koneoppimista voidaan soveltaa. Täällä voidaan käsitellä kiinnostavia ongelmia, kuten huijaamisen tunnistamista kokeissa tai esseissä tai puolueellisuuden hallintaa, tahallista tai tahatonta, korjausprosessissa. + +### Opiskelijoiden käyttäytymisen ennustaminen + +[Coursera](https://coursera.com), verkossa toimiva avoin kurssitarjoaja, ylläpitää erinomaista teknistä blogia, jossa he keskustelevat monista teknisistä päätöksistä. Tässä tapaustutkimuksessa he piirsivät regressioviivan yrittääkseen tutkia korrelaatiota matalan NPS-arvosanan (Net Promoter Score) ja kurssin säilyttämisen tai keskeyttämisen välillä. +[Viite](https://medium.com/coursera-engineering/controlled-regression-quantifying-the-impact-of-course-quality-on-learner-retention-31f956bd592a) + +### Puolueellisuuden vähentäminen + +[Grammarly](https://grammarly.com), kirjoitusavustaja, joka tarkistaa oikeinkirjoitus- ja kielioppivirheet, käyttää kehittyneitä [luonnollisen kielen käsittelyjärjestelmiä](../../6-NLP/README.md) tuotteissaan. He julkaisivat mielenkiintoisen tapaustutkimuksen teknisessä blogissaan siitä, miten he käsittelivät sukupuolten välistä puolueellisuutta koneoppimisessa, mistä opit [reiluuden alkeisoppitunnilla](../../1-Introduction/3-fairness/README.md). +[Viite](https://www.grammarly.com/blog/engineering/mitigating-gender-bias-in-autocorrect/) + +## 👜 Vähittäiskauppa + +Vähittäiskauppasektori voi ehdottomasti hyötyä koneoppimisen käytöstä, aina paremman asiakaspolun luomisesta varaston optimoituun hallintaan. + +### Asiakaspolun personointi + +Wayfairilla, yrityksellä, joka myy kodin tavaroita kuten huonekaluja, asiakkaiden auttaminen löytämään oikeat tuotteet heidän makuunsa ja tarpeisiinsa on ensisijaisen tärkeää. Tässä artikkelissa yrityksen insinöörit kuvaavat, kuinka he käyttävät koneoppimista ja NLP:tä "tuodakseen esiin oikeat tulokset asiakkaille". Erityisesti heidän Query Intent Engine -järjestelmänsä on rakennettu käyttämään entiteettien tunnistusta, luokittelijan koulutusta, omaisuuden ja mielipiteiden tunnistusta sekä sentimenttien merkitsemistä asiakasarvosteluissa. Tämä on klassinen esimerkki siitä, miten NLP toimii verkkokaupassa. +[Viite](https://www.aboutwayfair.com/tech-innovation/how-we-use-machine-learning-and-natural-language-processing-to-empower-search) + +### Varastonhallinta + +Innovatiiviset, ketterät yritykset kuten [StitchFix](https://stitchfix.com), laatikkopalvelu, joka lähettää vaatteita kuluttajille, luottavat vahvasti koneoppimiseen suositusten ja varastonhallinnan osalta. Heidän stailausryhmänsä työskentelevät yhdessä heidän kaupallisten tiimiensä kanssa: "yksi datatieteilijämme kokeili geneettistä algoritmia ja sovelsi sitä vaatteisiin ennustaakseen, mikä olisi menestyksekäs vaatekappale, joka ei vielä ole olemassa. Esittelimme sen kaupalliselle tiimille, ja nyt he voivat käyttää sitä työkaluna." +[Viite](https://www.zdnet.com/article/how-stitch-fix-uses-machine-learning-to-master-the-science-of-styling/) + +## 🏥 Terveysala + +Terveysala voi hyödyntää koneoppimista tutkimustehtävien optimointiin sekä logistisiin ongelmiin, kuten potilaiden uudelleenottamiseen tai tautien leviämisen estämiseen. + +### Kliinisten tutkimusten hallinta + +Kliinisten tutkimusten toksisuus on suuri huolenaihe lääkkeiden valmistajille. Kuinka paljon toksisuutta on siedettävää? Tässä tutkimuksessa eri kliinisten tutkimusmenetelmien analysointi johti uuden lähestymistavan kehittämiseen kliinisten tutkimusten tulosten ennustamiseksi. Erityisesti he pystyivät käyttämään random forest -menetelmää tuottaakseen [luokittelijan](../../4-Classification/README.md), joka pystyy erottamaan lääkeryhmät toisistaan. +[Viite](https://www.sciencedirect.com/science/article/pii/S2451945616302914) + +### Sairaalan uudelleenottamisen hallinta + +Sairaalahoito on kallista, erityisesti silloin, kun potilaat täytyy ottaa uudelleen hoitoon. Tässä artikkelissa käsitellään yritystä, joka käyttää koneoppimista ennustamaan uudelleenottamisen todennäköisyyttä [klusterointialgoritmien](../../5-Clustering/README.md) avulla. Nämä klusterit auttavat analyytikkoja "löytämään ryhmiä uudelleenottamisista, joilla saattaa olla yhteinen syy". +[Viite](https://healthmanagement.org/c/healthmanagement/issuearticle/hospital-readmissions-and-machine-learning) + +### Tautien hallinta + +Viimeisin pandemia on tuonut esiin tapoja, joilla koneoppiminen voi auttaa tautien leviämisen estämisessä. Tässä artikkelissa tunnistat ARIMA:n, logistiset käyrät, lineaarisen regression ja SARIMA:n käytön. "Tämä työ pyrkii laskemaan viruksen leviämisnopeuden ja ennustamaan kuolemat, parantumiset ja vahvistetut tapaukset, jotta voimme valmistautua paremmin ja selviytyä." +[Viite](https://www.ncbi.nlm.nih.gov/pmc/articles/PMC7979218/) + +## 🌲 Ekologia ja vihreä teknologia + +Luonto ja ekologia koostuvat monista herkistä järjestelmistä, joissa eläinten ja luonnon vuorovaikutus on keskiössä. On tärkeää pystyä mittaamaan näitä järjestelmiä tarkasti ja toimimaan asianmukaisesti, jos jotain tapahtuu, kuten metsäpalo tai eläinkannan väheneminen. + +### Metsänhoito + +Olet oppinut [vahvistusoppimisesta](../../8-Reinforcement/README.md) aiemmissa oppitunneissa. Se voi olla erittäin hyödyllinen, kun yritetään ennustaa luonnon ilmiöitä. Erityisesti sitä voidaan käyttää ekologisten ongelmien, kuten metsäpalojen ja vieraslajien leviämisen, seuraamiseen. Kanadassa ryhmä tutkijoita käytti vahvistusoppimista rakentaakseen metsäpalojen dynamiikkamalleja satelliittikuvista. Käyttämällä innovatiivista "spatially spreading process (SSP)" -menetelmää he kuvittelivat metsäpalon "agenttina missä tahansa maiseman solussa." "Toimintojen joukko, joita palo voi tehdä sijainnista missä tahansa ajanhetkessä, sisältää leviämisen pohjoiseen, etelään, itään tai länteen tai ei leviämistä." + +Tämä lähestymistapa kääntää tavallisen RL-asetelman, koska vastaavan Markov Decision Process (MDP) -prosessin dynamiikka on tunnettu funktio välittömälle palon leviämiselle." Lue lisää tämän ryhmän käyttämistä klassisista algoritmeista alla olevasta linkistä. +[Viite](https://www.frontiersin.org/articles/10.3389/fict.2018.00006/full) + +### Eläinten liikkeiden tunnistaminen + +Vaikka syväoppiminen on luonut vallankumouksen eläinten liikkeiden visuaalisessa seurannassa (voit rakentaa oman [jääkarhuseurannan](https://docs.microsoft.com/learn/modules/build-ml-model-with-azure-stream-analytics/?WT.mc_id=academic-77952-leestott) täällä), klassisella koneoppimisella on edelleen paikkansa tässä tehtävässä. + +Anturit maatilan eläinten liikkeiden seuraamiseen ja IoT hyödyntävät tämän tyyppistä visuaalista käsittelyä, mutta yksinkertaisemmat koneoppimistekniikat ovat hyödyllisiä datan esikäsittelyssä. Esimerkiksi tässä artikkelissa lampaiden asentoja seurattiin ja analysoitiin eri luokittelija-algoritmien avulla. Saatat tunnistaa ROC-käyrän sivulla 335. +[Viite](https://druckhaus-hofmann.de/gallery/31-wj-feb-2020.pdf) + +### ⚡️ Energianhallinta + +Aikasarjojen ennustamista käsittelevissä oppitunneissamme (../../7-TimeSeries/README.md) otimme esille älykkäiden pysäköintimittareiden käsitteen, joiden avulla kaupunki voi tuottaa tuloja ymmärtämällä kysyntää ja tarjontaa. Tämä artikkeli käsittelee yksityiskohtaisesti, kuinka klusterointi, regressio ja aikasarjojen ennustaminen yhdistettiin auttamaan tulevan energiankäytön ennustamisessa Irlannissa älykkäiden mittareiden avulla. +[Viite](https://www-cdn.knime.com/sites/default/files/inline-images/knime_bigdata_energy_timeseries_whitepaper.pdf) + +## 💼 Vakuutus + +Vakuutussektori on toinen sektori, joka käyttää koneoppimista elinkelpoisten taloudellisten ja aktuaaristen mallien rakentamiseen ja optimointiin. + +### Volatiliteetin hallinta + +MetLife, henkivakuutuspalveluntarjoaja, on avoin tavoistaan analysoida ja vähentää volatiliteettia taloudellisissa malleissaan. Tässä artikkelissa huomaat binääriset ja järjestysluokittelun visualisoinnit. Löydät myös ennustamisen visualisointeja. +[Viite](https://investments.metlife.com/content/dam/metlifecom/us/investments/insights/research-topics/macro-strategy/pdf/MetLifeInvestmentManagement_MachineLearnedRanking_070920.pdf) + +## 🎨 Taide, kulttuuri ja kirjallisuus + +Taiteessa, esimerkiksi journalismissa, on monia kiinnostavia ongelmia. Valeuutisten tunnistaminen on suuri ongelma, sillä on todistettu, että ne voivat vaikuttaa ihmisten mielipiteisiin ja jopa horjuttaa demokratioita. Museot voivat myös hyötyä koneoppimisen käytöstä, esimerkiksi artefaktien välisten yhteyksien löytämisessä tai resurssien suunnittelussa. + +### Valeuutisten tunnistaminen + +Valeuutisten tunnistaminen on nykyajan median kissa-hiiri-leikkiä. Tässä artikkelissa tutkijat ehdottavat järjestelmää, joka yhdistää useita koneoppimistekniikoita, joita olemme opiskelleet, ja testaa parhaan mallin käyttöönottoa: "Tämä järjestelmä perustuu luonnollisen kielen käsittelyyn datasta ominaisuuksien eristämiseksi, ja sitten näitä ominaisuuksia käytetään koneoppimisen luokittelijoiden, kuten Naive Bayes, Support Vector Machine (SVM), Random Forest (RF), Stochastic Gradient Descent (SGD) ja Logistic Regression (LR), kouluttamiseen." +[Viite](https://www.irjet.net/archives/V7/i6/IRJET-V7I6688.pdf) + +Tämä artikkeli osoittaa, kuinka eri koneoppimisalueiden yhdistäminen voi tuottaa mielenkiintoisia tuloksia, jotka voivat auttaa estämään valeuutisten leviämistä ja aiheuttamasta todellista vahinkoa; tässä tapauksessa syynä oli COVID-hoitoja koskevien huhujen leviäminen, jotka aiheuttivat väkivaltaisia mellakoita. + +### Museon koneoppiminen + +Museot ovat tekoälyvallankumouksen kynnyksellä, jossa kokoelmien luettelointi ja digitalisointi sekä artefaktien välisten yhteyksien löytäminen helpottuvat teknologian edistyessä. Projektit kuten [In Codice Ratio](https://www.sciencedirect.com/science/article/abs/pii/S0306457321001035#:~:text=1.,studies%20over%20large%20historical%20sources.) auttavat avaamaan pääsyä vaikeasti saavutettaviin kokoelmiin, kuten Vatikaanin arkistoihin. Mutta museojen liiketoiminta hyötyy myös koneoppimismalleista. + +Esimerkiksi Chicagon taideinstituutti rakensi malleja ennustamaan, mistä yleisöt ovat kiinnostuneita ja milloin he osallistuvat näyttelyihin. Tavoitteena on luoda yksilöllisiä ja optimoituja vierailijakokemuksia joka kerta, kun käyttäjä vierailee museossa. "Vuonna 2017 malli ennusti osallistumisen ja pääsymaksut yhden prosentin tarkkuudella, kertoo Andrew Simnick, Chicagon taideinstituutin vanhempi varatoimitusjohtaja." +[Viite](https://www.chicagobusiness.com/article/20180518/ISSUE01/180519840/art-institute-of-chicago-uses-data-to-make-exhibit-choices) + +## 🏷 Markkinointi + +### Asiakassegmentointi + +Tehokkaimmat markkinointistrategiat kohdistavat asiakkaat eri tavoin erilaisten ryhmittelyjen perusteella. Tässä artikkelissa käsitellään klusterointialgoritmien käyttöä tukemaan eriytettyä markkinointia. Eriytetty markkinointi auttaa yrityksiä parantamaan brändin tunnettuutta, tavoittamaan enemmän asiakkaita ja ansaitsemaan enemmän rahaa. +[Viite](https://ai.inqline.com/machine-learning-for-marketing-customer-segmentation/) + +## 🚀 Haaste + +Tunnista toinen sektori, joka hyötyy joistakin tämän oppimateriaalin tekniikoista, ja +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Kertaus ja itseopiskelu + +Wayfairin data science -tiimillä on useita mielenkiintoisia videoita siitä, miten he käyttävät koneoppimista yrityksessään. Kannattaa [tutustua](https://www.youtube.com/channel/UCe2PjkQXqOuwkW1gw6Ameuw/videos)! + +## Tehtävä + +[ML-aarteenetsintä](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/9-Real-World/1-Applications/assignment.md b/translations/fi/9-Real-World/1-Applications/assignment.md new file mode 100644 index 000000000..008472b94 --- /dev/null +++ b/translations/fi/9-Real-World/1-Applications/assignment.md @@ -0,0 +1,27 @@ + +# ML-aarteenetsintä + +## Ohjeet + +Tässä oppitunnissa opit monista tosielämän käyttötapauksista, jotka on ratkaistu klassisella koneoppimisella. Vaikka syväoppimisen, uusien tekniikoiden ja työkalujen sekä neuroverkkojen hyödyntäminen on nopeuttanut työkalujen kehittämistä näillä aloilla, klassinen koneoppiminen tämän oppimateriaalin tekniikoilla on edelleen erittäin arvokasta. + +Tässä tehtävässä kuvittele, että osallistut hackathoniin. Käytä oppimateriaalista oppimiasi asioita ehdottaaksesi ratkaisua klassisella koneoppimisella johonkin tämän oppitunnin aikana käsiteltyyn sektoriin liittyvään ongelmaan. Luo esitys, jossa kerrot, miten aiot toteuttaa ideasi. Lisäpisteitä saat, jos onnistut keräämään esimerkkidataa ja rakentamaan koneoppimismallin tukemaan konseptiasi! + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannettavaa | +| -------- | ------------------------------------------------------------------ | ----------------------------------------------- | ---------------------- | +| | PowerPoint-esitys on tehty - lisäpisteitä mallin rakentamisesta | Ei-innovatiivinen, perustason esitys on tehty | Työ on keskeneräinen | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/9-Real-World/2-Debugging-ML-Models/README.md b/translations/fi/9-Real-World/2-Debugging-ML-Models/README.md new file mode 100644 index 000000000..4d7067e41 --- /dev/null +++ b/translations/fi/9-Real-World/2-Debugging-ML-Models/README.md @@ -0,0 +1,167 @@ + +# Jälkikirjoitus: Mallin virheenkorjaus koneoppimisessa vastuullisen tekoälyn hallintapaneelin komponenttien avulla + +## [Esiluennon kysely](https://ff-quizzes.netlify.app/en/ml/) + +## Johdanto + +Koneoppiminen vaikuttaa päivittäiseen elämäämme. Tekoäly löytää tiensä joihinkin tärkeimpiin järjestelmiin, jotka vaikuttavat meihin yksilöinä ja yhteiskuntana, kuten terveydenhuoltoon, rahoitukseen, koulutukseen ja työllisyyteen. Esimerkiksi järjestelmät ja mallit osallistuvat päivittäisiin päätöksentekotehtäviin, kuten terveysdiagnooseihin tai petosten havaitsemiseen. Tekoälyn kehitys ja sen nopeutunut käyttöönotto kohtaavat kuitenkin jatkuvasti muuttuvia yhteiskunnallisia odotuksia ja kasvavaa sääntelyä. Näemme jatkuvasti alueita, joissa tekoälyjärjestelmät eivät täytä odotuksia; ne paljastavat uusia haasteita, ja hallitukset alkavat säännellä tekoälyratkaisuja. Siksi on tärkeää analysoida näitä malleja, jotta ne tuottavat oikeudenmukaisia, luotettavia, osallistavia, läpinäkyviä ja vastuullisia tuloksia kaikille. + +Tässä oppimateriaalissa tarkastelemme käytännön työkaluja, joita voidaan käyttää arvioimaan, onko mallissa vastuullisen tekoälyn ongelmia. Perinteiset koneoppimisen virheenkorjaustekniikat perustuvat yleensä kvantitatiivisiin laskelmiin, kuten keskimääräiseen tarkkuuteen tai virhehäviöön. Kuvittele, mitä voi tapahtua, kun käyttämäsi data mallien rakentamiseen ei sisällä tiettyjä demografisia ryhmiä, kuten rotua, sukupuolta, poliittista näkemystä tai uskontoa, tai edustaa näitä ryhmiä epätasaisesti. Entä jos mallin tulkinta suosii jotakin demografista ryhmää? Tämä voi johtaa tiettyjen herkkien ominaisuusryhmien yli- tai aliedustukseen, mikä aiheuttaa mallin oikeudenmukaisuus-, osallistavuus- tai luotettavuusongelmia. Lisäksi koneoppimismalleja pidetään usein "mustina laatikoina", mikä vaikeuttaa ymmärtämistä ja selittämistä, mikä ohjaa mallin ennusteita. Nämä ovat haasteita, joita data-analyytikot ja tekoälykehittäjät kohtaavat, kun heillä ei ole riittäviä työkaluja mallin oikeudenmukaisuuden tai luotettavuuden arviointiin. + +Tässä oppitunnissa opit virheenkorjaamaan mallejasi seuraavien avulla: + +- **Virheanalyysi**: tunnista, missä datan jakaumassa mallilla on korkeat virheprosentit. +- **Mallin yleiskatsaus**: suorita vertailuanalyysi eri datakohorttien välillä löytääksesi mallin suorituskykymittareiden eroja. +- **Data-analyysi**: tutki, missä datan yli- tai aliedustus voi vääristää mallia suosimaan yhtä demografista ryhmää toisen sijaan. +- **Ominaisuuksien merkitys**: ymmärrä, mitkä ominaisuudet ohjaavat mallin ennusteita globaalilla tai paikallisella tasolla. + +## Esitietovaatimukset + +Esitietovaatimuksena tutustu [Vastuullisen tekoälyn työkaluihin kehittäjille](https://www.microsoft.com/ai/ai-lab-responsible-ai-dashboard) + +> ![Gif vastuullisen tekoälyn työkaluista](../../../../9-Real-World/2-Debugging-ML-Models/images/rai-overview.gif) + +## Virheanalyysi + +Perinteiset mallin suorituskykymittarit, joita käytetään tarkkuuden mittaamiseen, perustuvat pääasiassa oikeiden ja väärien ennusteiden laskemiseen. Esimerkiksi mallin, joka on tarkka 89 % ajasta ja jonka virhehäviö on 0,001, voidaan katsoa suoriutuvan hyvin. Virheet eivät kuitenkaan usein jakaudu tasaisesti taustalla olevassa datassa. Saatat saada 89 %:n tarkkuusluvun, mutta huomata, että tietyillä datan alueilla malli epäonnistuu 42 % ajasta. Näiden virhekuvioiden seuraukset tietyissä dataryhmissä voivat johtaa oikeudenmukaisuus- tai luotettavuusongelmiin. On tärkeää ymmärtää, missä mallin suorituskyky on hyvä ja missä ei. Dataryhmät, joissa mallilla on korkea virheprosentti, voivat osoittautua tärkeiksi demografisiksi ryhmiksi. + +![Analysoi ja korjaa mallin virheitä](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-distribution.png) + +RAI-hallintapaneelin virheanalyysikomponentti havainnollistaa, miten mallin virheet jakautuvat eri kohorttien välillä puun visualisoinnin avulla. Tämä auttaa tunnistamaan ominaisuuksia tai alueita, joissa datasetissä on korkea virheprosentti. Näkemällä, mistä suurin osa mallin virheistä tulee, voit alkaa tutkia ongelman juurisyytä. Voit myös luoda datakohortteja analysointia varten. Nämä datakohortit auttavat virheenkorjausprosessissa selvittämään, miksi mallin suorituskyky on hyvä yhdessä kohortissa mutta virheellinen toisessa. + +![Virheanalyysi](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-error-cohort.png) + +Puun visualisoinnin värilliset indikaattorit auttavat paikantamaan ongelma-alueet nopeammin. Esimerkiksi mitä tummempi punainen väri puun solmussa on, sitä korkeampi virheprosentti. + +Lämpökartta on toinen visualisointitoiminto, jota käyttäjät voivat käyttää tutkiessaan virheprosenttia yhden tai kahden ominaisuuden avulla löytääkseen mallin virheiden aiheuttajia koko datasetissä tai kohorteissa. + +![Virheanalyysin lämpökartta](../../../../9-Real-World/2-Debugging-ML-Models/images/ea-heatmap.png) + +Käytä virheanalyysiä, kun tarvitset: + +* Syvällistä ymmärrystä siitä, miten mallin virheet jakautuvat datasetissä ja useiden syöte- ja ominaisuusulottuvuuksien välillä. +* Yhdistettyjen suorituskykymittareiden purkamista automaattisesti virheellisten kohorttien löytämiseksi, jotta voit suunnitella kohdennettuja korjaustoimenpiteitä. + +## Mallin yleiskatsaus + +Koneoppimismallin suorituskyvyn arviointi vaatii kokonaisvaltaista ymmärrystä sen käyttäytymisestä. Tämä voidaan saavuttaa tarkastelemalla useampaa kuin yhtä mittaria, kuten virheprosenttia, tarkkuutta, muistia, tarkkuutta tai MAE:ta (Mean Absolute Error), jotta löydetään suorituskykymittareiden välisiä eroja. Yksi suorituskykymittari voi näyttää hyvältä, mutta epätarkkuudet voivat paljastua toisessa mittarissa. Lisäksi mittareiden vertailu datasetin tai kohorttien välillä auttaa valottamaan, missä malli suoriutuu hyvin ja missä ei. Tämä on erityisen tärkeää mallin suorituskyvyn tarkastelussa herkkien ja ei-herkkien ominaisuuksien välillä (esim. potilaan rotu, sukupuoli tai ikä), jotta voidaan paljastaa mahdollinen mallin epäoikeudenmukaisuus. Esimerkiksi, jos havaitaan, että malli on virheellisempi kohortissa, jossa on herkkiä ominaisuuksia, tämä voi paljastaa mallin mahdollisen epäoikeudenmukaisuuden. + +RAI-hallintapaneelin Mallin yleiskatsaus -komponentti auttaa analysoimaan datakohorttien suorituskykymittareita ja antaa käyttäjille mahdollisuuden vertailla mallin käyttäytymistä eri kohorttien välillä. + +![Datasetin kohortit - mallin yleiskatsaus RAI-hallintapaneelissa](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-dataset-cohorts.png) + +Komponentin ominaisuuspohjainen analyysitoiminto antaa käyttäjille mahdollisuuden rajata datan alaryhmiä tietyn ominaisuuden sisällä, jotta poikkeavuudet voidaan tunnistaa tarkemmalla tasolla. Esimerkiksi hallintapaneelissa on sisäänrakennettu älykkyys, joka automaattisesti luo kohortteja käyttäjän valitsemalle ominaisuudelle (esim. *"time_in_hospital < 3"* tai *"time_in_hospital >= 7"*). Tämä mahdollistaa käyttäjän eristää tietyn ominaisuuden suuremmasta dataryhmästä ja nähdä, onko se avaintekijä mallin virheellisissä tuloksissa. + +![Ominaisuuskohortit - mallin yleiskatsaus RAI-hallintapaneelissa](../../../../9-Real-World/2-Debugging-ML-Models/images/model-overview-feature-cohorts.png) + +Mallin yleiskatsaus -komponentti tukee kahta eriarvoisuusmittariluokkaa: + +**Mallin suorituskyvyn eriarvoisuus**: Nämä mittarit laskevat eriarvoisuuden (erot) valitun suorituskykymittarin arvoissa datan alaryhmien välillä. Esimerkkejä: + +* Tarkkuusprosentin eriarvoisuus +* Virheprosentin eriarvoisuus +* Tarkkuuden eriarvoisuus +* Muistin eriarvoisuus +* Keskiabsoluuttisen virheen (MAE) eriarvoisuus + +**Valintaprosentin eriarvoisuus**: Tämä mittari sisältää valintaprosentin (suotuisa ennuste) eron alaryhmien välillä. Esimerkki tästä on lainan hyväksymisprosenttien eriarvoisuus. Valintaprosentti tarkoittaa datan pisteiden osuutta kussakin luokassa, joka on luokiteltu 1:ksi (binaariluokittelu) tai ennustearvojen jakaumaa (regressio). + +## Data-analyysi + +> "Jos kidutat dataa tarpeeksi kauan, se tunnustaa mitä tahansa" - Ronald Coase + +Tämä lausunto kuulostaa äärimmäiseltä, mutta on totta, että dataa voidaan manipuloida tukemaan mitä tahansa johtopäätöstä. Tällainen manipulointi voi joskus tapahtua tahattomasti. Ihmisinä meillä kaikilla on ennakkoluuloja, ja on usein vaikeaa tietoisesti tietää, milloin tuomme ennakkoluuloja dataan. Oikeudenmukaisuuden takaaminen tekoälyssä ja koneoppimisessa on edelleen monimutkainen haaste. + +Data on suuri sokea piste perinteisille mallin suorituskykymittareille. Saatat saada korkeat tarkkuusluvut, mutta tämä ei aina heijasta datasetissä mahdollisesti olevaa taustalla olevaa datan ennakkoluuloa. Esimerkiksi, jos työntekijöiden datasetissä on 27 % naisia johtotehtävissä ja 73 % miehiä samalla tasolla, työpaikkailmoituksia tekevä tekoälymalli, joka on koulutettu tällä datalla, saattaa kohdistaa pääasiassa miesyleisöön johtotehtäviä varten. Tämä datan epätasapaino vääristi mallin ennustetta suosimaan yhtä sukupuolta. Tämä paljastaa oikeudenmukaisuusongelman, jossa tekoälymallissa on sukupuolinen ennakkoluulo. + +RAI-hallintapaneelin Data-analyysi -komponentti auttaa tunnistamaan alueita, joissa datasetissä on yli- ja aliedustusta. Se auttaa käyttäjiä diagnosoimaan virheiden ja oikeudenmukaisuusongelmien juurisyitä, jotka johtuvat datan epätasapainosta tai tietyn dataryhmän edustuksen puutteesta. Tämä antaa käyttäjille mahdollisuuden visualisoida datasetit ennustettujen ja todellisten tulosten, virheryhmien ja tiettyjen ominaisuuksien perusteella. Joskus aliedustetun dataryhmän löytäminen voi myös paljastaa, että malli ei opi hyvin, mikä johtaa korkeisiin epätarkkuuksiin. Malli, jossa on datan ennakkoluuloja, ei ole vain oikeudenmukaisuusongelma, vaan se osoittaa, että malli ei ole osallistava tai luotettava. + +![Data-analyysi -komponentti RAI-hallintapaneelissa](../../../../9-Real-World/2-Debugging-ML-Models/images/dataanalysis-cover.png) + +Käytä data-analyysiä, kun tarvitset: + +* Datasetin tilastojen tutkimista valitsemalla eri suodattimia datan jakamiseksi eri ulottuvuuksiin (tunnetaan myös kohortteina). +* Datasetin jakauman ymmärtämistä eri kohorttien ja ominaisuusryhmien välillä. +* Sen määrittämistä, johtuvatko oikeudenmukaisuuteen, virheanalyysiin ja kausaalisuuteen liittyvät havainnot (muista hallintapaneelin komponenteista) datasetin jakaumasta. +* Päätöstä siitä, mihin alueisiin kerätä lisää dataa virheiden lieventämiseksi, jotka johtuvat edustuksen ongelmista, luokittelumelusta, ominaisuusmelusta, luokitteluvääristymistä ja vastaavista tekijöistä. + +## Mallin tulkittavuus + +Koneoppimismallit ovat usein "mustia laatikoita". Ymmärtäminen, mitkä keskeiset dataominaisuudet ohjaavat mallin ennustetta, voi olla haastavaa. On tärkeää tarjota läpinäkyvyyttä siitä, miksi malli tekee tietyn ennusteen. Esimerkiksi, jos tekoälyjärjestelmä ennustaa, että diabeetikko on vaarassa joutua takaisin sairaalaan alle 30 päivän kuluessa, sen tulisi pystyä tarjoamaan tukidataa, joka johti ennusteeseen. Tukidatan indikaattoreiden tarjoaminen tuo läpinäkyvyyttä, joka auttaa lääkäreitä tai sairaaloita tekemään hyvin perusteltuja päätöksiä. Lisäksi kyky selittää, miksi malli teki ennusteen yksittäisen potilaan kohdalla, mahdollistaa vastuullisuuden terveyssäädösten kanssa. Kun koneoppimismalleja käytetään tavoilla, jotka vaikuttavat ihmisten elämään, on ratkaisevan tärkeää ymmärtää ja selittää, mikä vaikuttaa mallin käyttäytymiseen. Mallin selitettävyys ja tulkittavuus auttavat vastaamaan kysymyksiin tilanteissa, kuten: + +* Mallin virheenkorjaus: Miksi mallini teki tämän virheen? Miten voin parantaa malliani? +* Ihmisen ja tekoälyn yhteistyö: Miten voin ymmärtää ja luottaa mallin päätöksiin? +* Sääntelyvaatimusten noudattaminen: Täyttääkö mallini lakisääteiset vaatimukset? + +RAI-hallintapaneelin Ominaisuuksien merkitys -komponentti auttaa virheenkorjaamaan ja saamaan kattavan ymmärryksen siitä, miten malli tekee ennusteita. Se on myös hyödyllinen työkalu koneoppimisen ammattilaisille ja päätöksentekijöille selittämään ja näyttämään todisteita ominaisuuksista, jotka vaikuttavat mallin käyttäytymiseen sääntelyvaatimusten noudattamiseksi. Käyttäjät voivat tutkia sekä globaaleja että paikallisia selityksiä ja vahvistaa, mitkä ominaisuudet ohjaavat mallin ennustetta. Globaalit selitykset listaavat tärkeimmät ominaisuudet, jotka vaikuttivat mallin kokonaisennusteeseen. Paikalliset selitykset näyttävät, mitkä ominaisuudet johtivat mallin ennusteeseen yksittäisessä tapauksessa. Paikallisten selitysten arviointikyky on myös hyödyllinen virheenkorjauksessa tai auditoinnissa yksittäisen tapauksen ymmärtämiseksi ja tulkitsemiseksi, miksi malli teki tarkan tai epätarkan ennusteen. + +![Ominaisuuksien merkitys -komponentti RAI-hallintapaneelissa](../../../../9-Real-World/2-Debugging-ML-Models/images/9-feature-importance.png) + +* Globaalit selitykset: Esimerkiksi mitkä ominaisuudet vaikuttavat diabeteksen sairaalaan takaisinottamisen mallin yleiseen käyttäytymiseen? +* Paikalliset selitykset: Esimerkiksi miksi yli 60-vuotias diabeetikko, jolla on aiempia sairaalahoitoja, ennustettiin joutuvan takaisin sairaalaan alle 30 päivän kuluessa tai ei? + +Mallin suorituskyvyn tutkimisessa eri kohorttien välillä Ominaisuuksien merkitys näyttää, kuinka suuri vaikutus ominaisuudella on kohorttien välillä. Se auttaa paljastamaan poikkeavuuksia vertaamalla ominaisuuden vaikutuksen tasoa mallin virheellisten ennusteiden ohjaamisessa. Ominaisuuksien merkitys -komponentti voi näyttää, mitkä arvot ominaisuudessa vaikuttivat positiivisesti tai negatiivisesti mallin tulokseen. Esimerkiksi, jos malli teki epätarkan ennusteen, komponentti antaa mahdollisuuden porautua syvemmälle ja tunnistaa, mitkä ominaisuudet tai ominaisuusarvot ohjasivat ennustetta. Tämä yksityiskohtaisuuden taso auttaa paitsi virheenkorjauksessa myös tarjoaa läpinäkyvyyttä ja vastuullisuutta auditointitilanteissa. Lopuksi komponentti voi auttaa tunnistamaan oikeudenmukaisuusongelmia. Esimerkiksi, jos herkkä ominaisuus, kuten etnisyys tai sukupuoli, vaikuttaa voimakkaasti mallin ennusteeseen, tämä voi olla merkki rodullisesta tai sukupuolisesta ennakkoluulosta mallissa. + +![Ominaisu +- **Yli- tai aliedustus**. Ajatus on, että tietty ryhmä ei ole edustettuna tietyssä ammatissa, ja kaikki palvelut tai toiminnot, jotka jatkavat tämän edistämistä, aiheuttavat haittaa. + +### Azure RAI -kojelauta + +[Azure RAI -kojelauta](https://learn.microsoft.com/en-us/azure/machine-learning/concept-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) perustuu avoimen lähdekoodin työkaluihin, jotka johtavat akateemiset instituutiot ja organisaatiot, mukaan lukien Microsoft, ovat kehittäneet. Nämä työkalut auttavat datatieteilijöitä ja tekoälyn kehittäjiä ymmärtämään paremmin mallien käyttäytymistä, löytämään ja korjaamaan ei-toivottuja ongelmia tekoälymalleista. + +- Opi käyttämään eri komponentteja tutustumalla RAI-kojelautaan [dokumentaatiossa.](https://learn.microsoft.com/en-us/azure/machine-learning/how-to-responsible-ai-dashboard?WT.mc_id=aiml-90525-ruyakubu) + +- Tutustu joihinkin RAI-kojelautan [esimerkkivihkoihin](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) vastuullisemman tekoälyn skenaarioiden debuggaamiseksi Azure Machine Learningissä. + +--- +## 🚀 Haaste + +Jotta tilastollisia tai datan vinoumia ei syntyisi alun perinkään, meidän tulisi: + +- varmistaa, että järjestelmiä kehittävillä ihmisillä on monipuoliset taustat ja näkökulmat +- investoida datakokonaisuuksiin, jotka heijastavat yhteiskuntamme monimuotoisuutta +- kehittää parempia menetelmiä vinoumien havaitsemiseen ja korjaamiseen niiden ilmetessä + +Pohdi tosielämän tilanteita, joissa epäoikeudenmukaisuus on ilmeistä mallien rakentamisessa ja käytössä. Mitä muuta meidän tulisi ottaa huomioon? + +## [Luennon jälkeinen kysely](https://ff-quizzes.netlify.app/en/ml/) +## Kertaus ja itseopiskelu + +Tässä oppitunnissa olet oppinut joitakin käytännön työkaluja vastuullisen tekoälyn sisällyttämiseksi koneoppimiseen. + +Katso tämä työpaja syventyäksesi aiheisiin: + +- Responsible AI Dashboard: Yhden luukun ratkaisu RAI:n operationalisointiin käytännössä, esittäjät Besmira Nushi ja Mehrnoosh Sameki + +[![Responsible AI Dashboard: Yhden luukun ratkaisu RAI:n operationalisointiin käytännössä](https://img.youtube.com/vi/f1oaDNl3djg/0.jpg)](https://www.youtube.com/watch?v=f1oaDNl3djg "Responsible AI Dashboard: Yhden luukun ratkaisu RAI:n operationalisointiin käytännössä") + + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon: Responsible AI Dashboard: Yhden luukun ratkaisu RAI:n operationalisointiin käytännössä, esittäjät Besmira Nushi ja Mehrnoosh Sameki + +Tutustu seuraaviin materiaaleihin oppiaksesi lisää vastuullisesta tekoälystä ja luodaksesi luotettavampia malleja: + +- Microsoftin RAI-kojelautatyökalut ML-mallien debuggaamiseen: [Vastuullisen tekoälyn työkaluresurssit](https://aka.ms/rai-dashboard) + +- Tutustu vastuullisen tekoälyn työkalupakkiin: [Github](https://github.com/microsoft/responsible-ai-toolbox) + +- Microsoftin RAI-resurssikeskus: [Vastuullisen tekoälyn resurssit – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) + +- Microsoftin FATE-tutkimusryhmä: [FATE: Reiluus, vastuullisuus, läpinäkyvyys ja etiikka tekoälyssä - Microsoft Research](https://www.microsoft.com/research/theme/fate/) + +## Tehtävä + +[Tutustu RAI-kojelautaan](assignment.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/9-Real-World/2-Debugging-ML-Models/assignment.md b/translations/fi/9-Real-World/2-Debugging-ML-Models/assignment.md new file mode 100644 index 000000000..e4e656ce6 --- /dev/null +++ b/translations/fi/9-Real-World/2-Debugging-ML-Models/assignment.md @@ -0,0 +1,25 @@ + +# Tutustu vastuullisen tekoälyn (RAI) hallintapaneeliin + +## Ohjeet + +Tässä oppitunnissa opit RAI-hallintapaneelista, joka on joukko komponentteja, jotka perustuvat "avoimen lähdekoodin" työkaluihin. Sen avulla data-analyytikot voivat suorittaa virheanalyysiä, datan tutkimista, oikeudenmukaisuuden arviointia, mallin tulkintaa, vastaväite/mitä-jos-arviointeja ja kausaalianalyysiä tekoälyjärjestelmissä. Tämän tehtävän tarkoituksena on tutkia joitakin RAI-hallintapaneelin esimerkkien [notebookeja](https://github.com/Azure/RAI-vNext-Preview/tree/main/examples/notebooks) ja raportoida havainnot paperissa tai esityksessä. + +## Arviointikriteerit + +| Kriteeri | Erinomainen | Riittävä | Parannusta tarvitaan | +| -------- | ----------- | -------- | -------------------- | +| | Paperi tai PowerPoint-esitys on tehty, jossa käsitellään RAI-hallintapaneelin komponentteja, suoritettua notebookia ja siitä tehtyjä johtopäätöksiä | Paperi on tehty ilman johtopäätöksiä | Paperia ei ole tehty | + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/9-Real-World/README.md b/translations/fi/9-Real-World/README.md new file mode 100644 index 000000000..98deac298 --- /dev/null +++ b/translations/fi/9-Real-World/README.md @@ -0,0 +1,32 @@ + +# Jälkikirjoitus: Klassisen koneoppimisen todelliset sovellukset + +Tässä osiossa tutustut klassisen koneoppimisen todellisiin sovelluksiin. Olemme etsineet internetistä tutkimusartikkeleita ja kirjoituksia sovelluksista, joissa on käytetty näitä strategioita, välttäen mahdollisimman paljon neuroverkkoja, syväoppimista ja tekoälyä. Opit, miten koneoppimista hyödynnetään liiketoimintajärjestelmissä, ekologisissa sovelluksissa, rahoituksessa, taiteessa ja kulttuurissa sekä muilla aloilla. + +![chess](../../../9-Real-World/images/chess.jpg) + +> Kuva: Alexis Fauvet palvelussa Unsplash + +## Oppitunti + +1. [Koneoppimisen todelliset sovellukset](1-Applications/README.md) +2. [Koneoppimismallien virheenkorjaus vastuullisen tekoälyn hallintapaneelikomponenttien avulla](2-Debugging-ML-Models/README.md) + +## Tekijät + +"Todelliset sovellukset" on kirjoitettu tiimin toimesta, johon kuuluivat muun muassa [Jen Looper](https://twitter.com/jenlooper) ja [Ornella Altunyan](https://twitter.com/ornelladotcom). + +"Koneoppimismallien virheenkorjaus vastuullisen tekoälyn hallintapaneelikomponenttien avulla" on kirjoittanut [Ruth Yakubu](https://twitter.com/ruthieyakubu). + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/CODE_OF_CONDUCT.md b/translations/fi/CODE_OF_CONDUCT.md new file mode 100644 index 000000000..35dffef27 --- /dev/null +++ b/translations/fi/CODE_OF_CONDUCT.md @@ -0,0 +1,23 @@ + +# Microsoftin avoimen lähdekoodin toimintaohjeet + +Tämä projekti on ottanut käyttöön [Microsoftin avoimen lähdekoodin toimintaohjeet](https://opensource.microsoft.com/codeofconduct/). + +Resurssit: + +- [Microsoftin avoimen lähdekoodin toimintaohjeet](https://opensource.microsoft.com/codeofconduct/) +- [Microsoftin toimintaohjeiden usein kysytyt kysymykset](https://opensource.microsoft.com/codeofconduct/faq/) +- Ota yhteyttä [opencode@microsoft.com](mailto:opencode@microsoft.com) kysymyksissä tai huolenaiheissa + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/CONTRIBUTING.md b/translations/fi/CONTRIBUTING.md new file mode 100644 index 000000000..fd333700f --- /dev/null +++ b/translations/fi/CONTRIBUTING.md @@ -0,0 +1,25 @@ + +# Osallistuminen + +Tämä projekti toivottaa tervetulleeksi osallistumiset ja ehdotukset. Useimmat osallistumiset edellyttävät, että hyväksyt Contributor License Agreementin (CLA), jossa vakuutat, että sinulla on oikeus antaa meille oikeudet käyttää panostasi. Lisätietoja löydät osoitteesta https://cla.microsoft.com. + +> Tärkeää: Kun käännät tekstiä tässä repossa, varmista, ettet käytä konekäännöstä. Tarkistamme käännökset yhteisön kautta, joten tarjoa käännöksiä vain kielillä, joissa olet taitava. + +Kun lähetät pull requestin, CLA-bot määrittää automaattisesti, tarvitsetko CLA:n ja merkitsee PR:n asianmukaisesti (esim. etiketti, kommentti). Seuraa yksinkertaisesti botin antamia ohjeita. Sinun tarvitsee tehdä tämä vain kerran kaikissa repositorioissa, jotka käyttävät CLA:ta. + +Tämä projekti on omaksunut [Microsoftin avoimen lähdekoodin toimintaohjeet](https://opensource.microsoft.com/codeofconduct/). +Lisätietoja löydät [toimintaohjeiden usein kysytyistä kysymyksistä](https://opensource.microsoft.com/codeofconduct/faq/) +tai ota yhteyttä [opencode@microsoft.com](mailto:opencode@microsoft.com), jos sinulla on lisäkysymyksiä tai kommentteja. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/README.md b/translations/fi/README.md new file mode 100644 index 000000000..d808e222b --- /dev/null +++ b/translations/fi/README.md @@ -0,0 +1,178 @@ + +[![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/) + +### 🌐 Monikielinen tuki + +#### Tuettu GitHub-toiminnon kautta (automaattinen ja aina ajan tasalla) + +[French](../fr/README.md) | [Spanish](../es/README.md) | [German](../de/README.md) | [Russian](../ru/README.md) | [Arabic](../ar/README.md) | [Persian (Farsi)](../fa/README.md) | [Urdu](../ur/README.md) | [Chinese (Simplified)](../zh/README.md) | [Chinese (Traditional, Macau)](../mo/README.md) | [Chinese (Traditional, Hong Kong)](../hk/README.md) | [Chinese (Traditional, Taiwan)](../tw/README.md) | [Japanese](../ja/README.md) | [Korean](../ko/README.md) | [Hindi](../hi/README.md) | [Bengali](../bn/README.md) | [Marathi](../mr/README.md) | [Nepali](../ne/README.md) | [Punjabi (Gurmukhi)](../pa/README.md) | [Portuguese (Portugal)](../pt/README.md) | [Portuguese (Brazil)](../br/README.md) | [Italian](../it/README.md) | [Polish](../pl/README.md) | [Turkish](../tr/README.md) | [Greek](../el/README.md) | [Thai](../th/README.md) | [Swedish](../sv/README.md) | [Danish](../da/README.md) | [Norwegian](../no/README.md) | [Finnish](./README.md) | [Dutch](../nl/README.md) | [Hebrew](../he/README.md) | [Vietnamese](../vi/README.md) | [Indonesian](../id/README.md) | [Malay](../ms/README.md) | [Tagalog (Filipino)](../tl/README.md) | [Swahili](../sw/README.md) | [Hungarian](../hu/README.md) | [Czech](../cs/README.md) | [Slovak](../sk/README.md) | [Romanian](../ro/README.md) | [Bulgarian](../bg/README.md) | [Serbian (Cyrillic)](../sr/README.md) | [Croatian](../hr/README.md) | [Slovenian](../sl/README.md) | [Ukrainian](../uk/README.md) | [Burmese (Myanmar)](../my/README.md) + +#### Liity yhteisöön + +[![Azure AI Discord](https://dcbadge.limes.pink/api/server/kzRShWzttr)](https://discord.gg/kzRShWzttr) + +# Koneoppiminen aloittelijoille - Opintosuunnitelma + +> 🌍 Matkusta ympäri maailmaa tutustuessasi koneoppimiseen eri kulttuurien kautta 🌍 + +Microsoftin Cloud Advocates -tiimi tarjoaa ylpeänä 12 viikon ja 26 oppitunnin opintosuunnitelman, joka käsittelee **koneoppimista**. Tässä opintosuunnitelmassa opit niin sanottua **klassista koneoppimista**, pääasiassa Scikit-learn-kirjastoa käyttäen ja välttäen syväoppimista, joka käsitellään [AI for Beginners -opintosuunnitelmassa](https://aka.ms/ai4beginners). Yhdistä nämä oppitunnit myös ['Data Science for Beginners' -opintosuunnitelmaan](https://aka.ms/ds4beginners)! + +Matkusta kanssamme ympäri maailmaa soveltaessamme näitä klassisia tekniikoita eri alueiden dataan. Jokainen oppitunti sisältää ennen ja jälkeen oppitunnin tehtävät, kirjalliset ohjeet oppitunnin suorittamiseen, ratkaisun, tehtävän ja paljon muuta. Projektipohjainen oppimismetodimme auttaa sinua oppimaan rakentamisen kautta, mikä on todistetusti tehokas tapa omaksua uusia taitoja. + +**✍️ Suuret kiitokset kirjoittajillemme** Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, Ruth Yakubu ja Amy Boyd + +**🎨 Kiitokset myös kuvittajillemme** Tomomi Imura, Dasani Madipalli ja Jen Looper + +**🙏 Erityiskiitokset 🙏 Microsoft Student Ambassador -kirjoittajillemme, arvioijillemme ja sisällöntuottajillemme**, erityisesti Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila ja Snigdha Agarwal + +**🤩 Erityiskiitokset Microsoft Student Ambassadors Eric Wanjau, Jasleen Sondhi ja Vidushi Gupta R-oppitunneistamme!** + +# Aloittaminen + +Noudata näitä ohjeita: +1. **Haarauta repositorio**: Klikkaa "Fork"-painiketta tämän sivun oikeassa yläkulmassa. +2. **Kloonaa repositorio**: `git clone https://github.com/microsoft/ML-For-Beginners.git` + +> [löydä kaikki lisäresurssit tähän kurssiin Microsoft Learn -kokoelmastamme](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +**[Opiskelijat](https://aka.ms/student-page)**, haaroittakaa koko repositorio omaan GitHub-tiliinne ja suorittakaa harjoitukset itsenäisesti tai ryhmässä: + +- Aloita ennen oppituntia tehtävällä kyselyllä. +- Lue oppitunti ja suorita aktiviteetit, pysähtyen ja pohtien jokaisen tietotarkistuksen kohdalla. +- Yritä luoda projektit ymmärtämällä oppitunnit sen sijaan, että suorittaisit ratkaisukoodin; kuitenkin kyseinen koodi on saatavilla `/solution`-kansioissa jokaisessa projektiin perustuvassa oppitunnissa. +- Suorita oppitunnin jälkeinen kysely. +- Suorita haaste. +- Suorita tehtävä. +- Kun olet suorittanut oppituntiryhmän, käy [Keskustelupalstalla](https://github.com/microsoft/ML-For-Beginners/discussions) ja "opettele ääneen" täyttämällä sopiva PAT-arviointityökalu. PAT on edistymisen arviointityökalu, joka on kaavake, jonka täytät oppimisesi edistämiseksi. Voit myös reagoida muiden PAT-arviointeihin, jotta voimme oppia yhdessä. + +> Jatko-opiskelua varten suosittelemme seuraamaan näitä [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-77952-leestott) moduuleja ja oppimispolkuja. + +**Opettajat**, olemme [sisällyttäneet joitakin ehdotuksia](for-teachers.md) tämän opintosuunnitelman käyttöön. + +--- + +## Video-opastukset + +Osa oppitunneista on saatavilla lyhyinä videoina. Löydät ne kaikki oppituntien sisällä tai [ML for Beginners -soittolistalta Microsoft Developer YouTube -kanavalla](https://aka.ms/ml-beginners-videos) klikkaamalla alla olevaa kuvaa. + +[![ML for beginners banner](../../images/ml-for-beginners-video-banner.png)](https://aka.ms/ml-beginners-videos) + +--- + +## Tutustu tiimiin + +[![Promo video](../../images/ml.gif)](https://youtu.be/Tj1XWrDSYJU) + +**Gif by** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 Klikkaa yllä olevaa kuvaa nähdäksesi videon projektista ja sen tekijöistä! + +--- + +## Pedagogiikka + +Olemme valinneet kaksi pedagogista periaatetta tämän opintosuunnitelman rakentamiseen: varmistamme, että se on käytännönläheinen **projektipohjainen** ja että se sisältää **usein kyselyitä**. Lisäksi tämä opintosuunnitelma sisältää yhteisen **teeman**, joka antaa sille yhtenäisyyttä. + +Varmistamalla, että sisältö liittyy projekteihin, prosessi on opiskelijoille kiinnostavampi ja käsitteiden omaksuminen paranee. Lisäksi matalan kynnyksen kysely ennen oppituntia ohjaa opiskelijan huomion oppimaan aihetta, kun taas toinen kysely oppitunnin jälkeen varmistaa lisämuistamisen. Tämä opintosuunnitelma on suunniteltu joustavaksi ja hauskaksi, ja sen voi suorittaa kokonaan tai osittain. Projektit alkavat pienistä ja muuttuvat yhä monimutkaisemmiksi 12 viikon jakson loppuun mennessä. Tämä opintosuunnitelma sisältää myös jälkikirjoituksen koneoppimisen käytännön sovelluksista, joita voidaan käyttää lisäpisteinä tai keskustelun pohjana. + +> Löydä [käytössäännöt](CODE_OF_CONDUCT.md), [osallistumisohjeet](CONTRIBUTING.md) ja [käännösohjeet](TRANSLATIONS.md). Otamme mielellämme vastaan rakentavaa palautettasi! + +## Jokainen oppitunti sisältää + +- valinnainen piirrosmuistiinpano +- valinnainen lisävideo +- video-opastus (vain joissakin oppitunneissa) +- [lämmittelykysely ennen oppituntia](https://ff-quizzes.netlify.app/en/ml/) +- kirjallinen oppitunti +- projektipohjaisissa oppitunneissa vaiheittaiset ohjeet projektin rakentamiseen +- tietotarkistukset +- haaste +- lisälukemista +- tehtävä +- [kysely oppitunnin jälkeen](https://ff-quizzes.netlify.app/en/ml/) + +> **Huomio kielistä**: Nämä oppitunnit on pääasiassa kirjoitettu Pythonilla, mutta monet ovat saatavilla myös R-kielellä. R-oppitunnin suorittamiseksi siirry `/solution`-kansioon ja etsi R-oppitunnit. Ne sisältävät .rmd-päätteen, joka edustaa **R Markdown** -tiedostoa, jota voidaan yksinkertaisesti määritellä koodilohkojen (R tai muiden kielten) ja YAML-otsikon (ohjaa ulostulon muotoilua, kuten PDF) upottamisena Markdown-dokumenttiin. Näin ollen se toimii esimerkillisenä kirjoituskehyksenä data-analytiikalle, koska sen avulla voit yhdistää koodisi, sen tuloksen ja ajatuksesi kirjoittamalla ne Markdowniin. Lisäksi R Markdown -dokumentit voidaan renderöidä ulostulomuotoihin, kuten PDF, HTML tai Word. + +> **Huomio kyselyistä**: Kaikki kyselyt sisältyvät [Quiz App -kansioon](../../quiz-app), yhteensä 52 kyselyä, joissa on kolme kysymystä kussakin. Ne on linkitetty oppituntien sisällä, mutta kyselysovellus voidaan ajaa paikallisesti; seuraa `quiz-app`-kansion ohjeita paikalliseen isännöintiin tai Azureen julkaisemiseen. + +| Oppitunnin numero | Aihe | Oppituntiryhmä | Oppimistavoitteet | Linkitetty oppitunti | Kirjoittaja | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Johdatus koneoppimiseen | [Johdanto](1-Introduction/README.md) | Opi koneoppimisen peruskäsitteet | [Oppitunti](1-Introduction/1-intro-to-ML/README.md) | Muhammad | +| 02 | Koneoppimisen historia | [Johdanto](1-Introduction/README.md) | Opi tämän alan taustalla oleva historia | [Oppitunti](1-Introduction/2-history-of-ML/README.md) | Jen ja Amy | +| 03 | Oikeudenmukaisuus ja koneoppiminen | [Johdanto](1-Introduction/README.md) | Mitkä ovat tärkeät filosofiset kysymykset oikeudenmukaisuudesta, jotka opiskelijoiden tulisi ottaa huomioon rakentaessaan ja soveltaessaan ML-malleja? | [Oppitunti](1-Introduction/3-fairness/README.md) | Tomomi | +| 04 | Koneoppimisen tekniikat | [Introduction](1-Introduction/README.md) | Mitä tekniikoita koneoppimisen tutkijat käyttävät rakentaakseen koneoppimismalleja? | [Lesson](1-Introduction/4-techniques-of-ML/README.md) | Chris ja Jen | +| 05 | Johdatus regressioon | [Regression](2-Regression/README.md) | Aloita Pythonin ja Scikit-learnin käyttö regressiomallien rakentamisessa | +
                                                              • [Python](2-Regression/1-Tools/README.md)
                                                              • [R](../../2-Regression/1-Tools/solution/R/lesson_1.html)
                                                              |
                                                              • Jen
                                                              • Eric Wanjau
                                                              | +| 06 | Pohjois-Amerikan kurpitsahinnat 🎃 | [Regression](2-Regression/README.md) | Visualisoi ja siivoa data koneoppimista varten |
                                                              • [Python](2-Regression/2-Data/README.md)
                                                              • [R](../../2-Regression/2-Data/solution/R/lesson_2.html)
                                                              |
                                                              • Jen
                                                              • Eric Wanjau
                                                              | +| 07 | Pohjois-Amerikan kurpitsahinnat 🎃 | [Regression](2-Regression/README.md) | Rakenna lineaarisia ja polynomisia regressiomalleja |
                                                              • [Python](2-Regression/3-Linear/README.md)
                                                              • [R](../../2-Regression/3-Linear/solution/R/lesson_3.html)
                                                              |
                                                              • Jen ja Dmitry
                                                              • Eric Wanjau
                                                              | +| 08 | Pohjois-Amerikan kurpitsahinnat 🎃 | [Regression](2-Regression/README.md) | Rakenna logistinen regressiomalli |
                                                              • [Python](2-Regression/4-Logistic/README.md)
                                                              • [R](../../2-Regression/4-Logistic/solution/R/lesson_4.html)
                                                              |
                                                              • Jen
                                                              • Eric Wanjau
                                                              | +| 09 | Verkkosovellus 🔌 | [Web App](3-Web-App/README.md) | Rakenna verkkosovellus käyttämään koulutettua malliasi | [Python](3-Web-App/1-Web-App/README.md) | Jen | +| 10 | Johdatus luokitteluun | [Classification](4-Classification/README.md) | Siivoa, valmistele ja visualisoi data; johdatus luokitteluun |
                                                              • [Python](4-Classification/1-Introduction/README.md)
                                                              • [R](../../4-Classification/1-Introduction/solution/R/lesson_10.html) |
                                                                • Jen ja Cassie
                                                                • Eric Wanjau
                                                                | +| 11 | Herkullisia aasialaisia ja intialaisia ruokia 🍜 | [Classification](4-Classification/README.md) | Johdatus luokittelijoihin |
                                                                • [Python](4-Classification/2-Classifiers-1/README.md)
                                                                • [R](../../4-Classification/2-Classifiers-1/solution/R/lesson_11.html) |
                                                                  • Jen ja Cassie
                                                                  • Eric Wanjau
                                                                  | +| 12 | Herkullisia aasialaisia ja intialaisia ruokia 🍜 | [Classification](4-Classification/README.md) | Lisää luokittelijoita |
                                                                  • [Python](4-Classification/3-Classifiers-2/README.md)
                                                                  • [R](../../4-Classification/3-Classifiers-2/solution/R/lesson_12.html) |
                                                                    • Jen ja Cassie
                                                                    • Eric Wanjau
                                                                    | +| 13 | Herkullisia aasialaisia ja intialaisia ruokia 🍜 | [Classification](4-Classification/README.md) | Rakenna suosittelusovellus mallisi avulla | [Python](4-Classification/4-Applied/README.md) | Jen | +| 14 | Johdatus klusterointiin | [Clustering](5-Clustering/README.md) | Siivoa, valmistele ja visualisoi data; johdatus klusterointiin |
                                                                    • [Python](5-Clustering/1-Visualize/README.md)
                                                                    • [R](../../5-Clustering/1-Visualize/solution/R/lesson_14.html) |
                                                                      • Jen
                                                                      • Eric Wanjau
                                                                      | +| 15 | Nigerian musiikkimakujen tutkiminen 🎧 | [Clustering](5-Clustering/README.md) | Tutustu K-Means-klusterointimenetelmään |
                                                                      • [Python](5-Clustering/2-K-Means/README.md)
                                                                      • [R](../../5-Clustering/2-K-Means/solution/R/lesson_15.html) |
                                                                        • Jen
                                                                        • Eric Wanjau
                                                                        | +| 16 | Johdatus luonnollisen kielen käsittelyyn ☕️ | [Natural language processing](6-NLP/README.md) | Opi NLP:n perusteet rakentamalla yksinkertainen botti | [Python](6-NLP/1-Introduction-to-NLP/README.md) | Stephen | +| 17 | Yleisiä NLP-tehtäviä ☕️ | [Natural language processing](6-NLP/README.md) | Syvennä NLP-tietämystäsi ymmärtämällä yleisiä tehtäviä, jotka liittyvät kielirakenteisiin | [Python](6-NLP/2-Tasks/README.md) | Stephen | +| 18 | Käännös ja sentimenttianalyysi ♥️ | [Natural language processing](6-NLP/README.md) | Käännös ja sentimenttianalyysi Jane Austenin teosten avulla | [Python](6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | Romanttiset hotellit Euroopassa ♥️ | [Natural language processing](6-NLP/README.md) | Sentimenttianalyysi hotelliarvosteluilla 1 | [Python](6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | Romanttiset hotellit Euroopassa ♥️ | [Natural language processing](6-NLP/README.md) | Sentimenttianalyysi hotelliarvosteluilla 2 | [Python](6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | Johdatus aikasarjojen ennustamiseen | [Time series](7-TimeSeries/README.md) | Johdatus aikasarjojen ennustamiseen | [Python](7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ Maailman energiankulutus ⚡️ - aikasarjojen ennustaminen ARIMA:lla | [Time series](7-TimeSeries/README.md) | Aikasarjojen ennustaminen ARIMA-menetelmällä | [Python](7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | ⚡️ Maailman energiankulutus ⚡️ - aikasarjojen ennustaminen SVR:llä | [Time series](7-TimeSeries/README.md) | Aikasarjojen ennustaminen tukivektoriregressiolla | [Python](7-TimeSeries/3-SVR/README.md) | Anirban | +| 24 | Johdatus vahvistusoppimiseen | [Reinforcement learning](8-Reinforcement/README.md) | Johdatus vahvistusoppimiseen Q-Learning-menetelmällä | [Python](8-Reinforcement/1-QLearning/README.md) | Dmitry | +| 25 | Auta Peteriä välttämään susi! 🐺 | [Reinforcement learning](8-Reinforcement/README.md) | Vahvistusoppiminen Gym-menetelmällä | [Python](8-Reinforcement/2-Gym/README.md) | Dmitry | +| Postscript | Todelliset koneoppimisen skenaariot ja sovellukset | [ML in the Wild](9-Real-World/README.md) | Mielenkiintoisia ja paljastavia todellisia sovelluksia klassisesta koneoppimisesta | [Lesson](9-Real-World/1-Applications/README.md) | Team | +| Postscript | Mallin virheenkorjaus koneoppimisessa RAI-ohjauspaneelilla | [ML in the Wild](9-Real-World/README.md) | Mallin virheenkorjaus koneoppimisessa vastuullisen tekoälyn ohjauspaneelikomponenttien avulla | [Lesson](9-Real-World/2-Debugging-ML-Models/README.md) | Ruth Yakubu | + +> [löydä kaikki lisäresurssit tähän kurssiin Microsoft Learn -kokoelmastamme](https://learn.microsoft.com/en-us/collections/qrqzamz1nn2wx3?WT.mc_id=academic-77952-bethanycheum) + +## Offline-käyttö + +Voit käyttää tätä dokumentaatiota offline-tilassa käyttämällä [Docsify](https://docsify.js.org/#/). Haarauta tämä repo, [asenna Docsify](https://docsify.js.org/#/quickstart) paikalliselle koneellesi ja kirjoita tämän repon juurikansiossa `docsify serve`. Verkkosivusto palvelee portissa 3000 paikallisessa verkossasi: `localhost:3000`. + +## PDF:t + +Löydä kurssin PDF-linkkeineen [täältä](https://microsoft.github.io/ML-For-Beginners/pdf/readme.pdf). + + +## 🎒 Muut kurssit + +Tiimimme tuottaa muita kursseja! Tutustu: + +- [Generative AI for Beginners](https://aka.ms/genai-beginners) +- [Generative AI for Beginners .NET](https://github.com/microsoft/Generative-AI-for-beginners-dotnet) +- [Generative AI with JavaScript](https://github.com/microsoft/generative-ai-with-javascript) +- [Generative AI with Java](https://github.com/microsoft/Generative-AI-for-beginners-java) +- [AI for Beginners](https://aka.ms/ai-beginners) +- [Data Science for Beginners](https://aka.ms/datascience-beginners) +- [ML for Beginners](https://aka.ms/ml-beginners) +- [Cybersecurity for Beginners](https://github.com/microsoft/Security-101) +- [Web Dev for Beginners](https://aka.ms/webdev-beginners) +- [IoT for Beginners](https://aka.ms/iot-beginners) +- [XR Development for Beginners](https://github.com/microsoft/xr-development-for-beginners) +- [Mastering GitHub Copilot for Paired Programming](https://github.com/microsoft/Mastering-GitHub-Copilot-for-Paired-Programming) +- [Mastering GitHub Copilot for C#/.NET Developers](https://github.com/microsoft/mastering-github-copilot-for-dotnet-csharp-developers) +- [Choose Your Own Copilot Adventure](https://github.com/microsoft/CopilotAdventures) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/SECURITY.md b/translations/fi/SECURITY.md new file mode 100644 index 000000000..b86bc02b3 --- /dev/null +++ b/translations/fi/SECURITY.md @@ -0,0 +1,51 @@ + +## Turvallisuus + +Microsoft suhtautuu vakavasti ohjelmistotuotteidensa ja palveluidensa turvallisuuteen, mukaan lukien kaikki lähdekoodivarastot, joita hallinnoidaan GitHub-organisaatioidemme kautta, kuten [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) ja [GitHub-organisaatiomme](https://opensource.microsoft.com/). + +Jos uskot löytäneesi tietoturvaheikkouden jossakin Microsoftin omistamassa varastossa, joka täyttää [Microsoftin määritelmän tietoturvaheikkoudesta](https://docs.microsoft.com/previous-versions/tn-archive/cc751383(v=technet.10)?WT.mc_id=academic-77952-leestott), ilmoita siitä meille alla kuvatulla tavalla. + +## Tietoturvaongelmien ilmoittaminen + +**Älä ilmoita tietoturvaheikkouksista julkisten GitHub-ongelmien kautta.** + +Sen sijaan ilmoita niistä Microsoft Security Response Centerille (MSRC) osoitteessa [https://msrc.microsoft.com/create-report](https://msrc.microsoft.com/create-report). + +Jos haluat lähettää ilmoituksen kirjautumatta sisään, lähetä sähköpostia osoitteeseen [secure@microsoft.com](mailto:secure@microsoft.com). Jos mahdollista, salaa viestisi PGP-avaimellamme; lataa se [Microsoft Security Response Center PGP Key -sivulta](https://www.microsoft.com/en-us/msrc/pgp-key-msrc). + +Sinun pitäisi saada vastaus 24 tunnin kuluessa. Jos et jostain syystä saa vastausta, seuraa tilannetta sähköpostitse varmistaaksesi, että alkuperäinen viestisi on vastaanotettu. Lisätietoja löytyy osoitteesta [microsoft.com/msrc](https://www.microsoft.com/msrc). + +Sisällytä pyydetyt tiedot alla olevasta listasta (niin paljon kuin mahdollista), jotta voimme paremmin ymmärtää mahdollisen ongelman luonteen ja laajuuden: + + * Ongelman tyyppi (esim. puskuriylivuoto, SQL-injektio, cross-site scripting jne.) + * Lähdetiedostojen täydet polut, jotka liittyvät ongelman ilmenemiseen + * Vaikuttavan lähdekoodin sijainti (tagi/haara/commit tai suora URL) + * Mahdolliset erityiset konfiguraatiot, jotka vaaditaan ongelman toistamiseen + * Vaiheittaiset ohjeet ongelman toistamiseen + * Proof-of-concept tai hyödyntämiskoodi (jos mahdollista) + * Ongelman vaikutus, mukaan lukien miten hyökkääjä voisi hyödyntää sitä + +Nämä tiedot auttavat meitä käsittelemään raporttisi nopeammin. + +Jos ilmoitat ongelmasta bugipalkkion vuoksi, kattavammat raportit voivat johtaa suurempaan palkkioon. Käy [Microsoft Bug Bounty Program](https://microsoft.com/msrc/bounty) -sivulla saadaksesi lisätietoja aktiivisista ohjelmistamme. + +## Suositellut kielet + +Suosimme, että kaikki viestintä tapahtuu englanniksi. + +## Käytäntö + +Microsoft noudattaa periaatetta [Koordinoitu haavoittuvuuksien julkistaminen](https://www.microsoft.com/en-us/msrc/cvd). + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/SUPPORT.md b/translations/fi/SUPPORT.md new file mode 100644 index 000000000..2db385752 --- /dev/null +++ b/translations/fi/SUPPORT.md @@ -0,0 +1,26 @@ + +# Tuki +## Kuinka raportoida ongelmia ja saada apua + +Tämä projekti käyttää GitHub Issues -järjestelmää virheiden ja ominaisuuspyyntöjen seurantaan. Etsi olemassa olevia +ongelmia ennen kuin luot uuden, jotta vältät päällekkäisyyksiä. Uusien ongelmien kohdalla raportoi virheesi tai +ominaisuuspyyntösi uutena Issue-merkintänä. + +Jos tarvitset apua tai sinulla on kysymyksiä projektin käytöstä, luo Issue-merkintä. + +## Microsoftin tukikäytäntö + +Tuki tälle arkistolle rajoittuu yllä mainittuihin resursseihin. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/docs/_sidebar.md b/translations/fi/docs/_sidebar.md new file mode 100644 index 000000000..e1e1005e7 --- /dev/null +++ b/translations/fi/docs/_sidebar.md @@ -0,0 +1,57 @@ + +- Johdanto + - [Johdatus koneoppimiseen](../1-Introduction/1-intro-to-ML/README.md) + - [Koneoppimisen historia](../1-Introduction/2-history-of-ML/README.md) + - [Koneoppiminen ja oikeudenmukaisuus](../1-Introduction/3-fairness/README.md) + - [Koneoppimisen tekniikat](../1-Introduction/4-techniques-of-ML/README.md) + +- Regressio + - [Työkalut](../2-Regression/1-Tools/README.md) + - [Data](../2-Regression/2-Data/README.md) + - [Lineaarinen regressio](../2-Regression/3-Linear/README.md) + - [Logistinen regressio](../2-Regression/4-Logistic/README.md) + +- Rakenna verkkosovellus + - [Verkkosovellus](../3-Web-App/1-Web-App/README.md) + +- Luokittelu + - [Johdatus luokitteluun](../4-Classification/1-Introduction/README.md) + - [Luokittelijat 1](../4-Classification/2-Classifiers-1/README.md) + - [Luokittelijat 2](../4-Classification/3-Classifiers-2/README.md) + - [Sovellettu koneoppiminen](../4-Classification/4-Applied/README.md) + +- Klusterointi + - [Visualisoi datasi](../5-Clustering/1-Visualize/README.md) + - [K-Means](../5-Clustering/2-K-Means/README.md) + +- NLP + - [Johdatus luonnollisen kielen käsittelyyn](../6-NLP/1-Introduction-to-NLP/README.md) + - [NLP-tehtävät](../6-NLP/2-Tasks/README.md) + - [Käännös ja sentimentti](../6-NLP/3-Translation-Sentiment/README.md) + - [Hotelliarvostelut 1](../6-NLP/4-Hotel-Reviews-1/README.md) + - [Hotelliarvostelut 2](../6-NLP/5-Hotel-Reviews-2/README.md) + +- Aikasarjojen ennustaminen + - [Johdatus aikasarjojen ennustamiseen](../7-TimeSeries/1-Introduction/README.md) + - [ARIMA](../7-TimeSeries/2-ARIMA/README.md) + - [SVR](../7-TimeSeries/3-SVR/README.md) + +- Vahvistusoppiminen + - [Q-Learning](../8-Reinforcement/1-QLearning/README.md) + - [Gym](../8-Reinforcement/2-Gym/README.md) + +- Koneoppiminen tosielämässä + - [Sovellukset](../9-Real-World/1-Applications/README.md) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/for-teachers.md b/translations/fi/for-teachers.md new file mode 100644 index 000000000..375137ba2 --- /dev/null +++ b/translations/fi/for-teachers.md @@ -0,0 +1,37 @@ + +## Opettajille + +Haluaisitko käyttää tätä opetusohjelmaa luokassasi? Ole hyvä ja käytä vapaasti! + +Itse asiassa voit käyttää sitä suoraan GitHubissa hyödyntämällä GitHub Classroomia. + +Tätä varten haarauta tämä repo. Sinun täytyy luoda repo jokaiselle oppitunnille, joten sinun täytyy erottaa jokainen kansio omaksi repokseen. Näin [GitHub Classroom](https://classroom.github.com/classrooms) voi käsitellä jokaisen oppitunnin erikseen. + +Nämä [täydelliset ohjeet](https://github.blog/2020-03-18-set-up-your-digital-classroom-with-github-classroom/) antavat sinulle käsityksen siitä, miten luokkahuoneesi voidaan perustaa. + +## Repon käyttäminen sellaisenaan + +Jos haluat käyttää tätä repoja sellaisena kuin se on, ilman GitHub Classroomia, sekin onnistuu. Sinun täytyy vain viestiä opiskelijoillesi, minkä oppitunnin parissa työskennellä yhdessä. + +Verkko-opetuksessa (Zoom, Teams tai muu) voit muodostaa pienryhmiä visailuja varten ja ohjata opiskelijoita valmistautumaan oppimiseen. Sitten voit kutsua opiskelijat visailuihin ja pyytää heitä lähettämään vastauksensa 'issueina' tiettyyn aikaan. Sama menetelmä voi toimia tehtävien kanssa, jos haluat opiskelijoiden työskentelevän avoimesti yhteistyössä. + +Jos haluat mieluummin yksityisemmän lähestymistavan, pyydä opiskelijoita haarauttamaan opetusohjelma oppitunti kerrallaan omiin GitHub-repoihinsa yksityisinä repoina ja antamaan sinulle käyttöoikeuden. Tällöin he voivat suorittaa visailut ja tehtävät yksityisesti ja lähettää ne sinulle issueina luokkahuoneesi repoon. + +On monia tapoja saada tämä toimimaan verkko-opetuksessa. Kerro meille, mikä toimii parhaiten sinulle! + +## Kerro meille mielipiteesi! + +Haluamme tehdä tästä opetusohjelmasta toimivan sinulle ja opiskelijoillesi. Jätä meille [palautetta](https://forms.microsoft.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2humCsRZhxNuI79cm6n0hRUQzRVVU9VVlU5UlFLWTRLWlkyQUxORTg5WS4u). + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/quiz-app/README.md b/translations/fi/quiz-app/README.md new file mode 100644 index 000000000..226419624 --- /dev/null +++ b/translations/fi/quiz-app/README.md @@ -0,0 +1,126 @@ + +# Visailut + +Nämä visailut ovat ML-kurssin ennakko- ja jälkiluennon visailuja osoitteessa https://aka.ms/ml-beginners + +## Projektin asennus + +``` +npm install +``` + +### Kääntää ja päivittää automaattisesti kehitystä varten + +``` +npm run serve +``` + +### Kääntää ja minimoi tuotantoa varten + +``` +npm run build +``` + +### Tarkistaa ja korjaa tiedostoja + +``` +npm run lint +``` + +### Mukauta asetuksia + +Katso [Asetusten viite](https://cli.vuejs.org/config/). + +Kiitokset: Kiitos tämän visailusovelluksen alkuperäiselle versiolle: https://github.com/arpan45/simple-quiz-vue + +## Julkaisu Azureen + +Tässä vaiheittainen opas, joka auttaa sinua alkuun: + +1. Haarauta GitHub-repositorio +Varmista, että staattisen verkkosovelluksesi koodi on GitHub-repositoriossasi. Haarauta tämä repositorio. + +2. Luo Azure Static Web App +- Luo [Azure-tili](http://azure.microsoft.com) +- Siirry [Azure-portaaliin](https://portal.azure.com) +- Klikkaa “Luo resurssi” ja etsi “Static Web App”. +- Klikkaa “Luo”. + +3. Määritä Static Web App +- Perustiedot: Tilaukset: Valitse Azure-tilauksesi. +- Resurssiryhmä: Luo uusi resurssiryhmä tai käytä olemassa olevaa. +- Nimi: Anna staattiselle verkkosovelluksellesi nimi. +- Alue: Valitse käyttäjiäsi lähinnä oleva alue. + +- #### Julkaisun tiedot: +- Lähde: Valitse “GitHub”. +- GitHub-tili: Valtuuta Azure käyttämään GitHub-tiliäsi. +- Organisaatio: Valitse GitHub-organisaatiosi. +- Repositorio: Valitse repositorio, joka sisältää staattisen verkkosovelluksesi. +- Haara: Valitse haara, josta haluat julkaista. + +- #### Rakennuksen tiedot: +- Rakennusasetukset: Valitse kehys, jolla sovelluksesi on rakennettu (esim. React, Angular, Vue jne.). +- Sovelluksen sijainti: Määritä kansio, joka sisältää sovelluskoodisi (esim. / jos se on juurihakemistossa). +- API:n sijainti: Jos sinulla on API, määritä sen sijainti (valinnainen). +- Tulosteen sijainti: Määritä kansio, johon rakennuksen tuloste luodaan (esim. build tai dist). + +4. Tarkista ja luo +Tarkista asetuksesi ja klikkaa “Luo”. Azure luo tarvittavat resurssit ja luo GitHub Actions -työnkulun repositoriossasi. + +5. GitHub Actions -työnkulku +Azure luo automaattisesti GitHub Actions -työnkulun tiedoston repositoriossasi (.github/workflows/azure-static-web-apps-.yml). Tämä työnkulku hoitaa rakennus- ja julkaisuprosessin. + +6. Seuraa julkaisua +Siirry GitHub-repositoriosi “Toiminnot”-välilehteen. +Näet työnkulun käynnissä. Tämä työnkulku rakentaa ja julkaisee staattisen verkkosovelluksesi Azureen. +Kun työnkulku on valmis, sovelluksesi on käytettävissä annetussa Azure-URL-osoitteessa. + +### Esimerkki työnkulun tiedostosta + +Tässä esimerkki siitä, miltä GitHub Actions -työnkulun tiedosto voi näyttää: +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 +``` + +### Lisäresurssit +- [Azure Static Web Apps -dokumentaatio](https://learn.microsoft.com/azure/static-web-apps/getting-started) +- [GitHub Actions -dokumentaatio](https://docs.github.com/actions/use-cases-and-examples/deploying/deploying-to-azure-static-web-app) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäistä asiakirjaa sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/sketchnotes/LICENSE.md b/translations/fi/sketchnotes/LICENSE.md new file mode 100644 index 000000000..96c51752b --- /dev/null +++ b/translations/fi/sketchnotes/LICENSE.md @@ -0,0 +1,118 @@ + +Oikeudet, tämä Public License koskee myös sitä tietokantaa; ja + + c. et voi tarjota tai asettaa lisäehtoja tai -rajoituksia, tai soveltaa mitään Tehokkaita Teknologisia Toimenpiteitä, jotka rajoittavat oikeuksien käyttöä, jotka on myönnetty tämän Public License -lisenssin nojalla. + + +Osio 5 -- Takuiden ja vastuun rajoitukset. + + a. Ellei toisin ole kirjallisesti sovittu, Licensor ei anna mitään takuita lisensoidusta materiaalista, mukaan lukien, mutta ei rajoittuen, mitään takuita myyntikelpoisuudesta, soveltuvuudesta tiettyyn tarkoitukseen, ei-loukkaamisesta, tai siitä, että lisensoitu materiaali on virheetöntä tai sisältää virheitä. + + b. Licensor ei ole vastuussa mistään suorista, epäsuorista, satunnaisista, erityisistä, seuraamuksellisista tai rangaistuksellisista vahingoista, jotka johtuvat tämän Public License -lisenssin tai lisensoidun materiaalin käytöstä, vaikka Licensor olisi tietoinen tällaisten vahinkojen mahdollisuudesta. + + +Osio 6 -- Kesto ja päättyminen. + + a. Tämä Public License on voimassa niin kauan kuin sovellettavat tekijänoikeudet ja vastaavat oikeudet lisensoidussa materiaalissa ovat voimassa. Kuitenkin, jos rikot tämän Public License -lisenssin ehtoja, oikeutesi lisensoidun materiaalin käyttöön päättyvät automaattisesti. + + b. Jos oikeutesi lisensoidun materiaalin käyttöön ovat päättyneet tämän osion 6(a) nojalla, ne voidaan palauttaa: + + 1. automaattisesti, jos Licensor ei ole ryhtynyt oikeudellisiin toimenpiteisiin oikeuksien päättymisen ilmoittamiseksi; tai + + 2. Licensorin kirjallisella luvalla. + + Tällöin oikeutesi palautetaan niin kauan kuin noudatat tämän Public License -lisenssin ehtoja. + + c. Tämän osion 6(a) ja 6(b) mukainen oikeuksien päättyminen tai palauttaminen ei vaikuta osion 5 ehtojen soveltamiseen. + + d. Licensor voi tarjota lisensoidun materiaalin lisensoitavaksi eri ehdoilla tai lopettaa lisensoidun materiaalin jakelun milloin tahansa; tämä ei kuitenkaan vaikuta tämän Public License -lisenssin ehtojen voimassaoloon niin kauan kuin se on voimassa. + + +Osio 7 -- Muut ehdot. + + a. Licensor ei ole velvollinen tarjoamaan lisensoitua materiaalia sinulle tai muille. + + b. Jos jokin tämän Public License -lisenssin ehto katsotaan täytäntöönpanokelvottomaksi, se ei vaikuta muiden ehtojen täytäntöönpanokelpoisuuteen. + + c. Tämä Public License ei ole peruuttamaton, ellei toisin ole kirjallisesti sovittu Licensorin kanssa. + + d. Sovellettava laki voi sallia tai kieltää tiettyjä ehtoja tässä Public License -lisenssissä. Tämä ei vaikuta tämän Public License -lisenssin ehtojen voimassaoloon. + + +Osio 8 -- Tulkinta. + + a. Tätä Public License -lisenssiä ei tule tulkita rajoittamaan mitään oikeuksia, jotka eivät ole nimenomaisesti myönnetty tässä. + + b. Jos tämän Public License -lisenssin ehtojen ja muiden asiakirjojen välillä on ristiriita, tämän Public License -lisenssin ehdot ovat etusijalla. +Oikeudet, sitten tietokanta, jossa sinulla on Sui Generis -tietokantaoikeudet (mutta ei sen yksittäisiä sisältöjä), on mukautettua materiaalia, + +mukaan lukien osion 3(b) tarkoituksiin; ja +c. Sinun on noudatettava osion 3(a) ehtoja, jos jaat koko tietokannan sisällön tai merkittävän osan siitä. + +Selvyyden vuoksi tämä osio 4 täydentää eikä korvaa velvollisuuksiasi tämän julkisen lisenssin nojalla, kun lisensoidut oikeudet sisältävät muita tekijänoikeuksia ja vastaavia oikeuksia. + +--- + +Osio 5 – Takuiden vastuuvapauslauseke ja vastuun rajoitus. + +a. ELLEI LISENSOINTI OLE ERIKSEEN SITOUTUNUT TOISIN, LISENSOINTI TARJOAA LISENSOITUA MATERIAALIA SELLAISENAAN JA SAATAVILLA OLEVANA, JA EI ANNA MITÄÄN LAUSUNTOJA TAI TAKUITA LISENSOITUA MATERIAALIA KOSKIEN, OLIVAT NE SITTEN NIMENOMAISET, EPÄSUORAT, LAKISÄÄTEISET TAI MUUT. TÄHÄN SISÄLTYY, MUTTA EI RAJOITU, TAKUUT OIKEUDESTA, KAUPALLISESTA KÄYTETTÄVYYDESTÄ, SOPIVUUDESTA TIETTYYN TARKOITUKSEEN, LOUKKAAMATTOMUUDESTA, PIILOVIRHEIDEN TAI MUIDEN VIRHEIDEN PUUTTEESTA, TARKKUUDEN TAI VIRHEIDEN LÄSNÄOLOSTA TAI PUUTTEESTA, OLIVAT NE TUNNETTUJA TAI EI. JOS TAKUIDEN VASTUUVAPAUSLAUSEKKEET EIVÄT OLE SALLITTUJA KOKONAAN TAI OSITTAIN, TÄMÄ VASTUUVAPAUSLAUSEKE EI VÄLTTÄMÄTTÄ KOSKE SINUA. + +b. MAHDOLLISIMMAN LAAJASTI, LISENSOINTI EI MISSÄÄN TAPAUKSESSA OLE VASTUUSSA SINULLE MINKÄÄN OIKEUDELLISEN TEORIAN (MUKAAN LUKIEN, MUTTA EI RAJOITTUEN, HUOLIMATTOMUUS) TAI MUUN PERUSTEELLA MISTÄÄN SUORISTA, ERITYISISTÄ, EPÄSUORISTA, SATUNNAISISTA, SEURAAMUKSELLISISTA, RANGAISTUKSELLISISTA, ESIMERKILLISISTÄ TAI MUISTA MENETYKSISTÄ, KUSTANNUKSISTA, KULUISTA TAI VAHINGOISTA, JOTKA JOHTUVAT TÄSTÄ JULKISESTA LISENSSISTÄ TAI LISENSOITUA MATERIAALIA KOSKEVASTA KÄYTÖSTÄ, VAIKKA LISENSOINTI OLISI SAANUT TIEDON TÄLLAISTEN MENETYSTEN, KUSTANNUSTEN, KULUJEN TAI VAHINKOJEN MAHDOLLISUUDESTA. JOS VASTUUN RAJOITUKSET EIVÄT OLE SALLITTUJA KOKONAAN TAI OSITTAIN, TÄMÄ RAJOITUS EI VÄLTTÄMÄTTÄ KOSKE SINUA. + +c. Edellä mainittu takuiden vastuuvapauslauseke ja vastuun rajoitus tulee tulkita tavalla, joka mahdollisimman pitkälle vastaa täydellistä vastuuvapauslauseketta ja kaikkien vastuiden luopumista. + +--- + +Osio 6 – Kesto ja päättyminen. + +a. Tämä julkinen lisenssi on voimassa lisensoitujen tekijänoikeuksien ja vastaavien oikeuksien voimassaoloajan. Jos kuitenkin rikot tämän julkisen lisenssin ehtoja, oikeutesi tämän julkisen lisenssin nojalla päättyvät automaattisesti. + +b. Jos oikeutesi käyttää lisensoitua materiaalia on päättynyt osion 6(a) nojalla, se palautuu: + +1. automaattisesti siitä päivästä, kun rikkomus korjataan, edellyttäen että se korjataan 30 päivän kuluessa rikkomuksen havaitsemisesta; tai +2. lisensoijan nimenomaisella palautuksella. + +Selvyyden vuoksi tämä osio 6(b) ei vaikuta lisensoijan oikeuteen hakea korvauksia rikkomuksistasi tämän julkisen lisenssin nojalla. + +c. Selvyyden vuoksi lisensoija voi myös tarjota lisensoitua materiaalia erillisin ehdoin tai lopettaa lisensoidun materiaalin jakelun milloin tahansa; tämä ei kuitenkaan lopeta tätä julkista lisenssiä. + +d. Osat 1, 5, 6, 7 ja 8 säilyvät tämän julkisen lisenssin päättymisen jälkeen. + +--- + +Osio 7 – Muut ehdot ja edellytykset. + +a. Lisensoija ei ole sidottu mihinkään lisättyihin tai erilaisiin ehtoihin, jotka sinä kommunikoit, ellei niitä ole nimenomaisesti hyväksytty. + +b. Kaikki järjestelyt, ymmärrykset tai sopimukset lisensoitua materiaalia koskien, joita ei ole mainittu tässä, ovat erillisiä ja riippumattomia tämän julkisen lisenssin ehdoista ja edellytyksistä. + +--- + +Osio 8 – Tulkinta. + +a. Selvyyden vuoksi tämä julkinen lisenssi ei vähennä, rajoita, estä tai aseta ehtoja millekään lisensoidun materiaalin käytölle, joka voidaan laillisesti tehdä ilman lupaa tämän julkisen lisenssin nojalla. + +b. Mahdollisimman pitkälle, jos jokin tämän julkisen lisenssin ehto todetaan täytäntöönpanokelvottomaksi, se korjataan automaattisesti vähimmäismäärään, joka tarvitaan sen täytäntöönpanokelpoiseksi tekemiseksi. Jos ehtoa ei voida korjata, se erotetaan tästä julkisesta lisenssistä vaikuttamatta jäljellä olevien ehtojen ja edellytysten täytäntöönpanokelpoisuuteen. + +c. Tämän julkisen lisenssin ehtoja ei luovuta eikä rikkomuksia hyväksytä, ellei lisensoija nimenomaisesti hyväksy. + +d. Mikään tässä julkisessa lisenssissä ei muodosta eikä sitä voida tulkita rajoitukseksi tai luopumiseksi mistään lisensoijalle tai sinulle kuuluvista etuoikeuksista ja immuniteeteista, mukaan lukien minkä tahansa lainkäyttöalueen tai viranomaisen oikeudenkäyntimenettelyistä. + +--- + +Creative Commons ei ole osapuoli sen julkisissa lisensseissä. Tästä huolimatta Creative Commons voi päättää soveltaa jotakin sen julkisista lisensseistä julkaisemaansa materiaaliin, ja näissä tapauksissa sitä pidetään "lisensoijana". Creative Commonsin julkisten lisenssien teksti on omistettu julkiselle domainille CC0 Public Domain Dedicationin nojalla. Lukuun ottamatta rajoitettua tarkoitusta osoittaa, että materiaali jaetaan Creative Commonsin julkisen lisenssin nojalla tai kuten muutoin sallitaan Creative Commonsin politiikoissa, jotka on julkaistu osoitteessa creativecommons.org/policies, Creative Commons ei anna lupaa käyttää "Creative Commons" -tavaramerkkiä tai mitään muuta Creative Commonsin tavaramerkkiä tai logoa ilman sen etukäteen antamaa kirjallista suostumusta, mukaan lukien, mutta ei rajoittuen, mihin tahansa luvattomiin muutoksiin sen julkisissa lisensseissä tai muihin järjestelyihin, ymmärryksiin tai sopimuksiin, jotka koskevat lisensoidun materiaalin käyttöä. Selvyyden vuoksi tämä kappale ei ole osa julkisia lisenssejä. + +Creative Commonsiin voi ottaa yhteyttä osoitteessa creativecommons.org. + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ No newline at end of file diff --git a/translations/fi/sketchnotes/README.md b/translations/fi/sketchnotes/README.md new file mode 100644 index 000000000..ab07e02dc --- /dev/null +++ b/translations/fi/sketchnotes/README.md @@ -0,0 +1,21 @@ + +Kaikki opetusohjelman sketchnotet voi ladata täältä. + +🖨 Tulostusta varten korkearesoluutioiset TIFF-versiot ovat saatavilla tässä repossa: [this repo](https://github.com/girliemac/a-picture-is-worth-a-1000-words/tree/main/ml/tiff). + +🎨 Tekijä: [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/) + +--- + +**Vastuuvapauslauseke**: +Tämä asiakirja on käännetty käyttämällä tekoälypohjaista käännöspalvelua [Co-op Translator](https://github.com/Azure/co-op-translator). Vaikka pyrimme tarkkuuteen, huomioithan, että automaattiset käännökset voivat sisältää virheitä tai epätarkkuuksia. Alkuperäinen asiakirja sen alkuperäisellä kielellä tulisi pitää ensisijaisena lähteenä. Kriittisen tiedon osalta suositellaan ammattimaista ihmiskäännöstä. Emme ole vastuussa väärinkäsityksistä tai virhetulkinnoista, jotka johtuvat tämän käännöksen käytöstä. \ 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 index e4a4d4053..fab12aa51 100644 --- a/translations/fr/1-Introduction/1-intro-to-ML/README.md +++ b/translations/fr/1-Introduction/1-intro-to-ML/README.md @@ -1,82 +1,82 @@ # Introduction au machine learning -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/1/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) --- [![ML pour débutants - Introduction au Machine Learning pour débutants](https://img.youtube.com/vi/6mSx_KJxcHI/0.jpg)](https://youtu.be/6mSx_KJxcHI "ML pour débutants - Introduction au Machine Learning pour débutants") -> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo expliquant cette leçon. +> 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo sur cette leçon. -Bienvenue dans ce cours sur le machine learning classique pour débutants ! Que vous soyez complètement novice sur ce sujet ou un praticien expérimenté cherchant à réviser une thématique, nous sommes ravis de vous accueillir ! Nous souhaitons créer un point de départ convivial pour vos études en machine learning et serions heureux d'évaluer, répondre et intégrer vos [retours](https://github.com/microsoft/ML-For-Beginners/discussions). +Bienvenue dans ce cours sur le machine learning classique pour débutants ! Que vous soyez complètement novice dans ce domaine ou un praticien expérimenté cherchant à revoir certains aspects, nous sommes ravis de vous accueillir ! Nous souhaitons créer un point de départ convivial pour vos études en machine learning et serions heureux d'évaluer, de répondre et d'intégrer vos [retours](https://github.com/microsoft/ML-For-Beginners/discussions). [![Introduction au ML](https://img.youtube.com/vi/h0e2HAPTGF4/0.jpg)](https://youtu.be/h0e2HAPTGF4 "Introduction au ML") -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : John Guttag du MIT introduit le machine learning. +> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : John Guttag du MIT introduit le machine learning --- ## Premiers pas avec le machine learning -Avant de commencer ce programme, vous devez configurer votre ordinateur pour exécuter des notebooks en local. +Avant de commencer ce programme, vous devez configurer votre ordinateur pour 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 à quelques reprises dans ce cours pour créer des 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, puis forkez ce programme pour l'utiliser vous-même. (N'hésitez pas à nous donner une étoile aussi 😊) +- **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 si ce n'est pas le cas, créez-en un, puis forkez ce programme pour l'utiliser 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 ML que nous utilisons dans ces leçons. --- ## Qu'est-ce que le machine learning ? -Le terme "machine learning" est l'un des termes les plus populaires et fréquemment utilisés aujourd'hui. Il est fort probable que vous ayez entendu ce terme au moins une fois si vous avez une certaine familiarité avec la technologie, quel que soit votre domaine. Cependant, les mécanismes du machine learning restent un mystère pour la plupart des gens. Pour un débutant, le sujet peut parfois sembler écrasant. Il est donc important de comprendre ce qu'est réellement le machine learning et d'apprendre à son sujet étape par étape, à travers des exemples pratiques. +Le terme "machine learning" est l'un des termes les plus populaires et fréquemment utilisés aujourd'hui. Il est fort probable 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 du machine learning restent un mystère pour la plupart des gens. Pour un débutant en machine learning, le sujet peut parfois sembler écrasant. Il est donc important de comprendre ce qu'est réellement le machine learning et d'apprendre à le maîtriser étape par étape, à travers des exemples pratiques. --- ## La courbe de la hype -![courbe de la hype ML](../../../../translated_images/hype.07183d711a17aafe70915909a0e45aa286ede136ee9424d418026ab00fec344c.fr.png) +![courbe de la hype du ML](../../../../1-Introduction/1-intro-to-ML/images/hype.png) > Google Trends montre la récente "courbe de la hype" du terme "machine learning" --- ## Un univers mystérieux -Nous vivons dans un univers rempli de mystères fascinants. De grands scientifiques comme Stephen Hawking, Albert Einstein, et bien d'autres ont consacré leur vie à rechercher des informations significatives pour dévoiler les mystères du monde qui nous entoure. C'est la condition humaine d'apprentissage : un enfant humain apprend de nouvelles choses et découvre la structure de son monde année après année en grandissant. +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 à rechercher des informations significatives pour dévoiler les mystères du monde qui nous entoure. C'est la condition humaine d'apprentissage : 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 et les sens d'un enfant perçoivent les faits de leur environnement et apprennent progressivement les schémas cachés de la vie, ce qui aide l'enfant à élaborer des règles logiques pour identifier ces schémas. Le processus d'apprentissage du cerveau humain fait de nous les créatures vivantes les plus sophistiquées de ce monde. Apprendre continuellement en découvrant des schémas cachés, puis en innovant à partir de ces schémas, nous permet de nous améliorer tout au long de notre vie. Cette capacité d'apprentissage et d'évolution est liée à un concept appelé [plasticité cérébrale](https://www.simplypsychology.org/brain-plasticity.html). Superficiellement, nous pouvons établir des similitudes motivantes entre le processus d'apprentissage du cerveau humain et les concepts du machine learning. +Le cerveau et les sens d'un enfant perçoivent les faits de leur environnement et apprennent progressivement les schémas cachés de la vie, ce qui aide l'enfant à élaborer des règles logiques pour identifier les schémas appris. Le processus d'apprentissage du cerveau humain fait des humains les créatures vivantes les plus sophistiquées de ce monde. Apprendre continuellement en découvrant des schémas cachés, puis en innovant sur ces schémas, nous permet de nous améliorer tout au long de notre vie. Cette capacité d'apprentissage et d'évolution est liée à un concept appelé [plasticité cérébrale](https://www.simplypsychology.org/brain-plasticity.html). Superficiellement, nous pouvons établir des similitudes motivantes entre le processus d'apprentissage du cerveau humain et les concepts du machine learning. --- ## Le cerveau humain -Le [cerveau humain](https://www.livescience.com/29365-human-brain.html) perçoit des éléments 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 se comporter intelligemment. Lorsque nous programmons une imitation de ce processus comportemental intelligent dans une machine, cela s'appelle l'intelligence artificielle (IA). +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 se comporter intelligemment. Lorsque nous programmons une imitation du processus de comportement intelligent dans une machine, cela s'appelle intelligence artificielle (IA). --- ## Quelques terminologies -Bien que les termes puissent prêter à confusion, le machine learning (ML) est un sous-ensemble important de l'intelligence artificielle. **Le ML consiste à utiliser des algorithmes spécialisés pour découvrir des informations significatives et trouver des schémas cachés à partir des données perçues afin de corroborer le processus de prise de décision rationnelle**. +Bien que les termes puissent prêter à confusion, le machine learning (ML) est un sous-ensemble important de l'intelligence artificielle. **Le ML consiste à utiliser des algorithmes spécialisés pour découvrir des informations significatives et trouver des schémas cachés à partir de données perçues afin de corroborer le processus de prise de décision rationnelle**. --- ## IA, ML, Deep Learning -![IA, ML, deep learning, data science](../../../../translated_images/ai-ml-ds.537ea441b124ebf69c144a52c0eb13a7af63c4355c2f92f440979380a2fb08b8.fr.png) +![IA, ML, deep learning, data science](../../../../1-Introduction/1-intro-to-ML/images/ai-ml-ds.png) -> Un diagramme montrant les relations entre l'IA, le ML, le deep learning et la data science. Infographie par [Jen Looper](https://twitter.com/jenlooper) inspirée de [ce graphique](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) +> Un diagramme montrant les relations entre IA, ML, deep learning et data science. Infographie par [Jen Looper](https://twitter.com/jenlooper) inspirée de [ce graphique](https://softwareengineering.stackexchange.com/questions/366996/distinction-between-ai-ml-neural-networks-deep-learning-and-data-mining) --- -## Concepts à couvrir +## Concepts abordés -Dans ce programme, nous allons couvrir uniquement les concepts fondamentaux du machine learning qu'un débutant doit connaître. Nous abordons ce que nous appelons le "machine learning classique", principalement en utilisant Scikit-learn, une excellente bibliothèque que de nombreux étudiants utilisent pour apprendre les bases. Pour comprendre les concepts plus larges de l'intelligence artificielle ou du deep learning, une solide connaissance fondamentale du machine learning est indispensable, et nous souhaitons vous l'offrir ici. +Dans ce programme, nous allons couvrir uniquement les concepts fondamentaux du machine learning qu'un débutant doit connaître. Nous abordons ce que nous appelons le "machine learning classique" principalement en utilisant Scikit-learn, une excellente bibliothèque que de nombreux étudiants utilisent pour apprendre les bases. Pour comprendre les concepts plus larges de l'intelligence artificielle ou du deep learning, une solide connaissance fondamentale du machine learning est indispensable, et nous souhaitons l'offrir ici. --- ## Dans ce cours, vous apprendrez : @@ -99,52 +99,52 @@ Dans ce programme, nous allons couvrir uniquement les concepts fondamentaux du m - les réseaux neuronaux - l'IA -Pour une meilleure expérience d'apprentissage, nous éviterons les complexités des réseaux neuronaux, du "deep learning" - la construction de modèles à plusieurs couches utilisant des réseaux neuronaux - et de l'IA, que nous aborderons dans un autre programme. Nous proposerons également un programme à venir sur la data science pour se concentrer sur cet aspect de ce domaine plus vaste. +Pour offrir une meilleure expérience d'apprentissage, nous éviterons les complexités des réseaux neuronaux, du "deep learning" - la construction de modèles à plusieurs couches utilisant des réseaux neuronaux - et de l'IA, que nous aborderons dans un programme différent. Nous proposerons également un programme de data science à venir pour nous concentrer sur cet aspect de ce domaine plus vaste. --- ## Pourquoi étudier le machine learning ? Le machine learning, d'un point de vue système, 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 s'inspire vaguement de la manière dont le cerveau humain apprend certaines choses à partir des données qu'il perçoit du monde extérieur. +Cette motivation est vaguement inspirée par la façon 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 pourrait vouloir utiliser des stratégies de machine learning plutôt que de créer un moteur basé sur des règles codées en dur. +✅ Réfléchissez un instant à pourquoi une entreprise voudrait utiliser des stratégies de machine learning plutôt que de créer un moteur basé sur des règles codées en dur. --- ## Applications du machine learning -Les applications du machine learning 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 du potentiel immense des algorithmes de machine learning de pointe, les chercheurs explorent leurs capacités à résoudre des problèmes réels multidimensionnels et multidisciplinaires avec des résultats très positifs. +Les applications du machine learning 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 du potentiel immense des algorithmes de machine learning de pointe, les chercheurs explorent leur capacité à résoudre des problèmes réels multidimensionnels et multidisciplinaires avec des résultats très positifs. --- ## Exemples de ML appliqué **Vous pouvez utiliser le machine learning de nombreuses façons** : -- Pour prédire la probabilité d'une maladie à partir des antécédents médicaux ou des rapports d'un patient. +- Pour prédire la probabilité d'une maladie à partir de l'historique médical ou des rapports d'un patient. - Pour exploiter les données météorologiques afin de prévoir des événements climatiques. - Pour comprendre le sentiment d'un texte. -- Pour détecter les fausses nouvelles et stopper la propagation de la propagande. +- Pour détecter les fausses informations et 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 adopté le machine learning pour résoudre les problèmes complexes et gourmands en traitement de données de leur domaine. +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 complexes et lourds en traitement de données de leur domaine. --- ## Conclusion -Le machine learning automatise le processus de découverte de schémas en trouvant des informations significatives à partir de données réelles ou générées. Il s'est avéré extrêmement précieux dans les applications commerciales, de santé et financières, entre autres. +Le machine learning automatise le processus de découverte de schémas en trouvant des informations significatives à partir de données réelles ou générées. Il s'est avéré extrêmement précieux dans les applications commerciales, médicales et financières, entre autres. -Dans un avenir proche, comprendre les bases du machine learning deviendra indispensable pour les personnes de tous domaines en raison de son adoption généralisée. +Dans un avenir proche, comprendre les bases du machine learning sera indispensable pour les personnes de tous domaines en raison de son adoption généralisée. --- # 🚀 Défi -Dessinez, sur papier ou en utilisant 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. Ajoutez quelques idées de problèmes que chacune de ces techniques est bonne à résoudre. +Dessinez, sur papier ou en utilisant une application en ligne comme [Excalidraw](https://excalidraw.com/), votre compréhension des différences entre IA, ML, deep learning et data science. Ajoutez des 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/) +# [Quiz après le cours](https://ff-quizzes.netlify.app/en/ml/) --- -# Révision et auto-apprentissage +# Révision & Auto-apprentissage -Pour en savoir plus sur la façon de travailler avec des 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). +Pour en savoir plus sur la façon dont vous pouvez travailler avec des algorithmes 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). Suivez un [parcours d'apprentissage](https://docs.microsoft.com/learn/modules/introduction-to-machine-learning/?WT.mc_id=academic-77952-leestott) sur les bases du ML. diff --git a/translations/fr/1-Introduction/2-history-of-ML/README.md b/translations/fr/1-Introduction/2-history-of-ML/README.md index 26327fce3..fd48ad93e 100644 --- a/translations/fr/1-Introduction/2-history-of-ML/README.md +++ b/translations/fr/1-Introduction/2-history-of-ML/README.md @@ -1,18 +1,18 @@ # Histoire de l'apprentissage automatique -![Résumé de l'histoire de l'apprentissage automatique sous forme de sketchnote](../../../../translated_images/ml-history.a1bdfd4ce1f464d9a0502f38d355ffda384c95cd5278297a46c9a391b5053bc4.fr.png) +![Résumé de l'histoire de l'apprentissage automatique sous forme de sketchnote](../../../../sketchnotes/ml-history.png) > Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/3/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) --- @@ -22,7 +22,7 @@ CO_OP_TRANSLATOR_METADATA: Dans cette leçon, nous allons parcourir les étapes majeures 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 à celle de l'apprentissage automatique, car les algorithmes et les avancées computationnelles qui sous-tendent l'apprentissage automatique ont alimenté le développement de l'IA. Il est utile de se rappeler que, bien que ces domaines en tant qu'aires d'étude distinctes aient commencé à se cristalliser dans les années 1950, des découvertes importantes [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 explore les bases intellectuelles historiques de l'idée d'une "machine pensante". +L'histoire de l'intelligence artificielle (IA) en tant que domaine est étroitement liée à celle de l'apprentissage automatique, car les algorithmes et les avancées computationnelles qui sous-tendent l'apprentissage automatique ont alimenté le développement de l'IA. Il est utile de se rappeler que, bien que ces domaines en tant qu'aires d'étude distinctes aient commencé à se cristalliser dans les années 1950, des découvertes importantes [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 fondements intellectuels historiques de l'idée d'une "machine pensante". --- ## Découvertes notables @@ -35,33 +35,33 @@ L'histoire de l'intelligence artificielle (IA) en tant que domaine est étroitem --- - 1967 [Plus proche voisin](https://wikipedia.org/wiki/Nearest_neighbor), 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), utilisée pour entraîner les [réseaux neuronaux à propagation avant](https://wikipedia.org/wiki/Feedforward_neural_network). -- 1982 [Réseaux neuronaux récurrents](https://wikipedia.org/wiki/Recurrent_neural_network), dérivés des réseaux neuronaux à propagation avant, qui créent des graphes temporels. +- 1970 [Rétropropagation](https://wikipedia.org/wiki/Backpropagation), utilisée pour entraîner les [réseaux neuronaux feedforward](https://wikipedia.org/wiki/Feedforward_neural_network). +- 1982 [Réseaux neuronaux récurrents](https://wikipedia.org/wiki/Recurrent_neural_network), des réseaux neuronaux artificiels dérivés des réseaux neuronaux feedforward qui créent des graphes temporels. ✅ Faites quelques recherches. Quelles autres dates se démarquent comme étant cruciales dans l'histoire de l'apprentissage automatique et de l'IA ? --- ## 1950 : Des machines qui pensent -Alan Turing, une personne véritablement remarquable, élu [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 contribué à poser les bases du concept de "machine capable de penser". Il a affronté les sceptiques et son propre besoin de preuves empiriques de ce concept, notamment en créant le [Test de Turing](https://www.bbc.com/news/technology-18475646), que vous explorerez dans nos leçons sur le traitement du langage naturel. +Alan Turing, une personne véritablement remarquable qui a été élu [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 contribué à poser les bases du concept d'une "machine capable de penser". Il a affronté les 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 sur le traitement du langage naturel. --- ## 1956 : Projet de recherche d'été à Dartmouth -"Le projet de recherche d'été à 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)). +"Le projet de recherche d'été à 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 le simuler. --- -Le chercheur principal, le professeur de mathématiques John McCarthy, espérait "progresser sur la base de l'hypothèse que 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 le simuler." Les participants comprenaient une autre figure de proue du domaine, Marvin Minsky. +Le chercheur principal, le professeur de mathématiques John McCarthy, espérait "progresser sur la base de l'hypothèse que 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 le simuler." Les participants comprenaient un autre grand nom du 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 axés sur des domaines limités (premiers systèmes experts) et des systèmes déductifs versus inductifs." ([source](https://wikipedia.org/wiki/Dartmouth_workshop)). +L'atelier est crédité d'avoir initié et encouragé plusieurs discussions, notamment "l'essor des méthodes symboliques, des systèmes axés sur des domaines limités (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 dorées" -Des années 1950 jusqu'au milieu des années 1970, l'optimisme était élevé quant à la capacité de l'IA à résoudre de nombreux problèmes. En 1967, Marvin Minsky déclarait avec confiance : "Dans une génération... le problème de la création de 'l'intelligence artificielle' sera en grande partie résolu." (Minsky, Marvin (1967), Computation: Finite and Infinite Machines, Englewood Cliffs, N.J.: Prentice-Hall) +Des années 1950 au milieu des années 1970, l'optimisme était élevé quant à la capacité de l'IA à résoudre de nombreux problèmes. En 1967, Marvin Minsky déclarait avec confiance : "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 en utilisant des instructions en langage clair. @@ -69,21 +69,21 @@ La recherche en traitement du langage naturel a prospéré, la recherche a été La recherche était bien financée par des agences gouvernementales, des avancées ont été réalisées en computation et en algorithmes, et des prototypes de machines intelligentes ont été construits. Certaines de ces machines incluent : -* [Shakey le robot](https://wikipedia.org/wiki/Shakey_the_robot), qui pouvait se déplacer et décider comment accomplir des tâches "intelligemment". +* [Shakey le robot](https://wikipedia.org/wiki/Shakey_the_robot), qui pouvait se déplacer et décider comment effectuer des tâches "intelligemment". - ![Shakey, un robot intelligent](../../../../translated_images/shakey.4dc17819c447c05bf4b52f76da0bdd28817d056fdb906252ec20124dd4cfa55e.fr.jpg) + ![Shakey, un robot intelligent](../../../../1-Introduction/2-history-of-ML/images/shakey.jpg) > Shakey en 1972 --- -* Eliza, un premier "chatterbot", pouvait converser avec des gens et agir comme un "thérapeute" primitif. Vous en apprendrez davantage sur Eliza dans les leçons sur le traitement du langage naturel. +* Eliza, un premier "chatterbot", pouvait converser avec les gens et agir comme un "thérapeute" primitif. Vous en apprendrez davantage sur Eliza dans les leçons sur le traitement du langage naturel. - ![Eliza, un bot](../../../../translated_images/eliza.84397454cda9559bb5ec296b5b8fff067571c0cccc5405f9c1ab1c3f105c075c.fr.png) + ![Eliza, un bot](../../../../1-Introduction/2-history-of-ML/images/eliza.png) > Une version d'Eliza, un chatbot --- -* "Blocks world" était un exemple de micro-monde où des blocs pouvaient être empilés et triés, et des expériences pour enseigner aux machines à prendre des décisions pouvaient être testées. Les avancées réalisées avec des bibliothèques telles que [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ont aidé à propulser le traitement du langage. +* "Blocks world" était un exemple de micro-monde où des blocs pouvaient être empilés et triés, et des expériences pour enseigner aux machines à prendre des décisions pouvaient être testées. Les avancées construites avec des bibliothèques telles que [SHRDLU](https://wikipedia.org/wiki/SHRDLU) ont aidé à propulser le traitement du langage. [![blocks world avec SHRDLU](https://img.youtube.com/vi/QAJz4YKUwqw/0.jpg)](https://www.youtube.com/watch?v=QAJz4YKUwqw "blocks world avec SHRDLU") @@ -92,23 +92,23 @@ La recherche était bien financée par des agences gouvernementales, des avancé --- ## 1974 - 1980 : "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 ses promesses, compte tenu de la puissance de calcul disponible, avaient été exagérées. Le financement s'est tari et la confiance dans le domaine a diminué. Certains problèmes qui ont affecté la confiance incluent : +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 ses promesses, compte tenu de la puissance de calcul disponible, avaient été exagérées. Le financement s'est tari et la confiance dans le domaine a ralenti. Certains problèmes qui ont affecté la confiance incluent : --- - **Limitations**. La puissance de calcul était trop limitée. -- **Explosion combinatoire**. Le nombre de paramètres nécessaires à l'entraînement augmentait de manière exponentielle à mesure que l'on demandait davantage aux ordinateurs, sans une évolution parallèle de la puissance et des capacités de calcul. +- **Explosion combinatoire**. Le nombre de paramètres nécessaires à l'entraînement augmentait de manière exponentielle à mesure que l'on demandait plus aux ordinateurs, sans une évolution parallèle de la puissance et des capacités de calcul. - **Manque de données**. Il y avait un manque de données qui entravait le processus de test, de développement et de raffinement 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é à recevoir des critiques sur leurs approches : - - Les tests de Turing ont été remis en question, notamment par la théorie de la "chambre chinoise", qui postulait que "programmer un ordinateur numérique peut donner l'impression qu'il comprend le langage, mais ne pourrait pas produire une véritable compréhension." ([source](https://plato.stanford.edu/entries/chinese-room/)) + - Les tests de Turing ont été remis en question, entre autres idées, par la théorie de la "chambre chinoise" qui postulait que "programmer un ordinateur numérique peut lui donner l'apparence de comprendre le langage mais ne pourrait pas produire une véritable 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 s'est établie entre les pratiques ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). Les laboratoires _scruffy_ ajustaient les programmes pendant des heures jusqu'à obtenir 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, à mesure que la demande pour rendre les systèmes d'apprentissage automatique reproductibles augmentait, l'approche _neat_ a progressivement pris le devant de la scène, car ses résultats sont plus explicables. +En même temps, diverses écoles de pensée en IA ont commencé à se former. Une dichotomie s'est établie entre les pratiques ["scruffy" vs. "neat AI"](https://wikipedia.org/wiki/Neats_and_scruffies). Les laboratoires _scruffy_ ajustaient les programmes pendant des heures jusqu'à obtenir 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, à mesure que la demande pour rendre les systèmes d'apprentissage automatique reproductibles augmentait, l'approche _neat_ a progressivement pris le devant de la scène car ses résultats sont plus explicables. --- ## Années 1980 : Systèmes experts -À mesure que le domaine se développait, ses avantages pour les entreprises devenaient plus clairs, et dans les années 1980, la prolifération des "systèmes experts" s'est également accrue. "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)). +À mesure que le domaine grandissait, ses avantages pour les entreprises devenaient plus clairs, et dans les années 1980, la prolifération des "systèmes experts" s'est également accrue. "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 en partie en un moteur de règles définissant les exigences métier, et un moteur d'inférence qui exploitait le système de règles pour déduire de nouveaux faits. @@ -122,12 +122,12 @@ La prolifération du matériel spécialisé pour les systèmes experts a eu l'ef --- ## 1993 - 2011 -Cette époque a marqué une nouvelle ère pour l'apprentissage automatique et l'IA, permettant de résoudre certains des problèmes causés auparavant 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, notamment avec l'avènement du smartphone vers 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é à mesure que les jours libres et expérimentaux du passé se cristallisaient en une véritable discipline. +Cette époque a vu une nouvelle ère pour l'apprentissage automatique et l'IA, permettant de résoudre certains des problèmes causés auparavant 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, notamment avec l'avènement du smartphone vers 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é à mesure que les jours libres du passé se cristallisaient en une véritable discipline. --- ## Aujourd'hui -Aujourd'hui, l'apprentissage automatique et l'IA touchent presque toutes les parties 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 humains, comme la vie privée et la liberté d'expression. Ces questions augmentent 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 utilisations acceptables" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). +Aujourd'hui, l'apprentissage automatique et l'IA touchent presque toutes les parties de nos vies. Cette époque appelle à une compréhension attentive des risques et des effets potentiels de ces algorithmes sur les vies humaines. 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 humains comme la vie privée et la liberté d'expression. Ces questions augmentent 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 utilisations acceptables" ([source](https://www.technologyreview.com/2019/12/18/102365/the-future-of-ais-impact-on-society/)). --- @@ -139,9 +139,9 @@ Il reste à voir ce que l'avenir nous réserve, mais il est important de compren --- ## 🚀Défi -Plongez dans l'un de ces moments historiques et apprenez-en davantage sur les personnes derrière eux. Ce sont des personnages fascinants, et aucune découverte scientifique n'a jamais été créée dans un vide culturel. Que découvrez-vous ? +Plongez dans l'un de ces moments historiques et apprenez-en davantage sur les personnes derrière eux. Il y a des personnages fascinants, et aucune découverte scientifique n'a jamais été créée dans un vide culturel. Que découvrez-vous ? -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/4/) +## [Quiz après le cours](https://ff-quizzes.netlify.app/en/ml/) --- ## Révision et étude personnelle diff --git a/translations/fr/1-Introduction/3-fairness/README.md b/translations/fr/1-Introduction/3-fairness/README.md index e19b04052..34b150bba 100644 --- a/translations/fr/1-Introduction/3-fairness/README.md +++ b/translations/fr/1-Introduction/3-fairness/README.md @@ -1,39 +1,39 @@ # Construire des solutions de Machine Learning avec une IA responsable -![Résumé de l'IA responsable dans le Machine Learning sous forme de sketchnote](../../../../translated_images/ml-fairness.ef296ebec6afc98a44566d7b6c1ed18dc2bf1115c13ec679bb626028e852fa1d.fr.png) +![Résumé de l'IA responsable dans le Machine Learning sous forme de sketchnote](../../../../sketchnotes/ml-fairness.png) > Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/5/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) ## Introduction -Dans ce programme, vous commencerez à découvrir comment le machine learning peut influencer et influence déjà notre vie quotidienne. Aujourd'hui, des systèmes et des modèles participent à des tâches de prise de décision quotidienne, comme les diagnostics médicaux, les approbations de prêts ou la détection de fraudes. Il est donc essentiel que ces modèles fonctionnent correctement pour fournir des résultats fiables. Comme pour toute application logicielle, les systèmes d'IA peuvent ne pas répondre aux attentes ou produire des résultats indésirables. C'est pourquoi il est crucial de comprendre et d'expliquer le comportement d'un modèle d'IA. +Dans ce programme, vous commencerez à découvrir comment le machine learning influence et impacte nos vies quotidiennes. Aujourd'hui, des systèmes et modèles participent à des tâches de prise de décision quotidienne, comme les diagnostics médicaux, les approbations de prêts ou la détection de fraudes. Il est donc crucial que ces modèles fonctionnent correctement pour fournir des résultats fiables. Comme tout logiciel, les systèmes d'IA peuvent ne pas répondre aux attentes ou produire 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 produire lorsque les données utilisées pour construire ces modèles manquent de certaines représentations démographiques, comme la race, le genre, les opinions politiques ou la religion, ou lorsqu'elles représentent ces groupes de manière disproportionnée. Que se passe-t-il lorsque les résultats du modèle favorisent certains groupes démographiques ? Quelles sont les conséquences pour l'application ? De plus, que se passe-t-il lorsque le modèle produit 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. +Imaginez ce qui peut arriver lorsque les données utilisées pour construire ces modèles manquent de représentations de certains groupes démographiques, comme la race, le genre, les opinions politiques ou la religion, ou lorsqu'elles surreprésentent certains groupes. Que se passe-t-il lorsque les résultats du modèle favorisent un groupe démographique particulier ? Quelles sont les conséquences pour l'application ? De plus, que se passe-t-il lorsque le modèle produit 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 le machine learning et des préjudices liés à l'équité. -- Vous familiariser avec la pratique d'exploration des cas particuliers et des scénarios inhabituels pour garantir la fiabilité et la sécurité. +- Prendre conscience de l'importance de l'équité dans le machine learning et des préjudices liés à l'injustice. +- Vous familiariser avec la pratique d'exploration des cas atypiques et des scénarios inhabituels pour garantir fiabilité et sécurité. - Comprendre la nécessité de concevoir des systèmes inclusifs pour autonomiser tout le monde. -- Explorer l'importance de protéger la vie privée et la sécurité des données et des personnes. +- Explorer l'importance de protéger la vie privée et la sécurité des données et des individus. - Découvrir l'importance d'une approche transparente pour expliquer le comportement des modèles d'IA. -- Être attentif au rôle essentiel de la responsabilité pour instaurer la confiance dans les systèmes d'IA. +- Être attentif à l'importance de la responsabilité pour instaurer la confiance dans les systèmes d'IA. ## Prérequis En guise de 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) +Apprenez-en davantage 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) [![Approche de Microsoft sur l'IA responsable](https://img.youtube.com/vi/dnC8-uUZXSc/0.jpg)](https://youtu.be/dnC8-uUZXSc "Approche de Microsoft sur l'IA responsable") @@ -41,51 +41,51 @@ En savoir plus sur l'IA responsable en suivant ce [parcours d'apprentissage](htt ## Équité -Les systèmes d'IA doivent traiter tout le monde de manière équitable et éviter d'affecter différemment des groupes similaires de personnes. Par exemple, lorsque les systèmes d'IA fournissent des recommandations sur les traitements médicaux, les demandes de prêt ou l'emploi, ils doivent faire les mêmes recommandations à tous ceux qui présentent des symptômes, des circonstances financières ou des qualifications professionnelles similaires. Chacun de nous, en tant qu'humain, porte des biais hérités qui influencent nos décisions et nos actions. Ces biais peuvent se refléter dans les données que nous utilisons pour entraîner les systèmes d'IA. Ces manipulations peuvent parfois se produire involontairement. Il est souvent difficile de savoir consciemment quand vous introduisez un biais dans les données. +Les systèmes d'IA doivent traiter tout le monde de manière équitable et éviter d'affecter différemment des groupes similaires. Par exemple, lorsque les systèmes d'IA fournissent des recommandations sur les traitements médicaux, les demandes de prêt ou l'emploi, ils doivent faire les mêmes recommandations à tous ceux qui présentent des symptômes, des circonstances financières ou des qualifications professionnelles similaires. Chacun de nous, en tant qu'humain, porte des biais hérités qui influencent nos décisions et actions. Ces biais peuvent se refléter dans les données utilisées pour entraîner les systèmes d'IA. Ces manipulations peuvent parfois se produire involontairement. Il est souvent difficile de savoir consciemment quand on introduit des 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 genre, d'âge ou de handicap. Les principaux préjudices liés à l'équité peuvent être classés comme suit : +**L'“injustice”** englobe les impacts négatifs, ou “préjudices”, pour un groupe de personnes, comme ceux définis en termes de race, genre, âge ou statut de handicap. Les principaux préjudices liés à l'équité peuvent être classés comme suit : -- **Allocation**, si un genre ou une ethnie, par exemple, est favorisé par rapport à un autre. -- **Qualité du service**. Si vous entraînez les données pour un scénario spécifique mais que la réalité est beaucoup plus complexe, cela conduit à un service de mauvaise qualité. Par exemple, un distributeur de savon qui semble incapable de détecter les personnes à la peau foncée. [Référence](https://gizmodo.com/why-cant-this-soap-dispenser-identify-dark-skin-1797931773) +- **Allocation**, lorsque, par exemple, un genre ou une ethnie est favorisé par rapport à un autre. +- **Qualité du service**. Si vous entraînez les données pour un scénario spécifique alors que la réalité est bien plus complexe, cela conduit à un service de mauvaise qualité. Par exemple, un distributeur de savon qui ne semble pas 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 ou étiqueter injustement quelque chose ou quelqu'un. Par exemple, une technologie de reconnaissance d'images a tristement mal identifié des images de personnes à la peau foncée comme des gorilles. -- **Sur- ou sous-représentation**. L'idée qu'un certain groupe n'est pas représenté dans une certaine profession, et tout service ou fonction qui continue de promouvoir cela contribue au préjudice. -- **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 présenter des inexactitudes dues à des mots associés à des stéréotypes de genre. +- **Sur- ou sous-représentation**. L'idée qu'un certain groupe n'est pas représenté dans une profession donnée, et tout service ou fonction qui continue de promouvoir cela contribue au préjudice. +- **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 présenter des inexactitudes dues à des associations stéréotypées liées au genre. -![traduction en turc](../../../../translated_images/gender-bias-translate-en-tr.f185fd8822c2d4372912f2b690f6aaddd306ffbb49d795ad8d12a4bf141e7af0.fr.png) +![traduction en turc](../../../../1-Introduction/3-fairness/images/gender-bias-translate-en-tr.png) > traduction en turc -![traduction en anglais](../../../../translated_images/gender-bias-translate-tr-en.4eee7e3cecb8c70e13a8abbc379209bc8032714169e585bdeac75af09b1752aa.fr.png) +![traduction en anglais](../../../../1-Introduction/3-fairness/images/gender-bias-translate-tr-en.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, que les êtres humains sont également interdits de prendre. Garantir l'équité dans l'IA et le machine learning reste un défi sociotechnique complexe. ### Fiabilité et sécurité -Pour instaurer 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, en particulier lorsqu'il s'agit de cas particuliers. Lors de la création de solutions d'IA, il est nécessaire de se concentrer fortement 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 donner la priorité à la sécurité des personnes. En conséquence, l'IA qui alimente la voiture doit prendre en compte tous les scénarios possibles que la voiture pourrait rencontrer, comme la nuit, les orages ou les tempêtes de neige, les enfants traversant la rue, les animaux domestiques, les travaux routiers, etc. La capacité d'un système d'IA à gérer de manière fiable et sûre une large gamme de conditions 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. +Pour instaurer 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, en particulier lorsqu'il s'agit de cas atypiques. 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 donner la priorité à la sécurité des personnes. En conséquence, l'IA qui alimente la voiture doit prendre en compte tous les scénarios possibles que la voiture pourrait rencontrer, comme la nuit, les orages ou les tempêtes de neige, les enfants traversant la rue, les animaux domestiques, les travaux routiers, etc. La capacité d'un système d'IA à gérer de manière fiable et sûre une large gamme de conditions 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) ### Inclusion -Les systèmes d'IA doivent être conçus pour engager et autonomiser tout le monde. Lors de la conception et de la mise en œuvre des systèmes d'IA, les data scientists et les développeurs d'IA identifient et abordent les obstacles potentiels dans le système qui pourraient exclure involontairement des personnes. Par exemple, il y a 1 milliard de personnes handicapées dans le monde. Avec les avancées de l'IA, elles peuvent accéder à une large gamme d'informations et d'opportunités plus facilement dans leur vie quotidienne. En abordant ces obstacles, cela crée des opportunités d'innover et de développer des produits d'IA avec de meilleures expériences qui profitent à tout le monde. +Les systèmes d'IA doivent être conçus pour engager et autonomiser tout le monde. Lors de la conception et de la mise en œuvre des systèmes d'IA, les data scientists et les développeurs d'IA identifient et abordent les obstacles potentiels dans le système qui pourraient exclure involontairement des personnes. Par exemple, il y a 1 milliard de personnes handicapées dans le monde. Avec les avancées de l'IA, elles peuvent accéder plus facilement à une large gamme d'informations et d'opportunités dans leur vie quotidienne. En abordant ces obstacles, cela crée des opportunités d'innover et de développer des produits d'IA avec de meilleures expériences qui profitent à tout le monde. > [🎥 Cliquez ici pour une vidéo : inclusion dans l'IA](https://www.microsoft.com/videoplayer/embed/RE4vl9v) ### Sécurité et confidentialité -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 leur vie privée, leurs informations ou leur vie en danger. Lors de l'entraînement des modèles de machine learning, nous nous appuyons sur les données pour produire les meilleurs résultats. 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 les utilisateurs ou sont-elles disponibles publiquement ? Ensuite, lors du travail avec les 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, protéger la vie privée et sécuriser les informations personnelles et professionnelles importantes devient de plus en plus critique et complexe. Les problèmes de confidentialité et de sécurité des données nécessitent une attention particulière pour l'IA, car l'accès aux données est essentiel pour que les systèmes d'IA fassent des prédictions et des décisions précises et éclairées sur les personnes. +Les systèmes d'IA doivent être sûrs et respecter la vie privée des individus. Les gens ont moins confiance dans les systèmes qui mettent leur vie privée, leurs informations ou leur sécurité en danger. Lors de l'entraînement des modèles de machine learning, nous nous appuyons sur les données pour produire les meilleurs résultats. 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 les utilisateurs ou sont-elles disponibles publiquement ? Ensuite, en travaillant avec les 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, protéger la vie privée et sécuriser les informations personnelles et professionnelles importantes devient de plus en plus critique et complexe. Les questions de confidentialité et de sécurité des données nécessitent une attention particulière pour l'IA, car l'accès aux données est essentiel pour que les systèmes d'IA fassent des prédictions et des décisions précises et éclairées sur les individus. > [🎥 Cliquez ici pour une vidéo : sécurité dans l'IA](https://www.microsoft.com/videoplayer/embed/RE4voJF) - En tant qu'industrie, nous avons réalisé des avancées significatives en matière de confidentialité et de sécurité, largement alimentées par des réglementations comme le RGPD (Règlement Général sur la Protection des Données). - Cependant, avec les systèmes d'IA, nous devons reconnaître la tension entre le besoin de données personnelles pour rendre les systèmes plus efficaces et la protection de la vie privée. -- Tout comme avec la naissance des ordinateurs connectés à Internet, nous observons également une augmentation significative du nombre de problèmes de sécurité liés à l'IA. +- Tout comme avec la naissance des ordinateurs connectés à Internet, nous observons également une augmentation significative des problèmes de sécurité liés à l'IA. - En même temps, nous avons vu l'IA être 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 nous assurer que nos processus de data science s'harmonisent avec les dernières pratiques en matière de confidentialité et de sécurité. +- Nous devons nous assurer que nos processus de Data Science 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 essentielle 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 involontaires. Nous croyons également que ceux qui utilisent les systèmes d'IA doivent être honnêtes et transparents sur le moment, la raison et la manière dont 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 aux consommateurs, 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 répond aux exigences réglementaires, en particulier lorsqu'il y a un résultat indésirable. +Les systèmes d'IA doivent être compréhensibles. Une partie essentielle 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 involontaires. Nous pensons également que ceux qui utilisent les systèmes d'IA doivent être honnêtes et transparents sur le moment, les raisons et la manière dont 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 aux consommateurs, 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 répond aux exigences réglementaires, en particulier 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) @@ -95,32 +95,32 @@ Les systèmes d'IA doivent être compréhensibles. Une partie essentielle de la ### Responsabilité -Les personnes qui conçoivent et déploient des systèmes d'IA doivent être responsables de leur fonctionnement. La nécessité de responsabilité est particulièrement cruciale avec les technologies sensibles comme la reconnaissance faciale. Récemment, la demande pour la technologie de reconnaissance faciale a augmenté, notamment de la part des organisations de maintien de l'ordre qui voient le potentiel de cette 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, par exemple en permettant une surveillance continue de certains individus. Ainsi, 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é. +Les personnes qui conçoivent et déploient des systèmes d'IA doivent être responsables de leur fonctionnement. La nécessité de responsabilité est particulièrement cruciale avec les technologies sensibles comme la reconnaissance faciale. Récemment, la demande pour la technologie de reconnaissance faciale a augmenté, notamment de la part des organisations de maintien de l'ordre qui voient le potentiel de cette technologie pour des usages comme retrouver des enfants disparus. Cependant, ces technologies pourraient être utilisées par un gouvernement pour mettre en danger les libertés fondamentales de ses citoyens, par exemple en permettant une surveillance continue de certains individus. Ainsi, 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 met en garde contre la surveillance de masse via la reconnaissance faciale](../../../../translated_images/accountability.41d8c0f4b85b6231301d97f17a450a805b7a07aaeb56b34015d71c757cad142e.fr.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Approche de Microsoft sur l'IA responsable") +[![Un chercheur en IA met en garde contre la surveillance de masse via la reconnaissance faciale](../../../../1-Introduction/3-fairness/images/accountability.png)](https://www.youtube.com/watch?v=Wldt8P5V6D0 "Approche de Microsoft sur l'IA responsable") -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Avertissements sur la surveillance de masse via la reconnaissance faciale +> 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Mises en garde contre la surveillance de masse via 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 à introduire l'IA dans la société, est de savoir comment garantir que les ordinateurs resteront responsables envers les personnes et comment garantir que les personnes qui conçoivent les ordinateurs restent responsables envers tout le monde. +En fin de compte, l'une des plus grandes questions pour notre génération, en tant que première génération à introduire l'IA dans la société, est de savoir comment garantir que les ordinateurs resteront responsables envers les humains et comment s'assurer que les personnes qui conçoivent les ordinateurs restent responsables envers tout le monde. ## Évaluation de l'impact -Avant d'entraîner un modèle de machine learning, il est important de réaliser une évaluation de l'impact pour comprendre l'objectif du système d'IA, son utilisation prévue, son lieu de déploiement et les personnes qui interagiront avec le système. Ces éléments sont utiles pour les examinateurs ou les testeurs qui évaluent le système afin de savoir quels facteurs prendre en compte lors de l'identification des risques potentiels et des conséquences attendues. +Avant d'entraîner un modèle de machine learning, il est important de réaliser une évaluation de l'impact pour comprendre l'objectif du système d'IA, son utilisation prévue, son lieu de déploiement et les personnes qui interagiront avec le système. Ces éléments sont utiles pour les examinateurs ou testeurs qui évaluent le système afin de savoir quels facteurs prendre en compte pour identifier les risques potentiels et les conséquences attendues. Les domaines suivants sont à examiner lors de l'évaluation de l'impact : -* **Impact négatif sur les individus**. Être conscient de toute restriction ou exigence, utilisation non prise en charge ou toute limitation connue entravant les performances du système est essentiel pour garantir que le système n'est pas utilisé de manière à nuire aux individus. +* **Impact négatif sur les individus**. Être conscient de toute restriction ou exigence, utilisation non prise en charge ou toute limitation connue entravant les performances du système est essentiel pour garantir 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 les 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 RGPD ou HIPAA). En outre, examinez si la source ou la quantité de données est suffisante pour l'entraînement. * **Résumé de l'impact**. Rassemblez une liste des préjudices potentiels qui pourraient découler de l'utilisation du système. Tout au long du cycle de vie du ML, vérifiez si les problèmes identifiés sont atténués ou résolus. * **Objectifs applicables** pour chacun des six principes fondamentaux. Évaluez si les objectifs de chaque principe sont atteints et s'il existe des lacunes. ## Débogage avec une 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 pour identifier et résoudre les problèmes du système. De nombreux facteurs peuvent affecter les performances d'un modèle qui ne répond pas aux attentes ou aux principes de responsabilité. La plupart des métriques traditionnelles de performance des modèles sont des agrégats quantitatifs des performances d'un modèle, ce qui n'est pas suffisant pour analyser comment un modèle viole les principes de l'IA responsable. De plus, un modèle de machine learning est une boîte noire qui rend difficile la compréhension de ce qui motive ses résultats ou l'explication de ses erreurs. Plus tard dans ce cours, nous apprendrons à utiliser le tableau de bord de l'IA responsable pour aider à déboguer les systèmes d'IA. Ce tableau de bord fournit un outil holistique pour les data scientists et les développeurs d'IA afin de réaliser : +Tout comme le débogage d'une application logicielle, le débogage d'un système d'IA est un processus nécessaire pour identifier et résoudre les problèmes dans le système. De nombreux facteurs peuvent affecter les performances d'un modèle et l'empêcher d'agir de manière responsable. La plupart des métriques traditionnelles de performance des modèles sont des agrégats quantitatifs des performances d'un modèle, ce qui n'est pas suffisant pour analyser comment un modèle viole les principes de l'IA responsable. De plus, un modèle de machine learning est une boîte noire, ce qui rend difficile de comprendre ce qui motive ses résultats ou d'expliquer ses erreurs. Plus tard dans ce cours, nous apprendrons à utiliser le tableau de bord de l'IA responsable pour aider à déboguer les systèmes d'IA. Ce 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 répartition des erreurs du modèle qui peut affecter l'équité ou la fiabilité du système. -* **Vue d'ensemble du modèle**. Découvrir où il y a des disparités dans les performances du modèle à travers les cohortes de données. -* **Analyse des données**. Comprendre la répartition des données et identifier tout biais potentiel dans les données pouvant entraîner des problèmes d'équité, d'inclusion et de fiabilité. +* **Analyse des erreurs**. Identifier la distribution des erreurs du modèle qui peut affecter l'équité ou la fiabilité du système. +* **Vue d'ensemble du modèle**. Découvrir où il existe des disparités dans les performances 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 pouvant entraîner des problèmes d'équité, d'inclusion 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 @@ -131,34 +131,34 @@ Pour éviter que des préjudices ne soient introduits dès le départ, nous devr - 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 du machine learning pour détecter et corriger les problèmes liés à l'IA responsable lorsqu'ils surviennent -Réfléchissez à des scénarios réels où le manque de fiabilité d'un modèle est évident dans sa construction et son utilisation. Que devrions-nous également prendre en compte ? +Réfléchissez à des scénarios réels où le manque de fiabilité d'un modèle est évident dans sa création et son utilisation. Que devrions-nous considérer d'autre ? + +## [Quiz après le cours](https://ff-quizzes.netlify.app/en/ml/) -## [Quiz après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/6/) ## Révision et étude personnelle -Dans cette leçon, vous avez appris les bases des concepts d'équité et d'injustice en apprentissage automatique. -Regardez cet atelier pour approfondir les sujets : +Dans cette leçon, vous avez appris les bases des concepts d'équité et d'injustice dans le machine learning. +Regardez cet atelier pour approfondir les sujets abordés : - À la recherche d'une IA responsable : Mettre les principes en pratique par Besmira Nushi, Mehrnoosh Sameki et Amit Sharma [![Responsible AI Toolbox : 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 "RAI Toolbox : Un cadre open-source pour construire une IA responsable") - > 🎥 Cliquez sur l'image ci-dessus pour une vidéo : RAI Toolbox : Un cadre open-source pour construire une IA responsable par Besmira Nushi, Mehrnoosh Sameki et Amit Sharma -Lisez également : +À lire également : -- Centre de ressources RAI de Microsoft : [Responsible AI Resources – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) +- Centre de ressources RAI de Microsoft : [Ressources sur l'IA responsable – Microsoft AI](https://www.microsoft.com/ai/responsible-ai-resources?activetab=pivot1%3aprimaryr4) -- Groupe de recherche FATE de Microsoft : [FATE : Fairness, Accountability, Transparency, and Ethics in AI - Microsoft Research](https://www.microsoft.com/research/theme/fate/) +- Groupe de recherche FATE de Microsoft : [FATE : Équité, Responsabilité, Transparence et Éthique dans l'IA - Microsoft Research](https://www.microsoft.com/research/theme/fate/) -RAI Toolbox : +RAI Toolbox : - [Dépôt GitHub de Responsible AI Toolbox](https://github.com/microsoft/responsible-ai-toolbox) Découvrez les 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) +- [Azure Machine Learning](https://docs.microsoft.com/azure/machine-learning/concept-fairness-ml?WT.mc_id=academic-77952-leestott) ## Devoir diff --git a/translations/fr/1-Introduction/4-techniques-of-ML/README.md b/translations/fr/1-Introduction/4-techniques-of-ML/README.md index 35cdc080d..918d6eef2 100644 --- a/translations/fr/1-Introduction/4-techniques-of-ML/README.md +++ b/translations/fr/1-Introduction/4-techniques-of-ML/README.md @@ -1,22 +1,22 @@ -# Techniques d'apprentissage automatique +# Techniques de l'apprentissage automatique Le processus de création, d'utilisation et de maintenance des modèles d'apprentissage automatique ainsi que 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 ce processus et présenter les principales techniques que vous devez connaître. Vous allez : - Comprendre les processus qui sous-tendent l'apprentissage automatique à un niveau général. - Explorer des concepts de base tels que les "modèles", les "prédictions" et les "données d'entraînement". -## [Quiz pré-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/7/) +## [Quiz avant la leçon](https://ff-quizzes.netlify.app/en/ml/) -[![ML pour débutants - Techniques d'apprentissage automatique](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML pour débutants - Techniques d'apprentissage automatique") +[![ML pour débutants - Techniques de l'apprentissage automatique](https://img.youtube.com/vi/4NGM0U2ZSHU/0.jpg)](https://youtu.be/4NGM0U2ZSHU "ML pour débutants - Techniques de l'apprentissage automatique") > 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo expliquant cette leçon. @@ -24,103 +24,103 @@ Le processus de création, d'utilisation et de maintenance des modèles d'appren À un niveau général, l'art de créer des processus d'apprentissage automatique (ML) comprend plusieurs étapes : -1. **Définir la question**. La plupart des processus ML commencent par poser une question qui ne peut pas être résolue par un simple programme conditionnel ou un moteur basé sur des règles. Ces questions tournent souvent autour de prédictions basées sur un ensemble de données. -2. **Collecter et préparer les données**. Pour répondre à votre question, vous avez besoin de données. La qualité et, parfois, la quantité de vos données détermineront dans quelle mesure vous pouvez répondre à votre question initiale. La visualisation des données est un aspect important de cette phase. Cette phase inclut également la division des données en groupes d'entraînement et de test pour construire un modèle. -3. **Choisir une méthode d'entraînement**. Selon votre question et la nature de vos données, vous devez choisir comment entraîner un modèle pour qu'il reflète au mieux vos données et fasse des prédictions précises. Cette partie du processus ML nécessite une expertise spécifique et, souvent, beaucoup d'expérimentation. -4. **Entraîner le modèle**. À l'aide de 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 peut s'appuyer sur des poids internes ajustables pour privilégier certaines parties des données afin de construire un meilleur modèle. -5. **Évaluer le modèle**. Vous utilisez des données jamais vues auparavant (vos données de test) issues de votre ensemble collecté pour évaluer les performances du modèle. -6. **Ajuster les paramètres**. En fonction des performances de votre modèle, vous pouvez recommencer 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. +1. **Définir 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 de prédictions basées sur un ensemble de données. +2. **Collecter et préparer les données**. Pour répondre à votre question, vous avez besoin de données. La qualité et, parfois, la quantité de vos données détermineront à quel point vous pouvez répondre à votre question initiale. La visualisation des données est un aspect important de cette phase. Cette phase inclut également la division des données en un groupe d'entraînement et un groupe de test pour construire un modèle. +3. **Choisir une méthode d'entraînement**. En fonction de votre question et de la nature de vos données, vous devez choisir comment entraîner un modèle pour qu'il reflète au mieux vos données et fasse des prédictions précises. Cette partie du processus ML nécessite une expertise spécifique et, souvent, une quantité considérable d'expérimentation. +4. **Entraîner le modèle**. À l'aide de 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 peut utiliser des 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. **Évaluer le modèle**. Vous utilisez des données jamais vues auparavant (vos données de test) issues de votre ensemble collecté pour voir comment le modèle fonctionne. +6. **Ajustement des paramètres**. En fonction des performances de votre modèle, vous pouvez recommencer 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 capacité est très utile pour les chercheurs qui se posent des questions sur un domaine donné et qui ne peuvent pas être facilement résolues par un moteur basé sur des règles conditionnelles. Dans une tâche actuarielle, par exemple, un data scientist pourrait construire des règles artisanales sur la mortalité des fumeurs par rapport aux non-fumeurs. +Les ordinateurs sont particulièrement doués pour découvrir des motifs cachés dans les données. Cette capacité est très utile pour les chercheurs qui ont des questions sur un domaine donné et qui ne peuvent pas être facilement répondus en créant un moteur basé sur des règles conditionnelles. Par exemple, dans une tâche actuarielle, un data scientist pourrait construire des règles sur mesure concernant la mortalité des fumeurs par rapport aux non-fumeurs. -Cependant, lorsque de nombreuses autres variables entrent en jeu, un modèle ML pourrait s'avérer plus efficace pour prédire les taux de mortalité futurs en se basant sur des antécédents médicaux. Un exemple plus joyeux pourrait être de faire des prévisions météorologiques pour le mois d'avril dans un lieu donné en se basant sur des données telles que la latitude, la longitude, le changement climatique, la proximité de l'océan, les motifs du courant-jet, et plus encore. +Cependant, lorsque de nombreuses autres variables entrent en jeu, un modèle ML pourrait s'avérer plus efficace pour prédire les taux de mortalité futurs en fonction des antécédents de santé passés. Un exemple plus joyeux pourrait être de faire des prédictions météorologiques pour le mois d'avril dans un lieu donné en fonction de données telles que la latitude, la longitude, le changement climatique, la proximité de l'océan, les motifs du courant-jet, 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 du ML dans l'analyse météorologique. +✅ 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 du ML dans l'analyse météorologique. -## Tâches préalables à la construction +## Tâches avant la 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 répondre à votre question avec certitude, vous avez besoin d'une quantité suffisante de données du bon type. À ce stade, deux choses sont nécessaires : +Pour répondre à votre question avec certitude, vous avez besoin d'une quantité suffisante de données du bon type. À ce stade, vous devez faire deux choses : -- **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, des biais inhérents qu'elles pourraient contenir, et documentez leur origine. -- **Préparer les données**. Il existe plusieurs étapes dans le processus de préparation des données. Vous pourriez avoir besoin de regrouper les données et de 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 de caractères en nombres (comme nous le faisons dans [Clustering](../../5-Clustering/1-Visualize/README.md)). Vous pourriez également générer de nouvelles données à partir des données originales (comme nous le faisons dans [Classification](../../4-Classification/1-Introduction/README.md)). Vous pouvez nettoyer et éditer les données (comme nous le ferons avant la leçon sur [l'application web](../../3-Web-App/README.md)). Enfin, vous pourriez également avoir besoin de les randomiser et de les mélanger, selon vos techniques d'entraînement. +- **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, des biais inhérents qu'elles pourraient avoir, et documentez leur origine. +- **Préparer les données**. Il existe plusieurs étapes dans le processus de préparation des données. Vous pourriez avoir besoin de rassembler des données et de 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 de caractères 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 éditer 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, selon vos techniques d'entraînement. -✅ Après avoir collecté et traité vos données, prenez un moment pour vérifier si leur structure vous permettra de répondre à votre question. Il se peut que les données ne soient pas adaptées à votre tâche, comme nous le découvrons dans nos leçons sur le [Clustering](../../5-Clustering/1-Visualize/README.md) ! +✅ Après avoir collecté et traité vos données, prenez un moment pour vérifier si leur structure vous permettra de répondre à votre question. Il se peut que les données ne soient pas performantes pour votre tâche, 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 comme un en-tête de colonne tel que 'date', 'taille' ou 'couleur'. Votre variable caractéristique, généralement représentée par `X` dans le code, représente la variable d'entrée utilisée pour entraîner le modèle. +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 comme un en-tête de colonne tel que '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 ce que vous essayez de prédire. La cible, généralement représentée par `y` dans le code, correspond à la réponse à la question que vous posez à vos données : en décembre, quelle **couleur** de citrouilles sera la moins chère ? À San Francisco, quels quartiers auront les meilleurs **prix** immobiliers ? Parfois, la cible est également appelée attribut d'étiquette. +Une cible est ce que vous essayez de prédire. La cible, généralement représentée par `y` dans le code, 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 les meilleurs **prix** immobiliers ? Parfois, la cible est également appelée attribut d'étiquette. -### Sélectionner votre variable caractéristique +### Sélectionner votre variable de caractéristique -🎓 **Sélection et extraction de caractéristiques** Comment savoir quelle variable choisir lors de la construction d'un modèle ? Vous passerez probablement par un processus de sélection ou d'extraction de caractéristiques pour choisir les bonnes variables pour un modèle performant. Cependant, ces deux processus sont différents : "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 renvoie un sous-ensemble des caractéristiques." ([source](https://wikipedia.org/wiki/Feature_selection)) +🎓 **Sélection et extraction de caractéristiques** Comment savoir quelle variable choisir lors de la construction d'un modèle ? Vous passerez probablement par un processus de sélection ou d'extraction de caractéristiques pour choisir les bonnes variables pour le modèle le plus performant. Cependant, ce ne sont 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)) ### Visualiser 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 comme Seaborn ou MatPlotLib. Représenter vos données visuellement peut vous permettre de découvrir des corrélations cachées que vous pouvez exploiter. Vos visualisations peuvent également vous aider à détecter des biais ou des données déséquilibrées (comme nous le découvrons dans [Classification](../../4-Classification/2-Classifiers-1/README.md)). +Un aspect important de la boîte à outils du data scientist est la capacité de visualiser les données à l'aide de plusieurs excellentes bibliothèques telles que Seaborn ou MatPlotLib. Représenter vos données visuellement peut vous permettre de découvrir des corrélations cachées que vous pouvez exploiter. Vos visualisations peuvent é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)). ### Diviser votre ensemble de données -Avant l'entraînement, vous devez diviser votre ensemble de données en deux ou plusieurs parties de tailles inégales qui représentent toujours bien les 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 toujours bien les données. -- **Entraînement**. Cette partie de l'ensemble de données est utilisée pour entraîner votre modèle. Elle constitue la majorité de l'ensemble de données original. +- **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 test est un groupe indépendant de données, souvent issu des données originales, que vous utilisez pour confirmer les performances 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 ou l'architecture du modèle afin de l'améliorer. Selon la taille de vos données et la question posée, vous pourriez ne pas avoir besoin de construire ce troisième ensemble (comme nous le notons dans [Prévisions de séries temporelles](../../7-TimeSeries/1-Introduction/README.md)). +- **Validation**. Un ensemble de validation est un petit groupe indépendant d'exemples que vous utilisez pour ajuster les hyperparamètres ou l'architecture du modèle afin d'améliorer le modèle. Selon la taille de vos données et la question que vous posez, vous pourriez ne pas avoir besoin de construire ce troisième ensemble (comme nous le notons dans [Prévisions de séries temporelles](../../7-TimeSeries/1-Introduction/README.md)). ## Construire un modèle -À l'aide de 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. +À l'aide de 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**. L'entraînement d'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écider d'une méthode d'entraînement -Selon votre question et la nature de vos données, vous choisirez une méthode pour les 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 passerez probablement par un processus où les data scientists évaluent les performances d'un modèle en lui fournissant des données non vues, en vérifiant la précision, les biais et d'autres problèmes de qualité, et en sélectionnant la méthode d'entraînement la plus appropriée pour la tâche. +En fonction de votre question et de la nature de vos données, vous choisirez une méthode pour les 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 pourriez devoir essayer plusieurs méthodes différentes pour construire le meilleur modèle. Vous passerez probablement par un processus où les data scientists évaluent les performances d'un modèle en lui fournissant des données non vues auparavant, en vérifiant la précision, les biais, et d'autres problèmes dégradant la qualité, et en sélectionnant la méthode d'entraînement la plus appropriée pour la tâche. ### Entraîner un modèle -Avec vos données d'entraînement, vous êtes prêt à les '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 caractéristique sous forme de tableau de valeurs (généralement 'X') et une variable cible (généralement 'y'). +Avec vos données d'entraînement, vous êtes prêt à les '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'). ### Évaluer le modèle -Une fois le processus d'entraînement terminé (il peut nécessiter 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 mesurer ses performances. Ces données sont un sous-ensemble des données originales que le modèle n'a pas encore analysées. Vous pouvez imprimer un tableau de métriques sur la qualité de votre modèle. +Une fois le processus d'entraînement terminé (il peut nécessiter 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 mesurer ses performances. Ces données sont 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 lorsqu'il tente d'analyser des données qu'il ne connaît pas. -🎓 **Sous-ajustement** et **sur-ajustement** sont des problèmes courants qui dégradent la qualité du modèle, car celui-ci s'ajuste soit pas assez bien, soit trop bien. Cela entraîne des prédictions soit trop alignées, soit trop peu alignées avec les données d'entraînement. Un modèle sur-ajusté prédit trop bien les données d'entraînement car il a appris les détails et le bruit des données de manière excessive. 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'. +🎓 **Sous-ajustement** et **sur-ajustement** 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 entraîne des prédictions soit trop alignées, soit trop peu alignées avec ses données d'entraînement. Un modèle sur-ajusté prédit trop bien les données d'entraînement car il a appris trop en détail les données et le bruit. 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 sur-ajusté](../../../../translated_images/overfitting.1c132d92bfd93cb63240baf63ebdf82c30e30a0a44e1ad49861b82ff600c2b5c.fr.png) +![modèle sur-ajusté](../../../../1-Introduction/4-techniques-of-ML/images/overfitting.png) > Infographie par [Jen Looper](https://twitter.com/jenlooper) ## Ajustement 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 davantage 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). +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 (par exemple, un clic sur un bouton) pour définir une variable et l'envoyer au modèle pour inférence ou évaluation. +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 contexte 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 (par exemple, une pression sur un bouton) pour définir une variable et l'envoyer au modèle pour une inférence ou une évaluation. -Dans ces leçons, vous découvrirez comment utiliser ces étapes pour préparer, construire, tester, évaluer et prédire - toutes les démarches d'un data scientist et plus encore, à mesure que vous progressez dans votre parcours pour devenir un ingénieur ML 'full stack'. +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, au fur et à 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 situez-vous actuellement dans le processus ? Où prévoyez-vous rencontrer des difficultés ? Qu'est-ce qui vous semble facile ? +Dessinez un diagramme de flux reflétant les étapes d'un praticien ML. Où vous situez-vous actuellement dans le processus ? Où prévoyez-vous rencontrer des difficultés ? Qu'est-ce qui vous semble facile ? -## [Quiz post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/8/) +## [Quiz après la leçon](https://ff-quizzes.netlify.app/en/ml/) ## Révision et auto-apprentissage -Recherchez en ligne des interviews de data scientists qui discutent de leur travail quotidien. En voici [une](https://www.youtube.com/watch?v=Z3IjgbbCEfs). +Cherchez en ligne des interviews de data scientists qui discutent de leur travail quotidien. En voici [une](https://www.youtube.com/watch?v=Z3IjgbbCEfs). ## Devoir @@ -129,4 +129,4 @@ Recherchez en ligne des interviews de data scientists qui discutent de leur trav --- **Avertissement** : -Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction professionnelle humaine. Nous déclinons toute responsabilité en cas de malentendus ou d'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/README.md b/translations/fr/2-Regression/1-Tools/README.md index cd1185d0a..19caf920d 100644 --- a/translations/fr/2-Regression/1-Tools/README.md +++ b/translations/fr/2-Regression/1-Tools/README.md @@ -1,19 +1,19 @@ # Commencez avec Python et Scikit-learn pour les modèles de régression -![Résumé des régressions dans une sketchnote](../../../../translated_images/ml-regression.4e4f70e3b3ed446e3ace348dec973e133fa5d3680fbc8412b61879507369b98d.fr.png) +![Résumé des régressions dans une sketchnote](../../../../sketchnotes/ml-regression.png) > Sketchnote par [Tomomi Imura](https://www.twitter.com/girlie_mac) -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/9/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) > ### [Cette leçon est disponible en R !](../../../../2-Regression/1-Tools/solution/R/lesson_1.html) @@ -34,15 +34,15 @@ Dans cette leçon, vous apprendrez à : > 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo expliquant comment configurer 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. +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 simplifier la configuration pour certains utilisateurs. Certaines utilisations de Python nécessitent une version spécifique du logiciel, tandis que d'autres en nécessitent une 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 que Visual Studio Code est installé sur votre ordinateur. Suivez ces instructions pour [installer Visual Studio Code](https://code.visualstudio.com/) pour une installation de base. Vous allez utiliser Python dans Visual Studio Code dans ce cours, donc il pourrait être utile de 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. +2. **Installez Visual Studio Code**. Assurez-vous que Visual Studio Code est installé sur votre ordinateur. Suivez ces instructions pour [installer Visual Studio Code](https://code.visualstudio.com/) pour une installation de base. Vous allez utiliser Python dans Visual Studio Code dans ce cours, alors vous pourriez vouloir vous familiariser avec la [configuration de 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) > - > [![Configurez Python avec Visual Studio Code](https://img.youtube.com/vi/yyQM70vi7V8/0.jpg)](https://youtu.be/yyQM70vi7V8 "Configurez Python avec Visual Studio Code") + > [![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. @@ -50,11 +50,11 @@ Dans cette leçon, vous apprendrez à : 4. **Installez Jupyter Notebook**. Vous devrez [installer le package Jupyter](https://pypi.org/project/jupyter/). -## Votre environnement de création ML +## 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 de rédiger de la documentation autour du code, ce qui est très utile pour des projets expérimentaux ou orientés recherche. +Les notebooks sont un environnement interactif qui permet au développeur de coder, d'ajouter des notes et de rédiger 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 à créer 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 à créer des modèles de régression") @@ -81,7 +81,7 @@ Dans ce dossier, vous trouverez le fichier _notebook.ipynb_. hello notebook ``` -![VS Code avec un notebook ouvert](../../../../translated_images/notebook.4a3ee31f396b88325607afda33cadcc6368de98040ff33942424260aa84d75f2.fr.jpg) +![VS Code avec un notebook ouvert](../../../../2-Regression/1-Tools/images/notebook.jpg) Vous pouvez intercaler votre code avec des commentaires pour auto-documenter le notebook. @@ -91,11 +91,11 @@ Vous pouvez intercaler votre code avec des commentaires pour auto-documenter le Maintenant que Python est configuré dans votre environnement local et que vous êtes à l'aise avec les notebooks Jupyter, familiarisons-nous avec Scikit-learn (prononcez-le `sci` comme dans `science`). Scikit-learn fournit une [API étendue](https://scikit-learn.org/stable/modules/classes.html#api-ref) pour vous aider à effectuer des tâches d'apprentissage automatique. -Selon leur [site web](https://scikit-learn.org/stable/getting_started.html), "Scikit-learn est une bibliothèque open source d'apprentissage automatique 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." +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 d'effectuer 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 prochain programme "IA pour débutants". -Scikit-learn simplifie la création de modèles et leur évaluation pour une utilisation. Il se concentre principalement sur l'utilisation de données numériques et contient plusieurs ensembles de données prêts à l'emploi pour servir d'outils d'apprentissage. Il inclut également des modèles préconstruits que les étudiants peuvent essayer. Explorons le processus de chargement de données préemballées et d'utilisation d'un estimateur pour créer un premier modèle ML avec Scikit-learn à l'aide de données de base. +Scikit-learn simplifie la construction de modèles et leur évaluation pour une utilisation. Il est principalement axé sur l'utilisation de données numériques et contient plusieurs ensembles de données prêts à l'emploi pour servir d'outils d'apprentissage. Il inclut également des modèles préconstruits que les étudiants peuvent essayer. Explorons le processus de chargement de données préemballées et utilisons un estimateur intégré pour créer un premier modèle ML avec Scikit-learn à l'aide de données de base. ## Exercice - votre premier notebook Scikit-learn @@ -105,11 +105,11 @@ Scikit-learn simplifie la création de modèles et leur évaluation pour une uti > 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo expliquant cet exercice. -Dans le fichier _notebook.ipynb_ associé à cette leçon, videz toutes les cellules en appuyant sur l'icône de la "poubelle". +Dans le fichier _notebook.ipynb_ associé à cette leçon, supprimez toutes les cellules en appuyant sur l'icône de la "poubelle". -Dans cette section, vous allez travailler avec un petit ensemble de données sur le diabète 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 fournir des informations sur les variables qui vous aideraient à organiser vos essais cliniques théoriques. +Dans cette section, vous travaillerez avec un petit ensemble de données sur le diabète intégré à Scikit-learn à des fins d'apprentissage. Imaginez que vous vouliez tester un traitement pour les 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 les 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 voulez prédire la taille probable d'une personne en fonction de son âge, vous utiliseriez la régression linéaire, car vous cherchez une **valeur numérique**. Si vous souhaitez déterminer si un type de cuisine doit être considéré comme végétalien ou non, vous cherchez une **catégorie** et utiliseriez la régression logistique. Vous en apprendrez davantage sur la régression logistique plus tard. Réfléchissez un peu à des questions que vous pourriez poser aux données, et à la méthode la plus appropriée. +✅ 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 voulez prédire la taille probable d'une personne en fonction de son âge, vous utiliseriez une régression linéaire, car vous cherchez une **valeur numérique**. Si vous êtes intéressé par la découverte de si un type de cuisine doit être considéré comme végétalien ou non, vous cherchez une **attribution de catégorie**, donc vous utiliseriez une régression logistique. Vous en apprendrez davantage sur la régression logistique plus tard. Réfléchissez un peu à des questions que vous pourriez poser aux données, et à laquelle de ces méthodes serait la plus appropriée. Commençons cette tâche. @@ -142,15 +142,15 @@ L'[ensemble de données sur le diabète](https://scikit-learn.org/stable/dataset - bp : pression artérielle moyenne - s1 tc : cellules T (un type de globules blancs) -✅ Cet ensemble de données inclut le concept de "sexe" comme variable de caractéristique importante pour la recherche sur le diabète. De nombreux ensembles de données médicaux incluent ce type de classification binaire. Réfléchissez un peu à la manière dont de telles catégorisations pourraient exclure certaines parties de la population des traitements. +✅ Cet ensemble de données inclut le concept de "sexe" comme variable de caractéristique importante pour la recherche sur le diabète. De nombreux ensembles de données médicaux incluent ce type de classification binaire. Réfléchissez un peu à la manière dont des catégorisations comme celle-ci pourraient exclure certaines parties de la population des traitements. -Chargez maintenant les données X et y. +Maintenant, chargez les données X et y. > 🎓 Rappelez-vous, il s'agit d'apprentissage supervisé, et nous avons besoin d'une cible nommée 'y'. Dans une nouvelle cellule de code, chargez l'ensemble de données sur le diabète en appelant `load_diabetes()`. L'entrée `return_X_y=True` indique que `X` sera une matrice de données, et `y` sera la cible de régression. -1. Ajoutez des commandes print pour afficher la forme de la matrice de données et son premier élément : +1. Ajoutez quelques commandes print pour afficher la forme de la matrice de données et son premier élément : ```python X, y = datasets.load_diabetes(return_X_y=True) @@ -170,7 +170,7 @@ Dans une nouvelle cellule de code, chargez l'ensemble de données sur le diabèt ✅ 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é la cible ? -2. Ensuite, sélectionnez une partie 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 l'opérateur `:` pour sélectionner toutes les lignes, puis en sélectionnant la 3ème colonne à l'aide de l'index (2). Vous pouvez également remodeler les données pour qu'elles soient un tableau 2D - comme requis pour le tracé - en utilisant `reshape(n_rows, n_columns)`. Si l'un des paramètres est -1, la dimension correspondante est calculée automatiquement. +2. Ensuite, sélectionnez une partie 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 l'opérateur `:` pour sélectionner toutes les lignes, puis en sélectionnant la 3ème colonne en utilisant l'index (2). Vous pouvez également remodeler les données pour qu'elles soient un tableau 2D - comme requis pour le tracé - en utilisant `reshape(n_rows, n_columns)`. Si l'un des paramètres est -1, la dimension correspondante est calculée automatiquement. ```python X = X[:, 2] @@ -211,7 +211,7 @@ Dans une nouvelle cellule de code, chargez l'ensemble de données sur le diabèt plt.show() ``` - ![un nuage de points montrant des points de données autour du diabète](../../../../translated_images/scatterplot.ad8b356bcbb33be68d54050e09b9b7bfc03e94fde7371f2609ae43f4c563b2d7.fr.png) + ![un nuage de points montrant des données sur le diabète](../../../../2-Regression/1-Tools/images/scatterplot.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 cette ligne pourrait vous permettre de prédire où un nouveau point de données, encore inconnu, devrait se situer par rapport à l'axe y du graphique ? Essayez de mettre en mots l'utilité 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ée dans un graphique ! @@ -220,11 +220,11 @@ Félicitations, vous avez construit votre premier modèle de régression linéai ## 🚀Défi Tracez une autre variable de ce jeu de données. Indice : modifiez cette ligne : `X = X[:,2]`. Étant donné la cible de ce jeu de données, que pouvez-vous découvrir sur la progression du diabète en tant que maladie ? -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/10/) +## [Quiz post-cours](https://ff-quizzes.netlify.app/en/ml/) ## Révision & Étude personnelle -Dans ce tutoriel, vous avez travaillé avec une régression linéaire simple, plutôt qu'une régression univariée ou multiple. Lisez un peu sur les différences entre ces méthodes, ou regardez [cette vidéo](https://www.coursera.org/lecture/quantifying-relationships-regression-models/linear-vs-nonlinear-categorical-variables-ai2Ef). +Dans ce tutoriel, vous avez travaillé avec la régression linéaire simple, plutôt qu'avec la régression univariée ou multiple. Lisez un peu sur les différences entre ces méthodes, ou regardez [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 qui peuvent être résolues grâce à cette technique. Suivez [ce tutoriel](https://docs.microsoft.com/learn/modules/train-evaluate-regression-models?WT.mc_id=academic-77952-leestott) pour approfondir votre compréhension. diff --git a/translations/fr/2-Regression/2-Data/README.md b/translations/fr/2-Regression/2-Data/README.md index d26503cd0..fee2dadc1 100644 --- a/translations/fr/2-Regression/2-Data/README.md +++ b/translations/fr/2-Regression/2-Data/README.md @@ -1,25 +1,25 @@ # Construire un modèle de régression avec Scikit-learn : préparer et visualiser les données -![Infographie sur la visualisation des données](../../../../translated_images/data-visualization.54e56dded7c1a804d00d027543f2881cb32da73aeadda2d4a4f10f3497526114.fr.png) +![Infographie sur la visualisation des données](../../../../2-Regression/2-Data/images/data-visualization.png) Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/11/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) > ### [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 à construire des modèles d'apprentissage automatique avec Scikit-learn, vous êtes prêt à poser des questions à vos données. Lorsque vous travaillez avec des données et appliquez des solutions d'apprentissage automatique, il est très important de savoir poser les bonnes questions pour exploiter pleinement le potentiel de votre ensemble de données. +Maintenant que vous êtes équipé des outils nécessaires pour commencer à construire des modèles d'apprentissage automatique avec Scikit-learn, vous êtes prêt à poser des questions à vos données. Lorsque vous travaillez avec des données et appliquez des solutions d'apprentissage automatique, il est essentiel de savoir poser les bonnes questions pour exploiter pleinement le potentiel de votre ensemble de données. Dans cette leçon, vous apprendrez : @@ -38,9 +38,9 @@ Examinez les [données](https://github.com/microsoft/ML-For-Beginners/blob/main/ En réalité, il est rare de recevoir un ensemble de données entièrement prêt à être utilisé pour créer un modèle d'apprentissage automatique. Dans cette leçon, vous apprendrez à préparer un ensemble de données brut en utilisant des bibliothèques Python standard. Vous apprendrez également différentes techniques pour visualiser les données. -## Étude de cas : 'le marché des citrouilles' +## Étude de cas : "le marché des citrouilles" -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 contient 1757 lignes de données sur le marché des citrouilles, triées par ville. Ce sont des données brutes extraites 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és par le Département de l'Agriculture des États-Unis. +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 contient 1757 lignes de données sur le marché des citrouilles, triées par ville. Ce sont des données brutes extraites des [Rapports standards des marchés terminaux 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éparer les données @@ -83,7 +83,7 @@ Ouvrez le fichier _notebook.ipynb_ dans Visual Studio Code et importez la feuill Il y a des données manquantes, mais peut-être que cela n'aura pas d'importance pour la tâche à accomplir. -1. Pour rendre votre dataframe plus facile à manipuler, sélectionnez uniquement les colonnes dont vous avez besoin, en utilisant la fonction `loc` qui extrait du dataframe original un groupe de lignes (passé en premier paramètre) et de colonnes (passé en second paramètre). L'expression `:` dans le cas ci-dessous signifie "toutes les lignes". +1. Pour rendre votre dataframe plus facile à manipuler, sélectionnez uniquement les colonnes nécessaires en utilisant la fonction `loc`, qui extrait du dataframe original un groupe de lignes (passé en premier paramètre) et de colonnes (passé en second paramètre). L'expression `:` dans le cas ci-dessous signifie "toutes les lignes". ```python columns_to_select = ['Package', 'Low Price', 'High Price', 'Date'] @@ -117,11 +117,11 @@ Solution : prenez la moyenne des colonnes `Low Price` et `High Price` pour rempl ### Mais attendez ! Il y a quelque chose d'étrange ici -Si vous regardez la colonne `Package`, les citrouilles sont vendues dans de nombreuses configurations différentes. Certaines sont vendues en mesures de '1 1/9 bushel', d'autres en '1/2 bushel', certaines par citrouille, certaines par livre, et d'autres dans de grandes boîtes de largeurs variées. +Si vous regardez la colonne `Package`, les citrouilles sont vendues dans de nombreuses configurations différentes. Certaines sont vendues en mesures de '1 1/9 bushel', d'autres en '1/2 bushel', certaines par citrouille, certaines par livre, et d'autres dans de grandes boîtes de tailles variées. > Les citrouilles semblent très difficiles à peser de manière cohérente -En examinant les données originales, il est intéressant de noter que tout ce qui a `Unit of Sale` égal à 'EACH' ou 'PER BIN' a également le type `Package` par pouce, par bin, ou 'each'. Les citrouilles semblent être très difficiles à peser de manière cohérente, alors filtrons-les en sélectionnant uniquement les citrouilles contenant le mot 'bushel' dans leur colonne `Package`. +En examinant les données originales, il est intéressant de noter que tout ce qui a `Unit of Sale` égal à 'EACH' ou 'PER BIN' a également le type `Package` par pouce, par bin, ou 'each'. Les citrouilles semblent être très difficiles à peser de manière cohérente, alors filtrons-les en sélectionnant uniquement les citrouilles avec le mot 'bushel' dans leur colonne `Package`. 1. Ajoutez un filtre en haut du fichier, sous l'importation initiale du fichier .csv : @@ -143,7 +143,7 @@ Avez-vous remarqué que la quantité de bushel varie selon les lignes ? Vous dev 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 bushel dépend du type de produit, car c'est une mesure de volume. "Un bushel de tomates, par exemple, est censé peser 56 livres... Les feuilles et les légumes verts prennent plus de place avec moins de poids, donc un bushel d'épinards ne pèse que 20 livres." Tout cela est assez compliqué ! Ne nous embêtons pas à convertir un bushel en livres, et affichons plutôt les prix par bushel. Toute cette étude des bushels de citrouilles montre cependant à quel point il est important de comprendre la nature de vos données ! +✅ Selon [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), le poids d'un bushel dépend du type de produit, car c'est une mesure de volume. "Un bushel de tomates, par exemple, est censé peser 56 livres... Les feuilles et les légumes verts prennent plus de place avec moins de poids, donc un bushel d'épinards ne pèse que 20 livres." Tout cela est assez compliqué ! Ne nous embêtons pas à faire une conversion bushel-livre, et affichons plutôt les prix par bushel. Toute cette étude des bushels de citrouilles montre cependant à quel point il est important de comprendre la nature de vos données ! Maintenant, vous pouvez analyser les prix par unité en fonction de leur mesure en bushel. Si vous imprimez les données une fois de plus, vous verrez comment elles sont standardisées. @@ -151,7 +151,7 @@ Maintenant, vous pouvez analyser les prix par unité en fonction de leur mesure ## 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 il travaille. Pour ce faire, il crée souvent des visualisations intéressantes, comme des graphiques, des diagrammes et des tableaux, montrant différents aspects des données. De cette manière, il peut montrer visuellement des relations et des lacunes qui sont autrement difficiles à découvrir. +Une partie du rôle du data scientist est de démontrer la qualité et la nature des données avec lesquelles il travaille. Pour ce faire, il crée souvent des visualisations intéressantes, comme des graphiques, des diagrammes et des courbes, montrant différents aspects des données. De cette manière, il peut montrer visuellement des relations et des lacunes qui seraient autrement difficiles à découvrir. [![ML pour débutants - Comment visualiser les données avec Matplotlib](https://img.youtube.com/vi/SbUkxH6IJo0/0.jpg)](https://youtu.be/SbUkxH6IJo0 "ML pour débutants - Comment visualiser les données avec Matplotlib") @@ -183,9 +183,9 @@ Essayez de créer des graphiques simples pour afficher le nouveau dataframe que plt.show() ``` - ![Un nuage de points montrant la relation entre le prix et le mois](../../../../translated_images/scatterplot.b6868f44cbd2051c6680ccdbb1510697d06a3ff6cd4abda656f5009c0ed4e3fc.fr.png) + ![Un nuage de points montrant la relation entre le prix et le mois](../../../../2-Regression/2-Data/images/scatterplot.png) - Ce graphique est-il utile ? Quelque chose vous surprend-il ? + 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 points répartis dans un mois donné. @@ -200,7 +200,7 @@ Pour obtenir des graphiques affichant des données utiles, vous devez générale plt.ylabel("Pumpkin Price") ``` - ![Un graphique en barres montrant la relation entre le prix et le mois](../../../../translated_images/barchart.a833ea9194346d769c77a3a870f7d8aee51574cd1138ca902e5500830a41cbce.fr.png) + ![Un graphique en barres montrant la relation entre le prix et le mois](../../../../2-Regression/2-Data/images/barchart.png) Ce graphique 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 ? @@ -210,9 +210,9 @@ Pour obtenir des graphiques affichant des données utiles, vous devez générale 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 après le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/12/) +## [Quiz après le cours](https://ff-quizzes.netlify.app/en/ml/) -## Révision et auto-apprentissage +## Révision et étude personnelle Examinez les nombreuses façons de visualiser les données. Faites une liste des différentes bibliothèques disponibles et notez celles qui sont les meilleures pour certains types de tâches, par exemple les visualisations 2D contre les visualisations 3D. Que découvrez-vous ? diff --git a/translations/fr/2-Regression/3-Linear/README.md b/translations/fr/2-Regression/3-Linear/README.md index 014f6a439..70b587790 100644 --- a/translations/fr/2-Regression/3-Linear/README.md +++ b/translations/fr/2-Regression/3-Linear/README.md @@ -1,110 +1,110 @@ # Construire un modèle de régression avec Scikit-learn : quatre approches de régression -![Infographie sur la régression linéaire vs polynomiale](../../../../translated_images/linear-polynomial.5523c7cb6576ccab0fecbd0e3505986eb2d191d9378e785f82befcf3a578a6e7.fr.png) +![Infographie sur la régression linéaire vs polynomiale](../../../../2-Regression/3-Linear/images/linear-polynomial.png) > Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Quiz pré-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/13/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) > ### [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 à l'aide d'un exemple de données issues 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ée à l'aide de Matplotlib. +Jusqu'à présent, vous avez exploré ce qu'est la régression avec des données d'exemple issues 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ée à l'aide de Matplotlib. -Vous êtes maintenant prêt à plonger plus profondément dans la régression pour l'apprentissage automatique. Bien que la visualisation permette de comprendre les données, la véritable puissance de l'apprentissage automatique réside dans l’_entraînement des modèles_. Les modèles sont entraînés sur des données historiques pour capturer automatiquement les dépendances entre les données, et ils permettent de prédire des résultats pour de nouvelles données que le modèle n'a jamais vues auparavant. +Vous êtes maintenant prêt à approfondir la régression pour l'apprentissage automatique. Bien que la visualisation permette de donner du sens aux données, la véritable puissance de l'apprentissage automatique réside dans 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 permettent de prédire les résultats pour de nouvelles données que le modèle n'a jamais vues auparavant. -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 certaines notions 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. +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 certaines notions 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 débutants - Comprendre la régression linéaire](https://img.youtube.com/vi/CRxFT8oTDMg/0.jpg)](https://youtu.be/CRxFT8oTDMg "ML pour débutants - Comprendre la régression linéaire") > 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo d'introduction à la régression linéaire. -> Tout au long de ce programme, nous supposons une connaissance minimale des mathématiques et cherchons à les rendre accessibles aux étudiants venant d'autres domaines. Soyez attentif aux notes, 🧮 encadrés, diagrammes et autres outils d'apprentissage pour faciliter la compréhension. +> Tout au long de ce programme, nous supposons une connaissance minimale des mathématiques et cherchons à les rendre accessibles aux étudiants venant d'autres domaines. Soyez attentif aux notes, 🧮 aux encadrés, aux diagrammes et à d'autres outils d'apprentissage pour faciliter la compréhension. ### Prérequis -Vous devriez maintenant être familier 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 ce fichier, le prix des citrouilles est affiché par boisseau dans un nouveau DataFrame. Assurez-vous de pouvoir exécuter ces notebooks dans des kernels dans Visual Studio Code. +Vous devriez maintenant être familier 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 ce 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 kernels dans Visual Studio Code. ### Préparation Pour rappel, vous chargez ces données afin de poser des questions à leur sujet. -- Quel est le meilleur moment pour acheter des citrouilles ? +- Quel est le meilleur moment pour acheter des citrouilles ? - Quel prix puis-je attendre pour une caisse de citrouilles miniatures ? -- Devrais-je les acheter en paniers d'un demi-boisseau ou en cartons de 1 1/9 boisseau ? +- Dois-je les acheter en paniers d'un demi-boisseau ou en cartons de 1 1/9 boisseau ? Continuons à explorer ces données. -Dans la leçon précédente, vous avez créé un DataFrame Pandas et l'avez rempli avec une partie du jeu de données original, en standardisant les prix par boisseau. Cependant, en faisant cela, vous n'avez pu rassembler qu'environ 400 points de données, uniquement pour les mois d'automne. +Dans la leçon précédente, vous avez créé un cadre de données Pandas et l'avez rempli avec une partie du jeu de données original, en standardisant les prix par boisseau. Cependant, en faisant cela, vous n'avez pu recueillir qu'environ 400 points de données et uniquement pour les mois d'automne. -Examinez les données préchargées dans le notebook accompagnant cette leçon. Les données sont préchargées et un nuage de points initial 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. +Examinez les 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 tracer une ligne pour : +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 les variables**. Montrer la relation entre les variables. -- **Faire des prédictions**. Faire des prédictions précises sur la position d'un nouveau point de données par rapport à cette ligne. +- **Montrer les relations entre les 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 élevés au carré puis additionnés. Idéalement, cette somme finale est aussi petite que possible, car nous voulons un faible nombre d'erreurs, ou `moindres carrés`. -Il est typique d'utiliser la **régression des moindres carrés** pour 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 élevés au carré, puis additionnés. Idéalement, cette somme finale est aussi petite que possible, car nous voulons un faible nombre d'erreurs, ou "moindres carrés". - -Nous faisons cela car nous voulons modéliser une ligne ayant la plus faible distance cumulative par rapport à tous nos points de données. Nous élevons également les termes au carré avant de les additionner, car nous nous intéressons à leur magnitude plutôt qu'à leur direction. +Nous procédons ainsi car nous voulons modéliser une ligne ayant la plus faible distance cumulée par rapport à tous nos points de données. Nous élevons également les termes au carré avant de les additionner, car nous nous intéressons à leur magnitude plutôt qu'à leur direction. > **🧮 Montrez-moi les maths** > -> Cette ligne, appelée _ligne de meilleure adéquation_, peut être exprimée par [une équation](https://fr.wikipedia.org/wiki/R%C3%A9gression_lin%C3%A9aire_simple) : +> Cette ligne, appelée _ligne de meilleure ajustement_, peut être exprimée par [une équation](https://en.wikipedia.org/wiki/Simple_linear_regression) : > > ``` > Y = a + bX > ``` > -> `X` est la "variable explicative". `Y` est la "variable dépendante". La pente de la ligne est `b` et `a` est l'ordonnée à l'origine, qui fait référence à la valeur de `Y` lorsque `X = 0`. +> `X` est la 'variable explicative'. `Y` est la 'variable dépendante'. La pente de la ligne est `b` et `a` est l'ordonnée à l'origine, qui fait référence à la valeur de `Y` lorsque `X = 0`. > ->![calculer la pente](../../../../translated_images/slope.f3c9d5910ddbfcf9096eb5564254ba22c9a32d7acd7694cab905d29ad8261db3.fr.png) +>![calculer la pente](../../../../2-Regression/3-Linear/images/slope.png) > > Tout d'abord, calculez la pente `b`. Infographie par [Jen Looper](https://twitter.com/jenlooper) > -> En d'autres termes, et en se référant à la question initiale sur les données des citrouilles : "prédire le prix d'une citrouille par boisseau selon le mois", `X` ferait référence au prix et `Y` au mois de vente. +> En d'autres termes, et en se référant à la question originale sur les données des citrouilles : "prédire le prix d'une citrouille par boisseau selon le mois", `X` ferait référence au prix et `Y` au mois de vente. > ->![compléter l'équation](../../../../translated_images/calculation.a209813050a1ddb141cdc4bc56f3af31e67157ed499e16a2ecf9837542704c94.fr.png) +>![compléter l'équation](../../../../2-Regression/3-Linear/images/calculation.png) > > Calculez la valeur de Y. Si vous payez environ 4 $, cela doit être en avril ! Infographie par [Jen Looper](https://twitter.com/jenlooper) > -> Les calculs de cette ligne doivent démontrer la pente de la ligne, qui dépend également de l'ordonnée à l'origine, ou de la position de `Y` lorsque `X = 0`. +> Les calculs mathématiques de la ligne doivent démontrer la pente de la ligne, qui dépend également de l'ordonnée à l'origine, ou de la position de `Y` lorsque `X = 0`. > -> Vous pouvez observer la méthode de calcul de ces valeurs sur le site [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Consultez également [ce calculateur des moindres carrés](https://www.mathsisfun.com/data/least-squares-calculator.html) pour voir comment les valeurs influencent la ligne. +> Vous pouvez observer la méthode de calcul de ces valeurs sur le site [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html). Consultez également [ce calculateur de moindres carrés](https://www.mathsisfun.com/data/least-squares-calculator.html) pour voir comment les valeurs des nombres influencent la ligne. ## Corrélation -Un autre terme à comprendre est le **coefficient de corrélation** entre les variables X et Y données. À l'aide d'un nuage de points, vous pouvez rapidement visualiser ce coefficient. Un graphique avec des points de données alignés de manière nette présente une forte corrélation, tandis qu'un graphique avec des points dispersés partout entre X et Y présente une faible corrélation. +Un autre terme à comprendre est le **coefficient de corrélation** entre les variables X et Y données. À l'aide d'un nuage de points, vous pouvez rapidement visualiser ce coefficient. Un graphique avec des points de données alignés de manière ordonnée présente une forte corrélation, mais un graphique avec des points de données dispersés partout entre X et Y présente une faible corrélation. -Un bon modèle de régression linéaire sera celui qui a un coefficient de corrélation élevé (proche de 1 plutôt que de 0) en utilisant la méthode des moindres carrés avec une ligne de régression. +Un bon modèle de régression linéaire sera celui qui présente un coefficient de corrélation élevé (plus proche de 1 que de 0) en utilisant la méthode de régression des moindres carrés avec une ligne de régression. -✅ Exécutez le notebook accompagnant cette leçon et examinez le nuage de points associant le mois au prix. Les données associant le mois au prix des ventes de citrouilles semblent-elles avoir une corrélation élevée ou faible, selon votre interprétation visuelle du nuage de points ? Cela change-t-il si vous utilisez une mesure plus fine comme le *jour de l'année* (c'est-à-dire le nombre de jours depuis le début de l'année) ? +✅ Exécutez le notebook accompagnant cette leçon et examinez le nuage de points associant le mois au prix. Selon votre interprétation visuelle du nuage de points, les données associant le mois au prix des ventes de citrouilles semblent-elles présenter une corrélation élevée ou faible ? Cela change-t-il si vous utilisez une mesure plus fine, comme *le jour de l'année* (c'est-à-dire le nombre de jours depuis le début de l'année) ? -Dans le code ci-dessous, nous supposerons que nous avons nettoyé les données et obtenu un DataFrame appelé `new_pumpkins`, similaire à ce qui suit : +Dans le code ci-dessous, nous supposerons que nous avons nettoyé les données et obtenu un cadre de données appelé `new_pumpkins`, similaire à ce qui suit : -ID | Mois | JourDeLAnnee | Variété | Ville | Emballage | Prix Bas | Prix Haut | Prix ----|------|--------------|---------|-------|-----------|----------|-----------|------ +ID | Mois | JourDeLAn | Variété | Ville | Emballage | Prix bas | Prix haut | Prix +---|------|-----------|---------|-------|-----------|----------|-----------|------ 70 | 9 | 267 | TYPE TARTE | BALTIMORE | cartons de 1 1/9 boisseau | 15.0 | 15.0 | 13.636364 71 | 9 | 267 | TYPE TARTE | BALTIMORE | cartons de 1 1/9 boisseau | 18.0 | 18.0 | 16.363636 72 | 10 | 274 | TYPE TARTE | BALTIMORE | cartons de 1 1/9 boisseau | 18.0 | 18.0 | 16.363636 73 | 10 | 274 | TYPE TARTE | BALTIMORE | cartons de 1 1/9 boisseau | 17.0 | 17.0 | 15.454545 74 | 10 | 281 | TYPE TARTE | BALTIMORE | cartons de 1 1/9 boisseau | 15.0 | 15.0 | 13.636364 -> Le code pour nettoyer les données est disponible dans [`notebook.ipynb`](notebook.ipynb). Nous avons effectué les mêmes étapes de nettoyage que dans la leçon précédente et avons calculé la colonne `JourDeLAnnee` à l'aide de l'expression suivante : +> Le code pour nettoyer les données est disponible dans [`notebook.ipynb`](../../../../2-Regression/3-Linear/notebook.ipynb). Nous avons effectué les mêmes étapes de nettoyage que dans la leçon précédente et avons calculé la colonne `JourDeLAn` 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 emballage de citrouilles aura les meilleurs prix. Une personne achetant des citrouilles pour un champ de citrouilles pour les fêtes pourrait vouloir cette information pour optimiser ses achats. +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 emballage 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 d'emballages de citrouilles pour le champ. ## Recherche de corrélation @@ -116,18 +116,18 @@ Dans la leçon précédente, vous avez probablement vu que le prix moyen pour di 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 `Mois` et `Prix`, ou entre `JourDeLAnnee` et `Prix`. Voici le nuage de points montrant cette dernière relation : +Cela suggère qu'il pourrait 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 `Mois` et `Prix`, ou entre `JourDeLAn` et `Prix`. Voici le nuage de points qui montre cette dernière relation : Nuage de points du prix vs jour de l'année -Voyons s'il existe une corrélation à l'aide de la fonction `corr` : +Voyons s'il existe une corrélation en utilisant la fonction `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 pour `Mois` et -0,17 pour `JourDeLAnnee`, mais il pourrait y avoir une autre relation importante. Il semble qu'il existe différents groupes de prix correspondant à différentes variétés de citrouilles. Pour confirmer cette hypothèse, traçons chaque catégorie de citrouilles avec une couleur différente. En passant un paramètre `ax` à la fonction de tracé `scatter`, nous pouvons tracer tous les points sur le même graphique : +Il semble que la corrélation soit assez faible, -0.15 par `Mois` et -0.17 par `JourDeLAn`, mais il pourrait y avoir une autre relation importante. Il semble qu'il existe différents groupes de prix correspondant à différentes variétés de citrouilles. Pour confirmer cette hypothèse, traçons chaque catégorie de citrouilles en utilisant une couleur différente. En passant un paramètre `ax` à la fonction de tracé de nuage de points, nous pouvons tracer tous les points sur le même graphique : ```python ax=None @@ -147,7 +147,7 @@ new_pumpkins.groupby('Variety')['Price'].mean().plot(kind='bar') Graphique en barres du prix vs variété -Concentrons-nous pour le moment uniquement sur une variété de citrouilles, le "type tarte", et voyons quel effet la date a sur le prix : +Concentrons-nous pour le moment uniquement sur une variété de citrouilles, le 'type tarte', et voyons quel effet la date a sur le prix : ```python pie_pumpkins = new_pumpkins[new_pumpkins['Variety']=='PIE TYPE'] @@ -155,7 +155,7 @@ pie_pumpkins.plot.scatter('DayOfYear','Price') ``` Nuage de points du prix vs jour de l'année -Si nous calculons maintenant la corrélation entre `Prix` et `JourDeLAnnee` à l'aide de la fonction `corr`, nous obtiendrons quelque chose comme `-0,27` - ce qui signifie qu'entraîner un modèle prédictif a du sens. +Si nous calculons maintenant la corrélation entre `Prix` et `JourDeLAn` en utilisant la fonction `corr`, nous obtiendrons quelque chose comme `-0.27` - ce qui signifie qu'entraîner 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 : @@ -164,7 +164,7 @@ pie_pumpkins.dropna(inplace=True) pie_pumpkins.info() ``` -Une autre approche consisterait à remplir ces valeurs vides avec les valeurs moyennes de la colonne correspondante. +Une autre approche consisterait à remplir ces valeurs manquantes avec les valeurs moyennes de la colonne correspondante. ## Régression linéaire simple @@ -187,7 +187,7 @@ X = pie_pumpkins['DayOfYear'].to_numpy().reshape(-1,1) y = pie_pumpkins['Price'] ``` -> Notez que nous avons dû effectuer un `reshape` sur les données d'entrée pour que le package de régression linéaire les comprenne 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. +> Notez que nous avons dû effectuer un `reshape` sur les données d'entrée afin que le package de régression linéaire les comprenne 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 de pouvoir valider notre modèle après l'entraînement : @@ -195,16 +195,16 @@ Ensuite, nous devons diviser les données en ensembles d'entraînement et de tes X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) ``` -Enfin, entraîner le modèle de régression linéaire réel ne prend que deux lignes de code. Nous définissons l'objet `LinearRegression` et l'ajustons à nos données à l'aide de la méthode `fit` : +Enfin, entraîner le modèle de régression linéaire réel ne prend que deux lignes de code. Nous définissons l'objet `LinearRegression` et l'ajustons à nos données en utilisant la méthode `fit` : ```python lin_reg = LinearRegression() lin_reg.fit(X_train,y_train) ``` -L'objet `LinearRegression` après l'ajustement contient tous les coefficients de la régression, accessibles via la propriété `.coef_`. Dans notre cas, il n'y a qu'un seul coefficient, qui devrait être d'environ `-0,017`. Cela signifie que les prix semblent légèrement baisser avec le temps, mais pas beaucoup, environ 2 centimes par jour. Nous pouvons également accéder au point d'intersection de la régression avec l'axe Y à l'aide de `lin_reg.intercept_` - il sera d'environ `21` dans notre cas, indiquant le prix au début de l'année. +L'objet `LinearRegression` après l'ajustement contient tous les coefficients de la régression, qui peuvent être accessibles via la propriété `.coef_`. Dans notre cas, il n'y a qu'un seul coefficient, qui devrait être autour de `-0.017`. Cela signifie que les prix semblent baisser légèrement avec le temps, mais pas beaucoup, environ 2 centimes par jour. Nous pouvons également accéder au point d'intersection de la régression avec l'axe Y en utilisant `lin_reg.intercept_` - il sera autour de `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 à l'aide de la métrique de l'erreur quadratique moyenne (MSE), qui est la moyenne de toutes les différences au carré entre les valeurs attendues et prédites. +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 la métrique de l'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) @@ -217,7 +217,7 @@ Notre erreur semble se situer autour de 2 points, soit environ 17 %. Pas très b ```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 moyenne des résultats. Une valeur de 1 signifie que nous pouvons prédire parfaitement tous les résultats attendus. 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 comprendre comment la régression fonctionne dans notre cas : @@ -225,7 +225,7 @@ Nous pouvons également tracer les données de test avec la ligne de régression ```python plt.scatter(X_test,y_test) plt.plot(X_test,pred) -``` +``` Régression linéaire @@ -237,7 +237,7 @@ Un autre type de régression linéaire est la régression polynomiale. Bien qu'i Regardez à nouveau la relation entre la date et le prix. Ce nuage de points semble-t-il devoir nécessairement ê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 contenir une ou plusieurs variables et coefficients. +✅ Les polynômes sont des expressions mathématiques qui peuvent inclure une ou plusieurs variables et coefficients. La régression polynomiale crée une 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 pouvoir ajuster nos données avec une courbe parabolique, qui aura un minimum à un certain moment de l'année. @@ -250,7 +250,7 @@ from sklearn.pipeline import make_pipeline pipeline = make_pipeline(PolynomialFeatures(2), LinearRegression()) pipeline.fit(X_train,y_train) -``` +``` Utiliser `PolynomialFeatures(2)` signifie que nous inclurons tous les polynômes de degré 2 des données d'entrée. Dans notre cas, cela signifie simplement `DayOfYear`2, mais avec deux variables d'entrée X et Y, cela ajoutera X2, XY et Y2. Nous pouvons également utiliser des polynômes de degré supérieur si nous le souhaitons. @@ -276,36 +276,36 @@ Voici comment le prix moyen dépend de la variété : Prix moyen par variété -Pour prendre en compte la variété, nous devons d'abord la convertir en forme numérique, ou **encoder**. Il existe plusieurs façons de le faire : +Pour prendre en compte la variété, nous devons d'abord la convertir en forme numérique, ou **l'encoder**. Il existe plusieurs façons de le faire : -* Un simple **encodage numérique** construira un tableau des différentes variétés, puis remplacera le nom de la variété par un indice dans ce tableau. Ce n'est pas la meilleure idée pour la régression linéaire, car la régression linéaire prend la valeur numérique réelle de l'indice et l'ajoute au résultat, en la multipliant par un coefficient. Dans notre cas, la relation entre le numéro d'indice et le prix est clairement non linéaire, même si nous nous assurons que les indices sont ordonnés d'une manière spécifique. +* Un simple **encodage numérique** construira une table des différentes variétés, puis remplacera le nom de la variété par un indice dans cette table. Ce n'est pas la meilleure idée pour la régression linéaire, car la régression linéaire prend la valeur numérique réelle de l'indice et l'ajoute au résultat, en la multipliant par un coefficient. Dans notre cas, la relation entre le numéro d'indice et le prix est clairement non linéaire, même si nous nous assurons que les indices sont ordonnés d'une manière spécifique. * **L'encodage one-hot** remplacera la colonne `Variety` par 4 colonnes différentes, une pour chaque variété. Chaque colonne contiendra `1` si la ligne correspondante est d'une variété donnée, et `0` sinon. 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 "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 | 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 +``` + + 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 Pour entraîner une 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` et `y` : ```python X = pd.get_dummies(new_pumpkins['Variety']) y = new_pumpkins['Price'] -``` +``` -Le reste du code est identique à 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 davantage de caractéristiques catégorielles, ainsi que des caractéristiques numériques, comme `Month` ou `DayOfYear`. Pour obtenir un grand tableau de caractéristiques, nous pouvons utiliser `join` : +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 davantage de caractéristiques catégorielles, ainsi que des caractéristiques numériques, comme `Month` ou `DayOfYear`. Pour obtenir un grand tableau de caractéristiques, nous pouvons utiliser `join` : ```python X = pd.get_dummies(new_pumpkins['Variety']) \ @@ -313,13 +313,13 @@ X = pd.get_dummies(new_pumpkins['Variety']) \ .join(pd.get_dummies(new_pumpkins['City'])) \ .join(pd.get_dummies(new_pumpkins['Package'])) y = new_pumpkins['Price'] -``` +``` Ici, nous prenons également en compte `City` et le type de `Package`, ce qui nous donne un MSE de 2,84 (10 %) et un coefficient de détermination de 0,94 ! ## Tout rassembler -Pour créer le meilleur modèle, nous pouvons utiliser les 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é : +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 @@ -345,32 +345,33 @@ 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, presque 97 %, et un MSE=2,23 (~8 % d'erreur de prédiction). -| Modèle | MSE | Détermination | -|--------|-----|---------------| -| `DayOfYear` Linéaire | 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 Polynomial | 2,23 (8,25 %) | 0,97 | +| Modèle | MSE | Détermination | +|--------|-----|---------------| +| `DayOfYear` Linéaire | 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 Polynomial | 2,23 (8,25 %) | 0,97 | 🏆 Bien joué ! Vous avez créé quatre modèles de régression en une seule 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 post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/14/) +## [Quiz post-lecture](https://ff-quizzes.netlify.app/en/ml/) ## Révision et auto-apprentissage Dans cette leçon, nous avons appris 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 pour approfondir est le [cours de Stanford sur l'apprentissage statistique](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning). -## Devoir +## Devoir [Construisez un modèle](assignment.md) diff --git a/translations/fr/2-Regression/4-Logistic/README.md b/translations/fr/2-Regression/4-Logistic/README.md index 938bdf2a6..5e87eb097 100644 --- a/translations/fr/2-Regression/4-Logistic/README.md +++ b/translations/fr/2-Regression/4-Logistic/README.md @@ -1,23 +1,23 @@ # Régression logistique pour prédire des catégories -![Infographie sur la régression logistique vs linéaire](../../../../translated_images/linear-vs-logistic.ba180bf95e7ee66721ba10ebf2dac2666acbd64a88b003c83928712433a13c7d.fr.png) +![Infographie sur la régression logistique vs linéaire](../../../../2-Regression/4-Logistic/images/linear-vs-logistic.png) -## [Quiz avant le cours](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/15/) +## [Quiz avant le cours](https://ff-quizzes.netlify.app/en/ml/) > ### [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 classiques de base en apprentissage automatique, nous allons examiner la régression logistique. Vous utiliseriez cette technique pour découvrir des modèles permettant de prédire des catégories binaires. Ce bonbon est-il au chocolat ou non ? Cette maladie est-elle contagieuse ou non ? Ce client choisira-t-il ce produit ou non ? +Dans cette dernière leçon sur la régression, l'une des techniques de base _classiques_ en apprentissage automatique, nous allons examiner la régression logistique. Vous utiliseriez cette technique pour découvrir des modèles permettant de prédire des catégories binaires. Ce bonbon est-il au 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 : @@ -30,19 +30,19 @@ Dans cette leçon, vous apprendrez : Après avoir travaillé avec les données sur les citrouilles, nous sommes maintenant suffisamment familiers avec elles pour réaliser qu'il existe une catégorie binaire sur laquelle nous pouvons travailler : `Color`. -Construisons un modèle de régression logistique pour prédire, à partir de certaines variables, _quelle couleur une citrouille donnée est susceptible d'avoir_ (orange 🎃 ou blanche 👻). +Construisons un modèle de régression logistique pour prédire, en fonction de certaines variables, _quelle couleur une citrouille donnée est susceptible d'avoir_ (orange 🎃 ou blanche 👻). -> Pourquoi parlons-nous de classification binaire dans une leçon sur la régression ? C'est uniquement pour des raisons linguistiques, car la régression logistique est [en réalité une méthode de classification](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bien qu'elle soit basée sur des principes linéaires. Découvrez d'autres façons de classifier les données dans le prochain groupe de leçons. +> Pourquoi parlons-nous de classification binaire dans une leçon sur la régression ? C'est uniquement pour des raisons linguistiques, car la régression logistique est [en réalité une méthode de classification](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), bien qu'elle soit basée sur des modèles linéaires. Découvrez d'autres façons de classifier les données dans le prochain groupe de leçons. ## Définir la question Pour nos besoins, nous exprimerons cela comme une binaire : 'Blanche' ou 'Non blanche'. Il existe également une catégorie 'rayée' dans notre ensemble de données, mais elle contient peu d'exemples, donc nous ne l'utiliserons pas. Elle disparaît de toute façon une fois que nous supprimons 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 citrouilles oranges, mais elles ont un look sympa ! Nous pourrions donc reformuler notre question ainsi : 'Fantôme' ou 'Non fantôme'. 👻 +> 🎃 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 citrouilles oranges, mais elles ont un look cool ! Nous pourrions donc reformuler notre question ainsi : 'Fantôme' ou 'Non fantôme'. 👻 ## À propos de la régression logistique -La régression logistique diffère de la régression linéaire, que vous avez apprise précédemment, de plusieurs manières importantes. +La régression logistique diffère de la régression linéaire, que vous avez apprise précédemment, de plusieurs façons 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") @@ -52,7 +52,7 @@ La régression logistique diffère de la régression linéaire, que vous avez ap La régression logistique n'offre pas les mêmes fonctionnalités que la régression linéaire. La première propose une prédiction sur une catégorie binaire ("blanche ou non blanche"), tandis que la seconde est capable de prédire des valeurs continues, par exemple, en fonction de l'origine d'une citrouille et du moment de la récolte, _de combien son prix augmentera_. -![Modèle de classification des citrouilles](../../../../translated_images/pumpkin-classifier.562771f104ad5436b87d1c67bca02a42a17841133556559325c0a0e348e5b774.fr.png) +![Modèle de classification des citrouilles](../../../../2-Regression/4-Logistic/images/pumpkin-classifier.png) > Infographie par [Dasani Madipalli](https://twitter.com/dasani_decoded) ### Autres classifications @@ -60,13 +60,13 @@ La régression logistique n'offre pas les mêmes fonctionnalités que la régres Il existe d'autres types de régression logistique, notamment multinomiale et ordinale : - **Multinomiale**, qui implique d'avoir plus d'une catégorie - "Orange, Blanche et Rayée". -- **Ordinale**, qui implique des catégories ordonnées, utile si nous voulons ordonner nos résultats logiquement, comme nos citrouilles classées par un nombre fini de tailles (mini, petite, moyenne, grande, XL, XXL). +- **Ordinale**, qui implique des catégories ordonnées, utile si nous voulons ordonner nos résultats de manière logique, comme nos citrouilles 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) +![Régression multinomiale vs ordinale](../../../../2-Regression/4-Logistic/images/multinomial-vs-ordinal.png) ### Les variables n'ont PAS besoin d'être corrélées -Vous vous souvenez que la régression linéaire fonctionnait mieux avec des variables plus corrélées ? La régression logistique est l'opposé - les variables n'ont pas besoin d'être alignées. Cela fonctionne pour ces données qui ont des corrélations relativement faibles. +Vous vous souvenez de la façon dont la régression linéaire fonctionnait mieux avec des variables plus corrélées ? La régression logistique est l'opposé - les variables n'ont pas besoin d'être alignées. Cela fonctionne pour ces données qui ont des corrélations relativement faibles. ### Vous avez besoin de beaucoup de données propres @@ -100,7 +100,7 @@ Tout d'abord, nettoyez un peu les données en supprimant les valeurs nulles et e ### Visualisation - graphique catégoriel -À ce stade, vous avez chargé le [notebook de départ](./notebook.ipynb) avec les données sur les citrouilles et les avez nettoyées pour conserver un ensemble de données contenant quelques variables, y compris `Color`. Visualisons le dataframe dans le notebook en utilisant une bibliothèque différente : [Seaborn](https://seaborn.pydata.org/index.html), qui est construite sur Matplotlib que nous avons utilisé précédemment. +À ce stade, vous avez chargé le [notebook de départ](../../../../2-Regression/4-Logistic/notebook.ipynb) avec les données sur les citrouilles et les avez nettoyées pour conserver un ensemble de données contenant quelques variables, y compris `Color`. Visualisons le dataframe dans le notebook en utilisant une bibliothèque différente : [Seaborn](https://seaborn.pydata.org/index.html), qui est construite sur Matplotlib que nous avons utilisé précédemment. Seaborn offre 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égoriel. @@ -120,7 +120,7 @@ Seaborn offre des moyens intéressants de visualiser vos données. Par exemple, ) ``` - ![Une grille de données visualisées](../../../../translated_images/pumpkins_catplot_1.c55c409b71fea2ecc01921e64b91970542101f90bcccfa4aa3a205db8936f48b.fr.png) + ![Une grille de données visualisées](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_1.png) En observant les données, vous pouvez voir comment les données de couleur se rapportent à la variété. @@ -128,11 +128,11 @@ Seaborn offre des moyens intéressants de visualiser vos données. Par exemple, ### Prétraitement des données : encodage des caractéristiques et des étiquettes -Notre ensemble de données sur les citrouilles contient des valeurs de type chaîne pour toutes ses colonnes. Travailler avec des données catégoriques est intuitif pour les humains mais pas pour les machines. Les algorithmes d'apprentissage automatique fonctionnent bien avec des nombres. 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 des données catégoriques en données numériques, sans perdre aucune information. Un bon encodage permet de construire un bon modèle. +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 nombres. 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 aucune information. Un bon encodage permet de construire 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égoriques dont les données suivent un ordre logique, comme la colonne `Item Size` dans notre ensemble de données. Il crée une correspondance de sorte que chaque catégorie soit représentée par un nombre, qui est l'ordre de la catégorie dans la colonne. +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 une correspondance de sorte que chaque catégorie soit représentée par un nombre, qui est l'ordre de la catégorie dans la colonne. ```python from sklearn.preprocessing import OrdinalEncoder @@ -142,7 +142,7 @@ Pour l'encodage des caractéristiques, il existe deux principaux types d'encodeu ordinal_encoder = OrdinalEncoder(categories=item_size_categories) ``` -2. Encodeur catégoriel : il convient bien aux variables nominales, qui sont des variables catégoriques 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. Il s'agit d'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. +2. Encodeur catégoriel : 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. Il s'agit d'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 @@ -150,7 +150,6 @@ Pour l'encodage des caractéristiques, il existe deux principaux types d'encodeu 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 @@ -164,7 +163,6 @@ Ensuite, `ColumnTransformer` est utilisé pour combiner plusieurs encodeurs en u 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 normaliser les étiquettes de sorte qu'elles contiennent uniquement des valeurs entre 0 et n_classes-1 (ici, 0 et 1). ```python @@ -173,18 +171,17 @@ D'autre part, pour encoder l'étiquette, nous utilisons la classe `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 la colonne `Item Size` ? ### Analyser les relations entre les variables -Maintenant que nous avons prétraité nos données, nous pouvons analyser les relations entre les caractéristiques et l'étiquette pour avoir une idée de la capacité du modèle à prédire l'étiquette à partir des caractéristiques. La meilleure façon de réaliser ce type d'analyse est de tracer les données. Nous utiliserons à nouveau la fonction `catplot` de Seaborn pour visualiser les relations entre `Item Size`, `Variety` et `Color` dans un graphique catégoriel. Pour mieux tracer les données, nous utiliserons la colonne encodée `Item Size` et la colonne non encodée `Variety`. +Maintenant que nous avons prétraité nos données, nous pouvons analyser les relations entre les caractéristiques et l'étiquette pour avoir une idée de la capacité du modèle à prédire l'étiquette en fonction des caractéristiques. +La meilleure façon de réaliser ce type d'analyse est de tracer les données. Nous utiliserons à nouveau la fonction `catplot` de Seaborn pour visualiser les relations entre `Item Size`, `Variety` et `Color` dans un graphique catégoriel. Pour mieux tracer les données, nous utiliserons la colonne encodée `Item Size` et la colonne non encodée `Variety`. ```python palette = { @@ -203,16 +200,15 @@ Maintenant que nous avons prétraité nos données, nous pouvons analyser les re 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) +![Un catplot de données visualisées](../../../../2-Regression/4-Logistic/images/pumpkins_catplot_2.png) ### Utiliser un graphique en essaim -Étant donné que `Color` est une catégorie binaire (Blanche ou Non), 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. +Étant donné que Color est une catégorie binaire (Blanche ou Non), 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 des graphiques Seaborn. -1. Essayez un graphique en essaim pour montrer la distribution des valeurs : +1. Essayez un graphique en 'essaim' pour montrer la distribution des valeurs : ```python palette = { @@ -222,15 +218,15 @@ Vous pouvez visualiser les variables côte à côte avec des graphiques Seaborn. 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) + ![Un essaim de données visualisées](../../../../2-Regression/4-Logistic/images/swarm_2.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 est de réduire 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** +> **🧮 Montrez-moi les maths** > > La régression logistique repose sur le concept de 'maximum de vraisemblance' en 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 entre 0 et 1. Sa courbe est également appelée 'courbe logistique'. Sa formule ressemble à ceci : > -> ![fonction logistique](../../../../translated_images/sigmoid.8b7ba9d095c789cf72780675d0d1d44980c3736617329abfc392dfc859799704.fr.png) +> ![fonction logistique](../../../../2-Regression/4-Logistic/images/sigmoid.png) > > où le point médian de la sigmoïde se trouve au point 0 de 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 attribuée à la classe '1' du choix binaire. Sinon, elle sera classée comme '0'. @@ -254,7 +250,7 @@ Construire un modèle pour trouver ces classifications binaires est étonnamment ``` -2. Maintenant, vous pouvez entraîner votre modèle en appelant `fit()` avec vos données d'entraînement, et afficher son résultat : +2. Maintenant, vous pouvez entraîner votre modèle, en appelant `fit()` avec vos données d'entraînement, et afficher son résultat : ```python from sklearn.metrics import f1_score, classification_report @@ -292,9 +288,9 @@ Construire un modèle pour trouver ces classifications binaires est étonnamment ## Meilleure compréhension via une matrice de confusion -Bien que vous puissiez obtenir un rapport de tableau de bord [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 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. +Bien que vous puissiez obtenir un rapport de tableau de bord [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 mieux comprendre votre modèle 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 vs faux positifs et négatifs de votre modèle, évaluant ainsi la précision des prédictions. +> 🎓 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 de votre modèle par rapport aux faux positifs et négatifs, évaluant ainsi la précision des prédictions. 1. Pour utiliser une matrice de confusion, appelez `confusion_matrix()` : @@ -317,7 +313,7 @@ Dans Scikit-learn, les lignes (axe 0) sont les étiquettes réelles et les colon | 0 | TN | FP | | 1 | FN | TP | -Que se passe-t-il ici ? Disons que notre modèle est chargé de classifier les citrouilles entre deux catégories binaires, catégorie 'blanche' et catégorie 'non blanche'. +Que se passe-t-il ici ? Disons que notre modèle est chargé de classer les citrouilles entre deux catégories binaires, catégorie 'blanche' et catégorie 'non blanche'. - Si votre modèle prédit qu'une citrouille n'est pas blanche et qu'elle appartient à la catégorie 'non blanche' en réalité, nous appelons cela un vrai négatif, indiqué par le nombre en haut à gauche. - Si votre modèle prédit qu'une citrouille est blanche et qu'elle appartient à la catégorie 'non blanche' en réalité, nous appelons cela un faux négatif, indiqué par le nombre en bas à gauche. @@ -332,25 +328,32 @@ 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 s'en est-il sorti ? -R : Pas mal ; il y a un bon nombre de vrais négatifs mais aussi quelques faux négatifs. +A : 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 précédemment à l'aide de la cartographie TP/TN et FP/FN de la matrice de confusion : -🎓 Précision : TP/(TP + FP) La fraction des instances pertinentes parmi les instances récupérées (par exemple, quels labels ont été bien étiquetés). +🎓 Précision : TP/(TP + FP) +La fraction des instances pertinentes parmi les instances récupérées (par exemple, quelles étiquettes ont été bien classées). -🎓 Rappel : TP/(TP + FN) La fraction des instances pertinentes qui ont été récupérées, qu'elles soient bien étiquetées ou non. +🎓 Rappel : TP/(TP + FN) +La fraction des instances pertinentes qui ont été récupérées, qu'elles soient bien classé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 le meilleur score étant 1 et le pire étant 0. +🎓 f1-score : (2 * précision * rappel)/(précision + rappel) +Une moyenne pondérée de la précision et du rappel, avec un score maximal de 1 et minimal de 0. -🎓 Support : Le nombre d'occurrences de chaque label récupéré. +🎓 Support : +Le nombre d'occurrences de chaque étiquette récupérée. -🎓 Exactitude : (TP + TN)/(TP + TN + FP + FN) Le pourcentage de labels prédits correctement pour un échantillon. +🎓 Exactitude : (TP + TN)/(TP + TN + FP + FN) +Le pourcentage d'étiquettes prédites correctement pour un échantillon. -🎓 Macro Moyenne : Le calcul de la moyenne non pondérée des métriques pour chaque label, sans tenir compte du déséquilibre des labels. +🎓 Macro Moyenne : +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 label, en tenant compte du déséquilibre des labels en les pondérant par leur support (le nombre d'instances réelles pour chaque label). +🎓 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 réfléchir à quelle métrique surveiller si vous voulez que votre modèle réduise le nombre de faux négatifs ? +✅ Pouvez-vous réfléchir à quel métrique surveiller si vous voulez que votre modèle réduise le nombre de faux négatifs ? ## Visualiser la courbe ROC de ce modèle @@ -358,7 +361,7 @@ Revisitons les termes que nous avons vus précédemment à l'aide de la cartogra > 🎥 Cliquez sur l'image ci-dessus pour une courte vidéo sur les courbes ROC. -Faisons une autre visualisation pour voir la fameuse courbe 'ROC' : +Faisons une dernière visualisation pour voir la fameuse courbe 'ROC' : ```python from sklearn.metrics import roc_curve, roc_auc_score @@ -378,9 +381,9 @@ plt.title('ROC Curve') plt.show() ``` -En utilisant Matplotlib, tracez la [caractéristique de fonctionnement du récepteur](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ou ROC du modèle. Les courbes ROC sont souvent utilisées pour obtenir une vue d'ensemble des résultats d'un classificateur en termes de vrais positifs contre faux positifs. "Les courbes ROC présentent généralement le taux de vrais positifs sur l'axe Y et le taux de faux positifs sur l'axe X." Ainsi, la pente de la courbe et l'espace entre la ligne médiane et la courbe sont importants : vous voulez une courbe qui monte rapidement et dépasse la ligne. Dans notre cas, il y a des faux positifs au départ, puis la ligne monte correctement : +En utilisant Matplotlib, tracez la [caractéristique de fonctionnement du récepteur](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) ou ROC du modèle. Les courbes ROC sont souvent utilisées pour obtenir une vue d'ensemble des résultats d'un classificateur en termes de vrais positifs vs faux positifs. "Les courbes ROC présentent généralement le taux de vrais positifs sur l'axe Y et le taux de faux positifs sur l'axe X." Ainsi, la pente de la courbe et l'espace entre la ligne médiane et la courbe sont importants : vous voulez une courbe qui monte rapidement et dépasse la ligne. Dans notre cas, il y a des faux positifs au départ, puis la ligne monte correctement : -![ROC](../../../../translated_images/ROC_2.777f20cdfc4988ca683ade6850ac832cb70c96c12f1b910d294f270ef36e1a1c.fr.png) +![ROC](../../../../2-Regression/4-Logistic/images/ROC_2.png) Enfin, utilisez 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) de Scikit-learn pour calculer la véritable 'Surface sous la courbe' (AUC) : @@ -388,18 +391,18 @@ Enfin, utilisez l'API [`roc_auc_score`](https://scikit-learn.org/stable/modules/ auc = roc_auc_score(y_test,y_scores[:,1]) print(auc) ``` -Le résultat est `0.9749908725812341`. Étant donné que l'AUC varie de 0 à 1, vous voulez un score élevé, car un modèle qui est 100 % correct dans ses prédictions aura une AUC de 1 ; dans ce cas, le modèle est _plutôt bon_. +Le résultat est `0,9749908725812341`. Étant donné que l'AUC varie de 0 à 1, vous voulez un score élevé, car un modèle qui est correct à 100 % dans ses prédictions aura une AUC de 1 ; dans ce cas, le modèle est _plutôt bon_. Dans les prochaines leçons sur les classifications, vous apprendrez comment itérer pour améliorer les scores de votre modèle. Mais pour l'instant, félicitations ! Vous avez terminé ces leçons sur la régression ! --- ## 🚀Défi -Il y a beaucoup plus à découvrir sur la régression logistique ! Mais la meilleure façon d'apprendre est d'expérimenter. Trouvez un ensemble de données qui se prête à ce type d'analyse et construisez un modèle avec celui-ci. Qu'apprenez-vous ? Astuce : essayez [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) pour des ensembles de données intéressants. +Il y a beaucoup plus à découvrir sur la régression logistique ! Mais la meilleure façon d'apprendre est d'expérimenter. Trouvez un jeu de données qui se prête à ce type d'analyse et construisez un modèle avec celui-ci. Qu'apprenez-vous ? Astuce : essayez [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) pour des jeux de données intéressants. -## [Quiz post-lecture](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/16/) +## [Quiz post-lecture](https://ff-quizzes.netlify.app/en/ml/) -## Révision & Auto-étude +## Révision & Étude personnelle Lisez les premières pages de [cet article de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) sur quelques utilisations pratiques de la régression logistique. Réfléchissez aux tâches qui conviennent mieux à l'un ou l'autre type de tâches de régression que nous avons étudiées jusqu'à présent. Qu'est-ce qui fonctionnerait le mieux ? diff --git a/translations/fr/3-Web-App/1-Web-App/README.md b/translations/fr/3-Web-App/1-Web-App/README.md index 053b973a1..ddf68fcc5 100644 --- a/translations/fr/3-Web-App/1-Web-App/README.md +++ b/translations/fr/3-Web-App/1-Web-App/README.md @@ -1,67 +1,67 @@ # Construire une application web pour utiliser un modèle de machine learning -Dans cette leçon, vous allez entraîner un modèle de machine learning sur un ensemble de données hors du commun : _les observations d'OVNIs au cours du siècle dernier_, issues de la base de données de NUFORC. +Dans cette leçon, vous allez entraîner un modèle de machine learning sur un ensemble de données hors du commun : _les observations d'OVNI au cours du siècle dernier_, provenant de la base de données de NUFORC. Vous apprendrez : -- Comment "pickler" un modèle entraîné +- 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 aller 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 la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/17/) +## [Quiz avant la leçon](https://ff-quizzes.netlify.app/en/ml/) ## Construire une application -Il existe plusieurs façons de construire des applications web pour consommer des modèles de machine learning. Votre architecture web peut influencer la manière dont votre modèle est entraîné. Imaginez que vous travaillez dans une entreprise où l'équipe de data science a entraîné un modèle qu'elle souhaite que vous utilisiez dans une application. +Il existe plusieurs façons de créer des applications web pour consommer des modèles de machine learning. Votre architecture web peut influencer la manière dont votre modèle est entraîné. Imaginez que vous travaillez dans une entreprise où le groupe de data science a entraîné un modèle qu'il souhaite que vous utilisiez dans une application. ### Points à considérer -De nombreuses questions doivent être posées : +Il y a de nombreuses questions à se poser : -- **S'agit-il d'une application web ou mobile ?** Si vous construisez une application mobile ou devez utiliser le modèle dans un contexte IoT, vous pourriez utiliser [TensorFlow Lite](https://www.tensorflow.org/lite/) et intégrer le modèle dans une application Android ou iOS. -- **Où résidera le modèle ?** Dans le cloud ou localement ? +- **Est-ce une application web ou une application mobile ?** Si vous construisez une application mobile ou devez utiliser le modèle dans un contexte IoT, vous pourriez utiliser [TensorFlow Lite](https://www.tensorflow.org/lite/) et intégrer le modèle dans une application Android ou iOS. +- **Où le modèle sera-t-il hébergé ?** 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 nécessaires. +- **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 avec TensorFlow, par exemple, cet écosystème permet de convertir un modèle TensorFlow pour une utilisation dans une application web via [TensorFlow.js](https://www.tensorflow.org/js/). - - **Utilisation de PyTorch.** Si vous construisez un modèle avec une bibliothèque comme [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 via [Onnx Runtime](https://www.onnxruntime.ai/). Cette option sera explorée dans une future leçon pour un modèle entraîné avec Scikit-learn. - - **Utilisation de Lobe.ai ou Azure Custom Vision.** Si vous utilisez un système SaaS de machine learning comme [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), ce type de logiciel offre des moyens d'exporter le modèle pour de nombreuses plateformes, y compris la création d'une API sur mesure interrogeable dans le cloud par votre application en ligne. + - **Utilisation de PyTorch.** Si vous construisez un modèle avec une bibliothèque comme [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 le [Onnx Runtime](https://www.onnxruntime.ai/). Cette option sera explorée dans une future leçon 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 offre des moyens d'exporter le modèle pour de nombreuses plateformes, y compris la création d'une API sur mesure à interroger dans le cloud par votre application en ligne. -Vous avez également la possibilité de construire une application web Flask complète capable d'entraîner le modèle directement dans un navigateur web. Cela peut également être fait avec TensorFlow.js dans un contexte JavaScript. +Vous avez également la possibilité de construire une application web Flask complète qui pourrait entraîner le modèle directement dans un navigateur web. Cela peut également être fait en utilisant TensorFlow.js dans un contexte JavaScript. Pour nos besoins, puisque nous avons travaillé avec des notebooks basés sur Python, explorons les étapes nécessaires pour exporter un modèle entraîné depuis un notebook vers un format lisible par une application web construite en Python. -## Outil +## Outils -Pour cette tâche, vous avez besoin de deux outils : Flask et Pickle, tous deux fonctionnant avec Python. +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 en utilisant Python et un moteur de templates pour construire des pages web. Consultez [ce module d'apprentissage](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) pour vous entraîner à construire avec Flask. +✅ Qu'est-ce que [Flask](https://palletsprojects.com/p/flask/) ? Décrit comme un "micro-framework" par ses créateurs, Flask fournit les fonctionnalités de base des frameworks web en utilisant Python et un moteur de templates pour construire des pages web. Consultez [ce module d'apprentissage](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-77952-leestott) pour vous entraîner à construire 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 "picklez" un modèle, vous sérialisez ou aplatissez sa structure pour une utilisation sur le web. Attention : Pickle n'est pas intrinsèquement sécurisé, soyez donc prudent si vous êtes invité à "dé-pickler" un fichier. Un fichier picklé a l'extension `.pkl`. +✅ 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. Attention : pickle n'est pas intrinsèquement sécurisé, soyez prudent si vous êtes invité à "un-pickle" un fichier. Un fichier picklé a l'extension `.pkl`. -## Exercice - Nettoyer vos données +## Exercice - nettoyer vos données -Dans cette leçon, vous utiliserez des données provenant de 80 000 observations d'OVNIs, collectées par le [NUFORC](https://nuforc.org) (National UFO Reporting Center). Ces données contiennent des descriptions intéressantes d'observations d'OVNIs, par exemple : +Dans cette leçon, vous utiliserez des données provenant de 80 000 observations d'OVNI, collectées par [NUFORC](https://nuforc.org) (The National UFO Reporting Center). Ces données contiennent des descriptions intéressantes d'observations d'OVNI, par exemple : -- **Description longue.** "Un homme émerge d'un faisceau de lumière qui éclaire un champ herbeux la nuit et court vers le parking de Texas Instruments." -- **Description courte.** "Les lumières nous ont poursuivis." +- **Description longue.** "Un homme émerge d'un faisceau de lumière qui éclaire un champ herbeux la nuit et court vers le parking de Texas Instruments". +- **Description courte.** "les lumières nous ont poursuivis". -Le fichier [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) contient des colonnes sur la `ville`, l'`état` et le `pays` où l'observation a eu lieu, la `forme` de l'objet, ainsi que sa `latitude` et sa `longitude`. +Le fichier [ufos.csv](../../../../3-Web-App/1-Web-App/data/ufos.csv) inclut des colonnes sur la `ville`, l'`état` et le `pays` où l'observation a eu lieu, la `forme` de l'objet et ses `latitude` et `longitude`. -Dans le [notebook](notebook.ipynb) vierge inclus dans cette leçon : +Dans le [notebook](../../../../3-Web-App/1-Web-App/notebook.ipynb) inclus dans cette leçon : -1. Importez `pandas`, `matplotlib` et `numpy` comme dans les leçons précédentes, et importez le fichier ufos. Vous pouvez examiner un échantillon de l'ensemble de données : +1. Importez `pandas`, `matplotlib` et `numpy` comme vous l'avez fait dans les leçons précédentes et importez le fichier ufos. Vous pouvez jeter un œil à un échantillon de l'ensemble de données : ```python import pandas as pd @@ -79,7 +79,7 @@ Dans le [notebook](notebook.ipynb) vierge inclus dans cette leçon : ufos.Country.unique() ``` -1. Réduisez ensuite la quantité de données à traiter en supprimant les valeurs nulles et en ne conservant que les observations entre 1 et 60 secondes : +1. Réduisez maintenant la quantité de données à traiter en supprimant les valeurs nulles et en n'important que les observations entre 1 et 60 secondes : ```python ufos.dropna(inplace=True) @@ -112,9 +112,9 @@ Dans le [notebook](notebook.ipynb) vierge inclus dans cette leçon : 24 3.0 3 51.783333 -0.783333 ``` -## Exercice - Construire votre modèle +## Exercice - construire votre modèle -Vous pouvez maintenant vous préparer à entraîner un modèle en divisant les données en groupes d'entraînement et de test. +Vous pouvez maintenant préparer l'entraînement du 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 entraîner votre modèle comme vecteur X, et le vecteur y sera le `Country`. Vous voulez pouvoir entrer `Seconds`, `Latitude` et `Longitude` et obtenir un identifiant de pays en retour. @@ -145,11 +145,11 @@ Vous pouvez maintenant vous préparer à entraîner un modèle en divisant les d La précision n'est pas mauvaise **(environ 95%)**, ce qui n'est pas surprenant, car `Country` et `Latitude/Longitude` sont corrélés. -Le modèle que vous avez créé n'est pas très révolutionnaire, car vous devriez pouvoir déduire un `Country` à partir de sa `Latitude` et de sa `Longitude`, mais c'est un bon exercice pour s'entraîner à partir de données brutes que vous avez nettoyées, exportées, puis utilisées dans une application web. +Le modèle que vous avez créé n'est pas très révolutionnaire, car vous devriez être capable d'inférer un `Country` à partir de sa `Latitude` et `Longitude`, mais c'est un bon exercice pour essayer d'entraîner à partir de données brutes que vous avez nettoyées, exportées, puis utiliser ce modèle dans une application web. -## Exercice - "Pickler" votre modèle +## Exercice - "pickle" votre modèle -Il est maintenant temps de _pickler_ 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 avec un tableau de données exemple contenant des valeurs pour les secondes, la latitude et la longitude. +Il est maintenant 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 avec un tableau de données contenant des valeurs pour les secondes, la latitude et la longitude. ```python import pickle @@ -160,11 +160,11 @@ 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 ! 👽 +Le modèle retourne **'3'**, qui est le code pays pour le Royaume-Uni. Incroyable ! 👽 -## Exercice - Construire une application Flask +## Exercice - construire une application Flask -Vous pouvez maintenant construire une application Flask pour appeler votre modèle et renvoyer des résultats similaires, mais de manière plus visuellement attrayante. +Vous pouvez maintenant construire une application Flask pour appeler votre modèle et retourner des résultats similaires, mais de 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_. @@ -190,7 +190,7 @@ Vous pouvez maintenant construire une application Flask pour appeler votre modè flask ``` -1. Ensuite, exécutez ce fichier en naviguant vers _web-app_ : +1. Exécutez maintenant ce fichier en naviguant vers _web-app_ : ```bash cd web-app @@ -208,7 +208,7 @@ Vous pouvez maintenant construire une application Flask pour appeler votre modè 2. Créez **index.html** dans le répertoire _templates_. 3. Créez **styles.css** dans le répertoire _static/css_. -1. Construisez le fichier _styles.css_ avec quelques styles : +1. Complétez le fichier _styles.css_ avec quelques styles : ```css body { @@ -242,7 +242,7 @@ Vous pouvez maintenant construire une application Flask pour appeler votre modè } ``` -1. Ensuite, construisez le fichier _index.html_ : +1. Ensuite, complétez le fichier _index.html_ : ```html @@ -277,7 +277,7 @@ Vous pouvez maintenant construire une application Flask pour appeler votre modè ``` - Examinez le templating dans ce fichier. Remarquez la syntaxe "mustache" autour des variables fournies par l'application, comme le texte de prédiction : `{{}}`. Il y a également un formulaire qui envoie une prédiction à la route `/predict`. + Regardez le templating dans ce fichier. Notez la syntaxe "mustache" autour des variables qui seront fournies par l'application, comme le texte de prédiction : `{{}}`. Il y a aussi un formulaire qui envoie une prédiction à la route `/predict`. Enfin, vous êtes prêt à construire le fichier Python qui pilote la consommation du modèle et l'affichage des prédictions : @@ -318,22 +318,22 @@ Vous pouvez maintenant construire une application Flask pour appeler votre modè app.run(debug=True) ``` - > 💡 Astuce : lorsque vous ajoutez [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) lors de l'exécution de l'application web avec Flask, toute modification apportée à votre application sera immédiatement reflétée sans avoir besoin de redémarrer le serveur. Attention ! Ne pas activer ce mode dans une application en production. + > 💡 Astuce : lorsque vous ajoutez [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) en exécutant l'application web avec Flask, tout changement que vous apportez à votre application sera immédiatement reflété sans avoir besoin de redémarrer le serveur. Attention ! Ne pas activer ce mode dans une application en production. -Si vous exécutez `python app.py` ou `python3 app.py`, votre serveur web démarre localement, et vous pouvez remplir un court formulaire pour obtenir une réponse à votre question brûlante sur les lieux où les OVNIs ont été observés ! +Si vous exécutez `python app.py` ou `python3 app.py`, votre serveur web démarre localement, et vous pouvez remplir un court formulaire pour obtenir une réponse à votre question brûlante sur les lieux où les OVNI ont été observés ! -Avant cela, examinez les parties de `app.py` : +Avant de faire cela, examinez les parties de `app.py` : 1. Tout d'abord, les dépendances sont chargées et l'application démarre. 1. Ensuite, le modèle est importé. -1. Enfin, index.html est rendu sur la route principale. +1. Enfin, index.html est rendu sur la route d'accueil. -Sur la route `/predict`, plusieurs choses se produisent lorsque le formulaire est soumis : +Sur la route `/predict`, plusieurs choses se produisent lorsque le formulaire est envoyé : -1. Les variables du formulaire sont collectées et converties en un tableau numpy. Elles sont ensuite envoyées au modèle, et une prédiction est renvoyée. -2. Les pays que nous voulons afficher sont retransformés en texte lisible à partir de leur code pays prédit, et cette valeur est renvoyée à index.html pour être rendue dans le template. +1. Les variables du formulaire sont collectées et converties en un tableau numpy. Elles sont ensuite envoyées au modèle et une prédiction est retournée. +2. Les pays que nous voulons afficher sont re-rendus sous forme de texte lisible à partir de leur code pays prédit, et cette valeur est renvoyée à index.html pour être rendue dans le template. -Utiliser un modèle de cette manière, avec Flask et un modèle picklé, est relativement simple. Le plus difficile est de comprendre la forme des données qui doivent être envoyées au modèle pour obtenir une prédiction. Tout dépend de la manière dont le modèle a été entraîné. Celui-ci nécessite trois points de données en entrée pour produire une prédiction. +Utiliser un modèle de cette manière, avec Flask et un modèle picklé, est relativement simple. La partie la plus difficile est de comprendre la forme des données qui doivent être envoyées au modèle pour obtenir une prédiction. Tout dépend de la manière dont le modèle a été entraîné. Celui-ci nécessite trois points de données pour obtenir une prédiction. Dans un cadre professionnel, vous pouvez voir à quel point une bonne communication est nécessaire entre les personnes qui entraînent le modèle et celles qui le consomment dans une application web ou mobile. Dans notre cas, c'est une seule personne : vous ! @@ -341,13 +341,13 @@ Dans un cadre professionnel, vous pouvez voir à quel point une bonne communicat ## 🚀 Défi -Au lieu de travailler dans un notebook et d'importer le modèle dans l'application Flask, vous pourriez entraîner le modèle directement dans l'application Flask ! Essayez de convertir votre code Python dans le notebook pour entraîner le modèle directement dans l'application, sur une route appelée `train`. Quels sont les avantages et les inconvénients de cette méthode ? +Au lieu de travailler dans un notebook et d'importer le modèle dans l'application Flask, vous pourriez entraîner le modèle directement dans l'application Flask ! Essayez de convertir votre code Python dans le notebook, peut-être après avoir nettoyé vos données, pour entraîner le modèle directement dans l'application sur une route appelée `train`. Quels sont les avantages et les inconvénients de cette méthode ? -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/18/) +## [Quiz après la leçon](https://ff-quizzes.netlify.app/en/ml/) ## Révision et auto-apprentissage -Il existe de nombreuses façons de construire une application web pour consommer des modèles de machine learning. Faites une liste des façons dont vous pourriez utiliser JavaScript ou Python pour construire une application web exploitant le machine learning. Réfléchissez à 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 appliquée au machine learning. +Il existe de nombreuses façons de construire une application web pour consommer des modèles de machine learning. Faites une liste des façons dont vous pourriez utiliser JavaScript ou Python pour construire une application web exploitant le machine learning. Pensez à l'architecture : le modèle doit-il rester dans l'application ou vivre dans le cloud ? Si c'est le cas, comment y accéder ? Dessinez un modèle architectural pour une solution web appliquée au machine learning. ## Devoir @@ -356,4 +356,4 @@ Il existe de nombreuses façons de construire une application web pour consommer --- **Avertissement** : -Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'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 index 8dc1970d8..14285c0dc 100644 --- a/translations/fr/4-Classification/1-Introduction/README.md +++ b/translations/fr/4-Classification/1-Introduction/README.md @@ -1,68 +1,68 @@ # Introduction à la classification -Dans ces quatre leçons, vous allez explorer un aspect fondamental de l'apprentissage automatique classique : _la classification_. Nous allons utiliser divers algorithmes de classification avec un ensemble de données sur les cuisines brillantes d'Asie et d'Inde. Préparez-vous à avoir faim ! +Dans ces quatre leçons, vous allez explorer un aspect fondamental de l'apprentissage automatique classique : _la classification_. Nous allons examiner l'utilisation de divers algorithmes de classification avec un ensemble de données sur les cuisines brillantes d'Asie et d'Inde. Préparez-vous à avoir l'eau à la bouche ! -![juste une pincée !](../../../../translated_images/pinch.1b035ec9ba7e0d408313b551b60c721c9c290b2dd2094115bc87e6ddacd114c9.fr.png) +![juste une pincée !](../../../../4-Classification/1-Introduction/images/pinch.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 partage de nombreux points communs avec les techniques de régression. Si l'apprentissage automatique consiste à prédire des valeurs ou des noms en utilisant des ensembles de données, alors la classification se divise généralement en deux groupes : _classification binaire_ et _classification multicatégorie_. +La classification est une forme d'[apprentissage supervisé](https://wikipedia.org/wiki/Supervised_learning) qui partage de nombreux points communs avec les techniques de régression. Si l'apprentissage automatique consiste à prédire des valeurs ou des catégories 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 introduit la classification -Rappel : +Rappelons-nous : -- **La régression linéaire** vous a aidé à prédire les relations entre les variables et à faire des prédictions précises sur la position d'un nouveau point de données 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 linéaire** vous a aidé à prédire les relations entre des variables et à faire des prédictions précises sur la position d'un nouveau point de données par rapport à cette ligne. Par exemple, vous pouviez prédire _quel serait le prix d'une citrouille en septembre par rapport à décembre_. - **La régression logistique** vous a permis de 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 d'attribuer une étiquette ou une classe à un point de données. Travaillons avec ces données sur les cuisines pour voir si, en observant un groupe d'ingrédients, nous pouvons déterminer leur origine culinaire. +La classification utilise divers algorithmes pour déterminer d'autres façons d'attribuer une étiquette ou une classe à un point de données. Travaillons avec ces données sur les cuisines pour voir si, en observant un groupe d'ingrédients, nous pouvons déterminer son origine culinaire. -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/19/) +## [Quiz pré-lecture](https://ff-quizzes.netlify.app/en/ml/) > ### [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 automatique et du data scientist. De la classification basique d'une valeur binaire ("cet email est-il un spam ou non ?") à la classification et segmentation complexe d'images utilisant la vision par ordinateur, il est toujours utile de pouvoir trier les données en classes et leur poser des questions. +La classification est l'une des activités fondamentales des chercheurs en apprentissage automatique et des data scientists. De la classification basique d'une valeur binaire ("cet email est-il un spam ou non ?") à la classification et segmentation complexes d'images utilisant la vision par ordinateur, il est toujours utile de pouvoir trier des données en classes et leur poser des questions. -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. +Pour formuler 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 multicatégorie](../../../../translated_images/binary-multiclass.b56d0c86c81105a697dddd82242c1d11e4d78b7afefea07a44627a0f1111c1a9.fr.png) +![classification binaire vs multiclasses](../../../../4-Classification/1-Introduction/images/binary-multiclass.png) -> Problèmes binaires vs multicatégorie pour les algorithmes de classification. Infographie par [Jen Looper](https://twitter.com/jenlooper) +> Problèmes binaires vs multiclasses pour les algorithmes de classification. Infographie par [Jen Looper](https://twitter.com/jenlooper) Avant de commencer le processus de nettoyage de nos données, de leur visualisation et de leur préparation pour nos tâches d'apprentissage automatique, apprenons un peu plus sur les différentes façons dont l'apprentissage automatique peut être utilisé pour classer des données. -Dérivée des [statistiques](https://wikipedia.org/wiki/Statistical_classification), la classification utilisant l'apprentissage automatique classique utilise des caractéristiques telles que `smoker`, `weight` et `age` pour déterminer _la probabilité de développer une maladie X_. En tant que 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 automatique utilisent ces étiquettes pour classer et prédire les classes (ou "caractéristiques") d'un ensemble de données et les attribuer à un groupe ou un résultat. +Dérivée des [statistiques](https://wikipedia.org/wiki/Statistical_classification), la classification utilisant l'apprentissage automatique classique utilise des caractéristiques, telles que `smoker`, `weight` et `age`, pour déterminer _la probabilité de développer une maladie X_. En tant que 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 automatique utilisent ces étiquettes pour classer et prédire des 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. Qu'est-ce qu'un modèle multicatégorie pourrait répondre ? Qu'est-ce qu'un modèle binaire pourrait répondre ? Et si vous vouliez déterminer si une cuisine donnée était susceptible d'utiliser du fenugrec ? Et si vous vouliez voir si, avec un sac de courses contenant de l'anis étoilé, des artichauts, du chou-fleur et du raifort, vous pourriez créer un plat typique indien ? +✅ Prenez un moment pour imaginer un ensemble de données sur les cuisines. Quelles questions un modèle multiclasses pourrait-il répondre ? Et un modèle binaire ? Que se passerait-il si vous vouliez déterminer si une cuisine donnée était susceptible d'utiliser du fenugrec ? Ou si, en recevant un sac d'épicerie rempli d'anis étoilé, d'artichauts, de chou-fleur et de raifort, vous pouviez créer un plat typiquement indien ? [![Paniers mystères fous](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Paniers mystères fous") -> 🎥 Cliquez sur l'image ci-dessus pour une vidéo. Tout le concept de l'émission 'Chopped' repose sur le 'panier mystère' où les chefs doivent préparer un plat à partir d'un choix aléatoire d'ingrédients. Un modèle d'apprentissage automatique aurait sûrement aidé ! +> 🎥 Cliquez sur l'image ci-dessus pour une vidéo. Tout le concept de l'émission 'Chopped' repose sur le "panier mystère" où les chefs doivent préparer un plat à partir d'un choix aléatoire d'ingrédients. Un modèle d'apprentissage automatique 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 multicatégorie**, 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 correspondent-elles ? +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 à examiner. Étant donné un lot d'ingrédients, à laquelle de ces nombreuses classes les données appartiendront-elles ? -Scikit-learn propose plusieurs algorithmes différents pour classer les données, selon le type de problème que vous souhaitez résoudre. Dans les deux prochaines leçons, vous apprendrez à utiliser plusieurs de ces algorithmes. +Scikit-learn propose plusieurs algorithmes différents pour classifier les données, selon le type de problème que vous souhaitez résoudre. Dans les deux prochaines leçons, vous apprendrez à utiliser 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 **équilibrer** vos données pour obtenir de meilleurs résultats. Commencez avec le fichier _notebook.ipynb_ vierge dans le dossier racine. +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 vierge _notebook.ipynb_ situé à 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 d'équilibrer les données plus efficacement (vous en apprendrez davantage sur cette tâche dans un instant). +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 suit : @@ -88,7 +88,7 @@ La première chose à installer est [imblearn](https://imbalanced-learn.org/stab df = pd.read_csv('../data/cuisines.csv') ``` - Utiliser `read_csv()` permettra de lire le contenu du fichier csv _cusines.csv_ et de le placer dans la variable `df`. + L'utilisation de `read_csv()` lira le contenu du fichier csv _cusines.csv_ et le placera dans la variable `df`. 1. Vérifiez la forme des données : @@ -126,7 +126,7 @@ La première chose à installer est [imblearn](https://imbalanced-learn.org/stab ## Exercice - découvrir les cuisines -Maintenant, le travail commence à devenir plus intéressant. Découvrons la distribution des données par cuisine. +Maintenant, le travail devient plus intéressant. Découvrons la distribution des données par cuisine. 1. Tracez les données sous forme de barres en appelant `barh()` : @@ -134,7 +134,7 @@ Maintenant, le travail commence à devenir plus intéressant. Découvrons la dis df.cuisine.value_counts().plot.barh() ``` - ![distribution des données sur les cuisines](../../../../translated_images/cuisine-dist.d0cc2d551abe5c25f83d73a5f560927e4a061e9a4560bac1e97d35682ef3ca6d.fr.png) + ![distribution des données sur les cuisines](../../../../4-Classification/1-Introduction/images/cuisine-dist.png) Il existe 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. @@ -166,7 +166,7 @@ Maintenant, le travail commence à devenir plus intéressant. Découvrons la dis ## Découvrir les ingrédients -Vous pouvez maintenant approfondir les données et découvrir 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-en davantage sur ce problème. +Vous pouvez maintenant approfondir les données et découvrir quels sont les ingrédients typiques par cuisine. Vous devriez éliminer les données récurrentes qui créent de la confusion entre les cuisines, alors apprenons-en davantage sur 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 : @@ -181,14 +181,14 @@ Vous pouvez maintenant approfondir les données et découvrir quels sont les ing Vous pouvez maintenant utiliser cette fonction pour avoir une idée des dix ingrédients les plus populaires par cuisine. -1. Appelez `create_ingredient()` et tracez les données en appelant `barh()` : +1. Appelez `create_ingredient()` et tracez les résultats en appelant `barh()` : ```python thai_ingredient_df = create_ingredient_df(thai_df) thai_ingredient_df.head(10).plot.barh() ``` - ![thaï](../../../../translated_images/thai.0269dbab2e78bd38a132067759fe980008bdb80b6d778e5313448dbe12bed846.fr.png) + ![thaï](../../../../4-Classification/1-Introduction/images/thai.png) 1. Faites de même pour les données japonaises : @@ -197,7 +197,7 @@ Vous pouvez maintenant approfondir les données et découvrir quels sont les ing japanese_ingredient_df.head(10).plot.barh() ``` - ![japonais](../../../../translated_images/japanese.30260486f2a05c463c8faa62ebe7b38f0961ed293bd9a6db8eef5d3f0cf17155.fr.png) + ![japonais](../../../../4-Classification/1-Introduction/images/japanese.png) 1. Maintenant pour les ingrédients chinois : @@ -206,7 +206,7 @@ Vous pouvez maintenant approfondir les données et découvrir quels sont les ing chinese_ingredient_df.head(10).plot.barh() ``` - ![chinois](../../../../translated_images/chinese.e62cafa5309f111afd1b54490336daf4e927ce32bed837069a0b7ce481dfae8d.fr.png) + ![chinois](../../../../4-Classification/1-Introduction/images/chinese.png) 1. Tracez les ingrédients indiens : @@ -215,7 +215,7 @@ Vous pouvez maintenant approfondir les données et découvrir quels sont les ing indian_ingredient_df.head(10).plot.barh() ``` - ![indien](../../../../translated_images/indian.2c4292002af1a1f97a4a24fec6b1459ee8ff616c3822ae56bb62b9903e192af6.fr.png) + ![indien](../../../../4-Classification/1-Introduction/images/indian.png) 1. Enfin, tracez les ingrédients coréens : @@ -224,9 +224,9 @@ Vous pouvez maintenant approfondir les données et découvrir quels sont les ing korean_ingredient_df.head(10).plot.barh() ``` - ![coréen](../../../../translated_images/korean.4a4f0274f3d9805a65e61f05597eeaad8620b03be23a2c0a705c023f65fad2c0.fr.png) + ![coréen](../../../../4-Classification/1-Introduction/images/korean.png) -1. Maintenant, supprimez les ingrédients les plus courants qui créent de la confusion entre les cuisines distinctes, en appelant `drop()` : +1. Maintenant, supprimez les ingrédients les plus communs qui créent de la confusion entre les cuisines distinctes, en appelant `drop()` : Tout le monde aime le riz, l'ail et le gingembre ! @@ -247,7 +247,7 @@ Maintenant que vous avez nettoyé les données, utilisez [SMOTE](https://imbalan 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 majorité de vos données appartient à une classe, un modèle d'apprentissage automatique va prédire 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 ce déséquilibre. + En équilibrant vos données, vous obtiendrez de meilleurs résultats lors de leur classification. Pensez à une classification binaire. Si la majorité de vos données appartient à une classe, un modèle d'apprentissage automatique prédira cette classe plus fréquemment, simplement parce qu'il y a plus de données pour elle. L'équilibrage des données corrige ce déséquilibre. 1. Vous pouvez maintenant vérifier le nombre d'étiquettes par ingrédient : @@ -295,13 +295,13 @@ Maintenant que vous avez nettoyé les données, utilisez [SMOTE](https://imbalan ## 🚀Défi -Ce programme contient plusieurs ensembles de données intéressants. Explorez les dossiers `data` et voyez si certains contiennent des ensembles de données qui seraient appropriés pour une classification binaire ou multicatégorie. Quelles questions poseriez-vous à cet ensemble de données ? +Ce programme contient plusieurs ensembles de données intéressants. Explorez les dossiers `data` et voyez si certains contiennent des ensembles de données appropriés pour une classification binaire ou multiclasses. Quelles questions poseriez-vous à cet ensemble de données ? -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/20/) +## [Quiz post-lecture](https://ff-quizzes.netlify.app/en/ml/) ## Révision et auto-apprentissage -Explorez l'API de SMOTE. Pour quels cas d'utilisation est-elle la mieux adaptée ? Quels problèmes résout-elle ? +Explorez l'API de SMOTE. Pour quels cas d'utilisation est-il le mieux adapté ? Quels problèmes résout-il ? ## Devoir @@ -310,4 +310,4 @@ Explorez l'API de SMOTE. Pour quels cas d'utilisation est-elle la mieux adaptée --- **Avertissement** : -Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'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 index 26a79cbb6..3d2179be8 100644 --- a/translations/fr/4-Classification/2-Classifiers-1/README.md +++ b/translations/fr/4-Classification/2-Classifiers-1/README.md @@ -1,19 +1,19 @@ # Classificateurs de cuisine 1 -Dans cette leçon, vous utiliserez le jeu de données que vous avez sauvegardé lors de la dernière leçon, rempli de données équilibrées et propres sur les cuisines. +Dans cette leçon, vous utiliserez le jeu de données que vous avez sauvegardé lors de la dernière leçon, rempli de données équilibrées et nettoyées 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_. En le faisant, vous en apprendrez davantage sur certaines des façons dont les algorithmes peuvent être utilisés pour des tâches de classification. -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/21/) +## [Quiz avant la leçon](https://ff-quizzes.netlify.app/en/ml/) # Préparation En supposant que vous avez terminé [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. @@ -39,7 +39,7 @@ En supposant que vous avez terminé [Leçon 1](../1-Introduction/README.md), ass | 4 | 4 | indian | 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 : +1. Ensuite, importez plusieurs autres bibliothèques : ```python from sklearn.linear_model import LogisticRegression @@ -88,7 +88,7 @@ Vous êtes maintenant prêt à entraîner votre modèle ! ## Choisir votre classificateur -Maintenant que vos données sont propres et prêtes pour l'entraînement, vous devez décider quel algorithme utiliser pour la tâche. +Maintenant que vos données sont nettoyées et prêtes pour l'entraînement, vous devez décider quel algorithme utiliser pour la tâche. Scikit-learn regroupe la classification sous l'apprentissage supervisé, et dans cette catégorie, vous trouverez de nombreuses façons de classifier. [La variété](https://scikit-learn.org/stable/supervised_learning.html) peut sembler déroutante au premier abord. Les méthodes suivantes incluent toutes des techniques de classification : @@ -105,9 +105,9 @@ Scikit-learn regroupe la classification sous l'apprentissage supervisé, et dans ### Quel classificateur choisir ? -Alors, quel classificateur devriez-vous choisir ? Souvent, tester plusieurs et chercher un bon résultat est une façon de procéder. Scikit-learn propose une [comparaison côte à côte](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) sur un jeu de données créé, comparant KNeighbors, SVC de deux façons, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB et QuadraticDiscriminationAnalysis, montrant les résultats visualisés : +Alors, quel classificateur devriez-vous choisir ? Souvent, tester plusieurs et chercher un bon résultat est une façon de procéder. Scikit-learn propose une [comparaison côte à côte](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) sur un jeu de données créé, comparant KNeighbors, SVC de deux manières, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB et QuadraticDiscriminationAnalysis, montrant les résultats visualisés : -![comparaison des classificateurs](../../../../translated_images/comparison.edfab56193a85e7fdecbeaa1b1f8c99e94adbf7178bed0de902090cf93d6734f.fr.png) +![comparaison des classificateurs](../../../../4-Classification/2-Classifiers-1/images/comparison.png) > Graphiques générés à partir de la documentation de Scikit-learn > AutoML résout ce problème de manière élégante en exécutant ces comparaisons dans le cloud, vous permettant de choisir le meilleur algorithme pour vos données. Essayez-le [ici](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-77952-leestott) @@ -116,30 +116,30 @@ Alors, quel classificateur devriez-vous choisir ? Souvent, tester plusieurs et c Une meilleure façon que de deviner au hasard est de suivre les idées de cette [fiche pratique ML téléchargeable](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-77952-leestott). Ici, nous découvrons que, pour notre problème multiclasses, nous avons quelques choix : -![fiche pratique pour les problèmes multiclasses](../../../../translated_images/cheatsheet.07a475ea444d22234cb8907a3826df5bdd1953efec94bd18e4496f36ff60624a.fr.png) +![fiche pratique pour les problèmes multiclasses](../../../../4-Classification/2-Classifiers-1/images/cheatsheet.png) > Une section de la fiche pratique des algorithmes de Microsoft, détaillant les options de classification multiclasses -✅ Téléchargez cette fiche pratique, imprimez-la et accrochez-la sur votre mur ! +✅ Téléchargez cette fiche pratique, imprimez-la et accrochez-la à votre mur ! ### Raisonnement -Voyons si nous pouvons raisonner sur différentes approches données les contraintes que nous avons : +Voyons si nous pouvons raisonner sur les différentes approches données les contraintes que nous avons : - **Les réseaux neuronaux sont trop lourds**. Étant donné notre jeu de données propre mais minimal, et le fait que nous exécutons l'entraînement localement via des notebooks, les réseaux neuronaux sont trop lourds pour cette tâche. -- **Pas de classificateur à deux classes**. Nous n'utilisons pas de classificateur à deux classes, ce qui exclut le one-vs-all. -- **Un arbre de décision ou une régression logistique pourrait fonctionner**. Un arbre de décision pourrait fonctionner, ou une régression logistique pour des données multiclasses. +- **Pas de classificateur à deux classes**. Nous n'utilisons pas de classificateur à deux classes, ce qui exclut le one-vs-all. +- **Un arbre de décision ou une régression logistique pourraient fonctionner**. Un arbre de décision pourrait fonctionner, ou une régression logistique pour des données multiclasses. - **Les arbres de décision boostés multiclasses résolvent un problème différent**. L'arbre de décision boosté multiclasses est le plus adapté aux tâches non paramétriques, par exemple les tâches conçues pour établir des classements, donc il n'est pas utile pour nous. ### Utiliser Scikit-learn Nous utiliserons Scikit-learn pour analyser nos données. Cependant, il existe de nombreuses façons d'utiliser la régression logistique dans Scikit-learn. Consultez les [paramètres à passer](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). -Essentiellement, il y a deux paramètres importants - `multi_class` et `solver` - que nous devons spécifier lorsque nous demandons à Scikit-learn d'effectuer une régression logistique. La valeur de `multi_class` applique un certain comportement. La valeur du solver correspond à l'algorithme à utiliser. Tous les solveurs ne peuvent pas être associés à toutes les valeurs de `multi_class`. +Essentiellement, il y a deux paramètres importants - `multi_class` et `solver` - que nous devons spécifier lorsque nous demandons à Scikit-learn d'effectuer une régression logistique. La valeur de `multi_class` applique un certain comportement. La valeur du solver détermine quel algorithme utiliser. Tous les solveurs ne peuvent pas être associés à toutes les valeurs de `multi_class`. Selon la documentation, dans le cas multiclasses, l'algorithme d'entraînement : - **Utilise le schéma one-vs-rest (OvR)**, si l'option `multi_class` est définie sur `ovr` -- **Utilise la perte d'entropie croisée**, si l'option `multi_class` est définie sur `multinomial`. (Actuellement, l'option `multinomial` est prise en charge uniquement par les solveurs ‘lbfgs’, ‘sag’, ‘saga’ et ‘newton-cg’.)" +- **Utilise la perte d'entropie croisée**, si l'option `multi_class` est définie sur `multinomial`. (Actuellement, l'option `multinomial` est prise en charge uniquement par les solveurs ‘lbfgs’, ‘sag’, ‘saga’ et ‘newton-cg’.) > 🎓 Le 'schéma' ici peut être 'ovr' (one-vs-rest) ou 'multinomial'. Étant donné que la régression logistique est vraiment conçue pour prendre en charge la classification binaire, ces schémas lui permettent de mieux gérer les tâches de classification multiclasses. [source](https://machinelearningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/) @@ -147,7 +147,7 @@ Selon la documentation, dans le cas multiclasses, l'algorithme d'entraînement : Scikit-learn propose ce tableau pour expliquer comment les solveurs gèrent les différents défis présentés par les différentes structures de données : -![solveurs](../../../../translated_images/solvers.5fc648618529e627dfac29b917b3ccabda4b45ee8ed41b0acb1ce1441e8d1ef1.fr.png) +![solveurs](../../../../4-Classification/2-Classifiers-1/images/solvers.png) ## Exercice - diviser les données @@ -162,7 +162,7 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine Étant donné que vous utilisez le cas multiclasses, vous devez choisir quel _schéma_ utiliser et quel _solver_ définir. Utilisez LogisticRegression avec un paramètre multiclasses et le solveur **liblinear** pour entraîner. -1. Créez une régression logistique avec multi_class défini sur `ovr` et le solveur défini sur `liblinear` : +1. Créez une régression logistique avec `multi_class` défini sur `ovr` et le solveur défini sur `liblinear` : ```python lr = LogisticRegression(multi_class='ovr',solver='liblinear') @@ -173,8 +173,8 @@ X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisine ``` ✅ Essayez un solveur différent comme `lbfgs`, qui est souvent défini par défaut -> Remarque, utilisez la fonction Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) pour aplatir vos données si nécessaire. -La précision est bonne à plus de **80 %** ! +> Remarque, utilisez la fonction Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) pour aplatir vos données lorsque nécessaire. +L'exactitude est bonne à plus de **80 %** ! 1. Vous pouvez voir ce modèle en action en testant une ligne de données (#50) : @@ -204,7 +204,7 @@ La précision est bonne à plus de **80 %** ! topPrediction.head() ``` - Le résultat est affiché - la cuisine indienne est sa meilleure supposition, avec une bonne probabilité : + Le résultat est affiché - la cuisine indienne est sa meilleure estimation, avec une bonne probabilité : | | 0 | | -------: | -------: | @@ -230,24 +230,24 @@ La précision est bonne à plus de **80 %** ! | japanese | 0.70 | 0.75 | 0.72 | 220 | | korean | 0.86 | 0.76 | 0.81 | 242 | | thai | 0.79 | 0.85 | 0.82 | 254 | - | précision | 0.80 | 1199 | | | + | exactitude | 0.80 | 1199 | | | | moyenne macro| 0.80 | 0.80 | 0.80 | 1199 | | moyenne pondérée | 0.80 | 0.80 | 0.80 | 1199 | ## 🚀Défi -Dans cette leçon, vous avez utilisé vos données nettoyées pour construire un modèle d'apprentissage automatique capable de prédire une cuisine nationale en fonction d'une série d'ingrédients. Prenez le temps de parcourir les nombreuses options que Scikit-learn propose pour classifier les données. Approfondissez le concept de 'solver' pour comprendre ce qui se passe en coulisses. +Dans cette leçon, vous avez utilisé vos données nettoyées pour construire un modèle d'apprentissage automatique capable de prédire une cuisine nationale à partir d'une série d'ingrédients. Prenez le temps de parcourir les nombreuses options que Scikit-learn propose pour classifier les données. Approfondissez le concept de 'solver' pour comprendre ce qui se passe en coulisses. -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/22/) +## [Quiz post-cours](https://ff-quizzes.netlify.app/en/ml/) -## Révision & Étude personnelle +## Révision & Auto-apprentissage -Approfondissez un peu plus les mathématiques derrière la régression logistique dans [cette leçon](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) +Approfondissez un peu plus les mathématiques derrière la régression logistique dans [cette leçon](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) ## Devoir -[Étudiez les solvers](assignment.md) +[Étudiez les solveurs](assignment.md) --- **Avertissement** : -Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'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 index 91627e8b8..eb64fa6c5 100644 --- a/translations/fr/4-Classification/3-Classifiers-2/README.md +++ b/translations/fr/4-Classification/3-Classifiers-2/README.md @@ -1,21 +1,21 @@ # Classificateurs de cuisine 2 -Dans cette deuxième leçon sur la classification, vous explorerez davantage de méthodes pour classifier des données numériques. Vous apprendrez également les implications du choix d'un classificateur plutôt qu'un autre. +Dans cette deuxième leçon sur la classification, vous allez explorer davantage de méthodes pour classifier des données numériques. Vous apprendrez également les implications du choix d'un classificateur plutôt qu'un autre. -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/23/) +## [Quiz avant la leçon](https://ff-quizzes.netlify.app/en/ml/) ### Prérequis -Nous supposons que vous avez terminé les leçons précédentes et que vous disposez d'un jeu de données nettoyé dans votre dossier `data`, appelé _cleaned_cuisines.csv_, à la racine de ce dossier de 4 leçons. +Nous supposons que vous avez terminé les leçons précédentes et que vous disposez d'un jeu de données nettoyé dans votre dossier `data`, nommé _cleaned_cuisines.csv_, à la racine de ce dossier de 4 leçons. ### Préparation @@ -23,10 +23,10 @@ Nous avons chargé votre fichier _notebook.ipynb_ avec le jeu de données nettoy ## Une carte de classification -Précédemment, vous avez appris les différentes options disponibles pour classifier des données en utilisant la fiche de référence de Microsoft. Scikit-learn propose une fiche similaire, mais plus détaillée, qui peut vous aider à affiner davantage vos choix de classificateurs (également appelés estimateurs) : +Précédemment, vous avez appris les différentes options disponibles pour classifier des données en utilisant le guide de Microsoft. Scikit-learn propose un guide similaire, mais plus détaillé, qui peut vous aider à affiner davantage vos choix d'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 sur les chemins pour lire la documentation. +![Carte ML de Scikit-learn](../../../../4-Classification/3-Classifiers-2/images/map.png) +> Conseil : [visitez cette carte en ligne](https://scikit-learn.org/stable/tutorial/machine_learning_map/) et explorez les chemins pour lire la documentation. ### Le plan @@ -37,7 +37,7 @@ Cette carte est très utile une fois que vous avez une compréhension claire de - Nous avons des données étiquetées - Nous avons moins de 100K échantillons - ✨ Nous pouvons choisir un Linear SVC -- Si cela ne fonctionne pas, puisque nous avons des données numériques : +- Si cela ne fonctionne pas, étant donné que nous avons des données numériques : - Nous pouvons essayer un ✨ KNeighbors Classifier - Si cela ne fonctionne pas, essayer ✨ SVC et ✨ Ensemble Classifiers @@ -67,7 +67,7 @@ En suivant ce chemin, nous devrions commencer par importer quelques bibliothèqu ## Classificateur Linear SVC -Le clustering par vecteurs de support (SVC) fait partie de la famille des machines à vecteurs de support (SVM) en apprentissage automatique (en savoir plus ci-dessous). Dans cette méthode, vous pouvez choisir un 'kernel' 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 kernel 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 'linear' pour garantir que nous utilisons Linear SVC. La probabilité est par défaut 'false' ; ici, nous la définissons sur 'true' pour obtenir des estimations de probabilité. Nous définissons l'état aléatoire sur '0' pour mélanger les données et obtenir des probabilités. +Le clustering par vecteurs de support (SVC) fait partie de la famille des machines à vecteurs de support (SVM) en apprentissage automatique (en savoir plus ci-dessous). Dans cette méthode, vous pouvez choisir un 'kernel' 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 kernel 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 'linear' pour garantir que nous utilisons Linear SVC. La probabilité est par défaut 'false'; ici, nous la définissons sur 'true' pour obtenir des estimations de probabilité. Nous définissons l'état aléatoire sur '0' pour mélanger les données et obtenir des probabilités. ### Exercice - appliquer un Linear SVC @@ -83,7 +83,7 @@ Commencez par créer un tableau de classificateurs. Vous ajouterez progressiveme } ``` -2. Entraînez votre modèle en utilisant le Linear SVC et affichez un rapport : +2. Entraînez votre modèle en utilisant le Linear SVC et imprimez un rapport : ```python n_classifiers = len(classifiers) @@ -149,7 +149,7 @@ Le classificateur précédent était bon et fonctionnait bien avec les données, ## Classificateur Support Vector -Les classificateurs par vecteurs de support font partie de la famille des [machines à vecteurs de support](https://wikipedia.org/wiki/Support-vector_machine) en apprentissage automatique, 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. +Les classificateurs à vecteurs de support font partie de la famille des [machines à vecteurs de support](https://wikipedia.org/wiki/Support-vector_machine) en apprentissage automatique, 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 Support Vector @@ -182,14 +182,14 @@ Essayons d'obtenir une meilleure précision avec un classificateur Support Vecto ## Classificateurs ensemblistes -Suivons le chemin jusqu'à la fin, même si le test précédent était très bon. Essayons quelques 'classificateurs ensemblistes', en particulier Random Forest et AdaBoost : +Suivons le chemin jusqu'au bout, même si le test précédent était très bon. Essayons quelques 'classificateurs ensemblistes', 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 : +Le résultat est excellent, surtout pour Random Forest : ```output Accuracy (train) for RFST: 84.5% @@ -231,9 +231,9 @@ Cette méthode d'apprentissage automatique "combine les prédictions de plusieur ## 🚀Défi -Chacune de ces techniques possède un grand nombre de paramètres que vous pouvez ajuster. Faites des recherches sur les paramètres par défaut de chacune et réfléchissez à ce que modifier ces paramètres signifierait pour la qualité du modèle. +Chacune de ces techniques possède un grand nombre de paramètres que vous pouvez ajuster. Faites des recherches sur les paramètres par défaut de chacune et réfléchissez à ce que l'ajustement de ces paramètres pourrait signifier pour la qualité du modèle. -## [Quiz après la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/24/) +## [Quiz après la leçon](https://ff-quizzes.netlify.app/en/ml/) ## Révision et étude personnelle @@ -241,9 +241,9 @@ Il y a beaucoup de jargon dans ces leçons, alors prenez un moment pour consulte ## Devoir -[Jeu de paramètres](assignment.md) +[Exploration des paramètres](assignment.md) --- **Avertissement** : -Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de faire appel à une traduction humaine professionnelle. Nous déclinons toute responsabilité en cas de malentendus ou d'interprétations erronées résultant de l'utilisation de cette traduction. \ No newline at end of file +Ce document a été traduit à l'aide du service de traduction automatique [Co-op Translator](https://github.com/Azure/co-op-translator). Bien que nous nous efforcions 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 faisant autorité. Pour des informations critiques, il est recommandé de recourir à une traduction professionnelle réalisée par un humain. Nous déclinons toute responsabilité en cas de malentendus ou d'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/README.md b/translations/fr/4-Classification/4-Applied/README.md index ec0a6a710..d58b43f95 100644 --- a/translations/fr/4-Classification/4-Applied/README.md +++ b/translations/fr/4-Classification/4-Applied/README.md @@ -1,15 +1,15 @@ # Construire une application web de recommandation de cuisine -Dans cette leçon, vous allez créer un modèle de classification en utilisant certaines des techniques apprises dans les leçons précédentes, ainsi que le délicieux ensemble de données sur les cuisines utilisé tout au long de cette série. De plus, vous allez construire une petite application web pour utiliser un modèle sauvegardé, en tirant parti du runtime web d'Onnx. +Dans cette leçon, vous allez créer un modèle de classification en utilisant certaines des techniques apprises dans les leçons précédentes, ainsi que le délicieux ensemble de données sur les cuisines utilisé tout au long de cette série. De plus, vous allez construire une petite application web pour utiliser un modèle sauvegardé, en exploitant le runtime web d'Onnx. L'un des usages pratiques les plus utiles de l'apprentissage automatique est la création de systèmes de recommandation, et vous pouvez faire le premier pas dans cette direction dès aujourd'hui ! @@ -17,7 +17,7 @@ L'un des usages pratiques les plus utiles de l'apprentissage automatique est la > 🎥 Cliquez sur l'image ci-dessus pour une vidéo : Jen Looper construit une application web en utilisant des données de cuisine classifiées -## [Quiz avant la leçon](https://gray-sand-07a10f403.1.azurestaticapps.net/quiz/25/) +## [Quiz avant la leçon](https://ff-quizzes.netlify.app/en/ml/) Dans cette leçon, vous apprendrez : @@ -27,7 +27,7 @@ Dans cette leçon, vous apprendrez : ## Construisez votre modèle -Créer des systèmes d'apprentissage automatique appliqués est une partie importante de l'intégration de ces technologies dans vos systèmes d'entreprise. Vous pouvez utiliser des modèles dans vos applications web (et donc les utiliser hors ligne si nécessaire) en utilisant Onnx. +Construire des systèmes d'apprentissage automatique appliqué 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 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'OVNI, l'avez "picklé" et utilisé dans une application Flask. Bien que cette architecture soit très utile à connaître, il s'agit d'une application Python full-stack, et vos besoins peuvent inclure l'utilisation d'une application JavaScript. @@ -124,7 +124,7 @@ Nous utiliserons la bibliothèque 'SVC' qui offre une bonne précision. ### Convertissez votre modèle en Onnx -Assurez-vous de faire la conversion avec le bon nombre de tenseurs. Cet ensemble de données contient 380 ingrédients répertoriés, donc vous devez noter ce nombre dans `FloatTensorType` : +Assurez-vous de faire la conversion avec le bon nombre de tenseurs. Cet ensemble de données contient 380 ingrédients listés, donc vous devez noter ce nombre dans `FloatTensorType` : 1. Convertissez en utilisant un nombre de tenseurs de 380. @@ -136,7 +136,7 @@ Assurez-vous de faire la conversion avec le bon nombre de tenseurs. Cet ensemble options = {id(model): {'nocl': True, 'zipmap': False}} ``` -1. Créez le fichier onx et sauvegardez-le sous le nom **model.onnx** : +1. Créez le fichier onx et sauvegardez-le sous **model.onnx** : ```python onx = convert_sklearn(model, initial_types=initial_type, options=options) @@ -144,7 +144,7 @@ Assurez-vous de faire la conversion avec le bon nombre de tenseurs. Cet ensemble 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 défini 'nocl' sur True et 'zipmap' sur False. Étant donné qu'il s'agit d'un modèle de classification, vous avez l'option de supprimer ZipMap qui produit une liste de dictionnaires (non nécessaire). `nocl` fait référence à l'inclusion des informations de classe dans le modèle. Réduisez la taille de votre modèle en définissant `nocl` sur 'True'. + > 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 l'option de supprimer ZipMap qui produit une liste de dictionnaires (non nécessaire). `nocl` fait référence à l'inclusion des informations de classe dans le modèle. Réduisez la taille de votre modèle en définissant `nocl` sur 'True'. Exécuter l'ensemble du notebook permettra maintenant de construire un modèle Onnx et de le sauvegarder dans ce dossier. @@ -152,7 +152,7 @@ Exécuter l'ensemble du notebook permettra maintenant de construire un modèle O Les modèles Onnx ne sont pas très visibles dans Visual Studio Code, mais il existe un excellent logiciel gratuit que de nombreux chercheurs utilisent pour visualiser le modèle et s'assurer qu'il est correctement construit. Téléchargez [Netron](https://github.com/lutzroeder/Netron) et ouvrez votre fichier model.onnx. Vous pouvez voir votre modèle simple visualisé, avec ses 380 entrées et son classificateur listé : -![Visualisation Netron](../../../../translated_images/netron.a05f39410211915e0f95e2c0e8b88f41e7d13d725faf660188f3802ba5c9e831.fr.png) +![Visualisation Netron](../../../../4-Classification/4-Applied/images/netron.png) Netron est un outil utile pour visualiser vos modèles. @@ -160,7 +160,7 @@ Vous êtes maintenant prêt à utiliser ce modèle dans une application web. Con ## Construisez une application web de recommandation -Vous pouvez utiliser votre modèle directement dans une application web. Cette architecture vous permet également de l'exécuter localement et même hors ligne si nécessaire. Commencez par créer un fichier `index.html` dans le même dossier où vous avez sauvegardé votre fichier `model.onnx`. +Vous pouvez utiliser votre modèle directement dans une application web. Cette architecture permet également de l'exécuter localement et même hors ligne si nécessaire. Commencez par créer un fichier `index.html` dans le même dossier où vous avez sauvegardé votre fichier `model.onnx`. 1. Dans ce fichier _index.html_, ajoutez le balisage suivant : @@ -221,19 +221,19 @@ Vous pouvez utiliser votre modèle directement dans une application web. Cette a ``` - Notez que chaque case à cocher a une valeur. Cela reflète l'index où l'ingrédient se trouve 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 à 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é. + Notez que chaque case à cocher est attribuée une valeur. Cela reflète l'index où l'ingrédient se trouve 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 à 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 continuant votre travail dans le fichier index.html, ajoutez un bloc de script où le modèle est appelé après la dernière balise ``. + En continuant votre travail dans le fichier index.html, ajoutez un bloc de script où le modèle est appelé après la dernière fermeture de ``. -1. Tout d'abord, importez le [runtime Onnx](https://www.onnxruntime.ai/) : +1. Tout d'abord, importez le [Onnx Runtime](https://www.onnxruntime.ai/) : ```html ``` - > Le runtime Onnx est utilisé pour permettre l'exécution de vos modèles Onnx sur une large gamme de plateformes matérielles, avec des optimisations et une API à utiliser. + > Onnx Runtime est utilisé pour permettre l'exécution de vos modèles Onnx sur une large gamme de plateformes matérielles, avec des optimisations et une API à utiliser. -1. Une fois le runtime en place, vous pouvez l'appeler : +1. Une fois le Runtime en place, vous pouvez l'appeler : ```html