From 6cd60f1ab40f08789851ff89080ce4ce4fd34761 Mon Sep 17 00:00:00 2001 From: wizardforcel <562826179@qq.com> Date: Tue, 1 Jan 2019 22:24:03 +0800 Subject: [PATCH] tex --- 11.md | 20 +++++++-------- 12.md | 10 ++++---- 13.md | 8 +++--- 14.md | 10 ++++---- 15.md | 24 +++++++++--------- 16.md | 46 +++++++++++++++++----------------- 17.md | 6 ++--- 18.md | 4 +-- 2.md | 2 +- 21.md | 18 +++++++------- 4.md | 62 +++++++++++++++++++++++----------------------- 8.md | 6 ++--- src/process_tex.js | 2 +- 13 files changed, 109 insertions(+), 109 deletions(-) diff --git a/11.md b/11.md index aae4dc9..bcf2201 100644 --- a/11.md +++ b/11.md @@ -28,9 +28,9 @@ y = boston.target 通过添加一个新的特征,它是交互特征的乘积,来添加交互项。 -![\hat {y} = \hat {\beta_{0}} + \hat {\beta_{1}}x_{1}+ \hat {\beta_{2}}x_{2} + \hat {\beta_{3}}x_{1}x_{2} + \epsilon](../Images/tex-020a9f6f179050a671f6f6f28169b20d.gif) +![\hat {y} = \hat {\beta_{0}} + \hat {\beta_{1}}x_{1}+ \hat {\beta_{2}}x_{2} + \hat {\beta_{3}}x_{1}x_{2} + \epsilon](../img/tex-020a9f6f179050a671f6f6f28169b20d.gif) -其中 ![x_{1}](../Images/tex-f9a3b8e9e501458e8face47cae8826de.gif) 和 ![x_{2}](../Images/tex-8f43fce8dbdf3c4f8d0ac91f0de1d43d.gif) 分别是两个特征的值,![x_{1}x_{2}](../Images/tex-f8281cafb08efe03bce3816f00fdd12d.gif) 表示两者之间的交互。使用 scikit-learn 的`PolynomialFeatures`,来为所有特征组合创建交互术项会很有用。 然后,我们可以使用模型选择策略,来识别产生最佳模型的特征和交互项的组合。 +其中 ![x_{1}](../img/tex-f9a3b8e9e501458e8face47cae8826de.gif) 和 ![x_{2}](../img/tex-8f43fce8dbdf3c4f8d0ac91f0de1d43d.gif) 分别是两个特征的值,![x_{1}x_{2}](../img/tex-f8281cafb08efe03bce3816f00fdd12d.gif) 表示两者之间的交互。使用 scikit-learn 的`PolynomialFeatures`,来为所有特征组合创建交互术项会很有用。 然后,我们可以使用模型选择策略,来识别产生最佳模型的特征和交互项的组合。 ```py # 创建交互项(非多项式特征) @@ -158,7 +158,7 @@ scaler = StandardScaler() X_std = scaler.fit_transform(X) ``` -超参数 ![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 让我们控制我们对系数的惩罚程度,更高的 ![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 值创建更简单的模型。![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 的理想值应该像任何其他超参数一样调整。 在 scikit-learn中,使用`alpha`参数设置 ![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif)。 +超参数 ![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 让我们控制我们对系数的惩罚程度,更高的 ![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 值创建更简单的模型。![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 的理想值应该像任何其他超参数一样调整。 在 scikit-learn中,使用`alpha`参数设置 ![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif)。 ```py # 创建带有某个 alpha 值的 Lasso @@ -307,14 +307,14 @@ list(y_test)[0:5] 用于量化`Y`的最常见统计量是**残差平方和**: -![RSS = \sum_{i=1}^{n}(y_{i}-f(x_{i}))^{2}](../Images/tex-52539b56794b13d260a84f3461c80f49.gif) +![RSS = \sum_{i=1}^{n}(y_{i}-f(x_{i}))^{2}](../img/tex-52539b56794b13d260a84f3461c80f49.gif) 不要让数学符号吓到: -* ![f(x_{i})](../Images/tex-7e18dabda345d4f3a3642ecf7fa61ccf.gif) 是我们训练的模型:`model.predict(X_test)` -* ![y_{i}](../Images/tex-18daef71b5d25ce76b8628a81e4fc76b.gif) 是测试数据的`y`:`y_test` -* ![^{2}](../Images/tex-272ba5cfd2789d670bc65e40587345c3.gif) 是指数:`**2` -* ![\sum_{i=1}^{n}](../Images/tex-50d7cc01f0e1e57d81240e646606b14a.gif) 是求和:`.sum()` +* ![f(x_{i})](../img/tex-7e18dabda345d4f3a3642ecf7fa61ccf.gif) 是我们训练的模型:`model.predict(X_test)` +* ![y_{i}](../img/tex-18daef71b5d25ce76b8628a81e4fc76b.gif) 是测试数据的`y`:`y_test` +* ![^{2}](../img/tex-272ba5cfd2789d670bc65e40587345c3.gif) 是指数:`**2` +* ![\sum_{i=1}^{n}](../img/tex-50d7cc01f0e1e57d81240e646606b14a.gif) 是求和:`.sum()` 在残差的平方和中,对于每个观测,我们找到模型的预测`Y`和实际`Y`值之间的差异,然后将该差异平方来使所有值为正。 然后我们将所有这些平方差加在一起得到一个数字。 最终结果是一个统计量,表示模型的预测与实际值的距离。 @@ -394,7 +394,7 @@ scaler = StandardScaler() X_std = scaler.fit_transform(X) ``` -超参数 ![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 让我们控制我们对系数的惩罚程度,更高的 ![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 值创建更简单的模型。![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 的理想值应该像任何其他超参数一样调整。 在 scikit-learn中,使用`alpha`参数设置 ![\alpha](../Images/tex-7b7f9dbfea05c83784f8b85149852f08.gif)。 +超参数 ![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 让我们控制我们对系数的惩罚程度,更高的 ![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 值创建更简单的模型。![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif) 的理想值应该像任何其他超参数一样调整。 在 scikit-learn中,使用`alpha`参数设置 ![\alpha](../img/tex-7b7f9dbfea05c83784f8b85149852f08.gif)。 ```py # 创建带有 alpha 值的岭回归 @@ -429,7 +429,7 @@ X_std = scaler.fit_transform(X) regr_cv = RidgeCV(alphas=[0.1, 1.0, 10.0]) ``` -scikit-learn 包含`RidgeCV`方法,允许我们为 ![\ alpha](../Images/tex-d945100c5fa6a400570dcacfb1fc9869.gif) 选择理想值: +scikit-learn 包含`RidgeCV`方法,允许我们为 ![\ alpha](../img/tex-d945100c5fa6a400570dcacfb1fc9869.gif) 选择理想值: ```py # 拟合岭回归 diff --git a/12.md b/12.md index 056c484..a62ec3c 100644 --- a/12.md +++ b/12.md @@ -39,9 +39,9 @@ LogisticRegressionCV(Cs=100, class_weight=None, cv=None, dual=False, 像 scikit-learn 中的许多其他学习算法一样,`LogisticRegression`带有处理不平衡类的内置方法。 如果我们有高度不平衡的类,并且在预处理期间没有解决它,我们可以选择使用`class_weight`参数来对类加权,确保我们拥有每个类的平衡组合。 具体来说,`balanced`参数会自动对类加权,与其频率成反比: -![w_j = \frac{n}{kn_{j}}](../Images/tex-bde5f474d3e4c7e38ddd6440a38a7f4e.gif) +![w_j = \frac{n}{kn_{j}}](../img/tex-bde5f474d3e4c7e38ddd6440a38a7f4e.gif) -其中 ![w_j](../Images/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 的权重,![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观察数,![n_j](../Images/tex-4aa861124eff57dd7988faa6753e8b7e.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 中的观察数,![k](../Images/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 是类的总数。 +其中 ![w_j](../img/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 的权重,![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观察数,![n_j](../img/tex-4aa861124eff57dd7988faa6753e8b7e.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 中的观察数,![k](../img/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 是类的总数。 ```py # 加载库 @@ -75,11 +75,11 @@ model = clf.fit(X_std, y) ## 逻辑回归 -尽管其名称中存在“回归”,但逻辑回归实际上是广泛使用的二分类器(即,目标向量只有两个值)。 在逻辑回归中,线性模型(例如 ![\beta_{0} + \beta_ {1} x](../Images/tex-31f830c208ca5fcbf1bca34de8d796a6.gif))包含在 logit(也称为 sigmoid)函数中,![{\frac{1}{1 + e^{-z}}](../Images/tex-ad6d5470eaff252c993327c248d56b0e.gif),满足: +尽管其名称中存在“回归”,但逻辑回归实际上是广泛使用的二分类器(即,目标向量只有两个值)。 在逻辑回归中,线性模型(例如 ![\beta_{0} + \beta_ {1} x](../img/tex-31f830c208ca5fcbf1bca34de8d796a6.gif))包含在 logit(也称为 sigmoid)函数中,![{\frac{1}{1 + e^{-z}}](../img/tex-ad6d5470eaff252c993327c248d56b0e.gif),满足: -![P(y_i=1 \mid X)={\frac{1}{1+e^{-(\beta_{0}+\beta_{1}x)}}}](../Images/tex-777eeb07996381e00006e77dd1aaf39f.gif) +![P(y_i=1 \mid X)={\frac{1}{1+e^{-(\beta_{0}+\beta_{1}x)}}}](../img/tex-777eeb07996381e00006e77dd1aaf39f.gif) -其中 ![P(y_i=1 \mid X)](../Images/tex-2b30ddf4881c9acfc3bc0cf2880eefaa.gif) 是第 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测的目标值 ![y_i](../Images/tex-8d62e469fb30ed435a668eb5c035b1f6.gif) 为 1 的概率,![X](../Images/tex-02129bb861061d1a052c592e2dc6b383.gif) 是训练数据,![\beta_0](../Images/tex-5af9e28d609b16eb25693f44ea9d7a8f.gif) 和 ![\beta_1](../Images/tex-b4ceec2c4656f5c1e7fc76c59c4f80f3.gif) 是要学习的参数,![e](../Images/tex-e1671797c52e15f763380b45e841ec32.gif) 是自然常数。 +其中 ![P(y_i=1 \mid X)](../img/tex-2b30ddf4881c9acfc3bc0cf2880eefaa.gif) 是第 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测的目标值 ![y_i](../img/tex-8d62e469fb30ed435a668eb5c035b1f6.gif) 为 1 的概率,![X](../img/tex-02129bb861061d1a052c592e2dc6b383.gif) 是训练数据,![\beta_0](../img/tex-5af9e28d609b16eb25693f44ea9d7a8f.gif) 和 ![\beta_1](../img/tex-b4ceec2c4656f5c1e7fc76c59c4f80f3.gif) 是要学习的参数,![e](../img/tex-e1671797c52e15f763380b45e841ec32.gif) 是自然常数。 ```py # 加载库 diff --git a/13.md b/13.md index 11be715..0358723 100644 --- a/13.md +++ b/13.md @@ -89,9 +89,9 @@ y = boston.target 决策树回归的工作方式类似于决策树分类,但不是减少基尼杂质或熵,而是测量潜在的分割点,它们减少均方误差(MSE)的程度: -![\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2](../Images/tex-ecc57614c202a2c740598474fdbbb88e.gif) +![\text{MSE} = \frac{1}{n} \sum_{i=1}^{n} (y_i - \hat{y}_i)^2](../img/tex-ecc57614c202a2c740598474fdbbb88e.gif) -其中 ![y_i](../Images/tex-8d62e469fb30ed435a668eb5c035b1f6.gif) 是目标的真实值,![\hat{y}_i](../Images/tex-99600e95adcc97c986df86d4b612cf52.gif) 是预测值。 +其中 ![y_i](../img/tex-8d62e469fb30ed435a668eb5c035b1f6.gif) 是目标的真实值,![\hat{y}_i](../img/tex-99600e95adcc97c986df86d4b612cf52.gif) 是预测值。 ```py # 创建决策树回归器对象 @@ -335,9 +335,9 @@ y = np.where((y == 0), 0, 1) 当使用`RandomForestClassifier`时,有用的设置是`class_weight = balanced`,其中类自动加权,与它们在数据中出现的频率成反比。具体来说: -![w_j = \frac{n}{kn_{j}}](../Images/tex-bde5f474d3e4c7e38ddd6440a38a7f4e.gif) +![w_j = \frac{n}{kn_{j}}](../img/tex-bde5f474d3e4c7e38ddd6440a38a7f4e.gif) -其中 ![w_j](../Images/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 的权重,![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观测数,![n_j](../Images/tex-4aa861124eff57dd7988faa6753e8b7e.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 中的观测数,![k](../Images/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 是类的总数。 +其中 ![w_j](../img/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 的权重,![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观测数,![n_j](../img/tex-4aa861124eff57dd7988faa6753e8b7e.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 中的观测数,![k](../img/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 是类的总数。 ```py # 创建决策树分类器对象 diff --git a/14.md b/14.md index bf42e52..e8887b4 100644 --- a/14.md +++ b/14.md @@ -53,11 +53,11 @@ K 最近邻分类器(KNN)是一种简单而强大的分类学习器。 KNN 有三个基本部分 -* ![y_i](../Images/tex-8d62e469fb30ed435a668eb5c035b1f6.gif): 观测的类别(我们试图在测试数据中预测的东西)。 -* ![X_i](../Images/tex-a97118fb9e8d7e006a466bfc0771f888.gif): 观察的预测因子/ IV /属性。 -* ![K](../Images/tex-a5f3c6a11b03839d46af9fb43c97c188.gif): 研究者指定的正数。 K 表示最接近特定观测的观测数,它定义了“邻域”。 例如,`K = 2`意味着每个观测都有一个邻域,包含最接近它的另外两个观测。 +* ![y_i](../img/tex-8d62e469fb30ed435a668eb5c035b1f6.gif): 观测的类别(我们试图在测试数据中预测的东西)。 +* ![X_i](../img/tex-a97118fb9e8d7e006a466bfc0771f888.gif): 观察的预测因子/ IV /属性。 +* ![K](../img/tex-a5f3c6a11b03839d46af9fb43c97c188.gif): 研究者指定的正数。 K 表示最接近特定观测的观测数,它定义了“邻域”。 例如,`K = 2`意味着每个观测都有一个邻域,包含最接近它的另外两个观测。 -想象一下,我们有一个观测,我们知道它的自变量 ![x_{test}](../Images/tex-6b5a5f025640932b2554f6d400b3e45f.gif),但不知道它的类别 ![y_{test}](../Images/tex-c39d1645d55ca4afb20c8d6a365615bb.gif)。 KNN 学习器找到最接近 ![x_{test}](../Images/tex-6b5a5f025640932b2554f6d400b3e45f.gif) 的K个其他观测,并使用他们已知的类别,将类别分配给 ![x_{test}](../Images/tex-6b5a5f025640932b2554f6d400b3e45f.gif)。 +想象一下,我们有一个观测,我们知道它的自变量 ![x_{test}](../img/tex-6b5a5f025640932b2554f6d400b3e45f.gif),但不知道它的类别 ![y_{test}](../img/tex-c39d1645d55ca4afb20c8d6a365615bb.gif)。 KNN 学习器找到最接近 ![x_{test}](../img/tex-6b5a5f025640932b2554f6d400b3e45f.gif) 的K个其他观测,并使用他们已知的类别,将类别分配给 ![x_{test}](../img/tex-6b5a5f025640932b2554f6d400b3e45f.gif)。 ```py import pandas as pd @@ -123,7 +123,7 @@ trained_model.score(X, y) 注:在任何现实世界的例子中,我们都希望将训练的模型与一些保留的测试数据进行比较。 但由于这是一个玩具示例,我使用了训练数据。 -现在我们已经训练了我们的模型,我们可以预测班级的任何新观测,![y_{test}](../Images/tex-c39d1645d55ca4afb20c8d6a365615bb.gif)。 我们现在就这样做吧! +现在我们已经训练了我们的模型,我们可以预测班级的任何新观测,![y_{test}](../img/tex-c39d1645d55ca4afb20c8d6a365615bb.gif)。 我们现在就这样做吧! ```py # 使用 'test_1' 第一个和第二个自变量的值 diff --git a/15.md b/15.md index 849dfd6..22364fe 100644 --- a/15.md +++ b/15.md @@ -10,9 +10,9 @@ SVC 使用超平面来创建决策区域,不会自然输出观察是某一类成员的概率估计。 但是,我们实际上可以通过一些技巧输出校准的类概率。 在 SVC 中,可以使用 Platt 缩放,其中首先训练 SVC,然后训练单独的交叉验证逻辑回归来将 SVC 输出映射到概率: -![P(y=1 \mid x)={\frac {1}{1+e^{(A*f(x)+B)}}}](../Images/tex-fd6a329594a8718f6de1a6d5728eb7b7.gif) +![P(y=1 \mid x)={\frac {1}{1+e^{(A*f(x)+B)}}}](../img/tex-fd6a329594a8718f6de1a6d5728eb7b7.gif) -其中 ![A](../Images/tex-7fc56270e7a70fa81a5935b72eacbe29.gif) 和 ![B](../Images/tex-9d5ed678fe57bcca610140957afab571.gif) 是参数向量,![f](../Images/tex-8fa14cdd754f91cc6554c9e71929cce7.gif) 是第 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测点与超平面的有符号距离。 当我们有两个以上的类时,使用 Platt 缩放的扩展。 +其中 ![A](../img/tex-7fc56270e7a70fa81a5935b72eacbe29.gif) 和 ![B](../img/tex-9d5ed678fe57bcca610140957afab571.gif) 是参数向量,![f](../img/tex-8fa14cdd754f91cc6554c9e71929cce7.gif) 是第 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测点与超平面的有符号距离。 当我们有两个以上的类时,使用 Platt 缩放的扩展。 在 scikit-learn 中,必须在训练模型时生成预测概率。 这可以通过将`SVC`的`probability`设置为`True`来完成。 在训练模型之后,我们可以使用`predict_proba`输出每个类的估计概率。 @@ -149,17 +149,17 @@ model.n_support_ ## SVM 不平衡分类 -在支持向量机中,![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif) 是一个超参数,用于确定对观测的错误分类的惩罚。 处理支持向量机中处理不平衡类的一种方法是按类加权 ![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif)。 +在支持向量机中,![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif) 是一个超参数,用于确定对观测的错误分类的惩罚。 处理支持向量机中处理不平衡类的一种方法是按类加权 ![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif)。 -![C_k = C * w_j](../Images/tex-a276b69c27fa2fc5adb0a238cb21baa3.gif) +![C_k = C * w_j](../img/tex-a276b69c27fa2fc5adb0a238cb21baa3.gif) -其中 ![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif) 是错误分类的惩罚,![w_j](../Images/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是与类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 频率成反比的权重,![C_j](../Images/tex-1ae38954f6cba2eafda4e9c34df8d944.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 的 ![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif) 值。 一般的想法是,增加对少数类的错误分类的惩罚,来防止他们被多数类“淹没”。 +其中 ![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif) 是错误分类的惩罚,![w_j](../img/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是与类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 频率成反比的权重,![C_j](../img/tex-1ae38954f6cba2eafda4e9c34df8d944.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 的 ![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif) 值。 一般的想法是,增加对少数类的错误分类的惩罚,来防止他们被多数类“淹没”。 -在 scikit-learn 中,当使用`SVC`时,我们可以通过设置`class_weight ='balanced'`来自动设置 ![C_j](../Images/tex-1ae38954f6cba2eafda4e9c34df8d944.gif) 的值.`balance`参数自动对类进行加权,使得: +在 scikit-learn 中,当使用`SVC`时,我们可以通过设置`class_weight ='balanced'`来自动设置 ![C_j](../img/tex-1ae38954f6cba2eafda4e9c34df8d944.gif) 的值.`balance`参数自动对类进行加权,使得: -![w_j = \frac{n}{kn_{j}}](../Images/tex-bde5f474d3e4c7e38ddd6440a38a7f4e.gif) +![w_j = \frac{n}{kn_{j}}](../img/tex-bde5f474d3e4c7e38ddd6440a38a7f4e.gif) -其中 ![w_j](../Images/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 的权重,![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观察数,![n_j](../Images/tex-4aa861124eff57dd7988faa6753e8b7e.gif) 是类 ![j](../Images/tex-363b122c528f54df4a0446b6bab05515.gif) 中的观测数,![k](../Images/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 是类的总数。 +其中 ![w_j](../img/tex-e8100be07fa5419af6c6738b934dfca0.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 的权重,![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观察数,![n_j](../img/tex-4aa861124eff57dd7988faa6753e8b7e.gif) 是类 ![j](../img/tex-363b122c528f54df4a0446b6bab05515.gif) 中的观测数,![k](../img/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 是类的总数。 ```py # 加载库 @@ -348,9 +348,9 @@ plt.show() 径向基函数是 SVC 中常用的核: -![K(\mathbf {x} ,\mathbf {x’} )=\exp \left(-{\frac {||\mathbf {x} -\mathbf {x’} ||^{2}}{2\sigma ^{2}}}\right)](../Images/tex-d5cd57541fb4b75d5fdbd688f87323d5.gif) +![K(\mathbf {x} ,\mathbf {x’} )=\exp \left(-{\frac {||\mathbf {x} -\mathbf {x’} ||^{2}}{2\sigma ^{2}}}\right)](../img/tex-d5cd57541fb4b75d5fdbd688f87323d5.gif) -其中 ![||\mathbf {x} -\mathbf {x’} ||^{2}](../Images/tex-6fe2793f9b6ee038f11e89402bbf3c84.gif) 是两个数据点 ![\mathbf{x}](../Images/tex-70e59a996bd69a0c21878b4093375e92.gif) 和 ![\mathbf{x'}](../Images/tex-fc3b69ffc2761499a8f26feaaf2f3057.gif) 之间的欧几里德距离的平方。 如果你不了解,塞巴斯蒂安的书有完整的描述。 但是,对于本教程,重要的是要知道,使用 RBF 核的 SVC 分类器有两个参数:`gamma`和`C`。 +其中 ![||\mathbf {x} -\mathbf {x’} ||^{2}](../img/tex-6fe2793f9b6ee038f11e89402bbf3c84.gif) 是两个数据点 ![\mathbf{x}](../img/tex-70e59a996bd69a0c21878b4093375e92.gif) 和 ![\mathbf{x'}](../img/tex-fc3b69ffc2761499a8f26feaaf2f3057.gif) 之间的欧几里德距离的平方。 如果你不了解,塞巴斯蒂安的书有完整的描述。 但是,对于本教程,重要的是要知道,使用 RBF 核的 SVC 分类器有两个参数:`gamma`和`C`。 ### Gamma @@ -543,9 +543,9 @@ plt.show() ![](img/3f0ca2e88676e335b8b20523ff94fec7.jpg) -SVC 在最大化超平面边距和最小化错误分类之间取得平衡。 在 SVC 中,后者由超参数 ![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif) 控制,对错误施加惩罚。`C`是 SVC 学习器的参数,是对数据点进行错误分类的惩罚。 当`C`很小时,分类器可以使用错误分类的数据点(高偏差但低方差)。 当`C`很大时,分类器因错误分类的数据而受到严重惩罚,因此向后弯曲避免任何错误分类的数据点(低偏差但高方差)。 +SVC 在最大化超平面边距和最小化错误分类之间取得平衡。 在 SVC 中,后者由超参数 ![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif) 控制,对错误施加惩罚。`C`是 SVC 学习器的参数,是对数据点进行错误分类的惩罚。 当`C`很小时,分类器可以使用错误分类的数据点(高偏差但低方差)。 当`C`很大时,分类器因错误分类的数据而受到严重惩罚,因此向后弯曲避免任何错误分类的数据点(低偏差但高方差)。 -在 scikit-learn 中,![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif) 由参数`C`确定,默认为`C = 1.0`。 我们应该将 ![C](../Images/tex-0d61f8370cad1d412f80b84d143e1257.gif) 看做我们应该学习的算法的超参数,我们使用模型选择技术调整它。 +在 scikit-learn 中,![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif) 由参数`C`确定,默认为`C = 1.0`。 我们应该将 ![C](../img/tex-0d61f8370cad1d412f80b84d143e1257.gif) 看做我们应该学习的算法的超参数,我们使用模型选择技术调整它。 ```py # 加载库 diff --git a/16.md b/16.md index 01cb32a..bff631a 100644 --- a/16.md +++ b/16.md @@ -121,9 +121,9 @@ model.predict(new_observation) 在多项逻辑回归(MLR)中,我们在 Recipe 15.1 中看到的逻辑函数被 softmax 函数替换: -![P(y_i=k \mid X)={\frac {e^{\beta_{k}x_{i}}}{{\sum_{j=1}^{K}}e^{\beta_{j}x_{i}}}}](../Images/tex-45fe873d5f83badc655eed13e1cd8ee8.gif) +![P(y_i=k \mid X)={\frac {e^{\beta_{k}x_{i}}}{{\sum_{j=1}^{K}}e^{\beta_{j}x_{i}}}}](../img/tex-45fe873d5f83badc655eed13e1cd8ee8.gif) -其中 ![P(y_i=k \mid X)](../Images/tex-08c711a5590de57d9dd77d7b5ba4398f.gif) 是第 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测的目标值 ![y_i](../Images/tex-8d62e469fb30ed435a668eb5c035b1f6.gif) 是类 ![k](../Images/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 的概率,![K](../Images/tex-a5f3c6a11b03839d46af9fb43c97c188.gif) 是类的总数。MLR 的一个实际优点是使用`predict_proba`方法预测的概率更可靠(即校准更好)。 +其中 ![P(y_i=k \mid X)](../img/tex-08c711a5590de57d9dd77d7b5ba4398f.gif) 是第 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测的目标值 ![y_i](../img/tex-8d62e469fb30ed435a668eb5c035b1f6.gif) 是类 ![k](../img/tex-8ce4b16b22b58894aa86c421e8759df3.gif) 的概率,![K](../img/tex-a5f3c6a11b03839d46af9fb43c97c188.gif) 是类的总数。MLR 的一个实际优点是使用`predict_proba`方法预测的概率更可靠(即校准更好)。 ```py # 加载库 @@ -259,43 +259,43 @@ person 贝叶斯定理是一个着名的方程,它允许我们根据数据进行预测。 这是贝叶斯定理的经典版本: -![\displaystyle P(A\mid B)={\frac {P(B\mid A)\,P(A)}{P(B)}}](../Images/tex-55ddce33f44e17960c51e0b727ed0c1b.gif) +![\displaystyle P(A\mid B)={\frac {P(B\mid A)\,P(A)}{P(B)}}](../img/tex-55ddce33f44e17960c51e0b727ed0c1b.gif) 这可能过于抽象,所以让我们替换一些变量以使其更具体。 在贝叶斯分类器中,给定数据的情况下,我们有兴趣找出观测的类别(例如男性或女性,垃圾邮件或非垃圾邮件): -![p(\text{class} \mid \mathbf {\text{data}} )={\frac {p(\mathbf {\text{data}} \mid \text{class}) * p(\text{class})}{p(\mathbf {\text{data}} )}}](../Images/tex-682edd15f544ef9727367918185ee5f4.gif) +![p(\text{class} \mid \mathbf {\text{data}} )={\frac {p(\mathbf {\text{data}} \mid \text{class}) * p(\text{class})}{p(\mathbf {\text{data}} )}}](../img/tex-682edd15f544ef9727367918185ee5f4.gif) 其中: -* ![\text{class}](../Images/tex-7015ea99e7b80644c1630cdfb0f6bbda.gif) 是特定类别(例如男性) -* ![\mathbf {\text{data}}](../Images/tex-8a842403dafad0ee564a1a212d19e77a.gif) 是观测的数据 -* ![p(\text{class} \mid \mathbf {\text{data}} )](../Images/tex-dabc824c5f8ee13faaae5a59fec9afdc.gif) 称为后验 -* ![p(\text{data|class})](../Images/tex-347685e5ebc84836b7aea484b48eb555.gif) 叫做似然 -* ![p(\text{class})](../Images/tex-09663031eaa8ade66806d053272e579c.gif) 叫做先验 -* ![p(\mathbf {\text{data}} )](../Images/tex-69c694c13d6cb056f400aff019f023dd.gif) 叫做边缘概率 +* ![\text{class}](../img/tex-7015ea99e7b80644c1630cdfb0f6bbda.gif) 是特定类别(例如男性) +* ![\mathbf {\text{data}}](../img/tex-8a842403dafad0ee564a1a212d19e77a.gif) 是观测的数据 +* ![p(\text{class} \mid \mathbf {\text{data}} )](../img/tex-dabc824c5f8ee13faaae5a59fec9afdc.gif) 称为后验 +* ![p(\text{data|class})](../img/tex-347685e5ebc84836b7aea484b48eb555.gif) 叫做似然 +* ![p(\text{class})](../img/tex-09663031eaa8ade66806d053272e579c.gif) 叫做先验 +* ![p(\mathbf {\text{data}} )](../img/tex-69c694c13d6cb056f400aff019f023dd.gif) 叫做边缘概率 在贝叶斯分类器中,我们计算每个观测的每个类的后验(严格来说,我们只计算后验的分子,但现在忽略它)。 然后,基于后验值最大的类别对观测分类。 在我们的例子中,我们为观测预测两个可能的类别(例如男性和女性),因此我们将计算两个后验:一个用于男性,一个用于女性。 -![p(\text{person is male} \mid \mathbf {\text{person’s data}} )={\frac {p(\mathbf {\text{person’s data}} \mid \text{person is male}) * p(\text{person is male})}{p(\mathbf {\text{person’s data}} )}}](../Images/tex-7d627c4584744c44dde8a2e35bcfb90c.gif) +![p(\text{person is male} \mid \mathbf {\text{person’s data}} )={\frac {p(\mathbf {\text{person’s data}} \mid \text{person is male}) * p(\text{person is male})}{p(\mathbf {\text{person’s data}} )}}](../img/tex-7d627c4584744c44dde8a2e35bcfb90c.gif) -![p(\text{person is female} \mid \mathbf {\text{person’s data}} )={\frac {p(\mathbf {\text{person’s data}} \mid \text{person is female}) * p(\text{person is female})}{p(\mathbf {\text{person’s data}} )}}](../Images/tex-b6253f470c6bf31d67e04d80d43704be.gif) +![p(\text{person is female} \mid \mathbf {\text{person’s data}} )={\frac {p(\mathbf {\text{person’s data}} \mid \text{person is female}) * p(\text{person is female})}{p(\mathbf {\text{person’s data}} )}}](../img/tex-b6253f470c6bf31d67e04d80d43704be.gif) 高斯朴素的贝叶斯可能是最受欢迎的贝叶斯分类器。 为了解释这个名称的含义,让我们看一下当我们应用两个类别(男性和女性)和三个特征变量(高度,重量和尺寸)时贝叶斯方程式的样子: -![{\displaystyle {\text{posterior (male)}}={\frac {P({\text{male}})\,p({\text{height}}\mid{\text{male}})\,p({\text{weight}}\mid{\text{male}})\,p({\text{foot size}}\mid{\text{male}})}{\text{marginal probability}}}}](../Images/tex-ea7e2e0d45588bedd672db7688459b46.gif) +![{\displaystyle {\text{posterior (male)}}={\frac {P({\text{male}})\,p({\text{height}}\mid{\text{male}})\,p({\text{weight}}\mid{\text{male}})\,p({\text{foot size}}\mid{\text{male}})}{\text{marginal probability}}}}](../img/tex-ea7e2e0d45588bedd672db7688459b46.gif) -![{\displaystyle {\text{posterior (female)}}={\frac {P({\text{female}})\,p({\text{height}}\mid{\text{female}})\,p({\text{weight}}\mid{\text{female}})\,p({\text{foot size}}\mid{\text{female}})}{\text{marginal probability}}}}](../Images/tex-41410fd2b1e89fe55a7638312d82540c.gif) +![{\displaystyle {\text{posterior (female)}}={\frac {P({\text{female}})\,p({\text{height}}\mid{\text{female}})\,p({\text{weight}}\mid{\text{female}})\,p({\text{foot size}}\mid{\text{female}})}{\text{marginal probability}}}}](../img/tex-41410fd2b1e89fe55a7638312d82540c.gif) 现在让我们解释一下上面的方程式: -* ![P({\text{male}})](../Images/tex-9081cb9b8d4cd5ee177a3287608f7424.gif) 是先验概率。正如你所看到的,只是观测是男性的概率。 这只是数据集中的男性数量除以数据集中的总人数。 -* ![p({\text{height}}\mid{\text{female}})\,p({\text{weight}}\mid{\text{female}})\,p({\text{foot size}}\mid{\text{female}})](../Images/tex-a061b9ec570e172274d24a31b7f2ec4e.gif) 是似然。注意我们已经解释了 ![\mathbf {\text{person’s data}}](../Images/tex-a6b711ff5b6087f86069d31ba049add7.gif) 所以它现在是数据集中的每个特征。“高斯”和“朴素”来自似然中的两个假设: +* ![P({\text{male}})](../img/tex-9081cb9b8d4cd5ee177a3287608f7424.gif) 是先验概率。正如你所看到的,只是观测是男性的概率。 这只是数据集中的男性数量除以数据集中的总人数。 +* ![p({\text{height}}\mid{\text{female}})\,p({\text{weight}}\mid{\text{female}})\,p({\text{foot size}}\mid{\text{female}})](../img/tex-a061b9ec570e172274d24a31b7f2ec4e.gif) 是似然。注意我们已经解释了 ![\mathbf {\text{person’s data}}](../img/tex-a6b711ff5b6087f86069d31ba049add7.gif) 所以它现在是数据集中的每个特征。“高斯”和“朴素”来自似然中的两个假设: 1. 如果你查看似然中的每项,你会注意到,我们假设每个特征彼此不相关。 也就是说,脚码与体重或身高等无关。这显然不是真的,而且是一个“朴素”的假设 - 因此称为“朴素贝叶斯”。 - 2. 其次,我们假设特征的值(例如女性的身体,女性的体重)通常是高斯分布的。这意味着 ![p(\text{height}\mid\text{female})](../Images/tex-de3f198290bfe64e8e3f289f20c44434.gif) 是通过将所需参数输入正态分布的概率密度函数来计算的: + 2. 其次,我们假设特征的值(例如女性的身体,女性的体重)通常是高斯分布的。这意味着 ![p(\text{height}\mid\text{female})](../img/tex-de3f198290bfe64e8e3f289f20c44434.gif) 是通过将所需参数输入正态分布的概率密度函数来计算的: -![p(\text{height}\mid\text{female})=\frac{1}{\sqrt{2\pi\text{variance of female height in the data}}}\,e^{ -\frac{(\text{observation’s height}-\text{average height of females in the data})^2}{2\text{variance of female height in the data}} }](../Images/tex-e125e16b9b9b9a753459b31c44e565da.gif) +![p(\text{height}\mid\text{female})=\frac{1}{\sqrt{2\pi\text{variance of female height in the data}}}\,e^{ -\frac{(\text{observation’s height}-\text{average height of females in the data})^2}{2\text{variance of female height in the data}} }](../img/tex-e125e16b9b9b9a753459b31c44e565da.gif) -* ![\text{marginal probability}](../Images/tex-5765c72ae234bd48dadb3a8bfd20580b.gif) 可能是贝叶斯方法中最令人困惑的部分之一。 在玩具示例(包括我们的)中,完全可以计算边际概率。 但是,在许多实际情况中,要找到边际概率的值极其困难或不可能(解释为什么超出了本教程的范围)。 对于我们的分类器来说,这并不像你想象的那么严重。 为什么? 因为我们不关心真正的后验值是什么,我们只关心哪个类具有最高的后验值。 并且因为边际概率对于所有类别都是相同的,(1)我们可以忽略分母,(2)只计算每个类的后验分子,(3)选择最大的分子。 也就是说,我们可以忽略后验分母,并仅根据后验分子的相对值进行预测。 +* ![\text{marginal probability}](../img/tex-5765c72ae234bd48dadb3a8bfd20580b.gif) 可能是贝叶斯方法中最令人困惑的部分之一。 在玩具示例(包括我们的)中,完全可以计算边际概率。 但是,在许多实际情况中,要找到边际概率的值极其困难或不可能(解释为什么超出了本教程的范围)。 对于我们的分类器来说,这并不像你想象的那么严重。 为什么? 因为我们不关心真正的后验值是什么,我们只关心哪个类具有最高的后验值。 并且因为边际概率对于所有类别都是相同的,(1)我们可以忽略分母,(2)只计算每个类的后验分子,(3)选择最大的分子。 也就是说,我们可以忽略后验分母,并仅根据后验分子的相对值进行预测。 好的! 理论结束。 现在让我们开始计算贝叶斯方程的所有不同部分。 @@ -318,9 +318,9 @@ P_male = n_male/total_ppl P_female = n_female/total_ppl ``` -请记住,我们的似然中的每一项(例如 ![p(\text{height}\mid\text{female})](../Images/tex-de3f198290bfe64e8e3f289f20c44434.gif))都可以看做正态的 PDF。 例如: +请记住,我们的似然中的每一项(例如 ![p(\text{height}\mid\text{female})](../img/tex-de3f198290bfe64e8e3f289f20c44434.gif))都可以看做正态的 PDF。 例如: -![p(\text{height}\mid\text{female})=\frac{1}{\sqrt{2\pi\text{variance of female height in the data}}}\,e^{ -\frac{(\text{observation’s height}-\text{average height of females in the data})^2}{2\text{variance of female height in the data}} }](../Images/tex-e125e16b9b9b9a753459b31c44e565da.gif) +![p(\text{height}\mid\text{female})=\frac{1}{\sqrt{2\pi\text{variance of female height in the data}}}\,e^{ -\frac{(\text{observation’s height}-\text{average height of females in the data})^2}{2\text{variance of female height in the data}} }](../img/tex-e125e16b9b9b9a753459b31c44e565da.gif) 这意味着对于每个类别(例如女性)和特征(例如身高)组合,我们需要从数据计算方差和均值。Pandas 让这很容易: @@ -376,7 +376,7 @@ female_weight_variance = data_variance['Weight'][data_variance.index == 'female' female_footsize_variance = data_variance['Foot_Size'][data_variance.index == 'female'].values[0] ``` -最后,我们需要创建一个函数来计算每个似然项的概率密度(例如 ![p(\text{height}\mid\text{female})](../Images/tex-de3f198290bfe64e8e3f289f20c44434.gif))。 +最后,我们需要创建一个函数来计算每个似然项的概率密度(例如 ![p(\text{height}\mid\text{female})](../img/tex-de3f198290bfe64e8e3f289f20c44434.gif))。 ```py # 创建计算 p(x | y) 的函数 @@ -391,7 +391,7 @@ def p_x_given_y(x, mean_y, variance_y): 好的! 我们的贝叶斯分类器准备就绪。 请记住,既然我们可以忽略边际概率(分母),我们实际计算的是: -![{\displaystyle {\text{numerator of the posterior}}={P({\text{female}})\,p({\text{height}}\mid{\text{female}})\,p({\text{weight}}\mid{\text{female}})\,p({\text{foot size}}\mid{\text{female}})}{}}](../Images/tex-68ce6a2b5a771f689d84ac8e24e31ddf.gif) +![{\displaystyle {\text{numerator of the posterior}}={P({\text{female}})\,p({\text{height}}\mid{\text{female}})\,p({\text{weight}}\mid{\text{female}})\,p({\text{foot size}}\mid{\text{female}})}{}}](../img/tex-68ce6a2b5a771f689d84ac8e24e31ddf.gif) 为此,我们只需要插入未分类个体(`height = 6`)的值,数据集的变量(例如女性身高的均值)和我们上面编写的函数(`p_x_given_y`): diff --git a/17.md b/17.md index b3e282a..662fc9f 100644 --- a/17.md +++ b/17.md @@ -111,11 +111,11 @@ model = KMeans(n_clusters=2, random_state=1).fit(X) y_hat = model.labels_ ``` -正式地,第 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测的轮廓系数是: +正式地,第 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 个观测的轮廓系数是: -![s_{i} = \frac{b_{i} - a_{i}}{\text{max}(a_{i}, b_{i})}](../Images/tex-08ab6c8d7eefc2ed7722b28e671aa0bc.gif) +![s_{i} = \frac{b_{i} - a_{i}}{\text{max}(a_{i}, b_{i})}](../img/tex-08ab6c8d7eefc2ed7722b28e671aa0bc.gif) -其中 ![s_{i}](../Images/tex-e5a7472d780a5a032c7775cc5e3ce901.gif) 是观测 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 的轮廓系数,![a_{i}](../Images/tex-d8dd7d0f3eb7145ca41c711457b7eb8f.gif) 是 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 和同类的所有观测值之间的平均距离,而 ![b_{i}](../Images/tex-c9f6d8557ce40f989fa727b5c0bb1ddf.gif) 是 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 和不同类的所有观测的平均距离的最小值。`silhouette_score`返回的值是所有观测值的平均轮廓系数。 轮廓系数介于 -1 和 1 之间,其中 1 表示密集,分离良好的聚类。 +其中 ![s_{i}](../img/tex-e5a7472d780a5a032c7775cc5e3ce901.gif) 是观测 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 的轮廓系数,![a_{i}](../img/tex-d8dd7d0f3eb7145ca41c711457b7eb8f.gif) 是 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 和同类的所有观测值之间的平均距离,而 ![b_{i}](../img/tex-c9f6d8557ce40f989fa727b5c0bb1ddf.gif) 是 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 和不同类的所有观测的平均距离的最小值。`silhouette_score`返回的值是所有观测值的平均轮廓系数。 轮廓系数介于 -1 和 1 之间,其中 1 表示密集,分离良好的聚类。 ```py # 评估模型 diff --git a/18.md b/18.md index a995301..a803260 100644 --- a/18.md +++ b/18.md @@ -347,9 +347,9 @@ network.add(layers.Dense(units=1)) 因为我们正在训练回归,所以我们应该使用适当的损失函数和评估度量,在我们的例子中是均方误差: -![\operatorname {MSE}={\frac {1}{n}}\sum_{{i=1}}^{n}({\hat {y_{i}}}-y_{i})^{2}](../Images/tex-1a68df3b73be15a6da50bd6cfdba832a.gif) +![\operatorname {MSE}={\frac {1}{n}}\sum_{{i=1}}^{n}({\hat {y_{i}}}-y_{i})^{2}](../img/tex-1a68df3b73be15a6da50bd6cfdba832a.gif) -其中 ![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观测数量,![y_{i}](../Images/tex-18daef71b5d25ce76b8628a81e4fc76b.gif) 是我们试图预测的目标 ![y](../Images/tex-415290769594460e2e485922904f345d.gif) 对于观测 ![i](../Images/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 的真实值, ![{\hat{y_{i}}](../Images/tex-1aa7c4b9ac179483858f457df9ee441b.gif) 是 ![y_{i}](../Images/tex-18daef71b5d25ce76b8628a81e4fc76b.gif) 的模型预测值。 +其中 ![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观测数量,![y_{i}](../img/tex-18daef71b5d25ce76b8628a81e4fc76b.gif) 是我们试图预测的目标 ![y](../img/tex-415290769594460e2e485922904f345d.gif) 对于观测 ![i](../img/tex-865c0c0b4ab0e063e5caa3387c1a8741.gif) 的真实值, ![{\hat{y_{i}}](../img/tex-1aa7c4b9ac179483858f457df9ee441b.gif) 是 ![y_{i}](../img/tex-18daef71b5d25ce76b8628a81e4fc76b.gif) 的模型预测值。 ```py # 编译神经网络 diff --git a/2.md b/2.md index 2066257..a01a835 100644 --- a/2.md +++ b/2.md @@ -427,7 +427,7 @@ saved_model = pickle.dumps(clf) # 查看 pickled 模型 saved_model -# b'\x80\x03csklearn.linear_model.logistic\nLogisticRegression\nq\x00)\x81q\x01}q\x02(X\x07\x00\x00\x00penaltyq\x03X\x02\x00\x00\x00l2q\x04X\x0b\x00\x00\x00multi_classq\x05X\x03\x00\x00\x00ovrq\x06X\x08\x00\x00\x00max_iterq\x07KdX\x08\x00\x00\x00classes_q\x08cnumpy.core.multiarray\n_reconstruct\nq\tcnumpy\nndarray\nq\nK\x00\x85q\x0bC\x01bq\x0c\x87q\rRq\x0e(K\x01K\x03\x85q\x0fcnumpy\ndtype\nq\x10X\x02\x00\x00\x00i8q\x11K\x00K\x01\x87q\x12Rq\x13(K\x03X\x01\x00\x00\x00X\t\x00\x00\x00liblinearq?X\x0c\x00\x00\[[email protected]](/cdn-cgi/l/email-protection)' +# b'\x80\x03csklearn.linear_model.logistic\nLogisticRegression\nq\x00)\x81q\x01}q\x02(X\x07\x00\x00\x00penaltyq\x03X\x02\x00\x00\x00l2q\x04X\x0b\x00\x00\x00multi_classq\x05X\x03\x00\x00\x00ovrq\x06X\x08\x00\x00\x00max_iterq\x07KdX\x08\x00\x00\x00classes_q\x08cnumpy.core.multiarray\n_reconstruct\nq\tcnumpy\nndarray\nq\nK\x00\x85q\x0bC\x01bq\x0c\x87q\rRq\x0e(K\x01K\x03\x85q\x0fcnumpy\ndtype\nq\x10X\x02\x00\x00\x00i8q\x11K\x00K\x01\x87q\x12Rq\x13(K\x03X\x01\x00\x00\x00X\t\x00\x00\x00liblinearq?X\x0c\x00\x00\[[email protected]](/cdn-cgi/l/email-protection)' # 加载 pickled 模型 clf_from_pickle = pickle.loads(saved_model) diff --git a/21.md b/21.md index f7c978e..1411f71 100644 --- a/21.md +++ b/21.md @@ -8,15 +8,15 @@ ## 贝塞尔校正 -贝塞尔的校正是我们在样本方差和样本标准差的计算中使用 ![n-1](../Images/tex-a438673491daae8148eae77373b6a467.gif) 而不是 ![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 的原因。 +贝塞尔的校正是我们在样本方差和样本标准差的计算中使用 ![n-1](../img/tex-a438673491daae8148eae77373b6a467.gif) 而不是 ![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 的原因。 样本方差: -![ s^2 = \frac {1}{n-1} \sum_{i=1}^n \left(x_i - \overline{x} \right)^ 2 ](../Images/tex-5e956d2dac25a04b1f0384a339af61de.gif) +![ s^2 = \frac {1}{n-1} \sum_{i=1}^n \left(x_i - \overline{x} \right)^ 2 ](../img/tex-5e956d2dac25a04b1f0384a339af61de.gif) 当我们计算样本方差时,我们试图估计总体方差,这是一个未知值。 为了进行这种估计,我们从样本与总体均值的平方差的平均值,来估计未知的总体方差。 这种估计技术的负面影响是,因为我们正在采样,我们更有可能观察到差较小的观测,因为它们更常见(例如它们是分布的中心)。 按照定义我们将低估总体方差。 -弗里德里希贝塞尔发现,通过将有偏差(未校正)的样本方差 ![s_n^2 = \frac {1}{n} \sum_{i=1}^n \left(x_i - \overline{x} \right)^ 2](../Images/tex-9a7cc99da8feacd5e7efd172ae2b9b5d.gif) 乘以 ![\frac{n}{n-1}](../Images/tex-b3d4a2c5b40d7af881f9d19730b6ea7c.gif),我们将能够减少这种偏差,从而能够准确估计总体方差和标准差。 乘法的最终结果是无偏样本方差。 +弗里德里希贝塞尔发现,通过将有偏差(未校正)的样本方差 ![s_n^2 = \frac {1}{n} \sum_{i=1}^n \left(x_i - \overline{x} \right)^ 2](../img/tex-9a7cc99da8feacd5e7efd172ae2b9b5d.gif) 乘以 ![\frac{n}{n-1}](../img/tex-b3d4a2c5b40d7af881f9d19730b6ea7c.gif),我们将能够减少这种偏差,从而能够准确估计总体方差和标准差。 乘法的最终结果是无偏样本方差。 ## 演示中心极限定律 @@ -96,9 +96,9 @@ y = [2,1,2,4.5,7,6.5,6,9,9.5] ``` 有许多等价的表达方式来计算皮尔逊相关系数(也称为皮尔逊的 r)。这是一个。 -![r={\frac {1}{n-1}}\sum_{i=1}^{n}\left({\frac {x_{i}-{\bar {x}}}{s_{x}}}\right)\left({\frac {y_{i}-{\bar {y}}}{s_{y}}}\right)](../Images/tex-ddc7076014b85741e2dbfe52ec40ed52.gif) +![r={\frac {1}{n-1}}\sum_{i=1}^{n}\left({\frac {x_{i}-{\bar {x}}}{s_{x}}}\right)\left({\frac {y_{i}-{\bar {y}}}{s_{y}}}\right)](../img/tex-ddc7076014b85741e2dbfe52ec40ed52.gif) -其中 ![s_{x}](../Images/tex-6b5eaa31568b521152a5aacec91548c2.gif) 和 ![s_{y}](../Images/tex-8c06f77a048c7032b6258f4ceddcac77.gif) 是 ![x](../Images/tex-9dd4e461268c8034f5c8564e155c67a6.gif) 和 ![y ](../Images/tex-5fdb0734a2a8679264029c65df7a492b.gif) 的标准差,![\left({\frac {x_{i}-{\bar {x}}}{s_{x}}}\right)](../Images/tex-9ed438b9777ace57e974cb63995679ed.gif) 是 ![x](../Images/tex-9dd4e461268c8034f5c8564e155c67a6.gif) 和 ![y](../Images/tex-415290769594460e2e485922904f345d.gif) 的[标准得分](https://en.wikipedia.org/wiki/Standard_score)。 +其中 ![s_{x}](../img/tex-6b5eaa31568b521152a5aacec91548c2.gif) 和 ![s_{y}](../img/tex-8c06f77a048c7032b6258f4ceddcac77.gif) 是 ![x](../img/tex-9dd4e461268c8034f5c8564e155c67a6.gif) 和 ![y ](../img/tex-5fdb0734a2a8679264029c65df7a492b.gif) 的标准差,![\left({\frac {x_{i}-{\bar {x}}}{s_{x}}}\right)](../img/tex-9ed438b9777ace57e974cb63995679ed.gif) 是 ![x](../img/tex-9dd4e461268c8034f5c8564e155c67a6.gif) 和 ![y](../img/tex-415290769594460e2e485922904f345d.gif) 的[标准得分](https://en.wikipedia.org/wiki/Standard_score)。 ```py # 创建函数 @@ -281,13 +281,13 @@ import math data = [3,2,3,4,2,3,5,2,2,33,3,5,2,2,5,6,62,2,2,3,6,6,2,23,3,2,3] ``` -方差是衡量数据分布延展度的指标。 方差越大,数据点越“分散”。 方差,通常表示为 ![ S^{2}](../Images/tex-10ac877830803e44c3b7dc1b104101dd.gif),计算方式如下: +方差是衡量数据分布延展度的指标。 方差越大,数据点越“分散”。 方差,通常表示为 ![ S^{2}](../img/tex-10ac877830803e44c3b7dc1b104101dd.gif),计算方式如下: -![ \text{Population Variance} = S_n^{2} = \frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^{2}](../Images/tex-cea485c1212579d0e0fb0f665f5a85dd.gif) +![ \text{Population Variance} = S_n^{2} = \frac{1}{n}\sum_{i=1}^{n}(x_i-\bar{x})^{2}](../img/tex-cea485c1212579d0e0fb0f665f5a85dd.gif) -![ \text{Sample Variance} = S_{n-1}^{2} = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^{2}](../Images/tex-48d71f5dc3c36e27922ff67fe9e88c6e.gif) +![ \text{Sample Variance} = S_{n-1}^{2} = \frac{1}{n-1}\sum_{i=1}^{n}(x_i-\bar{x})^{2}](../img/tex-48d71f5dc3c36e27922ff67fe9e88c6e.gif) -其中 ![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观测数,![\bar{x}](../Images/tex-6fbdf291cda891b99cf211417ad1df18.gif) 是观察值的平均值,![x_i-\bar{x}](../Images/tex-d5530fdea73b725bbdb348dee89e4a20.gif) 是单个观察值减去数据均值。 请注意,如果我们根据来自该总体的样本估计总体的方差,我们应该使用第二个等式,将 ![n](../Images/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 替换为 ![n-1](../Images/tex-a438673491daae8148eae77373b6a467.gif)。 +其中 ![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 是观测数,![\bar{x}](../img/tex-6fbdf291cda891b99cf211417ad1df18.gif) 是观察值的平均值,![x_i-\bar{x}](../img/tex-d5530fdea73b725bbdb348dee89e4a20.gif) 是单个观察值减去数据均值。 请注意,如果我们根据来自该总体的样本估计总体的方差,我们应该使用第二个等式,将 ![n](../img/tex-7b8b965ad4bca0e41ab51de7b31363a1.gif) 替换为 ![n-1](../img/tex-a438673491daae8148eae77373b6a467.gif)。 ```py # 计算 n diff --git a/4.md b/4.md index a97de4f..ec79fb2 100644 --- a/4.md +++ b/4.md @@ -15,7 +15,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image_grey = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) +image_grey = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) # 应用自适应阈值 max_output_value = 255 @@ -33,7 +33,7 @@ plt.imshow(image_binarized, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/binarize_image/binarize_image_8_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/binarize_image/binarize_image_8_0.png) ## 图像模糊 @@ -44,7 +44,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) +image = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) # 使图像模糊 image_blurry = cv2.blur(image, (5,5)) @@ -54,7 +54,7 @@ plt.imshow(image_blurry, cmap='gray'), plt.xticks([]), plt.yticks([]) plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/blurring_images/blurring_images_8_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/blurring_img/blurring_images_8_0.png) ## 图像剪裁 @@ -65,7 +65,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) +image = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) # 选择所有行,和前一半的列 image_cropped = image[:,:126] @@ -75,7 +75,7 @@ plt.imshow(image_cropped, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/cropping_images/cropping_images_8_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/cropping_img/cropping_images_8_0.png) ## 边缘检测 @@ -86,7 +86,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image_gray = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) +image_gray = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) # 计算强度中值 median_intensity = np.median(image_gray) @@ -103,7 +103,7 @@ plt.imshow(image_canny, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/detect_edges/detect_edges_8_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/detect_edges/detect_edges_8_0.png) ## 增强彩色图像的对比度 @@ -114,7 +114,7 @@ import numpy as np from matplotlib import pyplot as plt # 加载图像 -image_bgr = cv2.imread('images/plane.jpg') +image_bgr = cv2.imread('img/plane.jpg') # 转换为 YUV image_yuv = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2YUV) @@ -130,7 +130,7 @@ plt.imshow(image_rgb), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/enhance_contrast_of_color_image/enhance_contrast_of_color_image_12_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/enhance_contrast_of_color_image/enhance_contrast_of_color_image_12_0.png) ## 增强灰度图像的对比度 @@ -141,7 +141,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) +image = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) # 增强图像 image_enhanced = cv2.equalizeHist(image) @@ -151,7 +151,7 @@ plt.imshow(image_enhanced, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/enhance_contrast_of_greyscale_image/enhance_contrast_of_greyscale_image_8_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/enhance_contrast_of_greyscale_image/enhance_contrast_of_greyscale_image_8_0.png) # Harris 角点检测 @@ -164,7 +164,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image_bgr = cv2.imread('images/plane_256x256.jpg') +image_bgr = cv2.imread('img/plane_256x256.jpg') image_gray = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2GRAY) image_gray = np.float32(image_gray) @@ -191,7 +191,7 @@ plt.imshow(image_gray, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/harris_corner_detector/harris_corner_detector_13_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/harris_corner_detector/harris_corner_detector_13_0.png) # 安装 OpenCV @@ -222,7 +222,7 @@ import numpy as np from matplotlib import pyplot as plt # 加载图像 -image_bgr = cv2.imread('images/plane_256x256.jpg') +image_bgr = cv2.imread('img/plane_256x256.jpg') # 将 BGR 转换为 HSV image_hsv = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2HSV) @@ -245,7 +245,7 @@ plt.imshow(image_rgb), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/isolate_colors/isolate_colors_14_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/isolate_colors/isolate_colors_14_0.png) ## 加载图像 @@ -256,18 +256,18 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image = cv2.imread('images/plane.jpg', cv2.IMREAD_GRAYSCALE) +image = cv2.imread('img/plane.jpg', cv2.IMREAD_GRAYSCALE) # 展示图像 plt.imshow(image, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/load_images/load_images_4_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/load_img/load_images_4_0.png) ```py # 加载彩色图像 -image_bgr = cv2.imread('images/plane.jpg', cv2.IMREAD_COLOR) +image_bgr = cv2.imread('img/plane.jpg', cv2.IMREAD_COLOR) # 转换为 RGB image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) @@ -277,7 +277,7 @@ plt.imshow(image_rgb), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/load_images/load_images_6_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/load_img/load_images_6_0.png) ```py # 展示图像数据 @@ -310,7 +310,7 @@ import numpy as np from matplotlib import pyplot as plt # 加载图像 -image_bgr = cv2.imread('images/plane_256x256.jpg') +image_bgr = cv2.imread('img/plane_256x256.jpg') # 转换为 RGB image_rgb = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2RGB) @@ -345,7 +345,7 @@ plt.imshow(image_rgb_nobg), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/remove_backgrounds/remove_backgrounds_13_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/remove_backgrounds/remove_backgrounds_13_0.png) ## 保存图像 @@ -356,18 +356,18 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image = cv2.imread('images/plane.jpg', cv2.IMREAD_GRAYSCALE) +image = cv2.imread('img/plane.jpg', cv2.IMREAD_GRAYSCALE) # 展示图像 plt.imshow(image, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/save_images/save_images_4_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/save_img/save_images_4_0.png) ```py # 保存图像 -cv2.imwrite('images/plane_new.jpg', image) +cv2.imwrite('img/plane_new.jpg', image) # True ``` @@ -381,7 +381,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为灰度 -image = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) +image = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_GRAYSCALE) # 创建核 kernel = np.array([[0, -1, 0], @@ -396,7 +396,7 @@ plt.imshow(image_sharp, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/sharpen_images/sharpen_images_8_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/sharpen_img/sharpen_images_8_0.png) ## Shi-Tomasi 角点检测 @@ -407,7 +407,7 @@ import numpy as np from matplotlib import pyplot as plt # 加载图像 -image_bgr = cv2.imread('images/plane_256x256.jpg') +image_bgr = cv2.imread('img/plane_256x256.jpg') image_gray = cv2.cvtColor(image_bgr, cv2.COLOR_BGR2GRAY) # 要检测的角点数量 @@ -435,7 +435,7 @@ plt.imshow(image_gray, cmap='gray'), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/ski-tomasi_corner_detector/ski-tomasi_corner_detector_12_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/ski-tomasi_corner_detector/ski-tomasi_corner_detector_12_0.png) ## 使用颜色均值作为特征 @@ -446,7 +446,7 @@ import numpy as np from matplotlib import pyplot as plt # 将图像加载为 BGR -image_bgr = cv2.imread('images/plane_256x256.jpg', cv2.IMREAD_COLOR) +image_bgr = cv2.imread('img/plane_256x256.jpg', cv2.IMREAD_COLOR) # 计算每个通道的均值 channels = cv2.mean(image_bgr) @@ -464,4 +464,4 @@ plt.imshow(observation), plt.axis("off") plt.show() ``` -![png](https://chrisalbon.com/machine_learning/preprocessing_images/using_mean_color_as_a_feature/using_mean_color_as_a_feature_10_0.png) +![png](https://chrisalbon.com/machine_learning/preprocessing_img/using_mean_color_as_a_feature/using_mean_color_as_a_feature_10_0.png) diff --git a/8.md b/8.md index cee75d6..d78d431 100644 --- a/8.md +++ b/8.md @@ -8,7 +8,7 @@ ## 用于特征选取的 ANOVA F 值 -如果特征是类别的,计算每个特征与目标向量之间的卡方(![\chi^{2}](../Images/tex-2f728dbcde765f5a357bce9752c0d878.gif))统计量。 但是,如果特征是定量的,则计算每个特征与目标向量之间的 ANOVA F 值。 +如果特征是类别的,计算每个特征与目标向量之间的卡方(![\chi^{2}](../img/tex-2f728dbcde765f5a357bce9752c0d878.gif))统计量。 但是,如果特征是定量的,则计算每个特征与目标向量之间的 ANOVA F 值。 F 值得分检查当我们按照目标向量对数字特征进行分组时,每个组的均值是否显着不同。 @@ -202,9 +202,9 @@ X = [[0, 1, 0], 在二元特征(即伯努利随机变量)中,方差计算如下: -![![\operatorname {Var} (x)= p(1-p)](../Images/tex-46277250c0e8d4fadf188d0d22fa1343.gif)](../Images/tex-6959801ea921957ed53ddaab936b9409.gif) +![![\operatorname {Var} (x)= p(1-p)](../img/tex-46277250c0e8d4fadf188d0d22fa1343.gif)](../img/tex-6959801ea921957ed53ddaab936b9409.gif) -其中 ![p](../Images/tex-83878c91171338902e0fe0fb97a8c47a.gif) 是类 1 观测的比例。 因此,通过设置 ![p](../Images/tex-83878c91171338902e0fe0fb97a8c47a.gif),我们可以删除绝大多数观察是类 1 的特征。 +其中 ![p](../img/tex-83878c91171338902e0fe0fb97a8c47a.gif) 是类 1 观测的比例。 因此,通过设置 ![p](../img/tex-83878c91171338902e0fe0fb97a8c47a.gif),我们可以删除绝大多数观察是类 1 的特征。 ```py # Run threshold by variance diff --git a/src/process_tex.js b/src/process_tex.js index 41b574c..8db5590 100644 --- a/src/process_tex.js +++ b/src/process_tex.js @@ -20,7 +20,7 @@ function processTex(md) { var img = request('get', url).getBody() // replace_all - md = md.split(rm[0]).join(`![${tex}](../Images/tex-${tex_md5}.gif)`) + md = md.split(rm[0]).join(`![${tex}](../img/tex-${tex_md5}.gif)`) fs.writeFileSync(`${img_dir}/tex-${tex_md5}.gif`, img) console.log(tex_md5) -- GitLab