From 873912d361bf6b8d5c4109ac22ff0455956d6101 Mon Sep 17 00:00:00 2001 From: Frederick Legaspi Date: Mon, 31 Jan 2022 12:54:47 -0500 Subject: [PATCH 01/67] updated png files (#506) * replaced grid.png for better readability replaced grid.png for better readability * updated swarm.png for better readability updated swarm.png for better readability when using dark theme settings. * updated violin.png for better readability updated violin.png for better readability using dark theme setting * updated ROC.png file for better readability updated ROC.png file for better readability using dark theme setting --- 2-Regression/4-Logistic/images/ROC.png | Bin 19937 -> 12123 bytes 2-Regression/4-Logistic/images/grid.png | Bin 240605 -> 67231 bytes 2-Regression/4-Logistic/images/swarm.png | Bin 29733 -> 8976 bytes 2-Regression/4-Logistic/images/violin.png | Bin 24084 -> 19266 bytes 4 files changed, 0 insertions(+), 0 deletions(-) diff --git a/2-Regression/4-Logistic/images/ROC.png b/2-Regression/4-Logistic/images/ROC.png index af609a1c398b7657baa4c9af32977f3ca7d56f54..ba2c2e605ec6b1e80cc8dbecba851d67f0bc71a8 100644 GIT binary patch literal 12123 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 UY06y#p*xbar2Jc$_!qDL2E$nMga7~l literal 19937 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 QfkemdoU`o{YyZT50jj*ZZ~y=R diff --git a/2-Regression/4-Logistic/images/grid.png b/2-Regression/4-Logistic/images/grid.png index 48f6b6608a2004f76f20dd761374a2582797e9de..d3933cc92d1899d94635cb2c148ccbb7cb7e10a8 100644 GIT binary patch literal 67231 zcmce;2UJsA)HSNt0u~fhiXfn%pi~h83IY}cQHn^fQBYdwy<aX9Wk$&cI@1- zLtf^pn#=2{K6e*A&FHc9_y_tKdUwN*>T1-P{igL-&ig4*6R;#zZv> z+qiwPNs(XvW;k<6HrA<^M&ap%SL^48^Uut<-tOA#apLO9y2o*C-&(mpFAiv(FD zaChwZK!v%=P5y2NGt~h)%HN6c$x!|Z|Be<6AN=w7d~G-Ro9{F~KcvJb)9bZ9eKmE5 znvaeTZ<>11lOJDhFkQ^0o%<@>v^(~%JM`xCs5ctl_W%5Hf1qmnYJPhez8o=hrX1Bd8oDP|<8xk@;Nm5P3+l?%gITh6K6bCS9PZA!Wcmbsi+nQ{^QI}(G*27u zlaOk}Sk?bh>8$+pUa6F)QqsNm3DGrc*Q&~w`!m0NyI(zIE8iNwH4#r3VkZ@$ibt6} ziJ5RL^xII+DWih6E4#!s7ZW54fEGpI8-q|y4nnzmzZh3GkDaemlcW#K zThkCNJlhze5K~Ppw?`7U+tW)1iCN=0CMkLM)Y6iI=5;~Y-IA06%!2`F3L7jYFiym| z&zvJIJl;j+fPvv|zHE$_&RJS=>N)r3YU~%qa4P@Pu6bu@XiOYA#OQ5|gE2qu7d*V5 zekf>oe~tZf=_hfBCsNW07-LUXU5=&Py*YhvY8{%#d?gg5+O*()Mc$9CcP}cRb=0Mxdhr8>nwjW9*vgN2l{9f=N zEX!u3J$(XKhi-+EhDd*(E}sw2X?O2m zV3TgU@>J_+=){^rq$rAIfab#~!ym&PoYR>8l7zPHGk3!H`Tbf>buJ1$g8mrP@sFVs zU`{(Mob+?p$&-S7qM05S^OxcK!YJTjP-}c|nO}bKo*n96&aYE|R;&c6k$@56h zo1Py|6Y3NfS(rce>d7Y>xdx9&5|aiAlkyqK)nC1h_>M`kmfkxU-P`ra*rJCkATF-t z*AojMLy;0Pw7 z-W_KUKVkUZ;Tc9MN$TDa;xN}5P4GP{RMKZ(jbx%0AT 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%0Dc!(s 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

+ +
+ +

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

+ +
+ + + + +
+ +

{{ prediction_text }}

+ +
+ +
+ + + + ``` + + Echa un vistazo a la plantilla en este archivo. Nota la sitaxis 'mustache' alrededor de las variables que serán proporcionadas por la aplicación, como el texto de predicción `{{}}`. También hay un formulario que publica una predicción a la ruta `/predict`. + + Finalmente, estás listo para construir el archivo python que maneja el consumo de el modelo y la pantalla de predicciones: + +1. En `app.py` agrega: + + ```python + import numpy as np + from flask import Flask, request, render_template + import pickle + + app = Flask(__name__) + + model = pickle.load(open("./ufo-model.pkl", "rb")) + + + @app.route("/") + def home(): + return render_template("index.html") + + + @app.route("/predict", methods=["POST"]) + def predict(): + + int_features = [int(x) for x in request.form.values()] + final_features = [np.array(int_features)] + prediction = model.predict(final_features) + + output = prediction[0] + + countries = ["Australia", "Canada", "Germany", "UK", "US"] + + return render_template( + "index.html", prediction_text="Likely country: {}".format(countries[output]) + ) + + + if __name__ == "__main__": + app.run(debug=True) + ``` + + > 💡 Tip: Cuando agregas [`debug=True`](https://www.askpython.com/python-modules/flask/flask-debug-mode) mientras ejecutas la aplicación web usando Flask, cualquier cambio que realices a tu aplicación será reflejado inmediatamente sin la necesidad de reiniciar el servidor. ¡Ten cuidado! No actives este modo en una aplicación en producción. + +Si ejecutas `python app.py` o `python3 app.py` - tu servidor web inicia, localmente, y puedes llenar un pequeño formulario para obtener una respuesta a tu pregunta en cuestión acerca de ¡dónde han avistado OVNIs! + +Antes de hacerlo, echa un vistazo a las partes de `app.py`: + +1. Primero, las dependencias son cargadas y la aplicación inicia. +2. Luego, el modelo es importado. +3. Lo siguiente, el archivo index.html es renderizado en la ruta principal. + +En la ruta `/predict`, pasan muchas cosas cuando el formulario se publica: + +1. Las variables del formulario son reunidas y convertidas a un arreglo de numpy. Luego estas son enviadas al modelo y se regresa una predicción. +2. Los países que queremos se muestren son re-renderizados como texto legible de su código de país previsto, y ese valor es enviado de vuelta a index.html para ser renderizado en la plantilla. + +Usando un modelo de esta forma, con Flask y un modelo hecho pickled, es relativamente sencillo. La cosa más difícil es entender qué forma tienen los datos que deben ser enviados al modelo para obtener una predicción. Todo eso depende en cómo fue entrenado el modelo. Este tiene 3 puntos de datos como entrada para así obtener una predicción. + +En un entorno profesional, puedes ver cómo la buena comunicación es necesaria entre las personas las cuales entrenan el modelo y aquellas que lo consumen en una aplicación web o móvil. En nuestro caso, es una sola persona, ¡tú! + +--- + +## 🚀 Desafío + +En lugar de trabajar en un notebook e importar el modelo a una aplicación Flask, ¡podrías entrenar el modelo directo en la aplicación Flask! Intenta convertir tu código Python en el notebook, quizá después que tus datos sean limpiados, para entrenar el modelo desde la aplicación en una ruta llamada `train`. ¿Cuáles son los pros y contras de seguir este método? + +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/18/) + +## Revisión y autoestudio + +Hay muchas formas de construir una aplicación web para consumir modelos de aprendizaje automático. Haz una lista de las formas en que podrías usar JavaScript o Python para construir una aplicación web para aprovechar el apredizaje automático. Considera la arquitectura: ¿El modelo debería estar en la aplicación o vivir en la nube? Si es lo segundo, ¿Cómo lo accederías? Dibuja un modelo de arquitectura para una solución web de aprendizaje automático aplicada. + +## Asignación + +[Prueba un modelo diferente](assignment.es.md) From ff3fca7c751aa6424874a541a3748a38eb5c9f8e Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Fri, 11 Feb 2022 10:00:50 -0600 Subject: [PATCH 07/67] feat: Add file content to translate --- .../3-Linear/translations/README.es.md | 333 ++++++++++++++++++ 1 file changed, 333 insertions(+) create mode 100644 2-Regression/3-Linear/translations/README.es.md diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md new file mode 100644 index 000000000..c2fe13893 --- /dev/null +++ b/2-Regression/3-Linear/translations/README.es.md @@ -0,0 +1,333 @@ +# Build a regression model using Scikit-learn: regression two ways + +![Linear vs polynomial regression infographic](./images/linear-polynomial.png) +> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) +## [Pre-lecture quiz](https://white-water-09ec41f0f.azurestaticapps.net/quiz/13/) + +> ### [This lesson is available in R!](./solution/R/lesson_3-R.ipynb) +### Introduction + +So far you have explored what regression is with sample data gathered from the pumpkin pricing dataset that we will use throughout this lesson. You have also visualized it using Matplotlib. + +Now you are ready to dive deeper into regression for ML. In this lesson, you will learn more about two types of regression: _basic linear regression_ and _polynomial regression_, along with some of the math underlying these techniques. + +> Throughout this curriculum, we assume minimal knowledge of math, and seek to make it accessible for students coming from other fields, so watch for notes, 🧮 callouts, diagrams, and other learning tools to aid in comprehension. + +### Prerequisite + +You should be familiar by now with the structure of the pumpkin data that we are examining. You can find it preloaded and pre-cleaned in this lesson's _notebook.ipynb_ file. In the file, the pumpkin price is displayed per bushel in a new dataframe. Make sure you can run these notebooks in kernels in Visual Studio Code. + +### Preparation + +As a reminder, you are loading this data so as to ask questions of it. + +- When is the best time to buy pumpkins? +- What price can I expect of a case of miniature pumpkins? +- Should I buy them in half-bushel baskets or by the 1 1/9 bushel box? +Let's keep digging into this data. + +In the previous lesson, you created a Pandas dataframe and populated it with part of the original dataset, standardizing the pricing by the bushel. By doing that, however, you were only able to gather about 400 datapoints and only for the fall months. + +Take a look at the data that we preloaded in this lesson's accompanying notebook. The data is preloaded and an initial scatterplot is charted to show month data. Maybe we can get a little more detail about the nature of the data by cleaning it more. + +## A linear regression line + +As you learned in Lesson 1, the goal of a linear regression exercise is to be able to plot a line to: + +- **Show variable relationships**. Show the relationship between variables +- **Make predictions**. Make accurate predictions on where a new datapoint would fall in relationship to that line. + +It is typical of **Least-Squares Regression** to draw this type of line. The term 'least-squares' means that all the datapoints surrounding the regression line are squared and then added up. Ideally, that final sum is as small as possible, because we want a low number of errors, or `least-squares`. + +We do so since we want to model a line that has the least cumulative distance from all of our data points. We also square the terms before adding them since we are concerned with its magnitude rather than its direction. + +> **🧮 Show me the math** +> +> This line, called the _line of best fit_ can be expressed by [an equation](https://en.wikipedia.org/wiki/Simple_linear_regression): +> +> ``` +> Y = a + bX +> ``` +> +> `X` is the 'explanatory variable'. `Y` is the 'dependent variable'. The slope of the line is `b` and `a` is the y-intercept, which refers to the value of `Y` when `X = 0`. +> +>![calculate the slope](images/slope.png) +> +> First, calculate the slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper) +> +> In other words, and referring to our pumpkin data's original question: "predict the price of a pumpkin per bushel by month", `X` would refer to the price and `Y` would refer to the month of sale. +> +>![complete the equation](images/calculation.png) +> +> Calculate the value of Y. If you're paying around $4, it must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper) +> +> The math that calculates the line must demonstrate the slope of the line, which is also dependent on the intercept, or where `Y` is situated when `X = 0`. +> +> You can observe the method of calculation for these values on the [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Also visit [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to watch how the numbers' values impact the line. + +## Correlation + +One more term to understand is the **Correlation Coefficient** between given X and Y variables. Using a scatterplot, you can quickly visualize this coefficient. A plot with datapoints scattered in a neat line have high correlation, but a plot with datapoints scattered everywhere between X and Y have a low correlation. + +A good linear regression model will be one that has a high (nearer to 1 than 0) Correlation Coefficient using the Least-Squares Regression method with a line of regression. + +✅ Run the notebook accompanying this lesson and look at the City to Price scatterplot. Does the data associating City to Price for pumpkin sales seem to have high or low correlation, according to your visual interpretation of the scatterplot? + + +## Prepare your data for regression + +Now that you have an understanding of the math behind this exercise, create a Regression model to see if you can predict which package of pumpkins will have the best pumpkin prices. Someone buying pumpkins for a holiday pumpkin patch might want this information to be able to optimize their purchases of pumpkin packages for the patch. + +Since you'll use Scikit-learn, there's no reason to do this by hand (although you could!). In the main data-processing block of your lesson notebook, add a library from Scikit-learn to automatically convert all string data to numbers: + +```python +from sklearn.preprocessing import LabelEncoder + +new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) +``` + +If you look at the new_pumpkins dataframe now, you see that all the strings are now numeric. This makes it harder for you to read but much more intelligible for Scikit-learn! +Now you can make more educated decisions (not just based on eyeballing a scatterplot) about the data that is best suited to regression. + +Try to find a good correlation between two points of your data to potentially build a good predictive model. As it turns out, there's only weak correlation between the City and Price: + +```python +print(new_pumpkins['City'].corr(new_pumpkins['Price'])) +0.32363971816089226 +``` + +However there's a bit better correlation between the Package and its Price. That makes sense, right? Normally, the bigger the produce box, the higher the price. + +```python +print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) +0.6061712937226021 +``` + +A good question to ask of this data will be: 'What price can I expect of a given pumpkin package?' + +Let's build this regression model + +## Building a linear model + +Before building your model, do one more tidy-up of your data. Drop any null data and check once more what the data looks like. + +```python +new_pumpkins.dropna(inplace=True) +new_pumpkins.info() +``` + +Then, create a new dataframe from this minimal set and print it out: + +```python +new_columns = ['Package', 'Price'] +lin_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') + +lin_pumpkins +``` + +```output + Package Price +70 0 13.636364 +71 0 16.363636 +72 0 16.363636 +73 0 15.454545 +74 0 13.636364 +... ... ... +1738 2 30.000000 +1739 2 28.750000 +1740 2 25.750000 +1741 2 24.000000 +1742 2 24.000000 +415 rows × 2 columns +``` + +1. Now you can assign your X and y coordinate data: + + ```python + X = lin_pumpkins.values[:, :1] + y = lin_pumpkins.values[:, 1:2] + ``` +✅ What's going on here? You're using [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) to create arrays to populate `X` and `y`. + +2. Next, start the regression model-building routines: + + ```python + from sklearn.linear_model import LinearRegression + from sklearn.metrics import r2_score, mean_squared_error, mean_absolute_error + from sklearn.model_selection import train_test_split + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + lin_reg = LinearRegression() + lin_reg.fit(X_train,y_train) + + pred = lin_reg.predict(X_test) + + accuracy_score = lin_reg.score(X_train,y_train) + print('Model Accuracy: ', accuracy_score) + ``` + + Because the correlation isn't particularly good, the model produced isn't terribly accurate. + + ```output + Model Accuracy: 0.3315342327998987 + ``` + +3. You can visualize the line that's drawn in the process: + + ```python + plt.scatter(X_test, y_test, color='black') + plt.plot(X_test, pred, color='blue', linewidth=3) + + plt.xlabel('Package') + plt.ylabel('Price') + + plt.show() + ``` + ![A scatterplot showing package to price relationship](./images/linear.png) + +4. Test the model against a hypothetical variety: + + ```python + lin_reg.predict( np.array([ [2.75] ]) ) + ``` + + The returned price for this mythological Variety is: + + ```output + array([[33.15655975]]) + ``` + +That number makes sense, if the logic of the regression line holds true. + +🎃 Congratulations, you just created a model that can help predict the price of a few varieties of pumpkins. Your holiday pumpkin patch will be beautiful. But you can probably create a better model! +## Polynomial regression + +Another type of linear regression is polynomial regression. While sometimes there's a linear relationship between variables - the bigger the pumpkin in volume, the higher the price - sometimes these relationships can't be plotted as a plane or straight line. + +✅ Here are [some more examples](https://online.stat.psu.edu/stat501/lesson/9/9.8) of data that could use polynomial regression + +Take another look at the relationship between Variety to Price in the previous plot. Does this scatterplot seem like it should necessarily be analyzed by a straight line? Perhaps not. In this case, you can try polynomial regression. + +✅ Polynomials are mathematical expressions that might consist of one or more variables and coefficients + +Polynomial regression creates a curved line to better fit nonlinear data. + +1. Let's recreate a dataframe populated with a segment of the original pumpkin data: + + ```python + new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] + poly_pumpkins = new_pumpkins.drop([c for c in new_pumpkins.columns if c not in new_columns], axis='columns') + + poly_pumpkins + ``` + +A good way to visualize the correlations between data in dataframes is to display it in a 'coolwarm' chart: + +2. Use the `Background_gradient()` method with `coolwarm` as its argument value: + + ```python + corr = poly_pumpkins.corr() + corr.style.background_gradient(cmap='coolwarm') + ``` + This code creates a heatmap: + ![A heatmap showing data correlation](./images/heatmap.png) + +Looking at this chart, you can visualize the good correlation between Package and Price. So you should be able to create a somewhat better model than the last one. +### Create a pipeline + +Scikit-learn includes a helpful API for building polynomial regression models - the `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline). A 'pipeline' is created which is a chain of estimators. In this case, the pipeline includes polynomial features, or predictions that form a nonlinear path. + +1. Build out the X and y columns: + + ```python + X=poly_pumpkins.iloc[:,3:4].values + y=poly_pumpkins.iloc[:,4:5].values + ``` + +2. Create the pipeline by calling the `make_pipeline()` method: + + ```python + from sklearn.preprocessing import PolynomialFeatures + from sklearn.pipeline import make_pipeline + + pipeline = make_pipeline(PolynomialFeatures(4), LinearRegression()) + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + pipeline.fit(np.array(X_train), y_train) + + y_pred=pipeline.predict(X_test) + ``` + +### Create a sequence + +At this point, you need to create a new dataframe with _sorted_ data so that the pipeline can create a sequence. + +Add the following code: + + ```python + df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) + df.sort_values(by='x',inplace = True) + points = pd.DataFrame(df).to_numpy() + + plt.plot(points[:, 0], points[:, 1],color="blue", linewidth=3) + plt.xlabel('Package') + plt.ylabel('Price') + plt.scatter(X,y, color="black") + plt.show() + ``` + +You created a new dataframe by calling `pd.DataFrame`. Then you sorted the values by calling `sort_values()`. Finally you created a polynomial plot: + +![A polynomial plot showing package to price relationship](./images/polynomial.png) + +You can see a curved line that fits your data better. + +Let's check the model's accuracy: + + ```python + accuracy_score = pipeline.score(X_train,y_train) + print('Model Accuracy: ', accuracy_score) + ``` + + And voila! + + ```output + Model Accuracy: 0.8537946517073784 + ``` + +That's better! Try to predict a price: + +### Do a prediction + +Can we input a new value and get a prediction? + +Call `predict()` to make a prediction: + + ```python + pipeline.predict( np.array([ [2.75] ]) ) + ``` + You are given this prediction: + + ```output + array([[46.34509342]]) + ``` + +It does make sense, given the plot! And, if this is a better model than the previous one, looking at the same data, you need to budget for these more expensive pumpkins! + +🏆 Well done! You created two regression models in one lesson. In the final section on regression, you will learn about logistic regression to determine categories. + +--- +## 🚀Challenge + +Test several different variables in this notebook to see how correlation corresponds to model accuracy. + +## [Post-lecture quiz](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/) + +## Review & Self Study + +In this lesson we learned about Linear Regression. There are other important types of Regression. Read about Stepwise, Ridge, Lasso and Elasticnet techniques. A good course to study to learn more is the [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) + +## Assignment + +[Build a Model](assignment.md) From 2043a9bf3678787cf200386e3c9f4645279de9ff Mon Sep 17 00:00:00 2001 From: tinygrox Date: Sat, 12 Feb 2022 06:50:50 +0800 Subject: [PATCH 08/67] Link correction in README.zh-cn.md (#512) * Update README.zh-cn.md Make the link point to the translated file * Update README.zh-cn.md * Update README.zh-cn.md small fixed --- .../translations/README.zh-cn.md | 2 - translations/README.zh-cn.md | 50 +++++++++---------- 2 files changed, 25 insertions(+), 27 deletions(-) diff --git a/4-Classification/2-Classifiers-1/translations/README.zh-cn.md b/4-Classification/2-Classifiers-1/translations/README.zh-cn.md index f1699a186..0c08c17f9 100644 --- a/4-Classification/2-Classifiers-1/translations/README.zh-cn.md +++ b/4-Classification/2-Classifiers-1/translations/README.zh-cn.md @@ -22,7 +22,6 @@ 数据如下所示: - ```output | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | | 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | @@ -30,7 +29,6 @@ | 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. 现在,再多导入一些库: diff --git a/translations/README.zh-cn.md b/translations/README.zh-cn.md index 003f7f081..d5b8fb1cc 100644 --- a/translations/README.zh-cn.md +++ b/translations/README.zh-cn.md @@ -74,31 +74,31 @@ | 课程编号 | 主体 | 课程组 | 学习目标 | 课程链接 | 作者 | | :------: | :------------------------------------------: | :-----------------------------------------------: | ----------------------------------------------------------------------- | :----------------------------------------------------: | :-----------: | -| 01 | 机器学习简介 | [简介](../1-Introduction/README.md) | 了解机器学习背后的基本概念 | [课程](../1-Introduction/1-intro-to-ML/README.md) | Muhammad | -| 02 | 机器学习的历史 | [简介](../1-Introduction/README.md) | 了解该领域的历史 | [课程](../1-Introduction/2-history-of-ML/README.md) | Jen 和 Amy | -| 03 | 机器学习与公平 | [简介](../1-Introduction/README.md) | 在构建和应用机器学习模型时,我们应该考虑哪些有关公平的重要哲学问题? | [课程](../1-Introduction/3-fairness/README.md) | Tomomi | -| 04 | 机器学习的技术工具 | [简介](../1-Introduction/README.md) | 机器学习研究者使用哪些技术来构建机器学习模型? | [课程](../1-Introduction/4-techniques-of-ML/README.md) | Chris 和 Jen | -| 05 | 回归简介 | [回归](../2-Regression/README.md) | 开始使用 Python 和 Scikit-learn 构建回归模型 | [课程](../2-Regression/1-Tools/README.md) | Jen | -| 06 | 北美南瓜价格 🎃 | [回归](../2-Regression/README.md) | 可视化、进行数据清理,为机器学习做准备 | [课程](../2-Regression/2-Data/README.md) | Jen | -| 07 | 北美南瓜价格 🎃 | [回归](../2-Regression/README.md) | 建立线性和多项式回归模型 | [课程](../2-Regression/3-Linear/README.md) | Jen | -| 08 | 北美南瓜价格 🎃 | [回归](../2-Regression/README.md) | 构建逻辑回归模型 | [课程](../2-Regression/4-Logistic/README.md) | Jen | -| 09 | 一个网页应用 🔌 | [网页应用](../3-Web-App/README.md) | 构建一个 Web 应用程序以使用经过训练的模型 | [课程](../3-Web-App/1-Web-App/README.md) | Jen | -| 10 | 分类简介 | [分类](../4-Classification/README.md) | 清理、准备和可视化数据; 分类简介 | [课程](../4-Classification/1-Introduction/README.md) | Jen 和 Cassie | -| 11 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/README.md) | 分类器简介 | [课程](../4-Classification/2-Classifiers-1/README.md) | Jen 和 Cassie | -| 12 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/README.md) | 关于分类器的更多内容 | [课程](../4-Classification/3-Classifiers-2/README.md) | Jen 和 Cassie | -| 13 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/README.md) | 使用您的模型构建一个可以「推荐」的 Web 应用 | [课程](../4-Classification/4-Applied/README.md) | Jen | -| 14 | 聚类简介 | [聚类](../5-Clustering/README.md) | 清理、准备和可视化数据; 聚类简介 | [课程](../5-Clustering/1-Visualize/README.md) | Jen | -| 15 | 探索尼日利亚人的音乐品味 🎧 | [聚类](../5-Clustering/README.md) | 探索 K-Means 聚类方法 | [课程](../5-Clustering/2-K-Means/README.md) | Jen | -| 16 | 自然语言处理 (NLP) 简介 ☕️ | [自然语言处理](../6-NLP/README.md) | 通过构建一个简单的 bot (机器人) 来了解 NLP 的基础知识 | [课程](../6-NLP/1-Introduction-to-NLP/README.md) | Stephen | -| 17 | 常见的 NLP 任务 ☕️ | [自然语言处理](../6-NLP/README.md) | 通过理解处理语言结构时所需的常见任务来加深对于自然语言处理 (NLP) 的理解 | [课程](../6-NLP/2-Tasks/README.md) | Stephen | -| 18 | 翻译和情感分析 ♥️ | [自然语言处理](../6-NLP/README.md) | 对简·奥斯汀的文本进行翻译和情感分析 | [课程](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | -| 19 | 欧洲的浪漫酒店 ♥️ | [自然语言处理](../6-NLP/README.md) | 对于酒店评价进行情感分析(上) | [课程](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | -| 20 | 欧洲的浪漫酒店 ♥️ | [自然语言处理](../6-NLP/README.md) | 对于酒店评价进行情感分析(下) | [课程](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | -| 21 | 时间序列预测简介 | [时间序列](../7-TimeSeries/README.md) | 时间序列预测简介 forecasting | [课程](../7-TimeSeries/1-Introduction/README.md) | Francesca | -| 22 | ⚡️ 世界用电量 ⚡️ - 使用 ARIMA 进行时间序列预测 | [时间序列](../7-TimeSeries/README.md) | 使用 ARIMA 进行时间序列预测 | [课程](../7-TimeSeries/2-ARIMA/README.md) | Francesca | -| 23 | 强化学习简介 | [强化学习](../8-Reinforcement/README.md) | Q-Learning 强化学习简介 | [课程](../8-Reinforcement/1-QLearning/README.md) | Dmitry | -| 24 | 帮助 Peter 避开狼!🐺 | [强化学习](../8-Reinforcement/README.md) | 强化学习练习 | [课程](../8-Reinforcement/2-Gym/README.md) | Dmitry | -| 后记 | 现实世界中的机器学习场景和应用 | [自然场景下的机器学习](../9-Real-World/README.md) | 探索有趣的经典机器学习方法,了解现实世界中机器学习的应用 | [课程](../9-Real-World/1-Applications/README.md) | 团队 | +| 01 | 机器学习简介 | [简介](../1-Introduction/translations/README.zh-cn.md) | 了解机器学习背后的基本概念 | [课程](../1-Introduction/1-intro-to-ML/translations/README.zh-cn.md) | Muhammad | +| 02 | 机器学习的历史 | [简介](../1-Introduction/translations/README.zh-cn.md) | 了解该领域的历史 | [课程](../1-Introduction/2-history-of-ML/translations/README.zh-cn.md) | Jen 和 Amy | +| 03 | 机器学习与公平 | [简介](../1-Introduction/translations/README.zh-cn.md) | 在构建和应用机器学习模型时,我们应该考虑哪些有关公平的重要哲学问题? | [课程](../1-Introduction/3-fairness/translations/README.zh-cn.md) | Tomomi | +| 04 | 机器学习的技术工具 | [简介](../1-Introduction/translations/README.zh-cn.md) | 机器学习研究者使用哪些技术来构建机器学习模型? | [课程](../1-Introduction/4-techniques-of-ML/translations/README.zh-cn.md) | Chris 和 Jen | +| 05 | 回归简介 | [回归](../2-Regression/translations/README.zh-cn.md) | 开始使用 Python 和 Scikit-learn 构建回归模型 | [课程](../2-Regression/1-Tools/translations/README.zh-cn.md) | Jen | +| 06 | 北美南瓜价格 🎃 | [回归](../2-Regression/translations/README.zh-cn.md) | 可视化、进行数据清理,为机器学习做准备 | [课程](../2-Regression/2-Data/translations/README.zh-cn.md) | Jen | +| 07 | 北美南瓜价格 🎃 | [回归](../2-Regression/translations/README.zh-cn.md) | 建立线性和多项式回归模型 | [课程](../2-Regression/3-Linear/translations/README.zh-cn.md) | Jen | +| 08 | 北美南瓜价格 🎃 | [回归](../2-Regression/translations/README.zh-cn.md) | 构建逻辑回归模型 | [课程](../2-Regression/4-Logistic/translations/README.zh-cn.md) | Jen | +| 09 | 一个网页应用 🔌 | [网页应用](../3-Web-App/translations/README.zh-cn.md) | 构建一个 Web 应用程序以使用经过训练的模型 | [课程](../3-Web-App/1-Web-App/translations/README.zh-cn.md) | Jen | +| 10 | 分类简介 | [分类](../4-Classification/translations/README.zh-cn.md) | 清理、准备和可视化数据; 分类简介 | [课程](../4-Classification/1-Introduction/translations/README.zh-cn.md) | Jen 和 Cassie | +| 11 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/translations/README.zh-cn.md) | 分类器简介 | [课程](../4-Classification/2-Classifiers-1/translations/README.zh-cn.md) | Jen 和 Cassie | +| 12 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/translations/README.zh-cn.md) | 关于分类器的更多内容 | [课程](../4-Classification/3-Classifiers-2/translations/README.zh-cn.md) | Jen 和 Cassie | +| 13 | 美味的亚洲和印度美食 🍜 | [分类](../4-Classification/translations/README.zh-cn.md) | 使用您的模型构建一个可以「推荐」的 Web 应用 | [课程](../4-Classification/4-Applied/translations/README.zh-cn.md) | Jen | +| 14 | 聚类简介 | [聚类](../5-Clustering/translations/README.zh-cn.md) | 清理、准备和可视化数据; 聚类简介 | [课程](../5-Clustering/1-Visualize/translations/README.zh-cn.md) | Jen | +| 15 | 探索尼日利亚人的音乐品味 🎧 | [聚类](../5-Clustering/translations/README.zh-cn.md) | 探索 K-Means 聚类方法 | [课程](../5-Clustering/2-K-Means/translations/README.zh-cn.md) | Jen | +| 16 | 自然语言处理 (NLP) 简介 ☕️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 通过构建一个简单的 bot (机器人) 来了解 NLP 的基础知识 | [课程](../6-NLP/1-Introduction-to-NLP/translations/README.zh-cn.md) | Stephen | +| 17 | 常见的 NLP 任务 ☕️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 通过理解处理语言结构时所需的常见任务来加深对于自然语言处理 (NLP) 的理解 | [课程](../6-NLP/2-Tasks/README.md) | Stephen | +| 18 | 翻译和情感分析 ♥️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 对简·奥斯汀的文本进行翻译和情感分析 | [课程](../6-NLP/3-Translation-Sentiment/README.md) | Stephen | +| 19 | 欧洲的浪漫酒店 ♥️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 对于酒店评价进行情感分析(上) | [课程](../6-NLP/4-Hotel-Reviews-1/README.md) | Stephen | +| 20 | 欧洲的浪漫酒店 ♥️ | [自然语言处理](../6-NLP/translations/README.zh-cn.md) | 对于酒店评价进行情感分析(下) | [课程](../6-NLP/5-Hotel-Reviews-2/README.md) | Stephen | +| 21 | 时间序列预测简介 | [时间序列](../7-TimeSeries/translations/README.zh-cn.md) | 时间序列预测简介 forecasting | [课程](../7-TimeSeries/1-Introduction/README.md) | Francesca | +| 22 | ⚡️ 世界用电量 ⚡️ - 使用 ARIMA 进行时间序列预测 | [时间序列](../7-TimeSeries/translations/README.zh-cn.md) | 使用 ARIMA 进行时间序列预测 | [课程](../7-TimeSeries/2-ARIMA/README.md) | Francesca | +| 23 | 强化学习简介 | [强化学习](../8-Reinforcement/translations/README.zh-cn.md) | Q-Learning 强化学习简介 | [课程](../8-Reinforcement/1-QLearning/translations/README.zh-cn.md) | Dmitry | +| 24 | 帮助 Peter 避开狼!🐺 | [强化学习](../8-Reinforcement/translations/README.zh-cn.md) | 强化学习练习 | [课程](../8-Reinforcement/2-Gym/translations/README.zh-cn.md) | Dmitry | +| 后记 | 现实世界中的机器学习场景和应用 | [自然场景下的机器学习](../9-Real-World/translations/README.zh-cn.md) | 探索有趣的经典机器学习方法,了解现实世界中机器学习的应用 | [课程](../9-Real-World/1-Applications/README.md) | 团队 | ## 离线访问 您可以使用 [Docsify](https://docsify.js.org/#/) 离线运行此文档。 Fork 这个仓库,并在你的本地机器上[安装 Docsify](https://docsify.js.org/#/quickstart),并在这个仓库的根文件夹中运行 `docsify serve`。你可以通过 localhost 的 3000 端口访问此文档:`localhost:3000`。 From 59831e93d1eec3fcf558ff0bad7bdb05330652b4 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Fri, 11 Feb 2022 16:52:38 -0600 Subject: [PATCH 09/67] (spanish): 4-Classification/1-Introduction/assignment.md (#515) * feat: Add file content to translate * (spanish): 4-Classification/1-Introduction/assignment.md Translate file `4-Classification/1-Introduction/assignment.md` to spanish --- .../1-Introduction/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 4-Classification/1-Introduction/translations/assignment.es.md diff --git a/4-Classification/1-Introduction/translations/assignment.es.md b/4-Classification/1-Introduction/translations/assignment.es.md new file mode 100644 index 000000000..674f91954 --- /dev/null +++ b/4-Classification/1-Introduction/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Explore métodos de clasificación + +## Instrucciones + +En la [documentación de Scikit-learn](https://scikit-learn.org/stable/supervised_learning.html) encontrarás un gran lista de formas de clasificar los datos. Haz una pequeña búsqueda en estos documentos: tu meta es buscar los metódos de clasificación y hacer coincidir un conjunto de datos en este plan de estudios, una pregunta que puedes hacerle, y una técnica de clasificación. Crea una hoja de cálculo o tabla en un archivo .doc y explica cómo el conjunto de datos funcionaría con el algoritmo de clasificación. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| | Se presentó un documento repasando 5 algoritmos junto a una técnica de clasificación. El resumen está bien explicado y detallado. | Se presentó un documento repasando 3 algoritmos junto a una técnica de clasificación. El resumen está bien explicado y detallado. | Se presentó un documento repasando menos de tres algoritmos junto a una técnica de clasificación y el resumen no está bien detallado ni explicado. | From 2571b5c0f0bb1727c459a96d70910ae2066bbcb4 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Fri, 11 Feb 2022 16:54:00 -0600 Subject: [PATCH 10/67] (spanish): 2-Regression/4-Logistic/README.md (#513) * feat: Add file content to translate * feat: Translate file to spanish Spanish translation for `2-Regression/4-Logistic/README.md` --- .../4-Logistic/translations/README.es.md | 313 ++++++++++++++++++ 1 file changed, 313 insertions(+) create mode 100644 2-Regression/4-Logistic/translations/README.es.md diff --git a/2-Regression/4-Logistic/translations/README.es.md b/2-Regression/4-Logistic/translations/README.es.md new file mode 100644 index 000000000..22db534be --- /dev/null +++ b/2-Regression/4-Logistic/translations/README.es.md @@ -0,0 +1,313 @@ +# Regresión logística para predecir categorías + +![Infografía de regresiones lineal vs logística](../images/logistic-linear.png) +> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/15/) + +> ### [Esta lección se encuentra disponible en R!](../solution/R/lesson_4-R.ipynb) + +## Introducción + +En esta lección final de Regresión, una de las técnicas básicas _clásicas_ de aprendizaje automático, echaremos un vistazo a la regresión logística. Usarás esta técnica para descubrir patrones que predigan categorías binarias. ¿Este dulce es un chocolate o no lo es? ¿Ésta enfermedad es contagiosa o no?, ¿Este cliente eligirá este producto o no? + +En esta lección, aprenderás: + +- Una nueva librería para visualización de datos +- Técnicas para regresión logística + +✅ Profundiza tu entendimiento de trabajo con este tipo de regresión en este [módulo de aprendizaje(https://docs.microsoft.com/learn/modules/train-evaluate-classification-models?WT.mc_id=academic-15963-cxa) +## Requisitos previos + +Haber trabajado con los datos de calabazas, ahora estamos suficientemente familiarizados con estos para entender que hay una categoría binaria que podemos trabajar con `Color`. + +Construyamos un modelo de regresión logística para predecirlo, dadas algunas variables, _qué color podría tener una calabaza dada_ (naranja 🎃 o blanca 👻). + +> ¿Porqué estamos hablando acerca de clasificación binaria en un grupo de lecciones acerca de regresión? Sólo por conveniencia ligüística, como la regresión logística es [realmente un método de clasificación](https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression), aunque de de base lineal. Aprende acerca de otras formas de clasificar los datos en el siguiente grupo de lecciones. + +## Define la pregunta + +Para nuestros propósitos, expresaremos esto como un binario: 'Orange' o 'Not Orange'. También hay una categoría 'striped' en nuestro conjunto de datos pero hay menos instancias de éstas, por lo que no las usaremos. Ésta desaparece una vez que removemos los valores nulos de nuestro conjunto de datos, de cualquier forma. + +> 🎃 Dato gracioso, algunas veces llamamos 'fantasmas' a las calabazas blancas. No son muy fáciles de tallar, por lo que no son tan populares como las calabazas naranjas, ¡pero se ven geniales! + +## Acerca de la regresión logística + +La regresión logística difiere de la regresión lineal, lo cual aprendiste previamentem en unas pocas cosas importantes. + +### Clasificación binaria + +La regresión logística no ofrece las mismas características como la regresión lineal. Las primeras ofrecen una predicción acerca de categorías binarias ("naranja o no naranja") mientras que la segunda es capaz de predecir valores continuos, por ejemplo dado el origen de una calabaza y el tiempo de cosecha, _cuánto incrementará su precio_. + +![Modelo de clasificación de calabazas](../images/pumpkin-classifier.png) +> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) +### Otras clasificaciones + +Existen otros tipo de regresión logística, incluyendo la multinomial y ordinal: + +- **Multinomial**, la cual implica tener más de una categoría - "Orange, White, and Striped". +- **Ordinal**, la cual implica categorías ordenadas, útil si quisieramos ordenar nuestras resultados logicamente, como nuestras calabazas que están ordenadas por un número finito de tamaños (mini,sm,med,lg,xl,xxl). + +![Regresión multinomial vs ordinal](../images/multinomial-ordinal.png) +> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) + +### Sigue siendo lineal + +Aunqeu este tipo de regresión se trata de 'predicciones de categoría', aún funciona mejor cuando hay una relación clara entre la variable dependiente (color) y las otras variables independientes (el resto del conjunto de datos, como el nombre de la ciudad y tamaño). Es bueno tener una idea de si hay alguna linealidad dividiendo estas variables o no. + +### Las variables NO tienen correlación + +¿Recuerdas cómo la regresión lineal funcionó mejor con variables correlacionadas? La regresión logística es lo opuesto - las variables no se tienen que alinear. Eso funciona para estos datos los cuales tienen correlaciones algo débiles. + +### Necesitas muchos datos limpios + +La regresión logística te dará resultados más precisos si usas más datos; nuestro pequeño conjunto de datos no es óptimo para esta tarea, así que tenlo en mente. + +✅ piensa en los tipos de datos que se prestarían bien para la regresión logística + +## Ejercicio - arregla los datos + +Primero, limpia los datos un poco, remueve los valores nulos y selecciona sólo algunas de las columnas: + +1. Agrega el siguiente código: + + ```python + from sklearn.preprocessing import LabelEncoder + + new_columns = ['Color','Origin','Item Size','Variety','City Name','Package'] + + new_pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) + + new_pumpkins.dropna(inplace=True) + + new_pumpkins = new_pumpkins.apply(LabelEncoder().fit_transform) + ``` + + Siempre puedes echar un vistazo a tu nuevo dataframe: + + ```python + new_pumpkins.info + ``` + +### Visualización - cuadrícula lado a lado + +Por ahora has cargado el [starter notebook](../notebook.ipynb) con datos de calabazas una vez más y los has limpiado para así preservar el conjunto de datos que contiene unas pocas variables, incluyendo `Color`. Visualizaremos el dataframe en el notebook usando una librería diferente: [Seaborn](https://seaborn.pydata.org/index.html), el cual es construido en Matplotlib que ya usamos anteriormente. + +Seaborn ofrece algunas formas ingeniosas de visualizar tus datos. Por ejemplo, puedes comparar distribuciones de los datos para cada punto en una cuadrícula lado a lado. + +1. Crea dicha cuadrícula instanciando `PairGrid`, usando nuestros datos de calabazas `new_pumpkins`, seguido de la llamada a `map()`: + + ```python + import seaborn as sns + + g = sns.PairGrid(new_pumpkins) + g.map(sns.scatterplot) + ``` + + ![Una cuadrícula de datos visualizados](../images/grid.png) + + Al observar los datos lado a lado, puedes ver como los datos de Color se relacionan con las otras columnas. + + ✅ Dada la cuadrícula del gráfico de dispersión, ¿cuáles son algunas exploraciones interesantes que puedes visualizar? + +### Usa un gráfico de enjambre + +Dado que Color es una categoría binaria (Naranja o no), se le llaman 'datos categóricos' y necesita 'un [enfoque más especializado](https://seaborn.pydata.org/tutorial/categorical.html?highlight=bar) para visualización. Hay otras formas de visualizar las relaciones de esta categoría con otras variables. + +Puedes visualizar variables lado a lado con los gráficos Seaborn. + +1. Prueba un gráfico de 'enjambre' (swarm) para mostrar la distribución de valores: + + ```python + sns.swarmplot(x="Color", y="Item Size", data=new_pumpkins) + ``` + + ![Un enjambre de datos visualizados](../images/swarm.png) + +### Gráfico de Violín + +Un gráfico tipo 'violín' es útil ya que puedes visualizar fácilmente la forma en que los datos se distribuyen en las dos categorías. Los gŕaficos de violín no funcionan muy bien con conjuntos de datos muy pequeños ya que la distribución se muestra más 'suavemente'. + +1. Como parámetros `x=Color`, `kind="violin"` y llamada `catplot()`: + + ```python + sns.catplot(x="Color", y="Item Size", + kind="violin", data=new_pumpkins) + ``` + + ![un tipo de gráfico de violín](../images/violin.png) + + ✅ Prueba a crear este gráfico, y otros gráficos de Seaborn, usando otras variables. + +Ahora que tenemos una idea de la relación entre las categorías binarias de color y el grupo mayor de tamaños, exploremos la regresión logística para determinar el color probable de cierta calabaza. + +> **🧮 Muéstrame las matemáticas** +> +> ¿Recuerdas cómo la regresión lineal suele ser usó mínimos cuadrados ordinarios para llegar al valor? La regresión logística se basa en el concepto de 'máxima probabilidad' usando [funciones sigmoides](https://wikipedia.org/wiki/Sigmoid_function). Una 'Función Sigmoide' en una gráfico tiene la forma de una 'S'. Toma una valor lo asigna entre 0 y 1. Su curva también es llamada 'curva logística'. Su fórmula luce así: +> +> ![Función logística](../images/sigmoid.png) +> +> Donde el punto medio del sigmoide se encuentra en el punt 0 de las x, L es el valor máximo de la curva, k es la pendiente de la curva. Si el resultado de la función es más de 0.5, la etiqueta en cuestión se le dará la clase '1' de la elección binaria. Si no, será clasificada como '0'. + +## Construye tu modelo + +Construir un modelo para encontrar estas clasificaciones binarias es sorprendentemente fácil en Scikit-learn. + +1. Elige las variable que quieres usar en tu modelo de clasificación y divide el modelo y los conjuntos de pruebas llamando `train_test_split()`: + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Origin','Item Size','Variety','City Name','Package'] + + X = new_pumpkins[Selected_features] + y = new_pumpkins['Color'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + + ``` + +1. Ahora puedes entrenar tu modelo, llamando `fit()` con tus datos entrenados, e imprimir su resultado: + + ```python + from sklearn.model_selection import train_test_split + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + + Echa un vistazo al marcador de tu modelo. No es tan malo, considerando tienes solo 1000 filas de datos: + + ```output + precision recall f1-score support + + 0 0.85 0.95 0.90 166 + 1 0.38 0.15 0.22 33 + + accuracy 0.82 199 + macro avg 0.62 0.55 0.56 199 + weighted avg 0.77 0.82 0.78 199 + + Predicted labels: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 + 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 + 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 + 0 0 0 1 0 1 0 0 1 0 0 0 1 0] + ``` + +## Mejor comprensión a través e una matriz de confusión + +Mientras puedes obtener un reporte de [términos](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.classification_report.html?highlight=classification_report#sklearn.metrics.classification_report) del marcador imprimiendo los elementos de arriba, serás capaz de entender tu modelo más fácilmente usando una [matriz de confusión](https://scikit-learn.org/stable/modules/model_evaluation.html#confusion-matrix) para ayudarnos a entender cómo se desempeña el modelo. + +> 🎓 Una '[matriz de confusión](https://wikipedia.org/wiki/Confusion_matrix)' (o 'matriz de error') es una table que expresa los verdaderos vs los falsos positivos y negativos de tu modelo, para así medir la precisión de las predicciones. + +1. Para usar métricas de confusión, llama `confusion_matrix()`: + + ```python + from sklearn.metrics import confusion_matrix + confusion_matrix(y_test, predictions) + ``` + + Echa un vistazo a la matriz de confusión de tu modelo: + + ```output + array([[162, 4], + [ 33, 0]]) + ``` + +En Scikit-learn, las filas de las matriaces de confusión (eje 0) son etiquetas reales y las columnas (eje 1) son etiquetas previstas. + +| | 0 | 1 | +| :---: | :---: | :---: | +| 0 | TN | FP | +| 1 | FN | TP | + +¿Qué pasa aquí? Digamos que se le pidió a tu modelo clasificar las calabaas entre dos categorías binarias, la categoría 'orange' y la categoría 'not-orange'. + +- Si tu modelo predice una calabaza como no naranja y esta pertenece a la categoría 'not-orange' en realidad la llamamos como un verdadero negativo, mostrado por el número superior izquierdo. +- Si tu modelo precice una calabaza como naranja y esta pertenece a la categoría 'not-orange' en realidad la llamamos como un falso negativo, mostrado por el número inferior izquierdo. +- Si tu modelo predice una calabaza como no naranja y este pertenece a la categoría 'orange' en realidad la llamamos como un falso positivo, mostrado por el número superior derecho. +- Si tu modelo predice una calabaza como naranja y esta pertenece a la categoría 'naranja' en realidad la llamamos como un verdadero positivo, mostrado por el número inferior derecho. + +Como habrás adivinado, es preferible tener un número mayor de verdaderos positivos y verdaderos negativos, y un número menor de falsos positivos y falsos negativos, lo cual implica que el modelo se desempeña mejor. + +¿Cómo se relaciona la matriz de confusión con precision (precisión) y recall (recuerdo)? Recuerda, el reporte de clasificación impreso arriba mostró precisión (0.83) y recuerdo (0.98). + +Precision = tp / (tp + fp) = 162 / (162 + 33) = 0.8307692307692308 + +Recall = tp / (tp + fn) = 162 / (162 + 4) = 0.9759036144578314 + +✅ Q: De acuerdo a la matriz de confusión, ¿cómo lo hizo el modelo? A: No tan mal; existe un buen número de verdaderos positivos pero también varios falsos negativos. + +Repasemos los término que vimos anteriormente con la ayuda de la asignación de la matriz de confusión de TP/TN y FP/FN: + +🎓 Precision: TP/(TP + FP) La fración de instancias relevantes entre las instancias recuperadas (ejemplo, qué etiquetas fueron bien etiquetadas) + +🎓 Recall: TP/(TP + FN) La fracción de instancias relevantes que fueron recuperadas, bien etiquetadas o no + +🎓 f1-score: (2 * precision * recall)/(precision + recall) Un promedio ponderado de precisión y recuerdo, siendo lo mejor 1 y lo pero 0 + +🎓 Soporte: El número de ocurrencias de cada etiqueta recuperada + +🎓 Precisión: (TP + TN)/(TP + TN + FP + FN) El porcentaje de etiquetas previstas de forma precisa para la muestra. + +🎓 Promedio de macros: El cálculo de métricas medias no ponderadas para cada etiqueta, no tomando en cuenta el desequilibrio de etiquetas. + +🎓 Promedio ponderado: El cálculo de las métricas medias para cada etiqueta, tomando en cuenta el desequilibrio de etiquetas al ponderarlas po su soporte (el número de instancias verdaderas para cada etiqueta). + +✅ ¿Puedes pensar cuáles métrcias debes observar si quieres que tu modelo para reducir el número de falsos negativos? + +## Visualiza la curva ROC de este modelo + +Este no es un mal modelo; su precisión está en el rango de 80% ya que idealmente puedes usarlo para precedir el color de una calabaza dado un conjunto de variables. + +Hagamos una visualización más para ver el así llamado puntaje 'ROC': + +```python +from sklearn.metrics import roc_curve, roc_auc_score + +y_scores = model.predict_proba(X_test) +# calculate ROC curve +fpr, tpr, thresholds = roc_curve(y_test, y_scores[:,1]) +sns.lineplot([0, 1], [0, 1]) +sns.lineplot(fpr, tpr) +``` + +Usando de nuevo Seaborn, grafica la [característica operativa de recepción](https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc.html?highlight=roc) del modelo o ROC. Las curvas ROC curves son usadas comúnmente para obtener una vista de la salida de un clasificador en términos de sus verdaderos positivos vs falsos positivos. "Las curvas ROC presentan típicamente la tasa de verdaderos positivos en el eje Y, y la tasa falsos positivos en el eje X." Así, la inclinación de la curvay el espeacio entre la línea del punto medio y la curva importan: quieres una curva que suba rápidamente y sobre la línea. En nuestro caso, hay falsos positivos para empezar, y luego la línea sube hacía arriba y continua propiamente: + +![ROC](../images/ROC.png) + +Finalmente, usa la [API `roc_auc_score`](https://scikit-learn.org/stable/modules/generated/sklearn.metrics.roc_auc_score.html?highlight=roc_auc#sklearn.metrics.roc_auc_score) de Scikit-learn para calcular el 'Área bajo la curva' real (AUC): + +```python +auc = roc_auc_score(y_test,y_scores[:,1]) +print(auc) +``` + +El resultado es `0.6976998904709748`. Dado que la AUC varía entre 0 y 1, quieres un puntaje grande, ya que un modelo que es 100% correcto en sus predicciones tendrá un AUC de 1; en este caso el modelo es _bastante bueno_. + +En futuras lecciones de clasificación, aprenderás cómo iterar para mejorar los puntajes de tus modelos. Pero por ahora, ¡felicitaciones!, ¡Haz completado estas lecciones de regresión! + +--- + +## 🚀Desafío + +¡Hay mucho más para desempacar respecto a la regresión logística! Pero la mejor forma de aprender es experimentar. Encuentra un conjunto de datos que se preste para este tipo de análisis y construye un modelo con él. ¿Qué aprendes? tipo: prueba [Kaggle](https://www.kaggle.com/search?q=logistic+regression+datasets) por conjuntos de datos interesantes. + +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/16/) + +## Revisión & autoestudio + +Lee las primeras páginas de este [artículo de Stanford](https://web.stanford.edu/~jurafsky/slp3/5.pdf) de algunos usos prácticos para la regresión logística. Piensa en las tareas que se ajustan mejor para uno u otro tipo de tareas de regresión que estudiamos hasta el momento. ¿Que funcionaría mejor? + +## Asignación + +[Reintentando esta regresión](assignment.es.md) From abbfac2354a73eca880b1026ac2900f7e6c7a9f7 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Fri, 11 Feb 2022 16:54:49 -0600 Subject: [PATCH 11/67] (spanish) 6-NLP/1-Introduction-to-NLP/assignment.md (#518) * feat: Add file content to translate (spanish) * (spanish) Translate file to spanish Translate file `6-NLP/1-Introduction-to-NLP/assignment.md` to spanish --- .../translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 6-NLP/1-Introduction-to-NLP/translations/assignment.es.md diff --git a/6-NLP/1-Introduction-to-NLP/translations/assignment.es.md b/6-NLP/1-Introduction-to-NLP/translations/assignment.es.md new file mode 100644 index 000000000..56bf2242a --- /dev/null +++ b/6-NLP/1-Introduction-to-NLP/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Buscar un bot + +## Instrucciones + +Los bots están en todas partes. Tu asignación: ¡encuentra uno y adóptalo! Los puedes encontrar en sitios web, en aplicaciones bancarias, y en los teléfonos, por ejemplo cuando llamas a companías de servicios financieros para asesoramiento o información de cuenta. Analiza el bot y ve si puedes confundirlo. Si puedes confundir al bot, ¿por qué piensas que sucedió? Escribe un ensayo corto acerca de tu experiencia. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ------------------------------------------------------------------------------------------------------------- | -------------------------------------------- | --------------------- | +| | Se escribió un ensayo a página completa, explicando la presunta arquitectura del bot y describiendo tu experiencia con él | El ensayo está incompleto o no fue bien investigado | No se envió ensayo | From 03e6150666eb926ddfa179bc04a325fd6127ad13 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Fri, 11 Feb 2022 16:55:45 -0600 Subject: [PATCH 12/67] (spanish): 4-Classification/1-Introduction/README.md (#514) * feat: Add file content to translate * feat: Translate file to spanish Translate file `4-Classification/1-Introduction/README.md` to spanish --- .../1-Introduction/translations/README.es.md | 299 ++++++++++++++++++ 1 file changed, 299 insertions(+) create mode 100644 4-Classification/1-Introduction/translations/README.es.md diff --git a/4-Classification/1-Introduction/translations/README.es.md b/4-Classification/1-Introduction/translations/README.es.md new file mode 100644 index 000000000..ea05762be --- /dev/null +++ b/4-Classification/1-Introduction/translations/README.es.md @@ -0,0 +1,299 @@ +# Introducción a la clasificación + +En estas cuatro lecciones, explorarás un enfoque fundamental de aprendizaje automático clásico - _classification_. Ensayaremos usando varios algoritmos de clasificación con un conjunto de datos acerca de todas las cocinas brillantes de Asia e India. ¡Espero estés hambriento! + +![Solo una pizca!](../images/pinch.png) + +> ¡Celebra las cocinas de toda Asia en estas lecciones! Imagen de [Jen Looper](https://twitter.com/jenlooper) + +La clasificación es una form de [aprendizaje supervisado](https://wikipedia.org/wiki/Supervised_learning) que conlleva mucho en común con técnicas de regresión. Si el aprendizaje automático trata todo acerca de la predicción de valores o nombres para las cosas usando conjuntos de datos, entonces la clasificación generalmente recae en dos grupos: _clasificación binaria_ y _clasificación multiclase_. + +[![Introducción a la clasificación](https://img.youtube.com/vi/eg8DJYwdMyg/0.jpg)](https://youtu.be/eg8DJYwdMyg "Introducción a la clasificación") + +> 🎥 Da clic en la imagen de arriba para ver el video: John Guttag del MIT presenta la clasificación + +Recuerda: + +- **La regresión lineal** te ayudó a predecir las relaciones entre las variables y hacer predicciones precisas donde un nuevo punto de datos podría reacer en una relación a esa línea. Por lo que puedes predecir _qué precio tendrá una calabaza en Septiembre vs Diciembre_, por ejemplo. +- **La regresión logística** te ayudó a descubrir "categorías binarias": en este punto de precio, ¿_la calabaza pertenece a la categoría orange or not-orange_? + +La clasificación utiliza varios algorítmos para determinar otras formas de determinar la clase o etiqueta de un punto de datos. Trabajemos con estos datos de cocina para ver si, al observar un grupo de ingredientes, podemos determinar su cocina u origen. + +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/19/) + +> ### [¡Esta lección está disponible en R!](./solution/R/lesson_10-R.ipynb) + +### Introducción + +La clasificación es una de las actividades fundamentales del investigador de aprendizaje automático y el científico de datos. Desde la clasificación básica de un valor binario ("¿este correo electrónico es o no spam?"), hasta complejas clasificaciones de imágenes y segmentación utilizando la visión por computadora, simpre es útil ser capaz de ordenar los datos en clases y hacerle preguntas. + +Para expresar el proceso de una forma más científica, nuestro método de clasificación crea un modelo predictivo que te habilita asignar la relación entre las variables de entrada a las variables de salida. + +![Clasificación binaria vs multiclase](../images/binary-multiclass.png) + +> Problemas binarios vs multiclase para que los algoritmos de clasificación los manejen. Infografía de [Jen Looper](https://twitter.com/jenlooper) + +Antes de empezar el proceso de limpieza de nuestros datos, visualizarlos, y prepararlos para nuestras tareas de aprendizaje automático, aprendamos un poco acerca de las diversas formas en que el aprendizaje automático puede ser aprovechado para clasificar los datos. + +Derivado de las clasificaciones [estadísticas](https://wikipedia.org/wiki/Statistical_classification), usando cracterística de uso del aprendizaje automático clásico, como `smoker`, `weight`, y `age` para determinar la _probabilidad de desarrollar X enfermedad_. Como una técnica de aprendizaje supervisada similar para los ejercicios de regresión que desempeñaste anteriormente, tus datos son etiquetados y los algoritmos de aprendizaje automático use esas etiquetas para clasificar y predecir clases (o 'características') de un conjunto de datos y asignarlos a un grupo o resultado. + +✅ Date un momento para imaginar un conjunto de datos acerca de las cocinas. ¿Qué sería capaz de responder un modelo multiclase? ¿Qué sería capaz de responder un modelo binario? ¿Qué si quisieras determinar si una cocina dada fuera probable que usara fenogreco? ¿Qué si quisieras ver si, dado un regalo de una bolsa del supermercado llena de anís estrella, alcachofa, coliflor y rábano picante, pudieras crear un platillo Indio típico? + +[![Canastas locas y misteriosas](https://img.youtube.com/vi/GuTeDbaNoEU/0.jpg)](https://youtu.be/GuTeDbaNoEU "Canastas locas y misteriosas") + +> 🎥 Da clic en la imagen superior para ver un video. Toda la premisa del programa 'Chopped' es el 'cesto misterioso' donde los chefs tienen que hacer algunos platillos a partir de la elección al azar de ingredientes. ¡Seguramente un modelo de aprendizaje automático habría ayudado! + +## Hola 'clasificador' + +La pregutna que queremos hacer a este conjunto de datos de cocina es realmente una **pregunta multiclase**, así como tenemos muchas cocinas nacionales potenciales para trabajar, Dado un lote de ingredientes, ¿en cuáles de estas muchas clases encajarán los datos? + +Scikit-learn ofrece diversos algoritmos distintos para usar en la clasificación de datos, dependiente en la naturaleza del problema que quieres resolver. En las siguientes dos lecciones, aprenderás acerca de varios de estos algoritmos. + +## Ejercicio - limpia y equilibra tus datos + +La primer tarea a la mano, antes de iniciar este proyecto, es limpiar y **equilibrar** tus datos para obtener mejores resultados. Comienza con el archivo en blanco _notebook.ipynb_ en la raíz de este directorio. + +Lo primero a instalar es [imblearn](https://imbalanced-learn.org/stable/). Este es un paquete de Scikit-learn que te permitirá equilibrar mejor los datos (aprenderás más acerca de esta tarea en un minuto). + +1. Para instalar `imblearn`, ejecuta `pip install`, así: + + ```python + pip install imblearn + ``` + +1. Importa los paquetes que necesitas para importar tus datos y visualizarlos, también importa `SMOTE` de `imblearn`. + + ```python + import pandas as pd + import matplotlib.pyplot as plt + import matplotlib as mpl + import numpy as np + from imblearn.over_sampling import SMOTE + ``` + + Ahora está configurado para leer importart los datos a continuación. + +1. La siguiente tarea será importar los datos: + + ```python + df = pd.read_csv('../data/cuisines.csv') + ``` + + Usando `read_csv()` leerá el contenido del archivo csv _cusines.csv_ y colocarlo en la variable `df`. + +1. Comprueba la forma de los datos: + + ```python + df.head() + ``` + + Las primeras cinco filas lucen así: + + ```output + | | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | + | --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | + | 0 | 65 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 1 | 66 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 2 | 67 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 3 | 68 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | + | 4 | 69 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + ``` + +1. Obtén información acerca de estos datos llamando a `info()`: + + ```python + df.info() + ``` + + Tu salida se parece a: + + ```output + + RangeIndex: 2448 entries, 0 to 2447 + Columns: 385 entries, Unnamed: 0 to zucchini + dtypes: int64(384), object(1) + memory usage: 7.2+ MB + ``` + +## Ejercicio - aprendiendo acerca de cocinas + +Ahora el trabajo comienza a hacerse más interesante. Descubramos la distribución de los datos, por cocina + +1. Grafica los datos como barras llamando `barh()`: + + ```python + df.cuisine.value_counts().plot.barh() + ``` + + ![Distribución de datos de cocina](../images/cuisine-dist.png) + + Existe un número finito de cocinas, pero la distribución de los datos es irregular. ¡Puedes corregirlo! Anter de hacerlo, explora un poco más. + +1. Descubre cuántos datos están disponibles por cocina e imprímelos: + + ```python + thai_df = df[(df.cuisine == "thai")] + japanese_df = df[(df.cuisine == "japanese")] + chinese_df = df[(df.cuisine == "chinese")] + indian_df = df[(df.cuisine == "indian")] + korean_df = df[(df.cuisine == "korean")] + + print(f'thai df: {thai_df.shape}') + print(f'japanese df: {japanese_df.shape}') + print(f'chinese df: {chinese_df.shape}') + print(f'indian df: {indian_df.shape}') + print(f'korean df: {korean_df.shape}') + ``` + + la salida luce así: + + ```output + thai df: (289, 385) + japanese df: (320, 385) + chinese df: (442, 385) + indian df: (598, 385) + korean df: (799, 385) + ``` + +## Descubriendo ingredientes + +Ahora puedes profundizar en los datos y aprender cuáles son los ingredientes típicos por cocina. Deberías limpiar los datos recurrentes que crean confusión entre cocinas, así que aprendamos acerca de este problema. + +1. Crea una función `create_ingredient()` en Python para crear un dataframe ingrediente. Esta función comenzará eliminando una columna inútil y ordenando los ingredientes por su conteo: + + ```python + def create_ingredient_df(df): + ingredient_df = df.T.drop(['cuisine','Unnamed: 0']).sum(axis=1).to_frame('value') + ingredient_df = ingredient_df[(ingredient_df.T != 0).any()] + ingredient_df = ingredient_df.sort_values(by='value', ascending=False, + inplace=False) + return ingredient_df + ``` + + Ahora puedes usar esa función para tener una idea de los 10 ingredientes más populares por cocina. + +1. Llama `create_ingredient()` y graficalo llamando `barh()`: + + ```python + thai_ingredient_df = create_ingredient_df(thai_df) + thai_ingredient_df.head(10).plot.barh() + ``` + + ![Tailandeses](../images/thai.png) + +1. Haz lo mismo para los datos de ingredientes japoneses: + + ```python + japanese_ingredient_df = create_ingredient_df(japanese_df) + japanese_ingredient_df.head(10).plot.barh() + ``` + + ![Japoneses](../images/japanese.png) + +1. Ahora para los ingredientes chinos: + + ```python + chinese_ingredient_df = create_ingredient_df(chinese_df) + chinese_ingredient_df.head(10).plot.barh() + ``` + + ![Chinos](../images/chinese.png) + +1. Grafica los ingredientes indios: + + ```python + indian_ingredient_df = create_ingredient_df(indian_df) + indian_ingredient_df.head(10).plot.barh() + ``` + + ![indios](../images/indian.png) + +1. Finalmente, grafica los ingredientes coreanos: + + ```python + korean_ingredient_df = create_ingredient_df(korean_df) + korean_ingredient_df.head(10).plot.barh() + ``` + + ![coreanos](../images/korean.png) + +1. Ahora, eliminar los ingredientes más comunes que crean confusión entre las distintas cocinas, llamando `drop()`: + + ¡Todos aman el arroz, el ajo y el gengibre! + + ```python + feature_df= df.drop(['cuisine','Unnamed: 0','rice','garlic','ginger'], axis=1) + labels_df = df.cuisine #.unique() + feature_df.head() + ``` + +## Equilibra el conjunto de datos + +Ahora que has limpiado los datos, usa [SMOTE](https://imbalanced-learn.org/dev/references/generated/imblearn.over_sampling.SMOTE.html) - "Técnica de sobremuestreo de minoritario sintético" - para equilibrarlo. + +1. Llama `fit_resample()`, esta estrategia genera nuevas muestras por interpolación. + + ```python + oversample = SMOTE() + transformed_feature_df, transformed_label_df = oversample.fit_resample(feature_df, labels_df) + ``` + + Al equilibrar tus datos, tendrás mejores resultados cuando los clasifiques. Piensa en una clasificación binaria. Si la mayoría de tus datos es una clase, un modelo de aprendizaje automático va a predecir esa clase más frecuentemente, solo porque hay más datos para ello. Equilibrar los datos toma cualquier dato sesgado y ayuda a remover este desequilibrio. + +1. Ahora puedes comprobar los números de etiquetas por ingredientes: + + ```python + print(f'new label count: {transformed_label_df.value_counts()}') + print(f'old label count: {df.cuisine.value_counts()}') + ``` + + Tu salida luce así: + + ```output + new label count: korean 799 + chinese 799 + indian 799 + japanese 799 + thai 799 + Name: cuisine, dtype: int64 + old label count: korean 799 + indian 598 + chinese 442 + japanese 320 + thai 289 + Name: cuisine, dtype: int64 + ``` + + Los datos están bien y limpios, equilibrados ¡y muy deliciosos! + +1. El último paso es guardar tus datos equilibrados, incluyendo etiquetas y características, en un nuevo dataframe que pueda ser exportado a un archivo: + + ```python + transformed_df = pd.concat([transformed_label_df,transformed_feature_df],axis=1, join='outer') + ``` + +1. Puedes dar un vistazo más a los datos usando `transformed_df.head()` y `transformed_df.info()`. Guarda una copia de estos datos para un uso en futuras lecciones: + + ```python + transformed_df.head() + transformed_df.info() + transformed_df.to_csv("../data/cleaned_cuisines.csv") + ``` + + Este nuevo CSV ahora puede ser encontrado en la directorio raíz data. + +--- + +## 🚀Desafío + +Este plan de estudios contiene varios conjuntos de datos interesantes. Profundiza en los directorios `data` y ve si alguno contiene conjuntos de datos que serían apropiados para clasificación binaria o multiclase. ¿Qué preguntas harías a este conunto de datos? + +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/20/) + +## Revisión y autoestudio + +Explora la API de SMOTE. ¿Para qué casos de uso es se usa mejor? ¿Qué problemas resuelve? + +## Asignación + +[Explora métodos de clasificación](assignment.es.md) From 92c08225632d55b109482ce8c39e5d9d488e088b Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Fri, 11 Feb 2022 16:56:24 -0600 Subject: [PATCH 13/67] (spanish): 6-NLP/README.md (#516) Translate file `6-NLP/README.md` to spanish --- 6-NLP/translations/README.es.md | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 6-NLP/translations/README.es.md diff --git a/6-NLP/translations/README.es.md b/6-NLP/translations/README.es.md new file mode 100644 index 000000000..4e3876b1b --- /dev/null +++ b/6-NLP/translations/README.es.md @@ -0,0 +1,24 @@ +# Primeros pasos con el procesamiento de lenguaje natural + +El procesamiento de lenguaje natural (NLP) es la capacidad que tiene un programa de computadora para entender el lenguaje humano como se habla y escribe -- referido como lenguaje natural. Es un componente de la inteligencia artificial (AI). NLP ha existido por más de 50 años y tiene raíces en el campo de la lingüística. Todo el campo está dirigido a ayudar a las máquinas a entender y rpocesar el lenguaje humano. Este luego puede ser usado para realizar tareas como corrección ortográfica o traducción automática. Tiene una variedad de apliciones en el mundo real en un número de campos, incluyendo investigación médica, motores de búsqueda e inteligencia de negocios. + +## Tema regional: Los idiomas y literatura europeos y hoteles románticos de Europa ❤️ + +En esta sección del plan de estudios, se te presentará una de los usos mayormente difundidos del aprendizaje automático: procesamiento del lenguaje natural (NLP). Derivado de la lingüística computacional, esta categoría de inteligencia artificial es el puente entre humanos y máquinas vía comunicación por voz o texto. + +En estas lecciones aprenderás las bases del NLP al construir pequeños bots de conversación par aprender como el aprendizaje automático ayuda en hacer estas conversaciones más y más 'inteligentes'. Viajarás tiempo atrás, charlando con Elizabeth Bennett y Mr. Darcy de la novela clásica de Jane Austen, **Orgullo y Prejuico**, publicado 1813. Luego, ampliarás tus conocimientos al aprender acerca de análisis de los sentimientos vía reseñas de hoteles en Europa. + +![Libro Orgullo y Prejuicio y té](../images/p&p.jpg) +> Fotografía de Elaine Howlin en Unsplash + +## Lecciones + +1. [Introducción al procesamiento del lenguaje natural](../1-Introduction-to-NLP/README.md) +2. [Tareas y técnicas comunes de NLP](../2-Tasks/README.md) +3. [Traducción y análisis de sentimiento con aprendizaje automático](../3-Translation-Sentiment/README.md) +4. [Preparando tus datos](../4-Hotel-Reviews-1/README.md) +5. [NLTK para análisis de sentimiento](../5-Hotel-Reviews-2/README.md) + +## Créditos + +Estas lecciones de procesamiento del lenguaje natural fueron escritas con ☕ por [Stephen Howell](https://twitter.com/Howell_MSFT) From ae1b12fd081702abdcdf36ea91d4593a382d8629 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 14 Feb 2022 22:33:27 -0600 Subject: [PATCH 14/67] (spanish): 2-Regression/3-Linear/README.md Translate file `2-Regression/3-Linear/README.md` to spanish --- .../3-Linear/translations/README.es.md | 218 +++++++++--------- 1 file changed, 113 insertions(+), 105 deletions(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index c2fe13893..317df5cae 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -1,84 +1,86 @@ -# Build a regression model using Scikit-learn: regression two ways +# Construye un modelo de regresión usando Scikit-learn: regresión de dos formas -![Linear vs polynomial regression infographic](./images/linear-polynomial.png) -> Infographic by [Dasani Madipalli](https://twitter.com/dasani_decoded) -## [Pre-lecture quiz](https://white-water-09ec41f0f.azurestaticapps.net/quiz/13/) +![Infografía de regresión lineal vs polinomial](./images/linear-polynomial.png) +> Infografía de [Dasani Madipalli](https://twitter.com/dasani_decoded) -> ### [This lesson is available in R!](./solution/R/lesson_3-R.ipynb) -### Introduction +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/13/) -So far you have explored what regression is with sample data gathered from the pumpkin pricing dataset that we will use throughout this lesson. You have also visualized it using Matplotlib. +> ### [¡Esta lección está disponible en R!](../solution/R/lesson_3-R.ipynb) -Now you are ready to dive deeper into regression for ML. In this lesson, you will learn more about two types of regression: _basic linear regression_ and _polynomial regression_, along with some of the math underlying these techniques. +### Introducción -> Throughout this curriculum, we assume minimal knowledge of math, and seek to make it accessible for students coming from other fields, so watch for notes, 🧮 callouts, diagrams, and other learning tools to aid in comprehension. +Hasta ahora has explorado qué es la regresión con datos obtenidos del conjunto de datos de los precios de las calabazas que usaremos en esta lección. También los has visualizado usando Matplotlib. -### Prerequisite +Ahora estás listo para profundizar en la regresión para el aprendizaje automático. En esta lección, aprenderás más acerca de dos tipos de regresión: _regresión básica lineal_ y _regresión polinomial_, junto con algo de matemáticas fundamental a estas técnicas. -You should be familiar by now with the structure of the pumpkin data that we are examining. You can find it preloaded and pre-cleaned in this lesson's _notebook.ipynb_ file. In the file, the pumpkin price is displayed per bushel in a new dataframe. Make sure you can run these notebooks in kernels in Visual Studio Code. +> A lo largo de este plan de estudios, asumimos un conocimiento mínimo de matemáticas, y buscamos hacerlo accesible para los estudiantes provenientes de otros campos, así que pon atención a las notas, 🧮 llamados, diagramas, y otras herramientas de estudio para ayudar en la comprensión. -### Preparation +### Prerrequisitos -As a reminder, you are loading this data so as to ask questions of it. +Ahora, debes estar familiarizado con la estructura de los datos de las calabazas que ya examinamos. Puedes encontrarlos precargados y pre-limpiados en el archivo _notebook.ipynb_ de esta lección. En el archivo, el precio de la calabaza se muestra por fanega en un nuevo dataframe. Asegúrate que puedas ejecutar estos notebooks en kernels en Visual Studio Code. -- When is the best time to buy pumpkins? -- What price can I expect of a case of miniature pumpkins? -- Should I buy them in half-bushel baskets or by the 1 1/9 bushel box? -Let's keep digging into this data. +### Preparación -In the previous lesson, you created a Pandas dataframe and populated it with part of the original dataset, standardizing the pricing by the bushel. By doing that, however, you were only able to gather about 400 datapoints and only for the fall months. +Como recordatorio, estás cargando estos datos para hacer preguntas aceca de estos. -Take a look at the data that we preloaded in this lesson's accompanying notebook. The data is preloaded and an initial scatterplot is charted to show month data. Maybe we can get a little more detail about the nature of the data by cleaning it more. +- ¿Cuándo es el mejor momento para comprar calabazas? +- ¿Qué precio puedo esperar para el caso de calabazas miniatura? +- ¿Debería comprarlas en cestos de media fanega o por caja de 1 1) de fanega? -## A linear regression line +Sigamos profundizando en estos datos. -As you learned in Lesson 1, the goal of a linear regression exercise is to be able to plot a line to: +En la lección anterior, creaste un dataframe de Pandas y lo poblaste con parte del conjunto de datos original, estandarizando el precio de la fanega. Haciéndolo, sólo fuiste capaz de reunir alrededor de 400 puntos de datos y sólo para los meses de otoño. -- **Show variable relationships**. Show the relationship between variables -- **Make predictions**. Make accurate predictions on where a new datapoint would fall in relationship to that line. - -It is typical of **Least-Squares Regression** to draw this type of line. The term 'least-squares' means that all the datapoints surrounding the regression line are squared and then added up. Ideally, that final sum is as small as possible, because we want a low number of errors, or `least-squares`. +Da un vistazo a los datos que fueron precargados en el notebook que acompaña a esta lección. Los datos están precargados y hay graficada un gráfico de dispersión inicial para mostrar datos mensuales. Quizá podamos obtener un poco más de detalle acerca de la naturaleza de los datos limpiándolos más. -We do so since we want to model a line that has the least cumulative distance from all of our data points. We also square the terms before adding them since we are concerned with its magnitude rather than its direction. +## Un línea de regresión lineal -> **🧮 Show me the math** -> -> This line, called the _line of best fit_ can be expressed by [an equation](https://en.wikipedia.org/wiki/Simple_linear_regression): -> +Como aprendiste en la lección 1, el objetivo de un ejercicio de regresión lineal es ser capaz de graficar una línea para: + +- **Mostrar la relación de las variables**. Mostrar la relación entre las variables +- **Realizar predicciones**. Hacer predicciones precisas en donde un nuevo punto de datos caería en relación a esa línea. + +Es típico de la **regresión de mínimos cuadrados** el dibujar este tipo de línea. El término 'mínimos cuadrados' significa que todos los puntos de datos rodeando la línea de regresión se elevan al cuadrado y luego se suman. Idealmente, la suma final es tan pequeña como sea posible, porque queremos un número bajo de errores, o `mínimos cuadrados`. + +Lo hacemos así ya que que queremos modelar una línea que tiene la distancia acumulada menor de todos nuestros puntos de datos. Tambień elevamos al cuadraro los términos antes de sumarlos ya que nos interesa su magnitud en lugar de su direción. + +> **🧮 Muéstrame las matemáticas** +> +> Esta línea, llamada la _línea de mejor ajuste_ puede ser expresada por [una ecuación](https://en.wikipedia.org/wiki/Simple_linear_regression): +> > ``` > Y = a + bX > ``` > -> `X` is the 'explanatory variable'. `Y` is the 'dependent variable'. The slope of the line is `b` and `a` is the y-intercept, which refers to the value of `Y` when `X = 0`. +> `X` es la 'variable explicativa'. `Y` es la 'variable dependiente'. La pendiente de la línea es `b` y `a` es la intercepción en y, la cual se refiere a el valor de `Y` cuando `X = 0`. > ->![calculate the slope](images/slope.png) +>![Calcula la pendiente](../images/slope.png) > -> First, calculate the slope `b`. Infographic by [Jen Looper](https://twitter.com/jenlooper) +> Primero, calcula la pendiente `b`. Infografía de [Jen Looper](https://twitter.com/jenlooper) > -> In other words, and referring to our pumpkin data's original question: "predict the price of a pumpkin per bushel by month", `X` would refer to the price and `Y` would refer to the month of sale. +> En otras palabras, y refiriéndose a nuestra pregunta original de los datos de las calabazas: "predice el precio de una calabaza por fanega por mes", `X` se referiría al precio e `Y` a el mes de venta. > ->![complete the equation](images/calculation.png) +>![Completa la ecuación](../images/calculation.png) > -> Calculate the value of Y. If you're paying around $4, it must be April! Infographic by [Jen Looper](https://twitter.com/jenlooper) +> Calcula el valor de Y. ¡Si estás pagando alrededor de $4, debe ser Abril! Infografía de [Jen Looper](https://twitter.com/jenlooper) > -> The math that calculates the line must demonstrate the slope of the line, which is also dependent on the intercept, or where `Y` is situated when `X = 0`. +> Las matemáticas que calculan la línea deben demostrar la pendiente de la línea, la cual también depende de la intercepción, o dónde `Y` se sitúa cuando `X = 0`. > -> You can observe the method of calculation for these values on the [Math is Fun](https://www.mathsisfun.com/data/least-squares-regression.html) web site. Also visit [this Least-squares calculator](https://www.mathsisfun.com/data/least-squares-calculator.html) to watch how the numbers' values impact the line. +> Puedes observar el método de cálculo para estos valores en el sitio web [las matemáticas son divertidas](https://www.mathsisfun.com/data/least-squares-regression.html). También visita esta [calculadora de mínimos cuadrados](https://www.mathsisfun.com/data/least-squares-calculator.html) para ver cómo los valores de los números impactan la línea. -## Correlation +## Correlación -One more term to understand is the **Correlation Coefficient** between given X and Y variables. Using a scatterplot, you can quickly visualize this coefficient. A plot with datapoints scattered in a neat line have high correlation, but a plot with datapoints scattered everywhere between X and Y have a low correlation. +Un término más a entender es el **coeficiente de correlación** entre las variables dadas X e Y. Usando un gráfico de dispersión, puedes visualizar rápidamente este coeficiente. Un gráfico con pountos de datos dispersos en una línea ordenada tienen alta correlación, pero una gráfico con puntos de datos dispersos por todas partes entre X e Y tienen baja correlación. -A good linear regression model will be one that has a high (nearer to 1 than 0) Correlation Coefficient using the Least-Squares Regression method with a line of regression. +Un buen modelo de regresión lineal será aquél que tenga un alto Coeficiente de Correlación (más cercano a 1 que a 0) usando el métro de regresión de mínimos cuadrados con una línea de regresión. -✅ Run the notebook accompanying this lesson and look at the City to Price scatterplot. Does the data associating City to Price for pumpkin sales seem to have high or low correlation, according to your visual interpretation of the scatterplot? +✅ Ejecutta el notebook que acompaña esta lección y mira el gráfico de Ciudad a Precio. ¿Los datos asociados de Ciudad a Precio para las ventas de calabaza parecen tener correlación lata o baja, de acuerdo a tu intepretación visual del gráfico de dispersión? +## Prepara tus datos para la regresión -## Prepare your data for regression +Ahora que tienes conocimiento de las matemáticas detrás de este ejercicio, crea un modelo de regresión para ver si puedes predecir cuál de los paquetes de calabazas tendrá los mejores precios. Alguien comprando calabazas para una parcela de calabazas de días festivos quisiera esta información para ser capaz de optimizar sus compras de paquetes de calabazas para la parcela. -Now that you have an understanding of the math behind this exercise, create a Regression model to see if you can predict which package of pumpkins will have the best pumpkin prices. Someone buying pumpkins for a holiday pumpkin patch might want this information to be able to optimize their purchases of pumpkin packages for the patch. - -Since you'll use Scikit-learn, there's no reason to do this by hand (although you could!). In the main data-processing block of your lesson notebook, add a library from Scikit-learn to automatically convert all string data to numbers: +Ya que usarás Scikit-learn, no hay razón para hacer esto a mano (¡aunque podrías!). En el bloque principal de procesamientos de datos de tu notebook de lección, agrega una biblioteca de Scikit-learn para convertir automáticamente todos los datos de cadena a números: ```python from sklearn.preprocessing import LabelEncoder @@ -86,37 +88,37 @@ from sklearn.preprocessing import LabelEncoder new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) ``` -If you look at the new_pumpkins dataframe now, you see that all the strings are now numeric. This makes it harder for you to read but much more intelligible for Scikit-learn! -Now you can make more educated decisions (not just based on eyeballing a scatterplot) about the data that is best suited to regression. +Si ahora miras el nuevo dataframe new_pumpkins, ves que todas las cadenas ahora son numéricas. ¡Esto te dificulta el leer pero lo hace más comprensible para Scikit-learn! +Ahora puedes tomar decisiones más informadas (no sólo basado en ver un gráfico de dispersión) acerca de los datos que mejor se ajustan a la regresión. -Try to find a good correlation between two points of your data to potentially build a good predictive model. As it turns out, there's only weak correlation between the City and Price: +Intenta encontrar una buena correlación entre dos puntos de tus datos para construir potencialmente un buen modelo predictivo. Como resulta, sólo hay correlación débil entre las Ciudad y el Precio. ```python print(new_pumpkins['City'].corr(new_pumpkins['Price'])) 0.32363971816089226 ``` -However there's a bit better correlation between the Package and its Price. That makes sense, right? Normally, the bigger the produce box, the higher the price. +sin embargo, existe una correlación un poco mejor entre el Paquete y su Precio. Esto tiene sentido, ¿cierto? Normalmente, entre más grande sea la caja producidad, mayor será el precio. ```python print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) 0.6061712937226021 ``` -A good question to ask of this data will be: 'What price can I expect of a given pumpkin package?' +Una buena pregunta a realizar de estos datos, sería: '¿Qué precio puedo esperar de un paquete de calabazas dado?' -Let's build this regression model +Construyamos este modelo de regresión -## Building a linear model +## Construyendo un modelo lineal -Before building your model, do one more tidy-up of your data. Drop any null data and check once more what the data looks like. +Antes de construir tu modelo, haz una limpieza más a tus datos. Elimina cualquier dato nulo y verifica una vez cómo lucen los datos. ```python new_pumpkins.dropna(inplace=True) new_pumpkins.info() ``` -Then, create a new dataframe from this minimal set and print it out: +Luego, crea un dataframe nuevo de este conjunto mínimo e imprímelo: ```python new_columns = ['Package', 'Price'] @@ -141,15 +143,16 @@ lin_pumpkins 415 rows × 2 columns ``` -1. Now you can assign your X and y coordinate data: +1. Ahora puedes asignar tus datos de coodenadas X e Y: ```python X = lin_pumpkins.values[:, :1] y = lin_pumpkins.values[:, 1:2] ``` -✅ What's going on here? You're using [Python slice notation](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) to create arrays to populate `X` and `y`. -2. Next, start the regression model-building routines: +✅ ¿Qué está pasando aquí? Estás usando [notación slice de Python](https://stackoverflow.com/questions/509211/understanding-slice-notation/509295#509295) para crear arreglos y así poblar `X` e `Y`. + +2. Lo siguiente es, iniciar las rutinas de construcción del modelo de regresión: ```python from sklearn.linear_model import LinearRegression @@ -166,13 +169,13 @@ lin_pumpkins print('Model Accuracy: ', accuracy_score) ``` - Because the correlation isn't particularly good, the model produced isn't terribly accurate. + Debido a que la correlación nos es particularmente buena, el modelo producido no es terriblemente preciso. ```output Model Accuracy: 0.3315342327998987 ``` -3. You can visualize the line that's drawn in the process: +3. Puedes visualziar la línea dibujada en el proceso: ```python plt.scatter(X_test, y_test, color='black') @@ -183,36 +186,37 @@ lin_pumpkins plt.show() ``` - ![A scatterplot showing package to price relationship](./images/linear.png) -4. Test the model against a hypothetical variety: + ![Un gráfico de dispersión mostrando la relación paquete a precio](../images/linear.png) + +4. Prueba el modelo contra una variedad hipotética: ```python lin_reg.predict( np.array([ [2.75] ]) ) ``` - - The returned price for this mythological Variety is: + + El precio devuelto para esta Variedad mitológica es: ```output array([[33.15655975]]) ``` +Ese número hace sentido, si la lógica de la regresión lineal es cierta. -That number makes sense, if the logic of the regression line holds true. +🎃 Felicidades, acabas de crear un modelo que puede ayudara predecir el precio de unas pocas variedades de calabazas. Tu parcela de calabazas de días festivos serán hermosas. ¡Pero probablemente puedes crear un mejor modelo mejor! -🎃 Congratulations, you just created a model that can help predict the price of a few varieties of pumpkins. Your holiday pumpkin patch will be beautiful. But you can probably create a better model! -## Polynomial regression +## Regresión polinomial -Another type of linear regression is polynomial regression. While sometimes there's a linear relationship between variables - the bigger the pumpkin in volume, the higher the price - sometimes these relationships can't be plotted as a plane or straight line. +Otro tipo de regresión lineal es la regresión polinomial. Mientras algunas veces existe una relación lineal entre variables - entre más grande el volumen de la calabaza, mayor el precio - algunas veces estas relaciones no pueden ser graficadas como un plano o línea recta. -✅ Here are [some more examples](https://online.stat.psu.edu/stat501/lesson/9/9.8) of data that could use polynomial regression +✅ Aquí hay [más ejemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de los datos que podrían usar regresión polinomial. -Take another look at the relationship between Variety to Price in the previous plot. Does this scatterplot seem like it should necessarily be analyzed by a straight line? Perhaps not. In this case, you can try polynomial regression. +De un vistazo más a la relación entre Variedad a Precio en la gráfica anterior. ¿Parece que el gráfico de dispersión debería ser analizado necesariamente por una línea recta? Quizá no. En este caso, puedes probar la regresión polinomial. -✅ Polynomials are mathematical expressions that might consist of one or more variables and coefficients +✅ Los polinomios son expresiones matemáticas que pueden consistir en una o más variables y coeficientes. -Polynomial regression creates a curved line to better fit nonlinear data. +La regresión polinomial crea una línea curva para ajustar mejor los datos no lineales. -1. Let's recreate a dataframe populated with a segment of the original pumpkin data: +1. Recreemos un dataframe poblado con un segmento de los datos originales de las calabazas: ```python new_columns = ['Variety', 'Package', 'City', 'Month', 'Price'] @@ -221,30 +225,32 @@ Polynomial regression creates a curved line to better fit nonlinear data. poly_pumpkins ``` -A good way to visualize the correlations between data in dataframes is to display it in a 'coolwarm' chart: +Una buena forma de visualizar las correlaciones entre los datos en los dataframes es mostrarlos en una gráfica 'coolwarm': -2. Use the `Background_gradient()` method with `coolwarm` as its argument value: +2. Usa el método `Background_gradient()` con `coolwarm` como valor de su argumento: ```python corr = poly_pumpkins.corr() corr.style.background_gradient(cmap='coolwarm') ``` - This code creates a heatmap: - ![A heatmap showing data correlation](./images/heatmap.png) -Looking at this chart, you can visualize the good correlation between Package and Price. So you should be able to create a somewhat better model than the last one. -### Create a pipeline + Este código crea un mapa de calor: + ![Un mapa de calor mostrando correlación de datos](../images/heatmap.png) + +Viendo esta gráfica, puedes visualizar la buena correlación entre Paquete y Precio. Así que deberías ser capaz de crear un modelo algo mejor que el último. + +### Crea un pipeline -Scikit-learn includes a helpful API for building polynomial regression models - the `make_pipeline` [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline). A 'pipeline' is created which is a chain of estimators. In this case, the pipeline includes polynomial features, or predictions that form a nonlinear path. +Scikit-learn incluye una API útil para crear modelos de regresión polinomail - la [API](https://scikit-learn.org/stable/modules/generated/sklearn.pipeline.make_pipeline.html?highlight=pipeline#sklearn.pipeline.make_pipeline) `make_pipeline`. Se crea un 'pipeline' que es una cadena de estimadores. En este caso, el pipeline incluye características polinomiales, o predicciones que forman un camino no lineal. -1. Build out the X and y columns: +1. Construye las columnas X e Y: ```python X=poly_pumpkins.iloc[:,3:4].values y=poly_pumpkins.iloc[:,4:5].values ``` -2. Create the pipeline by calling the `make_pipeline()` method: +2. Crea el pipeline llamando al método `make_pipeline()`: ```python from sklearn.preprocessing import PolynomialFeatures @@ -259,11 +265,11 @@ Scikit-learn includes a helpful API for building polynomial regression models - y_pred=pipeline.predict(X_test) ``` -### Create a sequence +### Crea una secuencia -At this point, you need to create a new dataframe with _sorted_ data so that the pipeline can create a sequence. +En este punto, necesitas crear un nuevo dataframe con datos _ordenados_ para que así el pipeline pueda crear una secuencia. -Add the following code: +Agrega el siguiente código: ```python df = pd.DataFrame({'x': X_test[:,0], 'y': y_pred[:,0]}) @@ -277,57 +283,59 @@ Add the following code: plt.show() ``` -You created a new dataframe by calling `pd.DataFrame`. Then you sorted the values by calling `sort_values()`. Finally you created a polynomial plot: +Creaste un nuevo dataframe llamando `pd.DataFrame`. Luego ordenaste los valores al llamar `sort_values()`. Finalmente creaste un gráfico polinomial: -![A polynomial plot showing package to price relationship](./images/polynomial.png) +![Un gráfico polinomail mostrando la relación paquete a precio](../images/polynomial.png) -You can see a curved line that fits your data better. +Puedes ver una línea curva que se ajusta mejor a tus datos. -Let's check the model's accuracy: +Revisemos la precisión del modelo: ```python accuracy_score = pipeline.score(X_train,y_train) print('Model Accuracy: ', accuracy_score) ``` - And voila! + ¡Y voila! ```output Model Accuracy: 0.8537946517073784 ``` -That's better! Try to predict a price: +¡Es mejor! Intenta predecir un precio: -### Do a prediction +### Haz un predicción -Can we input a new value and get a prediction? +¿Podemos ingresar un nuevo valor y obtener una predicción? + +Llama a `predict()` para hacer una predicción: -Call `predict()` to make a prediction: - ```python pipeline.predict( np.array([ [2.75] ]) ) ``` - You are given this prediction: + + Se te presenta esta predicción: ```output array([[46.34509342]]) ``` -It does make sense, given the plot! And, if this is a better model than the previous one, looking at the same data, you need to budget for these more expensive pumpkins! +¡Hace sentido, dado el gráfico! Y, si este es un mejor modelo que el anterior, viendo los mismos datos, ¡necesitas presupuestar para estas calabazas más caras! -🏆 Well done! You created two regression models in one lesson. In the final section on regression, you will learn about logistic regression to determine categories. +🏆 ¡Bien hecho! Creaste dos modelos de regresión en una lección. En la sección final de regresión, aprenderás acerca de la regresión logística para determinar categorías. --- -## 🚀Challenge -Test several different variables in this notebook to see how correlation corresponds to model accuracy. +## 🚀Desafío + +Prueba varias variables diferenstes en este notebook para ver cómo la correlación corresponde a la precisión del modelo. -## [Post-lecture quiz](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/) +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/) -## Review & Self Study +## Revisión y autoestudio -In this lesson we learned about Linear Regression. There are other important types of Regression. Read about Stepwise, Ridge, Lasso and Elasticnet techniques. A good course to study to learn more is the [Stanford Statistical Learning course](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +En esta lección aprendimos acerca de la regresión lineal. Existen otros tipos importantes de regresión. Lee acerca de las técnicas paso a paso (Stepwise), cresta (Ridge), Lazo y red elástica (Lasso and Elasticnet). Un buen curso para estudiar para aprender más es el[Curso de aprendizaje estadístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) -## Assignment +## Asignación -[Build a Model](assignment.md) +[Construye un modelo](assignment.es.md) From 37568d8510dd30b7a2b862e3bf72e0665476d1cd Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 14 Feb 2022 22:43:18 -0600 Subject: [PATCH 15/67] feat: Add file content to translate --- .../2-Classifiers-1/translations/assignment.es.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 4-Classification/2-Classifiers-1/translations/assignment.es.md diff --git a/4-Classification/2-Classifiers-1/translations/assignment.es.md b/4-Classification/2-Classifiers-1/translations/assignment.es.md new file mode 100644 index 000000000..065a06c53 --- /dev/null +++ b/4-Classification/2-Classifiers-1/translations/assignment.es.md @@ -0,0 +1,9 @@ +# Study the solvers +## Instructions + +In this lesson you learned about the various solvers that pair algorithms with a machine learning process to create an accurate model. Walk through the solvers listed in the lesson and pick two. In your own words, compare and contrast these two solvers. What kind of problem do they address? How do they work with various data structures? Why would you pick one over another? +## Rubric + +| Criteria | Exemplary | Adequate | Needs Improvement | +| -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | +| | A .doc file is presented with two paragraphs, one on each solver, comparing them thoughtfully. | A .doc file is presented with only one paragraph | The assignment is incomplete | From f56e03686fc8bdb5ff786bf149d05adad87efa94 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Mon, 14 Feb 2022 22:51:20 -0600 Subject: [PATCH 16/67] (spanish): 4-Classification/2-Classifiers-1/assignment.md Translate file `4-Classification/2-Classifiers-1/assignment.md` to spanish --- .../2-Classifiers-1/translations/assignment.es.md | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/4-Classification/2-Classifiers-1/translations/assignment.es.md b/4-Classification/2-Classifiers-1/translations/assignment.es.md index 065a06c53..17075f7de 100644 --- a/4-Classification/2-Classifiers-1/translations/assignment.es.md +++ b/4-Classification/2-Classifiers-1/translations/assignment.es.md @@ -1,9 +1,11 @@ -# Study the solvers -## Instructions +# Estudia los solucionadores -In this lesson you learned about the various solvers that pair algorithms with a machine learning process to create an accurate model. Walk through the solvers listed in the lesson and pick two. In your own words, compare and contrast these two solvers. What kind of problem do they address? How do they work with various data structures? Why would you pick one over another? -## Rubric +## Instrucciones -| Criteria | Exemplary | Adequate | Needs Improvement | +En esta lección aprendiste acerca de diferentes solucionadores que emparejan algoritmos con un proceso de aprendizaje automático para crear un modelo preciso. Revisa los solucionadores listados en la lección y elige dos. En tus propias palabras, compara y contrasta estos dos solucionadores. ¿Qué clase de problema abordan? ¿Cómo funcionan con varias estructuras de datos? ¿Porqué elegirías uno por encima de otro? + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | | -------- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------ | ---------------------------- | -| | A .doc file is presented with two paragraphs, one on each solver, comparing them thoughtfully. | A .doc file is presented with only one paragraph | The assignment is incomplete | +| | Se presentó un archivo .doc con dos párrafos, uno de cada solucionador, comparándolos seriamente. | Se presentó un archivo .doc con sólo un párrafo | La asignación está incompleta | From 1e355d9b8251762af4074afc3d2b86b571f518aa Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:42:14 -0600 Subject: [PATCH 17/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index 317df5cae..9bd4ff846 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -31,7 +31,7 @@ Sigamos profundizando en estos datos. En la lección anterior, creaste un dataframe de Pandas y lo poblaste con parte del conjunto de datos original, estandarizando el precio de la fanega. Haciéndolo, sólo fuiste capaz de reunir alrededor de 400 puntos de datos y sólo para los meses de otoño. -Da un vistazo a los datos que fueron precargados en el notebook que acompaña a esta lección. Los datos están precargados y hay graficada un gráfico de dispersión inicial para mostrar datos mensuales. Quizá podamos obtener un poco más de detalle acerca de la naturaleza de los datos limpiándolos más. +Da un vistazo a los datos que fueron precargados en el notebook que acompaña a esta lección. Los datos están precargados con un gráfico de dispersión inicial para mostrar datos mensuales. Quizá podamos obtener un poco más de detalle acerca de la naturaleza de los datos limpiándolos más. ## Un línea de regresión lineal From fc48bf4c52e98d4e646bfe61bfb27b30c7d4fb59 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:42:45 -0600 Subject: [PATCH 18/67] typo: Change typo on fraction --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index 317df5cae..7ecfa5dab 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -25,7 +25,7 @@ Como recordatorio, estás cargando estos datos para hacer preguntas aceca de est - ¿Cuándo es el mejor momento para comprar calabazas? - ¿Qué precio puedo esperar para el caso de calabazas miniatura? -- ¿Debería comprarlas en cestos de media fanega o por caja de 1 1) de fanega? +- ¿Debería comprarlas en cestos de media fanega o por caja de 1 1/9 de fanega? Sigamos profundizando en estos datos. From 6d0a546b1a31ebf8c29e8abf5c984ad7e5f975a8 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:45:40 -0600 Subject: [PATCH 19/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index 39069e676..8a0c79ed2 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -42,7 +42,7 @@ Como aprendiste en la lección 1, el objetivo de un ejercicio de regresión line Es típico de la **regresión de mínimos cuadrados** el dibujar este tipo de línea. El término 'mínimos cuadrados' significa que todos los puntos de datos rodeando la línea de regresión se elevan al cuadrado y luego se suman. Idealmente, la suma final es tan pequeña como sea posible, porque queremos un número bajo de errores, o `mínimos cuadrados`. -Lo hacemos así ya que que queremos modelar una línea que tiene la distancia acumulada menor de todos nuestros puntos de datos. Tambień elevamos al cuadraro los términos antes de sumarlos ya que nos interesa su magnitud en lugar de su direción. +Lo hacemos así ya que queremos modelar una línea que tiene la menor distancia acumulada de todos nuestros puntos de datos. También elevamos al cuadrado los términos antes de sumarlos ya que nos interesa su magnitud en lugar de su dirección. > **🧮 Muéstrame las matemáticas** > From 8aaae15e4c320cf6d4d5ba96c8f100798f627b66 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:49:53 -0600 Subject: [PATCH 20/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index 8a0c79ed2..e30463182 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -70,7 +70,7 @@ Lo hacemos así ya que queremos modelar una línea que tiene la menor distancia ## Correlación -Un término más a entender es el **coeficiente de correlación** entre las variables dadas X e Y. Usando un gráfico de dispersión, puedes visualizar rápidamente este coeficiente. Un gráfico con pountos de datos dispersos en una línea ordenada tienen alta correlación, pero una gráfico con puntos de datos dispersos por todas partes entre X e Y tienen baja correlación. +Un término más a entender es el **coeficiente de correlación** entre las variables dadas X e Y. Usando un gráfico de dispersión, puedes visualizar rápidamente este coeficiente. Un gráfico con puntos de datos dispersos en una línea ordenada tienen alta correlación, pero un gráfico con puntos de datos dispersos por todas partes entre X e Y tienen baja correlación. Un buen modelo de regresión lineal será aquél que tenga un alto Coeficiente de Correlación (más cercano a 1 que a 0) usando el métro de regresión de mínimos cuadrados con una línea de regresión. From 61ca7f938fdc2eb61a857646246d7946f0d8f90a Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:50:51 -0600 Subject: [PATCH 21/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index e30463182..b447a2908 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -88,7 +88,7 @@ from sklearn.preprocessing import LabelEncoder new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit_transform) ``` -Si ahora miras el nuevo dataframe new_pumpkins, ves que todas las cadenas ahora son numéricas. ¡Esto te dificulta el leer pero lo hace más comprensible para Scikit-learn! +Si ahora miras el nuevo dataframe `new_pumpkins`, ves que todas las cadenas ahora son numéricas. ¡Esto te dificulta el leer pero lo hace más comprensible para Scikit-learn! Ahora puedes tomar decisiones más informadas (no sólo basado en ver un gráfico de dispersión) acerca de los datos que mejor se ajustan a la regresión. Intenta encontrar una buena correlación entre dos puntos de tus datos para construir potencialmente un buen modelo predictivo. Como resulta, sólo hay correlación débil entre las Ciudad y el Precio. From 0cf8362e28c0bdf1261324981bf69f97cdbd5af6 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:51:44 -0600 Subject: [PATCH 22/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index b447a2908..dfb2cd093 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -74,7 +74,7 @@ Un término más a entender es el **coeficiente de correlación** entre las vari Un buen modelo de regresión lineal será aquél que tenga un alto Coeficiente de Correlación (más cercano a 1 que a 0) usando el métro de regresión de mínimos cuadrados con una línea de regresión. -✅ Ejecutta el notebook que acompaña esta lección y mira el gráfico de Ciudad a Precio. ¿Los datos asociados de Ciudad a Precio para las ventas de calabaza parecen tener correlación lata o baja, de acuerdo a tu intepretación visual del gráfico de dispersión? +✅ Ejecuta el notebook que acompaña esta lección y mira el gráfico de Ciudad a Precio. ¿Los datos asociados de Ciudad a Precio para las ventas de calabaza parecen tener correlación alta o baja, de acuerdo a tu interpretación visual del gráfico de dispersión? ## Prepara tus datos para la regresión From c9a236046435ad0c9939295ef2bf4714c580c826 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:52:47 -0600 Subject: [PATCH 23/67] typo: Fix typo on paragraph --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index dfb2cd093..32b19d334 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -91,7 +91,7 @@ new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit Si ahora miras el nuevo dataframe `new_pumpkins`, ves que todas las cadenas ahora son numéricas. ¡Esto te dificulta el leer pero lo hace más comprensible para Scikit-learn! Ahora puedes tomar decisiones más informadas (no sólo basado en ver un gráfico de dispersión) acerca de los datos que mejor se ajustan a la regresión. -Intenta encontrar una buena correlación entre dos puntos de tus datos para construir potencialmente un buen modelo predictivo. Como resulta, sólo hay correlación débil entre las Ciudad y el Precio. +Intenta encontrar una buena correlación entre dos puntos de tus datos para construir potencialmente un buen modelo predictivo. Como resultado, sólo hay correlación débil entre la Ciudad y el Precio. ```python print(new_pumpkins['City'].corr(new_pumpkins['Price'])) From 7ec88b39e8eb49429f6954569eb91d8aa18b1a15 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 15 Feb 2022 10:54:27 -0600 Subject: [PATCH 24/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index 32b19d334..ca38beb7b 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -98,7 +98,7 @@ print(new_pumpkins['City'].corr(new_pumpkins['Price'])) 0.32363971816089226 ``` -sin embargo, existe una correlación un poco mejor entre el Paquete y su Precio. Esto tiene sentido, ¿cierto? Normalmente, entre más grande sea la caja producidad, mayor será el precio. +Sin embargo, existe una correlación un poco mejor entre el Paquete y su Precio. Esto tiene sentido, ¿cierto? Normalmente, entre más grande sea la caja producida, mayor será el precio. ```python print(new_pumpkins['Package'].corr(new_pumpkins['Price'])) From 35dd3723221daf9e63349705ca28c651203d2216 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Wed, 16 Feb 2022 08:45:33 -0600 Subject: [PATCH 25/67] style: Fix some typos --- 2-Regression/3-Linear/translations/README.es.md | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index ca38beb7b..f8e223403 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -200,17 +200,18 @@ lin_pumpkins ```output array([[33.15655975]]) ``` + Ese número hace sentido, si la lógica de la regresión lineal es cierta. -🎃 Felicidades, acabas de crear un modelo que puede ayudara predecir el precio de unas pocas variedades de calabazas. Tu parcela de calabazas de días festivos serán hermosas. ¡Pero probablemente puedes crear un mejor modelo mejor! +🎃 Felicidades, acabas de crear un modelo que puede ayudara predecir el precio de unas pocas variedades de calabazas. Tu parcela de calabazas de días festivos serán hermosas. ¡Pero probablemente puedes crear un mejor modelo! ## Regresión polinomial -Otro tipo de regresión lineal es la regresión polinomial. Mientras algunas veces existe una relación lineal entre variables - entre más grande el volumen de la calabaza, mayor el precio - algunas veces estas relaciones no pueden ser graficadas como un plano o línea recta. +Otro tipo de regresión lineal es la regresión polinomial. Mientras algunas veces existe una relación lineal entre las variables - entre más grande el volumen de la calabaza, mayor el precio - algunas veces estas relaciones no pueden ser graficadas como un plano o línea recta. ✅ Aquí hay [más ejemplos](https://online.stat.psu.edu/stat501/lesson/9/9.8) de los datos que podrían usar regresión polinomial. -De un vistazo más a la relación entre Variedad a Precio en la gráfica anterior. ¿Parece que el gráfico de dispersión debería ser analizado necesariamente por una línea recta? Quizá no. En este caso, puedes probar la regresión polinomial. +Da un vistazo más a la relación entre Variedad a Precio en la gráfica anterior. ¿Parece que el gráfico de dispersión debería ser analizado necesariamente por una línea recta? Quizá no. En este caso, puedes probar la regresión polinomial. ✅ Los polinomios son expresiones matemáticas que pueden consistir en una o más variables y coeficientes. @@ -237,7 +238,7 @@ Una buena forma de visualizar las correlaciones entre los datos en los dataframe Este código crea un mapa de calor: ![Un mapa de calor mostrando correlación de datos](../images/heatmap.png) -Viendo esta gráfica, puedes visualizar la buena correlación entre Paquete y Precio. Así que deberías ser capaz de crear un modelo algo mejor que el último. +Viendo esta gráfica, puedes visualizar la buena correlación entre Paquete y Precio. Así que deberías ser capaz de crear un modelo algo mejor que el anterior. ### Crea un pipeline @@ -285,7 +286,7 @@ Agrega el siguiente código: Creaste un nuevo dataframe llamando `pd.DataFrame`. Luego ordenaste los valores al llamar `sort_values()`. Finalmente creaste un gráfico polinomial: -![Un gráfico polinomail mostrando la relación paquete a precio](../images/polynomial.png) +![Un gráfico polinomial mostrando la relación paquete a precio](../images/polynomial.png) Puedes ver una línea curva que se ajusta mejor a tus datos. @@ -328,13 +329,13 @@ Llama a `predict()` para hacer una predicción: ## 🚀Desafío -Prueba varias variables diferenstes en este notebook para ver cómo la correlación corresponde a la precisión del modelo. +Prueba variables diferentes en este notebook para ver cómo la correlación corresponde a la precisión del modelo. ## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/14/) -## Revisión y autoestudio +## Revisión y auto-estudio -En esta lección aprendimos acerca de la regresión lineal. Existen otros tipos importantes de regresión. Lee acerca de las técnicas paso a paso (Stepwise), cresta (Ridge), Lazo y red elástica (Lasso and Elasticnet). Un buen curso para estudiar para aprender más es el[Curso de aprendizaje estadístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) +En esta lección aprendimos acerca de la regresión lineal. Existen otros tipos importantes de regresión. Lee acerca de las técnicas paso a paso (Stepwise), cresta (Ridge), Lazo y red elástica (Lasso and Elasticnet). Un buen curso para estudiar para aprender más es el [Curso de aprendizaje estadístico de Stanford](https://online.stanford.edu/courses/sohs-ystatslearning-statistical-learning) ## Asignación From 831161e6a78c0768d0c2a75a3c40255bc2b708a0 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Wed, 16 Feb 2022 08:49:08 -0600 Subject: [PATCH 26/67] style: Fix grammar on paragraph --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index f8e223403..551fa9bf2 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -89,7 +89,7 @@ new_pumpkins.iloc[:, 0:-1] = new_pumpkins.iloc[:, 0:-1].apply(LabelEncoder().fit ``` Si ahora miras el nuevo dataframe `new_pumpkins`, ves que todas las cadenas ahora son numéricas. ¡Esto te dificulta el leer pero lo hace más comprensible para Scikit-learn! -Ahora puedes tomar decisiones más informadas (no sólo basado en ver un gráfico de dispersión) acerca de los datos que mejor se ajustan a la regresión. +Ahora puedes tomar decisiones más informadas (no sólo basado en un gráfico de dispersión) acerca de los datos que mejor se ajustan a la regresión. Intenta encontrar una buena correlación entre dos puntos de tus datos para construir potencialmente un buen modelo predictivo. Como resultado, sólo hay correlación débil entre la Ciudad y el Precio. From 77fef489bd480a3aad3791a54fff3a0e52d9c2f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 16 Feb 2022 16:21:13 -0500 Subject: [PATCH 27/67] Bump follow-redirects from 1.14.5 to 1.14.8 in /quiz-app (#519) Bumps [follow-redirects](https://github.com/follow-redirects/follow-redirects) from 1.14.5 to 1.14.8. - [Release notes](https://github.com/follow-redirects/follow-redirects/releases) - [Commits](https://github.com/follow-redirects/follow-redirects/compare/v1.14.5...v1.14.8) --- updated-dependencies: - dependency-name: follow-redirects dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- quiz-app/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/quiz-app/package-lock.json b/quiz-app/package-lock.json index 6d37fd249..468706516 100644 --- a/quiz-app/package-lock.json +++ b/quiz-app/package-lock.json @@ -7039,9 +7039,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true, "funding": [ { @@ -20732,9 +20732,9 @@ } }, "follow-redirects": { - "version": "1.14.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.5.tgz", - "integrity": "sha512-wtphSXy7d4/OR+MvIFbCVBDzZ5520qV8XfPklSN5QtxuMUJZ+b0Wnst1e1lCDocfzuCkHqj8k0FpZqO+UIaKNA==", + "version": "1.14.8", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.8.tgz", + "integrity": "sha512-1x0S9UVJHsQprFcEC/qnNzBLcIxsjAV905f/UkQxbclCsoTWlacCNOpQa/anodLl2uaEKFhfWOvM2Qg77+15zA==", "dev": true }, "for-in": { From c7fd1ca94f18543e956f8de2be191d99740c38ae Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 22 Feb 2022 16:38:14 -0600 Subject: [PATCH 28/67] Update 2-Regression/3-Linear/translations/README.es.md Co-authored-by: Alfredo Deza --- 2-Regression/3-Linear/translations/README.es.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/2-Regression/3-Linear/translations/README.es.md b/2-Regression/3-Linear/translations/README.es.md index 551fa9bf2..77ef26965 100644 --- a/2-Regression/3-Linear/translations/README.es.md +++ b/2-Regression/3-Linear/translations/README.es.md @@ -78,7 +78,7 @@ Un buen modelo de regresión lineal será aquél que tenga un alto Coeficiente d ## Prepara tus datos para la regresión -Ahora que tienes conocimiento de las matemáticas detrás de este ejercicio, crea un modelo de regresión para ver si puedes predecir cuál de los paquetes de calabazas tendrá los mejores precios. Alguien comprando calabazas para una parcela de calabazas de días festivos quisiera esta información para ser capaz de optimizar sus compras de paquetes de calabazas para la parcela. +Ahora que tienes conocimiento de las matemáticas detrás de este ejercicio, crea un modelo de regresión para ver si puedes predecir cuál de los paquetes de calabazas tendrá los mejores precios. Alguien comprando calabazas para una parcela de calabazas en días festivos quisiera esta información para ser capaz de optimizar sus compras de paquetes de calabazas para la parcela. Ya que usarás Scikit-learn, no hay razón para hacer esto a mano (¡aunque podrías!). En el bloque principal de procesamientos de datos de tu notebook de lección, agrega una biblioteca de Scikit-learn para convertir automáticamente todos los datos de cadena a números: From 65b34a8825676c1373ad2a04340d701008ceea6a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:21:07 -0500 Subject: [PATCH 29/67] Bump node-fetch from 2.6.1 to 2.6.7 (#522) Bumps [node-fetch](https://github.com/node-fetch/node-fetch) from 2.6.1 to 2.6.7. - [Release notes](https://github.com/node-fetch/node-fetch/releases) - [Commits](https://github.com/node-fetch/node-fetch/compare/v2.6.1...v2.6.7) --- updated-dependencies: - dependency-name: node-fetch dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index 66c081922..9d0177992 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1241,10 +1241,13 @@ "dev": true }, "node-fetch": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", - "dev": true + "version": "2.6.7", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "requires": { + "whatwg-url": "^5.0.0" + } }, "normalize-path": { "version": "3.0.0", @@ -1868,6 +1871,12 @@ "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", "dev": true }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", + "dev": true + }, "tweezer.js": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/tweezer.js/-/tweezer.js-1.5.0.tgz", @@ -2009,6 +2018,22 @@ "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", "dev": true }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", + "dev": true + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", + "dev": true, + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, "which-module": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", From 8940d49f73cab5fd51528c940c25916f311eab4b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 23 Feb 2022 11:40:10 -0500 Subject: [PATCH 30/67] Bump url-parse from 1.5.3 to 1.5.7 in /quiz-app (#529) Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.3 to 1.5.7. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.3...1.5.7) --- updated-dependencies: - dependency-name: url-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- quiz-app/package-lock.json | 33 ++++++--------------------------- 1 file changed, 6 insertions(+), 27 deletions(-) diff --git a/quiz-app/package-lock.json b/quiz-app/package-lock.json index 468706516..86604a6b4 100644 --- a/quiz-app/package-lock.json +++ b/quiz-app/package-lock.json @@ -2378,18 +2378,6 @@ "webpack": ">=2.0.0 <5.0.0" } }, - "node_modules/@vue/cli-plugin-eslint/node_modules/rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, "node_modules/@vue/cli-plugin-router": { "version": "4.5.15", "resolved": "https://registry.npmjs.org/@vue/cli-plugin-router/-/cli-plugin-router-4.5.15.tgz", @@ -13732,9 +13720,9 @@ } }, "node_modules/url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.7.tgz", + "integrity": "sha512-HxWkieX+STA38EDk7CE9MEryFeHCKzgagxlGvsdS7WBImq9Mk+PGwiT56w82WI3aicwJA8REp42Cxo98c8FZMA==", "dev": true, "dependencies": { "querystringify": "^2.1.1", @@ -16944,15 +16932,6 @@ "object-hash": "^1.1.4", "rimraf": "^2.6.1" } - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - } } } }, @@ -26174,9 +26153,9 @@ } }, "url-parse": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.3.tgz", - "integrity": "sha512-IIORyIQD9rvj0A4CLWsHkBBJuNqWpFQe224b6j9t/ABmquIS0qDU2pY6kl6AuOrL5OkCXHMCFNe1jBcuAggjvQ==", + "version": "1.5.7", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.7.tgz", + "integrity": "sha512-HxWkieX+STA38EDk7CE9MEryFeHCKzgagxlGvsdS7WBImq9Mk+PGwiT56w82WI3aicwJA8REp42Cxo98c8FZMA==", "dev": true, "requires": { "querystringify": "^2.1.1", From 00e96d866f841328dbe9a0e494042d8a327267d6 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 07:50:08 -0600 Subject: [PATCH 31/67] (spanish) 4-Classification/3-Classifiers-2/assignment.md (#523) * feat: Add file content to translate * (spanish) 4-Classification/3-Classifiers-2/assignment.md Translate file `4-Classification/3-Classifiers-2/assignment.md` to spanish --- .../3-Classifiers-2/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 4-Classification/3-Classifiers-2/translations/assignment.es.md diff --git a/4-Classification/3-Classifiers-2/translations/assignment.es.md b/4-Classification/3-Classifiers-2/translations/assignment.es.md new file mode 100644 index 000000000..6ea777a5b --- /dev/null +++ b/4-Classification/3-Classifiers-2/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Juega con los parámetros + +## Instrucciones + +Hay varios parámetros que están configurados de forma predeterminada cuando usas estos clasificadores. Intellisense en VS Code puede ayudarte a profundizar en ellos. Adopta una de las técnicas de clasificación de aprendizaje automático de esta lección y vuelve a entrenar los modelos ajustando varios valores de parámetros. Construye un notebook explicando por qué algunos cambios mejoran la calidad del modelo mientras otros la degradan. Sé minucioso en tu respuesta. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ---------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------- | ----------------------------- | +| | Se presentó un notebook con un clasificador completamente construido, sus parámetros ajustados y los cambios explicados en cajas de texto | Se presentó un notebook parcialmente completo o pobremente explicado | Se presentó un notebook con errores o fallos | From 50ddf17d0b0569580fc03874c7030be045160500 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 07:50:41 -0600 Subject: [PATCH 32/67] (spanish) 4-Classification/4-Applied/assignment.md (#524) * feat: Add file content to translate * (spanish) 4-Classification/4-Applied/assignment.md Translate file `4-Classification/4-Applied/assignment.md` to spanish * Update 4-Classification/4-Applied/translations/assignment.es.md Thanks, Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- .../4-Applied/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 4-Classification/4-Applied/translations/assignment.es.md diff --git a/4-Classification/4-Applied/translations/assignment.es.md b/4-Classification/4-Applied/translations/assignment.es.md new file mode 100644 index 000000000..2121ab1a6 --- /dev/null +++ b/4-Classification/4-Applied/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Construye un recomendador + +## Instrucciones + +Dados tus ejercicios en esta lección, ahora sabes cómo construir aplicaciones web basadas en JavaScript usando el Runtime Onnx y un modelo Onnx convertido. Experimenta con la construcción de un nuevo recomendador usando los datos de estas lecciones u obtenidos de otro lugar (por favor, da los créditos correspondientes). Debes crear un recomendador de mascotas dados diversos atributos de personalidad, o un recomendador de géneros musicales basados en el estado de ánimo de una persona. ¡Sé creativo! + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ---------------------------------------------------------------------- | ------------------------------------- | --------------------------------- | +| | Se presentó tanto una aplicación web como un notebook, ambos bien documentados y ejecutándose | Uno de esos dos falta o contiene errores | Ambos faltan o están defectuosos | From 561ebda402d4e5db2c7143ae64284e593c11ce3d Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 07:51:59 -0600 Subject: [PATCH 33/67] (spanish) 5-Clustering/1-Visualize/assignment.md (#525) * feat: Add file content to translate * (spanish) 5-Clustering/1-Visualize/assignment.md Translate file `5-Clustering/1-Visualize/assignment.md` to spanish * Improve translation coherence --- .../1-Visualize/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 5-Clustering/1-Visualize/translations/assignment.es.md diff --git a/5-Clustering/1-Visualize/translations/assignment.es.md b/5-Clustering/1-Visualize/translations/assignment.es.md new file mode 100644 index 000000000..decf6c5a1 --- /dev/null +++ b/5-Clustering/1-Visualize/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Investiga otras visualizaciones para agruparlas + +## Instrucciones + +En esta lección, has trabajado con algunas técnicas de visualización para comprender cómo graficar tus datos en preparación para agruparlos. Los gráficos de dispersión son particularmente útiles para encontrar grupos de objetos. Investiga distintas formas y librerías para crear gráficos de dispersión y documenta tu trabajo en un notebook. Puedes usar los datos de esta lección, otras lecciones, o datos que tú mismo proporciones (por favor, dá crédito a su fuente en tu notebook). Grafica algunos datos usando gráficos de dispersión y explica lo que descubras. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | -------------------------------------------------------------- | ---------------------------------------------------------------------------------------- | ----------------------------------- | +| | Se presentó un notebook con cinco gráficos de dispersión bien documentados | Se presentó un notebook con menos de cinco gráficos de dispersión y no está bien documentado | Se presentó un notebook incompleto | From 8c5247f671d086c3ca4f17bd2ca9bd121726982d Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 07:52:27 -0600 Subject: [PATCH 34/67] (spanish) 5-Clustering/2-K-Means/assignment.md (#526) * feat: Add file content to translate * (spanish) 5-Clustering/2-K-Means/assignment.md Translate file `5-Clustering/2-K-Means/assignment.md` to spanish --- 5-Clustering/2-K-Means/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 5-Clustering/2-K-Means/translations/assignment.es.md diff --git a/5-Clustering/2-K-Means/translations/assignment.es.md b/5-Clustering/2-K-Means/translations/assignment.es.md new file mode 100644 index 000000000..8ea2ee540 --- /dev/null +++ b/5-Clustering/2-K-Means/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Prueba distintos métodos de agrupamiento + +## Instrucciones + +En esta lección aprendiste acerca del agrupamiento K-Medias. Algunas veces K-Medias no es apropiado para tus datos. Crea un notebook usando los datos ya sea de estas lecciones o de algún otro lugar (dá crédito a tu fuente) y muestra un método de agrupamiento diferente sin usar K-Medias. ¿Qué aprendiste? + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | --------------------------------------------------------------- | -------------------------------------------------------------------- | ---------------------------- | +| | Se presentó un notebook con un modelo de agrupamiento bien documentado | Se presentó un notebook sin buena documentación y/o incompleto | Se envió un trabajo incompleto | From d05b6c02985f046876df0bd7cfc09baa0512a6fa Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:07:12 -0600 Subject: [PATCH 35/67] (spanish) 8-Reinforcement/2-Gym/assignment.md (#537) * feat: Add file content to translate * (spanish) 8-Reinforcement/2-Gym/assignment.md Translate file `8-Reinforcement/2-Gym/assignment.md` to spanish * Update 8-Reinforcement/2-Gym/translations/assignment.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 8-Reinforcement/2-Gym/translations/assignment.es.md Translation improvement Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 8-Reinforcement/2-Gym/translations/assignment.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 8-Reinforcement/2-Gym/translations/assignment.es.md Translation improvement Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 8-Reinforcement/2-Gym/translations/assignment.es.md Translation improvement Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- .../2-Gym/translations/assignment.es.md | 44 +++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 8-Reinforcement/2-Gym/translations/assignment.es.md diff --git a/8-Reinforcement/2-Gym/translations/assignment.es.md b/8-Reinforcement/2-Gym/translations/assignment.es.md new file mode 100644 index 000000000..4ca3c1a76 --- /dev/null +++ b/8-Reinforcement/2-Gym/translations/assignment.es.md @@ -0,0 +1,44 @@ +# Entrena el carrito de montaña + +[OpenAI Gym](http://gym.openai.com) ha sido diseñado de tal forma que todos los ambientes proveen la misma API - esto es, los mismos métodos `reset`, `step` y `render`, y las mismas abstracciones de **action space** y **observation space**. Así sería posible adaptar los mismos algoritmos de aprendizaje reforzado a diferentes ambientes con mínimos cambios al código. + +## Un ambiente de carrito de montaña + +El [ambiente de carrito de montaña](https://gym.openai.com/envs/MountainCar-v0/) contiene un carrito atrapado en un valle: + + + +El objetivo es salir del valle y capturar la bandera, al hacer a cada paso una de las siguientes acciones: + +| Valor | Significado | +|---|---| +| 0 | Acelerar a la izquierda | +| 1 | No acelerar | +| 2 | Acelerar a la derecha | + +El truco principal de este problema es, no obstante, que el motor del carrito no es lo suficientemente potente para escalar la montaña en una sola pasada. Por lo tanto, la única forma de lograrlo es conducir hacia atrás y adelante para generar impulso. + +El espacio de observación consiste de sólo dos valores: + +| Num | Observación | Min | Max | +|-----|-----------------------|-------|------| +| 0 | Posición del carrito | -1.2 | 0.6 | +| 1 | Velocidad del carrito | -0.07 | 0.07 | + +El sistema de recompensas para el carrito de montaña es engañoso: + +* La recompensa de 0 es otorgada si el agente alcanzó la bandera (posición = 0.5) en la cima de la montaña. +* La recompensa de -1 es otorgada si la posición del agente es menos de 0.5. + +El episodio termina si la posición del carrito es más de 0.5, o la longitud del episodio es mayor que 200. + +## Instrucciones + +Adapta nuestro algoritmo de aprendizaje reforzado para resolver el problema del carrito de montaña. Comienza con el código existente en [notebook.ipynb](../notebook.ipynb), substituye el nuevo ambiente, cambia las funciones de discretización de estado, e intenta hacer que el algoritmo existente entrene con mínimas modificaciones al código. Optimiza el resultado al ajustar los hiperparámetros. + +> **Nota**: Es probable que ajustar los hiperparámetros sea necesario para hacer que el algoritmo converja. +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | --------- | -------- | ----------------- | +| | El algoritmo Q-Learning se adaptó de forma exitosa a partir del ejemplo CartPole, con mínimas modificaciones al código, el cual es capaz de resolver el problema al capturar la bandera con menos de 200 pasos. | Se adoptó un nuevo algoritmo Q-Learning de internet, pero está bien documentado; o se adoptó el algoritmo existente, pero no cumple los resultados deseados | El estudiante no fue capaz de adoptar ningún algoritmo de forma exitosa, pero ha hecho pasos substanciales hacia la solución (implementó la discretización de estado, la estructura de datos de Q-Table, etc.) | From 639b70a00ddefa4d8f05504cb2561d70c2e080fd Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:41:17 -0600 Subject: [PATCH 36/67] (spanish) 4-Classification/2-Classifiers-1/README.md (#540) * feat: Add file content to translate * (spanish) 4-Classification/2-Classifiers-1/README.md Translate file `4-Classification/2-Classifiers-1/README.md` to spanish * style: Fix typos on translation - fix typos - improve coherence on translation --- .../2-Classifiers-1/translations/README.es.md | 245 ++++++++++++++++++ 1 file changed, 245 insertions(+) create mode 100644 4-Classification/2-Classifiers-1/translations/README.es.md diff --git a/4-Classification/2-Classifiers-1/translations/README.es.md b/4-Classification/2-Classifiers-1/translations/README.es.md new file mode 100644 index 000000000..01d91ddab --- /dev/null +++ b/4-Classification/2-Classifiers-1/translations/README.es.md @@ -0,0 +1,245 @@ +# Clasificadores de cocina 1 + +En esta lección, usarás el conjunto de datos que guardaste en la última lección llena de equilibrio, datos limpios todo sobre cocinas. + +Usarás este conjunto de datos con una variedad de clasificadores para _predecir una cocina nacional dada basado en un grupo de ingredientes_. Mientras lo haces, aprenderás más acerca de algunas formas en que los algoritmos pueden ser aprovechados para las tareas de clasificación. + +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/21/) + +# Preparación + +Asumiendo que completaste la [Lección 1](../../1-Introduction/translations/README.es.md), asegura que existe un archivo _cleaned_cuisines.csv_ en el directorio raíz `/data` para estas cuatro lecciones. + +## Ejercicio - predice una cocina nacional + +1. Trabaja en el directorio _notebook.ipynb_ de la lección, importa ese archivo junto con la biblioteca Pandas: + + ```python + import pandas as pd + cuisines_df = pd.read_csv("../data/cleaned_cuisines.csv") + cuisines_df.head() + ``` + + Los datos lucen así: + +| | Unnamed: 0 | cuisine | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| --- | ---------- | ------- | ------ | -------- | ----- | ---------- | ----- | ------------ | ------- | -------- | --- | ------- | ----------- | ---------- | ----------------------- | ---- | ---- | --- | ----- | ------ | -------- | +| 0 | 0 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | indian | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 2 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 3 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 4 | indian | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | + + +1. Ahora, importa varias bibliotecas más: + + ```python + from sklearn.linear_model import LogisticRegression + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + from sklearn.svm import SVC + import numpy as np + ``` + +1. Divide las coordenadas X e Y en dos diferentes dataframes para entrenar. `cuisine` puede ser el dataframe de las etiquetas: + + ```python + cuisines_label_df = cuisines_df['cuisine'] + cuisines_label_df.head() + ``` + + Se verá así: + + ```output + 0 indian + 1 indian + 2 indian + 3 indian + 4 indian + Name: cuisine, dtype: object + ``` + +1. Elimina la columna `Unnamed: 0` y la columna `cuisine`, llamando a `drop()`. Guarda el resto de los datos como características entrenables: + + ```python + cuisines_feature_df = cuisines_df.drop(['Unnamed: 0', 'cuisine'], axis=1) + cuisines_feature_df.head() + ``` + + Tus características lucen así: + +| | almond | angelica | anise | anise_seed | apple | apple_brandy | apricot | armagnac | artemisia | artichoke | ... | whiskey | white_bread | white_wine | whole_grain_wheat_flour | wine | wood | yam | yeast | yogurt | zucchini | +| ---: | -----: | -------: | ----: | ---------: | ----: | -----------: | ------: | -------: | --------: | --------: | ---: | ------: | ----------: | ---------: | ----------------------: | ---: | ---: | ---: | ----: | -----: | -------: | +| 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 3 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | +| 4 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | ... | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | + +¡Ahora ya estás listo para entrenar tu modelo! + +## Eligiendo tu clasificador + +Ahora que tus datos están limpios y listos para entrenamiento, tienes que decidir qué algoritmo usar para hacer el trabajo. + +Scikit-learn agrupa clasificaciones bajo aprendizaje supervisado, y en esa categoría encontrarás muchas formas de clasificar. [La variedad](https://scikit-learn.org/stable/supervised_learning.html) es bastante abrumadora a primera vista. Los siguientes métodos incluyen técnicas de clasificación: + +- Modelos lineales +- Máquinas de vectores de soporte +- Descenso de gradiente estocástico +- Vecinos más cercanos +- Procesos Gaussianos +- Árboles de decisión +- Métodos de conjunto (clasificador de votos) +- Algoritmos multiclase y multisalida (clasificación multiclase y multietiqueta, clasificación multiclase-multisalida) + +> También puedes usar [redes neuronales para clasificar los datos](https://scikit-learn.org/stable/modules/neural_networks_supervised.html#classification), pero eso está fuera del alcance de esta lección. + +### ¿Qué clasificador usar? + +Así que, ¿qué clasificador deberías elegir? A menudo, el ejecutar varios y buscar un buen resultado es una forma de probar. Scikit-lean ofrece una [comparación lado a lado](https://scikit-learn.org/stable/auto_examples/classification/plot_classifier_comparison.html) en un conjunto de datos creado, comparando KNeighbors, SVC two ways, GaussianProcessClassifier, DecisionTreeClassifier, RandomForestClassifier, MLPClassifier, AdaBoostClassifier, GaussianNB y QuadraticDiscrinationAnalysis, mostrando los resultados visualizados: + +![Comparación de clasificadores](../images/comparison.png) +> Gráficos generados en la documentación de Scikit-learn + +> AutoML resuelve este problema de forma pulcra al ejecutar estas comparaciones en la nube, permitiéndote elegir el mejor algoritmo para tus datos. Pruébalo [aquí](https://docs.microsoft.com/learn/modules/automate-model-selection-with-azure-automl/?WT.mc_id=academic-15963-cxa) + +### Un mejor enfoque + +Una mejor forma a estar adivinando, es seguir las ideas de esta [hoja de trucos de ML](https://docs.microsoft.com/azure/machine-learning/algorithm-cheat-sheet?WT.mc_id=academic-15963-cxa). Aquí, descubrimos que, para nuestro problema multiclase, tenemos algunas opciones: + +![Hoja de trucos para problemas multiclase](../images/cheatsheet.png) +> Una sección de la hoja de trucos de algoritmos de Microsoft, detallando opciones de clasificación multiclase. + +✅ ¡Descarga esta hoja de trucos, imprímela y cuélgala en tu pared! + +### Razonamiento + +Veamos si podemos razonar nuestro camino a través de diferentes enfoques dadas las restricciones que tenemos: + +- **Las redes neuronales son muy pesadas**. Dado nuestro conjunto de datos limpio aunque mínimo, y el hecho que estamos ejecutando el entrenamiento de forma local vía los notebooks, las redes neuronales son demasiado pesadas para esta tarea. +- **Sin clasificador de dos clases**. No usamos clasificador de dos clases, por lo que descarta un uno-contra-todos. +- **El árbol de decisión o la regresión logística podría funcionar**. Un árbol de decisión podría funcionar, o la regresión logística para datos multiclase. +- **Los árboles de decisión potenciados multiclase resuelven un problema diferente**. El árbol de decisión potenciado multiclase es el más adecuado para tareas no paramétricas, por ejemplo, las tareas designadas para construir clasificaciones, por lo que no es útil para nosotros. + +### Usando Scikit-learn + +Usaremos Scikit-learn para analizar nuestros datos. Sin embargo, hay varias formas de usar la regresión logística en Scikit-learn. Da un vistazo a los [parámetros a pasar](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + +En esencia, hay dos parámetros importantes - `multi_class` y `solver` - que necesitamos especificar, cuando le pedimos a Scikit-learn realice una regresión logística. El valor `multi_class` aplica cierto comportamiento. El valor del solucionador (`solver`) es el algoritmo a usar. No todos los solucionadores pueden ser emparejados con todos los valores `multi_class`. + +De acuerdo a la documentación, en el caso multiclase, el algoritmo de entrenamiento: + +- **Usa el esquema uno contra el resto (OvsR)**, si la opción `multi_class` se configura a `ovr` +- **Usa la pérdida de entropía cruzada**, si la opción `multi_class` se configura a `multinomial` (Actualmente la opción `multinomial` es soportada sólo por los solucionadores ‘lbfgs’, ‘sag’, ‘saga’ y ‘newton-cg’.). + +> 🎓 Aquí, el 'esquema' puede ser 'ovr' (one-vs-rest) o 'multinomial'. Ya que la regresión logística está diseñada realmente para soportar la clasificación binaria, estos esquemas te permiten manejar mejor las tareas de clasificación multiclase [fuente](https://machinelea +rningmastery.com/one-vs-rest-and-one-vs-one-for-multi-class-classification/). + +> 🎓 El 'solucionador' es definido como "el algoritmo a usar en el problema de optimización" [fuente](https://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html?highlight=logistic%20regressio#sklearn.linear_model.LogisticRegression). + + +Scikit-learn ofrece esta tabla para explicar como los solucionadores manejan distintos desafíos presentados por distintas clases de datos estructurados: + +![solucionadores](../images/solvers.png) + +## Ejercicio - divide los datos + +Nos podemos enfocar en la regresión logística para nuestra primer prueba de entrenamiento ya que recién aprendiste sobre esto último en la lección anterior. +Divide tus datos en los grupos 'training' y 'testing' al llamar a `train_test_split()`: + +```python +X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) +``` + +## Ejercicio - aplica la regresión logística + +Ya que estás usando un caso multiclase, necesitas elegir qué _esquema_ usar y qué _solucionador_ configurar. Usa LogisticRegression con un ajuste multiclase y el solucionador **liblinear** para entrenar. + +1. Crea un regresión logística con un multi_class configurado a `ovr` y el solucionador ajustado a `liblinear`: + + ```python + lr = LogisticRegression(multi_class='ovr',solver='liblinear') + model = lr.fit(X_train, np.ravel(y_train)) + + accuracy = model.score(X_test, y_test) + print ("Accuracy is {}".format(accuracy)) + ``` + + ✅ Prueba un solucionador diferente como `lbfgs`, el cual suele ser configurado por defecto + + > Nota, usa la función de Pandas [`ravel`](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.ravel.html) para aplanar tus datos cuando sea necesario. + + ¡La precisión es buena por enciam del **80%*! + +1. Puedes ver este modelo en acción al probar una fila de datos (#50): + + ```python + print(f'ingredients: {X_test.iloc[50][X_test.iloc[50]!=0].keys()}') + print(f'cuisine: {y_test.iloc[50]}') + ``` + + El resultado es impreso: + + ```output + ingredients: Index(['cilantro', 'onion', 'pea', 'potato', 'tomato', 'vegetable_oil'], dtype='object') + cuisine: indian + ``` + + ✅ Prueba un número de fila distinto y revisa los resultados + +1. Indagando más, puedes revisar la precisión de esta predicción: + + ```python + test= X_test.iloc[50].values.reshape(-1, 1).T + proba = model.predict_proba(test) + classes = model.classes_ + resultdf = pd.DataFrame(data=proba, columns=classes) + + topPrediction = resultdf.T.sort_values(by=[0], ascending = [False]) + topPrediction.head() + ``` + + El resultado es impreso - La cocina India es su mejor conjetura, con buena probabilidad: + + | | 0 | + | -------: | -------: | + | indian | 0.715851 | + | chinese | 0.229475 | + | japanese | 0.029763 | + | korean | 0.017277 | + | thai | 0.007634 | + + ✅ ¿Puedes explicar por qué el modelo está muy seguro de que esta es una cocina India? + +1. Obtén mayor detalle al imprimir un reporte de clasificación, como lo hiciste en las lecciones de regresión: + + ```python + y_pred = model.predict(X_test) + print(classification_report(y_test,y_pred)) + ``` + + | | precision | recall | f1-score | support | + | ------------ | --------- | ------ | -------- | ------- | + | chinese | 0.73 | 0.71 | 0.72 | 229 | + | indian | 0.91 | 0.93 | 0.92 | 254 | + | japanese | 0.70 | 0.75 | 0.72 | 220 | + | korean | 0.86 | 0.76 | 0.81 | 242 | + | thai | 0.79 | 0.85 | 0.82 | 254 | + | accuracy | 0.80 | 1199 | | | + | macro avg | 0.80 | 0.80 | 0.80 | 1199 | + | weighted avg | 0.80 | 0.80 | 0.80 | 1199 | + +## 🚀Desafío + +En esta lección, usaste tus datos limpios para construir un modelo de aprendizaje automático que puede predecir una cocina nacional basado en una serie de ingredientes. Toma un tiempo para leer las diversas opciones que provee Scikit-learn para clasificar los datos. Profundiza en el concepto de 'solucionador' para comprender que sucede detrás de escena. + +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/22/) + +## Revisión y autoestudio + +Indaga un poco más en las matemáticas detrás de la regresión logística en [esta lección](https://people.eecs.berkeley.edu/~russell/classes/cs194/f11/lectures/CS194%20Fall%202011%20Lecture%2006.pdf) + +## Asignación + +[Estudia los solucionadores](assignment.es.md) From f2d23be5f80e98170bacfa87b6bb9f63bb95d411 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:41:59 -0600 Subject: [PATCH 37/67] (spanish) 6-NLP/2-Tasks/assignment.md (#528) * feat: Add file content to translate * (spanish) 6-NLP/2-Tasks/assignment.md Translate file `6-NLP/2-Tasks/assignment.md` to spanish * Update 6-NLP/2-Tasks/translations/assignment.es.md Improve translation coherence Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- 6-NLP/2-Tasks/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 6-NLP/2-Tasks/translations/assignment.es.md diff --git a/6-NLP/2-Tasks/translations/assignment.es.md b/6-NLP/2-Tasks/translations/assignment.es.md new file mode 100644 index 000000000..6895eadab --- /dev/null +++ b/6-NLP/2-Tasks/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Hacer que un Bot responda + +## Instrucciones + +En las lecciones anteriores, programaste un bot básico con el cual chatear. Este bot da respuestas aleatorias hasta que le digas 'bye'. ¿Puedes hacer las respuestas menos aleatorias, y activar respuestas si dices cosas específicas, como 'why' o 'how'? Piensa un poco en cómo el aprendizaje automático puede hacer este tipo de trabajo menos manual a medida que extiendes tu bot. Puedes usar las librerías NLTK o TextBlob para hacer tus tareas más fáciles. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | --------------------------------------------- | ------------------------------------------------ | ----------------------- | +| | Se presentó y documentó un nuevo archivo bot.py | Se presentó un nuevo archivo bot pero contiene fallos | No se presentó un archivo | From 9e878fca3c47a3120187ede1517c390f1fd495bd Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:42:35 -0600 Subject: [PATCH 38/67] (spanish) 8-Reinforcement/1-QLearning/assignment.md (#536) * feat: Add file content to translate * (spanish) 8-Reinforcement/1-QLearning/assignment.md Translate file `8-Reinforcement/1-QLearning/assignment.md` to spanish * Update 8-Reinforcement/1-QLearning/translations/assignment.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 8-Reinforcement/1-QLearning/translations/assignment.es.md translation improvement Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 8-Reinforcement/1-QLearning/translations/assignment.es.md Fix typo Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- .../1-QLearning/translations/assignment.es.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 8-Reinforcement/1-QLearning/translations/assignment.es.md diff --git a/8-Reinforcement/1-QLearning/translations/assignment.es.md b/8-Reinforcement/1-QLearning/translations/assignment.es.md new file mode 100644 index 000000000..62ab9752a --- /dev/null +++ b/8-Reinforcement/1-QLearning/translations/assignment.es.md @@ -0,0 +1,27 @@ +# Un mundo más realista + +En nuestro caso, Pedro (Peter) fue capaz de moverse y casi sin cansarse o estar hambriento. En un mundo más realista, él tiene que sentarse y descansar de vez en cuando, así como también alimentarse. Hagamos nuestro mundo más realista, al implementar las siguientes reglas: + +1. Al moverse de un lugar a otro, Pedro pierde **energía** y obtiene algo de **fatiga**. +2. Pedro puede adquirir más energía al comer manzanas. +3. Pedro puede deshacerse de la fatiga al descansar bajo un árbol o en el pasto (ej. caminar en una ubicación del tablero con un árbol o pasto - campo verde) +4. Pedro necesita encontrar y matar al lobo +5. Con el fin de matar al lobo, Pedro necesita tener ciertos niveles de energía y fatiga, de lo contrario pierde la batalla. + +## Instrucciones + +Usa el notebook original [notebook.ipynb](../notebook.ipynb) como punto de partida para tu solución. + +Modifica la función reward de arriba de acuerdo a las reglas del juego, ejecuta el algoritmo de aprendizaje reforzado para aprender la mejor estrategia para ganar el juego, y compara los resultados de caminata aleatoria con tu algoritmo en términos de el número de juegos ganados y perdidos. + +> **Nota**: En tu nuevo mundo, el estado es más complejo, y además a la posición humana también incluye la fatiga y los niveles de energía. Puedes optar por representar el estado como una tupla (tablero, energía, fatiga), o definir una clase para el estado (también puedes querer derivarlo de `Board`), o incluso modifica la clase original `Board` dentro de [rlboard.py](../rlboard.py). + +En tu solución, mantén el código responsable de la estrategia de caminata aleatoria, y compara los resultados de tu algoritmo con la caminata aleatoria al final. + +> **Nota**: Puedes necesitar ajustar los hiperparámetros para hacerlo funcionar, especialmente el número de épocas. Porque el éxito del juego (pelear contra el lobo) es un evento raro, puedes esperar un tiempo de entrenamiento mayor. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | +| | Se presentó un notebook con la definición de las nuevas reglas del mundo. El algoritmo Q-Learning y algunas explicaciones textuales. Q-Learning es capaz de mejorar significativamente los resultados comparado con la caminata aleatoria. | Se presentó un notebook, Q-Learning se implementó y mejoró los resultados comparado con la caminata aleatoria, pero no de forma significativa; o el notebook está pobremente documentado y el código no está bien estructurado | Se hicieron algunos intentos para redefinir las reglas del mundo, pero el algoritmo de Q-Learning no funciona, o la función reward no está totalmente definida | From aa2748e999755342079e6b5c1178281c20dab2a6 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:43:12 -0600 Subject: [PATCH 39/67] (spanish) 6-NLP/3-Translation-Sentiment/assignment.md (#530) * feat: Add file content to translate * (spanish) 6-NLP/3-Translation-Sentiment/assignment.md Translate file `6-NLP/3-Translation-Sentiment/assignment.md` to spanish * style: Fix typo --- .../translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 6-NLP/3-Translation-Sentiment/translations/assignment.es.md diff --git a/6-NLP/3-Translation-Sentiment/translations/assignment.es.md b/6-NLP/3-Translation-Sentiment/translations/assignment.es.md new file mode 100644 index 000000000..652725905 --- /dev/null +++ b/6-NLP/3-Translation-Sentiment/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Licencia poética + +## Instrucciones + +En [este notebook](https://www.kaggle.com/jenlooper/emily-dickinson-word-frequency) puedes encontrar más de 500 poemas de Emily Dickinson previamente analizados por sentimiento usando análisis de texto de Azure. Usando este conjunto de datos, analízalo usando las técnicas descritas en la lección. ¿El sentimiento sugerido de un poema coincide con la decisión más sofisticada del servicio de Azure? ¿En tu opinión por qué o por qué no? ¿Algo te sorprende? + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | -------------------------------------------------------------------------- | ------------------------------------------------------- | ------------------------ | +| | Se presentó un notebook con un análisis sólido de una muestra de salida del autor | El notebook se presenta incompleto o no ejecuta el análisis | No se presentó un notebook | From b04d0453b43564e5e7da49ae8ca5f97ed109128e Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:43:44 -0600 Subject: [PATCH 40/67] (spanish) 6-NLP/4-Hotel-Reviews-1/assignment.md (#531) * Add file content to translate * (spanish) 6-NLP/4-Hotel-Reviews-1/assignment.md Translate file `6-NLP/4-Hotel-Reviews-1/assignment.md` to spanish * Update 6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md Improve translation coherence Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- 6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md diff --git a/6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md b/6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md new file mode 100644 index 000000000..16f2ae366 --- /dev/null +++ b/6-NLP/4-Hotel-Reviews-1/translations/assignment.es.md @@ -0,0 +1,5 @@ +# NLTK + +## Instrucciones + +NLTK es una biblioteca bien conocida para su uso en lingüística computacional y NLP. Toma esta oportunidad para leer el '[libro NLTK](https://www.nltk.org/book/)' y prueba sus ejercicios. En esta asignación sin ponderación, conocerás esta biblioteca más a fondo. From c7481fdb6994ee74dbb4024f92aee0cd764f3931 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:44:00 -0600 Subject: [PATCH 41/67] (spanish) 6-NLP/5-Hotel-Reviews-2/assignment.md (#532) * feat: Add file content to translate * (spanish) 6-NLP/5-Hotel-Reviews-2/assignment.md Translate file `6-NLP/5-Hotel-Reviews-2/assignment.md` to spanish * Update 6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- 6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md diff --git a/6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md b/6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md new file mode 100644 index 000000000..1bae2aac9 --- /dev/null +++ b/6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Prueba un conjunto de datos diferente + +## Instrucciones + +Ahora que has aprendido acerca del uso de NLTK para asignar sentimiento al texto, prueba un conjunto de datos diferente. Probablemente necesitarás hacer algo más de procesamiento de datos, por lo cual, crear un notebook y documenta tu proceso de pensamiento. ¿Qué descubriste? + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ----------------------------------------------------------------------------------------------------------------- | ----------------------------------------- | ---------------------- | +| | Se presentó tanto un notebook como un conjunto de datos con celdas bien documentadas explicando cómo se asignó el sentimiento | Al notebook le faltan buenas explicaciones | El notebook es defectuoso | From 6910b60e3b512d5fbf3deed1f2ff095b71e5f75b Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:44:13 -0600 Subject: [PATCH 42/67] (spanish) 7-TimeSeries/1-Introduction/assignment.md (#533) * feat: Add file content to translate * (spanish) 6-NLP/5-Hotel-Reviews-2/assignment.md Translate file `6-NLP/5-Hotel-Reviews-2/assignment.md` to spanish * feat: Add file content to translate * (spanish) 7-TimeSeries/1-Introduction/assignment.md Translate file `7-TimeSeries/1-Introduction/assignment.md` to spanish * Update 6-NLP/5-Hotel-Reviews-2/translations/assignment.es.md Fix typo on title Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 7-TimeSeries/1-Introduction/translations/assignment.es.md Improve translation on paragraph Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update 7-TimeSeries/1-Introduction/translations/assignment.es.md Fix error on translation Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- .../1-Introduction/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 7-TimeSeries/1-Introduction/translations/assignment.es.md diff --git a/7-TimeSeries/1-Introduction/translations/assignment.es.md b/7-TimeSeries/1-Introduction/translations/assignment.es.md new file mode 100644 index 000000000..067fedaf8 --- /dev/null +++ b/7-TimeSeries/1-Introduction/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Visualiza algunas series de tiempo más + +## Instrucciones + +Has comenzado a aprender acerca de la predicción de series de tiempo al mirar el tipo de datos que requiere este modelado especial. Ya has visualizado algunos datos referentes a la energía. Ahora, busca otros datos que te beneficiarían de la predicción de series de tiempo. Encuentra tres ejemplos (prueba [Kaggle](https://kaggle.com) y [Azure Open Datasets](https://azure.microsoft.com/en-us/services/open-datasets/catalog/?WT.mc_id=academic-15963-cxa)) y crea un notebook para visualizarlos. Anota cualquier característica especial que tengan (estacionalidad, cambios abruptos, u otras tendencias) en el notebook. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ------------------------------------------------------ | ---------------------------------------------------- | ----------------------------------------------------------------------------------------- | +| | Se graficaron y explicaron tres conjuntos de datos en un notebook | Se graficaron y explicaron dos conjuntos de datos en un notebook | Se graficaron y explicaron pocos conjuntos de datos en un notebook o los datos presentados fueron insuficientes | From c4f3aaa1439d8a611a80e9e9f86ca050cb3916a2 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:44:45 -0600 Subject: [PATCH 43/67] (spanish) 7-TimeSeries/README.md (#527) * feat: Add file content to translate * (spanish) 7-TimeSeries/README.md Translate file `7-TimeSeries/README.md` to spanish * Update 7-TimeSeries/translations/README.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- 7-TimeSeries/translations/README.es.md | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 7-TimeSeries/translations/README.es.md diff --git a/7-TimeSeries/translations/README.es.md b/7-TimeSeries/translations/README.es.md new file mode 100644 index 000000000..20509f9b1 --- /dev/null +++ b/7-TimeSeries/translations/README.es.md @@ -0,0 +1,23 @@ +# Introducción a la predicción de series de tiempo + +¿Qué es la predicción de series de tiempo? Se trata de predecir eventos futuros al analizar las tendencias del pasado. + +## Tema regional: Uso de la electricidad en el mundo ✨ + +En estas dos lecciones, se te presentará la predicción de series de tiempo, un área algo menos conocida del aprendizaje automático que sin embargo es extremadamente valiosa para la industria y aplicaciones empresariales, entre otros campos. Mientras las redes neuronales pueden ser usadas para mejorar la utilidad de estos modelos, las estudiaremos en el contexto del aprendizaje automático clásico como modelos que ayudan a predecir el desempeño futuro basado en el pasado. + +Nuestro enfoque regional es el uso de la electricidad en el mundo, un conjunto de datos interesante para aprender a predecir el uso de la energía a futuro basado en patrones de cargas pasadas. Puedes ver cómo esta clase de predicción puede ser extremadamente útil en un entorno empresarial. + +![Red eléctrica](../images/electric-grid.jpg) + +Fotografía de [Peddi Sai hrithik](https://unsplash.com/@shutter_log?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) de torres eléctricas en una carretera en Rajasthan en [Unsplash](https://unsplash.com/s/photos/electric-india?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText) + +## Lecciones + +1. [Introducción a la predicción de series de tiempo](../1-Introduction/README.md) +2. [Construyendo modelos de series de tiempo con ARIMA](../2-ARIMA/README.md) +3. [Construyendo un Regresor de Soporte Vectorial para la predicción de series de tiempo](../3-SVR/README.md) + +## Créditos + +"Introducción a la predicción de series de tiempo" fue escrito con ⚡️ por [Francesca Lazzeri](https://twitter.com/frlazzeri) y [Jen Looper](https://twitter.com/jenlooper). Los notebooks aparecieron primero en el [repo de Azure "Aprendizaje profundo para series de tiempo"](https://github.com/Azure/DeepLearningForTimeSeriesForecasting) originalmente escrito por Francesca Lazzeri. La lección de SVR fue escrita por [Anirban Mukherjee](https://github.com/AnirbanMukherjeeXD) From b8e4bb62c8343522eb9a0f0689de729361c4c13f Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Thu, 24 Feb 2022 10:45:20 -0600 Subject: [PATCH 44/67] (spanish) 7-TimeSeries/3-SVR/assignment.md (#535) * feat: Add file content to translate * (spanish) 7-TimeSeries/3-SVR/assignment.md Translate file `7-TimeSeries/3-SVR/assignment.md` to spanish * Improve translation coherence --- 7-TimeSeries/3-SVR/translations/assignment.es.md | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 7-TimeSeries/3-SVR/translations/assignment.es.md diff --git a/7-TimeSeries/3-SVR/translations/assignment.es.md b/7-TimeSeries/3-SVR/translations/assignment.es.md new file mode 100644 index 000000000..ec343391d --- /dev/null +++ b/7-TimeSeries/3-SVR/translations/assignment.es.md @@ -0,0 +1,13 @@ +# Un nuevo modelo SVR + +## Instrucciones [^1] + +Ahora que has construido un modelo SVR, construye uno nuevo con datos frescos (prueba uno de [estos conjuntos de datos de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anota tu trabajo en un notebook. Visualiza los datos y tu modelo, y prueba su precisión usando MAPE y gráficos apropiados. También prueba ajustando distintos hiperparámetros y valores para los pasos de tiempo. + +## Rúbrica [^1] + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ------------------------------------------------------------ | --------------------------------------------------------- | ----------------------------------- | +| | Se presentó un notebook on un modelo SVR construido, probado y explicado con visualizaciones y precisión declarada. | El notebook presentado no está anotado o contiene errores. | Se presentó un notebook incompleto. | + +[^1]:El texto en esta sección se basó en la [asignación de ARIMA](https://github.com/microsoft/ML-For-Beginners/tree/main/7-TimeSeries/2-ARIMA/assignment.md) From 1ab72444f9a6a9864b870857b7f552dfe7e03c2c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 1 Mar 2022 10:39:51 -0500 Subject: [PATCH 45/67] build(deps): bump url-parse from 1.5.7 to 1.5.10 in /quiz-app (#547) Bumps [url-parse](https://github.com/unshiftio/url-parse) from 1.5.7 to 1.5.10. - [Release notes](https://github.com/unshiftio/url-parse/releases) - [Commits](https://github.com/unshiftio/url-parse/compare/1.5.7...1.5.10) --- updated-dependencies: - dependency-name: url-parse dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- quiz-app/package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/quiz-app/package-lock.json b/quiz-app/package-lock.json index 86604a6b4..de747c321 100644 --- a/quiz-app/package-lock.json +++ b/quiz-app/package-lock.json @@ -13720,9 +13720,9 @@ } }, "node_modules/url-parse": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.7.tgz", - "integrity": "sha512-HxWkieX+STA38EDk7CE9MEryFeHCKzgagxlGvsdS7WBImq9Mk+PGwiT56w82WI3aicwJA8REp42Cxo98c8FZMA==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "dependencies": { "querystringify": "^2.1.1", @@ -26153,9 +26153,9 @@ } }, "url-parse": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.7.tgz", - "integrity": "sha512-HxWkieX+STA38EDk7CE9MEryFeHCKzgagxlGvsdS7WBImq9Mk+PGwiT56w82WI3aicwJA8REp42Cxo98c8FZMA==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "requires": { "querystringify": "^2.1.1", From 27157448e0aefb0fc9c7146a622736536790f015 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 5 Mar 2022 15:28:36 -0500 Subject: [PATCH 46/67] build(deps): bump prismjs from 1.25.0 to 1.27.0 (#545) Bumps [prismjs](https://github.com/PrismJS/prism) from 1.25.0 to 1.27.0. - [Release notes](https://github.com/PrismJS/prism/releases) - [Changelog](https://github.com/PrismJS/prism/blob/master/CHANGELOG.md) - [Commits](https://github.com/PrismJS/prism/compare/v1.25.0...v1.27.0) --- updated-dependencies: - dependency-name: prismjs dependency-type: indirect ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- package-lock.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d0177992..2e69ed80d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1436,9 +1436,9 @@ "dev": true }, "prismjs": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.25.0.tgz", - "integrity": "sha512-WCjJHl1KEWbnkQom1+SzftbtXMKQoezOCYs5rECqMN+jP+apI7ftoflyqigqzopSO3hMhTEb0mFClA8lkolgEg==", + "version": "1.27.0", + "resolved": "https://registry.npmjs.org/prismjs/-/prismjs-1.27.0.tgz", + "integrity": "sha512-t13BGPUlFDR7wRB5kQDG4jjl7XeuH6jbJGt11JHPL96qwsEHNX2+68tFXqc1/k+/jALsbSWJKUOT/hcYAZ5LkA==", "dev": true }, "process-nextick-args": { From 88e842ac5c7c130f2a708b206459e3922939adf2 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 8 Mar 2022 10:12:45 -0600 Subject: [PATCH 47/67] (spanish) 7-TimeSeries/2-ARIMA/assignment.md (#534) * feat: Add file content to translate * (spanish) 7-TimeSeries/2-ARIMA/assignment.md Translate file `7-TimeSeries/2-ARIMA/assignment.md` to spanish --- 7-TimeSeries/2-ARIMA/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 7-TimeSeries/2-ARIMA/translations/assignment.es.md diff --git a/7-TimeSeries/2-ARIMA/translations/assignment.es.md b/7-TimeSeries/2-ARIMA/translations/assignment.es.md new file mode 100644 index 000000000..cefa78074 --- /dev/null +++ b/7-TimeSeries/2-ARIMA/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Un nuevo modelo ARIMA + +## Instrucciones + +Ahora que has construido un modelo de ARIMA, construye uno nuevo con datos frescos (prueba uno de [estos conjuntos de datos de Duke](http://www2.stat.duke.edu/~mw/ts_data_sets.html)). Anota tu trabajo en un notebook, visualiza los datos y tu modelo, y prueba su precisión usando MAPE. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------- | ----------------------------------- | +| | Se presentó un notebook con nuevo modelo de ARIMA construido, probado y explicado con visualizaciones y precisión declarada. | El notebook presentado no está anotado o contiene bugs | Se presentó un notebook incompleto | From d7b0e4e313cd1239a542df5ff87e37f7e7a9c230 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 8 Mar 2022 10:13:37 -0600 Subject: [PATCH 48/67] (spanish) 4-Classification/3-Classifiers-2/README.md (#541) * feat: Add file content to translate * (spanish) 4-Classification/3-Classifiers-2/README.md Translate file `4-Classification/3-Classifiers-2/README.md` to spanish --- .../3-Classifiers-2/translations/README.es.md | 234 ++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 4-Classification/3-Classifiers-2/translations/README.es.md diff --git a/4-Classification/3-Classifiers-2/translations/README.es.md b/4-Classification/3-Classifiers-2/translations/README.es.md new file mode 100644 index 000000000..3dc16d82e --- /dev/null +++ b/4-Classification/3-Classifiers-2/translations/README.es.md @@ -0,0 +1,234 @@ +# Clasificadores de cocina 2 + +En esta segunda lección de clasificación, explorarás más formas de clasificar datos numéricos. También aprenderás acerca de las ramificaciones para elegir un clasificador en lugar de otro. + +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/23/) + +### Prerrequisito + +Asumimos que has completado las lecciones anteriores y has limpiado el conjunto de datos en tu directorio `data` llamado _cleaned_cuisines.csv_ en la raíz de este directorio 4-lesson. + +### Preparación + +Hemos cargado tu archivo _notebook.ipynb_ con el conjunto de datos limpio y lo hemos dividido en los dataframes X e Y, listo para el proceso de construcción del modelo. + +## Un mapa de clasificación + +Anteriormente, aprendiste acerca de las distintas opciones que tienes al clasificar los datos usando la hoja de trucos de Microsoft. Scikit-learn ofrece algo similar, pero la hoja de trucos es más granular que puede ayudar a reducir tus estimadores (otro término para clasificadores): + +![Mapa de aprendizaje automático de Scikit-learn](../images/map.png) +> Consejo: [Visita este mapa en línea](https://scikit-learn.org/stable/tutorial/machine_learning_map/) y haz clic en la ruta para leer la documentación. + +### El plan + +Este mapa es muy útil una vez que tengas una compresión clara de tus datos, como puedas 'caminar' junto a sus rutas para una decisión: + +- Tenemos >50 muestras +- Queremos predecir una categoría +- Tenemos datos etiquetados +- Tenemos menos de 100K muestras +- ✨ Podemos elegir un SVC lineal +- Si eso no funciona, ya que tenemos datos numéricos + - Podemos probar un ✨ clasificador KNeighbors + - Si eso no funciona, intenta los clasificadores ✨ SVC y ✨ conjunto + +Este es un camino muy útil a seguir. + +## Ejercicio - divide los datos + +Siguiendo este camino, deberías empezar importando algunas bibliotecas a usar. + +1. Importa las bibliotecas necesarias: + + ```python + from sklearn.neighbors import KNeighborsClassifier + from sklearn.linear_model import LogisticRegression + from sklearn.svm import SVC + from sklearn.ensemble import RandomForestClassifier, AdaBoostClassifier + from sklearn.model_selection import train_test_split, cross_val_score + from sklearn.metrics import accuracy_score,precision_score,confusion_matrix,classification_report, precision_recall_curve + import numpy as np + ``` + +1. Divide tus datos de entrenamiento y prueba: + + ```python + X_train, X_test, y_train, y_test = train_test_split(cuisines_feature_df, cuisines_label_df, test_size=0.3) + ``` + +## Clasificador lineal SVC + +El agrupamiento de vectores de soporte (SVC) es un hijo de la familia de máquinas de vectores de soporte de las técnicas de aprendizaje automático (aprende más acerca de estos más adelante). En este método, puedes elegir un 'kernel' para decidir cómo agrupar las etiquetas. El parámetro 'C' se refiere a 'regularization' el cual regula la influencia de los parámetros. El kernel puede ser uno de [varios](https://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html#sklearn.svm.SVC); aquí lo configuramos a 'linear' para asegurar que aprovechamos la clasificación lineal SVC. La probabilidad por defecto es 'false'; aquí lo configuramos a 'true' para reunir estimaciones de probabilidad. Configuramos el estado aleatorio a '0' para revolver los datos para obtener probabilidades. + +### Ejercicio - aplica SVC lineal + +Comienza creando un arreglo de clasificadores. Agregarás progresivamente a este arreglo mientras probamos. + +1. Empieza con un SVC lineal: + + ```python + C = 10 + # Create different classifiers. + classifiers = { + 'Linear SVC': SVC(kernel='linear', C=C, probability=True,random_state=0) + } + ``` + +2. Entrena tu modelo usando el SVC lineal e imprime un reporte: + + ```python + n_classifiers = len(classifiers) + + for index, (name, classifier) in enumerate(classifiers.items()): + classifier.fit(X_train, np.ravel(y_train)) + + y_pred = classifier.predict(X_test) + accuracy = accuracy_score(y_test, y_pred) + print("Accuracy (train) for %s: %0.1f%% " % (name, accuracy * 100)) + print(classification_report(y_test,y_pred)) + ``` + + El resultado es bastante bueno: + + ```output + Accuracy (train) for Linear SVC: 78.6% + precision recall f1-score support + + chinese 0.71 0.67 0.69 242 + indian 0.88 0.86 0.87 234 + japanese 0.79 0.74 0.76 254 + korean 0.85 0.81 0.83 242 + thai 0.71 0.86 0.78 227 + + accuracy 0.79 1199 + macro avg 0.79 0.79 0.79 1199 + weighted avg 0.79 0.79 0.79 1199 + ``` + +## Clasificador K-Neighbors + +K-neighbors es parte de la familia de "vecinos" de métodos de aprendizaje automático, el cual puede ser usado para el aprendizaje supervisado y no supervisado. En este método, se crea un número predefinido de puntos y se reúnen los datos alrededor de estos puntos de modo que se puedan predecir etiquetas generalizadas para los datos. + +### Ejercicio - aplica el clasificador K-Neighbors + +El clasificador previo era bueno, y funcionó bien con los datos, pero quizá podemos obtener mejor precisión. Prueba el clasificador K-Neighbors. + +1. Agrega una línea a tu arreglo de clasificadores (agrega una coma después del elemento Linear SVC): + + ```python + 'KNN classifier': KNeighborsClassifier(C), + ``` + + El resultado es ligeramente peor: + + ```output + Accuracy (train) for KNN classifier: 73.8% + precision recall f1-score support + + chinese 0.64 0.67 0.66 242 + indian 0.86 0.78 0.82 234 + japanese 0.66 0.83 0.74 254 + korean 0.94 0.58 0.72 242 + thai 0.71 0.82 0.76 227 + + accuracy 0.74 1199 + macro avg 0.76 0.74 0.74 1199 + weighted avg 0.76 0.74 0.74 1199 + ``` + + ✅ Aprende acerca de [K-Neighbors](https://scikit-learn.org/stable/modules/neighbors.html#neighbors) + +## Clasificador de vectores de soporte + +Los clasificadores de vectores de soporte son parte de la familia de [máquinas de vectores de soporte (SVM)](https://wikipedia.org/wiki/Support-vector_machine) de métodos de aprendizaje automático que son usados para las tareas de clasificación y regresión. Los SVMs "asignan ejemplos de entrenamiento a puntos en el espacio" para maximizar la distancia entre dos categorías. Los datos subsecuentes son asignados en este espacio para que su categoría pueda ser predecida. + +### Ejercicio - aplica un clasificador de vectores de soporte + +Intentemos un poco más de precisión con un clasificador de vectores de soporte. + +1. Agrega una coma después del elemento K-Neighbors, y luego agrega esta línea: + + ```python + 'SVC': SVC(), + ``` + + ¡El resultado es bastante bueno! + + ```output + Accuracy (train) for SVC: 83.2% + precision recall f1-score support + + chinese 0.79 0.74 0.76 242 + indian 0.88 0.90 0.89 234 + japanese 0.87 0.81 0.84 254 + korean 0.91 0.82 0.86 242 + thai 0.74 0.90 0.81 227 + + accuracy 0.83 1199 + macro avg 0.84 0.83 0.83 1199 + weighted avg 0.84 0.83 0.83 1199 + ``` + + ✅ Aprende acerca de los [vectores de soporte](https://scikit-learn.org/stable/modules/svm.html#svm) + +## Clasificadores de conjuntos + +Sigamos el camino hasta el final, aunque la prueba anterior fue bastante buena. Probemos algunos clasificadores de conjuntos, específicamente Random Forest y AdaBoost: + +```python + 'RFST': RandomForestClassifier(n_estimators=100), + 'ADA': AdaBoostClassifier(n_estimators=100) +``` + +El resultado es muy bueno, especialmente para Random Forest: + +```output +Accuracy (train) for RFST: 84.5% + precision recall f1-score support + + chinese 0.80 0.77 0.78 242 + indian 0.89 0.92 0.90 234 + japanese 0.86 0.84 0.85 254 + korean 0.88 0.83 0.85 242 + thai 0.80 0.87 0.83 227 + + accuracy 0.84 1199 + macro avg 0.85 0.85 0.84 1199 +weighted avg 0.85 0.84 0.84 1199 + +Accuracy (train) for ADA: 72.4% + precision recall f1-score support + + chinese 0.64 0.49 0.56 242 + indian 0.91 0.83 0.87 234 + japanese 0.68 0.69 0.69 254 + korean 0.73 0.79 0.76 242 + thai 0.67 0.83 0.74 227 + + accuracy 0.72 1199 + macro avg 0.73 0.73 0.72 1199 +weighted avg 0.73 0.72 0.72 1199 +``` + +✅ Aprende acerca de los [clasificadores de conjuntos](https://scikit-learn.org/stable/modules/ensemble.html) + +Este método de aprendizaje automático "combina las predicciones de varios estimadores base" para mejorar la calidad del modelo. En nuestro ejemplo, usamos Random Trees y AdaBoost. + +- [Random Forest](https://scikit-learn.org/stable/modules/ensemble.html#forest), un método de promedio, construye un 'bosque' de 'árboles de decisión' infundido con aleatoriedad para evitar sobreajuste. El parámetro n_estimators es configurado a el número de árboles. +- [AdaBoost](https://scikit-learn.org/stable/modules/generated/sklearn.ensemble.AdaBoostClassifier.html) ajusta un clasificador a un conjunto de datos y luego ajusta copias de ese clasificador a el mismo conjunto de datos. Se enfoca en los pesos de los elementos clasificados erróneamente y realiza el ajuste para que el siguiente clasificador lo corrija. + +--- + +## 🚀Desafío + +Cada una de estas técnicas tiene un gran número de parámetros que puedes modificar. Investiga los parámetros predeterminados de cada uno y piensa en lo que significaría el ajuste de estos parámetros para la calidad del modelo. + +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/24/) + +## Revisión y autoestudio + +Existe mucha jerga en esta lecciones, ¡así que toma unos minutos para revisar [esta lista](https://docs.microsoft.com/dotnet/machine-learning/resources/glossary?WT.mc_id=academic-15963-cxa) de términos útiles! + +## Asignación + +[Juego de parámetros](assignment.es.md) From 88e7c41c0c89a55e90a6bfb4d3e866edcb222619 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Tue, 8 Mar 2022 10:14:18 -0600 Subject: [PATCH 49/67] (spanish) README.md (#538) * feat: Add file content to translate * (spanish) README.md Translate file `README.md` to spanish * Update translations/README.es.md Excellent! Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update translations/README.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update translations/README.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update translations/README.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update translations/README.es.md Improves paragraph coherence. Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * Update translations/README.es.md Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> * feat: Add translation improvements Thanks @abrildur Co-authored-by: Steven Jocol <53009062+Stevengez@users.noreply.github.com> --- translations/README.es.md | 133 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 133 insertions(+) create mode 100644 translations/README.es.md diff --git a/translations/README.es.md b/translations/README.es.md new file mode 100644 index 000000000..c56e79eb0 --- /dev/null +++ b/translations/README.es.md @@ -0,0 +1,133 @@ +[![GitHub license](https://img.shields.io/github/license/microsoft/ML-For-Beginners.svg)](https://github.com/microsoft/ML-For-Beginners/blob/master/LICENSE) +[![GitHub contributors](https://img.shields.io/github/contributors/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/graphs/contributors/) +[![GitHub issues](https://img.shields.io/github/issues/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/issues/) +[![GitHub pull-requests](https://img.shields.io/github/issues-pr/microsoft/ML-For-Beginners.svg)](https://GitHub.com/microsoft/ML-For-Beginners/pulls/) +[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) + +[![GitHub watchers](https://img.shields.io/github/watchers/microsoft/ML-For-Beginners.svg?style=social&label=Watch)](https://GitHub.com/microsoft/ML-For-Beginners/watchers/) +[![GitHub forks](https://img.shields.io/github/forks/microsoft/ML-For-Beginners.svg?style=social&label=Fork)](https://GitHub.com/microsoft/ML-For-Beginners/network/) +[![GitHub stars](https://img.shields.io/github/stars/microsoft/ML-For-Beginners.svg?style=social&label=Star)](https://GitHub.com/microsoft/ML-For-Beginners/stargazers/) + +# Aprendizaje automático para principiantes - Un plan de estudios + +> 🌍 Viaja alrededor del mundo mientras exploramos el aprendizaje automático a través de las culturas del mundo 🌍 + +Los defensores de Azure Cloud en Microsoft están complacidos en ofrecer un plan de estudios de 12 semanas, con 26 lecciones, todas acerca del **aprendizaje automático**. En este plan de estudios, aprenderás acerca de lo que algunas veces es llamado **aprendizaje automático clásico**, usando principalmente Scikit-learn y evitando el aprendizaje profundo, el cual se aborda en nuestro próximo plan de estudios 'IA para principiantes'. ¡También acompaña estas lecciones con nuestro [plan de estudios 'Ciencia de Datos para principiantes'](https://aka.ms/datascience-beginners)! + +Viaja con nosotros alrededor del mundo mientras aplicamos estas técnicas clásicas a los datos de distintas áreas del mundo. Cada lección incluye: + +- Exámenes previos y posteriores a cada lección +- Instrucciones escritas para completar dicha lección +- Una solución +- Una tarea y más + +Nuestra enseñanza basada en proyectos, te permite aprender mientras practicas; esta es una forma aprobada para que adquieras nuevas habilidades. + +**✍️ Agradecimientos encarecidos** a Jen Looper, Stephen Howell, Francesca Lazzeri, Tomomi Imura, Cassie Breviu, Dmitry Soshnikov, Chris Noring, Anirban Mukherjee, Ornella Altunyan, y Amy Boyd. + +**🎨 Gracias también a nuestros ilustradores** Tomomi Imura, Dasani Madipalli, y Jen Looper. + +**🙏 Agradecimientos especiales 🙏 a nuestros autores de Embajadores Estudiantiles de Microsoft, revisores, y colaboradores de contenido**, notablemente a Rishit Dagli, Muhammad Sakib Khan Inan, Rohan Raj, Alexandru Petrescu, Abhishek Jaiswal, Nawrin Tabassum, Ioan Samuila, y Snigdha Agarwal. + +**🤩 ¡Agradecimiento adicional al embajador estudiantil de Microsoft Eric Wanjau por nuestras lecciones de R!** + +--- + +# Empezando + +**Estudiantes**, para usar este plan de estudios, realiza un fork del repositorio completo en tu cuenta de Github y completa los ejercicios por ti mismo o en grupo: + +- Comienza con un examen previo a la lección. +- Lee las lecciones y completa las actividades, pausando y reflexionando en cada verificación de conocimiento. +- Intenta crear los proyectos al comprender las lecciones en lugar de ejecutar el código de la solución; sin embargo ese código se encuentra disponible en los directorios `/solution` en cada lección orientada a proyecto. +- Realiza el examen posterior a la lección. +- Completa el desafío. +- Completa la asignación. +- Después de completar un grupo de lecciones, visita el [tablero de discusión](https://github.com/microsoft/ML-For-Beginners/discussions) y "aprende en voz alta" llenando la rúbrica PAT apropiada. Un 'PAT' es una herramienta de evaluación del progreso que es una rúbrica la cual llenas para avanzar en tu aprendizaje. También puede reaccionar a otros PATs y así aprender juntos. + +> Para aprender más, recomendamos seguir estos módulos y rutas de aprendizaje de [Microsoft Learn](https://docs.microsoft.com/en-us/users/jenlooper-2911/collections/k7o7tg1gp306q4?WT.mc_id=academic-15963-cxa). + +**Profesores**, hemos [incluido algunas sugerencias](../for-teachers.md) de cómo usar este plan de estudios. + +--- + +## Conoce al equipo + +[![Video promocional](../ml.gif)](https://youtu.be/Tj1XWrDSYJU "Video promocional") + +**Gif de** [Mohit Jaisal](https://linkedin.com/in/mohitjaisal) + +> 🎥 ¡Da clic a la imagen de arriba para ver un video acerca del proyecto y la gente que lo creó! + +--- + +## Pedagogía + +Hemos elegido dos principios pedagógicos mientras construimos este plan de estudios: asegurar que es práctico **basado en proyectos** y que incluye **exámenes frecuentes**. Además, este plan de estudios tiene un **tema** común para darle cohesión. + +Al asegurar que el contenido se alinea con los proyectos, el proceso se hace más atractivo par los estudiantes y la retención de conceptos incrementará. Además, un pequeño examen antes de cada clase para establecer la intención del estudiante de aprender un tema, mientras el segundo examen después de la clase asegura una mayor retención. Este plan de estudios fue diseñado para ser flexible y divertido y puede se tomado en su totalidad o en partes. Los proyectos comienzan pequeños y van incrementando en complejidad al final del ciclo de 12 semanas. Este plan de estudios también incluye una nota al final sobre aplicaciones del aprendizaje automático en el mundo real, la cual puede ser usada como cŕeditos extra o como base para discusión. + +> Encuentra nuestros lineamientos de [Código de conducta](../CODE_OF_CONDUCT.md), [Contribución](../CONTRIBUTING.md), y [Traducción](../TRANSLATIONS.md). ¡Son bienvenidos tus comentarios constructivos! + +## Cada lección incluye: + +- boceto opcional +- video suplementario opcional +- examen de calentamiento previo a la lección +- lección escrita +- para lecciones basadas en proyectos, guías paso a paso de cómo construir el proyecto +- verificaciones de conocimiento +- un desafío +- lectura suplementaria +- asignación +- examen posterior a la lección + +> **Una nota acerca de los lenguajes**: Estas lecciones están escritas principalmente en Python, pero muchas también están disponibles en R. Para completar una lección en R, ve al directorio `/solution` y busca las lecciones. Ellas incluyen una extensión .rmd que representa un archivo **Markdown R** el cual puede ser definido simplemente como `porciones de código` embebido (de R u otros lenguajes) y un `encabezado YAML` (que guía cómo dar formato a las salidas, por ejemplo PDF) en un `documento Markdown`. Como tal, este sirve como un framework ejemplar de autoría para la ciencia de datos ya que permite combinar tu código, su salida, y tus pensamientos al permitirte escribirlos en Markdown. Es más, los documentos Markdown R pueden ser representados como formatos de salida tal como PDF, HTML, o Word. + +> **Una nota acerca de los exámenes**: Todos los exámenes están contenidos [en esta app](https://white-water-09ec41f0f.azurestaticapps.net/), para un total de 52 exámenes de 3 preguntas cada uno, Ellos están vinculados dentro de las lecciones pero la aplicación de exámenes puede ser ejecutada localmente; sigue las instrucciones en el directorio `quiz-app`. + +| Número de lección | Tema | Agrupación de lecciones | Objetivos de aprendizaje | Lección vinculada | Autor | +| :-----------: | :------------------------------------------------------------: | :-------------------------------------------------: | ------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------------------------------------------------------------------------------------------------------: | :--------------------------------------------------: | +| 01 | Introducción al aprendizaje automático | [Introducción](../1-Introduction/translations/README.es.md) | Aprende los conceptos básicos detrás del aprendizaje automático | [Lección](../1-Introduction/1-intro-to-ML/translations/README.es.md) | Muhammad | +| 02 | La historia del aprendizaje automático | [Introducción](../1-Introduction/translations/README.es.md) | Aprende la historia subyacente a este campo | [Lección](../1-Introduction/2-history-of-ML/translations/README.es.md) | Jen y Amy | +| 03 | Justicia y aprendizaje automático | [introducción](../1-Introduction/translations/README.es.md) | ¿Cuáles son los problemas filosóficos importantes alrededor de la justicia que los estudiantes deberían considerar al construir y aplicar modelos de aprendizaje automático? | [Lección](../1-Introduction/3-fairness/translations/README.es.md) | Tomomi | +| 04 | Técnicas para el aprendizaje automático | [introducción](../1-Introduction/translations/README.es.md) | ¿Qué técnicas usan los investigadores de aprendizaje automático para construir modelos de ML? | [Lección](../1-Introduction/4-techniques-of-ML/translations/README.es.md) | Chris y Jen | +| 05 | Introducción a la regresión | [Regresión](../2-Regression/translations/README.es.md) | Comienza con Python y Scikit-learn para modelos de regresión |
  • [Python](../2-Regression/1-Tools/translations/README.es.md)
  • [R](../2-Regression/1-Tools/solution/R/lesson_1-R.ipynb)
