提交 81d7ec1d 编写于 作者: W wizardforcel

2021-02-22 21:31:48

上级 f99a01f3
......@@ -556,9 +556,9 @@ correlation (pageSpeeds, purchaseAmount)
我试图以条件概率来查找是否有两个相互依赖的事件。 也就是说,两者都会发生的概率是多少?
用数学符号表示,这里的方式是 *P(A,B)*表示 A 和 B 彼此独立发生的概率。 也就是说,无论其他什么情况,这两种情况发生的概率是多少?
用数学符号表示,这里的方式是`P(A, B)`表示 A 和 B 彼此独立发生的概率。 也就是说,无论其他什么情况,这两种情况发生的概率是多少?
而将 *P(B | A)*表示为给定 A 的 B 的概率。那么,给定事件 A 已经发生的 B 的概率是多少? 有点不同,这些东西是这样关联的:
而将`P(B | A)`表示为给定 A 的 B 的概率。那么,给定事件 A 已经发生的 B 的概率是多少? 有点不同,这些东西是这样关联的:
![](img/37e81c3a-f563-41db-b0ec-13cdf30b6947.png)
......@@ -568,11 +568,11 @@ correlation (pageSpeeds, purchaseAmount)
假设我给您,我的读者两个测试,并且你们中有 60% 通过了这两个测试。 现在,第一个测试更加容易,您中的 80% 通过了该测试。 我可以使用此信息来计算通过第一项考试的读者中还通过第二项考试的读者所占的百分比。 因此,这是一个真实的例子,说明给定 B 的 B 概率与 A 和 B 的概率之间的差异。
我将 A 表示通过第一项测试的概率,将 B 表示通过第二项测试的概率。 我要寻找的是给定您通过了第一项考试即第二项考试的概率,即 *P(B | A)*
我将 A 表示通过第一项测试的概率,将 B 表示通过第二项测试的概率。 我要寻找的是给定您通过了第一项考试即第二项考试的概率,即`P(B | A)`
![](img/e4de6cdd-edda-437a-8e02-a49b596bf779.png)
因此,假设您通过了第一个测试,则通过第二个测试的概率等于通过两个测试的概率 *P(A,B)*(我知道您中有 60% 的人通过了两个测试,而与每个测试都无关 其他)除以通过第一项测试的概率 *P(A)*,即 80%。 算出 60% 的人通过了两个测试,80% 的人通过了第一次测试,因此,如果您通过了第一个测试,则通过第二次测试的概率为 75%。
因此,假设您通过了第一个测试,则通过第二个测试的概率等于通过两个测试的概率`P(A, B)`(我知道您中有 60% 的人通过了两个测试,而与每个测试都无关 其他)除以通过第一项测试的概率`P(A)`,即 80%。 算出 60% 的人通过了两个测试,80% 的人通过了第一次测试,因此,如果您通过了第一个测试,则通过第二次测试的概率为 75%。
好吧,围绕这个概念有点困难。 我花了一些时间才真正地内化了某些事物给定某种事物的概率与两件事相互独立发生的概率之间的差异。 在继续之前,请确保内部化此示例及其实际工作方式。
......@@ -611,9 +611,9 @@ for _ in range(100000):
我们的`totals`字典告诉我们每个年龄段有多少人,并且分布均匀,就像我们期望的那样。 实际上,每个年龄段的购买量都随着年龄的增长而增加,因此 20 岁的人只购买了大约 3,000 东西,而 70 岁的人购买了大约 11,000 的东西,整个人口总共购买了大约 45,000 的东西。
让我们使用这些数据来研究条件概率的想法。 让我们首先弄清楚,如果您 30 岁左右,可以购买东西的可能性是多少。 如果我们称购买商品为 E,则表示该符号为 *P(E | F)*;如果您的年龄在 30 多岁,则表示 F。
让我们使用这些数据来研究条件概率的想法。 让我们首先弄清楚,如果您 30 岁左右,可以购买东西的可能性是多少。 如果我们称购买商品为 E,则表示该符号为`P(E | F)`;如果您的年龄在 30 多岁,则表示 F。
现在我们有了这个奇特的方程式,它为您提供了一种在给定 *P(E,F)**P(E)*的情况下计算 *P(E | F)*的方式 ,但我们不需要。 您不会在看到任何东西时盲目地应用方程式。 您必须直观地考虑数据。 它告诉我们什么? 考虑到您 30 多岁,我想算出购买商品的可能性。 好吧,我拥有直接计算所需的所有数据。
现在我们有了这个奇特的方程式,它为您提供了一种在给定`P(E, F)``P(E)`的情况下计算`P(E | F)`的方式 ,但我们不需要。 您不会在看到任何东西时盲目地应用方程式。 您必须直观地考虑数据。 它告诉我们什么? 考虑到您 30 多岁,我想算出购买商品的可能性。 好吧,我拥有直接计算所需的所有数据。
```py
PEF = float(purchases[30]) / float(totals[30])
......@@ -641,7 +641,7 @@ print "p(purchase | 30s): ", PEF
```
如果我想找到 *P(F)*,那仅是总体上是 30 的概率,我可以将 30 岁的总人数除以我的数据集中的人数,即 100,000 :
如果我想找到`P(F)`,那仅是总体上是 30 的概率,我可以将 30 岁的总人数除以我的数据集中的人数,即 100,000 :
```py
PF = float(totals[30]) / 100000.0
......@@ -658,7 +658,7 @@ P(30's): 0.16619
我知道进入您的`30s`的可能性约为 16%。
现在,我们将找出 *P(E)*,它仅代表购买产品的总体可能性,与您的年龄无关:
现在,我们将找出`P(E)`,它仅代表购买产品的总体可能性,与您的年龄无关:
```py
PE = float(totalPurchases) / 100000.0
......@@ -672,9 +672,9 @@ P(Purchase): 0.45012
好吧,那我这里有什么? 假设您在 30 多岁时购买的东西大约是 30%,那么我有购买的可能性,那么总体上,我有购买大约 45% 的东西的可能性。
现在,如果 E 和 F 独立,并且年龄无关紧要,那么我希望 *P(E | F)**P(E)*大致相同。 考虑到您 30 多岁,我希望购买商品的可能性与购买商品的整体可能性大致相同,但事实并非如此,对吧? 而且因为它们不同,所以告诉我它们实际上是某种程度上的依赖。 因此,这是使用条件概率来梳理数据中这些依赖关系的一种小方法。
现在,如果 E 和 F 独立,并且年龄无关紧要,那么我希望`P(E | F)``P(E)`大致相同。 考虑到您 30 多岁,我希望购买商品的可能性与购买商品的整体可能性大致相同,但事实并非如此,对吧? 而且因为它们不同,所以告诉我它们实际上是某种程度上的依赖。 因此,这是使用条件概率来梳理数据中这些依赖关系的一种小方法。
让我们在这里做更多的注释。 如果一起看到 *P(E)P(F)*,则意味着将这些概率相乘。 我可以将购买的总概率乘以`30s`中的总概率:
让我们在这里做更多的注释。 如果一起看到`P(E)P(F)`,则意味着将这些概率相乘。 我可以将购买的总概率乘以`30s`中的总概率:
```py
print ("P(30's)P(Purchase)", PE * PF)
......@@ -685,7 +685,7 @@ P(30's)P(Purchase) 0.07480544280000001
算下来大约是 7.5%。
从概率的工作方式来看,我知道,如果我想获得两件事同时发生的概率,那就像乘以它们各自的概率一样。 因此,事实证明 *P(E,F)*的发生与 *P(E)P(F)*相同。
从概率的工作方式来看,我知道,如果我想获得两件事同时发生的概率,那就像乘以它们各自的概率一样。 因此,事实证明`P(E, F)`的发生与`P(E)P(F)`相同。
```py
print ("P(30's, Purchase)", float(purchases[30]) / 100000.0)
......@@ -695,9 +695,9 @@ P(30's, Purchase) 0.04974
现在,由于数据的随机分布,它不可能完全相同。 记住,我们在这里谈论的是概率,但是它们在同一范围内,所以有意义的是,大约 5% 对 7%,足够接近。
现在,这又不同于 *P(E | F)*,因此既在`30s`中又购买东西的概率不同于在`30s`中购买东西的概率 ]。
现在,这又不同于`P(E | F)`,因此既在`30s`中又购买东西的概率不同于在`30s`中购买东西的概率 ]。
现在,让我们在这里进行一些理智检查。 我们可以检查前面在“条件概率”部分中看到的等式,该方程式表示,假设您在`30s`中,则购买某物的概率与在`30s`中并在某物上购买某物的概率相同 买东西的可能性。 也就是说,我们检查 *P(E | F)= P(E,F)/ P(F)*
现在,让我们在这里进行一些理智检查。 我们可以检查前面在“条件概率”部分中看到的等式,该方程式表示,假设您在`30s`中,则购买某物的概率与在`30s`中并在某物上购买某物的概率相同 买东西的可能性。 也就是说,我们检查`P(E | F) = P(E, F) / P(F)`
```py
(float(purchases[30]) / 100000.0) / PF
......@@ -711,7 +711,7 @@ Out []:0.29929598652145134
```
果然,它确实可以解决。 如果我考虑买入某物的概率高于您在`30s`中的总概率,那么我们最终得到大约 30%,这几乎是我们最初为 *P(E | F )*。 所以方程式起作用了,是的!
果然,它确实可以解决。 如果我考虑买入某物的概率高于您在`30s`中的总概率,那么我们最终得到大约 30%,这几乎是我们最初为`P(E | F)`。 所以方程式起作用了,是的!
好吧,很难缠住这些东西。 我知道这有点令人困惑,但是如果您需要,请再次进行遍历,研究一下,并确保您了解这里发生的事情。 我在这里尝试输入足够的示例,以说明对这些内容的不同思考组合。 一旦您将其内部化,我将挑战您自己在这里实际进行一些工作。
......@@ -765,7 +765,7 @@ for _ in range(100000):
我在这里所做的是,我使用了原始代码段来创建我们的年龄组字典,以及每个年龄组为 100,000 个随机人群购买了多少代码。 我没有使购买概率取决于年龄,而是使它成为 40% 的恒定概率。 现在,我们只是将人们随机分配到一个年龄段,他们都有相同的购买可能性。 让我们继续运行它。
现在,这一次,如果我计算 *P(E | F)*,即假设您在`30s`中,则有购买某物品的可能性,我得出了大约 40% 的概率。
现在,这一次,如果我计算`P(E | F)`,即假设您在`30s`中,则有购买某物品的可能性,我得出了大约 40% 的概率。
```py
PEF = float(purchases[30]) / float(totals[30])
......@@ -785,7 +785,7 @@ P(Purchase): 0.4003
```
我在这里可以看到,假设您身在`30s`中,则购买商品的可能性与不考虑年龄的商品(即 *P(E | F)* 非常接近 *P(E)*)。 这表明这两件事之间没有真正的关系,实际上,我知道这些数据中没有。
我在这里可以看到,假设您身在`30s`中,则购买商品的可能性与不考虑年龄的商品(即`P(E | F)` 非常接近`P(E)`)。 这表明这两件事之间没有真正的关系,实际上,我知道这些数据中没有。
现在,在实践中,您可能只是看到随机的机会,因此,您想要研究多个年龄段的人。 您可能希望查看多个数据点,以查看是否确实存在关联,但这表明在我们修改的此示例数据中,年龄和购买可能性之间没有关联。
......@@ -820,15 +820,15 @@ P(Purchase): 0.4003
因此,让事件 A 表示您是某种药物的使用者,事件 B 表示您使用此药物测试对药物进行了积极测试的事件。
我们需要确定总体上进行积极测试的可能性。 如果您是用户,则可以通过测试呈阳性的概率之和,如果您不是用户,则可以通过测试呈阳性的概率之和。 因此,在此示例中,P(B)计算为 1.3%(0.99 * 0.003 + 0.01 * 0.997)。 因此,我们有 B 的概率,即在不了解您的情况下对整个药物进行积极测试的概率。
我们需要确定总体上进行积极测试的可能性。 如果您是用户,则可以通过测试呈阳性的概率之和,如果您不是用户,则可以通过测试呈阳性的概率之和。 因此,在此示例中,P(B)计算为 1.3%(`0.99 * 0.003 + 0.01 * 0.997`)。 因此,我们有 B 的概率,即在不了解您的情况下对整个药物进行积极测试的概率。
假设您的测试积极,让我们进行数学计算并计算出成为该药物使用者的可能性。
![](img/dc189173-51c2-4167-9314-8c8d5e278215.png)
因此,假设您实际上是一名吸毒者,则检测结果呈阳性的概率就是成为吸毒者整体*(P(A))*的概率,即 3%(您知道 (3% 的人口是吸毒者)乘以 *P(B | A)*,即假设您是用户,则该测试为阳性的概率除以总体测试为阳性的概率 1.3 %。 再次,此测试听起来像是 99% 的非常高的准确性。 我们有 0.3% 的人口使用某种药物,乘以 99% 的准确度,再除以总体检测呈阳性的概率,即 1.3%。 因此,如果您对它进行了阳性测试,那么成为该药物的实际使用者的概率只有 22.8%。 因此,即使此药物测试在 99% 的时间内都是准确的,但在您测试呈阳性的大多数情况下,它仍提供错误的结果。
因此,假设您实际上是一名吸毒者,则检测结果呈阳性的概率就是成为吸毒者整体`P(A)`)的概率,即 3%(您知道 (3% 的人口是吸毒者)乘以`P(B | A)`,即假设您是用户,则该测试为阳性的概率除以总体测试为阳性的概率 1.3 %。 再次,此测试听起来像是 99% 的非常高的准确性。 我们有 0.3% 的人口使用某种药物,乘以 99% 的准确度,再除以总体检测呈阳性的概率,即 1.3%。 因此,如果您对它进行了阳性测试,那么成为该药物的实际使用者的概率只有 22.8%。 因此,即使此药物测试在 99% 的时间内都是准确的,但在您测试呈阳性的大多数情况下,它仍提供错误的结果。
即使 *P(B | A)*高(99%),也并不意味着 *P(A | B)*高。
即使`P(B | A)`高(99%),也并不意味着`P(A | B)`高。
人们一直无视这一点,因此,如果要从贝叶斯定理中吸取教训,那就总是将这类事情付之东流。 将贝叶斯定理应用于这些实际问题,您经常会发现,如果您要解决给定问题的总体发生率较低的情况,那么听起来准确率很高的结果实际上可能会产生非常令人误解的结果。 我们在癌症筛查和其他类型的医学筛查中也看到了同样的事情。 这是一个非常现实的问题。 由于不了解贝叶斯定理,导致许多人接受非常非常非常真实且不必要的手术。 如果您要进入具有大数据的医学专业,请,请记住这个定理。
......
......@@ -18,7 +18,7 @@
![](img/0c9e8d83-c2cb-419a-a681-48b1790465ed.png)
我在`x`轴上显示了重量,在`y`轴上显示了高度,我可以绘制所有这些数据点,例如人们的体重与身高, 我可以说:“嗯,这看起来像是线性关系,不是吗?也许我可以在其中拟合一条直线,然后用它来预测新值”,这就是线性回归的作用。 在本例中,我的斜率为 0.6,`y`-截距为 130.2,它们定义了一条直线(直线的等式为 *y = mx + b* , 其中,m 是斜率,b 是`y`-截距)。 给定一个斜率和一个`y`-截距,该截距适合我所拥有的最佳数据,我可以使用该线来预测新值。
我在`x`轴上显示了重量,在`y`轴上显示了高度,我可以绘制所有这些数据点,例如人们的体重与身高, 我可以说:“嗯,这看起来像是线性关系,不是吗?也许我可以在其中拟合一条直线,然后用它来预测新值”,这就是线性回归的作用。 在本例中,我的斜率为 0.6,`y`-截距为 130.2,它们定义了一条直线(直线的等式为`y = mx + b`, 其中,m 是斜率,b 是`y`-截距)。 给定一个斜率和一个`y`-截距,该截距适合我所拥有的最佳数据,我可以使用该线来预测新值。
您可以看到,我观察到的重量仅上升到重 100 公斤的人。 如果有人重 120 公斤怎么办? 好吧,我可以根据之前的数据,使用那条线找出身高 120 公斤的人的身高在哪里。
......@@ -34,7 +34,7 @@
现在,您将不再需要真正地自己动手做,但是如果您出于某些原因必须这样做,或者您只是对幕后发生的事情感到好奇,我现在将为您描述整体算法,并 如何实际计算斜率和`y`-如果需要一天的时间,则很难拦截自己。 其实并不那么复杂。
还记得直线的斜率截距方程吗? 它是 *y = mx + c* 。 斜率刚好是两个变量之间的相关性乘以`Y`中的标准偏差除以`X`中的标准偏差。 标准差只是自然而然地渗入到数学中似乎有些奇怪,但是请记住,相关性也已纳入标准差,因此不必重新引入该术语也就不足为奇了。
还记得直线的斜率截距方程吗? 它是`y = mx + c`。 斜率刚好是两个变量之间的相关性乘以`Y`中的标准偏差除以`X`中的标准偏差。 标准差只是自然而然地渗入到数学中似乎有些奇怪,但是请记住,相关性也已纳入标准差,因此不必重新引入该术语也就不足为奇了。
然后可以将截距计算为`Y`的平均值减去斜率乘以`X`的平均值。 再说一次,尽管实际上并不是那么困难,Python 会为您完成所有工作,但要点是,这些并不是要运行的复杂事情。 实际上,它们可以非常有效地完成。
......@@ -153,9 +153,9 @@ plt.show()
多项式回归是回归的更一般情况。 那么,为什么将自己限制在一条直线上呢? 也许您的数据实际上没有线性关系,或者可能有某种曲线,对吗? 这种情况经常发生。
并非所有关系都是线性的,但是线性回归只是我们可以做的一整类回归的一个例子。 如果您还记得我们最终得到的线性回归线的形式为 *y = mx + b* ,则可以从普通最小二乘法或其他方法的线性回归分析中获得 m 和 b 的值 你选。 现在,这只是一阶或一阶多项式。 阶数或次数是您看到的 x 的幂。 这就是一阶多项式。
并非所有关系都是线性的,但是线性回归只是我们可以做的一整类回归的一个例子。 如果您还记得我们最终得到的线性回归线的形式为`y = mx + b`,则可以从普通最小二乘法或其他方法的线性回归分析中获得 m 和 b 的值 你选。 现在,这只是一阶或一阶多项式。 阶数或次数是您看到的 x 的幂。 这就是一阶多项式。
现在,如果需要,我们还可以使用二阶多项式,看起来像 *y = ax ^ 2 + bx + c* 。 如果我们使用二阶多项式进行回归,则将获得 a,b 和 c 的值。 或者我们可以做一个 *ax ^ 3 + bx ^ 2 + cx + d* 形式的三阶多项式。 阶数越高,可以表示的曲线越复杂。 因此,将`x`混合在一起的能力越强,可以获得的形状和关系就越复杂。
现在,如果需要,我们还可以使用二阶多项式,看起来像`y = ax ^ 2 + bx + c`。 如果我们使用二阶多项式进行回归,则将获得 a,b 和 c 的值。 或者我们可以做一个`ax ^ 3 + bx ^ 2 + cx + d`形式的三阶多项式。 阶数越高,可以表示的曲线越复杂。 因此,将`x`混合在一起的能力越强,可以获得的形状和关系就越复杂。
但是,获得更多学位并不总是更好。 通常,您的数据中存在某种自然关系,实际上并没有那么复杂,如果您发现自己在拟合数据时投入了很大的精力,那您可能就过度拟合了!
......
......@@ -25,7 +25,7 @@
我们已经研究了回归,在回归中我们获取了一组观测数据,为其拟合了一条线,并使用该线进行了预测。 因此,根据我们的新定义,那就是机器学习! 您的大脑也是如此。
机器学习的另一个基本概念是称为**训练** / **测试**的东西,它使我们能够非常聪明地评估我们制作的机器学习模型的质量。 当我们现在研究无监督和有监督的学习时,您将明白为什么训练对机器学习如此重要。
机器学习的另一个基本概念是称为**训练/测试**的东西,它使我们能够非常聪明地评估我们制作的机器学习模型的质量。 当我们现在研究无监督和有监督的学习时,您将明白为什么训练对机器学习如此重要。
# 无监督学习
......@@ -253,7 +253,7 @@ r 平方值原来是`0.6`,这并不奇怪,因为我们在训练数据上对
现在有一个原因叫 Naive Bayes。 天真是因为我们假设单词本身之间没有任何关系。 我们只是在消息中单独查看每个单词,然后基本上将每个单词对垃圾邮件的贡献的所有概率结合起来。 我们不是在看单词之间的关系。 因此,更好的垃圾邮件分类器可以做到这一点,但显然要困难得多。
因此,这听起来很麻烦。 但是总体想法并不难,Python 中的 scikit-learn 使它实际上很容易实现。 它提供了一个称为 **CountVectorizer** 的功能,使将电子邮件实际拆分到其所有组成词并分别处理这些词变得非常简单。 然后它具有`MultinomialNB`功能,其中 NB 代表朴素贝叶斯,它将为我们完成朴素贝叶斯的所有繁重工作。
因此,这听起来很麻烦。 但是总体想法并不难,Python 中的 scikit-learn 使它实际上很容易实现。 它提供了一个称为`CountVectorizer`的功能,使将电子邮件实际拆分到其所有组成词并分别处理这些词变得非常简单。 然后它具有`MultinomialNB`功能,其中 NB 代表朴素贝叶斯,它将为我们完成朴素贝叶斯的所有繁重工作。
# 使用朴素贝叶斯实现垃圾邮件分类器
......@@ -396,11 +396,11 @@ K 均值聚类是机器学习中一种非常普遍的技术,您仅尝试获取
这是简单的英语算法:
1. **随机选择 K 个质心(k 均值)**:我们从一组随机选择的质心开始。 因此,如果我们的 K 为 3,我们将在组中寻找三个聚类,然后在散点图中分配三个随机定位的质心。
1. **随机选择 K 个质心(K 均值)**:我们从一组随机选择的质心开始。 因此,如果我们的 K 为 3,我们将在组中寻找三个聚类,然后在散点图中分配三个随机定位的质心。
2. **将每个数据点分配给最接近的质心**:然后,我们将每个数据点分配给最接近其的随机分配质心。
3. **根据每个质心点的平均位置重新计算质心**:然后为我们得出的每个聚类重新计算质心。 也就是说,对于最终得到的给定簇,我们将质心移动为所有这些点的实际中心。
4. **迭代直到点停止更改对质心的分配**:我们将再次执行所有操作,直到这些质心停止移动,达到一个确定的阈值,确定,我们在这里进行了收敛。
5. **预测新点的聚类**:要预测我以前从未见过的新点的聚类,我们可以遍历质心位置并找出最接近哪个质心来预测其聚类。
5. **预测新点的群集**:要预测我以前从未见过的新点的聚类,我们可以遍历质心位置并找出最接近哪个质心来预测其聚类。
让我们看一个图形示例,使它更有意义。 我们在下图中将第一个数字称为 A,第二个称为 B,第三个称为 C,第四个称为 D。
......@@ -420,7 +420,7 @@ K 均值聚类是机器学习中一种非常普遍的技术,您仅尝试获取
1. **选择 K**:首先,我们需要选择正确的 K 值,这根本不是一件容易的事情。 选择 K 的主要方法是从低开始,并根据想要的组数不断增加 K 的值,直到不再大幅度减少平方误差为止。 如果查看每个点到其质心的距离,可以将其视为误差度量。 在停止减少该错误指标的那一刻,您知道您可能有太多的群集。 因此,此时您无法通过添加其他集群真正获得任何更多信息。
2. **避免局部最小值**:此外,存在局部最小值的问题。 您可能会对最初选择的质心感到非常不走运,而且它们最终可能只收敛于局部现象,而不是更多的全局簇,因此通常,您需要运行几次并可能求平均结果。 我们称这种集成学习。 我们稍后再讨论,但是使用一组不同的随机初始值多次运行 k-means 总是一个好主意,只是看看您是否最终得到相同的总体结果 或不。
3. **标记集群**:最后,k-means 集群的主要问题是没有针对您获得的集群的标签。 它只会告诉您这组数据点在某种程度上是相关的,但是您不能在上面加上名称。 它无法告诉您该群集的实际含义。 假设我正在看一堆电影,并且 k 均值聚类告诉我这堆科幻电影就在这里,但我不会将它们称为“科幻”电影。 我要真正去研究数据并弄清楚,这些东西到底有什么共同点? 我怎么用英语来描述? 那是最困难的部分,而 k-means 并不能帮助您。 再次说明,scikit-learn 使执行此操作变得非常容易。
3. **标记群集**:最后,k-means 集群的主要问题是没有针对您获得的集群的标签。 它只会告诉您这组数据点在某种程度上是相关的,但是您不能在上面加上名称。 它无法告诉您该群集的实际含义。 假设我正在看一堆电影,并且 k 均值聚类告诉我这堆科幻电影就在这里,但我不会将它们称为“科幻”电影。 我要真正去研究数据并弄清楚,这些东西到底有什么共同点? 我怎么用英语来描述? 那是最困难的部分,而 k-means 并不能帮助您。 再次说明,scikit-learn 使执行此操作变得非常容易。
现在让我们来看一个例子,将 k 均值聚类付诸实践。
......@@ -730,7 +730,7 @@ print clf.predict([[10, 0, 4, 0, 0, 0]])
![](img/76760aeb-0024-4cec-8ca3-5cd9c64c2ebe.jpg)
因此,在这种情况下,我们最终决定了两者的聘用决定。 但是,有趣的是有一个随机成分。 实际上,您每次都不会得到相同的结果! 通常,失业者不会获得工作机会,如果您继续经营下去,通常会发现这种情况。 但是,装袋的随机性,引导程序聚合这些树的每一棵树,意味着您不会每次都得到相同的结果。 因此,也许十棵树还不够。 因此,无论如何,这是在这里学习的好课!
因此,在这种情况下,我们最终决定了两者的聘用决定。 但是,有趣的是有一个随机成分。 实际上,您每次都不会得到相同的结果! 通常,失业者不会获得工作机会,如果您继续经营下去,通常会发现这种情况。 但是,装袋的随机性,自举聚合这些树的每一棵树,意味着您不会每次都得到相同的结果。 因此,也许十棵树还不够。 因此,无论如何,这是在这里学习的好课!
# 活动
......@@ -748,8 +748,8 @@ print clf.predict([[10, 0, 4, 0, 0, 0]])
几年前的一个很好的例子是 Netflix 奖。 Netflix 举办了一场竞赛,他们向可以超越现有电影推荐算法的任何研究人员提供一百万美元。 获胜的方法是整体方法,实际上他们可以一次运行多个推荐算法,然后让他们都对最终结果进行投票。 因此,集成学习可以是一种非常强大但简单的工具,可以提高机器学习中最终结果的质量。 现在让我们尝试探索各种类型的集成学习:
* **引导程序聚集或装袋**:现在,随机森林使用一种称为袋装的技术,是引导程序聚集的简称。 这意味着我们将从训练数据中随机抽取一些子样本,并将其输入相同模型的不同版本中,然后让它们全部对最终结果进行投票。 如果您还记得的话,随机森林采用了许多不同的决策树,它们使用训练数据的不同随机样本进行训练,然后它们最终聚集在一起,对最终结果进行投票。 套袋。
* **Boosting**: Boosting 是一个替代模型,这里的想法是从一个模型开始,但是每个后续模型都会增强处理那些被先前模型错误分类的区域的属性。 因此,您在模型上进行训练/测试,找出根本上出错的属性,然后在后续模型中增强这些属性-希望那些后续模型会更多地关注它们并得到它们 正确的。 因此,这就是推动发展的总体思路。 您可以运行一个模型,找出其薄弱环节,并在不断发展时将重点放在这些薄弱环节上,并基于前一个薄弱环节,继续构建越来越多的模型以不断完善该模型。
* **自举集成或装袋**:现在,随机森林使用一种称为袋装的技术,是自举集成的简称。 这意味着我们将从训练数据中随机抽取一些子样本,并将其输入相同模型的不同版本中,然后让它们全部对最终结果进行投票。 如果您还记得的话,随机森林采用了许多不同的决策树,它们使用训练数据的不同随机样本进行训练,然后它们最终聚集在一起,对最终结果进行投票。 套袋。
* **提升**: 提升是一个替代模型,这里的想法是从一个模型开始,但是每个后续模型都会增强处理那些被先前模型错误分类的区域的属性。 因此,您在模型上进行训练/测试,找出根本上出错的属性,然后在后续模型中增强这些属性-希望那些后续模型会更多地关注它们并得到它们 正确的。 因此,这就是推动发展的总体思路。 您可以运行一个模型,找出其薄弱环节,并在不断发展时将重点放在这些薄弱环节上,并基于前一个薄弱环节,继续构建越来越多的模型以不断完善该模型。
* **模型桶**: Netflix 获奖者所做的另一项技术称为模型桶,您可能会使用完全不同的模型来预测某些事物。 也许我正在使用 k 均值,决策树和回归。 我可以在一组训练数据上同时运行所有这三个模型,并在我试图预测某些结果时让它们全部对最终分类结果进行投票。 也许这比孤立使用其中任何一个模型要好。
* **堆叠**:堆叠具有相同的想法。 因此,您可以对数据运行多个模型,并以某种方式将结果组合在一起。 在存储桶和堆叠模型之间的细微区别是,您选择了获胜的模型。 因此,您将进行训练/测试,找到最适合您的数据的模型,然后使用该模型。 相比之下,堆叠会将所有这些模型的结果组合在一起,以得出最终结果。
......@@ -757,7 +757,7 @@ print clf.predict([[10, 0, 4, 0, 0, 0]])
现在,所有这些都是非常复杂的技术,我在本书的范围内无法真正涉及到,但是总而言之,很难仅胜过我们已经讨论过的简单技术。 这里列出了一些复杂的技术:
* **Bayes 光学分类器**:从理论上讲,有一种称为 Bayes 最佳分类器的东西总是最好的,但是这是不切实际的,因为这样做在计算上是令人望而却步的。
* **贝叶斯光学分类器**:从理论上讲,有一种称为 Bayes 最佳分类器的东西总是最好的,但是这是不切实际的,因为这样做在计算上是令人望而却步的。
* **贝叶斯参数平均**:许多人试图对贝叶斯最佳分类器进行变型以使其更实用,例如贝叶斯参数平均变型。 但是它仍然容易过度拟合,并且经常由于套袋而表现不佳,这与随机森林的想法相同。 您只需多次对数据进行重新采样,运行不同的模型,然后让它们全部对最终结果进行投票。 事实证明,该方法同样有效,而且简单得多!
* **贝叶斯模型组合**:最后,有一种称为贝叶斯模型组合的东西试图解决贝叶斯最佳分类器和贝叶斯参数平均的所有缺点。 但是,归根结底,它并没有比对模型组合进行交叉验证做得更好。
......
......@@ -191,7 +191,7 @@ Logistic 回归是另一种监督学习技术,它基本上是一种概率分
![The naive Bayes classifier](img/B03450_05_09.jpg)
在上式中,`A``B`是事件, *P(A)**P(B)*[`A`和`B`相互依赖。 *P(A | B)*是`A`的概率,假设`B`是`True`,这是一个条件概率。 假设`A`为`True`,则 *P(B | A)*是`B`的概率。 朴素的贝叶斯公式如下:
在上式中,`A``B`是事件,`P(A)``P(B)`[`A`和`B`相互依赖。`P(A | B)`是`A`的概率,假设`B`是`True`,这是一个条件概率。 假设`A`为`True`,则`P(B | A)`是`B`的概率。 朴素的贝叶斯公式如下:
![The naive Bayes classifier](img/B03450_05_13.jpg)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册