统计决策理论
机器学习的框架
在这篇文章中,我们将讨论一些为开发机器学习模型提供框架的理论。
我们开始吧!
如果我们考虑一个实值随机输入向量, X 和一个实值随机输出向量, Y ,目标是找到一个函数 f ( X )来预测 Y 的值。这需要一个损失函数, L ( Y , f ( X )。这个函数允许我们惩罚预测中的错误。常用损失函数的一个例子是平方误差损失:
损失函数是真实结果值和我们的预测之间的平方差。如果f(X)=Y,这意味着我们的预测等于真实结果值,我们的损失函数等于零。所以我们想找到一种方法来选择一个函数 f ( X ),它给出的值尽可能接近 Y 。
给定我们的损失函数,我们有一个选择 f ( X )的标准。我们可以通过对 x 和 y 上的损失函数进行积分来计算预期平方预测误差:
其中 P( X , Y )是输入和输出的联合概率分布。然后,我们可以以 X 为条件,计算预期平方预测误差,如下所示:
然后,我们可以逐点最小化该期望平方预测误差,方法是找到值 c ,其最小化给定的误差 X :
对此的解决方案是:
这是 Y 的条件期望,给定 X = x. 换句话说,回归函数给出了 *Y、*的条件均值,给定了 X. 的知识,有趣的是,k-最近邻方法是从训练数据实现该方法的直接尝试。对于最近邻,对于每个 x ,我们可以求 y 的平均值,其中输入 x 等于特定值。我们对 Y 的估计可以写成:
其中我们对样本数据取平均值,并使用结果来估计期望值。我们也在调整一个区域,它的 k 个邻居离目标点最近。随着样本量变大,邻域内的点很可能接近 x 。此外,随着邻居数量 k 变大,平均值变得更加稳定。
如果你有兴趣了解更多,Trevor Hastie 的《统计学习元素》是一个很好的资源。感谢您的阅读!
统计假设检验简明指南
统计推断的频率主义方法。
拉纳·萨瓦哈在 Unsplash 上的照片
介绍
频数统计 的主要应用之一是一组或多组之间 样本均值和方差 的比较,称为 统计假设检验 。样本 统计量 是一个汇总/压缩的概率分布;例如,高斯分布可以用平均值和标准差来概括。在一位经常出入的统计学家看来,当从背后有未知固定真值的数据中估计时,所述统计是 随机变量——问题是各组相对于这些估计值是否显著不同。
例如,假设研究人员对儿童的成长感兴趣,并且想知道相同年龄(例如 12 岁)的男孩和女孩是否具有相同的身高;该研究人员在某所学校收集随机变量身高的数据集。在这种情况下,身高的随机性是由于抽样人口(他发现的十二岁的儿童)而产生的,而不一定是由于噪音——除非测量方法非常不准确(这导致进入 计量学 的领域)。也许,来自其他学校的不同孩子会导致不同的数据。
假设
假设研究问题公式化为“同龄的男生和女生的身高是否不同?”第一步是提出一个假设,尽管习惯上称为 无效假设【H0】,即同龄的男孩和女孩具有相同的身高(没有差异)。这类似于考虑随机变量身高的可能的两种分布,具有固定的平均值 μ 和标准偏差 σ ,生成身高值——但是不知道男孩( μ1 和女孩( μ2 )的平均值是否相同。(此外,还有一个替代假设(HA ),它通常是零假设的否定。)在这种情况下,零假设是
H0: μ1 = μ2
概率分布的参数可以用 最大似然 方法进行估计,即最大化一个似然函数;众所周知的平均值和标准偏差公式就是从这种方法中产生的。使用这些公式,研究人员计算两个样本均值,他可能会获得它们之间的一些差异。然而,研究人员如何确定这种差异是真实的,而不是随机不相等的零,因为他也可以在这项研究中包括其他(或更多)儿童?
图 1: 样本均值的分布作为样本量的函数。这个分布的标准差随着样本越多越窄(来源:作者)。
在图 1 中,给出了一个带有随机数发生器的模拟。从随机变量 x (例如高度)的高斯分布中抽取样本,其中 μ =156.4,σ= 4.8;在每个子图中,抽取 n 个样本,并计算样本平均值;对于每个样本大小,该过程重复 1000 次,并且样本平均值的相应直方图被可视化。这实质上是不同样本量的样本平均值的分布,很明显,随着样本量的增加,这种分布变得更窄,因为平均值的标准偏差,也称为【s . e .),与样本量的平方根成反比。
**s.e. = σ / sqrt(n)**
一方面, 大数定律 规定,从大量抽样的随机变量中获得的的平均值应该接近于的期望值,并且随着抽取的样本越多,将趋于更接近于期望值。另一方面, 中心极限定理 陈述了样本均值遵循具有真实均值和标准误差的正态分布。
在图 1 中,对于 n =20,一些样本均值是 154,而另一些是 160——这只是偶然。想象计算两个样本平均值,一个是男孩的,一个是女孩的。如果有差异,那可能只是偶然的,尤其是对于小样本而言。如果收集了足够多的样本,通过计算样本平均值可以更有把握地找到“真实平均值”——但如果没有给出呢?在许多研究中,参与者的数量通常是有限的。
置信区间
这就是所谓的 置信区间 的由来。估计统计量的置信区间是从样本中计算出来的随机区间,该样本包含具有某种指定概率的真值。例如,平均值的 95%置信区间是一个随机区间,其中包含概率为 0.95 的真实平均值。更准确地说,如果我们选取许多随机样本,并计算每个样本的置信区间,这些区间中大约 95%将包含真实均值,如图 2 中的模拟所示。
图 2: 以 100 个估计样本均值为中心的 95%置信区间(上例中 μ =156.4 ,σ =4.8,n = 20——即 z=2.086)。100 个中有 6 个不包括真实平均值(来源:作者)。
这样,图 1 中的分布可以用一个置信区间来近似。为了计算置信区间,来自 t 分布 的分位数 z 对应于所选择的概率 1- α (例如,95%的情况下 α = 0.05)和自由度( df )乘以以两侧样本均值为中心的标准误差。(注意在频率主义者的范式中,随机性和频率这两个概念是如何无处不在的。)
**confidence interval = [μ - z(α/2, df)*s.e., μ + z(α/2, df)*s.e.]**
t 分布是一种连续的概率分布,当估计正态分布总体的样本均值时会出现这种情况,此时样本量较小,总体标准差未知,这种情况很常见。(下面将更详细地讨论 t 分布。)
统计测试
了解随机变量的分布对于选择适当的统计检验是有意义的。更准确地说,像 t-test 这样的参数测试假设随机变量的 正态分布——一个可能不满足的要求。在这种情况下,使用非参数检验是合理的,例如 曼-惠特尼 U 检验 。然而,Mann-Whitney U 检验使用另一个零假设,其中两组的概率分布彼此相关
**H0: p(height1) = p(height2)**
有一大堆统计测试(图 3);使用哪种检验取决于数据类型(定量与分类)、数据是否正态分布(参数与非参数)以及样本是否配对(独立与相关)。然而,重要的是要意识到零假设并不总是相同的,所以结论会稍有变化。
图 3: 统计检验概述(来源:作者)。
一旦假设得到验证,就选择一个测试,并且从大小为 n 和 m 的两个样本中计算出 测试统计量 。在这个例子中,它将是T-统计量 T ,它根据T-分布进行分布(具有 n + m -2 个自由度)。 S 是汇集(聚集)样本方差。此外,值得一提的是 T 与样本大小成比例。
**T = (mean(height1) - mean(height2)) / (sqrt(S) * (1/n + 1/m))S = ((n - 1) * std(height1) + (m - 1) * std(height1)) / (n + m - 2)**
注意 t 统计量与高斯分布相关的-得分、的相似性。z 得分的绝对值越高,其关联概率越低,对于 t 分布也是如此。因此,t 统计的绝对值越高,零假设为真的可能性就越小。**
只是为了提供一些说明,t 统计量遵循 t 分布,因为标准偏差/误差是未知的,必须从(少量)数据中估计。如果已知,我们将使用正态分布和 z 得分。对于较大的样本量,随着标准误差接近零,t 统计量的分布变得越来越正态。(注意,估计的标准偏差也是遵循具有 n-1 个自由度的 卡方分布 的随机变量。)
p 值
如上所述,统计假设检验处理组间比较,目标是在给定估计样本统计的情况下,评估组间差异是否显著。为此,计算充分统计量、它们相应的置信区间和 p 值 。p 值是与使用 T 分布的 T 统计相关联的概率,类似于与 z 得分和高斯分布相关联的概率(图 4)。在大多数情况下,会应用双边检验来评估 T 统计的绝对值。用数学术语来说,p 值是
***p = 2*min{Pr(θ <= T|H0), Pr(θ >= T|H0)}***
图 4: 学生的 t 分布和 p 值背后的直觉(来源:作者)。
因此,p 值是获得测试结果 θ 的最大概率,至少与假设零假设为真的情况下实际观察到的结果 T — 一样“极端”。非常小的 p 值意味着在零假设下,这种“极端”的观察结果是非常不可能的(观察到的数据与零假设“充分”不一致)。因此,零假设被拒绝。
假阳性和假阴性
如果 p 值低于某个阈值 α ,则称该差异为 统计显著性 。拒绝实际为真的零假设称为I 型错误(假阳性),I 型错误的概率称为显著性水平(“某阈值”) α 。当零假设为假时接受零假设被称为第二类错误*(假阴性),其概率用 β 表示。当零假设为假时被拒绝的概率称为检验的功效,等于 1- β 。通过对显著性水平 α 更加严格,假阳性的风险可以被最小化。然而,调整假阴性更加困难,因为替代假设包括所有其他可能性。*****
实际情况是, α 的选择本质上是任意的;科学上常用小数值,如 0.05(甚至 0.01)。这种方法的一个缺点是必须拒绝或接受零假设,尽管这不是必须的。例如,在贝叶斯方法中,两种假设可以同时存在,并具有一些相关的后验概率(模拟假设的可能性)。
结束语
应该说明的是,置信区间和假设检验之间存在着二重性。无需过多赘述,值得一提的是,如果给定水平 α 的两个置信区间重叠,则零假设被拒绝。然而,仅仅因为差异在统计上是显著的,它可能是不相关的。对于没有意义或不重要的影响,可以观察到小的 p 值。事实上,样本量越大,产生有统计学意义的 p 值所需的最小效应就越小。最后,结论是没有价值的,因为它们是基于坏的(如有偏见的)数据。重要的是保证采样的数据是高质量的并且没有 偏差 — ,这根本不是一件小事。
理解数据及其分布是精确模型的关键。
towardsdatascience.com](/how-sampling-biases-might-be-ruining-your-predictions-f9e021d79723)*****
概率论和数理统计中的统计不等式
一个最棒的列表,它们的证明,以及它们在哪里有用
背景和动机
统计不等式提供了一种界定度量和数量的方法,在对难以计算的数量进行界定时特别有用。它们也是概率论、统计学和机器学习中大量理论的基础。如果你有一个最喜欢的统计定理,迭代数值方法,或机器学习算法,很有可能一些统计不等式在支撑所述方法或方法中起作用。(关于这些不等式的一个应用例子, 请看我那篇关于弱大数定律的证明 )。
在 Medium 上的快速搜索显示,这个主题(据我所知)还没有在平台上覆盖。在我不断努力让更多的人对理解他们正在实现的方法的内部工作方式感兴趣的过程中,我认为这个主题值得一提。
在下面的文章中,我分享了一个包含 4 种统计不平等的“最热门列表”:
- 马尔可夫不等式
- 切比雪夫不等式
- 詹森不等式
- 柯西-施瓦茨不等式
这远不是一个完整的列表,而是一个简短的“最热门”的引子。对于下面的每一个不等式,我都给出了它们的证明,并提供了它们在哪里有用以及为什么我们应该关心它们的注释。还要注意,这些不等式中的一些有超出概率论和随机变量的解释。然而,这里只讨论与随机变量相关的上下文。
话虽如此,我们还是开始吧。
1)马尔可夫不等式
2)切比雪夫不等式
3)詹森不等式
4)柯西-施瓦兹不等式
最终想法:
希望以上有见地。正如我在以前的一些文章中提到的,我认为没有足够的人花时间去做这些类型的练习。对我来说,这种基于理论的洞察力让我在实践中更容易使用方法。我个人的目标是鼓励该领域的其他人采取类似的方法。我打算在未来写一些基础作品,所以请随时在 LinkedIn 上与我联系,并在 Medium 上 关注我的更新!
使用 Pandas,NumPy 在 Python 中进行统计推断
在本文中,对 Kaggle 数据集进行了探索性数据分析和统计推断,该数据集包含 2010 年至 2017 年期间向管道和危险材料安全管理局报告的石油管道事故。数据集在这里可用。本文的目的是展示 python 中使用 Pandas、NumPy 和 Matplotlib 的几行代码如何帮助用明显最少的信息对数据集执行统计分析。它还可以作为统计分析初学者的教程,让他们了解统计推断在真实数据集上的应用,重点是:
泊松过程
指数分布
自助抽样
置信区间
这个教程的完整代码可以在这里找到。因此,让我们通过展示一个数据样本来开始分析。
样本数据的前 5 行
感兴趣的变量的汇总统计信息
请注意,Kaggle 数据集中与此分析无关的许多列已被删除。分析的第一步是决定分析的目标是什么。通过查看数据集样本,我的目的是对美国石油管道事故造成的成本和桶油当量损失进行估计。然而,请注意,我们只有 2010 年至 2017 年的可用数据,这告诉我们,该数据集不包含美国所有的管道事故,这就引出了我们的第一个定义。统计推断是利用概率法则来分析来自较大人群的数据样本以了解人群的方法。在这种情况下,美国 2010 年至 2017 年间的石油管道事故是美国所有石油管道事故中的一个样本。现在,让我们计算样本中我们感兴趣的变量的汇总统计数据,即由于输油管道事故导致的成本和石油损失。
查看我们两个变量的汇总统计数据,可以很容易地推断出极值的存在,因为与它们的平均值相比,最大值非常大,而且显著较大的标准差也表明变量的平均值有较大的方差。箱线图是一种更好的可视化总结的方式。
两个变量的方框图中没有方框,这清楚地表明两个变量的较大值明显大于样本的其余部分,因此两个变量的数据都有极值。即使可以使用中位数来估计每次事故的成本或每次事故的桶数损失,数据的分布也是非常不可靠的。在这种分布下,除非可以消除极值,否则很难用模型来拟合变量。在我们的案例中,我们没有足够的信息来得出极端值确实是数据错误而不是过程的一部分的结论。然而,我们在数据样本中有另一个关键变量,它看起来并不那么重要,因为无法对其进行直接汇总统计,这就是事故发生的时间。有了统计建模的知识,我们知道一个熟悉的概率分布,它可以模拟某个区间内的事故频率,这就引出了我们的第二个定义,泊松分布。
泊松分布模拟一个过程,在该过程中,平均数量的事件在固定的时间或空间间隔内发生。事件在该区间内发生的概率由参数为 λ 的泊松分布表示,该过程称为泊松过程。对于遵循泊松分布的过程,观察到的事件不能同时发生,并且在不相交的时间或空间间隔中,每个事件的发生独立于前一个事件的发生。
在我们的场景中,如果我们关于美国输油管道事故的假设是正确的,即它们不会同时发生,并且一个事故的发生不会影响另一个事故的发生,那么事故数量, X 是一个服从泊松分布X~泊松(λ)的随机变量。为了估计分布的参数,我们只需计算样本中的事故数量,然后除以总时间跨度。
使用 python 中的 NumPy,可以生成一个来自泊松分布的随机样本来模拟我们的数据,估计 λ 为每月33 起事故。让我们看看分布是什么样的,从中可以推断出什么。
通过概率质量函数,我们现在对数据有了更好的结论,即使每月平均事故数量为 33 起,每月发生 33 起事故的概率仅为 7%。此外,在累积分布函数中很容易看出,每月发生 33 起或更少事故的概率为 50%,或者每月发生 33 起或更多事故的概率为 50%,仅知道平均值是不直观的。统计推断允许你对你的数据做出更有意义的结论。
现在让我们说,我们希望以不同的方式来看事故的频率。我们感兴趣的是估计两次事故之间经过的时间,而不是估计某个时间间隔内的事故数量。我们现在感兴趣的汇总统计数据是平均事故间隔时间。这就引出了我们的第三个定义。
指数分布有时用于模拟事件发生前经过的时间。此外,如果事件遵循泊松过程,其速率参数为每间隔事件数,则从任何起始点到下一个事件的等待时间遵循指数分布,其参数为每间隔事件数。
使用熊猫,我们可以计算样本中每个事故的间隔时间。然后,我们使用 NumPy 来估计事故之间的平均时间(小时),作为指数分布的参数。然后,我们绘制样本数据的累积分布函数,随机样本大小为 3000,由指数分布生成,以比较我们的实际数据与指数分布模型的拟合程度。
上图显示,事故样本数据的累积分布与来自指数分布的随机样本的累积分布非常相似,平均事故发生时间相同。因此,用指数分布来模拟输油管道事故之间的时间是合适的。这也巩固了我们之前的假设,即事故的发生是一个泊松过程,在不相交的时间间隔内的事故数量是独立的,不会同时发生。让我们看看输油管道事故样本数据的概率密度函数。输油管道事故样本的概率密度函数是指数分布随机变量的指数衰减。
到目前为止,我们已经能够计算出我们样本的输油管道事故平均间隔时间,并将其用于概率模型。但是我们仍然没有对美国石油管道事故的发生做出任何有意义的结论。仅仅知道一个样本的平均值并假设它适用于在美国发生的所有事故是不够的。那么,我们对样本的平均值有多大把握。如果事故报告和管道运行的所有条件在过去 50 年或过去 100 年中保持不变,如果我们对 2002 年至 2009 年或任何其他时间段的数据进行采样,我们会得到相同的平均事故时间吗?直观的假设是,我们不会在每次对这些数据进行采样时都获得完全相同的平均值。
样本的置信区间有两个相关部分。第一部分是它给出了一个值的范围,即一个下限和一个上限,在这两个值之间可以是总体的真实平均值。第二部分是值域的显著性水平。总的来说,如果数据以同样的方式一次又一次地被采样,真实总体平均值被捕获 x%次的数值范围代表平均值范围的 x%置信区间。因此,为了计算美国数据集中输油管道事故平均时间的置信区间,需要多次重复该过程,以获得真实总体平均值所在的平均值范围。但是重复这个过程,即石油管道事故几次,实际上是不可能的。然而,从理论上讲,使用自举可以根据需要多次重复这些实验。
Bootstrap 抽样是利用重采样数据进行统计推断,即在相同条件下重复实验,可以从样本数据中重复抽样出大小为 n 的随机样本。使用 NumPy,可以很容易地在 python 中为我们的事故数据计算 bootstrap 样本。
100 个 bootstrap 样本的分布绘制在实际数据的顶部,正如预期的那样,样本与实际样本略有不同,但仍接近保持指数分布。上图已被放大,以关注样本的变化。我们现在只需要每个样本的平均值来计算样本平均值的置信区间。从自举样本计算出的统计数据被称为自举复制。
上图中的直方图显示了该过程重复 10,000 次时,bootstrap 重复的概率密度或平均事故时间。对于 95%的置信区间,我们需要找到 95%的重复平均值下降的范围。这只是从引导重复的概率密度函数推导出的引导重复的第 2.5 和第 97.5 百分位之间的所有值。
根据这一分析,我们有 95%的把握认为美国发生输油管道事故需要 21.15 至 22.93 小时,或者我们有 95%的把握认为美国每年发生大约 382 至 414 起输油管道事故。利用这一知识,现在我们可以使用每个变量的每个事件的中值来推断美国石油管道事故的成本和损失的桶数。因此,我们有 95%的把握认为,美国每年因输油管道事故造成的损失在 890 万至 960 万美元之间。这是我们通过统计推断了解到的关于美国石油管道事故的有意义的信息。
在本文中,我们围绕美国输油管道事故的基本过程建立了一个统计模型,并得出了关于事故频率和成本的具有统计意义的结论。本文的下一部分将尝试进一步深入数据集,并使用假设检验得出更有意义的结论。
通过置信区间估计的统计推断
无知和自信之间的平衡
塞巴斯蒂安·科曼摄影在 Unsplash 上拍摄的照片
这辈子你需要的只是无知和自信,然后成功就有把握了。~ 马克·吐温
简介
当《厨艺大师》中的一个野心家展示一道评委们并不全吃的菜时,这是一件耐人寻味的事情。相反,他们优雅地咬一小口,他们雄辩的咀嚼创造了一个最佳的兴奋环境,最后,他们精心策划的判断呈现出对食物质量的洞察力。这一金字招牌拥有来自观众和追求者的强烈信念,它给人一种独特、精确的感觉,并且是那些关心在烹饪这种特定类型的菜肴中实现类似结果的人的良好代表。
粗糙 近似 做法的特定想法同样耐人寻味,这种做法已被视为吸引跨年龄群体的考虑,以提高思维能力。以这样或那样的方式,我觉得当我们在不知道一个假设的宽度的情况下,准确地揭示我们与特定事物的接近程度时,会给人一种巨大的喜悦感。
在这篇文章中(作为我过去 的 的延续),我们将采取谨慎的步骤来面对我们在上面章节中所考察的某些现实中的一些刺激的真实因素。
总体、样本和非抽样误差
目标人群与样本(辛普森图像来源)
一个群体是一项研究试图对其做出推论的所有成员的集合(et al Albright&Winston)。
群体的每个单元被称为一个帧。分散和空间分布特征是我们在这个讨论中能够发扬光大的种群的唯一重要属性。
一个样本可能指的是人口中的一小部分,这部分人口比较容易控制,但同时也应该能够被分离出来,并且必须拥有人口的真实素质。
如果我们练习用“目标”和“人口”一起写作或发音,而不是简单的“人口”,那么我强烈认为我们可以缩小我们关于目的的意图,而不是与英语字典的盲目约会。这个不可否认的由两个术语组成的篮子说了一千个单词,消除了大量阅读或解释的需要。
挑选一个样本或一组这样的样本的过程被称为抽样,数据科学已经被赋予各种各样的抽样技术。现在转移和讨论它们中的每一个都是徒劳的,然而,值得一提的是,每一种技术都有其独特的设计和认知方法。这完全取决于相关的人选择什么技术来达到预期的猜测,没有这样的规则刻在石头上。也就是说,我想与我的读者分享我对不同的常用技术的看法。他们中的每一个人都被要求具备四个特征(即实施、代表性、成本和随机性)。种群的分散性和空间分布特征在一定程度上造成了上述四个性状的变异。
表格图——抽样技术象限(来源:Self)
我们从左向右移动得越多,就实现而言,我们获得的技术就越简单。我们越往上走,这项技术就越不能精确地代表一个群体的所有特征。圆圈的大小代表执行的成本。尺寸越大,执行该技术的成本越大。最后,红色涵盖了在选择样本时涉及一定程度的概率或随机性的技术。而蓝色圆圈只关注非概率性的或判断性的技术,其中没有分配随机性。虽然我们将只讨论第二象限中的一种技术,即简单随机抽样,但我重申以上观点纯粹是基于我的公正理解,而非偏见。我不敢说这种观点拥有国家或国际统计机构的签名,因此在盲目接受我的观点之前请记住这一点。它可能与你的故事版本相符,也可能不相符。
由 Unsplash 上的 bantersnaps 拍摄的照片
现在请允许我澄清为什么我让你在副标题处想象一个无知和平衡的形象。首先,尽管评委在品尝菜肴时吸收了艺术性来评估有抱负的厨师,但还是会有一些误差,因为完成整个菜肴总是被遗漏,并且不可能在规定的时间内完成。其次,抛开前一个错误不谈,尽管评委有设计或认知方面的专业知识,但参赛选手可能会遗漏一些不符合比赛主题或目标的成分或技术。裁判在解释参赛者的陈述时也可能会有一些错误。我会更好地揭示第二种误差可能被称为非抽样误差,而第一种误差更多的是抽样误差。不管这两种类型的错误,平衡是惯例,使表演继续下去,并允许越来越多的参与者包含这个过程。提交一个没有一点误差的猜测问题的答案是不可避免的。我可能会获奖,也可能不会,但这个过程必须能够忽略错误的影响。
非抽样误差的例子
为了防止你打瞌睡,不要看不同种类的非抽样误差的定义,让我们看几个可能导致这种可能性的例子。
表格图——无反应偏差(来源:Self)
以上是无响应误差的一个典型案例,它是一种常见的非抽样误差。与 18-29 岁年龄组的投票者相比,非投票者的比例相对较高,他们可能会对高中早期的投票权意识提出质疑,这反过来可能会影响纳税人的投票模式。
表格图——不真实的偏见(来源:Self)
上图显示了一个名为“数据科学生命”的组织所雇用的所有数据分析师的回答。这些回答是首席技术官为猜测 VBA 培训计划的规模而进行的调查的一部分。尽管一切看起来都很好,除了 5%的数据分析师在工作中根本不使用 excel。这听起来可能不可信,因为组织非常清楚每个数据分析师都更新了他/她的年度 Excel 许可证。
表格图——测量偏差(来源:Self)
上图显示了申请人对一家明确需要程序员的公司的职位的反应。像“通常”、“有时”或“很少”这样的选项并不能给招聘人员一个清晰的资格描述,他们应该更关注那些有编程经验或没有编程经验的候选人。因此,问题的设置可能没有真正抓住招聘人员的意图,导致测量偏差。
表格图——自愿反应偏差(来源:Self)
去年毕业的学生一直渴望在校园内有一个休闲区,在那里学生(相对来说是新来的学生)可以与高年级学生一起度过一段美好的时光,交流课程和其他课外活动。经过大量的陈述和说服之后,他们得到了管理层的许可,进行了一项调查,调查的基础是建立成本的决定。二年级学生竭尽全力维护公平手段,但却忽略了向一年级学生宣传这一目标的关键需求。结果显示,90%参与投票的一年级学生不想要夜间咖啡馆,而他们最初是去年的目标观众。因此,当前第一年的心态在某些方面与潜在受访者不同,导致潜在的自愿回答偏差。
总体参数,样本统计
人口与样本特征(辛普森图像来源
我们对儿童辛普森身上的品质起源于人类发展的哪个阶段没有一点概念,无论如何,这些品质允许我们推断人类的具体特性。
群体特征由称为群体参数的度量来描述。大多数情况下,这个值总是存在的,但是除了一些实验情况之外,在现实生活中仍然是未知的。一个样本的特征由一个被称为样本统计量 的度量来描述,这个度量有资格作为 点估计 之后的。我们可以利用样本统计数据得出关于总体的某些结论。均值和标准差是总体参数和样本统计常用的两种度量。让我们考虑另一个例子来更详细地讨论上述内容。
采样分布
一家社区免下车餐馆的负责人热衷于改善向经过咖啡馆免下车窗口的顾客提供的服务。作为这一程序的初始阶段,主任要求他的助手在办公室免下车服务框架的最后一个窗口记录为无数客户服务所需的时间。结果包括大约 1184 次帮助。对于这个问题,我们可以假设总体是已知的。(艾尔·奥尔布赖特&温斯顿)
示例数据的前几行(来源:数据
要求是从信息中产生一个直接的大小为 30 的任意样本,然后从选择的样本中计算出一个总体边界(平均值)的标准。这里,样本统计量也可以称为样本均值。
Python Graph-1(来源:数据)
正如我们所说的,总体参数最常见的度量是它的均值,为了估计这个总体参数,最常见的样本特征是样本均值。虽然中位数或其他措施也是限定词,我们会坚持样本均值。上图中的黑色点划线是所有 1184 个记录的服务时间的总体平均值。另一方面,棕色实线是样品的意思。请注意第一张图表,我们只有一个样本,我们只有一个样本平均值,但是当我们不断抽取多个大小为 30 的样本时,我们可以得到平均值的分布,因此我们可以评估分布的平均值,用棕色线表示。另外,请注意,当我们在图表中移动并将它们与第二行进行比较时,我们观察到黑线和棕色线几乎重叠。**因此,当给定大小的*重复随机样本取自总体值时,所有样本均值趋向于满足总体均值,从而成为总体均值的无偏估计量。***这是样本均值的抽样分布的一个关键性质。因此,在人口平均值未知的实际情况下,我们可以依靠这种无偏估计来得出一些关于人口平均值的想法。
Python Graph-2(来源:数据)
目前在上图中,我请求您只看到一个变化。我们是否注意到 X 轴的范围突然看起来比它的对应物窄了,在对应物中我们每个样本只取了 30 个单位?因此,在较大的样本中,我们看到的分布较少。所有样本均值的标准差与样本大小(本例中为 100)直接相关。一个抽样分布中所有样本均值的标准差称为标准差。因此,如果我们能够承担增加样本量(例如 100 个> 30 个)的成本,那么我们可能实现样本均值的更小偏差,或者换句话说,更小的标准误差。这也被称为无偏估计量的可变性。
Python Graph-3(来源:数据)
虽然在现实生活中,实际的人口分布可能还不可用,但为了本文的目的,让我们假设我们有来自 1184 个客户记录的人口分布,当我们绘制它时,我们得到一个右偏分布,如上图中蓝色曲线所示。绿色曲线表示样本平均值的抽样分布。这个练习我们已经做了 6 次,每次我们都抽取了 3、5、25、30、50 和 100 个样本。我们限制自己重复 100 次,并故意不改变它。
我们看到,随着样本量的增加,绿色曲线的形状(大约在 30 号之后)逐渐类似于正常的钟形。只要样本量足够大,样本均值的分布将趋于正态分布,而不考虑总体分布可能严重偏斜或正态分布的事实。这给了我们一个被称为中心极限定理(又名 CLT)的神奇定理的微妙概述。
置信区间
到目前为止,在检查上述服务时间示例时,我们已经讨论了如何通过随机抽样获得点估计值或无偏样本统计量。我们知道当我们改变样本大小或重复取样时,这个点估计值会有多大的偏差。我们还检查了对于足够大的样本量,点估计的抽样分布如何非常类似于正态分布。我们现在来看最后一个问题。
餐厅里为接单的顾客服务的平均时间的 95%置信区间是多少?
如果我们重新考虑标准正态分布,我们可能会问,
为了达到 95%的置信区间,我们需要移动抽样分布中所有样本均值的多少个标准差?
Z 分数区域概述(来源:Self)
如果我们还记得上面的图表,它来自我们读过的我的上一篇文章,在 python 中,从 stats.norm.cdf(2) 中减去 stats.norm.cdf(-2) 大约得到 0.9545,而不是精确的 0.9500。这是通过以下方式实现的:
因此,让我们假设点估计值(样本分布中所有样本平均值的平均值)为 55.45 分钟。抽样分布的标准差为 4.46 分钟。我们被要求考虑原始示例中 30 的样本量。因此,标准误差(即抽样分布中所有样本平均值的标准偏差)是 4.46 除以样本大小的平方根。数值为 0.814。由于我们知道原始人口记录,我们还考虑了一个价值为 0.99 的修正系数。最终的标准误差现在是 0.99 * 0.814,接近于 0.81 。假设点估计值和标准误差值已经给了我们。
上区间是{55.45 加(1.96 * 0.81)},下区间是{55.45 减(1.96 * 0.81)}
我们有 95%的把握认为,餐厅中为接受订单的顾客服务的平均时间介于 53.87 分钟和 57.03 分钟之间。
学生的 t 困境
Python Graph-4(来源:Self)
为了简单起见,我们只知道,当样本量很小并且总体标准差未知时,学生的 t 分布是一个很好的选择。请记住这两个条件都需要满足。换句话说,看着图表,我们可能会觉得依赖小样本来估计偏差会导致更大的不确定性,从而导致更分散的分布,正如具有较重尾部的 t 分布所示。虽然在这一点上谈论自由度将会打开潘多拉的盒子,但是知道从样本量中减去 1 就可以得到 t 的自由度值(又名 df)就足够了。要了解更多信息,您可以访问这里。现在,如果我们认识到随着样本量的增加,自由度增加,因此 t 分布逐渐接近正态分布,这是没问题的。如果你能理解这幅图的意图,我会很高兴,因为在我早期,同时想象这两者对我来说是一场噩梦。当样本量小于 30 时,上图是证明使用 t 分布而不是正态分布(或 Z 分布)的许多方法之一。我的来自质量控制领域的读者朋友们可能会认同我的观点。
等于 1.96 的 stats.norm.ppf(0.975)是 stats.t.ppf (0.975,< 自由度 >)
人口比例(续 )
评估总体参数置信区间的基本要素是点估计、点估计的标准误差和取决于置信水平或样本大小的乘数。我们已经看到了前两个,但只是重温第三个(乘数)可能取决于我们选择的特定分布(正常或学生的 t),基于此,我们可以相应地插入 stats.norm.ppf 或 stats.t.ppf 函数。问题可能是,除了这两个分布之外,我们能不能不使用任何其他分布?当然,我们可以发布必要的尽职调查和调查。
牢记上述基本原则,我们将讨论一种更有趣的人口参数形式,称为人口比例。在这种形式中,我们处理的不是作为一个特征的平均值,而是关于整体的一个份额或部分。例子可以是支持特定候选人的投票者的真实比例的 95%置信区间,在特定城市使用 wifi 网络的家庭的真实比例的 95%置信区间,在给定月份上涨和下跌的股票的真实比例的 95%置信区间,对快餐连锁店提供的服务满意的顾客的真实比例的 95%置信区间,等等。
识别比例估计值的一个简单方法是首先检查是否有任何潜在的提及均值作为特征。其次,在我们抽取了一个给定大小的随机样本后,应该有一个形成比例的成功或失败的概率。例子可以是对候选人投票“是”或“否”,Wifi“是”或“不是”使用,股票“是”或“不是”上涨,客户“是”或“不是”满意,等等。准确地说,样本比例的属性应该是一个二项随机变量。
同一家餐馆的经理想要估计平均服务时间,现在他想要执行另一个估计。他在冬季推出了一种新的三明治。他收集了 40 名顾客的样本,要求他们按照 1 到 10 的标准(1 是最差,10 是最好)给这种新三明治打分。他想估计给三明治打 6 分及以上的顾客比例。他认为,这个间隔很可能会在下一次访问时购买一个三明治。据我们所知,40 个客户样本中有 25 个客户的评分为 6 分及以上。(艾尔·奥尔布赖特&温斯顿)
下面的 python 代码可以帮助我们理解,
结论
大多数人使用统计数据就像一个醉汉使用灯柱一样;支持多于照明~ 安德鲁·朗
一个样本更像是从一个总体中提取并推断出该总体的子集。两种主要的抽样类型是概率抽样和非概率抽样。群体框架中的每一个元素都有平等的机会在样本中被选中,这个特殊的过程就是简单随机抽样。如果我们取一个给定大小的样本,评估样本特征(最常见的是均值或比例),并多次重复这两个步骤,我们将得到样本特征的分布,称为抽样分布。当我们测量样本特征的分散程度时,我们会得到一个标准误差**。每个随机样本的结果都是不同的,因为选择样本的机会取决于某种概率。实际上,人口的分布可能是未知的,但是如果样本量足够大,抽样分布将类似于正态分布,也称为 CLT。随着样本量的增加,标准误差减小。在估计总体参数时,我们置信度的大小与我们在抽样分布中移动的标准偏差数成比例。这个数量级充当具有标准误差的乘数,乘数的选择取决于总体方差是否已知以及样本量是否足够大。**
下面给出了本主题涉及的一些常规&常用代码;
Excel 对等数据(资料来源:Self)
访问本文中使用的“客户服务时间”示例数据集的链接是此处的。
本文的目的不是关注任何特定的工具箱,而是提高认识,熟悉这种性质的问题,然后根据需要使用各种工具箱。我并不羞于欢迎我在各种工具中天真和低效的编程风格,然而,如果我的任何读者希望重现我们在上面读到的形式(而不是数字),这里的是笔记本的链接。
使用置信区间是一种特殊的估计。我们将在下一篇文章中讨论另一种称为假设检验的方法。
guesstimate =比猜测好,但不像估计那样有保证
统计语言模型
从简单到++包含用例、示例和代码片段
凯利·西克玛在 Unsplash 上的照片
在 NLP 中,语言模型是字母表上字符串的概率分布。在形式语言理论中,语言是字母表上的一组字符串。NLP 版本是形式语言理论的一个软变体。
NLP 版本更适合建模自然语言,如英语或法语。没有硬性的规则规定语言中应该包含哪些字符串,不包含哪些字符串。相反,我们有观察工作。人们写作。人们议论纷纷。他们的话语是这种语言的特征。
重要的是,NLP 统计版本有利于从示例中的字符串学习语言。考虑学习一个识别产品名称的模型。训练集可能包含 iPhone 4 和 iPhone 5,但不包含 iPhone 12。它应该会将 iPhone 12 识别为产品名称。
在这篇文章中,我们将从简单到详细地介绍统计语言模型。涵盖的模型包括:独立模型、一阶马尔可夫模型、k 阶马尔可夫模型、隐马尔可夫模型、条件马尔可夫模型和条件随机场。每个都用真实的例子和用例来说明。
下一个令牌概率
我们将语言定义为字符串的概率分布。在许多用例中,我们真正想要的是给定当前字符串下一个符号的概率。事实证明,这两者是等价的,如1中所述。
考虑字母表上的一个字符串。(字母表可以由字符或单词或其他记号组成。)表示这个字符串 x 1、 x 2、…、 x n .我们可以把 P ( x 1、 x 2、…、 xn )写成P(x1)*P(x【T33
用例
我们能用语言模型做什么?相当多。
建议自动完成。智能手机会在我们打字时自动给出建议。当我们开始输入查询时,网络搜索引擎会提供自动完成的建议。在引擎盖下,这些是由语言模型驱动的。
**辨认笔迹。**想象一下,把你的智能手机指向你手写的笔记,并要求它们被识别。也许是数字化和可搜索的。或者至少让它们清晰可辨!
手写识别具有挑战性。甚至人们经常会弄错。有时甚至是他们自己写的!
考虑尝试识别书写糟糕的文本中的单词。纯粹的图像处理方法会产生很多错误。增加一个语言模型可以减少很多。语言模型提供了一个有用的上下文。
例子 1 :让我们用一个简单的例子来看一下。想象一下 OCR 认为下一个单词是数据库。 e 被误认为是 c 。他们看起来很相似。
现在让我们添加一个根据英语单词训练的语言模型。特别是将高概率分配给看起来像英语单词的字符串,而将低概率分配给不像英语单词的字符串。 bath 会获得大概率,但 axbs 不会。
这个语言模型会知道数据库比 databasc 更有可能。因此添加它将有助于检测和纠正 OCR 的错误。
通过添加多词语言模型,我们可以进一步提高错误检测和纠正的准确性。这个模型的字母表是词汇。它的高概率字符串模拟高概率单词序列。字母表变得越来越大。字母表里有每一个不同的单词。因此,在避免成本(模型变得过于复杂)的同时,需要小心谨慎地获取其好处。稍后将详细介绍。
多词语言模型还可以帮助填充书面文本中缺失的词。
检测并纠正拼写错误。我们将重新解释同一个例子数据库。最后一个字符, c ,现在是拼写错误。
识别语音。类似的推理在这里也成立。除了模态不同。所表达的基本语言是相同的。这并不是说准确的手写或语音识别很容易。只是添加语言模型会有所帮助。
识别多标记命名实体。多标记命名实体通常具有语言结构。例如,在一个人的名字中,名字通常出现在姓字之前。夹在两者之间的可能是中间名词。作为另一个例子,在美国街道地址中,街道号码通常出现在街道名称之前。正如我们将在后面看到的,这样的实体通常是通过潜在的语言模型来识别的,比如隐马尔可夫模型。
现在我们已经看到了一些用例,让我们深入了解
型号
我们将字符串表示为x 1, x 2,…, x n。
**独立。**这是最简单的方法。它假设字符串中的所有字符都是独立生成的。
P ( x 1、 x 2、…、xn)=Q(x1)*Q(x2)*…*Q(xn)。
这里 Q 是字母表上的概率分布。
这种方法通常对大型字母表中的长字符串有效。比如有很多单词的文档。文本被看作是单词的序列。字母表是词汇。
在这种情况下,更复杂的方法会很快变得复杂,因此它们需要令人信服地工作,并显著地更好地证明它们增加的复杂性。
这种方法可以有效地检测文档的语言。对于每种语言,我们将训练一个单独的 Q,它是在该语言的训练集中看到的单词的分布。对于表示为单词序列 W1 W2 … Wn 的新文档 W,我们将为我们已经建模的每种语言 L 计算 PL(W)= QL(W1)* QL[W2]…QL[Wn]。我们认为 L = argmax_L PL(W)是 W 的语言。
举例 I1: 按语序训练狗在摇猫尾巴。我们得到 Q(the)=2/7,Q(is) = 1/7,等等。
Python 代码 I1 :没有测试,甚至没有运行。另外,需要一个传令兵。
from collections import Counter
import mathclass IndependentModel:
**def __init__(self):**
self.ctr = Counter() **def train(self,words):**
for word in words:
self.ctr[word] += 1 **def Q(self,word):**
return float(self.ctr[word])/self.ctr.values() **def P(self, words):**
return math.prod(map(lambda word: self.Q(word), words))
练习 I1 :将这段代码片段发展成一个语言识别器。说英语 vs 法语。
**一阶马尔可夫模型。**这里,一个符号允许依赖于前一个符号。
P ( x 1、 x 2、…、xn)=Q(x1)*Q(x2 | x1)*…*Q(xn | xn-1)
一阶马尔可夫模型由状态转移矩阵 P 描述。 pij 是从状态 i 到状态 j 的概率。表示 xt 为 i , xt +1 为 j , Q ( xt +1, xt )等于 pij 。
这个马尔可夫模型也可以表示为有向图。如果值 i 后面可以跟一个值 j ,则有一个弧 i → j 。这条弧线上有一个概率p(j|I)。图形表示仅仅明确了哪些状态转移概率为 0。
例 1M1: 一阶马尔可夫模型对短短语建模有效。假设我们想从大量的英语文档中发现突出的短语(每个短语包含 2 到 4 个单词)。一阶马尔可夫模型在足够富裕以至于能够做合理的工作,而不会变得太复杂之间取得了良好的平衡。
考虑文本数据挖掘是一个短语。数据挖掘是一种从大型数据集中提取有意义信息的方法。
从这个文本,我们将建立马尔可夫图。该图的节点是出现在文本中的不同单词。如果在文本中单词 u 后面至少有一次单词 v ,则从节点 u 到节点 v 有一条弧线。下面显示了一些弧线。
data → mining mining → is method → of extracting → meaningful
我们看到 P ( 数据,挖掘 ) = Q ( 数据 )* P ( 挖掘 | 数据 ) = (2/19)1。相比之下, P ( a ,法)=q(a)*p(法|a)=(3/19)(⅓)= 1/19<p(数据,挖掘可惜, P ( 是,a) = P ( 数据,挖掘)。所以(是,是)会是一个误报,因为它不是一个显著短语。
因此,一阶马尔可夫模型本身虽然有些用处,但也有明显的假阳性。向这种方法添加语法信息,特别是单词的词性标签,可以显著提高其质量。也就是说,(大部分)减少了假阳性而(几乎)没有遗漏真阳性。直觉告诉我们,突出的短语是由有利于某些词类的词组成的,尤其是名词。考虑(数据,挖掘)。这两个词都是名词。考虑一下(是,一个)。‘is’是动词,是冠词。
我们不会详细讨论如何将这两种方法结合起来。主要是马尔可夫模型还是有用的。
Python 代码 1M1 :未测试,甚至未运行。另外,需要一个传令兵。
from collections import defaultdict, Counter
import mathclass FirstOrderMarkovModel: **def __init__(selfs):**
self.ctr2 = defaultdict(lambda:defaultdict(int))
self.ctr1 = Counter() **def train(self,words):**
words_with_sentinel = [‘_B_’] + words
for i in range(len(words_with_sentinel)-1):
self.ctr2[words[i][words[i+1] += 1
self.ctr1[words[i]] += 1 **def Q(self,word,previous_word):**
return float(self.ctr2[previous_word[word])/
self.ctr1[previous_word]) **def P(words):**
p = self.Q(words[0],’_B’)
for i in range(len(words)-1):
p *= self.Q(words[i+1],words[i])
return p
k 阶马尔可夫模型。在这个模型中,一个字符被允许依赖于前面的 K 个字符。
P ( x 1、 x 2、…、xn)=Q(x1)*Q(x2 | x1)*…*Q(xn | xn-1、xn-1
通过将 K 设置为 2 或 3,这种方法可以发现比一阶马尔可夫模型更好的显著短语,而不会导致复杂性的巨大增加。我们说的“更好”是什么意思?考虑一个长度为 3 的短语。称之为 x 1、 x 2、 x 3。一阶马尔可夫模型丢失了信息,因为它假设 x3 独立于给定 x2 的 x1 。二阶模型没有。P(x1)*P(x2 |x1)*P(x3 |x2, x 1)等于 P ( x 1, x
和以前一样,仍然需要把统计方法和语法方法结合起来。
示例 KM1: 我们想对三个单词的产品名称建立一个二阶马尔可夫模型。为什么是二阶?考虑这些编造的例子: 4k 电视三星, 3k 电视索尼,…想象一下索尼不提供 4k 选项。如果我们使用一阶马尔可夫模型,我们将失去第一个单词(4k 或 3k 或…)和品牌名称之间的相互作用。二阶模型将捕捉这种相互作用。换句话说,产品名称不仅会受到第二个词(在我们的例子中是 tv)的影响,还会受到第一个词(4k 或 3k 或……)的影响。
隐马尔可夫模型
这里,字符串是从具有潜在变量(即隐藏状态)的模型中概率性地生成的。
用符号表示,让 X = x 1、…、 xn 表示一串长度为 n 和 S = s1 、…、 sn 表示一串与 X 相关的状态。符号 xi 由状态 si 产生。
X 称为观测序列;产生 X 的(隐藏)状态序列。
在结构上,HMM 是状态集上的一阶马尔可夫模型。一些州通过弧线与其他州相连。此外,每个状态在可观察的字母表上都有一个概率分布。
该模型生成一对( X , S )如下。首先,它生成 s1。然后它以一定概率从 s 1 发出 x 1。接下来,它以一定的概率移动到状态 s 2。这个概率只取决于它来自哪里,即 s 1。发射的是什么,即 x 1,是无关紧要的。接下来,它以一定的概率从 s 2 生成 x 2。事情就是这样。
总之,HMM 生成器在生成状态和从这些状态生成可观测量之间交替。状态转移概率只取决于前一个状态。发射跃迁概率只取决于当前状态,即可观测物发射的状态。
例子 HMM1 :假设我们想要生成与真实句子相似的英语句子。特别考虑具有两种结构之一的句子
Article Noun Verb Adverb
Pronoun Verb
第一个结构的例句是男孩跑得快。第二个结构的例句是她唱。
一个真实的句子生成器可以容纳更多的结构。我们选择两个,因为最大的洞察力来自于从一个到两个。
模拟这两种结构的 HMM 看起来像什么?首先,它有助于添加一个开始状态和一个结束状态。HMM 总是从开始状态开始,并在结束状态停止。开始和结束状态称为静音。他们不发射任何令牌。
好了,现在来看结构,也就是连接各州的弧线。
begin → article → noun → verb → adverb → end
begin → pronoun → verb → end
请注意,有些状态会显示两次。这仅仅是由于呈现的限制。举个例子。由于 HMM 具有弧线 begin → 冠词和 begin → 代词,这实际上意味着 HMM 可以从 begin 状态以某个概率移动到冠词状态,并以另一个概率移动到代词状态。两个概率之和为 1。从状态开始HMM 必须移动到某个地方。
类似地,从状态动词我们可以移动到状态advorb或者移动到状态 end 。注意,HMM 没有跟踪我们如何到达状态动词*,这意味着状态序列开始文章*名词 动词 结束也是可能的,尽管我们没有要求这样做。如果我们希望 HMM 能够生成诸如男孩吃了之类的句子,这种类型的概括是好的,否则就是坏的。
训练:我们可以很容易的训练出这个车型的排放参数。我们可以利用这样一个事实,即我们的状态是命名的实体,它们的训练集很容易获得。很容易收集构成冠词的词,构成名词的词等等。
接下来,我们研究训练状态转移概率。例如,我们需要估计从开始状态到结束状态的概率。这是小于 1 的 as 从状态开始我们也可以用状态代词来代替。
为了训练转换,我们假设我们可以访问单词附有词性标签的句子。这种类型的丰富训练集很容易组合。很容易得到大量的句子。通过在每个句子上运行合适的词性标注器,也很容易得到这些句子的词性标注序列。
HMM 的转移概率很容易从这样的训练集中训练出来。事实上,我们只需要每个句子的词性标签序列。让我们来说明这一点。弧线 begin → article 上的概率估计为第一个标记为 article 的词性标签序列数除以第一个标记为 article 或代词的词性标签序列数。
两个生成的句子
来看看几个。第一个在下面。
The boy is fast
^ ^ ^ ^
| | | |
begin → article → noun → verb → adverb → end
我们从状态开始开始,走到条,从它发出条,走到名词,从它发出男孩,等等。t
第二个在下面。
She sings
^ ^
| |
begin → pronoun → verb → end
我们从开始,走到代词,从中发出她,移到动词,从中发出唱,最后走到结束并停留在那里。
与独立:相比之下,想象一下独立模型生成的句子。单词会根据它们的概率被吐出来,而不考虑想要的结构。
特定位置独立模型 aka 链 HMM
在某些用例中,生成的符号会受到它们在字符串中的位置的显著影响。举个例子,考虑产品名称,比如 iPhone 11 、佳能相机和索尼电视。显然有一些连续的结构。在这些例子中,品牌名称(佳能、索尼)先于产品类型(相机、电视)。
独立模型的位置特定的一般化适合于这种建模。
P ( x 1、 x 2、…、xn)=Q1(x1)*Q2(x2)*…*Qn(xn
这里 Qi 是字母表上特定于位置的概率分布。所以对于 n 个位置,我们有 n 个分布 Q 1,…, Qn 。
特定于位置的独立模型可以被视为 HMM,其状态 1 、 2 、…、 n 分别表示令牌位置 1 至 n 。这样一个 HMM 的图是一个单向路径 1 → 2 → 3 → … → n 。因此,所有弧上的转移概率都是 1。HMM 的参数是特定位置的发射概率。我们将称这样的模型为链嗯。
链式 HMM 几乎不是 HMM,因为它没有任何马尔可夫性。也就是说,将它作为 HMM 调用是有用的。它根据需要提供增强模型的途径。
这种增强版本的一个例子通常用于生物分子序列分析。它的名字叫做简介嗯【3】。简档 HMM 是一个链式 HMM,其中添加了一些明智选择的状态和转换,以在某些位置偏离链。迂回路径在某些其他位置合并回链。迂回路径模拟位置特异性突变。在生物分子序列中,这种突变经常发生。捕获它们的模型更准确地识别模型家族中生物分子序列的成员。
与位置特定链 HMM 不同的增强路径是进入所谓的条件马尔可夫模型(CMM)。我们将在本帖的后面讨论 CMM。在下面的例子中,我们还将说明从链式 HMM 迁移到 CMM 的好处。
CHMM 公园名称示例:假设我们想要模仿美国的国家公园或州立公园名称。比如黄石国家公园、约塞米蒂国家公园、城堡石国家公园……连锁嗯是个不错的选择。
这个 HMM 将从国家公园和州立公园的名称列表中训练出来。我们将设置 n 为列表中一个条目的最大字数。链式 HMM 的特定位置发射概率易于估计。公园名称的标记化版本揭示了其中每个单词的位置。比如约塞米蒂国家公园,约塞米蒂是第一个字,国家第二,公园第三。因此,从公园名称中的一个标记,我们可以知道要训练哪个州的排放概率。
上面的模型因其简单性和灵活性而吸引人。只要在一系列公园名称上训练它。随着列表变得更加丰富,模型会自行改进。
这样说,似乎有点不自然。我们心目中公园名称的自然模式是
word+ ( state | national) park
这只是意味着一个公园名称有一两个单词后跟国家或州后跟公园。
下面的模型更接近我们寻求的自然模型。
例子 HMM-Park-Names :这里我们会用到三种状态:前缀 _ 字、地区 _ 字和公园。state regional_word 会发出 state 和 national (暂时),概率相等(暂时)。state prefix_word 会发出一个出现在 regional_word 之前的公园名称中的单词。状态 park 将以概率 1(目前)发出单词 park 。
状态序列的训练集很容易构造吗?我们只需要一些:
prefix_word regional_word park
prefix_word prefix_word regional_word park
…
prefix_word prefix_word prefix_word regional_word park
那为什么不使用正则表达式呢?HMM 更准确。考虑一下某些文本中的短语“国家公园”。这个短语不是一个真正的国家公园。HMM 原则上可以通过分配从状态前缀 _ 字发出的非常低的概率来对此建模。**
其实这就把我们带到了如何训练前缀 _ 单词的发射概率这个话题上了?(目前,其他州的排放概率已经确定。)这里有一个简单的方法。列出国家公园和州公园的名称。去掉每个公园名称的最后两个单词。剩下的单词是前缀词。
国家公园可以扩展到放射海滩*、森林、*纪念碑、等。(在加州,州立海滩通常归入州立公园。)
为了更好地理解链式 HMM 和基于实体的 HMM 之间的权衡,让我们看另一个涉及两者的例子。
***CHMM 产品示例:*考虑一个链式 HMM 来对产品名称进行建模。(我们所说的“产品名称”是指特定的产品和产品类别。)我们可以使用一个经过训练的版本来识别非结构化文本中的产品名称,有些甚至还没有经过训练。
这个 HMM 将从产品名称列表中训练出来。培训类似于公园连锁嗯。记住,我们只需要学习(I)状态的数量和(ii)不同状态的排放概率。
这种 HMM 结构简单,易于训练。也就是说,我们下面描述的基于实体的版本可能会更准确。
示例 HMM-产品:
我们可以选择品牌令牌*、产品类型令牌、产品版本令牌和产品基本名称令牌作为我们的实体。示例值有 brand_token = 佳能,product _ type _ token=相机,product _ version _ token= 12,product _ base _ name _ token=iphone。我们的 HMM 的状态就是这些实体。*
为什么每个实体的名字都以单词结尾 token* ?因为实体适用于单个令牌。因此,与“智能手机”相关联的状态序列将是[ 产品类型令牌,产品类型令牌 ]。*
为了训练这个 HMM,我们需要各种实体的训练集。这些训练集可以来自品牌、产品类型等的列表。我们说“派生”是因为如果列表包含多单词条目,我们就不能照原样使用它们。考虑将智能手机列为产品类型。由此我们会衍生出两个例子:智能 → 产品类型令牌和手机 → 产品类型令牌。
我们还需要状态序列来捕获标记化产品名称中的实体序列。我们可以手动构建这样的训练集。这并不难,因为产品名称往往遵循一些常见的约定。例如,在许多双字产品名称中,第一个名称是品牌,第二个是产品类型。我们已经看到一个例子:佳能相机。因此[品牌 _ 令牌 T23,T24 产品 _ 类型 _ 令牌 T25 应该在状态序列的训练集中。
从产品名称自动导出状态序列
手动构造状态序列会让我们走得很远。几个州序列涵盖了很多产品名称。也就是说,手动方法存在无法扩展到涵盖数百万种产品的强大工业强度模型的风险。产品名称可能跨越州序列的长尾。考虑状态序列[ 产品类型令牌,品牌令牌 ]。一些产品名称遵循这一惯例。
事实证明,我们可以从标记化的产品名称中自动构造状态序列。这样,当我们向训练集添加越来越多的产品时,状态序列会自动从中提取出来。
基本版本:基本思想是获取标记化的产品名称,并为其中的每个单词找到最可能的实体。我们可以这样做,因为我们有各种实体的(单词,实体)对的训练集。
让我们看一个简单的例子。
**canon camera ⇒ [canon,camera] ⇒ [brand_token,product_type_token]**
精炼版:我们可以把这个基本思路精炼如下。和以前一样,我们对产品名称进行标记。然后,我们通过 HMM 运行令牌序列,以找到最适合它的状态序列。
这种改进使用了来自实体训练集和 HMM 状态转换的信息。因此,它可以更准确。
我喜欢把这种方法称为“引导训练”。我们手动初始化 HMM。这包括播种我们选择的任何状态序列。然后我们可以通过它运行标记化的产品名称,希望发现更多的状态序列。
为了能够发现新的状态序列,在初始化 HMM 时,我们应该允许从所有状态到所有状态的转换。(除了从状态开始到状态结束以及从状态结束的任何外出。)我们可以自动初始化这些转换的训练集,因此这些转换的初始概率非常低,尽管不是零。我们称之为伪训练。
我们通过“引导训练”发现的一些新的状态序列可能存在错误。所以这些应该由人类来审核。尽管如此,尽管有人在循环中,我们可能还是受益了。手动发现新的状态序列比管理自动发现的状态序列要耗时得多。
条件马尔可夫模型
就像 HMM 一样,条件马尔可夫模型(CMM)对(令牌序列、状态序列)对进行操作。与 HMM 不同,CMM 被优化用于为给定的令牌序列寻找最佳状态序列。这到底是什么意思?这将在下面的例子中逐渐变得清晰。
也就是说,在本文中,我们不会讨论如何为给定的令牌序列找到最佳状态序列。我们将讨论如何对给定的令牌序列的特定状态序列进行评分。这种评分将暴露 CMM 中的“有条件的”部分。
****示例 CMM1(第一部分):设想在(记号化的完整人名,记号实体)对上训练一个语言模型,目的是用它来解析人名。解析意味着把一个人的名字分解成各个组成部分。如名字和姓氏。
想想约翰·K·史密斯这个名字。模型应该可以推断出 K 是中间名词。即使训练集不包含从 middle_name_word 发出的 K 。
CMM 直接将其建模为
**P(state[2] = middle_name_word | state[1] = first_name_word, token[2] = K)P(state[2] = middle_name_word | state[1] = first_name_word)*P(token[2] = K | state[2] = middle_name_word)**
与 HMM 的建模方式相比,这有什么好处。
为了回答这个问题,首先让我们抽象出这个例子的细节。我们有 CMM 的P(S[I+1】|S[I], X [ i +1])对P(S[I+1】|S]这里 X [ i ]是第 i 个令牌,而 S [ i 是它被发出的状态。
CMM 方法可以被视为多项式分类器,其输入是一对( S [ i , X [ i +1]),其输出是各种值 S [ i +1】的概率分布。这个公式有助于从输入中提取我们认为合适的任何特征。可能重叠。可能考虑到 S [ i ]和 X [ i +1]之间的相互作用。
我们现在可以在这个问题上使用任何多项式分类器算法。例如(多项式)逻辑回归、决策树或随机森林。
相比之下,HMM 不能捕捉到 S [ i ]和 X [ i +1]之间的交互。它也不能适应任意的特征。它也不能利用复杂的机器学习分类算法。另一方面,CMM 不能利用实体训练集。我们不再学习排放概率。
例子 CMM 1(已完成)**:让我们完成这个例子。从特征开始。从输入( S [ i ], X [ i +1])我们将提取特征状态 = S [ i ,令牌 = X [i+1】,令牌长度 =在中的字符数也就是我们有三个预测器:状态、令牌和令牌长度*。每个都是绝对的。响应是 S [ i +1]的值。也是绝对的。***
为什么有这些功能?特性状态让我们模拟当前状态对下一个状态的影响。特性令牌让我们使用令牌的实际值作为其状态的预测器。这是有用的。某些令牌有利于某些实体。例如,约翰更有可能是名字而不是姓字。作为额外的奖励,我们可以免费获得状态和令牌之间的交互,只要我们的学习算法能够利用它。(如果有互动那就是。)特性令牌长度很有用,因为我们知道令牌的长度有利于某些实体。名字或中间名通常只有一个字符。几乎没有姓。
我们来看几个训练的例子。我们将从(令牌序列、状态序列)对开始。
*John Smith John K Smith
first last first middle last*
从这些出发,让我们为 CMM 公式推导一些训练实例。(我们不全部展示。)前三列列出了预测值。最后一个列出了响应。
***(previous)** **state** **token** **token's length** **state**
first K 1 middle
begin John 4 first
first Smith 5 last
… … … …*
上面的第一个训练实例读作“(前一个状态等于第一个*,令牌等于 K ,令牌长度等于 1)”导致下一个状态是中间的”。*
示例 CMM 2(草图):考虑解析美国街道地址。为简单起见,假设它们具有以下形式
*street_num_word (street_name_word)+ street_suffix [unit_prefix unit_num_word]*
下面是几对标记化的美国街道地址及其实体。实体名称是缩写的,因此示例可以放在分配的空间中。
*123 Marine Dr
street_num_word street_name_word street_suffix203 Lake Forest Ave
street_num_word street_name_word street_name_word street_suffix123 Main St Apt 22
street_num_word street_name_word street_suffix unit_prefix unit_num*
对于我们特性的设计,让我们从关注从令牌中提取的特性开始。令牌的哪些特征区分不同的实体?token 的实际值可以预测是 street_name_word 还是 street_suffix 还是 unit_prefix 。数字的存在预示着它是一个 street_num_word 或者是一个 unit_num_word 。
鉴于此,我们将从 input ( S [ i ], X [ i +1])中提取特征state*=S[I],token=X【I+1】,proportion _ of _ digits _ in _ token【中*
条件随机字段
就像 CMM 一样,CRF 对( S ,X)对进行操作,其中 X 表示令牌序列,S 表示其状态序列。两个模型P*(S|X),为给定 X 寻找高概率状态序列 S 的用例进行优化。*
CMM 认为这是因为
P(S|X)= product _*IP*(S[I)| X【I-1】,S【I-1】)(CMM 1)**
即状态 S [ i ]的概率是以前一状态 S [ i -1】和当前令牌 X [ i ]为条件的。
通用报告格式限制较少。也就是说,它容纳了更一般的 P(S|X)。
CRF 在无向图上操作,其节点模拟状态,其边模拟状态对之间的直接影响。这些影响是对称的。
在这篇文章中,我们将局限于线性链 CRF。它有这样的结构
S【1】—S【2】—S【3】—S【n】
这只是模拟了一个状态受到前一个状态和下一个状态的影响。即 S[i]直接受 S[i-1]和 S[i+1]的影响。
在通用报告格式领域,线性通用报告格式是最接近 CMM 的模拟。所以让我们更详细地研究一下。
线性通用报告格式模型 P ( S | X )为
*P ( S |X)正比于 product _Iproduct _ fp(f)e^f(s[I-1】, S [ i , X )
如果我们通过记录日志来定义一个分数 C ( S , X ),这种直觉会更容易传达。
C ( S ,X)= sum _ I sum _ f w(f) f(S[I-1],S[i],X) (CRF 2)*
我们称之为 C 是因为我们认为它是一个兼容性函数。作为 S 的函数,C(S,X)在 P(S|X)中是单调的。因此,为了找到得分高的状态序列,C(S,X)同样适用。
什么是 f ?这是一个特征函数,对三元组(S[i-1],S[i]和 X)在某个维度上的兼容性进行评分。正值越多,兼容性越好。 w ( f )是 f 的重量。它控制兼容性的强度和方向。
我们可以选择任意多的特征函数。
在线性条件随机场里,我们有一组可能重叠的特征函数。每个应用于每个边缘。也就是说,他们可以使用来自 X 中标记的任何子集的任何信息。相比之下,cmm 只对( S [ i -1】, S [ i ], X [ i )三元组的兼容性进行评分。
在这一点上,最好看一个具体的例子,具体的特性函数。
示例 CRF 1 :考虑我们之前看到的一个示例的一般化版本。解析全局街道地址。概括地说,我们正在走向全球。
全球的街道地址有许多不同的格式。在某些情况下,街道编号在街道名称之前,在某些情况下在街道名称之后。有些以单位开始,有些以单位结束。(单元的一个例子是“Apt 30”。)这些只是其中的几个变种。
全球街道地址的质量也各不相同,取决于它们是否符合当地的格式。我们希望能够尽可能好地解析低质量的地址。
让我们看两个例子
***123 St Francis St
Rue du Vivier 15***
第一个是美国的,第二个是比利时的。除了街道编号和名称的位置之外,街道关键字的位置也各不相同。(在这些例子中,“St”和“Rue”是街道关键字。)
我们将使用线性链 CRF。
我们应该从标记化的街道地址中提取什么全局特征吗?想到两个:国家和语言。**
语言和国家都会影响地址格式。这些因素相互重叠,但也有互补的影响。比利时和法国的地址就是这种情况,都是用法语写的。在某些方面,他们是相似的。在其他方面,他们不是。这是国家的问题。
有鉴于此,我们应该两者兼而有之。
我们将围绕这些构建两个特定的特性函数。
*****F1**: country-edge compatibilities: (S[i-1],S[i], country(X))
**F2**: language-edge compatibilities: (S[i-1],S[i], country(X))***
我们将添加第三个特征函数来优先选择与其标记状态兼容的令牌。
*****F3**: state-token compatibilities: (S[i], X[i])***
训练 : F1 和 F2 可以从标记有国家和语言的(符号化街道地址、州序列)对中训练。从 S [ i -1】过渡到 S [ i 兼容国家和语言分数高的,不兼容的不要。可以从训练集中的(状态,令牌)对中训练 F3。
延伸阅读
- https://www . cl . cam . AC . uk/teaching/1718/R228/lections/le C9 . pdf
- 最大熵马尔可夫模型
- https://www . ebi . AC . uk/training-beta/online/courses/pfam-creating-protein-families/what-are-Profile-hidden-Markov-models-hmms/#:~:text = Profile % 20 hmms % 20 are % 20 probability % 20 models,the % 20 alignment % 2C % 20 see % 20 figure % 202。
- cs 838–1 高级 NLP:条件随机字段
- 条件随机场:用于分割和标记序列数据的概率模型
统计学习(二):数据采样和重采样
来源:Iconic Bestiary,via shutterstock
统计抽样是从所有人群中抽取样本的一个子集。如今,机器学习模型变得更加复杂,并且将数百万个参数输入到最新的模型中,例如包含数百万个参数的 BERT 或 ResNet 模型。对于数据集的子样本,训练这样一个复杂的模型是相对高效的,虽然它通常需要几天到一周的时间。对数据进行二次抽样有助于确定参数网格搜索的更好性能。另一方面,在数据重采样方面,该方法为数据群体中的少数群体创建合成数据,或者使用来自原始数据集的复制数据。这有助于模型不过度适应包含大量数据样本的主类。
在本文中,您将了解到:
(1)流行的数据采样方法有哪些
(2)流行的数据重采样方法有哪些
(Python 中数据采样和重采样的应用
数据采样
有两种主要的数据采样方法:
- **随机抽样:**给数据子集等概率被选中。
参见下图 1,我们可以看到有 3 组不同大小的样本,以 1/n 的相等概率选择子样本
图 1:随机抽样
- **分层抽样:**给定每个类中数据集的不同大小,基于占总体的百分比从每个组中选择子集。
从下面的图 2 可以看出,有 3 组不同大小的样本,根据给定的每组相对概率选择子样本。因为有 12、12 和 6 个数据点分散在 A 组、B 组和 c 组中。选择子样本的概率为 2:2:1,由组的大小决定。
图 2:分层抽样
统计重采样:
创建数据集副本的有效方法是估计模型参数。而且,这个过程要重复几次。
两种流行的重采样方法:
- **K-Fold 交叉验证:**一个数据集被分成 K 组,一定数量的数据集将被分配给训练数据集,而保留的数据集将被分配给测试数据集。当训练数据集相当小时,应用这种方法以避免过拟合问题。
- BootStrap: 虽然数据集不遵循任何特定的分布,如正态分布、X 平方分布和 T-student 分布,但 BootStrap 可用于评估数据集下的统计数据和潜在分布。从下面的图中,首先,从原始数据集中抽取一组子样本。然后,我们以固定长度(n)从初始子样本重新取样 B 次,而不考虑从提取中抽取的重复样本。对于每个 bootstrap 样本,使用参数(θ)进行估计。因此,bootstrap 是当一种常见的方法是估计量(θ)采用经验分布函数时,用于逼近概率分布的一种方法。
来源:自举方法介绍
重新采样:
来源: 不平衡数据集的重采样策略
给定不平衡的数据集,我们经常面临的问题是大多数数据属于主要类,而少数数据属于少数类。为了克服这种不平衡数据的模型训练的不良性能,主要建议使用过采样和欠采样技术来产生落入每一类的均匀分布的数据。
现在,我将浏览示例数据集
(A)使用 Python 包的欠采样
在 python imblearn 中有几种欠采样算法可以应用。(1) ClusterCentroids: 使用 K-means 方法的质心,合成每个类的大小,以减少数据。注意数据应分组为簇,以应用簇形心方法**。**
(2) RandomUnderSampler: 为目标类选择数据子集,以平衡数据集。它通过将替换参数设置为真来启用引导方法,同时从每个类别中独立抽取子样本。
更多关于使用 Python 的欠采样方法的参考可以在 这里 找到
过采样(合成少数过采样技术 SMOTE)
该技术用于在特征空间中选择最近邻,通过添加一条线来分隔样本,并沿着该线产生新的样本。该方法不仅仅是从寡不敌众的类中生成副本,而是应用 K 近邻来生成合成数据。从下面的图 3 中,蓝色圆圈是原始数据,红色圆圈中的另一个蓝点是最近的邻居,粉红色的点是合成的。链接到 文章 了解更多关于 SMOTE 算法的细节。
情节 SMOTE 是如何工作的
动手对信用欺诈数据应用重采样方法:
这些数据用于检测 Kaggle Challenge 的交易是正常交易还是欺诈交易。为了保护信用卡信息中的个人隐私,通过主成分分析(PCA) 方法对特征进行了缩放,并将特征的名称以及总额和类别重新命名为 V1 至第 28 版,其中 0 和 1 表示欺诈交易,0 表示其他交易。
交易数据中不平衡类的百分比
从下面的柱状图可以看出非欺诈数据占 99.82% ,而欺诈数据占 0.17% 。
阶级分布条形图
如何处理这样不平衡的数据集?
**子样本。**将班级平均分配为 50 人和 50 人,这样模型可以为每个班级学习相同的样本量。
对主要类进行欠采样,并使数据大小与少数类相匹配
平均分布类的条形图
注意:拆分数据用于模型训练和评估
在进行随机欠采样或过采样之前,我们需要分离原始数据帧。目的是测试非来自手动合成数据集的原始数据。
结论:
通过这篇文章,我们了解了一些流行的数据采样和重采样方法。遇到不平衡的数据集问题或拥有庞大的数据集是很常见的。为了克服过拟合问题,进行数据采样方法以从中抽取子样本确实是一种有效的方法,而数据重采样(如过采样和下采样方法)是平衡每类数据的好方法。最后,python 中的代码展示了如何在每个算法上生成数据重采样方法并应用于数据集。享受周末:)
感谢您对本文的关注。请在下面留下你的评论,并欢迎任何反馈。作为一个写这篇博客的初学者,我会发表更多与数据科学相关的文章。如果你是数据爱好者,请关注我的 中 **。**敬请期待:)
统计学习(三)基于树的方法
浏览装袋、随机森林和助推的概念。使用 python 进行随机森林和梯度增强的实际体验。
尼基塔·万托林在 Unsplash 上的照片
如今,越来越多的人喜欢应用基于树的模型来处理回归和分类方面的机器学习问题。使用基于树的模型有几个好处,比如输出更好的结果、易于使用以及知道特征的重要性。另一方面,它需要更多的计算能力,并经常导致过拟合问题。基于树的方法可以关注线性回归和分类问题。这篇博客文章将进一步阐明分类问题。
在本文中,您将了解到:
(1)基于树的模型的测量值
(2)介绍装袋、出袋误差、随机森林、助推。
(3)随机森林和梯度增强在 Python 中的应用
**基尼指数:**I 级总方差的量度,p(i)代表分类到第 I 级的概率。值的范围从 0 到 1,其中 0 表示大多数元素属于某个类,1 表示所有元素随机分布在各个类中。
基尼指数
**交叉熵:**交叉熵对概率值取对数,优点是照顾低概率值。这种函数将防止概率值减小,并用于分类模型的损失函数。在其他讲座中,熵被称为树分裂指数。熵和交叉熵都可以用于基于树的模型中的分割方法。
交叉熵
基尼指数和交叉熵都被用来确定分类树上分支的分裂。当父节点的基尼指数或交叉熵高于左右子节点的平均值时,就会发生分裂。你可以链接到“关于基尼指数和交叉熵的更多细节”的文章。
制袋材料
装袋的目的是克服决策树的高方差问题。Bagging 是决策树的常用方法,它依赖 bootstrap 来减少统计学习方法的方差,而 bootstrap 是一种常用的统计重采样技术来近似采样分布。假设有 A1,A2,……一个 n 独立的例子,每个例子都有方差 σ,例子的平均方差给出为 σ /n 。因此平均法有助于减少方差。换句话说,bagging 从训练数据集中获取几个自举样本,并计算所有预测的平均值。的确,装袋可以改善方差的减少,尤其是对于决策树环境下的回归问题。就分类而言,bagging 将对测试集中的预测类进行多数表决。
袋外误差估计
打包总是分别采用增强的示例子集来拟合模型。平均而言,每棵袋装树占总自举观测值的三分之二,剩余的三分之一称为袋外(OOB)观测值。每次模型在第 1 次 OOB 观测时进行预测,根据分类误差对预测类取 RMSE ( 回归)或多数票(分类)。对于 bagging 来说,从大数据集估计 OOB 测试误差相对方便,而对于大的计算资源,则需要交叉验证方法。
随机森林
随机森林是一种在自举训练示例上结合几个决策树的方法。查看树上的每个分割,从所有 p 个预测因子(m∞√p)中以 1/m 的随机样本进行分割,而每个决策树中总共有 m 个预测因子。
变量(特征)重要性
为了解释基于树的方法的结果,树结构图通常是一种很好的方法,可以看出考虑到分裂方法的每个方差中的基尼指数有多高。总体来看,套袋分类树考虑了基尼指数,而 RSS(残差平方和)则是套袋回归树。只要模型变得更复杂,就很难分析袋装树增加时每个方差的重要性。对于回归和分类,当每棵树形成时,RSS 和 Gini 指数的值将在每次分裂中降低。然后,在每棵树中累加减少的值。然后,随机森林模型取所有树中值的平均值,而值越大,预测值对模型性能的影响就越重要。
随机森林装袋法
一般来说,随机森林方法优于 bagging 方法,因为随机森林模型更有效地减少方差,并使其在模型性能上更可靠。在袋装树的集合中,大多数树被顶部的强预测器分割,因此每棵树产生相似的性能并具有高度相关的结果。因此,取高度相关树的平均值比取不相关树的平均值要差得多。另一方面,随机森林能够通过为每次分裂考虑预测因子的子集来避免该问题。由于 p 是每棵树中的预测值,m 是预测值的总数,所以 (p-m)/p 分裂的平均值不仅会选择强预测值,还会选择其他预测值。因此,每棵装袋的树最终都被去相关并更好地减少差异。
从下图可以看出,函数 m ≈ √p 优于其余两个函数,因为 m ≈ √p 用于随机森林分类器中的预测函数,而 m=p 代表打包函数。当参数 p 等于 500 时,我们可以看到,当树在 450 左右生长时,测试误差线变得稳定。
摘自《统计学习导论》第 322 页
助推
与 bagging 不同,boosting 不为每个决策树获取引导样本,而是使用来自前一个树的信息按顺序生长每个树。每一次,树都基于残差来拟合模型。当随后的树被输入到拟合函数中时,残差保持更新。因此,改进的拟合函数允许树以不同的形状生长,这有助于减少残差。同时,这种统计方法学习缓慢,因为收缩参数λ减慢了该过程。
关于三个主要参数的更多细节描述如下:
- 树的数量(B) :交叉验证用于选择 B。与套袋和随机森林相比,当 B 较大时,套袋会导致过度拟合。
- 收缩参数(λ) :已知 boosting 的学习率,在 0.01-0.001 之间。为了获得良好的性能,小λ 伴随着 B 的大值。
- 每棵树中 d 分裂的数量:它指的是增强系综的复杂度。d 变量决定了模型的交互深度,d 输出树中的 d+1 个节点。
摘自《统计学习导论》一书,第 323 页
实践经验:
我们将使用 Python 包遍历应用于示例数据集的基于树的模型。该数据集是《ka ggle:Titanic——灾难中的机器学习》中最受欢迎的用例。这个用例是用机器学习算法预测泰坦尼克号上的生存。kaggle 网站链接:泰坦尼克号数据集。在通过基于树的模型深入研究预测方法之前,让我们先了解一些基本方法,以便为预测准备好训练和测试数据。数据集已经过预处理,以排除空值、低相关列,并为文本特征创建虚拟变量。
随机森林:
为了生成下面的简单树形图,模型设置有参数 max_depth=5,max_leaf_nodes=15,其中通过相对减少杂质来选择 max_leaf_nodes 。叶节点是下面没有任何子节点的末端节点。
生成树形图的代码片段
随机森林模型中的树图
注:
根据模型结果,利用不同的特征对随机森林的分类问题进行预测。使用基尼系数的平均下降值计算特征重要性值。
功能重要性代码片段
在 Python 中提升模型
XGBoost V.S. AdaBoost V.S .梯度升压
XGBoost: 应用牛顿推进,提供了到达局部最小值的路径,但不是通过梯度下降。
AdaBoost: 更新误分类数据点的权重
**梯度推进:**通过残差计算的损失函数更新预测器
几篇很棒的文章给出了每种提升方法的详细信息。
链接 1 、链接 2 、链接 3
梯度推进分类器:
梯度增强代码段
随着估计数的增加,模型过度拟合的可能性越大。建议进行参数调整或指定其他参数来克服过拟合问题,而不是最大化决策树的总数。
从下面的图中,我们可以看到整体提升模型的性能比随机森林模型好得多。很明显,深度 1 模型比深度 2 模型显示出更低的测试误差。
摘自《统计学习导论》一书,第 324 页
总之:
- Bagging 使用 bootstrapped 方法,该方法获取训练数据的多个副本,拟合每个决策树中的每个重复样本,并组合所有树以获得预测模型。
- 随机森林模型为每个决策树使用 boostrapped 示例。特征重要性值由基尼指数(分类问题)和残差平方和(回归问题)决定。
- 当新树基于先前的树生长时,提升优于随机森林模型。此外,每棵树的深度越小,模型的性能就越好。在 Boosting 中,每棵树都从以前生长的树中学习,因此需要更多的时间进行训练。
- 基于树的模型需要超参数调整,因为这通常会导致过度拟合。
享受漫长的周末!!
感谢令人敬畏的教科书:统计学习导论。我从中学习概念,并推荐读者阅读以了解更多细节。
统计学习(四):支持向量机
遍历最大间隔分类器、支持向量分类器和支持向量机。
由Kit8.net从快门股票
S 支持向量机是一种常用于文本分类的模型。然而,SVM 也是一种适用于线性问题的机器学习算法。了解了 SVM 的概念,如超平面和核,您将更好地了解如何将该模型应用于回归和分类问题!
在本文中,您将了解到:
(1)用最大间隔分类器处理 SVM 上的线性问题
(2)非线性问题 SVM 核的引入
(3)SVM 在 Python 文本分类中的应用
最大间隔分类器
当数据点分布在多于 2 维的空间中时,应用超平面将它们分成两半。从下面的图中,它显示了两类观察结果,蓝点表示一类,紫色点表示另一类。对于左边的一个,它显示有 3 个超平面将数据点分成 2 类。对于右边的一个,数据点被分成两半,yi=1 属于蓝色类,yi=-1 属于紫色类。因此,数据点被分为两类,遵循以下等式:
B0+B1Xi1+B2Xi2+B3Xi3+.....+BpXip > 0 if yi = 1
B0+B1Xi1+B2Xi2+B3Xi3+.....+BpXip < 0 if yi = -1
摘自《统计学习导论》第 340 页
如何决定使用哪个超平面?
最大间隔分类器基于数据点和超平面内的间隔总和的值来决定最佳超平面。分类器通过从训练观察中选取最远的来选择超平面。最大间隔分类器的等式定义如下:
**yi(β0 + β1xi1 + β2xi2 +...+ βpxip)≥ M ∀i=1,...,n**
m 是应该最大化的超平面的边缘。
yi,…,yn∈{-1,1}属于标签
x1,…,xn ∈ Rp 属于训练观测值
分类器将通过选择 B0,B1,B2,…来最大化 M。,Bp 来优化问题。
然而,就非分离问题而言,不存在用于计算值 M >0 的超平面。为了概括这种困境,使用支持向量分类器来计算不可分离情况的软裕度。
支持向量分类器
支持向量分类器,也称为软边缘分类器,允许一些观察值出现在超平面或边缘的对面。
摘自《统计学习导论》一书的方程式,第 346 页
M 是页边距的宽度; C 为非负调谐参数;
ε1,。。。,εn 允许观测在不正确的一侧。如果 εi > 0 ,第 I 次观察出现在错误的一侧。c 是εi 值的总和,它决定了裕度能够承受的严重程度范围。当 C 变得更高时,裕度变得更宽,它容忍更多的数据违规,这导致高偏差和低方差。另一方面,当 C 减小时,裕度缩小,错误侧出现的观测值更少,从而导致低偏倚和高方差。因此,C 决定了支持向量分类器的偏差-方差权衡。从下面的图可以看出,C 从图 1 收缩到图 4,允许在超平面的窄边上出现更少的支持向量。
摘自《统计学习导论》一书,第 348 页
注意:如果边界是线性的以分离观察值,支持向量分类器仅支持 2 类分类。
注意,支持向量分类器仅用于分离 2 类问题,而支持向量机(SVM)能够处理具有多于 2 类分类的更复杂的非线性问题。
支持向量机
支持向量机使用在两个以上类别之间具有非线性边界的核来扩大特征空间。在使用核方法的基础上,我们将通过支持向量分类器的数学概念来处理线性和非线性问题。
根据下面的等式,它表示线性支持向量分类器,因为 SVM 需要观察值的内积。有 a_i⋯ a_n 训练观察。为了优化 F(x)函数,我们需要进行新点 x 和第 I 个观察点的内积。
线性支持向量分类器方程
基于内核的 SVM
- 基于线性和多项式的内核
内核用于内积的推广。根据等式 1,k(x_i,x _ I’)被称为核函数,用于量化两个观察值的相似性。为了解决多项式问题,来自等式 2 的核函数适合于适应多项式次数 d >1 的高维空间。多项式核函数能够为分布在非线性模式上的数据点绘制灵活的决策边界。
核函数方程
- 径向内核
径向核是另一个流行的非线性函数。根据下面的等式 3, γ 是一个正的常数**。给定一个新的测试观察 x_ij,径向核函数用训练观察 x_i’j 计算欧几里德距离。当测试数据点远离训练数据点时,对两个更远的数据点的平方距离的负常数取指数会导致小的值。γ越大,支持向量分类器的输出性能越好。因此,k(x_i,x _ I’)的输出对支持向量分类器 f(x)函数几乎没有影响,如下面的等式 4 所定义的。换句话说,只有训练观测值 x_i’j 附近的测试观测值 x_ij 会对测试数据的预测类别产生本质上的影响。**
核函数方程和基于核的 SVM
应用内核的优势
当应用核时,它减少了计算,同时它只关注位于 K(x_i,x _ I’)上的核函数的边缘的支持向量。另一方面,扩大的特征空间方法需要大的计算能力,因为会有无穷多个数据点落入更高维度的空间中。
Python 中的支持向量机
我们将使用 python Sklearn 包遍历示例数据集上的支持向量分类器。该数据集包括来自 IMDB 的 5 万部电影评论,用于自然语言处理或文本分析。这是用来预测消息是正面的还是负面的。Kaggle 网站链接: IMDB 数据集。SVM 很适合文本分类,所以这将是我们的主要预测文本分类模型。在通过支持向量分类器深入研究预测方法之前,让我们先了解一些基本方法,以便为预测准备好训练和测试数据。
文本数据集的预处理:
- 剥离 html 标签
- 删除标点符号
- 删除停用词
- 词干:把单词变成词根形式
- 标记化
文本预处理的代码段
单词袋模型:
输入文本特征需要转换成机器学习模型的数字特征。以下示例通过 CountVectorizer 函数展示了词袋模型方法。它计算单词在整个文档中出现的次数(计数),并输出编码向量。输出向量通常是稀疏的。
CountVectorizer 的代码片段
SVM 模型
以下示例显示了将嵌入文本要素输入到 SVM 模型中。用径向核参数设定模型。
支持向量机的代码片段
sklearn 中 SVM 的参数调整
- 内核:rbf(默认)、线性、多边形、sigmoid
RBF:径向基函数内核 - C:正则化参数
C 控制误分类观测值的容差。较低的 C 值允许以较低精度为代价的较大裕量,并且对性能具有较低的方差。相反,较高的 C 值绘制较小的边界,对大多数数据点的分类性能较好,在决策函数上表现出较高的方差。 - 伽马:它影响观察对模型性能的影响程度。较大的 gamma 值会扩大半径,从而考虑更多的观察结果,而较低的 gamma 值会绘制较小的半径。注意到较大的伽玛会导致过度拟合问题
SVM 网格搜索的代码片段
结论
- 支持向量分类器使用超平面通过最大化边缘值来区分来自两类的数据点。
- 核被应用于观测值的非线性分离,这减少了出现在标签类中的不正确观测值的出现。与线性核和多项式核相比,径向核对单个观测值的变化不敏感。
- 为了使文本分类模型具有更好的性能,需要一种彻底的文本处理方法来获得干净的数据集。模型的参数调整可以提高模型性能。
参考:
请继续关注更多关于机器学习概念的初学者友好文章!☺️
统计学习(五):无监督学习
Web 开发矢量图形在GetDrawings.com
无监督学习是一项具有挑战性的任务,因为模型需要学习没有标签的数据模式,并且如果不将预测与来自观察的标签进行匹配,很难评估结果。例如,用户对商品推荐的购物体验是通过无监督学习来执行的。系统会根据搜索商品的历史和购物车中的商品列表向用户推荐感兴趣的商品。了解聚类分析方法后,您会更好地理解如何为数据集创建聚类标签。
在本文中,您将了解到:
(1)主成分介绍
(2)聚类算法中的 K-Means 聚类和层次聚类
(Python 中 K-Means 聚类在购物数据集上的应用
主成分分析
主成分分析是一种无监督学习方法,产生一组特征 X1,X2,…,Xp,在 n 个观察值上测量,其被认为是来自数据集的代表性变量。PCA 提供了一种工具来生成数据的表示,该表示捕获低维空间中的大部分信息。
主成分
它是 p 个特征 X_1,X_2,…的一组归一化线性组合。,X _ p .
φ_ 11,φ_21,…,φ_p1 的载荷向量构成一条线,使每个观测值 X_1,X_2,…之间的距离平方和最小…,X_p 到数据。为了约束加载向量,我们对φ值的平方和进行归一化,φ值等于 1。根据等式 1,Z_i1 被称为主成分得分。
主成分的数学公式
从下面的图中,左边的图(图 A)显示了第一个主成分。绿线由第一主成分负载向量构成,蓝点是两个特征的平均值。右图显示了旋转后的绿线,第一主成分作为 x 轴,第二主成分作为 y 轴。左下角的紫色圆点具有最大的负值,表明主成分得分 z_i 低于两个特征的平均值,右上角的 z_j 具有最大的正值,表明高于平均值的特征的 z_i 得分为正值。
图 1:带 PCA 的示例数据集
PCA 在缩放数据集上执行得更好。当对未缩放的数据执行 PCA 时,主成分加载向量将对具有较高方差的变量产生较大的值。
PCA 的例子
下面的剧情展示了美国的 15 个州以及城市警察、袭击、谋杀、强奸的特点。就第一个组成部分而言,它在犯罪特征的负荷向量上显示出相似的权重,而在城市人口上显示出较小的权重。另一方面,相对于其他特征,城市人口特征更为重要。一般来说,犯罪特征被放置在彼此附近,这驱动了高相关性。因此,较高的强奸率导致较高的攻击或谋杀率。相比之下,城市人口变量与犯罪特征的相关性较小。进一步分析,加州、内华达州和佛罗里达州的犯罪率较高,但北达科他州等州的犯罪率较低。往第二主成分的垂直线看,加州也有很高的 UrbanPop 值。对于像弗吉尼亚州这样的中间点,它显示了犯罪和城市化的大致平均水平。
图 2:使用 PCA 的犯罪数据集示例
使聚集
k 均值聚类
K-Means 聚类算法是通过最小化类内变异来确定的。组内方差用 W(C_k)来计算,W(C _ k)是一个组内观测值之间差异的总和。
根据等式 3,它计算一个聚类中观测值的聚类内变化的总和,并对 K 个聚类中的值求和。根据等式 4,W(C_k)由第 k 个聚类中的观测值之间的平方欧几里德距离除以第 k 个聚类中的观测值总数来定义。等式 5 是等式 3 和等式 5 的组合。
K-均值聚类的数学公式
每个观察值被分配给 K 个聚类中的一个,因此聚类之间不应有重叠的数据点。然而,为了减少 W(C_k)的 K^n 计算时间,通过在每个聚类内提供局部最小值来优化算法。
从下图可以看出,该算法是通过以下过程实现的。
- 将每个观察值随机分配给每个集群。
- 步骤 2a:计算聚类质心
- 步骤 2b:将数据点分组到附近的聚类质心
- 在步骤 2a 中的第二次迭代之后:重新计算聚类质心
- 当每个聚类内的观察距离最小化时,迭代不会停止,直到聚类质心分配完成。
图 3: K 均值聚类算法迭代
分层聚类
执行层次聚类就是绘制树状图的过程。它可以在水平方向上观察,因为在同一层中的分支的接近底部的观察结果更相似,而在融合了更多分支的树的较高层的观察结果则非常不同。创建了(n-1)个聚类,其中对于 1 个分支可以融合最少的 2 个点,并对系统树图进行 2^(n-1 重排,同时可以交换 2 个融合分支的位置。
该算法由相异度度量进行,相异度度量可以通过连接概念——平均、完全、单一和质心来实现。
- **完全连锁:**从每个聚类的所有成对观察值中取出最大相异值
- **单个连锁:**从每个聚类的所有两两观察值中取最小相异值
- **平均连锁:**取每个聚类中所有两两观察值的平均相异值。
- **质心链接:**计算聚类质心内的相异值。
算法
- 从 n 个观察值中取 2 个成对观察值,并计算差异。每一对被视为一个集群。
- 迭代从规模为 n,n-1,…,2 的群体开始
- 融合最相似的两个聚类,这是由聚类间的不相似性决定的。树状图的高度代表聚类的相异程度。一个聚类的融合度越低,这个聚类就越相似。
- 然后,取 i-1 个剩余聚类并计算聚类间的相异度。当人口数量减少到 2 时,迭代将停止。
如何确定层次聚类使用什么类型的相异度?
以网上购物为例,零售商根据顾客过去的购物经历对他们进行聚类,以识别相似顾客的子群。数据被转换成一个矩阵,其中一行是客户 id,多列是给定购物者购买给定商品的次数。有两种适用的相异度度量。
**欧几里德距离:**购物者将根据购物体验的频率被分组。也就是说,不频繁的客户更有可能被放入一个集群中。
**基于相关性的距离:**对所购商品有相似偏好的购物者(购买电子产品等商品的顾客被聚集在一起),即使购买者购买的商品量更大。基于相关性的度量被确定为按项目的类别对客户进行聚类。
您可以通过提供的链接找到更详细的层次聚类信息。
计算相异度时是否缩放特征?
当商品 A 比商品 B 更频繁地被购买时,通过欧几里德距离计算的相异度对商品 A 产生更大的影响,而商品 B 几乎没有影响。然而,物品 B 更可能是具有高价值的物品,并且零售商渴望鼓励顾客购买。此外,频繁购买的商品 A 的购买数量差异较大,与商品 b 相比,这提供了较少的关于购物者整体购物体验的信息
Python 中的 K-Means 聚类
我们将使用 python Sklearn 包对示例数据集进行 K-Means 聚类。该数据集包括超市购物中心的顾客购物历史的 200 个购买条目。这用于客户细分。Kaggle 网站链接:市场篮子分析。K-Means 可以很好地将观察结果聚类到特定的组中,因此这将是我们主要的无监督聚类工具。
对示例数据集应用聚类的目标是:
- 如何用 Python 中的机器学习算法(KMeans 聚类)以最简单的方式实现客户细分?
- 谁是你的目标客户,你可以从谁开始营销策略
- 营销策略在现实世界中是如何运作的
数据集描述:
- CustomerID,性别:分类特征
- 年龄、年收入(千美元)、支出分数(1-100):数字特征
特征工程:
我创建了一个手动功能,将包含“”、“【k $】年收入”变量的组进行聚类。
K 均值聚类迭代的代码段
通过上面的代码,创建了集群数量的图表。使用肘方法,我们可以看到 4 是更好的集群数选择。
聚类数图
确定了聚类数后,我将 KMeans 模型拟合到具有 4 个聚类的数据集中。
k-均值属性:
聚类中心 _: 聚类中心的坐标。聚类中相异度最小的最优点。 标签 _: 每个点的聚类标签
K 均值聚类的代码段
下图将每个数据点显示为散点图,红点显示为聚类质心。
K-均值聚类图
从为数据集生成的分类中,我将分类标签指定为一个特征,并将数字特征转换为模型的分类特征。该模型用于根据年龄、年收入和分类的特征来预测每个客户的支出成本水平。
随机森林分类器的代码片段
最后
- PCA 显示了观察值的低维表示,其解释了方差的良好分数。每个主成分关注不同的特征组。建议对缩放后的数据执行 PCA。
- 聚类显示了观察值中的同类子群。对于 K-Means 聚类,它根据每个聚类中每个观察值的最小欧氏距离来生成每个聚类中的聚类质心。层次聚类基于相异度将两个观察值融合成一个聚类,并且显示了每个聚类的相似性水平的树状图。
参考:
1:加雷斯·詹姆斯、丹妮拉·威滕、特雷弗·哈斯蒂和罗伯特·蒂布拉尼。统计学习导论。第七版。斯普林格。
请继续关注更多关于机器学习概念的初学者友好文章!统计学习系列到此结束。☺️
集中趋势的统计测量
使用均值、中值和众数
介绍
在统计学中,集中趋势的度量是代表数据点的一组“中间”值。集中趋势描述了集中在中心位置的数据分布,所有其他数据都围绕该中心位置聚集。与分散相反,它测量观察值相对于中心值分散到什么程度。
正如我们将在下面看到的,集中趋势是一个基本的统计概念,但却是一个广泛使用的概念。在集中趋势均值、中值和众数的度量中,最常被引用和使用。下面我们将了解为什么它们在数据科学和分析领域如此重要。
图:集中趋势的概念化测量
1。算术平均值
Mean 是一些数据点的平均值。这是最简单的集中趋势测量方法,取观察值之和,然后除以观察值的数量。
在数学符号中,算术平均值表示为:
其中 xi 是单个观测值,而 N 是观测值的数量
在一个更实际的例子中,如果 3 个餐馆雇员的工资是每小时 12 美元、14 美元和 15 美元,那么平均工资是每小时 13.6 美元。就这么简单。
平均值的应用
- 我们在日常生活中做各种各样的平均。我们向朋友询问他们社区的平均房租;在搬到一个新的城市之前,我们计算每月的开支。我们每天都在各种情况下使用算术平均值。
- 企业使用方法来比较一月和二月之间产品的平均日销售额。
- 在数据科学中,平均值是探索性数据分析(EDA)中的一个基本指标,是各种高级建模的输入。Mean 在计算分类或回归算法中的 RMSE(均方根误差)、MAE(平均绝对误差)准确性度量时在幕后工作。
类型学
平均值有几个变体。这些不经常使用,但是在特殊的用例中是有用的工具。以下是一些例子:
加权平均值在普通平均值中,所有数据点都被平等对待,所有数据点都被分配了相等的权重(隐式)。在加权平均法中,根据目标,一些数据被赋予较高(或较低)的权重。
几何平均与普通平均不同,几何平均将 N 个值相乘,取乘积的 N 次根。因此,对于两个值 2 & 8,几何平均值将是 4。
调和平均值这是另一种平均值,通过取数据点的倒数,然后取它们的平均值,最后取结果的倒数来计算。
均值的局限性
尽管算术平均值是最广为人知的集中趋势的度量,但它不是一个稳健的度量;它对异常值非常敏感。
让我们考虑以下两种情况。在左边,四个值的平均值正好在数据集的中间。然而,在右边,仅仅一个异常值数据(16)改变了“重心”,并使平均值进一步向右移动。为了克服算术平均值的这种局限性,我们有另一种集中趋势的度量方法——中位数。
图:异常值对数据集算术平均值的影响(插图:作者)
2。中位数
列表[2,3,4]的中心是什么数字?答案当然是 3。这是中间值。如果同样的数字排序不同,比如说[2,4,3]呢?现在中位数是 4 吗?不,还是 3 点。所以中值是一个序列中间的数字,在之后,它们被排序(升序或降序)。
假设我们有一个由五个数字组成的列表[4,6,2,10,7],我们想找出中间值。过程很简单:
- 数据:[4,6,2,10,7]
- 排序列表:[2,4,6,7,10]
- 找出中间的数字:6(中位数)
但是如果列表中有偶数[4,7,6,2,10,8]呢?现在中间有两个值,所以在这种情况下,解决方案是取它们的平均值:
- 数据:[4,7,6,2,10,8]
- 排序列表:[2,4,6,7,8,10]
- 在中心找到两个数字:[6,7]
- 取平均值:6.5(中位数)
中间值的优点和缺点
为什么是中位数,用它来衡量集中趋势有什么好处?一个重要原因是,与均值不同,它对极端值不敏感。例如,在列表[2,3,4]中,最后一个值可能是 400,而不是 4,但是中值仍然是 3。
中位数的另一个好例子是数据的解释。中位数完美地将数据分成两半,因此,如果霍华德县的中位数收入是每年 100,000 美元,您可以简单地说,该县一半人口的收入高于 100,000 美元,而另一半人口的收入低于 100,000 美元。
但是,有一个明显的缺点。中位数使用数据点的位置,而不是它们的值。这样,一些有价值的信息就丢失了,我们不得不依靠其他类型的测量,如离差测量(下一节)来获得更多关于数据的信息。
用例
中位数的一些应用是众所周知的。你是否注意到美国人口普查局将家庭收入报告为“家庭收入中位数”?还是劳工统计局把美国人的工资报告为“工资中位数”?这是因为通过调查或普查收集的大量数据高度分散,既有极小的值,也有极大的值。在这种情况下,中位数是比平均值更好的分布中心的度量。
图:美国的平均工资和中值工资。( 来源:社保管理局*;*访问时间:2020 年 7 月 19 日 )
3。模式
在一系列数字中,比如说[2,3,4,4],最常见的是 4;那就是模式。它也可以应用于文本数据,例如,集合{“John “、” Kelly “、” Nadia “、” John “、” Michael”}的模式是" John ",因为它在这个名称集合中出现了两次。
一个发行版可以有多个模式,如列表[2,2,3,4,4]所示;这叫做离散变量的双峰分布。按照这个逻辑,有两个以上模式的分销叫做多模式分销。
用例
- 理解分布的模式很重要,因为频繁出现的值更有可能在随机样本中被选取。
- 在一个城市中最常出现的名字是什么?风尚有答案。理解模式有助于解决自然语言处理(NLP)领域的更多此类问题。
- Mode 可以帮助连锁杂货店计算出在一周、一月或一年的不同日子里哪种产品卖得最多。
摘要
总之,中心趋势是统计学和数据科学中的一组重要概念,它衡量一些观察值如何围绕一个中心值定位。算术平均值是数据点的简单平均值,中值是数据集中心的值,模式返回最频繁出现的值(数字或文本)。这些措施在数据科学中有大量的使用案例,从探索性数据分析到分类算法中的准确性度量,再到自然语言处理。
数据科学中的统计陷阱
刻板结果如何改变人们头脑中的数据分布
有很多方法可以从给定的数据集中推断出大量不同的结果,但是也有无限多的方法可以从中得出错误的结论。谬误可以定义为不准确或错误推理的产物,通常导致人们从给出的数据中获得不正确的结果。
照片由 Unsplash 上的 Tayla Jeffs 拍摄
好的一面是,由于长期以来许多人都犯过这些错误,而且这些错误的结果在各个领域都有记载,因此识别和解释这些统计谬误就变得更加容易了。以下是数据科学家应该避免陷入的一些统计陷阱。
樱桃采摘
这可能是最明显和最简单的谬误,也是我们大多数人以前肯定做过的事情。摘樱桃的直觉很简单:故意选择数据点来帮助支持一个特定的假设,以其他拒绝该命题的数据点为代价。
摘樱桃降低了实验发现的可信度,因为它只显示了画面的一面
摘樱桃不仅是对公众的不诚实和误导,也降低了实验发现的可信度,因为它本质上只显示了画面的一面,遮蔽了所有负面的方面。这会让一个实验看起来完全成功,但实际上并非如此。
精选数据与所有数据— 来源
避免摘樱桃最简单的方法就是不摘!本质上,采摘樱桃是从业者有意为之,因此不是偶然的。在整理数据的过程中,为了进一步避免摘樱桃的可能性,人们应该使用来自大量不同背景的数据(尽可能地)来限制通常伴随有限视角而来的偏见。
数据挖掘
大多数人(尤其是那些不熟悉数据科学细微差别的人)认为数据分析意味着从各种数据中挑选出明显的相关性。这并不完全正确,因为数据分析通常需要逻辑推理来解释为什么存在某种相关性。如果没有一个合理的解释,仍然存在着机会相关性的可能性。进行实验的传统方法是定义一个假设,然后检查数据来证明它。相比之下,数据挖掘是一种实践,即做出符合假设的偶然关联,而不对关联的原因提供任何逻辑见解。
数据挖掘有时被描述为从数据集中寻找比它实际包含的更多的信息
数据挖掘的一个分支是假因果关系,关于相关性的错误假设可能导致研究的最终失败。通常,两个事物之间的相关性会诱使我们相信一个事物导致了另一个事物,或者是由另一个事物导致的。然而,通常是巧合或其他外部因素导致一种或两种效应发生。数据科学家必须始终挖掘比表面上看起来更深的东西,超越简单的相关性,以收集证据来支持研究假设。
相关性并不意味着因果关系
过度拟合
过度拟合是大多数机器学习和数据科学从业者都很熟悉的一个术语。过度拟合是指创建一个极其复杂的模型的过程,该模型过度适应数据集,并且在一般化的数据上表现不佳。
用机器学习的术语来说,当一个模型在训练集上表现得非常好,但在测试数据集上却不能给出类似的结果时,就会发生过度拟合。John Langford 给出了实践中最常见的过度拟合类型的全面描述,以及帮助避免它们的技术这里。
数据过度拟合— 来源
大多数数据科学家构建基于数学的模型来理解数据点之间的潜在关系和相关性。一个足够复杂的模型倾向于完美地拟合所提供的数据,给出高精度和最小的损失。也就是说,复杂的模型通常是脆弱的,当提供其他数据时会崩溃。简单模型通常更稳健,更善于根据给定数据进行预测。
辛普森悖论
辛普森悖论是一个很好的例子,它强调了在整理和实验数据时对真实世界良好直觉的需要。数据科学家需要认识并接受这样一个事实,即大多数数据是一个更大、更复杂的领域的有限表示。辛普森悖论展示了试图从单一角度看待复杂情况而将其过于简单化的危险。
辛普森悖论是以统计学家爱德华·休·辛普森的名字命名的,他在 1951 年的一篇技术论文中描述了以他名字命名的统计现象。陈述起来很简单,但对于没有接受过统计培训的受众来说,这往往是一个困惑的原因——当数据被分组时出现的趋势或结果,当数据被组合时,这种趋势或结果会逆转或消失。
当数据按特定类别分组时,总体趋势发生逆转— 来源
一个简单的例子可以很好地解释辛普森悖论。假设我们选取了板球比赛中两个击球手 A 和 B 的击球得分。在我们收集的数据中,A 总体上比 B 得分更多。但是,如果我们查看 A 和 B 的终身统计数据,就会发现 B 比 A 得分更多。
辛普森悖论,在某些方面,可以认为是无意的摘樱桃。这通常是由分布中的一个变量引起的,这个变量被恰当地命名为潜伏变量,它将数据分割成多个独立的分布,而且它们通常很难识别。
我们需要知道我们在寻找什么,并恰当地选择最佳的数据观点,给观众一个公正和完整的事实陈述
为了避免陷入辛普森悖论,数据科学家必须了解他们的数据,并对围绕和影响数据的一般因素有一个基本的概念。基于所有这些情况,应该以这样的方式收集和查看数据,即结果不仅美化假设(摘樱桃),而且如果从独立的角度来看也不会改变。
生存偏差
算法偏差最近获得了很多关注,并成为一个热门话题。然而,统计偏差和统计本身一样古老。生存偏差可以最好地描述为从不完整数据中得出结论。这些在使数据分析不准确方面起着至关重要的作用。
当数据集中提供的数据先前已经经过过滤过程时,会出现生存偏差。这会导致错误的推论,并会影响大量的分析。意识到偏差通常在数据科学领域非常重要,因为人类倾向于研究成功的结果并从中得出推论,而忽略伴随的失败。
只看成功的首席执行官,我们看不到完整的数据集,包括不成功的首席执行官和地球上可能碰巧早餐吃燕麦片的其他人
由于生存偏差来自不完整的数据集和研究输入,数据科学家可以应用一些技术来避免生存偏差,同时从数据中进行推断。这些包括但不限于多个数据输入、假想场景、对数据的上下文理解以及测试时增加的数据。
赌徒谬误
赌徒谬误是人类思维倾向于从数据中的常规相关性得出推论的另一个例子。赌徒谬误指出因为某件事最近发生得更频繁,所以现在不太可能发生(反之亦然)。然而,这在现实生活中并不成立。例如,如果一枚硬币连续 3 次正面朝上,人们会认为不可能连续 4 次正面朝上。然而,这是错误的,因为硬币仍然有相同的概率正面或反面落地。
同样的事情也发生在数据上。当多个数据点开始显示类似的未解释的相关性或矛盾时,数据科学家通常倾向于依靠直觉,而不是逻辑解释和公式,这往往会在推断推论时导致灾难性的后果。
当从数据中得出推论时,人们倾向于根据以前的经验凭直觉,而不是逻辑解释
理解“赌徒谬误”需要两个关键点:大数定律及其与回归均值的关系。大数定律表明,多次执行完全相同的实验的所有结果的平均值应该接近期望值,并且期望值和原始值之间的差异将与所进行的实验次数成正比。
向均值回归的概念还引入了回归谬误,该谬误假设当某件事情发生时,它异常地好或坏,随着时间的推移,它会回复到平均值。这种谬误经常被用来为研究或模型预测中产生的异常值寻找解释。
避免一个错误是朝着正确方向迈出的一步。避免谬误是迈向更好推论的一步。
统计陷阱:选择偏差
数据帧字节
与迈克·贝当古的对话,我们讨论了选择偏差的常见统计和数据陷阱。
在每一集的 DataFramed、DataCamp 播客 中,我都会邀请行业和学术界的嘉宾来观看与数据科学实践相关的短片。我收到了很多对这些片段的脚本的请求,所以已经开始在媒体上发布它们。
下面是来自“统计陷阱”部分的关于选择偏差的对话,我有幸与统计学家、物理学家、统计建模和高性能统计计算平台 Stan 的开发者Mike betan court共同制作了这个对话。此对话出现在 本,DatFramed 第一集,19:25:
HBA :现在到了称为统计陷阱的环节。我现在和迈克尔·贝坦科特在一起,他是开源统计建模平台 Stan 的核心开发人员,他也在聚会上自称是曾经和未来的物理学家,伪装成统计学家。怎么了,迈克?
雨果,谢谢你邀请我。我在聚会上很有趣。
HBA :今天你在这里讲述一个常见的统计陷阱:选择偏差。
MB :确实。在我们收集数据的任何时候,选择偏差都可能存在。然而,在谈论普遍性之前,我想首先通过考虑一个最著名的选择偏差的例子来证明它是多么微妙,这个例子来自统计学家亚伯拉罕·瓦尔德对二战的一项分析。
盟军军方感兴趣的是如何最有效地利用他们有限的资源来补充从战斗任务中返回的受损飞机的装甲。返回的飞机会在特定的位置受到损坏
,普遍的想法是在他们观察到损坏的地方增加更多的保护。
然而,这种想法隐含地假设返回的飞机代表了全部受损飞机。然而,Wald 和他的团队认识到,返回的飞机实际上是一个有偏见的样本,因为他们没有包括那些从未从任务中返回的飞机。
一旦他们理解了数据中的这种选择偏差,他们推荐了看似违反直觉的策略,即在返回的轰炸机未受损坏的地方加强装甲。他们意识到,如果潜在的损伤均匀分布在每架飞机上,那么返回飞机上的损伤实际上证明了什么损伤是可存活的。另一方面,对未受损区域的损害可能是至关重要的,会阻止飞机返航。
返回飞机的受损部分显示了它们可能遭受损坏但仍能返回家园的位置;在其他地方被击中的人无法幸存。(图为假设数据。)图片来自维基百科。
HBA :这是选择偏差的一个例子,对吗?
MB :对,正是。统计学中最常见的陷阱之一是误解手头的数据完全代表了正在研究的系统。如果这是真的,随着我们收集越来越多的数据,我们将能够推断出关于该系统的任意精确的见解。
不幸的是,在实践中,我们的测量永远不会像假设的那样完美,事实是,每当我们收集数据时,我们都会忽略一些数据。如果我们想在实践中确保准确的推断,那么我们必须考虑这些选择偏差是如何破坏我们的数据的。特别是,我们必须考虑我们的测量过程如何优先忽略具有某些属性的数据,同时保留其他属性。
如果我们不这样做,那么我们从非常大的数据集中得出的推论将总是受限于它们能告诉我们多少关于我们正在分析的系统的信息。
HBA :选择偏差会是一个多大的问题?你如何对抗它?
选择偏差的确切后果既取决于选择机制本身,也取决于我们在给定的应用中需要多精确的推理。例如,如果我们是一家公司,我们试图了解利基人口如何与我们的产品互动,那么即使很小的选择偏差也会严重扭曲我们的洞察力。
最终,量化这些影响的大小,并确定是否需要考虑选择偏差的唯一方法是建立一个完整测量过程的数学模型。幸运的是,有越来越多的工具来促进这种复杂的建模,特别是像 Stan 这样的概率编程语言。
HBA :迈克,感谢你对选择偏差常见统计陷阱的精彩描述。
雨果,谢谢你邀请我。
链接:
股票价格的统计特性
模拟股票市场的动态
图片由皮克斯拜的 Gerd Altmann 提供
股票价格的统计分析
股票价格的动态行为通常基于以下假设:
- 交易的连续性意味着报价之间有一个非零的间隔
- 价格演变为一个随机过程和基本面随机变量
等式 1:描述股票价格动态的随机过程中的随机变量。
它们都是独立同分布的(或 i.i.d. ),并且具有有限的均值 μ 和方差 σ。
3.ln S (t)的价格动态是一个扩散过程。扩散是某个物体从一个其浓度高于其他大多数地方的位置向外扩散的“T21”。
图 1:扩散过程的例子。当屏障被移除时,溶质扩散填充整个容器。
随机变量的增量被假定为高斯型。这个模型被称为几何布朗运动 (GBM)。一个 GBM 是以下随机微分方程 (SDE)的解:
方程 2:描述 GBM 的 SDE。
其中 W(t)是维纳过程或布朗运动其中 μ 称为漂移 σ 是波动率。解决方案是:
方程 3:方程的解。2.
图 2:图中显示了漂移μ变化时的几个 GBM 示例。
标准差 σ ( t )的指数接近 0.5,这意味着价格变化是独立的。
现在作为等式的结果。1,有限区间内的总报价数发散。因此,由中心极限定理,
具有高斯分布。
图 3:CLT 的图示。通过对新的随机变量求和的“平滑化”,原来的密度分布收敛到一个高斯分布(来源)。
假设 1 显然是理想化的。我们应该建立一个 S ( t )和一个离散时间随机过程的模型,在这个过程中,报价有时会出现
其中δt 是一个有限区间。物理学家已经非常详细地研究了这些离散过程的性质。
股票收益
物理研究通常关注价格增量,而不是价格本身。如果δS(n)<<S(n),δt 很短,价格变化很慢(例如,在没有崩盘的情况下),可以做如下近似:
等式 4:随机变量的选择。
比较几何布朗运动的蒙特卡罗模拟;
图 4:布朗运动的蒙特卡罗模拟例子。
通过模拟布朗运动:
使用年度漂移 μ =10%,年度波动 σ =20%和相同的一组正态分布随机数 X ( n )我们获得了图 X(来自 W. Paul 和 J Baschnagel ),显示了非常可靠的一致性。
图 5:对于每日现货价格 S(t ),几何布朗运动(实线)和布朗运动(虚线)的蒙特卡罗模拟之间的比较。两者的漂移、波动性和选择的高斯随机数集是相同的(源)。
因此,可以对股票价格使用加法(而不是乘法)模型:
等式 5:回报的加性模型。
在加法模型中,价格增量相加,与乘法模型相反,在乘法模型中,连续的价格比率相乘。
数学插曲
莱维分布
等式 6:李维分布。
是由法国数学家p . le vy和苏联数学家 A.Khintchine 引入的非负随机变量的概率分布。Lévy 分布考虑了尖峰值(正的过度 cu 尖峰值)。
图 6:高斯分布和李维分布的比较。
Lévy 分布是一种稳定分布,其意味着拥有这种分布的独立随机变量的线性组合将具有相同的分布(取决于位置和比例参数)。因此,它们具有缩放属性:
等式 7:稳定分布具有标度特性。
图 7:自相似过程的例子。
然而,李维分布具有发散的标准偏差。此外,他们的最大值更大和更窄,我们知道这不会发生在真实的金融序列。
图 8:雪佛龙股票每日价格差异的对数和高斯分布之间的比较。尾巴更肥,最大值更大更窄(来源)。
这可以通过使用截断参数截断尾部来解决。截断征税飞行的一个例子是:
等式 8:截断的李维分布。
其中 N 是 a 归一化常数。
图 9:法国数学家 p . le vy(来源)和苏联数学家 A.Khintchine ( 来源)
伯努瓦·曼德尔布罗是第一个注意到资产价格比高斯分布预测的更频繁地遭受巨大波动的人之一(它们更像是尖峰厚尾)。
在一篇著名的论文中,H. E. Stanley 和 R.N. Mantegna 使用了一组 1984-1989 年期间的 P500 数据来确定
等式 9:股票变动的定义 l。
图 10:美国物理学家 H. E. Stanley ( 来源)和意大利物理学家 R.N. Mantegna ( 来源)。
使用间隔δt = 1,…,10 分钟。他们的结果如下图所示。
图 11:S&P500 的价格变化 l 相对于δt = 1 分钟的 l/ σ 的概率分布。高斯曲线(窄曲线)与勒维分布的最佳拟合进行比较。后者在 l/σ ≤ 6 时要好得多,但在 l/σ ≥ 6 时呈指数下降(来源)。
下列 Lévy 分布非常符合 l/σ ≤ 6 的数据:
等式 10:l/σ≤6 时,Lévy 分布与数据非常吻合。之后,衰减是指数级的。
这个李维分布有两个主要的重要性质:
- 它们的稳定性(自相似性)
- 它们是概率空间中的吸引子
图 12:收敛到独立同分布稳定吸引子的过程示意图(来源)。
在截断生效之前,截断的 Lévy 分布在很长一段时间内保持自相似。
相关
几何布朗运动假设δS 的相关性为零。为了测试这个假设,我们使用下面的相关函数:
等式 11:价格-价格相关性。
相关函数可以具有区间[-1,1]内的值,但是有三种情况特别相关,即:
如果服从 1 和 2,我们会:
等式 12:高斯过程的价格-价格相关性。
取而代之的是。10 成为从 1 到 0 的指数衰减(在大约δt *≈15 分钟处),在小时间具有强相关性:
等式 13:价格-价格相关函数衰减的指数逼近。
然后,我们得出δt * > 15 分钟的价格分布的候选值。在δt 之后,once 可以认为价格变化是I . I . d .*。分布由下式给出:
等式 14:当δS 已经是独立同分布时,δt * > 15 分钟后价格变化的概率分布…
N*因子卷积的累积分布为:
等式 15:等式 15 卷积的累积概率分布。14
图 13:S&P500 与真实数据的累积概率分布。
我们注意到一些事情:
- 分布方程。14 可以很好地用截断的 Lévy 分布来描述,其中 α = 3/2(拟合了 c 和λ)
- 卷积很好地逼近了 T > >δT *处的概率,但是随着 T 的增加,卷积的形状收敛为高斯型
- 随着 T 的增加,真实的财务数据穿过累积分布(在开始处下方,在尾部处上方)
- 根据所分析的市场,向高斯分布的收敛需要几天到几周的时间
在 Stanley 和 Mantegna 之后,我将快速分析 DJIA(道琼斯工业平均指数)的动态。他们找到了 DJIA 30 只股票的最大和最小相关系数。最大值是 0.73,位于可口可乐和宝洁之间,如下图所示。
图 14:可口可乐和宝洁公司 ln S(t)的时间演变。
他们还测量了强相关性保持强的特征时间尺度。他们发现,从 1990 年到 1994 年,相关性从 0.73 到 0.51 不等,这表明股票是强同步的。
我的 Github 和个人网站 www.marcotavora.me 有一些关于金融和其他主题的有趣材料,如物理、机器学习、深度学习和数学。看看吧!
行动中的统计意义
数据科学
以及实际应用中的例子
图片来源:维基百科
《行动博客》前情提要:我们研究了中心极限定理,以便更好地理解正态分布背后的基本定理。如果你还没有阅读,我鼓励你去阅读!
以及实际应用中的例子
towardsdatascience.com](/central-limit-theorem-in-action-1d4832599b7f)
今天,我们将观察另一个重要的统计学概念并进行假设检验。我将不仅用一个具体的、吸引人的例子,而且用简单的术语来解释的统计显著性。我将使用我用来解释中心极限定理的同一数据集——截至 2018 年 186 个国家的预期寿命。
让我们再来看看中央极限定理中最重要的情节和计算:
世界平均预期寿命的平均值( )为 73,标准差(σ)为 7,几乎呈正态分布。使用中心极限定理,通过将总体标准偏差除以样本大小的平方根,计算出标准误差为 0.57。
想象一下,一个流浪者统计学家发现了一个只有 50 人居住的岛屿。所有居民都非常健康,年龄超过 73 岁。她做了一个小调查,了解到岛上的平均寿命是 76 岁。此外,她发现岛上的每个人都在进行间歇性禁食。考虑到平均寿命为 73 岁,这是一个耐人寻味的案例!
现在,我们好奇的统计学家想知道间歇性禁食是否是抛开所有其他可能的决定因素,活得更长寿、更健康的途径。因此,她决定进行一项实验研究,在这里她寻找这个问题的答案:
间歇性禁食会增加人类寿命吗?
为了理解流浪者统计学家的研究及其结果的意义,我们需要理解以下术语:
- 无效假设和替代假设
- 标准正态分布和 Z 得分
- p 值
- 显著性水平
不要被他们吓倒,我会遵守我的简单承诺。😉
1.无效假设和替代假设
假设是关于变量之间关系的陈述。假设检验是一种检验假设、观察、主张或实验结果的方法,用来检验你的结果是否具有统计学意义。假设检验是围绕两个对立的主张构建的:零假设和替代假设。
零假设要么描述总体/样本的当前状态,要么声明样本和总体参数之间没有差异。替代假设,与零假设相反,要么描述人口/样本的未来或期望状态,要么声明在样本和人口参数之间存在差异。
我们的统计学家为她的研究设定了如下无效假设和替代假设:
- 零假设:间歇性禁食不会增加平均寿命。( ≤ 73)
- 另一种假设:间歇性禁食会增加平均寿命。(> 73)
她的目标是观察间歇性禁食是否会导致增加(从 73 到 76。)的人类平均寿命,这使得假设检验成为单尾定向检验。
2.标准正态分布和 Z 得分
许多定理假设总体或样本服从正态分布。正态分布的广泛使用源于根据标准偏差评估数据点的简易性。让我们记住正态分布的重要性质:
- 这是一个连续的对称分布。
- 68%的数据位于 1 以内,95%的数据位于 2 以内,99.7%的数据位于平均值的 3 个标准偏差以内。
标准正态分布是均值为 0,标准差为 1 的特殊正态分布。任何正态分布都可以通过从每个数据点减去平均值并除以标准偏差来转换为标准正态分布。这个过程叫做标准化。
具有累积概率和 z 分数的标准正态分布。图片来源:维基百科
Z 值是标准化过程中应用于数据点的计算结果。在上面的标准正态分布中,z 得分位于 x 轴上(z 得分为正值表示该值高于平均值,z 得分为负值表示该值低于平均值),而累积概率值位于累积百分比栏上且位于分布下方。
z 分数计算。图像来源: Z 工作台
Z 值根据数据点到平均值的距离来定义数据点的位置,平均值由标准差来衡量。例如,通过查看上面的 z 得分和累积百分比:
- 随机变量小于等于 1 的概率为 84.1% (P(x ≤ 1) = 0.841)。
- 随机变量大于或等于 2 的概率为 2.3% (P(x ≥ 2) = 0.023)
我们可以从 z 得分计算概率值,缩写为 p 值,反之亦然。
3.p 值
P 值是在假设零假设正确的情况下,获得至少与测试期间实际观察到的结果一样极端的测试结果的概率。【来源:维基百科】。我用更简单的话来说:
在零假设为真的情况下,p 值表示获得至少与实际结果一样极端的测试结果所涉及的随机机会或噪声的百分比。
让我们在我们的上下文中进一步分析 p 值:
- 法国是一个均值为(x̄) 83 的样本,来自一个均值为( ) 73、标准差为(σ ) 7 的正态分布。
- 当我们计算 z 分数(83–73)÷7 时,它是 1.42。这使得法国比平均水平高出 1.42 分。
- 我们的世界,因此零假设是:“法国的平均预期寿命比全球平均水平高 1.42 点”
比方说,我们从法国抽取了一个样本,发现平均预期寿命实际上比全球平均水平低 1 个百分点,p 值为 0.16。这意味着,在一个零假设为真的世界里,我们有 16%的随机机会测量出法国的平均预期寿命至少比全球平均水平低 1 点。
换句话说,如果法国的平均预期寿命实际上比全球平均水平高 1.42 点,我们仍然会测量出它至少低 1 点,大约 1/6 的时间是因为噪音。因此,p 值越低,结果越显著,因为它不太可能是由随机机会或噪声引起的。
p 值可以用 z 表或 R 或 Python 中的库来计算。我们好奇的统计学家将从Python 的 scipy stats 包和来自同一个库的 norm 对象中获得一些帮助来表示标准的正态分布。此外,为了计算 p 值,她将使用 norm 对象的累积密度函数(cdf)方法。对于给定的 z 得分,该方法将产生与上述标准正态分布中的累积百分比相同的概率值。
为了完成她的实验研究,剩下的唯一缺失部分是显著性水平——用α表示。
4.显著性水平
显著性水平(α) 是阈值 p 值,用于决定测试结果是否具有统计显著性。它也代表了在我们的测试/研究中我们可以容忍多少随机性。显著性水平通常设置为 0.05、0.01 或 0.001。
如果测试结果的 p 值小于显著性水平(α),那么我们可以断定所获得的测试结果在统计上是显著的,并且它们不是由于随机机会或噪声。
在开始实验之前设置显著性水平是很重要的。否则就不是客观测试了。我们好奇的统计学家也知道这一点,并将显著性水平设为 0.05。最后,她要完成研究,观察行动中的统计意义!
我们的漫游者统计员迄今为止执行的步骤:
- 她决定进行一项实验研究来回答这个问题:
- 间歇性禁食会增加人类寿命吗?
2.她确定了无效的替代假设:
- 零假设:间歇性禁食不会增加平均寿命。( ≤ 73)
- 替代假设:间歇性禁食增加平均寿命。(> 73)
3.她设置了测试统计并计算了 p 值:
- 50 名健康老年人的发现只是世界平均寿命分布的又一个样本。因此,她将测试统计数据确定为岛上每个人都进行间歇性禁食的平均预期寿命,并将 p 值计算为:
4.她确定显著性水平为 0.05:
- α右侧的区域称为**临界区域。**表示 p 值小于显著性水平的区域。如果测试统计值落在这个区域内,她将得出结论,测试结果具有统计学意义。(对于单尾定向测试,p 值为 0.05 的 Z 得分为 1.64)
当她把所有的碎片放在一起,揭示一个更健康更长寿的生活之路:
测试统计落入临界区域,这意味着测试结果具有统计学意义,她拒绝零假设!
有统计学意义的证据表明,间歇性禁食增加了平均预期寿命,显著性水平为 0.05。获得的测试结果不是随机的。
在平均预期寿命为 73 岁的世界中,由于随机噪声,获得 50 个样本均值为 76 的概率(p 值)为 0.0015,小于 0.05。
测试结果在统计学上是否被称为显著取决于显著性水平。当 p 值设置为 0.001 时,测试统计数据将不再落入临界区域。(对于单尾定向测试,p 值为 0.001 的 Z 得分为 3.09)
在这种情况下,我们会得出结论,测试结果没有统计学意义,并接受零假设。(间歇性禁食不会增加平均寿命)
统计显著性的实际应用
我们好奇的统计学家的测试被称为 **z 测试。**如果我们的样本量少于 30,或者有两个样本进行比较,那么这将是一个 t 检验。如果我们比较了两个或更多样本,这将是一个 ANOVA(方差分析)测试。
从社会科学到物理学,几乎每个学科都使用假设检验和统计显著性。我们可以使用它们来比较机器学习环境中不同模型的性能。我们可以自信地进行假设检验,并使用统计显著性确定哪一个表现更好。这里有一篇我喜欢的关于统计学意义在机器学习中的使用的文章:
自信地比较机器学习模型
towardsdatascience.com](/compare-which-machine-learning-model-performs-better-4912b2ed597d)
感谢阅读!如果你想更深入地了解统计意义的“作用”,你可以看看这个 Deepnote 笔记本。我这个吸引人的例子来源于 Gapminder 的公开数据,可以在这里找到。
对于评论或建设性的反馈,您可以通过回复、 Twitter 或 Linkedin 联系我!保持安全和健康👋
借助 Python 的统计意义
奥占·阿克多安在 Unsplash 上的照片
使用 Python 检查一个结果是否纯粹是由于偶然。
“使用广告为我们的产品创造更多收入”。“减肥药比服用安慰剂的人减轻了更多的体重.”"电池’ A '的寿命是其竞争对手的十倍."这些类型的语句经常出现。当查看数据时,很容易做出一个快速的假设,即某个变量导致了某个结果。对这些结论过于草率会导致很多问题。在数据科学中,能够确定一个结果是否是由于偶然可以帮助选择一个模型以及检查采样误差的方法。
确定统计显著性是建立一个结果不完全是由于偶然的信心的方法之一。我们来看看什么统计显著性是如何用 p 值来确定的。
这个例子将使用 Python 来展示如何在你的 code/ jupyter 笔记本中表示统计意义。建议您了解一些 Python 基础知识。我们还将使用以下 Python 库 NumPy 、 Matplotlib 和 Pandas 。如果你对它们都不熟悉,我建议你使用提供的链接。
数据
我们将查看来自 kaggle.com 的"电子商务愿望中的夏装销售"数据集。如果你不熟悉Wish.com,它是一个在线电子商务平台。这些数据是在 2020 年 8 月通过抓取网站上所有列在“夏季”类别下的项目收集的。您可以通过单击上面的链接,了解有关数据获取方式以及每一列/变量的更多信息。数据集显示,公司有个人资料图片的项目比公司没有个人资料图片的项目具有更大的总销售额(以欧元计)。我们将尝试确定这一结果是否有统计学意义。
关键概念
- 通过确定零假设和替代假设进行假设检验
- p 值和 p 值阈值
- 检验统计量
- 排列测试
- 使用 p 值来确认或拒绝零假设
假设检验
为了建立统计显著性,我们必须提出一个零假设和一个替代假设。零假设是指变量对我们的最终结果没有影响。另一个假设是变量对最终结果有影响。
对于这个例子,我们的无效和替代假设将是:
- 零假设:平均而言,当一家公司有简介照片时,一件商品的总销售额(以欧元计)与一家公司没有简介照片时的总销售额(以欧元计)相同**。**
- 另一种假设:平均来说,如果一家公司有个人资料图片,一件商品的总销售额(欧元)会比没有个人资料图片的商品的总销售额(欧元)高**。**
P 值阈值
p 值将在后面进行深入解释,但我们现在将简要介绍一下。在开始测试之前,确定我们的 p 值阈值总是很重要的。在确定零假设是否为真时,p 值是我们量化结果稀有程度的一种方法。p 值越低,结果就越不像是纯粹由于偶然。
p 值阈值是我们将选择的一个数字,如果超过这个数字,我们就可以断定我们的零假设为真。我们选择多高或多低,我们希望这是基于我们的测试。如果我们要测试某个需要非常精确的东西的统计显著性,我们可能会选择一个非常低的阈值,比如 0.001。对于不需要太多精确度的测试,比如销售额或网站参与度,我们会更高。标准阈值是 0.05,即 5 %。由于我们着眼于销售,我们将采用标准门槛。如果我们的 p 值低于 0.05,我们将拒绝零假设。
准备我们的数据
一旦我们从 Kaggle 下载了数据集,我们就可以使用 pandas 将它读入数据帧。
我们感兴趣的有 3 列“价格”、“单位 _ 售出”和“商家 _ 个人资料 _ 图片”。在继续之前,我们将采取以下步骤。
- 除了上面提到的三列之外,我们将删除所有其他列。
- 检查是否有任何丢失的值。
- 使用 df.describe()来确定是否有任何值看起来不准确并且可能给出意外的结果。
- 删除或更正我们认为可能包含不正确信息的任何行
- 通过将“price”列乘以“units_sold”列,计算每件商品产生的欧元总额。
下面是用于获取上述集合的 python 代码。
*** 使用多行注释语法来表示输出***
准备好数据集后,让我们将数据集分成两组。一个将包含公司有个人资料图片的项目(a 组),另一个将包含公司没有个人资料图片的项目(b 组)。
一旦分成两组,我们将找到每组总销售额的平均值。我们还将查看每个组中有多少行,因为这将有助于我们稍后确定如何构建我们的随机组。
检验统计量
现在我们有了两组总销售额的平均值,我们可以用它来确定我们的测试统计。检验统计量是一个数值,我们将使用它来确定两组之间的差异是否是随机的。在这种情况下,测试统计将是使用个人资料图片和不使用个人资料图片的总销售额的平均差异。我们的测试统计大约是 33,184 欧元。
排列测试
我们现在的目标是多次重新创建我们的两组,以查看我们的测试统计偶然发生的可能性。一个排列测试是我们将如何完成这个目标。
我们将在 Python 中采取以下步骤:
- 创建一个空列表来保存 1000 个平均差异。这将是我们生成的采样分布。
- 初始化“总销售额”的一个系列。
- 做一个将迭代 1000 次的 for 循环。
- 对于 For 循环的每次迭代,我们将把每次总销售额随机放入“a”组或“b”组。为了重新创建这两个组中的大小差异,我们将给出 14.4%的机会将值归入“a”组,85.6%的机会将值归入“b”组。这个百分比是基于我们之前确定的行数。
- 一旦我们的随机组“a”和随机组“b”形成,我们将找到每组的平均值。
- 然后,我们将从随机组“a”中减去随机组“b”的平均值,并将其添加到步骤 1 中初始化的列表中。
- 最后,我们将创建一个直方图来可视化这个采样分布的频率。
随机化平均差异的直方图
从直方图中,我们可以看到均值中最常见的差异大约为 0。这与我们的测试统计非常不同。事实上,甚至没有显示测试统计值。p 值将为我们提供一种方法来量化均值差异的随机样本分布中检验统计值的次数。
p 值
在我们生成的抽样分布中,大部分值都以平均差 0 为中心。如果纯粹是偶然的话,这两个组更有可能产生相同的总销售额(零假设)。但是,由于观察到的测试统计量不接近 0,因此有可能是拥有一张剖面图导致了数据集中的平均差异。
让我们看看抽样分布,以确定 33,184 或更高的值出现的次数。然后我们可以将频率除以 1000。这将给我们 33,184 或更高的平均差异纯粹是由于随机机会的概率。
这个概率被称为 p 值。如果该值很高,这意味着测试统计很可能是随机发生的,并且配置文件图片可能不起作用。另一方面,低 p 值意味着我们观察到的平均差异是由随机机会引起的概率很小。
让我们创建一个 for 循环,它将检查我们的测试统计在我们随机生成的均值差异组中出现了多少次。然后我们将得到这个计数,并除以我们的总迭代次数(1000)。我们的输出将是 p 值。
结果
之前我们决定 p 值阈值为 0.05。0 小于 0.05,这意味着我们可以排除我们的测试统计是随机的结果。我们现在可以拒绝我们的零假设,并确认我们的替代假设。
最后的想法
统计显著性是检查数据和确定变量是否对最终结果有影响的一种很好的方法。在这个例子中,我们在 Python 的帮助下采取了一些步骤来确定拥有一张个人资料图片对一个商品的总销售额结果的统计意义。
虽然我们能够在 p 值的帮助下量化这种显著性,但我们仍然应该回过头来看看数据集。在做出任何重要结论之前,有几个问题需要解决。
- 我们来自 Wish.com 的样本数据集非常有限。它只包含夏季服装项目。最好能获得更多的数据,涵盖更长的时间段和更多种类的项目
- 售出物品数量不准确。在网站上,出售的项目计数列在范围,即 1000+,2500+等。收集数据时,加号肯定已经被删除了。最好能得到实际的数字。
- 虽然我们很快找到了异常值,但我们没有彻底检查这些项目,以确定是否有任何其他原因导致了简介图片组中的总销售额较高。可能还有一些我们没有考虑到的其他关联。
虽然可能需要更多的信息来决定是否有一个个人资料图片会导致更多的销售,但我们已经通过确定 p 值在正确的方向上迈出了一步。我们可以说,根据这个测试,拥有一张个人资料照片对 Wish.com 上一件商品的总销售额有着统计上的显著影响。
统计显著性是数据科学中的一个有用工具,当您需要知道一个结果是显著的还是偶然发生的时,应该理解并使用它来帮助做出决策。
带代码的 R 中的统计模拟—第一部分
破解数据科学面试
Ace 数据科学访谈
https://www.flickr.com/photos/86689809@N00/157763181/
这是关于统计模拟的两篇文章的第一部分。如果您还没有看过第 2 部分,请点击这里:
任何数据科学面试最重要的部分!
towardsdatascience.com](/statistical-simulation-in-python-part-2-91f71f474f77)
介绍
在过去的几个月里,我收到了一些顶级科技公司的数据科学面试。几乎所有的面试官都要求我对一个真实的商业场景进行统计模拟,但我没能给他们留下深刻印象。
你知道,这些都是合理的问题,如果我以前接触过这个话题,并不难回答。
直到今天,我已经花了数百个小时学习模拟,准备接下来的技术面试。
统计模拟是一个相当广泛的领域,不可能在一篇文章中涵盖所有细节。作为一个初学者,我计划通过一系列的帖子来展示模拟的细微差别和应用。
定义
现实世界中,事情是随机发生的,有无限多种可能。我们可能只能观察到一部分,而不是全部的可能性。
模拟派上了用场,并提供了与现实世界结果相匹配的可能性分布的快速概览。通过研究模拟结果,我们可以洞察真实世界。
生成随机数
让我们从最简单的代码开始,然后进入更复杂的场景。
命令 runif(x,min=a,max=b) 在 a 和 b 之间的范围内生成 x 个值。
library(dplyr)set.seed(2)
runif(25,min=0,max=10)
随机值
set.seed() 函数为 R 的随机数生成器设置一个种子,这样我们每次运行代码时都会得到一致的相同值。否则,我们会得到不同的结果。自己试试。
为了得到整数,我们使用 圆整 函数,如下:
runif(25,min=0,max=10) %>%
round(.,digits = 0)
围捕它
这里的管道, % > % ,来自magritter包,可以让你写出更干净易懂的代码。它可以用简单的英语翻译成‘那么’
在英语中,上面两行代码的意思是:
- 生成 25 个介于 0 和 10 之间的数字
- 然后 ( % > % ),将数字向上舍入到最接近的整数。
试试如果你把数字调整为 1 会发生什么。
生成随机数的另一种方式是通过的 样本 函数生成*😗
> sample(x, size, replace=TRUE, prob=NULL)
- x:一个向量或正整数
- size:一个非负整数,给出可供选择的项目数
- 替换:有替换的样本,还是没有?
- prob:概率权重向量,用于获取被采样向量的元素
(更多信息请参考 R 文档,链接)
一个简单的例子。
set.seed(24)
sample(seq(1,10),8)
set.seed() 函数使结果可重现。
上面的代码从序列[1,10]中生成 8 个数字的随机样本。正如你所看到的,我们没有为替换和选择的概率设定规则。
默认情况下,R 将替换设置为 FALSE,并采用相等的选择概率。
x = 1:10
sample(x,replace=TRUE)
替换重采样的过程被称为 引导 ,这是一个更高级的主题,将在下一章讨论。
除了数字,我们还可以对单词进行采样,如下所示:
set.seed(1)
sample(letters,18)
相等和不相等的选择概率
#场景 1 等概率
我们以相等的概率从序列[1,5]中生成大小为 10 的随机样本。
equal_prob_dist = sample(5,10000,***prob=rep(0.1,5)***,replace=T)
hist(equal_prob_dist)
同等概率
如果我们设置 prob=rep(0.1,5) ,,那么数字 1 到 5 将被平均采样,如上面的直方图所示。
#场景二不等概率
如果选择的概率不相等(例如,一个装载的骰子),分布看起来像什么?
我们从概率不等的序列[1,5]中生成大小为 10 的随机样本
unequal_prob_dist = sample(5,10000,***prob =c(0.1,0.25,0.4,0.25,0.1)***, replace=T)
hist(unequal_prob_dist)
不平等的概率
我们为序列设置以下选择概率规则:
1 & 5: 0.12 & 4: 0.25 3: 0.4
事实证明,数字 3 是选择最多的,1 & 5 是选择最少的。
如果感兴趣的问题需要对选择概率进行不同的处理,这些相等/不相等的场景会非常有帮助。
数据框中的样本观测值
为了对数据框或列表中的观察值(行)进行采样,我们不直接对行进行采样,而是对对象中的索引进行采样。
head(mtcars)
# step 1: create an index vector for the elements/rows
index <- seq_len(nrow(mtcars))
# step 2: sample the index vector
set.seed(12)#to obtain a random sample of 10
sample_index <- sample(index,10)# step 3: to show the sampled elements/rows
mtcars[sample_index,]
应用
在这一节中,让我们进行一些实践,并解决现实生活中的业务场景。
问题 1:有两个六面骰子。如果把它们一起掷出,掷出 7 的概率是多少?
set.seed(1)
die = 1:6# sample 10000 times with replacements for dice 1
die1 = sample(die,10000,replace = TRUE,prob=NULL)# sample 10000 times with replacements for dice 2
die2= sample(die,10000,replace=TRUE,prob = NULL)# the combined value of die_1 and die_2
outcomes = die1+die2# the probability of getting a 7
mean(outcomes == 7)
同样,我们可以用一个 来代替 循环来达到同样的目的。
set.seed(1)
for (i in 10000){
die_1 = sample(die,prob=NULL,replace=TRUE)
die_2 = sample(die,prob=NULL,replace=TRUE)
die_sum = die_1+die_2
print(mean(die_sum==7))
}
这两种结局几乎一样。
问题 2:你有两个骰子。掷出 2,3,4,5,6,7,8,9,10,11,12,13 的概率是多少?
除了模拟每一种结果,还有一种更简单的方法来获得我们需要的东西,那就是使用sappy。
sapply(2:13,function(x) mean(outcomes==x))
根据 R 文档,sapply
()函数是一个“用户友好的版本和默认情况下的lapply
包装器,通过应用simplify2array()
返回一个向量、矩阵或者如果simplify = "array"
的话,一个数组。sapply(x, f, simplify = FALSE, USE.NAMES = FALSE)
与lapply(x, f)
相同
简言之,该函数将函数 mean(outcomes) 应用于序列【2,13】。
问你一个问题:如果你有 3 个骰子,掷出 7 的概率是多少?
问题 3:生成 10000 个值的随机样本,其中包含多少个独特的观察值?不包括多少?
set.seed(1)
n=10000included_obs = length(unique(sample(1:n, replace = TRUE)))
included_obsmissing_obs = n-included_obs
missing_obs
采样后,我们用***【unique()】来寻找有区别的观测值,用【length()***来计数。在 10k 样本中,对 6316 个不同的案例进行采样,而对 3684 个(10k-6316)案例不进行采样。
进一步注意,我们在 10k 中只得到 6316 的原因是我们用替换进行采样,因此一些数字被重复采样。换句话说,一些数字被多次采样。
问题 4:用随机分配的 0 和 1 生成一个 m*n 矩阵。
(鸣谢 R-bloggers 上的讨论, 此处 )
在最初的帖子中,作者介绍了多种方法,我在这里重点介绍第一种方法。
首先,我们可以使用 for 循环。
m <- 10
n <- 10# create an empty matrix
m00 <- matrix(0,m,n)for (i in 1:m) {
for (j in 1:n) {
m00[i,j] <- sample(c(0,1),1)
}
}m00
这里, matrix(0,m,n) 通过 m*n 创建一个空矩阵,两个 for 循环规定了每个单元格的值。
大多数时候,R 中的 循环的 可能不是最有效的解决方案,如果样本量足够大,我们将使用其他选项。
考虑到这一点,作者贡献了使用 apply() 函数的第二种方法。
m <-10
n<-10m0 <- matrix(0,m,n)apply(m0,c(1,2),function(x) sample(c(0,1),1))
到目前为止,除了 apply() 函数之外,其他的应该都很熟悉了。它返回“通过将函数应用于数组或矩阵的边距而获得的向量/数组/值列表”(原始定义,链接)。
它具有以下形式:
> apply(x, margin, fun,…)
- x:一个数组或矩阵
- margin:一个向量,给出函数将要应用的下标。对于矩阵,1 表示行,2 表示列。 c(1,2) 表示行和列,其中 x 已命名 dimnames,可以是选择维名的字符向量
- 乐趣:要应用的功能
问题 5:抛硬币 10 次,模拟过程 10000 次。显示抬头数量的分布。
# create an empty list
total_heads = c()# use a for loop to simulate coin-flipping 10 times
# repeat it for 10,000 timesfor (i in 1:10000){
sum_heads = sum(round(runif(10,0,1)))
total_heads = c(total_heads, sum_heads)
}hist(total_heads)
在这里,我将解释三行代码,其余的就不言自明了。
- 为(1:1000 中的 1)。 不像其他编程语言,你要把范围指定为 1:10000。
- sum(round(runif(10,0,1))) 。这是一种结构化的编码方式,有三个独立的功能:runif() → round() → sum()。它首先运行 runif()函数,最后运行 sum()。基本上,代码行生成 10 个介于 0 和 1 之间的随机数,将其四舍五入为最接近的整数(0 或 1),最后求和。
- total _ heads = c(total _ heads,sum_heads)。 由于 total_heads 开头是一个空列表,我们用这行代码把 sum_heads 的值赋给 total_heads。
感谢您的阅读!
这是一篇关于统计模拟的介绍文章,我们将在接下来的文章中探讨更高级的话题。
敬请期待!
Medium 最近进化出了它的 作家伙伴计划 ,支持像我这样的普通作家。如果你还不是订户,通过下面的链接注册,我会收到一部分会员费。
[## 阅读叶雷华博士研究员(以及其他成千上万的媒体作家)的每一个故事
作为一个媒体会员,你的会员费的一部分会给你阅读的作家,你可以完全接触到每一个故事…
leihua-ye.medium.com](https://leihua-ye.medium.com/membership)
喜欢读这本书吗?
还有,看看我其他关于人工智能和机器学习的帖子。