|
  • Jen
  • Eric Wanjau
| +| 06 | Precios de la calabaza en Norte América 🎃 | [Regresión](../2-Regression/translations/README.es.md) | Visualiza y limpia los datos en preparación para el aprendizaje automático |
  • [Python](../2-Regression/2-Data/translations/README.es.md)
  • [R](../2-Regression/2-Data/solution/R/lesson_2-R.ipynb)
|
  • Jen
  • Eric Wanjau
| +| 07 | Precios de la calabaza en Norte América 🎃 | [Regresión](../2-Regression/translations/README.es.md) | Construye modelos de regresión lineal y polinomial |
  • [Python](../2-Regression/3-Linear/translations/README.es.md)
  • [R](../2-Regression/3-Linear/solution/R/lesson_3-R.ipynb)
|
  • Jen
  • Eric Wanjau
| +| 08 | Precios de la calabaza en Norte América 🎃 | [Regresión](../2-Regression/translations/README.es.md) | Construye un modelo de regresión logística |
  • [Python](../2-Regression/4-Logistic/translations/README.es.md)
  • [R](../2-Regression/4-Logistic/solution/R/lesson_4-R.ipynb)
|
  • Jen
  • Eric Wanjau
| +| 09 | Una aplicación web 🔌 | [Aplicación web](../3-Web-App/translations/README.es.md) | Construye una aplicación web para usar tu modelo entrenado | [Python](../3-Web-App/1-Web-App/translations/README.es.md) | Jen | +| 10 | Introducción a la clasificación | [Clasificación](../4-Classification/translations/README.es.md) | Limpia, prepara y visualiza tus datos; introducción a la clasificación |

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 U7R(CxIt8S2M_;r2w%wC|10)Qk_W%F@ literal 29733 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 aN@k~7&)P4)I9iN6E5h4T;Bkc?a_mp&fI1ui literal 24084 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 From 9f5c148abc84b5820261027c86c12ed59a095518 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Wed, 2 Feb 2022 21:41:14 -0600 Subject: [PATCH 02/67] (spanish) 2 regression/4 logistic/assignment.es.md (#508) * feat: Add file to translate * feat: (spanish) Add translation for file --- 2-Regression/4-Logistic/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 2-Regression/4-Logistic/translations/assignment.es.md diff --git a/2-Regression/4-Logistic/translations/assignment.es.md b/2-Regression/4-Logistic/translations/assignment.es.md new file mode 100644 index 000000000..7f99957f0 --- /dev/null +++ b/2-Regression/4-Logistic/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Reintentando alguna regresión + +## Instrucciones + +En esta lección, usaste un subconjunto de datos de las calabazas. Hora, vuelve a los datos originales e intenta usar todos ellos, limpios y estandarizados, para construir un modelo de regresión logística. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejorar | +| -------- | ----------------------------------------------------------------------- | ------------------------------------------------------------ | ----------------------------------------------------------- | +| | Se presenta un notebook con un modelo bien explicado y realizado | Se presenta un notebook con un modelo con rendimiento mínimo | Se presenta un modelo con un rendimiento precario o nulo | From 930d60482b2de3a1b1e0acfd6aa874114841e568 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Wed, 2 Feb 2022 21:42:04 -0600 Subject: [PATCH 03/67] (spanish) 2-Regression/2-Data/README.md (#507) * feat: Add file content to translate * feat: (spanish) Add translation for file * `2-Regression/2-Data/README.md` --- 2-Regression/2-Data/translations/README.es.md | 207 ++++++++++++++++++ 1 file changed, 207 insertions(+) create mode 100644 2-Regression/2-Data/translations/README.es.md diff --git a/2-Regression/2-Data/translations/README.es.md b/2-Regression/2-Data/translations/README.es.md new file mode 100644 index 000000000..2e7e6e3e8 --- /dev/null +++ b/2-Regression/2-Data/translations/README.es.md @@ -0,0 +1,207 @@ +# Construye un modelo de regresión usando Scikit-learn: prepara y visualiza los datos + +![Infografía de visualización de datos](../images/data-visualization.png) + +Infografía por [Dasani Madipalli](https://twitter.com/dasani_decoded) + +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/11/) + +> ### [Esta lección se encuentra disponible en R!](../solution/R/lesson_2-R.ipynb) + +## Introducción + +Ahora que has configurado las herramientas necesarias para iniciar el trabajo con la construcción de modelo de aprendizaje automático con Scikit-learn, estás listo para comenzar a realizar preguntas a tus datos. Mientras trabajas con los datos y aplicas soluciones de ML, es muy importante entender cómo realizar las preguntas correctas para desbloquear el potencial de tu conunto de datos. + +En esta lección, aprenderás: + +- Cómo preparar tus datos para la construcción de modelos. +- Cómo usar Matplotlib para visualización de datos. + +[![Preparación y visualización de datos](https://img.youtube.com/vi/11AnOn_OAcE/0.jpg)](https://youtu.be/11AnOn_OAcE "Video de preparación y visualizción de datos - ¡Clic para ver!") +> 🎥 Da clic en la imagen superior para ver un video de los aspectos clave de esta lección + + +## Realizando la pregunta correcta a tus datos + +La pregunta para la cual necesitas respuesta determinará qué tipo de algoritmos de ML requerirás. Y la calidad de la respuesta que obtendas será altamente dependiente de la naturaleza de tus datos. + +Echa un vistazo a los [datos](../../data/US-pumpkins.csv) provistos para esta lección. Puedes abrir este archivo .csv en VS Code. Un vistazo rápido muestra inmediatamente que existen campos en blanco y una mezcla de datos numéricos y de cadena. También hay una columna extraña llamada 'Package' donde los datos están mezclados entre los valores 'sacks', 'bins' y otros. Los datos de hecho, son un pequeño desastre. + +De hecho, no es muy común obtener un conjunto de datos que esté totalmente listo para su uso en un modelo de ML. En esta lección, aprenderás cómo preparar un conjunto de datos en crudo usando librerías estándares de Python. También aprenderás varias técnicas para visualizar los datos. + +## Caso de estudio: 'El mercado de calabazas' + +En este directorio encontrarás un archivo .cvs in la raíz del directorio `data` llamado [US-pumpkins.csv](../../data/US-pumpkins.csv), el cual incluye 1757 líneas de datos acerca del mercado de calabazas, ordenados en agrupaciones por ciudad. Estos son loas datos extraídos de [Reportes estándar de mercados terminales de cultivos especializados](https://www.marketnews.usda.gov/mnp/fv-report-config-step1?type=termPrice) distribuido por el Departamento de Agricultura de los Estados Unidos. + +### Preparando los datos + +Estos datos son de dominio público. Puede ser descargado en varios archivos por separado, por ciudad, desde el sitio web de USDA. para evitar demasiados archivos por separado, hemos concatenado todos los datos de ciudad en una hoja de cálculo, así ya hemos _preparado_ los datos un poco. Lo siguiente es dar un vistazo más a fondo a los datos. + +### Los datos de las calabazas - conclusiones iniciales + +¿Qué notas acerca de los datos? Ya has visto que hay una mezcla de cadenas, números, blancos y valores extraños a los cuales debes encontrarle sentido. + +¿Qué preguntas puedes hacerle a los datos usando una técnica de regresión? Qué tal el "predecir el precio de la venta de calabaza durante un mes dado". Viendo nuevamente los datos, hay algunos cambios que necesitas hacer para crear las estructuras de datos necesarias para la tarea. +## Ejercicio - Analiza los datos de la calabaza + +Usemos [Pandas](https://pandas.pydata.org/), (el nombre es un acrónimo de `Python Data Analysis`) a tool very useful for shaping data, to analyze and prepare this pumpkin data. + +### Primero, revisa las fechas faltantes + +Necesitarás realizar algunos pasos para revisar las fechas faltantes: + +1. Convertir las fechas a formato de mes (las fechas están en formato de EE.UU., por lo que el formato es `MM/DD/YYYY`). +2. Extrae el mes en una nueva columna. + +Abre el archivo _notebook.ipynb_ en Visual Studio Code e importa la hoja de cálculo en un nuevo dataframe de Pandas. + +1. Usa la función `head()` para visualizar las primeras cinco filas. + + ```python + import pandas as pd + pumpkins = pd.read_csv('../data/US-pumpkins.csv') + pumpkins.head() + ``` + + ✅ ¿Qué función usarías para ver las últimas cinco filas? + +1. Revisa si existen datos faltantes en el dataframe actual: + + ```python + pumpkins.isnull().sum() + ``` + + Hay datos faltabtes, pero quizá no importen para la tarea en cuestión. + +1. Para facilitar el trabajo con tu dataframe, elimina varias de sus columnas usando `drop()`, manteniendo sólo las columnas que necesitas: + + ```python + new_columns = ['Package', 'Month', 'Low Price', 'High Price', 'Date'] + pumpkins = pumpkins.drop([c for c in pumpkins.columns if c not in new_columns], axis=1) + ``` + +### Segundo, determina el precio promedio de la calabaza + +Piensa en cómo determinar el precio promedio de la calabaza en un mes dado. ¿Qué columnas eligirás para esa tarea? Pista: necesitarás 3 columnas. + +Solución: toma el promedio de las columnas `Low Price` y `High Price` para poblar la nueva columna `Price` y convierte la columna `Date` para mostrar únicamente el mes, Afortunadamente, de acuerdo a la revisión de arriba, no hay datos faltantes para las fechas o precios. + +1. Para calcular el promedio, agrega el siguiente código: + + ```python + price = (pumpkins['Low Price'] + pumpkins['High Price']) / 2 + + month = pd.DatetimeIndex(pumpkins['Date']).month + + ``` + + ✅ Siéntete libre de imprimir cualquier dato que desees verificar, usando `print(month)`. + +2. Ahora, copia tus datos convertidos en un nuevo dataframe de Pandas: + + ```python + new_pumpkins = pd.DataFrame({'Month': month, 'Package': pumpkins['Package'], 'Low Price': pumpkins['Low Price'],'High Price': pumpkins['High Price'], 'Price': price}) + ``` + + Imprimir tu dataframe te mostrará un conjunto de datos limpio y ordenado, en el cual puedes construir tu nuevo modelo de regresión. + +### ¡Pero espera!, Hay algo raro aquí + +Si observas la columna `Package`, las calabazas se venden en distintas configuraciones. Algunas son vendidas en medidas de '1 1/9 bushel', y otras en '1/2 bushel', algunas por pieza, algunas por libra y otras en grandes cajas de ancho variable. + +> Las calabazas parecen muy difíciles de pesar consistentemente. + +Indagando en los datos originales, es interesante que cualquiera con el valor `Unit of Sale` igualado a 'EACH' o 'PER BIN' también tiene el tipo de `Package` por pulgada, por cesto, o 'each'. Las calabazas parecen muy difíciles de pesar consistentemente, por lo que las filtraremos seleccionando solo aquellas calabazas con el string 'bushel' en su columna `Package`. + +1. Agrega un filtro al inicio del archivo, debajo de la importación inicial del .csv: + + ```python + pumpkins = pumpkins[pumpkins['Package'].str.contains('bushel', case=True, regex=True)] + ``` + + Si imprimes los datos ahora, puedes ver que solo estás obteniendo alrededor de 415 filas de datos que contienen calabazas por fanegas. + +### ¡Pero espera! Aún hay algo más que hacer + +¿Notaste que la cantidad de fanegas varían por fila? Necesitas normalizar el precio para así mostrar el precio por fanega, así que haz los cálculos para estandarizarlo. + +1. Agrega estas líneas después del bloque para así crear el dataframe new_pumpkins: + + ```python + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1 1/9'), 'Price'] = price/(1 + 1/9) + + new_pumpkins.loc[new_pumpkins['Package'].str.contains('1/2'), 'Price'] = price/(1/2) + ``` + +✅ De acuerdo a [The Spruce Eats](https://www.thespruceeats.com/how-much-is-a-bushel-1389308), el peso de una fanega depende del tipo de producto, ya que es una medida de volumen. "Una fanega de tomates, por ejemplo, se supone pese 56 libras... Las hojas y verduras usan más espacio con menos peso, por lo que una fanega de espinaca es de sólo 20 libras." ¡Todo es tan complicado! No nos molestemos en realizar una conversión fanega-a-libra, y en su lugar hagámosla por precio de fanega. ¡Todo este estudio de las fanegas de calabazas nos mostrará cuán importante es comprender la naturaleza de tus datos! + +Ahora, puedes analizar el precio por unidad basándote en su medida de fanega. Si imprimes los datos una vez más, verás que ya están estandarizados. + +✅ ¿Notaste que las calabazas vendidas por media fanega son más caras? ¿Puedes descubrir la razón? Ayuda: Las calabazas pequeñas son mucho más caras que las grandes, probablemente porque hay muchas más de ellas por fanega, dado el espacio sin usar dejado por una calabaza grande. + +## Estrategias de visualización + +parte del rol de un científico de datos es el demostrar la calidad y naturaleza de los dato con los que está trabajando. Para hacerlo, usualmente crean visualizaciones interesantes, o gráficos, grafos, y gráficas, mostrando distintos aspectos de los datos. De esta forma, son capaces de mostrar visualmente las relaciones y brechas de que otra forma son difíciles de descubrir. + +Las visualizaciones también ayudan a determinar la técnica de aprendizaje automático más apropiada para los datos. Por ejemplo, un gráfico de dispersión que parece seguir una línea, indica que los datos son un buen candidato para un ejercicio de regresión lineal. + +Una librería de visualización de datos que funciona bien en los notebooks de Jupyter es [Matplotlib](https://matplotlib.org/) (la cual también viste en la lección anterior). + +> Obtén más experiencia con la visualización de datos en [estos tutoriales](https://docs.microsoft.com/learn/modules/explore-analyze-data-with-python?WT.mc_id=academic-15963-cxa). + +## Ejercicio - experimenta con Matplotlib + +Intenta crear algunas gráficas básicas para mostrar el nuevo dataframe que acabas de crear. ¿Qué mostraría una gráfica de línea básica? + +1. Importa Matplotlib al inicio del archivo, debajo de la importación de Pandas: + + ```python + import matplotlib.pyplot as plt + ``` + +1. Vuelve a correr todo el notebook para refrescarlo. +1. Al final del notebook, agrega una celda para graficar los datos como una caja: + + ```python + price = new_pumpkins.Price + month = new_pumpkins.Month + plt.scatter(price, month) + plt.show() + ``` + + ![Una gráfica de dispersión mostrando la relación precio a mes](../images/scatterplot.png) + + ¿La gráfica es útil? ¿Hay algo acerca de ésta que te sorprenda? + + No es particularmente útil ya que todo lo que hace es mostrar tus datos como puntos dispersos en un mes dado. + +### Hacerlo útil + +Para obtener gráficas para mostrar datos útiles, necesitas agrupar los datos de alguna forma. Probemos creando un gráfico donde el eje y muestre los meses y los datos demuestren la distribución de los datos. + +1. Agrega una celda para crear una gráfica de barras agrupadas: + + ```python + new_pumpkins.groupby(['Month'])['Price'].mean().plot(kind='bar') + plt.ylabel("Pumpkin Price") + ``` + + ![Una gráfica de bsarras mostrando la relación precio a mes](../images/barchart.png) + + ¡Esta es una visualización de datos más útil! Parece indicar que el precio más alto para las calabazas ocurre en Septiembre y Octubre. ¿Cumple esto con tus expectativas? ¿por qué sí o por qué no? + +--- + +## 🚀Desafío + +Explora los distintos tipos de visualización que ofrece Matplotlib. ¿Qué tipos son los más apropiados para problemas de regresión? + +## [Examen posterior a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/12/) + +## Revisión y autoestudio + +Dale un vistazo a las distintas forma de visualizar los datos. Haz un lista de las distintas librerías disponibles y nota cuales son mejores para cierto tipo de tareas, por ejemplo visualizaciones 2D vs visualizaciones 3D. ¿Qué descubriste? + +## Asignación + +[Explorando la visualización](assignment.es.md) From 3dda072450f4170be43c14ce37b1dc022499cd57 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Sun, 6 Feb 2022 20:17:45 -0600 Subject: [PATCH 04/67] (spanish) - 3-Web-App/README.md (#511) * feat: Add file content to translate * (spanish) 3-Web-App/README.md Translate file `3-Web-App/README.md` to spanish --- 3-Web-App/translations/README.es.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 3-Web-App/translations/README.es.md diff --git a/3-Web-App/translations/README.es.md b/3-Web-App/translations/README.es.md new file mode 100644 index 000000000..cb0937dce --- /dev/null +++ b/3-Web-App/translations/README.es.md @@ -0,0 +1,21 @@ +# Construye una aplicación web para usar tu modelo de aprendizaje automático + +En esta sección del curso, se te presentará un tema de aprendizaje automático aplicado: cómo guardar tu modelo Scikit-learn como un archivo que puede ser usado para realizar predicciones desde una aplicación web. Una vez que el modelo es guardado, aprenderás cómo usarlo en una aplicación web construida en Flask. ¡Primero crearás un modelo usando algunos datos relacionados con avistamiento de OVNIs! Luego, construirás una aplicación web que te permitirá ingresar un número de segundos con un valor de latitud y longitud para así predecir qué país reportó haber visto un OVNI. + +![Estacionamiento de OVNIs](../images/ufo.jpg) + +Fotografía de Michael Herren en Unsplash + +## Lecciones + +1. [Construye una aplicación web](../1-Web-App/translations/README.es.md) + +## Créditos + +"Construye una aplicación web"fue escrito con ♥️ por [Jen Looper](https://twitter.com/jenlooper). + +♥️ Los cuestionariosfueron escritos por Rohan Raj. + +Los conjuntos de datos fueron tomados de [Kaggle](https://www.kaggle.com/NUFORC/ufo-sightings). + +La arquitectura de la aplicación web fue sugerida en parte por [este artículo](https://towardsdatascience.com/how-to-easily-deploy-machine-learning-models-using-flask-b95af8fe34d4) and [this repo](https://github.com/abhinavsagar/machine-learning-deployment) por Abhinav Sagar. From bb90a8e1c60ef46663f0c2ccc92987b1d6404047 Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Sun, 6 Feb 2022 20:19:17 -0600 Subject: [PATCH 05/67] (spanish) - 3-Web-App/1-Web-App/assignment.md (#510) * feat: Add file content to translate * feat: Translate file to spanish --- 3-Web-App/1-Web-App/translations/assignment.es.md | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100644 3-Web-App/1-Web-App/translations/assignment.es.md diff --git a/3-Web-App/1-Web-App/translations/assignment.es.md b/3-Web-App/1-Web-App/translations/assignment.es.md new file mode 100644 index 000000000..569518b49 --- /dev/null +++ b/3-Web-App/1-Web-App/translations/assignment.es.md @@ -0,0 +1,11 @@ +# Prueba un modelo distinto + +## Instrucciones + +Ahora que haz construido una aplicación web usando un modelo de regresión entrenado, usa uno de los modelos de la lección anterior de regresión para rehacer esta aplicación web. Puedes conservar el estilo o diseñarlo de forma diferente para reflejar los datos de las calabazas. Sé cuidadoso al cambiar los insumos para reflejar tu método de entrenamiento del modelo. + +## Rúbrica + +| Criterio | Ejemplar | Adecuado | Necesita mejora | +| -------------------------- | --------------------------------------------------------- | --------------------------------------------------------- | -------------------------------------- | +| | La aplicación web se ejecuta como se espera y es desplegda en la nube | La aplicación web contiene defectos o exhibe resultados inesperados | La aplicación web no funciona correctamente | From c6fb28a0cf05adb41f6ec631b0c7ab0fbab7ee6d Mon Sep 17 00:00:00 2001 From: Angel Mendez Date: Sun, 6 Feb 2022 20:20:02 -0600 Subject: [PATCH 06/67] (spanish) - 3-Web-App/1-Web-App/translations/README.md (#509) * feat: Add file to translate * feat: translation (spanish) - Add translation for file - 3-Web-App/1-Web-App/README.md --- 3-Web-App/1-Web-App/translations/README.es.md | 346 ++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 3-Web-App/1-Web-App/translations/README.es.md diff --git a/3-Web-App/1-Web-App/translations/README.es.md b/3-Web-App/1-Web-App/translations/README.es.md new file mode 100644 index 000000000..3623fb717 --- /dev/null +++ b/3-Web-App/1-Web-App/translations/README.es.md @@ -0,0 +1,346 @@ +# Construye una aplicación web usando un modelo de aprendizaje automático + +En esta lección, entrenarás un modelo de aprendizaje automático sobre un conjunto de datos que está fuera de este mundo: _avistamiento de OVNIs durante el siglo pasado_, proporcionados por la base de datos de NUFORC. + +Aprenderás: + +- Cómo hacer 'pickle' a un modelo entrenado +- Cómo usar ese modelo en una aplicación Flask + +Continuaremos nuestro uso de notebooks para limpiar los datos y entrenar nuestro modelo, pero puedes llevar el proceso un paso más allá explorando el uso de un modelo 'en la naturaleza', por así decirlo: en una aplicación web. + +Para hacer esto, necesitas construir una aplicación web usando Flask. + +## [Examen previo a la lección](https://white-water-09ec41f0f.azurestaticapps.net/quiz/17/) + +## Construyendo una aplicación + +Existen muchas formas de construir aplicaciones web para consumir modelos de aprendizaje automático. Tu arquitectura web podría influir en la forma que tu modelo es entrenado. Imagina que estás trabajando en un negocio donde el grupo de ciencia de datos ha entrenado un modelo que quieren uses en una aplicación. + +### Consideraciones + +Hay muchas preguntas que necesitas realizar: + +- **¿Es una aplicación web o móvil?** Si estás construyendo una aplicación móvil o necesitas uar el modelo en un contexto de IoT, podrías usar [TensorFlow Lite](https://www.tensorflow.org/lite/) y usar el modelo en una applicación Android o iOS. +- **¿Dónde residirá el modelo?** ¿En la nube o de forma local? +- **Soporte fuera de línea.** ¿La aplicación trabaja en modo fuera de línea? +- **¿Qué tecnología se usó para entrenar al modelo?** La tecnología elegida puede influir en las herramientas que necesitas utilizar. + - **Uso de TensorFlow.** Si estás entrenando un modelo usando TensorFlow, por ejemplo, ese ecosistema proporciona la capacidad de convertir un modelo de TensorFlow para su uso en una aplicación web usando [TensorFlow.js](https://www.tensorflow.org/js/). + - **Uso de PyTorch.** Si estás construyendo un modelo usando una librería como [PyTorch](https://pytorch.org/), tienes la opción de exportarlo en formato [ONNX](https://onnx.ai/) (Open Neural Network Exchange) para usarlo en aplicaciones web de javascript que puedan usar el entorno de ejecución [Onnx Runtime](https://www.onnxruntime.ai/). Esta opción será explorada en una futura lección para un modelo entrenado Scikit-learn. + - **Uso de Lobe.ai o Azure Custom Vision.** Si estás usando un sistema de aprendizaje automático SaaS (Software as a Service) como lo es [Lobe.ai](https://lobe.ai/) o [Azure Custom Vision](https://azure.microsoft.com/services/cognitive-services/custom-vision-service/?WT.mc_id=academic-15963-cxa) para entrenar un modelo, este tipo de software proporciona formas de exportar el modelo a diversas plataformas, incluyendo el construir una API a medida para que esta sea consultada en la nube por tu aplicación en línea. + +También tienes la oportunidad de construir una plicación web completamente en Flask que será capaz de entrenar el propio modelo en un navegador web. Esto también puede ser realizado usando TensorFlow.js en un contexto JavaScript. + +Para nuestros propósitos, ya que hemos estado trabajando con notebooks basados en Python, exploremos los pasos que necesitas realizar para exportar un modelo entrenado desde un notebook a un formato legible para una aplicación web construida en Python. + +## Herramientas + +Para esta tarea, necesitas dos herramientas: Flask y Pickle, ambos corren en Python. + +✅ ¿Qué es [Flask](https://palletsprojects.com/p/flask/)? Definido como un 'micro-framework' por sus creadores, Flask proporciona las características básicas de los frameworks web usando Python y un motor de plantillas para construir páginas web. Da un vistazo a [este módulo de aprendizaje](https://docs.microsoft.com/learn/modules/python-flask-build-ai-web-app?WT.mc_id=academic-15963-cxa) para practicar construir con Flask. + +✅ ¿Qué es [Pickle](https://docs.python.org/3/library/pickle.html)? Pickle 🥒 es un módulo de Python que serializa y deserializa estructura de objetos Python. Cuando conviertes un modelo en 'pickle', serializas o aplanas su estructura para su uso en la web. Sé cuidadoso: Pickle no es intrínsecamente seguro, por lo que debes ser cuidadoso si solicitaste hacer 'un-pickle' en un archivo. Un archivo hecho pickle tiene el sufijo `.pkl`. + +## Ejercicio - limpia tus datos + +En esta lección usarás datos de 80,000 avistamientos de OVNIs, recopilados por [NUFORC](https://nuforc.org) (El centro nacional de informes OVNI). Estos datos tienen algunas descripciones interesantes de avistamientos OVNI, por ejemplo: + + +- **Descripción larga del ejemplo.** "Un hombre emerge de un haz de luz que brilla en un campo de hierba por la noche y corre hacia el estacionamiento de Texas Instruments". +- **Descripción corta del ejemplo.** "las luces nos persiguieron". + +La hoja de cálculo [ufos.csv](../data/ufos.csv) incluye columnas acerca de los campos `city`, `state` y `country` donde ocurrió el avistamiento, la forma (`shape`) y su latitud (`latitude`) y ubicación (`latitude` y `longitude`). + +En el [notebook](../notebook.ipynb) en blanco incluído en esta lección: + +1. Importa `pandas`, `matplotlib`, y `numpy` como lo hiciste en lecciones anteriores e importa la hoja de cálculo ufos. Puedes dar un vistazo al conjunto de datos de ejemplo: + + ```python + import pandas as pd + import numpy as np + + ufos = pd.read_csv('./data/ufos.csv') + ufos.head() + ``` + +1. Convierte los datos de OVNIs en un pequeño dataframe con nuevos títulos. Revisa los valores únicos en el campo `Country`. + + ```python + ufos = pd.DataFrame({'Seconds': ufos['duration (seconds)'], 'Country': ufos['country'],'Latitude': ufos['latitude'],'Longitude': ufos['longitude']}) + + ufos.Country.unique() + ``` + +1. Ahora, puedes reducir la cantidad de datos que necesitamos manejar eliminando cualquier valor nulo e importando únicamente los avistamientos entre 1 y 60 segundos: + + ```python + ufos.dropna(inplace=True) + + ufos = ufos[(ufos['Seconds'] >= 1) & (ufos['Seconds'] <= 60)] + + ufos.info() + ``` + +1. Importa la librería `LabelEncoder` de Scikit-learn para convertir los valores de texto de los países a número: + + ✅ LabelEncoder codifica los datos alfabéticamente + + ```python + from sklearn.preprocessing import LabelEncoder + + ufos['Country'] = LabelEncoder().fit_transform(ufos['Country']) + + ufos.head() + ``` + + Tus datos deberían verse así: + + ```output + Seconds Country Latitude Longitude + 2 20.0 3 53.200000 -2.916667 + 3 20.0 4 28.978333 -96.645833 + 14 30.0 4 35.823889 -80.253611 + 23 60.0 4 45.582778 -122.352222 + 24 3.0 3 51.783333 -0.783333 + ``` + +## Ejercicio - construye tu modelo + +Ahora puedes prepararte para entrenar un modelo dividiendo los datos entre los grupos de entrenamiento y pruebas. + +1. Selecciona las tres características que quieres entrenar en tu vector X, y el vector Y será `Country`. Quieres ser capaz de introducir `Seconds`, `Latitude` y `Longitude` y obtener un id de país de regreso. + + ```python + from sklearn.model_selection import train_test_split + + Selected_features = ['Seconds','Latitude','Longitude'] + + X = ufos[Selected_features] + y = ufos['Country'] + + X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0) + ``` + +1. Entrena tu modelo usando regresión logística: + + ```python + from sklearn.metrics import accuracy_score, classification_report + from sklearn.linear_model import LogisticRegression + model = LogisticRegression() + model.fit(X_train, y_train) + predictions = model.predict(X_test) + + print(classification_report(y_test, predictions)) + print('Predicted labels: ', predictions) + print('Accuracy: ', accuracy_score(y_test, predictions)) + ``` + +La precisión no es mala **(alrededor del 95%)**, como era de esperar, ya que `Country` y `Latitude/Longitude` se correlacionan. + +El modelo que creaste no es muy revolucionario como deberías ser capaz de inferir un país (`Country`) por su latitud y longitud (`Latitude`, `Longitude`), pero es un buen ejercicio intentar entrenar desde datos en crudo que ya limpiaste, exportaste y luego usa este modelo en una aplicación web. + +## Ejercicio - Haz 'pickle' a tu modelo + +Ahora, ¡es momento de hacer _pickle_ a tu modelo! Puedes hacer eso con pocas líneas de código. Una vez la hiciste _pickle_, carga tu modelo serializado (pickled) y pruébalo constra un arreglo de datos de muestra que contenga los valores para segundos, latitud y longitud. + +```python +import pickle +model_filename = 'ufo-model.pkl' +pickle.dump(model, open(model_filename,'wb')) + +model = pickle.load(open('ufo-model.pkl','rb')) +print(model.predict([[50,44,-12]])) +``` + +El modelo regresa **'3'**, lo cual es el código de país para el Reino Unido (UK). ¡Sorprendente! 👽 + +## Ejercicio - Construye una aplicación Flask + +Ahora puedes construir una aplicación Flask para llamara tu modelo y regresar resultados similares, pero de una forma visualmente más agradable. + +1. Comienza por crear un directorio llamado **web-app** junto al archivo _notebook.ipynb_ donde reside el archivo _ufo-model.pkl_. + +1. En ese directorio crea 3 directorios más: **static**, con un directorio **css** dentro de el, y **templates**. Ahora tienes la siguiente estructura de directorios: + + ```output + web-app/ + static/ + css/ + templates/ + notebook.ipynb + ufo-model.pkl + ``` + + ✅ Consulta el directorio de la solución para una vista de la aplicación terminada. + +1. El primer archivo a crear en el directorio _web-app_ es el archivo **requirements.txt**. Así como _package.json_ en una aplicación JavaScript, este archivo lista las dependencias requeridas por la aplicación. En **requirements.txt** agrega las líneas: + + ```text + scikit-learn + pandas + numpy + flask + ``` + +1. Ahora, ejecuta este archivo navegando a _web-app_: + + ```bash + cd web-app + ``` + +1. Escribe en tu terminal `pip install`, para instalar las librerías listadas en _requirements.txt_: + + ```bash + pip install -r requirements.txt + ``` + +1. Ahora, estás listo para crear 3 archivos más y así terminar la aplicación: + + 1. Crea el archivo **app.py** en la raíz. + 2. Crea el archivo **index.html** dentro del directorio _templates_. + 3. Crea el archivo **styles.css** dentro del directorio _static/css_. + +1. Construye el archivo _styles.css_ file con algunos estilos: + + ```css + body { + width: 100%; + height: 100%; + font-family: 'Helvetica'; + background: black; + color: #fff; + text-align: center; + letter-spacing: 1.4px; + font-size: 30px; + } + + input { + min-width: 150px; + } + + .grid { + width: 300px; + border: 1px solid #2d2d2d; + display: grid; + justify-content: center; + margin: 20px auto; + } + + .box { + color: #fff; + background: #2d2d2d; + padding: 12px; + display: inline-block; + } + ``` + +1. Lo siguiente es constuir el archivo _index.html_: + + ```html + + + + + 🛸 UFO Appearance Prediction! 👽 + + + + +