From 62bd4ec7b863c3eb095f8023f00cecec160b4415 Mon Sep 17 00:00:00 2001 From: Aurelien Geron Date: Sun, 3 Oct 2021 23:05:49 +1300 Subject: [PATCH] Improve alignment between notebook and book section headers --- 01_the_machine_learning_landscape.ipynb | 2 +- 05_support_vector_machines.ipynb | 145 +++++- 06_decision_trees.ipynb | 148 +++++-- 07_ensemble_learning_and_random_forests.ipynb | 415 +++++++++++------- 08_dimensionality_reduction.ipynb | 178 ++++++-- 09_unsupervised_learning.ipynb | 37 +- 6 files changed, 667 insertions(+), 258 deletions(-) diff --git a/01_the_machine_learning_landscape.ipynb b/01_the_machine_learning_landscape.ipynb index a227f60fd..3fca6da12 100644 --- a/01_the_machine_learning_landscape.ipynb +++ b/01_the_machine_learning_landscape.ipynb @@ -93,7 +93,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "The code in the book expects the data files to be located in the current directory. I just tweaked it here to fetch the files in datasets/lifesat." + "The code in the book expects the data files to be located in the current directory. I just tweaked it here to fetch the files in `datasets/lifesat`." ] }, { diff --git a/05_support_vector_machines.ipynb b/05_support_vector_machines.ipynb index bd27bc252..4195322b5 100644 --- a/05_support_vector_machines.ipynb +++ b/05_support_vector_machines.ipynb @@ -84,14 +84,16 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Large margin classification" + "# Linear SVM Classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ - "The next few code cells generate the first figures in chapter 5. The first actual code sample comes after:" + "The next few code cells generate the first figures in chapter 5. The first actual code sample comes after.\n", + "\n", + "**Code to generate Figure 5–1. Large margin classification**" ] }, { @@ -206,7 +208,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Sensitivity to feature scales" + "**Code to generate Figure 5–2. Sensitivity to feature scales**" ] }, { @@ -271,7 +273,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Sensitivity to outliers" + "## Soft Margin Classification\n", + "**Code to generate Figure 5–3. Hard margin sensitivity to outliers**" ] }, { @@ -349,14 +352,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Large margin *vs* margin violations" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "This is the first code example in chapter 5:" + "**This is the first code example in chapter 5:**" ] }, { @@ -419,7 +415,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "Now let's generate the graph comparing different regularization settings:" + "**Code to generate Figure 5–4. Large margin versus fewer margin violations**" ] }, { @@ -543,7 +539,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Non-linear classification" + "# Nonlinear SVM Classification" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–5. Adding features to make a dataset linearly separable**" ] }, { @@ -639,6 +642,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Here is second code example in the chapter:**" + ] + }, { "cell_type": "code", "execution_count": 13, @@ -679,6 +689,13 @@ "polynomial_svm_clf.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–6. Linear SVM classifier using polynomial features**" + ] + }, { "cell_type": "code", "execution_count": 14, @@ -722,6 +739,20 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Polynomial Kernel" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Next code example:**" + ] + }, { "cell_type": "code", "execution_count": 15, @@ -749,6 +780,13 @@ "poly_kernel_svm_clf.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–7. SVM classifiers with a polynomial kernel**" + ] + }, { "cell_type": "code", "execution_count": 16, @@ -817,6 +855,20 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Similarity Features" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–8. Similarity features using the Gaussian RBF**" + ] + }, { "cell_type": "code", "execution_count": 18, @@ -926,6 +978,20 @@ " print(\"Phi({}, {}) = {}\".format(x1_example, landmark, k))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Gaussian RBF Kernel" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Next code example:**" + ] + }, { "cell_type": "code", "execution_count": 20, @@ -951,6 +1017,13 @@ "rbf_kernel_svm_clf.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–9. SVM classifiers using an RBF kernel**" + ] + }, { "cell_type": "code", "execution_count": 21, @@ -1015,7 +1088,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Regression\n" + "# SVM Regression" ] }, { @@ -1030,6 +1103,13 @@ "y = (4 + 3 * X + np.random.randn(m, 1)).ravel()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Next code example:**" + ] + }, { "cell_type": "code", "execution_count": 23, @@ -1053,6 +1133,13 @@ "svm_reg.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–10. SVM Regression**" + ] + }, { "cell_type": "code", "execution_count": 24, @@ -1152,6 +1239,13 @@ "**Note**: to be future-proof, we set `gamma=\"scale\"`, as this will be the default value in Scikit-Learn 0.22." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Next code example:**" + ] + }, { "cell_type": "code", "execution_count": 27, @@ -1175,6 +1269,13 @@ "svm_poly_reg.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–11. SVM Regression using a second-degree polynomial kernel**" + ] + }, { "cell_type": "code", "execution_count": 28, @@ -1242,7 +1343,15 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Under the hood" + "# Under the Hood\n", + "## Decision Function and Predictions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 5–12. Decision function for the iris dataset**" ] }, { @@ -1324,7 +1433,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Small weight vector results in a large margin" + "**Code to generate Figure 5–13. A smaller weight vector results in a larger margin**" ] }, { @@ -1414,7 +1523,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Hinge loss" + "**Code to generate the Hinge Loss figure:**" ] }, { diff --git a/06_decision_trees.ipynb b/06_decision_trees.ipynb index 06829a9b9..50f15e6b7 100644 --- a/06_decision_trees.ipynb +++ b/06_decision_trees.ipynb @@ -89,7 +89,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Training and visualizing" + "# Training and Visualizing a Decision Tree" ] }, { @@ -120,6 +120,13 @@ "tree_clf.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**This code example generates Figure 6–1. Iris Decision Tree:**" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -131,7 +138,7 @@ "\n", "\n", - "\n", "\n", "\n" ], "text/plain": [ - "" + "" ] }, "execution_count": 3, @@ -240,6 +247,20 @@ "Source.from_file(os.path.join(IMAGES_PATH, \"iris_tree.dot\"))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Making Predictions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6–2. Decision Tree decision boundaries**" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -311,7 +332,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Predicting classes and class probabilities" + "# Estimating Class Probabilities" ] }, { @@ -358,7 +379,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# High Variance" + "## Regularization Hyperparameters" ] }, { @@ -390,6 +411,13 @@ "tree_clf_tweaked.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6–8. Sensitivity to training set details:**" + ] + }, { "cell_type": "code", "execution_count": 8, @@ -427,9 +455,16 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6–3. Regularization using min_samples_leaf:**" + ] + }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "metadata": {}, "outputs": [ { @@ -474,9 +509,16 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Rotating the dataset also leads to completely different decision boundaries:" + ] + }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "metadata": {}, "outputs": [ { @@ -506,9 +548,16 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6–7. Sensitivity to training set rotation**" + ] + }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "metadata": {}, "outputs": [ { @@ -560,12 +609,19 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Regression trees" + "# Regression" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's prepare a simple linear dataset:" ] }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "metadata": {}, "outputs": [], "source": [ @@ -577,9 +633,16 @@ "y = y + np.random.randn(m, 1) / 10" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code example:**" + ] + }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "metadata": {}, "outputs": [ { @@ -588,7 +651,7 @@ "DecisionTreeRegressor(max_depth=2, random_state=42)" ] }, - "execution_count": 14, + "execution_count": 13, "metadata": {}, "output_type": "execute_result" } @@ -600,9 +663,16 @@ "tree_reg.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6–5. Predictions of two Decision Tree regression models:**" + ] + }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "metadata": {}, "outputs": [ { @@ -667,9 +737,16 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6-4. A Decision Tree for regression:**" + ] + }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [], "source": [ @@ -684,7 +761,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -805,7 +882,7 @@ "" ] }, - "execution_count": 17, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -814,9 +891,16 @@ "Source.from_file(os.path.join(IMAGES_PATH, \"regression_tree.dot\"))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 6–6. Regularizing a Decision Tree regressor:**" + ] + }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -922,7 +1006,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [], "source": [ @@ -940,7 +1024,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 19, "metadata": {}, "outputs": [], "source": [ @@ -958,7 +1042,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 20, "metadata": {}, "outputs": [ { @@ -988,7 +1072,7 @@ " verbose=1)" ] }, - "execution_count": 21, + "execution_count": 20, "metadata": {}, "output_type": "execute_result" } @@ -1004,7 +1088,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 21, "metadata": {}, "outputs": [ { @@ -1013,7 +1097,7 @@ "DecisionTreeClassifier(max_leaf_nodes=17, random_state=42)" ] }, - "execution_count": 22, + "execution_count": 21, "metadata": {}, "output_type": "execute_result" } @@ -1038,7 +1122,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 22, "metadata": {}, "outputs": [ { @@ -1047,7 +1131,7 @@ "0.8695" ] }, - "execution_count": 23, + "execution_count": 22, "metadata": {}, "output_type": "execute_result" } @@ -1082,7 +1166,7 @@ }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 23, "metadata": {}, "outputs": [], "source": [ @@ -1109,7 +1193,7 @@ }, { "cell_type": "code", - "execution_count": 25, + "execution_count": 24, "metadata": {}, "outputs": [ { @@ -1118,7 +1202,7 @@ "0.8054499999999999" ] }, - "execution_count": 25, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } @@ -1148,7 +1232,7 @@ }, { "cell_type": "code", - "execution_count": 26, + "execution_count": 25, "metadata": {}, "outputs": [], "source": [ @@ -1160,7 +1244,7 @@ }, { "cell_type": "code", - "execution_count": 27, + "execution_count": 26, "metadata": {}, "outputs": [], "source": [ @@ -1178,7 +1262,7 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 27, "metadata": {}, "outputs": [ { @@ -1187,7 +1271,7 @@ "0.872" ] }, - "execution_count": 28, + "execution_count": 27, "metadata": {}, "output_type": "execute_result" } diff --git a/07_ensemble_learning_and_random_forests.ipynb b/07_ensemble_learning_and_random_forests.ipynb index 73724f0c9..8638fd8c1 100644 --- a/07_ensemble_learning_and_random_forests.ipynb +++ b/07_ensemble_learning_and_random_forests.ipynb @@ -89,7 +89,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Voting classifiers" + "# Voting Classifiers" ] }, { @@ -103,6 +103,13 @@ "cumulative_heads_ratio = np.cumsum(coin_tosses, axis=0) / np.arange(1, 10001).reshape(-1, 1)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–3. The law of large numbers:**" + ] + }, { "cell_type": "code", "execution_count": 3, @@ -141,6 +148,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's use the moons dataset:" + ] + }, { "cell_type": "code", "execution_count": 4, @@ -161,6 +175,13 @@ "**Note**: to be future-proof, we set `solver=\"lbfgs\"`, `n_estimators=100`, and `gamma=\"scale\"` since these will be the default values in upcoming Scikit-Learn versions." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code examples:**" + ] + }, { "cell_type": "code", "execution_count": 5, @@ -301,7 +322,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Bagging ensembles" + "# Bagging and Pasting\n", + "## Bagging and Pasting in Scikit-Learn" ] }, { @@ -358,6 +380,13 @@ "print(accuracy_score(y_test, y_pred_tree))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–5. A single Decision Tree (left) versus a bagging ensemble of 500 trees (right):**" + ] + }, { "cell_type": "code", "execution_count": 13, @@ -387,7 +416,9 @@ { "cell_type": "code", "execution_count": 14, - "metadata": {}, + "metadata": { + "scrolled": true + }, "outputs": [ { "name": "stdout", @@ -422,143 +453,6 @@ "plt.show()" ] }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Random Forests" - ] - }, - { - "cell_type": "code", - "execution_count": 15, - "metadata": {}, - "outputs": [], - "source": [ - "bag_clf = BaggingClassifier(\n", - " DecisionTreeClassifier(max_features=\"sqrt\", max_leaf_nodes=16),\n", - " n_estimators=500, random_state=42)" - ] - }, - { - "cell_type": "code", - "execution_count": 16, - "metadata": {}, - "outputs": [], - "source": [ - "bag_clf.fit(X_train, y_train)\n", - "y_pred = bag_clf.predict(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "from sklearn.ensemble import RandomForestClassifier\n", - "\n", - "rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, random_state=42)\n", - "rnd_clf.fit(X_train, y_train)\n", - "\n", - "y_pred_rf = rnd_clf.predict(X_test)" - ] - }, - { - "cell_type": "code", - "execution_count": 18, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "1.0" - ] - }, - "execution_count": 18, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "np.sum(y_pred == y_pred_rf) / len(y_pred) # very similar predictions" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "sepal length (cm) 0.11249225099876375\n", - "sepal width (cm) 0.02311928828251033\n", - "petal length (cm) 0.4410304643639577\n", - "petal width (cm) 0.4233579963547682\n" - ] - } - ], - "source": [ - "from sklearn.datasets import load_iris\n", - "iris = load_iris()\n", - "rnd_clf = RandomForestClassifier(n_estimators=500, random_state=42)\n", - "rnd_clf.fit(iris[\"data\"], iris[\"target\"])\n", - "for name, score in zip(iris[\"feature_names\"], rnd_clf.feature_importances_):\n", - " print(name, score)" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "array([0.11249225, 0.02311929, 0.44103046, 0.423358 ])" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "rnd_clf.feature_importances_" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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\n", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "plt.figure(figsize=(6, 4))\n", - "\n", - "for i in range(15):\n", - " tree_clf = DecisionTreeClassifier(max_leaf_nodes=16, random_state=42 + i)\n", - " indices_with_replacement = np.random.randint(0, len(X_train), len(X_train))\n", - " tree_clf.fit(X[indices_with_replacement], y[indices_with_replacement])\n", - " plot_decision_boundary(tree_clf, X, y, axes=[-1.5, 2.45, -1, 1.5], alpha=0.02, contour=False)\n", - "\n", - "plt.show()" - ] - }, { "cell_type": "markdown", "metadata": {}, @@ -568,7 +462,7 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -577,7 +471,7 @@ "0.8986666666666666" ] }, - "execution_count": 22, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -592,7 +486,7 @@ }, { "cell_type": "code", - "execution_count": 23, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -975,7 +869,7 @@ " [0.58854167, 0.41145833]])" ] }, - "execution_count": 23, + "execution_count": 16, "metadata": {}, "output_type": "execute_result" } @@ -986,8 +880,10 @@ }, { "cell_type": "code", - "execution_count": 24, - "metadata": {}, + "execution_count": 17, + "metadata": { + "scrolled": true + }, "outputs": [ { "data": { @@ -995,7 +891,7 @@ "0.912" ] }, - "execution_count": 24, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -1010,7 +906,165 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Feature importance" + "# Random Forests" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "metadata": {}, + "outputs": [], + "source": [ + "from sklearn.ensemble import RandomForestClassifier\n", + "\n", + "rnd_clf = RandomForestClassifier(n_estimators=500, max_leaf_nodes=16, random_state=42)\n", + "rnd_clf.fit(X_train, y_train)\n", + "\n", + "y_pred_rf = rnd_clf.predict(X_test)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "A Random Forest is equivalent to a bag of decision trees:" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "metadata": {}, + "outputs": [], + "source": [ + "bag_clf = BaggingClassifier(\n", + " DecisionTreeClassifier(max_features=\"sqrt\", max_leaf_nodes=16),\n", + " n_estimators=500, random_state=42)" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "metadata": {}, + "outputs": [], + "source": [ + "bag_clf.fit(X_train, y_train)\n", + "y_pred = bag_clf.predict(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "1.0" + ] + }, + "execution_count": 21, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "np.sum(y_pred == y_pred_rf) / len(y_pred) # very similar predictions" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Feature Importance" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "sepal length (cm) 0.11249225099876375\n", + "sepal width (cm) 0.02311928828251033\n", + "petal length (cm) 0.4410304643639577\n", + "petal width (cm) 0.4233579963547682\n" + ] + } + ], + "source": [ + "from sklearn.datasets import load_iris\n", + "iris = load_iris()\n", + "rnd_clf = RandomForestClassifier(n_estimators=500, random_state=42)\n", + "rnd_clf.fit(iris[\"data\"], iris[\"target\"])\n", + "for name, score in zip(iris[\"feature_names\"], rnd_clf.feature_importances_):\n", + " print(name, score)" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([0.11249225, 0.02311929, 0.44103046, 0.423358 ])" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "rnd_clf.feature_importances_" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The following figure overlays the decision boundaries of 15 decision trees. As you can see, even though each decision tree is imperfect, the ensemble defines a pretty good decision boundary:" + ] + }, + { + "cell_type": "code", + "execution_count": 24, + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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\n", + "text/plain": [ + "
" + ] + }, + "metadata": { + "needs_background": "light" + }, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(6, 4))\n", + "\n", + "for i in range(15):\n", + " tree_clf = DecisionTreeClassifier(max_leaf_nodes=16, random_state=42 + i)\n", + " indices_with_replacement = np.random.randint(0, len(X_train), len(X_train))\n", + " tree_clf.fit(X[indices_with_replacement], y[indices_with_replacement])\n", + " plot_decision_boundary(tree_clf, X, y, axes=[-1.5, 2.45, -1, 1.5], alpha=0.02, contour=False)\n", + "\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–6. MNIST pixel importance (according to a Random Forest classifier):**" ] }, { @@ -1105,7 +1159,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# AdaBoost" + "# Boosting\n", + "## AdaBoost" ] }, { @@ -1156,6 +1211,13 @@ "plot_decision_boundary(ada_clf, X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–8. Decision boundaries of consecutive predictors:**" + ] + }, { "cell_type": "code", "execution_count": 31, @@ -1217,7 +1279,14 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Gradient Boosting" + "## Gradient Boosting" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let create a simple quadratic dataset:" ] }, { @@ -1231,6 +1300,13 @@ "y = 3*X[:, 0]**2 + 0.05 * np.random.randn(100)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's train a decision tree regressor on this dataset:" + ] + }, { "cell_type": "code", "execution_count": 33, @@ -1336,6 +1412,13 @@ "y_pred" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–9. In this depiction of Gradient Boosting, the first predictor (top left) is trained normally, then each consecutive predictor (middle left and lower left) is trained on the previous predictor’s residuals; the right column shows the resulting ensemble’s predictions:**" + ] + }, { "cell_type": "code", "execution_count": 39, @@ -1412,6 +1495,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let's try a gradient boosting regressor:" + ] + }, { "cell_type": "code", "execution_count": 41, @@ -1436,6 +1526,13 @@ "gbrt.fit(X, y)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–10. GBRT ensembles with not enough predictors (left) and too many (right):**" + ] + }, { "cell_type": "code", "execution_count": 42, @@ -1504,7 +1601,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Gradient Boosting with Early stopping" + "**Gradient Boosting with Early stopping:**" ] }, { @@ -1541,6 +1638,13 @@ "gbrt_best.fit(X_train, y_train)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 7–11. Tuning the number of trees using early stopping:**" + ] + }, { "cell_type": "code", "execution_count": 45, @@ -1599,6 +1703,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Early stopping with some patience (interrupts training only after there's no improvement for 5 epochs):" + ] + }, { "cell_type": "code", "execution_count": 47, @@ -1661,7 +1772,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Using XGBoost" + "**Using XGBoost:**" ] }, { diff --git a/08_dimensionality_reduction.ipynb b/08_dimensionality_reduction.ipynb index 47a836462..d0f6cac6a 100644 --- a/08_dimensionality_reduction.ipynb +++ b/08_dimensionality_reduction.ipynb @@ -84,8 +84,8 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Projection methods\n", - "Build 3D dataset:" + "# PCA\n", + "Let's build a simple 3D dataset:" ] }, { @@ -110,7 +110,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## PCA using SVD decomposition" + "## Principal Components" ] }, { @@ -157,6 +157,13 @@ "np.allclose(X_centered, U.dot(S).dot(Vt))" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Projecting Down to d Dimensions" + ] + }, { "cell_type": "code", "execution_count": 6, @@ -180,7 +187,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## PCA using Scikit-Learn" + "## Using Scikit-Learn" ] }, { @@ -453,6 +460,13 @@ "Notice how the axes are flipped." ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Explained Variance Ratio" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -548,6 +562,13 @@ "Next, let's generate some nice figures! :)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–2. A 3D dataset lying close to a 2D subspace:**" + ] + }, { "cell_type": "markdown", "metadata": {}, @@ -677,6 +698,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–3. The new 2D dataset after projection:**" + ] + }, { "cell_type": "code", "execution_count": 25, @@ -722,8 +750,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# Manifold learning\n", - "Swiss roll:" + "**Code to generate Figure 8–4. Swiss roll dataset:**" ] }, { @@ -733,6 +760,7 @@ "outputs": [], "source": [ "from sklearn.datasets import make_swiss_roll\n", + "\n", "X, t = make_swiss_roll(n_samples=1000, noise=0.2, random_state=42)" ] }, @@ -780,6 +808,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–5. Squashing by projecting onto a plane (left) versus unrolling the Swiss roll (right):**" + ] + }, { "cell_type": "code", "execution_count": 28, @@ -825,6 +860,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–6. The decision boundary may not always be simpler with lower dimensions:**" + ] + }, { "cell_type": "code", "execution_count": 29, @@ -987,7 +1029,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# PCA" + "**Code to generate Figure 8–7. Selecting the subspace to project on:**" ] }, { @@ -1080,7 +1122,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# MNIST compression" + "## Choosing the Right Number of Dimensions" ] }, { @@ -1148,6 +1190,13 @@ "d" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–8. Explained variance as a function of the number of dimensions:**" + ] + }, { "cell_type": "code", "execution_count": 35, @@ -1239,6 +1288,13 @@ "np.sum(pca.explained_variance_ratio_)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## PCA for Compression" + ] + }, { "cell_type": "code", "execution_count": 39, @@ -1250,6 +1306,13 @@ "X_recovered = pca.inverse_transform(X_reduced)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–9. MNIST compression that preserves 95% of the variance:**" + ] + }, { "cell_type": "code", "execution_count": 40, @@ -1322,13 +1385,30 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Incremental PCA" + "## Randomized PCA" ] }, { "cell_type": "code", "execution_count": 43, "metadata": {}, + "outputs": [], + "source": [ + "rnd_pca = PCA(n_components=154, svd_solver=\"randomized\", random_state=42)\n", + "X_reduced = rnd_pca.fit_transform(X_train)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Incremental PCA" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "metadata": {}, "outputs": [ { "name": "stdout", @@ -1352,16 +1432,23 @@ }, { "cell_type": "code", - "execution_count": 44, + "execution_count": 45, "metadata": {}, "outputs": [], "source": [ "X_recovered_inc_pca = inc_pca.inverse_transform(X_reduced)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Let's check that compression still works well:" + ] + }, { "cell_type": "code", - "execution_count": 45, + "execution_count": 46, "metadata": {}, "outputs": [ { @@ -1388,7 +1475,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 47, "metadata": {}, "outputs": [], "source": [ @@ -1404,7 +1491,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 48, "metadata": {}, "outputs": [ { @@ -1413,7 +1500,7 @@ "True" ] }, - "execution_count": 47, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } @@ -1431,7 +1518,7 @@ }, { "cell_type": "code", - "execution_count": 48, + "execution_count": 49, "metadata": {}, "outputs": [ { @@ -1440,7 +1527,7 @@ "False" ] }, - "execution_count": 48, + "execution_count": 49, "metadata": {}, "output_type": "execute_result" } @@ -1453,7 +1540,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Using `memmap()`" + "**Using `memmap()`:**" ] }, { @@ -1465,7 +1552,7 @@ }, { "cell_type": "code", - "execution_count": 49, + "execution_count": 50, "metadata": {}, "outputs": [], "source": [ @@ -1485,7 +1572,7 @@ }, { "cell_type": "code", - "execution_count": 50, + "execution_count": 51, "metadata": {}, "outputs": [], "source": [ @@ -1501,7 +1588,7 @@ }, { "cell_type": "code", - "execution_count": 51, + "execution_count": 52, "metadata": {}, "outputs": [ { @@ -1510,7 +1597,7 @@ "IncrementalPCA(batch_size=525, n_components=154)" ] }, - "execution_count": 51, + "execution_count": 52, "metadata": {}, "output_type": "execute_result" } @@ -1523,21 +1610,11 @@ "inc_pca.fit(X_mm)" ] }, - { - "cell_type": "code", - "execution_count": 52, - "metadata": {}, - "outputs": [], - "source": [ - "rnd_pca = PCA(n_components=154, svd_solver=\"randomized\", random_state=42)\n", - "X_reduced = rnd_pca.fit_transform(X_train)" - ] - }, { "cell_type": "markdown", "metadata": {}, "source": [ - "## Time complexity" + "**Time complexity:**" ] }, { @@ -1737,6 +1814,13 @@ "X_reduced = rbf_pca.fit_transform(X)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–10. Swiss roll reduced to 2D using kPCA with various kernels:**" + ] + }, { "cell_type": "code", "execution_count": 58, @@ -1791,6 +1875,13 @@ "plt.show()" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–11. Kernel PCA and the reconstruction pre-image error:**" + ] + }, { "cell_type": "code", "execution_count": 59, @@ -1864,6 +1955,13 @@ "plt.grid(True)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Selecting a Kernel and Tuning Hyperparameters" + ] + }, { "cell_type": "code", "execution_count": 61, @@ -1983,6 +2081,13 @@ "X_reduced = lle.fit_transform(X)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–12. Unrolled Swiss roll using LLE:**" + ] + }, { "cell_type": "code", "execution_count": 67, @@ -2024,7 +2129,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "# MDS, Isomap and t-SNE" + "## Other Dimensionality Reduction Techniques" ] }, { @@ -2078,6 +2183,13 @@ "X_reduced_lda = lda.transform(X_mnist)" ] }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "**Code to generate Figure 8–13. Using various techniques to reduce the Swill roll to 2D:**" + ] + }, { "cell_type": "code", "execution_count": 72, diff --git a/09_unsupervised_learning.ipynb b/09_unsupervised_learning.ipynb index 37bec482f..84d5135fd 100644 --- a/09_unsupervised_learning.ipynb +++ b/09_unsupervised_learning.ipynb @@ -91,7 +91,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Introduction – Classification _vs_ Clustering" + "**Introduction – Classification _vs_ Clustering**" ] }, { @@ -417,7 +417,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Fit and Predict" + "**Fit and predict**" ] }, { @@ -584,7 +584,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Decision Boundaries" + "**Decision Boundaries**" ] }, { @@ -683,7 +683,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Hard Clustering _vs_ Soft Clustering" + "**Hard Clustering _vs_ Soft Clustering**" ] }, { @@ -750,7 +750,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### K-Means Algorithm" + "### The K-Means Algorithm" ] }, { @@ -875,7 +875,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### K-Means Variability" + "**K-Means Variability**" ] }, { @@ -1162,7 +1162,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### K-Means++" + "### Centroid initialization methods" ] }, { @@ -2019,7 +2019,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Limits of K-Means" + "## Limits of K-Means" ] }, { @@ -2125,7 +2125,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Using clustering for image segmentation" + "## Using Clustering for Image Segmentation" ] }, { @@ -2259,7 +2259,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Using Clustering for Preprocessing" + "## Using Clustering for Preprocessing" ] }, { @@ -2659,7 +2659,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "### Clustering for Semi-supervised Learning" + "## Using Clustering for Semi-Supervised Learning" ] }, { @@ -4199,7 +4199,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Anomaly Detection using Gaussian Mixtures" + "## Anomaly Detection Using Gaussian Mixtures" ] }, { @@ -4260,7 +4260,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Model selection" + "## Selecting the Number of Clusters" ] }, { @@ -4532,7 +4532,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Variational Bayesian Gaussian Mixtures" + "## Bayesian Gaussian Mixture Models" ] }, { @@ -4828,7 +4828,7 @@ "cell_type": "markdown", "metadata": {}, "source": [ - "## Likelihood Function" + "**Likelihood Function**" ] }, { @@ -4939,13 +4939,6 @@ "plt.show()" ] }, - { - "cell_type": "code", - "execution_count": null, - "metadata": {}, - "outputs": [], - "source": [] - }, { "cell_type": "markdown", "metadata": {},